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

Side by Side Diff: chrome/browser/renderer_host/render_view_host.cc

Issue 5978003: Make IPC::Channel::Listener:OnMessageReceived have a return value indicating ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/browser/renderer_host/render_view_host.h" 5 #include "chrome/browser/renderer_host/render_view_host.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 delegate_->LoadStateChanged(url, load_state, upload_position, upload_size); 731 delegate_->LoadStateChanged(url, load_state, upload_position, upload_size);
732 } 732 }
733 733
734 bool RenderViewHost::SuddenTerminationAllowed() const { 734 bool RenderViewHost::SuddenTerminationAllowed() const {
735 return sudden_termination_allowed_ || process()->sudden_termination_allowed(); 735 return sudden_termination_allowed_ || process()->sudden_termination_allowed();
736 } 736 }
737 737
738 /////////////////////////////////////////////////////////////////////////////// 738 ///////////////////////////////////////////////////////////////////////////////
739 // RenderViewHost, IPC message handlers: 739 // RenderViewHost, IPC message handlers:
740 740
741 void RenderViewHost::OnMessageReceived(const IPC::Message& msg) { 741 bool RenderViewHost::OnMessageReceived(const IPC::Message& msg) {
742 #if defined(OS_WIN) 742 #if defined(OS_WIN)
743 // On Windows there's a potential deadlock with sync messsages going in 743 // On Windows there's a potential deadlock with sync messsages going in
744 // a circle from browser -> plugin -> renderer -> browser. 744 // a circle from browser -> plugin -> renderer -> browser.
745 // On Linux we can avoid this by avoiding sync messages from browser->plugin. 745 // On Linux we can avoid this by avoiding sync messages from browser->plugin.
746 // On Mac we avoid this by not supporting windowed plugins. 746 // On Mac we avoid this by not supporting windowed plugins.
747 if (msg.is_sync() && !msg.is_caller_pumping_messages()) { 747 if (msg.is_sync() && !msg.is_caller_pumping_messages()) {
748 // NOTE: IF YOU HIT THIS ASSERT, THE SOLUTION IS ALMOST NEVER TO RUN A 748 // NOTE: IF YOU HIT THIS ASSERT, THE SOLUTION IS ALMOST NEVER TO RUN A
749 // NESTED MESSAGE LOOP IN THE RENDERER!!! 749 // NESTED MESSAGE LOOP IN THE RENDERER!!!
750 // That introduces reentrancy which causes hard to track bugs. You should 750 // That introduces reentrancy which causes hard to track bugs. You should
751 // find a way to either turn this into an asynchronous message, or one 751 // find a way to either turn this into an asynchronous message, or one
752 // that can be answered on the IO thread. 752 // that can be answered on the IO thread.
753 NOTREACHED() << "Can't send sync messages to UI thread without pumping " 753 NOTREACHED() << "Can't send sync messages to UI thread without pumping "
754 "messages in the renderer or else deadlocks can occur if the page " 754 "messages in the renderer or else deadlocks can occur if the page "
755 "has windowed plugins! (message type " << msg.type() << ")"; 755 "has windowed plugins! (message type " << msg.type() << ")";
756 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&msg); 756 IPC::Message* reply = IPC::SyncMessage::GenerateReply(&msg);
757 reply->set_reply_error(); 757 reply->set_reply_error();
758 Send(reply); 758 Send(reply);
759 return; 759 return true;
760 } 760 }
761 #endif 761 #endif
762 762
763 bool handled = true;
763 bool msg_is_ok = true; 764 bool msg_is_ok = true;
764 IPC_BEGIN_MESSAGE_MAP_EX(RenderViewHost, msg, msg_is_ok) 765 IPC_BEGIN_MESSAGE_MAP_EX(RenderViewHost, msg, msg_is_ok)
765 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowView, OnMsgShowView) 766 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowView, OnMsgShowView)
766 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowWidget, OnMsgShowWidget) 767 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowWidget, OnMsgShowWidget)
767 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowFullscreenWidget, 768 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowFullscreenWidget,
768 OnMsgShowFullscreenWidget) 769 OnMsgShowFullscreenWidget)
769 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunModal, OnMsgRunModal) 770 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunModal, OnMsgRunModal)
770 IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewReady, OnMsgRenderViewReady) 771 IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewReady, OnMsgRenderViewReady)
771 IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewGone, OnMsgRenderViewGone) 772 IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewGone, OnMsgRenderViewGone)
772 IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_FrameNavigate, OnMsgNavigate(msg)) 773 IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_FrameNavigate, OnMsgNavigate(msg))
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
910 OnDetectedPhishingSite) 911 OnDetectedPhishingSite)
911 IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptEvalResponse, OnScriptEvalResponse) 912 IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptEvalResponse, OnScriptEvalResponse)
912 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateContentRestrictions, 913 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateContentRestrictions,
913 OnUpdateContentRestrictions) 914 OnUpdateContentRestrictions)
914 #if defined(OS_MACOSX) 915 #if defined(OS_MACOSX)
915 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowPopup, OnMsgShowPopup) 916 IPC_MESSAGE_HANDLER(ViewHostMsg_ShowPopup, OnMsgShowPopup)
916 #endif 917 #endif
917 IPC_MESSAGE_HANDLER(ViewHostMsg_PagesReadyForPreview, 918 IPC_MESSAGE_HANDLER(ViewHostMsg_PagesReadyForPreview,
918 OnPagesReadyForPreview) 919 OnPagesReadyForPreview)
919 // Have the super handle all other messages. 920 // Have the super handle all other messages.
920 IPC_MESSAGE_UNHANDLED(RenderWidgetHost::OnMessageReceived(msg)) 921 IPC_MESSAGE_UNHANDLED(handled = RenderWidgetHost::OnMessageReceived(msg))
921 IPC_END_MESSAGE_MAP_EX() 922 IPC_END_MESSAGE_MAP_EX()
922 923
923 if (!msg_is_ok) { 924 if (!msg_is_ok) {
924 // The message had a handler, but its de-serialization failed. 925 // The message had a handler, but its de-serialization failed.
925 // Kill the renderer. 926 // Kill the renderer.
926 UserMetrics::RecordAction(UserMetricsAction("BadMessageTerminate_RVH")); 927 UserMetrics::RecordAction(UserMetricsAction("BadMessageTerminate_RVH"));
927 process()->ReceivedBadMessage(); 928 process()->ReceivedBadMessage();
928 } 929 }
930
931 return handled;
929 } 932 }
930 933
931 void RenderViewHost::Shutdown() { 934 void RenderViewHost::Shutdown() {
932 // If we are being run modally (see RunModal), then we need to cleanup. 935 // If we are being run modally (see RunModal), then we need to cleanup.
933 if (run_modal_reply_msg_) { 936 if (run_modal_reply_msg_) {
934 Send(run_modal_reply_msg_); 937 Send(run_modal_reply_msg_);
935 run_modal_reply_msg_ = NULL; 938 run_modal_reply_msg_ = NULL;
936 } 939 }
937 940
938 DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); 941 DevToolsManager* devtools_manager = DevToolsManager::GetInstance();
(...skipping 1348 matching lines...) Expand 10 before | Expand all | Expand 10 after
2287 if (printer_query.get()) { 2290 if (printer_query.get()) {
2288 BrowserThread::PostTask( 2291 BrowserThread::PostTask(
2289 BrowserThread::IO, FROM_HERE, 2292 BrowserThread::IO, FROM_HERE,
2290 NewRunnableMethod(printer_query.get(), 2293 NewRunnableMethod(printer_query.get(),
2291 &printing::PrinterQuery::StopWorker)); 2294 &printing::PrinterQuery::StopWorker));
2292 } 2295 }
2293 2296
2294 // Send the printingDone msg for now. 2297 // Send the printingDone msg for now.
2295 Send(new ViewMsg_PrintingDone(routing_id(), params.document_cookie, true)); 2298 Send(new ViewMsg_PrintingDone(routing_id(), params.document_cookie, true));
2296 } 2299 }
OLDNEW
« no previous file with comments | « chrome/browser/renderer_host/render_view_host.h ('k') | chrome/browser/renderer_host/render_widget_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698