Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 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 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/base64.h" | 9 #include "base/base64.h" |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 1228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1239 | 1239 |
| 1240 for (DictionaryValue::key_iterator key = manifest->begin_keys(); | 1240 for (DictionaryValue::key_iterator key = manifest->begin_keys(); |
| 1241 key != manifest->end_keys(); ++key) { | 1241 key != manifest->end_keys(); ++key) { |
| 1242 if (!IsBaseCrxKey(*key) && | 1242 if (!IsBaseCrxKey(*key) && |
| 1243 *key != keys::kApp && | 1243 *key != keys::kApp && |
| 1244 *key != keys::kPermissions && | 1244 *key != keys::kPermissions && |
| 1245 *key != keys::kOptionalPermissions && | 1245 *key != keys::kOptionalPermissions && |
| 1246 *key != keys::kOptionsPage && | 1246 *key != keys::kOptionsPage && |
| 1247 *key != keys::kBackground && | 1247 *key != keys::kBackground && |
| 1248 *key != keys::kOfflineEnabled && | 1248 *key != keys::kOfflineEnabled && |
| 1249 *key != keys::kMinimumChromeVersion) { | 1249 *key != keys::kMinimumChromeVersion && |
| 1250 *key != keys::kRequirements) { | |
| 1250 *error = ExtensionErrorUtils::FormatErrorMessage( | 1251 *error = ExtensionErrorUtils::FormatErrorMessage( |
| 1251 errors::kHostedAppsCannotIncludeExtensionFeatures, *key); | 1252 errors::kHostedAppsCannotIncludeExtensionFeatures, *key); |
| 1252 return false; | 1253 return false; |
| 1253 } | 1254 } |
| 1254 } | 1255 } |
| 1255 | 1256 |
| 1256 return true; | 1257 return true; |
| 1257 } | 1258 } |
| 1258 | 1259 |
| 1259 // static | 1260 // static |
| (...skipping 1108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2368 } | 2369 } |
| 2369 | 2370 |
| 2370 // Initialize offline-enabled status. Defaults to false. | 2371 // Initialize offline-enabled status. Defaults to false. |
| 2371 if (source.HasKey(keys::kOfflineEnabled)) { | 2372 if (source.HasKey(keys::kOfflineEnabled)) { |
| 2372 if (!source.GetBoolean(keys::kOfflineEnabled, &offline_enabled_)) { | 2373 if (!source.GetBoolean(keys::kOfflineEnabled, &offline_enabled_)) { |
| 2373 *error = errors::kInvalidOfflineEnabled; | 2374 *error = errors::kInvalidOfflineEnabled; |
| 2374 return false; | 2375 return false; |
| 2375 } | 2376 } |
| 2376 } | 2377 } |
| 2377 | 2378 |
| 2379 // Initialize requirements (optional). Not actually persisted (they're only | |
| 2380 // used by the store), but still validated. | |
| 2381 if (source.HasKey(keys::kRequirements)) { | |
| 2382 DictionaryValue* requirements_value = NULL; | |
| 2383 if (!source.GetDictionary(keys::kRequirements, &requirements_value)) { | |
| 2384 *error = errors::kInvalidRequirements; | |
| 2385 return false; | |
| 2386 } | |
| 2387 | |
| 2388 for (DictionaryValue::key_iterator it = requirements_value->begin_keys(); | |
| 2389 it != requirements_value->end_keys(); ++it) { | |
| 2390 DictionaryValue* requirement_value; | |
| 2391 if (!requirements_value->GetDictionaryWithoutPathExpansion( | |
|
Yoyo Zhou
2011/10/07 21:05:33
Any particular reason to use the WithoutPathExpans
Mihai Parparita -not on Chrome
2011/10/07 21:15:32
The iterator docs say that should be used (http://
Yoyo Zhou
2011/10/07 21:19:11
Ok, I didn't realize we would have such keys (from
| |
| 2392 *it, &requirement_value)) { | |
| 2393 *error = ExtensionErrorUtils::FormatErrorMessage( | |
| 2394 errors::kInvalidRequirement, *it); | |
| 2395 return false; | |
| 2396 } | |
| 2397 } | |
| 2398 } | |
| 2399 | |
| 2378 if (HasMultipleUISurfaces()) { | 2400 if (HasMultipleUISurfaces()) { |
| 2379 *error = errors::kOneUISurfaceOnly; | 2401 *error = errors::kOneUISurfaceOnly; |
| 2380 return false; | 2402 return false; |
| 2381 } | 2403 } |
| 2382 | 2404 |
| 2383 runtime_data_.SetActivePermissions(new ExtensionPermissionSet( | 2405 runtime_data_.SetActivePermissions(new ExtensionPermissionSet( |
| 2384 this, api_permissions, host_permissions)); | 2406 this, api_permissions, host_permissions)); |
| 2385 required_permission_set_ = new ExtensionPermissionSet( | 2407 required_permission_set_ = new ExtensionPermissionSet( |
| 2386 this, api_permissions, host_permissions); | 2408 this, api_permissions, host_permissions); |
| 2387 optional_permission_set_ = new ExtensionPermissionSet( | 2409 optional_permission_set_ = new ExtensionPermissionSet( |
| (...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2973 already_disabled(false), | 2995 already_disabled(false), |
| 2974 extension(extension) {} | 2996 extension(extension) {} |
| 2975 | 2997 |
| 2976 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( | 2998 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( |
| 2977 const Extension* extension, | 2999 const Extension* extension, |
| 2978 const ExtensionPermissionSet* permissions, | 3000 const ExtensionPermissionSet* permissions, |
| 2979 Reason reason) | 3001 Reason reason) |
| 2980 : reason(reason), | 3002 : reason(reason), |
| 2981 extension(extension), | 3003 extension(extension), |
| 2982 permissions(permissions) {} | 3004 permissions(permissions) {} |
| OLD | NEW |