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