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

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

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