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_ACCOUNT_MAPPING_H_
6 #define GOOGLE_APIS_GCM_ENGINE_ACCOUNT_MAPPING_H_
7 
8 #include <string>
9 
10 #include "base/time/time.h"
11 #include "google_apis/gaia/core_account_id.h"
12 #include "google_apis/gcm/base/gcm_export.h"
13 
14 namespace gcm {
15 
16 // Stores information about Account mapping and a last message sent regarding
17 // that mapping.
18 struct GCM_EXPORT AccountMapping {
19   // Status of the account mapping.
20   enum MappingStatus {
21     NEW,       // This is a new account mapping entry.
22     ADDING,    // A mapping message has been sent, but it has not been confirmed
23                // yet.
24     MAPPED,    // Account is mapped. At least one message has been confirmed to
25                // reached the GCM.
26     REMOVING,  // Account is removed, but a message removing the mapping has not
27                // been confirmed yet.
28   };
29 
30   AccountMapping();
31   AccountMapping(const AccountMapping& other);
32   ~AccountMapping();
33 
34   // Serializes account mapping to string without |account_id|, |status| or
35   // |access_token|.
36   std::string SerializeAsString() const;
37   // Parses account mapping from store, without |account_id| or |access_token|.
38   // |status| is infered.
39   bool ParseFromString(const std::string& value);
40 
41   // Account Id of the account. (Acts as key for persistence.)
42   CoreAccountId account_id;
43   // Email address of the tracked account.
44   std::string email;
45   // OAuth2 access token used to authenticate mappings (not persisted).
46   std::string access_token;
47   // Status of the account mapping (not persisted).
48   MappingStatus status;
49   // Time of the mapping status change.
50   base::Time status_change_timestamp;
51   // ID of the last mapping message sent to GCM.
52   std::string last_message_id;
53 };
54 
55 }  // namespace gcm
56 
57 #endif  // GOOGLE_APIS_GCM_ENGINE_ACCOUNT_MAPPING_H_
58