Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: components/gcm_driver/gcm_driver_desktop.cc

Issue 515763002: [GCM] Extracting GCMConnectionObserver from GCMAppHandler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing CR feedback Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/gcm_driver/gcm_driver_desktop.h" 5 #include "components/gcm_driver/gcm_driver_desktop.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
12 #include "base/location.h" 12 #include "base/location.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/sequenced_task_runner.h" 14 #include "base/sequenced_task_runner.h"
15 #include "base/threading/sequenced_worker_pool.h" 15 #include "base/threading/sequenced_worker_pool.h"
16 #include "components/gcm_driver/gcm_app_handler.h" 16 #include "components/gcm_driver/gcm_app_handler.h"
17 #include "components/gcm_driver/gcm_client_factory.h" 17 #include "components/gcm_driver/gcm_client_factory.h"
18 #include "components/gcm_driver/system_encryptor.h" 18 #include "components/gcm_driver/system_encryptor.h"
19 #include "google_apis/gcm/engine/account_mapping.h" 19 #include "google_apis/gcm/engine/account_mapping.h"
20 #include "net/base/ip_endpoint.h" 20 #include "net/base/ip_endpoint.h"
21 #include "net/url_request/url_request_context_getter.h" 21 #include "net/url_request/url_request_context_getter.h"
22 22
23 namespace gcm { 23 namespace gcm {
24 24
25 namespace {
26
27 // Empty string is reserved for the default app handler.
28 const char kDefaultAppHandler[] = "";
29
30 } // namespace
31
32 // Helper class to save tasks to run until we're ready to execute them. 25 // Helper class to save tasks to run until we're ready to execute them.
33 class GCMDriverDesktop::DelayedTaskController { 26 class GCMDriverDesktop::DelayedTaskController {
34 public: 27 public:
35 DelayedTaskController(); 28 DelayedTaskController();
36 ~DelayedTaskController(); 29 ~DelayedTaskController();
37 30
38 // Adds a task that will be invoked once we're ready. 31 // Adds a task that will be invoked once we're ready.
39 void AddTask(const base::Closure& task); 32 void AddTask(const base::Closure& task);
40 33
41 // Sets ready status. It is ready only when check-in is completed and 34 // Sets ready status. It is ready only when check-in is completed and
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 449
457 void GCMDriverDesktop::RemoveAppHandler(const std::string& app_id) { 450 void GCMDriverDesktop::RemoveAppHandler(const std::string& app_id) {
458 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); 451 DCHECK(ui_thread_->RunsTasksOnCurrentThread());
459 GCMDriver::RemoveAppHandler(app_id); 452 GCMDriver::RemoveAppHandler(app_id);
460 453
461 // Stops the GCM service when no app intends to consume it. 454 // Stops the GCM service when no app intends to consume it.
462 if (app_handlers().empty()) 455 if (app_handlers().empty())
463 Stop(); 456 Stop();
464 } 457 }
465 458
459 void GCMDriverDesktop::AddConnectionObserver(GCMConnectionObserver* observer) {
460 connection_observer_list_.AddObserver(observer);
461 }
462
463 void GCMDriverDesktop::RemoveConnectionObserver(
464 GCMConnectionObserver* observer) {
465 connection_observer_list_.RemoveObserver(observer);
466 }
467
466 void GCMDriverDesktop::Enable() { 468 void GCMDriverDesktop::Enable() {
467 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); 469 DCHECK(ui_thread_->RunsTasksOnCurrentThread());
468 470
469 if (gcm_enabled_) 471 if (gcm_enabled_)
470 return; 472 return;
471 gcm_enabled_ = true; 473 gcm_enabled_ = true;
472 474
473 EnsureStarted(); 475 EnsureStarted();
474 } 476 }
475 477
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 754
753 void GCMDriverDesktop::OnConnected(const net::IPEndPoint& ip_endpoint) { 755 void GCMDriverDesktop::OnConnected(const net::IPEndPoint& ip_endpoint) {
754 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); 756 DCHECK(ui_thread_->RunsTasksOnCurrentThread());
755 757
756 connected_ = true; 758 connected_ = true;
757 759
758 // Drop the event if the service has been stopped. 760 // Drop the event if the service has been stopped.
759 if (!gcm_started_) 761 if (!gcm_started_)
760 return; 762 return;
761 763
762 const GCMAppHandlerMap& app_handler_map = app_handlers(); 764 FOR_EACH_OBSERVER(GCMConnectionObserver,
763 for (GCMAppHandlerMap::const_iterator iter = app_handler_map.begin(); 765 connection_observer_list_,
764 iter != app_handler_map.end(); ++iter) { 766 OnConnected(ip_endpoint));
765 iter->second->OnConnected(ip_endpoint);
766 }
767
768 GetAppHandler(kDefaultAppHandler)->OnConnected(ip_endpoint);
769 } 767 }
770 768
771 void GCMDriverDesktop::OnDisconnected() { 769 void GCMDriverDesktop::OnDisconnected() {
772 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); 770 DCHECK(ui_thread_->RunsTasksOnCurrentThread());
773 771
774 connected_ = false; 772 connected_ = false;
775 773
776 // Drop the event if the service has been stopped. 774 // Drop the event if the service has been stopped.
777 if (!gcm_started_) 775 if (!gcm_started_)
778 return; 776 return;
779 777
780 const GCMAppHandlerMap& app_handler_map = app_handlers(); 778 FOR_EACH_OBSERVER(
781 for (GCMAppHandlerMap::const_iterator iter = app_handler_map.begin(); 779 GCMConnectionObserver, connection_observer_list_, OnDisconnected());
782 iter != app_handler_map.end(); ++iter) {
783 iter->second->OnDisconnected();
784 }
785
786 GetAppHandler(kDefaultAppHandler)->OnDisconnected();
787 } 780 }
788 781
789 void GCMDriverDesktop::GetGCMStatisticsFinished( 782 void GCMDriverDesktop::GetGCMStatisticsFinished(
790 const GCMClient::GCMStatistics& stats) { 783 const GCMClient::GCMStatistics& stats) {
791 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); 784 DCHECK(ui_thread_->RunsTasksOnCurrentThread());
792 785
793 // Normally request_gcm_statistics_callback_ would not be null. 786 // Normally request_gcm_statistics_callback_ would not be null.
794 if (!request_gcm_statistics_callback_.is_null()) 787 if (!request_gcm_statistics_callback_.is_null())
795 request_gcm_statistics_callback_.Run(stats); 788 request_gcm_statistics_callback_.Run(stats);
796 else 789 else
797 LOG(WARNING) << "request_gcm_statistics_callback_ is NULL."; 790 LOG(WARNING) << "request_gcm_statistics_callback_ is NULL.";
798 } 791 }
799 792
800 } // namespace gcm 793 } // namespace gcm
801 794
OLDNEW
« no previous file with comments | « components/gcm_driver/gcm_driver_desktop.h ('k') | components/gcm_driver/gcm_driver_desktop_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698