15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef GOOGLE_APIS_GCM_ENGINE_GCM_STORE_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define GOOGLE_APIS_GCM_ENGINE_GCM_STORE_H_ 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <map> 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string> 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <vector> 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include <google/protobuf/message_lite.h> 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/basictypes.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/callback_forward.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/linked_ptr.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/ref_counted.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/time/time.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "google_apis/gcm/base/gcm_export.h" 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "google_apis/gcm/engine/registration_info.h" 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace gcm { 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MCSMessage; 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// A GCM data store interface. GCM Store will handle persistence portion of RMQ, 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// as well as store device and user checkin information. 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GCM_EXPORT GCMStore { 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Map of message id to message data for outgoing messages. 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) typedef std::map<std::string, linked_ptr<google::protobuf::MessageLite> > 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OutgoingMessageMap; 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Container for Load(..) results. 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) struct GCM_EXPORT LoadResult { 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LoadResult(); 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ~LoadResult(); 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool success; 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint64 device_android_id; 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint64 device_security_token; 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegistrationInfoMap registrations; 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<std::string> incoming_messages; 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OutgoingMessageMap outgoing_messages; 46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::map<std::string, std::string> gservices_settings; 47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::string gservices_digest; 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::Time last_checkin_time; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) typedef std::vector<std::string> PersistentIdList; 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) typedef base::Callback<void(scoped_ptr<LoadResult> result)> LoadCallback; 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) typedef base::Callback<void(bool success)> UpdateCallback; 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GCMStore(); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~GCMStore(); 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Load the data from persistent store and pass the initial state back to 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // caller. 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Load(const LoadCallback& callback) = 0; 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Close the persistent store. 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void Close() = 0; 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Clears the GCM store of all data. 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Destroy(const UpdateCallback& callback) = 0; 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets this device's messaging credentials. 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetDeviceCredentials(uint64 device_android_id, 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) uint64 device_security_token, 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const UpdateCallback& callback) = 0; 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Registration info. 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void AddRegistration(const std::string& app_id, 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const linked_ptr<RegistrationInfo>& registration, 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const UpdateCallback& callback) = 0; 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void RemoveRegistration(const std::string& app_id, 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const UpdateCallback& callback) = 0; 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Unacknowledged incoming message handling. 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void AddIncomingMessage(const std::string& persistent_id, 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const UpdateCallback& callback) = 0; 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void RemoveIncomingMessage(const std::string& persistent_id, 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const UpdateCallback& callback) = 0; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void RemoveIncomingMessages(const PersistentIdList& persistent_ids, 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const UpdateCallback& callback) = 0; 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Unacknowledged outgoing messages handling. 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns false if app has surpassed message limits, else returns true. Note 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // that the message isn't persisted until |callback| is invoked with 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // |success| == true. 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool AddOutgoingMessage(const std::string& persistent_id, 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const MCSMessage& message, 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const UpdateCallback& callback) = 0; 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OverwriteOutgoingMessage(const std::string& persistent_id, 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const MCSMessage& message, 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const UpdateCallback& callback) = 0; 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void RemoveOutgoingMessage(const std::string& persistent_id, 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const UpdateCallback& callback) = 0; 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void RemoveOutgoingMessages(const PersistentIdList& persistent_ids, 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const UpdateCallback& callback) = 0; 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Sets last device's checkin time. 104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void SetLastCheckinTime(const base::Time& last_checkin_time, 105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const UpdateCallback& callback) = 0; 106c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 107a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // G-service settings handling. 108a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Persists |settings| and |settings_digest|. It completely replaces the 109a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // existing data. 110a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void SetGServicesSettings( 111a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::map<std::string, std::string>& settings, 112a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& settings_digest, 113a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const UpdateCallback& callback) = 0; 114a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(GCMStore); 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace gcm 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // GOOGLE_APIS_GCM_ENGINE_GCM_STORE_H_ 122