tor-browser

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

commit 6bcc22ccad391f30f7efacea20274a909993329e
parent 673950f963cb96aabcc3df5e2bf25825f351633e
Author: Isaac Ahouma <iahouma@google.com>
Date:   Thu, 27 Nov 2025 15:15:44 +0000

Bug 2002469 [wpt PR 56281] - [Built-In APIs] Enable kAIRelaxUserActivationReqs by default., a=testonly

Automatic update from web-platform-tests
[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}

--

wpt-commits: 49d6b4e59e3c6f0cfa94d47479baf2d82d7ac386
wpt-pr: 56281

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"');