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

Side by Side 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: Clean up 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/web_contents/web_contents_impl.h" 5 #include "content/browser/web_contents/web_contents_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 3854 matching lines...) Expand 10 before | Expand all | Expand 10 after
3865 RenderProcessGone(GetCrashedStatus())); 3865 RenderProcessGone(GetCrashedStatus()));
3866 } 3866 }
3867 3867
3868 void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) { 3868 void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) {
3869 FOR_EACH_OBSERVER(WebContentsObserver, observers_, RenderViewDeleted(rvh)); 3869 FOR_EACH_OBSERVER(WebContentsObserver, observers_, RenderViewDeleted(rvh));
3870 } 3870 }
3871 3871
3872 void WebContentsImpl::UpdateState(RenderViewHost* rvh, 3872 void WebContentsImpl::UpdateState(RenderViewHost* rvh,
3873 int32 page_id, 3873 int32 page_id,
3874 const PageState& page_state) { 3874 const PageState& page_state) {
3875 DCHECK(!SiteIsolationPolicy::UseSubframeNavigationEntries());
3876
3875 // Ensure that this state update comes from a RenderViewHost that belongs to 3877 // Ensure that this state update comes from a RenderViewHost that belongs to
3876 // this WebContents. 3878 // this WebContents.
3877 // TODO(nasko): This should go through RenderFrameHost. 3879 // TODO(nasko): This should go through RenderFrameHost.
3878 if (rvh->GetDelegate()->GetAsWebContents() != this) 3880 if (rvh->GetDelegate()->GetAsWebContents() != this)
3879 return; 3881 return;
3880 3882
3881 // We must be prepared to handle state updates for any page. They occur 3883 // We must be prepared to handle state updates for any page. They occur
3882 // when the user is scrolling and entering form data, as well as when we're 3884 // when the user is scrolling and entering form data, as well as when we're
3883 // leaving a page, in which case our state may have already been moved to 3885 // leaving a page, in which case our state may have already been moved to
3884 // the next page. The navigation controller will look up the appropriate 3886 // the next page. The navigation controller will look up the appropriate
3885 // NavigationEntry and update it when it is notified via the delegate. 3887 // NavigationEntry and update it when it is notified via the delegate.
3886 RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(rvh); 3888 RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(rvh);
3887 NavigationEntryImpl* entry = controller_.GetEntryWithPageID( 3889 NavigationEntryImpl* entry = controller_.GetEntryWithPageID(
3888 rvhi->GetSiteInstance(), page_id); 3890 rvhi->GetSiteInstance(), page_id);
3889 if (!entry) 3891 if (!entry)
3890 return; 3892 return;
3891 3893
3892 NavigationEntryImpl* new_entry = controller_.GetEntryWithUniqueID( 3894 NavigationEntryImpl* new_entry = controller_.GetEntryWithUniqueID(
3893 static_cast<RenderFrameHostImpl*>(rvhi->GetMainFrame())->nav_entry_id()); 3895 static_cast<RenderFrameHostImpl*>(rvhi->GetMainFrame())->nav_entry_id());
3894 3896
3895 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { 3897 DCHECK_EQ(entry, new_entry);
3896 // TODO(creis): We can't properly update state for cross-process subframes
3897 // until PageState is decomposed into FrameStates. Until then, use the new
3898 // method.
3899 entry = new_entry;
3900 } else {
3901 DCHECK_EQ(entry, new_entry);
3902 }
3903 3898
3904 if (page_state == entry->GetPageState()) 3899 if (page_state == entry->GetPageState())
3905 return; // Nothing to update. 3900 return; // Nothing to update.
3906 entry->SetPageState(page_state); 3901 entry->SetPageState(page_state);
3907 controller_.NotifyEntryChanged(entry); 3902 controller_.NotifyEntryChanged(entry);
3908 } 3903 }
3909 3904
3910 void WebContentsImpl::UpdateTargetURL(RenderViewHost* render_view_host, 3905 void WebContentsImpl::UpdateTargetURL(RenderViewHost* render_view_host,
3911 const GURL& url) { 3906 const GURL& url) {
3912 if (fullscreen_widget_routing_id_ != MSG_ROUTING_NONE) { 3907 if (fullscreen_widget_routing_id_ != MSG_ROUTING_NONE) {
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
4054 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 4049 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
4055 DocumentOnLoadCompletedInMainFrame()); 4050 DocumentOnLoadCompletedInMainFrame());
4056 4051
4057 // TODO(avi): Remove. http://crbug.com/170921 4052 // TODO(avi): Remove. http://crbug.com/170921
4058 NotificationService::current()->Notify( 4053 NotificationService::current()->Notify(
4059 NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 4054 NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
4060 Source<WebContents>(this), 4055 Source<WebContents>(this),
4061 NotificationService::NoDetails()); 4056 NotificationService::NoDetails());
4062 } 4057 }
4063 4058
4059 void WebContentsImpl::UpdateStateForFrame(RenderFrameHost* render_frame_host,
4060 const PageState& page_state) {
4061 DCHECK(SiteIsolationPolicy::UseSubframeNavigationEntries());
4062
4063 // The state update affects the last NavigationEntry associated with the given
4064 // |render_frame_host|. This may not be the last committed NavigationEntry (as
4065 // in the case of an UpdateState from a frame being swapped out). We track
4066 // which entry this is in the RenderFrameHost's nav_entry_id.
4067 RenderFrameHostImpl* rfhi =
4068 static_cast<RenderFrameHostImpl*>(render_frame_host);
4069 NavigationEntryImpl* entry =
4070 controller_.GetEntryWithUniqueID(rfhi->nav_entry_id());
4071 if (!entry)
4072 return;
4073
4074 FrameNavigationEntry* frame_entry =
4075 entry->GetFrameEntry(rfhi->frame_tree_node());
4076 if (!frame_entry)
4077 return;
4078
4079 CHECK_EQ(frame_entry->site_instance(), rfhi->GetSiteInstance());
4080 if (page_state == frame_entry->page_state())
4081 return; // Nothing to update.
4082 frame_entry->set_page_state(page_state);
nasko 2015/11/04 21:12:29 nit: Empty line after the return.
Charlie Reis 2015/11/04 21:17:44 Done.
4083 controller_.NotifyEntryChanged(entry);
4084 }
4085
4064 void WebContentsImpl::UpdateTitle(RenderFrameHost* render_frame_host, 4086 void WebContentsImpl::UpdateTitle(RenderFrameHost* render_frame_host,
4065 int32 page_id, 4087 int32 page_id,
4066 const base::string16& title, 4088 const base::string16& title,
4067 base::i18n::TextDirection title_direction) { 4089 base::i18n::TextDirection title_direction) {
4068 // If we have a title, that's a pretty good indication that we've started 4090 // If we have a title, that's a pretty good indication that we've started
4069 // getting useful data. 4091 // getting useful data.
4070 SetNotWaitingForResponse(); 4092 SetNotWaitingForResponse();
4071 4093
4072 // Try to find the navigation entry, which might not be the current one. 4094 // Try to find the navigation entry, which might not be the current one.
4073 // For example, it might be from a recently swapped out RFH. 4095 // For example, it might be from a recently swapped out RFH.
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
4653 return NULL; 4675 return NULL;
4654 } 4676 }
4655 4677
4656 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { 4678 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) {
4657 force_disable_overscroll_content_ = force_disable; 4679 force_disable_overscroll_content_ = force_disable;
4658 if (view_) 4680 if (view_)
4659 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); 4681 view_->SetOverscrollControllerEnabled(CanOverscrollContent());
4660 } 4682 }
4661 4683
4662 } // namespace content 4684 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698