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.
5 #ifndef CONTENT_RENDERER_PEPPER_HOST_GLOBALS_H_
6 #define CONTENT_RENDERER_PEPPER_HOST_GLOBALS_H_
8 #include "base/compiler_specific.h"
9 #include "content/renderer/pepper/host_var_tracker.h"
10 #include "ppapi/shared_impl/callback_tracker.h"
11 #include "ppapi/shared_impl/ppapi_globals.h"
12 #include "ppapi/shared_impl/resource_tracker.h"
13 #include "ppapi/shared_impl/var_tracker.h"
17 class PepperPluginInstanceImpl
;
20 class HostGlobals
: public ppapi::PpapiGlobals
{
23 virtual ~HostGlobals();
25 // Getter for the global singleton. Generally, you should use
26 // PpapiGlobals::Get() when possible. Use this only when you need some
27 // host-specific functionality.
28 inline static HostGlobals
* Get() {
29 DCHECK(PpapiGlobals::Get()->IsHostGlobals());
30 return static_cast<HostGlobals
*>(PpapiGlobals::Get());
33 // PpapiGlobals implementation.
34 virtual ppapi::ResourceTracker
* GetResourceTracker() override
;
35 virtual ppapi::VarTracker
* GetVarTracker() override
;
36 virtual ppapi::CallbackTracker
* GetCallbackTrackerForInstance(
37 PP_Instance instance
) override
;
38 virtual ppapi::thunk::PPB_Instance_API
* GetInstanceAPI(PP_Instance instance
)
40 virtual ppapi::thunk::ResourceCreationAPI
* GetResourceCreationAPI(
41 PP_Instance instance
) override
;
42 virtual PP_Module
GetModuleForInstance(PP_Instance instance
) override
;
43 virtual std::string
GetCmdLine() override
;
44 virtual void PreCacheFontForFlash(const void* logfontw
) override
;
45 virtual void LogWithSource(PP_Instance instance
,
47 const std::string
& source
,
48 const std::string
& value
) override
;
49 virtual void BroadcastLogWithSource(PP_Module module
,
51 const std::string
& source
,
52 const std::string
& value
) override
;
53 virtual ppapi::MessageLoopShared
* GetCurrentMessageLoop() override
;
54 virtual base::TaskRunner
* GetFileTaskRunner() override
;
56 HostVarTracker
* host_var_tracker() { return &host_var_tracker_
; }
58 // PP_Modules ----------------------------------------------------------------
60 // Adds a new plugin module to the list of tracked module, and returns a new
61 // module handle to identify it.
62 PP_Module
AddModule(PluginModule
* module
);
64 // Called when a plugin modulde was deleted and should no longer be tracked.
65 // The given handle should be one generated by AddModule.
66 void ModuleDeleted(PP_Module module
);
68 // Returns a pointer to the plugin modulde object associated with the given
69 // modulde handle. The return value will be NULL if the handle is invalid.
70 PluginModule
* GetModule(PP_Module module
);
72 // PP_Instances --------------------------------------------------------------
74 // Adds a new plugin instance to the list of tracked instances, and returns a
75 // new instance handle to identify it.
76 PP_Instance
AddInstance(PepperPluginInstanceImpl
* instance
);
78 // Called when a plugin instance was deleted and should no longer be tracked.
79 // The given handle should be one generated by AddInstance.
80 void InstanceDeleted(PP_Instance instance
);
82 void InstanceCrashed(PP_Instance instance
);
84 // Returns a pointer to the plugin instance object associated with the given
85 // instance handle. The return value will be NULL if the handle is invalid or
86 // if the instance has crashed.
87 PepperPluginInstanceImpl
* GetInstance(PP_Instance instance
);
90 // PpapiGlobals overrides.
91 virtual bool IsHostGlobals() const override
;
93 static HostGlobals
* host_globals_
;
95 ppapi::ResourceTracker resource_tracker_
;
96 HostVarTracker host_var_tracker_
;
98 // Tracks all live instances and their associated object.
99 typedef std::map
<PP_Instance
, PepperPluginInstanceImpl
*> InstanceMap
;
100 InstanceMap instance_map_
;
102 // Tracks all live modules. The pointers are non-owning, the PluginModule
103 // destructor will notify us when the module is deleted.
104 typedef std::map
<PP_Module
, PluginModule
*> ModuleMap
;
105 ModuleMap module_map_
;
107 DISALLOW_COPY_AND_ASSIGN(HostGlobals
);
110 } // namespace content
112 #endif // CONTENT_RENDERER_PEPPER_HOST_GLOBALS_H_