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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/preference/preference_api.cc
diff --git a/chrome/browser/extensions/api/preference/preference_api.cc b/chrome/browser/extensions/api/preference/preference_api.cc
index 7fa0ef57b9b3080adc78068c6de847d346a89adc..cf3b12df99d11d5c9ba9de11a130d3423317a02c 100644
--- a/chrome/browser/extensions/api/preference/preference_api.cc
+++ b/chrome/browser/extensions/api/preference/preference_api.cc
@@ -171,62 +171,68 @@ PrefMappingEntry kPrefMapping[] = {
class IdentityPrefTransformer : public PrefTransformerInterface {
public:
- base::Value* ExtensionToBrowserPref(const base::Value* extension_pref,
- std::string* error,
- bool* bad_message) override {
- return extension_pref->DeepCopy();
+ std::unique_ptr<base::Value> ExtensionToBrowserPref(
+ const base::Value* extension_pref,
+ std::string* error,
+ bool* bad_message) override {
+ return extension_pref->CreateDeepCopy();
}
- base::Value* BrowserToExtensionPref(
+ std::unique_ptr<base::Value> BrowserToExtensionPref(
const base::Value* browser_pref) override {
- return browser_pref->DeepCopy();
+ return browser_pref->CreateDeepCopy();
}
};
class InvertBooleanTransformer : public PrefTransformerInterface {
public:
- base::Value* ExtensionToBrowserPref(const base::Value* extension_pref,
- std::string* error,
- bool* bad_message) override {
+ std::unique_ptr<base::Value> ExtensionToBrowserPref(
+ const base::Value* extension_pref,
+ std::string* error,
+ bool* bad_message) override {
return InvertBooleanValue(extension_pref);
}
- base::Value* BrowserToExtensionPref(
+ std::unique_ptr<base::Value> BrowserToExtensionPref(
const base::Value* browser_pref) override {
return InvertBooleanValue(browser_pref);
}
private:
- static base::Value* InvertBooleanValue(const base::Value* value) {
+ static std::unique_ptr<base::Value> InvertBooleanValue(
+ const base::Value* value) {
bool bool_value = false;
bool result = value->GetAsBoolean(&bool_value);
DCHECK(result);
- return new base::Value(!bool_value);
+ return base::MakeUnique<base::Value>(!bool_value);
}
};
class NetworkPredictionTransformer : public PrefTransformerInterface {
public:
- base::Value* ExtensionToBrowserPref(const base::Value* extension_pref,
- std::string* error,
- bool* bad_message) override {
+ std::unique_ptr<base::Value> ExtensionToBrowserPref(
+ const base::Value* extension_pref,
+ std::string* error,
+ bool* bad_message) override {
bool bool_value = false;
const bool pref_found = extension_pref->GetAsBoolean(&bool_value);
DCHECK(pref_found) << "Preference not found.";
if (bool_value) {
- return new base::Value(chrome_browser_net::NETWORK_PREDICTION_DEFAULT);
+ return base::MakeUnique<base::Value>(
+ chrome_browser_net::NETWORK_PREDICTION_DEFAULT);
} else {
- return new base::Value(chrome_browser_net::NETWORK_PREDICTION_NEVER);
+ return base::MakeUnique<base::Value>(
+ chrome_browser_net::NETWORK_PREDICTION_NEVER);
}
}
- base::Value* BrowserToExtensionPref(
+ std::unique_ptr<base::Value> BrowserToExtensionPref(
const base::Value* browser_pref) override {
int int_value = chrome_browser_net::NETWORK_PREDICTION_DEFAULT;
const bool pref_found = browser_pref->GetAsInteger(&int_value);
DCHECK(pref_found) << "Preference not found.";
- return new base::Value(int_value !=
- chrome_browser_net::NETWORK_PREDICTION_NEVER);
+ return base::MakeUnique<base::Value>(
+ int_value != chrome_browser_net::NETWORK_PREDICTION_NEVER);
}
};
@@ -385,7 +391,7 @@ void PreferenceEventRouter::OnPrefChanged(PrefService* pref_service,
CHECK(pref);
PrefTransformerInterface* transformer =
PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref);
- base::Value* transformed_value =
+ std::unique_ptr<base::Value> transformed_value =
transformer->BrowserToExtensionPref(pref->GetValue());
if (!transformed_value) {
LOG(ERROR) << ErrorUtils::FormatErrorMessage(kConversionErrorMessage,
@@ -394,7 +400,7 @@ void PreferenceEventRouter::OnPrefChanged(PrefService* pref_service,
}
std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
- dict->Set(keys::kValue, transformed_value);
+ dict->Set(keys::kValue, std::move(transformed_value));
if (incognito) {
ExtensionPrefs* ep = ExtensionPrefs::Get(profile_);
dict->SetBoolean(keys::kIncognitoSpecific,
@@ -443,7 +449,7 @@ void PreferenceAPIBase::SetExtensionControlledPref(
base::DictionaryValue* preference = update.Get();
if (!preference)
preference = update.Create();
- preference->SetWithoutPathExpansion(pref_key, value->DeepCopy());
+ preference->SetWithoutPathExpansion(pref_key, value->CreateDeepCopy());
}
extension_pref_value_map()->SetExtensionPref(
extension_id, pref_key, scope, value);
@@ -630,7 +636,7 @@ ExtensionFunction::ResponseAction GetPreferenceFunction::Run() {
// Retrieve pref value.
PrefTransformerInterface* transformer =
PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref);
- base::Value* transformed_value =
+ std::unique_ptr<base::Value> transformed_value =
transformer->BrowserToExtensionPref(pref->GetValue());
if (!transformed_value) {
// TODO(devlin): Can this happen? When? Should it be an error, or a bad
@@ -640,7 +646,7 @@ ExtensionFunction::ResponseAction GetPreferenceFunction::Run() {
pref->name());
return RespondNow(Error(kUnknownErrorDoNotUse));
}
- result->Set(keys::kValue, transformed_value);
+ result->Set(keys::kValue, std::move(transformed_value));
// Retrieve incognito status.
if (incognito) {
« 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