зеркало из https://github.com/mozilla/gecko-dev.git
110 строки
3.4 KiB
JavaScript
110 строки
3.4 KiB
JavaScript
/* 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");
|
|
});
|
|
|
|
content.addEventListener("load", () => {
|
|
sendAsyncMessage("Test:JsonView:load");
|
|
});
|
|
|
|
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:GetElementVisibleText", function (msg) {
|
|
let {selector} = msg.data;
|
|
let element = content.document.querySelector(selector);
|
|
let text = element ? element.innerText : 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 });
|
|
});
|