Source code
Revision control
Copy as Markdown
Other Tools
/* Any copyright is dedicated to the Public Domain.
"use strict";
add_task(
threadFrontTest(async ({ threadFront, debuggee }) => {
const packet = await executeOnNextTickAndWaitForPause(
() =>
debuggee.eval(`
function foo(__proto__){
debugger;
}
foo("bar")
`),
threadFront
);
const environment = await packet.frame.getEnvironment();
Assert.equal(environment.type, "function");
Assert.equal(
// The original bug is only reproducible in the test when cloning the result, since
// threadFrontTest uses a direct transport that gets us the object returned from
// the actor.
// eslint-disable-next-line no-proto
structuredClone(environment).bindings.arguments[0].__proto__.value,
"bar"
);
await threadFront.resume();
})
);
add_task(
threadFrontTest(async ({ threadFront, debuggee }) => {
const packet = await executeOnNextTickAndWaitForPause(
() =>
debuggee.eval(`
(function() {
const __proto__ = "foo";
debugger;
})()
`),
threadFront
);
const environment = await packet.frame.getEnvironment();
Assert.equal(
// The original bug is only reproducible in the test when cloning the result, since
// threadFrontTest uses a direct transport that gets us the object returned from
// the actor.
// eslint-disable-next-line no-proto
structuredClone(environment).bindings.variables.__proto__.value,
"foo"
);
await threadFront.resume();
})
);