summaryrefslogtreecommitdiffstats
path: root/devtools/client/framework/test/browser_tab_commands_factory.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/framework/test/browser_tab_commands_factory.js')
-rw-r--r--devtools/client/framework/test/browser_tab_commands_factory.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/devtools/client/framework/test/browser_tab_commands_factory.js b/devtools/client/framework/test/browser_tab_commands_factory.js
new file mode 100644
index 0000000000..d8f2f44ca8
--- /dev/null
+++ b/devtools/client/framework/test/browser_tab_commands_factory.js
@@ -0,0 +1,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();
+}