summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc156
-rw-r--r--chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h12
-rw-r--r--chrome/browser/chromeos/file_manager/file_tasks.cc11
-rw-r--r--chrome/browser/chromeos/file_manager/file_tasks.h16
-rw-r--r--chrome/browser/chromeos/file_manager/file_tasks_unittest.cc41
-rw-r--r--chrome/common/extensions/api/file_browser_private.json6
6 files changed, 74 insertions, 168 deletions
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc
index 748b7b5..543a282 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/chromeos/file_manager/mime_util.h"
#include "chrome/browser/chromeos/fileapi/file_system_backend.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/extensions/api/file_browser_private.h"
#include "content/public/browser/render_view_host.h"
#include "webkit/browser/fileapi/file_system_context.h"
#include "webkit/browser/fileapi/file_system_url.h"
@@ -25,14 +26,12 @@ namespace {
const char kInvalidFileUrl[] = "Invalid file URL";
// Make a set of unique filename suffixes out of the list of file URLs.
-std::set<std::string> GetUniqueSuffixes(base::ListValue* file_url_list,
- fileapi::FileSystemContext* context) {
+std::set<std::string> GetUniqueSuffixes(
+ const std::vector<std::string>& file_url_list,
+ const fileapi::FileSystemContext* context) {
std::set<std::string> suffixes;
- for (size_t i = 0; i < file_url_list->GetSize(); ++i) {
- std::string url_str;
- if (!file_url_list->GetString(i, &url_str))
- return std::set<std::string>();
- FileSystemURL url = context->CrackURL(GURL(url_str));
+ for (size_t i = 0; i < file_url_list.size(); ++i) {
+ const FileSystemURL url = context->CrackURL(GURL(file_url_list[i]));
if (!url.is_valid() || url.path().empty())
return std::set<std::string>();
// We'll skip empty suffixes.
@@ -43,12 +42,11 @@ std::set<std::string> GetUniqueSuffixes(base::ListValue* file_url_list,
}
// Make a set of unique MIME types out of the list of MIME types.
-std::set<std::string> GetUniqueMimeTypes(base::ListValue* mime_type_list) {
+std::set<std::string> GetUniqueMimeTypes(
+ const std::vector<std::string>& mime_type_list) {
std::set<std::string> mime_types;
- for (size_t i = 0; i < mime_type_list->GetSize(); ++i) {
+ for (size_t i = 0; i < mime_type_list.size(); ++i) {
std::string mime_type;
- if (!mime_type_list->GetString(i, &mime_type))
- return std::set<std::string>();
// We'll skip empty MIME types.
if (!mime_type.empty())
mime_types.insert(mime_type);
@@ -58,49 +56,31 @@ std::set<std::string> GetUniqueMimeTypes(base::ListValue* mime_type_list) {
} // namespace
-FileBrowserPrivateExecuteTaskFunction::FileBrowserPrivateExecuteTaskFunction() {
-}
-
-FileBrowserPrivateExecuteTaskFunction::
- ~FileBrowserPrivateExecuteTaskFunction() {
-}
-
bool FileBrowserPrivateExecuteTaskFunction::RunImpl() {
- // First param is task id that was to the extension with getFileTasks call.
- std::string task_id;
- if (!args_->GetString(0, &task_id) || !task_id.size())
- return false;
+ using extensions::api::file_browser_private::ExecuteTask::Params;
+ const scoped_ptr<Params> params(Params::Create(*args_));
+ EXTENSION_FUNCTION_VALIDATE(params);
// TODO(kaznacheev): Crack the task_id here, store it in the Executor
// and avoid passing it around.
- // The second param is the list of files that need to be executed with this
- // task.
- ListValue* files_list = NULL;
- if (!args_->GetList(1, &files_list))
- return false;
-
file_manager::file_tasks::TaskDescriptor task;
- if (!file_manager::file_tasks::ParseTaskID(task_id, &task)) {
- LOG(WARNING) << "Invalid task " << task_id;
+ if (!file_manager::file_tasks::ParseTaskID(params->task_id, &task)) {
+ LOG(WARNING) << "Invalid task " << params->task_id;
return false;
}
- if (!files_list->GetSize())
+ if (params->file_urls.empty())
return true;
- scoped_refptr<fileapi::FileSystemContext> file_system_context =
+ const scoped_refptr<fileapi::FileSystemContext> file_system_context =
file_manager::util::GetFileSystemContextForRenderViewHost(
profile(), render_view_host());
std::vector<FileSystemURL> file_urls;
- for (size_t i = 0; i < files_list->GetSize(); i++) {
- std::string file_url_str;
- if (!files_list->GetString(i, &file_url_str)) {
- error_ = kInvalidFileUrl;
- return false;
- }
- FileSystemURL url = file_system_context->CrackURL(GURL(file_url_str));
+ for (size_t i = 0; i < params->file_urls.size(); i++) {
+ const FileSystemURL url =
+ file_system_context->CrackURL(GURL(params->file_urls[i]));
if (!chromeos::FileSystemBackend::CanHandleURL(url)) {
error_ = kInvalidFileUrl;
return false;
@@ -108,7 +88,7 @@ bool FileBrowserPrivateExecuteTaskFunction::RunImpl() {
file_urls.push_back(url);
}
- int32 tab_id = file_manager::util::GetTabId(dispatcher());
+ const int32 tab_id = file_manager::util::GetTabId(dispatcher());
return file_manager::file_tasks::ExecuteFileTask(
profile(),
source_url(),
@@ -124,34 +104,20 @@ void FileBrowserPrivateExecuteTaskFunction::OnTaskExecuted(bool success) {
SendResponse(true);
}
-FileBrowserPrivateGetFileTasksFunction::
- FileBrowserPrivateGetFileTasksFunction() {
-}
-
-FileBrowserPrivateGetFileTasksFunction::
- ~FileBrowserPrivateGetFileTasksFunction() {
-}
-
bool FileBrowserPrivateGetFileTasksFunction::RunImpl() {
- // First argument is the list of files to get tasks for.
- ListValue* files_list = NULL;
- if (!args_->GetList(0, &files_list))
- return false;
-
- if (files_list->GetSize() == 0)
- return false;
+ using extensions::api::file_browser_private::GetFileTasks::Params;
+ const scoped_ptr<Params> params(Params::Create(*args_));
+ EXTENSION_FUNCTION_VALIDATE(params);
- // Second argument is the list of mime types of each of the files in the list.
- ListValue* mime_types_list = NULL;
- if (!args_->GetList(1, &mime_types_list))
+ if (params->file_urls.empty())
return false;
// MIME types can either be empty, or there needs to be one for each file.
- if (mime_types_list->GetSize() != files_list->GetSize() &&
- mime_types_list->GetSize() != 0)
+ if (params->mime_types.size() != params->file_urls.size() &&
+ params->mime_types.size() != 0)
return false;
- scoped_refptr<fileapi::FileSystemContext> file_system_context =
+ const scoped_refptr<fileapi::FileSystemContext> file_system_context =
file_manager::util::GetFileSystemContextForRenderViewHost(
profile(), render_view_host());
@@ -159,17 +125,12 @@ bool FileBrowserPrivateGetFileTasksFunction::RunImpl() {
// file paths.
PathAndMimeTypeSet path_mime_set;
std::vector<GURL> file_urls;
- for (size_t i = 0; i < files_list->GetSize(); ++i) {
- std::string file_url_str;
- if (!files_list->GetString(i, &file_url_str))
- return false;
-
+ for (size_t i = 0; i < params->file_urls.size(); ++i) {
std::string mime_type;
- if (mime_types_list->GetSize() != 0 &&
- !mime_types_list->GetString(i, &mime_type))
- return false;
+ if (params->mime_types.size() != 0)
+ mime_type = params->mime_types[i];
- GURL file_url(file_url_str);
+ const GURL file_url(params->file_urls[i]);
fileapi::FileSystemURL file_system_url(
file_system_context->CrackURL(file_url));
if (!chromeos::FileSystemBackend::CanHandleURL(file_system_url))
@@ -190,48 +151,45 @@ bool FileBrowserPrivateGetFileTasksFunction::RunImpl() {
path_mime_set,
file_urls,
&tasks);
- // Convert the tasks into JSON format.
- ListValue* result_list = new ListValue();
- for (size_t i = 0; i < tasks.size(); ++i)
- result_list->Append(tasks[i].AsDictionaryValue().release());
- SetResult(result_list);
+ // Convert the tasks into JSON compatible objects.
+ using api::file_browser_private::FileTask;
+ std::vector<linked_ptr<FileTask> > results;
+ for (size_t i = 0; i < tasks.size(); ++i) {
+ const file_manager::file_tasks::FullTaskDescriptor& task = tasks[i];
+ const linked_ptr<FileTask> converted(new FileTask);
+ converted->task_id = file_manager::file_tasks::TaskDescriptorToId(
+ task.task_descriptor());
+ if (!task.icon_url().is_empty())
+ converted->icon_url = task.icon_url().spec();
+ converted->title = task.task_title();
+ converted->is_default = task.is_default();
+ results.push_back(converted);
+ }
+ results_ = extensions::api::file_browser_private::GetFileTasks::Results::
+ Create(results);
SendResponse(true);
return true;
}
-FileBrowserPrivateSetDefaultTaskFunction::
- FileBrowserPrivateSetDefaultTaskFunction() {
-}
-
-FileBrowserPrivateSetDefaultTaskFunction::
- ~FileBrowserPrivateSetDefaultTaskFunction() {
-}
-
bool FileBrowserPrivateSetDefaultTaskFunction::RunImpl() {
- // First param is task id that was to the extension with setDefaultTask call.
- std::string task_id;
- if (!args_->GetString(0, &task_id) || !task_id.size())
- return false;
-
- base::ListValue* file_url_list;
- if (!args_->GetList(1, &file_url_list))
- return false;
+ using extensions::api::file_browser_private::SetDefaultTask::Params;
+ const scoped_ptr<Params> params(Params::Create(*args_));
+ EXTENSION_FUNCTION_VALIDATE(params);
- scoped_refptr<fileapi::FileSystemContext> file_system_context =
+ const scoped_refptr<fileapi::FileSystemContext> file_system_context =
file_manager::util::GetFileSystemContextForRenderViewHost(
profile(), render_view_host());
- std::set<std::string> suffixes =
- GetUniqueSuffixes(file_url_list, file_system_context.get());
+ const std::set<std::string> suffixes =
+ GetUniqueSuffixes(params->file_urls, file_system_context.get());
// MIME types are an optional parameter.
- base::ListValue* mime_type_list;
std::set<std::string> mime_types;
- if (args_->GetList(2, &mime_type_list) && !mime_type_list->empty()) {
- if (mime_type_list->GetSize() != file_url_list->GetSize())
+ if (params->mime_types && !params->mime_types->empty()) {
+ if (params->mime_types->size() != params->file_urls.size())
return false;
- mime_types = GetUniqueMimeTypes(mime_type_list);
+ mime_types = GetUniqueMimeTypes(*params->mime_types);
}
// If there weren't any mime_types, and all the suffixes were blank,
@@ -246,7 +204,7 @@ bool FileBrowserPrivateSetDefaultTaskFunction::RunImpl() {
}
file_manager::file_tasks::UpdateDefaultTask(profile_->GetPrefs(),
- task_id,
+ params->task_id,
suffixes,
mime_types);
return true;
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h
index ad376d7..fd4a7bd 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h
@@ -29,10 +29,8 @@ class FileBrowserPrivateExecuteTaskFunction
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.executeTask",
FILEBROWSERPRIVATE_EXECUTETASK)
- FileBrowserPrivateExecuteTaskFunction();
-
protected:
- virtual ~FileBrowserPrivateExecuteTaskFunction();
+ virtual ~FileBrowserPrivateExecuteTaskFunction() {}
// AsyncExtensionFunction overrides.
virtual bool RunImpl() OVERRIDE;
@@ -47,10 +45,8 @@ class FileBrowserPrivateGetFileTasksFunction
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.getFileTasks",
FILEBROWSERPRIVATE_GETFILETASKS)
- FileBrowserPrivateGetFileTasksFunction();
-
protected:
- virtual ~FileBrowserPrivateGetFileTasksFunction();
+ virtual ~FileBrowserPrivateGetFileTasksFunction() {}
// AsyncExtensionFunction overrides.
virtual bool RunImpl() OVERRIDE;
@@ -62,10 +58,8 @@ class FileBrowserPrivateSetDefaultTaskFunction : public SyncExtensionFunction {
DECLARE_EXTENSION_FUNCTION("fileBrowserPrivate.setDefaultTask",
FILEBROWSERPRIVATE_SETDEFAULTTASK)
- FileBrowserPrivateSetDefaultTaskFunction();
-
protected:
- virtual ~FileBrowserPrivateSetDefaultTaskFunction();
+ virtual ~FileBrowserPrivateSetDefaultTaskFunction() {}
// SyncExtensionFunction overrides.
virtual bool RunImpl() OVERRIDE;
diff --git a/chrome/browser/chromeos/file_manager/file_tasks.cc b/chrome/browser/chromeos/file_manager/file_tasks.cc
index 3db684c..db3e08e 100644
--- a/chrome/browser/chromeos/file_manager/file_tasks.cc
+++ b/chrome/browser/chromeos/file_manager/file_tasks.cc
@@ -125,17 +125,6 @@ FullTaskDescriptor::FullTaskDescriptor(
is_default_(is_default){
}
-scoped_ptr<base::DictionaryValue>
-FullTaskDescriptor::AsDictionaryValue() const {
- scoped_ptr<base::DictionaryValue> dictionary(new base::DictionaryValue);
- dictionary->SetString("taskId", TaskDescriptorToId(task_descriptor_));
- if (!icon_url_.is_empty())
- dictionary->SetString("iconUrl", icon_url_.spec());
- dictionary->SetString("title", task_title_);
- dictionary->SetBoolean("isDefault", is_default_);
- return dictionary.Pass();
-}
-
void UpdateDefaultTask(PrefService* pref_service,
const std::string& task_id,
const std::set<std::string>& suffixes,
diff --git a/chrome/browser/chromeos/file_manager/file_tasks.h b/chrome/browser/chromeos/file_manager/file_tasks.h
index b737a75b..722d95a 100644
--- a/chrome/browser/chromeos/file_manager/file_tasks.h
+++ b/chrome/browser/chromeos/file_manager/file_tasks.h
@@ -169,7 +169,7 @@ class FullTaskDescriptor {
const TaskDescriptor& task_descriptor() const { return task_descriptor_; }
// The title of the task.
- const std::string& task_title() { return task_title_; }
+ const std::string& task_title() const { return task_title_; }
// The icon URL for the task (ex. app icon)
const GURL& icon_url() const { return icon_url_; }
@@ -177,20 +177,6 @@ class FullTaskDescriptor {
bool is_default() const { return is_default_; }
void set_is_default(bool is_default) { is_default_ = is_default; }
- // Returns a DictionaryValue representation, which looks like:
- //
- // {
- // "iconUrl": "<app_icon_url>",
- // "isDefault": false,
- // "taskId": "<drive_app_id>|drive|open-with",
- // "title": "Drive App Name (ex. Pixlr Editor)"
- // },
- //
- // "iconUrl" is omitted if icon_url_ is empty.
- //
- // This representation will be used to send task info to the JavaScript.
- scoped_ptr<base::DictionaryValue> AsDictionaryValue() const;
-
private:
TaskDescriptor task_descriptor_;
std::string task_title_;
diff --git a/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc b/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc
index e273f3b..a7dc9dc 100644
--- a/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc
+++ b/chrome/browser/chromeos/file_manager/file_tasks_unittest.cc
@@ -56,23 +56,12 @@ TEST(FileManagerFileTasksTest,
GURL("http://example.com/icon.png"),
true /* is_default */);
- scoped_ptr<base::DictionaryValue> dictionary(
- full_descriptor.AsDictionaryValue());
- std::string task_id;
- EXPECT_TRUE(dictionary->GetString("taskId", &task_id));
+ const std::string task_id =
+ TaskDescriptorToId(full_descriptor.task_descriptor());
EXPECT_EQ("app-id|file|action-id", task_id);
-
- std::string icon_url;
- EXPECT_TRUE(dictionary->GetString("iconUrl", &icon_url));
- EXPECT_EQ("http://example.com/icon.png", icon_url);
-
- std::string title;
- EXPECT_TRUE(dictionary->GetString("title", &title));
- EXPECT_EQ("task title", title);
-
- bool is_default = false;
- EXPECT_TRUE(dictionary->GetBoolean("isDefault", &is_default));
- EXPECT_TRUE(is_default);
+ EXPECT_EQ("http://example.com/icon.png", full_descriptor.icon_url().spec());
+ EXPECT_EQ("task title", full_descriptor.task_title());
+ EXPECT_TRUE(full_descriptor.is_default());
}
TEST(FileManagerFileTasksTest,
@@ -85,22 +74,12 @@ TEST(FileManagerFileTasksTest,
GURL(), // No icon URL.
false /* is_default */);
- scoped_ptr<base::DictionaryValue> dictionary(
- full_descriptor.AsDictionaryValue());
- std::string task_id;
- EXPECT_TRUE(dictionary->GetString("taskId", &task_id));
+ const std::string task_id =
+ TaskDescriptorToId(full_descriptor.task_descriptor());
EXPECT_EQ("app-id|drive|action-id", task_id);
-
- std::string icon_url;
- EXPECT_FALSE(dictionary->GetString("iconUrl", &icon_url));
-
- std::string title;
- EXPECT_TRUE(dictionary->GetString("title", &title));
- EXPECT_EQ("task title", title);
-
- bool is_default = false;
- EXPECT_TRUE(dictionary->GetBoolean("isDefault", &is_default));
- EXPECT_FALSE(is_default);
+ EXPECT_TRUE(full_descriptor.icon_url().is_empty());
+ EXPECT_EQ("task title", full_descriptor.task_title());
+ EXPECT_FALSE(full_descriptor.is_default());
}
TEST(FileManagerFileTasksTest, MakeTaskID) {
diff --git a/chrome/common/extensions/api/file_browser_private.json b/chrome/common/extensions/api/file_browser_private.json
index 939c129..ae9be83 100644
--- a/chrome/common/extensions/api/file_browser_private.json
+++ b/chrome/common/extensions/api/file_browser_private.json
@@ -422,7 +422,7 @@
"description": "The unique identifier of task to execute."
},
{
- "name": "fileURLs",
+ "name": "fileUrls",
"type": "array",
"description": "Array of file URLs",
"items": { "type": "string" }
@@ -452,7 +452,7 @@
"description": "The unique identifier of task to mark as default."
},
{
- "name": "fileURLs",
+ "name": "fileUrls",
"type": "array",
"description": "Array of selected file URLs to extract suffixes from.",
"items": { "type": "string" }
@@ -477,7 +477,7 @@
"description": "Gets the list of tasks that can be performed over selected files.",
"parameters": [
{
- "name": "fileURLs",
+ "name": "fileUrls",
"type": "array",
"description": "Array of selected file URLs",
"items": { "type": "string" }