Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Side by Side Diff: ash/content/display/screen_orientation_controller_chromeos_unittest.cc

Issue 2757493002: User orientation lock (Closed)
Patch Set: . Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "ash/display/screen_orientation_controller_chromeos.h" 5 #include "ash/display/screen_orientation_controller_chromeos.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/common/ash_switches.h" 10 #include "ash/common/ash_switches.h"
11 #include "ash/common/test/test_system_tray_delegate.h" 11 #include "ash/common/test/test_system_tray_delegate.h"
12 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h" 12 #include "ash/common/wm/maximize_mode/maximize_mode_controller.h"
13 #include "ash/common/wm/window_state.h"
13 #include "ash/common/wm_shell.h" 14 #include "ash/common/wm_shell.h"
15 #include "ash/common/wm_window.h"
14 #include "ash/content/shell_content_state.h" 16 #include "ash/content/shell_content_state.h"
17 #include "ash/display/screen_orientation_controller_chromeos.h"
18 #include "ash/shared/app_types.h"
15 #include "ash/shell.h" 19 #include "ash/shell.h"
16 #include "ash/system/chromeos/screen_layout_observer.h" 20 #include "ash/system/chromeos/screen_layout_observer.h"
17 #include "ash/test/ash_test_base.h" 21 #include "ash/test/ash_test_base.h"
18 #include "ash/test/ash_test_environment_content.h" 22 #include "ash/test/ash_test_environment_content.h"
19 #include "ash/test/ash_test_helper.h" 23 #include "ash/test/ash_test_helper.h"
20 #include "ash/test/content/test_shell_content_state.h" 24 #include "ash/test/content/test_shell_content_state.h"
25 #include "ash/test/screen_orientation_controller_test_api.h"
21 #include "ash/test/test_shell_delegate.h" 26 #include "ash/test/test_shell_delegate.h"
22 #include "base/command_line.h" 27 #include "base/command_line.h"
23 #include "chromeos/accelerometer/accelerometer_reader.h" 28 #include "chromeos/accelerometer/accelerometer_reader.h"
24 #include "chromeos/accelerometer/accelerometer_types.h" 29 #include "chromeos/accelerometer/accelerometer_types.h"
25 #include "content/public/browser/browser_context.h" 30 #include "content/public/browser/browser_context.h"
26 #include "content/public/browser/web_contents.h" 31 #include "content/public/browser/web_contents.h"
27 #include "content/public/test/test_browser_context.h" 32 #include "content/public/test/test_browser_context.h"
28 #include "third_party/WebKit/public/platform/modules/screen_orientation/WebScree nOrientationLockType.h" 33 #include "third_party/WebKit/public/platform/modules/screen_orientation/WebScree nOrientationLockType.h"
29 #include "ui/aura/window.h" 34 #include "ui/aura/window.h"
30 #include "ui/display/display.h" 35 #include "ui/display/display.h"
(...skipping 25 matching lines...) Expand all
56 WmShell::Get()->maximize_mode_controller()->EnableMaximizeModeWindowManager( 61 WmShell::Get()->maximize_mode_controller()->EnableMaximizeModeWindowManager(
57 enable); 62 enable);
58 } 63 }
59 64
60 bool RotationLocked() { 65 bool RotationLocked() {
61 return Shell::GetInstance() 66 return Shell::GetInstance()
62 ->screen_orientation_controller() 67 ->screen_orientation_controller()
63 ->rotation_locked(); 68 ->rotation_locked();
64 } 69 }
65 70
71 bool UserRotationLocked() {
72 return Shell::GetInstance()
73 ->screen_orientation_controller()
74 ->user_rotation_locked();
75 }
76
66 void SetDisplayRotationById(int64_t display_id, 77 void SetDisplayRotationById(int64_t display_id,
67 display::Display::Rotation rotation) { 78 display::Display::Rotation rotation) {
68 Shell::GetInstance()->display_manager()->SetDisplayRotation( 79 Shell::GetInstance()->display_manager()->SetDisplayRotation(
69 display_id, rotation, display::Display::ROTATION_SOURCE_USER); 80 display_id, rotation, display::Display::ROTATION_SOURCE_USER);
70 } 81 }
71 82
72 void SetInternalDisplayRotation(display::Display::Rotation rotation) { 83 void SetInternalDisplayRotation(display::Display::Rotation rotation) {
73 SetDisplayRotationById(display::Display::InternalDisplayId(), rotation); 84 SetDisplayRotationById(display::Display::InternalDisplayId(), rotation);
74 } 85 }
75 86
76 void SetRotationLocked(bool rotation_locked) {
77 Shell::GetInstance()->screen_orientation_controller()->SetRotationLocked(
78 rotation_locked);
79 }
80
81 void TriggerLidUpdate(const gfx::Vector3dF& lid) { 87 void TriggerLidUpdate(const gfx::Vector3dF& lid) {
82 scoped_refptr<chromeos::AccelerometerUpdate> update( 88 scoped_refptr<chromeos::AccelerometerUpdate> update(
83 new chromeos::AccelerometerUpdate()); 89 new chromeos::AccelerometerUpdate());
84 update->Set(chromeos::ACCELEROMETER_SOURCE_SCREEN, lid.x(), lid.y(), lid.z()); 90 update->Set(chromeos::ACCELEROMETER_SOURCE_SCREEN, lid.x(), lid.y(), lid.z());
85 Shell::GetInstance()->screen_orientation_controller()->OnAccelerometerUpdated( 91 Shell::GetInstance()->screen_orientation_controller()->OnAccelerometerUpdated(
86 update); 92 update);
87 } 93 }
88 94
89 // Attaches the NativeView of |web_contents| to |parent| without changing the 95 // Attaches the NativeView of |web_contents| to |parent| without changing the
90 // currently active window. 96 // currently active window.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 // content::BrowserContext and that has an aura::Window. 128 // content::BrowserContext and that has an aura::Window.
123 content::WebContents* CreateWebContents(); 129 content::WebContents* CreateWebContents();
124 130
125 // Creates a secondary content::WebContents, with a separate 131 // Creates a secondary content::WebContents, with a separate
126 // content::BrowserContext. 132 // content::BrowserContext.
127 content::WebContents* CreateSecondaryWebContents(); 133 content::WebContents* CreateSecondaryWebContents();
128 134
129 // test::AshTestBase: 135 // test::AshTestBase:
130 void SetUp() override; 136 void SetUp() override;
131 137
138 protected:
139 aura::Window* CreateAppWindowInShellWithId(int id) {
140 aura::Window* window = CreateTestWindowInShellWithId(id);
141 WmWindow::Get(window)->SetAppType(static_cast<int>(AppType::CHROME_APP));
142 return window;
143 }
144
145 void SetSystemRotationLocked(bool rotation_locked) {
146 test::ScreenOrientationControllerTestApi(
147 Shell::GetInstance()->screen_orientation_controller())
148 .SetRotationLocked(rotation_locked);
149 }
150
151 void SetUserRotationLocked(bool rotation_locked) {
152 if (Shell::GetInstance()
153 ->screen_orientation_controller()
154 ->user_rotation_locked() != rotation_locked) {
155 Shell::GetInstance()
156 ->screen_orientation_controller()
157 ->ToggleUserRotationLock();
158 }
159 }
160
161 blink::WebScreenOrientationLockType UserLockedOrientation() const {
162 test::ScreenOrientationControllerTestApi test_api(
163 Shell::GetInstance()->screen_orientation_controller());
164 return test_api.UserLockedOrientation();
165 }
166
132 private: 167 private:
133 // Optional content::BrowserContext used for two window tests. 168 // Optional content::BrowserContext used for two window tests.
134 std::unique_ptr<content::BrowserContext> secondary_browser_context_; 169 std::unique_ptr<content::BrowserContext> secondary_browser_context_;
135 170
136 // Setups underlying content layer so that content::WebContents can be 171 // Setups underlying content layer so that content::WebContents can be
137 // generated. 172 // generated.
138 std::unique_ptr<views::WebViewTestHelper> webview_test_helper_; 173 std::unique_ptr<views::WebViewTestHelper> webview_test_helper_;
139 174
140 DISALLOW_COPY_AND_ASSIGN(ScreenOrientationControllerTest); 175 DISALLOW_COPY_AND_ASSIGN(ScreenOrientationControllerTest);
141 }; 176 };
(...skipping 18 matching lines...) Expand all
160 195
161 void ScreenOrientationControllerTest::SetUp() { 196 void ScreenOrientationControllerTest::SetUp() {
162 base::CommandLine::ForCurrentProcess()->AppendSwitch( 197 base::CommandLine::ForCurrentProcess()->AppendSwitch(
163 ::switches::kUseFirstDisplayAsInternal); 198 ::switches::kUseFirstDisplayAsInternal);
164 test::AshTestBase::SetUp(); 199 test::AshTestBase::SetUp();
165 } 200 }
166 201
167 // Tests that a content::WebContents can lock rotation. 202 // Tests that a content::WebContents can lock rotation.
168 TEST_F(ScreenOrientationControllerTest, LockOrientation) { 203 TEST_F(ScreenOrientationControllerTest, LockOrientation) {
169 std::unique_ptr<content::WebContents> content(CreateWebContents()); 204 std::unique_ptr<content::WebContents> content(CreateWebContents());
170 std::unique_ptr<aura::Window> focus_window(CreateTestWindowInShellWithId(0)); 205 std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
171 ASSERT_NE(nullptr, content->GetNativeView()); 206 ASSERT_NE(nullptr, content->GetNativeView());
172 ASSERT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 207 ASSERT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
173 ASSERT_FALSE(RotationLocked()); 208 ASSERT_FALSE(RotationLocked());
174 209
175 AttachAndActivateWebContents(content.get(), focus_window.get()); 210 AttachAndActivateWebContents(content.get(), focus_window.get());
176 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape); 211 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
177 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 212 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
178 EXPECT_TRUE(RotationLocked()); 213 EXPECT_TRUE(RotationLocked());
179 } 214 }
180 215
181 // Tests that a content::WebContents can unlock rotation. 216 // Tests that a content::WebContents can unlock rotation.
182 TEST_F(ScreenOrientationControllerTest, Unlock) { 217 TEST_F(ScreenOrientationControllerTest, Unlock) {
183 std::unique_ptr<content::WebContents> content(CreateWebContents()); 218 std::unique_ptr<content::WebContents> content(CreateWebContents());
184 std::unique_ptr<aura::Window> focus_window(CreateTestWindowInShellWithId(0)); 219 std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
185 ASSERT_NE(nullptr, content->GetNativeView()); 220 ASSERT_NE(nullptr, content->GetNativeView());
186 ASSERT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 221 ASSERT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
187 ASSERT_FALSE(RotationLocked()); 222 ASSERT_FALSE(RotationLocked());
188 223
189 AttachAndActivateWebContents(content.get(), focus_window.get()); 224 AttachAndActivateWebContents(content.get(), focus_window.get());
190 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape); 225 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
191 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 226 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
192 EXPECT_TRUE(RotationLocked()); 227 EXPECT_TRUE(RotationLocked());
193 228
194 delegate()->Unlock(content.get()); 229 delegate()->Unlock(content.get());
195 EXPECT_FALSE(RotationLocked()); 230 EXPECT_FALSE(RotationLocked());
196 } 231 }
197 232
198 // Tests that a content::WebContents is able to change the orientation of the 233 // Tests that a content::WebContents is able to change the orientation of the
199 // display after having locked rotation. 234 // display after having locked rotation.
200 TEST_F(ScreenOrientationControllerTest, OrientationChanges) { 235 TEST_F(ScreenOrientationControllerTest, OrientationChanges) {
201 std::unique_ptr<content::WebContents> content(CreateWebContents()); 236 std::unique_ptr<content::WebContents> content(CreateWebContents());
202 std::unique_ptr<aura::Window> focus_window(CreateTestWindowInShellWithId(0)); 237 std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
203 ASSERT_NE(nullptr, content->GetNativeView()); 238 ASSERT_NE(nullptr, content->GetNativeView());
204 ASSERT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 239 ASSERT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
205 ASSERT_FALSE(RotationLocked()); 240 ASSERT_FALSE(RotationLocked());
206 241
207 AttachAndActivateWebContents(content.get(), focus_window.get()); 242 AttachAndActivateWebContents(content.get(), focus_window.get());
208 delegate()->Lock(content.get(), blink::WebScreenOrientationLockPortrait); 243 delegate()->Lock(content.get(), blink::WebScreenOrientationLockPortrait);
209 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 244 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
210 EXPECT_TRUE(RotationLocked()); 245 EXPECT_TRUE(RotationLocked());
211 246
212 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape); 247 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
213 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 248 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
214 } 249 }
215 250
216 // Tests that orientation can only be set by the first content::WebContents that 251 // Tests that orientation can only be set by the first content::WebContents that
217 // has set a rotation lock. 252 // has set a rotation lock.
218 TEST_F(ScreenOrientationControllerTest, SecondContentCannotChangeOrientation) { 253 TEST_F(ScreenOrientationControllerTest, SecondContentCannotChangeOrientation) {
219 std::unique_ptr<content::WebContents> content1(CreateWebContents()); 254 std::unique_ptr<content::WebContents> content1(CreateWebContents());
220 std::unique_ptr<content::WebContents> content2(CreateSecondaryWebContents()); 255 std::unique_ptr<content::WebContents> content2(CreateSecondaryWebContents());
221 std::unique_ptr<aura::Window> focus_window1(CreateTestWindowInShellWithId(0)); 256 std::unique_ptr<aura::Window> focus_window1(CreateAppWindowInShellWithId(0));
222 std::unique_ptr<aura::Window> focus_window2(CreateTestWindowInShellWithId(1)); 257 std::unique_ptr<aura::Window> focus_window2(CreateAppWindowInShellWithId(1));
223 ASSERT_NE(content1->GetNativeView(), content2->GetNativeView()); 258 ASSERT_NE(content1->GetNativeView(), content2->GetNativeView());
224 259
225 AttachAndActivateWebContents(content1.get(), focus_window1.get()); 260 AttachAndActivateWebContents(content1.get(), focus_window1.get());
226 AttachWebContents(content2.get(), focus_window2.get()); 261 AttachWebContents(content2.get(), focus_window2.get());
227 delegate()->Lock(content1.get(), blink::WebScreenOrientationLockLandscape); 262 delegate()->Lock(content1.get(), blink::WebScreenOrientationLockLandscape);
228 delegate()->Lock(content2.get(), blink::WebScreenOrientationLockPortrait); 263 delegate()->Lock(content2.get(), blink::WebScreenOrientationLockPortrait);
229 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 264 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
230 } 265 }
231 266
232 // Tests that only the content::WebContents that set a rotation lock can perform 267 // Tests that only the content::WebContents that set a rotation lock can perform
233 // an unlock. 268 // an unlock.
234 TEST_F(ScreenOrientationControllerTest, SecondContentCannotUnlock) { 269 TEST_F(ScreenOrientationControllerTest, SecondContentCannotUnlock) {
235 std::unique_ptr<content::WebContents> content1(CreateWebContents()); 270 std::unique_ptr<content::WebContents> content1(CreateWebContents());
236 std::unique_ptr<content::WebContents> content2(CreateSecondaryWebContents()); 271 std::unique_ptr<content::WebContents> content2(CreateSecondaryWebContents());
237 std::unique_ptr<aura::Window> focus_window1(CreateTestWindowInShellWithId(0)); 272 std::unique_ptr<aura::Window> focus_window1(CreateAppWindowInShellWithId(0));
238 std::unique_ptr<aura::Window> focus_window2(CreateTestWindowInShellWithId(1)); 273 std::unique_ptr<aura::Window> focus_window2(CreateAppWindowInShellWithId(1));
239 ASSERT_NE(content1->GetNativeView(), content2->GetNativeView()); 274 ASSERT_NE(content1->GetNativeView(), content2->GetNativeView());
240 275
241 AttachAndActivateWebContents(content1.get(), focus_window1.get()); 276 AttachAndActivateWebContents(content1.get(), focus_window1.get());
242 AttachWebContents(content2.get(), focus_window2.get()); 277 AttachWebContents(content2.get(), focus_window2.get());
243 delegate()->Lock(content1.get(), blink::WebScreenOrientationLockLandscape); 278 delegate()->Lock(content1.get(), blink::WebScreenOrientationLockLandscape);
244 delegate()->Unlock(content2.get()); 279 delegate()->Unlock(content2.get());
245 EXPECT_TRUE(RotationLocked()); 280 EXPECT_TRUE(RotationLocked());
246 } 281 }
247 282
248 // Tests that a rotation lock is applied only while the content::WebContents are 283 // Tests that a rotation lock is applied only while the content::WebContents are
249 // a part of the active window. 284 // a part of the active window.
250 TEST_F(ScreenOrientationControllerTest, ActiveWindowChangesUpdateLock) { 285 TEST_F(ScreenOrientationControllerTest, ActiveWindowChangesUpdateLock) {
251 std::unique_ptr<content::WebContents> content(CreateWebContents()); 286 std::unique_ptr<content::WebContents> content(CreateWebContents());
252 std::unique_ptr<aura::Window> focus_window1(CreateTestWindowInShellWithId(0)); 287 std::unique_ptr<aura::Window> focus_window1(CreateAppWindowInShellWithId(0));
253 std::unique_ptr<aura::Window> focus_window2(CreateTestWindowInShellWithId(1)); 288 std::unique_ptr<aura::Window> focus_window2(CreateAppWindowInShellWithId(1));
254 289
255 AttachAndActivateWebContents(content.get(), focus_window1.get()); 290 AttachAndActivateWebContents(content.get(), focus_window1.get());
256 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape); 291 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
257 ASSERT_TRUE(RotationLocked()); 292 ASSERT_TRUE(RotationLocked());
258 293
259 aura::client::ActivationClient* activation_client = 294 aura::client::ActivationClient* activation_client =
260 Shell::GetInstance()->activation_client(); 295 Shell::GetInstance()->activation_client();
261 activation_client->ActivateWindow(focus_window2.get()); 296 activation_client->ActivateWindow(focus_window2.get());
262 EXPECT_FALSE(RotationLocked()); 297 EXPECT_FALSE(RotationLocked());
263 298
264 activation_client->ActivateWindow(focus_window1.get()); 299 activation_client->ActivateWindow(focus_window1.get());
265 EXPECT_TRUE(RotationLocked()); 300 EXPECT_TRUE(RotationLocked());
266 } 301 }
267 302
268 // Tests that switching between windows with different orientation locks change 303 // Tests that switching between windows with different orientation locks change
269 // the orientation. 304 // the orientation.
270 TEST_F(ScreenOrientationControllerTest, ActiveWindowChangesUpdateOrientation) { 305 TEST_F(ScreenOrientationControllerTest, ActiveWindowChangesUpdateOrientation) {
271 std::unique_ptr<content::WebContents> content1(CreateWebContents()); 306 std::unique_ptr<content::WebContents> content1(CreateWebContents());
272 std::unique_ptr<content::WebContents> content2(CreateSecondaryWebContents()); 307 std::unique_ptr<content::WebContents> content2(CreateSecondaryWebContents());
273 std::unique_ptr<aura::Window> focus_window1(CreateTestWindowInShellWithId(0)); 308 std::unique_ptr<aura::Window> focus_window1(CreateAppWindowInShellWithId(0));
274 std::unique_ptr<aura::Window> focus_window2(CreateTestWindowInShellWithId(1)); 309 std::unique_ptr<aura::Window> focus_window2(CreateAppWindowInShellWithId(1));
275 AttachAndActivateWebContents(content1.get(), focus_window1.get()); 310 AttachAndActivateWebContents(content1.get(), focus_window1.get());
276 AttachWebContents(content2.get(), focus_window2.get()); 311 AttachWebContents(content2.get(), focus_window2.get());
277 312
278 delegate()->Lock(content1.get(), blink::WebScreenOrientationLockLandscape); 313 delegate()->Lock(content1.get(), blink::WebScreenOrientationLockLandscape);
279 delegate()->Lock(content2.get(), blink::WebScreenOrientationLockPortrait); 314 delegate()->Lock(content2.get(), blink::WebScreenOrientationLockPortrait);
280 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 315 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
281 316
282 aura::client::ActivationClient* activation_client = 317 aura::client::ActivationClient* activation_client =
283 Shell::GetInstance()->activation_client(); 318 Shell::GetInstance()->activation_client();
284 activation_client->ActivateWindow(focus_window2.get()); 319 activation_client->ActivateWindow(focus_window2.get());
285 EXPECT_TRUE(RotationLocked()); 320 EXPECT_TRUE(RotationLocked());
286 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 321 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
287 322
288 activation_client->ActivateWindow(focus_window1.get()); 323 activation_client->ActivateWindow(focus_window1.get());
289 EXPECT_TRUE(RotationLocked()); 324 EXPECT_TRUE(RotationLocked());
290 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 325 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
291 } 326 }
292 327
293 // Tests that a rotation lock is removed when the setting window is hidden, and 328 // Tests that a rotation lock is removed when the setting window is hidden, and
294 // that it is reapplied when the window becomes visible. 329 // that it is reapplied when the window becomes visible.
295 TEST_F(ScreenOrientationControllerTest, VisibilityChangesLock) { 330 TEST_F(ScreenOrientationControllerTest, VisibilityChangesLock) {
296 std::unique_ptr<content::WebContents> content(CreateWebContents()); 331 std::unique_ptr<content::WebContents> content(CreateWebContents());
297 std::unique_ptr<aura::Window> focus_window(CreateTestWindowInShellWithId(0)); 332 std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
298 AttachAndActivateWebContents(content.get(), focus_window.get()); 333 AttachAndActivateWebContents(content.get(), focus_window.get());
299 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape); 334 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
300 EXPECT_TRUE(RotationLocked()); 335 EXPECT_TRUE(RotationLocked());
301 336
302 aura::Window* window = content->GetNativeView(); 337 aura::Window* window = content->GetNativeView();
303 window->Hide(); 338 window->Hide();
304 EXPECT_FALSE(RotationLocked()); 339 EXPECT_FALSE(RotationLocked());
305 340
306 window->Show(); 341 window->Show();
307 EXPECT_TRUE(RotationLocked()); 342 EXPECT_TRUE(RotationLocked());
308 } 343 }
309 344
310 // Tests that when a window is destroyed that its rotation lock is removed, and 345 // Tests that when a window is destroyed that its rotation lock is removed, and
311 // window activations no longer change the lock 346 // window activations no longer change the lock
312 TEST_F(ScreenOrientationControllerTest, WindowDestructionRemovesLock) { 347 TEST_F(ScreenOrientationControllerTest, WindowDestructionRemovesLock) {
313 std::unique_ptr<content::WebContents> content(CreateWebContents()); 348 std::unique_ptr<content::WebContents> content(CreateWebContents());
314 std::unique_ptr<aura::Window> focus_window1(CreateTestWindowInShellWithId(0)); 349 std::unique_ptr<aura::Window> focus_window1(CreateAppWindowInShellWithId(0));
315 std::unique_ptr<aura::Window> focus_window2(CreateTestWindowInShellWithId(1)); 350 std::unique_ptr<aura::Window> focus_window2(CreateAppWindowInShellWithId(1));
316 351
317 AttachAndActivateWebContents(content.get(), focus_window1.get()); 352 AttachAndActivateWebContents(content.get(), focus_window1.get());
318 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape); 353 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
319 ASSERT_TRUE(RotationLocked()); 354 ASSERT_TRUE(RotationLocked());
320 355
321 focus_window1->RemoveChild(content->GetNativeView()); 356 focus_window1->RemoveChild(content->GetNativeView());
322 content.reset(); 357 content.reset();
323 EXPECT_FALSE(RotationLocked()); 358 EXPECT_FALSE(RotationLocked());
324 359
325 aura::client::ActivationClient* activation_client = 360 aura::client::ActivationClient* activation_client =
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 gravity.set_x(-sin(degrees * kDegreesToRadians) * kMeanGravity); 426 gravity.set_x(-sin(degrees * kDegreesToRadians) * kMeanGravity);
392 gravity.set_y(-cos(degrees * kDegreesToRadians) * kMeanGravity); 427 gravity.set_y(-cos(degrees * kDegreesToRadians) * kMeanGravity);
393 TriggerLidUpdate(gravity); 428 TriggerLidUpdate(gravity);
394 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 429 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
395 } 430 }
396 431
397 // Tests that the display will stick to its current orientation when the 432 // Tests that the display will stick to its current orientation when the
398 // rotation lock has been set. 433 // rotation lock has been set.
399 TEST_F(ScreenOrientationControllerTest, RotationLockPreventsRotation) { 434 TEST_F(ScreenOrientationControllerTest, RotationLockPreventsRotation) {
400 EnableMaximizeMode(true); 435 EnableMaximizeMode(true);
401 SetRotationLocked(true); 436 SetUserRotationLocked(true);
402 437
403 // Turn past the threshold for rotation. 438 // Turn past the threshold for rotation.
404 float degrees = 90.0; 439 float degrees = 90.0;
405 gfx::Vector3dF gravity(-sin(degrees * kDegreesToRadians) * kMeanGravity, 440 gfx::Vector3dF gravity(-sin(degrees * kDegreesToRadians) * kMeanGravity,
406 -cos(degrees * kDegreesToRadians) * kMeanGravity, 441 -cos(degrees * kDegreesToRadians) * kMeanGravity,
407 0.0f); 442 0.0f);
408 TriggerLidUpdate(gravity); 443 TriggerLidUpdate(gravity);
409 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 444 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
410 445
411 SetRotationLocked(false); 446 SetUserRotationLocked(false);
412 TriggerLidUpdate(gravity); 447 TriggerLidUpdate(gravity);
413 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 448 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
414 } 449 }
415 450
416 // The ScreenLayoutObserver class that is responsible for adding/updating 451 // The ScreenLayoutObserver class that is responsible for adding/updating
417 // MessageCenter notifications is only added to the SystemTray on ChromeOS. 452 // MessageCenter notifications is only added to the SystemTray on ChromeOS.
418 // Tests that the screen rotation notifications are suppressed when 453 // Tests that the screen rotation notifications are suppressed when
419 // triggered by the accelerometer. 454 // triggered by the accelerometer.
420 TEST_F(ScreenOrientationControllerTest, BlockRotationNotifications) { 455 TEST_F(ScreenOrientationControllerTest, BlockRotationNotifications) {
421 EnableMaximizeMode(true); 456 EnableMaximizeMode(true);
422 Shell::GetInstance() 457 Shell::GetInstance()
423 ->screen_layout_observer() 458 ->screen_layout_observer()
424 ->set_show_notifications_for_testing(true); 459 ->set_show_notifications_for_testing(true);
425 display::test::DisplayManagerTestApi(display_manager()) 460 display::test::DisplayManagerTestApi(display_manager())
426 .SetFirstDisplayAsInternalDisplay(); 461 .SetFirstDisplayAsInternalDisplay();
427 462
428 message_center::MessageCenter* message_center = 463 message_center::MessageCenter* message_center =
429 message_center::MessageCenter::Get(); 464 message_center::MessageCenter::Get();
430 465
431 EXPECT_EQ(0u, message_center->NotificationCount()); 466 EXPECT_EQ(0u, message_center->NotificationCount());
432 EXPECT_FALSE(message_center->HasPopupNotifications()); 467 EXPECT_FALSE(message_center->HasPopupNotifications());
433 468
434 // Make sure notifications are still displayed when 469 // Make sure notifications are still displayed when
435 // adjusting the screen rotation directly when in maximize mode 470 // adjusting the screen rotation directly when in maximize mode
436 ASSERT_NE(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation()); 471 ASSERT_NE(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation());
437 SetInternalDisplayRotation(display::Display::ROTATE_270); 472 SetInternalDisplayRotation(display::Display::ROTATE_270);
438 SetRotationLocked(false); 473 SetSystemRotationLocked(false);
439 EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation()); 474 EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation());
440 EXPECT_EQ(1u, message_center->NotificationCount()); 475 EXPECT_EQ(1u, message_center->NotificationCount());
441 EXPECT_TRUE(message_center->HasPopupNotifications()); 476 EXPECT_TRUE(message_center->HasPopupNotifications());
442 477
443 // Clear all notifications 478 // Clear all notifications
444 message_center->RemoveAllNotifications( 479 message_center->RemoveAllNotifications(
445 false /* by_user */, message_center::MessageCenter::RemoveType::ALL); 480 false /* by_user */, message_center::MessageCenter::RemoveType::ALL);
446 EXPECT_EQ(0u, message_center->NotificationCount()); 481 EXPECT_EQ(0u, message_center->NotificationCount());
447 EXPECT_FALSE(message_center->HasPopupNotifications()); 482 EXPECT_FALSE(message_center->HasPopupNotifications());
448 483
449 // Make sure notifications are blocked when adjusting the screen rotation 484 // Make sure notifications are blocked when adjusting the screen rotation
450 // via the accelerometer while in maximize mode 485 // via the accelerometer while in maximize mode
451 // Rotate the screen 90 degrees 486 // Rotate the screen 90 degrees
452 ASSERT_NE(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 487 ASSERT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation());
453 TriggerLidUpdate(gfx::Vector3dF(-kMeanGravity, 0.0f, 0.0f)); 488 TriggerLidUpdate(gfx::Vector3dF(-kMeanGravity, 0.0f, 0.0f));
454 ASSERT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 489 ASSERT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
455 EXPECT_EQ(0u, message_center->NotificationCount()); 490 EXPECT_EQ(0u, message_center->NotificationCount());
456 EXPECT_FALSE(message_center->HasPopupNotifications()); 491 EXPECT_FALSE(message_center->HasPopupNotifications());
457 492
458 // Make sure notifications are still displayed when 493 // Make sure notifications are still displayed when
459 // adjusting the screen rotation directly when not in maximize mode 494 // adjusting the screen rotation directly when not in maximize mode
460 EnableMaximizeMode(false); 495 EnableMaximizeMode(false);
461 // Reset the screen rotation. 496 // Reset the screen rotation.
462 SetInternalDisplayRotation(display::Display::ROTATE_0); 497 SetInternalDisplayRotation(display::Display::ROTATE_0);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 // maximize mode was activated. 543 // maximize mode was activated.
509 SetInternalDisplayRotation(display::Display::ROTATE_0); 544 SetInternalDisplayRotation(display::Display::ROTATE_0);
510 EnableMaximizeMode(false); 545 EnableMaximizeMode(false);
511 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 546 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
512 } 547 }
513 548
514 // Tests that when the orientation lock is set to Landscape, that rotation can 549 // Tests that when the orientation lock is set to Landscape, that rotation can
515 // be done between the two angles of the orientation. 550 // be done between the two angles of the orientation.
516 TEST_F(ScreenOrientationControllerTest, LandscapeOrientationAllowsRotation) { 551 TEST_F(ScreenOrientationControllerTest, LandscapeOrientationAllowsRotation) {
517 std::unique_ptr<content::WebContents> content(CreateWebContents()); 552 std::unique_ptr<content::WebContents> content(CreateWebContents());
518 std::unique_ptr<aura::Window> focus_window(CreateTestWindowInShellWithId(0)); 553 std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
519 EnableMaximizeMode(true); 554 EnableMaximizeMode(true);
520 555
521 AttachAndActivateWebContents(content.get(), focus_window.get()); 556 AttachAndActivateWebContents(content.get(), focus_window.get());
522 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape); 557 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
523 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 558 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
524 EXPECT_TRUE(RotationLocked()); 559 EXPECT_TRUE(RotationLocked());
525 560
526 // Inverse of orientation is allowed 561 // Inverse of orientation is allowed
527 TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravity, 0.0f)); 562 TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravity, 0.0f));
528 EXPECT_EQ(display::Display::ROTATE_180, GetCurrentInternalDisplayRotation()); 563 EXPECT_EQ(display::Display::ROTATE_180, GetCurrentInternalDisplayRotation());
529 564
530 // Display rotations between are not allowed 565 // Display rotations between are not allowed
531 TriggerLidUpdate(gfx::Vector3dF(kMeanGravity, 0.0f, 0.0f)); 566 TriggerLidUpdate(gfx::Vector3dF(kMeanGravity, 0.0f, 0.0f));
532 EXPECT_EQ(display::Display::ROTATE_180, GetCurrentInternalDisplayRotation()); 567 EXPECT_EQ(display::Display::ROTATE_180, GetCurrentInternalDisplayRotation());
533 TriggerLidUpdate(gfx::Vector3dF(-kMeanGravity, 0.0f, 0.0f)); 568 TriggerLidUpdate(gfx::Vector3dF(-kMeanGravity, 0.0f, 0.0f));
534 EXPECT_EQ(display::Display::ROTATE_180, GetCurrentInternalDisplayRotation()); 569 EXPECT_EQ(display::Display::ROTATE_180, GetCurrentInternalDisplayRotation());
535 } 570 }
536 571
537 // Tests that when the orientation lock is set to Portrait, that rotaiton can be 572 // Tests that when the orientation lock is set to Portrait, that rotaiton can be
538 // done between the two angles of the orientation. 573 // done between the two angles of the orientation.
539 TEST_F(ScreenOrientationControllerTest, PortraitOrientationAllowsRotation) { 574 TEST_F(ScreenOrientationControllerTest, PortraitOrientationAllowsRotation) {
540 std::unique_ptr<content::WebContents> content(CreateWebContents()); 575 std::unique_ptr<content::WebContents> content(CreateWebContents());
541 std::unique_ptr<aura::Window> focus_window(CreateTestWindowInShellWithId(0)); 576 std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
542 EnableMaximizeMode(true); 577 EnableMaximizeMode(true);
543 578
544 AttachAndActivateWebContents(content.get(), focus_window.get()); 579 AttachAndActivateWebContents(content.get(), focus_window.get());
545 delegate()->Lock(content.get(), blink::WebScreenOrientationLockPortrait); 580 delegate()->Lock(content.get(), blink::WebScreenOrientationLockPortrait);
546 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 581 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
547 EXPECT_TRUE(RotationLocked()); 582 EXPECT_TRUE(RotationLocked());
548 583
549 // Inverse of orientation is allowed 584 // Inverse of orientation is allowed
550 TriggerLidUpdate(gfx::Vector3dF(kMeanGravity, 0.0f, 0.0f)); 585 TriggerLidUpdate(gfx::Vector3dF(kMeanGravity, 0.0f, 0.0f));
551 EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation()); 586 EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation());
552 587
553 // Display rotations between are not allowed 588 // Display rotations between are not allowed
554 TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravity, 0.0f)); 589 TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravity, 0.0f));
555 EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation()); 590 EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation());
556 TriggerLidUpdate(gfx::Vector3dF(0.0f, -kMeanGravity, 0.0f)); 591 TriggerLidUpdate(gfx::Vector3dF(0.0f, -kMeanGravity, 0.0f));
557 EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation()); 592 EXPECT_EQ(display::Display::ROTATE_270, GetCurrentInternalDisplayRotation());
558 } 593 }
559 594
560 // Tests that for an orientation lock which does not allow rotation, that the 595 // Tests that for an orientation lock which does not allow rotation, that the
561 // display rotation remains constant. 596 // display rotation remains constant.
562 TEST_F(ScreenOrientationControllerTest, OrientationLockDisallowsRotation) { 597 TEST_F(ScreenOrientationControllerTest, OrientationLockDisallowsRotation) {
563 std::unique_ptr<content::WebContents> content(CreateWebContents()); 598 std::unique_ptr<content::WebContents> content(CreateWebContents());
564 std::unique_ptr<aura::Window> focus_window(CreateTestWindowInShellWithId(0)); 599 std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
565 EnableMaximizeMode(true); 600 EnableMaximizeMode(true);
566 601
567 AttachAndActivateWebContents(content.get(), focus_window.get()); 602 AttachAndActivateWebContents(content.get(), focus_window.get());
568 delegate()->Lock(content.get(), 603 delegate()->Lock(content.get(),
569 blink::WebScreenOrientationLockPortraitPrimary); 604 blink::WebScreenOrientationLockPortraitPrimary);
570 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 605 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
571 EXPECT_TRUE(RotationLocked()); 606 EXPECT_TRUE(RotationLocked());
572 607
573 // Rotation does not change. 608 // Rotation does not change.
574 TriggerLidUpdate(gfx::Vector3dF(kMeanGravity, 0.0f, 0.0f)); 609 TriggerLidUpdate(gfx::Vector3dF(kMeanGravity, 0.0f, 0.0f));
575 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 610 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
576 TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravity, 0.0f)); 611 TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravity, 0.0f));
577 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 612 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
578 TriggerLidUpdate(gfx::Vector3dF(0.0f, -kMeanGravity, 0.0f)); 613 TriggerLidUpdate(gfx::Vector3dF(0.0f, -kMeanGravity, 0.0f));
579 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation()); 614 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
580 } 615 }
581 616
582 // Tests that after a content::WebContents has applied an orientation lock which 617 // Tests that after a content::WebContents has applied an orientation lock which
583 // supports rotation, that a user rotation lock does not allow rotation. 618 // supports rotation, that a user rotation lock does not allow rotation.
584 TEST_F(ScreenOrientationControllerTest, UserRotationLockDisallowsRotation) { 619 TEST_F(ScreenOrientationControllerTest, UserRotationLockDisallowsRotation) {
585 std::unique_ptr<content::WebContents> content(CreateWebContents()); 620 std::unique_ptr<content::WebContents> content(CreateWebContents());
586 std::unique_ptr<aura::Window> focus_window(CreateTestWindowInShellWithId(0)); 621 std::unique_ptr<aura::Window> focus_window(CreateAppWindowInShellWithId(0));
587 EnableMaximizeMode(true); 622 EnableMaximizeMode(true);
588 623
589 AttachAndActivateWebContents(content.get(), focus_window.get()); 624 AttachAndActivateWebContents(content.get(), focus_window.get());
590 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape); 625 delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
591 delegate()->Unlock(content.get()); 626 delegate()->Unlock(content.get());
592 627
593 SetRotationLocked(true); 628 SetUserRotationLocked(true);
594 EXPECT_TRUE(RotationLocked()); 629 EXPECT_TRUE(RotationLocked());
630 EXPECT_TRUE(UserRotationLocked());
631
595 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 632 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
596
597 TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravity, 0.0f)); 633 TriggerLidUpdate(gfx::Vector3dF(0.0f, kMeanGravity, 0.0f));
598 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation()); 634 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
599 } 635 }
600 636
601 // Tests that when MaximizeMode is triggered before the internal display is 637 // Tests that when MaximizeMode is triggered before the internal display is
602 // ready, that ScreenOrientationController still begins listening to events, 638 // ready, that ScreenOrientationController still begins listening to events,
603 // which require an internal display to be acted upon. 639 // which require an internal display to be acted upon.
604 TEST_F(ScreenOrientationControllerTest, InternalDisplayNotAvailableAtStartup) { 640 TEST_F(ScreenOrientationControllerTest, InternalDisplayNotAvailableAtStartup) {
605 display::test::DisplayManagerTestApi(display_manager()) 641 display::test::DisplayManagerTestApi(display_manager())
606 .SetFirstDisplayAsInternalDisplay(); 642 .SetFirstDisplayAsInternalDisplay();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 // |internal_display_info| as inactive instead of non-existent. 684 // |internal_display_info| as inactive instead of non-existent.
649 display_manager()->UpdateDisplaysWith(display_info_list_two_active); 685 display_manager()->UpdateDisplaysWith(display_info_list_two_active);
650 display_manager()->UpdateDisplaysWith(display_info_list_one_active); 686 display_manager()->UpdateDisplaysWith(display_info_list_one_active);
651 687
652 display::test::ScopedSetInternalDisplayId set_internal(display_manager(), 688 display::test::ScopedSetInternalDisplayId set_internal(display_manager(),
653 kInternalDisplayId); 689 kInternalDisplayId);
654 690
655 ASSERT_NE(kNewRotation, display_manager() 691 ASSERT_NE(kNewRotation, display_manager()
656 ->GetDisplayInfo(kInternalDisplayId) 692 ->GetDisplayInfo(kInternalDisplayId)
657 .GetActiveRotation()); 693 .GetActiveRotation());
658 694 test::ScreenOrientationControllerTestApi(
659 Shell::GetInstance()->screen_orientation_controller()->SetDisplayRotation( 695 Shell::GetInstance()->screen_orientation_controller())
660 kNewRotation, display::Display::ROTATION_SOURCE_ACTIVE); 696 .SetDisplayRotation(kNewRotation,
697 display::Display::ROTATION_SOURCE_ACTIVE);
661 698
662 EXPECT_EQ(kNewRotation, display_manager() 699 EXPECT_EQ(kNewRotation, display_manager()
663 ->GetDisplayInfo(kInternalDisplayId) 700 ->GetDisplayInfo(kInternalDisplayId)
664 .GetActiveRotation()); 701 .GetActiveRotation());
665 } 702 }
666 703
704 TEST_F(ScreenOrientationControllerTest, UserRotationLockedOrientation) {
705 ScreenOrientationController* orientation_controller =
706 Shell::GetInstance()->screen_orientation_controller();
707 orientation_controller->ToggleUserRotationLock();
708 EXPECT_TRUE(orientation_controller->user_rotation_locked());
709 EXPECT_EQ(blink::WebScreenOrientationLockLandscapePrimary,
710 UserLockedOrientation());
711
712 orientation_controller->ToggleUserRotationLock();
713 SetInternalDisplayRotation(display::Display::ROTATE_90);
714 orientation_controller->ToggleUserRotationLock();
715 EXPECT_EQ(blink::WebScreenOrientationLockPortraitPrimary,
716 UserLockedOrientation());
717
718 orientation_controller->ToggleUserRotationLock();
719 SetInternalDisplayRotation(display::Display::ROTATE_180);
720 orientation_controller->ToggleUserRotationLock();
721 EXPECT_EQ(blink::WebScreenOrientationLockLandscapeSecondary,
722 UserLockedOrientation());
723
724 orientation_controller->ToggleUserRotationLock();
725 SetInternalDisplayRotation(display::Display::ROTATE_270);
726 orientation_controller->ToggleUserRotationLock();
727 EXPECT_EQ(blink::WebScreenOrientationLockPortraitSecondary,
728 UserLockedOrientation());
729 orientation_controller->ToggleUserRotationLock();
730
731 SetInternalDisplayRotation(display::Display::ROTATE_270);
732
733 UpdateDisplay("800x1280");
734 orientation_controller->ToggleUserRotationLock();
735 EXPECT_TRUE(orientation_controller->user_rotation_locked());
736 EXPECT_EQ(blink::WebScreenOrientationLockPortraitPrimary,
737 UserLockedOrientation());
738
739 orientation_controller->ToggleUserRotationLock();
740 SetInternalDisplayRotation(display::Display::ROTATE_90);
741 orientation_controller->ToggleUserRotationLock();
742 EXPECT_EQ(blink::WebScreenOrientationLockLandscapePrimary,
743 UserLockedOrientation());
744
745 orientation_controller->ToggleUserRotationLock();
746 SetInternalDisplayRotation(display::Display::ROTATE_180);
747 orientation_controller->ToggleUserRotationLock();
748 EXPECT_EQ(blink::WebScreenOrientationLockPortraitSecondary,
749 UserLockedOrientation());
750
751 orientation_controller->ToggleUserRotationLock();
752 SetInternalDisplayRotation(display::Display::ROTATE_270);
753 orientation_controller->ToggleUserRotationLock();
754 EXPECT_EQ(blink::WebScreenOrientationLockLandscapeSecondary,
755 UserLockedOrientation());
756 orientation_controller->ToggleUserRotationLock();
757 }
758
759 TEST_F(ScreenOrientationControllerTest, UserRotationLock) {
760 std::unique_ptr<content::WebContents> content1(CreateWebContents());
761 std::unique_ptr<content::WebContents> content2(CreateSecondaryWebContents());
762 std::unique_ptr<aura::Window> focus_window1(CreateAppWindowInShellWithId(0));
763 std::unique_ptr<aura::Window> focus_window2(CreateAppWindowInShellWithId(1));
764 ASSERT_NE(content1->GetNativeView(), content2->GetNativeView());
765
766 AttachAndActivateWebContents(content2.get(), focus_window2.get());
767 AttachAndActivateWebContents(content1.get(), focus_window1.get());
768
769 ASSERT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
770 ASSERT_FALSE(RotationLocked());
771 ASSERT_FALSE(UserRotationLocked());
772
773 ScreenOrientationController* orientation_controller =
774 Shell::GetInstance()->screen_orientation_controller();
775 ASSERT_FALSE(orientation_controller->user_rotation_locked());
776 orientation_controller->ToggleUserRotationLock();
777 ASSERT_TRUE(orientation_controller->user_rotation_locked());
778
779 delegate()->Lock(content1.get(), blink::WebScreenOrientationLockPortrait);
780
781 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
782
783 aura::client::ActivationClient* activation_client =
784 Shell::GetInstance()->activation_client();
785 // Activating any will switch to the natural orientation.
786 activation_client->ActivateWindow(focus_window2.get());
787 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
788
789 // Activating the portrait window will rotate to the portrait.
790 activation_client->ActivateWindow(focus_window1.get());
791 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
792
793 // User locked to the 90 dig.
794 orientation_controller->ToggleUserRotationLock();
795 orientation_controller->ToggleUserRotationLock();
796
797 // Switching to Any orientation will stay to the user locked orientation.
798 activation_client->ActivateWindow(focus_window2.get());
799 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
800
801 // Application forced to be landscape.
802 delegate()->Lock(content2.get(), blink::WebScreenOrientationLockLandscape);
803 EXPECT_EQ(display::Display::ROTATE_0, GetCurrentInternalDisplayRotation());
804
805 delegate()->Lock(content1.get(), blink::WebScreenOrientationLockAny);
806 activation_client->ActivateWindow(focus_window1.get());
807 // Switching back to any will rotate to user rotation.
808 EXPECT_EQ(display::Display::ROTATE_90, GetCurrentInternalDisplayRotation());
809 }
810
667 } // namespace ash 811 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698