tor-browser

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

commit b752ef78b42313bc670d0c7d7aec1671822dcd4b
parent f9e531e055de9ec311e36c38eb8d1ccca3972dc5
Author: Isaac Ahouma <iahouma@google.com>
Date:   Wed,  3 Dec 2025 14:49:48 +0000

Bug 2003743 [wpt PR 56430] - Reland "[Built-In APIs] Enable kAIRelaxUserActivationReqs by default.", a=testonly

Automatic update from web-platform-tests
Reland "[Built-In APIs] Enable kAIRelaxUserActivationReqs by default."

This is a reland of commit 145c695c20b8f2d96f8238633cf45624ca0439a0

Original change's description:
> [Built-In APIs] Enable kAIRelaxUserActivationReqs by default.
>
> This change enables the AIRelaxUserActivationReqs feature flag by
> default, relaxing user activation requirements for Built-In AI APIs. The
> virtual test suite and associated tests designed to verify behavior when
> this feature was disabled have been removed. Existing user activation
> tests are updated to reflect that user activation is now present during
> the test execution.
>
> Bug: 454435239
> Change-Id: Ic4b56d6e09bc8ca91f29619faaad409ba9b9c9ca
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7186624
> Reviewed-by: Reilly Grant <reillyg@chromium.org>
> Reviewed-by: Nathan Memmott <memmott@chromium.org>
> Reviewed-by: Kent Tamura <tkent@chromium.org>
> Commit-Queue: Isaac Ahouma <iahouma@google.com>
> Cr-Commit-Position: refs/heads/main@{#1550111}

Bug: 454435239
Change-Id: Ib5d7e20377af9d6c7f460e97b4fb6264ffafa529
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7212760
Reviewed-by: Reilly Grant <reillyg@chromium.org>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Commit-Queue: Nathan Memmott <memmott@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1552994}

--

wpt-commits: 5425a3bf8bee66750a2b3b352788e7db0ca8817f
wpt-pr: 56430

Diffstat:
Mtesting/web-platform/tests/ai/language-model/language-model-create-sticky-user-activation.tentative.https.window.js | 4+---
Dtesting/web-platform/tests/ai/language-model/language-model-create-transient-user-activation.tentative.https.window.js | 31-------------------------------
Mtesting/web-platform/tests/ai/language-model/language-model-create-user-activation.tentative.https.window.js | 7+++++--
Mtesting/web-platform/tests/ai/language_detection/detector.https.window.js | 7+++++--
Mtesting/web-platform/tests/ai/resources/util.js | 6++++++
Mtesting/web-platform/tests/ai/rewriter/rewriter-create-user-activation.tentative.https.window.js | 8++++++--
Mtesting/web-platform/tests/ai/summarizer/summarizer-create-user-activation.tentative.https.window.js | 8++++++--
Mtesting/web-platform/tests/ai/writer/writer-create-user-activation.tentative.https.window.js | 8++++++--
8 files changed, 35 insertions(+), 44 deletions(-)

