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 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 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 default_icon.empty()) { | 833 default_icon.empty()) { |
837 *error = ASCIIToUTF16(errors::kInvalidPageActionIconPath); | 834 *error = ASCIIToUTF16(errors::kInvalidPageActionIconPath); |
838 return NULL; | 835 return NULL; |
839 } | 836 } |
840 result->set_icon_path(default_icon); | 837 result->set_icon_path(default_icon); |
841 } | 838 } |
842 | 839 |
843 return result.release(); | 840 return result.release(); |
844 } | 841 } |
845 | 842 |
846 ExtensionSidebarDefaults* Extension::LoadExtensionSidebarDefaults( | |
847 const DictionaryValue* extension_sidebar, string16* error) { | |
848 scoped_ptr<ExtensionSidebarDefaults> result(new ExtensionSidebarDefaults()); | |
849 | |
850 std::string default_icon; | |
851 // Read sidebar's |default_icon| (optional). | |
852 if (extension_sidebar->HasKey(keys::kSidebarDefaultIcon)) { | |
853 if (!extension_sidebar->GetString(keys::kSidebarDefaultIcon, | |
854 &default_icon) || | |
855 default_icon.empty()) { | |
856 *error = ASCIIToUTF16(errors::kInvalidSidebarDefaultIconPath); | |
857 return NULL; | |
858 } | |
859 result->set_default_icon_path(default_icon); | |
860 } | |
861 | |
862 // Read sidebar's |default_title| (optional). | |
863 string16 default_title; | |
864 if (extension_sidebar->HasKey(keys::kSidebarDefaultTitle)) { | |
865 if (!extension_sidebar->GetString(keys::kSidebarDefaultTitle, | |
866 &default_title)) { | |
867 *error = ASCIIToUTF16(errors::kInvalidSidebarDefaultTitle); | |
868 return NULL; | |
869 } | |
870 } | |
871 result->set_default_title(default_title); | |
872 | |
873 // Read sidebar's |default_page| (optional). | |
874 // TODO(rdevlin.cronin): Continue removing std::string errors and replace | |
875 // with string16 | |
876 std::string default_page; | |
877 std::string utf8_error; | |
878 if (extension_sidebar->HasKey(keys::kSidebarDefaultPage)) { | |
879 if (!extension_sidebar->GetString(keys::kSidebarDefaultPage, | |
880 &default_page) || | |
881 default_page.empty()) { | |
882 *error = ASCIIToUTF16(errors::kInvalidSidebarDefaultPage); | |
883 return NULL; | |
884 } | |
885 GURL url = extension_sidebar_utils::ResolveRelativePath( | |
886 default_page, this, &utf8_error); | |
887 *error = UTF8ToUTF16(utf8_error); | |
888 if (!url.is_valid()) | |
889 return NULL; | |
890 result->set_default_page(url); | |
891 } | |
892 | |
893 return result.release(); | |
894 } | |
895 | |
896 bool Extension::LoadExtent(const extensions::Manifest* manifest, | 843 bool Extension::LoadExtent(const extensions::Manifest* manifest, |
897 const char* key, | 844 const char* key, |
898 URLPatternSet* extent, | 845 URLPatternSet* extent, |
899 const char* list_error, | 846 const char* list_error, |
900 const char* value_error, | 847 const char* value_error, |
901 string16* error) { | 848 string16* error) { |
902 Value* temp = NULL; | 849 Value* temp = NULL; |
903 if (!manifest->Get(key, &temp)) | 850 if (!manifest->Get(key, &temp)) |
904 return true; | 851 return true; |
905 | 852 |
(...skipping 1286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2192 // Initialize devtools page url (optional). | 2139 // Initialize devtools page url (optional). |
2193 if (manifest->HasKey(keys::kDevToolsPage)) { | 2140 if (manifest->HasKey(keys::kDevToolsPage)) { |
2194 std::string devtools_str; | 2141 std::string devtools_str; |
2195 if (!manifest->GetString(keys::kDevToolsPage, &devtools_str)) { | 2142 if (!manifest->GetString(keys::kDevToolsPage, &devtools_str)) { |
2196 *error = ASCIIToUTF16(errors::kInvalidDevToolsPage); | 2143 *error = ASCIIToUTF16(errors::kInvalidDevToolsPage); |
2197 return false; | 2144 return false; |
2198 } | 2145 } |
2199 devtools_url_ = GetResourceURL(devtools_str); | 2146 devtools_url_ = GetResourceURL(devtools_str); |
2200 } | 2147 } |
2201 | 2148 |
2202 // Initialize sidebar action (optional). | |
2203 if (manifest->HasKey(keys::kSidebar)) { | |
2204 DictionaryValue* sidebar_value = NULL; | |
2205 if (!manifest->GetDictionary(keys::kSidebar, &sidebar_value)) { | |
2206 *error = ASCIIToUTF16(errors::kInvalidSidebar); | |
2207 return false; | |
2208 } | |
2209 if (!api_permissions.count(ExtensionAPIPermission::kExperimental)) { | |
2210 *error = ASCIIToUTF16(errors::kSidebarExperimental); | |
2211 return false; | |
2212 } | |
2213 sidebar_defaults_.reset(LoadExtensionSidebarDefaults(sidebar_value, error)); | |
2214 if (!sidebar_defaults_.get()) | |
2215 return false; // Failed to parse sidebar definition. | |
2216 } | |
2217 | |
2218 // Initialize text-to-speech voices (optional). | 2149 // Initialize text-to-speech voices (optional). |
2219 if (manifest->HasKey(keys::kTtsEngine)) { | 2150 if (manifest->HasKey(keys::kTtsEngine)) { |
2220 DictionaryValue* tts_dict = NULL; | 2151 DictionaryValue* tts_dict = NULL; |
2221 if (!manifest->GetDictionary(keys::kTtsEngine, &tts_dict)) { | 2152 if (!manifest->GetDictionary(keys::kTtsEngine, &tts_dict)) { |
2222 *error = ASCIIToUTF16(errors::kInvalidTts); | 2153 *error = ASCIIToUTF16(errors::kInvalidTts); |
2223 return false; | 2154 return false; |
2224 } | 2155 } |
2225 | 2156 |
2226 if (tts_dict->HasKey(keys::kTtsVoices)) { | 2157 if (tts_dict->HasKey(keys::kTtsVoices)) { |
2227 ListValue* tts_voices = NULL; | 2158 ListValue* tts_voices = NULL; |
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2975 already_disabled(false), | 2906 already_disabled(false), |
2976 extension(extension) {} | 2907 extension(extension) {} |
2977 | 2908 |
2978 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( | 2909 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( |
2979 const Extension* extension, | 2910 const Extension* extension, |
2980 const ExtensionPermissionSet* permissions, | 2911 const ExtensionPermissionSet* permissions, |
2981 Reason reason) | 2912 Reason reason) |
2982 : reason(reason), | 2913 : reason(reason), |
2983 extension(extension), | 2914 extension(extension), |
2984 permissions(permissions) {} | 2915 permissions(permissions) {} |
OLD | NEW |