| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/screen_orientation/screen_orientation_provider_android
.h" | 5 #include "content/browser/screen_orientation/screen_orientation_provider_android
.h" |
| 6 | 6 |
| 7 #include "content/browser/android/content_view_core_impl.h" | 7 #include "content/browser/android/content_view_core_impl.h" |
| 8 #include "content/browser/screen_orientation/screen_orientation_dispatcher_host.
h" | 8 #include "content/browser/screen_orientation/screen_orientation_dispatcher_host.
h" |
| 9 #include "content/browser/web_contents/web_contents_impl.h" | 9 #include "content/browser/web_contents/web_contents_impl.h" |
| 10 #include "content/public/browser/render_view_host.h" | 10 #include "content/public/browser/render_view_host.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 if (lock_orientation == blink::WebScreenOrientationLockNatural) { | 62 if (lock_orientation == blink::WebScreenOrientationLockNatural) { |
| 63 lock_orientation = GetNaturalLockType(); | 63 lock_orientation = GetNaturalLockType(); |
| 64 if (lock_orientation == blink::WebScreenOrientationLockDefault) { | 64 if (lock_orientation == blink::WebScreenOrientationLockDefault) { |
| 65 // We are in a broken state, let's pretend we got canceled. | 65 // We are in a broken state, let's pretend we got canceled. |
| 66 dispatcher_->NotifyLockError(request_id, | 66 dispatcher_->NotifyLockError(request_id, |
| 67 blink::WebLockOrientationErrorCanceled); | 67 blink::WebLockOrientationErrorCanceled); |
| 68 return; | 68 return; |
| 69 } | 69 } |
| 70 } | 70 } |
| 71 | 71 |
| 72 if (j_screen_orientation_provider_.is_null()) { | |
| 73 j_screen_orientation_provider_.Reset(Java_ScreenOrientationProvider_create( | |
| 74 base::android::AttachCurrentThread())); | |
| 75 } | |
| 76 | |
| 77 lock_applied_ = true; | 72 lock_applied_ = true; |
| 78 Java_ScreenOrientationProvider_lockOrientation( | 73 Java_ScreenOrientationProvider_lockOrientation( |
| 79 base::android::AttachCurrentThread(), | 74 base::android::AttachCurrentThread(), lock_orientation); |
| 80 j_screen_orientation_provider_.obj(), lock_orientation); | |
| 81 | 75 |
| 82 // If two calls happen close to each other, Android will ignore the first. | 76 // If two calls happen close to each other, Android will ignore the first. |
| 83 if (pending_lock_) { | 77 if (pending_lock_) { |
| 84 delete pending_lock_; | 78 delete pending_lock_; |
| 85 pending_lock_ = NULL; | 79 pending_lock_ = NULL; |
| 86 } | 80 } |
| 87 | 81 |
| 88 // If the orientation we are locking to matches the current orientation, we | 82 // If the orientation we are locking to matches the current orientation, we |
| 89 // should succeed immediately. | 83 // should succeed immediately. |
| 90 if (LockMatchesCurrentOrientation(lock_orientation)) { | 84 if (LockMatchesCurrentOrientation(lock_orientation)) { |
| 91 dispatcher_->NotifyLockSuccess(request_id); | 85 dispatcher_->NotifyLockSuccess(request_id); |
| 92 return; | 86 return; |
| 93 } | 87 } |
| 94 | 88 |
| 95 pending_lock_ = new LockInformation(request_id, lock_orientation); | 89 pending_lock_ = new LockInformation(request_id, lock_orientation); |
| 96 } | 90 } |
| 97 | 91 |
| 98 void ScreenOrientationProviderAndroid::UnlockOrientation() { | 92 void ScreenOrientationProviderAndroid::UnlockOrientation() { |
| 99 if (!lock_applied_) | 93 if (!lock_applied_) |
| 100 return; | 94 return; |
| 101 | 95 |
| 102 // j_screen_orientation_provider_ was set when locking so it can't be null. | |
| 103 DCHECK(!j_screen_orientation_provider_.is_null()); | |
| 104 | |
| 105 Java_ScreenOrientationProvider_unlockOrientation( | 96 Java_ScreenOrientationProvider_unlockOrientation( |
| 106 base::android::AttachCurrentThread(), | 97 base::android::AttachCurrentThread()); |
| 107 j_screen_orientation_provider_.obj()); | |
| 108 lock_applied_ = false; | 98 lock_applied_ = false; |
| 109 } | 99 } |
| 110 | 100 |
| 111 void ScreenOrientationProviderAndroid::OnOrientationChange() { | 101 void ScreenOrientationProviderAndroid::OnOrientationChange() { |
| 112 if (!pending_lock_) | 102 if (!pending_lock_) |
| 113 return; | 103 return; |
| 114 | 104 |
| 115 if (LockMatchesCurrentOrientation(pending_lock_->lock)) { | 105 if (LockMatchesCurrentOrientation(pending_lock_->lock)) { |
| 116 dispatcher_->NotifyLockSuccess(pending_lock_->request_id); | 106 dispatcher_->NotifyLockSuccess(pending_lock_->request_id); |
| 117 delete pending_lock_; | 107 delete pending_lock_; |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 } | 203 } |
| 214 | 204 |
| 215 // static | 205 // static |
| 216 ScreenOrientationProvider* ScreenOrientationProvider::Create( | 206 ScreenOrientationProvider* ScreenOrientationProvider::Create( |
| 217 ScreenOrientationDispatcherHost* dispatcher, | 207 ScreenOrientationDispatcherHost* dispatcher, |
| 218 WebContents* web_contents) { | 208 WebContents* web_contents) { |
| 219 return new ScreenOrientationProviderAndroid(dispatcher, web_contents); | 209 return new ScreenOrientationProviderAndroid(dispatcher, web_contents); |
| 220 } | 210 } |
| 221 | 211 |
| 222 } // namespace content | 212 } // namespace content |
| OLD | NEW |