1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/ui/window_sizer/window_sizer.h" 6 7 #include "ash/shell.h" 8 #include "ash/wm/window_positioner.h" 9 #include "ash/wm/window_state.h" 10 #include "chrome/browser/ui/browser.h" 11 #include "chrome/browser/ui/browser_window.h" 12 #include "ui/aura/root_window.h" 13 #include "ui/aura/window.h" 14 #include "ui/gfx/screen.h" 15 16 void WindowSizer::GetTabbedBrowserBoundsAsh( 17 gfx::Rect* bounds_in_screen, 18 ui::WindowShowState* show_state) const { 19 DCHECK(show_state); 20 DCHECK(bounds_in_screen); 21 DCHECK(browser_->is_type_tabbed()); 22 DCHECK(bounds_in_screen->IsEmpty()); 23 24 ui::WindowShowState passed_show_state = *show_state; 25 26 bool is_saved_bounds = GetSavedWindowBounds(bounds_in_screen, show_state); 27 gfx::Display display; 28 if (is_saved_bounds) { 29 display = screen_->GetDisplayMatching(*bounds_in_screen); 30 } else { 31 // If there is no saved bounds (hence bounds_in_screen is empty), use the 32 // target display. 33 display = target_display_provider_->GetTargetDisplay(screen_, 34 *bounds_in_screen); 35 *bounds_in_screen = ash::WindowPositioner::GetDefaultWindowBounds(display); 36 } 37 38 if (browser_->is_session_restore()) { 39 // This is a fall-through case when there is no bounds recorded 40 // for restored window, and should not be used except for the case 41 // above. The regular path is handled in 42 // |WindowSizer::DetermineWindowBoundsAndShowState|. 43 44 // Note: How restore bounds/show state data are passed. 45 // The restore bounds is passed via |Browser::override_bounds()| in 46 // |chrome::GetBrowserWindowBoundsAndShowState()|. 47 // The restore state is passed via |Browser::initial_state()| in 48 // |WindowSizer::GetWindowDefaultShowState|. 49 bounds_in_screen->AdjustToFit(display.work_area()); 50 return; 51 } 52 53 // The |browser_window| is non NULL when this is called after 54 // browser's aura window is created. 55 aura::Window* browser_window = 56 browser_->window() ? browser_->window()->GetNativeWindow() : NULL; 57 58 ash::WindowPositioner::GetBoundsAndShowStateForNewWindow( 59 screen_, 60 browser_window, 61 is_saved_bounds, 62 passed_show_state, 63 bounds_in_screen, 64 show_state); 65 } 66