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 |