Home | History | Annotate | Download | only in gcm
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_SERVICES_GCM_PUSH_MESSAGING_SERVICE_IMPL_H_
      6 #define CHROME_BROWSER_SERVICES_GCM_PUSH_MESSAGING_SERVICE_IMPL_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "base/memory/weak_ptr.h"
     10 #include "components/gcm_driver/gcm_app_handler.h"
     11 #include "components/gcm_driver/gcm_client.h"
     12 #include "content/public/browser/push_messaging_service.h"
     13 
     14 class Profile;
     15 
     16 namespace user_prefs {
     17 class PrefRegistrySyncable;
     18 }
     19 
     20 namespace gcm {
     21 
     22 class GCMProfileService;
     23 
     24 class PushMessagingServiceImpl : public content::PushMessagingService,
     25                                  public GCMAppHandler {
     26  public:
     27   // Register profile-specific prefs for GCM.
     28   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
     29 
     30   // If any Service Workers are using push, starts GCM and adds an app handler.
     31   static void InitializeForProfile(Profile* profile);
     32 
     33   PushMessagingServiceImpl(GCMProfileService* gcm_profile_service,
     34                            Profile* profile);
     35   virtual ~PushMessagingServiceImpl();
     36 
     37   // GCMAppHandler implementation.
     38   virtual void ShutdownHandler() OVERRIDE;
     39   virtual void OnMessage(const std::string& app_id,
     40                          const GCMClient::IncomingMessage& message) OVERRIDE;
     41   virtual void OnMessagesDeleted(const std::string& app_id) OVERRIDE;
     42   virtual void OnSendError(
     43       const std::string& app_id,
     44       const GCMClient::SendErrorDetails& send_error_details) OVERRIDE;
     45   virtual bool CanHandle(const std::string& app_id) const OVERRIDE;
     46 
     47   // content::PushMessagingService implementation:
     48   virtual void Register(
     49       const std::string& app_id,
     50       const std::string& sender_id,
     51       const content::PushMessagingService::RegisterCallback& callback) OVERRIDE;
     52 
     53  private:
     54   void DidRegister(
     55       const std::string& app_id,
     56       const content::PushMessagingService::RegisterCallback& callback,
     57       const std::string& registration_id,
     58       GCMClient::Result result);
     59 
     60   GCMProfileService* gcm_profile_service_;  // It owns us.
     61 
     62   Profile* profile_;  // It owns our owner.
     63 
     64   base::WeakPtrFactory<PushMessagingServiceImpl> weak_factory_;
     65 
     66   DISALLOW_COPY_AND_ASSIGN(PushMessagingServiceImpl);
     67 };
     68 
     69 }  // namespace gcm
     70 
     71 #endif  // CHROME_BROWSER_SERVICES_GCM_PUSH_MESSAGING_SERVICE_IMPL_H_
     72