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