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 |