doc_frame_script.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /* Any copyright is dedicated to the Public Domain.
  2. http://creativecommons.org/publicdomain/zero/1.0/ */
  3. "use strict";
  4. /* globals Services, sendAsyncMessage, addMessageListener */
  5. // XXX Some helper API could go to:
  6. // testing/mochitest/tests/SimpleTest/AsyncContentUtils.js
  7. // (or at least to share test API in devtools)
  8. // Set up a dummy environment so that EventUtils works. We need to be careful to
  9. // pass a window object into each EventUtils method we call rather than having
  10. // it rely on the |window| global.
  11. let EventUtils = {};
  12. EventUtils.window = content;
  13. EventUtils.parent = EventUtils.window;
  14. EventUtils._EU_Ci = Components.interfaces; // eslint-disable-line
  15. EventUtils._EU_Cc = Components.classes; // eslint-disable-line
  16. EventUtils.navigator = content.navigator;
  17. EventUtils.KeyboardEvent = content.KeyboardEvent;
  18. Services.scriptloader.loadSubScript(
  19. "chrome://mochikit/content/tests/SimpleTest/EventUtils.js", EventUtils);
  20. /**
  21. * When the JSON View is done rendering it triggers custom event
  22. * "JSONViewInitialized", then the Test:TestPageProcessingDone message
  23. * will be sent to the parent process for tests to wait for this event
  24. * if needed.
  25. */
  26. content.addEventListener("JSONViewInitialized", () => {
  27. sendAsyncMessage("Test:JsonView:JSONViewInitialized");
  28. }, false);
  29. addMessageListener("Test:JsonView:GetElementCount", function (msg) {
  30. let {selector} = msg.data;
  31. let nodeList = content.document.querySelectorAll(selector);
  32. sendAsyncMessage(msg.name, {count: nodeList.length});
  33. });
  34. addMessageListener("Test:JsonView:GetElementText", function (msg) {
  35. let {selector} = msg.data;
  36. let element = content.document.querySelector(selector);
  37. let text = element ? element.textContent : null;
  38. sendAsyncMessage(msg.name, {text: text});
  39. });
  40. addMessageListener("Test:JsonView:FocusElement", function (msg) {
  41. let {selector} = msg.data;
  42. let element = content.document.querySelector(selector);
  43. if (element) {
  44. element.focus();
  45. }
  46. sendAsyncMessage(msg.name);
  47. });
  48. addMessageListener("Test:JsonView:SendString", function (msg) {
  49. let {selector, str} = msg.data;
  50. if (selector) {
  51. let element = content.document.querySelector(selector);
  52. if (element) {
  53. element.focus();
  54. }
  55. }
  56. EventUtils.sendString(str, content);
  57. sendAsyncMessage(msg.name);
  58. });
  59. addMessageListener("Test:JsonView:WaitForFilter", function (msg) {
  60. let firstRow = content.document.querySelector(
  61. ".jsonPanelBox .treeTable .treeRow");
  62. // Check if the filter is already set.
  63. if (firstRow.classList.contains("hidden")) {
  64. sendAsyncMessage(msg.name);
  65. return;
  66. }
  67. // Wait till the first row has 'hidden' class set.
  68. let observer = new content.MutationObserver(function (mutations) {
  69. for (let i = 0; i < mutations.length; i++) {
  70. let mutation = mutations[i];
  71. if (mutation.attributeName == "class") {
  72. if (firstRow.classList.contains("hidden")) {
  73. observer.disconnect();
  74. sendAsyncMessage(msg.name);
  75. break;
  76. }
  77. }
  78. }
  79. });
  80. observer.observe(firstRow, { attributes: true });
  81. });