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..c8ff5919e21c1ae7b530ef85248e6fa82892e76a 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" |
@@ -80,19 +81,20 @@ int32_t PepperFlashBrowserHost::OnResourceMessageReceived( |
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 |
+ device::PowerSaveBlocker* blocker = new device::PowerSaveBlocker( |
+ device::PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, |
+ device::PowerSaveBlocker::kReasonOther, "Requested By PepperFlash", |
+ BrowserThread::GetTaskRunnerForThread(BrowserThread::UI), |
+ BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE)); |
+ auto delete_blocker = [](device::PowerSaveBlocker* blocker) { |
+ delete blocker; |
+ }; |
+ // 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 before deleting the block. |
+ BrowserThread::PostDelayedTask(BrowserThread::IO, FROM_HERE, |
+ base::Bind(delete_blocker, blocker), |
+ base::TimeDelta::FromSeconds(45)); |
bbudge
2016/10/13 19:53:51
Since this is a plugin API, it seems bad to allow
ccameron
2016/10/14 21:39:43
Sure -- switched it to a DelayTimer impl.
|
return PP_OK; |
} |