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 bd8d719d580bfa0678d5fb5d8be36fb8a2d4a8b5..1a293c9f6c6282e2eed575967fcda66f39b55f89 100644 |
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc |
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc |
@@ -35,7 +35,7 @@ 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::DriveEntryProperties; |
+using extensions::api::file_browser_private::EntryProperties; |
namespace extensions { |
namespace { |
@@ -54,9 +54,9 @@ const char kDriveConnectionReasonNoService[] = "no_service"; |
// Copies properties from |entry_proto| to |properties|. |shared_with_me| is |
// given from the running profile. |
-void FillDriveEntryPropertiesValue(const drive::ResourceEntry& entry_proto, |
- bool shared_with_me, |
- DriveEntryProperties* properties) { |
+void FillEntryPropertiesValue(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())); |
@@ -124,55 +124,52 @@ void ConvertSearchResultInfoListToEntryDefinitionList( |
callback); |
} |
-class SingleDriveEntryPropertiesGetter { |
+class SingleEntryPropertiesGetterForDrive { |
public: |
- typedef base::Callback<void(drive::FileError error)> ResultCallback; |
+ typedef base::Callback<void(scoped_ptr<EntryProperties> properties, |
+ base::File::Error error)> ResultCallback; |
// Creates an instance and starts the process. |
static void Start(const base::FilePath local_path, |
- linked_ptr<DriveEntryProperties> properties, |
Profile* const profile, |
const ResultCallback& callback) { |
- |
- SingleDriveEntryPropertiesGetter* instance = |
- new SingleDriveEntryPropertiesGetter( |
- local_path, properties, profile, callback); |
+ SingleEntryPropertiesGetterForDrive* instance = |
+ new SingleEntryPropertiesGetterForDrive(local_path, profile, callback); |
instance->StartProcess(); |
// The instance will be destroyed by itself. |
} |
- virtual ~SingleDriveEntryPropertiesGetter() {} |
+ virtual ~SingleEntryPropertiesGetterForDrive() {} |
private: |
// Given parameters. |
const ResultCallback callback_; |
const base::FilePath local_path_; |
- const linked_ptr<DriveEntryProperties> properties_; |
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<SingleDriveEntryPropertiesGetter> weak_ptr_factory_; |
+ base::WeakPtrFactory<SingleEntryPropertiesGetterForDrive> weak_ptr_factory_; |
- SingleDriveEntryPropertiesGetter(const base::FilePath local_path, |
- linked_ptr<DriveEntryProperties> properties, |
- Profile* const profile, |
- const ResultCallback& callback) |
+ SingleEntryPropertiesGetterForDrive(const base::FilePath local_path, |
+ Profile* const profile, |
+ const ResultCallback& callback) |
: callback_(callback), |
local_path_(local_path), |
- properties_(properties), |
running_profile_(profile), |
+ properties_(new EntryProperties), |
file_owner_profile_(NULL), |
weak_ptr_factory_(this) { |
DCHECK(!callback_.is_null()); |
DCHECK(profile); |
} |
- base::WeakPtr<SingleDriveEntryPropertiesGetter> GetWeakPtr() { |
+ base::WeakPtr<SingleEntryPropertiesGetterForDrive> GetWeakPtr() { |
return weak_ptr_factory_.GetWeakPtr(); |
} |
@@ -200,7 +197,7 @@ class SingleDriveEntryPropertiesGetter { |
file_system->GetResourceEntry( |
file_path_, |
- base::Bind(&SingleDriveEntryPropertiesGetter::OnGetFileInfo, |
+ base::Bind(&SingleEntryPropertiesGetterForDrive::OnGetFileInfo, |
GetWeakPtr())); |
} |
@@ -231,7 +228,7 @@ class SingleDriveEntryPropertiesGetter { |
} |
file_system->GetPathFromResourceId( |
owner_resource_entry_->resource_id(), |
- base::Bind(&SingleDriveEntryPropertiesGetter::OnGetRunningPath, |
+ base::Bind(&SingleEntryPropertiesGetterForDrive::OnGetRunningPath, |
GetWeakPtr())); |
} |
@@ -255,7 +252,7 @@ class SingleDriveEntryPropertiesGetter { |
file_system->GetResourceEntry( |
file_path, |
- base::Bind(&SingleDriveEntryPropertiesGetter::OnGetShareInfo, |
+ base::Bind(&SingleEntryPropertiesGetterForDrive::OnGetShareInfo, |
GetWeakPtr())); |
} |
@@ -275,7 +272,7 @@ class SingleDriveEntryPropertiesGetter { |
void StartParseFileInfo(bool shared_with_me) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- FillDriveEntryPropertiesValue( |
+ FillEntryPropertiesValue( |
*owner_resource_entry_, shared_with_me, properties_.get()); |
drive::FileSystemInterface* const file_system = |
@@ -289,7 +286,7 @@ class SingleDriveEntryPropertiesGetter { |
} |
// The properties meaningful for directories are already filled in |
- // FillDriveEntryPropertiesValue(). |
+ // FillEntryPropertiesValue(). |
if (!owner_resource_entry_->has_file_specific_info()) { |
CompleteGetFileProperties(drive::FILE_ERROR_OK); |
return; |
@@ -330,58 +327,79 @@ class SingleDriveEntryPropertiesGetter { |
void CompleteGetFileProperties(drive::FileError error) { |
yoshiki
2014/08/28 03:12:39
Didn't you s/FileProperties/EntryProperties/?
mtomasz
2014/08/28 05:18:51
Done.
|
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(!callback_.is_null()); |
- callback_.Run(error); |
+ |
+ callback_.Run(properties_.Pass(), drive::FileErrorToBaseFileError(error)); |
delete this; |
} |
-}; // class SingleDriveEntryPropertiesGetter |
+}; // class SingleEntryPropertiesGetterForDrive |
} // namespace |
-FileBrowserPrivateGetDriveEntryPropertiesFunction:: |
- FileBrowserPrivateGetDriveEntryPropertiesFunction() |
- : processed_count_(0) {} |
+FileBrowserPrivateGetEntryPropertiesFunction:: |
+ FileBrowserPrivateGetEntryPropertiesFunction() |
+ : processed_count_(0) { |
+} |
-FileBrowserPrivateGetDriveEntryPropertiesFunction:: |
- ~FileBrowserPrivateGetDriveEntryPropertiesFunction() {} |
+FileBrowserPrivateGetEntryPropertiesFunction:: |
+ ~FileBrowserPrivateGetEntryPropertiesFunction() { |
+} |
-bool FileBrowserPrivateGetDriveEntryPropertiesFunction::RunAsync() { |
+bool FileBrowserPrivateGetEntryPropertiesFunction::RunAsync() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- using api::file_browser_private::GetDriveEntryProperties::Params; |
+ using api::file_browser_private::GetEntryProperties::Params; |
const scoped_ptr<Params> params(Params::Create(*args_)); |
EXTENSION_FUNCTION_VALIDATE(params); |
- properties_list_.resize(params->file_urls.size()); |
+ scoped_refptr<storage::FileSystemContext> file_system_context = |
+ file_manager::util::GetFileSystemContextForRenderViewHost( |
+ GetProfile(), render_view_host()); |
+ properties_list_.resize(params->file_urls.size()); |
for (size_t i = 0; i < params->file_urls.size(); i++) { |
const GURL url = GURL(params->file_urls[i]); |
- const base::FilePath local_path = file_manager::util::GetLocalPathFromURL( |
- render_view_host(), GetProfile(), url); |
- properties_list_[i] = make_linked_ptr(new DriveEntryProperties); |
- |
- SingleDriveEntryPropertiesGetter::Start( |
- local_path, |
- properties_list_[i], |
- GetProfile(), |
- base::Bind(&FileBrowserPrivateGetDriveEntryPropertiesFunction:: |
- CompleteGetFileProperties, |
- this)); |
+ const storage::FileSystemURL file_system_url = |
+ file_system_context->CrackURL(url); |
+ switch (file_system_url.type()) { |
+ case storage::kFileSystemTypeDrive: |
+ SingleEntryPropertiesGetterForDrive::Start( |
+ file_system_url.path(), |
+ GetProfile(), |
+ base::Bind(&FileBrowserPrivateGetEntryPropertiesFunction:: |
+ CompleteGetFileProperties, |
+ this, |
+ i)); |
+ break; |
+ case storage::kFileSystemTypeProvided: |
+ // TODO(mtomasz): Add support for provided file systems. |
+ NOTIMPLEMENTED(); |
+ break; |
+ default: |
+ LOG(ERROR) << "Not supported file system type."; |
+ CompleteGetFileProperties(i, |
+ make_scoped_ptr(new EntryProperties), |
+ base::File::FILE_ERROR_INVALID_OPERATION); |
+ } |
} |
return true; |
} |
-void FileBrowserPrivateGetDriveEntryPropertiesFunction:: |
- CompleteGetFileProperties(drive::FileError error) { |
+void FileBrowserPrivateGetEntryPropertiesFunction::CompleteGetFileProperties( |
+ size_t index, |
+ scoped_ptr<EntryProperties> properties, |
+ base::File::Error error) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(0 <= processed_count_ && processed_count_ < properties_list_.size()); |
+ properties_list_[index] = make_linked_ptr(properties.release()); |
+ |
processed_count_++; |
if (processed_count_ < properties_list_.size()) |
return; |
- results_ = extensions::api::file_browser_private::GetDriveEntryProperties:: |
+ results_ = extensions::api::file_browser_private::GetEntryProperties:: |
Results::Create(properties_list_); |
SendResponse(true); |
} |