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/invalidation/impl/gcm_network_channel.h" | 5 #include "components/invalidation/impl/gcm_network_channel.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/base64url.h" | 9 #include "base/base64url.h" |
10 #include "base/i18n/time_formatting.h" | 10 #include "base/i18n/time_formatting.h" |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 scoped_refptr<net::URLRequestContextGetter> request_context_getter, | 114 scoped_refptr<net::URLRequestContextGetter> request_context_getter, |
115 std::unique_ptr<GCMNetworkChannelDelegate> delegate) | 115 std::unique_ptr<GCMNetworkChannelDelegate> delegate) |
116 : request_context_getter_(request_context_getter), | 116 : request_context_getter_(request_context_getter), |
117 delegate_(std::move(delegate)), | 117 delegate_(std::move(delegate)), |
118 register_backoff_entry_(new net::BackoffEntry(&kRegisterBackoffPolicy)), | 118 register_backoff_entry_(new net::BackoffEntry(&kRegisterBackoffPolicy)), |
119 gcm_channel_online_(false), | 119 gcm_channel_online_(false), |
120 http_channel_online_(false), | 120 http_channel_online_(false), |
121 diagnostic_info_(this), | 121 diagnostic_info_(this), |
122 weak_factory_(this) { | 122 weak_factory_(this) { |
123 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); | 123 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); |
124 delegate_->Initialize(base::Bind(&GCMNetworkChannel::OnConnectionStateChanged, | 124 delegate_->Initialize( |
125 weak_factory_.GetWeakPtr())); | 125 base::Bind(&GCMNetworkChannel::OnConnectionStateChanged, |
| 126 weak_factory_.GetWeakPtr()), |
| 127 base::Bind(&GCMNetworkChannel::OnStoreReset, weak_factory_.GetWeakPtr())); |
126 Register(); | 128 Register(); |
127 } | 129 } |
128 | 130 |
129 GCMNetworkChannel::~GCMNetworkChannel() { | 131 GCMNetworkChannel::~GCMNetworkChannel() { |
130 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); | 132 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); |
131 } | 133 } |
132 | 134 |
133 void GCMNetworkChannel::Register() { | 135 void GCMNetworkChannel::Register() { |
134 delegate_->Register(base::Bind(&GCMNetworkChannel::OnRegisterComplete, | 136 delegate_->Register(base::Bind(&GCMNetworkChannel::OnRegisterComplete, |
135 weak_factory_.GetWeakPtr())); | 137 weak_factory_.GetWeakPtr())); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 void GCMNetworkChannel::RequestAccessToken() { | 189 void GCMNetworkChannel::RequestAccessToken() { |
188 DCHECK(CalledOnValidThread()); | 190 DCHECK(CalledOnValidThread()); |
189 delegate_->RequestToken(base::Bind(&GCMNetworkChannel::OnGetTokenComplete, | 191 delegate_->RequestToken(base::Bind(&GCMNetworkChannel::OnGetTokenComplete, |
190 weak_factory_.GetWeakPtr())); | 192 weak_factory_.GetWeakPtr())); |
191 } | 193 } |
192 | 194 |
193 void GCMNetworkChannel::OnGetTokenComplete( | 195 void GCMNetworkChannel::OnGetTokenComplete( |
194 const GoogleServiceAuthError& error, | 196 const GoogleServiceAuthError& error, |
195 const std::string& token) { | 197 const std::string& token) { |
196 DCHECK(CalledOnValidThread()); | 198 DCHECK(CalledOnValidThread()); |
197 if (cached_message_.empty()) { | 199 if (cached_message_.empty() || registration_id_.empty()) { |
198 // Nothing to do. | 200 // Nothing to do. |
199 return; | 201 return; |
200 } | 202 } |
201 | 203 |
202 if (error.state() != GoogleServiceAuthError::NONE) { | 204 if (error.state() != GoogleServiceAuthError::NONE) { |
203 // Requesting access token failed. Persistent errors will be reported by | 205 // Requesting access token failed. Persistent errors will be reported by |
204 // token service. Just drop this request, cacheinvalidations will retry | 206 // token service. Just drop this request, cacheinvalidations will retry |
205 // sending message and at that time we'll retry requesting access token. | 207 // sending message and at that time we'll retry requesting access token. |
206 DVLOG(1) << "RequestAccessToken failed: " << error.ToString(); | 208 DVLOG(1) << "RequestAccessToken failed: " << error.ToString(); |
207 RecordOutgoingMessageStatus(ACCESS_TOKEN_FAILURE); | 209 RecordOutgoingMessageStatus(ACCESS_TOKEN_FAILURE); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 #else | 297 #else |
296 // This code shouldn't be invoked on Android. | 298 // This code shouldn't be invoked on Android. |
297 NOTREACHED(); | 299 NOTREACHED(); |
298 #endif | 300 #endif |
299 } | 301 } |
300 | 302 |
301 void GCMNetworkChannel::OnConnectionStateChanged(bool online) { | 303 void GCMNetworkChannel::OnConnectionStateChanged(bool online) { |
302 UpdateGcmChannelState(online); | 304 UpdateGcmChannelState(online); |
303 } | 305 } |
304 | 306 |
| 307 void GCMNetworkChannel::OnStoreReset() { |
| 308 // TODO(crbug.com/661660): Tell server the registration ID is no longer valid. |
| 309 registration_id_.clear(); |
| 310 } |
| 311 |
305 void GCMNetworkChannel::OnNetworkChanged( | 312 void GCMNetworkChannel::OnNetworkChanged( |
306 net::NetworkChangeNotifier::ConnectionType connection_type) { | 313 net::NetworkChangeNotifier::ConnectionType connection_type) { |
307 // Network connection is restored. Let's notify cacheinvalidations so it has | 314 // Network connection is restored. Let's notify cacheinvalidations so it has |
308 // chance to retry. | 315 // chance to retry. |
309 NotifyNetworkStatusChange( | 316 NotifyNetworkStatusChange( |
310 connection_type != net::NetworkChangeNotifier::CONNECTION_NONE); | 317 connection_type != net::NetworkChangeNotifier::CONNECTION_NONE); |
311 } | 318 } |
312 | 319 |
313 void GCMNetworkChannel::UpdateGcmChannelState(bool online) { | 320 void GCMNetworkChannel::UpdateGcmChannelState(bool online) { |
314 if (gcm_channel_online_ == online) | 321 if (gcm_channel_online_ == online) |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 ENUM_CASE(gcm::GCMClient::UNKNOWN_ERROR); | 443 ENUM_CASE(gcm::GCMClient::UNKNOWN_ERROR); |
437 ENUM_CASE(gcm::GCMClient::INVALID_PARAMETER); | 444 ENUM_CASE(gcm::GCMClient::INVALID_PARAMETER); |
438 ENUM_CASE(gcm::GCMClient::ASYNC_OPERATION_PENDING); | 445 ENUM_CASE(gcm::GCMClient::ASYNC_OPERATION_PENDING); |
439 ENUM_CASE(gcm::GCMClient::GCM_DISABLED); | 446 ENUM_CASE(gcm::GCMClient::GCM_DISABLED); |
440 } | 447 } |
441 NOTREACHED(); | 448 NOTREACHED(); |
442 return ""; | 449 return ""; |
443 } | 450 } |
444 | 451 |
445 } // namespace syncer | 452 } // namespace syncer |
OLD | NEW |