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 3// found in the LICENSE file. 4 5#include "content/renderer/screen_orientation/mock_screen_orientation_controller.h" 6 7#include "base/bind.h" 8#include "base/logging.h" 9#include "base/message_loop/message_loop.h" 10#include "content/renderer/render_view_impl.h" 11 12namespace content { 13 14MockScreenOrientationController::MockScreenOrientationController() 15 : RenderViewObserver(NULL), 16 current_lock_(blink::WebScreenOrientationLockDefault), 17 device_orientation_(blink::WebScreenOrientationPortraitPrimary), 18 current_orientation_(blink::WebScreenOrientationPortraitPrimary) { 19 // Since MockScreenOrientationController is held by LazyInstance reference, 20 // add this ref for it. 21 AddRef(); 22} 23 24MockScreenOrientationController::~MockScreenOrientationController() { 25} 26 27void MockScreenOrientationController::ResetData() { 28 if (render_view_impl()) 29 render_view_impl()->RemoveObserver(this); 30 31 current_lock_ = blink::WebScreenOrientationLockDefault; 32 device_orientation_ = blink::WebScreenOrientationPortraitPrimary; 33 current_orientation_ = blink::WebScreenOrientationPortraitPrimary; 34} 35 36void MockScreenOrientationController::UpdateDeviceOrientation( 37 RenderView* render_view, 38 blink::WebScreenOrientationType orientation) { 39 if (this->render_view()) { 40 // Make sure that render_view_ did not change during test. 41 DCHECK_EQ(this->render_view(), render_view); 42 } else { 43 Observe(render_view); 44 } 45 46 if (device_orientation_ == orientation) 47 return; 48 device_orientation_ = orientation; 49 if (!IsOrientationAllowedByCurrentLock(orientation)) 50 return; 51 UpdateScreenOrientation(orientation); 52} 53 54RenderViewImpl* MockScreenOrientationController::render_view_impl() const { 55 return static_cast<RenderViewImpl*>(render_view()); 56} 57 58void MockScreenOrientationController::UpdateScreenOrientation( 59 blink::WebScreenOrientationType orientation) { 60 if (current_orientation_ == orientation) 61 return; 62 current_orientation_ = orientation; 63 if (render_view_impl()) 64 render_view_impl()->SetScreenOrientationForTesting(orientation); 65} 66 67bool MockScreenOrientationController::IsOrientationAllowedByCurrentLock( 68 blink::WebScreenOrientationType orientation) { 69 if (current_lock_ == blink::WebScreenOrientationLockDefault || 70 current_lock_ == blink::WebScreenOrientationLockAny) { 71 return true; 72 } 73 74 switch (orientation) { 75 case blink::WebScreenOrientationPortraitPrimary: 76 return current_lock_ == blink::WebScreenOrientationLockPortraitPrimary || 77 current_lock_ == blink::WebScreenOrientationLockPortrait; 78 case blink::WebScreenOrientationPortraitSecondary: 79 return current_lock_ == 80 blink::WebScreenOrientationLockPortraitSecondary || 81 current_lock_ == blink::WebScreenOrientationLockPortrait; 82 case blink::WebScreenOrientationLandscapePrimary: 83 return current_lock_ == blink::WebScreenOrientationLockLandscapePrimary || 84 current_lock_ == blink::WebScreenOrientationLockLandscape; 85 case blink::WebScreenOrientationLandscapeSecondary: 86 return current_lock_ == 87 blink::WebScreenOrientationLockLandscapeSecondary || 88 current_lock_ == blink::WebScreenOrientationLockLandscape; 89 default: 90 return false; 91 } 92} 93 94void MockScreenOrientationController::OnDestruct() { 95} 96 97} // namespace content 98