// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef GOOGLE_APIS_GCM_ENGINE_GCM_STORE_H_ #define GOOGLE_APIS_GCM_ENGINE_GCM_STORE_H_ #include #include #include #include #include "base/basictypes.h" #include "base/callback_forward.h" #include "base/memory/linked_ptr.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "base/time/time.h" #include "google_apis/gcm/base/gcm_export.h" #include "google_apis/gcm/engine/registration_info.h" namespace gcm { class MCSMessage; // A GCM data store interface. GCM Store will handle persistence portion of RMQ, // as well as store device and user checkin information. class GCM_EXPORT GCMStore { public: // Map of message id to message data for outgoing messages. typedef std::map > OutgoingMessageMap; // Container for Load(..) results. struct GCM_EXPORT LoadResult { LoadResult(); ~LoadResult(); bool success; uint64 device_android_id; uint64 device_security_token; RegistrationInfoMap registrations; std::vector incoming_messages; OutgoingMessageMap outgoing_messages; std::map gservices_settings; std::string gservices_digest; base::Time last_checkin_time; }; typedef std::vector PersistentIdList; typedef base::Callback result)> LoadCallback; typedef base::Callback UpdateCallback; GCMStore(); virtual ~GCMStore(); // Load the data from persistent store and pass the initial state back to // caller. virtual void Load(const LoadCallback& callback) = 0; // Close the persistent store. virtual void Close() = 0; // Clears the GCM store of all data. virtual void Destroy(const UpdateCallback& callback) = 0; // Sets this device's messaging credentials. virtual void SetDeviceCredentials(uint64 device_android_id, uint64 device_security_token, const UpdateCallback& callback) = 0; // Registration info. virtual void AddRegistration(const std::string& app_id, const linked_ptr& registration, const UpdateCallback& callback) = 0; virtual void RemoveRegistration(const std::string& app_id, const UpdateCallback& callback) = 0; // Unacknowledged incoming message handling. virtual void AddIncomingMessage(const std::string& persistent_id, const UpdateCallback& callback) = 0; virtual void RemoveIncomingMessage(const std::string& persistent_id, const UpdateCallback& callback) = 0; virtual void RemoveIncomingMessages(const PersistentIdList& persistent_ids, const UpdateCallback& callback) = 0; // Unacknowledged outgoing messages handling. // Returns false if app has surpassed message limits, else returns true. Note // that the message isn't persisted until |callback| is invoked with // |success| == true. virtual bool AddOutgoingMessage(const std::string& persistent_id, const MCSMessage& message, const UpdateCallback& callback) = 0; virtual void OverwriteOutgoingMessage(const std::string& persistent_id, const MCSMessage& message, const UpdateCallback& callback) = 0; virtual void RemoveOutgoingMessage(const std::string& persistent_id, const UpdateCallback& callback) = 0; virtual void RemoveOutgoingMessages(const PersistentIdList& persistent_ids, const UpdateCallback& callback) = 0; // Sets last device's checkin time. virtual void SetLastCheckinTime(const base::Time& last_checkin_time, const UpdateCallback& callback) = 0; // G-service settings handling. // Persists |settings| and |settings_digest|. It completely replaces the // existing data. virtual void SetGServicesSettings( const std::map& settings, const std::string& settings_digest, const UpdateCallback& callback) = 0; private: DISALLOW_COPY_AND_ASSIGN(GCMStore); }; } // namespace gcm #endif // GOOGLE_APIS_GCM_ENGINE_GCM_STORE_H_