summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/mochitest/test_inspector-anonymous.html
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/server/tests/mochitest/test_inspector-anonymous.html')
-rw-r--r--devtools/server/tests/mochitest/test_inspector-anonymous.html201
1 files changed, 201 insertions, 0 deletions
diff --git a/devtools/server/tests/mochitest/test_inspector-anonymous.html b/devtools/server/tests/mochitest/test_inspector-anonymous.html
new file mode 100644
index 000000000..56a911c89
--- /dev/null
+++ b/devtools/server/tests/mochitest/test_inspector-anonymous.html
@@ -0,0 +1,201 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=777674
+-->
+<head>
+ <meta charset="utf-8">
+ <title>Test for Bug 777674</title>
+
+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
+ <script type="application/javascript;version=1.8" src="inspector-helpers.js"></script>
+ <script type="application/javascript;version=1.8">
+window.onload = function() {
+ const {InspectorFront} =
+ require("devtools/shared/fronts/inspector");
+ const {_documentWalker} =
+ require("devtools/server/actors/inspector");
+ const nodeFilterConstants =
+ require("devtools/shared/dom-node-filter-constants");
+ const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+
+ SpecialPowers.pushPrefEnv({"set": [
+ ["dom.webcomponents.enabled", true]
+ ]});
+ SimpleTest.waitForExplicitFinish();
+
+ let gWalker = null;
+ let gClient = null;
+
+ addTest(function setup() {
+ info ("Setting up inspector and walker actors.");
+
+ let url = document.getElementById("inspectorContent").href;
+ attachURL(url, function(err, client, tab, doc) {
+ gInspectee = doc;
+ let inspector = InspectorFront(client, tab);
+ promiseDone(inspector.getWalker().then(walker => {
+ ok(walker, "getWalker() should return an actor.");
+ gClient = client;
+ gWalker = walker;
+ }).then(runNextTest));
+ });
+ });
+
+ addAsyncTest(function* testXBLAnonymousInHTMLDocument() {
+ info ("Testing XBL anonymous in an HTML document.");
+ let rawToolbarbutton = gInspectee.createElementNS(XUL_NS, "toolbarbutton");
+ gInspectee.documentElement.appendChild(rawToolbarbutton);
+
+ let toolbarbutton = yield gWalker.querySelector(gWalker.rootNode, "toolbarbutton");
+ let children = yield gWalker.children(toolbarbutton);
+
+ is (toolbarbutton.numChildren, 0, "XBL content is not visible in HTML doc");
+ is (children.nodes.length, 0, "XBL content is not returned in HTML doc");
+
+ runNextTest();
+ });
+
+ addAsyncTest(function* testNativeAnonymous() {
+ info ("Testing native anonymous content with walker.");
+
+ let select = yield gWalker.querySelector(gWalker.rootNode, "select");
+ let children = yield gWalker.children(select);
+
+ is (select.numChildren, 2, "No native anon content for form control");
+ is (children.nodes.length, 2, "No native anon content for form control");
+
+ runNextTest();
+ });
+
+ addAsyncTest(function* testNativeAnonymousStartingNode() {
+ info ("Tests attaching an element that a walker can't see.");
+
+ let serverWalker = DebuggerServer._searchAllConnectionsForActor(gWalker.actorID);
+ let docwalker = new _documentWalker(
+ gInspectee.querySelector("select"),
+ gInspectee.defaultView,
+ nodeFilterConstants.SHOW_ALL,
+ () => {
+ return nodeFilterConstants.FILTER_ACCEPT
+ }
+ );
+ let scrollbar = docwalker.lastChild();
+ is (scrollbar.tagName, "scrollbar", "An anonymous child has been fetched");
+
+ let node = yield serverWalker.attachElement(scrollbar);
+
+ ok (node, "A response has arrived");
+ ok (node.node, "A node is in the response");
+ is (node.node.rawNode.tagName, "SELECT",
+ "The node has changed to a parent that the walker recognizes");
+
+ runNextTest();
+ });
+
+ addAsyncTest(function* testPseudoElements() {
+ info ("Testing pseudo elements with walker.");
+
+ // Markup looks like: <div><::before /><span /><::after /></div>
+ let pseudo = yield gWalker.querySelector(gWalker.rootNode, "#pseudo");
+ let children = yield gWalker.children(pseudo);
+
+ is (pseudo.numChildren, 1, "::before/::after are not counted if there is a child");
+ is (children.nodes.length, 3, "Correct number of children");
+
+ let before = children.nodes[0];
+ ok (before.isAnonymous, "Child is anonymous");
+ ok (!before._form.isXBLAnonymous, "Child is not XBL anonymous");
+ ok (!before._form.isShadowAnonymous, "Child is not shadow anonymous");
+ ok (before._form.isNativeAnonymous, "Child is native anonymous");
+
+ let span = children.nodes[1];
+ ok (!span.isAnonymous, "Child is not anonymous");
+
+ let after = children.nodes[2];
+ ok (after.isAnonymous, "Child is anonymous");
+ ok (!after._form.isXBLAnonymous, "Child is not XBL anonymous");
+ ok (!after._form.isShadowAnonymous, "Child is not shadow anonymous");
+ ok (after._form.isNativeAnonymous, "Child is native anonymous");
+
+ runNextTest();
+ });
+
+ addAsyncTest(function* testEmptyWithPseudo() {
+ info ("Testing elements with no childrent, except for pseudos.");
+
+ info ("Checking an element whose only child is a pseudo element");
+ let pseudo = yield gWalker.querySelector(gWalker.rootNode, "#pseudo-empty");
+ let children = yield gWalker.children(pseudo);
+
+ is (pseudo.numChildren, 1, "::before/::after are is counted if there are no other children");
+ is (children.nodes.length, 1, "Correct number of children");
+
+ let before = children.nodes[0];
+ ok (before.isAnonymous, "Child is anonymous");
+ ok (!before._form.isXBLAnonymous, "Child is not XBL anonymous");
+ ok (!before._form.isShadowAnonymous, "Child is not shadow anonymous");
+ ok (before._form.isNativeAnonymous, "Child is native anonymous");
+
+ runNextTest();
+ });
+
+ addAsyncTest(function* testShadowAnonymous() {
+ info ("Testing shadow DOM content.");
+
+ let shadow = yield gWalker.querySelector(gWalker.rootNode, "#shadow");
+ let children = yield gWalker.children(shadow);
+
+ is (shadow.numChildren, 3, "Children of the shadow root are counted");
+ is (children.nodes.length, 3, "Children returned from walker");
+
+ let before = children.nodes[0];
+ ok (before.isAnonymous, "Child is anonymous");
+ ok (!before._form.isXBLAnonymous, "Child is not XBL anonymous");
+ ok (!before._form.isShadowAnonymous, "Child is not shadow anonymous");
+ ok (before._form.isNativeAnonymous, "Child is native anonymous");
+
+ // <h3>Shadow <em>DOM</em></h3>
+ let shadowChild1 = children.nodes[1];
+ ok (shadowChild1.isAnonymous, "Child is anonymous");
+ ok (!shadowChild1._form.isXBLAnonymous, "Child is not XBL anonymous");
+ ok (shadowChild1._form.isShadowAnonymous, "Child is shadow anonymous");
+ ok (!shadowChild1._form.isNativeAnonymous, "Child is not native anonymous");
+
+ let shadowSubChildren = yield gWalker.children(children.nodes[1]);
+ is (shadowChild1.numChildren, 2, "Subchildren of the shadow root are counted");
+ is (shadowSubChildren.nodes.length, 2, "Subchildren are returned from walker");
+
+ // <em>DOM</em>
+ let shadowSubChild = children.nodes[1];
+ ok (shadowSubChild.isAnonymous, "Child is anonymous");
+ ok (!shadowSubChild._form.isXBLAnonymous, "Child is not XBL anonymous");
+ ok (shadowSubChild._form.isShadowAnonymous, "Child is shadow anonymous");
+ ok (!shadowSubChild._form.isNativeAnonymous, "Child is not native anonymous");
+
+ // <select multiple></select>
+ let shadowChild2 = children.nodes[2];
+ ok (shadowChild2.isAnonymous, "Child is anonymous");
+ ok (!shadowChild2._form.isXBLAnonymous, "Child is not XBL anonymous");
+ ok (shadowChild2._form.isShadowAnonymous, "Child is shadow anonymous");
+ ok (!shadowChild2._form.isNativeAnonymous, "Child is not native anonymous");
+
+ runNextTest();
+ });
+
+ runNextTest();
+};
+ </script>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=">Mozilla Bug </a>
+<a id="inspectorContent" target="_blank" href="inspector-traversal-data.html">Test Document</a>
+<p id="display"></p>
+<div id="content" style="display: none">
+
+</div>
+<pre id="test">
+</pre>
+</body>
+</html>