| Index: chrome/browser/ui/window_sizer/window_sizer_ash.cc
|
| diff --git a/chrome/browser/ui/window_sizer/window_sizer_ash.cc b/chrome/browser/ui/window_sizer/window_sizer_ash.cc
|
| index 7c6da18dafa611c79b7e1971c5f3e2fc83af22e0..918b957a7ea2bd638607705544ee36a3bf38ff16 100644
|
| --- a/chrome/browser/ui/window_sizer/window_sizer_ash.cc
|
| +++ b/chrome/browser/ui/window_sizer/window_sizer_ash.cc
|
| @@ -19,40 +19,51 @@ bool WindowSizer::GetBrowserBoundsAsh(gfx::Rect* bounds,
|
| browser_->host_desktop_type() != chrome::HOST_DESKTOP_TYPE_ASH)
|
| return false;
|
|
|
| + bool determined = false;
|
| if (bounds->IsEmpty()) {
|
| if (browser_->is_type_tabbed()) {
|
| GetTabbedBrowserBoundsAsh(bounds, show_state);
|
| - return true;
|
| - }
|
| -
|
| - if (browser_->is_trusted_source()) {
|
| + determined = true;
|
| + } else if (browser_->is_trusted_source()) {
|
| // For trusted popups (v1 apps and system windows), do not use the last
|
| // active window bounds, only use saved or default bounds.
|
| if (!GetSavedWindowBounds(bounds, show_state))
|
| GetDefaultWindowBounds(GetTargetDisplay(gfx::Rect()), bounds);
|
| - return true;
|
| + determined = true;
|
| + } else {
|
| + // In Ash, prioritize the last saved |show_state|. If you have questions
|
| + // or comments about this behavior please contact oshima@chromium.org.
|
| + if (state_provider_) {
|
| + gfx::Rect ignored_bounds, ignored_work_area;
|
| + state_provider_->GetPersistentState(&ignored_bounds,
|
| + &ignored_work_area,
|
| + show_state);
|
| + }
|
| }
|
| -
|
| - // In Ash, prioritize the last saved |show_state|. If you have questions
|
| - // or comments about this behavior please contact oshima@chromium.org.
|
| - if (state_provider_) {
|
| - gfx::Rect ignored_bounds, ignored_work_area;
|
| - state_provider_->GetPersistentState(&ignored_bounds,
|
| - &ignored_work_area,
|
| - show_state);
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - // In case of a popup with an 'unspecified' location in ash, we are
|
| - // looking for a good screen location. We are interpreting (0,0) as an
|
| - // unspecified location.
|
| - if (browser_->is_type_popup() && bounds->origin().IsOrigin()) {
|
| + } else if (browser_->is_type_popup() && bounds->origin().IsOrigin()) {
|
| + // In case of a popup with an 'unspecified' location in ash, we are
|
| + // looking for a good screen location. We are interpreting (0,0) as an
|
| + // unspecified location.
|
| *bounds = ash::Shell::GetInstance()->window_positioner()->
|
| GetPopupPosition(*bounds);
|
| - return true;
|
| + determined = true;
|
| + }
|
| +
|
| + if (browser_->is_type_tabbed() && *show_state == ui::SHOW_STATE_DEFAULT) {
|
| + gfx::Display display = screen_->GetDisplayMatching(*bounds);
|
| + gfx::Rect work_area = display.work_area();
|
| + bounds->AdjustToFit(work_area);
|
| + if (*bounds == work_area) {
|
| + // A |browser_| that occupies the whole work area gets maximized.
|
| + // |bounds| returned here become the restore bounds once the window
|
| + // gets maximized after this method returns. Return a sensible default
|
| + // in order to make restored state visibly different from maximized.
|
| + *show_state = ui::SHOW_STATE_MAXIMIZED;
|
| + *bounds = ash::WindowPositioner::GetDefaultWindowBounds(display);
|
| + determined = true;
|
| + }
|
| }
|
| - return false;
|
| + return determined;
|
| }
|
|
|
| void WindowSizer::GetTabbedBrowserBoundsAsh(
|
|
|