Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: chrome/common/extensions/extension.cc

Issue 12042096: Move page action manifest parsing out of Extension; the first multi-key manifest handler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_file_util.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "base/base64.h" 7 #include "base/base64.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
11 #include "base/file_util.h" 11 #include "base/file_util.h"
12 #include "base/i18n/rtl.h" 12 #include "base/i18n/rtl.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/memory/singleton.h" 14 #include "base/memory/singleton.h"
15 #include "base/stl_util.h" 15 #include "base/stl_util.h"
16 #include "base/string16.h" 16 #include "base/string16.h"
17 #include "base/string_piece.h" 17 #include "base/string_piece.h"
18 #include "base/string_util.h" 18 #include "base/string_util.h"
19 #include "base/stringprintf.h" 19 #include "base/stringprintf.h"
20 #include "base/strings/string_number_conversions.h" 20 #include "base/strings/string_number_conversions.h"
21 #include "base/utf_string_conversions.h" 21 #include "base/utf_string_conversions.h"
22 #include "base/values.h" 22 #include "base/values.h"
23 #include "base/version.h" 23 #include "base/version.h"
24 #include "chrome/common/chrome_constants.h" 24 #include "chrome/common/chrome_constants.h"
25 #include "chrome/common/chrome_switches.h" 25 #include "chrome/common/chrome_switches.h"
26 #include "chrome/common/chrome_version_info.h" 26 #include "chrome/common/chrome_version_info.h"
27 // TODO(rdevlin.cronin): Remove this once PageAction, BrowserAction, and 27 // TODO(rdevlin.cronin): Remove this once PageAction, BrowserAction, and
28 // SystemIndicator have been moved out of Extension. 28 // SystemIndicator have been moved out of Extension.
29 #include "chrome/common/extensions/api/extension_action/action_info.h" 29 #include "chrome/common/extensions/api/extension_action/action_info.h"
30 #include "chrome/common/extensions/api/extension_action/page_action_handler.h"
30 #include "chrome/common/extensions/api/themes/theme_handler.h" 31 #include "chrome/common/extensions/api/themes/theme_handler.h"
31 #include "chrome/common/extensions/csp_validator.h" 32 #include "chrome/common/extensions/csp_validator.h"
32 #include "chrome/common/extensions/extension_manifest_constants.h" 33 #include "chrome/common/extensions/extension_manifest_constants.h"
33 #include "chrome/common/extensions/extension_resource.h" 34 #include "chrome/common/extensions/extension_resource.h"
34 #include "chrome/common/extensions/feature_switch.h" 35 #include "chrome/common/extensions/feature_switch.h"
35 #include "chrome/common/extensions/features/base_feature_provider.h" 36 #include "chrome/common/extensions/features/base_feature_provider.h"
36 #include "chrome/common/extensions/features/feature.h" 37 #include "chrome/common/extensions/features/feature.h"
37 #include "chrome/common/extensions/manifest.h" 38 #include "chrome/common/extensions/manifest.h"
38 #include "chrome/common/extensions/manifest_handler.h" 39 #include "chrome/common/extensions/manifest_handler.h"
39 #include "chrome/common/extensions/manifest_handler_helpers.h" 40 #include "chrome/common/extensions/manifest_handler_helpers.h"
(...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 DictionaryValue* theme_images = ThemeInfo::GetThemeImages(this); 819 DictionaryValue* theme_images = ThemeInfo::GetThemeImages(this);
819 if (theme_images) { 820 if (theme_images) {
820 for (DictionaryValue::Iterator it(*theme_images); !it.IsAtEnd(); 821 for (DictionaryValue::Iterator it(*theme_images); !it.IsAtEnd();
821 it.Advance()) { 822 it.Advance()) {
822 std::string val; 823 std::string val;
823 if (it.value().GetAsString(&val)) 824 if (it.value().GetAsString(&val))
824 image_paths.insert(base::FilePath::FromWStringHack(UTF8ToWide(val))); 825 image_paths.insert(base::FilePath::FromWStringHack(UTF8ToWide(val)));
825 } 826 }
826 } 827 }
827 828
828 if (page_action_info() && !page_action_info()->default_icon.empty()) { 829 const ActionInfo* page_action_info = ActionInfo::GetPageActionInfo(this);
830 if (page_action_info && !page_action_info->default_icon.empty()) {
829 for (ExtensionIconSet::IconMap::const_iterator iter = 831 for (ExtensionIconSet::IconMap::const_iterator iter =
830 page_action_info()->default_icon.map().begin(); 832 page_action_info->default_icon.map().begin();
831 iter != page_action_info()->default_icon.map().end(); 833 iter != page_action_info->default_icon.map().end();
832 ++iter) { 834 ++iter) {
833 image_paths.insert( 835 image_paths.insert(
834 base::FilePath::FromWStringHack(UTF8ToWide(iter->second))); 836 base::FilePath::FromWStringHack(UTF8ToWide(iter->second)));
835 } 837 }
836 } 838 }
837 839
838 const ActionInfo* browser_action = ActionInfo::GetBrowserActionInfo(this); 840 const ActionInfo* browser_action = ActionInfo::GetBrowserActionInfo(this);
839 if (browser_action && !browser_action->default_icon.empty()) { 841 if (browser_action && !browser_action->default_icon.empty()) {
840 for (ExtensionIconSet::IconMap::const_iterator iter = 842 for (ExtensionIconSet::IconMap::const_iterator iter =
841 browser_action->default_icon.map().begin(); 843 browser_action->default_icon.map().begin();
(...skipping 1409 matching lines...) Expand 10 before | Expand all | Expand 10 after
2251 return true; 2253 return true;
2252 } 2254 }
2253 2255
2254 bool Extension::LoadExtensionFeatures(APIPermissionSet* api_permissions, 2256 bool Extension::LoadExtensionFeatures(APIPermissionSet* api_permissions,
2255 string16* error) { 2257 string16* error) {
2256 if (manifest_->HasKey(keys::kConvertedFromUserScript)) 2258 if (manifest_->HasKey(keys::kConvertedFromUserScript))
2257 manifest_->GetBoolean(keys::kConvertedFromUserScript, 2259 manifest_->GetBoolean(keys::kConvertedFromUserScript,
2258 &converted_from_user_script_); 2260 &converted_from_user_script_);
2259 2261
2260 if (!LoadContentScripts(error) || 2262 if (!LoadContentScripts(error) ||
2261 !LoadPageAction(error) ||
2262 !LoadSystemIndicator(api_permissions, error) || 2263 !LoadSystemIndicator(api_permissions, error) ||
2263 !LoadIncognitoMode(error) || 2264 !LoadIncognitoMode(error) ||
2264 !LoadContentSecurityPolicy(error)) 2265 !LoadContentSecurityPolicy(error))
2265 return false; 2266 return false;
2266 2267
2267 return true; 2268 return true;
2268 } 2269 }
2269 2270
2270 bool Extension::LoadContentScripts(string16* error) { 2271 bool Extension::LoadContentScripts(string16* error) {
2271 if (!manifest_->HasKey(keys::kContentScripts)) 2272 if (!manifest_->HasKey(keys::kContentScripts))
(...skipping 18 matching lines...) Expand all
2290 script.set_extension_id(id()); 2291 script.set_extension_id(id());
2291 if (converted_from_user_script_) { 2292 if (converted_from_user_script_) {
2292 script.set_emulate_greasemonkey(true); 2293 script.set_emulate_greasemonkey(true);
2293 script.set_match_all_frames(true); // Greasemonkey matches all frames. 2294 script.set_match_all_frames(true); // Greasemonkey matches all frames.
2294 } 2295 }
2295 content_scripts_.push_back(script); 2296 content_scripts_.push_back(script);
2296 } 2297 }
2297 return true; 2298 return true;
2298 } 2299 }
2299 2300
2300 bool Extension::LoadPageAction(string16* error) {
2301 DictionaryValue* page_action_value = NULL;
2302
2303 if (manifest_->HasKey(keys::kPageActions)) {
2304 ListValue* list_value = NULL;
2305 if (!manifest_->GetList(keys::kPageActions, &list_value)) {
2306 *error = ASCIIToUTF16(errors::kInvalidPageActionsList);
2307 return false;
2308 }
2309
2310 size_t list_value_length = list_value->GetSize();
2311
2312 if (list_value_length == 0u) {
2313 // A list with zero items is allowed, and is equivalent to not having
2314 // a page_actions key in the manifest. Don't set |page_action_value|.
2315 } else if (list_value_length == 1u) {
2316 if (!list_value->GetDictionary(0, &page_action_value)) {
2317 *error = ASCIIToUTF16(errors::kInvalidPageAction);
2318 return false;
2319 }
2320 } else { // list_value_length > 1u.
2321 *error = ASCIIToUTF16(errors::kInvalidPageActionsListSize);
2322 return false;
2323 }
2324 } else if (manifest_->HasKey(keys::kPageAction)) {
2325 if (!manifest_->GetDictionary(keys::kPageAction, &page_action_value)) {
2326 *error = ASCIIToUTF16(errors::kInvalidPageAction);
2327 return false;
2328 }
2329 }
2330
2331 // If page_action_value is not NULL, then there was a valid page action.
2332 if (page_action_value) {
2333 page_action_info_ = LoadExtensionActionInfoHelper(
2334 this, page_action_value, error);
2335 if (!page_action_info_.get())
2336 return false; // Failed to parse page action definition.
2337 }
2338
2339 return true;
2340 }
2341
2342 bool Extension::LoadSystemIndicator(APIPermissionSet* api_permissions, 2301 bool Extension::LoadSystemIndicator(APIPermissionSet* api_permissions,
2343 string16* error) { 2302 string16* error) {
2344 if (!manifest_->HasKey(keys::kSystemIndicator)) { 2303 if (!manifest_->HasKey(keys::kSystemIndicator)) {
2345 // There was no manifest entry for the system indicator. 2304 // There was no manifest entry for the system indicator.
2346 return true; 2305 return true;
2347 } 2306 }
2348 2307
2349 DictionaryValue* system_indicator_value = NULL; 2308 DictionaryValue* system_indicator_value = NULL;
2350 if (!manifest_->GetDictionary(keys::kSystemIndicator, 2309 if (!manifest_->GetDictionary(keys::kSystemIndicator,
2351 &system_indicator_value)) { 2310 &system_indicator_value)) {
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
2662 2621
2663 (instance->*add_method)(glob); 2622 (instance->*add_method)(glob);
2664 } 2623 }
2665 2624
2666 return true; 2625 return true;
2667 } 2626 }
2668 2627
2669 bool Extension::HasMultipleUISurfaces() const { 2628 bool Extension::HasMultipleUISurfaces() const {
2670 int num_surfaces = 0; 2629 int num_surfaces = 0;
2671 2630
2672 if (page_action_info()) 2631 if (ActionInfo::GetPageActionInfo(this))
2673 ++num_surfaces; 2632 ++num_surfaces;
2674 2633
2675 if (ActionInfo::GetBrowserActionInfo(this)) 2634 if (ActionInfo::GetBrowserActionInfo(this))
2676 ++num_surfaces; 2635 ++num_surfaces;
2677 2636
2678 if (is_app()) 2637 if (is_app())
2679 ++num_surfaces; 2638 ++num_surfaces;
2680 2639
2681 return num_surfaces > 1; 2640 return num_surfaces > 1;
2682 } 2641 }
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
2835 2794
2836 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( 2795 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo(
2837 const Extension* extension, 2796 const Extension* extension,
2838 const PermissionSet* permissions, 2797 const PermissionSet* permissions,
2839 Reason reason) 2798 Reason reason)
2840 : reason(reason), 2799 : reason(reason),
2841 extension(extension), 2800 extension(extension),
2842 permissions(permissions) {} 2801 permissions(permissions) {}
2843 2802
2844 } // namespace extensions 2803 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_file_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698