blob: 388dc99af179042869e63a434ad5dbdf24700f12 [file] [log] [blame]
Avi Drissman8ba1bad2022-09-13 19:22:361// Copyright 2015 The Chromium Authors
droger08025a22015-11-16 10:58:512// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/gcm_driver/gcm_internals_helper.h"
6
dcheng32fd7c42016-08-27 11:16:067#include <memory>
8#include <utility>
9
droger08025a22015-11-16 10:58:5110#include "base/format_macros.h"
zea76342abf2016-11-01 17:26:0411#include "base/i18n/time_formatting.h"
droger08025a22015-11-16 10:58:5112#include "base/strings/string_number_conversions.h"
13#include "base/strings/string_util.h"
14#include "base/strings/stringprintf.h"
zea76342abf2016-11-01 17:26:0415#include "base/strings/utf_string_conversions.h"
droger08025a22015-11-16 10:58:5116#include "base/values.h"
17#include "components/gcm_driver/gcm_activity.h"
18#include "components/gcm_driver/gcm_internals_constants.h"
19#include "components/gcm_driver/gcm_profile_service.h"
20
21namespace gcm_driver {
22
23namespace {
24
Matt Menke282c8782022-07-20 21:14:4525base::Value::List CheckinInfoToList(
26 const std::vector<gcm::CheckinActivity>& checkins) {
27 base::Value::List checkin_info;
droger08025a22015-11-16 10:58:5128 for (const gcm::CheckinActivity& checkin : checkins) {
Matt Menke282c8782022-07-20 21:14:4529 base::Value::List row;
Peter Kasting08b91b42023-10-21 03:46:0930 row.Append(checkin.time.InMillisecondsFSinceUnixEpoch());
Maks Orlovich75af5f22021-05-27 17:02:1931 row.Append(checkin.event);
32 row.Append(checkin.details);
Matt Menke282c8782022-07-20 21:14:4533 checkin_info.Append(std::move(row));
droger08025a22015-11-16 10:58:5134 }
Matt Menke282c8782022-07-20 21:14:4535 return checkin_info;
droger08025a22015-11-16 10:58:5136}
37
Matt Menke282c8782022-07-20 21:14:4538base::Value::List ConnectionInfoToList(
39 const std::vector<gcm::ConnectionActivity>& connections) {
40 base::Value::List connection_info;
droger08025a22015-11-16 10:58:5141 for (const gcm::ConnectionActivity& connection : connections) {
Matt Menke282c8782022-07-20 21:14:4542 base::Value::List row;
Peter Kasting08b91b42023-10-21 03:46:0943 row.Append(connection.time.InMillisecondsFSinceUnixEpoch());
Maks Orlovich75af5f22021-05-27 17:02:1944 row.Append(connection.event);
45 row.Append(connection.details);
Matt Menke282c8782022-07-20 21:14:4546 connection_info.Append(std::move(row));
droger08025a22015-11-16 10:58:5147 }
Matt Menke282c8782022-07-20 21:14:4548 return connection_info;
droger08025a22015-11-16 10:58:5149}
50
Matt Menke282c8782022-07-20 21:14:4551base::Value::List RegistrationInfoToList(
52 const std::vector<gcm::RegistrationActivity>& registrations) {
53 base::Value::List registration_info;
droger08025a22015-11-16 10:58:5154 for (const gcm::RegistrationActivity& registration : registrations) {
Matt Menke282c8782022-07-20 21:14:4555 base::Value::List row;
Peter Kasting08b91b42023-10-21 03:46:0956 row.Append(registration.time.InMillisecondsFSinceUnixEpoch());
Maks Orlovich75af5f22021-05-27 17:02:1957 row.Append(registration.app_id);
58 row.Append(registration.source);
59 row.Append(registration.event);
60 row.Append(registration.details);
Matt Menke282c8782022-07-20 21:14:4561 registration_info.Append(std::move(row));
droger08025a22015-11-16 10:58:5162 }
Matt Menke282c8782022-07-20 21:14:4563 return registration_info;
droger08025a22015-11-16 10:58:5164}
65
Matt Menke282c8782022-07-20 21:14:4566base::Value::List ReceivingInfoToList(
67 const std::vector<gcm::ReceivingActivity>& receives) {
68 base::Value::List receive_info;
droger08025a22015-11-16 10:58:5169 for (const gcm::ReceivingActivity& receive : receives) {
Matt Menke282c8782022-07-20 21:14:4570 base::Value::List row;
Peter Kasting08b91b42023-10-21 03:46:0971 row.Append(receive.time.InMillisecondsFSinceUnixEpoch());
Maks Orlovich75af5f22021-05-27 17:02:1972 row.Append(receive.app_id);
73 row.Append(receive.from);
74 row.Append(base::NumberToString(receive.message_byte_size));
75 row.Append(receive.event);
76 row.Append(receive.details);
Matt Menke282c8782022-07-20 21:14:4577 receive_info.Append(std::move(row));
droger08025a22015-11-16 10:58:5178 }
Matt Menke282c8782022-07-20 21:14:4579 return receive_info;
droger08025a22015-11-16 10:58:5180}
81
Matt Menke282c8782022-07-20 21:14:4582base::Value::List SendingInfoToList(
83 const std::vector<gcm::SendingActivity>& sends) {
84 base::Value::List send_info;
droger08025a22015-11-16 10:58:5185 for (const gcm::SendingActivity& send : sends) {
Matt Menke282c8782022-07-20 21:14:4586 base::Value::List row;
Peter Kasting08b91b42023-10-21 03:46:0987 row.Append(send.time.InMillisecondsFSinceUnixEpoch());
Maks Orlovich75af5f22021-05-27 17:02:1988 row.Append(send.app_id);
89 row.Append(send.receiver_id);
90 row.Append(send.message_id);
91 row.Append(send.event);
92 row.Append(send.details);
Matt Menke282c8782022-07-20 21:14:4593 send_info.Append(std::move(row));
droger08025a22015-11-16 10:58:5194 }
Matt Menke282c8782022-07-20 21:14:4595 return send_info;
droger08025a22015-11-16 10:58:5196}
97
Matt Menke282c8782022-07-20 21:14:4598base::Value::List DecryptionFailureInfoToList(
99 const std::vector<gcm::DecryptionFailureActivity>& failures) {
100 base::Value::List failure_info;
peteree284ba52016-02-01 11:53:28101 for (const gcm::DecryptionFailureActivity& failure : failures) {
Matt Menke282c8782022-07-20 21:14:45102 base::Value::List row;
Peter Kasting08b91b42023-10-21 03:46:09103 row.Append(failure.time.InMillisecondsFSinceUnixEpoch());
Maks Orlovich75af5f22021-05-27 17:02:19104 row.Append(failure.app_id);
105 row.Append(failure.details);
Matt Menke282c8782022-07-20 21:14:45106 failure_info.Append(std::move(row));
peteree284ba52016-02-01 11:53:28107 }
Matt Menke282c8782022-07-20 21:14:45108 return failure_info;
peteree284ba52016-02-01 11:53:28109}
110
droger08025a22015-11-16 10:58:51111} // namespace
112
Claudio DeSouza6c841a62022-08-17 18:25:01113base::Value::Dict SetGCMInternalsInfo(
114 const gcm::GCMClient::GCMStatistics* stats,
115 gcm::GCMProfileService* profile_service,
116 PrefService* prefs) {
Matt Menke282c8782022-07-20 21:14:45117 base::Value::Dict results;
droger08025a22015-11-16 10:58:51118
droger08025a22015-11-16 10:58:51119 if (stats) {
Matt Menke282c8782022-07-20 21:14:45120 results.Set(kIsRecording, stats->is_recording);
Peter Beverloo1e1c23e2020-01-13 16:09:11121
Matt Menke282c8782022-07-20 21:14:45122 base::Value::Dict device_info;
123 device_info.Set(kProfileServiceCreated, profile_service != nullptr);
124 device_info.Set(kGcmEnabled, true);
125 device_info.Set(kGcmClientCreated, stats->gcm_client_created);
126 device_info.Set(kGcmClientState, stats->gcm_client_state);
127 device_info.Set(kConnectionClientCreated, stats->connection_client_created);
128
129 base::Value::List registered_app_ids;
Peter Beverloo1e1c23e2020-01-13 16:09:11130 for (const std::string& app_id : stats->registered_app_ids)
Maks Orlovich75af5f22021-05-27 17:02:19131 registered_app_ids.Append(app_id);
Peter Beverloo1e1c23e2020-01-13 16:09:11132
Matt Menke282c8782022-07-20 21:14:45133 device_info.Set(kRegisteredAppIds, std::move(registered_app_ids));
Peter Beverloo1e1c23e2020-01-13 16:09:11134
droger08025a22015-11-16 10:58:51135 if (stats->connection_client_created)
Matt Menke282c8782022-07-20 21:14:45136 device_info.Set(kConnectionState, stats->connection_state);
zea76342abf2016-11-01 17:26:04137 if (!stats->last_checkin.is_null()) {
Matt Menke282c8782022-07-20 21:14:45138 device_info.Set(kLastCheckin,
139 base::UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime(
140 stats->last_checkin)));
zea76342abf2016-11-01 17:26:04141 }
142 if (!stats->next_checkin.is_null()) {
Matt Menke282c8782022-07-20 21:14:45143 device_info.Set(kNextCheckin,
144 base::UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime(
145 stats->next_checkin)));
zea76342abf2016-11-01 17:26:04146 }
droger08025a22015-11-16 10:58:51147 if (stats->android_id > 0) {
Matt Menke282c8782022-07-20 21:14:45148 device_info.Set(kAndroidId,
149 base::StringPrintf("0x%" PRIx64, stats->android_id));
droger08025a22015-11-16 10:58:51150 }
Peter Beverloof9469182018-05-03 20:46:52151 if (stats->android_secret > 0) {
Matt Menke282c8782022-07-20 21:14:45152 device_info.Set(kAndroidSecret,
153 base::NumberToString(stats->android_secret));
Peter Beverloof9469182018-05-03 20:46:52154 }
Matt Menke282c8782022-07-20 21:14:45155 device_info.Set(kSendQueueSize, stats->send_queue_size);
156 device_info.Set(kResendQueueSize, stats->resend_queue_size);
157 results.Set(kDeviceInfo, std::move(device_info));
droger08025a22015-11-16 10:58:51158
159 if (stats->recorded_activities.checkin_activities.size() > 0) {
Matt Menke282c8782022-07-20 21:14:45160 results.Set(
161 kCheckinInfo,
162 CheckinInfoToList(stats->recorded_activities.checkin_activities));
droger08025a22015-11-16 10:58:51163 }
164 if (stats->recorded_activities.connection_activities.size() > 0) {
Matt Menke282c8782022-07-20 21:14:45165 results.Set(kConnectionInfo,
166 ConnectionInfoToList(
167 stats->recorded_activities.connection_activities));
droger08025a22015-11-16 10:58:51168 }
169 if (stats->recorded_activities.registration_activities.size() > 0) {
Matt Menke282c8782022-07-20 21:14:45170 results.Set(kRegistrationInfo,
171 RegistrationInfoToList(
172 stats->recorded_activities.registration_activities));
droger08025a22015-11-16 10:58:51173 }
174 if (stats->recorded_activities.receiving_activities.size() > 0) {
Matt Menke282c8782022-07-20 21:14:45175 results.Set(
176 kReceiveInfo,
177 ReceivingInfoToList(stats->recorded_activities.receiving_activities));
droger08025a22015-11-16 10:58:51178 }
179 if (stats->recorded_activities.sending_activities.size() > 0) {
Matt Menke282c8782022-07-20 21:14:45180 results.Set(
181 kSendInfo,
182 SendingInfoToList(stats->recorded_activities.sending_activities));
droger08025a22015-11-16 10:58:51183 }
peteree284ba52016-02-01 11:53:28184
185 if (stats->recorded_activities.decryption_failure_activities.size() > 0) {
Matt Menke282c8782022-07-20 21:14:45186 results.Set(
187 kDecryptionFailureInfo,
188 DecryptionFailureInfoToList(
189 stats->recorded_activities.decryption_failure_activities));
peteree284ba52016-02-01 11:53:28190 }
droger08025a22015-11-16 10:58:51191 }
Claudio DeSouza6c841a62022-08-17 18:25:01192 return results;
droger08025a22015-11-16 10:58:51193}
194
195} // namespace gcm_driver