Index: chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.cc |
diff --git a/chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.cc b/chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.cc |
index 9626d48edd33880a1c437728506cb81c53adfddc..e4d3a4eaa911b104031dd86ee21ea27116f4b24e 100644 |
--- a/chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.cc |
+++ b/chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.cc |
@@ -8,7 +8,7 @@ |
#include "ash/shelf/shelf_model.h" |
#include "ash/shell.h" |
#include "ash/wm/window_util.h" |
-#include "chrome/browser/favicon/favicon_tab_helper.h" |
+#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item.h" |
#include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item_tab.h" |
#include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" |
@@ -23,6 +23,7 @@ |
#include "chrome/browser/ui/browser_window.h" |
#include "chrome/browser/ui/host_desktop.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
+#include "chrome/browser/web_applications/web_app.h" |
#include "chrome/common/extensions/manifest_handlers/app_launch_info.h" |
#include "content/public/browser/navigation_entry.h" |
#include "content/public/browser/web_contents.h" |
@@ -184,7 +185,7 @@ AppShortcutLauncherItemController::GetRunningApplications() { |
for (int index = 0; index < tab_strip->count(); index++) { |
content::WebContents* web_contents = tab_strip->GetWebContentsAt(index); |
if (WebContentMatchesApp( |
- extension, refocus_pattern, web_contents, browser->is_app())) |
+ extension, refocus_pattern, web_contents, browser)) |
items.push_back(web_contents); |
} |
} |
@@ -256,7 +257,7 @@ content::WebContents* AppShortcutLauncherItemController::GetLRUApplication() { |
content::WebContents* web_contents = tab_strip->GetWebContentsAt( |
(index + active_index) % tab_strip->count()); |
if (WebContentMatchesApp( |
- extension, refocus_pattern, web_contents, browser->is_app())) |
+ extension, refocus_pattern, web_contents, browser)) |
return web_contents; |
} |
} |
@@ -272,7 +273,7 @@ content::WebContents* AppShortcutLauncherItemController::GetLRUApplication() { |
for (int index = 0; index < tab_strip->count(); index++) { |
content::WebContents* web_contents = tab_strip->GetWebContentsAt(index); |
if (WebContentMatchesApp( |
- extension, refocus_pattern, web_contents, browser->is_app())) |
+ extension, refocus_pattern, web_contents, browser)) |
return web_contents; |
} |
} |
@@ -283,17 +284,25 @@ bool AppShortcutLauncherItemController::WebContentMatchesApp( |
const extensions::Extension* extension, |
const URLPattern& refocus_pattern, |
content::WebContents* web_contents, |
- bool is_app) { |
- // Note: We can come here when the initial navigation isn't completed and |
- // no entry was yet created. |
- const GURL tab_url = is_app && web_contents->GetController().GetEntryCount() ? |
- web_contents->GetController().GetEntryAtIndex(0)->GetURL() : |
- web_contents->GetURL(); |
+ Browser* browser) { |
+ // If the browser is an app window and the app name matches the extension. |
+ if (browser->is_app()) { |
+ const extensions::Extension* browser_extension = NULL; |
+ const ExtensionService* extension_service = |
+ browser->profile()->GetExtensionService(); |
+ if (extension_service) { |
+ browser_extension = extension_service->GetInstalledExtension( |
+ web_app::GetExtensionIdFromApplicationName(browser->app_name())); |
+ } |
+ return browser_extension == extension; |
+ } |
+ |
// There are three ways to identify the association of a URL with this |
// extension: |
// - The refocus pattern is matched (needed for apps like drive). |
// - The extension's origin + extent gets matched. |
// - The launcher controller knows that the tab got created for this app. |
+ const GURL tab_url = web_contents->GetURL(); |
return ((!refocus_pattern.match_all_urls() && |
refocus_pattern.MatchesURL(tab_url)) || |
(extension->OverlapsWithOrigin(tab_url) && |