gcm_channel_status_request.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef COMPONENTS_GCM_DRIVER_GCM_CHANNEL_STATUS_REQUEST_H_ 6#define COMPONENTS_GCM_DRIVER_GCM_CHANNEL_STATUS_REQUEST_H_ 7 8#include "base/callback.h" 9#include "base/compiler_specific.h" 10#include "base/macros.h" 11#include "base/memory/ref_counted.h" 12#include "base/memory/scoped_ptr.h" 13#include "base/memory/weak_ptr.h" 14#include "net/base/backoff_entry.h" 15#include "net/url_request/url_fetcher_delegate.h" 16#include "net/url_request/url_request_context_getter.h" 17 18namespace net { 19class URLRequestContextGetter; 20} 21 22namespace gcm { 23 24// Defines the request to talk with the server to determine if the GCM support 25// should be enabled. 26class GCMChannelStatusRequest : public net::URLFetcherDelegate { 27 public: 28 // Callback completing the channel status request. 29 typedef base::Callback<void(bool enabled, int poll_interval_seconds)> 30 GCMChannelStatusRequestCallback; 31 32 GCMChannelStatusRequest( 33 const scoped_refptr<net::URLRequestContextGetter>& request_context_getter, 34 const GCMChannelStatusRequestCallback& callback); 35 virtual ~GCMChannelStatusRequest(); 36 37 void Start(); 38 39 static int default_poll_interval_seconds(); 40 static int min_poll_interval_seconds(); 41 42 private: 43 // Overridden from URLFetcherDelegate: 44 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 45 46 bool ParseResponse(const net::URLFetcher* source); 47 void RetryWithBackoff(bool update_backoff); 48 49 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; 50 GCMChannelStatusRequestCallback callback_; 51 scoped_ptr<net::URLFetcher> url_fetcher_; 52 net::BackoffEntry backoff_entry_; 53 base::WeakPtrFactory<GCMChannelStatusRequest> weak_ptr_factory_; 54 55 DISALLOW_COPY_AND_ASSIGN(GCMChannelStatusRequest); 56}; 57 58} // namespace gcm 59 60#endif // COMPONENTS_GCM_DRIVER_GCM_CHANNEL_STATUS_REQUEST_H_ 61