diff options
author | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-29 18:17:29 +0000 |
---|---|---|
committer | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-29 18:17:29 +0000 |
commit | 121594b409d3d7459ae7a8068e2bae9b8b222d0f (patch) | |
tree | ba3c5479ba02191591a18722b13f2050a28e52eb /chrome | |
parent | b49ec50466482cdc03d827d6fd53485a3efffd7b (diff) | |
download | chromium_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.cc | 36 | ||||
-rw-r--r-- | chrome/browser/browser_list.h | 32 |
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; |