summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_list.cc
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-29 03:24:00 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-29 03:24:00 +0000
commitff8e86e13b5df6c717d5e1410be63c141be96799 (patch)
tree3aaa531d2f7f8c719ac4b4ad03629c5ca11ebedf /chrome/browser/browser_list.cc
parent1d42c502e39ff554c88f60f7c0fb1380be34b02f (diff)
downloadchromium_src-ff8e86e13b5df6c717d5e1410be63c141be96799.zip
chromium_src-ff8e86e13b5df6c717d5e1410be63c141be96799.tar.gz
chromium_src-ff8e86e13b5df6c717d5e1410be63c141be96799.tar.bz2
Rework the way the FindBrowserWithProfile/Type methods work.
We now always walk the last active list backwards rather than consulting the last active then walking the registered browser list forwards. This ensures that when the last active browser is a popup or app frame the last active TYPE_NORMAL browser is located when opening a new tab. http://crbug.com/17498 TEST=Open an app frame. Open a browser window (Ctrl+N) and load a page. Minimize it. Open another browser window and minimize it. Activate the app frame. Press Ctrl+T. The second browser window should be restored and have a new tab added to it rather than the first. Review URL: http://codereview.chromium.org/330013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30430 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_list.cc')
-rw-r--r--chrome/browser/browser_list.cc55
1 files changed, 26 insertions, 29 deletions
diff --git a/chrome/browser/browser_list.cc b/chrome/browser/browser_list.cc
index aba80b7..c8e3646 100644
--- a/chrome/browser/browser_list.cc
+++ b/chrome/browser/browser_list.cc
@@ -79,6 +79,19 @@ class BrowserActivityObserver : public NotificationObserver {
BrowserActivityObserver* activity_observer = NULL;
+// Returns true if the specified |browser| has a matching profile and type to
+// those specified. |type| can also be TYPE_ANY, which means only |profile|
+// must be matched.
+bool BrowserMatchesProfileAndType(Browser* browser,
+ Profile* profile,
+ Browser::Type type) {
+ if (type == Browser::TYPE_ANY || browser->type() == type) {
+ if (browser->profile() == profile)
+ return true;
+ }
+ return false;
+}
+
} // namespace
BrowserList::list_type BrowserList::browsers_;
@@ -242,7 +255,7 @@ void BrowserList::WindowsSessionEnding() {
bool BrowserList::HasBrowserWithProfile(Profile* profile) {
BrowserList::const_iterator iter;
for (size_t i = 0; i < browsers_.size(); ++i) {
- if (browsers_[i]->profile() == profile)
+ if (BrowserMatchesProfileAndType(browsers_[i], profile, Browser::TYPE_ANY))
return true;
}
return false;
@@ -272,44 +285,28 @@ Browser* BrowserList::GetLastActive() {
Browser* BrowserList::GetLastActiveWithProfile(Profile* p) {
list_type::reverse_iterator browser = last_active_browsers_.rbegin();
for (; browser != last_active_browsers_.rend(); ++browser) {
- if ((*browser)->profile() == p) {
+ if (BrowserMatchesProfileAndType(*browser, p, Browser::TYPE_ANY))
return *browser;
- }
}
-
return NULL;
}
// static
Browser* BrowserList::FindBrowserWithType(Profile* p, Browser::Type t) {
- Browser* last_active = GetLastActive();
- if (last_active && last_active->profile() == p && last_active->type() == t)
- return last_active;
-
- BrowserList::const_iterator i;
- for (i = BrowserList::begin(); i != BrowserList::end(); ++i) {
- if (*i == last_active)
- continue;
-
- if ((*i)->profile() == p && (*i)->type() == t)
- return *i;
+ list_type::reverse_iterator browser = last_active_browsers_.rbegin();
+ for (; browser != last_active_browsers_.rend(); ++browser) {
+ if (BrowserMatchesProfileAndType(*browser, p, t))
+ return *browser;
}
return NULL;
}
// static
Browser* BrowserList::FindBrowserWithProfile(Profile* p) {
- Browser* last_active = GetLastActive();
- if (last_active && last_active->profile() == p)
- return last_active;
-
- BrowserList::const_iterator i;
- for (i = BrowserList::begin(); i != BrowserList::end(); ++i) {
- if (*i == last_active)
- continue;
-
- if ((*i)->profile() == p)
- return *i;
+ list_type::reverse_iterator browser = last_active_browsers_.rbegin();
+ for (; browser != last_active_browsers_.rend(); ++browser) {
+ if (BrowserMatchesProfileAndType(*browser, p, Browser::TYPE_ANY))
+ return *browser;
}
return NULL;
}
@@ -329,8 +326,8 @@ size_t BrowserList::GetBrowserCountForType(Profile* p, Browser::Type type) {
BrowserList::const_iterator i;
size_t result = 0;
for (i = BrowserList::begin(); i != BrowserList::end(); ++i) {
- if ((*i)->profile() == p && (*i)->type() == type)
- result++;
+ if (BrowserMatchesProfileAndType(*i, p, type))
+ ++result;
}
return result;
}
@@ -340,7 +337,7 @@ size_t BrowserList::GetBrowserCount(Profile* p) {
BrowserList::const_iterator i;
size_t result = 0;
for (i = BrowserList::begin(); i != BrowserList::end(); ++i) {
- if ((*i)->profile() == p)
+ if (BrowserMatchesProfileAndType(*i, p, Browser::TYPE_ANY))
result++;
}
return result;