| Index: chrome/browser/profiles/profile_impl.cc | 
| diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc | 
| index bd6fa639f1b53acd868d2e6f67858967bb050fc0..4b18e276b6aba8fc8033bc89171811f83394c50f 100644 | 
| --- a/chrome/browser/profiles/profile_impl.cc | 
| +++ b/chrome/browser/profiles/profile_impl.cc | 
| @@ -45,6 +45,7 @@ | 
| #include "chrome/browser/net/predictor.h" | 
| #include "chrome/browser/net/pref_proxy_config_tracker.h" | 
| #include "chrome/browser/net/proxy_service_factory.h" | 
| +#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.h" | 
| #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h" | 
| #include "chrome/browser/net/ssl_config_service_manager.h" | 
| #include "chrome/browser/plugins/chrome_plugin_service_filter.h" | 
| @@ -115,7 +116,6 @@ | 
| #endif | 
|  | 
| #if defined(SPDY_PROXY_AUTH_ORIGIN) | 
| -#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.h" | 
| #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_factory.h" | 
| #include "components/data_reduction_proxy/browser/data_reduction_proxy_params.h" | 
| #include "components/data_reduction_proxy/browser/data_reduction_proxy_settings.h" | 
| @@ -632,6 +632,7 @@ void ProfileImpl::DoFinalInit() { | 
| base::Callback<void(bool)> data_reduction_proxy_unavailable; | 
| scoped_ptr<data_reduction_proxy::DataReductionProxyParams> | 
| data_reduction_proxy_params; | 
| +  scoped_ptr<DataReductionProxyChromeConfigurator> chrome_configurator; | 
| #if defined(SPDY_PROXY_AUTH_ORIGIN) | 
| DataReductionProxyChromeSettings* data_reduction_proxy_chrome_settings = | 
| DataReductionProxyChromeSettingsFactory::GetForBrowserContext(this); | 
| @@ -641,6 +642,18 @@ void ProfileImpl::DoFinalInit() { | 
| base::Bind( | 
| &data_reduction_proxy::DataReductionProxySettings::SetUnreachable, | 
| base::Unretained(data_reduction_proxy_chrome_settings)); | 
| +  // The configurator is used by DataReductionProxyChromeSettings and | 
| +  // ProfileIOData. Ownership is passed to the latter via ProfileIOData::Handle, | 
| +  // which is only destroyed after BrowserContextKeyedServices, | 
| +  // including DataReductionProxyChromeSettings. | 
| +  chrome_configurator.reset( | 
| +      new DataReductionProxyChromeConfigurator( | 
| +          prefs_.get(), | 
| +          BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO))); | 
| +  // Retain a raw pointer to use for initialization of data reduction proxy | 
| +  // settings after ownership is passed. | 
| +  DataReductionProxyChromeConfigurator* | 
| +      data_reduction_proxy_chrome_configurator = chrome_configurator.get(); | 
| #endif | 
|  | 
| // Make sure we initialize the ProfileIOData after everything else has been | 
| @@ -652,13 +665,12 @@ void ProfileImpl::DoFinalInit() { | 
| predictor_, session_cookie_mode, GetSpecialStoragePolicy(), | 
| CreateDomainReliabilityMonitor(), | 
| data_reduction_proxy_unavailable, | 
| +                chrome_configurator.Pass(), | 
| data_reduction_proxy_params.Pass()); | 
|  | 
| #if defined(SPDY_PROXY_AUTH_ORIGIN) | 
| -  scoped_ptr<data_reduction_proxy::DataReductionProxyConfigurator> | 
| -      configurator(new DataReductionProxyChromeConfigurator(prefs_.get())); | 
| data_reduction_proxy_chrome_settings->InitDataReductionProxySettings( | 
| -      configurator.Pass(), | 
| +      data_reduction_proxy_chrome_configurator, | 
| prefs_.get(), | 
| g_browser_process->local_state(), | 
| GetRequestContext()); | 
|  |