OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_RENDERER_NPAPI_WEBPLUGIN_IMPL_H_ | 5 #ifndef CONTENT_RENDERER_NPAPI_WEBPLUGIN_IMPL_H_ |
6 #define CONTENT_RENDERER_NPAPI_WEBPLUGIN_IMPL_H_ | 6 #define CONTENT_RENDERER_NPAPI_WEBPLUGIN_IMPL_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
11 #include <map> | 11 #include <map> |
12 #include <string> | 12 #include <string> |
13 #include <vector> | 13 #include <vector> |
14 | 14 |
15 #include "base/files/file_path.h" | 15 #include "base/files/file_path.h" |
16 #include "base/macros.h" | 16 #include "base/macros.h" |
17 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
18 #include "base/memory/weak_ptr.h" | 18 #include "base/memory/weak_ptr.h" |
19 #include "build/build_config.h" | 19 #include "build/build_config.h" |
20 #include "content/child/npapi/webplugin.h" | 20 #include "content/child/npapi/webplugin.h" |
21 #include "content/common/content_export.h" | 21 #include "content/common/content_export.h" |
22 #include "content/common/webplugin_geometry.h" | 22 #include "content/common/webplugin_geometry.h" |
23 #include "third_party/WebKit/public/platform/WebRect.h" | 23 #include "third_party/WebKit/public/platform/WebRect.h" |
24 #include "third_party/WebKit/public/platform/WebString.h" | 24 #include "third_party/WebKit/public/platform/WebString.h" |
25 #include "third_party/WebKit/public/platform/WebURLLoaderClient.h" | |
26 #include "third_party/WebKit/public/platform/WebURLRequest.h" | 25 #include "third_party/WebKit/public/platform/WebURLRequest.h" |
27 #include "third_party/WebKit/public/platform/WebVector.h" | 26 #include "third_party/WebKit/public/platform/WebVector.h" |
28 #include "third_party/WebKit/public/web/WebPlugin.h" | 27 #include "third_party/WebKit/public/web/WebPlugin.h" |
29 #include "ui/gfx/native_widget_types.h" | 28 #include "ui/gfx/native_widget_types.h" |
30 #include "url/gurl.h" | 29 #include "url/gurl.h" |
31 | 30 |
32 namespace cc { | 31 namespace cc { |
33 class IOSurfaceLayer; | 32 class IOSurfaceLayer; |
34 } | 33 } |
35 | 34 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 void didReceiveResponse(const blink::WebURLResponse& response) override {} | 92 void didReceiveResponse(const blink::WebURLResponse& response) override {} |
94 void didReceiveData(const char* data, int data_length) override {} | 93 void didReceiveData(const char* data, int data_length) override {} |
95 void didFinishLoading() override {} | 94 void didFinishLoading() override {} |
96 void didFailLoading(const blink::WebURLError& error) override {} | 95 void didFailLoading(const blink::WebURLError& error) override {} |
97 bool isPlaceholder() override; | 96 bool isPlaceholder() override; |
98 | 97 |
99 // WebPlugin implementation: | 98 // WebPlugin implementation: |
100 void SetWindow(gfx::PluginWindowHandle window) override; | 99 void SetWindow(gfx::PluginWindowHandle window) override; |
101 void SetAcceptsInputEvents(bool accepts) override; | 100 void SetAcceptsInputEvents(bool accepts) override; |
102 void WillDestroyWindow(gfx::PluginWindowHandle window) override; | 101 void WillDestroyWindow(gfx::PluginWindowHandle window) override; |
103 void CancelResource(unsigned long id) override; | |
104 void Invalidate() override; | 102 void Invalidate() override; |
105 void InvalidateRect(const gfx::Rect& rect) override; | 103 void InvalidateRect(const gfx::Rect& rect) override; |
106 NPObject* GetWindowScriptNPObject() override; | 104 NPObject* GetWindowScriptNPObject() override; |
107 NPObject* GetPluginElement() override; | 105 NPObject* GetPluginElement() override; |
108 bool FindProxyForUrl(const GURL& url, std::string* proxy_list) override; | 106 bool FindProxyForUrl(const GURL& url, std::string* proxy_list) override; |
109 void SetCookie(const GURL& url, | 107 void SetCookie(const GURL& url, |
110 const GURL& first_party_for_cookies, | 108 const GURL& first_party_for_cookies, |
111 const std::string& cookie) override; | 109 const std::string& cookie) override; |
112 std::string GetCookies(const GURL& url, | 110 std::string GetCookies(const GURL& url, |
113 const GURL& first_party_for_cookies) override; | 111 const GURL& first_party_for_cookies) override; |
114 void CancelDocumentLoad() override; | 112 void CancelDocumentLoad() override; |
115 void DidStartLoading() override; | 113 void DidStartLoading() override; |
116 void DidStopLoading() override; | 114 void DidStopLoading() override; |
117 bool IsOffTheRecord() override; | 115 bool IsOffTheRecord() override; |
118 void SetDeferResourceLoading(unsigned long resource_id, bool defer) override; | |
119 void URLRedirectResponse(bool allow, int resource_id) override; | |
120 #if defined(OS_WIN) | 116 #if defined(OS_WIN) |
121 void SetWindowlessData(HANDLE pump_messages_event, | 117 void SetWindowlessData(HANDLE pump_messages_event, |
122 gfx::NativeViewId dummy_activation_window) override {} | 118 gfx::NativeViewId dummy_activation_window) override {} |
123 void ReparentPluginWindow(HWND window, HWND parent) { } | 119 void ReparentPluginWindow(HWND window, HWND parent) { } |
124 void ReportExecutableMemory(size_t size) { } | 120 void ReportExecutableMemory(size_t size) { } |
125 #endif | 121 #endif |
126 #if defined(OS_MACOSX) | 122 #if defined(OS_MACOSX) |
127 WebPluginAcceleratedSurface* GetAcceleratedSurface( | 123 WebPluginAcceleratedSurface* GetAcceleratedSurface( |
128 gfx::GpuPreference gpu_preference) override; | 124 gfx::GpuPreference gpu_preference) override; |
129 void AcceleratedPluginEnabledRendering() override; | 125 void AcceleratedPluginEnabledRendering() override; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 gfx::Rect GetWindowClipRect(const gfx::Rect& rect); | 167 gfx::Rect GetWindowClipRect(const gfx::Rect& rect); |
172 | 168 |
173 // Sets the actual Widget for the plugin. | 169 // Sets the actual Widget for the plugin. |
174 void SetContainer(blink::WebPluginContainer* container); | 170 void SetContainer(blink::WebPluginContainer* container); |
175 | 171 |
176 // Destroys the plugin instance. | 172 // Destroys the plugin instance. |
177 // The response_handle_to_ignore parameter if not NULL indicates the | 173 // The response_handle_to_ignore parameter if not NULL indicates the |
178 // resource handle to be left valid during plugin shutdown. | 174 // resource handle to be left valid during plugin shutdown. |
179 void TearDownPluginInstance(blink::WebURLLoader* loader_to_ignore); | 175 void TearDownPluginInstance(blink::WebURLLoader* loader_to_ignore); |
180 | 176 |
181 // WebURLLoaderClient implementation. We implement this interface in the | |
182 // renderer process, and then use the simple WebPluginResourceClient interface | |
183 // to relay the callbacks to the plugin. | |
184 void willFollowRedirect(blink::WebURLLoader* loader, | |
185 blink::WebURLRequest& new_request, | |
186 const blink::WebURLResponse& response); | |
187 void didSendData(blink::WebURLLoader* loader, | |
188 unsigned long long bytes_sent, | |
189 unsigned long long total_bytes_to_be_sent); | |
190 void didReceiveResponse(blink::WebURLLoader* loader, | |
191 const blink::WebURLResponse& response); | |
192 | |
193 void didReceiveData(blink::WebURLLoader* loader, const char *buffer, | |
194 int data_length, int encoded_data_length); | |
195 void didFinishLoading(blink::WebURLLoader* loader, | |
196 double finishTime); | |
197 void didFail(blink::WebURLLoader* loader, | |
198 const blink::WebURLError& error); | |
199 | |
200 // Helper function to remove the stored information about a resource | |
201 // request given its index in m_clients. | |
202 void RemoveClient(size_t i); | |
203 | |
204 // Helper function to remove the stored information about a resource | |
205 // request given a handle. | |
206 void RemoveClient(blink::WebURLLoader* loader); | |
207 | |
208 // Handles HTTP multipart responses, i.e. responses received with a HTTP | |
209 // status code of 206. | |
210 // Returns false if response is not multipart (may be if we requested | |
211 // single range). | |
212 bool HandleHttpMultipartResponse(const blink::WebURLResponse& response, | |
213 WebPluginResourceClient* client); | |
214 | |
215 // Tears down the existing plugin instance and creates a new plugin instance | 177 // Tears down the existing plugin instance and creates a new plugin instance |
216 // to handle the response identified by the loader parameter. | 178 // to handle the response identified by the loader parameter. |
217 bool ReinitializePluginForResponse(blink::WebURLLoader* loader); | 179 bool ReinitializePluginForResponse(blink::WebURLLoader* loader); |
218 | 180 |
219 struct ClientInfo; | |
220 | |
221 // Helper functions | |
222 WebPluginResourceClient* GetClientFromLoader(blink::WebURLLoader* loader); | |
223 ClientInfo* GetClientInfoFromLoader(blink::WebURLLoader* loader); | |
224 | 181 |
225 // Helper function to set the referrer on the request passed in. | 182 // Helper function to set the referrer on the request passed in. |
226 void SetReferrer(blink::WebURLRequest* request, ReferrerValue referrer_flag); | 183 void SetReferrer(blink::WebURLRequest* request, ReferrerValue referrer_flag); |
227 | 184 |
228 // Check for invalid chars like @, ;, \ before the first / (in path). | 185 // Check for invalid chars like @, ;, \ before the first / (in path). |
229 bool IsValidUrl(const GURL& url, ReferrerValue referrer_flag); | 186 bool IsValidUrl(const GURL& url, ReferrerValue referrer_flag); |
230 | 187 |
231 std::vector<ClientInfo> clients_; | |
232 | |
233 bool windowless_; | 188 bool windowless_; |
234 gfx::PluginWindowHandle window_; | 189 gfx::PluginWindowHandle window_; |
235 #if defined(OS_MACOSX) | 190 #if defined(OS_MACOSX) |
236 bool next_io_surface_allocated_; | 191 bool next_io_surface_allocated_; |
237 int32_t next_io_surface_width_; | 192 int32_t next_io_surface_width_; |
238 int32_t next_io_surface_height_; | 193 int32_t next_io_surface_height_; |
239 uint32_t next_io_surface_id_; | 194 uint32_t next_io_surface_id_; |
240 scoped_refptr<cc::IOSurfaceLayer> io_surface_layer_; | 195 scoped_refptr<cc::IOSurfaceLayer> io_surface_layer_; |
241 scoped_ptr<blink::WebLayer> web_layer_; | 196 scoped_ptr<blink::WebLayer> web_layer_; |
242 #endif | 197 #endif |
243 bool accepts_input_events_; | 198 bool accepts_input_events_; |
244 RenderFrameImpl* render_frame_; | 199 RenderFrameImpl* render_frame_; |
245 base::WeakPtr<RenderViewImpl> render_view_; | 200 base::WeakPtr<RenderViewImpl> render_view_; |
246 blink::WebFrame* webframe_; | 201 blink::WebFrame* webframe_; |
247 | 202 |
248 WebPluginDelegateProxy* delegate_; | 203 WebPluginDelegateProxy* delegate_; |
249 | 204 |
250 // This is just a weak reference. | 205 // This is just a weak reference. |
251 blink::WebPluginContainer* container_; | 206 blink::WebPluginContainer* container_; |
252 | 207 |
253 // Unique identifier for this plugin, used to track script objects. | 208 // Unique identifier for this plugin, used to track script objects. |
254 struct _NPP* npp_; | 209 struct _NPP* npp_; |
255 | 210 |
256 typedef std::map<WebPluginResourceClient*, MultipartResponseDelegate*> | |
257 MultiPartResponseHandlerMap; | |
258 // Tracks HTTP multipart response handlers instantiated for | |
259 // a WebPluginResourceClient instance. | |
260 MultiPartResponseHandlerMap multi_part_response_map_; | |
261 | |
262 // The plugin source URL. | 211 // The plugin source URL. |
263 GURL plugin_url_; | 212 GURL plugin_url_; |
264 | 213 |
265 // Indicates if the download would be initiated by the plugin or us. | 214 // Indicates if the download would be initiated by the plugin or us. |
266 bool load_manually_; | 215 bool load_manually_; |
267 | 216 |
268 // Indicates if this is the first geometry update received by the plugin. | 217 // Indicates if this is the first geometry update received by the plugin. |
269 bool first_geometry_update_; | 218 bool first_geometry_update_; |
270 | 219 |
271 // Set to true if the next response error should be ignored. | 220 // Set to true if the next response error should be ignored. |
272 bool ignore_response_error_; | 221 bool ignore_response_error_; |
273 | 222 |
274 // The current plugin geometry and clip rectangle. | 223 // The current plugin geometry and clip rectangle. |
275 WebPluginGeometry geometry_; | 224 WebPluginGeometry geometry_; |
276 | 225 |
277 // The location of the plugin on disk. | 226 // The location of the plugin on disk. |
278 base::FilePath file_path_; | 227 base::FilePath file_path_; |
279 | 228 |
280 // The mime type of the plugin. | 229 // The mime type of the plugin. |
281 std::string mime_type_; | 230 std::string mime_type_; |
282 | 231 |
283 // Holds the list of argument names and values passed to the plugin. We keep | 232 // Holds the list of argument names and values passed to the plugin. We keep |
284 // these so that we can re-initialize the plugin if we need to. | 233 // these so that we can re-initialize the plugin if we need to. |
285 std::vector<std::string> arg_names_; | 234 std::vector<std::string> arg_names_; |
286 std::vector<std::string> arg_values_; | 235 std::vector<std::string> arg_values_; |
287 | 236 |
288 class LoaderClient : public blink::WebURLLoaderClient { | |
289 public: | |
290 LoaderClient(WebPluginImpl*); | |
291 | |
292 void willFollowRedirect(blink::WebURLLoader*, | |
293 blink::WebURLRequest&, | |
294 const blink::WebURLResponse&) override; | |
295 void didSendData(blink::WebURLLoader*, | |
296 unsigned long long bytesSent, | |
297 unsigned long long totalBytesToBeSent) override; | |
298 void didReceiveResponse(blink::WebURLLoader*, | |
299 const blink::WebURLResponse&) override; | |
300 void didDownloadData(blink::WebURLLoader*, | |
301 int dataLength, | |
302 int encodedDataLength) override; | |
303 void didReceiveData(blink::WebURLLoader*, | |
304 const char* data, | |
305 int dataLength, | |
306 int encodedDataLength) override; | |
307 void didReceiveCachedMetadata(blink::WebURLLoader*, | |
308 const char* data, | |
309 int dataLength) override; | |
310 void didFinishLoading(blink::WebURLLoader*, | |
311 double finishTime, | |
312 int64_t total_encoded_data_length) override; | |
313 void didFail(blink::WebURLLoader*, const blink::WebURLError&) override; | |
314 | |
315 private: | |
316 WebPluginImpl* parent_; | |
317 }; | |
318 | |
319 LoaderClient loader_client_; | |
320 | |
321 DISALLOW_COPY_AND_ASSIGN(WebPluginImpl); | 237 DISALLOW_COPY_AND_ASSIGN(WebPluginImpl); |
322 }; | 238 }; |
323 | 239 |
324 } // namespace content | 240 } // namespace content |
325 | 241 |
326 #endif // CONTENT_RENDERER_NPAPI_WEBPLUGIN_IMPL_H_ | 242 #endif // CONTENT_RENDERER_NPAPI_WEBPLUGIN_IMPL_H_ |
OLD | NEW |