Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(577)

Unified Diff: content/browser/power_save_blocker_android.cc

Issue 15035013: Keep screen on when there is an active WebRTC session on Android. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: code review: nits Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/power_save_blocker_android.cc
===================================================================
--- content/browser/power_save_blocker_android.cc (revision 201139)
+++ content/browser/power_save_blocker_android.cc (working copy)
@@ -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

Powered by Google App Engine
This is Rietveld 408576698