Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1666)

Unified Diff: apps/app_shim/app_shim_host_mac.cc

Issue 15269003: Refactor extension handling code from AppShimHost into ExtensionAppShimHandler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add default handler to AppShimHandler. Fix test. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: apps/app_shim/app_shim_host_mac.cc
diff --git a/apps/app_shim/app_shim_host_mac.cc b/apps/app_shim/app_shim_host_mac.cc
index bfe28f9ac434b383dd9f2090769006bf839f1cda..7a6ffd130fff13b88b2eb39ee9cbd60aa757df47 100644
--- a/apps/app_shim/app_shim_host_mac.cc
+++ b/apps/app_shim/app_shim_host_mac.cc
@@ -39,6 +39,14 @@ void AppShimHost::ServeChannel(const IPC::ChannelHandle& handle) {
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)));
}
+const std::string& AppShimHost::app_id() const {
+ return app_id_;
+}
+
+Profile* AppShimHost::profile() const {
+ return profile_;
+}
+
bool AppShimHost::OnMessageReceived(const IPC::Message& message) {
DCHECK(CalledOnValidThread());
bool handled = true;
@@ -62,57 +70,23 @@ bool AppShimHost::Send(IPC::Message* message) {
void AppShimHost::OnLaunchApp(std::string profile_dir, std::string app_id) {
DCHECK(CalledOnValidThread());
+ if (profile_) {
tapted 2013/05/21 06:15:37 Maybe DCHECK(!profile) as well? There would need t
jackhou1 2013/05/22 23:54:44 Done.
+ // Only one app launch message per channel.
+ Send(new AppShimMsg_LaunchApp_Done(false));
+ return;
+ }
+ profile_ = FetchProfileForDirectory(profile_dir);
tapted 2013/05/21 06:15:37 nit: blank line before, for early return
jackhou1 2013/05/22 23:54:44 Done.
app_id_ = app_id;
apps::AppShimHandler* handler = apps::AppShimHandler::GetForAppMode(app_id_);
- bool success =
- handler ? handler->OnShimLaunch(this) : LaunchAppImpl(profile_dir);
+ bool success = handler && handler->OnShimLaunch(this);
Send(new AppShimMsg_LaunchApp_Done(success));
}
void AppShimHost::OnFocus() {
DCHECK(CalledOnValidThread());
apps::AppShimHandler* handler = apps::AppShimHandler::GetForAppMode(app_id_);
- if (handler) {
+ if (handler)
handler->OnShimFocus(this);
- return;
- }
-
- if (!profile_)
- return;
- extensions::ShellWindowRegistry* registry =
- extensions::ShellWindowRegistry::Get(profile_);
- const std::set<ShellWindow*> windows =
- registry->GetShellWindowsForApp(app_id_);
- std::set<gfx::NativeWindow> native_windows;
- for (std::set<ShellWindow*>::const_iterator i = windows.begin();
- i != windows.end();
- ++i) {
- native_windows.insert((*i)->GetNativeWindow());
- }
- ui::FocusWindowSet(native_windows);
-}
-
-bool AppShimHost::LaunchAppImpl(const std::string& profile_dir) {
- DCHECK(CalledOnValidThread());
- if (profile_) {
- // Only one app launch message per channel.
- return false;
- }
- if (!extensions::Extension::IdIsValid(app_id_)) {
- LOG(ERROR) << "Bad app ID from app shim launch message.";
- return false;
- }
- Profile* profile = FetchProfileForDirectory(profile_dir);
- if (!profile)
- return false;
-
- if (!LaunchApp(profile))
- return false;
-
- profile_ = profile;
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED,
- content::Source<Profile>(profile_));
- return true;
}
Profile* AppShimHost::FetchProfileForDirectory(const std::string& profile_dir) {
@@ -138,50 +112,6 @@ Profile* AppShimHost::FetchProfileForDirectory(const std::string& profile_dir) {
return profile;
}
-bool AppShimHost::LaunchApp(Profile* profile) {
- extensions::ExtensionSystem* extension_system =
- extensions::ExtensionSystem::Get(profile);
- ExtensionServiceInterface* extension_service =
- extension_system->extension_service();
- const extensions::Extension* extension =
- extension_service->GetExtensionById(
- app_id_, false);
- if (!extension) {
- LOG(ERROR) << "Attempted to launch nonexistent app with id '"
- << app_id_ << "'.";
- return false;
- }
- // TODO(jeremya): Handle the case that launching the app fails. Probably we
- // need to watch for 'app successfully launched' or at least 'background page
- // exists/was created' and time out with failure if we don't see that sign of
- // life within a certain window.
- chrome::AppLaunchParams params(profile,
- extension,
- extension_misc::LAUNCH_NONE,
- NEW_WINDOW);
- chrome::OpenApplication(params);
- return true;
-}
-
-void AppShimHost::Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- DCHECK(CalledOnValidThread());
- DCHECK(content::Source<Profile>(source).ptr() == profile_);
- switch (type) {
- case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: {
- extensions::ExtensionHost* extension_host =
- content::Details<extensions::ExtensionHost>(details).ptr();
- if (app_id_ == extension_host->extension_id())
- Close();
- break;
- }
- default:
- NOTREACHED() << "Unexpected notification sent.";
- break;
- }
-}
-
void AppShimHost::OnAppClosed() {
Close();
}

Powered by Google App Engine
This is Rietveld 408576698