Chromium Code Reviews| Index: content/browser/power_save_blocker_android.cc |
| diff --git a/content/browser/power_save_blocker_android.cc b/content/browser/power_save_blocker_android.cc |
| index 4e4c6a2bca80fed568d52f742dc3b11f88a52827..c85eb49c85604fa9956319403bfc30bbd70ba54c 100644 |
| --- a/content/browser/power_save_blocker_android.cc |
| +++ b/content/browser/power_save_blocker_android.cc |
| @@ -3,13 +3,11 @@ |
| // found in the LICENSE file. |
| #include "base/android/jni_android.h" |
| +#include "base/bind.h" |
| +#include "base/location.h" |
| #include "base/logging.h" |
| #include "base/macros.h" |
| -#include "content/browser/android/content_view_core_impl.h" |
| #include "content/browser/power_save_blocker_impl.h" |
| -#include "content/browser/web_contents/web_contents_impl.h" |
| -#include "content/public/browser/android/content_view_core.h" |
| -#include "content/public/browser/web_contents_observer.h" |
| #include "jni/PowerSaveBlocker_jni.h" |
| #include "ui/android/view_android.h" |
| @@ -18,21 +16,22 @@ namespace content { |
| using base::android::AttachCurrentThread; |
| class PowerSaveBlockerImpl::Delegate |
| - : public base::RefCountedThreadSafe<PowerSaveBlockerImpl::Delegate>, |
| - public WebContentsObserver { |
| + : public base::RefCountedThreadSafe<PowerSaveBlockerImpl::Delegate> { |
| public: |
| - Delegate(WebContents* web_contents, |
| + Delegate(ui::ViewAndroid* view_android, |
| scoped_refptr<base::SequencedTaskRunner> ui_task_runner); |
| // Does the actual work to apply or remove the desired power save block. |
| void ApplyBlock(); |
| void RemoveBlock(); |
| + void ClearView() { view_android_ = nullptr; } |
| + |
| private: |
| friend class base::RefCountedThreadSafe<Delegate>; |
| - ~Delegate() override; |
| + ~Delegate(); |
| - base::android::ScopedJavaLocalRef<jobject> GetContentViewCore(); |
| + ui::ViewAndroid* view_android_; |
| base::android::ScopedJavaGlobalRef<jobject> java_power_save_blocker_; |
| @@ -42,9 +41,9 @@ class PowerSaveBlockerImpl::Delegate |
| }; |
| PowerSaveBlockerImpl::Delegate::Delegate( |
| - WebContents* web_contents, |
| + ui::ViewAndroid* view_android, |
| scoped_refptr<base::SequencedTaskRunner> ui_task_runner) |
| - : WebContentsObserver(web_contents), ui_task_runner_(ui_task_runner) { |
| + : view_android_(view_android), ui_task_runner_(ui_task_runner) { |
| JNIEnv* env = AttachCurrentThread(); |
| java_power_save_blocker_.Reset(Java_PowerSaveBlocker_create(env)); |
| } |
| @@ -54,41 +53,23 @@ PowerSaveBlockerImpl::Delegate::~Delegate() { |
| void PowerSaveBlockerImpl::Delegate::ApplyBlock() { |
| DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); |
| - base::android::ScopedJavaLocalRef<jobject> java_content_view_core = |
| - GetContentViewCore(); |
| - if (java_content_view_core.is_null()) |
| - return; |
| ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_); |
| JNIEnv* env = AttachCurrentThread(); |
| - Java_PowerSaveBlocker_applyBlock(env, obj.obj(), |
| - java_content_view_core.obj()); |
| + if (view_android_ && !view_android_->GetViewAndroidDelegate().is_null()) { |
|
boliu
2016/06/01 21:37:07
the is_null check isn't actually "safe". in theory
scottmg
2016/06/01 21:44:42
Thanks, removed.
|
| + Java_PowerSaveBlocker_applyBlock( |
| + env, obj.obj(), view_android_->GetViewAndroidDelegate().obj()); |
| + } |
| } |
| void PowerSaveBlockerImpl::Delegate::RemoveBlock() { |
| DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); |
| - base::android::ScopedJavaLocalRef<jobject> java_content_view_core = |
| - GetContentViewCore(); |
| - if (java_content_view_core.is_null()) |
| - return; |
| - |
| ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_); |
| JNIEnv* env = AttachCurrentThread(); |
| - Java_PowerSaveBlocker_removeBlock(env, obj.obj(), |
| - java_content_view_core.obj()); |
| -} |
| - |
| -base::android::ScopedJavaLocalRef<jobject> |
| -PowerSaveBlockerImpl::Delegate::GetContentViewCore() { |
| - if (!web_contents()) |
| - return base::android::ScopedJavaLocalRef<jobject>(); |
| - |
| - ContentViewCoreImpl* content_view_core_impl = |
| - ContentViewCoreImpl::FromWebContents(web_contents()); |
| - if (!content_view_core_impl) |
| - return base::android::ScopedJavaLocalRef<jobject>(); |
| - |
| - return content_view_core_impl->GetJavaObject(); |
| + if (view_android_ && !view_android_->GetViewAndroidDelegate().is_null()) { |
| + Java_PowerSaveBlocker_removeBlock( |
| + env, obj.obj(), view_android_->GetViewAndroidDelegate().obj()); |
| + } |
| } |
| PowerSaveBlockerImpl::PowerSaveBlockerImpl( |
| @@ -109,15 +90,21 @@ PowerSaveBlockerImpl::~PowerSaveBlockerImpl() { |
| } |
| } |
| -void PowerSaveBlockerImpl::InitDisplaySleepBlocker(WebContents* web_contents) { |
| +void PowerSaveBlockerImpl::InitDisplaySleepBlocker( |
| + ui::ViewAndroid* view_android) { |
| DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); |
| - if (!web_contents) |
| + if (!view_android) |
| return; |
| - delegate_ = new Delegate(web_contents, ui_task_runner_); |
| + delegate_ = new Delegate(view_android, ui_task_runner_); |
| delegate_->ApplyBlock(); |
| } |
| +void PowerSaveBlockerImpl::ClearViewForSleepBlocker() { |
| + delegate_->RemoveBlock(); |
| + delegate_->ClearView(); |
| +} |
| + |
| bool RegisterPowerSaveBlocker(JNIEnv* env) { |
| return RegisterNativesImpl(env); |
| } |