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 // Creates a browser host and sets up an out-of-process proxy for an external 38 // pepper plugin process. 39 static BrowserPpapiHost* CreateExternalPluginProcess( 40 IPC::Sender* sender, 41 ppapi::PpapiPermissions permissions, 42 base::ProcessHandle plugin_child_process, 43 IPC::ChannelProxy* channel, 44 int render_process_id, 45 int render_view_id, 46 const base::FilePath& profile_directory); 47 ~BrowserPpapiHost()48 virtual ~BrowserPpapiHost() {} 49 50 // Returns the PpapiHost object. 51 virtual ppapi::host::PpapiHost* GetPpapiHost() = 0; 52 53 // Returns the handle to the plugin process. 54 virtual base::ProcessHandle GetPluginProcessHandle() const = 0; 55 56 // Returns true if the given PP_Instance is valid. 57 virtual bool IsValidInstance(PP_Instance instance) const = 0; 58 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. 62 // 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; 71 72 // Returns the name of the plugin. 73 virtual const std::string& GetPluginName() = 0; 74 75 // Returns the path of the plugin. 76 virtual const base::FilePath& GetPluginPath() = 0; 77 78 // Returns the user's profile data directory. 79 virtual const base::FilePath& GetProfileDataDirectory() = 0; 80 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; 84 }; 85 86 } // namespace content 87 88 #endif // CONTENT_PUBLIC_BROWSER_BROWSER_PPAPI_HOST_H_ 89