OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/extension_prefs.h" | 5 #include "extensions/browser/extension_prefs.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 | 8 |
9 #include "base/metrics/histogram_macros.h" | 9 #include "base/metrics/histogram_macros.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
549 UpdateExtensionPref(extension_id, pref_key, new_value.ToValue().release()); | 549 UpdateExtensionPref(extension_id, pref_key, new_value.ToValue().release()); |
550 } | 550 } |
551 | 551 |
552 bool ExtensionPrefs::ReadPrefAsBooleanAndReturn( | 552 bool ExtensionPrefs::ReadPrefAsBooleanAndReturn( |
553 const std::string& extension_id, | 553 const std::string& extension_id, |
554 const std::string& pref_key) const { | 554 const std::string& pref_key) const { |
555 bool out_value = false; | 555 bool out_value = false; |
556 return ReadPrefAsBoolean(extension_id, pref_key, &out_value) && out_value; | 556 return ReadPrefAsBoolean(extension_id, pref_key, &out_value) && out_value; |
557 } | 557 } |
558 | 558 |
559 scoped_refptr<const PermissionSet> ExtensionPrefs::ReadPrefAsPermissionSet( | 559 scoped_ptr<const PermissionSet> ExtensionPrefs::ReadPrefAsPermissionSet( |
560 const std::string& extension_id, | 560 const std::string& extension_id, |
561 const std::string& pref_key) const { | 561 const std::string& pref_key) const { |
562 if (!GetExtensionPref(extension_id)) | 562 if (!GetExtensionPref(extension_id)) |
563 return nullptr; | 563 return nullptr; |
564 | 564 |
565 // Retrieve the API permissions. Please refer SetExtensionPrefPermissionSet() | 565 // Retrieve the API permissions. Please refer SetExtensionPrefPermissionSet() |
566 // for api_values format. | 566 // for api_values format. |
567 APIPermissionSet apis; | 567 APIPermissionSet apis; |
568 const base::ListValue* api_values = NULL; | 568 const base::ListValue* api_values = NULL; |
569 std::string api_pref = JoinPrefs(pref_key, kPrefAPIs); | 569 std::string api_pref = JoinPrefs(pref_key, kPrefAPIs); |
(...skipping 20 matching lines...) Expand all Loading... |
590 ReadPrefAsURLPatternSet( | 590 ReadPrefAsURLPatternSet( |
591 extension_id, JoinPrefs(pref_key, kPrefExplicitHosts), | 591 extension_id, JoinPrefs(pref_key, kPrefExplicitHosts), |
592 &explicit_hosts, Extension::kValidHostPermissionSchemes); | 592 &explicit_hosts, Extension::kValidHostPermissionSchemes); |
593 | 593 |
594 // Retrieve the scriptable host permissions. | 594 // Retrieve the scriptable host permissions. |
595 URLPatternSet scriptable_hosts; | 595 URLPatternSet scriptable_hosts; |
596 ReadPrefAsURLPatternSet( | 596 ReadPrefAsURLPatternSet( |
597 extension_id, JoinPrefs(pref_key, kPrefScriptableHosts), | 597 extension_id, JoinPrefs(pref_key, kPrefScriptableHosts), |
598 &scriptable_hosts, UserScript::ValidUserScriptSchemes()); | 598 &scriptable_hosts, UserScript::ValidUserScriptSchemes()); |
599 | 599 |
600 return make_scoped_refptr(new PermissionSet( | 600 return make_scoped_ptr(new PermissionSet(apis, manifest_permissions, |
601 apis, manifest_permissions, explicit_hosts, scriptable_hosts)); | 601 explicit_hosts, scriptable_hosts)); |
602 } | 602 } |
603 | 603 |
604 // Set the API or Manifest permissions. | 604 // Set the API or Manifest permissions. |
605 // The format of api_values is: | 605 // The format of api_values is: |
606 // [ "permission_name1", // permissions do not support detail. | 606 // [ "permission_name1", // permissions do not support detail. |
607 // "permission_name2", | 607 // "permission_name2", |
608 // {"permission_name3": value }, | 608 // {"permission_name3": value }, |
609 // // permission supports detail, permission detail will be stored in value. | 609 // // permission supports detail, permission detail will be stored in value. |
610 // ... | 610 // ... |
611 // ] | 611 // ] |
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 } | 1007 } |
1008 | 1008 |
1009 UpdateExtensionPref(*ext_id, kPrefDisableReasons, | 1009 UpdateExtensionPref(*ext_id, kPrefDisableReasons, |
1010 new base::FundamentalValue(new_value)); | 1010 new base::FundamentalValue(new_value)); |
1011 // Remove the old disable reason. | 1011 // Remove the old disable reason. |
1012 UpdateExtensionPref(*ext_id, kDeprecatedPrefDisableReason, NULL); | 1012 UpdateExtensionPref(*ext_id, kDeprecatedPrefDisableReason, NULL); |
1013 } | 1013 } |
1014 } | 1014 } |
1015 } | 1015 } |
1016 | 1016 |
1017 scoped_refptr<const PermissionSet> ExtensionPrefs::GetGrantedPermissions( | 1017 scoped_ptr<const PermissionSet> ExtensionPrefs::GetGrantedPermissions( |
1018 const std::string& extension_id) const { | 1018 const std::string& extension_id) const { |
1019 CHECK(crx_file::id_util::IdIsValid(extension_id)); | 1019 CHECK(crx_file::id_util::IdIsValid(extension_id)); |
1020 return ReadPrefAsPermissionSet(extension_id, kPrefGrantedPermissions); | 1020 return ReadPrefAsPermissionSet(extension_id, kPrefGrantedPermissions); |
1021 } | 1021 } |
1022 | 1022 |
1023 void ExtensionPrefs::AddGrantedPermissions( | 1023 void ExtensionPrefs::AddGrantedPermissions( |
1024 const std::string& extension_id, | 1024 const std::string& extension_id, |
1025 const PermissionSet* permissions) { | 1025 const PermissionSet* permissions) { |
1026 CHECK(crx_file::id_util::IdIsValid(extension_id)); | 1026 CHECK(crx_file::id_util::IdIsValid(extension_id)); |
1027 DCHECK(permissions); | 1027 DCHECK(permissions); |
1028 | 1028 |
1029 scoped_refptr<const PermissionSet> granted = | 1029 scoped_ptr<const PermissionSet> granted = GetGrantedPermissions(extension_id); |
1030 GetGrantedPermissions(extension_id); | 1030 scoped_ptr<const PermissionSet> union_set; |
1031 granted = granted.get() ? PermissionSet::CreateUnion(*permissions, *granted) | 1031 if (granted) |
1032 : permissions; | 1032 union_set = PermissionSet::CreateUnion(*permissions, *granted); |
1033 // The new granted permissions are the union of the already granted | 1033 // The new granted permissions are the union of the already granted |
1034 // permissions and the newly granted permissions. | 1034 // permissions and the newly granted permissions. |
1035 SetExtensionPrefPermissionSet(extension_id, kPrefGrantedPermissions, | 1035 SetExtensionPrefPermissionSet(extension_id, kPrefGrantedPermissions, |
1036 granted.get()); | 1036 union_set ? union_set.get() : permissions); |
1037 } | 1037 } |
1038 | 1038 |
1039 void ExtensionPrefs::RemoveGrantedPermissions( | 1039 void ExtensionPrefs::RemoveGrantedPermissions( |
1040 const std::string& extension_id, | 1040 const std::string& extension_id, |
1041 const PermissionSet* permissions) { | 1041 const PermissionSet* permissions) { |
1042 CHECK(crx_file::id_util::IdIsValid(extension_id)); | 1042 CHECK(crx_file::id_util::IdIsValid(extension_id)); |
1043 | 1043 |
1044 // The new granted permissions are the difference of the already granted | 1044 // The new granted permissions are the difference of the already granted |
1045 // permissions and the newly ungranted permissions. | 1045 // permissions and the newly ungranted permissions. |
1046 SetExtensionPrefPermissionSet( | 1046 SetExtensionPrefPermissionSet( |
1047 extension_id, kPrefGrantedPermissions, | 1047 extension_id, kPrefGrantedPermissions, |
1048 PermissionSet::CreateDifference(*GetGrantedPermissions(extension_id), | 1048 PermissionSet::CreateDifference(*GetGrantedPermissions(extension_id), |
1049 *permissions) | 1049 *permissions) |
1050 .get()); | 1050 .get()); |
1051 } | 1051 } |
1052 | 1052 |
1053 scoped_refptr<const PermissionSet> ExtensionPrefs::GetActivePermissions( | 1053 scoped_ptr<const PermissionSet> ExtensionPrefs::GetActivePermissions( |
1054 const std::string& extension_id) const { | 1054 const std::string& extension_id) const { |
1055 CHECK(crx_file::id_util::IdIsValid(extension_id)); | 1055 CHECK(crx_file::id_util::IdIsValid(extension_id)); |
1056 return ReadPrefAsPermissionSet(extension_id, kPrefActivePermissions); | 1056 return ReadPrefAsPermissionSet(extension_id, kPrefActivePermissions); |
1057 } | 1057 } |
1058 | 1058 |
1059 void ExtensionPrefs::SetActivePermissions( | 1059 void ExtensionPrefs::SetActivePermissions( |
1060 const std::string& extension_id, | 1060 const std::string& extension_id, |
1061 const PermissionSet* permissions) { | 1061 const PermissionSet* permissions) { |
1062 SetExtensionPrefPermissionSet( | 1062 SetExtensionPrefPermissionSet( |
1063 extension_id, kPrefActivePermissions, permissions); | 1063 extension_id, kPrefActivePermissions, permissions); |
(...skipping 1048 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2112 extension_pref_value_map_->RegisterExtension( | 2112 extension_pref_value_map_->RegisterExtension( |
2113 extension_id, install_time, is_enabled, is_incognito_enabled); | 2113 extension_id, install_time, is_enabled, is_incognito_enabled); |
2114 | 2114 |
2115 FOR_EACH_OBSERVER( | 2115 FOR_EACH_OBSERVER( |
2116 ExtensionPrefsObserver, | 2116 ExtensionPrefsObserver, |
2117 observer_list_, | 2117 observer_list_, |
2118 OnExtensionRegistered(extension_id, install_time, is_enabled)); | 2118 OnExtensionRegistered(extension_id, install_time, is_enabled)); |
2119 } | 2119 } |
2120 | 2120 |
2121 } // namespace extensions | 2121 } // namespace extensions |
OLD | NEW |