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()) |