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