settings_override_permission_unittest.cc revision f2477e01787aa58f445919b809d89e252beef54f
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<ListValue> startup_pages(new 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<DictionaryValue> search_provider(new DictionaryValue);
46      search_provider->SetString("search_url", "http://google.com/search.html");
47      search_provider->SetString("name", "test");
48      search_provider->SetString("keyword", "lock");
49      search_provider->SetString("encoding", "UTF-8");
50      search_provider->SetBoolean("is_default", true);
51      search_provider->SetString("favicon_url",
52                                 "http://wikipedia.org/wiki/Favicon");
53      settings_override->Set("search_provider", search_provider.release());
54    }
55    ext_manifest.Set(
56        manifest_keys::kSettingsOverride, settings_override.release());
57
58    Manifest manifest(&ext_manifest, "test");
59    return LoadAndExpectSuccess(manifest);
60  }
61};
62
63TEST_F(SettingsOverridePermissionTest, HomePage) {
64  scoped_refptr<Extension> extension(GetPermissionSet(kHomepage));
65  scoped_refptr<const PermissionSet> permission_set(
66      extension->GetActivePermissions());
67
68  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kHomepage));
69  std::vector<string16> warnings =
70      PermissionsData::GetPermissionMessageStrings(extension.get());
71  ASSERT_EQ(1u, warnings.size());
72  EXPECT_EQ("Change your home page to: google.com/",
73            UTF16ToUTF8(warnings[0]));
74
75  EXPECT_FALSE(permission_set->HasAPIPermission(APIPermission::kStartupPages));
76  EXPECT_FALSE(permission_set->HasAPIPermission(
77      APIPermission::kSearchProvider));
78}
79
80TEST_F(SettingsOverridePermissionTest, SartupPages) {
81  scoped_refptr<Extension> extension(GetPermissionSet(kStartupPages));
82  scoped_refptr<const PermissionSet> permission_set(
83      extension->GetActivePermissions());
84
85  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kStartupPages));
86  std::vector<string16> warnings =
87      PermissionsData::GetPermissionMessageStrings(extension.get());
88  ASSERT_EQ(1u, warnings.size());
89  EXPECT_EQ("Change your start page to: startup.com/startup.html",
90            UTF16ToUTF8(warnings[0]));
91
92  EXPECT_FALSE(permission_set->HasAPIPermission(APIPermission::kHomepage));
93  EXPECT_FALSE(permission_set->HasAPIPermission(
94      APIPermission::kSearchProvider));
95}
96
97TEST_F(SettingsOverridePermissionTest, SearchSettings) {
98  scoped_refptr<Extension> extension(GetPermissionSet(kSearchProvider));
99  scoped_refptr<const PermissionSet> permission_set(
100      extension->GetActivePermissions());
101
102  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kSearchProvider));
103  std::vector<string16> warnings =
104      PermissionsData::GetPermissionMessageStrings(extension.get());
105  ASSERT_EQ(1u, warnings.size());
106  EXPECT_EQ("Change your search settings to: google.com",
107            UTF16ToUTF8(warnings[0]));
108
109  EXPECT_FALSE(permission_set->HasAPIPermission(APIPermission::kHomepage));
110  EXPECT_FALSE(permission_set->HasAPIPermission(APIPermission::kStartupPages));
111}
112
113TEST_F(SettingsOverridePermissionTest, All) {
114  scoped_refptr<Extension> extension(GetPermissionSet(
115      kSearchProvider | kStartupPages | kHomepage));
116  scoped_refptr<const PermissionSet> permission_set(
117      extension->GetActivePermissions());
118
119  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kSearchProvider));
120  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kHomepage));
121  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kStartupPages));
122}
123
124TEST_F(SettingsOverridePermissionTest, Some) {
125  scoped_refptr<Extension> extension(GetPermissionSet(
126      kSearchProvider | kHomepage));
127  scoped_refptr<const PermissionSet> permission_set(
128      extension->GetActivePermissions());
129
130
131  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kSearchProvider));
132  EXPECT_TRUE(permission_set->HasAPIPermission(APIPermission::kHomepage));
133  EXPECT_FALSE(permission_set->HasAPIPermission(APIPermission::kStartupPages));
134}
135
136}  // namespace
137
138}  // namespace extensions
139