Chromium Code Reviews| 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 #include "base/mac/scoped_block.h" | 7 #include "base/mac/scoped_block.h" |
| 8 #include "base/strings/sys_string_conversions.h" | 8 #include "base/strings/sys_string_conversions.h" |
| 9 #import "ios/web/navigation/crw_session_controller+private_constructors.h" | 9 #import "ios/web/navigation/crw_session_controller+private_constructors.h" |
| 10 #import "ios/web/navigation/crw_session_controller.h" | 10 #import "ios/web/navigation/crw_session_controller.h" |
| 11 #import "ios/web/navigation/navigation_manager_impl.h" | 11 #import "ios/web/navigation/navigation_manager_impl.h" |
| 12 #include "ios/web/public/cert_store.h" | 12 #include "ios/web/public/cert_store.h" |
|
Eugene But (OOO till 7-30)
2016/09/08 16:57:46
ditto
| |
| 13 #include "ios/web/public/navigation_item.h" | 13 #include "ios/web/public/navigation_item.h" |
| 14 #include "ios/web/public/ssl_status.h" | 14 #include "ios/web/public/ssl_status.h" |
| 15 #include "ios/web/public/test/web_test.h" | 15 #include "ios/web/public/test/web_test.h" |
| 16 #import "ios/web/web_state/wk_web_view_security_util.h" | 16 #import "ios/web/web_state/wk_web_view_security_util.h" |
| 17 #include "net/test/cert_test_util.h" | 17 #include "net/test/cert_test_util.h" |
| 18 #include "net/test/test_data_directory.h" | 18 #include "net/test/test_data_directory.h" |
| 19 #include "third_party/ocmock/OCMock/OCMock.h" | 19 #include "third_party/ocmock/OCMock/OCMock.h" |
| 20 #include "third_party/ocmock/gtest_support.h" | 20 #include "third_party/ocmock/gtest_support.h" |
| 21 | 21 |
| 22 // Mocks CRWSSLStatusUpdaterTestDataSource. | 22 // Mocks CRWSSLStatusUpdaterTestDataSource. |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 140 // Make sure that item change callback was called. | 140 // Make sure that item change callback was called. |
| 141 [[delegate_ expect] SSLStatusUpdater:ssl_status_updater_ | 141 [[delegate_ expect] SSLStatusUpdater:ssl_status_updater_ |
| 142 didChangeSSLStatusForNavigationItem:item]; | 142 didChangeSSLStatusForNavigationItem:item]; |
| 143 | 143 |
| 144 [ssl_status_updater_ updateSSLStatusForNavigationItem:item | 144 [ssl_status_updater_ updateSSLStatusForNavigationItem:item |
| 145 withCertHost:kHostName | 145 withCertHost:kHostName |
| 146 trust:trust_ | 146 trust:trust_ |
| 147 hasOnlySecureContent:NO]; | 147 hasOnlySecureContent:NO]; |
| 148 | 148 |
| 149 // No certificate for http. | 149 // No certificate for http. |
| 150 EXPECT_FALSE(item->GetSSL().cert_id); | 150 EXPECT_FALSE(!!item->GetSSL().certificate.get()); |
| 151 // Make sure that security style and content status did change. | 151 // Make sure that security style and content status did change. |
| 152 EXPECT_EQ(web::SECURITY_STYLE_UNAUTHENTICATED, item->GetSSL().security_style); | 152 EXPECT_EQ(web::SECURITY_STYLE_UNAUTHENTICATED, item->GetSSL().security_style); |
| 153 EXPECT_EQ(web::SSLStatus::DISPLAYED_INSECURE_CONTENT, | 153 EXPECT_EQ(web::SSLStatus::DISPLAYED_INSECURE_CONTENT, |
| 154 item->GetSSL().content_status); | 154 item->GetSSL().content_status); |
| 155 } | 155 } |
| 156 | 156 |
| 157 // Tests that delegate callback is not called if no changes were made to http | 157 // Tests that delegate callback is not called if no changes were made to http |
| 158 // navigation item. | 158 // navigation item. |
| 159 TEST_F(CRWSSLStatusUpdaterTest, NoChangesToHttpItem) { | 159 TEST_F(CRWSSLStatusUpdaterTest, NoChangesToHttpItem) { |
| 160 nav_manager_->SetSessionController(SessionControllerWithEntry(kHttpUrl)); | 160 nav_manager_->SetSessionController(SessionControllerWithEntry(kHttpUrl)); |
| 161 web::NavigationItem* item = nav_manager_->GetLastCommittedItem(); | 161 web::NavigationItem* item = nav_manager_->GetLastCommittedItem(); |
| 162 item->GetSSL().security_style = SECURITY_STYLE_UNAUTHENTICATED; | 162 item->GetSSL().security_style = SECURITY_STYLE_UNAUTHENTICATED; |
| 163 | 163 |
| 164 [ssl_status_updater_ updateSSLStatusForNavigationItem:item | 164 [ssl_status_updater_ updateSSLStatusForNavigationItem:item |
| 165 withCertHost:kHostName | 165 withCertHost:kHostName |
| 166 trust:trust_ | 166 trust:trust_ |
| 167 hasOnlySecureContent:YES]; | 167 hasOnlySecureContent:YES]; |
| 168 // No certificate for http. | 168 // No certificate for http. |
| 169 EXPECT_FALSE(item->GetSSL().cert_id); | 169 EXPECT_FALSE(!!item->GetSSL().certificate.get()); |
| 170 // Make sure that security style did not change. | 170 // Make sure that security style did not change. |
| 171 EXPECT_EQ(web::SECURITY_STYLE_UNAUTHENTICATED, item->GetSSL().security_style); | 171 EXPECT_EQ(web::SECURITY_STYLE_UNAUTHENTICATED, item->GetSSL().security_style); |
| 172 } | 172 } |
| 173 | 173 |
| 174 // Tests updating https navigation item without cert. | 174 // Tests updating https navigation item without cert. |
| 175 TEST_F(CRWSSLStatusUpdaterTest, HttpsItemNoCert) { | 175 TEST_F(CRWSSLStatusUpdaterTest, HttpsItemNoCert) { |
| 176 nav_manager_->SetSessionController(SessionControllerWithEntry(kHttpsUrl)); | 176 nav_manager_->SetSessionController(SessionControllerWithEntry(kHttpsUrl)); |
| 177 web::NavigationItem* item = nav_manager_->GetLastCommittedItem(); | 177 web::NavigationItem* item = nav_manager_->GetLastCommittedItem(); |
| 178 // Change default value to test that |item| is actually changed. | 178 // Change default value to test that |item| is actually changed. |
| 179 item->GetSSL().security_style = SECURITY_STYLE_UNAUTHENTICATED; | 179 item->GetSSL().security_style = SECURITY_STYLE_UNAUTHENTICATED; |
| 180 | 180 |
| 181 // Make sure that item change callback was called. | 181 // Make sure that item change callback was called. |
| 182 [[delegate_ expect] SSLStatusUpdater:ssl_status_updater_ | 182 [[delegate_ expect] SSLStatusUpdater:ssl_status_updater_ |
| 183 didChangeSSLStatusForNavigationItem:item]; | 183 didChangeSSLStatusForNavigationItem:item]; |
| 184 | 184 |
| 185 [ssl_status_updater_ | 185 [ssl_status_updater_ |
| 186 updateSSLStatusForNavigationItem:item | 186 updateSSLStatusForNavigationItem:item |
| 187 withCertHost:kHostName | 187 withCertHost:kHostName |
| 188 trust:base::ScopedCFTypeRef<SecTrustRef>() | 188 trust:base::ScopedCFTypeRef<SecTrustRef>() |
| 189 hasOnlySecureContent:YES]; | 189 hasOnlySecureContent:YES]; |
| 190 // No certificate. | 190 // No certificate. |
| 191 EXPECT_FALSE(item->GetSSL().cert_id); | 191 EXPECT_FALSE(!!item->GetSSL().certificate.get()); |
| 192 // Make sure that security style did change. | 192 // Make sure that security style did change. |
| 193 EXPECT_EQ(web::SECURITY_STYLE_UNKNOWN, item->GetSSL().security_style); | 193 EXPECT_EQ(web::SECURITY_STYLE_UNKNOWN, item->GetSSL().security_style); |
| 194 EXPECT_EQ(web::SSLStatus::NORMAL_CONTENT, item->GetSSL().content_status); | 194 EXPECT_EQ(web::SSLStatus::NORMAL_CONTENT, item->GetSSL().content_status); |
| 195 } | 195 } |
| 196 | 196 |
| 197 // Tests that unnecessary cert verification does not happen if SSL status has | 197 // Tests that unnecessary cert verification does not happen if SSL status has |
| 198 // already been calculated and the only change was appearing of mixed content. | 198 // already been calculated and the only change was appearing of mixed content. |
| 199 TEST_F(CRWSSLStatusUpdaterTest, HttpsItemNoCertReverification) { | 199 TEST_F(CRWSSLStatusUpdaterTest, HttpsItemNoCertReverification) { |
| 200 nav_manager_->SetSessionController(SessionControllerWithEntry(kHttpsUrl)); | 200 nav_manager_->SetSessionController(SessionControllerWithEntry(kHttpsUrl)); |
| 201 web::NavigationItem* item = nav_manager_->GetLastCommittedItem(); | 201 web::NavigationItem* item = nav_manager_->GetLastCommittedItem(); |
| 202 // Set SSL status manually in the way so cert re-verification is not run. | 202 // Set SSL status manually in the way so cert re-verification is not run. |
| 203 item->GetSSL().cert_status_host = base::SysNSStringToUTF8(kHostName); | 203 item->GetSSL().cert_status_host = base::SysNSStringToUTF8(kHostName); |
| 204 item->GetSSL().cert_id = web::CertStore::GetInstance()->StoreCert( | 204 item->GetSSL().certificate = web::CreateCertFromTrust(trust_); |
| 205 web::CreateCertFromTrust(trust_).get(), kCertGroupID); | |
| 206 | 205 |
| 207 // Make sure that item change callback was called. | 206 // Make sure that item change callback was called. |
| 208 [[delegate_ expect] SSLStatusUpdater:ssl_status_updater_ | 207 [[delegate_ expect] SSLStatusUpdater:ssl_status_updater_ |
| 209 didChangeSSLStatusForNavigationItem:item]; | 208 didChangeSSLStatusForNavigationItem:item]; |
| 210 | 209 |
| 211 [ssl_status_updater_ updateSSLStatusForNavigationItem:item | 210 [ssl_status_updater_ updateSSLStatusForNavigationItem:item |
| 212 withCertHost:kHostName | 211 withCertHost:kHostName |
| 213 trust:trust_ | 212 trust:trust_ |
| 214 hasOnlySecureContent:NO]; | 213 hasOnlySecureContent:NO]; |
| 215 // Make sure that cert verification did not run. | 214 // Make sure that cert verification did not run. |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 348 | 347 |
| 349 // Make sure that cert verification was requested. | 348 // Make sure that cert verification was requested. |
| 350 EXPECT_TRUE([data_source_ certVerificationRequested]); | 349 EXPECT_TRUE([data_source_ certVerificationRequested]); |
| 351 | 350 |
| 352 // Make sure that security style and cert status are reset during | 351 // Make sure that security style and cert status are reset during |
| 353 // verification. | 352 // verification. |
| 354 EXPECT_EQ(web::SECURITY_STYLE_UNKNOWN, item->GetSSL().security_style); | 353 EXPECT_EQ(web::SECURITY_STYLE_UNKNOWN, item->GetSSL().security_style); |
| 355 EXPECT_FALSE(item->GetSSL().cert_status); | 354 EXPECT_FALSE(item->GetSSL().cert_status); |
| 356 | 355 |
| 357 // Change the cert. | 356 // Change the cert. |
| 358 item->GetSSL().cert_id = -1; | 357 item->GetSSL().certificate = nullptr; |
| 359 | 358 |
| 360 // Reply with calculated cert verification status. | 359 // Reply with calculated cert verification status. |
| 361 [data_source_ | 360 [data_source_ |
| 362 finishVerificationWithCertStatus:0 | 361 finishVerificationWithCertStatus:0 |
| 363 securityStyle:web::SECURITY_STYLE_AUTHENTICATED]; | 362 securityStyle:web::SECURITY_STYLE_AUTHENTICATED]; |
| 364 | 363 |
| 365 // Make sure that security style and content status did change. | 364 // Make sure that security style and content status did change. |
| 366 EXPECT_EQ(web::SECURITY_STYLE_UNKNOWN, item->GetSSL().security_style); | 365 EXPECT_EQ(web::SECURITY_STYLE_UNKNOWN, item->GetSSL().security_style); |
| 367 EXPECT_EQ(web::SSLStatus::NORMAL_CONTENT, item->GetSSL().content_status); | 366 EXPECT_EQ(web::SSLStatus::NORMAL_CONTENT, item->GetSSL().content_status); |
| 368 } | 367 } |
| 369 | 368 |
| 370 } // namespace web | 369 } // namespace web |
| OLD | NEW |