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

Unified Diff: ios/web/web_state/ui/crw_web_controller.mm

Issue 2931833004: Always set the navigation pending item for page reload. (Closed)
Patch Set: only reload cases Created 3 years, 6 months 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
Index: ios/web/web_state/ui/crw_web_controller.mm
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index ccd31a039220858dec9b95c4540a465aae73177c..214cdc442f762e964c9f38a62e377a3193483ce9 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -1521,11 +1521,18 @@ registerLoadRequestForURL:(const GURL&)requestURL
// Typically on PAGE_TRANSITION_CLIENT_REDIRECT.
[[self sessionController] updatePendingItem:requestURL];
} else {
- // A new session history entry needs to be created.
- self.navigationManagerImpl->AddPendingItem(
- requestURL, referrer, transition,
- web::NavigationInitiationType::RENDERER_INITIATED,
- web::NavigationManager::UserAgentOverrideOption::INHERIT);
+ // If this is a reload then there no need to create a new pending item,
+ // instead update the pending item to the last committed item.
+ if (PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD)) {
+ self.sessionController.pendingItemIndex =
+ self.sessionController.lastCommittedItemIndex;
+ } else {
+ // A new session history entry needs to be created.
+ self.navigationManagerImpl->AddPendingItem(
+ requestURL, referrer, transition,
+ web::NavigationInitiationType::RENDERER_INITIATED,
+ web::NavigationManager::UserAgentOverrideOption::INHERIT);
+ }
}
std::unique_ptr<web::NavigationContextImpl> context =
web::NavigationContextImpl::CreateNavigationContext(
@@ -1988,6 +1995,11 @@ registerLoadRequestForURL:(const GURL&)requestURL
BOOL isChromeScheme =
web::GetWebClient()->IsAppSpecificURL(currentNavigationURL);
+ // Since this is implicit reload, no new pending item should be created, set
+ // the pending item index to the last committed item.
+ self.sessionController.pendingItemIndex =
+ self.sessionController.lastCommittedItemIndex;
+
// Don't immediately load the web page if in overlay mode. Always load if
// native.
if (isChromeScheme || !_overlayPreviewMode) {
@@ -2029,6 +2041,10 @@ registerLoadRequestForURL:(const GURL&)requestURL
_lastUserInteraction.reset();
base::RecordAction(UserMetricsAction("Reload"));
GURL url = self.currentNavItem->GetURL();
+ // Reloading shouldn't create create a new pending item, instead set the
+ // pending item index to the last committed item.
+ self.sessionController.pendingItemIndex =
Eugene But (OOO till 7-30) 2017/06/15 00:08:11 Wouldn't |reload| eventually call |registerLoadReq
mrefaat 2017/06/15 18:35:35 This will not happen in every case, only when the
Eugene But (OOO till 7-30) 2017/06/16 03:25:46 Thanks. So this code is needed to cover NativeCont
mrefaat 2017/06/16 19:28:04 This will happen in case the reload is triggered b
Eugene But (OOO till 7-30) 2017/06/17 02:57:14 But reload triggered by renderer calls |reload| as
mrefaat 2017/06/17 11:33:08 I'm not sure, from what i see it seems that goDelt
+ self.sessionController.lastCommittedItemIndex;
if ([self shouldLoadURLInNativeView:url]) {
std::unique_ptr<web::NavigationContextImpl> navigationContext = [self
registerLoadRequestForURL:url

Powered by Google App Engine
This is Rietveld 408576698