summaryrefslogtreecommitdiffstats
path: root/content/browser/power_save_blocker_android.cc
diff options
context:
space:
mode:
authorwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-22 02:21:46 +0000
committerwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-22 02:21:46 +0000
commit9029313d4c5f10c8b53bd38e1c1caea99bc3d9a9 (patch)
tree93d859482f63e746acbec075b6e3bdb875d4d691 /content/browser/power_save_blocker_android.cc
parentdf769fb3249b8713064d0bf1ff11d4e01e6d909e (diff)
downloadchromium_src-9029313d4c5f10c8b53bd38e1c1caea99bc3d9a9.zip
chromium_src-9029313d4c5f10c8b53bd38e1c1caea99bc3d9a9.tar.gz
chromium_src-9029313d4c5f10c8b53bd38e1c1caea99bc3d9a9.tar.bz2
Keep screen on when there is an active WebRTC session on Android.
When WebRTC session has video channel, the screen is kept on. R=bulach@chromium.org, joth@chromium.org, qinmin@chromium.org, sky@chromium.org Review URL: https://codereview.chromium.org/15035013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@201424 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/power_save_blocker_android.cc')
-rw-r--r--content/browser/power_save_blocker_android.cc53
1 files changed, 48 insertions, 5 deletions
diff --git a/content/browser/power_save_blocker_android.cc b/content/browser/power_save_blocker_android.cc
index c349fe5..2358049 100644
--- a/content/browser/power_save_blocker_android.cc
+++ b/content/browser/power_save_blocker_android.cc
@@ -5,24 +5,67 @@
#include "content/browser/power_save_blocker_impl.h"
#include "base/logging.h"
+#include "content/browser/android/content_video_view.h"
+#include "content/public/browser/browser_thread.h"
namespace content {
class PowerSaveBlockerImpl::Delegate
- : public base::RefCounted<PowerSaveBlockerImpl::Delegate> {
+ : public base::RefCountedThreadSafe<PowerSaveBlockerImpl::Delegate> {
+ public:
+ explicit Delegate(PowerSaveBlockerType type) : type_(type) {}
+
+ // Does the actual work to apply or remove the desired power save block.
+ void ApplyBlock();
+ void RemoveBlock();
+
private:
- friend class base::RefCounted<Delegate>;
+ friend class base::RefCountedThreadSafe<Delegate>;
~Delegate() {}
+
+ // 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));
+ if (type_ != kPowerSaveBlockPreventDisplaySleep)
+ return;
+
+ if (blocker_count_ == 0)
+ ContentVideoView::KeepScreenOn(true);
+ ++blocker_count_;
+}
+
+void PowerSaveBlockerImpl::Delegate::RemoveBlock() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (type_ != kPowerSaveBlockPreventDisplaySleep)
+ return;
+
+ --blocker_count_;
+ if (blocker_count_ == 0)
+ ContentVideoView::KeepScreenOn(false);
+}
+
PowerSaveBlockerImpl::PowerSaveBlockerImpl(PowerSaveBlockerType type,
- const std::string& reason) {
- // TODO(wangxianzhu): Implement it.
+ const std::string& reason)
+ : delegate_(new Delegate(type)) {
// This may be called on any thread.
- NOTIMPLEMENTED();
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&Delegate::ApplyBlock, delegate_));
}
PowerSaveBlockerImpl::~PowerSaveBlockerImpl() {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&Delegate::RemoveBlock, delegate_));
}
} // namespace content