diff options
Diffstat (limited to 'chrome/browser/renderer_host/render_view_host.cc')
-rw-r--r-- | chrome/browser/renderer_host/render_view_host.cc | 200 |
1 files changed, 45 insertions, 155 deletions
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index 950c60e..ccbd57a 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -11,7 +11,6 @@ #include "base/command_line.h" #include "base/i18n/rtl.h" #include "base/json/json_reader.h" -#include "base/metrics/stats_counters.h" #include "base/string_util.h" #include "base/time.h" #include "base/utf_string_conversions.h" @@ -81,25 +80,6 @@ using WebKit::WebTextDirection; namespace { -void FilterURL(ChildProcessSecurityPolicy* policy, int renderer_id, GURL* url) { - if (!url->is_valid()) - return; // We don't need to block invalid URLs. - - if (url->SchemeIs(chrome::kAboutScheme)) { - // The renderer treats all URLs in the about: scheme as being about:blank. - // Canonicalize about: URLs to about:blank. - *url = GURL(chrome::kAboutBlankURL); - } - - if (!policy->CanRequestURL(renderer_id, *url)) { - // If this renderer is not permitted to request this URL, we invalidate the - // URL. This prevents us from storing the blocked URL and becoming confused - // later. - VLOG(1) << "Blocked URL " << url->spec(); - *url = GURL(); - } -} - // Delay to wait on closing the tab for a beforeunload/unload handler to fire. const int kUnloadTimeoutMS = 1000; @@ -760,6 +740,9 @@ bool RenderViewHost::OnMessageReceived(const IPC::Message& msg) { } #endif + if (delegate_->OnMessageReceived(msg)) + return true; + bool handled = true; bool msg_is_ok = true; IPC_BEGIN_MESSAGE_MAP_EX(RenderViewHost, msg, msg_is_ok) @@ -778,7 +761,7 @@ bool RenderViewHost::OnMessageReceived(const IPC::Message& msg) { IPC_MESSAGE_HANDLER(ViewHostMsg_Thumbnail, OnMsgThumbnail) IPC_MESSAGE_HANDLER(ViewHostMsg_Snapshot, OnMsgScreenshot) IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateInspectorSetting, - OnUpdateInspectorSetting); + OnUpdateInspectorSetting) IPC_MESSAGE_HANDLER(ViewHostMsg_Close, OnMsgClose) IPC_MESSAGE_HANDLER(ViewHostMsg_RequestMove, OnMsgRequestMove) IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartLoading, OnMsgDidStartLoading) @@ -789,18 +772,6 @@ bool RenderViewHost::OnMessageReceived(const IPC::Message& msg) { OnMsgDocumentAvailableInMainFrame) IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentOnLoadCompletedInMainFrame, OnMsgDocumentOnLoadCompletedInMainFrame) - IPC_MESSAGE_HANDLER(ViewHostMsg_DidLoadResourceFromMemoryCache, - OnMsgDidLoadResourceFromMemoryCache) - IPC_MESSAGE_HANDLER(ViewHostMsg_DidDisplayInsecureContent, - OnMsgDidDisplayInsecureContent) - IPC_MESSAGE_HANDLER(ViewHostMsg_DidRunInsecureContent, - OnMsgDidRunInsecureContent) - IPC_MESSAGE_HANDLER(ViewHostMsg_DidRedirectProvisionalLoad, - OnMsgDidRedirectProvisionalLoad) - IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartProvisionalLoadForFrame, - OnMsgDidStartProvisionalLoadForFrame) - IPC_MESSAGE_HANDLER(ViewHostMsg_DidFailProvisionalLoadWithError, - OnMsgDidFailProvisionalLoadWithError) IPC_MESSAGE_HANDLER(ViewHostMsg_Find_Reply, OnMsgFindReply) IPC_MESSAGE_HANDLER(ViewMsg_ExecuteCodeFinished, OnExecuteCodeFinished) @@ -812,16 +783,10 @@ bool RenderViewHost::OnMessageReceived(const IPC::Message& msg) { OnMsgDidContentsPreferredSizeChange) IPC_MESSAGE_HANDLER(ViewHostMsg_DomOperationResponse, OnMsgDomOperationResponse) - IPC_MESSAGE_HANDLER(ViewHostMsg_DOMUISend, - OnMsgDOMUISend) + IPC_MESSAGE_HANDLER(ViewHostMsg_DOMUISend, OnMsgDOMUISend) IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardMessageToExternalHost, OnMsgForwardMessageToExternalHost) - IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentLoadedInFrame, - OnMsgDocumentLoadedInFrame) - IPC_MESSAGE_HANDLER(ViewHostMsg_DidFinishLoad, - OnMsgDidFinishLoad) - IPC_MESSAGE_HANDLER(ViewHostMsg_GoToEntryAtOffset, - OnMsgGoToEntryAtOffset) + IPC_MESSAGE_HANDLER(ViewHostMsg_GoToEntryAtOffset, OnMsgGoToEntryAtOffset) IPC_MESSAGE_HANDLER(ViewHostMsg_SetTooltipText, OnMsgSetTooltipText) IPC_MESSAGE_HANDLER(ViewHostMsg_RunFileChooser, OnMsgRunFileChooser) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunJavaScriptMessage, @@ -844,34 +809,34 @@ bool RenderViewHost::OnMessageReceived(const IPC::Message& msg) { IPC_MESSAGE_HANDLER(ViewHostMsg_DidPrintPage, DidPrintPage) IPC_MESSAGE_HANDLER(ViewHostMsg_AddMessageToConsole, OnAddMessageToConsole) IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardToDevToolsAgent, - OnForwardToDevToolsAgent); + OnForwardToDevToolsAgent) IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardToDevToolsClient, - OnForwardToDevToolsClient); + OnForwardToDevToolsClient) IPC_MESSAGE_HANDLER(ViewHostMsg_ActivateDevToolsWindow, - OnActivateDevToolsWindow); + OnActivateDevToolsWindow) IPC_MESSAGE_HANDLER(ViewHostMsg_CloseDevToolsWindow, - OnCloseDevToolsWindow); + OnCloseDevToolsWindow) IPC_MESSAGE_HANDLER(ViewHostMsg_RequestDockDevToolsWindow, - OnRequestDockDevToolsWindow); + OnRequestDockDevToolsWindow) IPC_MESSAGE_HANDLER(ViewHostMsg_RequestUndockDevToolsWindow, - OnRequestUndockDevToolsWindow); + OnRequestUndockDevToolsWindow) IPC_MESSAGE_HANDLER(ViewHostMsg_DevToolsRuntimePropertyChanged, - OnDevToolsRuntimePropertyChanged); - IPC_MESSAGE_HANDLER(ViewHostMsg_MissingPluginStatus, OnMissingPluginStatus); - IPC_MESSAGE_HANDLER(ViewHostMsg_CrashedPlugin, OnCrashedPlugin); + OnDevToolsRuntimePropertyChanged) + IPC_MESSAGE_HANDLER(ViewHostMsg_MissingPluginStatus, OnMissingPluginStatus) + IPC_MESSAGE_HANDLER(ViewHostMsg_CrashedPlugin, OnCrashedPlugin) IPC_MESSAGE_HANDLER(ViewHostMsg_BlockedOutdatedPlugin, - OnBlockedOutdatedPlugin); + OnBlockedOutdatedPlugin) IPC_MESSAGE_HANDLER(ViewHostMsg_SendCurrentPageAllSavableResourceLinks, - OnReceivedSavableResourceLinksForCurrentPage); + OnReceivedSavableResourceLinksForCurrentPage) IPC_MESSAGE_HANDLER(ViewHostMsg_SendSerializedHtmlData, - OnReceivedSerializedHtmlData); + OnReceivedSerializedHtmlData) IPC_MESSAGE_HANDLER(ViewHostMsg_DidGetApplicationInfo, - OnDidGetApplicationInfo); + OnDidGetApplicationInfo) IPC_MESSAGE_HANDLER(ViewHostMsg_InstallApplication, - OnInstallApplication); + OnInstallApplication) IPC_MESSAGE_FORWARD(ViewHostMsg_JSOutOfMemory, delegate_, - RenderViewHostDelegate::OnJSOutOfMemory); - IPC_MESSAGE_HANDLER(ViewHostMsg_ShouldClose_ACK, OnMsgShouldCloseACK); + RenderViewHostDelegate::OnJSOutOfMemory) + IPC_MESSAGE_HANDLER(ViewHostMsg_ShouldClose_ACK, OnMsgShouldCloseACK) IPC_MESSAGE_HANDLER(ViewHostMsg_QueryFormFieldAutoFill, OnQueryFormFieldAutoFill) IPC_MESSAGE_HANDLER(ViewHostMsg_DidShowAutoFillSuggestions, @@ -1155,17 +1120,6 @@ void RenderViewHost::OnMsgRequestMove(const gfx::Rect& pos) { Send(new ViewMsg_Move_ACK(routing_id())); } -void RenderViewHost::OnMsgDidRedirectProvisionalLoad(int32 page_id, - const GURL& source_url, - const GURL& target_url) { - RenderViewHostDelegate::Resource* resource_delegate = - delegate_->GetResourceDelegate(); - if (resource_delegate) { - resource_delegate->DidRedirectProvisionalLoad(page_id, - source_url, target_url); - } -} - void RenderViewHost::OnMsgDidStartLoading() { delegate_->DidStartLoading(); } @@ -1186,77 +1140,6 @@ void RenderViewHost::OnMsgDocumentOnLoadCompletedInMainFrame(int32 page_id) { delegate_->DocumentOnLoadCompletedInMainFrame(this, page_id); } -void RenderViewHost::OnMsgDidLoadResourceFromMemoryCache( - const GURL& url, - const std::string& frame_origin, - const std::string& main_frame_origin, - const std::string& security_info) { - static base::StatsCounter cache("WebKit.CacheHit"); - cache.Increment(); - - RenderViewHostDelegate::Resource* resource_delegate = - delegate_->GetResourceDelegate(); - if (resource_delegate) { - resource_delegate->DidLoadResourceFromMemoryCache( - url, frame_origin, main_frame_origin, security_info); - } -} - -void RenderViewHost::OnMsgDidDisplayInsecureContent() { - RenderViewHostDelegate::Resource* resource_delegate = - delegate_->GetResourceDelegate(); - if (resource_delegate) - resource_delegate->DidDisplayInsecureContent(); -} - -void RenderViewHost::OnMsgDidRunInsecureContent( - const std::string& security_origin) { - RenderViewHostDelegate::Resource* resource_delegate = - delegate_->GetResourceDelegate(); - if (resource_delegate) - resource_delegate->DidRunInsecureContent(security_origin); -} - -void RenderViewHost::OnMsgDidStartProvisionalLoadForFrame(int64 frame_id, - bool is_main_frame, - const GURL& url) { - bool is_error_page = (url.spec() == chrome::kUnreachableWebDataURL); - GURL validated_url(url); - FilterURL(ChildProcessSecurityPolicy::GetInstance(), - process()->id(), &validated_url); - - RenderViewHostDelegate::Resource* resource_delegate = - delegate_->GetResourceDelegate(); - if (resource_delegate) { - resource_delegate->DidStartProvisionalLoadForFrame( - this, frame_id, is_main_frame, is_error_page, validated_url); - } -} - -void RenderViewHost::OnMsgDidFailProvisionalLoadWithError( - int64 frame_id, - bool is_main_frame, - int error_code, - const GURL& url, - bool showing_repost_interstitial) { - VLOG(1) << "Failed Provisional Load: " << url.possibly_invalid_spec() - << ", error_code: " << error_code - << " is_main_frame: " << is_main_frame - << " showing_repost_interstitial: " << showing_repost_interstitial - << " frame_id: " << frame_id; - GURL validated_url(url); - FilterURL(ChildProcessSecurityPolicy::GetInstance(), - process()->id(), &validated_url); - - RenderViewHostDelegate::Resource* resource_delegate = - delegate_->GetResourceDelegate(); - if (resource_delegate) { - resource_delegate->DidFailProvisionalLoadWithError( - this, frame_id, is_main_frame, error_code, validated_url, - showing_repost_interstitial); - } -} - void RenderViewHost::OnMsgFindReply(int request_id, int number_of_matches, const gfx::Rect& selection_rect, @@ -1396,20 +1279,6 @@ void RenderViewHost::OnMsgForwardMessageToExternalHost( delegate_->ProcessExternalHostMessage(message, origin, target); } -void RenderViewHost::OnMsgDocumentLoadedInFrame(int64 frame_id) { - RenderViewHostDelegate::Resource* resource_delegate = - delegate_->GetResourceDelegate(); - if (resource_delegate) - resource_delegate->DocumentLoadedInFrame(frame_id); -} - -void RenderViewHost::OnMsgDidFinishLoad(int64 frame_id) { - RenderViewHostDelegate::Resource* resource_delegate = - delegate_->GetResourceDelegate(); - if (resource_delegate) - resource_delegate->DidFinishLoad(frame_id); -} - void RenderViewHost::DisassociateFromPopupCount() { Send(new ViewMsg_DisassociateFromPopupCount(routing_id())); } @@ -1771,8 +1640,8 @@ void RenderViewHost::OnRemoveAutocompleteEntry(const string16& field_name, } void RenderViewHost::OnShowAutoFillDialog() { - if (CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableTabbedOptions)) { + if (!CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableTabbedOptions)) { Browser* browser = BrowserList::GetLastActive(); if (!browser) return; @@ -2093,6 +1962,27 @@ void RenderViewHost::DetermineIfPageSupportsInstant(const string16& value, verbatim)); } +void RenderViewHost::FilterURL(ChildProcessSecurityPolicy* policy, + int renderer_id, + GURL* url) { + if (!url->is_valid()) + return; // We don't need to block invalid URLs. + + if (url->SchemeIs(chrome::kAboutScheme)) { + // The renderer treats all URLs in the about: scheme as being about:blank. + // Canonicalize about: URLs to about:blank. + *url = GURL(chrome::kAboutBlankURL); + } + + if (!policy->CanRequestURL(renderer_id, *url)) { + // If this renderer is not permitted to request this URL, we invalidate the + // URL. This prevents us from storing the blocked URL and becoming confused + // later. + VLOG(1) << "Blocked URL " << url->spec(); + *url = GURL(); + } +} + void RenderViewHost::OnExtensionPostMessage( int port_id, const std::string& message) { if (process()->profile()->GetExtensionMessageService()) { |