Index: content/renderer/pepper/plugin_module.cc |
diff --git a/content/renderer/pepper/plugin_module.cc b/content/renderer/pepper/plugin_module.cc |
index bb7b5e8cef9adfc37a42ea5b59b1b43d5effc2b8..2752840e2f418df0f49903a7026ffbe9913f994c 100644 |
--- a/content/renderer/pepper/plugin_module.cc |
+++ b/content/renderer/pepper/plugin_module.cc |
@@ -187,50 +187,63 @@ class PowerSaverTestPluginDelegate : public PluginInstanceThrottler::Observer { |
explicit PowerSaverTestPluginDelegate(PluginInstanceThrottlerImpl* throttler) |
: throttler_(throttler) { |
throttler_->AddObserver(this); |
- PostPowerSaverStatusToJavaScript(throttler_, "initial"); |
+ PostPowerSaverStatusToJavaScript("initial"); |
} |
virtual ~PowerSaverTestPluginDelegate() { throttler_->RemoveObserver(this); } |
static void PostPowerSaverStatusToJavaScript( |
- PluginInstanceThrottlerImpl* throttler, |
+ PepperPluginInstanceImpl* instance, |
const std::string& source) { |
- if (!throttler->GetWebPlugin() || !throttler->GetWebPlugin()->instance()) |
- return; |
+ DCHECK(instance); |
+ |
+ bool is_hidden_for_placeholder = false; |
+ bool is_peripheral = false; |
+ bool is_throttled = false; |
- PepperPluginInstanceImpl* instance = throttler->GetWebPlugin()->instance(); |
+ if (instance->throttler()) { |
+ PluginInstanceThrottlerImpl* throttler = instance->throttler(); |
+ is_hidden_for_placeholder = throttler->IsHiddenForPlaceholder(); |
+ is_peripheral = throttler->power_saver_enabled(); |
+ is_throttled = throttler->IsThrottled(); |
+ } |
// Refcounted by the returned PP_Var. |
ppapi::DictionaryVar* dictionary = new ppapi::DictionaryVar; |
dictionary->Set(ppapi::StringVar::StringToPPVar("source"), |
ppapi::StringVar::StringToPPVar(source)); |
- dictionary->Set( |
- ppapi::StringVar::StringToPPVar("isHiddenForPlaceholder"), |
- PP_MakeBool(PP_FromBool(throttler->IsHiddenForPlaceholder()))); |
+ dictionary->Set(ppapi::StringVar::StringToPPVar("isHiddenForPlaceholder"), |
+ PP_MakeBool(PP_FromBool(is_hidden_for_placeholder))); |
dictionary->Set(ppapi::StringVar::StringToPPVar("isPeripheral"), |
- PP_MakeBool(PP_FromBool(throttler->power_saver_enabled()))); |
+ PP_MakeBool(PP_FromBool(is_peripheral))); |
dictionary->Set(ppapi::StringVar::StringToPPVar("isThrottled"), |
- PP_MakeBool(PP_FromBool(throttler->IsThrottled()))); |
+ PP_MakeBool(PP_FromBool(is_throttled))); |
instance->PostMessageToJavaScript(dictionary->GetPPVar()); |
} |
private: |
void OnThrottleStateChange() override { |
- PostPowerSaverStatusToJavaScript(throttler_, "throttleStatusChange"); |
+ PostPowerSaverStatusToJavaScript("throttleStatusChange"); |
} |
void OnPeripheralStateChange() override { |
- PostPowerSaverStatusToJavaScript(throttler_, "peripheralStatusChange"); |
+ PostPowerSaverStatusToJavaScript("peripheralStatusChange"); |
} |
void OnHiddenForPlaceholder(bool hidden) override { |
- PostPowerSaverStatusToJavaScript(throttler_, |
- "hiddenForPlaceholderStatusChange"); |
+ PostPowerSaverStatusToJavaScript("hiddenForPlaceholderStatusChange"); |
} |
void OnThrottlerDestroyed() override { delete this; } |
+ void PostPowerSaverStatusToJavaScript(const std::string& source) { |
+ if (!throttler_->GetWebPlugin() || !throttler_->GetWebPlugin()->instance()) |
+ return; |
+ PostPowerSaverStatusToJavaScript(throttler_->GetWebPlugin()->instance(), |
+ source); |
+ } |
+ |
// Non-owning pointer. |
PluginInstanceThrottlerImpl* const throttler_; |
}; |
@@ -303,21 +316,27 @@ PP_Bool IsOutOfProcess() { return PP_FALSE; } |
void PostPowerSaverStatus(PP_Instance instance_id) { |
PepperPluginInstanceImpl* plugin_instance = |
host_globals->GetInstance(instance_id); |
- if (!plugin_instance || !plugin_instance->throttler()) |
+ if (!plugin_instance) |
return; |
PowerSaverTestPluginDelegate::PostPowerSaverStatusToJavaScript( |
- plugin_instance->throttler(), "getPowerSaverStatusResponse"); |
+ plugin_instance, "getPowerSaverStatusResponse"); |
} |
void SubscribeToPowerSaverNotifications(PP_Instance instance_id) { |
PepperPluginInstanceImpl* plugin_instance = |
host_globals->GetInstance(instance_id); |
- if (!plugin_instance || !plugin_instance->throttler()) |
+ if (!plugin_instance) |
return; |
- // Manages its own lifetime. |
- new PowerSaverTestPluginDelegate(plugin_instance->throttler()); |
+ if (plugin_instance->throttler()) { |
+ // Manages its own lifetime. |
+ new PowerSaverTestPluginDelegate(plugin_instance->throttler()); |
+ } else { |
+ // Just send an initial status. This status will never be updated. |
+ PowerSaverTestPluginDelegate::PostPowerSaverStatusToJavaScript( |
+ plugin_instance, "initial"); |
+ } |
} |
void SimulateInputEvent(PP_Instance instance, PP_Resource input_event) { |