| 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) {
|
|
|