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_desktop_window_tree_host_win.h" | 5 #include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h" |
6 | 6 |
7 #include <dwmapi.h> | 7 #include <dwmapi.h> |
8 | 8 |
| 9 #include "base/process/process_handle.h" |
9 #include "chrome/browser/lifetime/application_lifetime.h" | 10 #include "chrome/browser/lifetime/application_lifetime.h" |
10 #include "chrome/browser/themes/theme_service.h" | 11 #include "chrome/browser/themes/theme_service.h" |
11 #include "chrome/browser/themes/theme_service_factory.h" | 12 #include "chrome/browser/themes/theme_service_factory.h" |
12 #include "chrome/browser/ui/views/frame/browser_frame.h" | 13 #include "chrome/browser/ui/views/frame/browser_frame.h" |
13 #include "chrome/browser/ui/views/frame/browser_frame_common_win.h" | 14 #include "chrome/browser/ui/views/frame/browser_frame_common_win.h" |
14 #include "chrome/browser/ui/views/frame/browser_view.h" | 15 #include "chrome/browser/ui/views/frame/browser_view.h" |
15 #include "chrome/browser/ui/views/frame/browser_window_property_manager_win.h" | 16 #include "chrome/browser/ui/views/frame/browser_window_property_manager_win.h" |
16 #include "chrome/browser/ui/views/frame/system_menu_insertion_delegate_win.h" | 17 #include "chrome/browser/ui/views/frame/system_menu_insertion_delegate_win.h" |
17 #include "chrome/browser/ui/views/tabs/tab_strip.h" | 18 #include "chrome/browser/ui/views/tabs/tab_strip.h" |
18 #include "chrome/browser/ui/views/theme_image_mapper.h" | 19 #include "chrome/browser/ui/views/theme_image_mapper.h" |
| 20 #include "chrome/common/chrome_constants.h" |
| 21 #include "components/browser_watcher/exit_funnel_win.h" |
19 #include "ui/base/theme_provider.h" | 22 #include "ui/base/theme_provider.h" |
20 #include "ui/gfx/win/dpi.h" | 23 #include "ui/gfx/win/dpi.h" |
21 #include "ui/views/controls/menu/native_menu_win.h" | 24 #include "ui/views/controls/menu/native_menu_win.h" |
22 | 25 |
23 #pragma comment(lib, "dwmapi.lib") | 26 #pragma comment(lib, "dwmapi.lib") |
24 | 27 |
25 namespace { | 28 namespace { |
26 | 29 |
27 const int kClientEdgeThickness = 3; | 30 const int kClientEdgeThickness = 3; |
28 // We need to offset the DWMFrame into the toolbar so that the blackness | 31 // We need to offset the DWMFrame into the toolbar so that the blackness |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 ui::ScaleFactor scale_factor) const override { | 66 ui::ScaleFactor scale_factor) const override { |
64 return delegate_->GetRawData(id, scale_factor); | 67 return delegate_->GetRawData(id, scale_factor); |
65 } | 68 } |
66 | 69 |
67 private: | 70 private: |
68 ui::ThemeProvider* delegate_; | 71 ui::ThemeProvider* delegate_; |
69 | 72 |
70 DISALLOW_COPY_AND_ASSIGN(DesktopThemeProvider); | 73 DISALLOW_COPY_AND_ASSIGN(DesktopThemeProvider); |
71 }; | 74 }; |
72 | 75 |
| 76 // See http://crbug.com/412384. |
| 77 void TraceSessionEnding(LPARAM lparam) { |
| 78 browser_watcher::ExitFunnel funnel; |
| 79 if (!funnel.Init(chrome::kBrowserExitCodesRegistryPath, |
| 80 base::GetCurrentProcessHandle())) { |
| 81 return; |
| 82 } |
| 83 |
| 84 // This exit path is the prime suspect for most our unclean shutdowns. |
| 85 // Trace all the possible options to WM_ENDSESSION. This may result in |
| 86 // multiple events for a single shutdown, but that's fine. |
| 87 funnel.RecordEvent(L"WM_ENDSESSION"); |
| 88 |
| 89 if (lparam & ENDSESSION_CLOSEAPP) |
| 90 funnel.RecordEvent(L"ES_CloseApp"); |
| 91 if (lparam & ENDSESSION_CRITICAL) |
| 92 funnel.RecordEvent(L"ES_Critical"); |
| 93 if (lparam & ENDSESSION_LOGOFF) |
| 94 funnel.RecordEvent(L"ES_Logoff"); |
| 95 const LPARAM kKnownBits = |
| 96 ENDSESSION_CLOSEAPP | ENDSESSION_CRITICAL | ENDSESSION_LOGOFF; |
| 97 if (lparam & ~kKnownBits) |
| 98 funnel.RecordEvent(L"ES_Other"); |
| 99 } |
| 100 |
73 } // namespace | 101 } // namespace |
74 | 102 |
75 //////////////////////////////////////////////////////////////////////////////// | 103 //////////////////////////////////////////////////////////////////////////////// |
76 // BrowserDesktopWindowTreeHostWin, public: | 104 // BrowserDesktopWindowTreeHostWin, public: |
77 | 105 |
78 BrowserDesktopWindowTreeHostWin::BrowserDesktopWindowTreeHostWin( | 106 BrowserDesktopWindowTreeHostWin::BrowserDesktopWindowTreeHostWin( |
79 views::internal::NativeWidgetDelegate* native_widget_delegate, | 107 views::internal::NativeWidgetDelegate* native_widget_delegate, |
80 views::DesktopNativeWidgetAura* desktop_native_widget_aura, | 108 views::DesktopNativeWidgetAura* desktop_native_widget_aura, |
81 BrowserView* browser_view, | 109 BrowserView* browser_view, |
82 BrowserFrame* browser_frame) | 110 BrowserFrame* browser_frame) |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 bool BrowserDesktopWindowTreeHostWin::PreHandleMSG(UINT message, | 203 bool BrowserDesktopWindowTreeHostWin::PreHandleMSG(UINT message, |
176 WPARAM w_param, | 204 WPARAM w_param, |
177 LPARAM l_param, | 205 LPARAM l_param, |
178 LRESULT* result) { | 206 LRESULT* result) { |
179 switch (message) { | 207 switch (message) { |
180 case WM_ACTIVATE: | 208 case WM_ACTIVATE: |
181 if (LOWORD(w_param) != WA_INACTIVE) | 209 if (LOWORD(w_param) != WA_INACTIVE) |
182 minimize_button_metrics_.OnHWNDActivated(); | 210 minimize_button_metrics_.OnHWNDActivated(); |
183 return false; | 211 return false; |
184 case WM_ENDSESSION: | 212 case WM_ENDSESSION: |
| 213 TraceSessionEnding(l_param); |
185 chrome::SessionEnding(); | 214 chrome::SessionEnding(); |
186 return true; | 215 return true; |
187 case WM_INITMENUPOPUP: | 216 case WM_INITMENUPOPUP: |
188 GetSystemMenu()->UpdateStates(); | 217 GetSystemMenu()->UpdateStates(); |
189 return true; | 218 return true; |
190 } | 219 } |
191 return DesktopWindowTreeHostWin::PreHandleMSG( | 220 return DesktopWindowTreeHostWin::PreHandleMSG( |
192 message, w_param, l_param, result); | 221 message, w_param, l_param, result); |
193 } | 222 } |
194 | 223 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost( | 355 BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost( |
327 views::internal::NativeWidgetDelegate* native_widget_delegate, | 356 views::internal::NativeWidgetDelegate* native_widget_delegate, |
328 views::DesktopNativeWidgetAura* desktop_native_widget_aura, | 357 views::DesktopNativeWidgetAura* desktop_native_widget_aura, |
329 BrowserView* browser_view, | 358 BrowserView* browser_view, |
330 BrowserFrame* browser_frame) { | 359 BrowserFrame* browser_frame) { |
331 return new BrowserDesktopWindowTreeHostWin(native_widget_delegate, | 360 return new BrowserDesktopWindowTreeHostWin(native_widget_delegate, |
332 desktop_native_widget_aura, | 361 desktop_native_widget_aura, |
333 browser_view, | 362 browser_view, |
334 browser_frame); | 363 browser_frame); |
335 } | 364 } |
OLD | NEW |