#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 {
namespace {
-base::PlatformFileError FindAlbumInfo(const std::string& key,
- const AlbumMap* map,
- AlbumInfo* album_info) {
+base::File::Error FindAlbumInfo(const std::string& key,
+ const AlbumMap* map,
+ AlbumInfo* album_info) {
if (!map)
- return base::PLATFORM_FILE_ERROR_FAILED;
+ return base::File::FILE_ERROR_FAILED;
AlbumMap::const_iterator it = map->find(key);
if (it == map->end())
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ return base::File::FILE_ERROR_NOT_FOUND;
if (album_info != NULL)
*album_info = it->second;
- return base::PLATFORM_FILE_OK;
+ 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::PlatformFileError PicasaFileUtil::GetFileInfoSync(
+base::File::Error PicasaFileUtil::GetFileInfoSync(
FileSystemOperationContext* context, const FileSystemURL& url,
- base::PlatformFileInfo* file_info, base::FilePath* platform_path) {
+ base::File::Info* file_info, base::FilePath* platform_path) {
DCHECK(context);
DCHECK(file_info);
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:
// Root directory.
file_info->is_directory = true;
- return base::PLATFORM_FILE_OK;
+ return base::File::FILE_OK;
case 1:
if (components[0] == kPicasaDirAlbums ||
components[0] == kPicasaDirFolders) {
file_info->is_directory = true;
- return base::PLATFORM_FILE_OK;
+ return base::File::FILE_OK;
}
break;
case 2:
if (components[0] == kPicasaDirAlbums) {
scoped_ptr<AlbumMap> album_map = GetDataProvider()->GetAlbums();
- base::PlatformFileError error =
+ base::File::Error error =
FindAlbumInfo(components[1], album_map.get(), NULL);
- if (error != base::PLATFORM_FILE_OK)
+ if (error != base::File::FILE_OK)
return error;
file_info->is_directory = true;
- return base::PLATFORM_FILE_OK;
+ return base::File::FILE_OK;
}
if (components[0] == kPicasaDirFolders) {
// NativeMediaFileUtil::GetInfo calls into virtual function
// PicasaFileUtil::GetLocalFilePath, and that will handle both
// album contents and folder contents.
- base::PlatformFileError result = NativeMediaFileUtil::GetFileInfoSync(
+ base::File::Error result = NativeMediaFileUtil::GetFileInfoSync(
context, url, file_info, platform_path);
DCHECK(components[0] == kPicasaDirAlbums ||
components[0] == kPicasaDirFolders ||
- result == base::PLATFORM_FILE_ERROR_NOT_FOUND);
+ result == base::File::FILE_ERROR_NOT_FOUND);
return result;
}
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ return base::File::FILE_ERROR_NOT_FOUND;
}
-base::PlatformFileError PicasaFileUtil::ReadDirectorySync(
- fileapi::FileSystemOperationContext* context,
- const fileapi::FileSystemURL& url,
+base::File::Error PicasaFileUtil::ReadDirectorySync(
+ storage::FileSystemOperationContext* context,
+ const storage::FileSystemURL& url,
EntryList* file_list) {
DCHECK(context);
DCHECK(file_list);
DCHECK(file_list->empty());
- base::PlatformFileInfo file_info;
+ base::File::Info file_info;
base::FilePath platform_directory_path;
- base::PlatformFileError error = GetFileInfoSync(
+ base::File::Error error = GetFileInfoSync(
context, url, &file_info, &platform_directory_path);
- if (error != base::PLATFORM_FILE_OK)
+ if (error != base::File::FILE_OK)
return error;
if (!file_info.is_directory)
- return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
-
- std::vector<std::string> components;
- fileapi::VirtualPath::GetComponentsUTF8Unsafe(url.path(), &components);
+ return base::File::FILE_ERROR_NOT_A_DIRECTORY;
+ std::vector<std::string> components = GetVirtualPathComponents(url);
switch (components.size()) {
case 0: {
// Root directory.
if (components[0] == kPicasaDirAlbums) {
scoped_ptr<AlbumMap> albums = GetDataProvider()->GetAlbums();
if (!albums)
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ return base::File::FILE_ERROR_NOT_FOUND;
for (AlbumMap::const_iterator it = albums->begin();
it != albums->end(); ++it) {
} else if (components[0] == kPicasaDirFolders) {
scoped_ptr<AlbumMap> folders = GetDataProvider()->GetFolders();
if (!folders)
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ return base::File::FILE_ERROR_NOT_FOUND;
for (AlbumMap::const_iterator it = folders->begin();
it != folders->end(); ++it) {
if (components[0] == kPicasaDirAlbums) {
scoped_ptr<AlbumMap> album_map = GetDataProvider()->GetAlbums();
AlbumInfo album_info;
- base::PlatformFileError error =
+ base::File::Error error =
FindAlbumInfo(components[1], album_map.get(), &album_info);
- if (error != base::PLATFORM_FILE_OK)
+ if (error != base::File::FILE_OK)
return error;
scoped_ptr<AlbumImages> album_images =
GetDataProvider()->FindAlbumImages(album_info.uid, &error);
- if (error != base::PLATFORM_FILE_OK)
+ if (error != base::File::FILE_OK)
return error;
for (AlbumImages::const_iterator it = album_images->begin();
it != album_images->end();
++it) {
- fileapi::DirectoryEntry entry;
- base::PlatformFileInfo info;
+ storage::DirectoryEntry entry;
+ base::File::Info info;
// Simply skip files that we can't get info on.
- if (fileapi::NativeFileUtil::GetFileInfo(it->second, &info) !=
- base::PLATFORM_FILE_OK) {
+ if (storage::NativeFileUtil::GetFileInfo(it->second, &info) !=
+ base::File::FILE_OK) {
continue;
}
if (components[0] == kPicasaDirFolders) {
EntryList super_list;
- base::PlatformFileError error =
+ base::File::Error error =
NativeMediaFileUtil::ReadDirectorySync(context, url, &super_list);
- if (error != base::PLATFORM_FILE_OK)
+ if (error != base::File::FILE_OK)
return error;
for (EntryList::const_iterator it = super_list.begin();
break;
}
- return base::PLATFORM_FILE_OK;
+ return base::File::FILE_OK;
+}
+
+base::File::Error PicasaFileUtil::DeleteDirectorySync(
+ storage::FileSystemOperationContext* context,
+ const storage::FileSystemURL& url) {
+ return base::File::FILE_ERROR_SECURITY;
+}
+
+base::File::Error PicasaFileUtil::DeleteFileSync(
+ storage::FileSystemOperationContext* context,
+ const storage::FileSystemURL& url) {
+ return base::File::FILE_ERROR_SECURITY;
}
-base::PlatformFileError PicasaFileUtil::GetLocalFilePath(
+base::File::Error PicasaFileUtil::GetLocalFilePath(
FileSystemOperationContext* context, const FileSystemURL& url,
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:
if (components[0] == kPicasaDirFolders) {
scoped_ptr<AlbumMap> album_map = GetDataProvider()->GetFolders();
AlbumInfo album_info;
- base::PlatformFileError error =
+ base::File::Error error =
FindAlbumInfo(components[1], album_map.get(), &album_info);
- if (error != base::PLATFORM_FILE_OK)
+ if (error != base::File::FILE_OK)
return error;
*local_file_path = album_info.path;
- return base::PLATFORM_FILE_OK;
+ return base::File::FILE_OK;
}
break;
case 3:
if (components[0] == kPicasaDirAlbums) {
scoped_ptr<AlbumMap> album_map = GetDataProvider()->GetAlbums();
AlbumInfo album_info;
- base::PlatformFileError error =
+ base::File::Error error =
FindAlbumInfo(components[1], album_map.get(), &album_info);
- if (error != base::PLATFORM_FILE_OK)
+ if (error != base::File::FILE_OK)
return error;
scoped_ptr<AlbumImages> album_images =
GetDataProvider()->FindAlbumImages(album_info.uid, &error);
- if (error != base::PLATFORM_FILE_OK)
+ if (error != base::File::FILE_OK)
return error;
AlbumImages::const_iterator it = album_images->find(components[2]);
if (it == album_images->end())
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ return base::File::FILE_ERROR_NOT_FOUND;
*local_file_path = it->second;
- return base::PLATFORM_FILE_OK;
+ return base::File::FILE_OK;
}
if (components[0] == kPicasaDirFolders) {
scoped_ptr<AlbumMap> album_map = GetDataProvider()->GetFolders();
AlbumInfo album_info;
- base::PlatformFileError error =
+ base::File::Error error =
FindAlbumInfo(components[1], album_map.get(), &album_info);
- if (error != base::PLATFORM_FILE_OK)
+ if (error != base::File::FILE_OK)
return error;
// Not part of this class's mandate to check that it actually exists.
*local_file_path = album_info.path.Append(url.path().BaseName());
- return base::PLATFORM_FILE_OK;
+ return base::File::FILE_OK;
}
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ return base::File::FILE_ERROR_NOT_FOUND;
break;
}
// All other cases don't have a local path. The valid cases should be
// intercepted by GetFileInfo()/CreateFileEnumerator(). Invalid cases
// return a NOT_FOUND error.
- return base::PLATFORM_FILE_ERROR_NOT_FOUND;
+ return base::File::FILE_ERROR_NOT_FOUND;
}
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) {
content::BrowserThread::PostTask(
content::BrowserThread::IO,
FROM_HERE,
- base::Bind(
- callback, base::PLATFORM_FILE_ERROR_IO, base::PlatformFileInfo()));
+ base::Bind(callback, base::File::FILE_ERROR_IO, base::File::Info()));
return;
}
NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread(
}
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) {
content::BrowserThread::PostTask(
content::BrowserThread::IO,
FROM_HERE,
- base::Bind(callback, base::PLATFORM_FILE_ERROR_IO, EntryList(), false));
+ base::Bind(callback, base::File::FILE_ERROR_IO, EntryList(), false));
return;
}
NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread(