summaryrefslogtreecommitdiffstats
path: root/devtools/client/dom/test/browser_dom_iframe_picker.js
blob: 60e77473866711c68031fafbb847781eb24f3741 (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
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

// Check that the DOM panel works as expected when a specific frame is selected in the
// iframe picker.

const TEST_URL = `https://example.com/document-builder.sjs?html=
  <h1>top_level</h1>
  <iframe src="https://example.org/document-builder.sjs?html=in_iframe"></iframe>`;

add_task(async function () {
  const { panel } = await addTestTab(TEST_URL);
  const toolbox = panel._toolbox;

  info("Wait until the iframe picker button is visible");
  try {
    await waitFor(() => toolbox.doc.getElementById("command-button-frames"));
  } catch (e) {
    if (isFissionEnabled() && !isEveryFrameTargetEnabled()) {
      ok(
        true,
        "Remote frames are not displayed in iframe picker if Fission is enabled but EFT is not"
      );
      return;
    }
    throw e;
  }

  info("Check `document` property when no specific frame is focused");
  let documentPropertyValue = getDocumentPropertyValue(panel);

  ok(
    documentPropertyValue.startsWith("HTMLDocument https://example.com"),
    `Got expected "document" value (${documentPropertyValue})`
  );

  info(
    "Select the frame in the iframe picker and check that the document property is updated"
  );
  // Wait for the DOM panel to refresh.
  const store = getReduxStoreFromPanel(panel);
  let onPropertiesFetched = waitForDispatch(store, "FETCH_PROPERTIES");

  const exampleOrgFrame = toolbox.doc.querySelector(
    "#toolbox-frame-menu .menuitem:last-child .command"
  );

  exampleOrgFrame.click();
  await onPropertiesFetched;

  documentPropertyValue = getDocumentPropertyValue(panel);
  ok(
    documentPropertyValue.startsWith("HTMLDocument https://example.org"),
    `Got expected "document" value (${documentPropertyValue})`
  );

  info(
    "Select the top-level frame and check that the document property is updated"
  );
  onPropertiesFetched = waitForDispatch(store, "FETCH_PROPERTIES");

  const exampleComFrame = toolbox.doc.querySelector(
    "#toolbox-frame-menu .menuitem:first-child .command"
  );
  exampleComFrame.click();
  await onPropertiesFetched;

  documentPropertyValue = getDocumentPropertyValue(panel);
  ok(
    documentPropertyValue.startsWith("HTMLDocument https://example.com"),
    `Got expected "document" value (${documentPropertyValue})`
  );
});

function getDocumentPropertyValue(panel) {
  return getRowByLabel(panel, "document").querySelector("td.treeValueCell")
    .textContent;
}