blob: bf79249b70d60d9e2f8bb2e9cae6fd9be08de2d4 [file] [log] [blame]
// Copyright 2017 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(
`Verify that last selected element is restored properly later, even if it failed to do so once.\n`);
await TestRunner.loadModule('elements_test_runner');
await TestRunner.showPanel('elements');
await TestRunner.navigatePromise('./resources/elements-panel-restore-selection-when-node-comes-later.html');
var node;
TestRunner.runTestSuite([
function selectNode(next) {
ElementsTestRunner.nodeWithId('inspected', onNodeFound);
function onNodeFound(n) {
node = n;
ElementsTestRunner.selectNode(node).then(onNodeSelected);
}
function onNodeSelected() {
dumpSelectedNode();
next();
}
},
function firstReloadWithoutNodeInDOM(next) {
TestRunner.addSniffer(Elements.ElementsPanel.prototype, '_lastSelectedNodeSelectedForTest', onNodeRestored);
// Do a reload and pretend page's DOM doesn't have a node to restore.
overridePushNodeForPath(node.path());
TestRunner.reloadPage(function() {});
function onNodeRestored() {
dumpSelectedNode();
next();
}
},
function secondReloadWithNodeInDOM(next) {
var pageReloaded = false;
var nodeRestored = false;
TestRunner.addSniffer(Elements.ElementsPanel.prototype, '_lastSelectedNodeSelectedForTest', onNodeRestored);
TestRunner.reloadPage(onPageReloaded);
function onPageReloaded() {
pageReloaded = true;
maybeNext();
}
function onNodeRestored() {
nodeRestored = true;
maybeNext();
}
function maybeNext() {
if (!nodeRestored || !pageReloaded)
return;
dumpSelectedNode();
next();
}
},
]);
function dumpSelectedNode() {
var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement;
var nodeName = selectedElement ? selectedElement.node().nodeNameInCorrectCase() : 'null';
TestRunner.addResult('Selected node: \'' + nodeName + '\'');
}
/**
* @param {string} pathToIgnore
*/
function overridePushNodeForPath(pathToIgnore) {
var original = TestRunner.override(SDK.DOMModel.prototype, 'pushNodeByPathToFrontend', override);
function override(nodePath) {
if (nodePath === pathToIgnore)
return Promise.resolve(null);
return original(nodePath);
}
}
})();