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.
5 #include "chrome/browser/ui/views/frame/desktop_browser_frame_aura.h"
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"
27 ///////////////////////////////////////////////////////////////////////////////
28 // DesktopBrowserFrameAura, public:
30 DesktopBrowserFrameAura::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");
40 ///////////////////////////////////////////////////////////////////////////////
41 // DesktopBrowserFrameAura, protected:
43 DesktopBrowserFrameAura::~DesktopBrowserFrameAura() {
46 ///////////////////////////////////////////////////////////////////////////////
47 // DesktopBrowserFrameAura, views::DesktopNativeWidgetAura overrides:
49 void 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();
58 void DesktopBrowserFrameAura::InitNativeWidget(
59 const views::Widget::InitParams& params) {
60 browser_desktop_window_tree_host_ =
61 BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
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);
71 user_action_client_.reset(
72 new DesktopUserActionHandlerAura(browser_view_->browser()));
73 aura::client::SetUserActionClient(GetNativeView()->GetRootWindow(),
74 user_action_client_.get());
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());
83 ////////////////////////////////////////////////////////////////////////////////
84 // DesktopBrowserFrameAura, NativeBrowserFrame implementation:
86 views::NativeWidget* DesktopBrowserFrameAura::AsNativeWidget() {
90 const views::NativeWidget* DesktopBrowserFrameAura::AsNativeWidget() const {
94 bool DesktopBrowserFrameAura::UsesNativeSystemMenu() const {
95 return browser_desktop_window_tree_host_->UsesNativeSystemMenu();
98 int DesktopBrowserFrameAura::GetMinimizeButtonOffset() const {
99 return browser_desktop_window_tree_host_->GetMinimizeButtonOffset();