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#include "content/public/common/push_messaging_status.h" 14 15class Profile; 16 17namespace user_prefs { 18class PrefRegistrySyncable; 19} 20 21namespace gcm { 22 23class GCMProfileService; 24struct PushMessagingApplicationId; 25 26class PushMessagingServiceImpl : public content::PushMessagingService, 27 public GCMAppHandler { 28 public: 29 // Register profile-specific prefs for GCM. 30 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 31 32 // If any Service Workers are using push, starts GCM and adds an app handler. 33 static void InitializeForProfile(Profile* profile); 34 35 PushMessagingServiceImpl(GCMProfileService* gcm_profile_service, 36 Profile* profile); 37 virtual ~PushMessagingServiceImpl(); 38 39 // GCMAppHandler implementation. 40 virtual void ShutdownHandler() OVERRIDE; 41 virtual void OnMessage(const std::string& app_id, 42 const GCMClient::IncomingMessage& message) OVERRIDE; 43 virtual void OnMessagesDeleted(const std::string& app_id) OVERRIDE; 44 virtual void OnSendError( 45 const std::string& app_id, 46 const GCMClient::SendErrorDetails& send_error_details) OVERRIDE; 47 virtual void OnSendAcknowledged(const std::string& app_id, 48 const std::string& message_id) OVERRIDE; 49 virtual bool CanHandle(const std::string& app_id) const OVERRIDE; 50 51 // content::PushMessagingService implementation: 52 virtual void Register( 53 const GURL& origin, 54 int64 service_worker_registration_id, 55 const std::string& sender_id, 56 int renderer_id, 57 int render_frame_id, 58 bool user_gesture, 59 const content::PushMessagingService::RegisterCallback& callback) OVERRIDE; 60 61 private: 62 void DeliverMessageCallback(const PushMessagingApplicationId& application_id, 63 const GCMClient::IncomingMessage& message, 64 content::PushMessagingStatus status); 65 66 void RegisterEnd( 67 const content::PushMessagingService::RegisterCallback& callback, 68 const std::string& registration_id, 69 content::PushMessagingStatus status); 70 71 void DidRegister( 72 const content::PushMessagingService::RegisterCallback& callback, 73 const std::string& registration_id, 74 GCMClient::Result result); 75 76 void DidRequestPermission( 77 const PushMessagingApplicationId& application_id, 78 const std::string& sender_id, 79 const content::PushMessagingService::RegisterCallback& callback, 80 bool allow); 81 82 GCMProfileService* gcm_profile_service_; // It owns us. 83 84 Profile* profile_; // It owns our owner. 85 86 base::WeakPtrFactory<PushMessagingServiceImpl> weak_factory_; 87 88 DISALLOW_COPY_AND_ASSIGN(PushMessagingServiceImpl); 89}; 90 91} // namespace gcm 92 93#endif // CHROME_BROWSER_SERVICES_GCM_PUSH_MESSAGING_SERVICE_IMPL_H_ 94