OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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/mcs_client.h" | 5 #include "google_apis/gcm/engine/mcs_client.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 | 269 |
270 if (packet_info->tag == kDataMessageStanzaTag) { | 270 if (packet_info->tag == kDataMessageStanzaTag) { |
271 mcs_proto::DataMessageStanza* data_message = | 271 mcs_proto::DataMessageStanza* data_message = |
272 reinterpret_cast<mcs_proto::DataMessageStanza*>( | 272 reinterpret_cast<mcs_proto::DataMessageStanza*>( |
273 packet_info->protobuf.get()); | 273 packet_info->protobuf.get()); |
274 CollapseKey collapse_key(*data_message); | 274 CollapseKey collapse_key(*data_message); |
275 if (collapse_key.IsValid()) | 275 if (collapse_key.IsValid()) |
276 collapse_key_map_[collapse_key] = packet_info; | 276 collapse_key_map_[collapse_key] = packet_info; |
277 } | 277 } |
278 } | 278 } |
| 279 |
| 280 // Establish if there is any custom client interval persisted from the last |
| 281 // run and set it on the heartbeat manager. |
| 282 custom_heartbeat_intervals_.swap(load_result->heartbeat_intervals); |
| 283 int min_interval_ms = GetMinHeartbeatIntervalMs(); |
| 284 heartbeat_manager_.SetClientHeartbeatIntervalMs(min_interval_ms); |
279 } | 285 } |
280 | 286 |
281 void MCSClient::Login(uint64 android_id, uint64 security_token) { | 287 void MCSClient::Login(uint64 android_id, uint64 security_token) { |
282 DCHECK_EQ(state_, LOADED); | 288 DCHECK_EQ(state_, LOADED); |
283 DCHECK(android_id_ == 0 || android_id_ == android_id); | 289 DCHECK(android_id_ == 0 || android_id_ == android_id); |
284 DCHECK(security_token_ == 0 || security_token_ == security_token); | 290 DCHECK(security_token_ == 0 || security_token_ == security_token); |
285 | 291 |
286 if (android_id != android_id_ && security_token != security_token_) { | 292 if (android_id != android_id_ && security_token != security_token_) { |
287 DCHECK(android_id); | 293 DCHECK(android_id); |
288 DCHECK(security_token); | 294 DCHECK(security_token); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 void MCSClient::UpdateHeartbeatTimer(scoped_ptr<base::Timer> timer) { | 379 void MCSClient::UpdateHeartbeatTimer(scoped_ptr<base::Timer> timer) { |
374 heartbeat_manager_.UpdateHeartbeatTimer(timer.Pass()); | 380 heartbeat_manager_.UpdateHeartbeatTimer(timer.Pass()); |
375 } | 381 } |
376 | 382 |
377 void MCSClient::AddHeartbeatInterval(const std::string& scope, | 383 void MCSClient::AddHeartbeatInterval(const std::string& scope, |
378 int interval_ms) { | 384 int interval_ms) { |
379 if (!heartbeat_manager_.IsValidClientHeartbeatInterval(interval_ms)) | 385 if (!heartbeat_manager_.IsValidClientHeartbeatInterval(interval_ms)) |
380 return; | 386 return; |
381 | 387 |
382 custom_heartbeat_intervals_[scope] = interval_ms; | 388 custom_heartbeat_intervals_[scope] = interval_ms; |
383 // TODO(fgorski): Save in the gcm store as well. | 389 gcm_store_->AddHeartbeatInterval(scope, interval_ms, |
| 390 base::Bind(&MCSClient::OnGCMUpdateFinished, |
| 391 weak_ptr_factory_.GetWeakPtr())); |
384 | 392 |
385 int min_interval_ms = GetMinCustomHeartbeatInterval(); | 393 int min_interval_ms = GetMinHeartbeatIntervalMs(); |
386 heartbeat_manager_.SetClientHeartbeatIntervalMs(min_interval_ms); | 394 heartbeat_manager_.SetClientHeartbeatIntervalMs(min_interval_ms); |
387 } | 395 } |
388 | 396 |
389 void MCSClient::RemoveHeartbeatInterval(const std::string& scope) { | 397 void MCSClient::RemoveHeartbeatInterval(const std::string& scope) { |
390 custom_heartbeat_intervals_.erase(scope); | 398 custom_heartbeat_intervals_.erase(scope); |
391 int min_interval = GetMinCustomHeartbeatInterval(); | 399 gcm_store_->RemoveHeartbeatInterval( |
| 400 scope, base::Bind(&MCSClient::OnGCMUpdateFinished, |
| 401 weak_ptr_factory_.GetWeakPtr())); |
| 402 |
| 403 int min_interval = GetMinHeartbeatIntervalMs(); |
392 heartbeat_manager_.SetClientHeartbeatIntervalMs(min_interval); | 404 heartbeat_manager_.SetClientHeartbeatIntervalMs(min_interval); |
393 } | 405 } |
394 | 406 |
395 int MCSClient::GetMinCustomHeartbeatInterval() { | 407 int MCSClient::GetMinHeartbeatIntervalMs() { |
396 if (custom_heartbeat_intervals_.empty()) | 408 if (custom_heartbeat_intervals_.empty()) |
397 return kNoCustomHeartbeat; | 409 return kNoCustomHeartbeat; |
398 | 410 |
399 int min_interval = custom_heartbeat_intervals_.begin()->second; | 411 int min_interval = custom_heartbeat_intervals_.begin()->second; |
400 for (std::map<std::string, int>::const_iterator it = | 412 for (std::map<std::string, int>::const_iterator it = |
401 custom_heartbeat_intervals_.begin(); | 413 custom_heartbeat_intervals_.begin(); |
402 it != custom_heartbeat_intervals_.end(); | 414 it != custom_heartbeat_intervals_.end(); |
403 ++it) { | 415 ++it) { |
404 if (it->second < min_interval) | 416 if (it->second < min_interval) |
405 min_interval = it->second; | 417 min_interval = it->second; |
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
950 reinterpret_cast<mcs_proto::DataMessageStanza*>(packet->protobuf.get()); | 962 reinterpret_cast<mcs_proto::DataMessageStanza*>(packet->protobuf.get()); |
951 CollapseKey collapse_key(*data_message); | 963 CollapseKey collapse_key(*data_message); |
952 if (collapse_key.IsValid()) | 964 if (collapse_key.IsValid()) |
953 collapse_key_map_.erase(collapse_key); | 965 collapse_key_map_.erase(collapse_key); |
954 } | 966 } |
955 | 967 |
956 return packet; | 968 return packet; |
957 } | 969 } |
958 | 970 |
959 } // namespace gcm | 971 } // namespace gcm |
OLD | NEW |