Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 91b13ef75ba42395e458b6d8451e0d81e94a39e3..79a6874e21e5db8dd65e86ac8c46a47331ce519a 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -1571,6 +1571,7 @@ bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) { |
OnTextTrackSettingsChanged) |
IPC_MESSAGE_HANDLER(FrameMsg_PostMessageEvent, OnPostMessageEvent) |
IPC_MESSAGE_HANDLER(FrameMsg_FailedNavigation, OnFailedNavigation) |
+ IPC_MESSAGE_HANDLER(FrameMsg_DroppedNavigation, OnDroppedNavigation) |
IPC_MESSAGE_HANDLER(FrameMsg_GetSavableResourceLinks, |
OnGetSavableResourceLinks) |
IPC_MESSAGE_HANDLER(FrameMsg_GetSerializedHtmlWithLocalLinks, |
@@ -4053,6 +4054,10 @@ RenderFrameImpl::getEffectiveConnectionType() { |
return effective_connection_type_; |
} |
+void RenderFrameImpl::abortClientNavigation() { |
+ Send(new FrameHostMsg_AbortNavigation(routing_id_)); |
+} |
+ |
void RenderFrameImpl::didChangeSelection(bool is_empty_selection) { |
if (!GetRenderWidget()->input_handler().handling_input_event() && |
!handling_select_range_) |
@@ -5261,6 +5266,16 @@ void RenderFrameImpl::OnFailedNavigation( |
browser_side_navigation_pending_ = false; |
} |
+void RenderFrameImpl::OnDroppedNavigation(int navigation_id) { |
+ // Check that the navigation dropped was the last one sent to the browser |
+ // process. If not, do nothing as the browser process still has some more |
+ // navigations to process. |
+ if (navigation_id != navigation_id_) |
+ return; |
+ browser_side_navigation_pending_ = false; |
+ frame_->clientDroppedNavigation(); |
+} |
+ |
WebNavigationPolicy RenderFrameImpl::decidePolicyForNavigation( |
const NavigationPolicyInfo& info) { |
// A content initiated navigation may have originated from a link-click, |
@@ -6334,7 +6349,7 @@ void RenderFrameImpl::BeginNavigation(const NavigationPolicyInfo& info) { |
blink::WebURLRequest::ServiceWorkerMode::All, |
GetRequestContextTypeForWebURLRequest(info.urlRequest), |
GetMixedContentContextTypeForWebURLRequest(info.urlRequest), |
- initiator_origin); |
+ initiator_origin, ++navigation_id_); |
if (!info.form.isNull()) { |
WebSearchableFormData web_searchable_form_data(info.form); |