| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "ios/web/net/crw_ssl_status_updater.h" | 5 #import "ios/web/net/crw_ssl_status_updater.h" |
| 6 | 6 |
| 7 #import "base/mac/scoped_nsobject.h" | 7 #import "base/mac/scoped_nsobject.h" |
| 8 #import "base/strings/sys_string_conversions.h" | 8 #import "base/strings/sys_string_conversions.h" |
| 9 #include "ios/web/navigation/navigation_manager_util.h" |
| 9 #import "ios/web/public/navigation_item.h" | 10 #import "ios/web/public/navigation_item.h" |
| 10 #import "ios/web/public/navigation_manager.h" | 11 #import "ios/web/public/navigation_manager.h" |
| 11 #include "ios/web/public/ssl_status.h" | 12 #include "ios/web/public/ssl_status.h" |
| 12 #import "ios/web/web_state/wk_web_view_security_util.h" | 13 #import "ios/web/web_state/wk_web_view_security_util.h" |
| 13 #include "net/cert/x509_certificate.h" | 14 #include "net/cert/x509_certificate.h" |
| 14 #include "url/gurl.h" | 15 #include "url/gurl.h" |
| 15 | 16 |
| 16 #if !defined(__has_feature) || !__has_feature(objc_arc) | 17 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 17 #error "This file requires ARC support." | 18 #error "This file requires ARC support." |
| 18 #endif | 19 #endif |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 } | 119 } |
| 119 } | 120 } |
| 120 | 121 |
| 121 #pragma mark - Private | 122 #pragma mark - Private |
| 122 | 123 |
| 123 - (void)updateSSLStatusForItemWithID:(int)navigationItemID | 124 - (void)updateSSLStatusForItemWithID:(int)navigationItemID |
| 124 trust:(ScopedCFTypeRef<SecTrustRef>)trust | 125 trust:(ScopedCFTypeRef<SecTrustRef>)trust |
| 125 host:(NSString*)host | 126 host:(NSString*)host |
| 126 withSecurityStyle:(SecurityStyle)style | 127 withSecurityStyle:(SecurityStyle)style |
| 127 certStatus:(CertStatus)certStatus { | 128 certStatus:(CertStatus)certStatus { |
| 128 // The searched item almost always be the last one, so walk backward rather | 129 web::NavigationItem* item = |
| 129 // than forward. | 130 web::GetCommittedItemWithUniqueID(_navigationManager, navigationItemID); |
| 130 for (int i = _navigationManager->GetItemCount() - 1; 0 <= i; i--) { | 131 if (!item) |
| 131 web::NavigationItem* item = _navigationManager->GetItemAtIndex(i); | 132 return; |
| 132 if (item->GetUniqueID() != navigationItemID) | |
| 133 continue; | |
| 134 | 133 |
| 135 // NavigationItem's UniqueID is preserved even after redirects, so | 134 // NavigationItem's UniqueID is preserved even after redirects, so |
| 136 // checking that cert and URL match is necessary. | 135 // checking that cert and URL match is necessary. |
| 137 scoped_refptr<net::X509Certificate> cert(web::CreateCertFromTrust(trust)); | 136 scoped_refptr<net::X509Certificate> cert(web::CreateCertFromTrust(trust)); |
| 138 std::string GURLHost = base::SysNSStringToUTF8(host); | 137 std::string GURLHost = base::SysNSStringToUTF8(host); |
| 139 web::SSLStatus& SSLStatus = item->GetSSL(); | 138 web::SSLStatus& SSLStatus = item->GetSSL(); |
| 140 if (item->GetURL().SchemeIsCryptographic() && !!SSLStatus.certificate && | 139 if (item->GetURL().SchemeIsCryptographic() && !!SSLStatus.certificate && |
| 141 SSLStatus.certificate->Equals(cert.get()) && | 140 SSLStatus.certificate->Equals(cert.get()) && |
| 142 item->GetURL().host() == GURLHost) { | 141 item->GetURL().host() == GURLHost) { |
| 143 web::SSLStatus previousSSLStatus = item->GetSSL(); | 142 web::SSLStatus previousSSLStatus = item->GetSSL(); |
| 144 SSLStatus.cert_status = certStatus; | 143 SSLStatus.cert_status = certStatus; |
| 145 SSLStatus.security_style = style; | 144 SSLStatus.security_style = style; |
| 146 if (!previousSSLStatus.Equals(SSLStatus)) { | 145 if (!previousSSLStatus.Equals(SSLStatus)) { |
| 147 [self didChangeSSLStatusForNavigationItem:item]; | 146 [self didChangeSSLStatusForNavigationItem:item]; |
| 148 } | |
| 149 } | 147 } |
| 150 return; | |
| 151 } | 148 } |
| 152 } | 149 } |
| 153 | 150 |
| 154 - (void)scheduleSSLStatusUpdateUsingTrust:(ScopedCFTypeRef<SecTrustRef>)trust | 151 - (void)scheduleSSLStatusUpdateUsingTrust:(ScopedCFTypeRef<SecTrustRef>)trust |
| 155 host:(NSString*)host { | 152 host:(NSString*)host { |
| 156 // Use Navigation Item's unique ID to locate requested item after | 153 // Use Navigation Item's unique ID to locate requested item after |
| 157 // obtaining cert status asynchronously. | 154 // obtaining cert status asynchronously. |
| 158 int itemID = _navigationManager->GetLastCommittedItem()->GetUniqueID(); | 155 int itemID = _navigationManager->GetLastCommittedItem()->GetUniqueID(); |
| 159 | 156 |
| 160 DCHECK(_dataSource); | 157 DCHECK(_dataSource); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 173 | 170 |
| 174 - (void)didChangeSSLStatusForNavigationItem:(web::NavigationItem*)navItem { | 171 - (void)didChangeSSLStatusForNavigationItem:(web::NavigationItem*)navItem { |
| 175 if ([_delegate respondsToSelector: | 172 if ([_delegate respondsToSelector: |
| 176 @selector(SSLStatusUpdater:didChangeSSLStatusForNavigationItem:)]) { | 173 @selector(SSLStatusUpdater:didChangeSSLStatusForNavigationItem:)]) { |
| 177 [_delegate SSLStatusUpdater:self | 174 [_delegate SSLStatusUpdater:self |
| 178 didChangeSSLStatusForNavigationItem:navItem]; | 175 didChangeSSLStatusForNavigationItem:navItem]; |
| 179 } | 176 } |
| 180 } | 177 } |
| 181 | 178 |
| 182 @end | 179 @end |
| OLD | NEW |