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 1f20df56c0032658f45927fa4d62cfa0d7e43a85..3e85b266568658499e98974d12770f8dc29bd0be 100644 |
--- a/ios/web/web_state/ui/crw_web_controller.mm |
+++ b/ios/web/web_state/ui/crw_web_controller.mm |
@@ -739,8 +739,9 @@ typedef void (^ViewportStateCompletion)(const web::PageViewportState*); |
stateObject:(NSString*)stateObject; |
// Sets _documentURL to newURL, and updates any relevant state information. |
- (void)setDocumentURL:(const GURL&)newURL; |
-// Sets WKWebView's title to the last committed navigation item. |
-- (void)updateNavigationItemTitle; |
+// Sets last committed NavigationItem's title to the given |title|, which can |
+// not be nil. |
+- (void)setNavigationItemTitle:(NSString*)title; |
// Returns YES if the current navigation item corresponds to a web page |
// loaded by a POST request. |
- (BOOL)isCurrentNavigationItemPOST; |
@@ -1423,15 +1424,14 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
} |
} |
-- (void)updateNavigationItemTitle { |
- NSString* webViewTitle = [_webView title]; |
- DCHECK(webViewTitle); |
+- (void)setNavigationItemTitle:(NSString*)title { |
+ DCHECK(title); |
auto& navigationManager = _webStateImpl->GetNavigationManagerImpl(); |
web::NavigationItem* item = navigationManager.GetLastCommittedItem(); |
if (!item) |
return; |
- base::string16 newTitle = base::SysNSStringToUTF16(webViewTitle); |
+ base::string16 newTitle = base::SysNSStringToUTF16(title); |
if (item->GetTitle() == newTitle) |
return; |
@@ -1442,7 +1442,7 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
navigationManager.OnNavigationItemChanged(); |
if ([_delegate respondsToSelector:@selector(webController:titleDidChange:)]) { |
- [_delegate webController:self titleDidChange:webViewTitle]; |
+ [_delegate webController:self titleDidChange:title]; |
} |
} |
@@ -1870,14 +1870,13 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
// Perform post-load-finished updates. |
[self didFinishWithURL:currentURL loadSuccess:loadSuccess]; |
- // Inform the embedder the title changed. |
+ NSString* title = [self.nativeController title]; |
+ if (title) |
+ [self setNavigationItemTitle:title]; |
+ |
+ // If the controller handles title change notification, route those to the |
+ // delegate. |
if ([_delegate respondsToSelector:@selector(webController:titleDidChange:)]) { |
- NSString* title = [self.nativeController title]; |
- // If a title is present, notify the delegate. |
- if (title) |
- [_delegate webController:self titleDidChange:title]; |
- // If the controller handles title change notification, route those to the |
- // delegate. |
if ([self.nativeController respondsToSelector:@selector(setDelegate:)]) { |
[self.nativeController setDelegate:self]; |
} |
@@ -4982,7 +4981,6 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
// This is the point where the document's URL and title have actually changed, |
// and pending navigation information should be applied to state information. |
[self setDocumentURL:net::GURLWithNSURL([_webView URL])]; |
- [self updateNavigationItemTitle]; |
if (!_lastRegisteredRequestURL.is_valid() && |
_documentURL != _lastRegisteredRequestURL) { |
@@ -5025,6 +5023,10 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
// Attempt to update the HTML5 history state. |
[self updateHTML5HistoryState]; |
+ // This is the point where pending entry has been committed, and navigation |
+ // item title should be updated. |
+ [self setNavigationItemTitle:[_webView title]]; |
+ |
// Report cases where SSL cert is missing for a secure connection. |
if (_documentURL.SchemeIsCryptographic()) { |
scoped_refptr<net::X509Certificate> cert = |
@@ -5225,7 +5227,7 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
if (hasPendingNavigation) { |
// Do not update the title if there is a navigation in progress because |
// there is no way to tell if KVO change fired for new or previous page. |
- [self updateNavigationItemTitle]; |
+ [self setNavigationItemTitle:[_webView title]]; |
} |
} |