| Index: components/cronet/android/url_request_context_adapter.cc
|
| diff --git a/components/cronet/android/url_request_context_adapter.cc b/components/cronet/android/url_request_context_adapter.cc
|
| index 00e463e7f83d0f3cefbb14abfe0891ed28366c08..a192f567dd56c26fad7056ccbbb58a461628ce08 100644
|
| --- a/components/cronet/android/url_request_context_adapter.cc
|
| +++ b/components/cronet/android/url_request_context_adapter.cc
|
| @@ -178,6 +178,11 @@ void URLRequestContextAdapter::InitializeURLRequestContext(
|
| net::AlternateProtocol::QUIC,
|
| 1.0f);
|
| }
|
| + is_context_initialized_ = true;
|
| + while (!tasks_waiting_for_context_.empty()) {
|
| + tasks_waiting_for_context_.front().Run();
|
| + tasks_waiting_for_context_.pop();
|
| + }
|
| }
|
|
|
| if (VLOG_IS_ON(2)) {
|
| @@ -189,12 +194,32 @@ void URLRequestContextAdapter::InitializeURLRequestContext(
|
| delegate_->OnContextInitialized(this);
|
| }
|
|
|
| +void URLRequestContextAdapter::RunTaskAfterContextInit(
|
| + const RunAfterContextInitTask& callback) {
|
| + GetNetworkTaskRunner()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(
|
| + &URLRequestContextAdapter::RunTaskAfterContextInitOnNetworkThread,
|
| + this,
|
| + callback));
|
| +}
|
| +
|
| +// Called on network thread.
|
| +void URLRequestContextAdapter::RunTaskAfterContextInitOnNetworkThread(
|
| + const RunAfterContextInitTask& callback) {
|
| + if (is_context_initialized_) {
|
| + callback.Run();
|
| + return;
|
| + }
|
| + tasks_waiting_for_context_.push(callback);
|
| +}
|
| +
|
| URLRequestContextAdapter::~URLRequestContextAdapter() {
|
| if (net_log_observer_) {
|
| context_->net_log()->RemoveThreadSafeObserver(net_log_observer_.get());
|
| net_log_observer_.reset();
|
| }
|
| - StopNetLog();
|
| + StopNetLogHelper();
|
| // TODO(mef): Ensure that |network_thread_| is destroyed properly.
|
| }
|
|
|
| @@ -216,6 +241,17 @@ URLRequestContextAdapter::GetNetworkTaskRunner() const {
|
| }
|
|
|
| void URLRequestContextAdapter::StartNetLogToFile(const std::string& file_name) {
|
| + RunTaskAfterContextInit(base::Bind(
|
| + &URLRequestContextAdapter::StartNetLogToFileHelper, this, file_name));
|
| +}
|
| +
|
| +void URLRequestContextAdapter::StopNetLog() {
|
| + RunTaskAfterContextInit(
|
| + base::Bind(&URLRequestContextAdapter::StopNetLogHelper, this));
|
| +}
|
| +
|
| +void URLRequestContextAdapter::StartNetLogToFileHelper(
|
| + const std::string& file_name) {
|
| // Do nothing if already logging to a file.
|
| if (net_log_logger_)
|
| return;
|
| @@ -230,7 +266,7 @@ void URLRequestContextAdapter::StartNetLogToFile(const std::string& file_name) {
|
| net_log_logger_->StartObserving(context_->net_log());
|
| }
|
|
|
| -void URLRequestContextAdapter::StopNetLog() {
|
| +void URLRequestContextAdapter::StopNetLogHelper() {
|
| if (net_log_logger_) {
|
| net_log_logger_->StopObserving();
|
| net_log_logger_.reset();
|
|
|