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

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

Issue 1239043002: Add support for actions for multiple file selection. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed externs. Created 5 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
Index: chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
index d42112da0b70eed046e39d6652d256715458c8b2..ee74999f4680fbb71bd5cccce9be2649659feb2c 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
@@ -9,6 +9,7 @@
#include "ash/frame/frame_util.h"
#include "base/files/file_path.h"
+#include "base/memory/ref_counted.h"
#include "base/prefs/pref_service.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
@@ -52,8 +53,8 @@
#include "url/gurl.h"
namespace extensions {
-
namespace {
+
const char kCWSScope[] = "https://www.googleapis.com/auth/chromewebstore";
// Obtains the current app window.
@@ -97,6 +98,54 @@ GetLoggedInProfileInfoList() {
return result_profiles;
}
+
+// Converts a list of file system urls (as strings) to a pair of a provided file
+// system object and a list of unique paths on the file system. In case of an
+// error, false is returned and the error message set.
+bool ConvertURLsToProvidedInfo(
+ const scoped_refptr<storage::FileSystemContext>& file_system_context,
+ const std::vector<std::string>& urls,
+ chromeos::file_system_provider::ProvidedFileSystemInterface** file_system,
+ std::vector<base::FilePath>* paths,
+ std::string* error) {
+ DCHECK(file_system);
+ DCHECK(error);
+
+ if (!urls.size()) {
+ *error = "At least one file must be specified.";
+ return false;
+ }
+
+ *file_system = nullptr;
+ for (const auto url : urls) {
+ const storage::FileSystemURL file_system_url(
+ file_system_context->CrackURL(GURL(url)));
+
+ chromeos::file_system_provider::util::FileSystemURLParser parser(
+ file_system_url);
+ if (!parser.Parse()) {
+ *error = "Related provided file system not found.";
+ return false;
+ }
+
+ if (*file_system != nullptr) {
+ if (*file_system != parser.file_system()) {
+ *error = "All entries must be on the same file system.";
+ return false;
+ }
+ } else {
+ *file_system = parser.file_system();
+ }
+ paths->push_back(parser.file_path());
+ }
+
+ // Erase duplicates.
+ std::sort(paths->begin(), paths->end());
+ paths->erase(std::unique(paths->begin(), paths->end()), paths->end());
+
+ return true;
+}
+
} // namespace
bool FileManagerPrivateLogoutUserForReauthenticationFunction::RunSync() {
@@ -537,14 +586,14 @@ void FileManagerPrivateConfigureVolumeFunction::OnCompleted(
Respond(NoArguments());
}
-FileManagerPrivateInternalGetEntryActionsFunction::
- FileManagerPrivateInternalGetEntryActionsFunction()
- : chrome_details_(this) {
-}
+FileManagerPrivateInternalGetCustomActionsFunction::
+ FileManagerPrivateInternalGetCustomActionsFunction()
+ : chrome_details_(this) {}
ExtensionFunction::ResponseAction
-FileManagerPrivateInternalGetEntryActionsFunction::Run() {
- using extensions::api::file_manager_private_internal::GetEntryActions::Params;
+FileManagerPrivateInternalGetCustomActionsFunction::Run() {
+ using extensions::api::file_manager_private_internal::GetCustomActions::
+ Params;
const scoped_ptr<Params> params(Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params);
@@ -552,23 +601,26 @@ FileManagerPrivateInternalGetEntryActionsFunction::Run() {
file_manager::util::GetFileSystemContextForRenderFrameHost(
chrome_details_.GetProfile(), render_frame_host());
- const storage::FileSystemURL file_system_url(
- file_system_context->CrackURL(GURL(params->url)));
+ std::vector<base::FilePath> paths;
+ chromeos::file_system_provider::ProvidedFileSystemInterface* file_system =
+ nullptr;
+ std::string error;
- chromeos::file_system_provider::util::FileSystemURLParser parser(
- file_system_url);
- if (!parser.Parse())
- return RespondNow(Error("Related provided file system not found."));
+ if (!ConvertURLsToProvidedInfo(file_system_context, params->urls,
+ &file_system, &paths, &error)) {
+ return RespondNow(Error(error));
+ }
- parser.file_system()->GetActions(
- parser.file_path(),
+ DCHECK(file_system);
+ file_system->GetActions(
+ paths,
base::Bind(
- &FileManagerPrivateInternalGetEntryActionsFunction::OnCompleted,
+ &FileManagerPrivateInternalGetCustomActionsFunction::OnCompleted,
this));
return RespondLater();
}
-void FileManagerPrivateInternalGetEntryActionsFunction::OnCompleted(
+void FileManagerPrivateInternalGetCustomActionsFunction::OnCompleted(
const chromeos::file_system_provider::Actions& actions,
base::File::Error result) {
if (result != base::File::FILE_OK) {
@@ -586,18 +638,17 @@ void FileManagerPrivateInternalGetEntryActionsFunction::OnCompleted(
}
Respond(ArgumentList(
- api::file_manager_private_internal::GetEntryActions::Results::Create(
+ api::file_manager_private_internal::GetCustomActions::Results::Create(
items)));
}
-FileManagerPrivateInternalExecuteEntryActionFunction::
- FileManagerPrivateInternalExecuteEntryActionFunction()
- : chrome_details_(this) {
-}
+FileManagerPrivateInternalExecuteCustomActionFunction::
+ FileManagerPrivateInternalExecuteCustomActionFunction()
+ : chrome_details_(this) {}
ExtensionFunction::ResponseAction
-FileManagerPrivateInternalExecuteEntryActionFunction::Run() {
- using extensions::api::file_manager_private_internal::ExecuteEntryAction::
+FileManagerPrivateInternalExecuteCustomActionFunction::Run() {
+ using extensions::api::file_manager_private_internal::ExecuteCustomAction::
Params;
const scoped_ptr<Params> params(Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params);
@@ -606,23 +657,26 @@ FileManagerPrivateInternalExecuteEntryActionFunction::Run() {
file_manager::util::GetFileSystemContextForRenderFrameHost(
chrome_details_.GetProfile(), render_frame_host());
- const storage::FileSystemURL file_system_url(
- file_system_context->CrackURL(GURL(params->url)));
+ std::vector<base::FilePath> paths;
+ chromeos::file_system_provider::ProvidedFileSystemInterface* file_system =
+ nullptr;
+ std::string error;
- chromeos::file_system_provider::util::FileSystemURLParser parser(
- file_system_url);
- if (!parser.Parse())
- return RespondNow(Error("Related provided file system not found."));
+ if (!ConvertURLsToProvidedInfo(file_system_context, params->urls,
+ &file_system, &paths, &error)) {
+ return RespondNow(Error(error));
+ }
- parser.file_system()->ExecuteAction(
- parser.file_path(), params->action_id,
+ DCHECK(file_system);
+ file_system->ExecuteAction(
+ paths, params->action_id,
base::Bind(
- &FileManagerPrivateInternalExecuteEntryActionFunction::OnCompleted,
+ &FileManagerPrivateInternalExecuteCustomActionFunction::OnCompleted,
this));
return RespondLater();
}
-void FileManagerPrivateInternalExecuteEntryActionFunction::OnCompleted(
+void FileManagerPrivateInternalExecuteCustomActionFunction::OnCompleted(
base::File::Error result) {
if (result != base::File::FILE_OK) {
Respond(Error("Failed to execute the action."));

Powered by Google App Engine
This is Rietveld 408576698