Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 88c7bd484e73f951f3597186b903a13e85e4cf77..8a915371ebeb4e393e6d294e07dc9e336cb3447a 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -1128,7 +1128,21 @@ void RenderFrameImpl::OnNavigate( |
// Ensure we didn't save the swapped out URL in UpdateState, since the |
// browser should never be telling us to navigate to swappedout://. |
CHECK(entry->root().urlString() != WebString::fromUTF8(kSwappedOutURL)); |
- render_view_->history_controller()->GoToEntry(entry.Pass(), cache_policy); |
+ |
+ // TODO(creis): Remove this HistoryEntry hack. We need it to find the |
+ // frame sequence number when swapping a remote frame back to local. |
+ RenderFrameProxy* proxy = |
+ RenderFrameProxy::FromRoutingID(proxy_routing_id_); |
+ if (proxy) |
+ HistoryEntry::UpdateFrameMap(proxy_routing_id_, routing_id_); |
+ |
+ // TODO(creis): Same vs different document load. |
+ // TODO(creis): Change PageState to FrameState. In the meantime, we store |
+ // the relevant frame's HistoryItem in the root of the PageState. |
+ blink::WebHistoryItem history_item = entry->root(); |
+ frame->loadHistoryItem(history_item, |
+ blink::WebHistoryDifferentDocumentLoad, |
+ cache_policy); |
} |
} else if (!common_params.base_url_for_data_url.is_empty()) { |
LoadDataURL(common_params, frame); |
@@ -1299,6 +1313,8 @@ void RenderFrameImpl::OnSwapOut( |
if (proxy) { |
if (!is_main_frame) { |
frame_->swap(proxy->web_frame()); |
+ // TODO(creis): Remove this HistoryEntry hack. |
+ HistoryEntry::UpdateFrameMap(routing_id_, proxy_routing_id); |
if (is_loading) |
proxy->OnDidStartLoading(); |
@@ -2535,7 +2551,9 @@ void RenderFrameImpl::didCommitProvisionalLoad( |
bool is_new_navigation = commit_type == blink::WebStandardCommit; |
if (is_new_navigation) { |
// We bump our Page ID to correspond with the new session history entry. |
- render_view_->page_id_ = render_view_->next_page_id_++; |
+ // TODO(creis): Update this. |
+ //render_view_->page_id_ = render_view_->next_page_id_++; |
+ render_view_->page_id_ = -1; |
// Don't update history list values for kSwappedOutURL, since |
// we don't want to forget the entry that was there, and since we will |
@@ -2605,7 +2623,7 @@ void RenderFrameImpl::didCommitProvisionalLoad( |
// new navigation. |
navigation_state->set_request_committed(true); |
- SendDidCommitProvisionalLoad(frame, commit_type); |
+ SendDidCommitProvisionalLoad(frame, commit_type, item); |
// Check whether we have new encoding name. |
UpdateEncoding(frame, frame->view()->pageEncoding().utf8()); |
@@ -3724,7 +3742,8 @@ bool RenderFrameImpl::IsHidden() { |
// Tell the embedding application that the URL of the active page has changed. |
void RenderFrameImpl::SendDidCommitProvisionalLoad( |
blink::WebFrame* frame, |
- blink::WebHistoryCommitType commit_type) { |
+ blink::WebHistoryCommitType commit_type, |
+ const blink::WebHistoryItem& item) { |
DCHECK(!frame_ || frame_ == frame); |
WebDataSource* ds = frame->dataSource(); |
DCHECK(ds); |
@@ -3790,10 +3809,10 @@ void RenderFrameImpl::SendDidCommitProvisionalLoad( |
// Make navigation state a part of the DidCommitProvisionalLoad message so |
// that committed entry has it at all times. |
HistoryEntry* entry = render_view_->history_controller()->GetCurrentEntry(); |
- if (entry) |
- params.page_state = HistoryEntryToPageState(entry); |
- else |
- params.page_state = PageState::CreateFromURL(request.url()); |
+ // TODO(creis): Change PageState to FrameState. |
+ params.page_state = SingleHistoryItemToPageState(item); |
+ params.item_sequence_number = item.itemSequenceNumber(); |
+ params.document_sequence_number = item.documentSequenceNumber(); |
if (!frame->parent()) { |
// Top-level navigation. |
@@ -4408,6 +4427,7 @@ bool RenderFrameImpl::PrepareRenderViewForNavigation( |
// If this is a stale back/forward (due to a recent navigation the browser |
// didn't know about), ignore it. Only check if swapped in because if the |
// frame is swapped out, it won't commit before asking the browser. |
+ // TODO(creis): Make this check work for OOPIF. |
if (!render_view_->is_swapped_out() && is_history_navigation && |
render_view_->history_list_offset_ != |
history_params.current_history_list_offset) { |