Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(408)

Unified Diff: chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc

Issue 538873002: [fsp] Wire FSP to chrome.fileBrowserPrivate.getEntryProperties(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_apitest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
index ba42b9f3f9dc9f2a6b4f3604829e2036024d2bdc..34dff8ad9e16cee121d3994ed549a23533449c4e 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
@@ -11,6 +11,8 @@
#include "chrome/browser/chromeos/file_manager/file_tasks.h"
#include "chrome/browser/chromeos/file_manager/fileapi_util.h"
#include "chrome/browser/chromeos/file_manager/url_util.h"
+#include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
#include "chrome/browser/chromeos/fileapi/file_system_backend.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/drive/drive_app_registry.h"
@@ -29,13 +31,16 @@
using content::BrowserThread;
+using chromeos::file_system_provider::EntryMetadata;
+using chromeos::file_system_provider::ProvidedFileSystemInterface;
+using chromeos::file_system_provider::util::FileSystemURLParser;
+using extensions::api::file_browser_private::EntryProperties;
using file_manager::util::EntryDefinition;
using file_manager::util::EntryDefinitionCallback;
using file_manager::util::EntryDefinitionList;
using file_manager::util::EntryDefinitionListCallback;
using file_manager::util::FileDefinition;
using file_manager::util::FileDefinitionList;
-using extensions::api::file_browser_private::EntryProperties;
namespace extensions {
namespace {
@@ -54,9 +59,9 @@ const char kDriveConnectionReasonNoService[] = "no_service";
// Copies properties from |entry_proto| to |properties|. |shared_with_me| is
// given from the running profile.
-void FillEntryPropertiesValue(const drive::ResourceEntry& entry_proto,
- bool shared_with_me,
- EntryProperties* properties) {
+void FillEntryPropertiesValueForDrive(const drive::ResourceEntry& entry_proto,
+ bool shared_with_me,
+ EntryProperties* properties) {
properties->shared_with_me.reset(new bool(shared_with_me));
properties->shared.reset(new bool(entry_proto.shared()));
@@ -154,6 +159,8 @@ class SingleEntryPropertiesGetterForDrive {
static void Start(const base::FilePath local_path,
Profile* const profile,
const ResultCallback& callback) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
SingleEntryPropertiesGetterForDrive* instance =
new SingleEntryPropertiesGetterForDrive(local_path, profile, callback);
instance->StartProcess();
@@ -164,19 +171,6 @@ class SingleEntryPropertiesGetterForDrive {
virtual ~SingleEntryPropertiesGetterForDrive() {}
private:
- // Given parameters.
- const ResultCallback callback_;
- const base::FilePath local_path_;
- Profile* const running_profile_;
-
- // Values used in the process.
- scoped_ptr<EntryProperties> properties_;
- Profile* file_owner_profile_;
- base::FilePath file_path_;
- scoped_ptr<drive::ResourceEntry> owner_resource_entry_;
-
- base::WeakPtrFactory<SingleEntryPropertiesGetterForDrive> weak_ptr_factory_;
-
SingleEntryPropertiesGetterForDrive(const base::FilePath local_path,
Profile* const profile,
const ResultCallback& callback)
@@ -190,10 +184,6 @@ class SingleEntryPropertiesGetterForDrive {
DCHECK(profile);
}
- base::WeakPtr<SingleEntryPropertiesGetterForDrive> GetWeakPtr() {
- return weak_ptr_factory_.GetWeakPtr();
- }
-
void StartProcess() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -219,7 +209,7 @@ class SingleEntryPropertiesGetterForDrive {
file_system->GetResourceEntry(
file_path_,
base::Bind(&SingleEntryPropertiesGetterForDrive::OnGetFileInfo,
- GetWeakPtr()));
+ weak_ptr_factory_.GetWeakPtr()));
}
void OnGetFileInfo(drive::FileError error,
@@ -250,7 +240,7 @@ class SingleEntryPropertiesGetterForDrive {
file_system->GetPathFromResourceId(
owner_resource_entry_->resource_id(),
base::Bind(&SingleEntryPropertiesGetterForDrive::OnGetRunningPath,
- GetWeakPtr()));
+ weak_ptr_factory_.GetWeakPtr()));
}
void OnGetRunningPath(drive::FileError error,
@@ -274,7 +264,7 @@ class SingleEntryPropertiesGetterForDrive {
file_system->GetResourceEntry(
file_path,
base::Bind(&SingleEntryPropertiesGetterForDrive::OnGetShareInfo,
- GetWeakPtr()));
+ weak_ptr_factory_.GetWeakPtr()));
}
void OnGetShareInfo(drive::FileError error,
@@ -286,14 +276,14 @@ class SingleEntryPropertiesGetterForDrive {
return;
}
- DCHECK(entry);
+ DCHECK(entry.get());
StartParseFileInfo(entry->shared_with_me());
}
void StartParseFileInfo(bool shared_with_me) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- FillEntryPropertiesValue(
+ FillEntryPropertiesValueForDrive(
*owner_resource_entry_, shared_with_me, properties_.get());
drive::FileSystemInterface* const file_system =
@@ -307,7 +297,7 @@ class SingleEntryPropertiesGetterForDrive {
}
// The properties meaningful for directories are already filled in
- // FillEntryPropertiesValue().
+ // FillEntryPropertiesValueForDrive().
if (!owner_resource_entry_->has_file_specific_info()) {
CompleteGetEntryProperties(drive::FILE_ERROR_OK);
return;
@@ -350,9 +340,107 @@ class SingleEntryPropertiesGetterForDrive {
DCHECK(!callback_.is_null());
callback_.Run(properties_.Pass(), drive::FileErrorToBaseFileError(error));
+ BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, this);
+ }
+
+ // Given parameters.
+ const ResultCallback callback_;
+ const base::FilePath local_path_;
+ Profile* const running_profile_;
+
+ // Values used in the process.
+ scoped_ptr<EntryProperties> properties_;
+ Profile* file_owner_profile_;
+ base::FilePath file_path_;
+ scoped_ptr<drive::ResourceEntry> owner_resource_entry_;
+
+ base::WeakPtrFactory<SingleEntryPropertiesGetterForDrive> weak_ptr_factory_;
+}; // class SingleEntryPropertiesGetterForDrive
+
+class SingleEntryPropertiesGetterForFileSystemProvider {
+ public:
+ typedef base::Callback<void(scoped_ptr<EntryProperties> properties,
+ base::File::Error error)> ResultCallback;
- delete this;
+ // Creates an instance and starts the process.
+ static void Start(const storage::FileSystemURL file_system_url,
+ const ResultCallback& callback) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ SingleEntryPropertiesGetterForFileSystemProvider* instance =
+ new SingleEntryPropertiesGetterForFileSystemProvider(file_system_url,
+ callback);
+ instance->StartProcess();
+
+ // The instance will be destroyed by itself.
+ }
+
+ virtual ~SingleEntryPropertiesGetterForFileSystemProvider() {}
+
+ private:
+ SingleEntryPropertiesGetterForFileSystemProvider(
+ const storage::FileSystemURL& file_system_url,
+ const ResultCallback& callback)
+ : callback_(callback),
+ file_system_url_(file_system_url),
+ properties_(new EntryProperties),
+ weak_ptr_factory_(this) {
+ DCHECK(!callback_.is_null());
+ }
+
+ void StartProcess() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ FileSystemURLParser parser(file_system_url_);
+ if (!parser.Parse()) {
+ CompleteGetEntryProperties(base::File::FILE_ERROR_NOT_FOUND);
+ return;
+ }
+
+ parser.file_system()->GetMetadata(
+ parser.file_path(),
+ ProvidedFileSystemInterface::METADATA_FIELD_THUMBNAIL,
+ base::Bind(&SingleEntryPropertiesGetterForFileSystemProvider::
+ OnGetMetadataCompleted,
+ weak_ptr_factory_.GetWeakPtr()));
}
+
+ void OnGetMetadataCompleted(scoped_ptr<EntryMetadata> metadata,
+ base::File::Error result) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ if (result != base::File::FILE_OK) {
+ CompleteGetEntryProperties(result);
+ return;
+ }
+
+ properties_->file_size.reset(new double(metadata->size));
+ properties_->last_modified_time.reset(
+ new double(metadata->modification_time.ToJsTime()));
+
+ if (!metadata->thumbnail.empty())
+ properties_->thumbnail_url.reset(new std::string(metadata->thumbnail));
+
+ CompleteGetEntryProperties(base::File::FILE_OK);
+ }
+
+ void CompleteGetEntryProperties(base::File::Error result) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(!callback_.is_null());
+
+ callback_.Run(properties_.Pass(), result);
+ BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, this);
+ }
+
+ // Given parameters.
+ const ResultCallback callback_;
+ const storage::FileSystemURL file_system_url_;
+
+ // Values used in the process.
+ scoped_ptr<EntryProperties> properties_;
+
+ base::WeakPtrFactory<SingleEntryPropertiesGetterForFileSystemProvider>
+ weak_ptr_factory_;
}; // class SingleEntryPropertiesGetterForDrive
} // namespace
@@ -393,14 +481,18 @@ bool FileBrowserPrivateGetEntryPropertiesFunction::RunAsync() {
i));
break;
case storage::kFileSystemTypeProvided:
- // TODO(mtomasz): Add support for provided file systems.
- NOTIMPLEMENTED();
+ SingleEntryPropertiesGetterForFileSystemProvider::Start(
+ file_system_url,
+ base::Bind(&FileBrowserPrivateGetEntryPropertiesFunction::
+ CompleteGetEntryProperties,
+ this,
+ i));
break;
default:
LOG(ERROR) << "Not supported file system type.";
CompleteGetEntryProperties(i,
- make_scoped_ptr(new EntryProperties),
- base::File::FILE_ERROR_INVALID_OPERATION);
+ make_scoped_ptr(new EntryProperties),
+ base::File::FILE_ERROR_INVALID_OPERATION);
}
}
« no previous file with comments | « no previous file | chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698