Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1789)

Unified Diff: content/browser/screen_orientation/screen_orientation_provider_android.cc

Issue 549603003: Create Mojo service for locking/unlocking screen orientation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/screen_orientation/screen_orientation_provider_android.cc
diff --git a/content/browser/screen_orientation/screen_orientation_provider_android.cc b/content/browser/screen_orientation/screen_orientation_provider_android.cc
index 1b085cb6730973fc861532674fd23211beaa3bcd..9a26c535a14846743c733eceac685b5440deec61 100644
--- a/content/browser/screen_orientation/screen_orientation_provider_android.cc
+++ b/content/browser/screen_orientation/screen_orientation_provider_android.cc
@@ -6,32 +6,26 @@
#include "content/browser/android/content_view_core_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/common/screen_orientation_utils.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host.h"
-#include "content/public/browser/screen_orientation_dispatcher_host.h"
#include "jni/ScreenOrientationProvider_jni.h"
#include "third_party/WebKit/public/platform/WebLockOrientationError.h"
#include "third_party/WebKit/public/platform/WebScreenInfo.h"
namespace content {
-ScreenOrientationProviderAndroid::LockInformation::LockInformation(
- int request_id, blink::WebScreenOrientationLockType lock)
- : request_id(request_id), lock(lock) {}
-
ScreenOrientationProviderAndroid::ScreenOrientationProviderAndroid(
- ScreenOrientationDispatcherHost* dispatcher,
+ const ScreenOrientationLockCallback& on_result_callback,
WebContents* web_contents)
: ScreenOrientationProvider(),
WebContentsObserver(web_contents),
- dispatcher_(dispatcher),
+ on_result_callback_(on_result_callback),
lock_applied_(false),
- pending_lock_(NULL) {
+ pending_lock_orientation_(blink::WebScreenOrientationLockDefault) {
}
ScreenOrientationProviderAndroid::~ScreenOrientationProviderAndroid() {
- if (pending_lock_)
- delete pending_lock_;
}
WebContentsImpl* ScreenOrientationProviderAndroid::web_contents_impl() {
@@ -44,8 +38,9 @@ bool ScreenOrientationProviderAndroid::Register(JNIEnv* env) {
}
void ScreenOrientationProviderAndroid::LockOrientation(
- int request_id,
- blink::WebScreenOrientationLockType lock_orientation) {
+ ScreenOrientationLockType lock_type) {
+ blink::WebScreenOrientationLockType lock_orientation =
+ ScreenOrientationLockTypeToWebScreenOrientationLockType(lock_type);
ContentViewCoreImpl* cvc =
ContentViewCoreImpl::FromWebContents(web_contents());
bool fullscreen_required = cvc ? cvc->IsFullscreenRequiredForOrientationLock()
@@ -53,9 +48,8 @@ void ScreenOrientationProviderAndroid::LockOrientation(
if (fullscreen_required &&
!web_contents_impl()->IsFullscreenForCurrentTab()) {
- dispatcher_->NotifyLockError(
- request_id,
- blink::WebLockOrientationErrorFullScreenRequired);
+ on_result_callback_.Run(
+ SCREEN_ORIENTATION_LOCK_RESULT_ERROR_FULLSCREEN_REQUIRED);
return;
}
@@ -63,8 +57,7 @@ void ScreenOrientationProviderAndroid::LockOrientation(
lock_orientation = GetNaturalLockType();
if (lock_orientation == blink::WebScreenOrientationLockDefault) {
// We are in a broken state, let's pretend we got canceled.
- dispatcher_->NotifyLockError(request_id,
- blink::WebLockOrientationErrorCanceled);
+ on_result_callback_.Run(SCREEN_ORIENTATION_LOCK_RESULT_ERROR_CANCELED);
return;
}
}
@@ -73,20 +66,14 @@ void ScreenOrientationProviderAndroid::LockOrientation(
Java_ScreenOrientationProvider_lockOrientation(
base::android::AttachCurrentThread(), lock_orientation);
- // If two calls happen close to each other, Android will ignore the first.
- if (pending_lock_) {
- delete pending_lock_;
- pending_lock_ = NULL;
- }
-
// If the orientation we are locking to matches the current orientation, we
// should succeed immediately.
if (LockMatchesCurrentOrientation(lock_orientation)) {
- dispatcher_->NotifyLockSuccess(request_id);
+ on_result_callback_.Run(SCREEN_ORIENTATION_LOCK_RESULT_SUCCESS);
return;
}
- pending_lock_ = new LockInformation(request_id, lock_orientation);
+ pending_lock_orientation_ = lock_orientation;
}
void ScreenOrientationProviderAndroid::UnlockOrientation() {
@@ -99,13 +86,12 @@ void ScreenOrientationProviderAndroid::UnlockOrientation() {
}
void ScreenOrientationProviderAndroid::OnOrientationChange() {
- if (!pending_lock_)
+ if (pending_lock_orientation_ == blink::WebScreenOrientationLockDefault)
return;
- if (LockMatchesCurrentOrientation(pending_lock_->lock)) {
- dispatcher_->NotifyLockSuccess(pending_lock_->request_id);
- delete pending_lock_;
- pending_lock_ = NULL;
+ if (LockMatchesCurrentOrientation(pending_lock_orientation_)) {
+ on_result_callback_.Run(SCREEN_ORIENTATION_LOCK_RESULT_SUCCESS);
+ pending_lock_orientation_ = blink::WebScreenOrientationLockDefault;
}
}
@@ -216,9 +202,9 @@ void ScreenOrientationProviderAndroid::StopAccurateListening() {
// static
ScreenOrientationProvider* ScreenOrientationProvider::Create(
- ScreenOrientationDispatcherHost* dispatcher,
+ const ScreenOrientationLockCallback& on_result_callback,
WebContents* web_contents) {
- return new ScreenOrientationProviderAndroid(dispatcher, web_contents);
+ return new ScreenOrientationProviderAndroid(on_result_callback, web_contents);
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698