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