forked from mirrors/gecko-dev
Bug 1500986 - Migrate old event-listener and worker debugger tests r=jdescottes
--HG-- rename : devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js => devtools/client/shared/test/browser_dbg_debugger-statement.js rename : devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-01.js => devtools/client/shared/test/browser_dbg_event-listeners-01.js rename : devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-02.js => devtools/client/shared/test/browser_dbg_event-listeners-02.js rename : devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-03.js => devtools/client/shared/test/browser_dbg_event-listeners-03.js rename : devtools/client/debugger/test/mochitest/browser_dbg_listworkers.js => devtools/client/shared/test/browser_dbg_listworkers.js rename : devtools/client/debugger/test/mochitest/browser_dbg_worker-window.js => devtools/client/shared/test/browser_dbg_worker-window.js rename : devtools/client/debugger/test/mochitest/code_listworkers-worker1.js => devtools/client/shared/test/code_listworkers-worker1.js rename : devtools/client/debugger/test/mochitest/code_listworkers-worker2.js => devtools/client/shared/test/code_listworkers-worker2.js rename : devtools/client/debugger/test/mochitest/doc_event-listeners-01.html => devtools/client/shared/test/doc_event-listeners-01.html rename : devtools/client/debugger/test/mochitest/doc_event-listeners-03.html => devtools/client/shared/test/doc_event-listeners-03.html rename : devtools/client/debugger/test/mochitest/doc_inline-debugger-statement.html => devtools/client/shared/test/doc_inline-debugger-statement.html rename : devtools/client/debugger/test/mochitest/doc_listworkers-tab.html => devtools/client/shared/test/doc_listworkers-tab.html rename : devtools/client/debugger/test/mochitest/doc_native-event-handler.html => devtools/client/shared/test/doc_native-event-handler.html
This commit is contained in:
parent
f90b32afb1
commit
d843fa0143
22 changed files with 331 additions and 224 deletions
|
|
@ -98,6 +98,8 @@ devtools/client/inspector/markup/test/doc_markup_events_*.html
|
||||||
devtools/client/inspector/rules/test/doc_media_queries.html
|
devtools/client/inspector/rules/test/doc_media_queries.html
|
||||||
devtools/client/performance/components/test/test_jit_optimizations_01.html
|
devtools/client/performance/components/test/test_jit_optimizations_01.html
|
||||||
devtools/client/responsive.html/test/browser/touch.html
|
devtools/client/responsive.html/test/browser/touch.html
|
||||||
|
devtools/client/shared/test/*.html
|
||||||
|
devtools/client/shared/test/code_*.js
|
||||||
devtools/client/shared/components/test/mochitest/*.html
|
devtools/client/shared/components/test/mochitest/*.html
|
||||||
!devtools/client/shared/components/test/mochitest/test_stack-trace.html
|
!devtools/client/shared/components/test/mochitest/test_stack-trace.html
|
||||||
devtools/client/storage/test/*.html
|
devtools/client/storage/test/*.html
|
||||||
|
|
|
||||||
|
|
@ -7,34 +7,16 @@ subsuite = devtools
|
||||||
skip-if = (os == 'linux' && debug && bits == 32)
|
skip-if = (os == 'linux' && debug && bits == 32)
|
||||||
support-files =
|
support-files =
|
||||||
addon4.xpi
|
addon4.xpi
|
||||||
code_listworkers-worker1.js
|
|
||||||
code_listworkers-worker2.js
|
|
||||||
code_WorkerTargetActor.attachThread-worker.js
|
|
||||||
doc_event-listeners-01.html
|
|
||||||
doc_event-listeners-03.html
|
|
||||||
doc_inline-debugger-statement.html
|
|
||||||
doc_listworkers-tab.html
|
|
||||||
doc_native-event-handler.html
|
|
||||||
doc_promise-get-allocation-stack.html
|
doc_promise-get-allocation-stack.html
|
||||||
doc_promise-get-fulfillment-stack.html
|
doc_promise-get-fulfillment-stack.html
|
||||||
doc_promise-get-rejection-stack.html
|
doc_promise-get-rejection-stack.html
|
||||||
doc_terminate-on-tab-close.html
|
doc_terminate-on-tab-close.html
|
||||||
doc_WorkerTargetActor.attachThread-tab.html
|
|
||||||
head.js
|
head.js
|
||||||
!/devtools/client/shared/test/shared-head.js
|
!/devtools/client/shared/test/shared-head.js
|
||||||
!/devtools/client/shared/test/telemetry-test-helpers.js
|
!/devtools/client/shared/test/telemetry-test-helpers.js
|
||||||
[browser_dbg_addon-console.js]
|
[browser_dbg_addon-console.js]
|
||||||
skip-if = (e10s && debug || os == 'win' || verify) || true # bug 1005274
|
skip-if = (e10s && debug || os == 'win' || verify) || true # bug 1005274
|
||||||
tags = addons
|
tags = addons
|
||||||
[browser_dbg_debugger-statement.js]
|
|
||||||
skip-if = e10s && debug
|
|
||||||
[browser_dbg_event-listeners-01.js]
|
|
||||||
skip-if = e10s && debug
|
|
||||||
[browser_dbg_event-listeners-02.js]
|
|
||||||
skip-if = e10s && debug
|
|
||||||
[browser_dbg_event-listeners-03.js]
|
|
||||||
skip-if = e10s && debug
|
|
||||||
[browser_dbg_listworkers.js]
|
|
||||||
[browser_dbg_promises-allocation-stack.js]
|
[browser_dbg_promises-allocation-stack.js]
|
||||||
uses-unsafe-cpows = true
|
uses-unsafe-cpows = true
|
||||||
skip-if = true
|
skip-if = true
|
||||||
|
|
@ -50,5 +32,3 @@ skip-if = true
|
||||||
[browser_dbg_terminate-on-tab-close.js]
|
[browser_dbg_terminate-on-tab-close.js]
|
||||||
uses-unsafe-cpows = true
|
uses-unsafe-cpows = true
|
||||||
skip-if = true
|
skip-if = true
|
||||||
[browser_dbg_worker-window.js]
|
|
||||||
skip-if = (e10s && debug) || true # Bug 1486974
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
||||||
var TAB_URL = EXAMPLE_URL + "doc_listworkers-tab.html";
|
|
||||||
var WORKER1_URL = "code_listworkers-worker1.js";
|
|
||||||
var WORKER2_URL = "code_listworkers-worker2.js";
|
|
||||||
|
|
||||||
function test() {
|
|
||||||
Task.spawn(function* () {
|
|
||||||
DebuggerServer.init();
|
|
||||||
DebuggerServer.registerAllActors();
|
|
||||||
|
|
||||||
let client = new DebuggerClient(DebuggerServer.connectPipe());
|
|
||||||
yield connect(client);
|
|
||||||
|
|
||||||
let tab = yield addTab(TAB_URL);
|
|
||||||
let { tabs } = yield listTabs(client);
|
|
||||||
let [, targetFront] = yield attachTarget(client, findTab(tabs, TAB_URL));
|
|
||||||
|
|
||||||
let { workers } = yield listWorkers(targetFront);
|
|
||||||
is(workers.length, 0);
|
|
||||||
|
|
||||||
executeSoon(() => {
|
|
||||||
evalInTab(tab, "var worker1 = new Worker('" + WORKER1_URL + "');");
|
|
||||||
});
|
|
||||||
yield waitForWorkerListChanged(targetFront);
|
|
||||||
|
|
||||||
({ workers } = yield listWorkers(targetFront));
|
|
||||||
is(workers.length, 1);
|
|
||||||
is(workers[0].url, WORKER1_URL);
|
|
||||||
|
|
||||||
executeSoon(() => {
|
|
||||||
evalInTab(tab, "var worker2 = new Worker('" + WORKER2_URL + "');");
|
|
||||||
});
|
|
||||||
yield waitForWorkerListChanged(targetFront);
|
|
||||||
|
|
||||||
({ workers } = yield listWorkers(targetFront));
|
|
||||||
is(workers.length, 2);
|
|
||||||
is(workers[0].url, WORKER1_URL);
|
|
||||||
is(workers[1].url, WORKER2_URL);
|
|
||||||
|
|
||||||
executeSoon(() => {
|
|
||||||
evalInTab(tab, "worker1.terminate()");
|
|
||||||
});
|
|
||||||
yield waitForWorkerListChanged(targetFront);
|
|
||||||
|
|
||||||
({ workers } = yield listWorkers(targetFront));
|
|
||||||
is(workers.length, 1);
|
|
||||||
is(workers[0].url, WORKER2_URL);
|
|
||||||
|
|
||||||
executeSoon(() => {
|
|
||||||
evalInTab(tab, "worker2.terminate()");
|
|
||||||
});
|
|
||||||
yield waitForWorkerListChanged(targetFront);
|
|
||||||
|
|
||||||
({ workers } = yield listWorkers(targetFront));
|
|
||||||
is(workers.length, 0);
|
|
||||||
|
|
||||||
yield close(client);
|
|
||||||
finish();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
function f() {
|
|
||||||
var a = 1;
|
|
||||||
var b = 2;
|
|
||||||
var c = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
self.onmessage = function (event) {
|
|
||||||
if (event.data == "ping") {
|
|
||||||
f();
|
|
||||||
postMessage("pong");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
postMessage("load");
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
self.onmessage = function () {};
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
self.onmessage = function () {};
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8"/>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -5,6 +5,8 @@ support-files =
|
||||||
addon1.xpi
|
addon1.xpi
|
||||||
addon2.xpi
|
addon2.xpi
|
||||||
browser_devices.json
|
browser_devices.json
|
||||||
|
code_listworkers-worker1.js
|
||||||
|
code_listworkers-worker2.js
|
||||||
code_WorkerTargetActor.attach-worker1.js
|
code_WorkerTargetActor.attach-worker1.js
|
||||||
code_WorkerTargetActor.attach-worker2.js
|
code_WorkerTargetActor.attach-worker2.js
|
||||||
code_WorkerTargetActor.attachThread-worker.js
|
code_WorkerTargetActor.attachThread-worker.js
|
||||||
|
|
@ -13,6 +15,8 @@ support-files =
|
||||||
doc_cubic-bezier-02.html
|
doc_cubic-bezier-02.html
|
||||||
doc_empty-tab-01.html
|
doc_empty-tab-01.html
|
||||||
doc_empty-tab-02.html
|
doc_empty-tab-02.html
|
||||||
|
doc_event-listeners-01.html
|
||||||
|
doc_event-listeners-03.html
|
||||||
doc_filter-editor-01.html
|
doc_filter-editor-01.html
|
||||||
doc_html_tooltip-02.xul
|
doc_html_tooltip-02.xul
|
||||||
doc_html_tooltip-03.xul
|
doc_html_tooltip-03.xul
|
||||||
|
|
@ -25,9 +29,12 @@ support-files =
|
||||||
doc_html_tooltip_doorhanger-02.xul
|
doc_html_tooltip_doorhanger-02.xul
|
||||||
doc_html_tooltip_hover.xul
|
doc_html_tooltip_hover.xul
|
||||||
doc_html_tooltip_rtl.xul
|
doc_html_tooltip_rtl.xul
|
||||||
|
doc_inline-debugger-statement.html
|
||||||
doc_inplace-editor_autocomplete_offset.xul
|
doc_inplace-editor_autocomplete_offset.xul
|
||||||
doc_layoutHelpers-getBoxQuads.html
|
doc_layoutHelpers-getBoxQuads.html
|
||||||
doc_layoutHelpers.html
|
doc_layoutHelpers.html
|
||||||
|
doc_listworkers-tab.html
|
||||||
|
doc_native-event-handler.html
|
||||||
doc_options-view.xul
|
doc_options-view.xul
|
||||||
doc_script-switching-01.html
|
doc_script-switching-01.html
|
||||||
doc_script-switching-02.html
|
doc_script-switching-02.html
|
||||||
|
|
@ -67,8 +74,17 @@ support-files =
|
||||||
[browser_cubic-bezier-05.js]
|
[browser_cubic-bezier-05.js]
|
||||||
[browser_cubic-bezier-06.js]
|
[browser_cubic-bezier-06.js]
|
||||||
[browser_cubic-bezier-07.js]
|
[browser_cubic-bezier-07.js]
|
||||||
|
[browser_dbg_debugger-statement.js]
|
||||||
|
skip-if = e10s && debug
|
||||||
|
[browser_dbg_event-listeners-01.js]
|
||||||
|
skip-if = e10s && debug
|
||||||
|
[browser_dbg_event-listeners-02.js]
|
||||||
|
skip-if = e10s && debug
|
||||||
|
[browser_dbg_event-listeners-03.js]
|
||||||
|
skip-if = e10s && debug
|
||||||
[browser_dbg_globalactor.js]
|
[browser_dbg_globalactor.js]
|
||||||
skip-if = e10s
|
skip-if = e10s
|
||||||
|
[browser_dbg_listworkers.js]
|
||||||
[browser_filter-editor-01.js]
|
[browser_filter-editor-01.js]
|
||||||
[browser_filter-editor-02.js]
|
[browser_filter-editor-02.js]
|
||||||
[browser_filter-editor-03.js]
|
[browser_filter-editor-03.js]
|
||||||
|
|
@ -246,3 +262,5 @@ skip-if = debug # bug 1334683
|
||||||
skip-if = e10s && debug
|
skip-if = e10s && debug
|
||||||
[browser_dbg_WorkerTargetActor.attach.js]
|
[browser_dbg_WorkerTargetActor.attach.js]
|
||||||
skip-if = e10s && debug
|
skip-if = e10s && debug
|
||||||
|
[browser_dbg_worker-window.js]
|
||||||
|
skip-if = (e10s && debug) || true # Bug 1486974
|
||||||
|
|
@ -3,11 +3,22 @@
|
||||||
/* Any copyright is dedicated to the Public Domain.
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the behavior of the debugger statement.
|
* Tests the behavior of the debugger statement.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const TAB_URL = EXAMPLE_URL + "doc_inline-debugger-statement.html";
|
// Import helpers for the workers
|
||||||
|
/* import-globals-from helper_workers.js */
|
||||||
|
Services.scriptloader.loadSubScript(
|
||||||
|
"chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js",
|
||||||
|
this);
|
||||||
|
|
||||||
|
var { DebuggerServer } = require("devtools/server/main");
|
||||||
|
var { DebuggerClient } = require("devtools/shared/client/debugger-client");
|
||||||
|
|
||||||
|
const TAB_URL = TEST_URI_ROOT + "doc_inline-debugger-statement.html";
|
||||||
|
|
||||||
var gClient;
|
var gClient;
|
||||||
var gTab;
|
var gTab;
|
||||||
|
|
@ -16,31 +27,31 @@ function test() {
|
||||||
DebuggerServer.init();
|
DebuggerServer.init();
|
||||||
DebuggerServer.registerAllActors();
|
DebuggerServer.registerAllActors();
|
||||||
|
|
||||||
let transport = DebuggerServer.connectPipe();
|
const transport = DebuggerServer.connectPipe();
|
||||||
gClient = new DebuggerClient(transport);
|
gClient = new DebuggerClient(transport);
|
||||||
gClient.connect().then(([aType, aTraits]) => {
|
gClient.connect().then(([aType, aTraits]) => {
|
||||||
is(aType, "browser",
|
is(aType, "browser",
|
||||||
"Root actor should identify itself as a browser.");
|
"Root actor should identify itself as a browser.");
|
||||||
|
|
||||||
addTab(TAB_URL)
|
addTab(TAB_URL)
|
||||||
.then((aTab) => {
|
.then(tab => {
|
||||||
gTab = aTab;
|
gTab = tab;
|
||||||
return attachTargetActorForUrl(gClient, TAB_URL);
|
return attachTargetActorForUrl(gClient, TAB_URL);
|
||||||
})
|
})
|
||||||
.then(testEarlyDebuggerStatement)
|
.then(testEarlyDebuggerStatement)
|
||||||
.then(testDebuggerStatement)
|
.then(testDebuggerStatement)
|
||||||
.then(() => gClient.close())
|
.then(() => gClient.close())
|
||||||
.then(finish)
|
.then(finish)
|
||||||
.catch(aError => {
|
.catch(error => {
|
||||||
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
|
ok(false, "Got an error: " + error.message + "\n" + error.stack);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function testEarlyDebuggerStatement([aGrip, aResponse]) {
|
function testEarlyDebuggerStatement([aGrip, aResponse]) {
|
||||||
let deferred = promise.defer();
|
const deferred = getDeferredPromise().defer();
|
||||||
|
|
||||||
let onPaused = function (aEvent, aPacket) {
|
const onPaused = function(event, packet) {
|
||||||
ok(false, "Pause shouldn't be called before we've attached!");
|
ok(false, "Pause shouldn't be called before we've attached!");
|
||||||
deferred.reject();
|
deferred.reject();
|
||||||
};
|
};
|
||||||
|
|
@ -65,9 +76,9 @@ function testEarlyDebuggerStatement([aGrip, aResponse]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function testDebuggerStatement([aGrip, aResponse]) {
|
function testDebuggerStatement([aGrip, aResponse]) {
|
||||||
let deferred = promise.defer();
|
const deferred = getDeferredPromise().defer();
|
||||||
|
|
||||||
gClient.addListener("paused", (aEvent, aPacket) => {
|
gClient.addListener("paused", (event, packet) => {
|
||||||
gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
|
gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
|
||||||
ok(true, "The pause handler was triggered on a debugger statement.");
|
ok(true, "The pause handler was triggered on a debugger statement.");
|
||||||
deferred.resolve();
|
deferred.resolve();
|
||||||
|
|
@ -3,84 +3,96 @@
|
||||||
/* Any copyright is dedicated to the Public Domain.
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests that the eventListeners request works.
|
* Tests that the eventListeners request works.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const TAB_URL = EXAMPLE_URL + "doc_event-listeners-01.html";
|
// Import helpers for the workers
|
||||||
|
/* import-globals-from helper_workers.js */
|
||||||
|
Services.scriptloader.loadSubScript(
|
||||||
|
"chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js",
|
||||||
|
this);
|
||||||
|
|
||||||
|
var { DebuggerServer } = require("devtools/server/main");
|
||||||
|
var { DebuggerClient } = require("devtools/shared/client/debugger-client");
|
||||||
|
|
||||||
|
const TAB_URL = TEST_URI_ROOT + "doc_event-listeners-01.html";
|
||||||
|
|
||||||
add_task(async function() {
|
add_task(async function() {
|
||||||
DebuggerServer.init();
|
DebuggerServer.init();
|
||||||
DebuggerServer.registerAllActors();
|
DebuggerServer.registerAllActors();
|
||||||
|
|
||||||
let transport = DebuggerServer.connectPipe();
|
const transport = DebuggerServer.connectPipe();
|
||||||
let client = new DebuggerClient(transport);
|
const client = new DebuggerClient(transport);
|
||||||
let [type, traits] = await client.connect();
|
const [type] = await client.connect();
|
||||||
|
|
||||||
Assert.equal(type, "browser",
|
Assert.equal(type, "browser",
|
||||||
"Root actor should identify itself as a browser.");
|
"Root actor should identify itself as a browser.");
|
||||||
|
|
||||||
let tab = await addTab(TAB_URL);
|
const tab = await addTab(TAB_URL);
|
||||||
let threadClient = await attachThreadActorForUrl(client, TAB_URL);
|
const threadClient = await attachThreadActorForUrl(client, TAB_URL);
|
||||||
await pauseDebuggee(tab, client, threadClient);
|
await pauseDebuggee(tab, client, threadClient);
|
||||||
await testEventListeners(client, threadClient);
|
await testEventListeners(client, threadClient);
|
||||||
|
|
||||||
await client.close();
|
await client.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
function pauseDebuggee(aTab, aClient, aThreadClient) {
|
function pauseDebuggee(tab, client, threadClient) {
|
||||||
let deferred = promise.defer();
|
const deferred = getDeferredPromise().defer();
|
||||||
|
|
||||||
aClient.addOneTimeListener("paused", (aEvent, aPacket) => {
|
client.addOneTimeListener("paused", (event, packet) => {
|
||||||
is(aPacket.type, "paused",
|
is(packet.type, "paused",
|
||||||
"We should now be paused.");
|
"We should now be paused.");
|
||||||
is(aPacket.why.type, "debuggerStatement",
|
is(packet.why.type, "debuggerStatement",
|
||||||
"The debugger statement was hit.");
|
"The debugger statement was hit.");
|
||||||
|
|
||||||
deferred.resolve(aThreadClient);
|
deferred.resolve(threadClient);
|
||||||
});
|
});
|
||||||
|
|
||||||
generateMouseClickInTab(aTab, "content.document.querySelector('button')");
|
generateMouseClickInTab(tab, "content.document.querySelector('button')");
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testEventListeners(aClient, aThreadClient) {
|
async function testEventListeners(client, threadClient) {
|
||||||
let packet = await aThreadClient.eventListeners();
|
const packet = await threadClient.eventListeners();
|
||||||
|
|
||||||
if (packet.error) {
|
if (packet.error) {
|
||||||
let msg = "Error getting event listeners: " + packet.message;
|
const msg = "Error getting event listeners: " + packet.message;
|
||||||
Assert.ok(false, msg);
|
Assert.ok(false, msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
is(packet.listeners.length, 3, "Found all event listeners.");
|
is(packet.listeners.length, 3, "Found all event listeners.");
|
||||||
|
|
||||||
let listeners = await promise.all(packet.listeners.map(listener => {
|
const listeners = await getDeferredPromise().all(packet.listeners.map(listener => {
|
||||||
const lDeferred = promise.defer();
|
const lDeferred = getDeferredPromise().defer();
|
||||||
aThreadClient.pauseGrip(listener.function).getDefinitionSite(aResponse => {
|
threadClient.pauseGrip(listener.function).getDefinitionSite(response => {
|
||||||
if (aResponse.error) {
|
if (response.error) {
|
||||||
const msg = "Error getting function definition site: " + aResponse.message;
|
const msg = "Error getting function definition site: " + response.message;
|
||||||
ok(false, msg);
|
ok(false, msg);
|
||||||
lDeferred.reject(msg);
|
lDeferred.reject(msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
listener.function.url = aResponse.source.url;
|
listener.function.url = response.source.url;
|
||||||
lDeferred.resolve(listener);
|
lDeferred.resolve(listener);
|
||||||
});
|
});
|
||||||
return lDeferred.promise;
|
return lDeferred.promise;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
let types = [];
|
const types = [];
|
||||||
|
|
||||||
for (let l of listeners) {
|
for (const l of listeners) {
|
||||||
info("Listener for the " + l.type + " event.");
|
info("Listener for the " + l.type + " event.");
|
||||||
let node = l.node;
|
const node = l.node;
|
||||||
ok(node, "There is a node property.");
|
ok(node, "There is a node property.");
|
||||||
ok(node.object, "There is a node object property.");
|
ok(node.object, "There is a node object property.");
|
||||||
if (node.selector != "window") {
|
if (node.selector != "window") {
|
||||||
let nodeCount =
|
const nodeCount =
|
||||||
await ContentTask.spawn(gBrowser.selectedBrowser, node.selector, async (selector) => {
|
await ContentTask.spawn(gBrowser.selectedBrowser, node.selector,
|
||||||
|
async (selector) => {
|
||||||
return content.document.querySelectorAll(selector).length;
|
return content.document.querySelectorAll(selector).length;
|
||||||
});
|
});
|
||||||
Assert.equal(nodeCount, 1, "The node property is a unique CSS selector.");
|
Assert.equal(nodeCount, 1, "The node property is a unique CSS selector.");
|
||||||
|
|
@ -88,7 +100,7 @@ async function testEventListeners(aClient, aThreadClient) {
|
||||||
Assert.ok(true, "The node property is a unique CSS selector.");
|
Assert.ok(true, "The node property is a unique CSS selector.");
|
||||||
}
|
}
|
||||||
|
|
||||||
let func = l.function;
|
const func = l.function;
|
||||||
ok(func, "There is a function property.");
|
ok(func, "There is a function property.");
|
||||||
is(func.type, "object", "The function form is of type 'object'.");
|
is(func.type, "object", "The function form is of type 'object'.");
|
||||||
is(func.class, "Function", "The function form is of class 'Function'.");
|
is(func.class, "Function", "The function form is of class 'Function'.");
|
||||||
|
|
@ -128,5 +140,5 @@ async function testEventListeners(aClient, aThreadClient) {
|
||||||
Assert.ok(types.includes("change"), "Found the change handler.");
|
Assert.ok(types.includes("change"), "Found the change handler.");
|
||||||
Assert.ok(types.includes("keyup"), "Found the keyup handler.");
|
Assert.ok(types.includes("keyup"), "Found the keyup handler.");
|
||||||
|
|
||||||
await aThreadClient.resume();
|
await threadClient.resume();
|
||||||
}
|
}
|
||||||
|
|
@ -3,54 +3,64 @@
|
||||||
/* Any copyright is dedicated to the Public Domain.
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests that the eventListeners request works when bound functions are used as
|
* Tests that the eventListeners request works when bound functions are used as
|
||||||
* event listeners.
|
* event listeners.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const TAB_URL = EXAMPLE_URL + "doc_event-listeners-03.html";
|
// Import helpers for the workers
|
||||||
|
/* import-globals-from helper_workers.js */
|
||||||
|
Services.scriptloader.loadSubScript(
|
||||||
|
"chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js",
|
||||||
|
this);
|
||||||
|
|
||||||
|
var { DebuggerServer } = require("devtools/server/main");
|
||||||
|
var { DebuggerClient } = require("devtools/shared/client/debugger-client");
|
||||||
|
|
||||||
|
const TAB_URL = TEST_URI_ROOT + "doc_event-listeners-03.html";
|
||||||
|
|
||||||
add_task(async function() {
|
add_task(async function() {
|
||||||
DebuggerServer.init();
|
DebuggerServer.init();
|
||||||
DebuggerServer.registerAllActors();
|
DebuggerServer.registerAllActors();
|
||||||
|
|
||||||
let transport = DebuggerServer.connectPipe();
|
const transport = DebuggerServer.connectPipe();
|
||||||
let client = new DebuggerClient(transport);
|
const client = new DebuggerClient(transport);
|
||||||
let [type, traits] = await client.connect();
|
const [type] = await client.connect();
|
||||||
|
|
||||||
Assert.equal(type, "browser",
|
Assert.equal(type, "browser",
|
||||||
"Root actor should identify itself as a browser.");
|
"Root actor should identify itself as a browser.");
|
||||||
|
|
||||||
let tab = await addTab(TAB_URL);
|
const tab = await addTab(TAB_URL);
|
||||||
let threadClient = await attachThreadActorForUrl(client, TAB_URL);
|
const threadClient = await attachThreadActorForUrl(client, TAB_URL);
|
||||||
await pauseDebuggee(tab, client, threadClient);
|
await pauseDebuggee(tab, client, threadClient);
|
||||||
await testEventListeners(client, threadClient);
|
await testEventListeners(client, threadClient);
|
||||||
await client.close();
|
await client.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
function pauseDebuggee(aTab, aClient, aThreadClient) {
|
function pauseDebuggee(tab, client, threadClient) {
|
||||||
let deferred = promise.defer();
|
const deferred = getDeferredPromise().defer();
|
||||||
|
|
||||||
aClient.addOneTimeListener("paused", (aEvent, aPacket) => {
|
client.addOneTimeListener("paused", (event, packet) => {
|
||||||
is(aPacket.type, "paused",
|
is(packet.type, "paused",
|
||||||
"We should now be paused.");
|
"We should now be paused.");
|
||||||
is(aPacket.why.type, "debuggerStatement",
|
is(packet.why.type, "debuggerStatement",
|
||||||
"The debugger statement was hit.");
|
"The debugger statement was hit.");
|
||||||
|
|
||||||
deferred.resolve(aThreadClient);
|
deferred.resolve(threadClient);
|
||||||
});
|
});
|
||||||
|
|
||||||
generateMouseClickInTab(aTab, "content.document.querySelector('button')");
|
generateMouseClickInTab(tab, "content.document.querySelector('button')");
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function testEventListeners(aClient, aThreadClient) {
|
async function testEventListeners(client, threadClient) {
|
||||||
let packet = await aThreadClient.eventListeners();
|
const packet = await threadClient.eventListeners();
|
||||||
|
|
||||||
if (packet.error) {
|
if (packet.error) {
|
||||||
let msg = "Error getting event listeners: " + aPacket.message;
|
const msg = "Error getting event listeners: " + packet.message;
|
||||||
ok(false, msg);
|
ok(false, msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -58,16 +68,16 @@ async function testEventListeners(aClient, aThreadClient) {
|
||||||
is(packet.listeners.length, 3,
|
is(packet.listeners.length, 3,
|
||||||
"Found all event listeners.");
|
"Found all event listeners.");
|
||||||
|
|
||||||
let listeners = await promise.all(packet.listeners.map(listener => {
|
const listeners = await getDeferredPromise().all(packet.listeners.map(listener => {
|
||||||
const lDeferred = promise.defer();
|
const lDeferred = getDeferredPromise().defer();
|
||||||
aThreadClient.pauseGrip(listener.function).getDefinitionSite(aResponse => {
|
threadClient.pauseGrip(listener.function).getDefinitionSite(response => {
|
||||||
if (aResponse.error) {
|
if (response.error) {
|
||||||
const msg = "Error getting function definition site: " + aResponse.message;
|
const msg = "Error getting function definition site: " + response.message;
|
||||||
ok(false, msg);
|
ok(false, msg);
|
||||||
lDeferred.reject(msg);
|
lDeferred.reject(msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
listener.function.url = aResponse.source.url;
|
listener.function.url = response.source.url;
|
||||||
lDeferred.resolve(listener);
|
lDeferred.resolve(listener);
|
||||||
});
|
});
|
||||||
return lDeferred.promise;
|
return lDeferred.promise;
|
||||||
|
|
@ -75,14 +85,15 @@ async function testEventListeners(aClient, aThreadClient) {
|
||||||
|
|
||||||
Assert.equal(listeners.length, 3, "Found three event listeners.");
|
Assert.equal(listeners.length, 3, "Found three event listeners.");
|
||||||
|
|
||||||
for (let l of listeners) {
|
for (const l of listeners) {
|
||||||
let node = l.node;
|
const node = l.node;
|
||||||
ok(node, "There is a node property.");
|
ok(node, "There is a node property.");
|
||||||
ok(node.object, "There is a node object property.");
|
ok(node.object, "There is a node object property.");
|
||||||
|
|
||||||
if (node.selector != "window") {
|
if (node.selector != "window") {
|
||||||
let nodeCount =
|
const nodeCount =
|
||||||
await ContentTask.spawn(gBrowser.selectedBrowser, node.selector, async (selector) => {
|
await ContentTask.spawn(gBrowser.selectedBrowser, node.selector,
|
||||||
|
async (selector) => {
|
||||||
return content.document.querySelectorAll(selector).length;
|
return content.document.querySelectorAll(selector).length;
|
||||||
});
|
});
|
||||||
Assert.equal(nodeCount, 1, "The node property is a unique CSS selector.");
|
Assert.equal(nodeCount, 1, "The node property is a unique CSS selector.");
|
||||||
|
|
@ -90,7 +101,7 @@ async function testEventListeners(aClient, aThreadClient) {
|
||||||
Assert.ok(true, "The node property is a unique CSS selector.");
|
Assert.ok(true, "The node property is a unique CSS selector.");
|
||||||
}
|
}
|
||||||
|
|
||||||
let func = l.function;
|
const func = l.function;
|
||||||
ok(func, "There is a function property.");
|
ok(func, "There is a function property.");
|
||||||
is(func.type, "object", "The function form is of type 'object'.");
|
is(func.type, "object", "The function form is of type 'object'.");
|
||||||
is(func.class, "Function", "The function form is of class 'Function'.");
|
is(func.class, "Function", "The function form is of class 'Function'.");
|
||||||
|
|
@ -107,5 +118,5 @@ async function testEventListeners(aClient, aThreadClient) {
|
||||||
"Capturing property has the right value.");
|
"Capturing property has the right value.");
|
||||||
}
|
}
|
||||||
|
|
||||||
await aThreadClient.resume();
|
await threadClient.resume();
|
||||||
}
|
}
|
||||||
|
|
@ -3,12 +3,23 @@
|
||||||
/* Any copyright is dedicated to the Public Domain.
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests that the eventListeners request works when there are event handlers
|
* Tests that the eventListeners request works when there are event handlers
|
||||||
* that the debugger cannot unwrap.
|
* that the debugger cannot unwrap.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const TAB_URL = EXAMPLE_URL + "doc_native-event-handler.html";
|
// Import helpers for the workers
|
||||||
|
/* import-globals-from helper_workers.js */
|
||||||
|
Services.scriptloader.loadSubScript(
|
||||||
|
"chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js",
|
||||||
|
this);
|
||||||
|
|
||||||
|
var { DebuggerServer } = require("devtools/server/main");
|
||||||
|
var { DebuggerClient } = require("devtools/shared/client/debugger-client");
|
||||||
|
|
||||||
|
const TAB_URL = TEST_URI_ROOT + "doc_native-event-handler.html";
|
||||||
|
|
||||||
var gClient;
|
var gClient;
|
||||||
var gTab;
|
var gTab;
|
||||||
|
|
@ -17,37 +28,37 @@ function test() {
|
||||||
DebuggerServer.init();
|
DebuggerServer.init();
|
||||||
DebuggerServer.registerAllActors();
|
DebuggerServer.registerAllActors();
|
||||||
|
|
||||||
let transport = DebuggerServer.connectPipe();
|
const transport = DebuggerServer.connectPipe();
|
||||||
gClient = new DebuggerClient(transport);
|
gClient = new DebuggerClient(transport);
|
||||||
gClient.connect().then(([aType, aTraits]) => {
|
gClient.connect().then(([aType, aTraits]) => {
|
||||||
is(aType, "browser",
|
is(aType, "browser",
|
||||||
"Root actor should identify itself as a browser.");
|
"Root actor should identify itself as a browser.");
|
||||||
|
|
||||||
addTab(TAB_URL)
|
addTab(TAB_URL)
|
||||||
.then((aTab) => {
|
.then((tab) => {
|
||||||
gTab = aTab;
|
gTab = tab;
|
||||||
return attachThreadActorForUrl(gClient, TAB_URL);
|
return attachThreadActorForUrl(gClient, TAB_URL);
|
||||||
})
|
})
|
||||||
.then(pauseDebuggee)
|
.then(pauseDebuggee)
|
||||||
.then(testEventListeners)
|
.then(testEventListeners)
|
||||||
.then(() => gClient.close())
|
.then(() => gClient.close())
|
||||||
.then(finish)
|
.then(finish)
|
||||||
.catch(aError => {
|
.catch(error => {
|
||||||
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
|
ok(false, "Got an error: " + error.message + "\n" + error.stack);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function pauseDebuggee(aThreadClient) {
|
function pauseDebuggee(threadClient) {
|
||||||
let deferred = promise.defer();
|
const deferred = getDeferredPromise().defer();
|
||||||
|
|
||||||
gClient.addOneTimeListener("paused", (aEvent, aPacket) => {
|
gClient.addOneTimeListener("paused", (event, packet) => {
|
||||||
is(aPacket.type, "paused",
|
is(packet.type, "paused",
|
||||||
"We should now be paused.");
|
"We should now be paused.");
|
||||||
is(aPacket.why.type, "debuggerStatement",
|
is(packet.why.type, "debuggerStatement",
|
||||||
"The debugger statement was hit.");
|
"The debugger statement was hit.");
|
||||||
|
|
||||||
deferred.resolve(aThreadClient);
|
deferred.resolve(threadClient);
|
||||||
});
|
});
|
||||||
|
|
||||||
generateMouseClickInTab(gTab, "content.document.querySelector('button')");
|
generateMouseClickInTab(gTab, "content.document.querySelector('button')");
|
||||||
|
|
@ -55,12 +66,12 @@ function pauseDebuggee(aThreadClient) {
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
function testEventListeners(aThreadClient) {
|
function testEventListeners(threadClient) {
|
||||||
let deferred = promise.defer();
|
const deferred = getDeferredPromise().defer();
|
||||||
|
|
||||||
aThreadClient.eventListeners(aPacket => {
|
threadClient.eventListeners(packet => {
|
||||||
if (aPacket.error) {
|
if (packet.error) {
|
||||||
let msg = "Error getting event listeners: " + aPacket.message;
|
const msg = "Error getting event listeners: " + packet.message;
|
||||||
ok(false, msg);
|
ok(false, msg);
|
||||||
deferred.reject(msg);
|
deferred.reject(msg);
|
||||||
return;
|
return;
|
||||||
|
|
@ -69,8 +80,8 @@ function testEventListeners(aThreadClient) {
|
||||||
// There are 2 event listeners in the page: button.onclick, window.onload.
|
// There are 2 event listeners in the page: button.onclick, window.onload.
|
||||||
// The video element controls listeners are skipped — they cannot be
|
// The video element controls listeners are skipped — they cannot be
|
||||||
// unwrapped but they shouldn't cause us to throw either.
|
// unwrapped but they shouldn't cause us to throw either.
|
||||||
is(aPacket.listeners.length, 2, "Found all event listeners.");
|
is(packet.listeners.length, 2, "Found all event listeners.");
|
||||||
aThreadClient.resume(deferred.resolve);
|
threadClient.resume(deferred.resolve);
|
||||||
});
|
});
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
73
devtools/client/shared/test/browser_dbg_listworkers.js
Normal file
73
devtools/client/shared/test/browser_dbg_listworkers.js
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||||
|
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||||
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// Import helpers for the workers
|
||||||
|
/* import-globals-from helper_workers.js */
|
||||||
|
Services.scriptloader.loadSubScript(
|
||||||
|
"chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js",
|
||||||
|
this);
|
||||||
|
|
||||||
|
var { DebuggerServer } = require("devtools/server/main");
|
||||||
|
var { DebuggerClient } = require("devtools/shared/client/debugger-client");
|
||||||
|
|
||||||
|
var TAB_URL = EXAMPLE_URL + "doc_listworkers-tab.html";
|
||||||
|
var WORKER1_URL = "code_listworkers-worker1.js";
|
||||||
|
var WORKER2_URL = "code_listworkers-worker2.js";
|
||||||
|
|
||||||
|
add_task(async function test() {
|
||||||
|
DebuggerServer.init();
|
||||||
|
DebuggerServer.registerAllActors();
|
||||||
|
|
||||||
|
const client = new DebuggerClient(DebuggerServer.connectPipe());
|
||||||
|
await connect(client);
|
||||||
|
|
||||||
|
const tab = await addTab(TAB_URL);
|
||||||
|
const { tabs } = await listTabs(client);
|
||||||
|
const [, targetFront] = await attachTarget(client, findTab(tabs, TAB_URL));
|
||||||
|
|
||||||
|
let { workers } = await listWorkers(targetFront);
|
||||||
|
is(workers.length, 0);
|
||||||
|
|
||||||
|
executeSoon(() => {
|
||||||
|
evalInTab(tab, "var worker1 = new Worker('" + WORKER1_URL + "');");
|
||||||
|
});
|
||||||
|
await waitForWorkerListChanged(targetFront);
|
||||||
|
|
||||||
|
({ workers } = await listWorkers(targetFront));
|
||||||
|
is(workers.length, 1);
|
||||||
|
is(workers[0].url, WORKER1_URL);
|
||||||
|
|
||||||
|
executeSoon(() => {
|
||||||
|
evalInTab(tab, "var worker2 = new Worker('" + WORKER2_URL + "');");
|
||||||
|
});
|
||||||
|
await waitForWorkerListChanged(targetFront);
|
||||||
|
|
||||||
|
({ workers } = await listWorkers(targetFront));
|
||||||
|
is(workers.length, 2);
|
||||||
|
is(workers[0].url, WORKER1_URL);
|
||||||
|
is(workers[1].url, WORKER2_URL);
|
||||||
|
|
||||||
|
executeSoon(() => {
|
||||||
|
evalInTab(tab, "worker1.terminate()");
|
||||||
|
});
|
||||||
|
await waitForWorkerListChanged(targetFront);
|
||||||
|
|
||||||
|
({ workers } = await listWorkers(targetFront));
|
||||||
|
is(workers.length, 1);
|
||||||
|
is(workers[0].url, WORKER2_URL);
|
||||||
|
|
||||||
|
executeSoon(() => {
|
||||||
|
evalInTab(tab, "worker2.terminate()");
|
||||||
|
});
|
||||||
|
await waitForWorkerListChanged(targetFront);
|
||||||
|
|
||||||
|
({ workers } = await listWorkers(targetFront));
|
||||||
|
is(workers.length, 0);
|
||||||
|
|
||||||
|
await close(client);
|
||||||
|
finish();
|
||||||
|
});
|
||||||
|
|
@ -3,13 +3,19 @@
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
// Import helpers for the workers
|
||||||
|
/* import-globals-from helper_workers.js */
|
||||||
|
Services.scriptloader.loadSubScript(
|
||||||
|
"chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js",
|
||||||
|
this);
|
||||||
|
|
||||||
// The following "connectionClosed" rejection should not be left uncaught. This
|
// The following "connectionClosed" rejection should not be left uncaught. This
|
||||||
// test has been whitelisted until the issue is fixed.
|
// test has been whitelisted until the issue is fixed.
|
||||||
ChromeUtils.import("resource://testing-common/PromiseTestUtils.jsm", this);
|
ChromeUtils.import("resource://testing-common/PromiseTestUtils.jsm", this);
|
||||||
PromiseTestUtils.expectUncaughtRejection(/[object Object]/);
|
PromiseTestUtils.expectUncaughtRejection(/[object Object]/);
|
||||||
|
|
||||||
var TAB_URL = EXAMPLE_URL + "doc_WorkerTargetActor.attachThread-tab.html";
|
const TAB_URL = EXAMPLE_URL + "doc_WorkerTargetActor.attachThread-tab.html";
|
||||||
var WORKER_URL = "code_WorkerTargetActor.attachThread-worker.js";
|
const WORKER_URL = "code_WorkerTargetActor.attachThread-worker.js";
|
||||||
|
|
||||||
add_task(async function() {
|
add_task(async function() {
|
||||||
await pushPrefs(["devtools.scratchpad.enabled", true]);
|
await pushPrefs(["devtools.scratchpad.enabled", true]);
|
||||||
|
|
@ -17,21 +23,21 @@ add_task(async function() {
|
||||||
DebuggerServer.init();
|
DebuggerServer.init();
|
||||||
DebuggerServer.registerAllActors();
|
DebuggerServer.registerAllActors();
|
||||||
|
|
||||||
let client = new DebuggerClient(DebuggerServer.connectPipe());
|
const client = new DebuggerClient(DebuggerServer.connectPipe());
|
||||||
await connect(client);
|
await connect(client);
|
||||||
|
|
||||||
let tab = await addTab(TAB_URL);
|
const tab = await addTab(TAB_URL);
|
||||||
let { tabs } = await listTabs(client);
|
const { tabs } = await listTabs(client);
|
||||||
let [, targetFront] = await attachTarget(client, findTab(tabs, TAB_URL));
|
const [, targetFront] = await attachTarget(client, findTab(tabs, TAB_URL));
|
||||||
|
|
||||||
await listWorkers(targetFront);
|
await listWorkers(targetFront);
|
||||||
await createWorkerInTab(tab, WORKER_URL);
|
await createWorkerInTab(tab, WORKER_URL);
|
||||||
|
|
||||||
let { workers } = await listWorkers(targetFront);
|
const { workers } = await listWorkers(targetFront);
|
||||||
let [, workerTargetFront] = await attachWorker(targetFront,
|
const [, workerTargetFront] = await attachWorker(targetFront,
|
||||||
findWorker(workers, WORKER_URL));
|
findWorker(workers, WORKER_URL));
|
||||||
|
|
||||||
let toolbox = await gDevTools.showToolbox(TargetFactory.forWorker(workerTargetFront),
|
const toolbox = await gDevTools.showToolbox(TargetFactory.forWorker(workerTargetFront),
|
||||||
"jsdebugger",
|
"jsdebugger",
|
||||||
Toolbox.HostType.WINDOW);
|
Toolbox.HostType.WINDOW);
|
||||||
|
|
||||||
|
|
@ -48,8 +54,8 @@ add_task(async function() {
|
||||||
ok(toolbox.win.parent.document.title.includes(WORKER_URL),
|
ok(toolbox.win.parent.document.title.includes(WORKER_URL),
|
||||||
"worker URL in host title");
|
"worker URL in host title");
|
||||||
|
|
||||||
let toolTabs = toolbox.doc.querySelectorAll(".devtools-tab");
|
const toolTabs = toolbox.doc.querySelectorAll(".devtools-tab");
|
||||||
let activeTools = [...toolTabs].map(tab=>tab.getAttribute("data-id"));
|
const activeTools = [...toolTabs].map(toolTab => toolTab.getAttribute("data-id"));
|
||||||
|
|
||||||
is(activeTools.join(","), "webconsole,jsdebugger,scratchpad",
|
is(activeTools.join(","), "webconsole,jsdebugger,scratchpad",
|
||||||
"Correct set of tools supported by worker");
|
"Correct set of tools supported by worker");
|
||||||
3
devtools/client/shared/test/code_listworkers-worker1.js
Normal file
3
devtools/client/shared/test/code_listworkers-worker1.js
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
self.onmessage = function() {};
|
||||||
3
devtools/client/shared/test/code_listworkers-worker2.js
Normal file
3
devtools/client/shared/test/code_listworkers-worker2.js
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
self.onmessage = function() {};
|
||||||
|
|
@ -12,10 +12,12 @@
|
||||||
<input type="text" onchange="changeHandler()">
|
<input type="text" onchange="changeHandler()">
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
"use strict";
|
||||||
|
|
||||||
window.addEventListener("load", function() {
|
window.addEventListener("load", function() {
|
||||||
function initialSetup(event) {
|
function initialSetup(event) {
|
||||||
debugger;
|
debugger;
|
||||||
var button = document.querySelector("button");
|
const button = document.querySelector("button");
|
||||||
button.onclick = clickHandler;
|
button.onclick = clickHandler;
|
||||||
}
|
}
|
||||||
function clickHandler(event) {
|
function clickHandler(event) {
|
||||||
|
|
@ -28,10 +30,10 @@
|
||||||
window.foobar = "keyupHandler";
|
window.foobar = "keyupHandler";
|
||||||
}
|
}
|
||||||
|
|
||||||
var button = document.querySelector("button");
|
const button = document.querySelector("button");
|
||||||
button.onclick = initialSetup;
|
button.onclick = initialSetup;
|
||||||
|
|
||||||
var input = document.querySelector("input");
|
const input = document.querySelector("input");
|
||||||
input.addEventListener("keyup", keyupHandler, true);
|
input.addEventListener("keyup", keyupHandler, true);
|
||||||
|
|
||||||
window.changeHandler = changeHandler;
|
window.changeHandler = changeHandler;
|
||||||
|
|
@ -14,9 +14,11 @@
|
||||||
<button id="boundHandleEventClick">boundHandleEventClick</button>
|
<button id="boundHandleEventClick">boundHandleEventClick</button>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
"use strict";
|
||||||
|
|
||||||
window.addEventListener("load", function() {
|
window.addEventListener("load", function() {
|
||||||
function initialSetup(event) {
|
function initialSetup(event) {
|
||||||
var button = document.getElementById("initialSetup");
|
const button = document.getElementById("initialSetup");
|
||||||
button.removeEventListener("click", initialSetup);
|
button.removeEventListener("click", initialSetup);
|
||||||
debugger;
|
debugger;
|
||||||
}
|
}
|
||||||
|
|
@ -26,7 +28,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleEventClick() {
|
function handleEventClick() {
|
||||||
var button = document.getElementById("handleEventClick");
|
const button = document.getElementById("handleEventClick");
|
||||||
// Create a long prototype chain to test for weird edge cases.
|
// Create a long prototype chain to test for weird edge cases.
|
||||||
button.addEventListener("click", Object.create(Object.create(this)));
|
button.addEventListener("click", Object.create(Object.create(this)));
|
||||||
}
|
}
|
||||||
|
|
@ -36,7 +38,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
function boundHandleEventClick() {
|
function boundHandleEventClick() {
|
||||||
var button = document.getElementById("boundHandleEventClick");
|
const button = document.getElementById("boundHandleEventClick");
|
||||||
this.handleEvent = this.handleEvent.bind(this);
|
this.handleEvent = this.handleEvent.bind(this);
|
||||||
button.addEventListener("click", this);
|
button.addEventListener("click", this);
|
||||||
}
|
}
|
||||||
|
|
@ -45,15 +47,15 @@
|
||||||
window.foobar = "boundHandleEventClick";
|
window.foobar = "boundHandleEventClick";
|
||||||
};
|
};
|
||||||
|
|
||||||
var button = document.getElementById("clicker");
|
const button = document.getElementById("clicker");
|
||||||
// Bind more than once to test for weird edge cases.
|
// Bind more than once to test for weird edge cases.
|
||||||
var boundClicker = clicker.bind(this).bind(this).bind(this);
|
const boundClicker = clicker.bind(this).bind(this).bind(this);
|
||||||
button.addEventListener("click", boundClicker);
|
button.addEventListener("click", boundClicker);
|
||||||
|
|
||||||
new handleEventClick();
|
new handleEventClick();
|
||||||
new boundHandleEventClick();
|
new boundHandleEventClick();
|
||||||
|
|
||||||
var initButton = document.getElementById("initialSetup");
|
const initButton = document.getElementById("initialSetup");
|
||||||
initButton.addEventListener("click", initialSetup);
|
initButton.addEventListener("click", initialSetup);
|
||||||
}, {once: true});
|
}, {once: true});
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<button>Click me!</button>
|
<button>Click me!</button>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
"use strict";
|
||||||
function runDebuggerStatement() {
|
function runDebuggerStatement() {
|
||||||
debugger;
|
debugger;
|
||||||
}
|
}
|
||||||
|
|
@ -6,6 +6,8 @@
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>A video element with native event handlers</title>
|
<title>A video element with native event handlers</title>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
"use strict";
|
||||||
|
|
||||||
function initialSetup(event) {
|
function initialSetup(event) {
|
||||||
debugger;
|
debugger;
|
||||||
}
|
}
|
||||||
|
|
@ -68,6 +68,24 @@ function postMessageToWorkerInTab(tab, url, message) {
|
||||||
return jsonrpc(tab, "postMessageToWorker", [url, message]);
|
return jsonrpc(tab, "postMessageToWorker", [url, message]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function generateMouseClickInTab(tab, path) {
|
||||||
|
info("Generating mouse click in tab.");
|
||||||
|
|
||||||
|
return jsonrpc(tab, "generateMouseClick", [path]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function evalInTab(tab, string) {
|
||||||
|
info("Evalling string in tab.");
|
||||||
|
|
||||||
|
return jsonrpc(tab, "_eval", [string]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function callInTab(tab, name) {
|
||||||
|
info("Calling function with name '" + name + "' in tab.");
|
||||||
|
|
||||||
|
return jsonrpc(tab, "call", [name, Array.prototype.slice.call(arguments, 2)]);
|
||||||
|
}
|
||||||
|
|
||||||
function connect(client) {
|
function connect(client) {
|
||||||
info("Connecting client.");
|
info("Connecting client.");
|
||||||
return client.connect();
|
return client.connect();
|
||||||
|
|
@ -118,6 +136,11 @@ function attachWorker(targetFront, worker) {
|
||||||
return targetFront.attachWorker(worker.actor);
|
return targetFront.attachWorker(worker.actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function waitForWorkerListChanged(targetFront) {
|
||||||
|
info("Waiting for worker list to change.");
|
||||||
|
return targetFront.once("workerListChanged");
|
||||||
|
}
|
||||||
|
|
||||||
function attachThread(workerTargetFront, options) {
|
function attachThread(workerTargetFront, options) {
|
||||||
info("Attaching to thread.");
|
info("Attaching to thread.");
|
||||||
return workerTargetFront.attachThread(options);
|
return workerTargetFront.attachThread(options);
|
||||||
|
|
@ -221,3 +244,39 @@ this.removeTab = function removeTab(tab, win) {
|
||||||
targetBrowser.removeTab(tab);
|
targetBrowser.removeTab(tab);
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
async function attachTargetActorForUrl(client, url) {
|
||||||
|
const grip = await getTargetActorForUrl(client, url);
|
||||||
|
const [ response, front ] = await client.attachTarget(grip.actor);
|
||||||
|
return [grip, response, front];
|
||||||
|
}
|
||||||
|
|
||||||
|
async function attachThreadActorForUrl(client, url) {
|
||||||
|
const [, response] = await attachTargetActorForUrl(client, url);
|
||||||
|
const [, threadClient] = await client.attachThread(response.threadActor);
|
||||||
|
await threadClient.resume();
|
||||||
|
return threadClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTargetActorForUrl(client, url) {
|
||||||
|
const deferred = getDeferredPromise().defer();
|
||||||
|
|
||||||
|
client.listTabs().then(response => {
|
||||||
|
const targetActor = response.tabs.filter(grip => grip.url == url).pop();
|
||||||
|
deferred.resolve(targetActor);
|
||||||
|
});
|
||||||
|
|
||||||
|
return deferred.promise;
|
||||||
|
}
|
||||||
|
|
||||||
|
function pushPrefs(...aPrefs) {
|
||||||
|
const deferred = getDeferredPromise().defer();
|
||||||
|
SpecialPowers.pushPrefEnv({"set": aPrefs}, deferred.resolve);
|
||||||
|
return deferred.promise;
|
||||||
|
}
|
||||||
|
|
||||||
|
function popPrefs() {
|
||||||
|
const deferred = getDeferredPromise().defer();
|
||||||
|
SpecialPowers.popPrefEnv(deferred.resolve);
|
||||||
|
return deferred.promise;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue