15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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#ifndef CONTENT_RENDERER_PEPPER_HOST_GLOBALS_H_ 6bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#define CONTENT_RENDERER_PEPPER_HOST_GLOBALS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 9bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/host_var_tracker.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/callback_tracker.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_globals.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/resource_tracker.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/var_tracker.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass PepperPluginInstanceImpl; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginModule; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass HostGlobals : public ppapi::PpapiGlobals { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostGlobals(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~HostGlobals(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Getter for the global singleton. Generally, you should use 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PpapiGlobals::Get() when possible. Use this only when you need some 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // host-specific functionality. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline static HostGlobals* Get() { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(PpapiGlobals::Get()->IsHostGlobals()); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<HostGlobals*>(PpapiGlobals::Get()); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PpapiGlobals implementation. 34ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual ppapi::ResourceTracker* GetResourceTracker() OVERRIDE; 35ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual ppapi::VarTracker* GetVarTracker() OVERRIDE; 36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual ppapi::CallbackTracker* GetCallbackTrackerForInstance( 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance) OVERRIDE; 38ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual ppapi::thunk::PPB_Instance_API* GetInstanceAPI( 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance) OVERRIDE; 40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual ppapi::thunk::ResourceCreationAPI* GetResourceCreationAPI( 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance) OVERRIDE; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual PP_Module GetModuleForInstance(PP_Instance instance) OVERRIDE; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetCmdLine() OVERRIDE; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PreCacheFontForFlash(const void* logfontw) OVERRIDE; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void LogWithSource(PP_Instance instance, 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_LogLevel level, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& source, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) OVERRIDE; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BroadcastLogWithSource(PP_Module module, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PP_LogLevel level, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& source, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) OVERRIDE; 53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual ppapi::MessageLoopShared* GetCurrentMessageLoop() OVERRIDE; 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual base::TaskRunner* GetFileTaskRunner() OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostVarTracker* host_var_tracker() { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return &host_var_tracker_; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PP_Modules ---------------------------------------------------------------- 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a new plugin module to the list of tracked module, and returns a new 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // module handle to identify it. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Module AddModule(PluginModule* module); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a plugin modulde was deleted and should no longer be tracked. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The given handle should be one generated by AddModule. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ModuleDeleted(PP_Module module); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a pointer to the plugin modulde object associated with the given 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // modulde handle. The return value will be NULL if the handle is invalid. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginModule* GetModule(PP_Module module); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PP_Instances -------------------------------------------------------------- 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a new plugin instance to the list of tracked instances, and returns a 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // new instance handle to identify it. 7858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch PP_Instance AddInstance(PepperPluginInstanceImpl* instance); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when a plugin instance was deleted and should no longer be tracked. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The given handle should be one generated by AddInstance. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InstanceDeleted(PP_Instance instance); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InstanceCrashed(PP_Instance instance); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a pointer to the plugin instance object associated with the given 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // instance handle. The return value will be NULL if the handle is invalid or 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if the instance has crashed. 8958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch PepperPluginInstanceImpl* GetInstance(PP_Instance instance); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PpapiGlobals overrides. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsHostGlobals() const OVERRIDE; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch static HostGlobals* host_globals_; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ppapi::ResourceTracker resource_tracker_; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostVarTracker host_var_tracker_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tracks all live instances and their associated object. 10158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch typedef std::map<PP_Instance, PepperPluginInstanceImpl*> InstanceMap; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstanceMap instance_map_; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tracks all live modules. The pointers are non-owning, the PluginModule 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // destructor will notify us when the module is deleted. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<PP_Module, PluginModule*> ModuleMap; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ModuleMap module_map_; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(HostGlobals); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} // namespace content 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 114bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#endif // CONTENT_RENDERER_PEPPER_HOST_GLOBALS_H_ 115