summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/automation/testing_automation_provider.cc9
-rw-r--r--chrome/browser/ui/browser_list.cc13
-rw-r--r--chrome/browser/ui/browser_list.h7
-rw-r--r--chrome/browser/ui/browser_list_impl.h13
4 files changed, 27 insertions, 15 deletions
diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc
index adb1e94..0918e7f 100644
--- a/chrome/browser/automation/testing_automation_provider.cc
+++ b/chrome/browser/automation/testing_automation_provider.cc
@@ -92,6 +92,7 @@
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_iterator.h"
+#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_list_impl.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window.h"
@@ -253,9 +254,7 @@ TestingAutomationProvider::TestingAutomationProvider(Profile* profile)
, power_manager_observer_(NULL)
#endif
{
- // The automation layer doesn't support non-native desktops.
- chrome::BrowserListImpl::GetInstance(
- chrome::HOST_DESKTOP_TYPE_NATIVE)->AddObserver(this);
+ BrowserList::AddObserver(this);
registrar_.Add(this, chrome::NOTIFICATION_SESSION_END,
content::NotificationService::AllSources());
#if defined(OS_CHROMEOS)
@@ -267,9 +266,7 @@ TestingAutomationProvider::~TestingAutomationProvider() {
#if defined(OS_CHROMEOS)
RemoveChromeosObservers();
#endif
- // The automation layer doesn't support non-native desktops.
- chrome::BrowserListImpl::GetInstance(
- chrome::HOST_DESKTOP_TYPE_NATIVE)->RemoveObserver(this);
+ BrowserList::RemoveObserver(this);
}
IPC::Channel::Mode TestingAutomationProvider::GetChannelMode(
diff --git a/chrome/browser/ui/browser_list.cc b/chrome/browser/ui/browser_list.cc
index ef5f75f..8ac380a 100644
--- a/chrome/browser/ui/browser_list.cc
+++ b/chrome/browser/ui/browser_list.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/ui/browser_list_impl.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/host_desktop.h"
using content::WebContents;
@@ -35,12 +36,20 @@ void BrowserList::RemoveBrowser(Browser* browser) {
// static
void BrowserList::AddObserver(chrome::BrowserListObserver* observer) {
- GetNativeList()->AddObserver(observer);
+ for (chrome::HostDesktopType t = chrome::HOST_DESKTOP_TYPE_FIRST;
+ t < chrome::HOST_DESKTOP_TYPE_COUNT;
+ t = static_cast<chrome::HostDesktopType>(t + 1)) {
+ chrome::BrowserListImpl::GetInstance(t)->AddObserver(observer);
+ }
}
// static
void BrowserList::RemoveObserver(chrome::BrowserListObserver* observer) {
- GetNativeList()->RemoveObserver(observer);
+ for (chrome::HostDesktopType t = chrome::HOST_DESKTOP_TYPE_FIRST;
+ t < chrome::HOST_DESKTOP_TYPE_COUNT;
+ t = static_cast<chrome::HostDesktopType>(t + 1)) {
+ chrome::BrowserListImpl::GetInstance(t)->RemoveObserver(observer);
+ }
}
void BrowserList::CloseAllBrowsersWithProfile(Profile* profile) {
diff --git a/chrome/browser/ui/browser_list.h b/chrome/browser/ui/browser_list.h
index f3103cf..eb48b2f 100644
--- a/chrome/browser/ui/browser_list.h
+++ b/chrome/browser/ui/browser_list.h
@@ -22,12 +22,13 @@ class BrowserList {
typedef std::vector<Browser*> BrowserVector;
typedef BrowserVector::const_reverse_iterator const_reverse_iterator;
- // Adds and removes browsers from the global list. The browser object should
- // be valid BEFORE these calls (for the benefit of observers), so notify and
- // THEN delete the object.
+ // Adds and removes browsers from the list they are associated with. The
+ // browser object should be valid BEFORE these calls (for the benefit of
+ // observers), so notify and THEN delete the object.
static void AddBrowser(Browser* browser);
static void RemoveBrowser(Browser* browser);
+ // Adds and removes |observer| from the observer list of each desktop.
static void AddObserver(chrome::BrowserListObserver* observer);
static void RemoveObserver(chrome::BrowserListObserver* observer);
diff --git a/chrome/browser/ui/browser_list_impl.h b/chrome/browser/ui/browser_list_impl.h
index 2801a6e..3ff167c 100644
--- a/chrome/browser/ui/browser_list_impl.h
+++ b/chrome/browser/ui/browser_list_impl.h
@@ -6,10 +6,10 @@
#define CHROME_BROWSER_UI_BROWSER_LIST_IMPL_H_
#include "base/observer_list.h"
+#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/host_desktop.h"
class Browser;
-class BrowserList;
class Profile;
namespace chrome {
@@ -33,9 +33,6 @@ class BrowserListImpl {
void AddBrowser(Browser* browser);
void RemoveBrowser(Browser* browser);
- void AddObserver(BrowserListObserver* observer);
- void RemoveObserver(BrowserListObserver* observer);
-
// Called by Browser objects when their window is activated (focused). This
// allows us to determine what the last active Browser was.
void SetLastActive(Browser* browser);
@@ -73,6 +70,14 @@ class BrowserListImpl {
BrowserListImpl();
~BrowserListImpl();
+ // Only callable by BrowserList::(Add|Remove)Observer.
+ // TODO(gab): Merge BrowserListImpl into BrowserList removing the need for
+ // friend.
+ friend void BrowserList::AddObserver(chrome::BrowserListObserver*);
+ friend void BrowserList::RemoveObserver(chrome::BrowserListObserver*);
+ void AddObserver(BrowserListObserver* observer);
+ void RemoveObserver(BrowserListObserver* observer);
+
// Helper method to remove a browser instance from a list of browsers
void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list);