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

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

Issue 2806283002: Revert of Stop passing raw pointers to base::Value API in c/b/chromeos and c/b/extensions (Closed)
Patch Set: Created 3 years, 8 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/api/preference/preference_api.h" 5 #include "chrome/browser/extensions/api/preference/preference_api.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 #include <memory> 10 #include <memory>
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 APIPermission::kAccessibilityFeaturesRead, 164 APIPermission::kAccessibilityFeaturesRead,
165 APIPermission::kAccessibilityFeaturesModify}, 165 APIPermission::kAccessibilityFeaturesModify},
166 {"virtualKeyboard", prefs::kAccessibilityVirtualKeyboardEnabled, 166 {"virtualKeyboard", prefs::kAccessibilityVirtualKeyboardEnabled,
167 APIPermission::kAccessibilityFeaturesRead, 167 APIPermission::kAccessibilityFeaturesRead,
168 APIPermission::kAccessibilityFeaturesModify}, 168 APIPermission::kAccessibilityFeaturesModify},
169 #endif 169 #endif
170 }; 170 };
171 171
172 class IdentityPrefTransformer : public PrefTransformerInterface { 172 class IdentityPrefTransformer : public PrefTransformerInterface {
173 public: 173 public:
174 std::unique_ptr<base::Value> ExtensionToBrowserPref( 174 base::Value* ExtensionToBrowserPref(const base::Value* extension_pref,
175 const base::Value* extension_pref, 175 std::string* error,
176 std::string* error, 176 bool* bad_message) override {
177 bool* bad_message) override { 177 return extension_pref->DeepCopy();
178 return extension_pref->CreateDeepCopy();
179 } 178 }
180 179
181 std::unique_ptr<base::Value> BrowserToExtensionPref( 180 base::Value* BrowserToExtensionPref(
182 const base::Value* browser_pref) override { 181 const base::Value* browser_pref) override {
183 return browser_pref->CreateDeepCopy(); 182 return browser_pref->DeepCopy();
184 } 183 }
185 }; 184 };
186 185
187 class InvertBooleanTransformer : public PrefTransformerInterface { 186 class InvertBooleanTransformer : public PrefTransformerInterface {
188 public: 187 public:
189 std::unique_ptr<base::Value> ExtensionToBrowserPref( 188 base::Value* ExtensionToBrowserPref(const base::Value* extension_pref,
190 const base::Value* extension_pref, 189 std::string* error,
191 std::string* error, 190 bool* bad_message) override {
192 bool* bad_message) override {
193 return InvertBooleanValue(extension_pref); 191 return InvertBooleanValue(extension_pref);
194 } 192 }
195 193
196 std::unique_ptr<base::Value> BrowserToExtensionPref( 194 base::Value* BrowserToExtensionPref(
197 const base::Value* browser_pref) override { 195 const base::Value* browser_pref) override {
198 return InvertBooleanValue(browser_pref); 196 return InvertBooleanValue(browser_pref);
199 } 197 }
200 198
201 private: 199 private:
202 static std::unique_ptr<base::Value> InvertBooleanValue( 200 static base::Value* InvertBooleanValue(const base::Value* value) {
203 const base::Value* value) {
204 bool bool_value = false; 201 bool bool_value = false;
205 bool result = value->GetAsBoolean(&bool_value); 202 bool result = value->GetAsBoolean(&bool_value);
206 DCHECK(result); 203 DCHECK(result);
207 return base::MakeUnique<base::Value>(!bool_value); 204 return new base::Value(!bool_value);
208 } 205 }
209 }; 206 };
210 207
211 class NetworkPredictionTransformer : public PrefTransformerInterface { 208 class NetworkPredictionTransformer : public PrefTransformerInterface {
212 public: 209 public:
213 std::unique_ptr<base::Value> ExtensionToBrowserPref( 210 base::Value* ExtensionToBrowserPref(const base::Value* extension_pref,
214 const base::Value* extension_pref, 211 std::string* error,
215 std::string* error, 212 bool* bad_message) override {
216 bool* bad_message) override {
217 bool bool_value = false; 213 bool bool_value = false;
218 const bool pref_found = extension_pref->GetAsBoolean(&bool_value); 214 const bool pref_found = extension_pref->GetAsBoolean(&bool_value);
219 DCHECK(pref_found) << "Preference not found."; 215 DCHECK(pref_found) << "Preference not found.";
220 if (bool_value) { 216 if (bool_value) {
221 return base::MakeUnique<base::Value>( 217 return new base::Value(chrome_browser_net::NETWORK_PREDICTION_DEFAULT);
222 chrome_browser_net::NETWORK_PREDICTION_DEFAULT);
223 } else { 218 } else {
224 return base::MakeUnique<base::Value>( 219 return new base::Value(chrome_browser_net::NETWORK_PREDICTION_NEVER);
225 chrome_browser_net::NETWORK_PREDICTION_NEVER);
226 } 220 }
227 } 221 }
228 222
229 std::unique_ptr<base::Value> BrowserToExtensionPref( 223 base::Value* BrowserToExtensionPref(
230 const base::Value* browser_pref) override { 224 const base::Value* browser_pref) override {
231 int int_value = chrome_browser_net::NETWORK_PREDICTION_DEFAULT; 225 int int_value = chrome_browser_net::NETWORK_PREDICTION_DEFAULT;
232 const bool pref_found = browser_pref->GetAsInteger(&int_value); 226 const bool pref_found = browser_pref->GetAsInteger(&int_value);
233 DCHECK(pref_found) << "Preference not found."; 227 DCHECK(pref_found) << "Preference not found.";
234 return base::MakeUnique<base::Value>( 228 return new base::Value(int_value !=
235 int_value != chrome_browser_net::NETWORK_PREDICTION_NEVER); 229 chrome_browser_net::NETWORK_PREDICTION_NEVER);
236 } 230 }
237 }; 231 };
238 232
239 class PrefMapping { 233 class PrefMapping {
240 public: 234 public:
241 static PrefMapping* GetInstance() { 235 static PrefMapping* GetInstance() {
242 return base::Singleton<PrefMapping>::get(); 236 return base::Singleton<PrefMapping>::get();
243 } 237 }
244 238
245 bool FindBrowserPrefForExtensionPref(const std::string& extension_pref, 239 bool FindBrowserPrefForExtensionPref(const std::string& extension_pref,
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 bool rv = PrefMapping::GetInstance()->FindEventForBrowserPref( 378 bool rv = PrefMapping::GetInstance()->FindEventForBrowserPref(
385 browser_pref, &event_name, &permission); 379 browser_pref, &event_name, &permission);
386 DCHECK(rv); 380 DCHECK(rv);
387 381
388 base::ListValue args; 382 base::ListValue args;
389 const PrefService::Preference* pref = 383 const PrefService::Preference* pref =
390 pref_service->FindPreference(browser_pref); 384 pref_service->FindPreference(browser_pref);
391 CHECK(pref); 385 CHECK(pref);
392 PrefTransformerInterface* transformer = 386 PrefTransformerInterface* transformer =
393 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); 387 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref);
394 std::unique_ptr<base::Value> transformed_value = 388 base::Value* transformed_value =
395 transformer->BrowserToExtensionPref(pref->GetValue()); 389 transformer->BrowserToExtensionPref(pref->GetValue());
396 if (!transformed_value) { 390 if (!transformed_value) {
397 LOG(ERROR) << ErrorUtils::FormatErrorMessage(kConversionErrorMessage, 391 LOG(ERROR) << ErrorUtils::FormatErrorMessage(kConversionErrorMessage,
398 pref->name()); 392 pref->name());
399 return; 393 return;
400 } 394 }
401 395
402 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); 396 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
403 dict->Set(keys::kValue, std::move(transformed_value)); 397 dict->Set(keys::kValue, transformed_value);
404 if (incognito) { 398 if (incognito) {
405 ExtensionPrefs* ep = ExtensionPrefs::Get(profile_); 399 ExtensionPrefs* ep = ExtensionPrefs::Get(profile_);
406 dict->SetBoolean(keys::kIncognitoSpecific, 400 dict->SetBoolean(keys::kIncognitoSpecific,
407 ep->HasIncognitoPrefValue(browser_pref)); 401 ep->HasIncognitoPrefValue(browser_pref));
408 } 402 }
409 args.Append(std::move(dict)); 403 args.Append(std::move(dict));
410 404
411 // TODO(kalman): Have a histogram value for each pref type. 405 // TODO(kalman): Have a histogram value for each pref type.
412 // This isn't so important for the current use case of these 406 // This isn't so important for the current use case of these
413 // histograms, which is to track which event types are waking up event 407 // histograms, which is to track which event types are waking up event
(...skipping 28 matching lines...) Expand all
442 // ScopeToPrefName() returns false if the scope is not persisted. 436 // ScopeToPrefName() returns false if the scope is not persisted.
443 if (pref_names::ScopeToPrefName(scope, &scope_string)) { 437 if (pref_names::ScopeToPrefName(scope, &scope_string)) {
444 // Also store in persisted Preferences file to recover after a 438 // Also store in persisted Preferences file to recover after a
445 // browser restart. 439 // browser restart.
446 ExtensionPrefs::ScopedDictionaryUpdate update(extension_prefs(), 440 ExtensionPrefs::ScopedDictionaryUpdate update(extension_prefs(),
447 extension_id, 441 extension_id,
448 scope_string); 442 scope_string);
449 base::DictionaryValue* preference = update.Get(); 443 base::DictionaryValue* preference = update.Get();
450 if (!preference) 444 if (!preference)
451 preference = update.Create(); 445 preference = update.Create();
452 preference->SetWithoutPathExpansion(pref_key, value->CreateDeepCopy()); 446 preference->SetWithoutPathExpansion(pref_key, value->DeepCopy());
453 } 447 }
454 extension_pref_value_map()->SetExtensionPref( 448 extension_pref_value_map()->SetExtensionPref(
455 extension_id, pref_key, scope, value); 449 extension_id, pref_key, scope, value);
456 } 450 }
457 451
458 void PreferenceAPIBase::RemoveExtensionControlledPref( 452 void PreferenceAPIBase::RemoveExtensionControlledPref(
459 const std::string& extension_id, 453 const std::string& extension_id,
460 const std::string& pref_key, 454 const std::string& pref_key,
461 ExtensionPrefsScope scope) { 455 ExtensionPrefsScope scope) {
462 DCHECK(extension_prefs()->pref_service()->FindPreference(pref_key)) 456 DCHECK(extension_prefs()->pref_service()->FindPreference(pref_key))
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue); 623 std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue);
630 624
631 // Retrieve level of control. 625 // Retrieve level of control.
632 std::string level_of_control = helpers::GetLevelOfControl( 626 std::string level_of_control = helpers::GetLevelOfControl(
633 profile, extension_id(), browser_pref, incognito); 627 profile, extension_id(), browser_pref, incognito);
634 result->SetString(keys::kLevelOfControl, level_of_control); 628 result->SetString(keys::kLevelOfControl, level_of_control);
635 629
636 // Retrieve pref value. 630 // Retrieve pref value.
637 PrefTransformerInterface* transformer = 631 PrefTransformerInterface* transformer =
638 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); 632 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref);
639 std::unique_ptr<base::Value> transformed_value = 633 base::Value* transformed_value =
640 transformer->BrowserToExtensionPref(pref->GetValue()); 634 transformer->BrowserToExtensionPref(pref->GetValue());
641 if (!transformed_value) { 635 if (!transformed_value) {
642 // TODO(devlin): Can this happen? When? Should it be an error, or a bad 636 // TODO(devlin): Can this happen? When? Should it be an error, or a bad
643 // message? 637 // message?
644 LOG(ERROR) << 638 LOG(ERROR) <<
645 ErrorUtils::FormatErrorMessage(kConversionErrorMessage, 639 ErrorUtils::FormatErrorMessage(kConversionErrorMessage,
646 pref->name()); 640 pref->name());
647 return RespondNow(Error(kUnknownErrorDoNotUse)); 641 return RespondNow(Error(kUnknownErrorDoNotUse));
648 } 642 }
649 result->Set(keys::kValue, std::move(transformed_value)); 643 result->Set(keys::kValue, transformed_value);
650 644
651 // Retrieve incognito status. 645 // Retrieve incognito status.
652 if (incognito) { 646 if (incognito) {
653 ExtensionPrefs* ep = ExtensionPrefs::Get(browser_context()); 647 ExtensionPrefs* ep = ExtensionPrefs::Get(browser_context());
654 result->SetBoolean(keys::kIncognitoSpecific, 648 result->SetBoolean(keys::kIncognitoSpecific,
655 ep->HasIncognitoPrefValue(browser_pref)); 649 ep->HasIncognitoPrefValue(browser_pref));
656 } 650 }
657 651
658 return RespondNow(OneArgument(std::move(result))); 652 return RespondNow(OneArgument(std::move(result)));
659 } 653 }
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 pref_key, &browser_pref, &read_permission, &write_permission)); 772 pref_key, &browser_pref, &read_permission, &write_permission));
779 if (!extension()->permissions_data()->HasAPIPermission(write_permission)) 773 if (!extension()->permissions_data()->HasAPIPermission(write_permission))
780 return RespondNow(Error(keys::kPermissionErrorMessage, pref_key)); 774 return RespondNow(Error(keys::kPermissionErrorMessage, pref_key));
781 775
782 PreferenceAPI::Get(browser_context()) 776 PreferenceAPI::Get(browser_context())
783 ->RemoveExtensionControlledPref(extension_id(), browser_pref, scope); 777 ->RemoveExtensionControlledPref(extension_id(), browser_pref, scope);
784 return RespondNow(NoArguments()); 778 return RespondNow(NoArguments());
785 } 779 }
786 780
787 } // namespace extensions 781 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/preference/preference_api.h ('k') | chrome/browser/extensions/api/proxy/proxy_api.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698