Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: chrome/common/extensions/manifest_unittest.cc

Issue 2888073002: Remove raw DictionaryValue::Set in //chrome (Closed)
Patch Set: Fix Tests Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/common/manifest.h" 5 #include "extensions/common/manifest.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
11 #include <utility> 11 #include <utility>
12 12
13 #include "base/memory/ptr_util.h"
13 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
14 #include "base/values.h" 15 #include "base/values.h"
15 #include "extensions/common/error_utils.h" 16 #include "extensions/common/error_utils.h"
16 #include "extensions/common/features/feature.h" 17 #include "extensions/common/features/feature.h"
17 #include "extensions/common/features/simple_feature.h" 18 #include "extensions/common/features/simple_feature.h"
18 #include "extensions/common/install_warning.h" 19 #include "extensions/common/install_warning.h"
19 #include "extensions/common/manifest_constants.h" 20 #include "extensions/common/manifest_constants.h"
20 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
21 22
22 namespace extensions { 23 namespace extensions {
(...skipping 17 matching lines...) Expand all
40 EXPECT_EQ(type == Manifest::TYPE_HOSTED_APP, manifest->is_hosted_app()); 41 EXPECT_EQ(type == Manifest::TYPE_HOSTED_APP, manifest->is_hosted_app());
41 EXPECT_EQ(type == Manifest::TYPE_SHARED_MODULE, 42 EXPECT_EQ(type == Manifest::TYPE_SHARED_MODULE,
42 manifest->is_shared_module()); 43 manifest->is_shared_module());
43 } 44 }
44 45
45 // Helper function that replaces the Manifest held by |manifest| with a copy 46 // Helper function that replaces the Manifest held by |manifest| with a copy
46 // with its |key| changed to |value|. If |value| is NULL, then |key| will 47 // with its |key| changed to |value|. If |value| is NULL, then |key| will
47 // instead be deleted. 48 // instead be deleted.
48 void MutateManifest(std::unique_ptr<Manifest>* manifest, 49 void MutateManifest(std::unique_ptr<Manifest>* manifest,
49 const std::string& key, 50 const std::string& key,
50 base::Value* value) { 51 std::unique_ptr<base::Value> value) {
51 std::unique_ptr<base::DictionaryValue> manifest_value( 52 auto manifest_value =
52 manifest->get()->value()->DeepCopy()); 53 base::MakeUnique<base::DictionaryValue>(*manifest->get()->value());
53 if (value) 54 if (value)
54 manifest_value->Set(key, value); 55 manifest_value->Set(key, std::move(value));
55 else 56 else
56 manifest_value->Remove(key, NULL); 57 manifest_value->Remove(key, NULL);
57 manifest->reset( 58 manifest->reset(
58 new Manifest(Manifest::INTERNAL, std::move(manifest_value))); 59 new Manifest(Manifest::INTERNAL, std::move(manifest_value)));
59 } 60 }
60 61
61 std::string default_value_; 62 std::string default_value_;
62 }; 63 };
63 64
64 // Verifies that extensions can access the correct keys. 65 // Verifies that extensions can access the correct keys.
(...skipping 20 matching lines...) Expand all
85 EXPECT_TRUE(manifest->GetString(keys::kBackgroundPageLegacy, &value)); 86 EXPECT_TRUE(manifest->GetString(keys::kBackgroundPageLegacy, &value));
86 EXPECT_EQ("bg.html", value); 87 EXPECT_EQ("bg.html", value);
87 88
88 // The unknown key 'unknown_key' should be accesible. 89 // The unknown key 'unknown_key' should be accesible.
89 value.clear(); 90 value.clear();
90 EXPECT_TRUE(manifest->GetString("unknown_key", &value)); 91 EXPECT_TRUE(manifest->GetString("unknown_key", &value));
91 EXPECT_EQ("foo", value); 92 EXPECT_EQ("foo", value);
92 93
93 // Set the manifest_version to 2; background_page should stop working. 94 // Set the manifest_version to 2; background_page should stop working.
94 value.clear(); 95 value.clear();
95 MutateManifest(&manifest, keys::kManifestVersion, new base::Value(2)); 96 MutateManifest(&manifest, keys::kManifestVersion,
97 base::MakeUnique<base::Value>(2));
96 EXPECT_FALSE(manifest->GetString("background_page", &value)); 98 EXPECT_FALSE(manifest->GetString("background_page", &value));
97 EXPECT_EQ("", value); 99 EXPECT_EQ("", value);
98 100
99 // Validate should also give a warning. 101 // Validate should also give a warning.
100 warnings.clear(); 102 warnings.clear();
101 EXPECT_TRUE(manifest->ValidateManifest(&error, &warnings)); 103 EXPECT_TRUE(manifest->ValidateManifest(&error, &warnings));
102 EXPECT_TRUE(error.empty()); 104 EXPECT_TRUE(error.empty());
103 ASSERT_EQ(2u, warnings.size()); 105 ASSERT_EQ(2u, warnings.size());
104 { 106 {
105 SimpleFeature feature; 107 SimpleFeature feature;
106 feature.set_name("background_page"); 108 feature.set_name("background_page");
107 feature.set_max_manifest_version(1); 109 feature.set_max_manifest_version(1);
108 EXPECT_EQ( 110 EXPECT_EQ(
109 "'background_page' requires manifest version of 1 or lower.", 111 "'background_page' requires manifest version of 1 or lower.",
110 warnings[0].message); 112 warnings[0].message);
111 } 113 }
112 114
113 // Test DeepCopy and Equals. 115 // Test DeepCopy and Equals.
114 std::unique_ptr<Manifest> manifest2(manifest->DeepCopy()); 116 std::unique_ptr<Manifest> manifest2(manifest->DeepCopy());
115 EXPECT_TRUE(manifest->Equals(manifest2.get())); 117 EXPECT_TRUE(manifest->Equals(manifest2.get()));
116 EXPECT_TRUE(manifest2->Equals(manifest.get())); 118 EXPECT_TRUE(manifest2->Equals(manifest.get()));
117 MutateManifest(&manifest, "foo", new base::Value("blah")); 119 MutateManifest(&manifest, "foo", base::MakeUnique<base::Value>("blah"));
118 EXPECT_FALSE(manifest->Equals(manifest2.get())); 120 EXPECT_FALSE(manifest->Equals(manifest2.get()));
119 } 121 }
120 122
121 // Verifies that key restriction based on type works. 123 // Verifies that key restriction based on type works.
122 TEST_F(ManifestUnitTest, ExtensionTypes) { 124 TEST_F(ManifestUnitTest, ExtensionTypes) {
123 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 125 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
124 value->SetString(keys::kName, "extension"); 126 value->SetString(keys::kName, "extension");
125 value->SetString(keys::kVersion, "1"); 127 value->SetString(keys::kVersion, "1");
126 128
127 std::unique_ptr<Manifest> manifest( 129 std::unique_ptr<Manifest> manifest(
128 new Manifest(Manifest::INTERNAL, std::move(value))); 130 new Manifest(Manifest::INTERNAL, std::move(value)));
129 std::string error; 131 std::string error;
130 std::vector<InstallWarning> warnings; 132 std::vector<InstallWarning> warnings;
131 EXPECT_TRUE(manifest->ValidateManifest(&error, &warnings)); 133 EXPECT_TRUE(manifest->ValidateManifest(&error, &warnings));
132 EXPECT_TRUE(error.empty()); 134 EXPECT_TRUE(error.empty());
133 EXPECT_TRUE(warnings.empty()); 135 EXPECT_TRUE(warnings.empty());
134 136
135 // By default, the type is Extension. 137 // By default, the type is Extension.
136 AssertType(manifest.get(), Manifest::TYPE_EXTENSION); 138 AssertType(manifest.get(), Manifest::TYPE_EXTENSION);
137 139
138 // Theme. 140 // Theme.
139 MutateManifest( 141 MutateManifest(&manifest, keys::kTheme,
140 &manifest, keys::kTheme, new base::DictionaryValue()); 142 base::MakeUnique<base::DictionaryValue>());
141 AssertType(manifest.get(), Manifest::TYPE_THEME); 143 AssertType(manifest.get(), Manifest::TYPE_THEME);
142 MutateManifest( 144 MutateManifest(
143 &manifest, keys::kTheme, NULL); 145 &manifest, keys::kTheme, NULL);
144 146
145 // Shared module. 147 // Shared module.
146 MutateManifest( 148 MutateManifest(&manifest, keys::kExport,
147 &manifest, keys::kExport, new base::DictionaryValue()); 149 base::MakeUnique<base::DictionaryValue>());
148 AssertType(manifest.get(), Manifest::TYPE_SHARED_MODULE); 150 AssertType(manifest.get(), Manifest::TYPE_SHARED_MODULE);
149 MutateManifest( 151 MutateManifest(
150 &manifest, keys::kExport, NULL); 152 &manifest, keys::kExport, NULL);
151 153
152 // Packaged app. 154 // Packaged app.
153 MutateManifest( 155 MutateManifest(&manifest, keys::kApp,
154 &manifest, keys::kApp, new base::DictionaryValue()); 156 base::MakeUnique<base::DictionaryValue>());
155 AssertType(manifest.get(), Manifest::TYPE_LEGACY_PACKAGED_APP); 157 AssertType(manifest.get(), Manifest::TYPE_LEGACY_PACKAGED_APP);
156 158
157 // Platform app with event page. 159 // Platform app with event page.
158 MutateManifest( 160 MutateManifest(&manifest, keys::kPlatformAppBackground,
159 &manifest, keys::kPlatformAppBackground, new base::DictionaryValue()); 161 base::MakeUnique<base::DictionaryValue>());
160 AssertType(manifest.get(), Manifest::TYPE_PLATFORM_APP); 162 AssertType(manifest.get(), Manifest::TYPE_PLATFORM_APP);
161 MutateManifest( 163 MutateManifest(
162 &manifest, keys::kPlatformAppBackground, NULL); 164 &manifest, keys::kPlatformAppBackground, NULL);
163 165
164 // Hosted app. 166 // Hosted app.
165 MutateManifest( 167 MutateManifest(&manifest, keys::kWebURLs,
166 &manifest, keys::kWebURLs, new base::ListValue()); 168 base::MakeUnique<base::ListValue>());
167 AssertType(manifest.get(), Manifest::TYPE_HOSTED_APP); 169 AssertType(manifest.get(), Manifest::TYPE_HOSTED_APP);
168 MutateManifest( 170 MutateManifest(
169 &manifest, keys::kWebURLs, NULL); 171 &manifest, keys::kWebURLs, NULL);
170 MutateManifest(&manifest, keys::kLaunchWebURL, new base::Value("foo")); 172 MutateManifest(&manifest, keys::kLaunchWebURL,
173 base::MakeUnique<base::Value>("foo"));
171 AssertType(manifest.get(), Manifest::TYPE_HOSTED_APP); 174 AssertType(manifest.get(), Manifest::TYPE_HOSTED_APP);
172 MutateManifest( 175 MutateManifest(
173 &manifest, keys::kLaunchWebURL, NULL); 176 &manifest, keys::kLaunchWebURL, NULL);
174 } 177 }
175 178
176 // Verifies that the getters filter restricted keys. 179 // Verifies that the getters filter restricted keys.
177 TEST_F(ManifestUnitTest, RestrictedKeys) { 180 TEST_F(ManifestUnitTest, RestrictedKeys) {
178 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 181 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
179 value->SetString(keys::kName, "extension"); 182 value->SetString(keys::kName, "extension");
180 value->SetString(keys::kVersion, "1"); 183 value->SetString(keys::kVersion, "1");
181 184
182 std::unique_ptr<Manifest> manifest( 185 std::unique_ptr<Manifest> manifest(
183 new Manifest(Manifest::INTERNAL, std::move(value))); 186 new Manifest(Manifest::INTERNAL, std::move(value)));
184 std::string error; 187 std::string error;
185 std::vector<InstallWarning> warnings; 188 std::vector<InstallWarning> warnings;
186 EXPECT_TRUE(manifest->ValidateManifest(&error, &warnings)); 189 EXPECT_TRUE(manifest->ValidateManifest(&error, &warnings));
187 EXPECT_TRUE(error.empty()); 190 EXPECT_TRUE(error.empty());
188 EXPECT_TRUE(warnings.empty()); 191 EXPECT_TRUE(warnings.empty());
189 192
190 // "Commands" requires manifest version 2. 193 // "Commands" requires manifest version 2.
191 const base::Value* output = NULL; 194 const base::Value* output = NULL;
192 MutateManifest( 195 MutateManifest(&manifest, keys::kCommands,
193 &manifest, keys::kCommands, new base::DictionaryValue()); 196 base::MakeUnique<base::DictionaryValue>());
194 EXPECT_FALSE(manifest->HasKey(keys::kCommands)); 197 EXPECT_FALSE(manifest->HasKey(keys::kCommands));
195 EXPECT_FALSE(manifest->Get(keys::kCommands, &output)); 198 EXPECT_FALSE(manifest->Get(keys::kCommands, &output));
196 199
197 MutateManifest(&manifest, keys::kManifestVersion, new base::Value(2)); 200 MutateManifest(&manifest, keys::kManifestVersion,
201 base::MakeUnique<base::Value>(2));
198 EXPECT_TRUE(manifest->HasKey(keys::kCommands)); 202 EXPECT_TRUE(manifest->HasKey(keys::kCommands));
199 EXPECT_TRUE(manifest->Get(keys::kCommands, &output)); 203 EXPECT_TRUE(manifest->Get(keys::kCommands, &output));
200 204
201 MutateManifest( 205 MutateManifest(&manifest, keys::kPageAction,
202 &manifest, keys::kPageAction, new base::DictionaryValue()); 206 base::MakeUnique<base::DictionaryValue>());
203 AssertType(manifest.get(), Manifest::TYPE_EXTENSION); 207 AssertType(manifest.get(), Manifest::TYPE_EXTENSION);
204 EXPECT_TRUE(manifest->HasKey(keys::kPageAction)); 208 EXPECT_TRUE(manifest->HasKey(keys::kPageAction));
205 EXPECT_TRUE(manifest->Get(keys::kPageAction, &output)); 209 EXPECT_TRUE(manifest->Get(keys::kPageAction, &output));
206 210
207 // Platform apps cannot have a "page_action" key. 211 // Platform apps cannot have a "page_action" key.
208 MutateManifest( 212 MutateManifest(&manifest, keys::kPlatformAppBackground,
209 &manifest, keys::kPlatformAppBackground, new base::DictionaryValue()); 213 base::MakeUnique<base::DictionaryValue>());
210 AssertType(manifest.get(), Manifest::TYPE_PLATFORM_APP); 214 AssertType(manifest.get(), Manifest::TYPE_PLATFORM_APP);
211 EXPECT_FALSE(manifest->HasKey(keys::kPageAction)); 215 EXPECT_FALSE(manifest->HasKey(keys::kPageAction));
212 EXPECT_FALSE(manifest->Get(keys::kPageAction, &output)); 216 EXPECT_FALSE(manifest->Get(keys::kPageAction, &output));
213 MutateManifest( 217 MutateManifest(
214 &manifest, keys::kPlatformAppBackground, NULL); 218 &manifest, keys::kPlatformAppBackground, NULL);
215 219
216 // Platform apps also can't have a "Commands" key. 220 // Platform apps also can't have a "Commands" key.
217 EXPECT_FALSE(manifest->HasKey(keys::kCommands)); 221 EXPECT_FALSE(manifest->HasKey(keys::kCommands));
218 EXPECT_FALSE(manifest->Get(keys::kCommands, &output)); 222 EXPECT_FALSE(manifest->Get(keys::kCommands, &output));
219 } 223 }
220 224
221 } // namespace extensions 225 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698