gcm_internals_helper.cc 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. // Copyright 2015 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. #include "components/gcm_driver/gcm_internals_helper.h"
  5. #include <memory>
  6. #include <utility>
  7. #include "base/format_macros.h"
  8. #include "base/i18n/time_formatting.h"
  9. #include "base/strings/string_number_conversions.h"
  10. #include "base/strings/string_util.h"
  11. #include "base/strings/stringprintf.h"
  12. #include "base/strings/utf_string_conversions.h"
  13. #include "base/values.h"
  14. #include "components/gcm_driver/gcm_activity.h"
  15. #include "components/gcm_driver/gcm_internals_constants.h"
  16. #include "components/gcm_driver/gcm_profile_service.h"
  17. namespace gcm_driver {
  18. namespace {
  19. base::Value::List CheckinInfoToList(
  20. const std::vector<gcm::CheckinActivity>& checkins) {
  21. base::Value::List checkin_info;
  22. for (const gcm::CheckinActivity& checkin : checkins) {
  23. base::Value::List row;
  24. row.Append(checkin.time.ToJsTime());
  25. row.Append(checkin.event);
  26. row.Append(checkin.details);
  27. checkin_info.Append(std::move(row));
  28. }
  29. return checkin_info;
  30. }
  31. base::Value::List ConnectionInfoToList(
  32. const std::vector<gcm::ConnectionActivity>& connections) {
  33. base::Value::List connection_info;
  34. for (const gcm::ConnectionActivity& connection : connections) {
  35. base::Value::List row;
  36. row.Append(connection.time.ToJsTime());
  37. row.Append(connection.event);
  38. row.Append(connection.details);
  39. connection_info.Append(std::move(row));
  40. }
  41. return connection_info;
  42. }
  43. base::Value::List RegistrationInfoToList(
  44. const std::vector<gcm::RegistrationActivity>& registrations) {
  45. base::Value::List registration_info;
  46. for (const gcm::RegistrationActivity& registration : registrations) {
  47. base::Value::List row;
  48. row.Append(registration.time.ToJsTime());
  49. row.Append(registration.app_id);
  50. row.Append(registration.source);
  51. row.Append(registration.event);
  52. row.Append(registration.details);
  53. registration_info.Append(std::move(row));
  54. }
  55. return registration_info;
  56. }
  57. base::Value::List ReceivingInfoToList(
  58. const std::vector<gcm::ReceivingActivity>& receives) {
  59. base::Value::List receive_info;
  60. for (const gcm::ReceivingActivity& receive : receives) {
  61. base::Value::List row;
  62. row.Append(receive.time.ToJsTime());
  63. row.Append(receive.app_id);
  64. row.Append(receive.from);
  65. row.Append(base::NumberToString(receive.message_byte_size));
  66. row.Append(receive.event);
  67. row.Append(receive.details);
  68. receive_info.Append(std::move(row));
  69. }
  70. return receive_info;
  71. }
  72. base::Value::List SendingInfoToList(
  73. const std::vector<gcm::SendingActivity>& sends) {
  74. base::Value::List send_info;
  75. for (const gcm::SendingActivity& send : sends) {
  76. base::Value::List row;
  77. row.Append(send.time.ToJsTime());
  78. row.Append(send.app_id);
  79. row.Append(send.receiver_id);
  80. row.Append(send.message_id);
  81. row.Append(send.event);
  82. row.Append(send.details);
  83. send_info.Append(std::move(row));
  84. }
  85. return send_info;
  86. }
  87. base::Value::List DecryptionFailureInfoToList(
  88. const std::vector<gcm::DecryptionFailureActivity>& failures) {
  89. base::Value::List failure_info;
  90. for (const gcm::DecryptionFailureActivity& failure : failures) {
  91. base::Value::List row;
  92. row.Append(failure.time.ToJsTime());
  93. row.Append(failure.app_id);
  94. row.Append(failure.details);
  95. failure_info.Append(std::move(row));
  96. }
  97. return failure_info;
  98. }
  99. } // namespace
  100. base::Value::Dict SetGCMInternalsInfo(
  101. const gcm::GCMClient::GCMStatistics* stats,
  102. gcm::GCMProfileService* profile_service,
  103. PrefService* prefs) {
  104. base::Value::Dict results;
  105. if (stats) {
  106. results.Set(kIsRecording, stats->is_recording);
  107. base::Value::Dict device_info;
  108. device_info.Set(kProfileServiceCreated, profile_service != nullptr);
  109. device_info.Set(kGcmEnabled, true);
  110. device_info.Set(kGcmClientCreated, stats->gcm_client_created);
  111. device_info.Set(kGcmClientState, stats->gcm_client_state);
  112. device_info.Set(kConnectionClientCreated, stats->connection_client_created);
  113. base::Value::List registered_app_ids;
  114. for (const std::string& app_id : stats->registered_app_ids)
  115. registered_app_ids.Append(app_id);
  116. device_info.Set(kRegisteredAppIds, std::move(registered_app_ids));
  117. if (stats->connection_client_created)
  118. device_info.Set(kConnectionState, stats->connection_state);
  119. if (!stats->last_checkin.is_null()) {
  120. device_info.Set(kLastCheckin,
  121. base::UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime(
  122. stats->last_checkin)));
  123. }
  124. if (!stats->next_checkin.is_null()) {
  125. device_info.Set(kNextCheckin,
  126. base::UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime(
  127. stats->next_checkin)));
  128. }
  129. if (stats->android_id > 0) {
  130. device_info.Set(kAndroidId,
  131. base::StringPrintf("0x%" PRIx64, stats->android_id));
  132. }
  133. if (stats->android_secret > 0) {
  134. device_info.Set(kAndroidSecret,
  135. base::NumberToString(stats->android_secret));
  136. }
  137. device_info.Set(kSendQueueSize, stats->send_queue_size);
  138. device_info.Set(kResendQueueSize, stats->resend_queue_size);
  139. results.Set(kDeviceInfo, std::move(device_info));
  140. if (stats->recorded_activities.checkin_activities.size() > 0) {
  141. results.Set(
  142. kCheckinInfo,
  143. CheckinInfoToList(stats->recorded_activities.checkin_activities));
  144. }
  145. if (stats->recorded_activities.connection_activities.size() > 0) {
  146. results.Set(kConnectionInfo,
  147. ConnectionInfoToList(
  148. stats->recorded_activities.connection_activities));
  149. }
  150. if (stats->recorded_activities.registration_activities.size() > 0) {
  151. results.Set(kRegistrationInfo,
  152. RegistrationInfoToList(
  153. stats->recorded_activities.registration_activities));
  154. }
  155. if (stats->recorded_activities.receiving_activities.size() > 0) {
  156. results.Set(
  157. kReceiveInfo,
  158. ReceivingInfoToList(stats->recorded_activities.receiving_activities));
  159. }
  160. if (stats->recorded_activities.sending_activities.size() > 0) {
  161. results.Set(
  162. kSendInfo,
  163. SendingInfoToList(stats->recorded_activities.sending_activities));
  164. }
  165. if (stats->recorded_activities.decryption_failure_activities.size() > 0) {
  166. results.Set(
  167. kDecryptionFailureInfo,
  168. DecryptionFailureInfoToList(
  169. stats->recorded_activities.decryption_failure_activities));
  170. }
  171. }
  172. return results;
  173. }
  174. } // namespace gcm_driver