Index: components/cronet/android/cronet_url_request_context_adapter.cc |
diff --git a/components/cronet/android/cronet_url_request_context_adapter.cc b/components/cronet/android/cronet_url_request_context_adapter.cc |
index d6106afd7a83acb42a86a0784873a58c1f9c2932..ef1fde084ad1346a905d2721fd05d1d4c5109250 100644 |
--- a/components/cronet/android/cronet_url_request_context_adapter.cc |
+++ b/components/cronet/android/cronet_url_request_context_adapter.cc |
@@ -21,6 +21,7 @@ |
#include "base/memory/scoped_vector.h" |
#include "base/message_loop/message_loop.h" |
#include "base/metrics/statistics_recorder.h" |
+#include "base/prefs/pref_change_registrar.h" |
#include "base/prefs/pref_filter.h" |
#include "base/prefs/pref_registry_simple.h" |
#include "base/prefs/pref_service.h" |
@@ -55,6 +56,44 @@ namespace { |
const char kHttpServerProperties[] = "net.http_server_properties"; |
+// Connects the HttpServerPropertiesManager's storage to the prefs. |
+class PrefServiceAdapter |
+ : public net::HttpServerPropertiesManager::PrefDelegate { |
+ public: |
+ explicit PrefServiceAdapter(PrefService* pref_service) |
+ : pref_service_(pref_service), path_(kHttpServerProperties) { |
+ pref_change_registrar_.Init(pref_service_); |
+ } |
+ |
+ ~PrefServiceAdapter() override {} |
+ |
+ // PrefDelegate implementation. |
+ bool HasServerProperties() override { |
+ return pref_service_->HasPrefPath(path_); |
+ } |
+ const base::DictionaryValue& GetServerProperties() const override { |
+ // Guaranteed not to return null when the pref is registered |
+ // (RegisterProfilePrefs was called). |
+ return *pref_service_->GetDictionary(path_); |
+ } |
+ void SetServerProperties(const base::DictionaryValue& value) override { |
+ return pref_service_->Set(path_, value); |
+ } |
+ void StartListeningForUpdates(const base::Closure& callback) override { |
+ pref_change_registrar_.Add(path_, callback); |
+ } |
+ void StopListeningForUpdates() override { |
+ pref_change_registrar_.RemoveAll(); |
+ } |
+ |
+ private: |
+ PrefService* pref_service_; |
+ std::string path_; |
+ PrefChangeRegistrar pref_change_registrar_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PrefServiceAdapter); |
+}; |
+ |
class BasicNetworkDelegate : public net::NetworkDelegateImpl { |
public: |
BasicNetworkDelegate() {} |
@@ -313,9 +352,9 @@ void CronetURLRequestContextAdapter::InitializeOnNetworkThread( |
pref_service_ = factory.Create(registry.get()); |
scoped_ptr<net::HttpServerPropertiesManager> http_server_properties_manager( |
- new net::HttpServerPropertiesManager(pref_service_.get(), |
- kHttpServerProperties, |
- GetNetworkTaskRunner())); |
+ new net::HttpServerPropertiesManager( |
+ new PrefServiceAdapter(pref_service_.get()), |
+ GetNetworkTaskRunner())); |
http_server_properties_manager->InitializeOnNetworkThread(); |
http_server_properties_manager_ = http_server_properties_manager.get(); |
context_builder.SetHttpServerProperties( |