| // Copyright 2020 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 webInspector.inspectedWindow.eval() only evaluates in the correct execution context\n`); |
| await TestRunner.loadModule('extensions_test_runner'); |
| // First navigate to a new page to force a nice, clean renderer with predictable context ids. |
| await TestRunner.navigatePromise('http://devtools.a.test:8000/devtools/resources/empty.html'); |
| |
| let pendingInterceptionPromiseCallback; |
| TestRunner.startNavigation = async function(callback) { |
| await SDK.multitargetNetworkManager.setInterceptionHandlerForPatterns([{ |
| urlPattern: '*'}], interceptionHandler); |
| |
| TestRunner.navigatePromise('http://devtools.b.test:8000/devtools/resources/empty.html'); |
| function interceptionHandler(request) { |
| callback(); |
| return new Promise(resolve => pendingInterceptionPromiseCallback = resolve); |
| } |
| } |
| |
| TestRunner.completeNavigation = function() { |
| pendingInterceptionPromiseCallback(); |
| } |
| |
| await ExtensionsTestRunner.runExtensionTests([ |
| async function extension_testEvaluateInFixedExecutionContext(nextTest) { |
| await evaluateOnFrontendPromise('TestRunner.startNavigation(reply)'); |
| webInspector.inspectedWindow.eval('location.href', onEvaluate); |
| evaluateOnFrontendPromise('TestRunner.completeNavigation()'); |
| |
| function onEvaluate(result, error) { |
| if (result) { |
| output(`FAIL: expected error, got result: ${JSON.stringify(result)}`); |
| } else { |
| output(`Got error, as expected: ${JSON.stringify(error)}`);; |
| } |
| nextTest(); |
| } |
| } |
| ]); |
| })(); |