OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "google_apis/gcm/engine/connection_factory_impl.h" | 5 #include "google_apis/gcm/engine/connection_factory_impl.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/location.h" |
8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
9 #include "base/metrics/sparse_histogram.h" | 9 #include "base/metrics/sparse_histogram.h" |
10 #include "base/profiler/scoped_tracker.h" | 10 #include "base/profiler/scoped_tracker.h" |
| 11 #include "base/thread_task_runner_handle.h" |
11 #include "google_apis/gcm/engine/connection_handler_impl.h" | 12 #include "google_apis/gcm/engine/connection_handler_impl.h" |
12 #include "google_apis/gcm/monitoring/gcm_stats_recorder.h" | 13 #include "google_apis/gcm/monitoring/gcm_stats_recorder.h" |
13 #include "google_apis/gcm/protocol/mcs.pb.h" | 14 #include "google_apis/gcm/protocol/mcs.pb.h" |
14 #include "net/base/load_flags.h" | 15 #include "net/base/load_flags.h" |
15 #include "net/base/net_errors.h" | 16 #include "net/base/net_errors.h" |
16 #include "net/http/http_network_session.h" | 17 #include "net/http/http_network_session.h" |
17 #include "net/http/http_request_headers.h" | 18 #include "net/http/http_request_headers.h" |
18 #include "net/proxy/proxy_info.h" | 19 #include "net/proxy/proxy_info.h" |
19 #include "net/socket/client_socket_handle.h" | 20 #include "net/socket/client_socket_handle.h" |
20 #include "net/socket/client_socket_pool_manager.h" | 21 #include "net/socket/client_socket_pool_manager.h" |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 return; | 130 return; |
130 } | 131 } |
131 | 132 |
132 if (backoff_entry_->ShouldRejectRequest()) { | 133 if (backoff_entry_->ShouldRejectRequest()) { |
133 DVLOG(1) << "Delaying MCS endpoint connection for " | 134 DVLOG(1) << "Delaying MCS endpoint connection for " |
134 << backoff_entry_->GetTimeUntilRelease().InMilliseconds() | 135 << backoff_entry_->GetTimeUntilRelease().InMilliseconds() |
135 << " milliseconds."; | 136 << " milliseconds."; |
136 waiting_for_backoff_ = true; | 137 waiting_for_backoff_ = true; |
137 recorder_->RecordConnectionDelayedDueToBackoff( | 138 recorder_->RecordConnectionDelayedDueToBackoff( |
138 backoff_entry_->GetTimeUntilRelease().InMilliseconds()); | 139 backoff_entry_->GetTimeUntilRelease().InMilliseconds()); |
139 base::MessageLoop::current()->PostDelayedTask( | 140 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
140 FROM_HERE, | 141 FROM_HERE, |
141 base::Bind(&ConnectionFactoryImpl::ConnectWithBackoff, | 142 base::Bind(&ConnectionFactoryImpl::ConnectWithBackoff, |
142 weak_ptr_factory_.GetWeakPtr()), | 143 weak_ptr_factory_.GetWeakPtr()), |
143 backoff_entry_->GetTimeUntilRelease()); | 144 backoff_entry_->GetTimeUntilRelease()); |
144 return; | 145 return; |
145 } | 146 } |
146 | 147 |
147 DVLOG(1) << "Attempting connection to MCS endpoint."; | 148 DVLOG(1) << "Attempting connection to MCS endpoint."; |
148 waiting_for_backoff_ = false; | 149 waiting_for_backoff_ = false; |
149 // It's necessary to close the socket before attempting any new connection, | 150 // It's necessary to close the socket before attempting any new connection, |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
540 } else { | 541 } else { |
541 // If ReconsiderProxyAfterError() failed synchronously, it means | 542 // If ReconsiderProxyAfterError() failed synchronously, it means |
542 // there was nothing left to fall-back to, so fail the transaction | 543 // there was nothing left to fall-back to, so fail the transaction |
543 // with the last connection error we got. | 544 // with the last connection error we got. |
544 status = error; | 545 status = error; |
545 } | 546 } |
546 | 547 |
547 // If there is new proxy info, post OnProxyResolveDone to retry it. Otherwise, | 548 // If there is new proxy info, post OnProxyResolveDone to retry it. Otherwise, |
548 // if there was an error falling back, fail synchronously. | 549 // if there was an error falling back, fail synchronously. |
549 if (status == net::OK) { | 550 if (status == net::OK) { |
550 base::MessageLoop::current()->PostTask( | 551 base::ThreadTaskRunnerHandle::Get()->PostTask( |
551 FROM_HERE, | 552 FROM_HERE, |
552 base::Bind(&ConnectionFactoryImpl::OnProxyResolveDone, | 553 base::Bind(&ConnectionFactoryImpl::OnProxyResolveDone, |
553 weak_ptr_factory_.GetWeakPtr(), status)); | 554 weak_ptr_factory_.GetWeakPtr(), status)); |
554 status = net::ERR_IO_PENDING; | 555 status = net::ERR_IO_PENDING; |
555 } | 556 } |
556 return status; | 557 return status; |
557 } | 558 } |
558 | 559 |
559 void ConnectionFactoryImpl::ReportSuccessfulProxyConnection() { | 560 void ConnectionFactoryImpl::ReportSuccessfulProxyConnection() { |
560 if (gcm_network_session_.get() && gcm_network_session_->proxy_service()) | 561 if (gcm_network_session_.get() && gcm_network_session_->proxy_service()) |
(...skipping 13 matching lines...) Expand all Loading... |
574 | 575 |
575 void ConnectionFactoryImpl::RebuildNetworkSessionAuthCache() { | 576 void ConnectionFactoryImpl::RebuildNetworkSessionAuthCache() { |
576 if (!http_network_session_.get() || !http_network_session_->http_auth_cache()) | 577 if (!http_network_session_.get() || !http_network_session_->http_auth_cache()) |
577 return; | 578 return; |
578 | 579 |
579 gcm_network_session_->http_auth_cache()->UpdateAllFrom( | 580 gcm_network_session_->http_auth_cache()->UpdateAllFrom( |
580 *http_network_session_->http_auth_cache()); | 581 *http_network_session_->http_auth_cache()); |
581 } | 582 } |
582 | 583 |
583 } // namespace gcm | 584 } // namespace gcm |
OLD | NEW |