#include "chrome/browser/media_galleries/imported_media_gallery_registry.h"
#include "chrome/common/media_galleries/picasa_types.h"
#include "content/public/browser/browser_thread.h"
-#include "webkit/browser/fileapi/file_system_operation_context.h"
-#include "webkit/browser/fileapi/file_system_url.h"
-#include "webkit/browser/fileapi/native_file_util.h"
-#include "webkit/common/fileapi/file_system_util.h"
+#include "storage/browser/fileapi/file_system_operation_context.h"
+#include "storage/browser/fileapi/file_system_url.h"
+#include "storage/browser/fileapi/native_file_util.h"
+#include "storage/common/fileapi/file_system_util.h"
using base::FilePath;
-using fileapi::DirectoryEntry;
-using fileapi::FileSystemOperationContext;
-using fileapi::FileSystemURL;
+using storage::DirectoryEntry;
+using storage::FileSystemOperationContext;
+using storage::FileSystemURL;
namespace picasa {
return base::File::FILE_OK;
}
-PicasaDataProvider::DataType GetDataTypeForURL(
- const fileapi::FileSystemURL& url) {
- std::vector<std::string> components;
- fileapi::VirtualPath::GetComponentsUTF8Unsafe(url.path(), &components);
+std::vector<std::string> GetVirtualPathComponents(
+ const storage::FileSystemURL& url) {
+ ImportedMediaGalleryRegistry* imported_registry =
+ ImportedMediaGalleryRegistry::GetInstance();
+ base::FilePath root = imported_registry->ImportedRoot().AppendASCII("picasa");
+
+ DCHECK(root.IsParent(url.path()) || root == url.path());
+ base::FilePath virtual_path;
+ root.AppendRelativePath(url.path(), &virtual_path);
+
+ std::vector<std::string> result;
+ storage::VirtualPath::GetComponentsUTF8Unsafe(virtual_path, &result);
+ return result;
+}
+PicasaDataProvider::DataType GetDataTypeForURL(
+ const storage::FileSystemURL& url) {
+ std::vector<std::string> components = GetVirtualPathComponents(url);
if (components.size() >= 2 && components[0] == kPicasaDirAlbums)
return PicasaDataProvider::ALBUMS_IMAGES_DATA;
PicasaFileUtil::~PicasaFileUtil() {}
void PicasaFileUtil::GetFileInfoOnTaskRunnerThread(
- scoped_ptr<fileapi::FileSystemOperationContext> context,
- const fileapi::FileSystemURL& url,
+ scoped_ptr<storage::FileSystemOperationContext> context,
+ const storage::FileSystemURL& url,
const GetFileInfoCallback& callback) {
- GetDataProvider()->RefreshData(
- GetDataTypeForURL(url),
- base::Bind(&PicasaFileUtil::GetFileInfoWithFreshDataProvider,
- weak_factory_.GetWeakPtr(),
- base::Passed(&context),
- url,
- callback));
+ PicasaDataProvider* data_provider = GetDataProvider();
+ // |data_provider| may be NULL if the file system was revoked before this
+ // operation had a chance to run.
+ if (!data_provider) {
+ GetFileInfoWithFreshDataProvider(context.Pass(), url, callback, false);
+ } else {
+ data_provider->RefreshData(
+ GetDataTypeForURL(url),
+ base::Bind(&PicasaFileUtil::GetFileInfoWithFreshDataProvider,
+ weak_factory_.GetWeakPtr(),
+ base::Passed(&context),
+ url,
+ callback));
+ }
}
void PicasaFileUtil::ReadDirectoryOnTaskRunnerThread(
- scoped_ptr<fileapi::FileSystemOperationContext> context,
- const fileapi::FileSystemURL& url,
+ scoped_ptr<storage::FileSystemOperationContext> context,
+ const storage::FileSystemURL& url,
const ReadDirectoryCallback& callback) {
- GetDataProvider()->RefreshData(
- GetDataTypeForURL(url),
- base::Bind(&PicasaFileUtil::ReadDirectoryWithFreshDataProvider,
- weak_factory_.GetWeakPtr(),
- base::Passed(&context),
- url,
- callback));
+ PicasaDataProvider* data_provider = GetDataProvider();
+ // |data_provider| may be NULL if the file system was revoked before this
+ // operation had a chance to run.
+ if (!data_provider) {
+ ReadDirectoryWithFreshDataProvider(context.Pass(), url, callback, false);
+ } else {
+ data_provider->RefreshData(
+ GetDataTypeForURL(url),
+ base::Bind(&PicasaFileUtil::ReadDirectoryWithFreshDataProvider,
+ weak_factory_.GetWeakPtr(),
+ base::Passed(&context),
+ url,
+ callback));
+ }
}
base::File::Error PicasaFileUtil::GetFileInfoSync(
if (platform_path)
*platform_path = base::FilePath();
- std::vector<std::string> components;
- fileapi::VirtualPath::GetComponentsUTF8Unsafe(url.path(), &components);
+ std::vector<std::string> components = GetVirtualPathComponents(url);
switch (components.size()) {
case 0:
}
base::File::Error PicasaFileUtil::ReadDirectorySync(
- fileapi::FileSystemOperationContext* context,
- const fileapi::FileSystemURL& url,
+ storage::FileSystemOperationContext* context,
+ const storage::FileSystemURL& url,
EntryList* file_list) {
DCHECK(context);
DCHECK(file_list);
if (!file_info.is_directory)
return base::File::FILE_ERROR_NOT_A_DIRECTORY;
- std::vector<std::string> components;
- fileapi::VirtualPath::GetComponentsUTF8Unsafe(url.path(), &components);
-
+ std::vector<std::string> components = GetVirtualPathComponents(url);
switch (components.size()) {
case 0: {
// Root directory.
for (AlbumImages::const_iterator it = album_images->begin();
it != album_images->end();
++it) {
- fileapi::DirectoryEntry entry;
+ storage::DirectoryEntry entry;
base::File::Info info;
// Simply skip files that we can't get info on.
- if (fileapi::NativeFileUtil::GetFileInfo(it->second, &info) !=
+ if (storage::NativeFileUtil::GetFileInfo(it->second, &info) !=
base::File::FILE_OK) {
continue;
}
}
base::File::Error PicasaFileUtil::DeleteDirectorySync(
- fileapi::FileSystemOperationContext* context,
- const fileapi::FileSystemURL& url) {
+ storage::FileSystemOperationContext* context,
+ const storage::FileSystemURL& url) {
return base::File::FILE_ERROR_SECURITY;
}
base::File::Error PicasaFileUtil::DeleteFileSync(
- fileapi::FileSystemOperationContext* context,
- const fileapi::FileSystemURL& url) {
+ storage::FileSystemOperationContext* context,
+ const storage::FileSystemURL& url) {
return base::File::FILE_ERROR_SECURITY;
}
base::FilePath* local_file_path) {
DCHECK(local_file_path);
DCHECK(url.is_valid());
- std::vector<std::string> components;
- fileapi::VirtualPath::GetComponentsUTF8Unsafe(url.path(), &components);
+ std::vector<std::string> components = GetVirtualPathComponents(url);
switch (components.size()) {
case 2:
}
void PicasaFileUtil::GetFileInfoWithFreshDataProvider(
- scoped_ptr<fileapi::FileSystemOperationContext> context,
- const fileapi::FileSystemURL& url,
+ scoped_ptr<storage::FileSystemOperationContext> context,
+ const storage::FileSystemURL& url,
const GetFileInfoCallback& callback,
bool success) {
if (!success) {
}
void PicasaFileUtil::ReadDirectoryWithFreshDataProvider(
- scoped_ptr<fileapi::FileSystemOperationContext> context,
- const fileapi::FileSystemURL& url,
+ scoped_ptr<storage::FileSystemOperationContext> context,
+ const storage::FileSystemURL& url,
const ReadDirectoryCallback& callback,
bool success) {
if (!success) {