OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "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 14 matching lines...) Expand all Loading... |
25 #include "crypto/sha2.h" | 25 #include "crypto/sha2.h" |
26 #include "chrome/common/chrome_constants.h" | 26 #include "chrome/common/chrome_constants.h" |
27 #include "chrome/common/chrome_switches.h" | 27 #include "chrome/common/chrome_switches.h" |
28 #include "chrome/common/chrome_version_info.h" | 28 #include "chrome/common/chrome_version_info.h" |
29 #include "chrome/common/extensions/csp_validator.h" | 29 #include "chrome/common/extensions/csp_validator.h" |
30 #include "chrome/common/extensions/extension_action.h" | 30 #include "chrome/common/extensions/extension_action.h" |
31 #include "chrome/common/extensions/extension_constants.h" | 31 #include "chrome/common/extensions/extension_constants.h" |
32 #include "chrome/common/extensions/extension_error_utils.h" | 32 #include "chrome/common/extensions/extension_error_utils.h" |
33 #include "chrome/common/extensions/extension_l10n_util.h" | 33 #include "chrome/common/extensions/extension_l10n_util.h" |
34 #include "chrome/common/extensions/extension_resource.h" | 34 #include "chrome/common/extensions/extension_resource.h" |
35 #include "chrome/common/extensions/extension_sidebar_defaults.h" | |
36 #include "chrome/common/extensions/extension_sidebar_utils.h" | |
37 #include "chrome/common/extensions/file_browser_handler.h" | 35 #include "chrome/common/extensions/file_browser_handler.h" |
38 #include "chrome/common/extensions/manifest.h" | 36 #include "chrome/common/extensions/manifest.h" |
39 #include "chrome/common/extensions/user_script.h" | 37 #include "chrome/common/extensions/user_script.h" |
40 #include "chrome/common/url_constants.h" | 38 #include "chrome/common/url_constants.h" |
41 #include "googleurl/src/url_util.h" | 39 #include "googleurl/src/url_util.h" |
42 #include "grit/chromium_strings.h" | 40 #include "grit/chromium_strings.h" |
43 #include "grit/generated_resources.h" | 41 #include "grit/generated_resources.h" |
44 #include "grit/theme_resources.h" | 42 #include "grit/theme_resources.h" |
45 #include "net/base/registry_controlled_domain.h" | 43 #include "net/base/registry_controlled_domain.h" |
46 #include "third_party/skia/include/core/SkBitmap.h" | 44 #include "third_party/skia/include/core/SkBitmap.h" |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 const int Extension::kIconSizes[] = { | 193 const int Extension::kIconSizes[] = { |
196 EXTENSION_ICON_LARGE, | 194 EXTENSION_ICON_LARGE, |
197 EXTENSION_ICON_MEDIUM, | 195 EXTENSION_ICON_MEDIUM, |
198 EXTENSION_ICON_SMALL, | 196 EXTENSION_ICON_SMALL, |
199 EXTENSION_ICON_SMALLISH, | 197 EXTENSION_ICON_SMALLISH, |
200 EXTENSION_ICON_BITTY | 198 EXTENSION_ICON_BITTY |
201 }; | 199 }; |
202 | 200 |
203 const int Extension::kPageActionIconMaxSize = 19; | 201 const int Extension::kPageActionIconMaxSize = 19; |
204 const int Extension::kBrowserActionIconMaxSize = 19; | 202 const int Extension::kBrowserActionIconMaxSize = 19; |
205 const int Extension::kSidebarIconMaxSize = 16; | |
206 | 203 |
207 const int Extension::kValidWebExtentSchemes = | 204 const int Extension::kValidWebExtentSchemes = |
208 URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS; | 205 URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS; |
209 | 206 |
210 const int Extension::kValidHostPermissionSchemes = | 207 const int Extension::kValidHostPermissionSchemes = |
211 UserScript::kValidUserScriptSchemes | URLPattern::SCHEME_CHROMEUI; | 208 UserScript::kValidUserScriptSchemes | URLPattern::SCHEME_CHROMEUI; |
212 | 209 |
213 Extension::InputComponentInfo::InputComponentInfo() | 210 Extension::InputComponentInfo::InputComponentInfo() |
214 : type(INPUT_COMPONENT_TYPE_NONE), | 211 : type(INPUT_COMPONENT_TYPE_NONE), |
215 shortcut_alt(false), | 212 shortcut_alt(false), |
(...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
855 default_icon.empty()) { | 852 default_icon.empty()) { |
856 *error = ASCIIToUTF16(errors::kInvalidPageActionIconPath); | 853 *error = ASCIIToUTF16(errors::kInvalidPageActionIconPath); |
857 return NULL; | 854 return NULL; |
858 } | 855 } |
859 result->set_icon_path(default_icon); | 856 result->set_icon_path(default_icon); |
860 } | 857 } |
861 | 858 |
862 return result.release(); | 859 return result.release(); |
863 } | 860 } |
864 | 861 |
865 ExtensionSidebarDefaults* Extension::LoadExtensionSidebarDefaults( | |
866 const DictionaryValue* extension_sidebar, string16* error) { | |
867 scoped_ptr<ExtensionSidebarDefaults> result(new ExtensionSidebarDefaults()); | |
868 | |
869 std::string default_icon; | |
870 // Read sidebar's |default_icon| (optional). | |
871 if (extension_sidebar->HasKey(keys::kSidebarDefaultIcon)) { | |
872 if (!extension_sidebar->GetString(keys::kSidebarDefaultIcon, | |
873 &default_icon) || | |
874 default_icon.empty()) { | |
875 *error = ASCIIToUTF16(errors::kInvalidSidebarDefaultIconPath); | |
876 return NULL; | |
877 } | |
878 result->set_default_icon_path(default_icon); | |
879 } | |
880 | |
881 // Read sidebar's |default_title| (optional). | |
882 string16 default_title; | |
883 if (extension_sidebar->HasKey(keys::kSidebarDefaultTitle)) { | |
884 if (!extension_sidebar->GetString(keys::kSidebarDefaultTitle, | |
885 &default_title)) { | |
886 *error = ASCIIToUTF16(errors::kInvalidSidebarDefaultTitle); | |
887 return NULL; | |
888 } | |
889 } | |
890 result->set_default_title(default_title); | |
891 | |
892 // Read sidebar's |default_page| (optional). | |
893 // TODO(rdevlin.cronin): Continue removing std::string errors and replace | |
894 // with string16 | |
895 std::string default_page; | |
896 std::string utf8_error; | |
897 if (extension_sidebar->HasKey(keys::kSidebarDefaultPage)) { | |
898 if (!extension_sidebar->GetString(keys::kSidebarDefaultPage, | |
899 &default_page) || | |
900 default_page.empty()) { | |
901 *error = ASCIIToUTF16(errors::kInvalidSidebarDefaultPage); | |
902 return NULL; | |
903 } | |
904 GURL url = extension_sidebar_utils::ResolveRelativePath( | |
905 default_page, this, &utf8_error); | |
906 *error = UTF8ToUTF16(utf8_error); | |
907 if (!url.is_valid()) | |
908 return NULL; | |
909 result->set_default_page(url); | |
910 } | |
911 | |
912 return result.release(); | |
913 } | |
914 | |
915 bool Extension::LoadExtent(const extensions::Manifest* manifest, | 862 bool Extension::LoadExtent(const extensions::Manifest* manifest, |
916 const char* key, | 863 const char* key, |
917 URLPatternSet* extent, | 864 URLPatternSet* extent, |
918 const char* list_error, | 865 const char* list_error, |
919 const char* value_error, | 866 const char* value_error, |
920 string16* error) { | 867 string16* error) { |
921 Value* temp = NULL; | 868 Value* temp = NULL; |
922 if (!manifest->Get(key, &temp)) | 869 if (!manifest->Get(key, &temp)) |
923 return true; | 870 return true; |
924 | 871 |
(...skipping 1322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2247 // Initialize devtools page url (optional). | 2194 // Initialize devtools page url (optional). |
2248 if (manifest->HasKey(keys::kDevToolsPage)) { | 2195 if (manifest->HasKey(keys::kDevToolsPage)) { |
2249 std::string devtools_str; | 2196 std::string devtools_str; |
2250 if (!manifest->GetString(keys::kDevToolsPage, &devtools_str)) { | 2197 if (!manifest->GetString(keys::kDevToolsPage, &devtools_str)) { |
2251 *error = ASCIIToUTF16(errors::kInvalidDevToolsPage); | 2198 *error = ASCIIToUTF16(errors::kInvalidDevToolsPage); |
2252 return false; | 2199 return false; |
2253 } | 2200 } |
2254 devtools_url_ = GetResourceURL(devtools_str); | 2201 devtools_url_ = GetResourceURL(devtools_str); |
2255 } | 2202 } |
2256 | 2203 |
2257 // Initialize sidebar action (optional). | |
2258 if (manifest->HasKey(keys::kSidebar)) { | |
2259 DictionaryValue* sidebar_value = NULL; | |
2260 if (!manifest->GetDictionary(keys::kSidebar, &sidebar_value)) { | |
2261 *error = ASCIIToUTF16(errors::kInvalidSidebar); | |
2262 return false; | |
2263 } | |
2264 if (!api_permissions.count(ExtensionAPIPermission::kExperimental)) { | |
2265 *error = ASCIIToUTF16(errors::kSidebarExperimental); | |
2266 return false; | |
2267 } | |
2268 sidebar_defaults_.reset(LoadExtensionSidebarDefaults(sidebar_value, error)); | |
2269 if (!sidebar_defaults_.get()) | |
2270 return false; // Failed to parse sidebar definition. | |
2271 } | |
2272 | |
2273 // Initialize text-to-speech voices (optional). | 2204 // Initialize text-to-speech voices (optional). |
2274 if (manifest->HasKey(keys::kTtsEngine)) { | 2205 if (manifest->HasKey(keys::kTtsEngine)) { |
2275 DictionaryValue* tts_dict = NULL; | 2206 DictionaryValue* tts_dict = NULL; |
2276 if (!manifest->GetDictionary(keys::kTtsEngine, &tts_dict)) { | 2207 if (!manifest->GetDictionary(keys::kTtsEngine, &tts_dict)) { |
2277 *error = ASCIIToUTF16(errors::kInvalidTts); | 2208 *error = ASCIIToUTF16(errors::kInvalidTts); |
2278 return false; | 2209 return false; |
2279 } | 2210 } |
2280 | 2211 |
2281 if (tts_dict->HasKey(keys::kTtsVoices)) { | 2212 if (tts_dict->HasKey(keys::kTtsVoices)) { |
2282 ListValue* tts_voices = NULL; | 2213 ListValue* tts_voices = NULL; |
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3030 already_disabled(false), | 2961 already_disabled(false), |
3031 extension(extension) {} | 2962 extension(extension) {} |
3032 | 2963 |
3033 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( | 2964 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( |
3034 const Extension* extension, | 2965 const Extension* extension, |
3035 const ExtensionPermissionSet* permissions, | 2966 const ExtensionPermissionSet* permissions, |
3036 Reason reason) | 2967 Reason reason) |
3037 : reason(reason), | 2968 : reason(reason), |
3038 extension(extension), | 2969 extension(extension), |
3039 permissions(permissions) {} | 2970 permissions(permissions) {} |
OLD | NEW |