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