Index: components/cronet/ios/cronet_environment.cc |
diff --git a/components/cronet/ios/cronet_environment.cc b/components/cronet/ios/cronet_environment.cc |
index 292b4a3c0622d77dd9bb01d3f155499334aa2591..cc824f087086f7e3d939d332472060ec42e8d091 100644 |
--- a/components/cronet/ios/cronet_environment.cc |
+++ b/components/cronet/ios/cronet_environment.cc |
@@ -21,6 +21,7 @@ |
#include "base/path_service.h" |
#include "base/synchronization/waitable_event.h" |
#include "base/threading/worker_pool.h" |
+#include "components/cronet/histogram_manager.h" |
#include "components/cronet/ios/version.h" |
#include "components/prefs/json_pref_store.h" |
#include "components/prefs/pref_filter.h" |
@@ -57,6 +58,33 @@ net::NetworkChangeNotifier* g_network_change_notifier = nullptr; |
// MessageLoop on the main thread. |
base::MessageLoop* g_main_message_loop = nullptr; |
+// Request context getter for Cronet. |
+class CronetURLRequestContextGetter : public net::URLRequestContextGetter { |
+ public: |
+ CronetURLRequestContextGetter( |
+ cronet::CronetEnvironment* environment, |
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) |
+ : environment_(environment), task_runner_(task_runner) {} |
+ |
+ net::URLRequestContext* GetURLRequestContext() override { |
+ DCHECK(environment_); |
+ return environment_->GetURLRequestContext(); |
+ } |
+ |
+ scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() |
+ const override { |
+ return task_runner_; |
+ } |
+ |
+ private: |
+ // Must be called on the IO thread. |
+ ~CronetURLRequestContextGetter() override {} |
+ |
+ cronet::CronetEnvironment* environment_; |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
+ DISALLOW_COPY_AND_ASSIGN(CronetURLRequestContextGetter); |
+}; |
+ |
} // namespace |
namespace cronet { |
@@ -81,6 +109,11 @@ net::URLRequestContext* CronetEnvironment::GetURLRequestContext() const { |
return main_context_.get(); |
} |
+net::URLRequestContextGetter* CronetEnvironment::GetURLRequestContextGetter() |
+ const { |
+ return main_context_getter_.get(); |
+} |
+ |
// static |
void CronetEnvironment::Initialize() { |
// DCHECK_EQ([NSThread currentThread], [NSThread mainThread]); |
@@ -216,10 +249,8 @@ void CronetEnvironment::Start() { |
proxy_config_service_ = net::ProxyService::CreateSystemProxyConfigService( |
network_io_thread_->task_runner(), nullptr); |
- |
-#if defined(USE_NSS_CERTS) |
- net::SetURLRequestContextForNSSHttpIO(main_context_.get()); |
-#endif |
+ main_context_getter_ = new CronetURLRequestContextGetter( |
+ this, network_io_thread_->task_runner()); |
base::subtle::MemoryBarrier(); |
PostToNetworkThread(FROM_HERE, |
base::Bind(&CronetEnvironment::InitializeOnNetworkThread, |
@@ -228,9 +259,6 @@ void CronetEnvironment::Start() { |
CronetEnvironment::~CronetEnvironment() { |
// net::HTTPProtocolHandlerDelegate::SetInstance(nullptr); |
-#if defined(USE_NSS_CERTS) |
- net::SetURLRequestContextForNSSHttpIO(nullptr); |
-#endif |
} |
void CronetEnvironment::InitializeOnNetworkThread() { |
@@ -350,4 +378,12 @@ std::string CronetEnvironment::user_agent() { |
return user_agent_settings->GetUserAgent(); |
} |
+std::vector<uint8_t> CronetEnvironment::GetHistogramDeltas() { |
+ base::StatisticsRecorder::Initialize(); |
+ std::vector<uint8_t> data; |
+ if (!HistogramManager::GetInstance()->GetDeltas(&data)) |
+ return std::vector<uint8_t>(); |
+ return data; |
+} |
+ |
} // namespace cronet |