Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index d07cd18ee0890e5cd2dc048d542f6d8eabdd3eef..61a0485d9479e0fcb2d5f0b0baa038dfcc4cbb68 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -2535,14 +2535,22 @@ void RenderFrameImpl::loadURLExternally(const blink::WebURLRequest& request, |
} |
blink::WebHistoryItem RenderFrameImpl::historyItemForNewChildFrame( |
- blink::WebFrame* frame) { |
- DCHECK(!frame_ || frame_ == frame); |
+ bool* should_load_request) { |
- // TODO(creis): In OOPIF enabled modes, send an IPC to the browser process |
- // telling it to navigate the new frame. See https://crbug.com/502317. |
- if (SiteIsolationPolicy::UseSubframeNavigationEntries()) |
+ // In OOPIF enabled modes, send an IPC to the browser process telling it to |
+ // navigate the new frame. |
+ if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
+ std::string unique_name = frame_->uniqueName().utf8(); |
+ // TODO(creis): Have the browser tell the renderer process which names it |
+ // has history items for. In that case, set should_load_request to true and |
+ // return an empty WebHistoryItem so that Blink loads the default. |
+ // See https://crbug.com/502317. |
+ *should_load_request = false; |
+ Send(new FrameHostMsg_NavigateNewChildFrame(routing_id_, unique_name)); |
return WebHistoryItem(); |
+ } |
+ *should_load_request = true; |
return render_view_->history_controller()->GetItemForNewChildFrame(this); |
} |
@@ -4770,6 +4778,8 @@ void RenderFrameImpl::NavigateInternal( |
: blink::WebHistoryDifferentDocumentLoad; |
// Navigate the frame directly. |
+ // TODO(creis): Use InitialHistoryLoad rather than BackForward for a |
+ // history navigation in a newly created subframe. |
WebURLRequest request = |
frame_->requestFromHistoryItem(history_item, cache_policy); |
frame_->load(request, blink::WebFrameLoadType::BackForward, |