blob: 45af6f2f3f9824e34ad9d8cee46466728f01979d [file] [log] [blame]
<html>
<head>
<script src="../../http/tests/inspector/resources/protocol-test.js"></script>
<script src="../../http/tests/inspector/dom/resources/InspectorDOMListener.js"></script>
<script>
function test()
{
// Create a DOM listener to convert nodeIds to tag names.
var dom = createDOMListener();
// Caching the output to avoid searching through the log.
var output = [];
var documentId;
var domSearchQueries = [
{
query: "p",
nodes: []
},
{
query: "p",
nodes: [".base1"]
},
{
query: "p",
nodes: [".base2"]
},
{
query: "p",
nodes: [".base1", ".base2"]
},
{
query: "p",
nodes: ["iframe"]
},
// XPath should return just the children of the selected nodes.
{
query: "//p",
nodes: [".base1"]
},
{
query: "//div",
nodes: [".base1"]
}
];
InspectorProtocol.sendCommand("DOM.getDocument", {}, onGotDocument);
function onGotDocument(message) {
InspectorProtocol.checkForError(message);
dom.collectNode(message.result.root);
documentId = message.result.root.nodeId;
performSearches(domSearchQueries, testFinished);
}
function performSearches(list, callback)
{
function next() {
if (list.length)
search(list.shift(), next);
else
callback();
}
next();
}
function search(queryData, callback)
{
resolveSelectors(queryData.nodes, function(nodeIds) {
output.push("=== Query: " + JSON.stringify(queryData.query) + " in [" + queryData.nodes.join(", ") + "] ===");
InspectorProtocol.sendCommand("DOM.performSearch", {query: queryData.query, nodeIds: nodeIds}, function(message) {
InspectorProtocol.checkForError(message);
printSearchResults(message.result, callback);
});
});
}
function resolveSelectors(nodes, callback)
{
var results = new Array(nodes.length);
var remaining = nodes.length;
if (!remaining)
return callback(results);
nodes.forEach(function(selector, index) {
InspectorProtocol.sendCommand("DOM.querySelector", {nodeId: documentId, selector: selector}, function(message) {
InspectorProtocol.checkForError(message);
results[index] = message.result.nodeId;
if (--remaining <= 0)
callback(results);
});
});
}
function printSearchResults(results, callback)
{
output.push("Count: " + results.resultCount);
if (!results.resultCount)
return callback();
var options = {"searchId": results.searchId, "fromIndex": 0, "toIndex": results.resultCount};
InspectorProtocol.sendCommand("DOM.getSearchResults", options, function(message) {
for (var nodeId of message.result.nodeIds)
output.push(dom.getNodeIdentifier(nodeId));
callback();
});
}
function testFinished()
{
ProtocolTest.log(output.join("\n"));
ProtocolTest.completeTest();
}
}
</script>
</head>
<body onload="runTest()" class="main-frame">
<p>Testing DOM.performSearch with parent node ids.</p>
<div class="base1">
<p class="base1 main-frame"></p>
</div>
<div class="base2">
<p class="base2 main-frame"></p>
</div>
<iframe src="resources/dom-search-iframe.html"></iframe>
</body>
</html>