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 "chrome/browser/services/gcm/gcm_driver.h" | 5 #include "chrome/browser/services/gcm/gcm_driver.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
468 | 468 |
469 // Ensures that the GCM service is started when there is an interest. | 469 // Ensures that the GCM service is started when there is an interest. |
470 EnsureStarted(); | 470 EnsureStarted(); |
471 } | 471 } |
472 | 472 |
473 void GCMDriver::RemoveAppHandler(const std::string& app_id) { | 473 void GCMDriver::RemoveAppHandler(const std::string& app_id) { |
474 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); | 474 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); |
475 DCHECK(!app_id.empty()); | 475 DCHECK(!app_id.empty()); |
476 | 476 |
477 app_handlers_.erase(app_id); | 477 app_handlers_.erase(app_id); |
| 478 |
| 479 // Stops the GCM service when no app intends to consume it. |
| 480 if (app_handlers_.empty()) |
| 481 Stop(); |
478 } | 482 } |
479 | 483 |
480 void GCMDriver::Register(const std::string& app_id, | 484 void GCMDriver::Register(const std::string& app_id, |
481 const std::vector<std::string>& sender_ids, | 485 const std::vector<std::string>& sender_ids, |
482 const RegisterCallback& callback) { | 486 const RegisterCallback& callback) { |
483 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); | 487 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); |
484 DCHECK(!app_id.empty()); | 488 DCHECK(!app_id.empty()); |
485 DCHECK(!sender_ids.empty()); | 489 DCHECK(!sender_ids.empty()); |
486 DCHECK(!callback.is_null()); | 490 DCHECK(!callback.is_null()); |
487 | 491 |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 void GCMDriver::OnActiveAccountLogout() { | 678 void GCMDriver::OnActiveAccountLogout() { |
675 CheckOut(); | 679 CheckOut(); |
676 } | 680 } |
677 | 681 |
678 GCMClient::Result GCMDriver::EnsureStarted() { | 682 GCMClient::Result GCMDriver::EnsureStarted() { |
679 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); | 683 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); |
680 | 684 |
681 if (!gcm_enabled_) | 685 if (!gcm_enabled_) |
682 return GCMClient::GCM_DISABLED; | 686 return GCMClient::GCM_DISABLED; |
683 | 687 |
| 688 // Have any app requested the service? |
| 689 if (app_handlers_.empty()) |
| 690 return GCMClient::UNKNOWN_ERROR; |
| 691 |
684 // Is the user signed in? | 692 // Is the user signed in? |
685 const std::string account_id = identity_provider_->GetActiveAccountId(); | 693 const std::string account_id = identity_provider_->GetActiveAccountId(); |
686 if (account_id.empty()) | 694 if (account_id.empty()) |
687 return GCMClient::NOT_SIGNED_IN; | 695 return GCMClient::NOT_SIGNED_IN; |
688 | 696 |
689 // CheckIn could be called more than once when: | 697 // CheckIn could be called more than once when: |
690 // 1) The password changes. | 698 // 1) The password changes. |
691 // 2) Register/send function calls it to ensure CheckIn is done. | 699 // 2) Register/send function calls it to ensure CheckIn is done. |
692 if (account_id_ == account_id) | 700 if (account_id_ == account_id) |
693 return GCMClient::SUCCESS; | 701 return GCMClient::SUCCESS; |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
851 LOG(WARNING) << "request_gcm_statistics_callback_ is NULL."; | 859 LOG(WARNING) << "request_gcm_statistics_callback_ is NULL."; |
852 } | 860 } |
853 | 861 |
854 std::string GCMDriver::SignedInUserName() const { | 862 std::string GCMDriver::SignedInUserName() const { |
855 if (IsStarted()) | 863 if (IsStarted()) |
856 return identity_provider_->GetActiveUsername(); | 864 return identity_provider_->GetActiveUsername(); |
857 return std::string(); | 865 return std::string(); |
858 } | 866 } |
859 | 867 |
860 } // namespace gcm | 868 } // namespace gcm |
OLD | NEW |