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