Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / content / renderer / pepper / renderer_ppapi_host_impl.h
bloba30735dc3c4f359b902d9c242dfca4f939086563
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_RENDERER_PPAPI_HOST_IMPL_H_
6 #define CONTENT_RENDERER_PEPPER_RENDERER_PPAPI_HOST_IMPL_H_
8 #include "base/basictypes.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "content/public/renderer/renderer_ppapi_host.h"
11 #include "content/renderer/pepper/content_renderer_pepper_host_factory.h"
12 #include "ppapi/host/ppapi_host.h"
14 namespace IPC {
15 class Sender;
18 namespace ppapi {
20 namespace proxy {
21 class HostDispatcher;
24 namespace thunk {
25 class ResourceCreationAPI;
28 } // namespace ppapi
30 namespace content {
32 class PepperInProcessRouter;
33 class PepperPluginInstanceImpl;
34 class PluginModule;
36 // This class is attached to a PluginModule which manages our lifetime.
37 class RendererPpapiHostImpl : public RendererPpapiHost {
38 public:
39 virtual ~RendererPpapiHostImpl();
41 // Factory functions to create in process or out-of-process host impls. The
42 // host will be created and associated with the given module, which must not
43 // already have embedder state on it.
45 // The module will take ownership of the new host impl. The returned value
46 // does not pass ownership, it's just for the information of the caller.
47 static RendererPpapiHostImpl* CreateOnModuleForOutOfProcess(
48 PluginModule* module,
49 ppapi::proxy::HostDispatcher* dispatcher,
50 const ppapi::PpapiPermissions& permissions);
51 static RendererPpapiHostImpl* CreateOnModuleForInProcess(
52 PluginModule* module,
53 const ppapi::PpapiPermissions& permissions);
55 // Returns the RendererPpapiHostImpl associated with the given PP_Instance,
56 // or NULL if the instance is invalid.
57 static RendererPpapiHostImpl* GetForPPInstance(PP_Instance pp_instance);
59 // Returns the router that we use for in-process IPC emulation (see the
60 // pepper_in_process_router.h for more). This will be NULL when the plugin
61 // is running out-of-process.
62 PepperInProcessRouter* in_process_router() {
63 return in_process_router_.get();
66 // Creates the in-process resource creation API wrapper for the given
67 // plugin instance. This object will reference the host impl, so the
68 // host impl should outlive the returned pointer. Since the resource
69 // creation object is associated with the instance, this will generally
70 // happen automatically.
71 scoped_ptr<ppapi::thunk::ResourceCreationAPI>
72 CreateInProcessResourceCreationAPI(PepperPluginInstanceImpl* instance);
74 PepperPluginInstanceImpl* GetPluginInstanceImpl(PP_Instance instance) const;
76 bool IsExternalPluginHost() const;
78 // RendererPpapiHost implementation.
79 virtual ppapi::host::PpapiHost* GetPpapiHost() OVERRIDE;
80 virtual bool IsValidInstance(PP_Instance instance) const OVERRIDE;
81 virtual PepperPluginInstance* GetPluginInstance(PP_Instance instance) const
82 OVERRIDE;
83 virtual RenderFrame* GetRenderFrameForInstance(PP_Instance instance) const
84 OVERRIDE;
85 virtual RenderView* GetRenderViewForInstance(PP_Instance instance) const
86 OVERRIDE;
87 virtual blink::WebPluginContainer* GetContainerForInstance(
88 PP_Instance instance) const OVERRIDE;
89 virtual base::ProcessId GetPluginPID() const OVERRIDE;
90 virtual bool HasUserGesture(PP_Instance instance) const OVERRIDE;
91 virtual int GetRoutingIDForWidget(PP_Instance instance) const OVERRIDE;
92 virtual gfx::Point PluginPointToRenderFrame(PP_Instance instance,
93 const gfx::Point& pt) const
94 OVERRIDE;
95 virtual IPC::PlatformFileForTransit ShareHandleWithRemote(
96 base::PlatformFile handle,
97 bool should_close_source) OVERRIDE;
98 virtual bool IsRunningInProcess() const OVERRIDE;
99 virtual std::string GetPluginName() const OVERRIDE;
100 virtual void SetToExternalPluginHost() OVERRIDE;
101 virtual void CreateBrowserResourceHosts(
102 PP_Instance instance,
103 const std::vector<IPC::Message>& nested_msgs,
104 const base::Callback<void(const std::vector<int>&)>& callback) const
105 OVERRIDE;
106 virtual GURL GetDocumentURL(PP_Instance instance) const OVERRIDE;
108 private:
109 RendererPpapiHostImpl(PluginModule* module,
110 ppapi::proxy::HostDispatcher* dispatcher,
111 const ppapi::PpapiPermissions& permissions);
112 RendererPpapiHostImpl(PluginModule* module,
113 const ppapi::PpapiPermissions& permissions);
115 // Retrieves the plugin instance object associated with the given PP_Instance
116 // and validates that it is one of the instances associated with our module.
117 // Returns NULL on failure.
119 // We use this to security check the PP_Instance values sent from a plugin to
120 // make sure it's not trying to spoof another instance.
121 PepperPluginInstanceImpl* GetAndValidateInstance(PP_Instance instance) const;
123 PluginModule* module_; // Non-owning pointer.
125 // The dispatcher we use to send messagse when the plugin is out-of-process.
126 // Will be null when running in-process. Non-owning pointer.
127 ppapi::proxy::HostDispatcher* dispatcher_;
129 scoped_ptr<ppapi::host::PpapiHost> ppapi_host_;
131 // Null when running out-of-process.
132 scoped_ptr<PepperInProcessRouter> in_process_router_;
134 // Whether the plugin is running in process.
135 bool is_running_in_process_;
137 // Whether this is a host for external plugins.
138 bool is_external_plugin_host_;
140 DISALLOW_COPY_AND_ASSIGN(RendererPpapiHostImpl);
143 } // namespace content
145 #endif // CONTENT_RENDERER_PEPPER_RENDERER_PPAPI_HOST_IMPL_H_