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

Side by Side Diff: chrome/browser/extensions/extension_prefs.cc

Issue 10689097: Enforce the 'requirements' field in manifests. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Conforming to the doc Created 8 years, 4 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
OLDNEW
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/browser/extensions/extension_prefs.h" 5 #include "chrome/browser/extensions/extension_prefs.h"
6 6
7 #include "base/string_number_conversions.h" 7 #include "base/string_number_conversions.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/extensions/admin_policy.h" 10 #include "chrome/browser/extensions/admin_policy.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 const char kPrefAppNotificationDisbaled[] = "app_notif_disabled"; 56 const char kPrefAppNotificationDisbaled[] = "app_notif_disabled";
57 57
58 // Indicates whether the user has acknowledged various types of extensions. 58 // Indicates whether the user has acknowledged various types of extensions.
59 const char kPrefExternalAcknowledged[] = "ack_external"; 59 const char kPrefExternalAcknowledged[] = "ack_external";
60 const char kPrefBlacklistAcknowledged[] = "ack_blacklist"; 60 const char kPrefBlacklistAcknowledged[] = "ack_blacklist";
61 const char kPrefOrphanAcknowledged[] = "ack_orphan"; 61 const char kPrefOrphanAcknowledged[] = "ack_orphan";
62 62
63 // Indicates whether to show an install warning when the user enables. 63 // Indicates whether to show an install warning when the user enables.
64 const char kExtensionDidEscalatePermissions[] = "install_warning_on_enable"; 64 const char kExtensionDidEscalatePermissions[] = "install_warning_on_enable";
65 65
66 // Any errors that arose from unmet unmet requirements.
67 const char kUnsupportedRequirements[] = "unsupported_requirements";
68
66 // Indicates whether the extension was updated while it was disabled. 69 // Indicates whether the extension was updated while it was disabled.
67 const char kPrefDisableReason[] = "disable_reason"; 70 const char kPrefDisableReason[] = "disable_reason";
68 71
69 // A preference that tracks browser action toolbar configuration. This is a list 72 // A preference that tracks browser action toolbar configuration. This is a list
70 // object stored in the Preferences file. The extensions are stored by ID. 73 // object stored in the Preferences file. The extensions are stored by ID.
71 const char kExtensionToolbar[] = "extensions.toolbar"; 74 const char kExtensionToolbar[] = "extensions.toolbar";
72 75
73 // The key for a serialized Time value indicating the start of the day (from the 76 // The key for a serialized Time value indicating the start of the day (from the
74 // server's perspective) an extension last included a "ping" parameter during 77 // server's perspective) an extension last included a "ping" parameter during
75 // its update check. 78 // its update check.
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 UpdateExtensionPref(extension_id, kPrefAppNotificationClientId, 620 UpdateExtensionPref(extension_id, kPrefAppNotificationClientId,
618 Value::CreateStringValue(oauth_client_id)); 621 Value::CreateStringValue(oauth_client_id));
619 } 622 }
620 623
621 bool ExtensionPrefs::IsAppNotificationDisabled( 624 bool ExtensionPrefs::IsAppNotificationDisabled(
622 const std::string& extension_id) const { 625 const std::string& extension_id) const {
623 return ReadExtensionPrefBoolean(extension_id, kPrefAppNotificationDisbaled); 626 return ReadExtensionPrefBoolean(extension_id, kPrefAppNotificationDisbaled);
624 } 627 }
625 628
626 void ExtensionPrefs::SetAppNotificationDisabled( 629 void ExtensionPrefs::SetAppNotificationDisabled(
627 const std::string& extension_id, bool value) { 630 const std::string& extension_id, bool value) {
628 DCHECK(Extension::IdIsValid(extension_id)); 631 DCHECK(Extension::IdIsValid(extension_id));
629 UpdateExtensionPref(extension_id, kPrefAppNotificationDisbaled, 632 UpdateExtensionPref(extension_id, kPrefAppNotificationDisbaled,
630 Value::CreateBooleanValue(value)); 633 Value::CreateBooleanValue(value));
631 } 634 }
632 635
633 std::string ExtensionPrefs::GetDebugPolicyProviderName() const { 636 std::string ExtensionPrefs::GetDebugPolicyProviderName() const {
634 #ifdef NDEBUG 637 #ifdef NDEBUG
635 NOTREACHED(); 638 NOTREACHED();
636 return std::string(); 639 return std::string();
637 #else 640 #else
638 return "admin policy black/white/forcelist, via the ExtensionPrefs"; 641 return "admin policy black/white/forcelist, via the ExtensionPrefs";
639 #endif 642 #endif
640 } 643 }
641 644
642 bool ExtensionPrefs::UserMayLoad(const Extension* extension, 645 bool ExtensionPrefs::UserMayLoad(const Extension* extension,
643 string16* error) const { 646 string16* error) const {
644
645 const base::ListValue* blacklist = 647 const base::ListValue* blacklist =
646 prefs_->GetList(prefs::kExtensionInstallDenyList); 648 prefs_->GetList(prefs::kExtensionInstallDenyList);
647 const base::ListValue* whitelist = 649 const base::ListValue* whitelist =
648 prefs_->GetList(prefs::kExtensionInstallAllowList); 650 prefs_->GetList(prefs::kExtensionInstallAllowList);
649 return admin_policy::UserMayLoad(blacklist, whitelist, extension, 651 return admin_policy::UserMayLoad(blacklist, whitelist, extension,
650 error); 652 error);
651 } 653 }
652 654
653 bool ExtensionPrefs::UserMayModifySettings(const Extension* extension, 655 bool ExtensionPrefs::UserMayModifySettings(const Extension* extension,
654 string16* error) const { 656 string16* error) const {
(...skipping 15 matching lines...) Expand all
670 return ReadExtensionPrefBoolean(extension_id, 672 return ReadExtensionPrefBoolean(extension_id,
671 kExtensionDidEscalatePermissions); 673 kExtensionDidEscalatePermissions);
672 } 674 }
673 675
674 void ExtensionPrefs::SetDidExtensionEscalatePermissions( 676 void ExtensionPrefs::SetDidExtensionEscalatePermissions(
675 const Extension* extension, bool did_escalate) { 677 const Extension* extension, bool did_escalate) {
676 UpdateExtensionPref(extension->id(), kExtensionDidEscalatePermissions, 678 UpdateExtensionPref(extension->id(), kExtensionDidEscalatePermissions,
677 Value::CreateBooleanValue(did_escalate)); 679 Value::CreateBooleanValue(did_escalate));
678 } 680 }
679 681
682 bool ExtensionPrefs::HasUnsupportedRequirements(
683 const std::string& extension_id) {
684 const ListValue* requirement_errors = NULL;
685 return ReadExtensionPrefList(extension_id,
686 kUnsupportedRequirements,
687 &requirement_errors);
688 }
689
690 void ExtensionPrefs::ClearUnsupportedRequirements(
691 const std::string& extension_id) {
692 UpdateExtensionPref(extension_id, kUnsupportedRequirements, NULL);
693 }
694
695 void ExtensionPrefs::SetUnsupportedRequirements(
696 const std::string& extension_id,
697 std::vector<std::string> requirement_errors) {
698 ListValue* errors_list = new ListValue();
699 std::vector<std::string>::iterator it;
700 for (it = requirement_errors.begin(); it != requirement_errors.end(); ++it)
701 errors_list->Append(Value::CreateStringValue(*it));
702 UpdateExtensionPref(extension_id, kUnsupportedRequirements, errors_list);
703 }
704
705 std::vector<std::string> ExtensionPrefs::GetUnsupportedRequirements(
706 const std::string& extension_id) {
707 std::vector<std::string> requirement_errors;
708 const DictionaryValue* extension = GetExtensionPref(extension_id);
709 if (!extension)
710 return requirement_errors;
711
712 ListValue* value = NULL;
713 if (!extension->GetList(kUnsupportedRequirements, &value))
714 return requirement_errors;
715
716 for (size_t i = 0; i < value->GetSize(); ++i) {
717 std::string error;
718 if (value->GetString(i, &error))
719 requirement_errors.push_back(error);
720 }
721 return requirement_errors;
722 }
723
680 Extension::DisableReason ExtensionPrefs::GetDisableReason( 724 Extension::DisableReason ExtensionPrefs::GetDisableReason(
681 const std::string& extension_id) { 725 const std::string& extension_id) {
682 int value = -1; 726 int value = -1;
683 if (ReadExtensionPrefInteger(extension_id, kPrefDisableReason, &value) && 727 if (ReadExtensionPrefInteger(extension_id, kPrefDisableReason, &value) &&
684 value >= 0 && value < Extension::DISABLE_LAST) { 728 value >= 0 && value < Extension::DISABLE_LAST) {
685 return static_cast<Extension::DisableReason>(value); 729 return static_cast<Extension::DisableReason>(value);
686 } 730 }
687 return Extension::DISABLE_UNKNOWN; 731 return Extension::DISABLE_UNKNOWN;
688 } 732 }
689 733
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 void ExtensionPrefs::SetActiveBit(const std::string& extension_id, 870 void ExtensionPrefs::SetActiveBit(const std::string& extension_id,
827 bool active) { 871 bool active) {
828 UpdateExtensionPref(extension_id, kActiveBit, 872 UpdateExtensionPref(extension_id, kActiveBit,
829 Value::CreateBooleanValue(active)); 873 Value::CreateBooleanValue(active));
830 } 874 }
831 875
832 void ExtensionPrefs::MigratePermissions(const ExtensionIdSet& extension_ids) { 876 void ExtensionPrefs::MigratePermissions(const ExtensionIdSet& extension_ids) {
833 PermissionsInfo* info = PermissionsInfo::GetInstance(); 877 PermissionsInfo* info = PermissionsInfo::GetInstance();
834 for (ExtensionIdSet::const_iterator ext_id = 878 for (ExtensionIdSet::const_iterator ext_id =
835 extension_ids.begin(); ext_id != extension_ids.end(); ++ext_id) { 879 extension_ids.begin(); ext_id != extension_ids.end(); ++ext_id) {
836
837 // An extension's granted permissions need to be migrated if the 880 // An extension's granted permissions need to be migrated if the
838 // full_access bit is present. This bit was always present in the previous 881 // full_access bit is present. This bit was always present in the previous
839 // scheme and is never present now. 882 // scheme and is never present now.
840 bool full_access; 883 bool full_access;
841 const DictionaryValue* ext = GetExtensionPref(*ext_id); 884 const DictionaryValue* ext = GetExtensionPref(*ext_id);
842 if (!ext || !ext->GetBoolean(kPrefOldGrantedFullAccess, &full_access)) 885 if (!ext || !ext->GetBoolean(kPrefOldGrantedFullAccess, &full_access))
843 continue; 886 continue;
844 887
845 // Remove the full access bit (empty list will get trimmed). 888 // Remove the full access bit (empty list will get trimmed).
846 UpdateExtensionPref( 889 UpdateExtensionPref(
(...skipping 1087 matching lines...) Expand 10 before | Expand all | Expand 10 after
1934 0, // default value 1977 0, // default value
1935 PrefService::UNSYNCABLE_PREF); 1978 PrefService::UNSYNCABLE_PREF);
1936 prefs->RegisterInt64Pref(prefs::kNextExtensionsUpdateCheck, 1979 prefs->RegisterInt64Pref(prefs::kNextExtensionsUpdateCheck,
1937 0, // default value 1980 0, // default value
1938 PrefService::UNSYNCABLE_PREF); 1981 PrefService::UNSYNCABLE_PREF);
1939 prefs->RegisterListPref(prefs::kExtensionAllowedInstallSites, 1982 prefs->RegisterListPref(prefs::kExtensionAllowedInstallSites,
1940 PrefService::UNSYNCABLE_PREF); 1983 PrefService::UNSYNCABLE_PREF);
1941 } 1984 }
1942 1985
1943 } // namespace extensions 1986 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698