Index: chrome/browser/ui/ash/launcher/browser_status_monitor.cc |
diff --git a/chrome/browser/ui/ash/launcher/browser_status_monitor.cc b/chrome/browser/ui/ash/launcher/browser_status_monitor.cc |
index 31cffa66c0eb4fb5d422bfee11d9cbfbe53e495a..a3eb0435416e6a0ba7b8102f04b0077eb4c87c1d 100644 |
--- a/chrome/browser/ui/ash/launcher/browser_status_monitor.cc |
+++ b/chrome/browser/ui/ash/launcher/browser_status_monitor.cc |
@@ -104,9 +104,10 @@ BrowserStatusMonitor::BrowserStatusMonitor( |
: launcher_controller_(launcher_controller), |
observed_activation_clients_(this), |
observed_root_windows_(this), |
- settings_window_observer_(new SettingsWindowObserver) { |
+ settings_window_observer_(new SettingsWindowObserver), |
+ browser_tab_strip_tracker_(this, this, this) { |
DCHECK(launcher_controller_); |
- BrowserList::AddObserver(this); |
+ |
chrome::SettingsWindowManager::GetInstance()->AddObserver( |
settings_window_observer_.get()); |
@@ -127,6 +128,9 @@ BrowserStatusMonitor::BrowserStatusMonitor( |
} |
ash::Shell::GetInstance()->GetScreen()->AddObserver(this); |
} |
+ |
+ browser_tab_strip_tracker_.Init( |
+ BrowserTabStripTracker::InitWith::ALL_BROWERS); |
} |
BrowserStatusMonitor::~BrowserStatusMonitor() { |
@@ -138,14 +142,7 @@ BrowserStatusMonitor::~BrowserStatusMonitor() { |
chrome::SettingsWindowManager::GetInstance()->RemoveObserver( |
settings_window_observer_.get()); |
- BrowserList::RemoveObserver(this); |
- |
- BrowserList* browser_list = |
- BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH); |
- for (BrowserList::const_iterator i = browser_list->begin(); |
- i != browser_list->end(); ++i) { |
- OnBrowserRemoved(*i); |
- } |
+ browser_tab_strip_tracker_.StopObservingAndSendOnBrowserRemoved(); |
STLDeleteContainerPairSecondPointers(webcontents_to_observer_map_.begin(), |
webcontents_to_observer_map_.end()); |
@@ -211,28 +208,22 @@ void BrowserStatusMonitor::OnWindowDestroyed(aura::Window* window) { |
aura::client::GetActivationClient(window)); |
} |
-void BrowserStatusMonitor::OnBrowserAdded(Browser* browser) { |
- if (browser->host_desktop_type() != chrome::HOST_DESKTOP_TYPE_ASH) |
- return; |
+bool BrowserStatusMonitor::ShouldTrackBrowser(Browser* browser) { |
+ return browser->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH; |
+} |
+void BrowserStatusMonitor::OnBrowserAdded(Browser* browser) { |
if (browser->is_type_popup() && browser->is_app()) { |
// Note: A V1 application will set the tab strip observer when the app gets |
// added to the shelf. This makes sure that in the multi user case we will |
// only set the observer while the app item exists in the shelf. |
AddV1AppToShelf(browser); |
- } else { |
- browser->tab_strip_model()->AddObserver(this); |
} |
} |
void BrowserStatusMonitor::OnBrowserRemoved(Browser* browser) { |
- if (browser->host_desktop_type() != chrome::HOST_DESKTOP_TYPE_ASH) |
- return; |
- |
if (browser->is_type_popup() && browser->is_app()) |
RemoveV1AppFromShelf(browser); |
- else |
- browser->tab_strip_model()->RemoveObserver(this); |
UpdateBrowserItemState(); |
} |
@@ -349,8 +340,6 @@ void BrowserStatusMonitor::WebContentsDestroyed( |
void BrowserStatusMonitor::AddV1AppToShelf(Browser* browser) { |
DCHECK(browser->is_type_popup() && browser->is_app()); |
- browser->tab_strip_model()->AddObserver(this); |
- |
std::string app_id = |
web_app::GetExtensionIdFromApplicationName(browser->app_name()); |
if (!app_id.empty()) { |
@@ -362,8 +351,6 @@ void BrowserStatusMonitor::AddV1AppToShelf(Browser* browser) { |
void BrowserStatusMonitor::RemoveV1AppFromShelf(Browser* browser) { |
DCHECK(browser->is_type_popup() && browser->is_app()); |
- browser->tab_strip_model()->RemoveObserver(this); |
- |
if (browser_to_app_id_map_.find(browser) != browser_to_app_id_map_.end()) { |
launcher_controller_->UnlockV1AppWithID(browser_to_app_id_map_[browser]); |
browser_to_app_id_map_.erase(browser); |