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

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: Addressing Jian Li's CR comments. 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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 void OnFirstTimeDeviceCheckinCompleted(const CheckinInfo& checkin_info); 159 void OnFirstTimeDeviceCheckinCompleted(const CheckinInfo& checkin_info);
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(const CheckinInfo& checkin_info); 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
175 // checkin_interval specified in GServices settings.
176 void SchedulePeriodicCheckin(const base::Time& last_checkin_time);
171 177
172 // Callback for persisting device credentials in the |gcm_store_|. 178 // Callback for persisting device credentials in the |gcm_store_|.
173 void SetDeviceCredentialsCallback(bool success); 179 void SetDeviceCredentialsCallback(bool success);
174 180
175 // Callback for persisting registration info in the |gcm_store_|. 181 // Callback for persisting registration info in the |gcm_store_|.
176 void UpdateRegistrationCallback(bool success); 182 void UpdateRegistrationCallback(bool success);
177 183
178 // Completes the registration request. 184 // Completes the registration request.
179 void OnRegisterCompleted(const std::string& app_id, 185 void OnRegisterCompleted(const std::string& app_id,
180 const std::vector<std::string>& sender_ids, 186 const std::vector<std::string>& sender_ids,
(...skipping 15 matching lines...) Expand all
196 void HandleIncomingDataMessage( 202 void HandleIncomingDataMessage(
197 const mcs_proto::DataMessageStanza& data_message_stanza, 203 const mcs_proto::DataMessageStanza& data_message_stanza,
198 MessageData& message_data); 204 MessageData& message_data);
199 205
200 // Fires OnMessageSendError event on the delegate of this calss, based on the 206 // Fires OnMessageSendError event on the delegate of this calss, based on the
201 // details in |data_message_stanza| and |message_data|. 207 // details in |data_message_stanza| and |message_data|.
202 void HandleIncomingSendError( 208 void HandleIncomingSendError(
203 const mcs_proto::DataMessageStanza& data_message_stanza, 209 const mcs_proto::DataMessageStanza& data_message_stanza,
204 MessageData& message_data); 210 MessageData& message_data);
205 211
212 // Updates the GServicesSettings based on the |checkin_response|.
Nicolas Zea 2014/04/01 21:42:14 Mention that it assumes base::Time::Now() is the c
fgorski 2014/04/02 18:23:00 Done.
213 void UpdateGServicesSettings(
214 const checkin_proto::AndroidCheckinResponse& checkin_response);
215 // Completes the G-services settings update request.
216 void UpdateGServicesSettingsCallback(bool success);
217
218 // Calculates the Checkin interval based on the services settings or defaults
219 // to a sensible value. Virtual for testing.
220 virtual base::TimeDelta GetCheckinInterval() const;
221
206 // Builder for the GCM internals (mcs client, etc.). 222 // Builder for the GCM internals (mcs client, etc.).
207 scoped_ptr<GCMInternalsBuilder> internals_builder_; 223 scoped_ptr<GCMInternalsBuilder> internals_builder_;
208 224
209 // State of the GCM Client Implementation. 225 // State of the GCM Client Implementation.
210 State state_; 226 State state_;
211 227
212 Delegate* delegate_; 228 Delegate* delegate_;
213 229
214 // Device checkin info (android ID and security token used by device). 230 // Device checkin info (android ID and security token used by device).
215 CheckinInfo device_checkin_info_; 231 CheckinInfo device_checkin_info_;
216 232
217 // Clock used for timing of retry logic. Passed in for testing. Owned by 233 // Clock used for timing of retry logic. Passed in for testing. Owned by
218 // GCMClientImpl. 234 // GCMClientImpl.
219 scoped_ptr<base::Clock> clock_; 235 scoped_ptr<base::Clock> clock_;
220 236
221 // Information about the chrome build. 237 // Information about the chrome build.
222 // TODO(fgorski): Check if it can be passed in constructor and made const. 238 // TODO(fgorski): Check if it can be passed in constructor and made const.
223 checkin_proto::ChromeBuildProto chrome_build_proto_; 239 checkin_proto::ChromeBuildProto chrome_build_proto_;
224 240
225 // Persistent data store for keeping device credentials, messages and user to 241 // Persistent data store for keeping device credentials, messages and user to
226 // serial number mappings. 242 // serial number mappings.
227 scoped_ptr<GCMStore> gcm_store_; 243 scoped_ptr<GCMStore> gcm_store_;
228 244
229 scoped_refptr<net::HttpNetworkSession> network_session_; 245 scoped_refptr<net::HttpNetworkSession> network_session_;
230 net::BoundNetLog net_log_; 246 net::BoundNetLog net_log_;
231 scoped_ptr<ConnectionFactory> connection_factory_; 247 scoped_ptr<ConnectionFactory> connection_factory_;
232 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 248 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
233 249
250 // Map with GServices settings, such us checkin_interval, checkin_url, etc.
251 GServicesSettingsMap gservices_settings_;
252
253 // Digest of the |gservices_settings|.
254 std::string gservices_digest_;
255
234 // Controls receiving and sending of packets and reliable message queueing. 256 // Controls receiving and sending of packets and reliable message queueing.
235 scoped_ptr<MCSClient> mcs_client_; 257 scoped_ptr<MCSClient> mcs_client_;
236 258
237 scoped_ptr<CheckinRequest> checkin_request_; 259 scoped_ptr<CheckinRequest> checkin_request_;
238 std::vector<std::string> account_ids_; 260 std::vector<std::string> account_ids_;
239 261
240 // Cached registration info. 262 // Cached registration info.
241 RegistrationInfoMap registrations_; 263 RegistrationInfoMap registrations_;
242 264
243 // Currently pending registration requests. GCMClientImpl owns the 265 // Currently pending registration requests. GCMClientImpl owns the
(...skipping 10 matching lines...) Expand all
254 276
255 // Factory for creating references in callbacks. 277 // Factory for creating references in callbacks.
256 base::WeakPtrFactory<GCMClientImpl> weak_ptr_factory_; 278 base::WeakPtrFactory<GCMClientImpl> weak_ptr_factory_;
257 279
258 DISALLOW_COPY_AND_ASSIGN(GCMClientImpl); 280 DISALLOW_COPY_AND_ASSIGN(GCMClientImpl);
259 }; 281 };
260 282
261 } // namespace gcm 283 } // namespace gcm
262 284
263 #endif // GOOGLE_APIS_GCM_GCM_CLIENT_IMPL_H_ 285 #endif // GOOGLE_APIS_GCM_GCM_CLIENT_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698