tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 4f7af98c2e99878a3e9cff5f32295f54604ac5f5
parent 543f25fd74fe934a83b5f5cc70102d6d7fd739c2
Author: Maksim Sadym <69349599+sadym-chromium@users.noreply.github.com>
Date:   Sun, 26 Oct 2025 21:12:49 +0000

Bug 1994760 [wpt PR 55479] - [wdspec] tentative tests for disabled scripting emulation, a=testonly

Automatic update from web-platform-tests
[wdspec] tentative tests for disabled scripting emulation (#55479)

Checks the behavior of disabled scripting for the corner cases mentioned in https://github.com/whatwg/html/pull/11441#pullrequestreview-3139496134
--

wpt-commits: 80cc31004c3109482251ce68ca8a31845dad78ec
wpt-pr: 55479

Diffstat:
Atesting/web-platform/tests/webdriver/tests/bidi/emulation/set_scripting_enabled/enabled_tentative.py | 154+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 154 insertions(+), 0 deletions(-)

diff --git a/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_scripting_enabled/enabled_tentative.py b/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_scripting_enabled/enabled_tentative.py @@ -0,0 +1,154 @@ +import pytest + +from webdriver.bidi.modules.script import ContextTarget + +pytestmark = pytest.mark.asyncio + + +async def test_node_set_event_handler_value(bidi_session, inline): + context = await bidi_session.browsing_context.create(type_hint="tab") + url = inline(""" + <script>window.onload = ()=>{console.log('onload')}</script> + """) + await bidi_session.browsing_context.navigate(context=context["context"], + url=url, wait="complete") + + result = await bidi_session.script.evaluate( + expression="window.onload", + target=ContextTarget(context["context"]), + await_promise=False, + ) + assert result == {'type': 'function'} + + # Disable scripting. + await bidi_session.emulation.set_scripting_enabled( + enabled=False, + contexts=[context["context"]], + ) + + result = await bidi_session.script.evaluate( + expression="window.onload", + target=ContextTarget(context["context"]), + await_promise=False, + ) + assert result == {'type': 'function'} + + +async def test_node_added_event_handlers(bidi_session, inline): + context = await bidi_session.browsing_context.create(type_hint="tab") + url = inline(""" + <script> + addEventListener("message", (event) => { console.log('onmessage')}) + </script> + """) + await bidi_session.browsing_context.navigate(context=context["context"], + url=url, wait="complete") + + result = await bidi_session.script.evaluate( + expression="window.onmessage", + target=ContextTarget(context["context"]), + await_promise=False, + ) + assert result == {'type': 'null'} + + await bidi_session.script.evaluate( + expression="""addEventListener("message", (event) => { console.log('onmessage')})""", + target=ContextTarget(context["context"]), + await_promise=False, + ) + + result = await bidi_session.script.evaluate( + expression="window.onmessage", + target=ContextTarget(context["context"]), + await_promise=False, + ) + assert result == {'type': 'null'} + + # Disable scripting. + await bidi_session.emulation.set_scripting_enabled( + enabled=False, + contexts=[context["context"]], + ) + + result = await bidi_session.script.evaluate( + expression="window.onmessage", + target=ContextTarget(context["context"]), + await_promise=False, + ) + assert result == {'type': 'null'} + + +async def test_finalization_registry(bidi_session, inline): + """ + The test relies on `window.gc()` to force GC. In Chrome, it is exposed when + run with `--js-flags=--expose-gc` flag. + """ + context = await bidi_session.browsing_context.create(type_hint="tab") + + url = inline("""<script> + window.finalizationRegistryTriggered = false; + const registry = new FinalizationRegistry((heldValue) => { + window.finalizationRegistryTriggered = true; + }); + + function createAndRegister() { + const myObject = {}; + registry.register(myObject); + } + createAndRegister(); + </script> + """) + + await bidi_session.browsing_context.navigate(context=context["context"], + url=url, wait="complete") + + result = await bidi_session.script.evaluate( + expression="window.finalizationRegistryTriggered", + target=ContextTarget(context["context"]), + await_promise=False, + ) + assert result == {'type': 'boolean', 'value': False} + + # Disable scripting. + await bidi_session.emulation.set_scripting_enabled( + enabled=False, + contexts=[context["context"]], + ) + + result = await bidi_session.script.evaluate( + expression="window.finalizationRegistryTriggered", + target=ContextTarget(context["context"]), + await_promise=False, + ) + assert result == {'type': 'boolean', 'value': False} + + # Force GC to collect `myObject`. + await bidi_session.script.evaluate( + expression="window.gc()", + target=ContextTarget(context["context"]), + await_promise=False, + ) + + result = await bidi_session.script.evaluate( + expression="window.finalizationRegistryTriggered", + target=ContextTarget(context["context"]), + await_promise=False, + ) + assert result == {'type': 'boolean', 'value': True} + + +async def test_enqueue_promise_job(bidi_session, inline): + context = await bidi_session.browsing_context.create(type_hint="tab") + + # Disable scripting. + await bidi_session.emulation.set_scripting_enabled( + enabled=False, + contexts=[context["context"]], + ) + + result = await bidi_session.script.evaluate( + expression="Promise.resolve(true).then(x=>x)", + target=ContextTarget(context["context"]), + await_promise=True, + ) + assert result == {'type': 'boolean', 'value': True}