Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1689)

Unified Diff: content/browser/web_contents/web_contents_impl.cc

Issue 1425303002: OOPIF: Stop using HistoryController and refactor UpdateState. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix nit Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/common/frame_messages.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/web_contents/web_contents_impl.cc
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index ea91c32ffe87afe7fef003d6daf03ca5b60b431f..0a9956ffe710eba58b7b4e8bb29130d7c932afbb 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -3872,6 +3872,8 @@ void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) {
void WebContentsImpl::UpdateState(RenderViewHost* rvh,
int32 page_id,
const PageState& page_state) {
+ DCHECK(!SiteIsolationPolicy::UseSubframeNavigationEntries());
+
// Ensure that this state update comes from a RenderViewHost that belongs to
// this WebContents.
// TODO(nasko): This should go through RenderFrameHost.
@@ -3892,14 +3894,7 @@ void WebContentsImpl::UpdateState(RenderViewHost* rvh,
NavigationEntryImpl* new_entry = controller_.GetEntryWithUniqueID(
static_cast<RenderFrameHostImpl*>(rvhi->GetMainFrame())->nav_entry_id());
- if (SiteIsolationPolicy::UseSubframeNavigationEntries()) {
- // TODO(creis): We can't properly update state for cross-process subframes
- // until PageState is decomposed into FrameStates. Until then, use the new
- // method.
- entry = new_entry;
- } else {
- DCHECK_EQ(entry, new_entry);
- }
+ DCHECK_EQ(entry, new_entry);
if (page_state == entry->GetPageState())
return; // Nothing to update.
@@ -4061,6 +4056,34 @@ void WebContentsImpl::DocumentOnLoadCompleted(
NotificationService::NoDetails());
}
+void WebContentsImpl::UpdateStateForFrame(RenderFrameHost* render_frame_host,
+ const PageState& page_state) {
+ DCHECK(SiteIsolationPolicy::UseSubframeNavigationEntries());
+
+ // The state update affects the last NavigationEntry associated with the given
+ // |render_frame_host|. This may not be the last committed NavigationEntry (as
+ // in the case of an UpdateState from a frame being swapped out). We track
+ // which entry this is in the RenderFrameHost's nav_entry_id.
+ RenderFrameHostImpl* rfhi =
+ static_cast<RenderFrameHostImpl*>(render_frame_host);
+ NavigationEntryImpl* entry =
+ controller_.GetEntryWithUniqueID(rfhi->nav_entry_id());
+ if (!entry)
+ return;
+
+ FrameNavigationEntry* frame_entry =
+ entry->GetFrameEntry(rfhi->frame_tree_node());
+ if (!frame_entry)
+ return;
+
+ CHECK_EQ(frame_entry->site_instance(), rfhi->GetSiteInstance());
+ if (page_state == frame_entry->page_state())
+ return; // Nothing to update.
+
+ frame_entry->set_page_state(page_state);
+ controller_.NotifyEntryChanged(entry);
+}
+
void WebContentsImpl::UpdateTitle(RenderFrameHost* render_frame_host,
int32 page_id,
const base::string16& title,
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/common/frame_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698