summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui')
-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
3 files changed, 24 insertions, 9 deletions
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);