desktop_browser_frame_aura.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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/views/frame/desktop_browser_frame_aura.h" 6 7#include "chrome/app/chrome_command_ids.h" 8#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host.h" 9#include "chrome/browser/ui/views/frame/browser_shutdown.h" 10#include "chrome/browser/ui/views/frame/browser_view.h" 11#include "ui/aura/client/aura_constants.h" 12#include "ui/aura/window.h" 13#include "ui/aura/window_event_dispatcher.h" 14#include "ui/aura/window_observer.h" 15#include "ui/base/hit_test.h" 16#include "ui/base/models/simple_menu_model.h" 17#include "ui/gfx/font.h" 18#include "ui/views/view.h" 19#include "ui/wm/core/visibility_controller.h" 20 21using aura::Window; 22 23/////////////////////////////////////////////////////////////////////////////// 24// DesktopBrowserFrameAura, public: 25 26DesktopBrowserFrameAura::DesktopBrowserFrameAura( 27 BrowserFrame* browser_frame, 28 BrowserView* browser_view) 29 : views::DesktopNativeWidgetAura(browser_frame), 30 browser_view_(browser_view), 31 browser_frame_(browser_frame), 32 browser_desktop_window_tree_host_(NULL) { 33 GetNativeWindow()->SetName("BrowserFrameAura"); 34} 35 36/////////////////////////////////////////////////////////////////////////////// 37// DesktopBrowserFrameAura, protected: 38 39DesktopBrowserFrameAura::~DesktopBrowserFrameAura() { 40} 41 42/////////////////////////////////////////////////////////////////////////////// 43// DesktopBrowserFrameAura, views::DesktopNativeWidgetAura overrides: 44 45void DesktopBrowserFrameAura::OnHostClosed() { 46 // Destroy any remaining WebContents early on. Doing so may result in 47 // calling back to one of the Views/LayoutManagers or supporting classes of 48 // BrowserView. By destroying here we ensure all said classes are valid. 49 DestroyBrowserWebContents(browser_view_->browser()); 50 aura::client::SetVisibilityClient(GetNativeView()->GetRootWindow(), NULL); 51 DesktopNativeWidgetAura::OnHostClosed(); 52} 53 54void DesktopBrowserFrameAura::InitNativeWidget( 55 const views::Widget::InitParams& params) { 56 browser_desktop_window_tree_host_ = 57 BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost( 58 browser_frame_, 59 this, 60 browser_view_, 61 browser_frame_); 62 views::Widget::InitParams modified_params = params; 63 modified_params.desktop_window_tree_host = 64 browser_desktop_window_tree_host_->AsDesktopWindowTreeHost(); 65 DesktopNativeWidgetAura::InitNativeWidget(modified_params); 66 67 visibility_controller_.reset(new wm::VisibilityController); 68 aura::client::SetVisibilityClient(GetNativeView()->GetRootWindow(), 69 visibility_controller_.get()); 70 wm::SetChildWindowVisibilityChangesAnimated( 71 GetNativeView()->GetRootWindow()); 72} 73 74//////////////////////////////////////////////////////////////////////////////// 75// DesktopBrowserFrameAura, NativeBrowserFrame implementation: 76 77views::NativeWidget* DesktopBrowserFrameAura::AsNativeWidget() { 78 return this; 79} 80 81const views::NativeWidget* DesktopBrowserFrameAura::AsNativeWidget() const { 82 return this; 83} 84 85bool DesktopBrowserFrameAura::UsesNativeSystemMenu() const { 86 return browser_desktop_window_tree_host_->UsesNativeSystemMenu(); 87} 88 89int DesktopBrowserFrameAura::GetMinimizeButtonOffset() const { 90 return browser_desktop_window_tree_host_->GetMinimizeButtonOffset(); 91} 92 93bool DesktopBrowserFrameAura::ShouldSaveWindowPlacement() const { 94 // The placement can always be stored. 95 return true; 96} 97 98void DesktopBrowserFrameAura::GetWindowPlacement( 99 gfx::Rect* bounds, 100 ui::WindowShowState* show_state) const { 101 *bounds = GetWidget()->GetRestoredBounds(); 102 if (IsMaximized()) 103 *show_state = ui::SHOW_STATE_MAXIMIZED; 104 else if (IsMinimized()) 105 *show_state = ui::SHOW_STATE_MINIMIZED; 106 else 107 *show_state = ui::SHOW_STATE_NORMAL; 108} 109