| Index: chrome/browser/services/gcm/gcm_service.h
|
| diff --git a/chrome/browser/services/gcm/gcm_profile_service.h b/chrome/browser/services/gcm/gcm_service.h
|
| similarity index 62%
|
| copy from chrome/browser/services/gcm/gcm_profile_service.h
|
| copy to chrome/browser/services/gcm/gcm_service.h
|
| index b93bfa2b30666f61940b8ff17f4416f74a5044bb..321be2ea31d133921c56a15f03322ff9f4b66663 100644
|
| --- a/chrome/browser/services/gcm/gcm_profile_service.h
|
| +++ b/chrome/browser/services/gcm/gcm_service.h
|
| @@ -1,50 +1,40 @@
|
| -// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#ifndef CHROME_BROWSER_SERVICES_GCM_GCM_PROFILE_SERVICE_H_
|
| -#define CHROME_BROWSER_SERVICES_GCM_GCM_PROFILE_SERVICE_H_
|
| +#ifndef CHROME_BROWSER_SERVICES_GCM_GCM_SERVICE_H_
|
| +#define CHROME_BROWSER_SERVICES_GCM_GCM_SERVICE_H_
|
|
|
| #include <map>
|
| #include <string>
|
| +#include <vector>
|
|
|
| #include "base/basictypes.h"
|
| #include "base/callback.h"
|
| #include "base/compiler_specific.h"
|
| -#include "base/gtest_prod_util.h"
|
| +#include "base/files/file_path.h"
|
| #include "base/memory/ref_counted.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| #include "base/memory/weak_ptr.h"
|
| #include "chrome/browser/services/gcm/default_gcm_app_handler.h"
|
| -#include "components/keyed_service/core/keyed_service.h"
|
| -#include "components/signin/core/browser/signin_manager_base.h"
|
| -#include "content/public/browser/notification_observer.h"
|
| -#include "content/public/browser/notification_registrar.h"
|
| +#include "google_apis/gaia/identity_provider.h"
|
| #include "google_apis/gcm/gcm_client.h"
|
|
|
| -class Profile;
|
| -
|
| -namespace base {
|
| -class Value;
|
| -}
|
| -
|
| namespace extensions {
|
| class ExtensionGCMAppHandlerTest;
|
| }
|
|
|
| -namespace user_prefs {
|
| -class PrefRegistrySyncable;
|
| +namespace net {
|
| +class URLRequestContextGetter;
|
| }
|
|
|
| namespace gcm {
|
|
|
| class GCMAppHandler;
|
| class GCMClientFactory;
|
| -class GCMProfileServiceTestConsumer;
|
|
|
| -// Acts as a bridge between GCM API and GCMClient layer. It is profile based.
|
| -class GCMProfileService : public KeyedService,
|
| - public content::NotificationObserver,
|
| - public SigninManagerBase::Observer {
|
| +// A bridge between the GCM users in Chrome and the GCMClient layer.
|
| +class GCMService : public IdentityProvider::Observer {
|
| public:
|
| typedef base::Callback<void(const std::string& registration_id,
|
| GCMClient::Result result)> RegisterCallback;
|
| @@ -54,29 +44,8 @@ class GCMProfileService : public KeyedService,
|
| typedef base::Callback<void(const GCMClient::GCMStatistics& stats)>
|
| GetGCMStatisticsCallback;
|
|
|
| - // Any change made to this enum should have corresponding change in the
|
| - // GetGCMEnabledStateString(...) function.
|
| - enum GCMEnabledState {
|
| - // GCM is always enabled. GCMClient will always load and connect with GCM.
|
| - ALWAYS_ENABLED,
|
| - // GCM is only enabled for apps. GCMClient will start to load and connect
|
| - // with GCM only when GCM API is used.
|
| - ENABLED_FOR_APPS,
|
| - // GCM is always disabled. GCMClient will never load and connect with GCM.
|
| - ALWAYS_DISABLED
|
| - };
|
| -
|
| - // Returns the GCM enabled state.
|
| - static GCMEnabledState GetGCMEnabledState(Profile* profile);
|
| -
|
| - // Returns text representation of a GCMEnabledState enum entry.
|
| - static std::string GetGCMEnabledStateString(GCMEnabledState state);
|
| -
|
| - // Register profile-specific prefs for GCM.
|
| - static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
|
| -
|
| - explicit GCMProfileService(Profile* profile);
|
| - virtual ~GCMProfileService();
|
| + explicit GCMService(scoped_ptr<IdentityProvider> identity_provider);
|
| + virtual ~GCMService();
|
|
|
| void Initialize(scoped_ptr<GCMClientFactory> gcm_client_factory);
|
|
|
| @@ -84,14 +53,15 @@ class GCMProfileService : public KeyedService,
|
|
|
| void Stop();
|
|
|
| - // KeyedService implementation.
|
| - virtual void Shutdown() OVERRIDE;
|
| + // This method must be called before destroying the GCMService. Once it has
|
| + // been called, no other GCMService methods may be used.
|
| + void ShutdownService();
|
|
|
| // Adds a handler for a given app.
|
| - virtual void AddAppHandler(const std::string& app_id, GCMAppHandler* handler);
|
| + void AddAppHandler(const std::string& app_id, GCMAppHandler* handler);
|
|
|
| // Remove the handler for a given app.
|
| - virtual void RemoveAppHandler(const std::string& app_id);
|
| + void RemoveAppHandler(const std::string& app_id);
|
|
|
| // Registers |sender_id| for an app. A registration ID will be returned by
|
| // the GCM server.
|
| @@ -123,8 +93,8 @@ class GCMProfileService : public KeyedService,
|
| // For testing purpose.
|
| GCMClient* GetGCMClientForTesting() const;
|
|
|
| - // Returns the user name if the profile is signed in.
|
| - std::string SignedInUserName() const;
|
| + // Returns true if the service was started.
|
| + bool IsStarted() const;
|
|
|
| // Returns true if the gcm client is ready.
|
| bool IsGCMClientReady() const;
|
| @@ -132,14 +102,27 @@ class GCMProfileService : public KeyedService,
|
| // Get GCM client internal states and statistics.
|
| // If clear_logs is true then activity logs will be cleared before the stats
|
| // are returned.
|
| - void GetGCMStatistics(GetGCMStatisticsCallback callback,
|
| - bool clear_logs);
|
| + void GetGCMStatistics(GetGCMStatisticsCallback callback, bool clear_logs);
|
|
|
| // Enables/disables GCM activity recording, and then returns the stats.
|
| void SetGCMRecording(GetGCMStatisticsCallback callback, bool recording);
|
|
|
| + // IdentityProvider::Observer:
|
| + virtual void OnActiveAccountLogin() OVERRIDE;
|
| + virtual void OnActiveAccountLogout() OVERRIDE;
|
| +
|
| + protected:
|
| + virtual bool ShouldStartAutomatically() const = 0;
|
| +
|
| + virtual base::FilePath GetStorePath() const = 0;
|
| +
|
| + virtual scoped_refptr<net::URLRequestContextGetter>
|
| + GetURLRequestContextGetter() const = 0;
|
| +
|
| + scoped_ptr<IdentityProvider> identity_provider_;
|
| +
|
| private:
|
| - friend class GCMProfileServiceTestConsumer;
|
| + friend class TestGCMServiceWrapper;
|
| friend class extensions::ExtensionGCMAppHandlerTest;
|
|
|
| class DelayedTaskController;
|
| @@ -147,31 +130,16 @@ class GCMProfileService : public KeyedService,
|
|
|
| typedef std::map<std::string, GCMAppHandler*> GCMAppHandlerMap;
|
|
|
| - // Overridden from content::NotificationObserver:
|
| - virtual void Observe(int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) OVERRIDE;
|
| -
|
| - // Overridden from SigninManagerBase::Observer:
|
| - virtual void GoogleSigninSucceeded(const std::string& username,
|
| - const std::string& password) OVERRIDE;
|
| - virtual void GoogleSignedOut(const std::string& username) OVERRIDE;
|
| -
|
| - // Ensures that the GCMClient is loaded and the GCM check-in is done when
|
| - // the profile was signed in.
|
| + // Ensures that the GCMClient is loaded and the GCM check-in is done if the
|
| + // |identity_provider_| is able to supply an account ID.
|
| void EnsureLoaded();
|
|
|
| // Remove cached data when GCM service is stopped.
|
| void RemoveCachedData();
|
|
|
| - // Checks out of GCM when the profile has been signed out. This will erase
|
| - // all the cached and persisted data.
|
| + // Checks out of GCM and erases any cached and persisted data.
|
| void CheckOut();
|
|
|
| - // Resets the GCMClient instance. This is called when the profile is being
|
| - // destroyed.
|
| - void ResetGCMClient();
|
| -
|
| // Ensures that the app is ready for GCM functions and events.
|
| GCMClient::Result EnsureAppReady(const std::string& app_id);
|
|
|
| @@ -206,21 +174,18 @@ class GCMProfileService : public KeyedService,
|
|
|
| void GetGCMStatisticsFinished(GCMClient::GCMStatistics stats);
|
|
|
| - // The profile which owns this object.
|
| - Profile* profile_;
|
| -
|
| // Flag to indicate if GCMClient is ready.
|
| bool gcm_client_ready_;
|
|
|
| - // The username of the signed-in profile.
|
| - std::string username_;
|
| -
|
| - content::NotificationRegistrar registrar_;
|
| + // The account ID that this service is responsible for. Empty when the service
|
| + // is not running.
|
| + std::string account_id_;
|
|
|
| scoped_ptr<DelayedTaskController> delayed_task_controller_;
|
|
|
| - // For all the work occured in IO thread.
|
| - scoped_refptr<IOWorker> io_worker_;
|
| + // For all the work occurring on the IO thread. Must be destroyed on the IO
|
| + // thread.
|
| + scoped_ptr<IOWorker> io_worker_;
|
|
|
| // App handler map (from app_id to handler pointer).
|
| // The handler is not owned.
|
| @@ -242,11 +207,11 @@ class GCMProfileService : public KeyedService,
|
| GetGCMStatisticsCallback request_gcm_statistics_callback_;
|
|
|
| // Used to pass a weak pointer to the IO worker.
|
| - base::WeakPtrFactory<GCMProfileService> weak_ptr_factory_;
|
| + base::WeakPtrFactory<GCMService> weak_ptr_factory_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(GCMProfileService);
|
| + DISALLOW_COPY_AND_ASSIGN(GCMService);
|
| };
|
|
|
| } // namespace gcm
|
|
|
| -#endif // CHROME_BROWSER_SERVICES_GCM_GCM_PROFILE_SERVICE_H_
|
| +#endif // CHROME_BROWSER_SERVICES_GCM_GCM_SERVICE_H_
|
|
|