| OLD | NEW |
| 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 "components/gcm_driver/gcm_client_impl.h" | 5 #include "components/gcm_driver/gcm_client_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 const char kSendErrorMessageIdKey[] = "google.message_id"; | 89 const char kSendErrorMessageIdKey[] = "google.message_id"; |
| 90 const char kSubtypeKey[] = "subtype"; | 90 const char kSubtypeKey[] = "subtype"; |
| 91 const char kSendMessageFromValue[] = "gcm@chrome.com"; | 91 const char kSendMessageFromValue[] = "gcm@chrome.com"; |
| 92 const int64_t kDefaultUserSerialNumber = 0LL; | 92 const int64_t kDefaultUserSerialNumber = 0LL; |
| 93 const int kDestroyGCMStoreDelayMS = 5 * 60 * 1000; // 5 minutes. | 93 const int kDestroyGCMStoreDelayMS = 5 * 60 * 1000; // 5 minutes. |
| 94 | 94 |
| 95 GCMClient::Result ToGCMClientResult(MCSClient::MessageSendStatus status) { | 95 GCMClient::Result ToGCMClientResult(MCSClient::MessageSendStatus status) { |
| 96 switch (status) { | 96 switch (status) { |
| 97 case MCSClient::QUEUED: | 97 case MCSClient::QUEUED: |
| 98 return GCMClient::SUCCESS; | 98 return GCMClient::SUCCESS; |
| 99 case MCSClient::QUEUE_SIZE_LIMIT_REACHED: | |
| 100 return GCMClient::NETWORK_ERROR; | |
| 101 case MCSClient::APP_QUEUE_SIZE_LIMIT_REACHED: | |
| 102 return GCMClient::NETWORK_ERROR; | |
| 103 case MCSClient::MESSAGE_TOO_LARGE: | 99 case MCSClient::MESSAGE_TOO_LARGE: |
| 104 return GCMClient::INVALID_PARAMETER; | 100 return GCMClient::INVALID_PARAMETER; |
| 101 case MCSClient::QUEUE_SIZE_LIMIT_REACHED: |
| 102 case MCSClient::APP_QUEUE_SIZE_LIMIT_REACHED: |
| 105 case MCSClient::NO_CONNECTION_ON_ZERO_TTL: | 103 case MCSClient::NO_CONNECTION_ON_ZERO_TTL: |
| 106 return GCMClient::NETWORK_ERROR; | |
| 107 case MCSClient::TTL_EXCEEDED: | 104 case MCSClient::TTL_EXCEEDED: |
| 108 return GCMClient::NETWORK_ERROR; | 105 return GCMClient::NETWORK_ERROR; |
| 109 case MCSClient::SENT: | 106 case MCSClient::SENT: |
| 110 default: | 107 case MCSClient::SEND_STATUS_COUNT: |
| 111 NOTREACHED(); | 108 NOTREACHED(); |
| 112 break; | 109 break; |
| 113 } | 110 } |
| 114 return GCMClientImpl::UNKNOWN_ERROR; | 111 return GCMClientImpl::UNKNOWN_ERROR; |
| 115 } | 112 } |
| 116 | 113 |
| 117 void ToCheckinProtoVersion( | 114 void ToCheckinProtoVersion( |
| 118 const GCMClient::ChromeBuildInfo& chrome_build_info, | 115 const GCMClient::ChromeBuildInfo& chrome_build_info, |
| 119 checkin_proto::ChromeBuildProto* android_build_info) { | 116 checkin_proto::ChromeBuildProto* android_build_info) { |
| 120 checkin_proto::ChromeBuildProto_Platform platform; | 117 checkin_proto::ChromeBuildProto_Platform platform = |
| 118 checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX; |
| 121 switch (chrome_build_info.platform) { | 119 switch (chrome_build_info.platform) { |
| 122 case GCMClient::PLATFORM_WIN: | 120 case GCMClient::PLATFORM_WIN: |
| 123 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_WIN; | 121 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_WIN; |
| 124 break; | 122 break; |
| 125 case GCMClient::PLATFORM_MAC: | 123 case GCMClient::PLATFORM_MAC: |
| 126 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_MAC; | 124 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_MAC; |
| 127 break; | 125 break; |
| 128 case GCMClient::PLATFORM_LINUX: | 126 case GCMClient::PLATFORM_LINUX: |
| 129 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX; | 127 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX; |
| 130 break; | 128 break; |
| 131 case GCMClient::PLATFORM_IOS: | 129 case GCMClient::PLATFORM_IOS: |
| 132 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_IOS; | 130 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_IOS; |
| 133 break; | 131 break; |
| 134 case GCMClient::PLATFORM_ANDROID: | 132 case GCMClient::PLATFORM_ANDROID: |
| 135 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_ANDROID; | 133 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_ANDROID; |
| 136 break; | 134 break; |
| 137 case GCMClient::PLATFORM_CROS: | 135 case GCMClient::PLATFORM_CROS: |
| 138 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_CROS; | 136 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_CROS; |
| 139 break; | 137 break; |
| 140 case GCMClient::PLATFORM_UNKNOWN: | 138 case GCMClient::PLATFORM_UNKNOWN: |
| 141 // For unknown platform, return as LINUX. | 139 // For unknown platform, return as LINUX. |
| 142 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX; | 140 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX; |
| 143 break; | 141 break; |
| 144 default: | |
| 145 NOTREACHED(); | |
| 146 platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX; | |
| 147 break; | |
| 148 } | 142 } |
| 149 android_build_info->set_platform(platform); | 143 android_build_info->set_platform(platform); |
| 150 | 144 |
| 151 checkin_proto::ChromeBuildProto_Channel channel; | 145 checkin_proto::ChromeBuildProto_Channel channel = |
| 146 checkin_proto::ChromeBuildProto_Channel_CHANNEL_UNKNOWN; |
| 152 switch (chrome_build_info.channel) { | 147 switch (chrome_build_info.channel) { |
| 153 case GCMClient::CHANNEL_STABLE: | 148 case GCMClient::CHANNEL_STABLE: |
| 154 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_STABLE; | 149 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_STABLE; |
| 155 break; | 150 break; |
| 156 case GCMClient::CHANNEL_BETA: | 151 case GCMClient::CHANNEL_BETA: |
| 157 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_BETA; | 152 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_BETA; |
| 158 break; | 153 break; |
| 159 case GCMClient::CHANNEL_DEV: | 154 case GCMClient::CHANNEL_DEV: |
| 160 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_DEV; | 155 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_DEV; |
| 161 break; | 156 break; |
| 162 case GCMClient::CHANNEL_CANARY: | 157 case GCMClient::CHANNEL_CANARY: |
| 163 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_CANARY; | 158 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_CANARY; |
| 164 break; | 159 break; |
| 165 case GCMClient::CHANNEL_UNKNOWN: | 160 case GCMClient::CHANNEL_UNKNOWN: |
| 166 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_UNKNOWN; | 161 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_UNKNOWN; |
| 167 break; | 162 break; |
| 168 default: | |
| 169 NOTREACHED(); | |
| 170 channel = checkin_proto::ChromeBuildProto_Channel_CHANNEL_UNKNOWN; | |
| 171 break; | |
| 172 } | 163 } |
| 173 android_build_info->set_channel(channel); | 164 android_build_info->set_channel(channel); |
| 174 | 165 |
| 175 android_build_info->set_chrome_version(chrome_build_info.version); | 166 android_build_info->set_chrome_version(chrome_build_info.version); |
| 176 } | 167 } |
| 177 | 168 |
| 178 MessageType DecodeMessageType(const std::string& value) { | 169 MessageType DecodeMessageType(const std::string& value) { |
| 179 if (kMessageTypeDeletedMessagesKey == value) | 170 if (kMessageTypeDeletedMessagesKey == value) |
| 180 return DELETED_MESSAGES; | 171 return DELETED_MESSAGES; |
| 181 if (kMessageTypeSendErrorKey == value) | 172 if (kMessageTypeSendErrorKey == value) |
| (...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1152 app_data->set_value(iter->second); | 1143 app_data->set_value(iter->second); |
| 1153 } | 1144 } |
| 1154 | 1145 |
| 1155 MCSMessage mcs_message(stanza); | 1146 MCSMessage mcs_message(stanza); |
| 1156 DVLOG(1) << "MCS message size: " << mcs_message.size(); | 1147 DVLOG(1) << "MCS message size: " << mcs_message.size(); |
| 1157 mcs_client_->SendMessage(mcs_message); | 1148 mcs_client_->SendMessage(mcs_message); |
| 1158 } | 1149 } |
| 1159 | 1150 |
| 1160 std::string GCMClientImpl::GetStateString() const { | 1151 std::string GCMClientImpl::GetStateString() const { |
| 1161 switch(state_) { | 1152 switch(state_) { |
| 1153 case GCMClientImpl::UNINITIALIZED: |
| 1154 return "UNINITIALIZED"; |
| 1162 case GCMClientImpl::INITIALIZED: | 1155 case GCMClientImpl::INITIALIZED: |
| 1163 return "INITIALIZED"; | 1156 return "INITIALIZED"; |
| 1164 case GCMClientImpl::UNINITIALIZED: | |
| 1165 return "UNINITIALIZED"; | |
| 1166 case GCMClientImpl::LOADING: | 1157 case GCMClientImpl::LOADING: |
| 1167 return "LOADING"; | 1158 return "LOADING"; |
| 1168 case GCMClientImpl::LOADED: | 1159 case GCMClientImpl::LOADED: |
| 1169 return "LOADED"; | 1160 return "LOADED"; |
| 1170 case GCMClientImpl::INITIAL_DEVICE_CHECKIN: | 1161 case GCMClientImpl::INITIAL_DEVICE_CHECKIN: |
| 1171 return "INITIAL_DEVICE_CHECKIN"; | 1162 return "INITIAL_DEVICE_CHECKIN"; |
| 1172 case GCMClientImpl::READY: | 1163 case GCMClientImpl::READY: |
| 1173 return "READY"; | 1164 return "READY"; |
| 1174 default: | |
| 1175 NOTREACHED(); | |
| 1176 return std::string(); | |
| 1177 } | 1165 } |
| 1166 NOTREACHED(); |
| 1167 return std::string(); |
| 1178 } | 1168 } |
| 1179 | 1169 |
| 1180 void GCMClientImpl::RecordDecryptionFailure( | 1170 void GCMClientImpl::RecordDecryptionFailure( |
| 1181 const std::string& app_id, | 1171 const std::string& app_id, |
| 1182 GCMEncryptionProvider::DecryptionResult result) { | 1172 GCMEncryptionProvider::DecryptionResult result) { |
| 1183 recorder_.RecordDecryptionFailure(app_id, result); | 1173 recorder_.RecordDecryptionFailure(app_id, result); |
| 1184 } | 1174 } |
| 1185 | 1175 |
| 1186 void GCMClientImpl::SetRecording(bool recording) { | 1176 void GCMClientImpl::SetRecording(bool recording) { |
| 1187 recorder_.set_is_recording(recording); | 1177 recorder_.set_is_recording(recording); |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1336 case DELETED_MESSAGES: | 1326 case DELETED_MESSAGES: |
| 1337 recorder_.RecordDataMessageReceived(app_id, data_message_stanza.from(), | 1327 recorder_.RecordDataMessageReceived(app_id, data_message_stanza.from(), |
| 1338 data_message_stanza.ByteSize(), true, | 1328 data_message_stanza.ByteSize(), true, |
| 1339 GCMStatsRecorder::DELETED_MESSAGES); | 1329 GCMStatsRecorder::DELETED_MESSAGES); |
| 1340 delegate_->OnMessagesDeleted(app_id); | 1330 delegate_->OnMessagesDeleted(app_id); |
| 1341 break; | 1331 break; |
| 1342 case SEND_ERROR: | 1332 case SEND_ERROR: |
| 1343 HandleIncomingSendError(app_id, data_message_stanza, message_data); | 1333 HandleIncomingSendError(app_id, data_message_stanza, message_data); |
| 1344 break; | 1334 break; |
| 1345 case UNKNOWN: | 1335 case UNKNOWN: |
| 1346 default: // Treat default the same as UNKNOWN. | |
| 1347 DVLOG(1) << "Unknown message_type received. Message ignored. " | 1336 DVLOG(1) << "Unknown message_type received. Message ignored. " |
| 1348 << "App ID: " << app_id << "."; | 1337 << "App ID: " << app_id << "."; |
| 1349 break; | 1338 break; |
| 1350 } | 1339 } |
| 1351 } | 1340 } |
| 1352 | 1341 |
| 1353 void GCMClientImpl::HandleIncomingDataMessage( | 1342 void GCMClientImpl::HandleIncomingDataMessage( |
| 1354 const std::string& app_id, | 1343 const std::string& app_id, |
| 1355 bool was_subtype, | 1344 bool was_subtype, |
| 1356 const mcs_proto::DataMessageStanza& data_message_stanza, | 1345 const mcs_proto::DataMessageStanza& data_message_stanza, |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1440 bool GCMClientImpl::HasStandaloneRegisteredApp() const { | 1429 bool GCMClientImpl::HasStandaloneRegisteredApp() const { |
| 1441 if (registrations_.empty()) | 1430 if (registrations_.empty()) |
| 1442 return false; | 1431 return false; |
| 1443 // Note that account mapper is not counted as a standalone app since it is | 1432 // Note that account mapper is not counted as a standalone app since it is |
| 1444 // automatically started when other app uses GCM. | 1433 // automatically started when other app uses GCM. |
| 1445 return registrations_.size() > 1 || | 1434 return registrations_.size() > 1 || |
| 1446 !ExistsGCMRegistrationInMap(registrations_, kGCMAccountMapperAppId); | 1435 !ExistsGCMRegistrationInMap(registrations_, kGCMAccountMapperAppId); |
| 1447 } | 1436 } |
| 1448 | 1437 |
| 1449 } // namespace gcm | 1438 } // namespace gcm |
| OLD | NEW |