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

"use strict";

// Test LocalTabCommandsFactory

const {
  LocalTabCommandsFactory,
} = require("resource://devtools/client/framework/local-tab-commands-factory.js");

add_task(async function () {
  await testTabDescriptorWithURL("data:text/html;charset=utf-8,foo");

  // Bug 1699497: Also test against a page in the parent process
  // which can hit some race with frame-connector's frame scripts.
  await testTabDescriptorWithURL("about:robots");
});

async function testTabDescriptorWithURL(url) {
  info(`Test TabDescriptor against url ${url}\n`);
  const tab = await addTab(url);

  const commands = await LocalTabCommandsFactory.createCommandsForTab(tab);
  is(
    commands.descriptorFront.localTab,
    tab,
    "TabDescriptor's localTab is set correctly"
  );

  info(
    "Calling a second time createCommandsForTab with the same tab, will return the same commands"
  );
  const secondCommands = await LocalTabCommandsFactory.createCommandsForTab(
    tab
  );
  is(commands, secondCommands, "second commands is the same");

  // We have to involve TargetCommand in order to have a function TabDescriptor.getTarget.
  await commands.targetCommand.startListening();

  info("Wait for descriptor's target");
  const target = await commands.descriptorFront.getTarget();

  info("Call any method to ensure that each target works");
  await target.logInPage("foo");

  info("Destroy the command");
  await commands.destroy();

  gBrowser.removeCurrentTab();
}