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 15 namespace IPC { 16 class ChannelProxy; 17 struct ChannelHandle; 18 class Sender; 19 } 20 21 namespace ppapi { 22 class PpapiPermissions; 23 namespace host { 24 class PpapiHost; 25 } 26 } 27 28 namespace 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. 35 class 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 ~BrowserPpapiHost()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