Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / browsing_data / browsing_data_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_helper.h"
6
7 #include "base/strings/stringprintf.h"
8 #include "chrome/common/url_constants.h"
9 #include "extensions/common/constants.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "url/gurl.h"
12 #include "url/url_constants.h"
13
14 #if defined(ENABLE_EXTENSIONS)
15 #include "chrome/browser/extensions/mock_extension_special_storage_policy.h"
16 #endif
17
18 namespace {
19
20 const char kTestOrigin1[] = "http://host1:1/";
21 const char kTestOrigin2[] = "http://host2:1/";
22 const char kTestOrigin3[] = "http://host3:1/";
23 const char kTestOriginExt[] = "chrome-extension://abcdefghijklmnopqrstuvwxyz/";
24 const char kTestOriginDevTools[] = "chrome-devtools://abcdefghijklmnopqrstuvw/";
25
26 const GURL kOrigin1(kTestOrigin1);
27 const GURL kOrigin2(kTestOrigin2);
28 const GURL kOrigin3(kTestOrigin3);
29 const GURL kOriginExt(kTestOriginExt);
30 const GURL kOriginDevTools(kTestOriginDevTools);
31
32 const int kExtension = BrowsingDataHelper::EXTENSION;
33 const int kProtected = BrowsingDataHelper::PROTECTED_WEB;
34 const int kUnprotected = BrowsingDataHelper::UNPROTECTED_WEB;
35
36 class BrowsingDataHelperTest : public testing::Test {
37  public:
38   BrowsingDataHelperTest() {}
39   virtual ~BrowsingDataHelperTest() {}
40
41   bool IsWebScheme(const std::string& scheme) {
42     GURL test(scheme + "://example.com");
43     return (BrowsingDataHelper::HasWebScheme(test) &&
44             BrowsingDataHelper::IsWebScheme(scheme));
45   }
46
47   bool IsExtensionScheme(const std::string& scheme) {
48     GURL test(scheme + "://example.com");
49     return (BrowsingDataHelper::HasExtensionScheme(test) &&
50             BrowsingDataHelper::IsExtensionScheme(scheme));
51   }
52
53   bool Match(const GURL& origin,
54              int mask,
55              quota::SpecialStoragePolicy* policy) {
56     return BrowsingDataHelper::DoesOriginMatchMask(origin, mask, policy);
57   }
58
59  private:
60   DISALLOW_COPY_AND_ASSIGN(BrowsingDataHelperTest);
61 };
62
63 TEST_F(BrowsingDataHelperTest, WebSafeSchemesAreWebSafe) {
64   EXPECT_TRUE(IsWebScheme(url::kHttpScheme));
65   EXPECT_TRUE(IsWebScheme(url::kHttpsScheme));
66   EXPECT_TRUE(IsWebScheme(url::kFtpScheme));
67   EXPECT_TRUE(IsWebScheme(url::kDataScheme));
68   EXPECT_TRUE(IsWebScheme("feed"));
69   EXPECT_TRUE(IsWebScheme(url::kBlobScheme));
70   EXPECT_TRUE(IsWebScheme(url::kFileSystemScheme));
71   EXPECT_FALSE(IsWebScheme("invalid-scheme-i-just-made-up"));
72 }
73
74 TEST_F(BrowsingDataHelperTest, ChromeSchemesAreNotWebSafe) {
75   EXPECT_FALSE(IsWebScheme(extensions::kExtensionScheme));
76   EXPECT_FALSE(IsWebScheme(url::kAboutScheme));
77   EXPECT_FALSE(IsWebScheme(content::kChromeDevToolsScheme));
78   EXPECT_FALSE(IsWebScheme(content::kChromeUIScheme));
79   EXPECT_FALSE(IsWebScheme(url::kJavaScriptScheme));
80   EXPECT_FALSE(IsWebScheme(url::kMailToScheme));
81   EXPECT_FALSE(IsWebScheme(content::kMetadataScheme));
82   EXPECT_FALSE(IsWebScheme(content::kSwappedOutScheme));
83   EXPECT_FALSE(IsWebScheme(content::kViewSourceScheme));
84 }
85
86 TEST_F(BrowsingDataHelperTest, WebSafeSchemesAreNotExtensions) {
87   EXPECT_FALSE(IsExtensionScheme(url::kHttpScheme));
88   EXPECT_FALSE(IsExtensionScheme(url::kHttpsScheme));
89   EXPECT_FALSE(IsExtensionScheme(url::kFtpScheme));
90   EXPECT_FALSE(IsExtensionScheme(url::kDataScheme));
91   EXPECT_FALSE(IsExtensionScheme("feed"));
92   EXPECT_FALSE(IsExtensionScheme(url::kBlobScheme));
93   EXPECT_FALSE(IsExtensionScheme(url::kFileSystemScheme));
94   EXPECT_FALSE(IsExtensionScheme("invalid-scheme-i-just-made-up"));
95 }
96
97 TEST_F(BrowsingDataHelperTest, ChromeSchemesAreNotAllExtension) {
98   EXPECT_TRUE(IsExtensionScheme(extensions::kExtensionScheme));
99
100   EXPECT_FALSE(IsExtensionScheme(url::kAboutScheme));
101   EXPECT_FALSE(IsExtensionScheme(content::kChromeDevToolsScheme));
102   EXPECT_FALSE(IsExtensionScheme(content::kChromeUIScheme));
103   EXPECT_FALSE(IsExtensionScheme(url::kJavaScriptScheme));
104   EXPECT_FALSE(IsExtensionScheme(url::kMailToScheme));
105   EXPECT_FALSE(IsExtensionScheme(content::kMetadataScheme));
106   EXPECT_FALSE(IsExtensionScheme(content::kSwappedOutScheme));
107   EXPECT_FALSE(IsExtensionScheme(content::kViewSourceScheme));
108 }
109
110 #if defined(ENABLE_EXTENSIONS)
111 TEST_F(BrowsingDataHelperTest, TestMatches) {
112   scoped_refptr<MockExtensionSpecialStoragePolicy> mock_policy =
113       new MockExtensionSpecialStoragePolicy;
114   // Protect kOrigin1.
115   mock_policy->AddProtected(kOrigin1.GetOrigin());
116
117   EXPECT_FALSE(Match(kOrigin1, kUnprotected, mock_policy.get()));
118   EXPECT_TRUE(Match(kOrigin2, kUnprotected, mock_policy.get()));
119   EXPECT_FALSE(Match(kOriginExt, kUnprotected, mock_policy.get()));
120   EXPECT_FALSE(Match(kOriginDevTools, kUnprotected, mock_policy.get()));
121
122   EXPECT_TRUE(Match(kOrigin1, kProtected, mock_policy.get()));
123   EXPECT_FALSE(Match(kOrigin2, kProtected, mock_policy.get()));
124   EXPECT_FALSE(Match(kOriginExt, kProtected, mock_policy.get()));
125   EXPECT_FALSE(Match(kOriginDevTools, kProtected, mock_policy.get()));
126
127   EXPECT_FALSE(Match(kOrigin1, kExtension, mock_policy.get()));
128   EXPECT_FALSE(Match(kOrigin2, kExtension, mock_policy.get()));
129   EXPECT_TRUE(Match(kOriginExt, kExtension, mock_policy.get()));
130   EXPECT_FALSE(Match(kOriginDevTools, kExtension, mock_policy.get()));
131
132   EXPECT_TRUE(Match(kOrigin1, kUnprotected | kProtected, mock_policy.get()));
133   EXPECT_TRUE(Match(kOrigin2, kUnprotected | kProtected, mock_policy.get()));
134   EXPECT_FALSE(Match(kOriginExt, kUnprotected | kProtected, mock_policy.get()));
135   EXPECT_FALSE(
136       Match(kOriginDevTools, kUnprotected | kProtected, mock_policy.get()));
137
138   EXPECT_FALSE(Match(kOrigin1, kUnprotected | kExtension, mock_policy.get()));
139   EXPECT_TRUE(Match(kOrigin2, kUnprotected | kExtension, mock_policy.get()));
140   EXPECT_TRUE(Match(kOriginExt, kUnprotected | kExtension, mock_policy.get()));
141   EXPECT_FALSE(
142       Match(kOriginDevTools, kUnprotected | kExtension, mock_policy.get()));
143
144   EXPECT_TRUE(Match(kOrigin1, kProtected | kExtension, mock_policy.get()));
145   EXPECT_FALSE(Match(kOrigin2, kProtected | kExtension, mock_policy.get()));
146   EXPECT_TRUE(Match(kOriginExt, kProtected | kExtension, mock_policy.get()));
147   EXPECT_FALSE(
148       Match(kOriginDevTools, kProtected | kExtension, mock_policy.get()));
149
150   EXPECT_TRUE(Match(
151       kOrigin1, kUnprotected | kProtected | kExtension, mock_policy.get()));
152   EXPECT_TRUE(Match(
153       kOrigin2, kUnprotected | kProtected | kExtension, mock_policy.get()));
154   EXPECT_TRUE(Match(
155       kOriginExt, kUnprotected | kProtected | kExtension, mock_policy.get()));
156   EXPECT_FALSE(Match(kOriginDevTools,
157                      kUnprotected | kProtected | kExtension,
158                      mock_policy.get()));
159 }
160 #endif
161
162 // If extensions are disabled, there is no policy.
163 TEST_F(BrowsingDataHelperTest, TestNoPolicyMatches) {
164   EXPECT_FALSE(Match(kOrigin1, kExtension, NULL));
165   EXPECT_TRUE(Match(kOrigin1, kUnprotected, NULL));
166   EXPECT_FALSE(Match(kOrigin1, kProtected, NULL));
167
168   EXPECT_TRUE(Match(kOriginExt, kExtension, NULL));
169   EXPECT_FALSE(Match(kOriginExt, kUnprotected, NULL));
170   EXPECT_FALSE(Match(kOriginExt, kProtected, NULL));
171
172   EXPECT_FALSE(Match(kOriginDevTools, kExtension, NULL));
173   EXPECT_FALSE(Match(kOriginDevTools, kUnprotected, NULL));
174   EXPECT_FALSE(Match(kOriginDevTools, kProtected, NULL));
175 }
176
177 }  // namespace