blob: 56a791d099592d54163ad509c56066adad7829e0 [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(
`Tests that DOM Mutation Observers do not attempt to deliver mutation records while the debugger is paused.Bug 105810\n`);
await TestRunner.loadModule('console_test_runner');
await TestRunner.loadModule('sources_test_runner');
await TestRunner.showPanel('sources');
var setup = 'window.testDiv = document.createElement(\'div\');\n' +
'window.deliveryCount = 0;\n' +
'var observer = new WebKitMutationObserver(function(records) {\n' +
' window.deliveryCount++;\n' +
'});\n' +
'observer.observe(window.testDiv, { attributes: true });';
var mutateAndPause = 'function mutateAndPause() {\n' +
' window.testDiv.setAttribute(\'foo\', \'baz\');\n' +
' debugger;\n' +
'};\n' +
'setTimeout(mutateAndPause, 0);';
SourcesTestRunner.startDebuggerTest(step1);
function step1() {
TestRunner.evaluateInPage(setup, function() {
TestRunner.addResult('DIV and observer setup.');
ConsoleTestRunner.evaluateInConsoleAndDump('deliveryCount', step2);
});
}
function step2() {
TestRunner.evaluateInPage('window.testDiv.setAttribute(\'foo\', \'bar\')', function() {
TestRunner.addResult('setAttribute should have triggered delivery.');
ConsoleTestRunner.evaluateInConsoleAndDump('deliveryCount', step3);
});
}
function step3() {
TestRunner.evaluateInPage(mutateAndPause, TestRunner.addResult.bind(TestRunner, 'mutateAndPause invoked.'));
SourcesTestRunner.waitUntilPaused(step4);
}
function step4() {
TestRunner.addResult('Delivery should not have taken place.');
ConsoleTestRunner.evaluateInConsoleAndDump('deliveryCount', function() {
SourcesTestRunner.resumeExecution(step5);
});
}
function step5() {
TestRunner.addResult('Second delivery should now have happened.');
ConsoleTestRunner.evaluateInConsoleAndDump('deliveryCount', SourcesTestRunner.completeDebuggerTest);
}
})();