| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/files/file_path.h" | 6 #include "base/files/file_path.h" |
| 7 #include "base/synchronization/waitable_event.h" | 7 #include "base/synchronization/waitable_event.h" |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
| 10 #include "chrome/browser/ssl/ssl_client_auth_requestor_mock.h" | 10 #include "chrome/browser/ssl/ssl_client_auth_requestor_mock.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 // No unlock is attempted if !USE_NSS_CERTS. Thus, there is no need to | 67 // No unlock is attempted if !USE_NSS_CERTS. Thus, there is no need to |
| 68 // import a private key. | 68 // import a private key. |
| 69 client_cert_1_ = net::ImportCertFromFile(certs_dir, "client_1.pem"); | 69 client_cert_1_ = net::ImportCertFromFile(certs_dir, "client_1.pem"); |
| 70 client_cert_2_ = net::ImportCertFromFile(certs_dir, "client_2.pem"); | 70 client_cert_2_ = net::ImportCertFromFile(certs_dir, "client_2.pem"); |
| 71 #endif | 71 #endif |
| 72 ASSERT_NE(nullptr, client_cert_1_.get()); | 72 ASSERT_NE(nullptr, client_cert_1_.get()); |
| 73 ASSERT_NE(nullptr, client_cert_2_.get()); | 73 ASSERT_NE(nullptr, client_cert_2_.get()); |
| 74 | 74 |
| 75 cert_request_info_ = new net::SSLCertRequestInfo; | 75 cert_request_info_ = new net::SSLCertRequestInfo; |
| 76 cert_request_info_->host_and_port = net::HostPortPair("foo", 123); | 76 cert_request_info_->host_and_port = net::HostPortPair("foo", 123); |
| 77 client_certs_.push_back(client_cert_1_); | 77 cert_request_info_->client_certs.push_back(client_cert_1_); |
| 78 client_certs_.push_back(client_cert_2_); | 78 cert_request_info_->client_certs.push_back(client_cert_2_); |
| 79 } | 79 } |
| 80 | 80 |
| 81 void SetUpOnMainThread() override { | 81 void SetUpOnMainThread() override { |
| 82 url_request_context_getter_ = browser()->profile()->GetRequestContext(); | 82 url_request_context_getter_ = browser()->profile()->GetRequestContext(); |
| 83 | 83 |
| 84 BrowserThread::PostTask( | 84 BrowserThread::PostTask( |
| 85 BrowserThread::IO, FROM_HERE, | 85 BrowserThread::IO, FROM_HERE, |
| 86 base::BindOnce(&SSLClientCertificateSelectorTest::SetUpOnIOThread, | 86 base::BindOnce(&SSLClientCertificateSelectorTest::SetUpOnIOThread, |
| 87 base::Unretained(this))); | 87 base::Unretained(this))); |
| 88 | 88 |
| 89 io_loop_finished_event_.Wait(); | 89 io_loop_finished_event_.Wait(); |
| 90 | 90 |
| 91 content::WaitForLoadStop( | 91 content::WaitForLoadStop( |
| 92 browser()->tab_strip_model()->GetActiveWebContents()); | 92 browser()->tab_strip_model()->GetActiveWebContents()); |
| 93 selector_ = new SSLClientCertificateSelector( | 93 selector_ = new SSLClientCertificateSelector( |
| 94 browser()->tab_strip_model()->GetActiveWebContents(), | 94 browser()->tab_strip_model()->GetActiveWebContents(), |
| 95 auth_requestor_->cert_request_info_, client_certs_, | 95 auth_requestor_->cert_request_info_, auth_requestor_->CreateDelegate()); |
| 96 auth_requestor_->CreateDelegate()); | |
| 97 selector_->Init(); | 96 selector_->Init(); |
| 98 selector_->Show(); | 97 selector_->Show(); |
| 99 | 98 |
| 100 EXPECT_EQ(client_cert_1_.get(), selector_->GetSelectedCert()); | 99 EXPECT_EQ(client_cert_1_.get(), selector_->GetSelectedCert()); |
| 101 } | 100 } |
| 102 | 101 |
| 103 virtual void SetUpOnIOThread() { | 102 virtual void SetUpOnIOThread() { |
| 104 url_request_ = MakeURLRequest(url_request_context_getter_.get()).release(); | 103 url_request_ = MakeURLRequest(url_request_context_getter_.get()).release(); |
| 105 | 104 |
| 106 auth_requestor_ = new StrictMock<SSLClientAuthRequestorMock>( | 105 auth_requestor_ = new StrictMock<SSLClientAuthRequestorMock>( |
| (...skipping 29 matching lines...) Expand all Loading... |
| 136 GURL("https://example"), net::DEFAULT_PRIORITY, NULL); | 135 GURL("https://example"), net::DEFAULT_PRIORITY, NULL); |
| 137 } | 136 } |
| 138 | 137 |
| 139 base::WaitableEvent io_loop_finished_event_; | 138 base::WaitableEvent io_loop_finished_event_; |
| 140 | 139 |
| 141 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; | 140 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; |
| 142 net::URLRequest* url_request_; | 141 net::URLRequest* url_request_; |
| 143 | 142 |
| 144 scoped_refptr<net::X509Certificate> client_cert_1_; | 143 scoped_refptr<net::X509Certificate> client_cert_1_; |
| 145 scoped_refptr<net::X509Certificate> client_cert_2_; | 144 scoped_refptr<net::X509Certificate> client_cert_2_; |
| 146 net::CertificateList client_certs_; | |
| 147 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_; | 145 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_; |
| 148 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_; | 146 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_; |
| 149 // The selector will be deleted when a cert is selected or the tab is closed. | 147 // The selector will be deleted when a cert is selected or the tab is closed. |
| 150 SSLClientCertificateSelector* selector_; | 148 SSLClientCertificateSelector* selector_; |
| 151 #if defined(USE_NSS_CERTS) | 149 #if defined(USE_NSS_CERTS) |
| 152 crypto::ScopedTestNSSDB test_nssdb_; | 150 crypto::ScopedTestNSSDB test_nssdb_; |
| 153 #endif | 151 #endif |
| 154 }; | 152 }; |
| 155 | 153 |
| 156 class SSLClientCertificateSelectorMultiTabTest | 154 class SSLClientCertificateSelectorMultiTabTest |
| 157 : public SSLClientCertificateSelectorTest { | 155 : public SSLClientCertificateSelectorTest { |
| 158 public: | 156 public: |
| 159 void SetUpInProcessBrowserTestFixture() override { | 157 void SetUpInProcessBrowserTestFixture() override { |
| 160 SSLClientCertificateSelectorTest::SetUpInProcessBrowserTestFixture(); | 158 SSLClientCertificateSelectorTest::SetUpInProcessBrowserTestFixture(); |
| 161 | 159 |
| 162 cert_request_info_1_ = new net::SSLCertRequestInfo; | 160 cert_request_info_1_ = new net::SSLCertRequestInfo; |
| 163 cert_request_info_1_->host_and_port = net::HostPortPair("bar", 123); | 161 cert_request_info_1_->host_and_port = net::HostPortPair("bar", 123); |
| 164 client_certs_1_.push_back(client_cert_1_); | 162 cert_request_info_1_->client_certs.push_back(client_cert_1_); |
| 165 client_certs_1_.push_back(client_cert_2_); | 163 cert_request_info_1_->client_certs.push_back(client_cert_2_); |
| 166 | 164 |
| 167 cert_request_info_2_ = new net::SSLCertRequestInfo; | 165 cert_request_info_2_ = new net::SSLCertRequestInfo; |
| 168 cert_request_info_2_->host_and_port = net::HostPortPair("bar", 123); | 166 cert_request_info_2_->host_and_port = net::HostPortPair("bar", 123); |
| 169 client_certs_2_.push_back(client_cert_1_); | 167 cert_request_info_2_->client_certs.push_back(client_cert_1_); |
| 170 client_certs_2_.push_back(client_cert_2_); | 168 cert_request_info_2_->client_certs.push_back(client_cert_2_); |
| 171 } | 169 } |
| 172 | 170 |
| 173 void SetUpOnMainThread() override { | 171 void SetUpOnMainThread() override { |
| 174 // Also calls SetUpOnIOThread. | 172 // Also calls SetUpOnIOThread. |
| 175 SSLClientCertificateSelectorTest::SetUpOnMainThread(); | 173 SSLClientCertificateSelectorTest::SetUpOnMainThread(); |
| 176 | 174 |
| 177 AddTabAtIndex(1, GURL("about:blank"), ui::PAGE_TRANSITION_LINK); | 175 AddTabAtIndex(1, GURL("about:blank"), ui::PAGE_TRANSITION_LINK); |
| 178 AddTabAtIndex(2, GURL("about:blank"), ui::PAGE_TRANSITION_LINK); | 176 AddTabAtIndex(2, GURL("about:blank"), ui::PAGE_TRANSITION_LINK); |
| 179 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(0)); | 177 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(0)); |
| 180 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(1)); | 178 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(1)); |
| 181 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(2)); | 179 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(2)); |
| 182 content::WaitForLoadStop(browser()->tab_strip_model()->GetWebContentsAt(1)); | 180 content::WaitForLoadStop(browser()->tab_strip_model()->GetWebContentsAt(1)); |
| 183 content::WaitForLoadStop(browser()->tab_strip_model()->GetWebContentsAt(2)); | 181 content::WaitForLoadStop(browser()->tab_strip_model()->GetWebContentsAt(2)); |
| 184 | 182 |
| 185 selector_1_ = new SSLClientCertificateSelector( | 183 selector_1_ = new SSLClientCertificateSelector( |
| 186 browser()->tab_strip_model()->GetWebContentsAt(1), | 184 browser()->tab_strip_model()->GetWebContentsAt(1), |
| 187 auth_requestor_1_->cert_request_info_, client_certs_1_, | 185 auth_requestor_1_->cert_request_info_, |
| 188 auth_requestor_1_->CreateDelegate()); | 186 auth_requestor_1_->CreateDelegate()); |
| 189 selector_1_->Init(); | 187 selector_1_->Init(); |
| 190 selector_1_->Show(); | 188 selector_1_->Show(); |
| 191 selector_2_ = new SSLClientCertificateSelector( | 189 selector_2_ = new SSLClientCertificateSelector( |
| 192 browser()->tab_strip_model()->GetWebContentsAt(2), | 190 browser()->tab_strip_model()->GetWebContentsAt(2), |
| 193 auth_requestor_2_->cert_request_info_, client_certs_2_, | 191 auth_requestor_2_->cert_request_info_, |
| 194 auth_requestor_2_->CreateDelegate()); | 192 auth_requestor_2_->CreateDelegate()); |
| 195 selector_2_->Init(); | 193 selector_2_->Init(); |
| 196 selector_2_->Show(); | 194 selector_2_->Show(); |
| 197 | 195 |
| 198 EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); | 196 EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); |
| 199 EXPECT_EQ(client_cert_1_.get(), selector_1_->GetSelectedCert()); | 197 EXPECT_EQ(client_cert_1_.get(), selector_1_->GetSelectedCert()); |
| 200 EXPECT_EQ(client_cert_1_.get(), selector_2_->GetSelectedCert()); | 198 EXPECT_EQ(client_cert_1_.get(), selector_2_->GetSelectedCert()); |
| 201 } | 199 } |
| 202 | 200 |
| 203 void SetUpOnIOThread() override { | 201 void SetUpOnIOThread() override { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 226 delete url_request_1_; | 224 delete url_request_1_; |
| 227 delete url_request_2_; | 225 delete url_request_2_; |
| 228 SSLClientCertificateSelectorTest::CleanUpOnIOThread(); | 226 SSLClientCertificateSelectorTest::CleanUpOnIOThread(); |
| 229 } | 227 } |
| 230 | 228 |
| 231 protected: | 229 protected: |
| 232 net::URLRequest* url_request_1_; | 230 net::URLRequest* url_request_1_; |
| 233 net::URLRequest* url_request_2_; | 231 net::URLRequest* url_request_2_; |
| 234 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_1_; | 232 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_1_; |
| 235 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_2_; | 233 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_2_; |
| 236 net::CertificateList client_certs_1_; | |
| 237 net::CertificateList client_certs_2_; | |
| 238 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_1_; | 234 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_1_; |
| 239 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_2_; | 235 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_2_; |
| 240 SSLClientCertificateSelector* selector_1_; | 236 SSLClientCertificateSelector* selector_1_; |
| 241 SSLClientCertificateSelector* selector_2_; | 237 SSLClientCertificateSelector* selector_2_; |
| 242 }; | 238 }; |
| 243 | 239 |
| 244 class SSLClientCertificateSelectorMultiProfileTest | 240 class SSLClientCertificateSelectorMultiProfileTest |
| 245 : public SSLClientCertificateSelectorTest { | 241 : public SSLClientCertificateSelectorTest { |
| 246 public: | 242 public: |
| 247 void SetUpInProcessBrowserTestFixture() override { | 243 void SetUpInProcessBrowserTestFixture() override { |
| 248 SSLClientCertificateSelectorTest::SetUpInProcessBrowserTestFixture(); | 244 SSLClientCertificateSelectorTest::SetUpInProcessBrowserTestFixture(); |
| 249 | 245 |
| 250 cert_request_info_1_ = new net::SSLCertRequestInfo; | 246 cert_request_info_1_ = new net::SSLCertRequestInfo; |
| 251 cert_request_info_1_->host_and_port = net::HostPortPair("foo", 123); | 247 cert_request_info_1_->host_and_port = net::HostPortPair("foo", 123); |
| 252 client_certs_1_.push_back(client_cert_1_); | 248 cert_request_info_1_->client_certs.push_back(client_cert_1_); |
| 253 client_certs_1_.push_back(client_cert_2_); | 249 cert_request_info_1_->client_certs.push_back(client_cert_2_); |
| 254 } | 250 } |
| 255 | 251 |
| 256 void SetUpOnMainThread() override { | 252 void SetUpOnMainThread() override { |
| 257 browser_1_ = CreateIncognitoBrowser(); | 253 browser_1_ = CreateIncognitoBrowser(); |
| 258 url_request_context_getter_1_ = browser_1_->profile()->GetRequestContext(); | 254 url_request_context_getter_1_ = browser_1_->profile()->GetRequestContext(); |
| 259 | 255 |
| 260 // Also calls SetUpOnIOThread. | 256 // Also calls SetUpOnIOThread. |
| 261 SSLClientCertificateSelectorTest::SetUpOnMainThread(); | 257 SSLClientCertificateSelectorTest::SetUpOnMainThread(); |
| 262 | 258 |
| 263 selector_1_ = new SSLClientCertificateSelector( | 259 selector_1_ = new SSLClientCertificateSelector( |
| 264 browser_1_->tab_strip_model()->GetActiveWebContents(), | 260 browser_1_->tab_strip_model()->GetActiveWebContents(), |
| 265 auth_requestor_1_->cert_request_info_, client_certs_1_, | 261 auth_requestor_1_->cert_request_info_, |
| 266 auth_requestor_1_->CreateDelegate()); | 262 auth_requestor_1_->CreateDelegate()); |
| 267 selector_1_->Init(); | 263 selector_1_->Init(); |
| 268 selector_1_->Show(); | 264 selector_1_->Show(); |
| 269 | 265 |
| 270 gfx::NativeWindow window = browser_1_->window()->GetNativeWindow(); | 266 gfx::NativeWindow window = browser_1_->window()->GetNativeWindow(); |
| 271 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window); | 267 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window); |
| 272 ASSERT_NE(nullptr, widget); | 268 ASSERT_NE(nullptr, widget); |
| 273 views::test::WidgetActivationWaiter waiter(widget, true); | 269 views::test::WidgetActivationWaiter waiter(widget, true); |
| 274 waiter.Wait(); | 270 waiter.Wait(); |
| 275 | 271 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 295 void CleanUpOnIOThread() override { | 291 void CleanUpOnIOThread() override { |
| 296 delete url_request_1_; | 292 delete url_request_1_; |
| 297 SSLClientCertificateSelectorTest::CleanUpOnIOThread(); | 293 SSLClientCertificateSelectorTest::CleanUpOnIOThread(); |
| 298 } | 294 } |
| 299 | 295 |
| 300 protected: | 296 protected: |
| 301 Browser* browser_1_; | 297 Browser* browser_1_; |
| 302 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_1_; | 298 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_1_; |
| 303 net::URLRequest* url_request_1_; | 299 net::URLRequest* url_request_1_; |
| 304 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_1_; | 300 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_1_; |
| 305 net::CertificateList client_certs_1_; | |
| 306 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_1_; | 301 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_1_; |
| 307 SSLClientCertificateSelector* selector_1_; | 302 SSLClientCertificateSelector* selector_1_; |
| 308 }; | 303 }; |
| 309 | 304 |
| 310 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorTest, SelectNone) { | 305 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorTest, SelectNone) { |
| 311 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection()); | 306 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection()); |
| 312 | 307 |
| 313 // Let the mock get checked on destruction. | 308 // Let the mock get checked on destruction. |
| 314 } | 309 } |
| 315 | 310 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 EXPECT_TRUE(ui_test_utils::SendKeyPressSync( | 396 EXPECT_TRUE(ui_test_utils::SendKeyPressSync( |
| 402 browser_1_, ui::VKEY_RETURN, false, false, false, false)); | 397 browser_1_, ui::VKEY_RETURN, false, false, false, false)); |
| 403 | 398 |
| 404 Mock::VerifyAndClear(auth_requestor_.get()); | 399 Mock::VerifyAndClear(auth_requestor_.get()); |
| 405 Mock::VerifyAndClear(auth_requestor_1_.get()); | 400 Mock::VerifyAndClear(auth_requestor_1_.get()); |
| 406 | 401 |
| 407 // Now let the default selection for auth_requestor_ mock get checked on | 402 // Now let the default selection for auth_requestor_ mock get checked on |
| 408 // destruction. | 403 // destruction. |
| 409 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection()); | 404 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection()); |
| 410 } | 405 } |
| OLD | NEW |