summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-29 18:17:29 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-29 18:17:29 +0000
commit121594b409d3d7459ae7a8068e2bae9b8b222d0f (patch)
treeba3c5479ba02191591a18722b13f2050a28e52eb /chrome
parentb49ec50466482cdc03d827d6fd53485a3efffd7b (diff)
downloadchromium_src-121594b409d3d7459ae7a8068e2bae9b8b222d0f.zip
chromium_src-121594b409d3d7459ae7a8068e2bae9b8b222d0f.tar.gz
chromium_src-121594b409d3d7459ae7a8068e2bae9b8b222d0f.tar.bz2
Clean up some Observer code. Original patch by Thiago Farina (see http://codereview.chromium.org/1725007 ), r=me.
BUG=none TEST=none git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45963 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/browser_list.cc36
-rw-r--r--chrome/browser/browser_list.h32
2 files changed, 25 insertions, 43 deletions
diff --git a/chrome/browser/browser_list.cc b/chrome/browser/browser_list.cc
index 298841c..ae1eb148 100644
--- a/chrome/browser/browser_list.cc
+++ b/chrome/browser/browser_list.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -102,7 +102,7 @@ bool BrowserMatchesProfileAndType(Browser* browser,
// FindBrowserMatching() in that case.
Browser* FindInLastActiveMatching(Profile* profile, Browser::Type type,
bool match_incognito) {
- for (BrowserList::list_type::const_reverse_iterator i =
+ for (BrowserList::BrowserVector::const_reverse_iterator i =
BrowserList::begin_last_active(); i != BrowserList::end_last_active();
++i) {
if (BrowserMatchesProfileAndType(*i, profile, type, match_incognito))
@@ -128,8 +128,8 @@ Browser* FindBrowserMatching(Profile* profile, Browser::Type type,
} // namespace
-BrowserList::list_type BrowserList::browsers_;
-std::vector<BrowserList::Observer*> BrowserList::observers_;
+BrowserList::BrowserVector BrowserList::browsers_;
+ObserverList<BrowserList::Observer> BrowserList::observers_;
// static
void BrowserList::AddBrowser(Browser* browser) {
@@ -149,8 +149,7 @@ void BrowserList::AddBrowser(Browser* browser) {
// Send out notifications after add has occurred. Do some basic checking to
// try to catch evil observers that change the list from under us.
size_t original_count = observers_.size();
- for (size_t i = 0; i < observers_.size(); ++i)
- observers_[i]->OnBrowserAdded(browser);
+ FOR_EACH_OBSERVER(Observer, observers_, OnBrowserAdded(browser));
DCHECK_EQ(original_count, observers_.size())
<< "observer list modified during notification";
}
@@ -171,8 +170,7 @@ void BrowserList::RemoveBrowser(Browser* browser) {
// Send out notifications before anything changes. Do some basic checking to
// try to catch evil observers that change the list from under us.
size_t original_count = observers_.size();
- for (size_t i = 0; i < observers_.size(); ++i)
- observers_[i]->OnBrowserRemoving(browser);
+ FOR_EACH_OBSERVER(Observer, observers_, OnBrowserRemoving(browser));
DCHECK_EQ(original_count, observers_.size())
<< "observer list modified during notification";
@@ -192,20 +190,12 @@ void BrowserList::RemoveBrowser(Browser* browser) {
// static
void BrowserList::AddObserver(BrowserList::Observer* observer) {
- DCHECK(std::find(observers_.begin(), observers_.end(), observer)
- == observers_.end()) << "Adding an observer twice";
- observers_.push_back(observer);
+ observers_.AddObserver(observer);
}
// static
void BrowserList::RemoveObserver(BrowserList::Observer* observer) {
- std::vector<Observer*>::iterator i =
- std::find(observers_.begin(), observers_.end(), observer);
- if (i == observers_.end()) {
- NOTREACHED() << "Removing an observer that isn't registered.";
- return;
- }
- observers_.erase(i);
+ observers_.RemoveObserver(observer);
}
// static
@@ -317,17 +307,14 @@ bool BrowserList::IsInPersistentMode() {
}
// static
-BrowserList::list_type BrowserList::last_active_browsers_;
+BrowserList::BrowserVector BrowserList::last_active_browsers_;
// static
void BrowserList::SetLastActive(Browser* browser) {
RemoveBrowserFrom(browser, &last_active_browsers_);
last_active_browsers_.push_back(browser);
- for (std::vector<Observer*>::const_iterator i = observers_.begin();
- i != observers_.end(); ++i) {
- (*i)->OnBrowserSetLastActive(browser);
- }
+ FOR_EACH_OBSERVER(Observer, observers_, OnBrowserSetLastActive(browser));
}
// static
@@ -401,7 +388,8 @@ bool BrowserList::IsOffTheRecordSessionActive() {
}
// static
-void BrowserList::RemoveBrowserFrom(Browser* browser, list_type* browser_list) {
+void BrowserList::RemoveBrowserFrom(Browser* browser,
+ BrowserVector* browser_list) {
const iterator remove_browser =
std::find(browser_list->begin(), browser_list->end(), browser);
if (remove_browser != browser_list->end())
diff --git a/chrome/browser/browser_list.h b/chrome/browser/browser_list.h
index a5f40a9..8038baf 100644
--- a/chrome/browser/browser_list.h
+++ b/chrome/browser/browser_list.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,15 +7,16 @@
#include <vector>
+#include "base/observer_list.h"
#include "chrome/browser/browser.h"
// Stores a list of all Browser objects.
class BrowserList {
public:
- typedef std::vector<Browser*> list_type;
- typedef list_type::iterator iterator;
- typedef list_type::const_iterator const_iterator;
- typedef list_type::const_reverse_iterator const_reverse_iterator;
+ typedef std::vector<Browser*> BrowserVector;
+ typedef BrowserVector::iterator iterator;
+ typedef BrowserVector::const_iterator const_iterator;
+ typedef BrowserVector::const_reverse_iterator const_reverse_iterator;
// It is not allowed to change the global window list (add or remove any
// browser windows while handling observer callbacks.
@@ -107,17 +108,10 @@ class BrowserList {
// Returns true if browser is in persistent mode and false otherwise.
static bool IsInPersistentMode();
- static const_iterator begin() {
- return browsers_.begin();
- }
-
- static const_iterator end() {
- return browsers_.end();
- }
+ static const_iterator begin() { return browsers_.begin(); }
+ static const_iterator end() { return browsers_.end(); }
- static size_t size() {
- return browsers_.size();
- }
+ static size_t size() { return browsers_.size(); }
// Returns iterated access to list of open browsers ordered by when
// they were last active. The underlying data structure is a vector
@@ -147,11 +141,11 @@ class BrowserList {
private:
// Helper method to remove a browser instance from a list of browsers
- static void RemoveBrowserFrom(Browser* browser, list_type* browser_list);
+ static void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list);
- static list_type browsers_;
- static std::vector<Observer*> observers_;
- static list_type last_active_browsers_;
+ static BrowserVector browsers_;
+ static BrowserVector last_active_browsers_;
+ static ObserverList<Observer> observers_;
};
class TabContents;