Index: chrome/browser/window_sizer.cc |
=================================================================== |
--- chrome/browser/window_sizer.cc (revision 14694) |
+++ chrome/browser/window_sizer.cc (working copy) |
@@ -88,8 +88,9 @@ |
// and persistent state from the browser window and the user's profile. |
class DefaultStateProvider : public WindowSizer::StateProvider { |
public: |
- explicit DefaultStateProvider(const std::wstring& app_name) |
- : app_name_(app_name) { |
+ explicit DefaultStateProvider(const std::wstring& app_name, Browser* browser) |
+ : app_name_(app_name), |
+ browser_(browser) { |
} |
// Overridden from WindowSizer::StateProvider: |
@@ -125,24 +126,38 @@ |
if (!app_name_.empty()) |
return false; |
- BrowserList::const_reverse_iterator it = BrowserList::begin_last_active(); |
- BrowserList::const_reverse_iterator end = BrowserList::end_last_active(); |
- for (; it != end; ++it) { |
- Browser* last_active = *it; |
- if (last_active && last_active->type() == Browser::TYPE_NORMAL) { |
- BrowserWindow* window = last_active->window(); |
- DCHECK(window); |
- *bounds = window->GetNormalBounds(); |
- return true; |
+ // If a reference browser is set, use its window. Otherwise find last |
+ // active. |
+ BrowserWindow* window = NULL; |
+ if (browser_) { |
+ window = browser_->window(); |
+ DCHECK(window); |
+ } else { |
+ BrowserList::const_reverse_iterator it = BrowserList::begin_last_active(); |
+ BrowserList::const_reverse_iterator end = BrowserList::end_last_active(); |
+ for (; (it != end); ++it) { |
+ Browser* last_active = *it; |
+ if (last_active && last_active->type() == Browser::TYPE_NORMAL) { |
+ window = last_active->window(); |
+ DCHECK(window); |
+ break; |
+ } |
} |
} |
+ if (window) { |
+ *bounds = window->GetNormalBounds(); |
+ return true; |
+ } |
+ |
return false; |
} |
private: |
std::wstring app_name_; |
+ // If set, is used as the reference browser for GetLastActiveWindowState. |
+ Browser* browser_; |
DISALLOW_EVIL_CONSTRUCTORS(DefaultStateProvider); |
}; |
@@ -165,9 +180,10 @@ |
// static |
void WindowSizer::GetBrowserWindowBounds(const std::wstring& app_name, |
const gfx::Rect& specified_bounds, |
+ Browser* browser, |
gfx::Rect* window_bounds, |
bool* maximized) { |
- const WindowSizer sizer(new DefaultStateProvider(app_name), |
+ const WindowSizer sizer(new DefaultStateProvider(app_name, browser), |
new DefaultMonitorInfoProvider); |
sizer.DetermineWindowBounds(specified_bounds, window_bounds, maximized); |
} |
@@ -201,7 +217,7 @@ |
// WindowSizer, private: |
WindowSizer::WindowSizer(const std::wstring& app_name) { |
- Init(new DefaultStateProvider(app_name), |
+ Init(new DefaultStateProvider(app_name, NULL), |
new DefaultMonitorInfoProvider); |
} |