Home | History | Annotate | Download | only in engine
      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 
     18 namespace gcm {
     19 
     20 // Class responsible for handling G-services settings. It takes care of
     21 // extracting them from checkin response and storing in GCMStore.
     22 class 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