| Index: content/shell/renderer/test_runner/mock_screen_orientation_client.cc
|
| diff --git a/content/shell/renderer/test_runner/mock_screen_orientation_client.cc b/content/shell/renderer/test_runner/mock_screen_orientation_client.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3eb83a624f60781068b1739f1f9fbd905ac49595
|
| --- /dev/null
|
| +++ b/content/shell/renderer/test_runner/mock_screen_orientation_client.cc
|
| @@ -0,0 +1,161 @@
|
| +// 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/shell/renderer/test_runner/mock_screen_orientation_client.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/logging.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "third_party/WebKit/public/web/WebFrame.h"
|
| +
|
| +namespace content {
|
| +
|
| +MockScreenOrientationClient::MockScreenOrientationClient()
|
| + : main_frame_(NULL),
|
| + current_lock_(blink::WebScreenOrientationLockDefault),
|
| + device_orientation_(blink::WebScreenOrientationPortraitPrimary),
|
| + current_orientation_(blink::WebScreenOrientationPortraitPrimary) {
|
| +}
|
| +
|
| +MockScreenOrientationClient::~MockScreenOrientationClient() {
|
| +}
|
| +
|
| +void MockScreenOrientationClient::ResetData() {
|
| + current_lock_ = blink::WebScreenOrientationLockDefault;
|
| + device_orientation_ = blink::WebScreenOrientationPortraitPrimary;
|
| + current_orientation_ = blink::WebScreenOrientationPortraitPrimary;
|
| +}
|
| +
|
| +void MockScreenOrientationClient::UpdateDeviceOrientation(
|
| + blink::WebFrame* main_frame,
|
| + blink::WebScreenOrientationType orientation) {
|
| + main_frame_ = main_frame;
|
| + if (device_orientation_ == orientation)
|
| + return;
|
| + device_orientation_ = orientation;
|
| + if (!IsOrientationAllowedByCurrentLock(orientation))
|
| + return;
|
| + UpdateScreenOrientation(orientation);
|
| +}
|
| +
|
| +void MockScreenOrientationClient::UpdateScreenOrientation(
|
| + blink::WebScreenOrientationType orientation) {
|
| + if (current_orientation_ == orientation)
|
| + return;
|
| + current_orientation_ = orientation;
|
| + if (main_frame_)
|
| + main_frame_->sendOrientationChangeEvent();
|
| +}
|
| +
|
| +blink::WebScreenOrientationType
|
| +MockScreenOrientationClient::CurrentOrientationType() const {
|
| + return current_orientation_;
|
| +}
|
| +
|
| +unsigned MockScreenOrientationClient::CurrentOrientationAngle() const {
|
| + return OrientationTypeToAngle(current_orientation_);
|
| +}
|
| +
|
| +unsigned MockScreenOrientationClient::OrientationTypeToAngle(
|
| + blink::WebScreenOrientationType type) {
|
| + unsigned angle;
|
| + // FIXME(ostap): This relationship between orientationType and
|
| + // orientationAngle is temporary. The test should be able to specify
|
| + // the angle in addition to the orientation type.
|
| + switch (type) {
|
| + case blink::WebScreenOrientationLandscapePrimary:
|
| + angle = 90;
|
| + break;
|
| + case blink::WebScreenOrientationLandscapeSecondary:
|
| + angle = 270;
|
| + break;
|
| + case blink::WebScreenOrientationPortraitSecondary:
|
| + angle = 180;
|
| + break;
|
| + default:
|
| + angle = 0;
|
| + }
|
| + return angle;
|
| +}
|
| +
|
| +bool MockScreenOrientationClient::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 MockScreenOrientationClient::lockOrientation(
|
| + blink::WebScreenOrientationLockType orientation,
|
| + blink::WebLockOrientationCallback* callback) {
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&MockScreenOrientationClient::UpdateLockSync,
|
| + base::Unretained(this),
|
| + orientation,
|
| + callback));
|
| +}
|
| +
|
| +void MockScreenOrientationClient::unlockOrientation() {
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&MockScreenOrientationClient::ResetLockSync,
|
| + base::Unretained(this)));
|
| +}
|
| +
|
| +void MockScreenOrientationClient::UpdateLockSync(
|
| + blink::WebScreenOrientationLockType lock,
|
| + blink::WebLockOrientationCallback* callback) {
|
| + DCHECK(lock != blink::WebScreenOrientationLockDefault);
|
| + current_lock_ = lock;
|
| + if (!IsOrientationAllowedByCurrentLock(current_orientation_))
|
| + UpdateScreenOrientation(SuitableOrientationForCurrentLock());
|
| + unsigned angle = OrientationTypeToAngle(current_orientation_);
|
| + callback->onSuccess(angle, current_orientation_);
|
| +}
|
| +
|
| +void MockScreenOrientationClient::ResetLockSync() {
|
| + bool will_screen_orientation_need_updating =
|
| + !IsOrientationAllowedByCurrentLock(device_orientation_);
|
| + current_lock_ = blink::WebScreenOrientationLockDefault;
|
| + if (will_screen_orientation_need_updating)
|
| + UpdateScreenOrientation(device_orientation_);
|
| +}
|
| +
|
| +blink::WebScreenOrientationType
|
| +MockScreenOrientationClient::SuitableOrientationForCurrentLock() {
|
| + switch (current_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;
|
| + }
|
| +}
|
| +
|
| +} // namespace content
|
|
|