Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/pepper/plugin_module.h" | 5 #include "content/renderer/pepper/plugin_module.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 128 #include "ppapi/c/private/ppb_uma_private.h" | 128 #include "ppapi/c/private/ppb_uma_private.h" |
| 129 #include "ppapi/c/private/ppb_video_destination_private.h" | 129 #include "ppapi/c/private/ppb_video_destination_private.h" |
| 130 #include "ppapi/c/private/ppb_video_source_private.h" | 130 #include "ppapi/c/private/ppb_video_source_private.h" |
| 131 #include "ppapi/c/private/ppb_x509_certificate_private.h" | 131 #include "ppapi/c/private/ppb_x509_certificate_private.h" |
| 132 #include "ppapi/c/trusted/ppb_broker_trusted.h" | 132 #include "ppapi/c/trusted/ppb_broker_trusted.h" |
| 133 #include "ppapi/c/trusted/ppb_browser_font_trusted.h" | 133 #include "ppapi/c/trusted/ppb_browser_font_trusted.h" |
| 134 #include "ppapi/c/trusted/ppb_char_set_trusted.h" | 134 #include "ppapi/c/trusted/ppb_char_set_trusted.h" |
| 135 #include "ppapi/c/trusted/ppb_file_chooser_trusted.h" | 135 #include "ppapi/c/trusted/ppb_file_chooser_trusted.h" |
| 136 #include "ppapi/c/trusted/ppb_url_loader_trusted.h" | 136 #include "ppapi/c/trusted/ppb_url_loader_trusted.h" |
| 137 #include "ppapi/shared_impl/callback_tracker.h" | 137 #include "ppapi/shared_impl/callback_tracker.h" |
| 138 #include "ppapi/shared_impl/dictionary_var.h" | |
| 138 #include "ppapi/shared_impl/ppapi_preferences.h" | 139 #include "ppapi/shared_impl/ppapi_preferences.h" |
| 139 #include "ppapi/shared_impl/ppapi_switches.h" | 140 #include "ppapi/shared_impl/ppapi_switches.h" |
| 140 #include "ppapi/shared_impl/ppb_input_event_shared.h" | 141 #include "ppapi/shared_impl/ppb_input_event_shared.h" |
| 141 #include "ppapi/shared_impl/ppb_opengles2_shared.h" | 142 #include "ppapi/shared_impl/ppb_opengles2_shared.h" |
| 142 #include "ppapi/shared_impl/ppb_var_shared.h" | 143 #include "ppapi/shared_impl/ppb_var_shared.h" |
| 144 #include "ppapi/shared_impl/scoped_pp_var.h" | |
| 143 #include "ppapi/shared_impl/time_conversion.h" | 145 #include "ppapi/shared_impl/time_conversion.h" |
| 146 #include "ppapi/shared_impl/var.h" | |
| 144 #include "ppapi/thunk/enter.h" | 147 #include "ppapi/thunk/enter.h" |
| 145 #include "ppapi/thunk/ppb_graphics_2d_api.h" | 148 #include "ppapi/thunk/ppb_graphics_2d_api.h" |
| 146 #include "ppapi/thunk/thunk.h" | 149 #include "ppapi/thunk/thunk.h" |
| 147 | 150 |
| 148 #if defined(OS_CHROMEOS) | 151 #if defined(OS_CHROMEOS) |
| 149 #include "ppapi/c/private/ppb_platform_verification_private.h" | 152 #include "ppapi/c/private/ppb_platform_verification_private.h" |
| 150 #endif | 153 #endif |
| 151 | 154 |
| 152 using ppapi::InputEventData; | 155 using ppapi::InputEventData; |
| 153 using ppapi::PpapiGlobals; | 156 using ppapi::PpapiGlobals; |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 174 | 177 |
| 175 // Maintains all currently loaded plugin libs for validating PP_Module | 178 // Maintains all currently loaded plugin libs for validating PP_Module |
| 176 // identifiers. | 179 // identifiers. |
| 177 typedef std::set<PluginModule*> PluginModuleSet; | 180 typedef std::set<PluginModule*> PluginModuleSet; |
| 178 | 181 |
| 179 PluginModuleSet* GetLivePluginSet() { | 182 PluginModuleSet* GetLivePluginSet() { |
| 180 CR_DEFINE_STATIC_LOCAL(PluginModuleSet, live_plugin_libs, ()); | 183 CR_DEFINE_STATIC_LOCAL(PluginModuleSet, live_plugin_libs, ()); |
| 181 return &live_plugin_libs; | 184 return &live_plugin_libs; |
| 182 } | 185 } |
| 183 | 186 |
| 187 class PowerSaverTestPluginDelegate : public PluginInstanceThrottler::Observer { | |
| 188 public: | |
| 189 explicit PowerSaverTestPluginDelegate(PluginInstanceThrottlerImpl* throttler) | |
| 190 : throttler_(throttler) { | |
| 191 throttler_->AddObserver(this); | |
| 192 } | |
| 193 | |
| 194 virtual ~PowerSaverTestPluginDelegate() { | |
| 195 throttler_->RemoveObserver(this); | |
| 196 } | |
| 197 | |
| 198 private: | |
| 199 void OnThrottleStateChange() override { | |
| 200 SendMessageToPlugin("throttleStatusChange"); | |
| 201 } | |
| 202 | |
| 203 void OnPeripheralStateChange() override { | |
| 204 SendMessageToPlugin("peripheralStatusChange"); | |
| 205 } | |
| 206 | |
| 207 void OnHiddenForPlaceholder(bool hidden) override { | |
| 208 SendMessageToPlugin("hiddenForPlaceholderStatusChange"); | |
| 209 } | |
| 210 | |
| 211 void OnThrottlerDestroyed() override { delete this; } | |
| 212 | |
| 213 void SendMessageToPlugin(const std::string& message) { | |
| 214 if (throttler_->GetWebPlugin() && throttler_->GetWebPlugin()->instance()) { | |
| 215 throttler_->GetWebPlugin()->instance()->HandleMessage( | |
| 216 ppapi::ScopedPPVar(ppapi::ScopedPPVar::PassRef(), | |
| 217 ppapi::StringVar::StringToPPVar(message))); | |
|
raymes
2015/05/01 01:02:05
This is still a bit un-idiomatic from a pepper per
tommycli
2015/05/01 23:12:43
Done.
| |
| 218 } | |
| 219 } | |
| 220 | |
| 221 // Non-owning pointer. | |
| 222 PluginInstanceThrottlerImpl* const throttler_; | |
| 223 }; | |
| 224 | |
| 184 // PPB_Core -------------------------------------------------------------------- | 225 // PPB_Core -------------------------------------------------------------------- |
| 185 | 226 |
| 186 void AddRefResource(PP_Resource resource) { | 227 void AddRefResource(PP_Resource resource) { |
| 187 PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(resource); | 228 PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(resource); |
| 188 } | 229 } |
| 189 | 230 |
| 190 void ReleaseResource(PP_Resource resource) { | 231 void ReleaseResource(PP_Resource resource) { |
| 191 PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resource); | 232 PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resource); |
| 192 } | 233 } |
| 193 | 234 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 239 base::MessageLoop::current()->QuitNow(); | 280 base::MessageLoop::current()->QuitNow(); |
| 240 } | 281 } |
| 241 | 282 |
| 242 uint32_t GetLiveObjectsForInstance(PP_Instance instance_id) { | 283 uint32_t GetLiveObjectsForInstance(PP_Instance instance_id) { |
| 243 return HostGlobals::Get()->GetResourceTracker()->GetLiveObjectsForInstance( | 284 return HostGlobals::Get()->GetResourceTracker()->GetLiveObjectsForInstance( |
| 244 instance_id); | 285 instance_id); |
| 245 } | 286 } |
| 246 | 287 |
| 247 PP_Bool IsOutOfProcess() { return PP_FALSE; } | 288 PP_Bool IsOutOfProcess() { return PP_FALSE; } |
| 248 | 289 |
| 249 PP_Bool IsPeripheral(PP_Instance instance_id) { | 290 PP_Var GetPowerSaverStatus(PP_Instance instance_id) { |
| 250 PepperPluginInstanceImpl* plugin_instance = | 291 PepperPluginInstanceImpl* plugin_instance = |
| 251 host_globals->GetInstance(instance_id); | 292 host_globals->GetInstance(instance_id); |
| 252 if (!plugin_instance || !plugin_instance->throttler()) | 293 if (!plugin_instance || !plugin_instance->throttler()) |
| 253 return PP_FALSE; | 294 return PP_MakeUndefined(); |
| 254 return PP_FromBool(plugin_instance->throttler()->power_saver_enabled()); | 295 PluginInstanceThrottlerImpl* throttler = plugin_instance->throttler(); |
| 296 | |
| 297 // Refcounted by the returned PP_Var. | |
| 298 ppapi::DictionaryVar* dictionary = new ppapi::DictionaryVar; | |
| 299 dictionary->Set( | |
| 300 ppapi::StringVar::StringToPPVar("isHiddenForPlaceholder"), | |
| 301 PP_MakeBool(PP_FromBool(throttler->IsHiddenForPlaceholder()))); | |
| 302 dictionary->Set(ppapi::StringVar::StringToPPVar("isPeripheral"), | |
| 303 PP_MakeBool(PP_FromBool(throttler->power_saver_enabled()))); | |
| 304 dictionary->Set(ppapi::StringVar::StringToPPVar("isThrottled"), | |
| 305 PP_MakeBool(PP_FromBool(throttler->IsThrottled()))); | |
|
raymes
2015/05/01 01:02:05
Also, if we're going to postMessage the data, why
tommycli
2015/05/01 23:12:43
Done.
| |
| 306 return dictionary->GetPPVar(); | |
| 307 } | |
| 308 | |
| 309 void SubscribeToPowerSaverNotifications(PP_Instance instance_id) { | |
| 310 PepperPluginInstanceImpl* plugin_instance = | |
| 311 host_globals->GetInstance(instance_id); | |
| 312 if (!plugin_instance || !plugin_instance->throttler()) | |
| 313 return; | |
| 314 | |
| 315 // Manages its own lifetime. | |
| 316 new PowerSaverTestPluginDelegate(plugin_instance->throttler()); | |
| 255 } | 317 } |
| 256 | 318 |
| 257 void SimulateInputEvent(PP_Instance instance, PP_Resource input_event) { | 319 void SimulateInputEvent(PP_Instance instance, PP_Resource input_event) { |
| 258 PepperPluginInstanceImpl* plugin_instance = | 320 PepperPluginInstanceImpl* plugin_instance = |
| 259 host_globals->GetInstance(instance); | 321 host_globals->GetInstance(instance); |
| 260 if (!plugin_instance) | 322 if (!plugin_instance) |
| 261 return; | 323 return; |
| 262 | 324 |
| 263 EnterResource<PPB_InputEvent_API> enter(input_event, false); | 325 EnterResource<PPB_InputEvent_API> enter(input_event, false); |
| 264 if (enter.failed()) | 326 if (enter.failed()) |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 295 content::PepperPluginInstance::Get(instance)->GetIsolate()-> | 357 content::PepperPluginInstance::Get(instance)->GetIsolate()-> |
| 296 RequestGarbageCollectionForTesting(v8::Isolate::kFullGarbageCollection); | 358 RequestGarbageCollectionForTesting(v8::Isolate::kFullGarbageCollection); |
| 297 } | 359 } |
| 298 | 360 |
| 299 const PPB_Testing_Private testing_interface = { | 361 const PPB_Testing_Private testing_interface = { |
| 300 &ReadImageData, | 362 &ReadImageData, |
| 301 &RunMessageLoop, | 363 &RunMessageLoop, |
| 302 &QuitMessageLoop, | 364 &QuitMessageLoop, |
| 303 &GetLiveObjectsForInstance, | 365 &GetLiveObjectsForInstance, |
| 304 &IsOutOfProcess, | 366 &IsOutOfProcess, |
| 305 &IsPeripheral, | 367 &GetPowerSaverStatus, |
| 368 &SubscribeToPowerSaverNotifications, | |
| 306 &SimulateInputEvent, | 369 &SimulateInputEvent, |
| 307 &GetDocumentURL, | 370 &GetDocumentURL, |
| 308 &GetLiveVars, | 371 &GetLiveVars, |
| 309 &SetMinimumArrayBufferSizeForShmem, | 372 &SetMinimumArrayBufferSizeForShmem, |
| 310 &RunV8GC}; | 373 &RunV8GC}; |
| 311 | 374 |
| 312 // GetInterface ---------------------------------------------------------------- | 375 // GetInterface ---------------------------------------------------------------- |
| 313 | 376 |
| 314 const void* InternalGetInterface(const char* name) { | 377 const void* InternalGetInterface(const char* name) { |
| 315 // Allow custom interface factories first stab at the GetInterface call. | 378 // Allow custom interface factories first stab at the GetInterface call. |
| (...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 736 channel_handle, | 799 channel_handle, |
| 737 peer_pid, | 800 peer_pid, |
| 738 plugin_child_id, | 801 plugin_child_id, |
| 739 false)) // is_external = false | 802 false)) // is_external = false |
| 740 return scoped_refptr<PluginModule>(); | 803 return scoped_refptr<PluginModule>(); |
| 741 | 804 |
| 742 return module; | 805 return module; |
| 743 } | 806 } |
| 744 | 807 |
| 745 } // namespace content | 808 } // namespace content |
| OLD | NEW |