browser_ppapi_host.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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.
4
5#ifndef CONTENT_PUBLIC_BROWSER_BROWSER_PPAPI_HOST_H_
6#define CONTENT_PUBLIC_BROWSER_BROWSER_PPAPI_HOST_H_
7
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"
13#include "url/gurl.h"
14
15namespace IPC {
16class ChannelProxy;
17struct ChannelHandle;
18class Sender;
19}
20
21namespace ppapi {
22class PpapiPermissions;
23namespace host {
24class PpapiHost;
25}
26}
27
28namespace content {
29
30// Interface that allows components in the embedder app to talk to the
31// PpapiHost in the browser process.
32//
33// There will be one of these objects in the browser per plugin process. It
34// lives entirely on the I/O thread.
35class CONTENT_EXPORT BrowserPpapiHost {
36 public:
37  struct OnKeepaliveInstanceStruct {
38    int render_process_id;
39    int render_frame_id;
40    GURL document_url;
41  };
42  typedef std::vector<OnKeepaliveInstanceStruct> OnKeepaliveInstanceData;
43  typedef base::Callback<
44      void (const OnKeepaliveInstanceData& instance_data,
45            const base::FilePath& profile_data_directory)>
46      OnKeepaliveCallback;
47
48  // Creates a browser host and sets up an out-of-process proxy for an external
49  // pepper plugin process.
50  static BrowserPpapiHost* CreateExternalPluginProcess(
51      IPC::Sender* sender,
52      ppapi::PpapiPermissions permissions,
53      base::ProcessHandle plugin_child_process,
54      IPC::ChannelProxy* channel,
55      int render_process_id,
56      int render_view_id,
57      const base::FilePath& profile_directory);
58
59  virtual ~BrowserPpapiHost() {}
60
61  // Returns the PpapiHost object.
62  virtual ppapi::host::PpapiHost* GetPpapiHost() = 0;
63
64  // Returns the handle to the plugin process.
65  virtual base::ProcessHandle GetPluginProcessHandle() const = 0;
66
67  // Returns true if the given PP_Instance is valid.
68  virtual bool IsValidInstance(PP_Instance instance) const = 0;
69
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.
73  //
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;
82
83  // Returns the name of the plugin.
84  virtual const std::string& GetPluginName() = 0;
85
86  // Returns the path of the plugin.
87  virtual const base::FilePath& GetPluginPath() = 0;
88
89  // Returns the user's profile data directory.
90  virtual const base::FilePath& GetProfileDataDirectory() = 0;
91
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;
95
96  // Sets a callback the BrowserPpapiHost will run when the plugin messages
97  // that it is active.
98  virtual void SetOnKeepaliveCallback(const OnKeepaliveCallback& callback) = 0;
99};
100
101}  // namespace content
102
103#endif  // CONTENT_PUBLIC_BROWSER_BROWSER_PPAPI_HOST_H_
104