15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/ppb_proxy_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/private/ppb_proxy_private.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/enter.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_image_data_api.h" 10bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/host_globals.h" 11bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/plugin_module.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::PpapiGlobals; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::thunk::EnterResource; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ppapi::thunk::PPB_URLLoader_API; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PluginCrashed(PP_Module module) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginModule* plugin_module = HostGlobals::Get()->GetModule(module); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (plugin_module) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_module->PluginCrashed(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Instance GetInstanceForResource(PP_Resource resource) { 28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ppapi::Resource* obj = 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PpapiGlobals::Get()->GetResourceTracker()->GetResource(resource); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!obj) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return obj->pp_instance(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetReserveInstanceIDCallback(PP_Module module, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Bool (*reserve)(PP_Module, PP_Instance)) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginModule* plugin_module = HostGlobals::Get()->GetModule(module); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (plugin_module) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_module->SetReserveInstanceIDCallback(reserve); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AddRefModule(PP_Module module) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginModule* plugin_module = HostGlobals::Get()->GetModule(module); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (plugin_module) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_module->AddRef(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ReleaseModule(PP_Module module) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginModule* plugin_module = HostGlobals::Get()->GetModule(module); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (plugin_module) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_module->Release(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool IsInModuleDestructor(PP_Module module) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginModule* plugin_module = HostGlobals::Get()->GetModule(module); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (plugin_module) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FromBool(plugin_module->is_in_destructor()); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_FALSE; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_Proxy_Private ppb_proxy = { 62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &PluginCrashed, &GetInstanceForResource, &SetReserveInstanceIDCallback, 63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch &AddRefModule, &ReleaseModule, &IsInModuleDestructor}; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochconst PPB_Proxy_Private* PPB_Proxy_Impl::GetInterface() { return &ppb_proxy; } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} // namespace content 71