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

Side by Side Diff: components/cronet/android/cronet_url_request_context_adapter.cc

Issue 726013002: [Cronet] Hook up library loader, system proxy and network change notifier to async api. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compilation error. Created 5 years, 10 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/android/cronet_url_request_context_adapter.h" 5 #include "components/cronet/android/cronet_url_request_context_adapter.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_util.h" 8 #include "base/files/file_util.h"
9 #include "base/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
10 #include "components/cronet/url_request_context_config.h" 10 #include "components/cronet/url_request_context_config.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 return false; 101 return false;
102 } 102 }
103 103
104 DISALLOW_COPY_AND_ASSIGN(BasicNetworkDelegate); 104 DISALLOW_COPY_AND_ASSIGN(BasicNetworkDelegate);
105 }; 105 };
106 106
107 } // namespace 107 } // namespace
108 108
109 namespace cronet { 109 namespace cronet {
110 110
111 CronetURLRequestContextAdapter::CronetURLRequestContextAdapter() 111 CronetURLRequestContextAdapter::CronetURLRequestContextAdapter(
112 : default_load_flags_(0) { 112 scoped_ptr<URLRequestContextConfig> context_config)
113 : network_thread_(new base::Thread("network")),
114 context_config_(context_config.Pass()),
115 is_context_initialized_(false),
116 default_load_flags_(net::LOAD_NORMAL) {
117 base::Thread::Options options;
118 options.message_loop_type = base::MessageLoop::TYPE_IO;
119 network_thread_->StartWithOptions(options);
113 } 120 }
114 121
115 CronetURLRequestContextAdapter::~CronetURLRequestContextAdapter() { 122 CronetURLRequestContextAdapter::~CronetURLRequestContextAdapter() {
116 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); 123 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
117 StopNetLogOnNetworkThread(); 124 StopNetLogOnNetworkThread();
118 } 125 }
119 126
120 void CronetURLRequestContextAdapter::Initialize( 127 void CronetURLRequestContextAdapter::InitRequestContextOnMainThread(
121 scoped_ptr<URLRequestContextConfig> config,
122 const base::Closure& java_init_network_thread) { 128 const base::Closure& java_init_network_thread) {
123 network_thread_ = new base::Thread("network"); 129 proxy_config_service_.reset(net::ProxyService::CreateSystemProxyConfigService(
124 base::Thread::Options options; 130 GetNetworkTaskRunner(), nullptr));
125 options.message_loop_type = base::MessageLoop::TYPE_IO;
126 network_thread_->StartWithOptions(options);
127
128 GetNetworkTaskRunner()->PostTask( 131 GetNetworkTaskRunner()->PostTask(
129 FROM_HERE, 132 FROM_HERE,
130 base::Bind(&CronetURLRequestContextAdapter::InitializeOnNetworkThread, 133 base::Bind(&CronetURLRequestContextAdapter::InitializeOnNetworkThread,
131 base::Unretained(this), 134 base::Unretained(this),
132 Passed(&config), 135 Passed(&context_config_),
133 java_init_network_thread)); 136 java_init_network_thread));
134 } 137 }
135 138
136 void CronetURLRequestContextAdapter::InitializeOnNetworkThread( 139 void CronetURLRequestContextAdapter::InitializeOnNetworkThread(
137 scoped_ptr<URLRequestContextConfig> config, 140 scoped_ptr<URLRequestContextConfig> config,
138 const base::Closure& java_init_network_thread) { 141 const base::Closure& java_init_network_thread) {
139 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); 142 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
143 DCHECK(!is_context_initialized_);
140 // TODO(mmenke): Add method to have the builder enable SPDY. 144 // TODO(mmenke): Add method to have the builder enable SPDY.
141 net::URLRequestContextBuilder context_builder; 145 net::URLRequestContextBuilder context_builder;
142 context_builder.set_network_delegate(new BasicNetworkDelegate()); 146 context_builder.set_network_delegate(new BasicNetworkDelegate());
143 context_builder.set_proxy_config_service( 147 context_builder.set_proxy_config_service(
144 new net::ProxyConfigServiceFixed(net::ProxyConfig())); 148 new net::ProxyConfigServiceFixed(net::ProxyConfig()));
145 config->ConfigureURLRequestContextBuilder(&context_builder); 149 config->ConfigureURLRequestContextBuilder(&context_builder);
146 150
147 context_.reset(context_builder.Build()); 151 context_.reset(context_builder.Build());
148 152
149 default_load_flags_ = net::LOAD_DO_NOT_SAVE_COOKIES | 153 default_load_flags_ = net::LOAD_DO_NOT_SAVE_COOKIES |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 quic_hint.port); 193 quic_hint.port);
190 context_->http_server_properties()->SetAlternateProtocol( 194 context_->http_server_properties()->SetAlternateProtocol(
191 quic_hint_host_port_pair, 195 quic_hint_host_port_pair,
192 static_cast<uint16>(quic_hint.alternate_port), 196 static_cast<uint16>(quic_hint.alternate_port),
193 net::AlternateProtocol::QUIC, 197 net::AlternateProtocol::QUIC,
194 1.0f); 198 1.0f);
195 } 199 }
196 } 200 }
197 201
198 java_init_network_thread.Run(); 202 java_init_network_thread.Run();
203
204 is_context_initialized_ = true;
205 while (!tasks_waiting_for_context_.empty()) {
206 tasks_waiting_for_context_.front().Run();
207 tasks_waiting_for_context_.pop();
208 }
199 } 209 }
200 210
201 void CronetURLRequestContextAdapter::Destroy() { 211 void CronetURLRequestContextAdapter::Destroy() {
202 DCHECK(!GetNetworkTaskRunner()->BelongsToCurrentThread()); 212 DCHECK(!GetNetworkTaskRunner()->BelongsToCurrentThread());
203 // Stick network_thread_ in a local, as |this| may be destroyed from the 213 // Stick network_thread_ in a local, as |this| may be destroyed from the
204 // network thread before delete network_thread is called. 214 // network thread before delete network_thread is called.
205 base::Thread* network_thread = network_thread_; 215 base::Thread* network_thread = network_thread_;
206 GetNetworkTaskRunner()->DeleteSoon(FROM_HERE, this); 216 GetNetworkTaskRunner()->DeleteSoon(FROM_HERE, this);
207 // Deleting thread stops it after all tasks are completed. 217 // Deleting thread stops it after all tasks are completed.
208 delete network_thread; 218 delete network_thread;
209 } 219 }
210 220
211 net::URLRequestContext* CronetURLRequestContextAdapter::GetURLRequestContext() { 221 net::URLRequestContext* CronetURLRequestContextAdapter::GetURLRequestContext() {
212 if (!context_) { 222 if (!context_) {
213 LOG(ERROR) << "URLRequestContext is not set up"; 223 LOG(ERROR) << "URLRequestContext is not set up";
214 } 224 }
215 return context_.get(); 225 return context_.get();
216 } 226 }
217 227
228 void CronetURLRequestContextAdapter::PostTaskToNetworkThread(
229 const tracked_objects::Location& posted_from,
230 const base::Closure& callback) {
231 GetNetworkTaskRunner()->PostTask(
232 posted_from, base::Bind(&CronetURLRequestContextAdapter::
233 RunTaskAfterContextInitOnNetworkThread,
234 base::Unretained(this), callback));
235 }
236
237 void CronetURLRequestContextAdapter::RunTaskAfterContextInitOnNetworkThread(
238 const base::Closure& task_to_run_after_context_init) {
239 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
240 if (is_context_initialized_) {
241 DCHECK(tasks_waiting_for_context_.empty());
242 task_to_run_after_context_init.Run();
243 return;
244 }
245 tasks_waiting_for_context_.push(task_to_run_after_context_init);
246 }
247
248 bool CronetURLRequestContextAdapter::IsOnNetworkThread() const {
249 return GetNetworkTaskRunner()->BelongsToCurrentThread();
250 }
251
218 scoped_refptr<base::SingleThreadTaskRunner> 252 scoped_refptr<base::SingleThreadTaskRunner>
219 CronetURLRequestContextAdapter::GetNetworkTaskRunner() const { 253 CronetURLRequestContextAdapter::GetNetworkTaskRunner() const {
220 return network_thread_->task_runner(); 254 return network_thread_->task_runner();
221 } 255 }
222 256
223 void CronetURLRequestContextAdapter::StartNetLogToFile( 257 void CronetURLRequestContextAdapter::StartNetLogToFile(
224 const std::string& file_name) { 258 const std::string& file_name) {
225 GetNetworkTaskRunner()->PostTask( 259 GetNetworkTaskRunner()->PostTask(
226 FROM_HERE, 260 FROM_HERE,
227 base::Bind( 261 base::Bind(
(...skipping 28 matching lines...) Expand all
256 290
257 void CronetURLRequestContextAdapter::StopNetLogOnNetworkThread() { 291 void CronetURLRequestContextAdapter::StopNetLogOnNetworkThread() {
258 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); 292 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
259 if (net_log_logger_) { 293 if (net_log_logger_) {
260 net_log_logger_->StopObserving(); 294 net_log_logger_->StopObserving();
261 net_log_logger_.reset(); 295 net_log_logger_.reset();
262 } 296 }
263 } 297 }
264 298
265 } // namespace cronet 299 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698