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. 19typedef void* HANDLE; 20 21class GURL; 22struct NPObject; 23 24namespace content { 25 26class WebPluginResourceClient; 27#if defined(OS_MACOSX) 28class 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. 33class WebPlugin { 34 public: 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#if defined(OS_WIN) 50 // |pump_messages_event| is a event handle which is used in NPP_HandleEvent 51 // calls to pump messages if the plugin enters a modal loop. 52 // |dummy_activation_window} is used to ensure correct keyboard activation. 53 // It needs to be a child of the parent window. 54 virtual void SetWindowlessData(HANDLE pump_messages_event, 55 gfx::NativeViewId dummy_activation_window) = 0; 56#endif 57 // Cancels a pending request. 58 virtual void CancelResource(unsigned long id) = 0; 59 virtual void Invalidate() = 0; 60 virtual void InvalidateRect(const gfx::Rect& rect) = 0; 61 62 // Returns the NPObject for the browser's window object. Does not 63 // take a reference. 64 virtual NPObject* GetWindowScriptNPObject() = 0; 65 66 // Returns the DOM element that loaded the plugin. Does not take a 67 // reference. 68 virtual NPObject* GetPluginElement() = 0; 69 70 // Resolves the proxies for the url, returns true on success. 71 virtual bool FindProxyForUrl(const GURL& url, std::string* proxy_list) = 0; 72 73 // Cookies 74 virtual void SetCookie(const GURL& url, 75 const GURL& first_party_for_cookies, 76 const std::string& cookie) = 0; 77 virtual std::string GetCookies(const GURL& url, 78 const GURL& first_party_for_cookies) = 0; 79 80 // Handles GetURL/GetURLNotify/PostURL/PostURLNotify requests initiated 81 // by plugins. If the plugin wants notification of the result, notify_id will 82 // be non-zero. 83 virtual void HandleURLRequest(const char* url, 84 const char* method, 85 const char* target, 86 const char* buf, 87 unsigned int len, 88 int notify_id, 89 bool popups_allowed, 90 bool notify_redirects) = 0; 91 92 // Cancels document load. 93 virtual void CancelDocumentLoad() = 0; 94 95 // Initiates a HTTP range request for an existing stream. 96 virtual void InitiateHTTPRangeRequest(const char* url, 97 const char* range_info, 98 int range_request_id) = 0; 99 100 // Returns true iff in incognito mode. 101 virtual bool IsOffTheRecord() = 0; 102 103 // Called when the WebPluginResourceClient instance is deleted. 104 virtual void ResourceClientDeleted( 105 WebPluginResourceClient* resource_client) {} 106 107 // Defers the loading of the resource identified by resource_id. This is 108 // controlled by the defer parameter. 109 virtual void SetDeferResourceLoading(unsigned long resource_id, 110 bool defer) = 0; 111 112#if defined(OS_MACOSX) 113 // Called to inform the WebPlugin that the plugin has gained or lost focus. 114 virtual void FocusChanged(bool focused) {} 115 116 // Starts plugin IME. 117 virtual void StartIme() {} 118 119 // Returns the accelerated surface abstraction for accelerated plugins. 120 virtual WebPluginAcceleratedSurface* GetAcceleratedSurface( 121 gfx::GpuPreference gpu_preference) = 0; 122 123 // Core Animation plugin support. CA plugins always render through 124 // the compositor. 125 virtual void AcceleratedPluginEnabledRendering() = 0; 126 virtual void AcceleratedPluginAllocatedIOSurface(int32 width, 127 int32 height, 128 uint32 surface_id) = 0; 129 virtual void AcceleratedPluginSwappedIOSurface() = 0; 130#endif 131 132 // Handles NPN_URLRedirectResponse calls issued by plugins in response to 133 // HTTP URL redirect notifications. 134 virtual void URLRedirectResponse(bool allow, int resource_id) = 0; 135}; 136 137// Simpler version of ResourceHandleClient that lends itself to proxying. 138class WebPluginResourceClient { 139 public: 140 virtual ~WebPluginResourceClient() {} 141 142 virtual void WillSendRequest(const GURL& url, int http_status_code) = 0; 143 // The request_is_seekable parameter indicates whether byte range requests 144 // can be issued for the underlying stream. 145 virtual void DidReceiveResponse(const std::string& mime_type, 146 const std::string& headers, 147 uint32 expected_length, 148 uint32 last_modified, 149 bool request_is_seekable) = 0; 150 virtual void DidReceiveData(const char* buffer, int length, 151 int data_offset) = 0; 152 // The resource ids passed here ensures that data for range requests 153 // is cleared. This applies for seekable streams. 154 virtual void DidFinishLoading(unsigned long resource_id) = 0; 155 virtual void DidFail(unsigned long resource_id) = 0; 156 virtual bool IsMultiByteResponseExpected() = 0; 157 virtual int ResourceId() = 0; 158 // Tells this object that it will get responses from multiple resources. 159 // This is necessary since the plugin process uses a single instance of 160 // PluginStreamUrl object for multiple range requests. 161 virtual void AddRangeRequestResourceId(unsigned long resource_id) { } 162}; 163 164} // namespace content 165 166#endif // CONTENT_CHILD_NPAPI_WEBPLUGIN_H_ 167