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