UTEventReporting.jsm 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /* This Source Code Form is subject to the terms of the Mozilla Public
  2. * License, v. 2.0. If a copy of the MPL was not distributed with this
  3. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  4. /* globals Services */
  5. "use strict";
  6. const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
  7. /**
  8. * Note: the schema can be found in
  9. * https://searchfox.org/mozilla-central/source/toolkit/components/telemetry/Events.yaml
  10. */
  11. const EXTRAS_FIELD_NAMES = ["addon_version", "session_id", "page", "user_prefs", "action_position"];
  12. this.UTEventReporting = class UTEventReporting {
  13. constructor() {
  14. Services.telemetry.setEventRecordingEnabled("activity_stream", true);
  15. this.sendUserEvent = this.sendUserEvent.bind(this);
  16. this.sendSessionEndEvent = this.sendSessionEndEvent.bind(this);
  17. this.sendTrailheadEnrollEvent = this.sendTrailheadEnrollEvent.bind(this);
  18. }
  19. _createExtras(data) {
  20. // Make a copy of the given data and delete/modify it as needed.
  21. let utExtras = Object.assign({}, data);
  22. for (let field of Object.keys(utExtras)) {
  23. if (EXTRAS_FIELD_NAMES.includes(field)) {
  24. utExtras[field] = String(utExtras[field]);
  25. continue;
  26. }
  27. delete utExtras[field];
  28. }
  29. return utExtras;
  30. }
  31. sendUserEvent(data) {
  32. let mainFields = ["event", "source"];
  33. let eventFields = mainFields.map(field => String(data[field]) || null);
  34. Services.telemetry.recordEvent(
  35. "activity_stream",
  36. "event",
  37. ...eventFields,
  38. this._createExtras(data));
  39. }
  40. sendSessionEndEvent(data) {
  41. Services.telemetry.recordEvent(
  42. "activity_stream",
  43. "end",
  44. "session",
  45. String(data.session_duration),
  46. this._createExtras(data));
  47. }
  48. sendTrailheadEnrollEvent(data) {
  49. Services.telemetry.recordEvent(
  50. "activity_stream",
  51. "enroll",
  52. "preference_study",
  53. data.experiment,
  54. {
  55. experimentType: data.type,
  56. branch: data.branch,
  57. }
  58. );
  59. }
  60. uninit() {
  61. Services.telemetry.setEventRecordingEnabled("activity_stream", false);
  62. }
  63. };
  64. const EXPORTED_SYMBOLS = ["UTEventReporting"];