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

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

Issue 2834413002: Return NavigationContext from registerLoadRequest. (Closed)
Patch Set: Rebased Created 3 years, 7 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1e7c47326955a1b846d668542693cd7c5a13dfed..162acc53fd29c37d8e4c80f52dd0bbf698e38b64 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -81,6 +81,7 @@
#import "ios/web/web_state/js/crw_js_plugin_placeholder_manager.h"
#import "ios/web/web_state/js/crw_js_post_request_loader.h"
#import "ios/web/web_state/js/crw_js_window_id_manager.h"
+#include "ios/web/web_state/navigation_context_impl.h"
#import "ios/web/web_state/page_viewport_state.h"
#import "ios/web/web_state/ui/crw_context_menu_controller.h"
#import "ios/web/web_state/ui/crw_swipe_recognizer_provider.h"
@@ -644,14 +645,18 @@ NSError* WKWebViewErrorWithSource(NSError* error, WKWebViewErrorSource source) {
// Attempts to handle a script message. Returns YES on success, NO otherwise.
- (BOOL)respondToWKScriptMessage:(WKScriptMessage*)scriptMessage;
// Registers load request with empty referrer and link or client redirect
-// transition based on user interaction state.
-- (void)registerLoadRequest:(const GURL&)URL;
+// transition based on user interaction state. Returns navigation context for
+// this request.
+- (std::unique_ptr<web::NavigationContextImpl>)registerLoadRequestForURL:
+ (const GURL&)URL;
// Prepares web controller and delegates for anticipated page change.
// Allows several methods to invoke webWill/DidAddPendingURL on anticipated page
// change, using the same cached request and calculated transition types.
-- (void)registerLoadRequest:(const GURL&)URL
- referrer:(const web::Referrer&)referrer
- transition:(ui::PageTransition)transition;
+// Returns navigation context for this request.
+- (std::unique_ptr<web::NavigationContextImpl>)
+registerLoadRequestForURL:(const GURL&)URL
+ referrer:(const web::Referrer&)referrer
+ transition:(ui::PageTransition)transition;
// Updates the HTML5 history state of the page using the current NavigationItem.
// For same-document navigations and navigations affected by
// window.history.[push/replace]State(), the URL and serialized state object
@@ -1433,7 +1438,8 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
return [_webView estimatedProgress];
}
-- (void)registerLoadRequest:(const GURL&)URL {
+- (std::unique_ptr<web::NavigationContextImpl>)registerLoadRequestForURL:
+ (const GURL&)URL {
// Get the navigation type from the last main frame load request, and try to
// map that to a PageTransition.
WKNavigationType navigationType =
@@ -1466,12 +1472,15 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
}
// The referrer is not known yet, and will be updated later.
const web::Referrer emptyReferrer;
- [self registerLoadRequest:URL referrer:emptyReferrer transition:transition];
+ return [self registerLoadRequestForURL:URL
+ referrer:emptyReferrer
+ transition:transition];
}
-- (void)registerLoadRequest:(const GURL&)requestURL
- referrer:(const web::Referrer&)referrer
- transition:(ui::PageTransition)transition {
+- (std::unique_ptr<web::NavigationContextImpl>)
+registerLoadRequestForURL:(const GURL&)requestURL
+ referrer:(const web::Referrer&)referrer
+ transition:(ui::PageTransition)transition {
// Transfer time is registered so that further transitions within the time
// envelope are not also registered as links.
_lastTransferTimeInSeconds = CFAbsoluteTimeGetCurrent();
@@ -1504,8 +1513,13 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
web::NavigationInitiationType::RENDERER_INITIATED,
web::NavigationManager::UserAgentOverrideOption::INHERIT);
}
+ std::unique_ptr<web::NavigationContextImpl> context =
+ web::NavigationContextImpl::CreateNavigationContext(
+ _webStateImpl, requestURL, nullptr /* response_headers */);
_webStateImpl->SetIsLoading(true);
+ // TODO(crbug.com/713836): pass context to |OnProvisionalNavigationStarted|.
_webStateImpl->OnProvisionalNavigationStarted(requestURL);
+ return context;
}
- (void)updateHTML5HistoryState {
@@ -1800,9 +1814,10 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
item->SetVirtualURL([nativeContent virtualURL]);
}
- [self registerLoadRequest:targetURL
- referrer:referrer
- transition:self.currentTransition];
+ std::unique_ptr<web::NavigationContextImpl> navigationContext =
+ [self registerLoadRequestForURL:targetURL
+ referrer:referrer
+ transition:self.currentTransition];
[self loadNativeViewWithSuccess:YES];
}
@@ -4365,7 +4380,8 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
}
return;
} else {
- [self registerLoadRequest:webViewURL];
+ std::unique_ptr<web::NavigationContextImpl> navigationContext =
+ [self registerLoadRequestForURL:webViewURL];
}
}
@@ -4379,9 +4395,12 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
[_navigationStates setState:web::WKNavigationState::REDIRECTED
forNavigation:navigation];
- [self registerLoadRequest:net::GURLWithNSURL(webView.URL)
- referrer:[self currentReferrer]
- transition:ui::PAGE_TRANSITION_SERVER_REDIRECT];
+ // It is fine to ignore returned NavigationContext. Context does not change
+ // for redirect and old context stored _navigationStates is valid and it
+ // should not be replaced.
+ [self registerLoadRequestForURL:net::GURLWithNSURL(webView.URL)
+ referrer:[self currentReferrer]
+ transition:ui::PAGE_TRANSITION_SERVER_REDIRECT];
}
- (void)webView:(WKWebView*)webView
@@ -4850,11 +4869,12 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
// registering a load request logically comes before updating the document
// URL, but also must come first since it uses state that is reset on URL
// changes.
+ std::unique_ptr<web::NavigationContextImpl> navigationContext;
if (!_changingHistoryState) {
// If this wasn't a previously-expected load (e.g., certain back/forward
// navigations), register the load request.
if (![self isLoadRequestPendingForURL:newURL])
- [self registerLoadRequest:newURL];
+ navigationContext = [self registerLoadRequestForURL:newURL];
}
[self setDocumentURL:newURL];
@@ -4904,9 +4924,10 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
[request setAllHTTPHeaderFields:self.currentHTTPHeaders];
GURL navigationURL =
currentItem ? currentItem->GetURL() : GURL::EmptyGURL();
- [self registerLoadRequest:navigationURL
- referrer:self.currentNavItemReferrer
- transition:self.currentTransition];
+ std::unique_ptr<web::NavigationContextImpl> navigationContext =
+ [self registerLoadRequestForURL:navigationURL
+ referrer:self.currentNavItemReferrer
+ transition:self.currentTransition];
[self loadPOSTRequest:request];
return;
}
@@ -4914,9 +4935,10 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
ProceduralBlock defaultNavigationBlock = ^{
web::NavigationItem* item = self.currentNavItem;
GURL navigationURL = item ? item->GetURL() : GURL::EmptyGURL();
- [self registerLoadRequest:navigationURL
- referrer:self.currentNavItemReferrer
- transition:self.currentTransition];
+ std::unique_ptr<web::NavigationContextImpl> navigationContext =
+ [self registerLoadRequestForURL:navigationURL
+ referrer:self.currentNavItemReferrer
+ transition:self.currentTransition];
[self loadRequest:request];
[self reportBackForwardNavigationTypeForFastNavigation:NO];
};
@@ -4951,9 +4973,10 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
// so |reload| must be explicitly called.
web::NavigationItem* item = self.currentNavItem;
GURL navigationURL = item ? item->GetURL() : GURL::EmptyGURL();
- [self registerLoadRequest:navigationURL
- referrer:self.currentNavItemReferrer
- transition:self.currentTransition];
+ std::unique_ptr<web::NavigationContextImpl> navigationContext =
+ [self registerLoadRequestForURL:navigationURL
+ referrer:self.currentNavItemReferrer
+ transition:self.currentTransition];
WKNavigation* navigation = nil;
if (navigationURL == net::GURLWithNSURL([_webView URL])) {
navigation = [_webView reload];
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698