Index: chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc |
diff --git a/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc b/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc |
index 5ce665036057c6062f7d54cc8bc8ad568c52e7a3..662544a57510a7402d5b54248c912a23124e4389 100644 |
--- a/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc |
+++ b/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc |
@@ -13,6 +13,7 @@ |
#include "content/public/browser/browser_ppapi_host.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/render_process_host.h" |
+#include "device/power_save_blocker/power_save_blocker.h" |
#include "ipc/ipc_message_macros.h" |
#include "ppapi/c/pp_errors.h" |
#include "ppapi/c/private/ppb_flash.h" |
@@ -57,6 +58,8 @@ PepperFlashBrowserHost::PepperFlashBrowserHost(BrowserPpapiHost* host, |
PP_Resource resource) |
: ResourceHost(host->GetPpapiHost(), instance, resource), |
host_(host), |
+ delay_timer_(FROM_HERE, base::TimeDelta::FromSeconds(45), this, |
+ &PepperFlashBrowserHost::OnDelayTimerFired), |
weak_factory_(this) { |
int unused; |
host->GetRenderFrameIDsForInstance(instance, &render_process_id_, &unused); |
@@ -78,21 +81,24 @@ int32_t PepperFlashBrowserHost::OnResourceMessageReceived( |
return PP_ERROR_FAILED; |
} |
+void PepperFlashBrowserHost::OnDelayTimerFired() { |
+ power_save_blocker_.reset(); |
+} |
+ |
int32_t PepperFlashBrowserHost::OnUpdateActivity( |
ppapi::host::HostMessageContext* host_context) { |
-#if defined(OS_WIN) |
- // Reading then writing back the same value to the screensaver timeout system |
- // setting resets the countdown which prevents the screensaver from turning |
- // on "for a while". As long as the plugin pings us with this message faster |
- // than the screensaver timeout, it won't go on. |
- int value = 0; |
- if (SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0, &value, 0)) |
- SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, value, NULL, 0); |
-#elif defined(OS_MACOSX) |
- UpdateSystemActivity(OverallAct); |
-#else |
-// TODO(brettw) implement this for other platforms. |
-#endif |
+ if (!power_save_blocker_) { |
+ power_save_blocker_.reset(new device::PowerSaveBlocker( |
+ device::PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, |
+ device::PowerSaveBlocker::kReasonOther, "Requested By PepperFlash", |
+ BrowserThread::GetTaskRunnerForThread(BrowserThread::UI), |
+ BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE))); |
+ } |
+ // There is no specification for how long OnUpdateActivity should prevent the |
+ // screen from going to sleep. Empirically, twitch.tv calls this method every |
+ // 10 seconds. Be conservative and allow 45 seconds (set in |delay_timer_|'s |
+ // ctor) before deleting the block. |
+ delay_timer_.Reset(); |
return PP_OK; |
} |