OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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_non_client_frame_view_ash.h" | 5 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.h" |
6 | 6 |
7 #include "ash/common/ash_constants.h" | 7 #include "ash/common/ash_constants.h" |
8 #include "ash/common/frame/caption_buttons/frame_caption_button_container_view.h
" | 8 #include "ash/common/frame/caption_buttons/frame_caption_button_container_view.h
" |
9 #include "ash/common/frame/header_painter.h" | 9 #include "ash/common/frame/header_painter.h" |
10 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" | 10 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" |
11 #include "ash/common/wm_shell.h" | 11 #include "ash/common/wm_shell.h" |
12 #include "ash/shell.h" | 12 #include "ash/shell.h" |
| 13 #include "ash/test/immersive_fullscreen_controller_test_api.h" |
13 #include "base/command_line.h" | 14 #include "base/command_line.h" |
14 #include "build/build_config.h" | 15 #include "build/build_config.h" |
| 16 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
| 17 #include "chrome/browser/ui/ash/multi_user/multi_user_util.h" |
| 18 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_test.h" |
15 #include "chrome/browser/ui/browser.h" | 19 #include "chrome/browser/ui/browser.h" |
16 #include "chrome/browser/ui/browser_commands.h" | 20 #include "chrome/browser/ui/browser_commands.h" |
17 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" | 21 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" |
18 #include "chrome/browser/ui/exclusive_access/fullscreen_controller_test.h" | 22 #include "chrome/browser/ui/exclusive_access/fullscreen_controller_test.h" |
19 #include "chrome/browser/ui/views/frame/browser_view.h" | 23 #include "chrome/browser/ui/views/frame/browser_view.h" |
20 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" | 24 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" |
| 25 #include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h" |
| 26 #include "chrome/browser/ui/views/profiles/profile_indicator_icon.h" |
21 #include "chrome/browser/ui/views/tabs/tab.h" | 27 #include "chrome/browser/ui/views/tabs/tab.h" |
22 #include "chrome/test/base/in_process_browser_test.h" | 28 #include "chrome/test/base/in_process_browser_test.h" |
| 29 #include "components/signin/core/account_id/account_id.h" |
23 #include "ui/base/hit_test.h" | 30 #include "ui/base/hit_test.h" |
24 #include "ui/compositor/scoped_animation_duration_scale_mode.h" | 31 #include "ui/compositor/scoped_animation_duration_scale_mode.h" |
25 #include "ui/views/widget/widget.h" | 32 #include "ui/views/widget/widget.h" |
26 | 33 |
27 #if defined(OS_CHROMEOS) | |
28 #include "ash/test/immersive_fullscreen_controller_test_api.h" | |
29 #include "chrome/browser/profiles/profile_avatar_icon_util.h" | |
30 #include "chrome/browser/ui/ash/multi_user/multi_user_util.h" | |
31 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_test.h" | |
32 #include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h" | |
33 #include "chrome/browser/ui/views/profiles/profile_indicator_icon.h" | |
34 #include "components/signin/core/account_id/account_id.h" | |
35 #endif // defined(OS_CHROMEOS) | |
36 | |
37 using views::Widget; | 34 using views::Widget; |
38 | 35 |
39 typedef InProcessBrowserTest BrowserNonClientFrameViewAshTest; | 36 typedef InProcessBrowserTest BrowserNonClientFrameViewAshTest; |
40 | 37 |
41 IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, NonClientHitTest) { | 38 IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, NonClientHitTest) { |
42 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); | 39 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); |
43 Widget* widget = browser_view->GetWidget(); | 40 Widget* widget = browser_view->GetWidget(); |
44 // We know we're using Ash, so static cast. | 41 // We know we're using Ash, so static cast. |
45 BrowserNonClientFrameViewAsh* frame_view = | 42 BrowserNonClientFrameViewAsh* frame_view = |
46 static_cast<BrowserNonClientFrameViewAsh*>( | 43 static_cast<BrowserNonClientFrameViewAsh*>( |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 { | 98 { |
102 std::unique_ptr<FullscreenNotificationObserver> waiter( | 99 std::unique_ptr<FullscreenNotificationObserver> waiter( |
103 new FullscreenNotificationObserver()); | 100 new FullscreenNotificationObserver()); |
104 chrome::ToggleFullscreenMode(browser()); | 101 chrome::ToggleFullscreenMode(browser()); |
105 waiter->Wait(); | 102 waiter->Wait(); |
106 } | 103 } |
107 EXPECT_TRUE(frame_view->ShouldPaint()); | 104 EXPECT_TRUE(frame_view->ShouldPaint()); |
108 EXPECT_TRUE(frame_view->caption_button_container_->visible()); | 105 EXPECT_TRUE(frame_view->caption_button_container_->visible()); |
109 } | 106 } |
110 | 107 |
111 #if defined(OS_CHROMEOS) | |
112 IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, ImmersiveFullscreen) { | 108 IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, ImmersiveFullscreen) { |
113 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); | 109 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); |
114 content::WebContents* web_contents = browser_view->GetActiveWebContents(); | 110 content::WebContents* web_contents = browser_view->GetActiveWebContents(); |
115 Widget* widget = browser_view->GetWidget(); | 111 Widget* widget = browser_view->GetWidget(); |
116 // We know we're using Ash, so static cast. | 112 // We know we're using Ash, so static cast. |
117 BrowserNonClientFrameViewAsh* frame_view = | 113 BrowserNonClientFrameViewAsh* frame_view = |
118 static_cast<BrowserNonClientFrameViewAsh*>( | 114 static_cast<BrowserNonClientFrameViewAsh*>( |
119 widget->non_client_view()->frame_view()); | 115 widget->non_client_view()->frame_view()); |
120 | 116 |
121 ImmersiveModeController* immersive_mode_controller = | 117 ImmersiveModeController* immersive_mode_controller = |
122 browser_view->immersive_mode_controller(); | 118 browser_view->immersive_mode_controller(); |
123 ASSERT_EQ(ImmersiveModeController::Type::ASH, | 119 ASSERT_EQ(ImmersiveModeController::Type::ASH, |
124 immersive_mode_controller->type()); | 120 immersive_mode_controller->type()); |
125 | 121 |
126 ash::ImmersiveFullscreenControllerTestApi( | 122 ash::ImmersiveFullscreenControllerTestApi( |
127 static_cast<ImmersiveModeControllerAsh*>(immersive_mode_controller) | 123 static_cast<ImmersiveModeControllerAsh*>(immersive_mode_controller) |
128 ->controller()) | 124 ->controller()) |
129 .SetupForTest(); | 125 .SetupForTest(); |
130 | 126 |
131 // Immersive fullscreen starts disabled. | 127 // Immersive fullscreen starts disabled. |
132 ASSERT_FALSE(widget->IsFullscreen()); | 128 ASSERT_FALSE(widget->IsFullscreen()); |
133 EXPECT_FALSE(immersive_mode_controller->IsEnabled()); | 129 EXPECT_FALSE(immersive_mode_controller->IsEnabled()); |
134 | 130 |
135 // Frame paints by default. | 131 // Frame paints by default. |
136 EXPECT_TRUE(frame_view->ShouldPaint()); | 132 EXPECT_TRUE(frame_view->ShouldPaint()); |
137 EXPECT_LT(Tab::GetImmersiveHeight(), | 133 EXPECT_LT(0, frame_view->header_painter_->GetHeaderHeightForPainting()); |
138 frame_view->header_painter_->GetHeaderHeightForPainting()); | |
139 | 134 |
140 // Enter both browser fullscreen and tab fullscreen. Entering browser | 135 // Enter both browser fullscreen and tab fullscreen. Entering browser |
141 // fullscreen should enable immersive fullscreen. | 136 // fullscreen should enable immersive fullscreen. |
142 { | 137 { |
143 // NOTIFICATION_FULLSCREEN_CHANGED is sent asynchronously. | 138 // NOTIFICATION_FULLSCREEN_CHANGED is sent asynchronously. |
144 std::unique_ptr<FullscreenNotificationObserver> waiter( | 139 std::unique_ptr<FullscreenNotificationObserver> waiter( |
145 new FullscreenNotificationObserver()); | 140 new FullscreenNotificationObserver()); |
146 chrome::ToggleFullscreenMode(browser()); | 141 chrome::ToggleFullscreenMode(browser()); |
147 waiter->Wait(); | 142 waiter->Wait(); |
148 } | 143 } |
149 { | 144 { |
150 std::unique_ptr<FullscreenNotificationObserver> waiter( | 145 std::unique_ptr<FullscreenNotificationObserver> waiter( |
151 new FullscreenNotificationObserver()); | 146 new FullscreenNotificationObserver()); |
152 browser() | 147 browser() |
153 ->exclusive_access_manager() | 148 ->exclusive_access_manager() |
154 ->fullscreen_controller() | 149 ->fullscreen_controller() |
155 ->EnterFullscreenModeForTab(web_contents, GURL()); | 150 ->EnterFullscreenModeForTab(web_contents, GURL()); |
156 waiter->Wait(); | 151 waiter->Wait(); |
157 } | 152 } |
158 EXPECT_TRUE(immersive_mode_controller->IsEnabled()); | 153 EXPECT_TRUE(immersive_mode_controller->IsEnabled()); |
159 | 154 |
160 // An immersive reveal shows the buttons and the top of the frame. | 155 // An immersive reveal shows the buttons and the top of the frame. |
161 std::unique_ptr<ImmersiveRevealedLock> revealed_lock( | 156 std::unique_ptr<ImmersiveRevealedLock> revealed_lock( |
162 immersive_mode_controller->GetRevealedLock( | 157 immersive_mode_controller->GetRevealedLock( |
163 ImmersiveModeController::ANIMATE_REVEAL_NO)); | 158 ImmersiveModeController::ANIMATE_REVEAL_NO)); |
164 EXPECT_TRUE(immersive_mode_controller->IsRevealed()); | 159 EXPECT_TRUE(immersive_mode_controller->IsRevealed()); |
165 EXPECT_TRUE(frame_view->ShouldPaint()); | 160 EXPECT_TRUE(frame_view->ShouldPaint()); |
166 EXPECT_TRUE(frame_view->caption_button_container_->visible()); | 161 EXPECT_TRUE(frame_view->caption_button_container_->visible()); |
167 EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle()); | |
168 | 162 |
169 // End the reveal. When in both immersive browser fullscreen and tab | 163 // End the reveal. When in both immersive browser fullscreen and tab |
170 // fullscreen, the tab lightbars should not be painted. | 164 // fullscreen. |
171 revealed_lock.reset(); | 165 revealed_lock.reset(); |
172 EXPECT_FALSE(immersive_mode_controller->IsRevealed()); | 166 EXPECT_FALSE(immersive_mode_controller->IsRevealed()); |
173 EXPECT_FALSE(frame_view->ShouldPaint()); | 167 EXPECT_FALSE(frame_view->ShouldPaint()); |
174 EXPECT_EQ(0, frame_view->header_painter_->GetHeaderHeightForPainting()); | 168 EXPECT_EQ(0, frame_view->header_painter_->GetHeaderHeightForPainting()); |
175 | 169 |
176 // Repeat test but without tab fullscreen. The tab lightbars should now show | 170 // Repeat test but without tab fullscreen. |
177 // when the top-of-window views are not revealed. | |
178 { | 171 { |
179 std::unique_ptr<FullscreenNotificationObserver> waiter( | 172 std::unique_ptr<FullscreenNotificationObserver> waiter( |
180 new FullscreenNotificationObserver()); | 173 new FullscreenNotificationObserver()); |
181 browser() | 174 browser() |
182 ->exclusive_access_manager() | 175 ->exclusive_access_manager() |
183 ->fullscreen_controller() | 176 ->fullscreen_controller() |
184 ->ExitFullscreenModeForTab(web_contents); | 177 ->ExitFullscreenModeForTab(web_contents); |
185 waiter->Wait(); | 178 waiter->Wait(); |
186 } | 179 } |
187 | 180 |
188 // Immersive reveal should have same behavior as before. | 181 // Immersive reveal should have same behavior as before. |
189 revealed_lock.reset(immersive_mode_controller->GetRevealedLock( | 182 revealed_lock.reset(immersive_mode_controller->GetRevealedLock( |
190 ImmersiveModeController::ANIMATE_REVEAL_NO)); | 183 ImmersiveModeController::ANIMATE_REVEAL_NO)); |
191 EXPECT_TRUE(immersive_mode_controller->IsRevealed()); | 184 EXPECT_TRUE(immersive_mode_controller->IsRevealed()); |
192 EXPECT_TRUE(frame_view->ShouldPaint()); | 185 EXPECT_TRUE(frame_view->ShouldPaint()); |
193 EXPECT_TRUE(frame_view->caption_button_container_->visible()); | 186 EXPECT_TRUE(frame_view->caption_button_container_->visible()); |
194 EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle()); | 187 EXPECT_LT(0, frame_view->header_painter_->GetHeaderHeightForPainting()); |
195 EXPECT_LT(Tab::GetImmersiveHeight(), | |
196 frame_view->header_painter_->GetHeaderHeightForPainting()); | |
197 | 188 |
198 // Ending the reveal. Immersive browser should have the same behavior as full | 189 // Ending the reveal. Immersive browser should have the same behavior as full |
199 // screen, i.e., no light bar and having an origin of (0,0). | 190 // screen, i.e., having an origin of (0,0). |
200 revealed_lock.reset(); | 191 revealed_lock.reset(); |
201 EXPECT_FALSE(frame_view->ShouldPaint()); | 192 EXPECT_FALSE(frame_view->ShouldPaint()); |
202 EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle()); | |
203 EXPECT_EQ(0, frame_view->header_painter_->GetHeaderHeightForPainting()); | 193 EXPECT_EQ(0, frame_view->header_painter_->GetHeaderHeightForPainting()); |
204 | 194 |
205 // Exiting immersive fullscreen should make the caption buttons and the frame | 195 // Exiting immersive fullscreen should make the caption buttons and the frame |
206 // visible again. | 196 // visible again. |
207 { | 197 { |
208 std::unique_ptr<FullscreenNotificationObserver> waiter( | 198 std::unique_ptr<FullscreenNotificationObserver> waiter( |
209 new FullscreenNotificationObserver()); | 199 new FullscreenNotificationObserver()); |
210 browser_view->ExitFullscreen(); | 200 browser_view->ExitFullscreen(); |
211 waiter->Wait(); | 201 waiter->Wait(); |
212 } | 202 } |
213 EXPECT_FALSE(immersive_mode_controller->IsEnabled()); | 203 EXPECT_FALSE(immersive_mode_controller->IsEnabled()); |
214 EXPECT_TRUE(frame_view->ShouldPaint()); | 204 EXPECT_TRUE(frame_view->ShouldPaint()); |
215 EXPECT_TRUE(frame_view->caption_button_container_->visible()); | 205 EXPECT_TRUE(frame_view->caption_button_container_->visible()); |
216 EXPECT_FALSE(frame_view->UseImmersiveLightbarHeaderStyle()); | 206 EXPECT_LT(0, frame_view->header_painter_->GetHeaderHeightForPainting()); |
217 EXPECT_LT(Tab::GetImmersiveHeight(), | |
218 frame_view->header_painter_->GetHeaderHeightForPainting()); | |
219 } | 207 } |
220 | 208 |
221 // Tests that Avatar icon should show on the top left corner of the teleported | 209 // Tests that Avatar icon should show on the top left corner of the teleported |
222 // browser window on ChromeOS. | 210 // browser window on ChromeOS. |
223 IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, | 211 IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, |
224 AvatarDisplayOnTeleportedWindow) { | 212 AvatarDisplayOnTeleportedWindow) { |
225 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); | 213 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); |
226 Widget* widget = browser_view->GetWidget(); | 214 Widget* widget = browser_view->GetWidget(); |
227 // We know we're using Ash, so static cast. | 215 // We know we're using Ash, so static cast. |
228 BrowserNonClientFrameViewAsh* frame_view = | 216 BrowserNonClientFrameViewAsh* frame_view = |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 | 256 |
269 // Teleport the window to another desktop. | 257 // Teleport the window to another desktop. |
270 const AccountId account_id2(AccountId::FromUserEmail("user2")); | 258 const AccountId account_id2(AccountId::FromUserEmail("user2")); |
271 manager->ShowWindowForUser(browser()->window()->GetNativeWindow(), | 259 manager->ShowWindowForUser(browser()->window()->GetNativeWindow(), |
272 account_id2); | 260 account_id2); |
273 // Clicking on the avatar icon should have same behaviour like clicking on | 261 // Clicking on the avatar icon should have same behaviour like clicking on |
274 // the caption area, i.e., allow the user to drag the browser window around. | 262 // the caption area, i.e., allow the user to drag the browser window around. |
275 EXPECT_EQ(HTCAPTION, frame_view->NonClientHitTest(avatar_center)); | 263 EXPECT_EQ(HTCAPTION, frame_view->NonClientHitTest(avatar_center)); |
276 } | 264 } |
277 | 265 |
278 #endif // defined(OS_CHROMEOS) | |
279 | |
280 // Tests that FrameCaptionButtonContainer has been relaid out in response to | 266 // Tests that FrameCaptionButtonContainer has been relaid out in response to |
281 // maximize mode being toggled. | 267 // maximize mode being toggled. |
282 IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, | 268 IN_PROC_BROWSER_TEST_F(BrowserNonClientFrameViewAshTest, |
283 ToggleMaximizeModeRelayout) { | 269 ToggleMaximizeModeRelayout) { |
284 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); | 270 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); |
285 Widget* widget = browser_view->GetWidget(); | 271 Widget* widget = browser_view->GetWidget(); |
286 // We know we're using Ash, so static cast. | 272 // We know we're using Ash, so static cast. |
287 BrowserNonClientFrameViewAsh* frame_view = | 273 BrowserNonClientFrameViewAsh* frame_view = |
288 static_cast<BrowserNonClientFrameViewAsh*>( | 274 static_cast<BrowserNonClientFrameViewAsh*>( |
289 widget->non_client_view()->frame_view()); | 275 widget->non_client_view()->frame_view()); |
290 | 276 |
291 const gfx::Rect initial = frame_view->caption_button_container_->bounds(); | 277 const gfx::Rect initial = frame_view->caption_button_container_->bounds(); |
292 ash::WmShell::Get() | 278 ash::WmShell::Get() |
293 ->maximize_mode_controller() | 279 ->maximize_mode_controller() |
294 ->EnableMaximizeModeWindowManager(true); | 280 ->EnableMaximizeModeWindowManager(true); |
295 ash::FrameCaptionButtonContainerView::TestApi test(frame_view-> | 281 ash::FrameCaptionButtonContainerView::TestApi test(frame_view-> |
296 caption_button_container_); | 282 caption_button_container_); |
297 test.EndAnimations(); | 283 test.EndAnimations(); |
298 const gfx::Rect during_maximize = frame_view->caption_button_container_-> | 284 const gfx::Rect during_maximize = frame_view->caption_button_container_-> |
299 bounds(); | 285 bounds(); |
300 EXPECT_GT(initial.width(), during_maximize.width()); | 286 EXPECT_GT(initial.width(), during_maximize.width()); |
301 ash::WmShell::Get() | 287 ash::WmShell::Get() |
302 ->maximize_mode_controller() | 288 ->maximize_mode_controller() |
303 ->EnableMaximizeModeWindowManager(false); | 289 ->EnableMaximizeModeWindowManager(false); |
304 test.EndAnimations(); | 290 test.EndAnimations(); |
305 const gfx::Rect after_restore = frame_view->caption_button_container_-> | 291 const gfx::Rect after_restore = frame_view->caption_button_container_-> |
306 bounds(); | 292 bounds(); |
307 EXPECT_EQ(initial, after_restore); | 293 EXPECT_EQ(initial, after_restore); |
308 } | 294 } |
OLD | NEW |