Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: components/cronet/ios/cronet_environment.cc

Issue 2146643002: [Cronet] Integrate CrNet functionality into Cronet on iOS. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove prototype CronetEngine from this CL. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/cronet/ios/cronet_environment.h" 5 #include "components/cronet/ios/cronet_environment.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/at_exit.h" 9 #include "base/at_exit.h"
10 #include "base/atomicops.h" 10 #include "base/atomicops.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/feature_list.h" 12 #include "base/feature_list.h"
13 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
14 #include "base/files/file_util.h" 14 #include "base/files/file_util.h"
15 #include "base/files/scoped_file.h" 15 #include "base/files/scoped_file.h"
16 #include "base/json/json_writer.h" 16 #include "base/json/json_writer.h"
17 #include "base/mac/bind_objc_block.h" 17 #include "base/mac/bind_objc_block.h"
18 #include "base/mac/foundation_util.h" 18 #include "base/mac/foundation_util.h"
19 #include "base/macros.h" 19 #include "base/macros.h"
20 #include "base/metrics/statistics_recorder.h" 20 #include "base/metrics/statistics_recorder.h"
21 #include "base/path_service.h" 21 #include "base/path_service.h"
22 #include "base/synchronization/waitable_event.h" 22 #include "base/synchronization/waitable_event.h"
23 #include "base/threading/worker_pool.h" 23 #include "base/threading/worker_pool.h"
24 #include "components/cronet/histogram_manager.h"
24 #include "components/cronet/ios/version.h" 25 #include "components/cronet/ios/version.h"
25 #include "components/prefs/json_pref_store.h" 26 #include "components/prefs/json_pref_store.h"
26 #include "components/prefs/pref_filter.h" 27 #include "components/prefs/pref_filter.h"
27 #include "net/base/net_errors.h" 28 #include "net/base/net_errors.h"
28 #include "net/base/network_change_notifier.h" 29 #include "net/base/network_change_notifier.h"
29 #include "net/cert/cert_verify_result.h" 30 #include "net/cert/cert_verify_result.h"
30 #include "net/cert/ct_policy_enforcer.h" 31 #include "net/cert/ct_policy_enforcer.h"
31 #include "net/cert/multi_log_ct_verifier.h" 32 #include "net/cert/multi_log_ct_verifier.h"
32 #include "net/dns/host_resolver.h" 33 #include "net/dns/host_resolver.h"
33 #include "net/dns/mapped_host_resolver.h" 34 #include "net/dns/mapped_host_resolver.h"
(...skipping 16 matching lines...) Expand all
50 #include "url/scheme_host_port.h" 51 #include "url/scheme_host_port.h"
51 #include "url/url_util.h" 52 #include "url/url_util.h"
52 53
53 namespace { 54 namespace {
54 55
55 base::AtExitManager* g_at_exit_ = nullptr; 56 base::AtExitManager* g_at_exit_ = nullptr;
56 net::NetworkChangeNotifier* g_network_change_notifier = nullptr; 57 net::NetworkChangeNotifier* g_network_change_notifier = nullptr;
57 // MessageLoop on the main thread. 58 // MessageLoop on the main thread.
58 base::MessageLoop* g_main_message_loop = nullptr; 59 base::MessageLoop* g_main_message_loop = nullptr;
59 60
61 // Request context getter for Cronet.
62 class CronetURLRequestContextGetter : public net::URLRequestContextGetter {
63 public:
64 CronetURLRequestContextGetter(
65 cronet::CronetEnvironment* environment,
66 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
67 : environment_(environment), task_runner_(task_runner) {}
68
69 net::URLRequestContext* GetURLRequestContext() override {
70 DCHECK(environment_);
71 return environment_->GetURLRequestContext();
72 }
73
74 scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner()
75 const override {
76 return task_runner_;
77 }
78
79 private:
80 // Must be called on the IO thread.
81 ~CronetURLRequestContextGetter() override {}
82
83 cronet::CronetEnvironment* environment_;
84 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
85 DISALLOW_COPY_AND_ASSIGN(CronetURLRequestContextGetter);
86 };
87
60 } // namespace 88 } // namespace
61 89
62 namespace cronet { 90 namespace cronet {
63 91
64 bool CronetEnvironment::IsOnNetworkThread() { 92 bool CronetEnvironment::IsOnNetworkThread() {
65 return network_io_thread_->task_runner()->BelongsToCurrentThread(); 93 return network_io_thread_->task_runner()->BelongsToCurrentThread();
66 } 94 }
67 95
68 void CronetEnvironment::PostToNetworkThread( 96 void CronetEnvironment::PostToNetworkThread(
69 const tracked_objects::Location& from_here, 97 const tracked_objects::Location& from_here,
70 const base::Closure& task) { 98 const base::Closure& task) {
71 network_io_thread_->task_runner()->PostTask(from_here, task); 99 network_io_thread_->task_runner()->PostTask(from_here, task);
72 } 100 }
73 101
74 void CronetEnvironment::PostToFileUserBlockingThread( 102 void CronetEnvironment::PostToFileUserBlockingThread(
75 const tracked_objects::Location& from_here, 103 const tracked_objects::Location& from_here,
76 const base::Closure& task) { 104 const base::Closure& task) {
77 file_user_blocking_thread_->message_loop()->PostTask(from_here, task); 105 file_user_blocking_thread_->message_loop()->PostTask(from_here, task);
78 } 106 }
79 107
80 net::URLRequestContext* CronetEnvironment::GetURLRequestContext() const { 108 net::URLRequestContext* CronetEnvironment::GetURLRequestContext() const {
81 return main_context_.get(); 109 return main_context_.get();
82 } 110 }
83 111
112 net::URLRequestContextGetter* CronetEnvironment::GetURLRequestContextGetter()
113 const {
114 return main_context_getter_.get();
115 }
116
84 // static 117 // static
85 void CronetEnvironment::Initialize() { 118 void CronetEnvironment::Initialize() {
86 // DCHECK_EQ([NSThread currentThread], [NSThread mainThread]); 119 // DCHECK_EQ([NSThread currentThread], [NSThread mainThread]);
87 // This method must be called once from the main thread. 120 // This method must be called once from the main thread.
88 if (!g_at_exit_) 121 if (!g_at_exit_)
89 g_at_exit_ = new base::AtExitManager; 122 g_at_exit_ = new base::AtExitManager;
90 123
91 url::Initialize(); 124 url::Initialize();
92 base::CommandLine::Init(0, nullptr); 125 base::CommandLine::Init(0, nullptr);
93 126
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 base::FilePath ssl_key_log_file; 242 base::FilePath ssl_key_log_file;
210 if (!PathService::Get(base::DIR_HOME, &ssl_key_log_file)) 243 if (!PathService::Get(base::DIR_HOME, &ssl_key_log_file))
211 return; 244 return;
212 net::SSLClientSocket::SetSSLKeyLogFile( 245 net::SSLClientSocket::SetSSLKeyLogFile(
213 ssl_key_log_file.Append(ssl_key_log_file_name_), 246 ssl_key_log_file.Append(ssl_key_log_file_name_),
214 file_thread_->task_runner()); 247 file_thread_->task_runner());
215 } 248 }
216 249
217 proxy_config_service_ = net::ProxyService::CreateSystemProxyConfigService( 250 proxy_config_service_ = net::ProxyService::CreateSystemProxyConfigService(
218 network_io_thread_->task_runner(), nullptr); 251 network_io_thread_->task_runner(), nullptr);
219 252 main_context_getter_ = new CronetURLRequestContextGetter(
220 #if defined(USE_NSS_CERTS) 253 this, network_io_thread_->task_runner());
221 net::SetURLRequestContextForNSSHttpIO(main_context_.get());
222 #endif
223 base::subtle::MemoryBarrier(); 254 base::subtle::MemoryBarrier();
224 PostToNetworkThread(FROM_HERE, 255 PostToNetworkThread(FROM_HERE,
225 base::Bind(&CronetEnvironment::InitializeOnNetworkThread, 256 base::Bind(&CronetEnvironment::InitializeOnNetworkThread,
226 base::Unretained(this))); 257 base::Unretained(this)));
227 } 258 }
228 259
229 CronetEnvironment::~CronetEnvironment() { 260 CronetEnvironment::~CronetEnvironment() {
230 // net::HTTPProtocolHandlerDelegate::SetInstance(nullptr); 261 // net::HTTPProtocolHandlerDelegate::SetInstance(nullptr);
231 #if defined(USE_NSS_CERTS)
232 net::SetURLRequestContextForNSSHttpIO(nullptr);
233 #endif
234 } 262 }
235 263
236 void CronetEnvironment::InitializeOnNetworkThread() { 264 void CronetEnvironment::InitializeOnNetworkThread() {
237 DCHECK(network_io_thread_->task_runner()->BelongsToCurrentThread()); 265 DCHECK(network_io_thread_->task_runner()->BelongsToCurrentThread());
238 base::FeatureList::InitializeInstance(std::string(), std::string()); 266 base::FeatureList::InitializeInstance(std::string(), std::string());
239 // TODO(mef): Use net:UrlRequestContextBuilder instead of manual build. 267 // TODO(mef): Use net:UrlRequestContextBuilder instead of manual build.
240 main_context_.reset(new net::URLRequestContext); 268 main_context_.reset(new net::URLRequestContext);
241 main_context_->set_net_log(net_log_.get()); 269 main_context_->set_net_log(net_log_.get());
242 std::string user_agent(user_agent_product_name_ + 270 std::string user_agent(user_agent_product_name_ +
243 " (iOS); Cronet/" CRONET_VERSION); 271 " (iOS); Cronet/" CRONET_VERSION);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 std::string CronetEnvironment::user_agent() { 371 std::string CronetEnvironment::user_agent() {
344 const net::HttpUserAgentSettings* user_agent_settings = 372 const net::HttpUserAgentSettings* user_agent_settings =
345 main_context_->http_user_agent_settings(); 373 main_context_->http_user_agent_settings();
346 if (!user_agent_settings) { 374 if (!user_agent_settings) {
347 return nullptr; 375 return nullptr;
348 } 376 }
349 377
350 return user_agent_settings->GetUserAgent(); 378 return user_agent_settings->GetUserAgent();
351 } 379 }
352 380
381 std::vector<uint8_t> CronetEnvironment::GetHistogramDeltas() {
382 base::StatisticsRecorder::Initialize();
383 std::vector<uint8_t> data;
384 if (!HistogramManager::GetInstance()->GetDeltas(&data))
385 return std::vector<uint8_t>();
386 return data;
387 }
388
353 } // namespace cronet 389 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698