Index: chrome/browser/chromeos/extensions/file_manager/open_util.cc |
diff --git a/chrome/browser/chromeos/extensions/file_manager/open_util.cc b/chrome/browser/chromeos/extensions/file_manager/open_util.cc |
index d3f9bbafc5746fbc8ff11b9db941a6766a16b8a8..ae86003e3d58f4a2705d456a6c172b3aee03af6e 100644 |
--- a/chrome/browser/chromeos/extensions/file_manager/open_util.cc |
+++ b/chrome/browser/chromeos/extensions/file_manager/open_util.cc |
@@ -134,129 +134,44 @@ void OpenFileManagerWithInternalActionId(const base::FilePath& file_path, |
ExecuteFileTaskForUrl(profile, task, url); |
} |
-// Opens the file specified by |file_path| and |url| with a file handler, |
-// preferably the default handler for the type of the file. Returns false if |
-// no file handler is found. |
-bool OpenFileWithFileHandler(Profile* profile, |
- const base::FilePath& file_path, |
- const GURL& url, |
- const std::string& mime_type, |
- const std::string& default_task_id) { |
- ExtensionService* service = profile->GetExtensionService(); |
- if (!service) |
- return false; |
- |
- PathAndMimeTypeSet files; |
- files.insert(std::make_pair(file_path, mime_type)); |
- const extensions::FileHandlerInfo* first_handler = NULL; |
- const extensions::Extension* extension_for_first_handler = NULL; |
- |
- // If we find the default handler, we execute it immediately, but otherwise, |
- // we remember the first handler, and if there was no default handler, simply |
- // execute the first one. |
- for (ExtensionSet::const_iterator iter = service->extensions()->begin(); |
- iter != service->extensions()->end(); |
- ++iter) { |
- const Extension* extension = iter->get(); |
- |
- // We don't support using hosted apps to open files. |
- if (!extension->is_platform_app()) |
- continue; |
- |
- // We only support apps that specify "incognito: split" if in incognito |
- // mode. |
- if (profile->IsOffTheRecord() && |
- !service->IsIncognitoEnabled(extension->id())) |
- continue; |
- |
- typedef std::vector<const extensions::FileHandlerInfo*> FileHandlerList; |
- FileHandlerList file_handlers = FindFileHandlersForFiles(*extension, files); |
- for (FileHandlerList::iterator i = file_handlers.begin(); |
- i != file_handlers.end(); ++i) { |
- const extensions::FileHandlerInfo* handler = *i; |
- std::string task_id = file_tasks::MakeTaskID( |
- extension->id(), |
- file_tasks::TASK_TYPE_FILE_HANDLER, |
- handler->id); |
- if (task_id == default_task_id) { |
- file_tasks::TaskDescriptor task(extension->id(), |
- file_tasks::TASK_TYPE_FILE_HANDLER, |
- handler->id); |
- ExecuteFileTaskForUrl(profile, task, url); |
- return true; |
- |
- } else if (!first_handler) { |
- first_handler = handler; |
- extension_for_first_handler = extension; |
- } |
- } |
- } |
- if (first_handler) { |
- file_tasks::TaskDescriptor task(extension_for_first_handler->id(), |
- file_tasks::TASK_TYPE_FILE_HANDLER, |
- first_handler->id); |
- ExecuteFileTaskForUrl(profile, task, url); |
- return true; |
- } |
- return false; |
-} |
- |
-// Opens the file specified by |file_path| and |url| with the file browser |
-// handler specified by |handler|. Returns false if failed to open the file. |
-bool OpenFileWithFileBrowserHandler(Profile* profile, |
- const base::FilePath& file_path, |
- const FileBrowserHandler& handler, |
- const GURL& url) { |
- file_tasks::TaskDescriptor task(handler.extension_id(), |
- file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER, |
- handler.id()); |
- ExecuteFileTaskForUrl(profile, task, url); |
- return true; |
-} |
- |
-// Opens the file specified by |file_path| with a handler (either of file |
-// browser handler or file handler, preferably the default handler for the |
-// type of the file), or opens the file with the browser. Returns false if |
-// failed to open the file. |
-bool OpenFileWithHandler(Profile* profile, const base::FilePath& file_path) { |
+// Opens the file specified by |file_path| by finding and executing a file |
+// taskfor the file. Returns false if failed to open the file (i.e. no file |
kinaba
2013/09/03 07:27:39
nit: taskfor -> task for
satorux1
2013/09/03 08:07:30
Done.
|
+// task is found). |
+bool OpenFile(Profile* profile, const base::FilePath& file_path) { |
GURL url; |
if (!ConvertAbsoluteFilePathToFileSystemUrl( |
profile, file_path, kFileManagerAppId, &url)) |
return false; |
std::string mime_type = GetMimeTypeForPath(file_path); |
kinaba
2013/09/03 07:27:39
This is getting the mime type from path, so I gues
satorux1
2013/09/03 08:07:30
Done.
|
- std::string default_task_id = file_tasks::GetDefaultTaskIdFromPrefs( |
- *profile->GetPrefs(), mime_type, file_path.Extension()); |
- |
- // We choose the file handler from the following in decreasing priority or |
- // fail if none support the file type: |
- // 1. default file browser handler |
- // 2. default file handler |
- // 3. a fallback handler (e.g. opening in the browser) |
- // 4. non-default file handler |
- // 5. non-default file browser handler |
- // Note that there can be at most one of default extension and default app. |
- const FileBrowserHandler* handler = |
- file_browser_handlers::FindFileBrowserHandlerForURLAndPath( |
- profile, url, file_path); |
- if (!handler) { |
- return OpenFileWithFileHandler( |
- profile, file_path, url, mime_type, default_task_id); |
- } |
+ extensions::app_file_handler_util::PathAndMimeTypeSet path_mime_set; |
+ path_mime_set.insert(std::make_pair(file_path, mime_type)); |
+ |
+ std::vector<GURL> file_urls; |
+ file_urls.push_back(url); |
+ |
+ std::vector<base::FilePath> file_paths; |
+ file_paths.push_back(file_path); |
+ |
+ std::vector<file_tasks::FullTaskDescriptor> tasks; |
+ file_tasks::FindAllTypesOfTasks(profile, |
kinaba
2013/09/03 07:27:39
It looks FindAllTypesOfTasks always include DriveA
satorux1
2013/09/03 08:07:30
Good catch!
We have a similar problem with the fi
satorux1
2013/09/04 04:19:42
Fixed the issue at https://codereview.chromium.org
|
+ path_mime_set, |
+ file_urls, |
+ file_paths, |
+ &tasks); |
+ if (tasks.empty()) |
+ return false; |
- const file_tasks::TaskDescriptor task_descriptor( |
- handler->extension_id(), |
- file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER, |
- handler->id()); |
- const std::string handler_task_id = |
- file_tasks::TaskDescriptorToId(task_descriptor); |
- if (handler_task_id != default_task_id && |
- !file_browser_handlers::IsFallbackFileBrowserHandler(task_descriptor) && |
- OpenFileWithFileHandler( |
- profile, file_path, url, mime_type, default_task_id)) { |
- return true; |
+ const file_tasks::FullTaskDescriptor* chosen_task = &tasks[0]; |
+ for (size_t i =0; i < tasks.size(); ++i) { |
kinaba
2013/09/03 07:27:39
nit: "i =0" => "i = 0"
satorux1
2013/09/03 08:07:30
Done.
|
+ if (tasks[i].is_default()) { |
+ chosen_task = &tasks[i]; |
+ break; |
+ } |
} |
- return OpenFileWithFileBrowserHandler(profile, file_path, *handler, url); |
+ |
+ ExecuteFileTaskForUrl(profile, chosen_task->task_descriptor(), url); |
+ return true; |
} |
// Used to implement OpenItem(). |
@@ -269,8 +184,8 @@ void ContinueOpenItem(Profile* profile, |
// A directory exists at |file_path|. Open it with the file manager. |
OpenFileManagerWithInternalActionId(file_path, "open"); |
} else { |
- // |file_path| should be a file. Open it with a handler. |
- if (!OpenFileWithHandler(profile, file_path)) |
+ // |file_path| should be a file. Open it. |
+ if (!OpenFile(profile, file_path)) |
ShowWarningMessageBox(profile, file_path); |
} |
} |