| // 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( |
| `Tests that reloading page during styles sidebar pane editing cancels editing and re-renders the sidebar pane.\n`); |
| await TestRunner.loadModule('elements_test_runner'); |
| await TestRunner.showPanel('elements'); |
| await TestRunner.loadHTML(` |
| <div id="inspected" style="color: blue">Text</div> |
| `); |
| await TestRunner.evaluateInPagePromise(` |
| function removeInspectedNode() |
| { |
| document.querySelector("#inspected").remove(); |
| } |
| `); |
| |
| var stylesSidebarPane = UI.panels.elements._stylesWidget; |
| TestRunner.runTestSuite([ |
| function selectInspectedNode(next) { |
| ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); |
| }, |
| |
| function startEditingAndReloadPage(next) { |
| var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('color'); |
| var currentDocumentId = stylesSidebarPane.node().ownerDocument.id; |
| treeElement.startEditing(treeElement.valueElement); |
| var nodeRebuiltHappened = false; |
| var pageReloadHappened = false; |
| TestRunner.addSniffer(Elements.StylesSidebarPane.prototype, '_nodeStylesUpdatedForTest', onNodeRebuilt); |
| TestRunner.reloadPage(reloadedCallback); |
| |
| function onNodeRebuilt(node, rebuild) { |
| if (!node || node.ownerDocument.id === currentDocumentId) { |
| TestRunner.addResult('ERROR: A rebuild update happened for the same node.'); |
| TestRunner.completeTest(); |
| return; |
| } |
| nodeRebuiltHappened = true; |
| maybeNext(); |
| } |
| |
| function reloadedCallback() { |
| pageReloadHappened = true; |
| maybeNext(); |
| } |
| |
| function maybeNext() { |
| if (nodeRebuiltHappened && pageReloadHappened) |
| next(); |
| } |
| }, |
| |
| function onPageReloaded(next) { |
| if (stylesSidebarPane._isEditingStyle) { |
| TestRunner.addResult('StylesSidebarPane should not be locked in editing on page reload.'); |
| TestRunner.completeTest(); |
| return; |
| } |
| next(); |
| }, |
| ]); |
| })(); |