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 GOOGLE_APIS_GCM_ENGINE_GSERVICES_SETTINGS_H_
6#define GOOGLE_APIS_GCM_ENGINE_GSERVICES_SETTINGS_H_
7
8#include <map>
9#include <string>
10
11#include "base/memory/weak_ptr.h"
12#include "base/time/time.h"
13#include "google_apis/gcm/base/gcm_export.h"
14#include "google_apis/gcm/engine/gcm_store.h"
15#include "google_apis/gcm/protocol/checkin.pb.h"
16#include "url/gurl.h"
17
18namespace gcm {
19
20// Class responsible for handling G-services settings. It takes care of
21// extracting them from checkin response and storing in GCMStore.
22class GCM_EXPORT GServicesSettings {
23 public:
24  typedef std::map<std::string, std::string> SettingsMap;
25
26  // Minimum periodic checkin interval in seconds.
27  static const base::TimeDelta MinimumCheckinInterval();
28
29  // Default checkin URL.
30  static const GURL DefaultCheckinURL();
31
32  // Calculates digest of provided settings.
33  static std::string CalculateDigest(const SettingsMap& settings);
34
35  GServicesSettings();
36  ~GServicesSettings();
37
38  // Updates the settings based on |checkin_response|.
39  bool UpdateFromCheckinResponse(
40      const checkin_proto::AndroidCheckinResponse& checkin_response);
41
42  // Updates the settings based on |load_result|. Returns true if update was
43  // successful, false otherwise.
44  void UpdateFromLoadResult(const GCMStore::LoadResult& load_result);
45
46  SettingsMap settings_map() const { return settings_; }
47
48  std::string digest() const { return digest_; }
49
50  // Gets the interval at which device should perform a checkin.
51  base::TimeDelta GetCheckinInterval() const;
52
53  // Gets the URL to use when checking in.
54  GURL GetCheckinURL() const;
55
56  // Gets address of main MCS endpoint.
57  GURL GetMCSMainEndpoint() const;
58
59  // Gets address of fallback MCS endpoint.
60  GURL GetMCSFallbackEndpoint() const;
61
62  // Gets the URL to use when registering or unregistering the apps.
63  GURL GetRegistrationURL() const;
64
65 private:
66  // Digest (hash) of the settings, used to check whether settings need update.
67  // It is meant to be sent with checkin request, instead of sending the whole
68  // settings table.
69  std::string digest_;
70
71  // G-services settings as provided by checkin response.
72  SettingsMap settings_;
73
74  // Factory for creating references in callbacks.
75  base::WeakPtrFactory<GServicesSettings> weak_ptr_factory_;
76
77  DISALLOW_COPY_AND_ASSIGN(GServicesSettings);
78};
79
80}  // namespace gcm
81
82#endif  // GOOGLE_APIS_GCM_ENGINE_GSERVICES_SETTINGS_H_
83