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