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 2828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2839 } | 2839 } |
| 2840 } | 2840 } |
| 2841 | 2841 |
| 2842 if (permission->id() == ExtensionAPIPermission::kExperimental) { | 2842 if (permission->id() == ExtensionAPIPermission::kExperimental) { |
| 2843 if (!CanSpecifyExperimentalPermission()) { | 2843 if (!CanSpecifyExperimentalPermission()) { |
| 2844 *error = errors::kExperimentalFlagRequired; | 2844 *error = errors::kExperimentalFlagRequired; |
| 2845 return false; | 2845 return false; |
| 2846 } | 2846 } |
| 2847 } | 2847 } |
| 2848 | 2848 |
| 2849 if (is_hosted_app()) { | 2849 if (location_ != Extension::COMPONENT && |
| 2850 if (!CanSpecifyPermissionForHostedApp(permission)) { | 2850 !CanSpecifyPermissionForType(permission)) { |
| 2851 // Some old versions of Chrome did not return errors here and we ended up | 2851 // Some old versions of Chrome did not return errors here and we ended up |
| 2852 // with extensions in the store containing bad data: crbug.com/101993. | 2852 // with extensions in the store containing bad data: crbug.com/101993. |
| 2853 // | 2853 // |
| 2854 // TODO(aa): Consider just being a lot looser when loading and installing | 2854 // TODO(aa): Consider just being a lot looser when loading and installing |
| 2855 // extensions. We can be strict when packing and in development mode. Then | 2855 // extensions. We can be strict when packing and in development mode. Then |
| 2856 // we won't have to maintain all these tricky backward compat issues: | 2856 // we won't have to maintain all these tricky backward compat issues: |
| 2857 // crbug.com/102328. | 2857 // crbug.com/102328. |
| 2858 if (creation_flags_ & STRICT_ERROR_CHECKS) { | 2858 if (creation_flags_ & STRICT_ERROR_CHECKS) { |
|
Aaron Boodman
2011/11/22 09:40:32
I don't think we want to be lose with the errors f
Aaron Boodman
2011/11/22 09:41:17
sigh, *loose*
jstritar
2011/11/22 15:58:29
Won't we run into this again?
http://b/issue?id=5
| |
| 2859 *error = ExtensionErrorUtils::FormatErrorMessage( | 2859 *error = ExtensionErrorUtils::FormatErrorMessage( |
| 2860 errors::kPermissionNotAllowed, permission->name()); | 2860 errors::kPermissionNotAllowed, permission->name()); |
| 2861 } | |
| 2862 return false; | |
| 2863 } | 2861 } |
| 2862 return false; | |
| 2864 } | 2863 } |
| 2865 | 2864 |
| 2866 return true; | 2865 return true; |
| 2867 } | 2866 } |
| 2868 | 2867 |
| 2869 bool Extension::CanSpecifyComponentOnlyPermission() const { | 2868 bool Extension::CanSpecifyComponentOnlyPermission() const { |
| 2870 // Only COMPONENT extensions can use private APIs. | 2869 // Only COMPONENT extensions can use private APIs. |
| 2871 // TODO(asargent) - We want a more general purpose mechanism for this, | 2870 // TODO(asargent) - We want a more general purpose mechanism for this, |
| 2872 // and better error messages. (http://crbug.com/54013) | 2871 // and better error messages. (http://crbug.com/54013) |
| 2873 if (location_ == Extension::COMPONENT) | 2872 if (location_ == Extension::COMPONENT) |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 2894 | 2893 |
| 2895 // We rely on the webstore to check access to experimental. This way we can | 2894 // We rely on the webstore to check access to experimental. This way we can |
| 2896 // whitelist extensions to have access to experimental in just the store, and | 2895 // whitelist extensions to have access to experimental in just the store, and |
| 2897 // not have to push a new version of the client. | 2896 // not have to push a new version of the client. |
| 2898 if (from_webstore()) | 2897 if (from_webstore()) |
| 2899 return true; | 2898 return true; |
| 2900 | 2899 |
| 2901 return false; | 2900 return false; |
| 2902 } | 2901 } |
| 2903 | 2902 |
| 2904 bool Extension::CanSpecifyPermissionForHostedApp( | 2903 bool Extension::CanSpecifyPermissionForType( |
| 2905 const ExtensionAPIPermission* permission) const { | 2904 const ExtensionAPIPermission* permission) const { |
| 2906 if (location_ == Extension::COMPONENT) | 2905 switch (GetType()) { |
|
Aaron Boodman
2011/11/22 09:40:32
This is so short, you could just fold it into CanS
jstritar
2011/11/22 15:58:29
Done.
| |
| 2907 return true; | 2906 case TYPE_USER_SCRIPT: // Pass through. |
| 2908 | 2907 case TYPE_EXTENSION: |
| 2909 if (permission->is_hosted_app()) | 2908 return permission->supports_extensions(); |
| 2910 return true; | 2909 case TYPE_HOSTED_APP: |
| 2911 | 2910 return permission->supports_hosted_apps(); |
| 2912 return false; | 2911 case TYPE_PACKAGED_APP: |
| 2912 return permission->supports_packaged_apps(); | |
| 2913 case TYPE_PLATFORM_APP: | |
| 2914 return permission->supports_platform_apps(); | |
| 2915 default: | |
| 2916 return false; | |
| 2917 } | |
| 2913 } | 2918 } |
| 2914 | 2919 |
| 2915 bool Extension::CanExecuteScriptEverywhere() const { | 2920 bool Extension::CanExecuteScriptEverywhere() const { |
| 2916 if (location() == Extension::COMPONENT | 2921 if (location() == Extension::COMPONENT |
| 2917 #ifndef NDEBUG | 2922 #ifndef NDEBUG |
| 2918 || CommandLine::ForCurrentProcess()->HasSwitch( | 2923 || CommandLine::ForCurrentProcess()->HasSwitch( |
| 2919 switches::kExposePrivateExtensionApi) | 2924 switches::kExposePrivateExtensionApi) |
| 2920 #endif | 2925 #endif |
| 2921 ) | 2926 ) |
| 2922 return true; | 2927 return true; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3052 already_disabled(false), | 3057 already_disabled(false), |
| 3053 extension(extension) {} | 3058 extension(extension) {} |
| 3054 | 3059 |
| 3055 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( | 3060 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( |
| 3056 const Extension* extension, | 3061 const Extension* extension, |
| 3057 const ExtensionPermissionSet* permissions, | 3062 const ExtensionPermissionSet* permissions, |
| 3058 Reason reason) | 3063 Reason reason) |
| 3059 : reason(reason), | 3064 : reason(reason), |
| 3060 extension(extension), | 3065 extension(extension), |
| 3061 permissions(permissions) {} | 3066 permissions(permissions) {} |
| OLD | NEW |