| // Copyright 2018 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| let {session, contextGroup, Protocol} = InspectorTest.start( |
| 'Tests that evaluation works when code generation from strings is not allowed.'); |
| |
| Protocol.Debugger.enable(); |
| Protocol.Runtime.enable(); |
| |
| InspectorTest.runAsyncTestSuite([ |
| async function testEvaluateNotPaused() { |
| contextGroup.addScript(`inspector.setAllowCodeGenerationFromStrings(false); |
| var global1 = 'Global1';`); |
| await Protocol.Debugger.onceScriptParsed(); |
| InspectorTest.logMessage( |
| await Protocol.Runtime.evaluate({expression: 'global1'})); |
| }, |
| |
| async function testEvaluatePaused() { |
| contextGroup.addScript(`inspector.setAllowCodeGenerationFromStrings(false); |
| var global2 = 'Global2'; |
| function foo(x) { |
| var local = 'Local'; |
| debugger; |
| return local + x; |
| } |
| foo();`); |
| let {params: {callFrames: [{callFrameId}]}} = |
| await Protocol.Debugger.oncePaused(); |
| |
| InspectorTest.logMessage( |
| await Protocol.Runtime.evaluate({expression: 'global2'})); |
| InspectorTest.logMessage(await Protocol.Debugger.evaluateOnCallFrame( |
| {callFrameId, expression: 'local'})); |
| await Protocol.Debugger.resume(); |
| }, |
| |
| async function testEvaluateUnsafeEval() { |
| contextGroup.addScript(`inspector.setAllowCodeGenerationFromStrings(false);`); |
| await Protocol.Debugger.onceScriptParsed(); |
| InspectorTest.logMessage( |
| await Protocol.Runtime.evaluate({expression: 'eval("1+1")'})); |
| InspectorTest.logMessage( |
| await Protocol.Runtime.evaluate({expression: 'new Function("return 1+1")()'})); |
| }, |
| |
| async function testEvaluateUnsafeEvalDisableBypass() { |
| contextGroup.addScript(`inspector.setAllowCodeGenerationFromStrings(false);`); |
| await Protocol.Debugger.onceScriptParsed(); |
| InspectorTest.logMessage( |
| await Protocol.Runtime.evaluate({expression: 'eval("1+1")', allowUnsafeEvalBlockedByCSP: false})); |
| InspectorTest.logMessage( |
| await Protocol.Runtime.evaluate({expression: 'new Function("return 1+1")()', allowUnsafeEvalBlockedByCSP: false})); |
| }, |
| |
| async function testCallFunctionOn() { |
| await contextGroup.addScript(`inspector.setAllowCodeGenerationFromStrings(false);`); |
| const globalObject = await Protocol.Runtime.evaluate({expression: 'this'}); |
| const objectId = globalObject.result.result.objectId; |
| InspectorTest.logMessage(await Protocol.Runtime.callFunctionOn({objectId, functionDeclaration: 'function() { return eval("1 + 2"); }'})); |
| |
| await contextGroup.addScript(`this.value = eval("1 + 2");`); |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({expression: 'this.value'})); |
| } |
| ]); |