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(); | ||||||
|  | @ -80,6 +91,6 @@ function testDebuggerStatement([aGrip, aResponse]) { | ||||||
|   return deferred.promise; |   return deferred.promise; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| registerCleanupFunction(function () { | registerCleanupFunction(function() { | ||||||
|   gClient = null; |   gClient = null; | ||||||
| }); | }); | ||||||
|  | @ -3,92 +3,104 @@ | ||||||
| /* 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, | ||||||
|           return content.document.querySelectorAll(selector).length; |           async (selector) => { | ||||||
|         }); |             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."); | ||||||
|     } else { |     } else { | ||||||
|       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,22 +85,23 @@ 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, | ||||||
|           return content.document.querySelectorAll(selector).length; |           async (selector) => { | ||||||
|         }); |             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."); | ||||||
|     } else { |     } else { | ||||||
|       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,13 +80,13 @@ 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; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| registerCleanupFunction(function () { | registerCleanupFunction(function() { | ||||||
|   gClient = null; |   gClient = null; | ||||||
| }); | }); | ||||||
							
								
								
									
										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"> | ||||||
|       window.addEventListener("load", function () { |       "use strict"; | ||||||
|  | 
 | ||||||
|  |       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"> | ||||||
|       window.addEventListener("load", function () { |       "use strict"; | ||||||
|  | 
 | ||||||
|  |       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
	
	 David Walsh
						David Walsh