Index: chrome/browser/app_controller_mac.mm |
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm |
index 2e2dfe57e200c64a0cff295ef819aeefefa3b63b..174b78658808204013d1d1fd6727cccc8dc5091f 100644 |
--- a/chrome/browser/app_controller_mac.mm |
+++ b/chrome/browser/app_controller_mac.mm |
@@ -74,6 +74,7 @@ |
#include "chrome/browser/ui/startup/startup_browser_creator.h" |
#include "chrome/browser/ui/startup/startup_browser_creator_impl.h" |
#include "chrome/browser/ui/user_manager.h" |
+#include "chrome/browser/web_applications/web_app_mac.h" |
#include "chrome/common/chrome_paths_internal.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/cloud_print/cloud_print_class_mac.h" |
@@ -93,11 +94,14 @@ |
#include "content/public/browser/plugin_service.h" |
#include "content/public/browser/user_metrics.h" |
#include "extensions/browser/extension_system.h" |
+#include "extensions/browser/extension_registry.h" |
#include "net/base/filename_util.h" |
#include "ui/base/cocoa/focus_window_set.h" |
#include "ui/base/l10n/l10n_util.h" |
#include "ui/base/l10n/l10n_util_mac.h" |
+using apps::AppShimHandler; |
+using apps::ExtensionAppShimHandler; |
using base::UserMetricsAction; |
using content::BrowserContext; |
using content::BrowserThread; |
@@ -1185,8 +1189,22 @@ class AppControllerProfileObserver : public ProfileInfoCacheObserver { |
// notifications so we still need to open a new window. |
if (hasVisibleWindows) { |
std::set<NSWindow*> browserWindows; |
+ ExtensionAppShimHandler* appShimHandler = |
+ g_browser_process->platform_part() |
+ ->app_shim_host_manager() |
+ ->extension_app_shim_handler(); |
for (chrome::BrowserIterator iter; !iter.done(); iter.Next()) { |
Browser* browser = *iter; |
+ // When focusing Chrome, don't focus any browser windows associated with |
+ // a currently running app shim, so ignore them. |
+ if (browser && browser->is_app()) { |
+ AppShimHandler::Host* host = appShimHandler->FindHost( |
+ browser->profile(), |
+ web_app::GetExtensionIdFromApplicationName(browser->app_name())); |
+ if (host) { |
+ continue; |
+ } |
+ } |
browserWindows.insert(browser->window()->GetNativeWindow()); |
} |
if (!browserWindows.empty()) { |