settings_override_permission_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2013 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// These tests make sure SettingsOverridePermission values are set correctly.
6
7#include "base/basictypes.h"
8#include "base/strings/utf_string_conversions.h"
9#include "base/values.h"
10#include "chrome/common/extensions/manifest_tests/extension_manifest_test.h"
11#include "chrome/common/extensions/permissions/settings_override_permission.h"
12#include "extensions/common/manifest_constants.h"
13#include "extensions/common/permissions/permission_set.h"
14#include "extensions/common/permissions/permissions_data.h"
15#include "testing/gtest/include/gtest/gtest.h"
16
17namespace extensions {
18
19namespace {
20
21class SettingsOverridePermissionTest : public ExtensionManifestTest {
22 protected:
23  enum Flags {
24    kHomepage = 1,
25    kStartupPages = 1 << 1,
26    kSearchProvider = 1 << 2,
27  };
28
29  scoped_refptr<Extension> GetPermissionSet(uint32 flags) {
30    base::DictionaryValue ext_manifest;
31    ext_manifest.SetString(manifest_keys::kName, "test");
32    ext_manifest.SetString(manifest_keys::kVersion, "0.1");
33    ext_manifest.SetInteger(manifest_keys::kManifestVersion, 2);
34
35    scoped_ptr<base::DictionaryValue> settings_override(
36        new base::DictionaryValue);
37    if (flags & kHomepage)
38      settings_override->SetString("homepage", "http://www.google.com");
39    if (flags & kStartupPages) {
40      scoped_ptr<base::ListValue> startup_pages(new base::ListValue);
41      startup_pages->AppendString("http://startup.com/startup.html");
42      settings_override->Set("startup_pages", startup_pages.release());
43    }
44    if (flags & kSearchProvider) {
45      scoped_ptr<base::DictionaryValue> search_provider(
46          new base::DictionaryValue);
47      search_provider->SetString("search_url", "http://google.com/search.html");
48      search_provider->SetString("name", "test");
49      search_provider->SetString("keyword", "lock");
50      search_provider->SetString("encoding", "UTF-8");
51      search_provider->SetBoolean("is_default", true);
52      search_provider->SetString("favicon_url",
53                                 "http://wikipedia.org/wiki/Favicon");
54      settings_override->Set("search_provider", search_provider.release());
55    }
56    ext_manifest.Set(
57        manifest_keys::kSettingsOverride, settings_override.release());
58
59    Manifest manifest(&ext_manifest, "test");
60    return LoadAndExpectSuccess(manifest);
61  }
62};
63
64TEST_F(SettingsOverridePermissionTest, HomePage) {
65  scoped_refptr<Extension> extension(GetPermissionSet(kHomepage));
66  scoped_refptr<const PermissionSet> permission_set(
67      extension->GetActivePermissions());
68
69  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kHomepage));
70  std::vector<base::string16> warnings =
71      PermissionsData::GetPermissionMessageStrings(extension.get());
72  ASSERT_EQ(1u, warnings.size());
73  EXPECT_EQ("Change your home page to: google.com/",
74            base::UTF16ToUTF8(warnings[0]));
75
76  EXPECT_FALSE(permission_set->HasAPIPermission(APIPermission::kStartupPages));
77  EXPECT_FALSE(permission_set->HasAPIPermission(
78      APIPermission::kSearchProvider));
79}
80
81TEST_F(SettingsOverridePermissionTest, SartupPages) {
82  scoped_refptr<Extension> extension(GetPermissionSet(kStartupPages));
83  scoped_refptr<const PermissionSet> permission_set(
84      extension->GetActivePermissions());
85
86  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kStartupPages));
87  std::vector<base::string16> warnings =
88      PermissionsData::GetPermissionMessageStrings(extension.get());
89  ASSERT_EQ(1u, warnings.size());
90  EXPECT_EQ("Change your start page to: startup.com/startup.html",
91            base::UTF16ToUTF8(warnings[0]));
92
93  EXPECT_FALSE(permission_set->HasAPIPermission(APIPermission::kHomepage));
94  EXPECT_FALSE(permission_set->HasAPIPermission(
95      APIPermission::kSearchProvider));
96}
97
98TEST_F(SettingsOverridePermissionTest, SearchSettings) {
99  scoped_refptr<Extension> extension(GetPermissionSet(kSearchProvider));
100  scoped_refptr<const PermissionSet> permission_set(
101      extension->GetActivePermissions());
102
103  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kSearchProvider));
104  std::vector<base::string16> warnings =
105      PermissionsData::GetPermissionMessageStrings(extension.get());
106  ASSERT_EQ(1u, warnings.size());
107  EXPECT_EQ("Change your search settings to: google.com",
108            base::UTF16ToUTF8(warnings[0]));
109
110  EXPECT_FALSE(permission_set->HasAPIPermission(APIPermission::kHomepage));
111  EXPECT_FALSE(permission_set->HasAPIPermission(APIPermission::kStartupPages));
112}
113
114TEST_F(SettingsOverridePermissionTest, All) {
115  scoped_refptr<Extension> extension(GetPermissionSet(
116      kSearchProvider | kStartupPages | kHomepage));
117  scoped_refptr<const PermissionSet> permission_set(
118      extension->GetActivePermissions());
119
120  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kSearchProvider));
121  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kHomepage));
122  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kStartupPages));
123}
124
125TEST_F(SettingsOverridePermissionTest, Some) {
126  scoped_refptr<Extension> extension(GetPermissionSet(
127      kSearchProvider | kHomepage));
128  scoped_refptr<const PermissionSet> permission_set(
129      extension->GetActivePermissions());
130
131
132  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kSearchProvider));
133  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kHomepage));
134  EXPECT_FALSE(permission_set->HasAPIPermission(APIPermission::kStartupPages));
135}
136
137}  // namespace
138
139}  // namespace extensions
140