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_CHILD_NPAPI_WEBPLUGIN_H_ 6 #define CONTENT_CHILD_NPAPI_WEBPLUGIN_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "ui/gfx/native_widget_types.h" 13 #include "ui/gfx/rect.h" 14 #include "ui/gl/gpu_preference.h" 15 16 // TODO(port): this typedef is obviously incorrect on non-Windows 17 // platforms, but now a lot of code now accidentally depends on them 18 // existing. #ifdef out these declarations and fix all the users. 19 typedef void* HANDLE; 20 21 class GURL; 22 struct NPObject; 23 24 namespace content { 25 26 class WebPluginResourceClient; 27 #if defined(OS_MACOSX) 28 class WebPluginAcceleratedSurface; 29 #endif 30 31 // The WebKit side of a plugin implementation. It provides wrappers around 32 // operations that need to interact with the frame and other WebCore objects. 33 class WebPlugin { 34 public: ~WebPlugin()35 virtual ~WebPlugin() {} 36 37 // Called by the plugin delegate to let the WebPlugin know if the plugin is 38 // windowed (i.e. handle is not NULL) or windowless (handle is NULL). This 39 // tells the WebPlugin to send mouse/keyboard events to the plugin delegate, 40 // as well as the information about the HDC for paint operations. 41 virtual void SetWindow(gfx::PluginWindowHandle window) = 0; 42 43 // Whether input events should be sent to the delegate. 44 virtual void SetAcceptsInputEvents(bool accepts) = 0; 45 46 // Called by the plugin delegate to let it know that the window is being 47 // destroyed. 48 virtual void WillDestroyWindow(gfx::PluginWindowHandle window) = 0; 49 50 // Cancels a pending request. 51 virtual void CancelResource(unsigned long id) = 0; 52 virtual void Invalidate() = 0; 53 virtual void InvalidateRect(const gfx::Rect& rect) = 0; 54 55 // Returns the NPObject for the browser's window object. Does not 56 // take a reference. 57 virtual NPObject* GetWindowScriptNPObject() = 0; 58 59 // Returns the DOM element that loaded the plugin. Does not take a 60 // reference. 61 virtual NPObject* GetPluginElement() = 0; 62 63 // Resolves the proxies for the url, returns true on success. 64 virtual bool FindProxyForUrl(const GURL& url, std::string* proxy_list) = 0; 65 66 // Cookies 67 virtual void SetCookie(const GURL& url, 68 const GURL& first_party_for_cookies, 69 const std::string& cookie) = 0; 70 virtual std::string GetCookies(const GURL& url, 71 const GURL& first_party_for_cookies) = 0; 72 73 // Handles GetURL/GetURLNotify/PostURL/PostURLNotify requests initiated 74 // by plugins. If the plugin wants notification of the result, notify_id will 75 // be non-zero. 76 virtual void HandleURLRequest(const char* url, 77 const char* method, 78 const char* target, 79 const char* buf, 80 unsigned int len, 81 int notify_id, 82 bool popups_allowed, 83 bool notify_redirects) = 0; 84 85 // Cancels document load. 86 virtual void CancelDocumentLoad() = 0; 87 88 // Initiates a HTTP range request for an existing stream. 89 virtual void InitiateHTTPRangeRequest(const char* url, 90 const char* range_info, 91 int range_request_id) = 0; 92 93 virtual void DidStartLoading() = 0; 94 virtual void DidStopLoading() = 0; 95 96 // Returns true iff in incognito mode. 97 virtual bool IsOffTheRecord() = 0; 98 99 // Called when the WebPluginResourceClient instance is deleted. ResourceClientDeleted(WebPluginResourceClient * resource_client)100 virtual void ResourceClientDeleted( 101 WebPluginResourceClient* resource_client) {} 102 103 // Defers the loading of the resource identified by resource_id. This is 104 // controlled by the defer parameter. 105 virtual void SetDeferResourceLoading(unsigned long resource_id, 106 bool defer) = 0; 107 108 // Handles NPN_URLRedirectResponse calls issued by plugins in response to 109 // HTTP URL redirect notifications. 110 virtual void URLRedirectResponse(bool allow, int resource_id) = 0; 111 112 // Returns true if the new url is a secure transition. This is to catch a 113 // plugin src url transitioning from https to http. 114 virtual bool CheckIfRunInsecureContent(const GURL& url) = 0; 115 116 #if defined(OS_WIN) 117 // |pump_messages_event| is a event handle which is used in NPP_HandleEvent 118 // calls to pump messages if the plugin enters a modal loop. 119 // |dummy_activation_window} is used to ensure correct keyboard activation. 120 // It needs to be a child of the parent window. 121 virtual void SetWindowlessData(HANDLE pump_messages_event, 122 gfx::NativeViewId dummy_activation_window) = 0; 123 #endif 124 125 #if defined(OS_MACOSX) 126 // Called to inform the WebPlugin that the plugin has gained or lost focus. FocusChanged(bool focused)127 virtual void FocusChanged(bool focused) {} 128 129 // Starts plugin IME. StartIme()130 virtual void StartIme() {} 131 132 // Returns the accelerated surface abstraction for accelerated plugins. 133 virtual WebPluginAcceleratedSurface* GetAcceleratedSurface( 134 gfx::GpuPreference gpu_preference) = 0; 135 136 // Core Animation plugin support. CA plugins always render through 137 // the compositor. 138 virtual void AcceleratedPluginEnabledRendering() = 0; 139 virtual void AcceleratedPluginAllocatedIOSurface(int32 width, 140 int32 height, 141 uint32 surface_id) = 0; 142 virtual void AcceleratedPluginSwappedIOSurface() = 0; 143 #endif 144 }; 145 146 } // namespace content 147 148 #endif // CONTENT_CHILD_NPAPI_WEBPLUGIN_H_ 149