| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "ios/chrome/browser/ios_chrome_io_thread.h" | 5 #include "ios/chrome/browser/ios_chrome_io_thread.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 | 198 |
| 199 class SystemURLRequestContextGetter : public net::URLRequestContextGetter { | 199 class SystemURLRequestContextGetter : public net::URLRequestContextGetter { |
| 200 public: | 200 public: |
| 201 explicit SystemURLRequestContextGetter(IOSChromeIOThread* io_thread); | 201 explicit SystemURLRequestContextGetter(IOSChromeIOThread* io_thread); |
| 202 | 202 |
| 203 // Implementation for net::UrlRequestContextGetter. | 203 // Implementation for net::UrlRequestContextGetter. |
| 204 net::URLRequestContext* GetURLRequestContext() override; | 204 net::URLRequestContext* GetURLRequestContext() override; |
| 205 scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() | 205 scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() |
| 206 const override; | 206 const override; |
| 207 | 207 |
| 208 // Tells the getter that the URLRequestContext is about to be shut down. |
| 209 void Shutdown(); |
| 210 |
| 208 protected: | 211 protected: |
| 209 ~SystemURLRequestContextGetter() override; | 212 ~SystemURLRequestContextGetter() override; |
| 210 | 213 |
| 211 private: | 214 private: |
| 212 IOSChromeIOThread* const | 215 IOSChromeIOThread* io_thread_; // Weak pointer, owned by ApplicationContext. |
| 213 io_thread_; // Weak pointer, owned by ApplicationContext. | |
| 214 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_; | 216 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_; |
| 215 | 217 |
| 216 base::debug::LeakTracker<SystemURLRequestContextGetter> leak_tracker_; | 218 base::debug::LeakTracker<SystemURLRequestContextGetter> leak_tracker_; |
| 217 }; | 219 }; |
| 218 | 220 |
| 219 SystemURLRequestContextGetter::SystemURLRequestContextGetter( | 221 SystemURLRequestContextGetter::SystemURLRequestContextGetter( |
| 220 IOSChromeIOThread* io_thread) | 222 IOSChromeIOThread* io_thread) |
| 221 : io_thread_(io_thread), | 223 : io_thread_(io_thread), |
| 222 network_task_runner_( | 224 network_task_runner_( |
| 223 web::WebThread::GetTaskRunnerForThread(web::WebThread::IO)) {} | 225 web::WebThread::GetTaskRunnerForThread(web::WebThread::IO)) {} |
| 224 | 226 |
| 225 SystemURLRequestContextGetter::~SystemURLRequestContextGetter() {} | 227 SystemURLRequestContextGetter::~SystemURLRequestContextGetter() {} |
| 226 | 228 |
| 227 net::URLRequestContext* SystemURLRequestContextGetter::GetURLRequestContext() { | 229 net::URLRequestContext* SystemURLRequestContextGetter::GetURLRequestContext() { |
| 228 DCHECK_CURRENTLY_ON(web::WebThread::IO); | 230 DCHECK_CURRENTLY_ON(web::WebThread::IO); |
| 231 if (!io_thread_) |
| 232 return nullptr; |
| 229 DCHECK(io_thread_->globals()->system_request_context.get()); | 233 DCHECK(io_thread_->globals()->system_request_context.get()); |
| 230 | 234 |
| 231 return io_thread_->globals()->system_request_context.get(); | 235 return io_thread_->globals()->system_request_context.get(); |
| 232 } | 236 } |
| 233 | 237 |
| 234 scoped_refptr<base::SingleThreadTaskRunner> | 238 scoped_refptr<base::SingleThreadTaskRunner> |
| 235 SystemURLRequestContextGetter::GetNetworkTaskRunner() const { | 239 SystemURLRequestContextGetter::GetNetworkTaskRunner() const { |
| 236 return network_task_runner_; | 240 return network_task_runner_; |
| 237 } | 241 } |
| 238 | 242 |
| 243 void SystemURLRequestContextGetter::Shutdown() { |
| 244 DCHECK_CURRENTLY_ON(web::WebThread::IO); |
| 245 io_thread_ = nullptr; |
| 246 NotifyContextShuttingDown(); |
| 247 } |
| 248 |
| 239 IOSChromeIOThread::Globals::SystemRequestContextLeakChecker:: | 249 IOSChromeIOThread::Globals::SystemRequestContextLeakChecker:: |
| 240 SystemRequestContextLeakChecker(Globals* globals) | 250 SystemRequestContextLeakChecker(Globals* globals) |
| 241 : globals_(globals) { | 251 : globals_(globals) { |
| 242 DCHECK(globals_); | 252 DCHECK(globals_); |
| 243 } | 253 } |
| 244 | 254 |
| 245 IOSChromeIOThread::Globals::SystemRequestContextLeakChecker:: | 255 IOSChromeIOThread::Globals::SystemRequestContextLeakChecker:: |
| 246 ~SystemRequestContextLeakChecker() { | 256 ~SystemRequestContextLeakChecker() { |
| 247 if (globals_->system_request_context.get()) | 257 if (globals_->system_request_context.get()) |
| 248 globals_->system_request_context->AssertNoURLRequests(); | 258 globals_->system_request_context->AssertNoURLRequests(); |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 // get it onto the message loop while the IOSChromeIOThread object still | 426 // get it onto the message loop while the IOSChromeIOThread object still |
| 417 // exists. However, the message might not be processed on the UI | 427 // exists. However, the message might not be processed on the UI |
| 418 // thread until after IOSChromeIOThread is gone, so use a weak pointer. | 428 // thread until after IOSChromeIOThread is gone, so use a weak pointer. |
| 419 web::WebThread::PostTask( | 429 web::WebThread::PostTask( |
| 420 web::WebThread::UI, FROM_HERE, | 430 web::WebThread::UI, FROM_HERE, |
| 421 base::Bind(&IOSChromeIOThread::InitSystemRequestContext, | 431 base::Bind(&IOSChromeIOThread::InitSystemRequestContext, |
| 422 weak_factory_.GetWeakPtr())); | 432 weak_factory_.GetWeakPtr())); |
| 423 } | 433 } |
| 424 | 434 |
| 425 void IOSChromeIOThread::CleanUp() { | 435 void IOSChromeIOThread::CleanUp() { |
| 436 system_url_request_context_getter_->Shutdown(); |
| 426 system_url_request_context_getter_ = nullptr; | 437 system_url_request_context_getter_ = nullptr; |
| 427 | 438 |
| 428 // Release objects that the net::URLRequestContext could have been pointing | 439 // Release objects that the net::URLRequestContext could have been pointing |
| 429 // to. | 440 // to. |
| 430 | 441 |
| 431 // Shutdown the HistogramWatcher on the IO thread. | 442 // Shutdown the HistogramWatcher on the IO thread. |
| 432 net::NetworkChangeNotifier::ShutdownHistogramWatcher(); | 443 net::NetworkChangeNotifier::ShutdownHistogramWatcher(); |
| 433 | 444 |
| 434 // This must be reset before the ChromeNetLog is destroyed. | 445 // This must be reset before the ChromeNetLog is destroyed. |
| 435 network_change_observer_.reset(); | 446 network_change_observer_.reset(); |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 559 | 570 |
| 560 globals->system_http_network_session.reset( | 571 globals->system_http_network_session.reset( |
| 561 new net::HttpNetworkSession(system_params)); | 572 new net::HttpNetworkSession(system_params)); |
| 562 globals->system_http_transaction_factory.reset( | 573 globals->system_http_transaction_factory.reset( |
| 563 new net::HttpNetworkLayer(globals->system_http_network_session.get())); | 574 new net::HttpNetworkLayer(globals->system_http_network_session.get())); |
| 564 context->set_http_transaction_factory( | 575 context->set_http_transaction_factory( |
| 565 globals->system_http_transaction_factory.get()); | 576 globals->system_http_transaction_factory.get()); |
| 566 | 577 |
| 567 return context; | 578 return context; |
| 568 } | 579 } |
| OLD | NEW |