blob: 4a44d2f202fc305983183faec69d91beb8ff0fed [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(`Tests search in network requests\n`);
await TestRunner.loadModule('network_test_runner');
await TestRunner.loadModule('console_test_runner');
await TestRunner.showPanel('network');
function initArgs(method, url, async, payload) {
const args = {};
args.method = method;
args.url = url;
args.async = async;
args.payload = payload;
const jsonArgs = JSON.stringify(args).replace(/\"/g, '\\"');
return jsonArgs;
}
function printSubtree(treeElement) {
let result = treeElement;
for (const child of treeElement.children()) {
TestRunner.addResult(` ${child.listItemElement.textContent}`);
treeElement = printSubtree(child);
}
return treeElement;
}
async function search(label, isRegex, ignoreCase, query = 'd.search') {
TestRunner.addResult(label);
const view = await Network.SearchNetworkView.openSearch(query);
view._matchCaseButton.setToggled(!ignoreCase);
view._regexButton.setToggled(isRegex);
const promise = TestRunner.addSnifferPromise(view, '_searchFinished');
view._onAction();
await promise;
const element = printSubtree(view._visiblePane._treeOutline.rootElement());
TestRunner.addResult('');
return element;
}
function networkItemSelected() {
return new Promise(resolve => {
function checkSelected() {
if (UI.panels.network._networkLogView._dataGrid.selectedNode)
resolve(UI.panels.network._networkLogView._dataGrid.selectedNode);
else
setTimeout(checkSelected, 0);
}
checkSelected();
});
}
NetworkTestRunner.recordNetwork();
let script = '';
let count = 0;
for (let i = 0; i < 10; i++) {
count++;
let suffix = i % 3 === 0 ? '-dosearch' : '';
suffix += i % 2 === 0 ? '-doSearch' : '';
suffix += i % 5 === 0 ? '-d.Search' : '';
const args = initArgs('POST', `resources/echo-payload.php?n=${i}`, true, `request${i}${suffix}`)
script += `makeXHRForJSONArguments("${args}");`;
}
ConsoleTestRunner.addConsoleSniffer(step2);
TestRunner.evaluateInPage(script);
async function step2(msg) {
if (msg.messageText.indexOf('XHR loaded') === -1 || (--count)) {
ConsoleTestRunner.addConsoleSniffer(step2);
return;
}
await search('URL search', true, true, '8000/devtools');
await search('Ignore case, regexp', true, true);
await search('Ignore case, No regexp', false, true);
const lastResult = await search('Case sensitive, regexp', true, false);
TestRunner.addResult('Clicking on search result');
const link = lastResult.listItemElement.getElementsByClassName('devtools-link')[0];
link.click();
const requestNode = await networkItemSelected();
const requestName = requestNode._request.name();
TestRunner.addResult(`Selected Node Name: ${requestName.substr(requestName.length - 100)}, URL: ${requestNode._request.url()}`);
TestRunner.completeTest();
}
})();