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