|  | // 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'})); | 
|  | } | 
|  | ]); |