scanning_metrics_handler.cc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // Copyright 2021 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 "ash/webui/scanning/scanning_metrics_handler.h"
  5. #include "ash/webui/scanning/mojom/scanning.mojom.h"
  6. #include "ash/webui/scanning/scanning_uma.h"
  7. #include "base/bind.h"
  8. #include "base/check.h"
  9. #include "base/check_op.h"
  10. #include "base/metrics/histogram_functions.h"
  11. #include "base/values.h"
  12. namespace ash {
  13. namespace {
  14. namespace mojo_ipc = scanning::mojom;
  15. // Scan job settings constants.
  16. constexpr char kSourceType[] = "sourceType";
  17. constexpr char kFileType[] = "fileType";
  18. constexpr char kColorMode[] = "colorMode";
  19. constexpr char kPageSize[] = "pageSize";
  20. constexpr char kResolution[] = "resolution";
  21. } // namespace
  22. ScanningMetricsHandler::ScanningMetricsHandler() = default;
  23. ScanningMetricsHandler::~ScanningMetricsHandler() = default;
  24. void ScanningMetricsHandler::RegisterMessages() {
  25. web_ui()->RegisterMessageCallback(
  26. "recordNumScanSettingChanges",
  27. base::BindRepeating(
  28. &ScanningMetricsHandler::HandleRecordNumScanSettingChanges,
  29. base::Unretained(this)));
  30. web_ui()->RegisterMessageCallback(
  31. "recordScanCompleteAction",
  32. base::BindRepeating(
  33. &ScanningMetricsHandler::HandleRecordScanCompleteAction,
  34. base::Unretained(this)));
  35. web_ui()->RegisterMessageCallback(
  36. "recordScanJobSettings",
  37. base::BindRepeating(&ScanningMetricsHandler::HandleRecordScanJobSettings,
  38. base::Unretained(this)));
  39. web_ui()->RegisterMessageCallback(
  40. "recordNumCompletedScans",
  41. base::BindRepeating(
  42. &ScanningMetricsHandler::HandleRecordNumCompletedScans,
  43. base::Unretained(this)));
  44. }
  45. void ScanningMetricsHandler::HandleRecordNumScanSettingChanges(
  46. const base::Value::List& args) {
  47. AllowJavascript();
  48. CHECK_EQ(1U, args.size());
  49. base::UmaHistogramCounts100("Scanning.NumScanSettingChanges",
  50. args[0].GetInt());
  51. }
  52. void ScanningMetricsHandler::HandleRecordScanCompleteAction(
  53. const base::Value::List& args) {
  54. AllowJavascript();
  55. CHECK_EQ(1U, args.size());
  56. base::UmaHistogramEnumeration(
  57. "Scanning.ScanCompleteAction",
  58. static_cast<scanning::ScanCompleteAction>(args[0].GetInt()));
  59. }
  60. void ScanningMetricsHandler::HandleRecordScanJobSettings(
  61. const base::Value::List& args) {
  62. AllowJavascript();
  63. CHECK_EQ(1U, args.size());
  64. const base::Value& scan_job_settings = args[0];
  65. CHECK(scan_job_settings.is_dict());
  66. base::UmaHistogramEnumeration(
  67. "Scanning.ScanJobSettings.Source",
  68. static_cast<mojo_ipc::SourceType>(
  69. scan_job_settings.FindIntPath(kSourceType).value()));
  70. base::UmaHistogramEnumeration(
  71. "Scanning.ScanJobSettings.FileType",
  72. static_cast<mojo_ipc::FileType>(
  73. scan_job_settings.FindIntPath(kFileType).value()));
  74. base::UmaHistogramEnumeration(
  75. "Scanning.ScanJobSettings.ColorMode",
  76. static_cast<mojo_ipc::ColorMode>(
  77. scan_job_settings.FindIntPath(kColorMode).value()));
  78. base::UmaHistogramEnumeration(
  79. "Scanning.ScanJobSettings.PageSize",
  80. static_cast<mojo_ipc::PageSize>(
  81. scan_job_settings.FindIntPath(kPageSize).value()));
  82. const scanning::ScanJobSettingsResolution resolution =
  83. scanning::GetResolutionEnumValue(
  84. scan_job_settings.FindIntPath(kResolution).value());
  85. if (resolution != scanning::ScanJobSettingsResolution::kUnexpectedDpi) {
  86. base::UmaHistogramEnumeration("Scanning.ScanJobSettings.Resolution",
  87. resolution);
  88. }
  89. }
  90. void ScanningMetricsHandler::HandleRecordNumCompletedScans(
  91. const base::Value::List& args) {
  92. AllowJavascript();
  93. CHECK_EQ(1U, args.size());
  94. base::UmaHistogramCounts100("Scanning.NumCompletedScansInSession",
  95. args[0].GetInt());
  96. }
  97. } // namespace ash