plugin_globals.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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 3// found in the LICENSE file. 4 5#include "ppapi/proxy/plugin_globals.h" 6 7#include "ppapi/proxy/plugin_dispatcher.h" 8#include "ppapi/proxy/plugin_proxy_delegate.h" 9#include "ppapi/proxy/ppb_message_loop_proxy.h" 10#include "ppapi/thunk/enter.h" 11 12namespace ppapi { 13namespace proxy { 14 15PluginGlobals* PluginGlobals::plugin_globals_ = NULL; 16 17PluginGlobals::PluginGlobals() 18 : ppapi::PpapiGlobals(), 19 plugin_proxy_delegate_(NULL), 20 callback_tracker_(new CallbackTracker), 21 loop_for_main_thread_( 22 new MessageLoopResource(MessageLoopResource::ForMainThread())) { 23 DCHECK(!plugin_globals_); 24 plugin_globals_ = this; 25} 26 27PluginGlobals::PluginGlobals(ForTest for_test) 28 : ppapi::PpapiGlobals(for_test), 29 plugin_proxy_delegate_(NULL), 30 callback_tracker_(new CallbackTracker) { 31 DCHECK(!plugin_globals_); 32} 33 34PluginGlobals::~PluginGlobals() { 35 DCHECK(plugin_globals_ == this || !plugin_globals_); 36 plugin_globals_ = NULL; 37} 38 39ResourceTracker* PluginGlobals::GetResourceTracker() { 40 return &plugin_resource_tracker_; 41} 42 43VarTracker* PluginGlobals::GetVarTracker() { 44 return &plugin_var_tracker_; 45} 46 47CallbackTracker* PluginGlobals::GetCallbackTrackerForInstance( 48 PP_Instance instance) { 49 // In the plugin process, the callback tracker is always the same, regardless 50 // of the instance. 51 return callback_tracker_.get(); 52} 53 54thunk::PPB_Instance_API* PluginGlobals::GetInstanceAPI(PP_Instance instance) { 55 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); 56 if (dispatcher) 57 return dispatcher->GetInstanceAPI(); 58 return NULL; 59} 60 61thunk::ResourceCreationAPI* PluginGlobals::GetResourceCreationAPI( 62 PP_Instance instance) { 63 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); 64 if (dispatcher) 65 return dispatcher->GetResourceCreationAPI(); 66 return NULL; 67} 68 69PP_Module PluginGlobals::GetModuleForInstance(PP_Instance instance) { 70 // Currently proxied plugins don't use the PP_Module for anything useful. 71 return 0; 72} 73 74std::string PluginGlobals::GetCmdLine() { 75 return command_line_; 76} 77 78void PluginGlobals::PreCacheFontForFlash(const void* logfontw) { 79 plugin_proxy_delegate_->PreCacheFont(logfontw); 80} 81 82base::Lock* PluginGlobals::GetProxyLock() { 83#ifdef ENABLE_PEPPER_THREADING 84 return &proxy_lock_; 85#else 86 return NULL; 87#endif 88} 89 90void PluginGlobals::LogWithSource(PP_Instance instance, 91 PP_LogLevel_Dev level, 92 const std::string& source, 93 const std::string& value) { 94 const std::string& fixed_up_source = source.empty() ? plugin_name_ : source; 95 PluginDispatcher::LogWithSource(instance, level, fixed_up_source, value); 96} 97 98void PluginGlobals::BroadcastLogWithSource(PP_Module /* module */, 99 PP_LogLevel_Dev level, 100 const std::string& source, 101 const std::string& value) { 102 // Since we have only one module in a plugin process, broadcast is always 103 // the same as "send to everybody" which is what the dispatcher implements 104 // for the "instance = 0" case. 105 LogWithSource(0, level, source, value); 106} 107 108MessageLoopShared* PluginGlobals::GetCurrentMessageLoop() { 109 return MessageLoopResource::GetCurrent(); 110} 111 112MessageLoopResource* PluginGlobals::loop_for_main_thread() { 113 return loop_for_main_thread_.get(); 114} 115 116bool PluginGlobals::IsPluginGlobals() const { 117 return true; 118} 119 120} // namespace proxy 121} // namespace ppapi 122