diff options
author | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-17 18:22:40 +0000 |
---|---|---|
committer | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-17 18:22:40 +0000 |
commit | 13305952c9f0dea2d4f8b59a7bfa14535d64e299 (patch) | |
tree | 772d133079b86ba409f7ffe06d88d8735dfd5719 /content/browser/power_save_blocker_android.cc | |
parent | 300c386b2aa297d9fe887f4c63f840d9b60db3ca (diff) | |
download | chromium_src-13305952c9f0dea2d4f8b59a7bfa14535d64e299.zip chromium_src-13305952c9f0dea2d4f8b59a7bfa14535d64e299.tar.gz chromium_src-13305952c9f0dea2d4f8b59a7bfa14535d64e299.tar.bz2 |
Revert 212022 "The previous implementation is not correct, it de..."
> The previous implementation is not correct, it depended on the Fullscreen video class, but the PowerSaveBlocker could be used for embedding video or the use case which isn't related to the video at all.
>
> This patch adds new API to PowerSaveBlocker.
>
> BUG=247892
>
> Review URL: https://chromiumcodereview.appspot.com/17175009
TBR=michaelbai@chromium.org
Review URL: https://codereview.chromium.org/19659002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@212092 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/power_save_blocker_android.cc')
-rw-r--r-- | content/browser/power_save_blocker_android.cc | 65 |
1 files changed, 27 insertions, 38 deletions
diff --git a/content/browser/power_save_blocker_android.cc b/content/browser/power_save_blocker_android.cc index 45dda18..2358049 100644 --- a/content/browser/power_save_blocker_android.cc +++ b/content/browser/power_save_blocker_android.cc @@ -2,27 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "content/browser/power_save_blocker_android.h" +#include "content/browser/power_save_blocker_impl.h" -#include "base/android/jni_android.h" #include "base/logging.h" -#include "content/browser/power_save_blocker_impl.h" +#include "content/browser/android/content_video_view.h" #include "content/public/browser/browser_thread.h" -#include "jni/PowerSaveBlocker_jni.h" -#include "ui/android/window_android.h" - -using base::android::AttachCurrentThread; -using base::android::ScopedJavaLocalRef; namespace content { class PowerSaveBlockerImpl::Delegate : public base::RefCountedThreadSafe<PowerSaveBlockerImpl::Delegate> { public: - explicit Delegate(gfx::NativeWindow native_window) { - j_window_android_ = JavaObjectWeakGlobalRef(AttachCurrentThread(), - static_cast<ui::WindowAndroid*>(native_window)->GetJavaObject().obj()); - } + explicit Delegate(PowerSaveBlockerType type) : type_(type) {} // Does the actual work to apply or remove the desired power save block. void ApplyBlock(); @@ -32,51 +23,49 @@ class PowerSaveBlockerImpl::Delegate friend class base::RefCountedThreadSafe<Delegate>; ~Delegate() {} - JavaObjectWeakGlobalRef j_window_android_; + // The counter of requests from clients for type + // kPowerSaveBlockPreventDisplaySleep. + static int blocker_count_; + const PowerSaveBlockerType type_; DISALLOW_COPY_AND_ASSIGN(Delegate); }; +int PowerSaveBlockerImpl::Delegate::blocker_count_ = 0; + void PowerSaveBlockerImpl::Delegate::ApplyBlock() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - JNIEnv* env = AttachCurrentThread(); - ScopedJavaLocalRef<jobject> j_object = j_window_android_.get(env); - if (j_object.obj()) - Java_PowerSaveBlocker_applyBlock(env, j_object.obj()); + if (type_ != kPowerSaveBlockPreventDisplaySleep) + return; + + if (blocker_count_ == 0) + ContentVideoView::KeepScreenOn(true); + ++blocker_count_; } void PowerSaveBlockerImpl::Delegate::RemoveBlock() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - JNIEnv* env = AttachCurrentThread(); - ScopedJavaLocalRef<jobject> j_object = j_window_android_.get(env); - if (j_object.obj()) - Java_PowerSaveBlocker_removeBlock(env, j_object.obj()); -} - -PowerSaveBlockerImpl::PowerSaveBlockerImpl(PowerSaveBlockerType type, - const std::string& reason) { - // Don't support kPowerSaveBlockPreventAppSuspension -} + if (type_ != kPowerSaveBlockPreventDisplaySleep) + return; -PowerSaveBlockerImpl::~PowerSaveBlockerImpl() { - if (delegate_) { - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, - base::Bind(&Delegate::RemoveBlock, delegate_)); - } + --blocker_count_; + if (blocker_count_ == 0) + ContentVideoView::KeepScreenOn(false); } -void PowerSaveBlockerImpl::InitDisplaySleepBlocker( - gfx::NativeWindow native_window) { - delegate_ = new Delegate(native_window); +PowerSaveBlockerImpl::PowerSaveBlockerImpl(PowerSaveBlockerType type, + const std::string& reason) + : delegate_(new Delegate(type)) { // This may be called on any thread. BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, base::Bind(&Delegate::ApplyBlock, delegate_)); } -bool RegisterPowerSaveBlocker(JNIEnv* env) { - return RegisterNativesImpl(env); +PowerSaveBlockerImpl::~PowerSaveBlockerImpl() { + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::Bind(&Delegate::RemoveBlock, delegate_)); } } // namespace content |