Index: content/browser/wake_lock/lock.cc |
diff --git a/content/browser/wake_lock/lock.cc b/content/browser/wake_lock/lock.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..923a6f2f6643162fa6e10798939db0e34fb94551 |
--- /dev/null |
+++ b/content/browser/wake_lock/lock.cc |
@@ -0,0 +1,61 @@ |
+// Copyright (c) 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/browser/wake_lock/lock.h" |
+ |
+#include "content/browser/web_contents/web_contents_impl.h" |
+#include "content/browser/web_contents/web_contents_view_guest.h" |
+#include "content/public/browser/power_save_blocker.h" |
+#include "content/public/browser/render_view_host.h" |
+ |
+namespace content { |
+ |
+Lock::Lock(int render_process_id, int routed_id) |
+ : render_process_id_(render_process_id), |
+ routed_id_(routed_id), |
+ unlocked_force_(false) { |
+ LockResource(); |
+} |
+ |
+Lock::~Lock() { |
+ UnlockResource(); |
+} |
+ |
+void Lock::LockResource() { |
+ if (blocker_.get()) |
+ return; |
+ |
+ blocker_ = PowerSaveBlocker::Create( |
+ PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep, "WakeLock API"); |
+#if defined(OS_ANDROID) |
+ const RenderViewHost* rvh = RenderViewHost::FromID( |
+ render_process_id_, routed_id_); |
+ WebContents* web_contents = WebContents::FromRenderViewHost(rvh); |
+ if (WebContentsImpl* web_contents_impl = |
+ static_cast<WebContentsImpl*>(web_contents)) { |
+ PowerSaveBlockerImpl* blocker = |
+ static_cast<PowerSaveBlockerImpl*>(blocker_.get()); |
+ blocker->InitDisplaySleepBlocker( |
+ web_contents_impl->GetView()->GetNativeView()); |
+ } |
+#endif |
+} |
+ |
+void Lock::UnlockResource() { |
+ if (blocker_.get()) |
+ blocker_.reset(); |
+} |
+ |
+void Lock::ForceLockResource() { |
+ if (unlocked_force_ == true) |
+ LockResource(); |
+ unlocked_force_ = false; |
+} |
+ |
+void Lock::ForceUnlockResource() { |
+ if (unlocked_force_ == false) |
+ UnlockResource(); |
+ unlocked_force_ = true; |
+} |
+} |