OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/common/extensions/extension.h" | 5 #include "chrome/common/extensions/extension.h" |
6 | 6 |
7 #if defined(TOOLKIT_GTK) | 7 #if defined(TOOLKIT_GTK) |
8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
9 #endif | 9 #endif |
10 | 10 |
11 #include "base/format_macros.h" | 11 #include "base/format_macros.h" |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 .AppendASCII("1.0.0.0") | 98 .AppendASCII("1.0.0.0") |
99 .Append(Extension::kManifestFilename); | 99 .Append(Extension::kManifestFilename); |
100 | 100 |
101 JSONFileValueSerializer serializer(extensions_path); | 101 JSONFileValueSerializer serializer(extensions_path); |
102 scoped_ptr<DictionaryValue> valid_value( | 102 scoped_ptr<DictionaryValue> valid_value( |
103 static_cast<DictionaryValue*>(serializer.Deserialize(&error_code, | 103 static_cast<DictionaryValue*>(serializer.Deserialize(&error_code, |
104 &error))); | 104 &error))); |
105 EXPECT_EQ("", error); | 105 EXPECT_EQ("", error); |
106 EXPECT_EQ(0, error_code); | 106 EXPECT_EQ(0, error_code); |
107 ASSERT_TRUE(valid_value.get()); | 107 ASSERT_TRUE(valid_value.get()); |
108 ASSERT_TRUE(extension.InitFromValue(*valid_value, true, false, &error)); | 108 ASSERT_TRUE(extension.InitFromValue(*valid_value, Extension::REQUIRE_KEY, |
| 109 &error)); |
109 ASSERT_EQ("", error); | 110 ASSERT_EQ("", error); |
110 EXPECT_EQ("en_US", extension.default_locale()); | 111 EXPECT_EQ("en_US", extension.default_locale()); |
111 | 112 |
112 scoped_ptr<DictionaryValue> input_value; | 113 scoped_ptr<DictionaryValue> input_value; |
113 | 114 |
114 // Test missing and invalid versions | 115 // Test missing and invalid versions |
115 input_value.reset(valid_value->DeepCopy()); | 116 input_value.reset(valid_value->DeepCopy()); |
116 input_value->Remove(keys::kVersion, NULL); | 117 input_value->Remove(keys::kVersion, NULL); |
117 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 118 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 119 &error)); |
118 EXPECT_EQ(errors::kInvalidVersion, error); | 120 EXPECT_EQ(errors::kInvalidVersion, error); |
119 | 121 |
120 input_value->SetInteger(keys::kVersion, 42); | 122 input_value->SetInteger(keys::kVersion, 42); |
121 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 123 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 124 &error)); |
122 EXPECT_EQ(errors::kInvalidVersion, error); | 125 EXPECT_EQ(errors::kInvalidVersion, error); |
123 | 126 |
124 // Test missing and invalid names. | 127 // Test missing and invalid names. |
125 input_value.reset(valid_value->DeepCopy()); | 128 input_value.reset(valid_value->DeepCopy()); |
126 input_value->Remove(keys::kName, NULL); | 129 input_value->Remove(keys::kName, NULL); |
127 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 130 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 131 &error)); |
128 EXPECT_EQ(errors::kInvalidName, error); | 132 EXPECT_EQ(errors::kInvalidName, error); |
129 | 133 |
130 input_value->SetInteger(keys::kName, 42); | 134 input_value->SetInteger(keys::kName, 42); |
131 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 135 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 136 &error)); |
132 EXPECT_EQ(errors::kInvalidName, error); | 137 EXPECT_EQ(errors::kInvalidName, error); |
133 | 138 |
134 // Test invalid description | 139 // Test invalid description |
135 input_value.reset(valid_value->DeepCopy()); | 140 input_value.reset(valid_value->DeepCopy()); |
136 input_value->SetInteger(keys::kDescription, 42); | 141 input_value->SetInteger(keys::kDescription, 42); |
137 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 142 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 143 &error)); |
138 EXPECT_EQ(errors::kInvalidDescription, error); | 144 EXPECT_EQ(errors::kInvalidDescription, error); |
139 | 145 |
140 // Test invalid icons | 146 // Test invalid icons |
141 input_value.reset(valid_value->DeepCopy()); | 147 input_value.reset(valid_value->DeepCopy()); |
142 input_value->SetInteger(keys::kIcons, 42); | 148 input_value->SetInteger(keys::kIcons, 42); |
143 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 149 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 150 &error)); |
144 EXPECT_EQ(errors::kInvalidIcons, error); | 151 EXPECT_EQ(errors::kInvalidIcons, error); |
145 | 152 |
146 // Test invalid icon paths | 153 // Test invalid icon paths |
147 input_value.reset(valid_value->DeepCopy()); | 154 input_value.reset(valid_value->DeepCopy()); |
148 DictionaryValue* icons = NULL; | 155 DictionaryValue* icons = NULL; |
149 input_value->GetDictionary(keys::kIcons, &icons); | 156 input_value->GetDictionary(keys::kIcons, &icons); |
150 ASSERT_FALSE(NULL == icons); | 157 ASSERT_FALSE(NULL == icons); |
151 icons->SetInteger(base::IntToString(128), 42); | 158 icons->SetInteger(base::IntToString(128), 42); |
152 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 159 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 160 &error)); |
153 EXPECT_TRUE(MatchPattern(error, errors::kInvalidIconPath)); | 161 EXPECT_TRUE(MatchPattern(error, errors::kInvalidIconPath)); |
154 | 162 |
155 // Test invalid user scripts list | 163 // Test invalid user scripts list |
156 input_value.reset(valid_value->DeepCopy()); | 164 input_value.reset(valid_value->DeepCopy()); |
157 input_value->SetInteger(keys::kContentScripts, 42); | 165 input_value->SetInteger(keys::kContentScripts, 42); |
158 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 166 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 167 &error)); |
159 EXPECT_EQ(errors::kInvalidContentScriptsList, error); | 168 EXPECT_EQ(errors::kInvalidContentScriptsList, error); |
160 | 169 |
161 // Test invalid user script item | 170 // Test invalid user script item |
162 input_value.reset(valid_value->DeepCopy()); | 171 input_value.reset(valid_value->DeepCopy()); |
163 ListValue* content_scripts = NULL; | 172 ListValue* content_scripts = NULL; |
164 input_value->GetList(keys::kContentScripts, &content_scripts); | 173 input_value->GetList(keys::kContentScripts, &content_scripts); |
165 ASSERT_FALSE(NULL == content_scripts); | 174 ASSERT_FALSE(NULL == content_scripts); |
166 content_scripts->Set(0, Value::CreateIntegerValue(42)); | 175 content_scripts->Set(0, Value::CreateIntegerValue(42)); |
167 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 176 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 177 &error)); |
168 EXPECT_TRUE(MatchPattern(error, errors::kInvalidContentScript)); | 178 EXPECT_TRUE(MatchPattern(error, errors::kInvalidContentScript)); |
169 | 179 |
170 // Test missing and invalid matches array | 180 // Test missing and invalid matches array |
171 input_value.reset(valid_value->DeepCopy()); | 181 input_value.reset(valid_value->DeepCopy()); |
172 input_value->GetList(keys::kContentScripts, &content_scripts); | 182 input_value->GetList(keys::kContentScripts, &content_scripts); |
173 DictionaryValue* user_script = NULL; | 183 DictionaryValue* user_script = NULL; |
174 content_scripts->GetDictionary(0, &user_script); | 184 content_scripts->GetDictionary(0, &user_script); |
175 user_script->Remove(keys::kMatches, NULL); | 185 user_script->Remove(keys::kMatches, NULL); |
176 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 186 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 187 &error)); |
177 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatches)); | 188 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatches)); |
178 | 189 |
179 user_script->Set(keys::kMatches, Value::CreateIntegerValue(42)); | 190 user_script->Set(keys::kMatches, Value::CreateIntegerValue(42)); |
180 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 191 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 192 &error)); |
181 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatches)); | 193 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatches)); |
182 | 194 |
183 ListValue* matches = new ListValue; | 195 ListValue* matches = new ListValue; |
184 user_script->Set(keys::kMatches, matches); | 196 user_script->Set(keys::kMatches, matches); |
185 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 197 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 198 &error)); |
186 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatchCount)); | 199 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatchCount)); |
187 | 200 |
188 // Test invalid match element | 201 // Test invalid match element |
189 matches->Set(0, Value::CreateIntegerValue(42)); | 202 matches->Set(0, Value::CreateIntegerValue(42)); |
190 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 203 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 204 &error)); |
191 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatch)); | 205 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatch)); |
192 | 206 |
193 matches->Set(0, Value::CreateStringValue("chrome://*/*")); | 207 matches->Set(0, Value::CreateStringValue("chrome://*/*")); |
194 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 208 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 209 &error)); |
195 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatch)); | 210 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMatch)); |
196 | 211 |
197 // Test missing and invalid files array | 212 // Test missing and invalid files array |
198 input_value.reset(valid_value->DeepCopy()); | 213 input_value.reset(valid_value->DeepCopy()); |
199 input_value->GetList(keys::kContentScripts, &content_scripts); | 214 input_value->GetList(keys::kContentScripts, &content_scripts); |
200 content_scripts->GetDictionary(0, &user_script); | 215 content_scripts->GetDictionary(0, &user_script); |
201 user_script->Remove(keys::kJs, NULL); | 216 user_script->Remove(keys::kJs, NULL); |
202 user_script->Remove(keys::kCss, NULL); | 217 user_script->Remove(keys::kCss, NULL); |
203 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 218 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 219 &error)); |
204 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile)); | 220 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile)); |
205 | 221 |
206 user_script->Set(keys::kJs, Value::CreateIntegerValue(42)); | 222 user_script->Set(keys::kJs, Value::CreateIntegerValue(42)); |
207 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 223 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 224 &error)); |
208 EXPECT_TRUE(MatchPattern(error, errors::kInvalidJsList)); | 225 EXPECT_TRUE(MatchPattern(error, errors::kInvalidJsList)); |
209 | 226 |
210 user_script->Set(keys::kCss, new ListValue); | 227 user_script->Set(keys::kCss, new ListValue); |
211 user_script->Set(keys::kJs, new ListValue); | 228 user_script->Set(keys::kJs, new ListValue); |
212 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 229 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 230 &error)); |
213 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile)); | 231 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile)); |
214 user_script->Remove(keys::kCss, NULL); | 232 user_script->Remove(keys::kCss, NULL); |
215 | 233 |
216 ListValue* files = new ListValue; | 234 ListValue* files = new ListValue; |
217 user_script->Set(keys::kJs, files); | 235 user_script->Set(keys::kJs, files); |
218 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 236 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 237 &error)); |
219 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile)); | 238 EXPECT_TRUE(MatchPattern(error, errors::kMissingFile)); |
220 | 239 |
221 // Test invalid file element | 240 // Test invalid file element |
222 files->Set(0, Value::CreateIntegerValue(42)); | 241 files->Set(0, Value::CreateIntegerValue(42)); |
223 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 242 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 243 &error)); |
224 EXPECT_TRUE(MatchPattern(error, errors::kInvalidJs)); | 244 EXPECT_TRUE(MatchPattern(error, errors::kInvalidJs)); |
225 | 245 |
226 user_script->Remove(keys::kJs, NULL); | 246 user_script->Remove(keys::kJs, NULL); |
227 // Test the css element | 247 // Test the css element |
228 user_script->Set(keys::kCss, Value::CreateIntegerValue(42)); | 248 user_script->Set(keys::kCss, Value::CreateIntegerValue(42)); |
229 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 249 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 250 &error)); |
230 EXPECT_TRUE(MatchPattern(error, errors::kInvalidCssList)); | 251 EXPECT_TRUE(MatchPattern(error, errors::kInvalidCssList)); |
231 | 252 |
232 // Test invalid file element | 253 // Test invalid file element |
233 ListValue* css_files = new ListValue; | 254 ListValue* css_files = new ListValue; |
234 user_script->Set(keys::kCss, css_files); | 255 user_script->Set(keys::kCss, css_files); |
235 css_files->Set(0, Value::CreateIntegerValue(42)); | 256 css_files->Set(0, Value::CreateIntegerValue(42)); |
236 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 257 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 258 &error)); |
237 EXPECT_TRUE(MatchPattern(error, errors::kInvalidCss)); | 259 EXPECT_TRUE(MatchPattern(error, errors::kInvalidCss)); |
238 | 260 |
239 // Test missing and invalid permissions array | 261 // Test missing and invalid permissions array |
240 input_value.reset(valid_value->DeepCopy()); | 262 input_value.reset(valid_value->DeepCopy()); |
241 EXPECT_TRUE(extension.InitFromValue(*input_value, true, false, &error)); | 263 EXPECT_TRUE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 264 &error)); |
242 | 265 |
243 ListValue* permissions = NULL; | 266 ListValue* permissions = NULL; |
244 input_value->GetList(keys::kPermissions, &permissions); | 267 input_value->GetList(keys::kPermissions, &permissions); |
245 ASSERT_FALSE(NULL == permissions); | 268 ASSERT_FALSE(NULL == permissions); |
246 | 269 |
247 permissions = new ListValue; | 270 permissions = new ListValue; |
248 input_value->Set(keys::kPermissions, permissions); | 271 input_value->Set(keys::kPermissions, permissions); |
249 EXPECT_TRUE(extension.InitFromValue(*input_value, true, false, &error)); | 272 EXPECT_TRUE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 273 &error)); |
250 | 274 |
251 input_value->Set(keys::kPermissions, Value::CreateIntegerValue(9)); | 275 input_value->Set(keys::kPermissions, Value::CreateIntegerValue(9)); |
252 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 276 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 277 &error)); |
253 EXPECT_TRUE(MatchPattern(error, errors::kInvalidPermissions)); | 278 EXPECT_TRUE(MatchPattern(error, errors::kInvalidPermissions)); |
254 | 279 |
255 input_value.reset(valid_value->DeepCopy()); | 280 input_value.reset(valid_value->DeepCopy()); |
256 input_value->GetList(keys::kPermissions, &permissions); | 281 input_value->GetList(keys::kPermissions, &permissions); |
257 permissions->Set(0, Value::CreateIntegerValue(24)); | 282 permissions->Set(0, Value::CreateIntegerValue(24)); |
258 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 283 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 284 &error)); |
259 EXPECT_TRUE(MatchPattern(error, errors::kInvalidPermission)); | 285 EXPECT_TRUE(MatchPattern(error, errors::kInvalidPermission)); |
260 | 286 |
261 // We allow unknown API permissions, so this will be valid until we better | 287 // We allow unknown API permissions, so this will be valid until we better |
262 // distinguish between API and host permissions. | 288 // distinguish between API and host permissions. |
263 permissions->Set(0, Value::CreateStringValue("www.google.com")); | 289 permissions->Set(0, Value::CreateStringValue("www.google.com")); |
264 EXPECT_TRUE(extension.InitFromValue(*input_value, true, false, &error)); | 290 EXPECT_TRUE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 291 &error)); |
265 | 292 |
266 // Multiple page actions are not allowed. | 293 // Multiple page actions are not allowed. |
267 input_value.reset(valid_value->DeepCopy()); | 294 input_value.reset(valid_value->DeepCopy()); |
268 DictionaryValue* action = new DictionaryValue; | 295 DictionaryValue* action = new DictionaryValue; |
269 action->SetString(keys::kPageActionId, "MyExtensionActionId"); | 296 action->SetString(keys::kPageActionId, "MyExtensionActionId"); |
270 action->SetString(keys::kName, "MyExtensionActionName"); | 297 action->SetString(keys::kName, "MyExtensionActionName"); |
271 ListValue* action_list = new ListValue; | 298 ListValue* action_list = new ListValue; |
272 action_list->Append(action->DeepCopy()); | 299 action_list->Append(action->DeepCopy()); |
273 action_list->Append(action); | 300 action_list->Append(action); |
274 input_value->Set(keys::kPageActions, action_list); | 301 input_value->Set(keys::kPageActions, action_list); |
275 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 302 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 303 &error)); |
276 EXPECT_STREQ(errors::kInvalidPageActionsListSize, error.c_str()); | 304 EXPECT_STREQ(errors::kInvalidPageActionsListSize, error.c_str()); |
277 | 305 |
278 // Test invalid options page url. | 306 // Test invalid options page url. |
279 input_value.reset(valid_value->DeepCopy()); | 307 input_value.reset(valid_value->DeepCopy()); |
280 input_value->Set(keys::kOptionsPage, Value::CreateNullValue()); | 308 input_value->Set(keys::kOptionsPage, Value::CreateNullValue()); |
281 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 309 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 310 &error)); |
282 EXPECT_TRUE(MatchPattern(error, errors::kInvalidOptionsPage)); | 311 EXPECT_TRUE(MatchPattern(error, errors::kInvalidOptionsPage)); |
283 | 312 |
284 // Test invalid/empty default locale. | 313 // Test invalid/empty default locale. |
285 input_value.reset(valid_value->DeepCopy()); | 314 input_value.reset(valid_value->DeepCopy()); |
286 input_value->Set(keys::kDefaultLocale, Value::CreateIntegerValue(5)); | 315 input_value->Set(keys::kDefaultLocale, Value::CreateIntegerValue(5)); |
287 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 316 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 317 &error)); |
288 EXPECT_TRUE(MatchPattern(error, errors::kInvalidDefaultLocale)); | 318 EXPECT_TRUE(MatchPattern(error, errors::kInvalidDefaultLocale)); |
289 | 319 |
290 input_value->Set(keys::kDefaultLocale, Value::CreateStringValue("")); | 320 input_value->Set(keys::kDefaultLocale, Value::CreateStringValue("")); |
291 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 321 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 322 &error)); |
292 EXPECT_TRUE(MatchPattern(error, errors::kInvalidDefaultLocale)); | 323 EXPECT_TRUE(MatchPattern(error, errors::kInvalidDefaultLocale)); |
293 | 324 |
294 // Test invalid minimum_chrome_version. | 325 // Test invalid minimum_chrome_version. |
295 input_value.reset(valid_value->DeepCopy()); | 326 input_value.reset(valid_value->DeepCopy()); |
296 input_value->Set(keys::kMinimumChromeVersion, Value::CreateIntegerValue(42)); | 327 input_value->Set(keys::kMinimumChromeVersion, Value::CreateIntegerValue(42)); |
297 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 328 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 329 &error)); |
298 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMinimumChromeVersion)); | 330 EXPECT_TRUE(MatchPattern(error, errors::kInvalidMinimumChromeVersion)); |
299 | 331 |
300 #if !defined(OS_MACOSX) | 332 #if !defined(OS_MACOSX) |
301 // TODO(aa): The version isn't stamped into the unit test binary on mac. | 333 // TODO(aa): The version isn't stamped into the unit test binary on mac. |
302 input_value->Set(keys::kMinimumChromeVersion, | 334 input_value->Set(keys::kMinimumChromeVersion, |
303 Value::CreateStringValue("88.8")); | 335 Value::CreateStringValue("88.8")); |
304 EXPECT_FALSE(extension.InitFromValue(*input_value, true, false, &error)); | 336 EXPECT_FALSE(extension.InitFromValue(*input_value, Extension::REQUIRE_KEY, |
| 337 &error)); |
305 EXPECT_TRUE(MatchPattern(error, errors::kChromeVersionTooLow)); | 338 EXPECT_TRUE(MatchPattern(error, errors::kChromeVersionTooLow)); |
306 #endif | 339 #endif |
307 } | 340 } |
308 | 341 |
309 TEST(ExtensionTest, InitFromValueValid) { | 342 TEST(ExtensionTest, InitFromValueValid) { |
310 #if defined(OS_WIN) | 343 #if defined(OS_WIN) |
311 FilePath path(FILE_PATH_LITERAL("C:\\foo")); | 344 FilePath path(FILE_PATH_LITERAL("C:\\foo")); |
312 #elif defined(OS_POSIX) | 345 #elif defined(OS_POSIX) |
313 FilePath path(FILE_PATH_LITERAL("/foo")); | 346 FilePath path(FILE_PATH_LITERAL("/foo")); |
314 #endif | 347 #endif |
315 scoped_refptr<Extension> extension_ptr(new Extension(path, | 348 scoped_refptr<Extension> extension_ptr(new Extension(path, |
316 Extension::INVALID)); | 349 Extension::INVALID)); |
317 Extension& extension = *extension_ptr; | 350 Extension& extension = *extension_ptr; |
318 std::string error; | 351 std::string error; |
319 DictionaryValue input_value; | 352 DictionaryValue input_value; |
320 | 353 |
321 // Test minimal extension | 354 // Test minimal extension |
322 input_value.SetString(keys::kVersion, "1.0.0.0"); | 355 input_value.SetString(keys::kVersion, "1.0.0.0"); |
323 input_value.SetString(keys::kName, "my extension"); | 356 input_value.SetString(keys::kName, "my extension"); |
324 | 357 |
325 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); | 358 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS, |
| 359 &error)); |
326 EXPECT_EQ("", error); | 360 EXPECT_EQ("", error); |
327 EXPECT_TRUE(Extension::IdIsValid(extension.id())); | 361 EXPECT_TRUE(Extension::IdIsValid(extension.id())); |
328 EXPECT_EQ("1.0.0.0", extension.VersionString()); | 362 EXPECT_EQ("1.0.0.0", extension.VersionString()); |
329 EXPECT_EQ("my extension", extension.name()); | 363 EXPECT_EQ("my extension", extension.name()); |
330 EXPECT_EQ(extension.id(), extension.url().host()); | 364 EXPECT_EQ(extension.id(), extension.url().host()); |
331 EXPECT_EQ(path.value(), extension.path().value()); | 365 EXPECT_EQ(path.value(), extension.path().value()); |
332 | 366 |
333 // Test permissions scheme. | 367 // Test permissions scheme. |
334 ListValue* permissions = new ListValue; | 368 ListValue* permissions = new ListValue; |
335 permissions->Set(0, Value::CreateStringValue("file:///C:/foo.txt")); | 369 permissions->Set(0, Value::CreateStringValue("file:///C:/foo.txt")); |
336 input_value.Set(keys::kPermissions, permissions); | 370 input_value.Set(keys::kPermissions, permissions); |
337 | 371 |
338 // We allow unknown API permissions, so this will be valid until we better | 372 // We allow unknown API permissions, so this will be valid until we better |
339 // distinguish between API and host permissions. | 373 // distinguish between API and host permissions. |
340 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); | 374 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS, |
| 375 &error)); |
341 input_value.Remove(keys::kPermissions, NULL); | 376 input_value.Remove(keys::kPermissions, NULL); |
342 | 377 |
343 // Test with an options page. | 378 // Test with an options page. |
344 input_value.SetString(keys::kOptionsPage, "options.html"); | 379 input_value.SetString(keys::kOptionsPage, "options.html"); |
345 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); | 380 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS, |
| 381 &error)); |
346 EXPECT_EQ("", error); | 382 EXPECT_EQ("", error); |
347 EXPECT_EQ("chrome-extension", extension.options_url().scheme()); | 383 EXPECT_EQ("chrome-extension", extension.options_url().scheme()); |
348 EXPECT_EQ("/options.html", extension.options_url().path()); | 384 EXPECT_EQ("/options.html", extension.options_url().path()); |
349 | 385 |
350 // Test that an empty list of page actions does not stop a browser action | 386 // Test that an empty list of page actions does not stop a browser action |
351 // from being loaded. | 387 // from being loaded. |
352 ListValue* empty_list = new ListValue; | 388 ListValue* empty_list = new ListValue; |
353 input_value.Set(keys::kPageActions, empty_list); | 389 input_value.Set(keys::kPageActions, empty_list); |
354 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); | 390 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS, |
| 391 &error)); |
355 EXPECT_EQ("", error); | 392 EXPECT_EQ("", error); |
356 | 393 |
357 #if !defined(OS_MACOSX) | 394 #if !defined(OS_MACOSX) |
358 // TODO(aa): The version isn't stamped into the unit test binary on mac. | 395 // TODO(aa): The version isn't stamped into the unit test binary on mac. |
359 // Test with a minimum_chrome_version. | 396 // Test with a minimum_chrome_version. |
360 input_value.SetString(keys::kMinimumChromeVersion, "1.0"); | 397 input_value.SetString(keys::kMinimumChromeVersion, "1.0"); |
361 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); | 398 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS, |
| 399 &error)); |
362 EXPECT_EQ("", error); | 400 EXPECT_EQ("", error); |
363 // The minimum chrome version is not stored in the Extension object. | 401 // The minimum chrome version is not stored in the Extension object. |
364 #endif | 402 #endif |
365 } | 403 } |
366 | 404 |
367 TEST(ExtensionTest, InitFromValueValidNameInRTL) { | 405 TEST(ExtensionTest, InitFromValueValidNameInRTL) { |
368 #if defined(TOOLKIT_GTK) | 406 #if defined(TOOLKIT_GTK) |
369 GtkTextDirection gtk_dir = gtk_widget_get_default_direction(); | 407 GtkTextDirection gtk_dir = gtk_widget_get_default_direction(); |
370 gtk_widget_set_default_direction(GTK_TEXT_DIR_RTL); | 408 gtk_widget_set_default_direction(GTK_TEXT_DIR_RTL); |
371 #else | 409 #else |
372 std::string locale = l10n_util::GetApplicationLocale(""); | 410 std::string locale = l10n_util::GetApplicationLocale(""); |
373 base::i18n::SetICUDefaultLocale("he"); | 411 base::i18n::SetICUDefaultLocale("he"); |
374 #endif | 412 #endif |
375 | 413 |
376 #if defined(OS_WIN) | 414 #if defined(OS_WIN) |
377 FilePath path(FILE_PATH_LITERAL("C:\\foo")); | 415 FilePath path(FILE_PATH_LITERAL("C:\\foo")); |
378 #elif defined(OS_POSIX) | 416 #elif defined(OS_POSIX) |
379 FilePath path(FILE_PATH_LITERAL("/foo")); | 417 FilePath path(FILE_PATH_LITERAL("/foo")); |
380 #endif | 418 #endif |
381 scoped_refptr<Extension> extension_ptr(new Extension(path, | 419 scoped_refptr<Extension> extension_ptr(new Extension(path, |
382 Extension::INVALID)); | 420 Extension::INVALID)); |
383 Extension& extension = *extension_ptr; | 421 Extension& extension = *extension_ptr; |
384 std::string error; | 422 std::string error; |
385 DictionaryValue input_value; | 423 DictionaryValue input_value; |
386 | 424 |
387 input_value.SetString(keys::kVersion, "1.0.0.0"); | 425 input_value.SetString(keys::kVersion, "1.0.0.0"); |
388 // No strong RTL characters in name. | 426 // No strong RTL characters in name. |
389 std::wstring name(L"Dictionary (by Google)"); | 427 std::wstring name(L"Dictionary (by Google)"); |
390 input_value.SetString(keys::kName, WideToUTF16Hack(name)); | 428 input_value.SetString(keys::kName, WideToUTF16Hack(name)); |
391 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); | 429 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS, |
| 430 &error)); |
392 EXPECT_EQ("", error); | 431 EXPECT_EQ("", error); |
393 std::wstring localized_name(name); | 432 std::wstring localized_name(name); |
394 base::i18n::AdjustStringForLocaleDirection(&localized_name); | 433 base::i18n::AdjustStringForLocaleDirection(&localized_name); |
395 EXPECT_EQ(localized_name, UTF8ToWide(extension.name())); | 434 EXPECT_EQ(localized_name, UTF8ToWide(extension.name())); |
396 | 435 |
397 // Strong RTL characters in name. | 436 // Strong RTL characters in name. |
398 name = L"Dictionary (\x05D1\x05D2"L" Google)"; | 437 name = L"Dictionary (\x05D1\x05D2"L" Google)"; |
399 input_value.SetString(keys::kName, WideToUTF16Hack(name)); | 438 input_value.SetString(keys::kName, WideToUTF16Hack(name)); |
400 EXPECT_TRUE(extension.InitFromValue(input_value, false, false, &error)); | 439 EXPECT_TRUE(extension.InitFromValue(input_value, Extension::NO_FLAGS, |
| 440 &error)); |
401 EXPECT_EQ("", error); | 441 EXPECT_EQ("", error); |
402 localized_name = name; | 442 localized_name = name; |
403 base::i18n::AdjustStringForLocaleDirection(&localized_name); | 443 base::i18n::AdjustStringForLocaleDirection(&localized_name); |
404 EXPECT_EQ(localized_name, UTF8ToWide(extension.name())); | 444 EXPECT_EQ(localized_name, UTF8ToWide(extension.name())); |
405 | 445 |
406 // Reset locale. | 446 // Reset locale. |
407 #if defined(TOOLKIT_GTK) | 447 #if defined(TOOLKIT_GTK) |
408 gtk_widget_set_default_direction(gtk_dir); | 448 gtk_widget_set_default_direction(gtk_dir); |
409 #else | 449 #else |
410 base::i18n::SetICUDefaultLocale(locale); | 450 base::i18n::SetICUDefaultLocale(locale); |
411 #endif | 451 #endif |
412 } | 452 } |
413 | 453 |
414 TEST(ExtensionTest, GetResourceURLAndPath) { | 454 TEST(ExtensionTest, GetResourceURLAndPath) { |
415 #if defined(OS_WIN) | 455 #if defined(OS_WIN) |
416 FilePath path(FILE_PATH_LITERAL("C:\\foo")); | 456 FilePath path(FILE_PATH_LITERAL("C:\\foo")); |
417 #elif defined(OS_POSIX) | 457 #elif defined(OS_POSIX) |
418 FilePath path(FILE_PATH_LITERAL("/foo")); | 458 FilePath path(FILE_PATH_LITERAL("/foo")); |
419 #endif | 459 #endif |
420 DictionaryValue input_value; | 460 DictionaryValue input_value; |
421 input_value.SetString(keys::kVersion, "1.0.0.0"); | 461 input_value.SetString(keys::kVersion, "1.0.0.0"); |
422 input_value.SetString(keys::kName, "my extension"); | 462 input_value.SetString(keys::kName, "my extension"); |
423 scoped_refptr<Extension> extension(Extension::Create( | 463 scoped_refptr<Extension> extension(Extension::Create(path, |
424 path, Extension::INVALID, input_value, false, true, NULL)); | 464 Extension::INVALID, input_value, Extension::STRICT_ERROR_CHECKS, NULL)); |
425 EXPECT_TRUE(extension.get()); | 465 EXPECT_TRUE(extension.get()); |
426 | 466 |
427 EXPECT_EQ(extension->url().spec() + "bar/baz.js", | 467 EXPECT_EQ(extension->url().spec() + "bar/baz.js", |
428 Extension::GetResourceURL(extension->url(), "bar/baz.js").spec()); | 468 Extension::GetResourceURL(extension->url(), "bar/baz.js").spec()); |
429 EXPECT_EQ(extension->url().spec() + "baz.js", | 469 EXPECT_EQ(extension->url().spec() + "baz.js", |
430 Extension::GetResourceURL(extension->url(), | 470 Extension::GetResourceURL(extension->url(), |
431 "bar/../baz.js").spec()); | 471 "bar/../baz.js").spec()); |
432 EXPECT_EQ(extension->url().spec() + "baz.js", | 472 EXPECT_EQ(extension->url().spec() + "baz.js", |
433 Extension::GetResourceURL(extension->url(), "../baz.js").spec()); | 473 Extension::GetResourceURL(extension->url(), "../baz.js").spec()); |
434 } | 474 } |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
673 #else | 713 #else |
674 FilePath path(base::StringPrintf("/extension%" PRIuS, i)); | 714 FilePath path(base::StringPrintf("/extension%" PRIuS, i)); |
675 #endif | 715 #endif |
676 std::string error; | 716 std::string error; |
677 | 717 |
678 input_value.SetString(keys::kVersion, "1.0"); | 718 input_value.SetString(keys::kVersion, "1.0"); |
679 input_value.SetString(keys::kName, "Test"); | 719 input_value.SetString(keys::kName, "Test"); |
680 input_value.SetString(keys::kUpdateURL, url.spec()); | 720 input_value.SetString(keys::kUpdateURL, url.spec()); |
681 | 721 |
682 scoped_refptr<Extension> extension(Extension::Create( | 722 scoped_refptr<Extension> extension(Extension::Create( |
683 path, Extension::INVALID, input_value, false, true, &error)); | 723 path, Extension::INVALID, input_value, Extension::STRICT_ERROR_CHECKS, |
| 724 &error)); |
684 EXPECT_TRUE(extension.get()) << error; | 725 EXPECT_TRUE(extension.get()) << error; |
685 } | 726 } |
686 | 727 |
687 // Test some invalid update urls | 728 // Test some invalid update urls |
688 std::vector<std::string> invalid; | 729 std::vector<std::string> invalid; |
689 invalid.push_back(""); | 730 invalid.push_back(""); |
690 invalid.push_back("test.com"); | 731 invalid.push_back("test.com"); |
691 valid.push_back("http://test.com/update#whatever"); | 732 valid.push_back("http://test.com/update#whatever"); |
692 for (size_t i = 0; i < invalid.size(); i++) { | 733 for (size_t i = 0; i < invalid.size(); i++) { |
693 DictionaryValue input_value; | 734 DictionaryValue input_value; |
694 #if defined(OS_WIN) | 735 #if defined(OS_WIN) |
695 // (Why %Iu below? This is the single file in the whole code base that | 736 // (Why %Iu below? This is the single file in the whole code base that |
696 // might make use of a WidePRIuS; let's not encourage any more.) | 737 // might make use of a WidePRIuS; let's not encourage any more.) |
697 FilePath path(base::StringPrintf(L"c:\\extension%Iu", i)); | 738 FilePath path(base::StringPrintf(L"c:\\extension%Iu", i)); |
698 #else | 739 #else |
699 FilePath path(base::StringPrintf("/extension%" PRIuS, i)); | 740 FilePath path(base::StringPrintf("/extension%" PRIuS, i)); |
700 #endif | 741 #endif |
701 std::string error; | 742 std::string error; |
702 input_value.SetString(keys::kVersion, "1.0"); | 743 input_value.SetString(keys::kVersion, "1.0"); |
703 input_value.SetString(keys::kName, "Test"); | 744 input_value.SetString(keys::kName, "Test"); |
704 input_value.SetString(keys::kUpdateURL, invalid[i]); | 745 input_value.SetString(keys::kUpdateURL, invalid[i]); |
705 | 746 |
706 scoped_refptr<Extension> extension(Extension::Create( | 747 scoped_refptr<Extension> extension(Extension::Create( |
707 path, Extension::INVALID, input_value, false, true, &error)); | 748 path, Extension::INVALID, input_value, Extension::STRICT_ERROR_CHECKS, |
| 749 &error)); |
708 EXPECT_FALSE(extension.get()); | 750 EXPECT_FALSE(extension.get()); |
709 EXPECT_TRUE(MatchPattern(error, errors::kInvalidUpdateURL)); | 751 EXPECT_TRUE(MatchPattern(error, errors::kInvalidUpdateURL)); |
710 } | 752 } |
711 } | 753 } |
712 | 754 |
713 // This test ensures that the mimetype sniffing code stays in sync with the | 755 // This test ensures that the mimetype sniffing code stays in sync with the |
714 // actual crx files that we test other parts of the system with. | 756 // actual crx files that we test other parts of the system with. |
715 TEST(ExtensionTest, MimeTypeSniffing) { | 757 TEST(ExtensionTest, MimeTypeSniffing) { |
716 FilePath path; | 758 FilePath path; |
717 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); | 759 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
(...skipping 27 matching lines...) Expand all Loading... |
745 JSONFileValueSerializer serializer(path); | 787 JSONFileValueSerializer serializer(path); |
746 std::string error; | 788 std::string error; |
747 scoped_ptr<Value> result(serializer.Deserialize(NULL, &error)); | 789 scoped_ptr<Value> result(serializer.Deserialize(NULL, &error)); |
748 if (!result.get()) { | 790 if (!result.get()) { |
749 EXPECT_EQ("", error); | 791 EXPECT_EQ("", error); |
750 return NULL; | 792 return NULL; |
751 } | 793 } |
752 | 794 |
753 scoped_refptr<Extension> extension = Extension::Create( | 795 scoped_refptr<Extension> extension = Extension::Create( |
754 path.DirName(), Extension::INVALID, | 796 path.DirName(), Extension::INVALID, |
755 *static_cast<DictionaryValue*>(result.get()), false, true, &error); | 797 *static_cast<DictionaryValue*>(result.get()), |
| 798 Extension::STRICT_ERROR_CHECKS, &error); |
756 EXPECT_TRUE(extension) << error; | 799 EXPECT_TRUE(extension) << error; |
757 return extension; | 800 return extension; |
758 } | 801 } |
759 | 802 |
760 TEST(ExtensionTest, EffectiveHostPermissions) { | 803 TEST(ExtensionTest, EffectiveHostPermissions) { |
761 scoped_refptr<Extension> extension; | 804 scoped_refptr<Extension> extension; |
762 ExtensionExtent hosts; | 805 ExtensionExtent hosts; |
763 | 806 |
764 extension = LoadManifest("effective_host_permissions", "empty.json"); | 807 extension = LoadManifest("effective_host_permissions", "empty.json"); |
765 EXPECT_EQ(0u, extension->GetEffectiveHostPermissions().patterns().size()); | 808 EXPECT_EQ(0u, extension->GetEffectiveHostPermissions().patterns().size()); |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 FilePath path; | 1015 FilePath path; |
973 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); | 1016 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
974 path = path.AppendASCII("extensions"); | 1017 path = path.AppendASCII("extensions"); |
975 | 1018 |
976 // Initialize the Extension. | 1019 // Initialize the Extension. |
977 std::string errors; | 1020 std::string errors; |
978 DictionaryValue values; | 1021 DictionaryValue values; |
979 values.SetString(keys::kName, "test"); | 1022 values.SetString(keys::kName, "test"); |
980 values.SetString(keys::kVersion, "0.1"); | 1023 values.SetString(keys::kVersion, "0.1"); |
981 scoped_refptr<Extension> extension(Extension::Create( | 1024 scoped_refptr<Extension> extension(Extension::Create( |
982 path, Extension::INVALID, values, false, true, &errors)); | 1025 path, Extension::INVALID, values, Extension::STRICT_ERROR_CHECKS, |
| 1026 &errors)); |
983 ASSERT_TRUE(extension.get()); | 1027 ASSERT_TRUE(extension.get()); |
984 | 1028 |
985 // Create an ExtensionResource pointing at an icon. | 1029 // Create an ExtensionResource pointing at an icon. |
986 FilePath icon_relative_path(FILE_PATH_LITERAL("icon3.png")); | 1030 FilePath icon_relative_path(FILE_PATH_LITERAL("icon3.png")); |
987 ExtensionResource resource(extension->id(), | 1031 ExtensionResource resource(extension->id(), |
988 extension->path(), | 1032 extension->path(), |
989 icon_relative_path); | 1033 icon_relative_path); |
990 | 1034 |
991 // Read in the icon file. | 1035 // Read in the icon file. |
992 FilePath icon_absolute_path = extension->path().Append(icon_relative_path); | 1036 FilePath icon_absolute_path = extension->path().Append(icon_relative_path); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1056 ListValue* permissions = new ListValue(); | 1100 ListValue* permissions = new ListValue(); |
1057 const char* old_unlimited = "unlimited_storage"; | 1101 const char* old_unlimited = "unlimited_storage"; |
1058 EXPECT_STREQ(old_unlimited, Extension::kOldUnlimitedStoragePermission); | 1102 EXPECT_STREQ(old_unlimited, Extension::kOldUnlimitedStoragePermission); |
1059 permissions->Append(Value::CreateStringValue(old_unlimited)); | 1103 permissions->Append(Value::CreateStringValue(old_unlimited)); |
1060 dictionary.Set(extension_manifest_keys::kPermissions, permissions); | 1104 dictionary.Set(extension_manifest_keys::kPermissions, permissions); |
1061 | 1105 |
1062 // Initialize the extension and make sure the permission for unlimited storage | 1106 // Initialize the extension and make sure the permission for unlimited storage |
1063 // is present. | 1107 // is present. |
1064 std::string errors; | 1108 std::string errors; |
1065 scoped_refptr<Extension> extension(Extension::Create( | 1109 scoped_refptr<Extension> extension(Extension::Create( |
1066 extension_path, Extension::INVALID, dictionary, false, true, &errors)); | 1110 extension_path, Extension::INVALID, dictionary, |
| 1111 Extension::STRICT_ERROR_CHECKS, &errors)); |
1067 EXPECT_TRUE(extension.get()); | 1112 EXPECT_TRUE(extension.get()); |
1068 EXPECT_TRUE(extension->HasApiPermission( | 1113 EXPECT_TRUE(extension->HasApiPermission( |
1069 Extension::kUnlimitedStoragePermission)); | 1114 Extension::kUnlimitedStoragePermission)); |
1070 } | 1115 } |
1071 | 1116 |
1072 // This tests the API permissions with an empty manifest (one that just | 1117 // This tests the API permissions with an empty manifest (one that just |
1073 // specifies a name and a version and nothing else). | 1118 // specifies a name and a version and nothing else). |
1074 TEST(ExtensionTest, ApiPermissions) { | 1119 TEST(ExtensionTest, ApiPermissions) { |
1075 const struct { | 1120 const struct { |
1076 const char* permission_name; | 1121 const char* permission_name; |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1378 EXPECT_TRUE(Extension::GenerateId("test", &result)); | 1423 EXPECT_TRUE(Extension::GenerateId("test", &result)); |
1379 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf"); | 1424 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf"); |
1380 | 1425 |
1381 EXPECT_TRUE(Extension::GenerateId("_", &result)); | 1426 EXPECT_TRUE(Extension::GenerateId("_", &result)); |
1382 EXPECT_EQ(result, "ncocknphbhhlhkikpnnlmbcnbgdempcd"); | 1427 EXPECT_EQ(result, "ncocknphbhhlhkikpnnlmbcnbgdempcd"); |
1383 | 1428 |
1384 EXPECT_TRUE(Extension::GenerateId( | 1429 EXPECT_TRUE(Extension::GenerateId( |
1385 "this_string_is_longer_than_a_single_sha256_hash_digest", &result)); | 1430 "this_string_is_longer_than_a_single_sha256_hash_digest", &result)); |
1386 EXPECT_EQ(result, "jimneklojkjdibfkgiiophfhjhbdgcfi"); | 1431 EXPECT_EQ(result, "jimneklojkjdibfkgiiophfhjhbdgcfi"); |
1387 } | 1432 } |
OLD | NEW |