| OLD | NEW |
| 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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 return false; | 100 return false; |
| 101 } | 101 } |
| 102 | 102 |
| 103 DISALLOW_COPY_AND_ASSIGN(BasicNetworkDelegate); | 103 DISALLOW_COPY_AND_ASSIGN(BasicNetworkDelegate); |
| 104 }; | 104 }; |
| 105 | 105 |
| 106 } // namespace | 106 } // namespace |
| 107 | 107 |
| 108 namespace cronet { | 108 namespace cronet { |
| 109 | 109 |
| 110 CronetURLRequestContextAdapter::CronetURLRequestContextAdapter() { | 110 CronetURLRequestContextAdapter::CronetURLRequestContextAdapter() |
| 111 : is_context_initialized_(false) { |
| 112 network_thread_ = new base::Thread("network"); |
| 113 base::Thread::Options options; |
| 114 options.message_loop_type = base::MessageLoop::TYPE_IO; |
| 115 network_thread_->StartWithOptions(options); |
| 111 } | 116 } |
| 112 | 117 |
| 113 CronetURLRequestContextAdapter::~CronetURLRequestContextAdapter() { | 118 CronetURLRequestContextAdapter::~CronetURLRequestContextAdapter() { |
| 114 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); | 119 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); |
| 115 StopNetLogOnNetworkThread(); | 120 StopNetLogOnNetworkThread(); |
| 116 } | 121 } |
| 117 | 122 |
| 118 void CronetURLRequestContextAdapter::Initialize( | 123 void CronetURLRequestContextAdapter::InitRequestContextOnMainThread( |
| 119 scoped_ptr<URLRequestContextConfig> config, | 124 scoped_ptr<URLRequestContextConfig> config, |
| 120 const base::Closure& java_init_network_thread) { | 125 const base::Closure& java_init_network_thread) { |
| 121 network_thread_ = new base::Thread("network"); | 126 proxy_config_service_.reset(net::ProxyService::CreateSystemProxyConfigService( |
| 122 base::Thread::Options options; | 127 GetNetworkTaskRunner(), NULL)); |
| 123 options.message_loop_type = base::MessageLoop::TYPE_IO; | |
| 124 network_thread_->StartWithOptions(options); | |
| 125 | |
| 126 GetNetworkTaskRunner()->PostTask( | 128 GetNetworkTaskRunner()->PostTask( |
| 127 FROM_HERE, | 129 FROM_HERE, |
| 128 base::Bind(&CronetURLRequestContextAdapter::InitializeOnNetworkThread, | 130 base::Bind(&CronetURLRequestContextAdapter::InitializeOnNetworkThread, |
| 129 base::Unretained(this), | 131 base::Unretained(this), |
| 130 Passed(&config), | 132 Passed(&config), |
| 131 java_init_network_thread)); | 133 java_init_network_thread)); |
| 132 } | 134 } |
| 133 | 135 |
| 134 void CronetURLRequestContextAdapter::InitializeOnNetworkThread( | 136 void CronetURLRequestContextAdapter::InitializeOnNetworkThread( |
| 135 scoped_ptr<URLRequestContextConfig> config, | 137 scoped_ptr<URLRequestContextConfig> config, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 quic_hint.port); | 184 quic_hint.port); |
| 183 context_->http_server_properties()->SetAlternateProtocol( | 185 context_->http_server_properties()->SetAlternateProtocol( |
| 184 quic_hint_host_port_pair, | 186 quic_hint_host_port_pair, |
| 185 static_cast<uint16>(quic_hint.alternate_port), | 187 static_cast<uint16>(quic_hint.alternate_port), |
| 186 net::AlternateProtocol::QUIC, | 188 net::AlternateProtocol::QUIC, |
| 187 1.0f); | 189 1.0f); |
| 188 } | 190 } |
| 189 } | 191 } |
| 190 | 192 |
| 191 java_init_network_thread.Run(); | 193 java_init_network_thread.Run(); |
| 194 |
| 195 is_context_initialized_ = true; |
| 196 while (!tasks_waiting_for_context_.empty()) { |
| 197 tasks_waiting_for_context_.front().Run(); |
| 198 tasks_waiting_for_context_.pop(); |
| 199 } |
| 192 } | 200 } |
| 193 | 201 |
| 194 void CronetURLRequestContextAdapter::Destroy() { | 202 void CronetURLRequestContextAdapter::Destroy() { |
| 195 DCHECK(!GetNetworkTaskRunner()->BelongsToCurrentThread()); | 203 DCHECK(!GetNetworkTaskRunner()->BelongsToCurrentThread()); |
| 196 // Stick network_thread_ in a local, as |this| may be destroyed from the | 204 // Stick network_thread_ in a local, as |this| may be destroyed from the |
| 197 // network thread before delete network_thread is called. | 205 // network thread before delete network_thread is called. |
| 198 base::Thread* network_thread = network_thread_; | 206 base::Thread* network_thread = network_thread_; |
| 199 GetNetworkTaskRunner()->DeleteSoon(FROM_HERE, this); | 207 GetNetworkTaskRunner()->DeleteSoon(FROM_HERE, this); |
| 200 // Deleting thread stops it after all tasks are completed. | 208 // Deleting thread stops it after all tasks are completed. |
| 201 delete network_thread; | 209 delete network_thread; |
| 202 } | 210 } |
| 203 | 211 |
| 204 net::URLRequestContext* CronetURLRequestContextAdapter::GetURLRequestContext() { | 212 net::URLRequestContext* CronetURLRequestContextAdapter::GetURLRequestContext() { |
| 205 if (!context_) { | 213 if (!context_) { |
| 206 LOG(ERROR) << "URLRequestContext is not set up"; | 214 LOG(ERROR) << "URLRequestContext is not set up"; |
| 207 } | 215 } |
| 208 return context_.get(); | 216 return context_.get(); |
| 209 } | 217 } |
| 210 | 218 |
| 219 void CronetURLRequestContextAdapter::PostTaskToNetworkThread( |
| 220 const tracked_objects::Location& posted_from, |
| 221 const RunAfterContextInitTask& callback) { |
| 222 GetNetworkTaskRunner()->PostTask( |
| 223 posted_from, base::Bind(&CronetURLRequestContextAdapter:: |
| 224 RunTaskAfterContextInitOnNetworkThread, |
| 225 base::Unretained(this), callback)); |
| 226 } |
| 227 |
| 228 void CronetURLRequestContextAdapter::RunTaskAfterContextInitOnNetworkThread( |
| 229 const RunAfterContextInitTask& callback) { |
| 230 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); |
| 231 if (is_context_initialized_) { |
| 232 callback.Run(); |
| 233 return; |
| 234 } |
| 235 tasks_waiting_for_context_.push(callback); |
| 236 } |
| 237 |
| 211 scoped_refptr<base::SingleThreadTaskRunner> | 238 scoped_refptr<base::SingleThreadTaskRunner> |
| 212 CronetURLRequestContextAdapter::GetNetworkTaskRunner() const { | 239 CronetURLRequestContextAdapter::GetNetworkTaskRunner() const { |
| 213 return network_thread_->task_runner(); | 240 return network_thread_->task_runner(); |
| 214 } | 241 } |
| 215 | 242 |
| 216 void CronetURLRequestContextAdapter::StartNetLogToFile( | 243 void CronetURLRequestContextAdapter::StartNetLogToFile( |
| 217 const std::string& file_name) { | 244 const std::string& file_name) { |
| 218 GetNetworkTaskRunner()->PostTask( | 245 GetNetworkTaskRunner()->PostTask( |
| 219 FROM_HERE, | 246 FROM_HERE, |
| 220 base::Bind( | 247 base::Bind( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 249 | 276 |
| 250 void CronetURLRequestContextAdapter::StopNetLogOnNetworkThread() { | 277 void CronetURLRequestContextAdapter::StopNetLogOnNetworkThread() { |
| 251 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); | 278 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); |
| 252 if (net_log_logger_) { | 279 if (net_log_logger_) { |
| 253 net_log_logger_->StopObserving(); | 280 net_log_logger_->StopObserving(); |
| 254 net_log_logger_.reset(); | 281 net_log_logger_.reset(); |
| 255 } | 282 } |
| 256 } | 283 } |
| 257 | 284 |
| 258 } // namespace cronet | 285 } // namespace cronet |
| OLD | NEW |