Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(234)

Side by Side Diff: content/renderer/npapi/webplugin_delegate_proxy.cc

Issue 23503043: Load NPAPI plugin resources through the browser process directly instead of going through the render (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "content/renderer/npapi/webplugin_delegate_proxy.h" 5 #include "content/renderer/npapi/webplugin_delegate_proxy.h"
6 6
7 #if defined(TOOLKIT_GTK) 7 #if defined(TOOLKIT_GTK)
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 #elif defined(USE_X11) 9 #elif defined(USE_X11)
10 #include <cairo/cairo.h> 10 #include <cairo/cairo.h>
(...skipping 10 matching lines...) Expand all
21 #include "base/memory/scoped_ptr.h" 21 #include "base/memory/scoped_ptr.h"
22 #include "base/process/process.h" 22 #include "base/process/process.h"
23 #include "base/strings/string_split.h" 23 #include "base/strings/string_split.h"
24 #include "base/strings/string_util.h" 24 #include "base/strings/string_util.h"
25 #include "base/strings/utf_string_conversions.h" 25 #include "base/strings/utf_string_conversions.h"
26 #include "base/version.h" 26 #include "base/version.h"
27 #include "content/child/child_process.h" 27 #include "content/child/child_process.h"
28 #include "content/child/npapi/npobject_proxy.h" 28 #include "content/child/npapi/npobject_proxy.h"
29 #include "content/child/npapi/npobject_stub.h" 29 #include "content/child/npapi/npobject_stub.h"
30 #include "content/child/npapi/npobject_util.h" 30 #include "content/child/npapi/npobject_util.h"
31 #include "content/child/npapi/webplugin.h"
32 #include "content/child/npapi/webplugin_resource_client.h" 31 #include "content/child/npapi/webplugin_resource_client.h"
33 #include "content/child/plugin_messages.h" 32 #include "content/child/plugin_messages.h"
34 #include "content/common/content_constants_internal.h" 33 #include "content/common/content_constants_internal.h"
35 #include "content/common/view_messages.h" 34 #include "content/common/view_messages.h"
36 #include "content/public/renderer/content_renderer_client.h" 35 #include "content/public/renderer/content_renderer_client.h"
37 #include "content/renderer/npapi/plugin_channel_host.h" 36 #include "content/renderer/npapi/plugin_channel_host.h"
37 #include "content/renderer/npapi/webplugin_impl.h"
38 #include "content/renderer/render_thread_impl.h" 38 #include "content/renderer/render_thread_impl.h"
39 #include "content/renderer/render_view_impl.h" 39 #include "content/renderer/render_view_impl.h"
40 #include "content/renderer/sad_plugin.h" 40 #include "content/renderer/sad_plugin.h"
41 #include "ipc/ipc_channel_handle.h" 41 #include "ipc/ipc_channel_handle.h"
42 #include "net/base/mime_util.h" 42 #include "net/base/mime_util.h"
43 #include "skia/ext/platform_canvas.h" 43 #include "skia/ext/platform_canvas.h"
44 #include "third_party/WebKit/public/web/WebBindings.h" 44 #include "third_party/WebKit/public/web/WebBindings.h"
45 #include "third_party/WebKit/public/web/WebDocument.h" 45 #include "third_party/WebKit/public/web/WebDocument.h"
46 #include "third_party/WebKit/public/web/WebFrame.h" 46 #include "third_party/WebKit/public/web/WebFrame.h"
47 #include "third_party/WebKit/public/web/WebView.h" 47 #include "third_party/WebKit/public/web/WebView.h"
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 int instance_id_; 194 int instance_id_;
195 unsigned long resource_id_; 195 unsigned long resource_id_;
196 // Set to true if the response expected is a multibyte response. 196 // Set to true if the response expected is a multibyte response.
197 // For e.g. response for a HTTP byte range request. 197 // For e.g. response for a HTTP byte range request.
198 bool multibyte_response_expected_; 198 bool multibyte_response_expected_;
199 }; 199 };
200 200
201 } // namespace 201 } // namespace
202 202
203 WebPluginDelegateProxy::WebPluginDelegateProxy( 203 WebPluginDelegateProxy::WebPluginDelegateProxy(
204 WebPluginImpl* plugin,
204 const std::string& mime_type, 205 const std::string& mime_type,
205 const base::WeakPtr<RenderViewImpl>& render_view) 206 const base::WeakPtr<RenderViewImpl>& render_view)
206 : render_view_(render_view), 207 : render_view_(render_view),
207 plugin_(NULL), 208 plugin_(plugin),
208 uses_shared_bitmaps_(false), 209 uses_shared_bitmaps_(false),
209 #if defined(OS_MACOSX) 210 #if defined(OS_MACOSX)
210 uses_compositor_(false), 211 uses_compositor_(false),
211 #elif defined(OS_WIN) 212 #elif defined(OS_WIN)
212 dummy_activation_window_(NULL), 213 dummy_activation_window_(NULL),
213 #endif 214 #endif
214 window_(gfx::kNullPluginWindow), 215 window_(gfx::kNullPluginWindow),
215 mime_type_(mime_type), 216 mime_type_(mime_type),
216 instance_id_(MSG_ROUTING_NONE), 217 instance_id_(MSG_ROUTING_NONE),
217 npobject_(NULL), 218 npobject_(NULL),
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 278
278 plugin_ = NULL; 279 plugin_ = NULL;
279 280
280 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); 281 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
281 } 282 }
282 283
283 bool WebPluginDelegateProxy::Initialize( 284 bool WebPluginDelegateProxy::Initialize(
284 const GURL& url, 285 const GURL& url,
285 const std::vector<std::string>& arg_names, 286 const std::vector<std::string>& arg_names,
286 const std::vector<std::string>& arg_values, 287 const std::vector<std::string>& arg_values,
287 WebPlugin* plugin,
288 bool load_manually) { 288 bool load_manually) {
289 // TODO(shess): Attempt to work around http://crbug.com/97285 and 289 // TODO(shess): Attempt to work around http://crbug.com/97285 and
290 // http://crbug.com/141055 by retrying the connection. Reports seem 290 // http://crbug.com/141055 by retrying the connection. Reports seem
291 // to indicate that the plugin hasn't crashed, and that the problem 291 // to indicate that the plugin hasn't crashed, and that the problem
292 // is not 100% persistent. 292 // is not 100% persistent.
293 const size_t kAttempts = 2; 293 const size_t kAttempts = 2;
294 294
295 bool result = false; 295 bool result = false;
296 scoped_refptr<PluginChannelHost> channel_host; 296 scoped_refptr<PluginChannelHost> channel_host;
297 int instance_id = 0; 297 int instance_id = 0;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 366
367 // Now tell the PluginInstance in the plugin process to initialize. 367 // Now tell the PluginInstance in the plugin process to initialize.
368 PluginMsg_Init_Params params; 368 PluginMsg_Init_Params params;
369 params.url = url; 369 params.url = url;
370 params.page_url = page_url_; 370 params.page_url = page_url_;
371 params.arg_names = arg_names; 371 params.arg_names = arg_names;
372 params.arg_values = arg_values; 372 params.arg_values = arg_values;
373 params.host_render_view_routing_id = render_view_->routing_id(); 373 params.host_render_view_routing_id = render_view_->routing_id();
374 params.load_manually = load_manually; 374 params.load_manually = load_manually;
375 375
376 plugin_ = plugin;
377
378 result = false; 376 result = false;
379 Send(new PluginMsg_Init(instance_id_, params, &transparent_, &result)); 377 Send(new PluginMsg_Init(instance_id_, params, &transparent_, &result));
380 378
381 if (!result) 379 if (!result)
382 LOG(WARNING) << "PluginMsg_Init returned false"; 380 LOG(WARNING) << "PluginMsg_Init returned false";
383 381
384 render_view_->RegisterPluginDelegate(this); 382 render_view_->RegisterPluginDelegate(this);
385 383
386 return result; 384 return result;
387 } 385 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 void WebPluginDelegateProxy::DidManualLoadFail() { 431 void WebPluginDelegateProxy::DidManualLoadFail() {
434 Send(new PluginMsg_DidManualLoadFail(instance_id_)); 432 Send(new PluginMsg_DidManualLoadFail(instance_id_));
435 } 433 }
436 434
437 bool WebPluginDelegateProxy::OnMessageReceived(const IPC::Message& msg) { 435 bool WebPluginDelegateProxy::OnMessageReceived(const IPC::Message& msg) {
438 GetContentClient()->SetActiveURL(page_url_); 436 GetContentClient()->SetActiveURL(page_url_);
439 437
440 bool handled = true; 438 bool handled = true;
441 IPC_BEGIN_MESSAGE_MAP(WebPluginDelegateProxy, msg) 439 IPC_BEGIN_MESSAGE_MAP(WebPluginDelegateProxy, msg)
442 IPC_MESSAGE_HANDLER(PluginHostMsg_SetWindow, OnSetWindow) 440 IPC_MESSAGE_HANDLER(PluginHostMsg_SetWindow, OnSetWindow)
443 #if defined(OS_WIN)
444 IPC_MESSAGE_HANDLER(PluginHostMsg_SetWindowlessData, OnSetWindowlessData)
445 IPC_MESSAGE_HANDLER(PluginHostMsg_NotifyIMEStatus, OnNotifyIMEStatus)
446 #endif
447 IPC_MESSAGE_HANDLER(PluginHostMsg_CancelResource, OnCancelResource) 441 IPC_MESSAGE_HANDLER(PluginHostMsg_CancelResource, OnCancelResource)
448 IPC_MESSAGE_HANDLER(PluginHostMsg_InvalidateRect, OnInvalidateRect) 442 IPC_MESSAGE_HANDLER(PluginHostMsg_InvalidateRect, OnInvalidateRect)
449 IPC_MESSAGE_HANDLER(PluginHostMsg_GetWindowScriptNPObject, 443 IPC_MESSAGE_HANDLER(PluginHostMsg_GetWindowScriptNPObject,
450 OnGetWindowScriptNPObject) 444 OnGetWindowScriptNPObject)
451 IPC_MESSAGE_HANDLER(PluginHostMsg_GetPluginElement, OnGetPluginElement) 445 IPC_MESSAGE_HANDLER(PluginHostMsg_GetPluginElement, OnGetPluginElement)
452 IPC_MESSAGE_HANDLER(PluginHostMsg_ResolveProxy, OnResolveProxy) 446 IPC_MESSAGE_HANDLER(PluginHostMsg_ResolveProxy, OnResolveProxy)
453 IPC_MESSAGE_HANDLER(PluginHostMsg_SetCookie, OnSetCookie) 447 IPC_MESSAGE_HANDLER(PluginHostMsg_SetCookie, OnSetCookie)
454 IPC_MESSAGE_HANDLER(PluginHostMsg_GetCookies, OnGetCookies) 448 IPC_MESSAGE_HANDLER(PluginHostMsg_GetCookies, OnGetCookies)
455 IPC_MESSAGE_HANDLER(PluginHostMsg_URLRequest, OnHandleURLRequest) 449 IPC_MESSAGE_HANDLER(PluginHostMsg_URLRequest, OnHandleURLRequest)
456 IPC_MESSAGE_HANDLER(PluginHostMsg_CancelDocumentLoad, OnCancelDocumentLoad) 450 IPC_MESSAGE_HANDLER(PluginHostMsg_CancelDocumentLoad, OnCancelDocumentLoad)
457 IPC_MESSAGE_HANDLER(PluginHostMsg_InitiateHTTPRangeRequest, 451 IPC_MESSAGE_HANDLER(PluginHostMsg_InitiateHTTPRangeRequest,
458 OnInitiateHTTPRangeRequest) 452 OnInitiateHTTPRangeRequest)
459 IPC_MESSAGE_HANDLER(PluginHostMsg_DeferResourceLoading, 453 IPC_MESSAGE_HANDLER(PluginHostMsg_DeferResourceLoading,
460 OnDeferResourceLoading) 454 OnDeferResourceLoading)
461 455 IPC_MESSAGE_HANDLER(PluginHostMsg_URLRedirectResponse,
456 OnURLRedirectResponse)
457 IPC_MESSAGE_HANDLER(PluginHostMsg_CheckIfRunInsecureContent,
458 OnCheckIfRunInsecureContent)
459 #if defined(OS_WIN)
460 IPC_MESSAGE_HANDLER(PluginHostMsg_SetWindowlessData, OnSetWindowlessData)
461 IPC_MESSAGE_HANDLER(PluginHostMsg_NotifyIMEStatus, OnNotifyIMEStatus)
462 #endif
462 #if defined(OS_MACOSX) 463 #if defined(OS_MACOSX)
463 IPC_MESSAGE_HANDLER(PluginHostMsg_FocusChanged, 464 IPC_MESSAGE_HANDLER(PluginHostMsg_FocusChanged,
464 OnFocusChanged); 465 OnFocusChanged);
465 IPC_MESSAGE_HANDLER(PluginHostMsg_StartIme, 466 IPC_MESSAGE_HANDLER(PluginHostMsg_StartIme,
466 OnStartIme); 467 OnStartIme);
467 IPC_MESSAGE_HANDLER(PluginHostMsg_AcceleratedPluginEnabledRendering, 468 IPC_MESSAGE_HANDLER(PluginHostMsg_AcceleratedPluginEnabledRendering,
468 OnAcceleratedPluginEnabledRendering) 469 OnAcceleratedPluginEnabledRendering)
469 IPC_MESSAGE_HANDLER(PluginHostMsg_AcceleratedPluginAllocatedIOSurface, 470 IPC_MESSAGE_HANDLER(PluginHostMsg_AcceleratedPluginAllocatedIOSurface,
470 OnAcceleratedPluginAllocatedIOSurface) 471 OnAcceleratedPluginAllocatedIOSurface)
471 IPC_MESSAGE_HANDLER(PluginHostMsg_AcceleratedPluginSwappedIOSurface, 472 IPC_MESSAGE_HANDLER(PluginHostMsg_AcceleratedPluginSwappedIOSurface,
472 OnAcceleratedPluginSwappedIOSurface) 473 OnAcceleratedPluginSwappedIOSurface)
473 #endif 474 #endif
474 IPC_MESSAGE_HANDLER(PluginHostMsg_URLRedirectResponse,
475 OnURLRedirectResponse)
476 IPC_MESSAGE_UNHANDLED(handled = false) 475 IPC_MESSAGE_UNHANDLED(handled = false)
477 IPC_END_MESSAGE_MAP() 476 IPC_END_MESSAGE_MAP()
478 DCHECK(handled); 477 DCHECK(handled);
479 return handled; 478 return handled;
480 } 479 }
481 480
482 void WebPluginDelegateProxy::OnChannelError() { 481 void WebPluginDelegateProxy::OnChannelError() {
483 if (plugin_) { 482 if (plugin_) {
484 if (window_) { 483 if (window_) {
485 // The actual WebPluginDelegate never got a chance to tell the WebPlugin 484 // The actual WebPluginDelegate never got a chance to tell the WebPlugin
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after
1112 unsigned long resource_id, int range_request_id) { 1111 unsigned long resource_id, int range_request_id) {
1113 if (!channel_host_.get()) 1112 if (!channel_host_.get())
1114 return NULL; 1113 return NULL;
1115 1114
1116 ResourceClientProxy* proxy = 1115 ResourceClientProxy* proxy =
1117 new ResourceClientProxy(channel_host_.get(), instance_id_); 1116 new ResourceClientProxy(channel_host_.get(), instance_id_);
1118 proxy->InitializeForSeekableStream(resource_id, range_request_id); 1117 proxy->InitializeForSeekableStream(resource_id, range_request_id);
1119 return proxy; 1118 return proxy;
1120 } 1119 }
1121 1120
1121 void WebPluginDelegateProxy::FetchURL(unsigned long resource_id,
1122 int notify_id,
1123 const GURL& url,
1124 const GURL& first_party_for_cookies,
1125 const std::string& method,
1126 const std::string& post_data,
1127 const GURL& referrer,
1128 bool notify_redirects,
1129 bool is_plugin_src_load,
1130 int origin_pid,
1131 int render_view_id) {
1132 PluginMsg_FetchURL_Params params;
1133 params.resource_id = resource_id;
1134 params.notify_id = notify_id;
1135 params.url = url;
1136 params.first_party_for_cookies = first_party_for_cookies;
1137 params.method = method;
1138 params.post_data = post_data;
1139 params.referrer = referrer;
1140 params.notify_redirect = notify_redirects;
1141 params.is_plugin_src_load = is_plugin_src_load;
1142 params.render_view_id = render_view_id;
1143 Send(new PluginMsg_FetchURL(instance_id_, params));
1144 }
1145
1122 #if defined(OS_MACOSX) 1146 #if defined(OS_MACOSX)
1123 void WebPluginDelegateProxy::OnFocusChanged(bool focused) { 1147 void WebPluginDelegateProxy::OnFocusChanged(bool focused) {
1124 if (render_view_) 1148 if (render_view_)
1125 render_view_->PluginFocusChanged(focused, instance_id_); 1149 render_view_->PluginFocusChanged(focused, instance_id_);
1126 } 1150 }
1127 1151
1128 void WebPluginDelegateProxy::OnStartIme() { 1152 void WebPluginDelegateProxy::OnStartIme() {
1129 if (render_view_) 1153 if (render_view_)
1130 render_view_->StartPluginIme(); 1154 render_view_->StartPluginIme();
1131 } 1155 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1197 #endif 1221 #endif
1198 1222
1199 void WebPluginDelegateProxy::OnURLRedirectResponse(bool allow, 1223 void WebPluginDelegateProxy::OnURLRedirectResponse(bool allow,
1200 int resource_id) { 1224 int resource_id) {
1201 if (!plugin_) 1225 if (!plugin_)
1202 return; 1226 return;
1203 1227
1204 plugin_->URLRedirectResponse(allow, resource_id); 1228 plugin_->URLRedirectResponse(allow, resource_id);
1205 } 1229 }
1206 1230
1231 void WebPluginDelegateProxy::OnCheckIfRunInsecureContent(const GURL& url,
1232 bool* result) {
1233 *result = plugin_->CheckIfRunInsecureContent(url);
1234 }
1235
1207 } // namespace content 1236 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698