| 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 |