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