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

Unified Diff: chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc

Issue 23534022: Handling browser item status in BrowserShortcutLauncherItemController (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 4 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: chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc
diff --git a/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc b/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc
index 2f0020122e542c937fce17ab87b00525769891f5..9f5d8f6699f314218fb02f8b0c84ed0863c94c91 100644
--- a/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc
+++ b/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc
@@ -7,6 +7,8 @@
#include <vector>
#include "ash/launcher/launcher.h"
+#include "ash/launcher/launcher_model.h"
+#include "ash/launcher/launcher_util.h"
#include "ash/shell.h"
#include "ash/wm/window_util.h"
#include "chrome/browser/profiles/profile.h"
@@ -19,6 +21,7 @@
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/extensions/extension_constants.h"
#include "content/public/browser/web_contents.h"
#include "grit/ash_resources.h"
@@ -48,6 +51,54 @@ BrowserShortcutLauncherItemController::
~BrowserShortcutLauncherItemController() {
}
+void BrowserShortcutLauncherItemController::UpdateBrowserItemStatus() {
+ // This check needs for win7_aura. UpdateBrowserItemStatus() access Shell.
Mr4D (OOO till 08-26) 2013/09/04 15:12:33 Maybe something like: // The shell will not be av
simonhong_ 2013/09/04 17:08:31 Done.
+ // Without this ChromeLauncherControllerTest.BrowserMenuGeneration test will
+ // fail.
+ if (!ash::Shell::HasInstance())
+ return;
+
+ ash::LauncherModel* model = launcher_controller()->model();
+
+ // Determine the new browser's active state and change if necessary.
+ size_t browser_index = ash::launcher::GetBrowserItemIndex(*model);
+ DCHECK_GE(browser_index, 0u);
+ ash::LauncherItem browser_item = model->items()[browser_index];
+ ash::LauncherItemStatus browser_status = ash::STATUS_CLOSED;
+
+ aura::Window* window = ash::wm::GetActiveWindow();
+ if (window) {
+ // Check if the active browser / tab is a browser which is not an app,
+ // a windowed app, a popup or any other item which is not a browser of
+ // interest.
+ Browser* browser = chrome::FindBrowserWithWindow(window);
+ if (IsBrowserRepresentedInBrowserList(browser)) {
+ browser_status = ash::STATUS_ACTIVE;
+ // If an app is running in active window, browser item status cannot be
+ // active.
+ if (launcher_controller()->GetIDByWindow(window) != browser_item.id)
+ browser_status = ash::STATUS_RUNNING;
+ }
+ }
+
+ if (browser_status == ash::STATUS_CLOSED) {
+ const BrowserList* ash_browser_list =
+ BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH);
+ for (BrowserList::const_reverse_iterator it =
+ ash_browser_list->begin_last_active();
+ it != ash_browser_list->end_last_active() &&
+ browser_status == ash::STATUS_CLOSED; ++it) {
+ if (IsBrowserRepresentedInBrowserList(*it))
+ browser_status = ash::STATUS_RUNNING;
+ }
+ }
+
+ if (browser_status != browser_item.status) {
+ browser_item.status = browser_status;
+ model->Set(browser_index, browser_item);
+ }
+}
+
string16 BrowserShortcutLauncherItemController::GetTitle() {
return l10n_util::GetStringUTF16(IDS_PRODUCT_NAME);
}
@@ -157,7 +208,7 @@ BrowserShortcutLauncherItemController::GetApplicationList(int event_flags) {
continue;
if (browser->is_type_tabbed())
found_tabbed_browser = true;
- else if (!launcher_controller()->IsBrowserRepresentedInBrowserList(browser))
+ else if (!IsBrowserRepresentedInBrowserList(browser))
continue;
TabStripModel* tab_strip = browser->tab_strip_model();
if (tab_strip->active_index() == -1)
@@ -223,7 +274,7 @@ void BrowserShortcutLauncherItemController::ActivateOrAdvanceToNextBrowser() {
for (BrowserList::const_iterator it =
ash_browser_list->begin();
it != ash_browser_list->end(); ++it) {
- if (launcher_controller()->IsBrowserRepresentedInBrowserList(*it))
+ if (IsBrowserRepresentedInBrowserList(*it))
items.push_back(*it);
}
// If there are no suitable browsers we create a new one.
@@ -254,7 +305,7 @@ void BrowserShortcutLauncherItemController::ActivateOrAdvanceToNextBrowser() {
true,
chrome::HOST_DESKTOP_TYPE_ASH);
if (!browser ||
- !launcher_controller()->IsBrowserRepresentedInBrowserList(browser))
+ !IsBrowserRepresentedInBrowserList(browser))
browser = items[0];
}
}
@@ -262,3 +313,14 @@ void BrowserShortcutLauncherItemController::ActivateOrAdvanceToNextBrowser() {
browser->window()->Show();
browser->window()->Activate();
}
+
+bool BrowserShortcutLauncherItemController::IsBrowserRepresentedInBrowserList(
+ Browser* browser) {
+ return (browser &&
+ (browser->is_type_tabbed() ||
+ !browser->is_app() ||
+ !browser->is_type_popup() ||
+ launcher_controller()->
+ GetLauncherIDForAppID(web_app::GetExtensionIdFromApplicationName(
+ browser->app_name())) <= 0));
+}

Powered by Google App Engine
This is Rietveld 408576698