Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(809)

Side by Side Diff: google_apis/gcm/gcm_client_impl.h

Issue 215363007: [GCM] Adding basic G-services handling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebasing Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef GOOGLE_APIS_GCM_GCM_CLIENT_IMPL_H_ 5 #ifndef GOOGLE_APIS_GCM_GCM_CLIENT_IMPL_H_
6 #define GOOGLE_APIS_GCM_GCM_CLIENT_IMPL_H_ 6 #define GOOGLE_APIS_GCM_GCM_CLIENT_IMPL_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/memory/ref_counted.h" 13 #include "base/memory/ref_counted.h"
14 #include "base/memory/weak_ptr.h" 14 #include "base/memory/weak_ptr.h"
15 #include "base/stl_util.h" 15 #include "base/stl_util.h"
16 #include "google_apis/gcm/base/mcs_message.h" 16 #include "google_apis/gcm/base/mcs_message.h"
17 #include "google_apis/gcm/engine/gcm_store.h" 17 #include "google_apis/gcm/engine/gcm_store.h"
18 #include "google_apis/gcm/engine/mcs_client.h" 18 #include "google_apis/gcm/engine/mcs_client.h"
19 #include "google_apis/gcm/engine/registration_request.h" 19 #include "google_apis/gcm/engine/registration_request.h"
20 #include "google_apis/gcm/engine/unregistration_request.h" 20 #include "google_apis/gcm/engine/unregistration_request.h"
21 #include "google_apis/gcm/gcm_client.h" 21 #include "google_apis/gcm/gcm_client.h"
22 #include "google_apis/gcm/protocol/android_checkin.pb.h" 22 #include "google_apis/gcm/protocol/checkin.pb.h"
23 #include "net/base/net_log.h" 23 #include "net/base/net_log.h"
24 #include "net/url_request/url_request_context_getter.h" 24 #include "net/url_request/url_request_context_getter.h"
25 25
26 class GURL; 26 class GURL;
27 27
28 namespace base { 28 namespace base {
29 class Clock; 29 class Clock;
30 } // namespace base 30 } // namespace base
31 31
32 namespace net { 32 namespace net {
33 class HttpNetworkSession; 33 class HttpNetworkSession;
34 } // namespace net 34 } // namespace net
35 35
36 namespace gcm { 36 namespace gcm {
37 37
38 class CheckinRequest; 38 class CheckinRequest;
39 class ConnectionFactory; 39 class ConnectionFactory;
40 class GCMClientImplTest; 40 class GCMClientImplTest;
41 41
42 // Map with GServices settings.
43 // TODO(fgorski): Extract services handling to a separate struct/class.
44 typedef std::map<std::string, std::string> GServicesSettingsMap;
45
42 // Helper class for building GCM internals. Allows tests to inject fake versions 46 // Helper class for building GCM internals. Allows tests to inject fake versions
43 // as necessary. 47 // as necessary.
44 class GCM_EXPORT GCMInternalsBuilder { 48 class GCM_EXPORT GCMInternalsBuilder {
45 public: 49 public:
46 GCMInternalsBuilder(); 50 GCMInternalsBuilder();
47 virtual ~GCMInternalsBuilder(); 51 virtual ~GCMInternalsBuilder();
48 52
49 virtual scoped_ptr<base::Clock> BuildClock(); 53 virtual scoped_ptr<base::Clock> BuildClock();
50 virtual scoped_ptr<MCSClient> BuildMCSClient( 54 virtual scoped_ptr<MCSClient> BuildMCSClient(
51 const std::string& version, 55 const std::string& version,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 // Starts a login on mcs_client_. 160 // Starts a login on mcs_client_.
157 void StartMCSLogin(); 161 void StartMCSLogin();
158 // Resets state to before initialization. 162 // Resets state to before initialization.
159 void ResetState(); 163 void ResetState();
160 // Sets state to ready. This will initiate the MCS login and notify the 164 // Sets state to ready. This will initiate the MCS login and notify the
161 // delegates. 165 // delegates.
162 void OnReady(); 166 void OnReady();
163 167
164 // Starts a first time device checkin. 168 // Starts a first time device checkin.
165 void StartCheckin(); 169 void StartCheckin();
166 // Completes the device checkin request. 170 // Completes the device checkin request by parsing the |checkin_response|.
167 // |android_id| and |security_token| are expected to be non-zero or an error 171 // Function also cleans up the pending checkin.
168 // is triggered. Function also cleans up the pending checkin. 172 void OnCheckinCompleted(
169 void OnCheckinCompleted(uint64 android_id, 173 const checkin_proto::AndroidCheckinResponse& checkin_response);
170 uint64 security_token); 174 // Schedules next device checkin, based on |last_checkin_time| and
171 // Schedules next device checkin, based on |last_checkin_time| and default 175 // checkin_interval specified in GServices settings.
172 // checkin interval.
173 void SchedulePeriodicCheckin(const base::Time& last_checkin_time); 176 void SchedulePeriodicCheckin(const base::Time& last_checkin_time);
174 // Callback for setting last checkin time in the |gcm_store_|. 177 // Callback for setting last checkin time in the |gcm_store_|.
175 void SetLastCheckinTimeCallback(bool success); 178 void SetLastCheckinTimeCallback(bool success);
176 179
177 // Callback for persisting device credentials in the |gcm_store_|. 180 // Callback for persisting device credentials in the |gcm_store_|.
178 void SetDeviceCredentialsCallback(bool success); 181 void SetDeviceCredentialsCallback(bool success);
179 182
180 // Callback for persisting registration info in the |gcm_store_|. 183 // Callback for persisting registration info in the |gcm_store_|.
181 void UpdateRegistrationCallback(bool success); 184 void UpdateRegistrationCallback(bool success);
182 185
(...skipping 18 matching lines...) Expand all
201 void HandleIncomingDataMessage( 204 void HandleIncomingDataMessage(
202 const mcs_proto::DataMessageStanza& data_message_stanza, 205 const mcs_proto::DataMessageStanza& data_message_stanza,
203 MessageData& message_data); 206 MessageData& message_data);
204 207
205 // Fires OnMessageSendError event on the delegate of this calss, based on the 208 // Fires OnMessageSendError event on the delegate of this calss, based on the
206 // details in |data_message_stanza| and |message_data|. 209 // details in |data_message_stanza| and |message_data|.
207 void HandleIncomingSendError( 210 void HandleIncomingSendError(
208 const mcs_proto::DataMessageStanza& data_message_stanza, 211 const mcs_proto::DataMessageStanza& data_message_stanza,
209 MessageData& message_data); 212 MessageData& message_data);
210 213
214 // Updates the G-services settings based on the |checkin_response|. It assumes
215 // base::Time::Now() is the checkin time.
216 void UpdateGServicesSettings(
217 const checkin_proto::AndroidCheckinResponse& checkin_response);
218 // Completes the G-services settings update request.
219 void UpdateGServicesSettingsCallback(bool success);
220
211 // Builder for the GCM internals (mcs client, etc.). 221 // Builder for the GCM internals (mcs client, etc.).
212 scoped_ptr<GCMInternalsBuilder> internals_builder_; 222 scoped_ptr<GCMInternalsBuilder> internals_builder_;
213 223
214 // State of the GCM Client Implementation. 224 // State of the GCM Client Implementation.
215 State state_; 225 State state_;
216 226
217 Delegate* delegate_; 227 Delegate* delegate_;
218 228
219 // Device checkin info (android ID and security token used by device). 229 // Device checkin info (android ID and security token used by device).
220 CheckinInfo device_checkin_info_; 230 CheckinInfo device_checkin_info_;
221 231
222 // Clock used for timing of retry logic. Passed in for testing. Owned by 232 // Clock used for timing of retry logic. Passed in for testing. Owned by
223 // GCMClientImpl. 233 // GCMClientImpl.
224 scoped_ptr<base::Clock> clock_; 234 scoped_ptr<base::Clock> clock_;
225 235
226 // Information about the chrome build. 236 // Information about the chrome build.
227 // TODO(fgorski): Check if it can be passed in constructor and made const. 237 // TODO(fgorski): Check if it can be passed in constructor and made const.
228 checkin_proto::ChromeBuildProto chrome_build_proto_; 238 checkin_proto::ChromeBuildProto chrome_build_proto_;
229 239
230 // Persistent data store for keeping device credentials, messages and user to 240 // Persistent data store for keeping device credentials, messages and user to
231 // serial number mappings. 241 // serial number mappings.
232 scoped_ptr<GCMStore> gcm_store_; 242 scoped_ptr<GCMStore> gcm_store_;
233 243
234 scoped_refptr<net::HttpNetworkSession> network_session_; 244 scoped_refptr<net::HttpNetworkSession> network_session_;
235 net::BoundNetLog net_log_; 245 net::BoundNetLog net_log_;
236 scoped_ptr<ConnectionFactory> connection_factory_; 246 scoped_ptr<ConnectionFactory> connection_factory_;
237 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 247 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
238 248
249 // Map with GServices settings, such us checkin_interval, checkin_url, etc.
250 GServicesSettingsMap gservices_settings_;
251
252 // Digest of the |gservices_settings|.
253 std::string gservices_digest_;
254
239 // Controls receiving and sending of packets and reliable message queueing. 255 // Controls receiving and sending of packets and reliable message queueing.
240 scoped_ptr<MCSClient> mcs_client_; 256 scoped_ptr<MCSClient> mcs_client_;
241 257
242 scoped_ptr<CheckinRequest> checkin_request_; 258 scoped_ptr<CheckinRequest> checkin_request_;
243 std::vector<std::string> account_ids_; 259 std::vector<std::string> account_ids_;
244 260
245 // Cached registration info. 261 // Cached registration info.
246 RegistrationInfoMap registrations_; 262 RegistrationInfoMap registrations_;
247 263
248 // Currently pending registration requests. GCMClientImpl owns the 264 // Currently pending registration requests. GCMClientImpl owns the
(...skipping 10 matching lines...) Expand all
259 275
260 // Factory for creating references in callbacks. 276 // Factory for creating references in callbacks.
261 base::WeakPtrFactory<GCMClientImpl> weak_ptr_factory_; 277 base::WeakPtrFactory<GCMClientImpl> weak_ptr_factory_;
262 278
263 DISALLOW_COPY_AND_ASSIGN(GCMClientImpl); 279 DISALLOW_COPY_AND_ASSIGN(GCMClientImpl);
264 }; 280 };
265 281
266 } // namespace gcm 282 } // namespace gcm
267 283
268 #endif // GOOGLE_APIS_GCM_GCM_CLIENT_IMPL_H_ 284 #endif // GOOGLE_APIS_GCM_GCM_CLIENT_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698