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 <ostream> | 7 #include <ostream> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 UserScript::kValidUserScriptSchemes | URLPattern::SCHEME_CHROMEUI; | 336 UserScript::kValidUserScriptSchemes | URLPattern::SCHEME_CHROMEUI; |
337 | 337 |
338 Extension::Requirements::Requirements() | 338 Extension::Requirements::Requirements() |
339 : webgl(false), | 339 : webgl(false), |
340 css3d(false), | 340 css3d(false), |
341 npapi(false) { | 341 npapi(false) { |
342 } | 342 } |
343 | 343 |
344 Extension::Requirements::~Requirements() {} | 344 Extension::Requirements::~Requirements() {} |
345 | 345 |
346 Extension::InputComponentInfo::InputComponentInfo() | |
347 : type(INPUT_COMPONENT_TYPE_NONE), | |
348 shortcut_alt(false), | |
349 shortcut_ctrl(false), | |
350 shortcut_shift(false) { | |
351 } | |
352 | |
353 Extension::InputComponentInfo::~InputComponentInfo() {} | |
354 | |
355 Extension::TtsVoice::TtsVoice() {} | 346 Extension::TtsVoice::TtsVoice() {} |
356 Extension::TtsVoice::~TtsVoice() {} | 347 Extension::TtsVoice::~TtsVoice() {} |
357 | 348 |
358 Extension::OAuth2Info::OAuth2Info() {} | 349 Extension::OAuth2Info::OAuth2Info() {} |
359 Extension::OAuth2Info::~OAuth2Info() {} | 350 Extension::OAuth2Info::~OAuth2Info() {} |
360 | 351 |
361 Extension::ActionInfo::ActionInfo() {} | 352 Extension::ActionInfo::ActionInfo() {} |
362 Extension::ActionInfo::~ActionInfo() {} | 353 Extension::ActionInfo::~ActionInfo() {} |
363 | 354 |
364 Extension::FileHandlerInfo::FileHandlerInfo() {} | 355 Extension::FileHandlerInfo::FileHandlerInfo() {} |
(...skipping 2419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2784 } | 2775 } |
2785 | 2776 |
2786 bool Extension::LoadExtensionFeatures(APIPermissionSet* api_permissions, | 2777 bool Extension::LoadExtensionFeatures(APIPermissionSet* api_permissions, |
2787 string16* error) { | 2778 string16* error) { |
2788 if (manifest_->HasKey(keys::kConvertedFromUserScript)) | 2779 if (manifest_->HasKey(keys::kConvertedFromUserScript)) |
2789 manifest_->GetBoolean(keys::kConvertedFromUserScript, | 2780 manifest_->GetBoolean(keys::kConvertedFromUserScript, |
2790 &converted_from_user_script_); | 2781 &converted_from_user_script_); |
2791 | 2782 |
2792 if (!LoadManifestHandlerFeatures(error) || | 2783 if (!LoadManifestHandlerFeatures(error) || |
2793 !LoadDevToolsPage(error) || | 2784 !LoadDevToolsPage(error) || |
2794 !LoadInputComponents(*api_permissions, error) || | |
2795 !LoadContentScripts(error) || | 2785 !LoadContentScripts(error) || |
2796 !LoadPageAction(error) || | 2786 !LoadPageAction(error) || |
2797 !LoadBrowserAction(error) || | 2787 !LoadBrowserAction(error) || |
2798 !LoadSystemIndicator(api_permissions, error) || | 2788 !LoadSystemIndicator(api_permissions, error) || |
2799 !LoadScriptBadge(error) || | 2789 !LoadScriptBadge(error) || |
2800 !LoadChromeURLOverrides(error) || | 2790 !LoadChromeURLOverrides(error) || |
2801 !LoadTextToSpeechVoices(error) || | 2791 !LoadTextToSpeechVoices(error) || |
2802 !LoadIncognitoMode(error) || | 2792 !LoadIncognitoMode(error) || |
2803 !LoadFileHandlers(error) || | 2793 !LoadFileHandlers(error) || |
2804 !LoadContentSecurityPolicy(error)) | 2794 !LoadContentSecurityPolicy(error)) |
(...skipping 19 matching lines...) Expand all Loading... |
2824 return true; | 2814 return true; |
2825 std::string devtools_str; | 2815 std::string devtools_str; |
2826 if (!manifest_->GetString(keys::kDevToolsPage, &devtools_str)) { | 2816 if (!manifest_->GetString(keys::kDevToolsPage, &devtools_str)) { |
2827 *error = ASCIIToUTF16(errors::kInvalidDevToolsPage); | 2817 *error = ASCIIToUTF16(errors::kInvalidDevToolsPage); |
2828 return false; | 2818 return false; |
2829 } | 2819 } |
2830 devtools_url_ = GetResourceURL(devtools_str); | 2820 devtools_url_ = GetResourceURL(devtools_str); |
2831 return true; | 2821 return true; |
2832 } | 2822 } |
2833 | 2823 |
2834 bool Extension::LoadInputComponents(const APIPermissionSet& api_permissions, | |
2835 string16* error) { | |
2836 if (!manifest_->HasKey(keys::kInputComponents)) | |
2837 return true; | |
2838 ListValue* list_value = NULL; | |
2839 if (!manifest_->GetList(keys::kInputComponents, &list_value)) { | |
2840 *error = ASCIIToUTF16(errors::kInvalidInputComponents); | |
2841 return false; | |
2842 } | |
2843 | |
2844 for (size_t i = 0; i < list_value->GetSize(); ++i) { | |
2845 DictionaryValue* module_value = NULL; | |
2846 std::string name_str; | |
2847 InputComponentType type; | |
2848 std::string id_str; | |
2849 std::string description_str; | |
2850 std::string language_str; | |
2851 std::set<std::string> layouts; | |
2852 std::string shortcut_keycode_str; | |
2853 bool shortcut_alt = false; | |
2854 bool shortcut_ctrl = false; | |
2855 bool shortcut_shift = false; | |
2856 | |
2857 if (!list_value->GetDictionary(i, &module_value)) { | |
2858 *error = ASCIIToUTF16(errors::kInvalidInputComponents); | |
2859 return false; | |
2860 } | |
2861 | |
2862 // Get input_components[i].name. | |
2863 if (!module_value->GetString(keys::kName, &name_str)) { | |
2864 *error = ErrorUtils::FormatErrorMessageUTF16( | |
2865 errors::kInvalidInputComponentName, base::IntToString(i)); | |
2866 return false; | |
2867 } | |
2868 | |
2869 // Get input_components[i].type. | |
2870 std::string type_str; | |
2871 if (module_value->GetString(keys::kType, &type_str)) { | |
2872 if (type_str == "ime") { | |
2873 type = INPUT_COMPONENT_TYPE_IME; | |
2874 } else { | |
2875 *error = ErrorUtils::FormatErrorMessageUTF16( | |
2876 errors::kInvalidInputComponentType, base::IntToString(i)); | |
2877 return false; | |
2878 } | |
2879 } else { | |
2880 *error = ErrorUtils::FormatErrorMessageUTF16( | |
2881 errors::kInvalidInputComponentType, base::IntToString(i)); | |
2882 return false; | |
2883 } | |
2884 | |
2885 // Get input_components[i].id. | |
2886 if (!module_value->GetString(keys::kId, &id_str)) { | |
2887 id_str = ""; | |
2888 } | |
2889 | |
2890 // Get input_components[i].description. | |
2891 if (!module_value->GetString(keys::kDescription, &description_str)) { | |
2892 *error = ErrorUtils::FormatErrorMessageUTF16( | |
2893 errors::kInvalidInputComponentDescription, base::IntToString(i)); | |
2894 return false; | |
2895 } | |
2896 // Get input_components[i].language. | |
2897 if (!module_value->GetString(keys::kLanguage, &language_str)) { | |
2898 language_str = ""; | |
2899 } | |
2900 | |
2901 // Get input_components[i].layouts. | |
2902 ListValue* layouts_value = NULL; | |
2903 if (!module_value->GetList(keys::kLayouts, &layouts_value)) { | |
2904 *error = ASCIIToUTF16(errors::kInvalidInputComponentLayouts); | |
2905 return false; | |
2906 } | |
2907 | |
2908 for (size_t j = 0; j < layouts_value->GetSize(); ++j) { | |
2909 std::string layout_name_str; | |
2910 if (!layouts_value->GetString(j, &layout_name_str)) { | |
2911 *error = ErrorUtils::FormatErrorMessageUTF16( | |
2912 errors::kInvalidInputComponentLayoutName, base::IntToString(i), | |
2913 base::IntToString(j)); | |
2914 return false; | |
2915 } | |
2916 layouts.insert(layout_name_str); | |
2917 } | |
2918 | |
2919 if (module_value->HasKey(keys::kShortcutKey)) { | |
2920 DictionaryValue* shortcut_value = NULL; | |
2921 if (!module_value->GetDictionary(keys::kShortcutKey, &shortcut_value)) { | |
2922 *error = ErrorUtils::FormatErrorMessageUTF16( | |
2923 errors::kInvalidInputComponentShortcutKey, base::IntToString(i)); | |
2924 return false; | |
2925 } | |
2926 | |
2927 // Get input_components[i].shortcut_keycode. | |
2928 if (!shortcut_value->GetString(keys::kKeycode, &shortcut_keycode_str)) { | |
2929 *error = ErrorUtils::FormatErrorMessageUTF16( | |
2930 errors::kInvalidInputComponentShortcutKeycode, | |
2931 base::IntToString(i)); | |
2932 return false; | |
2933 } | |
2934 | |
2935 // Get input_components[i].shortcut_alt. | |
2936 if (!shortcut_value->GetBoolean(keys::kAltKey, &shortcut_alt)) { | |
2937 shortcut_alt = false; | |
2938 } | |
2939 | |
2940 // Get input_components[i].shortcut_ctrl. | |
2941 if (!shortcut_value->GetBoolean(keys::kCtrlKey, &shortcut_ctrl)) { | |
2942 shortcut_ctrl = false; | |
2943 } | |
2944 | |
2945 // Get input_components[i].shortcut_shift. | |
2946 if (!shortcut_value->GetBoolean(keys::kShiftKey, &shortcut_shift)) { | |
2947 shortcut_shift = false; | |
2948 } | |
2949 } | |
2950 | |
2951 input_components_.push_back(InputComponentInfo()); | |
2952 input_components_.back().name = name_str; | |
2953 input_components_.back().type = type; | |
2954 input_components_.back().id = id_str; | |
2955 input_components_.back().description = description_str; | |
2956 input_components_.back().language = language_str; | |
2957 input_components_.back().layouts.insert(layouts.begin(), layouts.end()); | |
2958 input_components_.back().shortcut_keycode = shortcut_keycode_str; | |
2959 input_components_.back().shortcut_alt = shortcut_alt; | |
2960 input_components_.back().shortcut_ctrl = shortcut_ctrl; | |
2961 input_components_.back().shortcut_shift = shortcut_shift; | |
2962 } | |
2963 | |
2964 return true; | |
2965 } | |
2966 | |
2967 bool Extension::LoadContentScripts(string16* error) { | 2824 bool Extension::LoadContentScripts(string16* error) { |
2968 if (!manifest_->HasKey(keys::kContentScripts)) | 2825 if (!manifest_->HasKey(keys::kContentScripts)) |
2969 return true; | 2826 return true; |
2970 ListValue* list_value; | 2827 ListValue* list_value; |
2971 if (!manifest_->GetList(keys::kContentScripts, &list_value)) { | 2828 if (!manifest_->GetList(keys::kContentScripts, &list_value)) { |
2972 *error = ASCIIToUTF16(errors::kInvalidContentScriptsList); | 2829 *error = ASCIIToUTF16(errors::kInvalidContentScriptsList); |
2973 return false; | 2830 return false; |
2974 } | 2831 } |
2975 | 2832 |
2976 for (size_t i = 0; i < list_value->GetSize(); ++i) { | 2833 for (size_t i = 0; i < list_value->GetSize(); ++i) { |
(...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4048 | 3905 |
4049 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( | 3906 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( |
4050 const Extension* extension, | 3907 const Extension* extension, |
4051 const PermissionSet* permissions, | 3908 const PermissionSet* permissions, |
4052 Reason reason) | 3909 Reason reason) |
4053 : reason(reason), | 3910 : reason(reason), |
4054 extension(extension), | 3911 extension(extension), |
4055 permissions(permissions) {} | 3912 permissions(permissions) {} |
4056 | 3913 |
4057 } // namespace extensions | 3914 } // namespace extensions |
OLD | NEW |