Chromium Code Reviews| 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..a9d367a4a2615106d480b45600f8746c911ac6f9 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::Value& value) override { |
|
mef
2016/01/23 18:19:00
Why is SetServerProperties taking base::Value, but
brettw
2016/01/25 20:47:09
Good idea, done.
|
| + 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_; |
|
mef
2016/01/23 18:19:00
const?
|
| + 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( |