Index: chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_io_data.cc |
diff --git a/chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_io_data.cc b/chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_io_data.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c24a86883b5516fd4de19b1bb573a8c45fb593d5 |
--- /dev/null |
+++ b/chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_io_data.cc |
@@ -0,0 +1,134 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_io_data.h" |
+ |
+#include "base/bind.h" |
+#include "base/time/time.h" |
+#include "chrome/browser/net/chrome_net_log.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/spdyproxy/data_reduction_proxy_chrome_settings_factory.h" |
+#include "chrome/browser/prefs/pref_service_syncable.h" |
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h" |
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_statistics_prefs.h" |
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_event_store.h" |
+ |
+scoped_ptr<data_reduction_proxy::DataReductionProxyIOData> |
+CreateDataReductionProxyChromeIOData( |
+ ChromeNetLog* net_log, |
+ content::BrowserContext* browser_context, |
+ PrefServiceSyncable* prefs, |
+ const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, |
+ const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner, |
+ DataReductionProxyChromeConfigurator** configurator) { |
mmenke
2014/12/17 21:37:22
This still seems like too much code hooking togeth
bengr
2014/12/19 20:05:58
After my next CL, the event store and the configur
|
+ DCHECK(net_log); |
+ DCHECK(prefs); |
+ DCHECK(browser_context); |
+ DataReductionProxyChromeSettings* data_reduction_proxy_chrome_settings = |
+ DataReductionProxyChromeSettingsFactory::GetForBrowserContext( |
+ browser_context); |
+ |
+#if defined(OS_ANDROID) || defined(OS_IOS) |
+ // On mobile we write data reduction proxy prefs directly to the pref service. |
+ // On desktop we store data reduction proxy prefs in memory, writing to disk |
+ // every 60 minutes and on termination. Shutdown hooks must be added for |
+ // Android and iOS in order for non-zero delays to be supported. |
+ // (http://crbug.com/408264) |
+ base::TimeDelta commit_delay = base::TimeDelta(); |
+#else |
+ base::TimeDelta commit_delay = base::TimeDelta::FromMinutes(60); |
+#endif |
+ |
+ // The event_store is used by DataReductionProxyChromeSettings, configurator, |
+ // and ProfileIOData. Ownership is passed to the latter via |
+ // ProfileIOData::Handle, which is only destroyed after |
+ // BrowserContextKeyedServices, including DataReductionProxyChromeSettings. |
+ data_reduction_proxy::DataReductionProxyEventStore* |
+ data_reduction_proxy_event_store = |
+ new data_reduction_proxy::DataReductionProxyEventStore( |
+ ui_task_runner); |
+ |
+ // 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. |
+ // Retain a raw pointer to use for initialization of data reduction proxy |
+ // settings after ownership is passed. |
+ DataReductionProxyChromeConfigurator* |
+ data_reduction_proxy_chrome_configurator = |
+ new DataReductionProxyChromeConfigurator( |
+ prefs, |
+ io_task_runner, |
+ net_log, data_reduction_proxy_event_store); |
+ |
+ data_reduction_proxy::DataReductionProxyStatisticsPrefs* |
+ data_reduction_proxy_statistics_prefs = |
+ new data_reduction_proxy::DataReductionProxyStatisticsPrefs( |
+ prefs, ui_task_runner, |
+ commit_delay); |
+ |
+ scoped_ptr<data_reduction_proxy::DataReductionProxyIOData> |
+ data_reduction_proxy_data_io_data( |
+ new data_reduction_proxy::DataReductionProxyIOData( |
+ DataReductionProxyChromeSettings::GetClient(), |
+ data_reduction_proxy_chrome_settings->params()->Clone(), |
+ make_scoped_ptr(data_reduction_proxy_chrome_configurator), |
+ make_scoped_ptr(data_reduction_proxy_statistics_prefs), |
+ make_scoped_ptr(data_reduction_proxy_event_store), |
+ base::Bind( |
+ &DataReductionProxyChromeConfigurator:: |
+ GetProxyConfigOnIOThread, |
+ base::Unretained(data_reduction_proxy_chrome_configurator)), |
mmenke
2014/12/17 21:37:22
Passing a DataReductionProxyConfigurator and a bou
bengr
2014/12/19 20:05:57
Done.
|
+ base::Bind( |
+ &data_reduction_proxy::DataReductionProxySettings:: |
+ SetUnreachable, |
+ base::Unretained(data_reduction_proxy_chrome_settings)), |
mmenke
2014/12/17 21:37:22
+4 indent
mmenke
2014/12/17 21:37:22
Again, should just pass in the settings, and have
bengr
2014/12/19 20:05:57
Done.
bengr
2014/12/19 20:05:57
Done.
|
+ io_task_runner, |
+ ui_task_runner)); |
+ data_reduction_proxy_chrome_settings->SetDataReductionProxyStatisticsPrefs( |
+ data_reduction_proxy_statistics_prefs); |
+ |
+ *configurator = data_reduction_proxy_chrome_configurator; |
+ return data_reduction_proxy_data_io_data.Pass(); |
+} |
+ |
+scoped_ptr<data_reduction_proxy::DataReductionProxyIOData> |
+CreateDataReductionProxyChromeIODataForSystem( |
+ ChromeNetLog* net_log, |
+ PrefServiceSyncable* prefs, |
+ const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, |
+ const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner) { |
+ // TODO(kundaji): Move flags initialization to DataReductionProxyParams and |
+ // merge with flag initialization in |
+ // data_reduction_proxy_chrome_settings_factory.cc. |
+ int flags = data_reduction_proxy::DataReductionProxyParams::kAllowed | |
+ data_reduction_proxy::DataReductionProxyParams::kFallbackAllowed | |
+ data_reduction_proxy::DataReductionProxyParams::kAlternativeAllowed; |
+ if (data_reduction_proxy::DataReductionProxyParams:: |
+ IsIncludedInPromoFieldTrial()) { |
+ flags |= data_reduction_proxy::DataReductionProxyParams::kPromoAllowed; |
+ } |
+ if (data_reduction_proxy::DataReductionProxyParams:: |
+ IsIncludedInHoldbackFieldTrial()) { |
+ flags |= data_reduction_proxy::DataReductionProxyParams::kHoldback; |
+ } |
+ scoped_ptr<data_reduction_proxy::DataReductionProxyIOData> |
+ data_reduction_proxy_data_io_data( |
+ new data_reduction_proxy::DataReductionProxyIOData( |
+ DataReductionProxyChromeSettings::GetClient(), |
+ make_scoped_ptr( |
+ new data_reduction_proxy::DataReductionProxyParams(flags)), |
+ scoped_ptr< |
+ data_reduction_proxy::DataReductionProxyConfigurator>(), |
+ scoped_ptr< |
+ data_reduction_proxy::DataReductionProxyStatisticsPrefs>(), |
+ scoped_ptr<data_reduction_proxy::DataReductionProxyEventStore>(), |
+ data_reduction_proxy::DataReductionProxyNetworkDelegate:: |
+ ProxyConfigGetter(), |
+ base::Callback<void(bool)>(), |
+ io_task_runner, |
+ ui_task_runner)); |
+ return data_reduction_proxy_data_io_data.Pass(); |
+} |