- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / browsing_data / browsing_data_server_bound_cert_helper_unittest.cc
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/browsing_data/browsing_data_server_bound_cert_helper.h"
6
7 #include "base/bind.h"
8 #include "base/run_loop.h"
9 #include "chrome/test/base/testing_profile.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "content/public/test/test_browser_thread_bundle.h"
12 #include "net/ssl/server_bound_cert_service.h"
13 #include "net/url_request/url_request_context.h"
14 #include "net/url_request/url_request_context_getter.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 using content::BrowserThread;
18
19 class BrowsingDataServerBoundCertHelperTest
20     : public testing::Test,
21       public net::SSLConfigService::Observer {
22  public:
23   BrowsingDataServerBoundCertHelperTest() : ssl_config_changed_count_(0) {
24   }
25
26   virtual void SetUp() OVERRIDE {
27     testing_profile_.reset(new TestingProfile());
28
29     testing_profile_->GetSSLConfigService()->AddObserver(this);
30   }
31
32   virtual void TearDown() OVERRIDE {
33     testing_profile_->GetSSLConfigService()->RemoveObserver(this);
34   }
35
36   void CreateCertsForTest() {
37     net::URLRequestContext* context =
38         testing_profile_->GetRequestContext()->GetURLRequestContext();
39     net::ServerBoundCertStore* cert_store =
40         context->server_bound_cert_service()->GetCertStore();
41     cert_store->SetServerBoundCert("https://www.google.com:443",
42                                    base::Time(), base::Time(),
43                                    "key", "cert");
44     cert_store->SetServerBoundCert("https://www.youtube.com:443",
45                                    base::Time(), base::Time(),
46                                    "key", "cert");
47   }
48
49   void FetchCallback(
50       const net::ServerBoundCertStore::ServerBoundCertList& certs) {
51     DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
52     server_bound_cert_list_ = certs;
53   }
54
55   // net::SSLConfigService::Observer implementation:
56   virtual void OnSSLConfigChanged() OVERRIDE {
57     ssl_config_changed_count_++;
58   }
59
60  protected:
61   content::TestBrowserThreadBundle thread_bundle_;
62   scoped_ptr<TestingProfile> testing_profile_;
63
64   net::ServerBoundCertStore::ServerBoundCertList server_bound_cert_list_;
65
66   int ssl_config_changed_count_;
67 };
68
69 TEST_F(BrowsingDataServerBoundCertHelperTest, FetchData) {
70   CreateCertsForTest();
71   scoped_refptr<BrowsingDataServerBoundCertHelper> helper(
72       BrowsingDataServerBoundCertHelper::Create(testing_profile_.get()));
73
74   helper->StartFetching(
75       base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback,
76                  base::Unretained(this)));
77
78   // Blocks until BrowsingDataServerBoundCertHelperTest::FetchCallback is
79   // notified.
80   base::RunLoop().RunUntilIdle();
81
82   ASSERT_EQ(2UL, server_bound_cert_list_.size());
83   net::ServerBoundCertStore::ServerBoundCertList::const_iterator it =
84       server_bound_cert_list_.begin();
85
86   // Correct because fetching server_bound_cert_list_ will get them out in the
87   // same order CreateCertsForTest put them in.
88   ASSERT_TRUE(it != server_bound_cert_list_.end());
89   EXPECT_EQ("https://www.google.com:443", it->server_identifier());
90
91   ASSERT_TRUE(++it != server_bound_cert_list_.end());
92   EXPECT_EQ("https://www.youtube.com:443", it->server_identifier());
93
94   ASSERT_TRUE(++it == server_bound_cert_list_.end());
95
96   EXPECT_EQ(0, ssl_config_changed_count_);
97 }
98
99 TEST_F(BrowsingDataServerBoundCertHelperTest, DeleteCert) {
100   CreateCertsForTest();
101   scoped_refptr<BrowsingDataServerBoundCertHelper> helper(
102       BrowsingDataServerBoundCertHelper::Create(testing_profile_.get()));
103
104   helper->DeleteServerBoundCert("https://www.google.com:443");
105
106   helper->StartFetching(
107       base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback,
108                  base::Unretained(this)));
109   base::RunLoop().RunUntilIdle();
110
111   EXPECT_EQ(1, ssl_config_changed_count_);
112   ASSERT_EQ(1UL, server_bound_cert_list_.size());
113   net::ServerBoundCertStore::ServerBoundCertList::const_iterator it =
114       server_bound_cert_list_.begin();
115
116   ASSERT_TRUE(it != server_bound_cert_list_.end());
117   EXPECT_EQ("https://www.youtube.com:443", it->server_identifier());
118
119   ASSERT_TRUE(++it == server_bound_cert_list_.end());
120
121   helper->DeleteServerBoundCert("https://www.youtube.com:443");
122
123   helper->StartFetching(
124       base::Bind(&BrowsingDataServerBoundCertHelperTest::FetchCallback,
125                  base::Unretained(this)));
126   base::RunLoop().RunUntilIdle();
127
128   EXPECT_EQ(2, ssl_config_changed_count_);
129   ASSERT_EQ(0UL, server_bound_cert_list_.size());
130 }
131
132 TEST_F(BrowsingDataServerBoundCertHelperTest, CannedEmpty) {
133   std::string origin = "https://www.google.com";
134
135   scoped_refptr<CannedBrowsingDataServerBoundCertHelper> helper(
136       new CannedBrowsingDataServerBoundCertHelper());
137
138   ASSERT_TRUE(helper->empty());
139   helper->AddServerBoundCert(net::ServerBoundCertStore::ServerBoundCert(
140       origin, base::Time(), base::Time(), "key", "cert"));
141   ASSERT_FALSE(helper->empty());
142   helper->Reset();
143   ASSERT_TRUE(helper->empty());
144 }