blob: 7f9dd895cb6a8b6c6eecda1f3b8e8eb3ea4b208a [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/screen_orientation/mock_screen_orientation_controller.h"
#include "base/bind.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
#include "content/renderer/render_view_impl.h"
namespace content {
MockScreenOrientationController::MockScreenOrientationController()
: RenderViewObserver(NULL),
current_lock_(blink::WebScreenOrientationLockDefault),
device_orientation_(blink::WebScreenOrientationPortraitPrimary),
current_orientation_(blink::WebScreenOrientationPortraitPrimary) {
// Since MockScreenOrientationController is held by LazyInstance reference,
// add this ref for it.
AddRef();
}
MockScreenOrientationController::~MockScreenOrientationController() {
}
void MockScreenOrientationController::ResetData() {
if (render_view_impl())
render_view_impl()->RemoveObserver(this);
current_lock_ = blink::WebScreenOrientationLockDefault;
device_orientation_ = blink::WebScreenOrientationPortraitPrimary;
current_orientation_ = blink::WebScreenOrientationPortraitPrimary;
}
void MockScreenOrientationController::UpdateDeviceOrientation(
RenderView* render_view,
blink::WebScreenOrientationType orientation) {
if (this->render_view()) {
// Make sure that render_view_ did not change during test.
DCHECK_EQ(this->render_view(), render_view);
} else {
Observe(render_view);
}
if (device_orientation_ == orientation)
return;
device_orientation_ = orientation;
if (!IsOrientationAllowedByCurrentLock(orientation))
return;
UpdateScreenOrientation(orientation);
}
RenderViewImpl* MockScreenOrientationController::render_view_impl() const {
return static_cast<RenderViewImpl*>(render_view());
}
void MockScreenOrientationController::UpdateScreenOrientation(
blink::WebScreenOrientationType orientation) {
if (current_orientation_ == orientation)
return;
current_orientation_ = orientation;
if (render_view_impl())
render_view_impl()->SetScreenOrientationForTesting(orientation);
}
bool MockScreenOrientationController::IsOrientationAllowedByCurrentLock(
blink::WebScreenOrientationType orientation) {
if (current_lock_ == blink::WebScreenOrientationLockDefault ||
current_lock_ == blink::WebScreenOrientationLockAny) {
return true;
}
switch (orientation) {
case blink::WebScreenOrientationPortraitPrimary:
return current_lock_ == blink::WebScreenOrientationLockPortraitPrimary ||
current_lock_ == blink::WebScreenOrientationLockPortrait;
case blink::WebScreenOrientationPortraitSecondary:
return current_lock_ ==
blink::WebScreenOrientationLockPortraitSecondary ||
current_lock_ == blink::WebScreenOrientationLockPortrait;
case blink::WebScreenOrientationLandscapePrimary:
return current_lock_ == blink::WebScreenOrientationLockLandscapePrimary ||
current_lock_ == blink::WebScreenOrientationLockLandscape;
case blink::WebScreenOrientationLandscapeSecondary:
return current_lock_ ==
blink::WebScreenOrientationLockLandscapeSecondary ||
current_lock_ == blink::WebScreenOrientationLockLandscape;
default:
return false;
}
}
void MockScreenOrientationController::OnDestruct() {
}
} // namespace content