blob: af4571f7868d40b9c279a56a657ae1ceeab68dba [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(`Test that evaluation on call frame works across all inspected windows in the call stack.\n`);
await TestRunner.loadModule('console_test_runner');
await TestRunner.loadModule('sources_test_runner');
await TestRunner.showPanel('sources');
await TestRunner.loadHTML(`
<iframe id="iframe"></iframe>
`);
await TestRunner.evaluateInPagePromise(`
function dirxml() { return "overridden dirxml() in top frame"; }
var iframe = document.getElementById("iframe");
var doc = iframe.contentWindow.document;
var html = "<html><head><script>\\n" +
"function dir() { return 'overridden dir() in iframe'; }\\n" +
"function pauseInsideIframe()\\n" +
"{\\n" +
" var table = 'local in iframe';\\n" +
" debugger;\\n" +
" dir;\\n" +
"}\\n" +
"</" + "script></" + "head><" + "body></" + "body></" + "html>";
doc.open();
doc.write(html);
doc.close();
function testFunction()
{
var clear = "local in top frame";
var iframe = document.getElementById("iframe");
iframe.contentWindow.pauseInsideIframe.call({foo: 42});
}
`);
var expressions = [
'dir()', 'dirxml()', 'table', 'clear',
'x:', // print correct syntax error: crbug.com/110163
];
function evaluateInConsoleAndDump(callback) {
var copy = expressions.slice();
inner();
function inner() {
var expression = copy.shift();
if (expression)
ConsoleTestRunner.evaluateInConsoleAndDump(expression, inner, true);
else
callback();
}
}
SourcesTestRunner.startDebuggerTest(step1, true);
function step1() {
SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2);
}
async function step2(callFrames) {
await TestRunner.addSnifferPromise(Sources.CallStackSidebarPane.prototype, '_updatedForTest');
await SourcesTestRunner.captureStackTrace(callFrames);
TestRunner.addResult('\n=== Evaluating on iframe ===');
evaluateInConsoleAndDump(step3);
}
function step3() {
var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane);
pane._selectNextCallFrameOnStack();
TestRunner.deprecatedRunAfterPendingDispatches(step4);
}
function step4() {
TestRunner.addResult('\n=== Evaluating on top frame ===');
evaluateInConsoleAndDump(step5);
}
function step5() {
SourcesTestRunner.completeDebuggerTest();
}
})();