Index: ios/web/net/crw_ssl_status_updater.mm |
diff --git a/ios/web/net/crw_ssl_status_updater.mm b/ios/web/net/crw_ssl_status_updater.mm |
index 9dee9036cec439d80e81e4c5eee05347d363e293..7840caa43da5e6a7b9b8a9bfc80b4237373ecc7e 100644 |
--- a/ios/web/net/crw_ssl_status_updater.mm |
+++ b/ios/web/net/crw_ssl_status_updater.mm |
@@ -6,6 +6,7 @@ |
#import "base/mac/scoped_nsobject.h" |
#import "base/strings/sys_string_conversions.h" |
+#include "ios/web/navigation/navigation_manager_util.h" |
#import "ios/web/public/navigation_item.h" |
#import "ios/web/public/navigation_manager.h" |
#include "ios/web/public/ssl_status.h" |
@@ -125,29 +126,25 @@ using web::SecurityStyle; |
host:(NSString*)host |
withSecurityStyle:(SecurityStyle)style |
certStatus:(CertStatus)certStatus { |
- // The searched item almost always be the last one, so walk backward rather |
- // than forward. |
- for (int i = _navigationManager->GetItemCount() - 1; 0 <= i; i--) { |
- web::NavigationItem* item = _navigationManager->GetItemAtIndex(i); |
- if (item->GetUniqueID() != navigationItemID) |
- continue; |
- |
- // NavigationItem's UniqueID is preserved even after redirects, so |
- // checking that cert and URL match is necessary. |
- scoped_refptr<net::X509Certificate> cert(web::CreateCertFromTrust(trust)); |
- std::string GURLHost = base::SysNSStringToUTF8(host); |
- web::SSLStatus& SSLStatus = item->GetSSL(); |
- if (item->GetURL().SchemeIsCryptographic() && !!SSLStatus.certificate && |
- SSLStatus.certificate->Equals(cert.get()) && |
- item->GetURL().host() == GURLHost) { |
- web::SSLStatus previousSSLStatus = item->GetSSL(); |
- SSLStatus.cert_status = certStatus; |
- SSLStatus.security_style = style; |
- if (!previousSSLStatus.Equals(SSLStatus)) { |
- [self didChangeSSLStatusForNavigationItem:item]; |
- } |
- } |
+ web::NavigationItem* item = |
+ web::GetCommittedItemWithUniqueID(_navigationManager, navigationItemID); |
+ if (!item) |
return; |
+ |
+ // NavigationItem's UniqueID is preserved even after redirects, so |
+ // checking that cert and URL match is necessary. |
+ scoped_refptr<net::X509Certificate> cert(web::CreateCertFromTrust(trust)); |
+ std::string GURLHost = base::SysNSStringToUTF8(host); |
+ web::SSLStatus& SSLStatus = item->GetSSL(); |
+ if (item->GetURL().SchemeIsCryptographic() && !!SSLStatus.certificate && |
+ SSLStatus.certificate->Equals(cert.get()) && |
+ item->GetURL().host() == GURLHost) { |
+ web::SSLStatus previousSSLStatus = item->GetSSL(); |
+ SSLStatus.cert_status = certStatus; |
+ SSLStatus.security_style = style; |
+ if (!previousSSLStatus.Equals(SSLStatus)) { |
+ [self didChangeSSLStatusForNavigationItem:item]; |
+ } |
} |
} |