Index: apps/launcher.cc |
diff --git a/apps/launcher.cc b/apps/launcher.cc |
index 02c630279efeff15a2e8a9b58552cc184014d8a2..6904f0f0cd8f5226b6466c33759d95e699dd81d6 100644 |
--- a/apps/launcher.cc |
+++ b/apps/launcher.cc |
@@ -95,30 +95,38 @@ class PlatformAppPathLauncher |
: public base::RefCountedThreadSafe<PlatformAppPathLauncher> { |
public: |
PlatformAppPathLauncher(Profile* profile, |
- const Extension* extension, |
+ const Extension* app, |
const std::vector<base::FilePath>& entry_paths) |
: profile_(profile), |
- extension_id(extension->id()), |
+ extension_id(app->id()), |
entry_paths_(entry_paths), |
mime_type_collector_(profile), |
is_directory_collector_(profile) {} |
PlatformAppPathLauncher(Profile* profile, |
- const Extension* extension, |
+ const Extension* app, |
const base::FilePath& file_path) |
: profile_(profile), |
- extension_id(extension->id()), |
+ extension_id(app->id()), |
mime_type_collector_(profile), |
is_directory_collector_(profile) { |
if (!file_path.empty()) |
entry_paths_.push_back(file_path); |
} |
+ void set_action_data(std::unique_ptr<app_runtime::ActionData> action_data) { |
+ action_data_ = std::move(action_data); |
+ } |
+ |
+ void set_launch_source(extensions::AppLaunchSource launch_source) { |
+ launch_source_ = launch_source; |
+ } |
+ |
void Launch() { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- const Extension* extension = GetExtension(); |
- if (!extension) |
+ const Extension* app = GetExtension(); |
+ if (!app) |
return; |
if (entry_paths_.empty()) { |
@@ -133,7 +141,7 @@ class PlatformAppPathLauncher |
is_directory_collector_.CollectForEntriesPaths( |
entry_paths_, |
base::Bind(&PlatformAppPathLauncher::OnAreDirectoriesCollected, this, |
- HasFileSystemWritePermission(extension))); |
+ HasFileSystemWritePermission(app))); |
} |
void LaunchWithHandler(const std::string& handler_id) { |
@@ -191,12 +199,12 @@ class PlatformAppPathLauncher |
// This method is required as an entry point on the UI thread. |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- const Extension* extension = GetExtension(); |
- if (!extension) |
+ const Extension* app = GetExtension(); |
+ if (!app) |
return; |
AppRuntimeEventRouter::DispatchOnLaunchedEvent( |
- profile_, extension, extensions::SOURCE_FILE_HANDLER); |
+ profile_, app, launch_source_, std::move(action_data_)); |
} |
void OnAreDirectoriesCollected( |
@@ -230,14 +238,14 @@ class PlatformAppPathLauncher |
extensions::EntryInfo(entry_paths_[i], mime_type, is_directory)); |
} |
- const Extension* extension = GetExtension(); |
- if (!extension) |
+ const Extension* app = GetExtension(); |
+ if (!app) |
return; |
// Find file handler from the platform app for the file being opened. |
const extensions::FileHandlerInfo* handler = NULL; |
if (!handler_id_.empty()) { |
- handler = FileHandlerForId(*extension, handler_id_); |
+ handler = FileHandlerForId(*app, handler_id_); |
if (handler) { |
for (size_t i = 0; i < entry_paths_.size(); ++i) { |
if (!FileHandlerCanHandleEntry(*handler, entries_[i])) { |
@@ -252,7 +260,7 @@ class PlatformAppPathLauncher |
} else { |
const std::vector<const extensions::FileHandlerInfo*>& handlers = |
extensions::app_file_handler_util::FindFileHandlersForEntries( |
- *extension, entries_); |
+ *app, entries_); |
if (!handlers.empty()) |
handler = handlers[0]; |
} |
@@ -275,7 +283,7 @@ class PlatformAppPathLauncher |
// call back to us. |
extensions::LazyBackgroundTaskQueue* const queue = |
extensions::LazyBackgroundTaskQueue::Get(profile_); |
- if (queue->ShouldEnqueueTask(profile_, extension)) { |
+ if (queue->ShouldEnqueueTask(profile_, app)) { |
queue->AddPendingTask( |
profile_, extension_id, |
base::Bind(&PlatformAppPathLauncher::GrantAccessToFilesAndLaunch, |
@@ -292,8 +300,8 @@ class PlatformAppPathLauncher |
} |
void GrantAccessToFilesAndLaunch(ExtensionHost* host) { |
- const Extension* extension = GetExtension(); |
- if (!extension) |
+ const Extension* app = GetExtension(); |
+ if (!app) |
return; |
// If there was an error loading the app page, |host| will be NULL. |
@@ -304,13 +312,14 @@ class PlatformAppPathLauncher |
std::vector<GrantedFileEntry> granted_entries; |
for (size_t i = 0; i < entry_paths_.size(); ++i) { |
- granted_entries.push_back(CreateFileEntry( |
- profile_, extension, host->render_process_host()->GetID(), |
- entries_[i].path, entries_[i].is_directory)); |
+ granted_entries.push_back( |
+ CreateFileEntry(profile_, app, host->render_process_host()->GetID(), |
+ entries_[i].path, entries_[i].is_directory)); |
} |
AppRuntimeEventRouter::DispatchOnLaunchedEventWithFileEntries( |
- profile_, extension, handler_id_, entries_, granted_entries); |
+ profile_, app, launch_source_, handler_id_, entries_, granted_entries, |
+ std::move(action_data_)); |
} |
const Extension* GetExtension() const { |
@@ -324,6 +333,8 @@ class PlatformAppPathLauncher |
// not kept as the extension may be unloaded and deleted during the course of |
// the launch. |
const std::string extension_id; |
+ extensions::AppLaunchSource launch_source_ = extensions::SOURCE_FILE_HANDLER; |
+ std::unique_ptr<app_runtime::ActionData> action_data_; |
// A list of files and directories to be passed through to the app. |
std::vector<base::FilePath> entry_paths_; |
// A corresponding list with EntryInfo for every base::FilePath in |
@@ -341,14 +352,14 @@ class PlatformAppPathLauncher |
} // namespace |
void LaunchPlatformAppWithCommandLine(Profile* profile, |
- const Extension* extension, |
+ const Extension* app, |
const base::CommandLine& command_line, |
const base::FilePath& current_directory, |
extensions::AppLaunchSource source) { |
// An app with "kiosk_only" should not be installed and launched |
// outside of ChromeOS kiosk mode in the first place. This is a defensive |
// check in case this scenario does occur. |
- if (extensions::KioskModeInfo::IsKioskOnly(extension)) { |
+ if (extensions::KioskModeInfo::IsKioskOnly(app)) { |
bool in_kiosk_mode = false; |
#if defined(OS_CHROMEOS) |
user_manager::UserManager* user_manager = user_manager::UserManager::Get(); |
@@ -375,77 +386,86 @@ void LaunchPlatformAppWithCommandLine(Profile* profile, |
// causes problems on the bots. |
if (args.empty() || (command_line.HasSwitch(switches::kTestType) && |
args[0] == about_blank_url)) { |
- AppRuntimeEventRouter::DispatchOnLaunchedEvent(profile, extension, source); |
+ AppRuntimeEventRouter::DispatchOnLaunchedEvent( |
+ profile, app, source, std::unique_ptr<app_runtime::ActionData>()); |
return; |
} |
base::FilePath file_path(command_line.GetArgs()[0]); |
scoped_refptr<PlatformAppPathLauncher> launcher = |
- new PlatformAppPathLauncher(profile, extension, file_path); |
+ new PlatformAppPathLauncher(profile, app, file_path); |
launcher->LaunchWithRelativePath(current_directory); |
} |
void LaunchPlatformAppWithPath(Profile* profile, |
- const Extension* extension, |
+ const Extension* app, |
const base::FilePath& file_path) { |
scoped_refptr<PlatformAppPathLauncher> launcher = |
- new PlatformAppPathLauncher(profile, extension, file_path); |
+ new PlatformAppPathLauncher(profile, app, file_path); |
+ launcher->Launch(); |
+} |
+ |
+void LaunchPlatformAppWithAction( |
+ Profile* profile, |
+ const extensions::Extension* app, |
+ std::unique_ptr<app_runtime::ActionData> action_data, |
+ const base::FilePath& file_path) { |
+ scoped_refptr<PlatformAppPathLauncher> launcher = |
+ new PlatformAppPathLauncher(profile, app, file_path); |
+ launcher->set_action_data(std::move(action_data)); |
+ launcher->set_launch_source(extensions::AppLaunchSource::SOURCE_UNTRACKED); |
launcher->Launch(); |
} |
void LaunchPlatformApp(Profile* profile, |
- const Extension* extension, |
+ const Extension* app, |
extensions::AppLaunchSource source) { |
LaunchPlatformAppWithCommandLine( |
- profile, |
- extension, |
- base::CommandLine(base::CommandLine::NO_PROGRAM), |
- base::FilePath(), |
- source); |
+ profile, app, base::CommandLine(base::CommandLine::NO_PROGRAM), |
+ base::FilePath(), source); |
} |
void LaunchPlatformAppWithFileHandler( |
Profile* profile, |
- const Extension* extension, |
+ const Extension* app, |
const std::string& handler_id, |
const std::vector<base::FilePath>& entry_paths) { |
scoped_refptr<PlatformAppPathLauncher> launcher = |
- new PlatformAppPathLauncher(profile, extension, entry_paths); |
+ new PlatformAppPathLauncher(profile, app, entry_paths); |
launcher->LaunchWithHandler(handler_id); |
} |
-void RestartPlatformApp(Profile* profile, const Extension* extension) { |
+void RestartPlatformApp(Profile* profile, const Extension* app) { |
EventRouter* event_router = EventRouter::Get(profile); |
- bool listening_to_restart = event_router-> |
- ExtensionHasEventListener(extension->id(), |
- app_runtime::OnRestarted::kEventName); |
+ bool listening_to_restart = event_router->ExtensionHasEventListener( |
+ app->id(), app_runtime::OnRestarted::kEventName); |
if (listening_to_restart) { |
- AppRuntimeEventRouter::DispatchOnRestartedEvent(profile, extension); |
+ AppRuntimeEventRouter::DispatchOnRestartedEvent(profile, app); |
return; |
} |
extensions::ExtensionPrefs* extension_prefs = |
extensions::ExtensionPrefs::Get(profile); |
- bool had_windows = extension_prefs->IsActive(extension->id()); |
- extension_prefs->SetIsActive(extension->id(), false); |
- bool listening_to_launch = event_router-> |
- ExtensionHasEventListener(extension->id(), |
- app_runtime::OnLaunched::kEventName); |
+ bool had_windows = extension_prefs->IsActive(app->id()); |
+ extension_prefs->SetIsActive(app->id(), false); |
+ bool listening_to_launch = event_router->ExtensionHasEventListener( |
+ app->id(), app_runtime::OnLaunched::kEventName); |
if (listening_to_launch && had_windows) { |
AppRuntimeEventRouter::DispatchOnLaunchedEvent( |
- profile, extension, extensions::SOURCE_RESTART); |
+ profile, app, extensions::SOURCE_RESTART, |
+ std::unique_ptr<app_runtime::ActionData>()); |
} |
} |
void LaunchPlatformAppWithUrl(Profile* profile, |
- const Extension* extension, |
+ const Extension* app, |
const std::string& handler_id, |
const GURL& url, |
const GURL& referrer_url) { |
AppRuntimeEventRouter::DispatchOnLaunchedEventWithUrl( |
- profile, extension, handler_id, url, referrer_url); |
+ profile, app, handler_id, url, referrer_url); |
} |
} // namespace apps |