| Index: chrome/browser/chromeos/file_manager/file_tasks.cc
|
| diff --git a/chrome/browser/chromeos/file_manager/file_tasks.cc b/chrome/browser/chromeos/file_manager/file_tasks.cc
|
| index 88fb03367b97308e1c4a365aa227420f96a28f8c..fb7b55490e4bb34a7779e8cae9c18d42bccba2b3 100644
|
| --- a/chrome/browser/chromeos/file_manager/file_tasks.cc
|
| +++ b/chrome/browser/chromeos/file_manager/file_tasks.cc
|
| @@ -19,6 +19,7 @@
|
| #include "chrome/browser/chromeos/file_manager/file_browser_handlers.h"
|
| #include "chrome/browser/chromeos/file_manager/fileapi_util.h"
|
| #include "chrome/browser/chromeos/file_manager/open_util.h"
|
| +#include "chrome/browser/extensions/api/file_handlers/mime_util.h"
|
| #include "chrome/browser/extensions/extension_tab_util.h"
|
| #include "chrome/browser/extensions/extension_util.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| @@ -140,6 +141,38 @@ bool IsFallbackFileHandler(const file_tasks::TaskDescriptor& task) {
|
| return false;
|
| }
|
|
|
| +void FindArcTasks(Profile* profile,
|
| + const std::vector<extensions::EntryInfo>& entries,
|
| + std::unique_ptr<std::vector<FullTaskDescriptor>> result_list,
|
| + const FindTasksCallback& callback) {
|
| + // TODO(kinaba): implement.
|
| + callback.Run(std::move(result_list));
|
| +}
|
| +
|
| +void ExecuteByArcAfterMimeTypesCollected(
|
| + Profile* profile,
|
| + const TaskDescriptor& task,
|
| + const std::vector<FileSystemURL>& file_urls,
|
| + const FileTaskFinishedCallback& done,
|
| + extensions::app_file_handler_util::MimeTypeCollector* mime_collector,
|
| + std::unique_ptr<std::vector<std::string>> mime_types) {
|
| + // TODO(kinaba): implement.
|
| + NOTIMPLEMENTED();
|
| + done.Run(extensions::api::file_manager_private::TASK_RESULT_FAILED);
|
| +}
|
| +
|
| +void PostProcessFoundTasks(
|
| + Profile* profile,
|
| + const std::vector<extensions::EntryInfo>& entries,
|
| + const FindTasksCallback& callback,
|
| + std::unique_ptr<std::vector<FullTaskDescriptor>> result_list) {
|
| + // Google documents can only be handled by internal handlers.
|
| + if (ContainsGoogleDocument(entries))
|
| + KeepOnlyFileManagerInternalTasks(result_list.get());
|
| + ChooseAndSetDefaultTask(*profile->GetPrefs(), entries, result_list.get());
|
| + callback.Run(std::move(result_list));
|
| +}
|
| +
|
| } // namespace
|
|
|
| FullTaskDescriptor::FullTaskDescriptor(
|
| @@ -275,9 +308,15 @@ bool ExecuteFileTask(Profile* profile,
|
| const TaskDescriptor& task,
|
| const std::vector<FileSystemURL>& file_urls,
|
| const FileTaskFinishedCallback& done) {
|
| + // ARC apps needs mime types for launching. Retrieve them first.
|
| if (task.task_type == TASK_TYPE_ARC_APP) {
|
| - NOTIMPLEMENTED();
|
| - return false;
|
| + extensions::app_file_handler_util::MimeTypeCollector* mime_collector =
|
| + new extensions::app_file_handler_util::MimeTypeCollector(profile);
|
| + mime_collector->CollectForURLs(
|
| + file_urls,
|
| + base::Bind(&ExecuteByArcAfterMimeTypesCollected, profile, task,
|
| + file_urls, done, base::Owned(mime_collector)));
|
| + return true;
|
| }
|
|
|
| // drive::FileTaskExecutor is responsible to handle drive tasks.
|
| @@ -525,29 +564,26 @@ void FindAllTypesOfTasks(Profile* profile,
|
| const std::vector<GURL>& file_urls,
|
| const FindTasksCallback& callback) {
|
| DCHECK(profile);
|
| - std::vector<FullTaskDescriptor> result_list;
|
| + std::unique_ptr<std::vector<FullTaskDescriptor>> result_list(
|
| + new std::vector<FullTaskDescriptor>);
|
|
|
| // Find Drive app tasks, if the drive app registry is present.
|
| if (drive_app_registry)
|
| - FindDriveAppTasks(*drive_app_registry, entries, &result_list);
|
| + FindDriveAppTasks(*drive_app_registry, entries, result_list.get());
|
|
|
| // Find and append file handler tasks. We know there aren't duplicates
|
| // because Drive apps and platform apps are entirely different kinds of
|
| // tasks.
|
| - FindFileHandlerTasks(profile, entries, &result_list);
|
| + FindFileHandlerTasks(profile, entries, result_list.get());
|
|
|
| // Find and append file browser handler tasks. We know there aren't
|
| // duplicates because "file_browser_handlers" and "file_handlers" shouldn't
|
| // be used in the same manifest.json.
|
| - FindFileBrowserHandlerTasks(profile, file_urls, &result_list);
|
| -
|
| - // Google documents can only be handled by internal handlers.
|
| - if (ContainsGoogleDocument(entries))
|
| - KeepOnlyFileManagerInternalTasks(&result_list);
|
| -
|
| - ChooseAndSetDefaultTask(*profile->GetPrefs(), entries, &result_list);
|
| + FindFileBrowserHandlerTasks(profile, file_urls, result_list.get());
|
|
|
| - callback.Run(result_list);
|
| + // Find and append ARC handler tasks.
|
| + FindArcTasks(profile, entries, std::move(result_list),
|
| + base::Bind(&PostProcessFoundTasks, profile, entries, callback));
|
| }
|
|
|
| void ChooseAndSetDefaultTask(const PrefService& pref_service,
|
|
|