diff options
Diffstat (limited to 'devtools/client/jsonview/test/doc_frame_script.js')
-rw-r--r-- | devtools/client/jsonview/test/doc_frame_script.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/devtools/client/jsonview/test/doc_frame_script.js b/devtools/client/jsonview/test/doc_frame_script.js new file mode 100644 index 000000000..3d19b3433 --- /dev/null +++ b/devtools/client/jsonview/test/doc_frame_script.js @@ -0,0 +1,98 @@ +/* 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"; + +/* globals Services, sendAsyncMessage, addMessageListener */ + +// XXX Some helper API could go to: +// testing/mochitest/tests/SimpleTest/AsyncContentUtils.js +// (or at least to share test API in devtools) + +// Set up a dummy environment so that EventUtils works. We need to be careful to +// pass a window object into each EventUtils method we call rather than having +// it rely on the |window| global. +let EventUtils = {}; +EventUtils.window = content; +EventUtils.parent = EventUtils.window; +EventUtils._EU_Ci = Components.interfaces; // eslint-disable-line +EventUtils._EU_Cc = Components.classes; // eslint-disable-line +EventUtils.navigator = content.navigator; +EventUtils.KeyboardEvent = content.KeyboardEvent; + +Services.scriptloader.loadSubScript( + "chrome://mochikit/content/tests/SimpleTest/EventUtils.js", EventUtils); + +/** + * When the JSON View is done rendering it triggers custom event + * "JSONViewInitialized", then the Test:TestPageProcessingDone message + * will be sent to the parent process for tests to wait for this event + * if needed. + */ +content.addEventListener("JSONViewInitialized", () => { + sendAsyncMessage("Test:JsonView:JSONViewInitialized"); +}, false); + +addMessageListener("Test:JsonView:GetElementCount", function (msg) { + let {selector} = msg.data; + let nodeList = content.document.querySelectorAll(selector); + sendAsyncMessage(msg.name, {count: nodeList.length}); +}); + +addMessageListener("Test:JsonView:GetElementText", function (msg) { + let {selector} = msg.data; + let element = content.document.querySelector(selector); + let text = element ? element.textContent : null; + sendAsyncMessage(msg.name, {text: text}); +}); + +addMessageListener("Test:JsonView:FocusElement", function (msg) { + let {selector} = msg.data; + let element = content.document.querySelector(selector); + if (element) { + element.focus(); + } + sendAsyncMessage(msg.name); +}); + +addMessageListener("Test:JsonView:SendString", function (msg) { + let {selector, str} = msg.data; + if (selector) { + let element = content.document.querySelector(selector); + if (element) { + element.focus(); + } + } + + EventUtils.sendString(str, content); + + sendAsyncMessage(msg.name); +}); + +addMessageListener("Test:JsonView:WaitForFilter", function (msg) { + let firstRow = content.document.querySelector( + ".jsonPanelBox .treeTable .treeRow"); + + // Check if the filter is already set. + if (firstRow.classList.contains("hidden")) { + sendAsyncMessage(msg.name); + return; + } + + // Wait till the first row has 'hidden' class set. + let observer = new content.MutationObserver(function (mutations) { + for (let i = 0; i < mutations.length; i++) { + let mutation = mutations[i]; + if (mutation.attributeName == "class") { + if (firstRow.classList.contains("hidden")) { + observer.disconnect(); + sendAsyncMessage(msg.name); + break; + } + } + } + }); + + observer.observe(firstRow, { attributes: true }); +}); |