Chromium Code Reviews| Index: components/gcm_driver/gcm_driver.h |
| diff --git a/components/gcm_driver/gcm_driver.h b/components/gcm_driver/gcm_driver.h |
| index 897dbfa51975ce883b18bdb3440d06e11c20e2c5..f5e1b2bcae279e926459f50911a0b6c6ca416c62 100644 |
| --- a/components/gcm_driver/gcm_driver.h |
| +++ b/components/gcm_driver/gcm_driver.h |
| @@ -9,36 +9,18 @@ |
| #include <string> |
| #include <vector> |
| -#include "base/basictypes.h" |
| #include "base/callback.h" |
| -#include "base/compiler_specific.h" |
| -#include "base/memory/ref_counted.h" |
| -#include "base/memory/scoped_ptr.h" |
| -#include "base/memory/weak_ptr.h" |
| +#include "base/macros.h" |
| +#include "base/threading/thread_checker.h" |
| #include "components/gcm_driver/default_gcm_app_handler.h" |
| -#include "google_apis/gaia/identity_provider.h" |
| #include "google_apis/gcm/gcm_client.h" |
| -namespace base { |
| -class FilePath; |
| -class SequencedTaskRunner; |
| -} |
| - |
| -namespace extensions { |
| -class ExtensionGCMAppHandlerTest; |
| -} |
| - |
| -namespace net { |
| -class URLRequestContextGetter; |
| -} |
| - |
| namespace gcm { |
| class GCMAppHandler; |
| -class GCMClientFactory; |
| -// A bridge between the GCM users in Chrome and the GCMClient layer. |
| -class GCMDriver : public IdentityProvider::Observer { |
| +// Bridge between GCM users in Chrome and the platform-specific implementation. |
| +class GCMDriver { |
| public: |
| typedef std::map<std::string, GCMAppHandler*> GCMAppHandlerMap; |
| typedef base::Callback<void(const std::string& registration_id, |
| @@ -49,20 +31,12 @@ class GCMDriver : public IdentityProvider::Observer { |
| typedef base::Callback<void(const GCMClient::GCMStatistics& stats)> |
| GetGCMStatisticsCallback; |
| - GCMDriver( |
| - scoped_ptr<GCMClientFactory> gcm_client_factory, |
| - scoped_ptr<IdentityProvider> identity_provider, |
| - const GCMClient::ChromeBuildInfo& chrome_build_info, |
| - const base::FilePath& store_path, |
| - const scoped_refptr<net::URLRequestContextGetter>& request_context, |
| - const scoped_refptr<base::SequencedTaskRunner>& ui_thread, |
| - const scoped_refptr<base::SequencedTaskRunner>& io_thread, |
| - const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner); |
| + GCMDriver(); |
| virtual ~GCMDriver(); |
| // Enables/disables GCM service. |
| - void Enable(); |
| - void Disable(); |
| + virtual void Enable() = 0; |
|
jianli
2014/05/29 00:54:54
Move these 2 methods down to group with all other
johnme
2014/05/29 17:40:55
Done (and reordered to match elsewhere).
|
| + virtual void Disable() = 0; |
| // This method must be called before destroying the GCMDriver. Once it has |
| // been called, no other GCMDriver methods may be used. |
| @@ -83,13 +57,13 @@ class GCMDriver : public IdentityProvider::Observer { |
| // |callback|: to be called once the asynchronous operation is done. |
| virtual void Register(const std::string& app_id, |
| const std::vector<std::string>& sender_ids, |
| - const RegisterCallback& callback); |
| + const RegisterCallback& callback) = 0; |
| // Unregisters an app from using GCM. |
| // |app_id|: application ID. |
| // |callback|: to be called once the asynchronous operation is done. |
| virtual void Unregister(const std::string& app_id, |
| - const UnregisterCallback& callback); |
| + const UnregisterCallback& callback) = 0; |
| // Sends a message to a given receiver. |
| // |app_id|: application ID. |
| @@ -99,110 +73,40 @@ class GCMDriver : public IdentityProvider::Observer { |
| virtual void Send(const std::string& app_id, |
| const std::string& receiver_id, |
| const GCMClient::OutgoingMessage& message, |
| - const SendCallback& callback); |
| + const SendCallback& callback) = 0; |
| - // For testing purpose. |
| - GCMClient* GetGCMClientForTesting() const; |
| + // For testing purpose. Always NULL on Android. |
| + virtual GCMClient* GetGCMClientForTesting() const = 0; |
| // Returns true if the service was started. |
| - bool IsStarted() const; |
| + virtual bool IsStarted() const = 0; |
| // Returns true if the gcm client is ready. |
| - bool IsGCMClientReady() const; |
| + virtual bool IsGCMClientReady() const = 0; |
| // 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(const GetGCMStatisticsCallback& callback, |
| - bool clear_logs); |
| + virtual void GetGCMStatistics(const GetGCMStatisticsCallback& callback, |
| + bool clear_logs) = 0; |
| // Enables/disables GCM activity recording, and then returns the stats. |
| - void SetGCMRecording(const GetGCMStatisticsCallback& callback, |
| - bool recording); |
| + virtual void SetGCMRecording(const GetGCMStatisticsCallback& callback, |
| + bool recording) = 0; |
| // Returns the user name if the profile is signed in. Empty string otherwise. |
| - std::string SignedInUserName() const; |
| - |
| - // IdentityProvider::Observer: |
| - virtual void OnActiveAccountLogin() OVERRIDE; |
| - virtual void OnActiveAccountLogout() OVERRIDE; |
| + virtual std::string SignedInUserName() const = 0; |
| const GCMAppHandlerMap& app_handlers() const { return app_handlers_; } |
| protected: |
| - // Used for constructing fake GCMDriver for testing purpose. |
| - GCMDriver(); |
| - |
| - private: |
| - class DelayedTaskController; |
| - class IOWorker; |
| - |
| - // Ensures that the GCM service starts when all of the following conditions |
| - // satisfy: |
| - // 1) GCM is enabled. |
| - // 2) The identity provider is able to supply an account ID. |
| - GCMClient::Result EnsureStarted(); |
| - |
| - // Stops the GCM service. It can be restarted by calling EnsureStarted again. |
| - void Stop(); |
| - |
| - // Remove cached data when GCM service is stopped. |
| - void RemoveCachedData(); |
| - |
| - // Checks out of GCM and erases any cached and persisted data. |
| - void CheckOut(); |
| - |
| - // Should be called when an app with |app_id| is trying to un/register. |
| - // Checks whether another un/registration is in progress. |
| - bool IsAsyncOperationPending(const std::string& app_id) const; |
| - |
| - void DoRegister(const std::string& app_id, |
| - const std::vector<std::string>& sender_ids); |
| - void DoUnregister(const std::string& app_id); |
| - void DoSend(const std::string& app_id, |
| - const std::string& receiver_id, |
| - const GCMClient::OutgoingMessage& message); |
| - |
| - // Callbacks posted from IO thread to UI thread. |
| - void RegisterFinished(const std::string& app_id, |
| - const std::string& registration_id, |
| - GCMClient::Result result); |
| - void UnregisterFinished(const std::string& app_id, GCMClient::Result result); |
| - void SendFinished(const std::string& app_id, |
| - const std::string& message_id, |
| - GCMClient::Result result); |
| - void MessageReceived(const std::string& app_id, |
| - GCMClient::IncomingMessage message); |
| - void MessagesDeleted(const std::string& app_id); |
| - void MessageSendError(const std::string& app_id, |
| - const GCMClient::SendErrorDetails& send_error_details); |
| - void GCMClientReady(); |
| - |
| // Returns the handler for the given app. |
| GCMAppHandler* GetAppHandler(const std::string& app_id); |
| - void GetGCMStatisticsFinished(GCMClient::GCMStatistics stats); |
| - |
| - // Flag to indicate if GCM is enabled. |
| - bool gcm_enabled_; |
| - |
| - // Flag to indicate if GCMClient is ready. |
| - bool gcm_client_ready_; |
| - |
| - // The account ID that this service is responsible for. Empty when the service |
| - // is not running. |
| - std::string account_id_; |
| - |
| - scoped_ptr<IdentityProvider> identity_provider_; |
| - scoped_refptr<base::SequencedTaskRunner> ui_thread_; |
| - scoped_refptr<base::SequencedTaskRunner> io_thread_; |
| - |
| - scoped_ptr<DelayedTaskController> delayed_task_controller_; |
| - |
| - // For all the work occurring on the IO thread. Must be destroyed on the IO |
| - // thread. |
| - scoped_ptr<IOWorker> io_worker_; |
| + // Ensure GCMDriver methods are all called from the same thread. |
| + base::ThreadChecker thread_checker_; |
|
jianli
2014/05/29 00:54:54
Why do we need this? We can defer the thread check
johnme
2014/05/29 17:40:55
Using ThreadChecker, GCMDriver can easily check th
jianli
2014/05/30 06:30:23
If there is no thread switching needed for GCMDriv
johnme
2014/05/30 10:26:45
Done (removed).
|
| + private: |
| // App handler map (from app_id to handler pointer). |
| // The handler is not owned. |
| GCMAppHandlerMap app_handlers_; |
| @@ -210,21 +114,6 @@ class GCMDriver : public IdentityProvider::Observer { |
| // The default handler when no app handler can be found in the map. |
| DefaultGCMAppHandler default_app_handler_; |
| - // Callback map (from app_id to callback) for Register. |
| - std::map<std::string, RegisterCallback> register_callbacks_; |
| - |
| - // Callback map (from app_id to callback) for Unregister. |
| - std::map<std::string, UnregisterCallback> unregister_callbacks_; |
| - |
| - // Callback map (from <app_id, message_id> to callback) for Send. |
| - std::map<std::pair<std::string, std::string>, SendCallback> send_callbacks_; |
| - |
| - // Callback for GetGCMStatistics. |
| - GetGCMStatisticsCallback request_gcm_statistics_callback_; |
| - |
| - // Used to pass a weak pointer to the IO worker. |
| - base::WeakPtrFactory<GCMDriver> weak_ptr_factory_; |
| - |
| DISALLOW_COPY_AND_ASSIGN(GCMDriver); |
| }; |