Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(187)

Side by Side Diff: google_apis/gcm/engine/account_mapping.cc

Issue 443573002: [GCM] Adding status to AccountMapping structure (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Renaming files from account_info to account_mapping Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 #include "google_apis/gcm/engine/account_mapping.h"
6
7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/string_util.h"
9
10 namespace gcm {
11
12 namespace {
13
14 const char kSeparator[] = "&";
15 uint32 kEmailIndex = 0;
16 uint32 kMappingStatusIndex = 1;
17 uint32 kMappingChangeTimestampIndex = 2;
18 uint32 kMessageTypeIndex = 3;
19 uint32 kMessageIdIndex = 4;
20 uint32 kSizeWithNoMessage = kMessageTypeIndex + 1;
21 uint32 kSizeWithMessage = kMessageIdIndex + 1;
22
23 const char kStatusNewString[] = "new";
24 const char kStatusAddingString[] = "adding";
25 const char kStatusMappedString[] = "mapped";
26 const char kStatusRemovingString[] = "removing";
27 const char kStatusRemovedString[] = "removed";
28 const char kMessageTypeNoneString[] = "none";
29 const char kMessageTypeAddString[] = "add";
30 const char kMessageTypeRemoveString[] = "remove";
31
32 std::string MappingStatusToString(AccountMapping::MappingStatus status) {
33 switch (status) {
34 case AccountMapping::NEW:
35 return kStatusNewString;
36 case AccountMapping::ADDING:
37 return kStatusAddingString;
38 case AccountMapping::MAPPED:
39 return kStatusMappedString;
40 case AccountMapping::REMOVING:
41 return kStatusRemovingString;
42 case AccountMapping::REMOVED:
43 return kStatusRemovedString;
44 default:
45 NOTREACHED();
46 }
47 return std::string();
48 }
49
50 bool StringToMappingStatus(const std::string& mapping_status_str,
51 AccountMapping::MappingStatus* mapping_status) {
52 if (mapping_status_str.compare(kStatusNewString) == 0)
53 *mapping_status = AccountMapping::NEW;
54 else if (mapping_status_str.compare(kStatusAddingString) == 0)
55 *mapping_status = AccountMapping::ADDING;
56 else if (mapping_status_str.compare(kStatusMappedString) == 0)
57 *mapping_status = AccountMapping::MAPPED;
58 else if (mapping_status_str.compare(kStatusRemovingString) == 0)
59 *mapping_status = AccountMapping::REMOVING;
60 else if (mapping_status_str.compare(kStatusRemovedString) == 0)
61 *mapping_status = AccountMapping::REMOVED;
62 else
63 return false;
64
65 return true;
66 }
67
68 std::string MessageTypeToString(AccountMapping::MessageType type) {
69 switch (type) {
70 case AccountMapping::MSG_NONE:
71 return kMessageTypeNoneString;
72 case AccountMapping::MSG_ADD:
73 return kMessageTypeAddString;
74 case AccountMapping::MSG_REMOVE:
75 return kMessageTypeRemoveString;
76 default:
77 NOTREACHED();
78 }
79 return std::string();
80 }
81
82 bool StringToMessageType(const std::string& type_str,
83 AccountMapping::MessageType* type) {
84 if (type_str.compare(kMessageTypeAddString) == 0)
85 *type = AccountMapping::MSG_ADD;
86 else if (type_str.compare(kMessageTypeRemoveString) == 0)
87 *type = AccountMapping::MSG_REMOVE;
88 else if (type_str.compare(kMessageTypeNoneString) == 0)
89 *type = AccountMapping::MSG_NONE;
90 else
91 return false;
92
93 return true;
94 }
95
96 } // namespace
97
98 AccountMapping::AccountMapping() {
99 }
100
101 AccountMapping::~AccountMapping() {
102 }
103
104 std::string AccountMapping::SerializeAsString() const {
105 std::string value;
106 value.append(email);
107 value.append(kSeparator);
108 value.append(MappingStatusToString(status));
109 value.append(kSeparator);
110 value.append(base::Int64ToString(status_change_timestamp.ToInternalValue()));
111 value.append(kSeparator);
112 value.append(MessageTypeToString(last_message_type));
113 if (last_message_type != MSG_NONE) {
114 value.append(kSeparator);
115 value.append(last_message_id);
116 }
117
118 return value;
119 }
120
121 bool AccountMapping::ParseFromString(const std::string& value) {
122 std::vector<std::string> values;
123 Tokenize(value, kSeparator, &values);
124 if (values.size() != kSizeWithNoMessage &&
125 values.size() != kSizeWithMessage) {
126 return false;
127 }
128
129 if (values[kEmailIndex].empty() ||
130 values[kMappingStatusIndex].empty() ||
131 values[kMappingChangeTimestampIndex].empty() ||
132 values[kMessageTypeIndex].empty()) {
133 return false;
134 }
135
136 if (values.size() == kSizeWithMessage && values[kMessageIdIndex].empty()) {
137 return false;
138 }
139
140 int64 status_change_ts_internal = 0LL;
141 if (!base::StringToInt64(values[kMappingChangeTimestampIndex],
142 &status_change_ts_internal)) {
143 return false;
144 }
145
146 if (!StringToMappingStatus(values[kMappingStatusIndex], &status))
147 return false;
148
149 MessageType message_type;
150 if (!StringToMessageType(values[kMessageTypeIndex], &message_type))
151 return false;
152
153 if ((message_type == MSG_NONE && values.size() == kSizeWithMessage) ||
154 (message_type != MSG_NONE && values.size() != kSizeWithMessage)) {
155 return false;
156 }
157
158 last_message_type = message_type;
159
160 if (values.size() == kSizeWithMessage)
161 last_message_id = values[kMessageIdIndex];
162 else
163 last_message_id.clear();
164
165 email = values[kEmailIndex];
166 status_change_timestamp =
167 base::Time::FromInternalValue(status_change_ts_internal);
168 access_token.clear();
169
170 return true;
171 }
172
173 } // namespace gcm
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698