| Index: chrome/browser/chromeos/extensions/file_manager_util.cc
|
| diff --git a/chrome/browser/chromeos/extensions/file_manager_util.cc b/chrome/browser/chromeos/extensions/file_manager_util.cc
|
| index fd4bc9c715b1392619fca6645ab95900f1affa67..2a0a5e7401c6dcaa453a3818f9280eadb62d38cf 100644
|
| --- a/chrome/browser/chromeos/extensions/file_manager_util.cc
|
| +++ b/chrome/browser/chromeos/extensions/file_manager_util.cc
|
| @@ -5,6 +5,7 @@
|
|
|
| #include "ash/shell.h"
|
| #include "base/bind.h"
|
| +#include "base/command_line.h"
|
| #include "base/file_util.h"
|
| #include "base/json/json_reader.h"
|
| #include "base/json/json_writer.h"
|
| @@ -38,6 +39,7 @@
|
| #include "chrome/browser/ui/tab_contents/tab_contents.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/common/chrome_paths.h"
|
| +#include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/extensions/file_browser_handler.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "content/public/browser/browser_thread.h"
|
| @@ -447,18 +449,61 @@ bool FileManageTabExists(const FilePath& path, TAB_REUSE_MODE mode) {
|
| return false;
|
| }
|
|
|
| +bool IsFileManagerPackaged() {
|
| + const CommandLine* command_line = CommandLine::ForCurrentProcess();
|
| + return command_line->HasSwitch(switches::kFileManagerPackaged);
|
| +}
|
| +
|
| +void ExecuteHandler(Profile* profile,
|
| + std::string extension_id,
|
| + std::string action_id,
|
| + const GURL& url) {
|
| + // We are executing the task on behalf of File Browser extension.
|
| + const GURL source_url(kBaseFileBrowserUrl);
|
| +
|
| + // If File Browser has not been open yet then it did not request access
|
| + // to the file system. Do it now.
|
| + fileapi::ExternalFileSystemMountPointProvider* external_provider =
|
| + BrowserContext::GetDefaultStoragePartition(
|
| + profile)->GetFileSystemContext()->external_provider();
|
| + if (!external_provider)
|
| + return;
|
| + external_provider->GrantFullAccessToExtension(source_url.host());
|
| +
|
| + std::vector<GURL> urls;
|
| + urls.push_back(url);
|
| + scoped_refptr<FileTaskExecutor> executor = FileTaskExecutor::Create(profile,
|
| + source_url, 0 /* no tab id */, extension_id,
|
| + file_handler_util::kTaskFile, action_id);
|
| + executor->Execute(urls);
|
| +}
|
| +
|
| void OpenFileBrowser(const FilePath& path,
|
| TAB_REUSE_MODE mode,
|
| - const std::string& flag_name) {
|
| + const std::string& action_id) {
|
| + content::RecordAction(UserMetricsAction("ShowFileBrowserFullTab"));
|
| +
|
| if (FileManageTabExists(path, mode))
|
| return;
|
|
|
| Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord();
|
|
|
| + if (IsFileManagerPackaged() && !path.value().empty()) {
|
| + GURL url;
|
| + if (!ConvertFileToFileSystemUrl(profile, path,
|
| + GetFileBrowserExtensionUrl().GetOrigin(), &url))
|
| + return;
|
| +
|
| + // Some values of |action_id| are not listed in the manifest and are used
|
| + // to parametrize the behavior when opening the Files app window.
|
| + ExecuteHandler(profile, kFileBrowserDomain, action_id, url);
|
| + return;
|
| + }
|
| +
|
| std::string url = chrome::kChromeUIFileManagerURL;
|
| - if (flag_name.size()) {
|
| + if (action_id.size()) {
|
| DictionaryValue arg_value;
|
| - arg_value.SetBoolean(flag_name, "true");
|
| + arg_value.SetString("action", action_id);
|
| std::string query;
|
| base::JSONWriter::Write(&arg_value, &query);
|
| url += "?" + net::EscapeUrlEncodedData(query, false);
|
| @@ -479,7 +524,6 @@ void OpenFileBrowser(const FilePath& path,
|
| if (!extension)
|
| return;
|
|
|
| - content::RecordAction(UserMetricsAction("ShowFileBrowserFullTab"));
|
| application_launch::LaunchParams params(profile, extension,
|
| extension_misc::LAUNCH_WINDOW,
|
| NEW_FOREGROUND_TAB);
|
| @@ -504,7 +548,7 @@ Browser* GetBrowserForUrl(GURL target_url) {
|
| }
|
|
|
| void ViewRemovableDrive(const FilePath& path) {
|
| - OpenFileBrowser(path, REUSE_ANY_FILE_MANAGER, "mountTriggered");
|
| + OpenFileBrowser(path, REUSE_ANY_FILE_MANAGER, "auto-open");
|
| }
|
|
|
| void OpenActionChoiceDialog(const FilePath& path) {
|
| @@ -545,15 +589,15 @@ void OpenActionChoiceDialog(const FilePath& path) {
|
|
|
| void ShowFileInFolder(const FilePath& path) {
|
| // This action changes the selection so we do not reuse existing tabs.
|
| - OpenFileBrowser(path, REUSE_NEVER, "selectOnly");
|
| + OpenFileBrowser(path, REUSE_NEVER, "select");
|
| }
|
|
|
| void ViewFolder(const FilePath& path) {
|
| - OpenFileBrowser(path, REUSE_SAME_PATH, std::string());
|
| + OpenFileBrowser(path, REUSE_SAME_PATH, "open");
|
| }
|
|
|
| void OpenApplication() {
|
| - OpenFileBrowser(FilePath(), REUSE_NEVER, std::string());
|
| + OpenFileBrowser(FilePath(), REUSE_NEVER, "");
|
| }
|
|
|
| bool ExecuteDefaultHandler(Profile* profile, const FilePath& path) {
|
| @@ -576,6 +620,17 @@ bool ExecuteDefaultHandler(Profile* profile, const FilePath& path) {
|
| return true;
|
|
|
| if (extension_id == kFileBrowserDomain) {
|
| + if (IsFileManagerPackaged()) {
|
| + if (action_id == kFileBrowserGalleryTaskId ||
|
| + action_id == kFileBrowserMountArchiveTaskId ||
|
| + action_id == kFileBrowserPlayTaskId ||
|
| + action_id == kFileBrowserWatchTaskId) {
|
| + ExecuteHandler(profile, extension_id, action_id, url);
|
| + return true;
|
| + }
|
| + return ExecuteBuiltinHandler(browser, path, action_id);
|
| + }
|
| +
|
| // Only two of the built-in File Browser tasks require opening the File
|
| // Browser tab.
|
| if (action_id == kFileBrowserGalleryTaskId ||
|
| @@ -586,31 +641,12 @@ bool ExecuteDefaultHandler(Profile* profile, const FilePath& path) {
|
| // |mount-archive| does not even try.
|
| OpenFileBrowser(path, REUSE_SAME_PATH, "");
|
| return true;
|
| - } else {
|
| - return ExecuteBuiltinHandler(browser, path, action_id);
|
| }
|
| - } else {
|
| - // We are executing the task on behalf of File Browser extension.
|
| - const GURL source_url(kBaseFileBrowserUrl);
|
| -
|
| - // If File Browser has not been open yet then it did not request access
|
| - // to the file system. Do it now.
|
| - fileapi::ExternalFileSystemMountPointProvider* external_provider =
|
| - BrowserContext::GetDefaultStoragePartition(
|
| - profile)->GetFileSystemContext()->external_provider();
|
| - if (!external_provider)
|
| - return false;
|
| - external_provider->GrantFullAccessToExtension(source_url.host());
|
| -
|
| - std::vector<GURL> urls;
|
| - urls.push_back(url);
|
| - scoped_refptr<FileTaskExecutor> executor = FileTaskExecutor::Create(profile,
|
| - source_url, 0 /* no tab id */, extension_id,
|
| - file_handler_util::kTaskFile, action_id);
|
| - executor->Execute(urls);
|
| - return true;
|
| + return ExecuteBuiltinHandler(browser, path, action_id);
|
| }
|
| - return ExecuteBuiltinHandler(browser, path, std::string());
|
| +
|
| + ExecuteHandler(profile, extension_id, action_id, url);
|
| + return true;
|
| }
|
|
|
| void ViewFile(const FilePath& path) {
|
| @@ -713,37 +749,39 @@ bool ExecuteBuiltinHandler(Browser* browser, const FilePath& path,
|
| return true;
|
| }
|
|
|
| - if (internal_task_id == kFileBrowserPlayTaskId) {
|
| - GURL url;
|
| - if (!ConvertFileToFileSystemUrl(profile, path,
|
| - GetFileBrowserExtensionUrl().GetOrigin(), &url))
|
| - return false;
|
| - MediaPlayer* mediaplayer = MediaPlayer::GetInstance();
|
| - mediaplayer->PopupMediaPlayer();
|
| - mediaplayer->ForcePlayMediaURL(url);
|
| - return true;
|
| - }
|
| - if (internal_task_id == kFileBrowserWatchTaskId) {
|
| - GURL url;
|
| - if (!ConvertFileToFileSystemUrl(profile, path,
|
| - GetFileBrowserExtensionUrl().GetOrigin(), &url))
|
| - return false;
|
| + if (!IsFileManagerPackaged()) {
|
| + if (internal_task_id == kFileBrowserPlayTaskId) {
|
| + GURL url;
|
| + if (!ConvertFileToFileSystemUrl(profile, path,
|
| + GetFileBrowserExtensionUrl().GetOrigin(), &url))
|
| + return false;
|
| + MediaPlayer* mediaplayer = MediaPlayer::GetInstance();
|
| + mediaplayer->PopupMediaPlayer();
|
| + mediaplayer->ForcePlayMediaURL(url);
|
| + return true;
|
| + }
|
| + if (internal_task_id == kFileBrowserWatchTaskId) {
|
| + GURL url;
|
| + if (!ConvertFileToFileSystemUrl(profile, path,
|
| + GetFileBrowserExtensionUrl().GetOrigin(), &url))
|
| + return false;
|
|
|
| - ExtensionService* service = profile->GetExtensionService();
|
| - if (!service)
|
| - return false;
|
| + ExtensionService* service = profile->GetExtensionService();
|
| + if (!service)
|
| + return false;
|
|
|
| - const extensions::Extension* extension =
|
| - service->GetExtensionById(kFileBrowserDomain, false);
|
| - if (!extension)
|
| - return false;
|
| -
|
| - application_launch::LaunchParams params(profile, extension,
|
| - extension_misc::LAUNCH_WINDOW,
|
| - NEW_FOREGROUND_TAB);
|
| - params.override_url = GetVideoPlayerUrl(url);
|
| - application_launch::OpenApplication(params);
|
| - return true;
|
| + const extensions::Extension* extension =
|
| + service->GetExtensionById(kFileBrowserDomain, false);
|
| + if (!extension)
|
| + return false;
|
| +
|
| + application_launch::LaunchParams params(profile, extension,
|
| + extension_misc::LAUNCH_WINDOW,
|
| + NEW_FOREGROUND_TAB);
|
| + params.override_url = GetVideoPlayerUrl(url);
|
| + application_launch::OpenApplication(params);
|
| + return true;
|
| + }
|
| }
|
|
|
| if (IsCRXFile(file_extension.data())) {
|
|
|