summaryrefslogtreecommitdiffstats
path: root/devtools/client/inspector/test/browser_inspector_sidebarstate.js
blob: 97da7443acb66669aab9241f38a0aeea376d8772 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";

const TEST_URI =
  "data:text/html;charset=UTF-8," +
  "<h1>browser_inspector_sidebarstate.js</h1>";
const ALL_CHANNELS = Ci.nsITelemetry.DATASET_ALL_CHANNELS;

const TELEMETRY_DATA = [
  {
    timestamp: null,
    category: "devtools.main",
    method: "tool_timer",
    object: "layoutview",
    value: null,
    extra: {
      time_open: "",
    },
  },
  {
    timestamp: null,
    category: "devtools.main",
    method: "tool_timer",
    object: "fontinspector",
    value: null,
    extra: {
      time_open: "",
    },
  },
  {
    timestamp: null,
    category: "devtools.main",
    method: "tool_timer",
    object: "compatibilityview",
    value: null,
    extra: {
      time_open: "",
    },
  },
  {
    timestamp: null,
    category: "devtools.main",
    method: "tool_timer",
    object: "computedview",
    value: null,
    extra: {
      time_open: "",
    },
  },
];

add_task(async function () {
  // Let's reset the counts.
  Services.telemetry.clearEvents();

  // Ensure no events have been logged
  const snapshot = Services.telemetry.snapshotEvents(ALL_CHANNELS, true);
  ok(!snapshot.parent, "No events have been logged for the main process");

  // Enable the compatibility view explictly as this pref is enabled for only Nightly and DevEdition.
  await pushPref("devtools.inspector.compatibility.enabled", true);

  let { inspector, toolbox } = await openInspectorForURL(TEST_URI);

  info("Selecting font inspector.");
  inspector.sidebar.select("fontinspector");

  is(
    inspector.sidebar.getCurrentTabID(),
    "fontinspector",
    "Font Inspector is selected"
  );

  info("Selecting compatibility view.");
  const onCompatibilityViewInitialized = inspector.once(
    "compatibilityview-initialized"
  );
  inspector.sidebar.select("compatibilityview");
  await onCompatibilityViewInitialized;

  is(
    inspector.sidebar.getCurrentTabID(),
    "compatibilityview",
    "Compatibility View is selected"
  );

  info("Selecting computed view.");
  inspector.sidebar.select("computedview");

  is(
    inspector.sidebar.getCurrentTabID(),
    "computedview",
    "Computed View is selected"
  );

  info("Closing inspector.");
  await toolbox.destroy();

  info("Re-opening inspector.");
  inspector = (await openInspector()).inspector;

  if (!inspector.sidebar.getCurrentTabID()) {
    info("Default sidebar still to be selected, adding select listener.");
    await inspector.sidebar.once("select");
  }

  is(
    inspector.sidebar.getCurrentTabID(),
    "computedview",
    "Computed view is selected by default."
  );

  checkTelemetryResults();
});

function checkTelemetryResults() {
  const snapshot = Services.telemetry.snapshotEvents(ALL_CHANNELS, true);
  const events = snapshot.parent.filter(
    event => event[1] === "devtools.main" && event[2] === "tool_timer"
  );

  for (const i in TELEMETRY_DATA) {
    const [timestamp, category, method, object, value, extra] = events[i];
    const expected = TELEMETRY_DATA[i];

    // ignore timestamp
    ok(timestamp > 0, "timestamp is greater than 0");
    ok(extra.time_open > 0, "time_open is greater than 0");
    is(category, expected.category, "category is correct");
    is(method, expected.method, "method is correct");
    is(object, expected.object, "object is correct");
    is(value, expected.value, "value is correct");
  }
}