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.
5 #ifndef GOOGLE_APIS_GCM_ENGINE_CHECKIN_REQUEST_H_
6 #define GOOGLE_APIS_GCM_ENGINE_CHECKIN_REQUEST_H_
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "base/memory/weak_ptr.h"
13 #include "base/time/time.h"
14 #include "google_apis/gcm/base/gcm_export.h"
15 #include "google_apis/gcm/protocol/android_checkin.pb.h"
16 #include "google_apis/gcm/protocol/checkin.pb.h"
17 #include "net/base/backoff_entry.h"
18 #include "net/url_request/url_fetcher_delegate.h"
22 class URLRequestContextGetter
;
27 class GCMStatsRecorder
;
29 // Enables making check-in requests with the GCM infrastructure. When called
30 // with android_id and security_token both set to 0 it is an initial check-in
31 // used to obtain credentials. These should be persisted and used for subsequent
33 class GCM_EXPORT CheckinRequest
: public net::URLFetcherDelegate
{
35 // A callback function for the checkin request, accepting |checkin_response|
37 typedef base::Callback
<void(const checkin_proto::AndroidCheckinResponse
&
38 checkin_response
)> CheckinRequestCallback
;
40 // Checkin request details.
41 struct GCM_EXPORT RequestInfo
{
42 RequestInfo(uint64 android_id
,
43 uint64 security_token
,
44 const std::map
<std::string
, std::string
>& account_tokens
,
45 const std::string
& settings_digest
,
46 const checkin_proto::ChromeBuildProto
& chrome_build_proto
);
49 // Android ID of the device.
51 // Security token of the device.
52 uint64 security_token
;
53 // Map of account OAuth2 tokens keyed by emails.
54 std::map
<std::string
, std::string
> account_tokens
;
55 // Digest of GServices settings on the device.
56 std::string settings_digest
;
57 // Information of the Chrome build of this device.
58 checkin_proto::ChromeBuildProto chrome_build_proto
;
61 CheckinRequest(const GURL
& checkin_url
,
62 const RequestInfo
& request_info
,
63 const net::BackoffEntry::Policy
& backoff_policy
,
64 const CheckinRequestCallback
& callback
,
65 net::URLRequestContextGetter
* request_context_getter
,
66 GCMStatsRecorder
* recorder
);
67 ~CheckinRequest() override
;
71 // URLFetcherDelegate implementation.
72 void OnURLFetchComplete(const net::URLFetcher
* source
) override
;
75 // Schedules a retry attempt, informs the backoff of a previous request's
76 // failure when |update_backoff| is true.
77 void RetryWithBackoff(bool update_backoff
);
79 net::URLRequestContextGetter
* request_context_getter_
;
80 CheckinRequestCallback callback_
;
82 net::BackoffEntry backoff_entry_
;
84 scoped_ptr
<net::URLFetcher
> url_fetcher_
;
85 const RequestInfo request_info_
;
86 base::TimeTicks request_start_time_
;
88 // Recorder that records GCM activities for debugging purpose. Not owned.
89 GCMStatsRecorder
* recorder_
;
91 base::WeakPtrFactory
<CheckinRequest
> weak_ptr_factory_
;
93 DISALLOW_COPY_AND_ASSIGN(CheckinRequest
);
98 #endif // GOOGLE_APIS_GCM_ENGINE_CHECKIN_REQUEST_H_