summaryrefslogtreecommitdiffstats
path: root/content/browser/power_save_blocker_android.cc
diff options
context:
space:
mode:
authorgavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-17 18:22:40 +0000
committergavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-17 18:22:40 +0000
commit13305952c9f0dea2d4f8b59a7bfa14535d64e299 (patch)
tree772d133079b86ba409f7ffe06d88d8735dfd5719 /content/browser/power_save_blocker_android.cc
parent300c386b2aa297d9fe887f4c63f840d9b60db3ca (diff)
downloadchromium_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.cc65
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