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

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

Issue 8424005: Loosen error reporting for hosted app permissions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: moar test Created 9 years, 1 month 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 | « no previous file | chrome/common/extensions/extension_manifests_unittest.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) 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 2553 matching lines...) Expand 10 before | Expand all | Expand 10 after
2564 if (!permissions->GetString(i, &permission_str)) { 2564 if (!permissions->GetString(i, &permission_str)) {
2565 *error = ExtensionErrorUtils::FormatErrorMessage( 2565 *error = ExtensionErrorUtils::FormatErrorMessage(
2566 errors::kInvalidPermission, base::IntToString(i)); 2566 errors::kInvalidPermission, base::IntToString(i));
2567 return false; 2567 return false;
2568 } 2568 }
2569 2569
2570 ExtensionAPIPermission* permission = 2570 ExtensionAPIPermission* permission =
2571 ExtensionPermissionsInfo::GetInstance()->GetByName(permission_str); 2571 ExtensionPermissionsInfo::GetInstance()->GetByName(permission_str);
2572 2572
2573 if (permission != NULL) { 2573 if (permission != NULL) {
2574 if (!CanSpecifyAPIPermission(permission, error)) 2574 if (CanSpecifyAPIPermission(permission, error))
2575 api_permissions->insert(permission->id());
2576 if (!error->empty())
jstritar 2011/10/31 19:16:19 nit: I think you can make this 'else if', but it d
2575 return false; 2577 return false;
2576 api_permissions->insert(permission->id());
2577 continue; 2578 continue;
2578 } 2579 }
2579 2580
2580 // Check if it's a host pattern permission. 2581 // Check if it's a host pattern permission.
2581 URLPattern pattern = URLPattern(CanExecuteScriptEverywhere() ? 2582 URLPattern pattern = URLPattern(CanExecuteScriptEverywhere() ?
2582 URLPattern::SCHEME_ALL : kValidHostPermissionSchemes); 2583 URLPattern::SCHEME_ALL : kValidHostPermissionSchemes);
2583 2584
2584 URLPattern::ParseResult parse_result = pattern.Parse(permission_str, 2585 URLPattern::ParseResult parse_result = pattern.Parse(permission_str,
2585 parse_strictness); 2586 parse_strictness);
2586 if (parse_result == URLPattern::PARSE_SUCCESS) { 2587 if (parse_result == URLPattern::PARSE_SUCCESS) {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
2801 2802
2802 if (permission->id() == ExtensionAPIPermission::kExperimental) { 2803 if (permission->id() == ExtensionAPIPermission::kExperimental) {
2803 if (!CanSpecifyExperimentalPermission()) { 2804 if (!CanSpecifyExperimentalPermission()) {
2804 *error = errors::kExperimentalFlagRequired; 2805 *error = errors::kExperimentalFlagRequired;
2805 return false; 2806 return false;
2806 } 2807 }
2807 } 2808 }
2808 2809
2809 if (is_hosted_app()) { 2810 if (is_hosted_app()) {
2810 if (!CanSpecifyPermissionForHostedApp(permission)) { 2811 if (!CanSpecifyPermissionForHostedApp(permission)) {
2811 *error = ExtensionErrorUtils::FormatErrorMessage( 2812 // Some old versions of Chrome did not return errors here and we ended up
2812 errors::kPermissionNotAllowed, permission->name()); 2813 // with extensions in the store containing bad data: crbug.com/101993.
2814 //
2815 // TODO(aa): Consider just being a lot looser when loading and installing
2816 // extensions. We can be strict when packing and in development mode. Then
2817 // we won't have to maintain all these tricky backward compat issues:
2818 // crbug.com/102328.
2819 if (creation_flags_ & STRICT_ERROR_CHECKS) {
2820 *error = ExtensionErrorUtils::FormatErrorMessage(
2821 errors::kPermissionNotAllowed, permission->name());
2822 }
2813 return false; 2823 return false;
2814 } 2824 }
2815 } 2825 }
2816 2826
2817 return true; 2827 return true;
2818 } 2828 }
2819 2829
2820 bool Extension::CanSpecifyComponentOnlyPermission() const { 2830 bool Extension::CanSpecifyComponentOnlyPermission() const {
2821 // Only COMPONENT extensions can use private APIs. 2831 // Only COMPONENT extensions can use private APIs.
2822 // TODO(asargent) - We want a more general purpose mechanism for this, 2832 // TODO(asargent) - We want a more general purpose mechanism for this,
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
3003 already_disabled(false), 3013 already_disabled(false),
3004 extension(extension) {} 3014 extension(extension) {}
3005 3015
3006 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo( 3016 UpdatedExtensionPermissionsInfo::UpdatedExtensionPermissionsInfo(
3007 const Extension* extension, 3017 const Extension* extension,
3008 const ExtensionPermissionSet* permissions, 3018 const ExtensionPermissionSet* permissions,
3009 Reason reason) 3019 Reason reason)
3010 : reason(reason), 3020 : reason(reason),
3011 extension(extension), 3021 extension(extension),
3012 permissions(permissions) {} 3022 permissions(permissions) {}
OLDNEW
« no previous file with comments | « no previous file | chrome/common/extensions/extension_manifests_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698