1// Copyright (c) 2013 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_GCM_PROFILE_SERVICE_H_ 6#define CHROME_BROWSER_SERVICES_GCM_GCM_PROFILE_SERVICE_H_ 7 8#include <string> 9 10#include "base/compiler_specific.h" 11#include "base/macros.h" 12#include "base/memory/scoped_ptr.h" 13#include "chrome/browser/services/gcm/push_messaging_service_impl.h" 14// TODO(jianli): include needed for obsolete methods that are going to be 15// removed soon. 16#include "components/gcm_driver/gcm_driver.h" 17#include "components/keyed_service/core/keyed_service.h" 18 19class Profile; 20 21namespace user_prefs { 22class PrefRegistrySyncable; 23} 24 25namespace gcm { 26 27class GCMClientFactory; 28class GCMDriver; 29 30// Providing GCM service, via GCMDriver, to a profile. 31class GCMProfileService : public KeyedService { 32 public: 33 // Returns whether GCM is enabled for |profile|. 34 static bool IsGCMEnabled(Profile* profile); 35 36 // Register profile-specific prefs for GCM. 37 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 38 39#if defined(OS_ANDROID) 40 explicit GCMProfileService(Profile* profile); 41#else 42 GCMProfileService(Profile* profile, 43 scoped_ptr<GCMClientFactory> gcm_client_factory); 44#endif 45 virtual ~GCMProfileService(); 46 47 // TODO(jianli): obsolete methods that are going to be removed soon. 48 void AddAppHandler(const std::string& app_id, GCMAppHandler* handler); 49 void RemoveAppHandler(const std::string& app_id); 50 void Register(const std::string& app_id, 51 const std::vector<std::string>& sender_ids, 52 const GCMDriver::RegisterCallback& callback); 53 54 // KeyedService: 55 virtual void Shutdown() OVERRIDE; 56 57 // Returns the user name if the profile is signed in or an empty string 58 // otherwise. 59 // TODO(jianli): To be removed when sign-in enforcement is dropped. 60 std::string SignedInUserName() const; 61 62 // For testing purpose. 63 void SetDriverForTesting(GCMDriver* driver); 64 65 GCMDriver* driver() const { return driver_.get(); } 66 67 content::PushMessagingService* push_messaging_service() { 68 return &push_messaging_service_; 69 } 70 71 protected: 72 // Used for constructing fake GCMProfileService for testing purpose. 73 GCMProfileService(); 74 75 private: 76 // The profile which owns this object. 77 Profile* profile_; 78 79 scoped_ptr<GCMDriver> driver_; 80 81 // Implementation of content::PushMessagingService using GCMProfileService. 82 PushMessagingServiceImpl push_messaging_service_; 83 84 // TODO(jianli): To be removed when sign-in enforcement is dropped. 85#if !defined(OS_ANDROID) 86 class IdentityObserver; 87 scoped_ptr<IdentityObserver> identity_observer_; 88#endif 89#if defined(OS_CHROMEOS) 90 scoped_ptr<GCMConnectionObserver> chromeos_connection_observer_; 91#endif 92 93 DISALLOW_COPY_AND_ASSIGN(GCMProfileService); 94}; 95 96} // namespace gcm 97 98#endif // CHROME_BROWSER_SERVICES_GCM_GCM_PROFILE_SERVICE_H_ 99