OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "content/browser/screen_orientation/screen_orientation_provider.h" | 5 #include "content/browser/screen_orientation/screen_orientation_provider.h" |
6 | 6 |
7 #include "base/optional.h" | 7 #include "base/optional.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "content/common/frame_messages.h" | 9 #include "content/common/frame_messages.h" |
10 #include "content/public/browser/screen_orientation_delegate.h" | 10 #include "content/public/browser/screen_orientation_delegate.h" |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 | 143 |
144 // Navigate to a site. | 144 // Navigate to a site. |
145 const GURL url("http://www.google.com"); | 145 const GURL url("http://www.google.com"); |
146 controller().LoadURL(url, Referrer(), ui::PAGE_TRANSITION_TYPED, | 146 controller().LoadURL(url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
147 std::string()); | 147 std::string()); |
148 | 148 |
149 base::Optional<ScreenOrientationLockResult> result_1; | 149 base::Optional<ScreenOrientationLockResult> result_1; |
150 CallLockAndGetResult(blink::WebScreenOrientationLockType:: | 150 CallLockAndGetResult(blink::WebScreenOrientationLockType:: |
151 WebScreenOrientationLockLandscapeSecondary, | 151 WebScreenOrientationLockLandscapeSecondary, |
152 &result_1); | 152 &result_1); |
153 // Lock request is pending. | 153 #if defined(OS_ANDROID) |
| 154 // On Android the screen orientation is expected to be changed asynchronously, |
| 155 // the lock request is pending. |
154 EXPECT_FALSE(result_1.has_value()); | 156 EXPECT_FALSE(result_1.has_value()); |
| 157 #else |
| 158 // On other platforms the screen orientation is expected to be changed |
| 159 // synchronously, but FakeScreenOrientationDelegate did not change screen |
| 160 // orientation actually, so the lock request will be fired immediately. |
| 161 EXPECT_EQ(ScreenOrientationLockResult:: |
| 162 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, |
| 163 result_1); |
| 164 #endif |
155 // Delegate did apply lock once. | 165 // Delegate did apply lock once. |
156 EXPECT_EQ(1, delegate.lock_count()); | 166 EXPECT_EQ(1, delegate.lock_count()); |
157 } | 167 } |
158 | 168 |
159 // Full screen is required by delegate. | 169 // Full screen is required by delegate. |
160 TEST_F(ScreenOrientationProviderTest, DelegateRequireFullScreenLockOnce) { | 170 TEST_F(ScreenOrientationProviderTest, DelegateRequireFullScreenLockOnce) { |
161 // ScreenOrientationDelegate requires full screen. | 171 // ScreenOrientationDelegate requires full screen. |
162 FakeScreenOrientationDelegate delegate(true, true); | 172 FakeScreenOrientationDelegate delegate(true, true); |
163 | 173 |
164 // Navigate to a site. | 174 // Navigate to a site. |
(...skipping 15 matching lines...) Expand all Loading... |
180 | 190 |
181 // Simulates entering full screen. | 191 // Simulates entering full screen. |
182 main_test_rfh()->OnMessageReceived( | 192 main_test_rfh()->OnMessageReceived( |
183 FrameHostMsg_ToggleFullscreen(main_test_rfh()->GetRoutingID(), true)); | 193 FrameHostMsg_ToggleFullscreen(main_test_rfh()->GetRoutingID(), true)); |
184 ASSERT_TRUE(contents()->IsFullscreenForCurrentTab()); | 194 ASSERT_TRUE(contents()->IsFullscreenForCurrentTab()); |
185 | 195 |
186 base::Optional<ScreenOrientationLockResult> result_2; | 196 base::Optional<ScreenOrientationLockResult> result_2; |
187 CallLockAndGetResult(blink::WebScreenOrientationLockType:: | 197 CallLockAndGetResult(blink::WebScreenOrientationLockType:: |
188 WebScreenOrientationLockLandscapeSecondary, | 198 WebScreenOrientationLockLandscapeSecondary, |
189 &result_2); | 199 &result_2); |
| 200 #if defined(OS_ANDROID) |
190 // Lock request is pending. | 201 // Lock request is pending. |
191 EXPECT_FALSE(result_2.has_value()); | 202 EXPECT_FALSE(result_2.has_value()); |
| 203 #else |
| 204 EXPECT_EQ(ScreenOrientationLockResult:: |
| 205 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, |
| 206 result_2); |
| 207 #endif |
192 // Delegate did apply lock once. | 208 // Delegate did apply lock once. |
193 EXPECT_EQ(1, delegate.lock_count()); | 209 EXPECT_EQ(1, delegate.lock_count()); |
194 } | 210 } |
195 | 211 |
196 // Lock once, then unlock once, the pending lock request will be cancelled. | 212 // Lock once, then unlock once, the pending lock request will be cancelled. |
197 TEST_F(ScreenOrientationProviderTest, DelegateLockThenUnlock) { | 213 TEST_F(ScreenOrientationProviderTest, DelegateLockThenUnlock) { |
198 FakeScreenOrientationDelegate delegate(true, false); | 214 FakeScreenOrientationDelegate delegate(true, false); |
199 | 215 |
200 // Navigate to a site. | 216 // Navigate to a site. |
201 const GURL url("http://www.google.com"); | 217 const GURL url("http://www.google.com"); |
202 controller().LoadURL(url, Referrer(), ui::PAGE_TRANSITION_TYPED, | 218 controller().LoadURL(url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
203 std::string()); | 219 std::string()); |
204 | 220 |
205 base::Optional<ScreenOrientationLockResult> result_1; | 221 base::Optional<ScreenOrientationLockResult> result_1; |
206 CallLockAndGetResult(blink::WebScreenOrientationLockType:: | 222 CallLockAndGetResult(blink::WebScreenOrientationLockType:: |
207 WebScreenOrientationLockLandscapeSecondary, | 223 WebScreenOrientationLockLandscapeSecondary, |
208 &result_1); | 224 &result_1); |
| 225 #if defined(OS_ANDROID) |
209 // The lock request will be pending. | 226 // The lock request will be pending. |
210 EXPECT_FALSE(result_1.has_value()); | 227 EXPECT_FALSE(result_1.has_value()); |
| 228 #else |
| 229 EXPECT_EQ(ScreenOrientationLockResult:: |
| 230 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, |
| 231 result_1); |
| 232 #endif |
211 // Delegate did apply lock once. | 233 // Delegate did apply lock once. |
212 EXPECT_EQ(1, delegate.lock_count()); | 234 EXPECT_EQ(1, delegate.lock_count()); |
213 EXPECT_EQ(0, delegate.unlock_count()); | 235 EXPECT_EQ(0, delegate.unlock_count()); |
214 | 236 |
215 CallUnlock(); | 237 CallUnlock(); |
216 // The pending lock request is cancelled. | 238 // The pending lock request is cancelled. |
217 EXPECT_EQ(ScreenOrientationLockResult:: | 239 EXPECT_EQ(ScreenOrientationLockResult:: |
218 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, | 240 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, |
219 result_1); | 241 result_1); |
220 // Delegate did apply unlock once. | 242 // Delegate did apply unlock once. |
221 EXPECT_EQ(1, delegate.unlock_count()); | 243 EXPECT_EQ(1, delegate.unlock_count()); |
222 } | 244 } |
223 | 245 |
224 // Lock twice, the first lock request will be cancelled by the second one. | 246 // Lock twice, the first lock request will be cancelled by the second one. |
225 TEST_F(ScreenOrientationProviderTest, DelegateLockThenLock) { | 247 TEST_F(ScreenOrientationProviderTest, DelegateLockThenLock) { |
226 FakeScreenOrientationDelegate delegate(true, false); | 248 FakeScreenOrientationDelegate delegate(true, false); |
227 | 249 |
228 // Navigate to a site. | 250 // Navigate to a site. |
229 const GURL url("http://www.google.com"); | 251 const GURL url("http://www.google.com"); |
230 controller().LoadURL(url, Referrer(), ui::PAGE_TRANSITION_TYPED, | 252 controller().LoadURL(url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
231 std::string()); | 253 std::string()); |
232 | 254 |
233 base::Optional<ScreenOrientationLockResult> result_1; | 255 base::Optional<ScreenOrientationLockResult> result_1; |
234 CallLockAndGetResult(blink::WebScreenOrientationLockType:: | 256 CallLockAndGetResult(blink::WebScreenOrientationLockType:: |
235 WebScreenOrientationLockLandscapeSecondary, | 257 WebScreenOrientationLockLandscapeSecondary, |
236 &result_1); | 258 &result_1); |
| 259 #if defined(OS_ANDROID) |
237 // The lock request will be pending. | 260 // The lock request will be pending. |
238 EXPECT_FALSE(result_1.has_value()); | 261 EXPECT_FALSE(result_1.has_value()); |
| 262 #else |
| 263 EXPECT_EQ(ScreenOrientationLockResult:: |
| 264 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, |
| 265 result_1); |
| 266 #endif |
239 // Delegate did apply lock once. | 267 // Delegate did apply lock once. |
240 EXPECT_EQ(1, delegate.lock_count()); | 268 EXPECT_EQ(1, delegate.lock_count()); |
241 EXPECT_EQ(0, delegate.unlock_count()); | 269 EXPECT_EQ(0, delegate.unlock_count()); |
242 | 270 |
243 base::Optional<ScreenOrientationLockResult> result_2; | 271 base::Optional<ScreenOrientationLockResult> result_2; |
244 CallLockAndGetResult(blink::WebScreenOrientationLockType:: | 272 CallLockAndGetResult(blink::WebScreenOrientationLockType:: |
245 WebScreenOrientationLockLandscapeSecondary, | 273 WebScreenOrientationLockLandscapeSecondary, |
246 &result_2); | 274 &result_2); |
247 // The pending lock request is cancelled. | 275 // The pending lock request is cancelled. |
248 EXPECT_EQ(ScreenOrientationLockResult:: | 276 EXPECT_EQ(ScreenOrientationLockResult:: |
249 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, | 277 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, |
250 result_1); | 278 result_1); |
| 279 #if defined(OS_ANDROID) |
251 // The second one became pending. | 280 // The second one became pending. |
252 EXPECT_FALSE(result_2.has_value()); | 281 EXPECT_FALSE(result_2.has_value()); |
| 282 #else |
| 283 EXPECT_EQ(ScreenOrientationLockResult:: |
| 284 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, |
| 285 result_2); |
| 286 #endif |
253 // Delegate did apply lock once more. | 287 // Delegate did apply lock once more. |
254 EXPECT_EQ(2, delegate.lock_count()); | 288 EXPECT_EQ(2, delegate.lock_count()); |
255 EXPECT_EQ(0, delegate.unlock_count()); | 289 EXPECT_EQ(0, delegate.unlock_count()); |
256 } | 290 } |
257 | 291 |
258 // Unlock won't be applied if no lock has been applied previously. | 292 // Unlock won't be applied if no lock has been applied previously. |
259 TEST_F(ScreenOrientationProviderTest, NoUnlockWithoutLock) { | 293 TEST_F(ScreenOrientationProviderTest, NoUnlockWithoutLock) { |
260 FakeScreenOrientationDelegate delegate(true, false); | 294 FakeScreenOrientationDelegate delegate(true, false); |
261 | 295 |
262 // Navigate to a site. | 296 // Navigate to a site. |
(...skipping 20 matching lines...) Expand all Loading... |
283 | 317 |
284 // Simulates entering full screen. | 318 // Simulates entering full screen. |
285 main_test_rfh()->OnMessageReceived( | 319 main_test_rfh()->OnMessageReceived( |
286 FrameHostMsg_ToggleFullscreen(main_test_rfh()->GetRoutingID(), true)); | 320 FrameHostMsg_ToggleFullscreen(main_test_rfh()->GetRoutingID(), true)); |
287 ASSERT_TRUE(contents()->IsFullscreenForCurrentTab()); | 321 ASSERT_TRUE(contents()->IsFullscreenForCurrentTab()); |
288 | 322 |
289 base::Optional<ScreenOrientationLockResult> result; | 323 base::Optional<ScreenOrientationLockResult> result; |
290 CallLockAndGetResult(blink::WebScreenOrientationLockType:: | 324 CallLockAndGetResult(blink::WebScreenOrientationLockType:: |
291 WebScreenOrientationLockLandscapeSecondary, | 325 WebScreenOrientationLockLandscapeSecondary, |
292 &result); | 326 &result); |
| 327 #if defined(OS_ANDROID) |
293 // The lock request will be pending. | 328 // The lock request will be pending. |
294 EXPECT_FALSE(result.has_value()); | 329 EXPECT_FALSE(result.has_value()); |
| 330 #else |
| 331 EXPECT_EQ(ScreenOrientationLockResult:: |
| 332 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, |
| 333 result); |
| 334 #endif |
295 // Delegate did apply lock once. | 335 // Delegate did apply lock once. |
296 EXPECT_EQ(1, delegate.lock_count()); | 336 EXPECT_EQ(1, delegate.lock_count()); |
297 EXPECT_EQ(0, delegate.unlock_count()); | 337 EXPECT_EQ(0, delegate.unlock_count()); |
298 | 338 |
299 // Simulates exiting full screen. | 339 // Simulates exiting full screen. |
300 main_test_rfh()->OnMessageReceived( | 340 main_test_rfh()->OnMessageReceived( |
301 FrameHostMsg_ToggleFullscreen(main_test_rfh()->GetRoutingID(), false)); | 341 FrameHostMsg_ToggleFullscreen(main_test_rfh()->GetRoutingID(), false)); |
302 ASSERT_FALSE(contents()->IsFullscreenForCurrentTab()); | 342 ASSERT_FALSE(contents()->IsFullscreenForCurrentTab()); |
303 // The pending lock request is cancelled. | 343 // The pending lock request is cancelled. |
304 EXPECT_EQ(ScreenOrientationLockResult:: | 344 EXPECT_EQ(ScreenOrientationLockResult:: |
(...skipping 11 matching lines...) Expand all Loading... |
316 | 356 |
317 // Navigate to a site. | 357 // Navigate to a site. |
318 const GURL url("http://www.google.com"); | 358 const GURL url("http://www.google.com"); |
319 controller().LoadURL(url, Referrer(), ui::PAGE_TRANSITION_TYPED, | 359 controller().LoadURL(url, Referrer(), ui::PAGE_TRANSITION_TYPED, |
320 std::string()); | 360 std::string()); |
321 | 361 |
322 base::Optional<ScreenOrientationLockResult> result; | 362 base::Optional<ScreenOrientationLockResult> result; |
323 CallLockAndGetResult(blink::WebScreenOrientationLockType:: | 363 CallLockAndGetResult(blink::WebScreenOrientationLockType:: |
324 WebScreenOrientationLockLandscapeSecondary, | 364 WebScreenOrientationLockLandscapeSecondary, |
325 &result); | 365 &result); |
| 366 #if defined(OS_ANDROID) |
326 // The lock request will be pending. | 367 // The lock request will be pending. |
327 EXPECT_FALSE(result.has_value()); | 368 EXPECT_FALSE(result.has_value()); |
| 369 #else |
| 370 EXPECT_EQ(ScreenOrientationLockResult:: |
| 371 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, |
| 372 result); |
| 373 #endif |
328 // Delegate did apply lock once. | 374 // Delegate did apply lock once. |
329 EXPECT_EQ(1, delegate.lock_count()); | 375 EXPECT_EQ(1, delegate.lock_count()); |
330 EXPECT_EQ(0, delegate.unlock_count()); | 376 EXPECT_EQ(0, delegate.unlock_count()); |
331 | 377 |
332 // Navigate to another site. | 378 // Navigate to another site. |
333 const GURL another_url("http://www.google.com/abc.html"); | 379 const GURL another_url("http://www.google.com/abc.html"); |
334 contents()->NavigateAndCommit(another_url); | 380 contents()->NavigateAndCommit(another_url); |
335 // The pending lock request is cancelled. | 381 // The pending lock request is cancelled. |
336 EXPECT_EQ(ScreenOrientationLockResult:: | 382 EXPECT_EQ(ScreenOrientationLockResult:: |
337 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, | 383 SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED, |
338 result); | 384 result); |
339 // Delegate did apply unlock once. | 385 // Delegate did apply unlock once. |
340 EXPECT_EQ(1, delegate.unlock_count()); | 386 EXPECT_EQ(1, delegate.unlock_count()); |
341 } | 387 } |
342 | 388 |
343 } // namespace content | 389 } // namespace content |
OLD | NEW |