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

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

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