Index: LayoutTests/inspector-protocol/dom/dom-relayout-boundary.html |
diff --git a/LayoutTests/inspector-protocol/dom/dom-relayout-boundary.html b/LayoutTests/inspector-protocol/dom/dom-relayout-boundary.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2b36a9943d03bddbe4b5d0dc99b6aac92d7e8511 |
--- /dev/null |
+++ b/LayoutTests/inspector-protocol/dom/dom-relayout-boundary.html |
@@ -0,0 +1,137 @@ |
+<html> |
+<head> |
+<style> |
+.relayout-boundary { |
+ width: 200px; |
+ height: 40px; |
+ overflow: hidden; |
+} |
+ |
+</style> |
+<script type="text/javascript" src="../../http/tests/inspector-protocol/resources/protocol-test.js"></script> |
+<script type="text/javascript"> |
+ |
+function test() |
+{ |
+ var nodeByIdAttribute = {}; |
+ var nodeById = {}; |
+ |
+ getDocument(); |
+ |
+ function getAttribute(node, attribute) |
+ { |
+ if (!node.attributes) |
+ return; |
+ for (var i = 0; i < node.attributes.length; i += 2) { |
+ if (node.attributes[i] === attribute) |
+ return node.attributes[i + 1]; |
+ } |
+ } |
+ |
+ function nodeLabel(node) |
+ { |
+ var result = node.localName; |
+ var id = getAttribute(node, "id"); |
+ if (id) |
+ result += "#" + id; |
+ return result; |
+ } |
+ |
+ function addNode(node) |
+ { |
+ nodeById[node.nodeId] = node; |
+ var idAttribute = getAttribute(node, "id"); |
+ if (idAttribute) |
+ nodeByIdAttribute[idAttribute] = node; |
+ if (node.children) |
+ addNodes(node.children); |
+ } |
+ |
+ function addNodes(nodes) |
+ { |
+ nodes.forEach(addNode); |
+ } |
+ |
+ InspectorTest.eventHandler["DOM.setChildNodes"] = function setChildNodes(messageObject) |
+ { |
+ addNodes(messageObject.params.nodes); |
+ }; |
+ |
+ function getDocument() |
+ { |
+ // We must first get the document so that later on we may get sensible nodeIds. |
+ step({ |
+ command: "DOM.getDocument", |
+ parameters: {}, |
+ callback: getAllNodes |
+ }); |
+ }; |
+ |
+ function getAllNodes(error, result) |
+ { |
+ addNode(result.root); |
+ step({ |
+ command: "DOM.requestChildNodes", |
+ parameters: {"nodeId": result.root.nodeId, "depth": -1}, |
+ callback: dumpRelayoutBoundary.bind(this, 0) |
+ }); |
+ }; |
+ |
+ var nodeIdsToTest = [ |
+ "outer", |
+ "boundary", |
+ "inner", |
+ "hidden" |
+ ]; |
+ |
+ function dumpRelayoutBoundary(nextId) |
+ { |
+ if (nextId >= nodeIdsToTest.length) { |
+ InspectorTest.completeTest(); |
+ return; |
+ } |
+ var node = nodeByIdAttribute[nodeIdsToTest[nextId]]; |
+ function dumpResultsAndContinue(error, result) |
+ { |
+ var text; |
+ if (error) { |
+ text = error; |
+ } else { |
+ var boundaryNode = nodeById[result.nodeId]; |
+ text = boundaryNode ? nodeLabel(boundaryNode) : "null"; |
+ } |
+ InspectorTest.log("Relayout boundary for " + nodeLabel(node) + " is: " + text); |
+ dumpRelayoutBoundary(nextId + 1); |
+ } |
+ step({ |
+ command: "DOM.getRelayoutBoundary", |
+ parameters: {"nodeId": node.nodeId}, |
+ callback: dumpResultsAndContinue |
+ }); |
+ } |
+ |
+ function step(test) |
+ { |
+ InspectorTest.sendCommand(test.command, test.parameters, function(messageObject) { |
+ if (test.callback) |
+ test.callback(messageObject.error && messageObject.error.message, messageObject.result); |
+ }); |
+ }; |
+ setTimeout(InspectorTest.completeTest.bind(InspectorTest), 3400); |
+}; |
+ |
+window.addEventListener("DOMContentLoaded", function () { |
+ runTest(); |
+}, false); |
+</script> |
+</head> |
+<body> |
+<div id="outer"></div> |
+<div class="relayout-boundary" id="boundary"> |
+ <div id="inner"></div> |
+ <div style="display: none"> |
+ <div id="hidden"></div> |
+ </div> |
+</div> |
+</body> |
+</html> |