| 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 49e05b2de8f502e2749c905d6061bec48b62bf71..f0cd6cea6d037fdbbe61c7ceba402c4dabaa84fa 100644
|
| --- a/ios/web/web_state/ui/crw_web_controller.mm
|
| +++ b/ios/web/web_state/ui/crw_web_controller.mm
|
| @@ -4538,6 +4538,9 @@ registerLoadRequestForURL:(const GURL&)requestURL
|
| didCommitNavigation:(WKNavigation*)navigation {
|
| [self displayWebView];
|
|
|
| + bool navigationFinished = [_navigationStates stateForNavigation:navigation] ==
|
| + web::WKNavigationState::FINISHED;
|
| +
|
| // Record the navigation state.
|
| [_navigationStates setState:web::WKNavigationState::COMMITTED
|
| forNavigation:navigation];
|
| @@ -4629,10 +4632,21 @@ registerLoadRequestForURL:(const GURL&)requestURL
|
| UMA_HISTOGRAM_BOOLEAN("WebController.WKWebViewHasCertForSecureConnection",
|
| static_cast<bool>(cert));
|
| }
|
| +
|
| + if (navigationFinished) {
|
| + // webView:didFinishNavigation: was called before
|
| + // webView:didCommitNavigation:, so remove the navigation now and signal
|
| + // that navigation was finished.
|
| + [_navigationStates removeNavigation:navigation];
|
| + [self didFinishNavigation:navigation];
|
| + }
|
| }
|
|
|
| - (void)webView:(WKWebView*)webView
|
| didFinishNavigation:(WKNavigation*)navigation {
|
| + bool navigationCommitted =
|
| + [_navigationStates stateForNavigation:navigation] ==
|
| + web::WKNavigationState::COMMITTED;
|
| [_navigationStates setState:web::WKNavigationState::FINISHED
|
| forNavigation:navigation];
|
|
|
| @@ -4643,7 +4657,12 @@ registerLoadRequestForURL:(const GURL&)requestURL
|
| // appropriate time rather than invoking here.
|
| web::ExecuteJavaScript(webView, @"__gCrWeb.didFinishNavigation()", nil);
|
| [self didFinishNavigation:navigation];
|
| - [_navigationStates removeNavigation:navigation];
|
| +
|
| + // Remove navigation only if it has been committed. Otherwise it will be
|
| + // removed in webView:didCommitNavigation: callback.
|
| + if (navigationCommitted) {
|
| + [_navigationStates removeNavigation:navigation];
|
| + }
|
| }
|
|
|
| - (void)webView:(WKWebView*)webView
|
|
|