| Index: sync/notifier/gcm_network_channel.h
|
| diff --git a/sync/notifier/gcm_network_channel.h b/sync/notifier/gcm_network_channel.h
|
| index b7d97fb41d76bcd176b01c2d60585e8e51ff16a6..b8bd0a4aca7ff5cc353521470be145d02a88256b 100644
|
| --- a/sync/notifier/gcm_network_channel.h
|
| +++ b/sync/notifier/gcm_network_channel.h
|
| @@ -10,26 +10,65 @@
|
| #include "base/basictypes.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/threading/non_thread_safe.h"
|
| +#include "net/url_request/url_fetcher_delegate.h"
|
| #include "sync/base/sync_export.h"
|
| +#include "sync/notifier/gcm_network_channel_delegate.h"
|
| #include "sync/notifier/sync_system_resources.h"
|
| +#include "url/gurl.h"
|
| +
|
| +class GoogleServiceAuthError;
|
|
|
| namespace syncer {
|
|
|
| // GCMNetworkChannel is an implementation of SyncNetworkChannel that routes
|
| // messages through GCMProfileService.
|
| class SYNC_EXPORT_PRIVATE GCMNetworkChannel
|
| - : public SyncNetworkChannel {
|
| + : public SyncNetworkChannel,
|
| + public net::URLFetcherDelegate,
|
| + public base::NonThreadSafe {
|
| public:
|
| - explicit GCMNetworkChannel();
|
| + GCMNetworkChannel(
|
| + scoped_refptr<net::URLRequestContextGetter> request_context_getter,
|
| + scoped_ptr<GCMNetworkChannelDelegate> delegate);
|
|
|
| virtual ~GCMNetworkChannel();
|
|
|
| // SyncNetworkChannel implementation.
|
| virtual void SendEncodedMessage(const std::string& encoded_message) OVERRIDE;
|
| virtual void UpdateCredentials(const std::string& email,
|
| - const std::string& token) OVERRIDE;
|
| + const std::string& token) OVERRIDE;
|
| +
|
| + // URLFetcherDelegate implementation.
|
| + virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
|
|
|
| private:
|
| + void OnRegisterComplete(const std::string& registration_id,
|
| + gcm::GCMClient::Result result);
|
| + void RequestAccessToken();
|
| + void OnGetTokenComplete(const GoogleServiceAuthError& error,
|
| + const std::string& token);
|
| + GURL BuildUrl();
|
| +
|
| + scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
|
| + scoped_ptr<GCMNetworkChannelDelegate> delegate_;
|
| +
|
| + // Message is saved until all conditions are met: there is valid
|
| + // registration_id and access_token.
|
| + std::string encoded_message_;
|
| +
|
| + // Access token is saved because in case of auth failure from server we need
|
| + // to invalidate it.
|
| + std::string access_token_;
|
| +
|
| + // GCM registration_id is requested one at startup and never refreshed until
|
| + // next restart.
|
| + std::string registration_id_;
|
| +
|
| + scoped_ptr<net::URLFetcher> fetcher_;
|
| +
|
| + base::WeakPtrFactory<GCMNetworkChannel> weak_factory_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(GCMNetworkChannel);
|
| };
|
|
|
|
|