diff --git a/testing/web-platform/tests/ai/language-model/language-model-create-sticky-user-activation.tentative.https.window.js b/testing/web-platform/tests/ai/language-model/language-model-create-sticky-user-activation.tentative.https.window.js @@ -21,9 +21,7 @@ promise_test(async t => { await test_driver.bless('Enable LanguageModel create()'); // Consume transient activation. - const win = window.open('about:blank', '_blank'); - if (win) - win.close(); + consumeTransientUserActivation(); assert_true(navigator.userActivation.hasBeenActive); assert_false(navigator.userActivation.isActive); diff --git a/testing/web-platform/tests/ai/language-model/language-model-create-transient-user-activation.tentative.https.window.js b/testing/web-platform/tests/ai/language-model/language-model-create-transient-user-activation.tentative.https.window.js @@ -1,31 +0,0 @@ -// META: title=LanguageModel.create() User Activation Tests -// META: script=/resources/testdriver.js -// META: script=/resources/testdriver-vendor.js -// META: script=../resources/util.js -// META: timeout=long - -'use strict'; - -promise_test(async t => { - assert_implements_optional( - await LanguageModel.availability() == 'downloadable'); - assert_false(navigator.userActivation.isActive); - return promise_rejects_dom( - t, 'NotAllowedError', LanguageModel.create(), - 'LanguageModel.create() should fail without any user activation.'); -}, 'Create fails without user activation'); - -promise_test(async t => { - assert_implements_optional( - await LanguageModel.availability() == 'downloadable'); - - await test_driver.bless('Enable LanguageModel create()'); - - // Consume transient activation. - const win = window.open('about:blank', '_blank'); - win.close(); - assert_true(navigator.userActivation.hasBeenActive); - assert_false(navigator.userActivation.isActive); - - return promise_rejects_dom(t, 'NotAllowedError', LanguageModel.create()); -}, 'Create fails with sticky activation when availability is "downloadable"'); diff --git a/testing/web-platform/tests/ai/language-model/language-model-create-user-activation.tentative.https.window.js b/testing/web-platform/tests/ai/language-model/language-model-create-user-activation.tentative.https.window.js @@ -15,9 +15,12 @@ promise_test(async t => { assert_false(navigator.userActivation.isActive); await promise_rejects_dom(t, 'NotAllowedError', LanguageModel.create()); await test_driver.bless('LanguageModel.create', LanguageModel.create); + // User activation is not consumed by the create call. + assert_true(navigator.userActivation.isActive); + consumeTransientUserActivation(); - // Create does not require user activation when availability is 'available'. + // Create does not require transient user activation. assert_equals(await LanguageModel.availability(), 'available'); assert_false(navigator.userActivation.isActive); await LanguageModel.create(); -}, 'Create requires user activation when availability is "downloadable"'); +}, 'Create requires sticky user activation when availability is "downloadable"'); diff --git a/testing/web-platform/tests/ai/language_detection/detector.https.window.js b/testing/web-platform/tests/ai/language_detection/detector.https.window.js @@ -15,12 +15,15 @@ promise_test(async t => { assert_false(navigator.userActivation.isActive); await promise_rejects_dom(t, 'NotAllowedError', LanguageDetector.create()); await test_driver.bless('LanguageDetector.create', LanguageDetector.create); + // User activation is not consumed by the create call. + assert_true(navigator.userActivation.isActive); + consumeTransientUserActivation(); - // Create does not require user activation when availability is 'available'. + // Create does not require transient user activation. assert_equals(await LanguageDetector.availability(), 'available'); assert_false(navigator.userActivation.isActive); await LanguageDetector.create(); -}, 'Create requires user activation when availability is "downloadable"'); +}, 'Create requires sticky user activation when availability is "downloadable"'); promise_test(async t => { const detector = await createLanguageDetector(); diff --git a/testing/web-platform/tests/ai/resources/util.js b/testing/web-platform/tests/ai/resources/util.js @@ -287,3 +287,9 @@ async function testCreateAbort(t, createMethod, options, instanceMethods) { await promise_rejects_exactly(t, error, promise); } } + +function consumeTransientUserActivation() { + const win = window.open('about:blank', '_blank'); + if (win) + win.close(); +} diff --git a/testing/web-platform/tests/ai/rewriter/rewriter-create-user-activation.tentative.https.window.js b/testing/web-platform/tests/ai/rewriter/rewriter-create-user-activation.tentative.https.window.js @@ -1,5 +1,6 @@ // META: title=Rewriter Create User Activation // META: script=/resources/testdriver.js +// META: script=../resources/util.js // META: timeout=long 'use strict'; @@ -13,9 +14,12 @@ promise_test(async t => { assert_false(navigator.userActivation.isActive); await promise_rejects_dom(t, 'NotAllowedError', Rewriter.create()); await test_driver.bless('Rewriter.create', Rewriter.create); + // User activation is not consumed by the first create call. + assert_true(navigator.userActivation.isActive); + consumeTransientUserActivation(); - // Create does not require user activation when availability is 'available'. + // Create does not require transient user activation. assert_equals(await Rewriter.availability(), 'available'); assert_false(navigator.userActivation.isActive); await Rewriter.create(); -}, 'Create requires user activation when availability is "downloadable"'); +}, 'Create requires sticky user activation when availability is "downloadable"'); diff --git a/testing/web-platform/tests/ai/summarizer/summarizer-create-user-activation.tentative.https.window.js b/testing/web-platform/tests/ai/summarizer/summarizer-create-user-activation.tentative.https.window.js @@ -1,5 +1,6 @@ // META: title=Summarizer Create User Activation // META: script=/resources/testdriver.js +// META: script=../resources/util.js // META: timeout=long 'use strict'; @@ -13,9 +14,12 @@ promise_test(async t => { assert_false(navigator.userActivation.isActive); await promise_rejects_dom(t, 'NotAllowedError', Summarizer.create()); await test_driver.bless('Summarizer.create', Summarizer.create); + // User activation is not consumed by the create call. + assert_true(navigator.userActivation.isActive); + consumeTransientUserActivation(); - // Create does not require user activation when availability is 'available'. + // Create does not require transient user activation. assert_equals(await Summarizer.availability(), 'available'); assert_false(navigator.userActivation.isActive); await Summarizer.create(); -}, 'Create requires user activation when availability is "downloadable"'); +}, 'Create requires sticky user activation when availability is "downloadable"'); diff --git a/testing/web-platform/tests/ai/writer/writer-create-user-activation.tentative.https.window.js b/testing/web-platform/tests/ai/writer/writer-create-user-activation.tentative.https.window.js @@ -1,5 +1,6 @@ // META: title=Writer Create User Activation // META: script=/resources/testdriver.js +// META: script=../resources/util.js // META: timeout=long 'use strict'; @@ -13,9 +14,12 @@ promise_test(async t => { assert_false(navigator.userActivation.isActive); await promise_rejects_dom(t, 'NotAllowedError', Writer.create()); await test_driver.bless('Writer.create', Writer.create); + // User activation is not consumed by the create call. + assert_true(navigator.userActivation.isActive); + consumeTransientUserActivation(); - // Create does not require user activation when availability is 'available'. + // Create does not require transient user activation. assert_equals(await Writer.availability(), 'available'); assert_false(navigator.userActivation.isActive); await Writer.create(); -}, 'Create requires user activation when availability is "downloadable"'); +}, 'Create requires sticky user activation when availability is "downloadable"');