| Index: ios/web/web_state/ui/crw_wk_navigation_states.mm
|
| diff --git a/ios/web/web_state/ui/crw_wk_navigation_states.mm b/ios/web/web_state/ui/crw_wk_navigation_states.mm
|
| index 235562e4f5ebbeb90f9dc63d04a1d92b996bebd5..24389a86605d0bf4c3d1a9cab0241d80c95ca001 100644
|
| --- a/ios/web/web_state/ui/crw_wk_navigation_states.mm
|
| +++ b/ios/web/web_state/ui/crw_wk_navigation_states.mm
|
| @@ -122,14 +122,24 @@
|
| [[CRWWKNavigationsStateRecord alloc] initWithState:state
|
| index:++_lastStateIndex];
|
| } else {
|
| - DCHECK(
|
| - record.state < state ||
|
| - (record.state == state && state == web::WKNavigationState::REDIRECTED));
|
| + DCHECK(record.state < state ||
|
| + // Redirect can be called multiple times.
|
| + (record.state == state &&
|
| + state == web::WKNavigationState::REDIRECTED) ||
|
| + // didFinishNavigation can be called before didCommitNvigation.
|
| + (record.state == web::WKNavigationState::FINISHED &&
|
| + state == web::WKNavigationState::COMMITTED));
|
| record.state = state;
|
| }
|
| [_records setObject:record forKey:key];
|
| }
|
|
|
| +- (web::WKNavigationState)stateForNavigation:(WKNavigation*)navigation {
|
| + id key = [self keyForNavigation:navigation];
|
| + CRWWKNavigationsStateRecord* record = [_records objectForKey:key];
|
| + return record ? record.state : web::WKNavigationState::NONE;
|
| +}
|
| +
|
| - (void)removeNavigation:(WKNavigation*)navigation {
|
| id key = [self keyForNavigation:navigation];
|
| DCHECK([_records objectForKey:key]);
|
|
|