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_PUBLIC_BROWSER_BROWSER_PPAPI_HOST_H_
6 #define CONTENT_PUBLIC_BROWSER_BROWSER_PPAPI_HOST_H_
8 #include "base/callback_forward.h"
9 #include "base/process/process.h"
10 #include "content/common/content_export.h"
11 #include "content/public/browser/render_view_host.h"
12 #include "ppapi/c/pp_instance.h"
22 class PpapiPermissions
;
30 // Interface that allows components in the embedder app to talk to the
31 // PpapiHost in the browser process.
33 // There will be one of these objects in the browser per plugin process. It
34 // lives entirely on the I/O thread.
35 class CONTENT_EXPORT BrowserPpapiHost
{
37 struct OnKeepaliveInstanceStruct
{
38 int render_process_id
;
42 typedef std::vector
<OnKeepaliveInstanceStruct
> OnKeepaliveInstanceData
;
43 typedef base::Callback
<
44 void (const OnKeepaliveInstanceData
& instance_data
,
45 const base::FilePath
& profile_data_directory
)>
48 // Creates a browser host and sets up an out-of-process proxy for an external
49 // pepper plugin process.
50 static BrowserPpapiHost
* CreateExternalPluginProcess(
52 ppapi::PpapiPermissions permissions
,
53 base::ProcessHandle plugin_child_process
,
54 IPC::ChannelProxy
* channel
,
55 int render_process_id
,
57 const base::FilePath
& profile_directory
);
59 virtual ~BrowserPpapiHost() {}
61 // Returns the PpapiHost object.
62 virtual ppapi::host::PpapiHost
* GetPpapiHost() = 0;
64 // Returns a reference to the plugin process.
65 virtual const base::Process
& GetPluginProcess() const = 0;
67 // Returns true if the given PP_Instance is valid.
68 virtual bool IsValidInstance(PP_Instance instance
) const = 0;
70 // Retrieves the process/frame Ids associated with the RenderFrame containing
71 // the given instance and returns true on success. If the instance is
72 // invalid, the ids will be 0 and false will be returned.
74 // When a resource is created, the PP_Instance should already have been
75 // validated, and the resource hosts will be deleted when the resource is
76 // destroyed. So it should not generally be necessary to check for errors
77 // from this function except as a last-minute sanity check if you convert the
78 // IDs to a RenderFrame/ProcessHost on the UI thread.
79 virtual bool GetRenderFrameIDsForInstance(PP_Instance instance
,
80 int* render_process_id
,
81 int* render_frame_id
) const = 0;
83 // Returns the name of the plugin.
84 virtual const std::string
& GetPluginName() = 0;
86 // Returns the path of the plugin.
87 virtual const base::FilePath
& GetPluginPath() = 0;
89 // Returns the user's profile data directory.
90 virtual const base::FilePath
& GetProfileDataDirectory() = 0;
92 // Get the Document/Plugin URLs for the given PP_Instance.
93 virtual GURL
GetDocumentURLForInstance(PP_Instance instance
) = 0;
94 virtual GURL
GetPluginURLForInstance(PP_Instance instance
) = 0;
96 // Sets a callback the BrowserPpapiHost will run when the plugin messages
98 virtual void SetOnKeepaliveCallback(const OnKeepaliveCallback
& callback
) = 0;
101 } // namespace content
103 #endif // CONTENT_PUBLIC_BROWSER_BROWSER_PPAPI_HOST_H_