f656eab592
This adds ExecutionContextDescription.uniqueId for a system-unique way to identify an execution context and supports it in Runtime.evaluate. This allows a client to avoid accidentally executing an expression in a context different from that originally intended if a navigation occurs while Runtime.evaluate is in flight. Design doc: https://docs.google.com/document/d/1vGVWvKP9FTTX6kimcUJR_PAfVgDeIzXXITFpl0SyghQ Bug: v8:11268, chromium:1101897 Change-Id: I4c6bec562ffc85312559316f639d641780144039 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2594538 Commit-Queue: Andrey Kosyakov <caseq@chromium.org> Reviewed-by: Dmitry Gozman <dgozman@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#71869}
67 lines
1.9 KiB
JavaScript
67 lines
1.9 KiB
JavaScript
// Copyright 2020 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.
|
|
|
|
const {Protocol, contextGroup} = InspectorTest.start(
|
|
`Tests how Runtime.evaluate handles uniqueContextId argument`);
|
|
|
|
(async function test(){
|
|
Protocol.Runtime.enable();
|
|
const context1 = (await Protocol.Runtime.onceExecutionContextCreated()).params.context;
|
|
|
|
contextGroup.createContext();
|
|
const context2 = (await Protocol.Runtime.onceExecutionContextCreated()).params.context;
|
|
|
|
Protocol.Runtime.evaluate({
|
|
expression: 'token = "context 1";',
|
|
contextId: context1.id
|
|
});
|
|
Protocol.Runtime.evaluate({
|
|
expression: 'token = "context 2";',
|
|
contextId: context2.id
|
|
});
|
|
|
|
{
|
|
const response = (await Protocol.Runtime.evaluate({
|
|
expression: 'token',
|
|
uniqueContextId: context1.uniqueId,
|
|
returnByValue: true
|
|
})).result.result.value;
|
|
InspectorTest.logMessage(`token in context 1: ${response}`);
|
|
}
|
|
{
|
|
const response = (await Protocol.Runtime.evaluate({
|
|
expression: 'token',
|
|
uniqueContextId: context2.uniqueId,
|
|
returnByValue: true
|
|
})).result.result.value;
|
|
InspectorTest.logMessage(`token in context 2: ${response}`);
|
|
}
|
|
|
|
// The following tests are for error handling.
|
|
{
|
|
const response = (await Protocol.Runtime.evaluate({
|
|
expression: 'token',
|
|
uniqueContextId: context1.uniqueId,
|
|
contextId: context1.id
|
|
}));
|
|
InspectorTest.logMessage(response);
|
|
}
|
|
{
|
|
const response = (await Protocol.Runtime.evaluate({
|
|
expression: 'token',
|
|
uniqueContextId: 'fubar',
|
|
}));
|
|
InspectorTest.logMessage(response);
|
|
}
|
|
{
|
|
const response = (await Protocol.Runtime.evaluate({
|
|
expression: 'token',
|
|
uniqueContextId: context1.uniqueId + 1,
|
|
}));
|
|
InspectorTest.logMessage(response);
|
|
}
|
|
|
|
InspectorTest.completeTest();
|
|
})();
|