Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1623)

Unified Diff: chrome/browser/browser_list.cc

Issue 1725007: Simplify the Observer pattern used in the BrowserList. (Closed)
Patch Set: back Compact to protected section Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/browser_list.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/browser_list.cc
diff --git a/chrome/browser/browser_list.cc b/chrome/browser/browser_list.cc
index 298841cbd21c15b9c271d826b3e2badc73e0af62..ae1eb1481c5c086a15e11779deedb72e917d928b 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())
« no previous file with comments | « chrome/browser/browser_list.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698