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 c4cf8a62d6943923af65dc37f7ae80a5ca614968..36b98ce1889b41b28a933ba57a7fcd13822123fc 100644 |
--- a/chrome/browser/extensions/api/preference/preference_api.cc |
+++ b/chrome/browser/extensions/api/preference/preference_api.cc |
@@ -20,6 +20,7 @@ |
#include "chrome/browser/extensions/api/preference/preference_helpers.h" |
#include "chrome/browser/extensions/api/proxy/proxy_api.h" |
#include "chrome/browser/extensions/extension_service.h" |
+#include "chrome/browser/net/prediction_options.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/common/pref_names.h" |
#include "components/translate/core/common/translate_pref_names.h" |
@@ -75,9 +76,7 @@ PrefMappingEntry kPrefMapping[] = { |
APIPermission::kPrivacy, APIPermission::kPrivacy}, |
{"hyperlinkAuditingEnabled", prefs::kEnableHyperlinkAuditing, |
APIPermission::kPrivacy, APIPermission::kPrivacy}, |
- {"networkPredictionEnabled", prefs::kNetworkPredictionEnabled, |
- APIPermission::kPrivacy, APIPermission::kPrivacy}, |
- {"networkPredictionOptions", prefs::kNetworkPredictionOptions, |
+ {"networkPredictionEnabled", prefs::kNetworkPredictionOptions, |
APIPermission::kPrivacy, APIPermission::kPrivacy}, |
{"passwordSavingEnabled", |
password_manager::prefs::kPasswordManagerSavingEnabled, |
@@ -158,6 +157,31 @@ class InvertBooleanTransformer : public PrefTransformerInterface { |
} |
}; |
+class NetworkPredictionTransformer : public PrefTransformerInterface { |
+ public: |
+ virtual base::Value* ExtensionToBrowserPref(const base::Value* extension_pref, |
+ std::string* error, |
+ bool* bad_message) override { |
+ bool bool_value = false; |
+ DCHECK(extension_pref->GetAsBoolean(&bool_value)); |
+ if (bool_value) { |
+ return new base::FundamentalValue( |
+ chrome_browser_net::NETWORK_PREDICTION_DEFAULT); |
+ } else { |
+ return new base::FundamentalValue( |
+ chrome_browser_net::NETWORK_PREDICTION_NEVER); |
+ } |
+ } |
+ |
+ virtual base::Value* BrowserToExtensionPref( |
+ const base::Value* browser_pref) override { |
+ int int_value = chrome_browser_net::NETWORK_PREDICTION_NEVER; |
+ DCHECK(browser_pref->GetAsInteger(&int_value)); |
+ return new base::FundamentalValue( |
+ int_value != chrome_browser_net::NETWORK_PREDICTION_NEVER); |
+ } |
+}; |
+ |
class PrefMapping { |
public: |
static PrefMapping* GetInstance() { |
@@ -223,6 +247,8 @@ class PrefMapping { |
RegisterPrefTransformer(prefs::kProxy, new ProxyPrefTransformer()); |
RegisterPrefTransformer(prefs::kBlockThirdPartyCookies, |
new InvertBooleanTransformer()); |
+ RegisterPrefTransformer(prefs::kNetworkPredictionOptions, |
+ new NetworkPredictionTransformer()); |
} |
~PrefMapping() { |
@@ -650,7 +676,6 @@ bool SetPreferenceFunction::RunSync() { |
CHECK(pref); |
// Validate new value. |
- EXTENSION_FUNCTION_VALIDATE(value->GetType() == pref->GetType()); |
PrefTransformerInterface* transformer = |
PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); |
std::string error; |
@@ -662,6 +687,7 @@ bool SetPreferenceFunction::RunSync() { |
bad_message_ = bad_message; |
return false; |
} |
+ EXTENSION_FUNCTION_VALIDATE(browser_pref_value->GetType() == pref->GetType()); |
// Validate also that the stored value can be converted back by the |
// transformer. |