Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(284)

Unified Diff: webkit/plugins/ppapi/plugin_module.cc

Issue 20165002: Move webkit/plugins/ppapi to content/renderer/pepper. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: more more clang fun Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/plugins/ppapi/plugin_module.h ('k') | webkit/plugins/ppapi/plugin_object.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/plugins/ppapi/plugin_module.cc
===================================================================
--- webkit/plugins/ppapi/plugin_module.cc (revision 213561)
+++ webkit/plugins/ppapi/plugin_module.cc (working copy)
@@ -1,639 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "webkit/plugins/ppapi/plugin_module.h"
-
-#include <set>
-
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "base/time/time.h"
-#include "ppapi/c/dev/ppb_audio_input_dev.h"
-#include "ppapi/c/dev/ppb_buffer_dev.h"
-#include "ppapi/c/dev/ppb_char_set_dev.h"
-#include "ppapi/c/dev/ppb_crypto_dev.h"
-#include "ppapi/c/dev/ppb_cursor_control_dev.h"
-#include "ppapi/c/dev/ppb_device_ref_dev.h"
-#include "ppapi/c/dev/ppb_file_chooser_dev.h"
-#include "ppapi/c/dev/ppb_find_dev.h"
-#include "ppapi/c/dev/ppb_font_dev.h"
-#include "ppapi/c/dev/ppb_gles_chromium_texture_mapping_dev.h"
-#include "ppapi/c/dev/ppb_graphics_2d_dev.h"
-#include "ppapi/c/dev/ppb_memory_dev.h"
-#include "ppapi/c/dev/ppb_opengles2ext_dev.h"
-#include "ppapi/c/dev/ppb_printing_dev.h"
-#include "ppapi/c/dev/ppb_resource_array_dev.h"
-#include "ppapi/c/dev/ppb_scrollbar_dev.h"
-#include "ppapi/c/dev/ppb_testing_dev.h"
-#include "ppapi/c/dev/ppb_text_input_dev.h"
-#include "ppapi/c/dev/ppb_trace_event_dev.h"
-#include "ppapi/c/dev/ppb_truetype_font_dev.h"
-#include "ppapi/c/dev/ppb_url_util_dev.h"
-#include "ppapi/c/dev/ppb_var_deprecated.h"
-#include "ppapi/c/dev/ppb_video_capture_dev.h"
-#include "ppapi/c/dev/ppb_video_decoder_dev.h"
-#include "ppapi/c/dev/ppb_view_dev.h"
-#include "ppapi/c/dev/ppb_widget_dev.h"
-#include "ppapi/c/dev/ppb_zoom_dev.h"
-#include "ppapi/c/extensions/dev/ppb_ext_alarms_dev.h"
-#include "ppapi/c/extensions/dev/ppb_ext_socket_dev.h"
-#include "ppapi/c/pp_module.h"
-#include "ppapi/c/pp_resource.h"
-#include "ppapi/c/pp_var.h"
-#include "ppapi/c/ppb_audio.h"
-#include "ppapi/c/ppb_audio_config.h"
-#include "ppapi/c/ppb_console.h"
-#include "ppapi/c/ppb_core.h"
-#include "ppapi/c/ppb_file_io.h"
-#include "ppapi/c/ppb_file_ref.h"
-#include "ppapi/c/ppb_file_system.h"
-#include "ppapi/c/ppb_fullscreen.h"
-#include "ppapi/c/ppb_graphics_2d.h"
-#include "ppapi/c/ppb_graphics_3d.h"
-#include "ppapi/c/ppb_host_resolver.h"
-#include "ppapi/c/ppb_image_data.h"
-#include "ppapi/c/ppb_instance.h"
-#include "ppapi/c/ppb_messaging.h"
-#include "ppapi/c/ppb_mouse_cursor.h"
-#include "ppapi/c/ppb_mouse_lock.h"
-#include "ppapi/c/ppb_net_address.h"
-#include "ppapi/c/ppb_network_proxy.h"
-#include "ppapi/c/ppb_opengles2.h"
-#include "ppapi/c/ppb_tcp_socket.h"
-#include "ppapi/c/ppb_udp_socket.h"
-#include "ppapi/c/ppb_url_loader.h"
-#include "ppapi/c/ppb_url_request_info.h"
-#include "ppapi/c/ppb_url_response_info.h"
-#include "ppapi/c/ppb_var.h"
-#include "ppapi/c/ppb_var_array.h"
-#include "ppapi/c/ppb_var_array_buffer.h"
-#include "ppapi/c/ppb_var_dictionary.h"
-#include "ppapi/c/ppb_view.h"
-#include "ppapi/c/ppp.h"
-#include "ppapi/c/ppp_instance.h"
-#include "ppapi/c/private/ppb_ext_crx_file_system_private.h"
-#include "ppapi/c/private/ppb_file_io_private.h"
-#include "ppapi/c/private/ppb_file_ref_private.h"
-#include "ppapi/c/private/ppb_flash.h"
-#include "ppapi/c/private/ppb_flash_clipboard.h"
-#include "ppapi/c/private/ppb_flash_device_id.h"
-#include "ppapi/c/private/ppb_flash_drm.h"
-#include "ppapi/c/private/ppb_flash_file.h"
-#include "ppapi/c/private/ppb_flash_font_file.h"
-#include "ppapi/c/private/ppb_flash_fullscreen.h"
-#include "ppapi/c/private/ppb_flash_menu.h"
-#include "ppapi/c/private/ppb_flash_message_loop.h"
-#include "ppapi/c/private/ppb_flash_print.h"
-#include "ppapi/c/private/ppb_gpu_blacklist_private.h"
-#include "ppapi/c/private/ppb_host_resolver_private.h"
-#include "ppapi/c/private/ppb_instance_private.h"
-#include "ppapi/c/private/ppb_network_list_private.h"
-#include "ppapi/c/private/ppb_network_monitor_private.h"
-#include "ppapi/c/private/ppb_pdf.h"
-#include "ppapi/c/private/ppb_proxy_private.h"
-#include "ppapi/c/private/ppb_talk_private.h"
-#include "ppapi/c/private/ppb_tcp_server_socket_private.h"
-#include "ppapi/c/private/ppb_tcp_socket_private.h"
-#include "ppapi/c/private/ppb_udp_socket_private.h"
-#include "ppapi/c/private/ppb_uma_private.h"
-#include "ppapi/c/private/ppb_video_destination_private.h"
-#include "ppapi/c/private/ppb_video_source_private.h"
-#include "ppapi/c/private/ppb_x509_certificate_private.h"
-#include "ppapi/c/trusted/ppb_broker_trusted.h"
-#include "ppapi/c/trusted/ppb_browser_font_trusted.h"
-#include "ppapi/c/trusted/ppb_char_set_trusted.h"
-#include "ppapi/c/trusted/ppb_file_chooser_trusted.h"
-#include "ppapi/c/trusted/ppb_file_io_trusted.h"
-#include "ppapi/c/trusted/ppb_url_loader_trusted.h"
-#include "ppapi/shared_impl/callback_tracker.h"
-#include "ppapi/shared_impl/ppapi_switches.h"
-#include "ppapi/shared_impl/ppb_input_event_shared.h"
-#include "ppapi/shared_impl/ppb_opengles2_shared.h"
-#include "ppapi/shared_impl/ppb_var_shared.h"
-#include "ppapi/shared_impl/time_conversion.h"
-#include "ppapi/thunk/enter.h"
-#include "ppapi/thunk/ppb_graphics_2d_api.h"
-#include "ppapi/thunk/thunk.h"
-#include "webkit/plugins/plugin_switches.h"
-#include "webkit/plugins/ppapi/common.h"
-#include "webkit/plugins/ppapi/host_globals.h"
-#include "webkit/plugins/ppapi/ppapi_interface_factory.h"
-#include "webkit/plugins/ppapi/ppapi_plugin_instance_impl.h"
-#include "webkit/plugins/ppapi/ppb_gpu_blacklist_private_impl.h"
-#include "webkit/plugins/ppapi/ppb_image_data_impl.h"
-#include "webkit/plugins/ppapi/ppb_proxy_impl.h"
-#include "webkit/plugins/ppapi/ppb_scrollbar_impl.h"
-#include "webkit/plugins/ppapi/ppb_uma_private_impl.h"
-#include "webkit/plugins/ppapi/ppb_var_deprecated_impl.h"
-#include "webkit/plugins/ppapi/ppb_video_decoder_impl.h"
-
-using ppapi::InputEventData;
-using ppapi::PpapiGlobals;
-using ppapi::TimeTicksToPPTimeTicks;
-using ppapi::TimeToPPTime;
-using ppapi::thunk::EnterResource;
-using ppapi::thunk::PPB_Graphics2D_API;
-using ppapi::thunk::PPB_InputEvent_API;
-
-namespace webkit {
-namespace ppapi {
-
-namespace {
-
-// Global tracking info for PPAPI plugins. This is lazily created before the
-// first plugin is allocated, and leaked on shutdown.
-//
-// Note that we don't want a Singleton here since destroying this object will
-// try to free some stuff that requires WebKit, and Singletons are destroyed
-// after WebKit.
-// TODO(raymes): I'm not sure if it is completely necessary to leak the
-// HostGlobals. Figure out the shutdown sequence and find a way to do this
-// more elegantly.
-webkit::ppapi::HostGlobals* host_globals = NULL;
-
-// Maintains all currently loaded plugin libs for validating PP_Module
-// identifiers.
-typedef std::set<PluginModule*> PluginModuleSet;
-
-PluginModuleSet* GetLivePluginSet() {
- CR_DEFINE_STATIC_LOCAL(PluginModuleSet, live_plugin_libs, ());
- return &live_plugin_libs;
-}
-
-// PPB_Core --------------------------------------------------------------------
-
-void AddRefResource(PP_Resource resource) {
- PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(resource);
-}
-
-void ReleaseResource(PP_Resource resource) {
- PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resource);
-}
-
-PP_Time GetTime() {
- return TimeToPPTime(base::Time::Now());
-}
-
-PP_TimeTicks GetTickTime() {
- return TimeTicksToPPTimeTicks(base::TimeTicks::Now());
-}
-
-void CallOnMainThread(int delay_in_msec,
- PP_CompletionCallback callback,
- int32_t result) {
- if (callback.func) {
- PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostDelayedTask(
- FROM_HERE,
- base::Bind(callback.func, callback.user_data, result),
- base::TimeDelta::FromMilliseconds(delay_in_msec));
- }
-}
-
-PP_Bool IsMainThread() {
- return BoolToPPBool(PpapiGlobals::Get()->
- GetMainThreadMessageLoop()->BelongsToCurrentThread());
-}
-
-const PPB_Core core_interface = {
- &AddRefResource,
- &ReleaseResource,
- &GetTime,
- &GetTickTime,
- &CallOnMainThread,
- &IsMainThread
-};
-
-// PPB_Testing -----------------------------------------------------------------
-
-PP_Bool ReadImageData(PP_Resource device_context_2d,
- PP_Resource image,
- const PP_Point* top_left) {
- EnterResource<PPB_Graphics2D_API> enter(device_context_2d, true);
- if (enter.failed())
- return PP_FALSE;
- return BoolToPPBool(enter.object()->ReadImageData(image, top_left));
-}
-
-void RunMessageLoop(PP_Instance instance) {
- base::MessageLoop::ScopedNestableTaskAllower allow(
- base::MessageLoop::current());
- base::MessageLoop::current()->Run();
-}
-
-void QuitMessageLoop(PP_Instance instance) {
- base::MessageLoop::current()->QuitNow();
-}
-
-uint32_t GetLiveObjectsForInstance(PP_Instance instance_id) {
- return HostGlobals::Get()->GetResourceTracker()->GetLiveObjectsForInstance(
- instance_id);
-}
-
-PP_Bool IsOutOfProcess() {
- return PP_FALSE;
-}
-
-void SimulateInputEvent(PP_Instance instance, PP_Resource input_event) {
- PluginInstanceImpl* plugin_instance = host_globals->GetInstance(instance);
- if (!plugin_instance)
- return;
-
- EnterResource<PPB_InputEvent_API> enter(input_event, false);
- if (enter.failed())
- return;
-
- const InputEventData& input_event_data = enter.object()->GetInputEventData();
- plugin_instance->SimulateInputEvent(input_event_data);
-}
-
-PP_Var GetDocumentURL(PP_Instance instance, PP_URLComponents_Dev* components) {
- PluginInstanceImpl* plugin_instance = host_globals->GetInstance(instance);
- if (!plugin_instance)
- return PP_MakeUndefined();
- return plugin_instance->GetDocumentURL(instance, components);
-}
-
-uint32_t GetLiveVars(PP_Var live_vars[], uint32_t array_size) {
- std::vector<PP_Var> vars =
- PpapiGlobals::Get()->GetVarTracker()->GetLiveVars();
- for (size_t i = 0u;
- i < std::min(static_cast<size_t>(array_size), vars.size());
- ++i)
- live_vars[i] = vars[i];
- return vars.size();
-}
-
-void SetMinimumArrayBufferSizeForShmem(PP_Instance /*instance*/,
- uint32_t /*threshold*/) {
- // Does nothing. Not needed in-process.
-}
-
-const PPB_Testing_Dev testing_interface = {
- &ReadImageData,
- &RunMessageLoop,
- &QuitMessageLoop,
- &GetLiveObjectsForInstance,
- &IsOutOfProcess,
- &SimulateInputEvent,
- &GetDocumentURL,
- &GetLiveVars,
- &SetMinimumArrayBufferSizeForShmem
-};
-
-// GetInterface ----------------------------------------------------------------
-
-const void* InternalGetInterface(const char* name) {
- // Allow custom interface factories first stab at the GetInterface call.
- const void* custom_interface =
- PpapiInterfaceFactoryManager::GetInstance()->GetInterface(name);
- if (custom_interface)
- return custom_interface;
-
- // TODO(brettw) put these in a hash map for better performance.
- #define UNPROXIED_IFACE(api_name, iface_str, iface_struct) \
- if (strcmp(name, iface_str) == 0) \
- return ::ppapi::thunk::Get##iface_struct##_Thunk();
- #define PROXIED_IFACE(api_name, iface_str, iface_struct) \
- UNPROXIED_IFACE(api_name, iface_str, iface_struct)
-
- #include "ppapi/thunk/interfaces_ppb_public_stable.h"
- #include "ppapi/thunk/interfaces_ppb_public_dev.h"
- #include "ppapi/thunk/interfaces_ppb_private.h"
- #include "ppapi/thunk/interfaces_ppb_private_no_permissions.h"
- #include "ppapi/thunk/interfaces_ppb_private_flash.h"
-
- #undef UNPROXIED_API
- #undef PROXIED_IFACE
-
- #define LEGACY_IFACE(iface_str, function_name) \
- if (strcmp(name, iface_str) == 0) \
- return function_name;
-
- #include "ppapi/thunk/interfaces_legacy.h"
-
- #undef LEGACY_IFACE
-
- // Only support the testing interface when the command line switch is
- // specified. This allows us to prevent people from (ab)using this interface
- // in production code.
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnablePepperTesting)) {
- if (strcmp(name, PPB_TESTING_DEV_INTERFACE) == 0 ||
- strcmp(name, PPB_TESTING_DEV_INTERFACE_0_9) == 0) {
- return &testing_interface;
- }
- }
- return NULL;
-}
-
-const void* GetInterface(const char* name) {
- // All interfaces should be used on the main thread.
- CHECK(IsMainThread());
-
- return InternalGetInterface(name);
-}
-
-// Gets the PPAPI entry points from the given library and places them into the
-// given structure. Returns true on success.
-bool LoadEntryPointsFromLibrary(const base::NativeLibrary& library,
- PluginModule::EntryPoints* entry_points) {
- entry_points->get_interface =
- reinterpret_cast<PluginModule::GetInterfaceFunc>(
- base::GetFunctionPointerFromNativeLibrary(library,
- "PPP_GetInterface"));
- if (!entry_points->get_interface) {
- LOG(WARNING) << "No PPP_GetInterface in plugin library";
- return false;
- }
-
- entry_points->initialize_module =
- reinterpret_cast<PluginModule::PPP_InitializeModuleFunc>(
- base::GetFunctionPointerFromNativeLibrary(library,
- "PPP_InitializeModule"));
- if (!entry_points->initialize_module) {
- LOG(WARNING) << "No PPP_InitializeModule in plugin library";
- return false;
- }
-
- // It's okay for PPP_ShutdownModule to not be defined and shutdown_module to
- // be NULL.
- entry_points->shutdown_module =
- reinterpret_cast<PluginModule::PPP_ShutdownModuleFunc>(
- base::GetFunctionPointerFromNativeLibrary(library,
- "PPP_ShutdownModule"));
-
- return true;
-}
-
-} // namespace
-
-PluginModule::EntryPoints::EntryPoints()
- : get_interface(NULL),
- initialize_module(NULL),
- shutdown_module(NULL) {
-}
-
-// PluginModule ----------------------------------------------------------------
-
-PluginModule::PluginModule(const std::string& name,
- const base::FilePath& path,
- PluginDelegate::ModuleLifetime* lifetime_delegate,
- const ::ppapi::PpapiPermissions& perms)
- : lifetime_delegate_(lifetime_delegate),
- callback_tracker_(new ::ppapi::CallbackTracker),
- is_in_destructor_(false),
- is_crashed_(false),
- broker_(NULL),
- library_(NULL),
- name_(name),
- path_(path),
- permissions_(perms),
- reserve_instance_id_(NULL) {
- // Ensure the globals object is created.
- if (!host_globals)
- host_globals = new HostGlobals;
-
- memset(&entry_points_, 0, sizeof(entry_points_));
- pp_module_ = HostGlobals::Get()->AddModule(this);
- GetLivePluginSet()->insert(this);
-}
-
-PluginModule::~PluginModule() {
- // In the past there have been crashes reentering the plugin module
- // destructor. Catch if that happens again earlier.
- CHECK(!is_in_destructor_);
- is_in_destructor_ = true;
-
- // When the module is being deleted, there should be no more instances still
- // holding a reference to us.
- DCHECK(instances_.empty());
-
- // Some resources and other stuff are hung off of the embedder state, which
- // should be torn down before the routing stuff below.
- embedder_state_.reset();
-
- GetLivePluginSet()->erase(this);
-
- callback_tracker_->AbortAll();
-
- if (entry_points_.shutdown_module)
- entry_points_.shutdown_module();
-
- if (library_)
- base::UnloadNativeLibrary(library_);
-
- // Notifications that we've been deleted should be last.
- HostGlobals::Get()->ModuleDeleted(pp_module_);
- if (!is_crashed_ && lifetime_delegate_) {
- // When the plugin crashes, we immediately tell the lifetime delegate that
- // we're gone, so we don't want to tell it again.
- lifetime_delegate_->PluginModuleDead(this);
- }
-
- // Don't add stuff here, the two notifications that the module object has
- // been deleted should be last. This allows, for example,
- // PPB_Proxy.IsInModuleDestructor to map PP_Module to this class during the
- // previous parts of the destructor.
-}
-
-void PluginModule::SetEmbedderState(scoped_ptr<EmbedderState> state) {
- embedder_state_ = state.Pass();
-}
-
-PluginModule::EmbedderState* PluginModule::GetEmbedderState() {
- return embedder_state_.get();
-}
-
-bool PluginModule::InitAsInternalPlugin(const EntryPoints& entry_points) {
- if (InitializeModule(entry_points)) {
- entry_points_ = entry_points;
- return true;
- }
- return false;
-}
-
-bool PluginModule::InitAsLibrary(const base::FilePath& path) {
- base::NativeLibrary library = base::LoadNativeLibrary(path, NULL);
- if (!library)
- return false;
-
- EntryPoints entry_points;
-
- if (!LoadEntryPointsFromLibrary(library, &entry_points) ||
- !InitializeModule(entry_points)) {
- base::UnloadNativeLibrary(library);
- return false;
- }
- entry_points_ = entry_points;
- library_ = library;
- return true;
-}
-
-void PluginModule::InitAsProxied(
- PluginDelegate::OutOfProcessProxy* out_of_process_proxy) {
- DCHECK(!out_of_process_proxy_.get());
- out_of_process_proxy_.reset(out_of_process_proxy);
-}
-
-scoped_refptr<PluginModule>
- PluginModule::CreateModuleForExternalPluginInstance() {
- // Create a new module, but don't set the lifetime delegate. This isn't a
- // plugin in the usual sense, so it isn't tracked by the browser.
- scoped_refptr<PluginModule> external_plugin_module(
- new PluginModule(name_,
- path_,
- NULL, // no lifetime_delegate
- permissions_));
- return external_plugin_module;
-}
-
-PP_ExternalPluginResult PluginModule::InitAsProxiedExternalPlugin(
- PluginInstanceImpl* instance) {
- DCHECK(out_of_process_proxy_.get());
- // InitAsProxied (for the trusted/out-of-process case) initializes only the
- // module, and one or more instances are added later. In this case, the
- // PluginInstance was already created as in-process, so we missed the proxy
- // AddInstance step and must do it now.
- out_of_process_proxy_->AddInstance(instance->pp_instance());
- // For external plugins, we need to tell the instance to reset itself as
- // proxied. This will clear cached interface pointers and send DidCreate (etc)
- // to the plugin side of the proxy.
- return instance->ResetAsProxied(this);
-}
-
-bool PluginModule::IsProxied() const {
- return !!out_of_process_proxy_;
-}
-
-base::ProcessId PluginModule::GetPeerProcessId() {
- if (out_of_process_proxy_)
- return out_of_process_proxy_->GetPeerProcessId();
- return base::kNullProcessId;
-}
-
-int PluginModule::GetPluginChildId() {
- if (out_of_process_proxy_)
- return out_of_process_proxy_->GetPluginChildId();
- return 0;
-}
-
-// static
-const PPB_Core* PluginModule::GetCore() {
- return &core_interface;
-}
-
-// static
-PluginModule::GetInterfaceFunc PluginModule::GetLocalGetInterfaceFunc() {
- return &GetInterface;
-}
-
-// static
-bool PluginModule::SupportsInterface(const char* name) {
- return !!InternalGetInterface(name);
-}
-
-PluginInstanceImpl* PluginModule::CreateInstance(
- PluginDelegate* delegate,
- content::RenderView* render_view,
- WebKit::WebPluginContainer* container,
- const GURL& plugin_url) {
- PluginInstanceImpl* instance = PluginInstanceImpl::Create(
- delegate, render_view, this, container, plugin_url);
- if (!instance) {
- LOG(WARNING) << "Plugin doesn't support instance interface, failing.";
- return NULL;
- }
- if (out_of_process_proxy_)
- out_of_process_proxy_->AddInstance(instance->pp_instance());
- return instance;
-}
-
-PluginInstanceImpl* PluginModule::GetSomeInstance() const {
- // This will generally crash later if there is not actually any instance to
- // return, so we force a crash now to make bugs easier to track down.
- CHECK(!instances_.empty());
- return *instances_.begin();
-}
-
-const void* PluginModule::GetPluginInterface(const char* name) const {
- if (out_of_process_proxy_)
- return out_of_process_proxy_->GetProxiedInterface(name);
-
- // In-process plugins.
- if (!entry_points_.get_interface)
- return NULL;
- return entry_points_.get_interface(name);
-}
-
-void PluginModule::InstanceCreated(PluginInstanceImpl* instance) {
- instances_.insert(instance);
-}
-
-void PluginModule::InstanceDeleted(PluginInstanceImpl* instance) {
- if (out_of_process_proxy_)
- out_of_process_proxy_->RemoveInstance(instance->pp_instance());
- instances_.erase(instance);
-}
-
-scoped_refptr< ::ppapi::CallbackTracker> PluginModule::GetCallbackTracker() {
- return callback_tracker_;
-}
-
-void PluginModule::PluginCrashed() {
- DCHECK(!is_crashed_); // Should only get one notification.
- is_crashed_ = true;
-
- // Notify all instances that they crashed.
- for (PluginInstanceSet::iterator i = instances_.begin();
- i != instances_.end(); ++i)
- (*i)->InstanceCrashed();
-
- if (lifetime_delegate_)
- lifetime_delegate_->PluginModuleDead(this);
-}
-
-void PluginModule::SetReserveInstanceIDCallback(
- PP_Bool (*reserve)(PP_Module, PP_Instance)) {
- DCHECK(!reserve_instance_id_) << "Only expect one set.";
- reserve_instance_id_ = reserve;
-}
-
-bool PluginModule::ReserveInstanceID(PP_Instance instance) {
- if (reserve_instance_id_)
- return PPBoolToBool(reserve_instance_id_(pp_module_, instance));
- return true; // Instance ID is usable.
-}
-
-void PluginModule::SetBroker(PluginDelegate::Broker* broker) {
- DCHECK(!broker_ || !broker);
- broker_ = broker;
-}
-
-PluginDelegate::Broker* PluginModule::GetBroker() {
- return broker_;
-}
-
-// static
-void PluginModule::ResetHostGlobalsForTest() {
- delete host_globals;
- host_globals = NULL;
-}
-
-bool PluginModule::InitializeModule(const EntryPoints& entry_points) {
- DCHECK(!out_of_process_proxy_.get()) << "Don't call for proxied modules.";
- DCHECK(entry_points.initialize_module != NULL);
- int retval = entry_points.initialize_module(pp_module(), &GetInterface);
- if (retval != 0) {
- LOG(WARNING) << "PPP_InitializeModule returned failure " << retval;
- return false;
- }
- return true;
-}
-
-} // namespace ppapi
-} // namespace webkit
« no previous file with comments | « webkit/plugins/ppapi/plugin_module.h ('k') | webkit/plugins/ppapi/plugin_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698