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