Chromium Code Reviews| Index: content/renderer/renderer_webkitplatformsupport_impl.cc |
| diff --git a/content/renderer/renderer_webkitplatformsupport_impl.cc b/content/renderer/renderer_webkitplatformsupport_impl.cc |
| index b507a732a1eacb48b0ecdf3cac6f32fa3f736a22..89bf7d86fcd6b2df510784ac88d9952f9d79e8cc 100644 |
| --- a/content/renderer/renderer_webkitplatformsupport_impl.cc |
| +++ b/content/renderer/renderer_webkitplatformsupport_impl.cc |
| @@ -145,6 +145,12 @@ base::LazyInstance<blink::WebDeviceMotionData>::Leaky |
| g_test_device_motion_data = LAZY_INSTANCE_INITIALIZER; |
| base::LazyInstance<blink::WebDeviceOrientationData>::Leaky |
| g_test_device_orientation_data = LAZY_INSTANCE_INITIALIZER; |
| +static blink::WebScreenOrientationLockType g_test_current_screen_lock = |
|
jochen (gone - plz use gerrit)
2014/05/07 06:48:41
i'd rather not have so many variables here. Is it
|
| + blink::WebScreenOrientationLockDefault; |
| +static blink::WebScreenOrientationType g_test_device_screen_orientation = |
| + blink::WebScreenOrientationPortraitPrimary; |
| +static blink::WebScreenOrientationType g_test_current_screen_orientation = |
| + blink::WebScreenOrientationPortraitPrimary; |
| static blink::WebScreenOrientationListener* |
| g_test_screen_orientation_listener = NULL; |
| @@ -1138,10 +1144,79 @@ void RendererWebKitPlatformSupportImpl::setScreenOrientationListener( |
| screen_orientation_dispatcher_->setListener(listener); |
| } |
| +namespace { |
| + |
| +bool isScreenOrientationAllowedByTestingLock( |
|
jochen (gone - plz use gerrit)
2014/05/07 06:48:41
methods should start with capital letters
Inactive
2014/05/07 18:41:05
Done.
|
| + blink::WebScreenOrientationType orientation) { |
| + if (g_test_current_screen_lock == blink::WebScreenOrientationLockDefault || |
| + g_test_current_screen_lock == blink::WebScreenOrientationLockAny) |
| + return true; |
|
jochen (gone - plz use gerrit)
2014/05/07 06:48:41
nit { } since the if part is multiline
Inactive
2014/05/07 18:41:05
Done.
|
| + |
| + switch (orientation) { |
| + case blink::WebScreenOrientationPortraitPrimary: |
| + return g_test_current_screen_lock == |
| + blink::WebScreenOrientationLockPortraitPrimary || |
| + g_test_current_screen_lock == |
| + blink::WebScreenOrientationLockPortrait; |
| + case blink::WebScreenOrientationPortraitSecondary: |
| + return g_test_current_screen_lock == |
| + blink::WebScreenOrientationLockPortraitSecondary || |
| + g_test_current_screen_lock == |
| + blink::WebScreenOrientationLockPortrait; |
| + case blink::WebScreenOrientationLandscapePrimary: |
| + return g_test_current_screen_lock == |
| + blink::WebScreenOrientationLockLandscapePrimary || |
| + g_test_current_screen_lock == |
| + blink::WebScreenOrientationLockLandscape; |
| + case blink::WebScreenOrientationLandscapeSecondary: |
| + return g_test_current_screen_lock == |
| + blink::WebScreenOrientationLockLandscapeSecondary || |
| + g_test_current_screen_lock == |
| + blink::WebScreenOrientationLockLandscape; |
| + default: |
| + return false; |
| + } |
| +} |
| + |
| +blink::WebScreenOrientationType suitableScreenOrientationForTestingLock() { |
| + switch (g_test_current_screen_lock) { |
| + case blink::WebScreenOrientationLockPortraitSecondary: |
| + return blink::WebScreenOrientationPortraitSecondary; |
| + case blink::WebScreenOrientationLockLandscapePrimary: |
| + case blink::WebScreenOrientationLockLandscape: |
| + return blink::WebScreenOrientationLandscapePrimary; |
| + case blink::WebScreenOrientationLockLandscapeSecondary: |
| + return blink::WebScreenOrientationLandscapePrimary; |
| + default: |
| + return blink::WebScreenOrientationPortraitPrimary; |
| + } |
| +} |
| + |
| +void updateScreenOrientationForTesting( |
| + blink::WebScreenOrientationType orientation) { |
| + if (orientation == g_test_current_screen_orientation) |
| + return; |
| + g_test_current_screen_orientation = orientation; |
| + if (g_test_screen_orientation_listener) |
| + g_test_screen_orientation_listener->didChangeScreenOrientation(orientation); |
| +} |
| + |
| +} // namespace |
| + |
| void RendererWebKitPlatformSupportImpl::lockOrientation( |
| blink::WebScreenOrientationLockType orientation) { |
| if (RenderThreadImpl::current() && |
| RenderThreadImpl::current()->layout_test_mode()) { |
| + g_test_current_screen_lock = orientation; |
| + if (!isScreenOrientationAllowedByTestingLock( |
| + g_test_current_screen_orientation)) { |
| + g_test_current_screen_orientation = |
| + suitableScreenOrientationForTestingLock(); |
| + if (g_test_screen_orientation_listener) { |
| + g_test_screen_orientation_listener->didChangeScreenOrientation( |
| + g_test_current_screen_orientation); |
| + } |
| + } |
| return; |
| } |
| RenderThread::Get()->Send(new ScreenOrientationHostMsg_Lock(orientation)); |
| @@ -1150,6 +1225,12 @@ void RendererWebKitPlatformSupportImpl::lockOrientation( |
| void RendererWebKitPlatformSupportImpl::unlockOrientation() { |
| if (RenderThreadImpl::current() && |
| RenderThreadImpl::current()->layout_test_mode()) { |
| + bool should_update_current_screen_orientation = |
| + !isScreenOrientationAllowedByTestingLock( |
| + g_test_device_screen_orientation); |
| + g_test_current_screen_lock = blink::WebScreenOrientationLockDefault; |
| + if (should_update_current_screen_orientation) |
| + updateScreenOrientationForTesting(g_test_device_screen_orientation); |
| return; |
| } |
| RenderThread::Get()->Send(new ScreenOrientationHostMsg_Unlock); |
| @@ -1158,9 +1239,10 @@ void RendererWebKitPlatformSupportImpl::unlockOrientation() { |
| // static |
| void RendererWebKitPlatformSupportImpl::SetMockScreenOrientationForTesting( |
| blink::WebScreenOrientationType orientation) { |
| - if (!g_test_screen_orientation_listener) |
| + g_test_device_screen_orientation = orientation; |
| + if (!isScreenOrientationAllowedByTestingLock(orientation)) |
|
jochen (gone - plz use gerrit)
2014/05/07 06:48:41
what happens if a test fails before it unlocks?
Inactive
2014/05/07 18:41:05
Flakes :) I added a ResetMockScreenOrientationForT
|
| return; |
| - g_test_screen_orientation_listener->didChangeScreenOrientation(orientation); |
| + updateScreenOrientationForTesting(g_test_device_screen_orientation); |
| } |
| //------------------------------------------------------------------------------ |