Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 7c8342b37ed80245abf6df3f998ed5746c91cdad..f545e9d8ee27fd354b75c003e3931b732fdd78ce 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -1407,6 +1407,11 @@ blink::WebNavigationPolicy RenderFrameImpl::decidePolicyForNavigation( |
this, frame, extra_data, request, type, default_policy, is_redirect); |
} |
+blink::WebHistoryItem RenderFrameImpl::historyItemForNewChildFrame( |
+ blink::WebFrame* frame) { |
+ return render_view_->webview()->itemForNewChildFrame(frame); |
+} |
+ |
void RenderFrameImpl::willSendSubmitEvent(blink::WebFrame* frame, |
const blink::WebFormElement& form) { |
DCHECK(!frame_ || frame_ == frame); |
@@ -1517,6 +1522,7 @@ void RenderFrameImpl::didStartProvisionalLoad(blink::WebFrame* frame) { |
void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad( |
blink::WebFrame* frame) { |
DCHECK(!frame_ || frame_ == frame); |
+ render_view_->webview()->removeChildrenForRedirect(frame); |
if (frame->parent()) |
return; |
// Received a redirect on the main frame. |
@@ -1638,6 +1644,18 @@ void RenderFrameImpl::didFailProvisionalLoad( |
frame, failed_request, error, replace); |
} |
+void RenderFrameImpl::didCommitProvisionalLoad( |
+ blink::WebFrame* frame, |
+ const blink::WebHistoryItem& item, |
+ blink::WebHistoryCommitType commit_type) { |
+ DocumentState* document_state = |
+ DocumentState::FromDataSource(frame->dataSource()); |
+ render_view_->webview()->updateForCommit(frame, item, commit_type, |
+ document_state->navigation_state()->was_within_same_page()); |
+ |
+ didCommitProvisionalLoad(frame, commit_type == blink::WebStandardCommit); |
+} |
+ |
void RenderFrameImpl::didCommitProvisionalLoad(blink::WebFrame* frame, |
bool is_new_navigation) { |
DCHECK(!frame_ || frame_ == frame); |
@@ -1859,6 +1877,27 @@ void RenderFrameImpl::didFinishLoad(blink::WebFrame* frame) { |
} |
void RenderFrameImpl::didNavigateWithinPage(blink::WebFrame* frame, |
+ const blink::WebHistoryItem& item, |
+ blink::WebHistoryCommitType commit_type) { |
+ DCHECK(!frame_ || frame_ == frame); |
+ // If this was a reference fragment navigation that we initiated, then we |
+ // could end up having a non-null pending navigation params. We just need to |
+ // update the ExtraData on the datasource so that others who read the |
+ // ExtraData will get the new NavigationState. Similarly, if we did not |
+ // initiate this navigation, then we need to take care to reset any pre- |
+ // existing navigation state to a content-initiated navigation state. |
+ // DidCreateDataSource conveniently takes care of this for us. |
+ didCreateDataSource(frame, frame->dataSource()); |
+ |
+ DocumentState* document_state = |
+ DocumentState::FromDataSource(frame->dataSource()); |
+ NavigationState* new_state = document_state->navigation_state(); |
+ new_state->set_was_within_same_page(true); |
+ |
+ didCommitProvisionalLoad(frame, item, commit_type); |
+} |
+ |
+void RenderFrameImpl::didNavigateWithinPage(blink::WebFrame* frame, |
bool is_new_navigation) { |
DCHECK(!frame_ || frame_ == frame); |
// If this was a reference fragment navigation that we initiated, then we |