Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Side by Side Diff: chrome/browser/ui/views/ssl_client_certificate_selector_browsertest.cc

Issue 2898573002: Refactor client cert private key handling. (Closed)
Patch Set: missing include Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "chrome/browser/ui/browser.h" 11 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/browser_window.h" 12 #include "chrome/browser/ui/browser_window.h"
13 #include "chrome/browser/ui/tabs/tab_strip_model.h" 13 #include "chrome/browser/ui/tabs/tab_strip_model.h"
14 #include "chrome/browser/ui/views/ssl_client_certificate_selector.h" 14 #include "chrome/browser/ui/views/ssl_client_certificate_selector.h"
15 #include "chrome/test/base/in_process_browser_test.h" 15 #include "chrome/test/base/in_process_browser_test.h"
16 #include "chrome/test/base/interactive_test_utils.h" 16 #include "chrome/test/base/interactive_test_utils.h"
17 #include "chrome/test/base/ui_test_utils.h" 17 #include "chrome/test/base/ui_test_utils.h"
18 #include "content/public/browser/client_certificate_delegate.h" 18 #include "content/public/browser/client_certificate_delegate.h"
19 #include "content/public/browser/web_contents.h" 19 #include "content/public/browser/web_contents.h"
20 #include "content/public/test/browser_test_utils.h" 20 #include "content/public/test/browser_test_utils.h"
21 #include "net/base/request_priority.h" 21 #include "net/base/request_priority.h"
22 #include "net/cert/x509_certificate.h" 22 #include "net/cert/x509_certificate.h"
23 #include "net/http/http_transaction_factory.h" 23 #include "net/http/http_transaction_factory.h"
24 #include "net/ssl/client_cert_identity_test_util.h"
24 #include "net/ssl/ssl_cert_request_info.h" 25 #include "net/ssl/ssl_cert_request_info.h"
25 #include "net/test/cert_test_util.h" 26 #include "net/test/cert_test_util.h"
26 #include "net/test/test_data_directory.h" 27 #include "net/test/test_data_directory.h"
27 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" 28 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
28 #include "net/url_request/url_request.h" 29 #include "net/url_request/url_request.h"
29 #include "net/url_request/url_request_context.h" 30 #include "net/url_request/url_request_context.h"
30 #include "net/url_request/url_request_context_getter.h" 31 #include "net/url_request/url_request_context_getter.h"
31 #include "testing/gtest/include/gtest/gtest.h" 32 #include "testing/gtest/include/gtest/gtest.h"
32 #include "ui/views/test/widget_test.h" 33 #include "ui/views/test/widget_test.h"
33 34
34 #if defined(USE_NSS_CERTS)
35 #include "crypto/scoped_test_nss_db.h"
36 #endif
37
38 using ::testing::Mock; 35 using ::testing::Mock;
39 using ::testing::StrictMock; 36 using ::testing::StrictMock;
40 using content::BrowserThread; 37 using content::BrowserThread;
41 38
42 // We don't have a way to do end-to-end SSL client auth testing, so this test 39 // We don't have a way to do end-to-end SSL client auth testing, so this test
43 // creates a certificate selector_ manually with a mocked 40 // creates a certificate selector_ manually with a mocked
44 // SSLClientAuthHandler. 41 // SSLClientAuthHandler.
45 42
46 class SSLClientCertificateSelectorTest : public InProcessBrowserTest { 43 class SSLClientCertificateSelectorTest : public InProcessBrowserTest {
47 public: 44 public:
48 SSLClientCertificateSelectorTest() 45 SSLClientCertificateSelectorTest()
49 : io_loop_finished_event_( 46 : io_loop_finished_event_(
50 base::WaitableEvent::ResetPolicy::AUTOMATIC, 47 base::WaitableEvent::ResetPolicy::AUTOMATIC,
51 base::WaitableEvent::InitialState::NOT_SIGNALED), 48 base::WaitableEvent::InitialState::NOT_SIGNALED),
52 url_request_(NULL), 49 url_request_(NULL),
53 selector_(NULL) {} 50 selector_(NULL) {}
54 51
55 void SetUpInProcessBrowserTestFixture() override { 52 void SetUpInProcessBrowserTestFixture() override {
56 base::FilePath certs_dir = net::GetTestCertsDirectory(); 53 base::FilePath certs_dir = net::GetTestCertsDirectory();
57 54
58 #if defined(USE_NSS_CERTS) 55 cert_identity_1_ = net::FakeClientCertIdentity::CreateFromCertAndKeyFiles(
59 // If USE_NSS_CERTS, the selector tries to unlock the slot where the 56 certs_dir, "client_1.pem", "client_1.pk8");
60 // private key of each certificate is stored. If no private key is found, 57 ASSERT_TRUE(cert_identity_1_);
61 // the slot would be null and the unlock will crash. 58 cert_identity_2_ = net::FakeClientCertIdentity::CreateFromCertAndKeyFiles(
62 ASSERT_TRUE(test_nssdb_.is_open()); 59 certs_dir, "client_2.pem", "client_2.pk8");
63 client_cert_1_ = net::ImportClientCertAndKeyFromFile( 60 ASSERT_TRUE(cert_identity_2_);
64 certs_dir, "client_1.pem", "client_1.pk8", test_nssdb_.slot());
65 client_cert_2_ = net::ImportClientCertAndKeyFromFile(
66 certs_dir, "client_2.pem", "client_2.pk8", test_nssdb_.slot());
67 #else
68 // No unlock is attempted if !USE_NSS_CERTS. Thus, there is no need to
69 // import a private key.
70 client_cert_1_ = net::ImportCertFromFile(certs_dir, "client_1.pem");
71 client_cert_2_ = net::ImportCertFromFile(certs_dir, "client_2.pem");
72 #endif
73 ASSERT_NE(nullptr, client_cert_1_.get());
74 ASSERT_NE(nullptr, client_cert_2_.get());
75 61
76 cert_request_info_ = new net::SSLCertRequestInfo; 62 cert_request_info_ = new net::SSLCertRequestInfo;
77 cert_request_info_->host_and_port = net::HostPortPair("foo", 123); 63 cert_request_info_->host_and_port = net::HostPortPair("foo", 123);
78 client_certs_.push_back(client_cert_1_);
79 client_certs_.push_back(client_cert_2_);
80 } 64 }
81 65
82 void SetUpOnMainThread() override { 66 void SetUpOnMainThread() override {
83 url_request_context_getter_ = browser()->profile()->GetRequestContext(); 67 url_request_context_getter_ = browser()->profile()->GetRequestContext();
84 68
85 BrowserThread::PostTask( 69 BrowserThread::PostTask(
86 BrowserThread::IO, FROM_HERE, 70 BrowserThread::IO, FROM_HERE,
87 base::BindOnce(&SSLClientCertificateSelectorTest::SetUpOnIOThread, 71 base::BindOnce(&SSLClientCertificateSelectorTest::SetUpOnIOThread,
88 base::Unretained(this))); 72 base::Unretained(this)));
89 73
90 io_loop_finished_event_.Wait(); 74 io_loop_finished_event_.Wait();
91 75
92 content::WaitForLoadStop( 76 content::WaitForLoadStop(
93 browser()->tab_strip_model()->GetActiveWebContents()); 77 browser()->tab_strip_model()->GetActiveWebContents());
78 net::ClientCertIdentityList cert_identity_list;
davidben 2017/06/07 23:06:17 Nit: Are we allowed to write something like this t
mattm 2017/06/08 21:47:56 (Answered on the other comment, but doesn't work d
79 cert_identity_list.push_back(cert_identity_1_->Copy());
80 cert_identity_list.push_back(cert_identity_2_->Copy());
94 selector_ = new SSLClientCertificateSelector( 81 selector_ = new SSLClientCertificateSelector(
95 browser()->tab_strip_model()->GetActiveWebContents(), 82 browser()->tab_strip_model()->GetActiveWebContents(),
96 auth_requestor_->cert_request_info_, client_certs_, 83 auth_requestor_->cert_request_info_, std::move(cert_identity_list),
97 auth_requestor_->CreateDelegate()); 84 auth_requestor_->CreateDelegate());
98 selector_->Init(); 85 selector_->Init();
99 selector_->Show(); 86 selector_->Show();
100 87
101 EXPECT_EQ(client_cert_1_.get(), selector_->GetSelectedCert()); 88 ASSERT_TRUE(selector_->GetSelectedCert());
89 EXPECT_EQ(cert_identity_1_->certificate(),
90 selector_->GetSelectedCert()->certificate());
102 } 91 }
103 92
104 virtual void SetUpOnIOThread() { 93 virtual void SetUpOnIOThread() {
105 url_request_ = MakeURLRequest(url_request_context_getter_.get()).release(); 94 url_request_ = MakeURLRequest(url_request_context_getter_.get()).release();
106 95
107 auth_requestor_ = new StrictMock<SSLClientAuthRequestorMock>( 96 auth_requestor_ = new StrictMock<SSLClientAuthRequestorMock>(
108 url_request_, 97 url_request_,
109 cert_request_info_); 98 cert_request_info_);
110 99
111 io_loop_finished_event_.Signal(); 100 io_loop_finished_event_.Signal();
(...skipping 24 matching lines...) Expand all
136 return context_getter->GetURLRequestContext()->CreateRequest( 125 return context_getter->GetURLRequestContext()->CreateRequest(
137 GURL("https://example"), net::DEFAULT_PRIORITY, NULL, 126 GURL("https://example"), net::DEFAULT_PRIORITY, NULL,
138 TRAFFIC_ANNOTATION_FOR_TESTS); 127 TRAFFIC_ANNOTATION_FOR_TESTS);
139 } 128 }
140 129
141 base::WaitableEvent io_loop_finished_event_; 130 base::WaitableEvent io_loop_finished_event_;
142 131
143 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 132 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
144 net::URLRequest* url_request_; 133 net::URLRequest* url_request_;
145 134
146 scoped_refptr<net::X509Certificate> client_cert_1_; 135 std::unique_ptr<net::FakeClientCertIdentity> cert_identity_1_;
147 scoped_refptr<net::X509Certificate> client_cert_2_; 136 std::unique_ptr<net::FakeClientCertIdentity> cert_identity_2_;
148 net::CertificateList client_certs_;
149 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_; 137 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_;
150 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_; 138 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_;
151 // The selector will be deleted when a cert is selected or the tab is closed. 139 // The selector will be deleted when a cert is selected or the tab is closed.
152 SSLClientCertificateSelector* selector_; 140 SSLClientCertificateSelector* selector_;
153 #if defined(USE_NSS_CERTS)
154 crypto::ScopedTestNSSDB test_nssdb_;
155 #endif
156 }; 141 };
157 142
158 class SSLClientCertificateSelectorMultiTabTest 143 class SSLClientCertificateSelectorMultiTabTest
159 : public SSLClientCertificateSelectorTest { 144 : public SSLClientCertificateSelectorTest {
160 public: 145 public:
161 void SetUpInProcessBrowserTestFixture() override { 146 void SetUpInProcessBrowserTestFixture() override {
162 SSLClientCertificateSelectorTest::SetUpInProcessBrowserTestFixture(); 147 SSLClientCertificateSelectorTest::SetUpInProcessBrowserTestFixture();
163 148
164 cert_request_info_1_ = new net::SSLCertRequestInfo; 149 cert_request_info_1_ = new net::SSLCertRequestInfo;
165 cert_request_info_1_->host_and_port = net::HostPortPair("bar", 123); 150 cert_request_info_1_->host_and_port = net::HostPortPair("bar", 123);
166 client_certs_1_.push_back(client_cert_1_);
167 client_certs_1_.push_back(client_cert_2_);
168 151
169 cert_request_info_2_ = new net::SSLCertRequestInfo; 152 cert_request_info_2_ = new net::SSLCertRequestInfo;
170 cert_request_info_2_->host_and_port = net::HostPortPair("bar", 123); 153 cert_request_info_2_->host_and_port = net::HostPortPair("bar", 123);
171 client_certs_2_.push_back(client_cert_1_);
172 client_certs_2_.push_back(client_cert_2_);
173 } 154 }
174 155
175 void SetUpOnMainThread() override { 156 void SetUpOnMainThread() override {
176 // Also calls SetUpOnIOThread. 157 // Also calls SetUpOnIOThread.
177 SSLClientCertificateSelectorTest::SetUpOnMainThread(); 158 SSLClientCertificateSelectorTest::SetUpOnMainThread();
178 159
179 AddTabAtIndex(1, GURL("about:blank"), ui::PAGE_TRANSITION_LINK); 160 AddTabAtIndex(1, GURL("about:blank"), ui::PAGE_TRANSITION_LINK);
180 AddTabAtIndex(2, GURL("about:blank"), ui::PAGE_TRANSITION_LINK); 161 AddTabAtIndex(2, GURL("about:blank"), ui::PAGE_TRANSITION_LINK);
181 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(0)); 162 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(0));
182 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(1)); 163 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(1));
183 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(2)); 164 ASSERT_TRUE(NULL != browser()->tab_strip_model()->GetWebContentsAt(2));
184 content::WaitForLoadStop(browser()->tab_strip_model()->GetWebContentsAt(1)); 165 content::WaitForLoadStop(browser()->tab_strip_model()->GetWebContentsAt(1));
185 content::WaitForLoadStop(browser()->tab_strip_model()->GetWebContentsAt(2)); 166 content::WaitForLoadStop(browser()->tab_strip_model()->GetWebContentsAt(2));
186 167
168 net::ClientCertIdentityList cert_identity_list_1;
169 cert_identity_list_1.push_back(cert_identity_1_->Copy());
170 cert_identity_list_1.push_back(cert_identity_2_->Copy());
187 selector_1_ = new SSLClientCertificateSelector( 171 selector_1_ = new SSLClientCertificateSelector(
188 browser()->tab_strip_model()->GetWebContentsAt(1), 172 browser()->tab_strip_model()->GetWebContentsAt(1),
189 auth_requestor_1_->cert_request_info_, client_certs_1_, 173 auth_requestor_1_->cert_request_info_, std::move(cert_identity_list_1),
190 auth_requestor_1_->CreateDelegate()); 174 auth_requestor_1_->CreateDelegate());
191 selector_1_->Init(); 175 selector_1_->Init();
192 selector_1_->Show(); 176 selector_1_->Show();
177
178 net::ClientCertIdentityList cert_identity_list_2;
179 cert_identity_list_2.push_back(cert_identity_1_->Copy());
180 cert_identity_list_2.push_back(cert_identity_2_->Copy());
193 selector_2_ = new SSLClientCertificateSelector( 181 selector_2_ = new SSLClientCertificateSelector(
194 browser()->tab_strip_model()->GetWebContentsAt(2), 182 browser()->tab_strip_model()->GetWebContentsAt(2),
195 auth_requestor_2_->cert_request_info_, client_certs_2_, 183 auth_requestor_2_->cert_request_info_, std::move(cert_identity_list_2),
196 auth_requestor_2_->CreateDelegate()); 184 auth_requestor_2_->CreateDelegate());
197 selector_2_->Init(); 185 selector_2_->Init();
198 selector_2_->Show(); 186 selector_2_->Show();
199 187
200 EXPECT_EQ(2, browser()->tab_strip_model()->active_index()); 188 EXPECT_EQ(2, browser()->tab_strip_model()->active_index());
201 EXPECT_EQ(client_cert_1_.get(), selector_1_->GetSelectedCert()); 189 ASSERT_TRUE(selector_1_->GetSelectedCert());
202 EXPECT_EQ(client_cert_1_.get(), selector_2_->GetSelectedCert()); 190 EXPECT_EQ(cert_identity_1_->certificate(),
191 selector_1_->GetSelectedCert()->certificate());
192 ASSERT_TRUE(selector_2_->GetSelectedCert());
193 EXPECT_EQ(cert_identity_1_->certificate(),
194 selector_2_->GetSelectedCert()->certificate());
203 } 195 }
204 196
205 void SetUpOnIOThread() override { 197 void SetUpOnIOThread() override {
206 url_request_1_ = 198 url_request_1_ =
207 MakeURLRequest(url_request_context_getter_.get()).release(); 199 MakeURLRequest(url_request_context_getter_.get()).release();
208 url_request_2_ = 200 url_request_2_ =
209 MakeURLRequest(url_request_context_getter_.get()).release(); 201 MakeURLRequest(url_request_context_getter_.get()).release();
210 202
211 auth_requestor_1_ = new StrictMock<SSLClientAuthRequestorMock>( 203 auth_requestor_1_ = new StrictMock<SSLClientAuthRequestorMock>(
212 url_request_1_, 204 url_request_1_,
(...skipping 15 matching lines...) Expand all
228 delete url_request_1_; 220 delete url_request_1_;
229 delete url_request_2_; 221 delete url_request_2_;
230 SSLClientCertificateSelectorTest::CleanUpOnIOThread(); 222 SSLClientCertificateSelectorTest::CleanUpOnIOThread();
231 } 223 }
232 224
233 protected: 225 protected:
234 net::URLRequest* url_request_1_; 226 net::URLRequest* url_request_1_;
235 net::URLRequest* url_request_2_; 227 net::URLRequest* url_request_2_;
236 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_1_; 228 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_1_;
237 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_2_; 229 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_2_;
238 net::CertificateList client_certs_1_;
239 net::CertificateList client_certs_2_;
240 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_1_; 230 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_1_;
241 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_2_; 231 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_2_;
242 SSLClientCertificateSelector* selector_1_; 232 SSLClientCertificateSelector* selector_1_;
243 SSLClientCertificateSelector* selector_2_; 233 SSLClientCertificateSelector* selector_2_;
244 }; 234 };
245 235
246 class SSLClientCertificateSelectorMultiProfileTest 236 class SSLClientCertificateSelectorMultiProfileTest
247 : public SSLClientCertificateSelectorTest { 237 : public SSLClientCertificateSelectorTest {
248 public: 238 public:
249 void SetUpInProcessBrowserTestFixture() override { 239 void SetUpInProcessBrowserTestFixture() override {
250 SSLClientCertificateSelectorTest::SetUpInProcessBrowserTestFixture(); 240 SSLClientCertificateSelectorTest::SetUpInProcessBrowserTestFixture();
251 241
252 cert_request_info_1_ = new net::SSLCertRequestInfo; 242 cert_request_info_1_ = new net::SSLCertRequestInfo;
253 cert_request_info_1_->host_and_port = net::HostPortPair("foo", 123); 243 cert_request_info_1_->host_and_port = net::HostPortPair("foo", 123);
254 client_certs_1_.push_back(client_cert_1_);
255 client_certs_1_.push_back(client_cert_2_);
256 } 244 }
257 245
258 void SetUpOnMainThread() override { 246 void SetUpOnMainThread() override {
259 browser_1_ = CreateIncognitoBrowser(); 247 browser_1_ = CreateIncognitoBrowser();
260 url_request_context_getter_1_ = browser_1_->profile()->GetRequestContext(); 248 url_request_context_getter_1_ = browser_1_->profile()->GetRequestContext();
261 249
262 // Also calls SetUpOnIOThread. 250 // Also calls SetUpOnIOThread.
263 SSLClientCertificateSelectorTest::SetUpOnMainThread(); 251 SSLClientCertificateSelectorTest::SetUpOnMainThread();
264 252
253 net::ClientCertIdentityList cert_identity_list;
254 cert_identity_list.push_back(cert_identity_1_->Copy());
255 cert_identity_list.push_back(cert_identity_2_->Copy());
265 selector_1_ = new SSLClientCertificateSelector( 256 selector_1_ = new SSLClientCertificateSelector(
266 browser_1_->tab_strip_model()->GetActiveWebContents(), 257 browser_1_->tab_strip_model()->GetActiveWebContents(),
267 auth_requestor_1_->cert_request_info_, client_certs_1_, 258 auth_requestor_1_->cert_request_info_, std::move(cert_identity_list),
268 auth_requestor_1_->CreateDelegate()); 259 auth_requestor_1_->CreateDelegate());
269 selector_1_->Init(); 260 selector_1_->Init();
270 selector_1_->Show(); 261 selector_1_->Show();
271 262
272 gfx::NativeWindow window = browser_1_->window()->GetNativeWindow(); 263 gfx::NativeWindow window = browser_1_->window()->GetNativeWindow();
273 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window); 264 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window);
274 ASSERT_NE(nullptr, widget); 265 ASSERT_NE(nullptr, widget);
275 views::test::WidgetActivationWaiter waiter(widget, true); 266 views::test::WidgetActivationWaiter waiter(widget, true);
276 waiter.Wait(); 267 waiter.Wait();
277 268
278 EXPECT_EQ(client_cert_1_.get(), selector_1_->GetSelectedCert()); 269 ASSERT_TRUE(selector_1_->GetSelectedCert());
270 EXPECT_EQ(cert_identity_1_->certificate(),
271 selector_1_->GetSelectedCert()->certificate());
279 } 272 }
280 273
281 void SetUpOnIOThread() override { 274 void SetUpOnIOThread() override {
282 url_request_1_ = 275 url_request_1_ =
283 MakeURLRequest(url_request_context_getter_1_.get()).release(); 276 MakeURLRequest(url_request_context_getter_1_.get()).release();
284 277
285 auth_requestor_1_ = new StrictMock<SSLClientAuthRequestorMock>( 278 auth_requestor_1_ = new StrictMock<SSLClientAuthRequestorMock>(
286 url_request_1_, 279 url_request_1_,
287 cert_request_info_1_); 280 cert_request_info_1_);
288 281
289 SSLClientCertificateSelectorTest::SetUpOnIOThread(); 282 SSLClientCertificateSelectorTest::SetUpOnIOThread();
290 } 283 }
291 284
292 void TearDownOnMainThread() override { 285 void TearDownOnMainThread() override {
293 auth_requestor_1_ = NULL; 286 auth_requestor_1_ = NULL;
294 SSLClientCertificateSelectorTest::TearDownOnMainThread(); 287 SSLClientCertificateSelectorTest::TearDownOnMainThread();
295 } 288 }
296 289
297 void CleanUpOnIOThread() override { 290 void CleanUpOnIOThread() override {
298 delete url_request_1_; 291 delete url_request_1_;
299 SSLClientCertificateSelectorTest::CleanUpOnIOThread(); 292 SSLClientCertificateSelectorTest::CleanUpOnIOThread();
300 } 293 }
301 294
302 protected: 295 protected:
303 Browser* browser_1_; 296 Browser* browser_1_;
304 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_1_; 297 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_1_;
305 net::URLRequest* url_request_1_; 298 net::URLRequest* url_request_1_;
306 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_1_; 299 scoped_refptr<net::SSLCertRequestInfo> cert_request_info_1_;
307 net::CertificateList client_certs_1_;
308 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_1_; 300 scoped_refptr<StrictMock<SSLClientAuthRequestorMock> > auth_requestor_1_;
309 SSLClientCertificateSelector* selector_1_; 301 SSLClientCertificateSelector* selector_1_;
310 }; 302 };
311 303
312 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorTest, SelectNone) { 304 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorTest, SelectNone) {
313 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection()); 305 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection());
314 306
315 // Let the mock get checked on destruction. 307 // Let the mock get checked on destruction.
316 } 308 }
317 309
318 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorTest, Escape) { 310 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorTest, Escape) {
319 EXPECT_CALL(*auth_requestor_.get(), CertificateSelected(NULL)); 311 EXPECT_CALL(*auth_requestor_.get(), CertificateSelected(nullptr, nullptr));
320 312
321 EXPECT_TRUE(ui_test_utils::SendKeyPressSync( 313 EXPECT_TRUE(ui_test_utils::SendKeyPressSync(
322 browser(), ui::VKEY_ESCAPE, false, false, false, false)); 314 browser(), ui::VKEY_ESCAPE, false, false, false, false));
323 315
324 Mock::VerifyAndClear(auth_requestor_.get()); 316 Mock::VerifyAndClear(auth_requestor_.get());
325 } 317 }
326 318
327 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorTest, SelectDefault) { 319 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorTest, SelectDefault) {
328 EXPECT_CALL(*auth_requestor_.get(), 320 EXPECT_CALL(*auth_requestor_.get(),
329 CertificateSelected(client_cert_1_.get())); 321 CertificateSelected(cert_identity_1_->certificate(),
322 cert_identity_1_->ssl_private_key()));
330 323
331 EXPECT_TRUE(ui_test_utils::SendKeyPressSync( 324 EXPECT_TRUE(ui_test_utils::SendKeyPressSync(
332 browser(), ui::VKEY_RETURN, false, false, false, false)); 325 browser(), ui::VKEY_RETURN, false, false, false, false));
333 326
334 Mock::VerifyAndClear(auth_requestor_.get()); 327 Mock::VerifyAndClear(auth_requestor_.get());
335 } 328 }
336 329
337 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorMultiTabTest, Escape) { 330 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorMultiTabTest, Escape) {
338 // auth_requestor_1_ should get selected automatically by the 331 // auth_requestor_1_ should get selected automatically by the
339 // SSLClientAuthObserver when selector_2_ is accepted, since both 1 & 2 have 332 // SSLClientAuthObserver when selector_2_ is accepted, since both 1 & 2 have
340 // the same host:port. 333 // the same host:port.
341 EXPECT_CALL(*auth_requestor_1_.get(), CertificateSelected(NULL)); 334 EXPECT_CALL(*auth_requestor_1_.get(), CertificateSelected(nullptr, nullptr));
342 EXPECT_CALL(*auth_requestor_2_.get(), CertificateSelected(NULL)); 335 EXPECT_CALL(*auth_requestor_2_.get(), CertificateSelected(nullptr, nullptr));
343 336
344 EXPECT_TRUE(ui_test_utils::SendKeyPressSync( 337 EXPECT_TRUE(ui_test_utils::SendKeyPressSync(
345 browser(), ui::VKEY_ESCAPE, false, false, false, false)); 338 browser(), ui::VKEY_ESCAPE, false, false, false, false));
346 339
347 Mock::VerifyAndClear(auth_requestor_.get()); 340 Mock::VerifyAndClear(auth_requestor_.get());
348 Mock::VerifyAndClear(auth_requestor_1_.get()); 341 Mock::VerifyAndClear(auth_requestor_1_.get());
349 Mock::VerifyAndClear(auth_requestor_2_.get()); 342 Mock::VerifyAndClear(auth_requestor_2_.get());
350 343
351 // Now let the default selection for auth_requestor_ mock get checked on 344 // Now let the default selection for auth_requestor_ mock get checked on
352 // destruction. 345 // destruction.
353 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection()); 346 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection());
354 } 347 }
355 348
356 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorMultiTabTest, SelectSecond) { 349 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorMultiTabTest, SelectSecond) {
357 // auth_requestor_1_ should get selected automatically by the 350 // auth_requestor_1_ should get selected automatically by the
358 // SSLClientAuthObserver when selector_2_ is accepted, since both 1 & 2 have 351 // SSLClientAuthObserver when selector_2_ is accepted, since both 1 & 2 have
359 // the same host:port. 352 // the same host:port.
360 EXPECT_CALL(*auth_requestor_1_.get(), 353 EXPECT_CALL(*auth_requestor_1_.get(),
361 CertificateSelected(client_cert_2_.get())); 354 CertificateSelected(cert_identity_2_->certificate(),
355 cert_identity_2_->ssl_private_key()));
362 EXPECT_CALL(*auth_requestor_2_.get(), 356 EXPECT_CALL(*auth_requestor_2_.get(),
363 CertificateSelected(client_cert_2_.get())); 357 CertificateSelected(cert_identity_2_->certificate(),
358 cert_identity_2_->ssl_private_key()));
364 359
365 EXPECT_TRUE(ui_test_utils::SendKeyPressSync( 360 EXPECT_TRUE(ui_test_utils::SendKeyPressSync(
366 browser(), ui::VKEY_DOWN, false, false, false, false)); 361 browser(), ui::VKEY_DOWN, false, false, false, false));
367 362
368 EXPECT_EQ(client_cert_1_.get(), selector_->GetSelectedCert()); 363 ASSERT_TRUE(selector_->GetSelectedCert());
369 EXPECT_EQ(client_cert_1_.get(), selector_1_->GetSelectedCert()); 364 EXPECT_EQ(cert_identity_1_->certificate(),
370 EXPECT_EQ(client_cert_2_.get(), selector_2_->GetSelectedCert()); 365 selector_->GetSelectedCert()->certificate());
366 ASSERT_TRUE(selector_1_->GetSelectedCert());
367 EXPECT_EQ(cert_identity_1_->certificate(),
368 selector_1_->GetSelectedCert()->certificate());
369 ASSERT_TRUE(selector_2_->GetSelectedCert());
370 EXPECT_EQ(cert_identity_2_->certificate(),
371 selector_2_->GetSelectedCert()->certificate());
371 372
372 EXPECT_TRUE(ui_test_utils::SendKeyPressSync( 373 EXPECT_TRUE(ui_test_utils::SendKeyPressSync(
373 browser(), ui::VKEY_RETURN, false, false, false, false)); 374 browser(), ui::VKEY_RETURN, false, false, false, false));
374 375
375 Mock::VerifyAndClear(auth_requestor_.get()); 376 Mock::VerifyAndClear(auth_requestor_.get());
376 Mock::VerifyAndClear(auth_requestor_1_.get()); 377 Mock::VerifyAndClear(auth_requestor_1_.get());
377 Mock::VerifyAndClear(auth_requestor_2_.get()); 378 Mock::VerifyAndClear(auth_requestor_2_.get());
378 379
379 // Now let the default selection for auth_requestor_ mock get checked on 380 // Now let the default selection for auth_requestor_ mock get checked on
380 // destruction. 381 // destruction.
381 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection()); 382 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection());
382 } 383 }
383 384
384 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorMultiProfileTest, Escape) { 385 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorMultiProfileTest, Escape) {
385 EXPECT_CALL(*auth_requestor_1_.get(), CertificateSelected(NULL)); 386 EXPECT_CALL(*auth_requestor_1_.get(), CertificateSelected(nullptr, nullptr));
386 387
387 EXPECT_TRUE(ui_test_utils::SendKeyPressSync( 388 EXPECT_TRUE(ui_test_utils::SendKeyPressSync(
388 browser_1_, ui::VKEY_ESCAPE, false, false, false, false)); 389 browser_1_, ui::VKEY_ESCAPE, false, false, false, false));
389 390
390 Mock::VerifyAndClear(auth_requestor_.get()); 391 Mock::VerifyAndClear(auth_requestor_.get());
391 Mock::VerifyAndClear(auth_requestor_1_.get()); 392 Mock::VerifyAndClear(auth_requestor_1_.get());
392 393
393 // Now let the default selection for auth_requestor_ mock get checked on 394 // Now let the default selection for auth_requestor_ mock get checked on
394 // destruction. 395 // destruction.
395 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection()); 396 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection());
396 } 397 }
397 398
398 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorMultiProfileTest, 399 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorMultiProfileTest,
399 SelectDefault) { 400 SelectDefault) {
400 EXPECT_CALL(*auth_requestor_1_.get(), 401 EXPECT_CALL(*auth_requestor_1_.get(),
401 CertificateSelected(client_cert_1_.get())); 402 CertificateSelected(cert_identity_1_->certificate(),
403 cert_identity_1_->ssl_private_key()));
402 404
403 EXPECT_TRUE(ui_test_utils::SendKeyPressSync( 405 EXPECT_TRUE(ui_test_utils::SendKeyPressSync(
404 browser_1_, ui::VKEY_RETURN, false, false, false, false)); 406 browser_1_, ui::VKEY_RETURN, false, false, false, false));
405 407
406 Mock::VerifyAndClear(auth_requestor_.get()); 408 Mock::VerifyAndClear(auth_requestor_.get());
407 Mock::VerifyAndClear(auth_requestor_1_.get()); 409 Mock::VerifyAndClear(auth_requestor_1_.get());
408 410
409 // Now let the default selection for auth_requestor_ mock get checked on 411 // Now let the default selection for auth_requestor_ mock get checked on
410 // destruction. 412 // destruction.
411 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection()); 413 EXPECT_CALL(*auth_requestor_.get(), CancelCertificateSelection());
412 } 414 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698