OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/views/frame/browser_frame.h" | 5 #include "chrome/browser/ui/views/frame/browser_frame.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/debug/leak_annotations.h" | 9 #include "base/debug/leak_annotations.h" |
10 #include "base/i18n/rtl.h" | 10 #include "base/i18n/rtl.h" |
11 #include "build/build_config.h" | 11 #include "build/build_config.h" |
12 #include "chrome/browser/app_mode/app_mode_utils.h" | 12 #include "chrome/browser/app_mode/app_mode_utils.h" |
13 #include "chrome/browser/themes/theme_service.h" | 13 #include "chrome/browser/themes/theme_service.h" |
14 #include "chrome/browser/themes/theme_service_factory.h" | 14 #include "chrome/browser/themes/theme_service_factory.h" |
15 #include "chrome/browser/ui/browser.h" | 15 #include "chrome/browser/ui/browser.h" |
16 #include "chrome/browser/ui/browser_list.h" | 16 #include "chrome/browser/ui/browser_list.h" |
17 #include "chrome/browser/ui/browser_window_state.h" | 17 #include "chrome/browser/ui/browser_window_state.h" |
18 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h" | 18 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h" |
19 #include "chrome/browser/ui/views/frame/browser_root_view.h" | 19 #include "chrome/browser/ui/views/frame/browser_root_view.h" |
20 #include "chrome/browser/ui/views/frame/browser_view.h" | 20 #include "chrome/browser/ui/views/frame/browser_view.h" |
21 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" | 21 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" |
22 #include "chrome/browser/ui/views/frame/native_browser_frame.h" | 22 #include "chrome/browser/ui/views/frame/native_browser_frame.h" |
23 #include "chrome/browser/ui/views/frame/native_browser_frame_factory.h" | 23 #include "chrome/browser/ui/views/frame/native_browser_frame_factory.h" |
24 #include "chrome/browser/ui/views/frame/system_menu_model_builder.h" | 24 #include "chrome/browser/ui/views/frame/system_menu_model_builder.h" |
25 #include "chrome/browser/ui/views/frame/top_container_view.h" | 25 #include "chrome/browser/ui/views/frame/top_container_view.h" |
26 #include "ui/base/hit_test.h" | 26 #include "ui/base/hit_test.h" |
27 #include "ui/base/theme_provider.h" | |
28 #include "ui/events/event_handler.h" | 27 #include "ui/events/event_handler.h" |
29 #include "ui/gfx/font_list.h" | 28 #include "ui/gfx/font_list.h" |
30 #include "ui/gfx/screen.h" | 29 #include "ui/gfx/screen.h" |
31 #include "ui/views/controls/menu/menu_runner.h" | 30 #include "ui/views/controls/menu/menu_runner.h" |
32 #include "ui/views/widget/native_widget.h" | 31 #include "ui/views/widget/native_widget.h" |
33 | 32 |
34 #if defined(OS_CHROMEOS) | 33 #if defined(OS_CHROMEOS) |
35 #include "ash/session/session_state_delegate.h" | 34 #include "ash/session/session_state_delegate.h" |
36 #include "ash/shell.h" | 35 #include "ash/shell.h" |
37 #include "ui/native_theme/native_theme_dark_aura.h" | 36 #include "ui/native_theme/native_theme_dark_aura.h" |
38 #endif | 37 #endif |
39 | 38 |
40 #if defined(OS_LINUX) | 39 #if defined(OS_LINUX) |
41 #include "chrome/browser/ui/views/frame/browser_command_handler_linux.h" | 40 #include "chrome/browser/ui/views/frame/browser_command_handler_linux.h" |
42 #endif | 41 #endif |
43 | 42 |
44 #if defined(OS_WIN) | 43 #if defined(OS_WIN) |
45 #include "ui/native_theme/native_theme_dark_win.h" | 44 #include "ui/native_theme/native_theme_dark_win.h" |
46 #endif | 45 #endif |
47 | 46 |
48 //////////////////////////////////////////////////////////////////////////////// | 47 //////////////////////////////////////////////////////////////////////////////// |
49 // BrowserFrame, public: | 48 // BrowserFrame, public: |
50 | 49 |
51 BrowserFrame::BrowserFrame(BrowserView* browser_view) | 50 BrowserFrame::BrowserFrame(BrowserView* browser_view) |
52 : native_browser_frame_(nullptr), | 51 : native_browser_frame_(nullptr), |
53 root_view_(nullptr), | 52 root_view_(nullptr), |
54 browser_frame_view_(nullptr), | 53 browser_frame_view_(nullptr), |
55 browser_view_(browser_view), | 54 browser_view_(browser_view) { |
56 theme_provider_( | |
57 &ThemeService::GetThemeProviderForProfile(browser_view_->browser() | |
58 ->profile())) { | |
59 browser_view_->set_frame(this); | 55 browser_view_->set_frame(this); |
60 set_is_secondary_widget(false); | 56 set_is_secondary_widget(false); |
61 // Don't focus anything on creation, selecting a tab will set the focus. | 57 // Don't focus anything on creation, selecting a tab will set the focus. |
62 set_focus_on_creation(false); | 58 set_focus_on_creation(false); |
63 } | 59 } |
64 | 60 |
65 BrowserFrame::~BrowserFrame() { | 61 BrowserFrame::~BrowserFrame() { |
66 } | 62 } |
67 | 63 |
68 // static | 64 // static |
69 const gfx::FontList& BrowserFrame::GetTitleFontList() { | 65 const gfx::FontList& BrowserFrame::GetTitleFontList() { |
70 static const gfx::FontList* title_font_list = new gfx::FontList(); | 66 static const gfx::FontList* title_font_list = new gfx::FontList(); |
71 ANNOTATE_LEAKING_OBJECT_PTR(title_font_list); | 67 ANNOTATE_LEAKING_OBJECT_PTR(title_font_list); |
72 return *title_font_list; | 68 return *title_font_list; |
73 } | 69 } |
74 | 70 |
75 void BrowserFrame::InitBrowserFrame() { | 71 void BrowserFrame::InitBrowserFrame() { |
76 native_browser_frame_ = | 72 native_browser_frame_ = |
77 NativeBrowserFrameFactory::CreateNativeBrowserFrame(this, browser_view_); | 73 NativeBrowserFrameFactory::CreateNativeBrowserFrame(this, browser_view_); |
78 views::Widget::InitParams params = native_browser_frame_->GetWidgetParams(); | 74 views::Widget::InitParams params = native_browser_frame_->GetWidgetParams(); |
79 params.delegate = browser_view_; | 75 params.delegate = browser_view_; |
80 if (browser_view_->browser()->is_type_tabbed()) { | 76 if (browser_view_->browser()->is_type_tabbed()) { |
81 // Typed panel/popup can only return a size once the widget has been | 77 // Typed panel/popup can only return a size once the widget has been |
82 // created. | 78 // created. |
83 chrome::GetSavedWindowBoundsAndShowState(browser_view_->browser(), | 79 chrome::GetSavedWindowBoundsAndShowState(browser_view_->browser(), |
84 ¶ms.bounds, | 80 ¶ms.bounds, |
85 ¶ms.show_state); | 81 ¶ms.show_state); |
86 } | 82 } |
87 | 83 |
88 if (browser_view_->browser()->profile()->GetProfileType() == | |
89 Profile::INCOGNITO_PROFILE) { | |
90 #if defined(OS_WIN) | |
91 params.native_theme = ui::NativeThemeDarkWin::instance(); | |
92 #elif defined(OS_CHROMEOS) | |
93 params.native_theme = ui::NativeThemeDarkAura::instance(); | |
94 #endif | |
95 } | |
96 | |
97 Init(params); | 84 Init(params); |
98 | 85 |
99 if (!native_browser_frame_->UsesNativeSystemMenu()) { | 86 if (!native_browser_frame_->UsesNativeSystemMenu()) { |
100 DCHECK(non_client_view()); | 87 DCHECK(non_client_view()); |
101 non_client_view()->set_context_menu_controller(this); | 88 non_client_view()->set_context_menu_controller(this); |
102 } | 89 } |
103 | 90 |
104 #if defined(OS_LINUX) | 91 #if defined(OS_LINUX) |
105 browser_command_handler_.reset(new BrowserCommandHandlerLinux(browser_view_)); | 92 browser_command_handler_.reset(new BrowserCommandHandlerLinux(browser_view_)); |
106 #endif | 93 #endif |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 chrome::CreateBrowserNonClientFrameView(this, browser_view_); | 157 chrome::CreateBrowserNonClientFrameView(this, browser_view_); |
171 return browser_frame_view_; | 158 return browser_frame_view_; |
172 } | 159 } |
173 | 160 |
174 bool BrowserFrame::GetAccelerator(int command_id, | 161 bool BrowserFrame::GetAccelerator(int command_id, |
175 ui::Accelerator* accelerator) const { | 162 ui::Accelerator* accelerator) const { |
176 return browser_view_->GetAccelerator(command_id, accelerator); | 163 return browser_view_->GetAccelerator(command_id, accelerator); |
177 } | 164 } |
178 | 165 |
179 const ui::ThemeProvider* BrowserFrame::GetThemeProvider() const { | 166 const ui::ThemeProvider* BrowserFrame::GetThemeProvider() const { |
180 return theme_provider_; | 167 return &ThemeService::GetThemeProviderForProfile( |
| 168 browser_view_->browser()->profile()); |
| 169 } |
| 170 |
| 171 const ui::NativeTheme* BrowserFrame::GetNativeTheme() const { |
| 172 if (browser_view_->browser()->profile()->GetProfileType() == |
| 173 Profile::INCOGNITO_PROFILE && |
| 174 ThemeServiceFactory::GetForProfile(browser_view_->browser()->profile()) |
| 175 ->UsingDefaultTheme()) { |
| 176 #if defined(OS_WIN) |
| 177 return ui::NativeThemeDarkWin::instance(); |
| 178 #elif defined(OS_CHROMEOS) |
| 179 return ui::NativeThemeDarkAura::instance(); |
| 180 #endif |
| 181 } |
| 182 return views::Widget::GetNativeTheme(); |
181 } | 183 } |
182 | 184 |
183 void BrowserFrame::SchedulePaintInRect(const gfx::Rect& rect) { | 185 void BrowserFrame::SchedulePaintInRect(const gfx::Rect& rect) { |
184 views::Widget::SchedulePaintInRect(rect); | 186 views::Widget::SchedulePaintInRect(rect); |
185 | 187 |
186 // Paint the frame caption area and window controls during immersive reveal. | 188 // Paint the frame caption area and window controls during immersive reveal. |
187 if (browser_view_ && | 189 if (browser_view_ && |
188 browser_view_->immersive_mode_controller()->IsRevealed()) { | 190 browser_view_->immersive_mode_controller()->IsRevealed()) { |
189 // This function should not be reentrant because the TopContainerView | 191 // This function should not be reentrant because the TopContainerView |
190 // paints to a layer for the duration of the immersive reveal. | 192 // paints to a layer for the duration of the immersive reveal. |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 | 259 |
258 AvatarMenuButton* BrowserFrame::GetAvatarMenuButton() { | 260 AvatarMenuButton* BrowserFrame::GetAvatarMenuButton() { |
259 return browser_frame_view_->avatar_button(); | 261 return browser_frame_view_->avatar_button(); |
260 } | 262 } |
261 | 263 |
262 #if defined(FRAME_AVATAR_BUTTON) | 264 #if defined(FRAME_AVATAR_BUTTON) |
263 views::View* BrowserFrame::GetNewAvatarMenuButton() { | 265 views::View* BrowserFrame::GetNewAvatarMenuButton() { |
264 return browser_frame_view_->new_avatar_button(); | 266 return browser_frame_view_->new_avatar_button(); |
265 } | 267 } |
266 #endif | 268 #endif |
OLD | NEW |