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

Side by Side Diff: chrome/browser/extensions/api/preference/preference_api.cc

Issue 652013002: Update extension preference API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make extension preference backward compatible. Created 6 years, 2 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
« no previous file with comments | « no previous file | chrome/browser/extensions/api/preference/preference_apitest.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) 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/api/preference/preference_api.h" 5 #include "chrome/browser/extensions/api/preference/preference_api.h"
6 6
7 #include <map> 7 #include <map>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
11 #include "base/memory/singleton.h" 11 #include "base/memory/singleton.h"
12 #include "base/prefs/pref_service.h" 12 #include "base/prefs/pref_service.h"
13 #include "base/profiler/scoped_profile.h" 13 #include "base/profiler/scoped_profile.h"
14 #include "base/stl_util.h" 14 #include "base/stl_util.h"
15 #include "base/strings/stringprintf.h" 15 #include "base/strings/stringprintf.h"
16 #include "base/values.h" 16 #include "base/values.h"
17 #include "chrome/browser/chrome_notification_types.h" 17 #include "chrome/browser/chrome_notification_types.h"
18 #include "chrome/browser/extensions/api/content_settings/content_settings_servic e.h" 18 #include "chrome/browser/extensions/api/content_settings/content_settings_servic e.h"
19 #include "chrome/browser/extensions/api/preference/preference_api_constants.h" 19 #include "chrome/browser/extensions/api/preference/preference_api_constants.h"
20 #include "chrome/browser/extensions/api/preference/preference_helpers.h" 20 #include "chrome/browser/extensions/api/preference/preference_helpers.h"
21 #include "chrome/browser/extensions/api/proxy/proxy_api.h" 21 #include "chrome/browser/extensions/api/proxy/proxy_api.h"
22 #include "chrome/browser/extensions/extension_service.h" 22 #include "chrome/browser/extensions/extension_service.h"
23 #include "chrome/browser/net/prediction_options.h"
23 #include "chrome/browser/profiles/profile.h" 24 #include "chrome/browser/profiles/profile.h"
24 #include "chrome/common/pref_names.h" 25 #include "chrome/common/pref_names.h"
25 #include "components/translate/core/common/translate_pref_names.h" 26 #include "components/translate/core/common/translate_pref_names.h"
26 #include "content/public/browser/notification_details.h" 27 #include "content/public/browser/notification_details.h"
27 #include "content/public/browser/notification_source.h" 28 #include "content/public/browser/notification_source.h"
28 #include "extensions/browser/extension_pref_value_map.h" 29 #include "extensions/browser/extension_pref_value_map.h"
29 #include "extensions/browser/extension_pref_value_map_factory.h" 30 #include "extensions/browser/extension_pref_value_map_factory.h"
30 #include "extensions/browser/extension_prefs.h" 31 #include "extensions/browser/extension_prefs.h"
31 #include "extensions/browser/extension_prefs_factory.h" 32 #include "extensions/browser/extension_prefs_factory.h"
32 #include "extensions/browser/extension_system_provider.h" 33 #include "extensions/browser/extension_system_provider.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 "Internal error: Stored value for preference '*' cannot be converted " 69 "Internal error: Stored value for preference '*' cannot be converted "
69 "properly."; 70 "properly.";
70 71
71 PrefMappingEntry kPrefMapping[] = { 72 PrefMappingEntry kPrefMapping[] = {
72 {"alternateErrorPagesEnabled", prefs::kAlternateErrorPagesEnabled, 73 {"alternateErrorPagesEnabled", prefs::kAlternateErrorPagesEnabled,
73 APIPermission::kPrivacy, APIPermission::kPrivacy}, 74 APIPermission::kPrivacy, APIPermission::kPrivacy},
74 {"autofillEnabled", autofill::prefs::kAutofillEnabled, 75 {"autofillEnabled", autofill::prefs::kAutofillEnabled,
75 APIPermission::kPrivacy, APIPermission::kPrivacy}, 76 APIPermission::kPrivacy, APIPermission::kPrivacy},
76 {"hyperlinkAuditingEnabled", prefs::kEnableHyperlinkAuditing, 77 {"hyperlinkAuditingEnabled", prefs::kEnableHyperlinkAuditing,
77 APIPermission::kPrivacy, APIPermission::kPrivacy}, 78 APIPermission::kPrivacy, APIPermission::kPrivacy},
78 {"networkPredictionEnabled", prefs::kNetworkPredictionEnabled, 79 {"networkPredictionEnabled", prefs::kNetworkPredictionOptions,
79 APIPermission::kPrivacy, APIPermission::kPrivacy},
80 {"networkPredictionOptions", prefs::kNetworkPredictionOptions,
81 APIPermission::kPrivacy, APIPermission::kPrivacy}, 80 APIPermission::kPrivacy, APIPermission::kPrivacy},
82 {"passwordSavingEnabled", 81 {"passwordSavingEnabled",
83 password_manager::prefs::kPasswordManagerSavingEnabled, 82 password_manager::prefs::kPasswordManagerSavingEnabled,
84 APIPermission::kPrivacy, APIPermission::kPrivacy}, 83 APIPermission::kPrivacy, APIPermission::kPrivacy},
85 {"protectedContentEnabled", prefs::kEnableDRM, APIPermission::kPrivacy, 84 {"protectedContentEnabled", prefs::kEnableDRM, APIPermission::kPrivacy,
86 APIPermission::kPrivacy}, 85 APIPermission::kPrivacy},
87 {"proxy", prefs::kProxy, APIPermission::kProxy, APIPermission::kProxy}, 86 {"proxy", prefs::kProxy, APIPermission::kProxy, APIPermission::kProxy},
88 {"referrersEnabled", prefs::kEnableReferrers, APIPermission::kPrivacy, 87 {"referrersEnabled", prefs::kEnableReferrers, APIPermission::kPrivacy,
89 APIPermission::kPrivacy}, 88 APIPermission::kPrivacy},
90 {"safeBrowsingEnabled", prefs::kSafeBrowsingEnabled, 89 {"safeBrowsingEnabled", prefs::kSafeBrowsingEnabled,
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 150
152 private: 151 private:
153 static base::Value* InvertBooleanValue(const base::Value* value) { 152 static base::Value* InvertBooleanValue(const base::Value* value) {
154 bool bool_value = false; 153 bool bool_value = false;
155 bool result = value->GetAsBoolean(&bool_value); 154 bool result = value->GetAsBoolean(&bool_value);
156 DCHECK(result); 155 DCHECK(result);
157 return new base::FundamentalValue(!bool_value); 156 return new base::FundamentalValue(!bool_value);
158 } 157 }
159 }; 158 };
160 159
160 class NetworkPredictionTransformer : public PrefTransformerInterface {
161 public:
162 virtual base::Value* ExtensionToBrowserPref(const base::Value* extension_pref,
163 std::string* error,
164 bool* bad_message) override {
165 bool bool_value = false;
166 DCHECK(extension_pref->GetAsBoolean(&bool_value));
167 if (bool_value) {
168 return new base::FundamentalValue(
169 chrome_browser_net::NETWORK_PREDICTION_DEFAULT);
170 } else {
171 return new base::FundamentalValue(
172 chrome_browser_net::NETWORK_PREDICTION_NEVER);
173 }
174 }
175
176 virtual base::Value* BrowserToExtensionPref(
177 const base::Value* browser_pref) override {
178 int int_value = chrome_browser_net::NETWORK_PREDICTION_NEVER;
179 DCHECK(browser_pref->GetAsInteger(&int_value));
180 return new base::FundamentalValue(
181 int_value != chrome_browser_net::NETWORK_PREDICTION_NEVER);
182 }
183 };
184
161 class PrefMapping { 185 class PrefMapping {
162 public: 186 public:
163 static PrefMapping* GetInstance() { 187 static PrefMapping* GetInstance() {
164 return Singleton<PrefMapping>::get(); 188 return Singleton<PrefMapping>::get();
165 } 189 }
166 190
167 bool FindBrowserPrefForExtensionPref(const std::string& extension_pref, 191 bool FindBrowserPrefForExtensionPref(const std::string& extension_pref,
168 std::string* browser_pref, 192 std::string* browser_pref,
169 APIPermission::ID* read_permission, 193 APIPermission::ID* read_permission,
170 APIPermission::ID* write_permission) { 194 APIPermission::ID* write_permission) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 event_mapping_[kPrefMapping[i].browser_pref] = 240 event_mapping_[kPrefMapping[i].browser_pref] =
217 PrefMapData(event_name, 241 PrefMapData(event_name,
218 kPrefMapping[i].read_permission, 242 kPrefMapping[i].read_permission,
219 kPrefMapping[i].write_permission); 243 kPrefMapping[i].write_permission);
220 } 244 }
221 DCHECK_EQ(arraysize(kPrefMapping), mapping_.size()); 245 DCHECK_EQ(arraysize(kPrefMapping), mapping_.size());
222 DCHECK_EQ(arraysize(kPrefMapping), event_mapping_.size()); 246 DCHECK_EQ(arraysize(kPrefMapping), event_mapping_.size());
223 RegisterPrefTransformer(prefs::kProxy, new ProxyPrefTransformer()); 247 RegisterPrefTransformer(prefs::kProxy, new ProxyPrefTransformer());
224 RegisterPrefTransformer(prefs::kBlockThirdPartyCookies, 248 RegisterPrefTransformer(prefs::kBlockThirdPartyCookies,
225 new InvertBooleanTransformer()); 249 new InvertBooleanTransformer());
250 RegisterPrefTransformer(prefs::kNetworkPredictionOptions,
251 new NetworkPredictionTransformer());
226 } 252 }
227 253
228 ~PrefMapping() { 254 ~PrefMapping() {
229 STLDeleteContainerPairSecondPointers(transformers_.begin(), 255 STLDeleteContainerPairSecondPointers(transformers_.begin(),
230 transformers_.end()); 256 transformers_.end());
231 } 257 }
232 258
233 void RegisterPrefTransformer(const std::string& browser_pref, 259 void RegisterPrefTransformer(const std::string& browser_pref,
234 PrefTransformerInterface* transformer) { 260 PrefTransformerInterface* transformer) {
235 DCHECK_EQ(0u, transformers_.count(browser_pref)) << 261 DCHECK_EQ(0u, transformers_.count(browser_pref)) <<
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 if (!ValidateBrowserPref( 669 if (!ValidateBrowserPref(
644 pref_key, PreferenceFunction::PERMISSION_TYPE_WRITE, &browser_pref)) { 670 pref_key, PreferenceFunction::PERMISSION_TYPE_WRITE, &browser_pref)) {
645 return false; 671 return false;
646 } 672 }
647 ExtensionPrefs* prefs = ExtensionPrefs::Get(GetProfile()); 673 ExtensionPrefs* prefs = ExtensionPrefs::Get(GetProfile());
648 const PrefService::Preference* pref = 674 const PrefService::Preference* pref =
649 prefs->pref_service()->FindPreference(browser_pref.c_str()); 675 prefs->pref_service()->FindPreference(browser_pref.c_str());
650 CHECK(pref); 676 CHECK(pref);
651 677
652 // Validate new value. 678 // Validate new value.
653 EXTENSION_FUNCTION_VALIDATE(value->GetType() == pref->GetType());
654 PrefTransformerInterface* transformer = 679 PrefTransformerInterface* transformer =
655 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); 680 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref);
656 std::string error; 681 std::string error;
657 bool bad_message = false; 682 bool bad_message = false;
658 scoped_ptr<base::Value> browser_pref_value( 683 scoped_ptr<base::Value> browser_pref_value(
659 transformer->ExtensionToBrowserPref(value, &error, &bad_message)); 684 transformer->ExtensionToBrowserPref(value, &error, &bad_message));
660 if (!browser_pref_value) { 685 if (!browser_pref_value) {
661 error_ = error; 686 error_ = error;
662 bad_message_ = bad_message; 687 bad_message_ = bad_message;
663 return false; 688 return false;
664 } 689 }
690 EXTENSION_FUNCTION_VALIDATE(browser_pref_value->GetType() == pref->GetType());
665 691
666 // Validate also that the stored value can be converted back by the 692 // Validate also that the stored value can be converted back by the
667 // transformer. 693 // transformer.
668 scoped_ptr<base::Value> extensionPrefValue( 694 scoped_ptr<base::Value> extensionPrefValue(
669 transformer->BrowserToExtensionPref(browser_pref_value.get())); 695 transformer->BrowserToExtensionPref(browser_pref_value.get()));
670 if (!extensionPrefValue) { 696 if (!extensionPrefValue) {
671 error_ = ErrorUtils::FormatErrorMessage(kConversionErrorMessage, 697 error_ = ErrorUtils::FormatErrorMessage(kConversionErrorMessage,
672 pref->name()); 698 pref->name());
673 bad_message_ = true; 699 bad_message_ = true;
674 return false; 700 return false;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 pref_key, PreferenceFunction::PERMISSION_TYPE_WRITE, &browser_pref)) { 743 pref_key, PreferenceFunction::PERMISSION_TYPE_WRITE, &browser_pref)) {
718 return false; 744 return false;
719 } 745 }
720 746
721 PreferenceAPI::Get(GetProfile()) 747 PreferenceAPI::Get(GetProfile())
722 ->RemoveExtensionControlledPref(extension_id(), browser_pref, scope); 748 ->RemoveExtensionControlledPref(extension_id(), browser_pref, scope);
723 return true; 749 return true;
724 } 750 }
725 751
726 } // namespace extensions 752 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/api/preference/preference_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698