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

Side by Side Diff: chrome/renderer/webplugin_delegate_proxy.cc

Issue 155238: Add the page url to plugin crashes to aid debugging. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 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
« no previous file with comments | « chrome/renderer/webplugin_delegate_proxy.h ('k') | chrome\common\child_process_logging.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "chrome/renderer/webplugin_delegate_proxy.h" 5 #include "chrome/renderer/webplugin_delegate_proxy.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #if defined(OS_WIN) 9 #if defined(OS_WIN)
10 #include <atlbase.h> 10 #include <atlbase.h>
11 #endif 11 #endif
12 12
13 #include "app/gfx/canvas.h" 13 #include "app/gfx/canvas.h"
14 #include "app/l10n_util.h" 14 #include "app/l10n_util.h"
15 #include "app/resource_bundle.h" 15 #include "app/resource_bundle.h"
16 #include "base/logging.h" 16 #include "base/logging.h"
17 #include "base/ref_counted.h" 17 #include "base/ref_counted.h"
18 #include "base/string_util.h" 18 #include "base/string_util.h"
19 #include "base/gfx/size.h" 19 #include "base/gfx/size.h"
20 #include "base/gfx/native_widget_types.h" 20 #include "base/gfx/native_widget_types.h"
21 #include "chrome/app/chrome_dll_resource.h" 21 #include "chrome/app/chrome_dll_resource.h"
22 #include "chrome/common/child_process_logging.h"
22 #include "chrome/common/plugin_messages.h" 23 #include "chrome/common/plugin_messages.h"
23 #include "chrome/common/render_messages.h" 24 #include "chrome/common/render_messages.h"
24 #include "chrome/plugin/npobject_proxy.h" 25 #include "chrome/plugin/npobject_proxy.h"
25 #include "chrome/plugin/npobject_stub.h" 26 #include "chrome/plugin/npobject_stub.h"
26 #include "chrome/plugin/npobject_util.h" 27 #include "chrome/plugin/npobject_util.h"
27 #include "chrome/renderer/render_thread.h" 28 #include "chrome/renderer/render_thread.h"
28 #include "chrome/renderer/render_view.h" 29 #include "chrome/renderer/render_view.h"
29 #include "googleurl/src/gurl.h"
30 #include "grit/generated_resources.h" 30 #include "grit/generated_resources.h"
31 #include "net/base/mime_util.h" 31 #include "net/base/mime_util.h"
32 #include "printing/native_metafile.h" 32 #include "printing/native_metafile.h"
33 #include "webkit/api/public/WebDragData.h" 33 #include "webkit/api/public/WebDragData.h"
34 #include "webkit/api/public/WebString.h" 34 #include "webkit/api/public/WebString.h"
35 #include "webkit/api/public/WebVector.h" 35 #include "webkit/api/public/WebVector.h"
36 #include "webkit/glue/webframe.h" 36 #include "webkit/glue/webframe.h"
37 #include "webkit/glue/webkit_glue.h" 37 #include "webkit/glue/webkit_glue.h"
38 #include "webkit/glue/webplugin.h" 38 #include "webkit/glue/webplugin.h"
39 #include "webkit/glue/webview.h" 39 #include "webkit/glue/webview.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 RenderView* render_view) 163 RenderView* render_view)
164 : render_view_(render_view), 164 : render_view_(render_view),
165 plugin_(NULL), 165 plugin_(NULL),
166 windowless_(false), 166 windowless_(false),
167 mime_type_(mime_type), 167 mime_type_(mime_type),
168 clsid_(clsid), 168 clsid_(clsid),
169 npobject_(NULL), 169 npobject_(NULL),
170 window_script_object_(NULL), 170 window_script_object_(NULL),
171 sad_plugin_(NULL), 171 sad_plugin_(NULL),
172 invalidate_pending_(false), 172 invalidate_pending_(false),
173 transparent_(false) { 173 transparent_(false),
174 page_url_(render_view_->webview()->GetMainFrame()->GetURL()) {
174 } 175 }
175 176
176 WebPluginDelegateProxy::~WebPluginDelegateProxy() { 177 WebPluginDelegateProxy::~WebPluginDelegateProxy() {
177 } 178 }
178 179
179 void WebPluginDelegateProxy::PluginDestroyed() { 180 void WebPluginDelegateProxy::PluginDestroyed() {
180 plugin_ = NULL; 181 plugin_ = NULL;
181 182
182 if (npobject_) { 183 if (npobject_) {
183 // When we destroy the plugin instance, the NPObjectStub NULLs out its 184 // When we destroy the plugin instance, the NPObjectStub NULLs out its
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 plugin_path_ = plugin_path; 239 plugin_path_ = plugin_path;
239 channel_host_ = channel_host; 240 channel_host_ = channel_host;
240 instance_id_ = instance_id; 241 instance_id_ = instance_id;
241 242
242 channel_host_->AddRoute(instance_id_, this, false); 243 channel_host_->AddRoute(instance_id_, this, false);
243 244
244 // Now tell the PluginInstance in the plugin process to initialize. 245 // Now tell the PluginInstance in the plugin process to initialize.
245 PluginMsg_Init_Params params; 246 PluginMsg_Init_Params params;
246 params.containing_window = render_view_->host_window(); 247 params.containing_window = render_view_->host_window();
247 params.url = url; 248 params.url = url;
249 params.page_url = page_url_;
248 for (int i = 0; i < argc; ++i) { 250 for (int i = 0; i < argc; ++i) {
249 params.arg_names.push_back(argn[i]); 251 params.arg_names.push_back(argn[i]);
250 params.arg_values.push_back(argv[i]); 252 params.arg_values.push_back(argv[i]);
251 253
252 if (LowerCaseEqualsASCII(params.arg_names.back(), "wmode") && 254 if (LowerCaseEqualsASCII(params.arg_names.back(), "wmode") &&
253 LowerCaseEqualsASCII(params.arg_values.back(), "transparent")) { 255 LowerCaseEqualsASCII(params.arg_values.back(), "transparent")) {
254 transparent_ = true; 256 transparent_ = true;
255 } 257 }
256 } 258 }
257 params.load_manually = load_manually; 259 params.load_manually = load_manually;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 324
323 FilePath WebPluginDelegateProxy::GetPluginPath() { 325 FilePath WebPluginDelegateProxy::GetPluginPath() {
324 return plugin_path_; 326 return plugin_path_;
325 } 327 }
326 328
327 void WebPluginDelegateProxy::InstallMissingPlugin() { 329 void WebPluginDelegateProxy::InstallMissingPlugin() {
328 Send(new PluginMsg_InstallMissingPlugin(instance_id_)); 330 Send(new PluginMsg_InstallMissingPlugin(instance_id_));
329 } 331 }
330 332
331 void WebPluginDelegateProxy::OnMessageReceived(const IPC::Message& msg) { 333 void WebPluginDelegateProxy::OnMessageReceived(const IPC::Message& msg) {
334 child_process_logging::ScopedActiveURLSetter url_setter(page_url_);
335
332 IPC_BEGIN_MESSAGE_MAP(WebPluginDelegateProxy, msg) 336 IPC_BEGIN_MESSAGE_MAP(WebPluginDelegateProxy, msg)
333 IPC_MESSAGE_HANDLER(PluginHostMsg_SetWindow, OnSetWindow) 337 IPC_MESSAGE_HANDLER(PluginHostMsg_SetWindow, OnSetWindow)
334 #if defined(OS_LINUX) 338 #if defined(OS_LINUX)
335 IPC_MESSAGE_HANDLER(PluginHostMsg_CreatePluginContainer, 339 IPC_MESSAGE_HANDLER(PluginHostMsg_CreatePluginContainer,
336 OnCreatePluginContainer) 340 OnCreatePluginContainer)
337 IPC_MESSAGE_HANDLER(PluginHostMsg_DestroyPluginContainer, 341 IPC_MESSAGE_HANDLER(PluginHostMsg_DestroyPluginContainer,
338 OnDestroyPluginContainer) 342 OnDestroyPluginContainer)
339 #endif 343 #endif
340 #if defined(OS_WIN) 344 #if defined(OS_WIN)
341 IPC_MESSAGE_HANDLER(PluginHostMsg_SetWindowlessPumpEvent, 345 IPC_MESSAGE_HANDLER(PluginHostMsg_SetWindowlessPumpEvent,
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 605
602 int route_id = MSG_ROUTING_NONE; 606 int route_id = MSG_ROUTING_NONE;
603 intptr_t npobject_ptr; 607 intptr_t npobject_ptr;
604 Send(new PluginMsg_GetPluginScriptableObject( 608 Send(new PluginMsg_GetPluginScriptableObject(
605 instance_id_, &route_id, &npobject_ptr)); 609 instance_id_, &route_id, &npobject_ptr));
606 if (route_id == MSG_ROUTING_NONE) 610 if (route_id == MSG_ROUTING_NONE)
607 return NULL; 611 return NULL;
608 612
609 npobject_ = NPObjectProxy::Create( 613 npobject_ = NPObjectProxy::Create(
610 channel_host_.get(), route_id, npobject_ptr, 614 channel_host_.get(), route_id, npobject_ptr,
611 render_view_->modal_dialog_event()); 615 render_view_->modal_dialog_event(), page_url_);
612 616
613 return NPN_RetainObject(npobject_); 617 return NPN_RetainObject(npobject_);
614 } 618 }
615 619
616 void WebPluginDelegateProxy::DidFinishLoadWithReason(NPReason reason) { 620 void WebPluginDelegateProxy::DidFinishLoadWithReason(NPReason reason) {
617 Send(new PluginMsg_DidFinishLoadWithReason(instance_id_, reason)); 621 Send(new PluginMsg_DidFinishLoadWithReason(instance_id_, reason));
618 } 622 }
619 623
620 void WebPluginDelegateProxy::SetFocus() { 624 void WebPluginDelegateProxy::SetFocus() {
621 Send(new PluginMsg_SetFocus(instance_id_)); 625 Send(new PluginMsg_SetFocus(instance_id_));
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 if (plugin_) 695 if (plugin_)
692 npobject = plugin_->GetWindowScriptNPObject(); 696 npobject = plugin_->GetWindowScriptNPObject();
693 697
694 if (!npobject) 698 if (!npobject)
695 return; 699 return;
696 700
697 // The stub will delete itself when the proxy tells it that it's released, or 701 // The stub will delete itself when the proxy tells it that it's released, or
698 // otherwise when the channel is closed. 702 // otherwise when the channel is closed.
699 NPObjectStub* stub = new NPObjectStub( 703 NPObjectStub* stub = new NPObjectStub(
700 npobject, channel_host_.get(), route_id, 704 npobject, channel_host_.get(), route_id,
701 render_view_->modal_dialog_event()); 705 render_view_->modal_dialog_event(), page_url_);
702 window_script_object_ = stub; 706 window_script_object_ = stub;
703 window_script_object_->set_proxy(this); 707 window_script_object_->set_proxy(this);
704 *success = true; 708 *success = true;
705 *npobject_ptr = reinterpret_cast<intptr_t>(npobject); 709 *npobject_ptr = reinterpret_cast<intptr_t>(npobject);
706 } 710 }
707 711
708 void WebPluginDelegateProxy::OnGetPluginElement( 712 void WebPluginDelegateProxy::OnGetPluginElement(
709 int route_id, bool* success, intptr_t* npobject_ptr) { 713 int route_id, bool* success, intptr_t* npobject_ptr) {
710 *success = false; 714 *success = false;
711 NPObject* npobject = NULL; 715 NPObject* npobject = NULL;
712 if (plugin_) 716 if (plugin_)
713 npobject = plugin_->GetPluginElement(); 717 npobject = plugin_->GetPluginElement();
714 if (!npobject) 718 if (!npobject)
715 return; 719 return;
716 720
717 // The stub will delete itself when the proxy tells it that it's released, or 721 // The stub will delete itself when the proxy tells it that it's released, or
718 // otherwise when the channel is closed. 722 // otherwise when the channel is closed.
719 new NPObjectStub( 723 new NPObjectStub(
720 npobject, channel_host_.get(), route_id, 724 npobject, channel_host_.get(), route_id,
721 render_view_->modal_dialog_event()); 725 render_view_->modal_dialog_event(), page_url_);
722 *success = true; 726 *success = true;
723 *npobject_ptr = reinterpret_cast<intptr_t>(npobject); 727 *npobject_ptr = reinterpret_cast<intptr_t>(npobject);
724 } 728 }
725 729
726 void WebPluginDelegateProxy::OnSetCookie(const GURL& url, 730 void WebPluginDelegateProxy::OnSetCookie(const GURL& url,
727 const GURL& first_party_for_cookies, 731 const GURL& first_party_for_cookies,
728 const std::string& cookie) { 732 const std::string& cookie) {
729 if (plugin_) 733 if (plugin_)
730 plugin_->SetCookie(url, first_party_for_cookies, cookie); 734 plugin_->SetCookie(url, first_party_for_cookies, cookie);
731 } 735 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 if (!drag_id || !webkit_glue::GetDragData(event, &event_id, &data)) 806 if (!drag_id || !webkit_glue::GetDragData(event, &event_id, &data))
803 return; 807 return;
804 808
805 NPVariant results[4]; 809 NPVariant results[4];
806 INT32_TO_NPVARIANT(drag_id, results[0]); 810 INT32_TO_NPVARIANT(drag_id, results[0]);
807 INT32_TO_NPVARIANT(event_id, results[1]); 811 INT32_TO_NPVARIANT(event_id, results[1]);
808 EncodeDragData(data, add_data, &results[2], &results[3]); 812 EncodeDragData(data, add_data, &results[2], &results[3]);
809 813
810 for (size_t i = 0; i < arraysize(results); ++i) { 814 for (size_t i = 0; i < arraysize(results); ++i) {
811 values->push_back(NPVariant_Param()); 815 values->push_back(NPVariant_Param());
812 CreateNPVariantParam(results[i], NULL, &values->back(), false, NULL); 816 CreateNPVariantParam(
817 results[i], NULL, &values->back(), false, NULL, page_url_);
813 } 818 }
814 819
815 *success = true; 820 *success = true;
816 } 821 }
817 822
818 void WebPluginDelegateProxy::OnSetDropEffect(const NPVariant_Param& object, 823 void WebPluginDelegateProxy::OnSetDropEffect(const NPVariant_Param& object,
819 int effect, 824 int effect,
820 bool* success) { 825 bool* success) {
821 DCHECK(success); 826 DCHECK(success);
822 *success = false; 827 *success = false;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 plugin_->CancelDocumentLoad(); 938 plugin_->CancelDocumentLoad();
934 } 939 }
935 940
936 void WebPluginDelegateProxy::OnInitiateHTTPRangeRequest( 941 void WebPluginDelegateProxy::OnInitiateHTTPRangeRequest(
937 const std::string& url, const std::string& range_info, 942 const std::string& url, const std::string& range_info,
938 intptr_t existing_stream, bool notify_needed, intptr_t notify_data) { 943 intptr_t existing_stream, bool notify_needed, intptr_t notify_data) {
939 plugin_->InitiateHTTPRangeRequest(url.c_str(), range_info.c_str(), 944 plugin_->InitiateHTTPRangeRequest(url.c_str(), range_info.c_str(),
940 existing_stream, notify_needed, 945 existing_stream, notify_needed,
941 notify_data); 946 notify_data);
942 } 947 }
OLDNEW
« no previous file with comments | « chrome/renderer/webplugin_delegate_proxy.h ('k') | chrome\common\child_process_logging.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698