diff options
author | wjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-22 02:21:46 +0000 |
---|---|---|
committer | wjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-22 02:21:46 +0000 |
commit | 9029313d4c5f10c8b53bd38e1c1caea99bc3d9a9 (patch) | |
tree | 93d859482f63e746acbec075b6e3bdb875d4d691 /content/browser/power_save_blocker_android.cc | |
parent | df769fb3249b8713064d0bf1ff11d4e01e6d909e (diff) | |
download | chromium_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.cc | 53 |
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 |