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

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

Issue 491443004: [GCM] Adding GCMAccountMapper to link signed in profile to accounts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removing message type from the AccountMapping Created 6 years, 3 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "google_apis/gcm/engine/account_mapping.h" 5 #include "google_apis/gcm/engine/account_mapping.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/string_util.h" 8 #include "base/strings/string_util.h"
9 9
10 namespace gcm { 10 namespace gcm {
11 11
12 namespace { 12 namespace {
13 13
14 const char kSeparator[] = "&"; 14 const char kSeparator[] = "&";
15 uint32 kEmailIndex = 0; 15 uint32 kEmailIndex = 0;
Nicolas Zea 2014/08/29 19:45:02 these should all be const
fgorski 2014/09/03 21:37:02 Done.
16 uint32 kMappingChangeTimestampIndex = 1; 16 uint32 kStatusIndex = 1;
17 uint32 kMessageTypeIndex = 2; 17 uint32 kStatusChangeTimestampIndex = 2;
18 uint32 kSizeWithNoMessage = kStatusChangeTimestampIndex + 1;
18 uint32 kMessageIdIndex = 3; 19 uint32 kMessageIdIndex = 3;
19 uint32 kSizeWithNoMessage = kMessageTypeIndex + 1;
20 uint32 kSizeWithMessage = kMessageIdIndex + 1; 20 uint32 kSizeWithMessage = kMessageIdIndex + 1;
21 21
22 const char kMessageTypeNoneString[] = "none"; 22 const char kStatusNew[] = "new";
23 const char kMessageTypeAddString[] = "add"; 23 const char kStatusAdding[] = "adding";
24 const char kMessageTypeRemoveString[] = "remove"; 24 const char kStatusMapped[] = "mapped";
25 const char kStatusRemoving[] = "removing";
25 26
26 std::string MessageTypeToString(AccountMapping::MessageType type) { 27 std::string StatusToString(AccountMapping::MappingStatus status) {
27 switch (type) { 28 switch (status) {
28 case AccountMapping::MSG_NONE: 29 case AccountMapping::NEW:
29 return kMessageTypeNoneString; 30 return kStatusNew;
30 case AccountMapping::MSG_ADD: 31 case AccountMapping::ADDING:
31 return kMessageTypeAddString; 32 return kStatusAdding;
32 case AccountMapping::MSG_REMOVE: 33 case AccountMapping::MAPPED:
33 return kMessageTypeRemoveString; 34 return kStatusMapped;
35 case AccountMapping::REMOVING:
36 return kStatusRemoving;
34 default: 37 default:
35 NOTREACHED(); 38 NOTREACHED();
36 } 39 }
37 return std::string(); 40 return std::string();
38 } 41 }
39 42
40 bool StringToMessageType(const std::string& type_str, 43 bool StringToStatus(const std::string& status_str,
41 AccountMapping::MessageType* type) { 44 AccountMapping::MappingStatus* status) {
42 if (type_str.compare(kMessageTypeAddString) == 0) 45 if (status_str.compare(kStatusAdding) == 0)
43 *type = AccountMapping::MSG_ADD; 46 *status = AccountMapping::ADDING;
44 else if (type_str.compare(kMessageTypeRemoveString) == 0) 47 else if (status_str.compare(kStatusMapped) == 0)
45 *type = AccountMapping::MSG_REMOVE; 48 *status = AccountMapping::MAPPED;
46 else if (type_str.compare(kMessageTypeNoneString) == 0) 49 else if (status_str.compare(kStatusRemoving) == 0)
47 *type = AccountMapping::MSG_NONE; 50 *status = AccountMapping::REMOVING;
51 else if (status_str.compare(kStatusNew) == 0)
52 *status = AccountMapping::NEW;
48 else 53 else
49 return false; 54 return false;
50 55
51 return true; 56 return true;
52 } 57 }
53 58
54 } // namespace 59 } // namespace
55 60
56 AccountMapping::AccountMapping() { 61 AccountMapping::AccountMapping() : status(NEW) {
57 } 62 }
58 63
59 AccountMapping::~AccountMapping() { 64 AccountMapping::~AccountMapping() {
60 } 65 }
61 66
62 std::string AccountMapping::SerializeAsString() const { 67 std::string AccountMapping::SerializeAsString() const {
63 std::string value; 68 std::string value;
64 value.append(email); 69 value.append(email);
65 value.append(kSeparator); 70 value.append(kSeparator);
71 value.append(StatusToString(status));
72 value.append(kSeparator);
66 value.append(base::Int64ToString(status_change_timestamp.ToInternalValue())); 73 value.append(base::Int64ToString(status_change_timestamp.ToInternalValue()));
67 value.append(kSeparator); 74 if (!last_message_id.empty()) {
68 value.append(MessageTypeToString(last_message_type));
69 if (last_message_type != MSG_NONE) {
70 value.append(kSeparator); 75 value.append(kSeparator);
71 value.append(last_message_id); 76 value.append(last_message_id);
72 } 77 }
73 78
74 return value; 79 return value;
75 } 80 }
76 81
77 bool AccountMapping::ParseFromString(const std::string& value) { 82 bool AccountMapping::ParseFromString(const std::string& value) {
78 std::vector<std::string> values; 83 std::vector<std::string> values;
79 Tokenize(value, kSeparator, &values); 84 Tokenize(value, kSeparator, &values);
80 if (values.size() != kSizeWithNoMessage && 85 if (values.size() != kSizeWithNoMessage &&
81 values.size() != kSizeWithMessage) { 86 values.size() != kSizeWithMessage) {
82 return false; 87 return false;
83 } 88 }
84 89
85 if (values[kEmailIndex].empty() || 90 if (values[kEmailIndex].empty() ||
86 values[kMappingChangeTimestampIndex].empty() || 91 values[kStatusChangeTimestampIndex].empty() ||
87 values[kMessageTypeIndex].empty()) { 92 values[kStatusIndex].empty()) {
88 return false; 93 return false;
89 } 94 }
90 95
91 if (values.size() == kSizeWithMessage && values[kMessageIdIndex].empty()) { 96 if (values.size() == kSizeWithMessage && values[kMessageIdIndex].empty()) {
Nicolas Zea 2014/08/29 19:45:02 nit: remove curly brace to make consistent with re
fgorski 2014/09/03 21:37:02 Done.
92 return false; 97 return false;
93 } 98 }
94 99
95 MessageType message_type; 100 MappingStatus temp_status;
96 if (!StringToMessageType(values[kMessageTypeIndex], &message_type)) 101 if (!StringToStatus(values[kStatusIndex], &temp_status))
97 return false; 102 return false;
98 103
99 if ((message_type == MSG_NONE && values.size() == kSizeWithMessage) || 104 if (values.size() == kSizeWithNoMessage &&
100 (message_type != MSG_NONE && values.size() != kSizeWithMessage)) { 105 (temp_status == REMOVING || temp_status == ADDING)) {
101 return false; 106 return false;
102 } 107 }
103 108
104 last_message_type = message_type;
105
106 int64 status_change_ts_internal = 0LL; 109 int64 status_change_ts_internal = 0LL;
107 if (!base::StringToInt64(values[kMappingChangeTimestampIndex], 110 if (!base::StringToInt64(values[kStatusChangeTimestampIndex],
108 &status_change_ts_internal)) { 111 &status_change_ts_internal)) {
109 return false; 112 return false;
110 } 113 }
111 114
112 if (status_change_ts_internal == 0LL) 115 status_change_timestamp =
113 status = ADDING; 116 base::Time::FromInternalValue(status_change_ts_internal);
114 else if (last_message_type == MSG_REMOVE) 117 status = temp_status;
115 status = REMOVING; 118 email = values[kEmailIndex];
116 else 119 access_token.clear();
117 status = MAPPED;
118 120
119 if (values.size() == kSizeWithMessage) 121 if (values.size() == kSizeWithMessage)
120 last_message_id = values[kMessageIdIndex]; 122 last_message_id = values[kMessageIdIndex];
121 else 123 else
122 last_message_id.clear(); 124 last_message_id.clear();
123 125
124 email = values[kEmailIndex];
125 status_change_timestamp =
126 base::Time::FromInternalValue(status_change_ts_internal);
127 access_token.clear();
128
129 return true; 126 return true;
130 } 127 }
131 128
132 } // namespace gcm 129 } // namespace gcm
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698