| 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 "chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.h" | 5 #include "chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/synchronization/waitable_event.h" | 9 #include "base/synchronization/waitable_event.h" |
| 10 #include "chrome/test/base/testing_profile.h" | 10 #include "chrome/test/base/testing_profile.h" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 cert_store->SetServerBoundCert("https://www.youtube.com:443", | 50 cert_store->SetServerBoundCert("https://www.youtube.com:443", |
| 51 net::CLIENT_CERT_RSA_SIGN, | 51 net::CLIENT_CERT_RSA_SIGN, |
| 52 base::Time(), base::Time(), | 52 base::Time(), base::Time(), |
| 53 "key", "cert"); | 53 "key", "cert"); |
| 54 } | 54 } |
| 55 | 55 |
| 56 void FetchCallback( | 56 void FetchCallback( |
| 57 const net::ServerBoundCertStore::ServerBoundCertList& certs) { | 57 const net::ServerBoundCertStore::ServerBoundCertList& certs) { |
| 58 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 58 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 59 server_bound_cert_list_ = certs; | 59 server_bound_cert_list_ = certs; |
| 60 MessageLoop::current()->Quit(); | 60 base::MessageLoop::current()->Quit(); |
| 61 } | 61 } |
| 62 | 62 |
| 63 // net::SSLConfigService::Observer implementation: | 63 // net::SSLConfigService::Observer implementation: |
| 64 virtual void OnSSLConfigChanged() OVERRIDE { | 64 virtual void OnSSLConfigChanged() OVERRIDE { |
| 65 ssl_config_changed_count_++; | 65 ssl_config_changed_count_++; |
| 66 } | 66 } |
| 67 | 67 |
| 68 protected: | 68 protected: |
| 69 MessageLoop message_loop_; | 69 base::MessageLoop message_loop_; |
| 70 scoped_ptr<content::TestBrowserThread> ui_thread_; | 70 scoped_ptr<content::TestBrowserThread> ui_thread_; |
| 71 scoped_ptr<content::TestBrowserThread> io_thread_; | 71 scoped_ptr<content::TestBrowserThread> io_thread_; |
| 72 scoped_ptr<TestingProfile> testing_profile_; | 72 scoped_ptr<TestingProfile> testing_profile_; |
| 73 | 73 |
| 74 net::ServerBoundCertStore::ServerBoundCertList server_bound_cert_list_; | 74 net::ServerBoundCertStore::ServerBoundCertList server_bound_cert_list_; |
| 75 | 75 |
| 76 int ssl_config_changed_count_; | 76 int ssl_config_changed_count_; |
| 77 }; | 77 }; |
| 78 | 78 |
| 79 TEST_F(BrowsingDataServerBoundCertHelperTest, FetchData) { | 79 TEST_F(BrowsingDataServerBoundCertHelperTest, FetchData) { |
| 80 CreateCertsForTest(); | 80 CreateCertsForTest(); |
| 81 scoped_refptr<BrowsingDataServerBoundCertHelper> helper( | 81 scoped_refptr<BrowsingDataServerBoundCertHelper> helper( |
| 82 BrowsingDataServerBoundCertHelper::Create(testing_profile_.get())); | 82 BrowsingDataServerBoundCertHelper::Create(testing_profile_.get())); |
| 83 | 83 |
| 84 helper->StartFetching( | 84 helper->StartFetching( |
| 85 base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback, | 85 base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback, |
| 86 base::Unretained(this))); | 86 base::Unretained(this))); |
| 87 | 87 |
| 88 // Blocks until BrowsingDataServerBoundCertHelperTest::FetchCallback is | 88 // Blocks until BrowsingDataServerBoundCertHelperTest::FetchCallback is |
| 89 // notified. | 89 // notified. |
| 90 MessageLoop::current()->Run(); | 90 base::MessageLoop::current()->Run(); |
| 91 | 91 |
| 92 ASSERT_EQ(2UL, server_bound_cert_list_.size()); | 92 ASSERT_EQ(2UL, server_bound_cert_list_.size()); |
| 93 net::ServerBoundCertStore::ServerBoundCertList::const_iterator it = | 93 net::ServerBoundCertStore::ServerBoundCertList::const_iterator it = |
| 94 server_bound_cert_list_.begin(); | 94 server_bound_cert_list_.begin(); |
| 95 | 95 |
| 96 // Correct because fetching server_bound_cert_list_ will get them out in the | 96 // Correct because fetching server_bound_cert_list_ will get them out in the |
| 97 // same order CreateCertsForTest put them in. | 97 // same order CreateCertsForTest put them in. |
| 98 ASSERT_TRUE(it != server_bound_cert_list_.end()); | 98 ASSERT_TRUE(it != server_bound_cert_list_.end()); |
| 99 EXPECT_EQ("https://www.google.com:443", it->server_identifier()); | 99 EXPECT_EQ("https://www.google.com:443", it->server_identifier()); |
| 100 | 100 |
| 101 ASSERT_TRUE(++it != server_bound_cert_list_.end()); | 101 ASSERT_TRUE(++it != server_bound_cert_list_.end()); |
| 102 EXPECT_EQ("https://www.youtube.com:443", it->server_identifier()); | 102 EXPECT_EQ("https://www.youtube.com:443", it->server_identifier()); |
| 103 | 103 |
| 104 ASSERT_TRUE(++it == server_bound_cert_list_.end()); | 104 ASSERT_TRUE(++it == server_bound_cert_list_.end()); |
| 105 | 105 |
| 106 EXPECT_EQ(0, ssl_config_changed_count_); | 106 EXPECT_EQ(0, ssl_config_changed_count_); |
| 107 } | 107 } |
| 108 | 108 |
| 109 TEST_F(BrowsingDataServerBoundCertHelperTest, DeleteCert) { | 109 TEST_F(BrowsingDataServerBoundCertHelperTest, DeleteCert) { |
| 110 CreateCertsForTest(); | 110 CreateCertsForTest(); |
| 111 scoped_refptr<BrowsingDataServerBoundCertHelper> helper( | 111 scoped_refptr<BrowsingDataServerBoundCertHelper> helper( |
| 112 BrowsingDataServerBoundCertHelper::Create(testing_profile_.get())); | 112 BrowsingDataServerBoundCertHelper::Create(testing_profile_.get())); |
| 113 | 113 |
| 114 helper->DeleteServerBoundCert("https://www.google.com:443"); | 114 helper->DeleteServerBoundCert("https://www.google.com:443"); |
| 115 | 115 |
| 116 helper->StartFetching( | 116 helper->StartFetching( |
| 117 base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback, | 117 base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback, |
| 118 base::Unretained(this))); | 118 base::Unretained(this))); |
| 119 MessageLoop::current()->Run(); | 119 base::MessageLoop::current()->Run(); |
| 120 | 120 |
| 121 EXPECT_EQ(1, ssl_config_changed_count_); | 121 EXPECT_EQ(1, ssl_config_changed_count_); |
| 122 ASSERT_EQ(1UL, server_bound_cert_list_.size()); | 122 ASSERT_EQ(1UL, server_bound_cert_list_.size()); |
| 123 net::ServerBoundCertStore::ServerBoundCertList::const_iterator it = | 123 net::ServerBoundCertStore::ServerBoundCertList::const_iterator it = |
| 124 server_bound_cert_list_.begin(); | 124 server_bound_cert_list_.begin(); |
| 125 | 125 |
| 126 ASSERT_TRUE(it != server_bound_cert_list_.end()); | 126 ASSERT_TRUE(it != server_bound_cert_list_.end()); |
| 127 EXPECT_EQ("https://www.youtube.com:443", it->server_identifier()); | 127 EXPECT_EQ("https://www.youtube.com:443", it->server_identifier()); |
| 128 | 128 |
| 129 ASSERT_TRUE(++it == server_bound_cert_list_.end()); | 129 ASSERT_TRUE(++it == server_bound_cert_list_.end()); |
| 130 | 130 |
| 131 helper->DeleteServerBoundCert("https://www.youtube.com:443"); | 131 helper->DeleteServerBoundCert("https://www.youtube.com:443"); |
| 132 | 132 |
| 133 helper->StartFetching( | 133 helper->StartFetching( |
| 134 base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback, | 134 base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback, |
| 135 base::Unretained(this))); | 135 base::Unretained(this))); |
| 136 MessageLoop::current()->Run(); | 136 base::MessageLoop::current()->Run(); |
| 137 EXPECT_EQ(2, ssl_config_changed_count_); | 137 EXPECT_EQ(2, ssl_config_changed_count_); |
| 138 ASSERT_EQ(0UL, server_bound_cert_list_.size()); | 138 ASSERT_EQ(0UL, server_bound_cert_list_.size()); |
| 139 } | 139 } |
| 140 | 140 |
| 141 TEST_F(BrowsingDataServerBoundCertHelperTest, CannedUnique) { | 141 TEST_F(BrowsingDataServerBoundCertHelperTest, CannedUnique) { |
| 142 std::string origin = "https://www.google.com:443"; | 142 std::string origin = "https://www.google.com:443"; |
| 143 | 143 |
| 144 scoped_refptr<CannedBrowsingDataServerBoundCertHelper> helper( | 144 scoped_refptr<CannedBrowsingDataServerBoundCertHelper> helper( |
| 145 new CannedBrowsingDataServerBoundCertHelper()); | 145 new CannedBrowsingDataServerBoundCertHelper()); |
| 146 | 146 |
| 147 ASSERT_TRUE(helper->empty()); | 147 ASSERT_TRUE(helper->empty()); |
| 148 helper->AddServerBoundCert(net::ServerBoundCertStore::ServerBoundCert( | 148 helper->AddServerBoundCert(net::ServerBoundCertStore::ServerBoundCert( |
| 149 origin, net::CLIENT_CERT_RSA_SIGN, base::Time(), base::Time(), "key", | 149 origin, net::CLIENT_CERT_RSA_SIGN, base::Time(), base::Time(), "key", |
| 150 "cert")); | 150 "cert")); |
| 151 helper->AddServerBoundCert(net::ServerBoundCertStore::ServerBoundCert( | 151 helper->AddServerBoundCert(net::ServerBoundCertStore::ServerBoundCert( |
| 152 origin, net::CLIENT_CERT_ECDSA_SIGN, base::Time(), base::Time(), "key", | 152 origin, net::CLIENT_CERT_ECDSA_SIGN, base::Time(), base::Time(), "key", |
| 153 "cert")); | 153 "cert")); |
| 154 | 154 |
| 155 helper->StartFetching( | 155 helper->StartFetching( |
| 156 base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback, | 156 base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback, |
| 157 base::Unretained(this))); | 157 base::Unretained(this))); |
| 158 MessageLoop::current()->Run(); | 158 base::MessageLoop::current()->Run(); |
| 159 | 159 |
| 160 ASSERT_EQ(1UL, server_bound_cert_list_.size()); | 160 ASSERT_EQ(1UL, server_bound_cert_list_.size()); |
| 161 net::ServerBoundCertStore::ServerBoundCert& cert = | 161 net::ServerBoundCertStore::ServerBoundCert& cert = |
| 162 server_bound_cert_list_.front(); | 162 server_bound_cert_list_.front(); |
| 163 | 163 |
| 164 EXPECT_EQ("https://www.google.com:443", cert.server_identifier()); | 164 EXPECT_EQ("https://www.google.com:443", cert.server_identifier()); |
| 165 EXPECT_EQ(net::CLIENT_CERT_ECDSA_SIGN, cert.type()); | 165 EXPECT_EQ(net::CLIENT_CERT_ECDSA_SIGN, cert.type()); |
| 166 EXPECT_EQ(0, ssl_config_changed_count_); | 166 EXPECT_EQ(0, ssl_config_changed_count_); |
| 167 } | 167 } |
| 168 | 168 |
| 169 TEST_F(BrowsingDataServerBoundCertHelperTest, CannedEmpty) { | 169 TEST_F(BrowsingDataServerBoundCertHelperTest, CannedEmpty) { |
| 170 std::string origin = "https://www.google.com"; | 170 std::string origin = "https://www.google.com"; |
| 171 | 171 |
| 172 scoped_refptr<CannedBrowsingDataServerBoundCertHelper> helper( | 172 scoped_refptr<CannedBrowsingDataServerBoundCertHelper> helper( |
| 173 new CannedBrowsingDataServerBoundCertHelper()); | 173 new CannedBrowsingDataServerBoundCertHelper()); |
| 174 | 174 |
| 175 ASSERT_TRUE(helper->empty()); | 175 ASSERT_TRUE(helper->empty()); |
| 176 helper->AddServerBoundCert(net::ServerBoundCertStore::ServerBoundCert( | 176 helper->AddServerBoundCert(net::ServerBoundCertStore::ServerBoundCert( |
| 177 origin, net::CLIENT_CERT_RSA_SIGN, base::Time(), base::Time(), "key", | 177 origin, net::CLIENT_CERT_RSA_SIGN, base::Time(), base::Time(), "key", |
| 178 "cert")); | 178 "cert")); |
| 179 ASSERT_FALSE(helper->empty()); | 179 ASSERT_FALSE(helper->empty()); |
| 180 helper->Reset(); | 180 helper->Reset(); |
| 181 ASSERT_TRUE(helper->empty()); | 181 ASSERT_TRUE(helper->empty()); |
| 182 } | 182 } |
| OLD | NEW |