Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / media_galleries / fileapi / picasa_file_util.cc
index 646f954..65a2c3c 100644 (file)
 #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 {
 
@@ -49,11 +49,24 @@ base::File::Error FindAlbumInfo(const std::string& key,
   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;
 
@@ -73,29 +86,43 @@ PicasaFileUtil::PicasaFileUtil(MediaPathFilter* media_path_filter)
 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(
@@ -107,8 +134,7 @@ 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:
@@ -158,8 +184,8 @@ base::File::Error PicasaFileUtil::GetFileInfoSync(
 }
 
 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);
@@ -176,9 +202,7 @@ base::File::Error PicasaFileUtil::ReadDirectorySync(
   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.
@@ -232,11 +256,11 @@ base::File::Error PicasaFileUtil::ReadDirectorySync(
         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;
           }
@@ -267,14 +291,14 @@ base::File::Error PicasaFileUtil::ReadDirectorySync(
 }
 
 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;
 }
 
@@ -283,8 +307,7 @@ base::File::Error PicasaFileUtil::GetLocalFilePath(
     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:
@@ -346,8 +369,8 @@ base::File::Error PicasaFileUtil::GetLocalFilePath(
 }
 
 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) {
@@ -362,8 +385,8 @@ void PicasaFileUtil::GetFileInfoWithFreshDataProvider(
 }
 
 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) {