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 // Creates a browser host and sets up an out-of-process proxy for an external
38 // pepper plugin process.
39 static BrowserPpapiHost* CreateExternalPluginProcess(
41 ppapi::PpapiPermissions permissions,
42 base::ProcessHandle plugin_child_process,
43 IPC::ChannelProxy* channel,
44 int render_process_id,
46 const base::FilePath& profile_directory);
48 virtual ~BrowserPpapiHost() {}
50 // Returns the PpapiHost object.
51 virtual ppapi::host::PpapiHost* GetPpapiHost() = 0;
53 // Returns the handle to the plugin process.
54 virtual base::ProcessHandle GetPluginProcessHandle() const = 0;
56 // Returns true if the given PP_Instance is valid.
57 virtual bool IsValidInstance(PP_Instance instance) const = 0;
59 // Retrieves the process/view Ids associated with the RenderView containing
60 // the given instance and returns true on success. If the instance is
61 // invalid, the ids will be 0 and false will be returned.
63 // When a resource is created, the PP_Instance should already have been
64 // validated, and the resource hosts will be deleted when the resource is
65 // destroyed. So it should not generally be necessary to check for errors
66 // from this function except as a last-minute sanity check if you convert the
67 // IDs to a RenderView/ProcessHost on the UI thread.
68 virtual bool GetRenderViewIDsForInstance(PP_Instance instance,
69 int* render_process_id,
70 int* render_view_id) const = 0;
72 // Returns the name of the plugin.
73 virtual const std::string& GetPluginName() = 0;
75 // Returns the path of the plugin.
76 virtual const base::FilePath& GetPluginPath() = 0;
78 // Returns the user's profile data directory.
79 virtual const base::FilePath& GetProfileDataDirectory() = 0;
81 // Get the Document/Plugin URLs for the given PP_Instance.
82 virtual GURL GetDocumentURLForInstance(PP_Instance instance) = 0;
83 virtual GURL GetPluginURLForInstance(PP_Instance instance) = 0;
86 } // namespace content
88 #endif // CONTENT_PUBLIC_BROWSER_BROWSER_PPAPI_HOST_H_