desktop_browser_frame_aura.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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 "chrome/browser/ui/views/frame/desktop_user_action_handler_aura.h" 12#include "grit/chromium_strings.h" 13#include "grit/generated_resources.h" 14#include "ui/aura/client/aura_constants.h" 15#include "ui/aura/root_window.h" 16#include "ui/aura/window.h" 17#include "ui/aura/window_observer.h" 18#include "ui/base/hit_test.h" 19#include "ui/base/l10n/l10n_util.h" 20#include "ui/base/models/simple_menu_model.h" 21#include "ui/gfx/font.h" 22#include "ui/views/corewm/visibility_controller.h" 23#include "ui/views/view.h" 24 25using aura::Window; 26 27/////////////////////////////////////////////////////////////////////////////// 28// DesktopBrowserFrameAura, public: 29 30DesktopBrowserFrameAura::DesktopBrowserFrameAura( 31 BrowserFrame* browser_frame, 32 BrowserView* browser_view) 33 : views::DesktopNativeWidgetAura(browser_frame), 34 browser_view_(browser_view), 35 browser_frame_(browser_frame), 36 browser_desktop_window_tree_host_(NULL) { 37 GetNativeWindow()->SetName("BrowserFrameAura"); 38} 39 40/////////////////////////////////////////////////////////////////////////////// 41// DesktopBrowserFrameAura, protected: 42 43DesktopBrowserFrameAura::~DesktopBrowserFrameAura() { 44} 45 46/////////////////////////////////////////////////////////////////////////////// 47// DesktopBrowserFrameAura, views::DesktopNativeWidgetAura overrides: 48 49void DesktopBrowserFrameAura::OnHostClosed() { 50 // Destroy any remaining WebContents early on. Doing so may result in 51 // calling back to one of the Views/LayoutManagers or supporting classes of 52 // BrowserView. By destroying here we ensure all said classes are valid. 53 DestroyBrowserWebContents(browser_view_->browser()); 54 aura::client::SetVisibilityClient(GetNativeView()->GetRootWindow(), NULL); 55 DesktopNativeWidgetAura::OnHostClosed(); 56} 57 58void DesktopBrowserFrameAura::InitNativeWidget( 59 const views::Widget::InitParams& params) { 60 browser_desktop_window_tree_host_ = 61 BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost( 62 browser_frame_, 63 this, 64 browser_view_, 65 browser_frame_); 66 views::Widget::InitParams modified_params = params; 67 modified_params.desktop_window_tree_host = 68 browser_desktop_window_tree_host_->AsDesktopWindowTreeHost(); 69 DesktopNativeWidgetAura::InitNativeWidget(modified_params); 70 71 user_action_client_.reset( 72 new DesktopUserActionHandlerAura(browser_view_->browser())); 73 aura::client::SetUserActionClient(GetNativeView()->GetRootWindow(), 74 user_action_client_.get()); 75 76 visibility_controller_.reset(new views::corewm::VisibilityController); 77 aura::client::SetVisibilityClient(GetNativeView()->GetRootWindow(), 78 visibility_controller_.get()); 79 views::corewm::SetChildWindowVisibilityChangesAnimated( 80 GetNativeView()->GetRootWindow()); 81} 82 83//////////////////////////////////////////////////////////////////////////////// 84// DesktopBrowserFrameAura, NativeBrowserFrame implementation: 85 86views::NativeWidget* DesktopBrowserFrameAura::AsNativeWidget() { 87 return this; 88} 89 90const views::NativeWidget* DesktopBrowserFrameAura::AsNativeWidget() const { 91 return this; 92} 93 94bool DesktopBrowserFrameAura::UsesNativeSystemMenu() const { 95 return browser_desktop_window_tree_host_->UsesNativeSystemMenu(); 96} 97 98int DesktopBrowserFrameAura::GetMinimizeButtonOffset() const { 99 return browser_desktop_window_tree_host_->GetMinimizeButtonOffset(); 100} 101