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/basictypes.h"
11#include "base/time/time.h"
12#include "google_apis/gcm/base/gcm_export.h"
13
14namespace gcm {
15
16// Stores information about Account mapping and a last message sent regarding
17// that mapping.
18struct 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();
32
33  // Serializes account mapping to string without |account_id|, |status| or
34  // |access_token|.
35  std::string SerializeAsString() const;
36  // Parses account mapping from store, without |account_id| or |access_token|.
37  // |status| is infered.
38  bool ParseFromString(const std::string& value);
39
40  // Gaia ID of the account. (Acts as key for persistence.)
41  std::string account_id;
42  // Email address of the tracked account.
43  std::string email;
44  // OAuth2 access token used to authenticate mappings (not persisted).
45  std::string access_token;
46  // Status of the account mapping (not persisted).
47  MappingStatus status;
48  // Time of the mapping status change.
49  base::Time status_change_timestamp;
50  // ID of the last mapping message sent to GCM.
51  std::string last_message_id;
52};
53
54}  // namespace gcm
55
56#endif  // GOOGLE_APIS_GCM_ENGINE_ACCOUNT_MAPPING_H_
57