author | Alexandre Poirot <poirot.alex@gmail.com> |
Wed, 13 Jul 2016 23:34:18 -0700 | |
changeset 347062 | 7345b89fb14fb8a05513b4dced4b6c6796267dda |
parent 347061 | 867ead052c7457d5f5504b7f344fd9c5b1bcca53 |
child 347063 | a6b4d5fa8ef63f0f46240d4b4afdbd5927277105 |
push id | 1230 |
push user | jlund@mozilla.com |
push date | Mon, 31 Oct 2016 18:13:35 +0000 |
treeherder | mozilla-release@5e06e3766db2 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jryans |
bugs | 1281726 |
milestone | 50.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
devtools/client/framework/test/browser.ini | file | annotate | diff | comparison | revisions | |
devtools/client/framework/test/browser_toolbox_target.js | file | annotate | diff | comparison | revisions |
--- a/devtools/client/framework/test/browser.ini +++ b/devtools/client/framework/test/browser.ini @@ -59,16 +59,17 @@ skip-if = true # Bug 1177463 - Temporari [browser_toolbox_select_event.js] skip-if = e10s # Bug 1069044 - destroyInspector may hang during shutdown [browser_toolbox_selected_tool_unavailable.js] [browser_toolbox_sidebar.js] [browser_toolbox_sidebar_events.js] [browser_toolbox_sidebar_existing_tabs.js] [browser_toolbox_sidebar_overflow_menu.js] [browser_toolbox_split_console.js] +[browser_toolbox_target.js] [browser_toolbox_tabsswitch_shortcuts.js] [browser_toolbox_textbox_context_menu.js] [browser_toolbox_theme_registration.js] [browser_toolbox_toggle.js] [browser_toolbox_tool_ready.js] [browser_toolbox_tool_remote_reopen.js] [browser_toolbox_transport_events.js] [browser_toolbox_view_source_01.js]
new file mode 100644 --- /dev/null +++ b/devtools/client/framework/test/browser_toolbox_target.js @@ -0,0 +1,60 @@ +/* -*- 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/ */ + +// Test about:devtools-toolbox?target which allows opening a toolbox in an +// iframe while defining which document to debug by setting a `target` +// attribute refering to the document to debug. + +add_task(function *() { + // iframe loads the document to debug + let iframe = document.createElement("browser"); + iframe.setAttribute("type", "content"); + document.documentElement.appendChild(iframe); + + let onLoad = once(iframe, "load", true); + iframe.setAttribute("src", "data:text/html,document to debug"); + yield onLoad; + is(iframe.contentWindow.document.body.innerHTML, "document to debug"); + + // toolbox loads the toolbox document + let toolboxIframe = document.createElement("iframe"); + document.documentElement.appendChild(toolboxIframe); + + // Important step to define which target to debug + toolboxIframe.target = iframe; + + let onToolboxReady = gDevTools.once("toolbox-ready"); + + onLoad = once(toolboxIframe, "load", true); + toolboxIframe.setAttribute("src", "about:devtools-toolbox?target"); + yield onLoad; + + // Also wait for toolbox-ready, as toolbox document load isn't enough, there + // is plenty of asynchronous steps during toolbox load + info("Waiting for toolbox-ready"); + let toolbox = yield onToolboxReady; + + let onToolboxDestroyed = gDevTools.once("toolbox-destroyed"); + let onTabActorDetached = once(toolbox.target.client, "tabDetached"); + + info("Removing the iframes"); + toolboxIframe.remove(); + + // And wait for toolbox-destroyed as toolbox unload is also full of + // asynchronous operation that outlast unload event + info("Waiting for toolbox-destroyed"); + yield onToolboxDestroyed; + info("Toolbox destroyed"); + + // Also wait for tabDetached. Toolbox destroys the Target which calls + // TabActor.detach(). But Target doesn't wait for detach's end to resolve. + // Whereas it is quite important as it is a significant part of toolbox + // cleanup. If we do not wait for it and starts removing debugged document, + // the actor is still considered as being attached and continues processing + // events. + yield onTabActorDetached; + + iframe.remove(); +});