Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

// META: title=DecisionModel Create User Activation
// META: script=/resources/testdriver.js
// META: script=/resources/testdriver-vendor.js
// META: script=../resources/util.js
// META: timeout=long
'use strict';
const kSchema = {
questions: [{id: 'is_urgent', type: 'boolean', prompt: 'Is this urgent?'}],
};
// Mocked model download state may be shared between test cases in the same file
// (see e.g. `EchoAIManagerImpl`), so this test case is kept in a separate file.
promise_test(async t => {
// Create requires user activation when availability is 'downloadable'.
assert_implements_optional(
await DecisionModel.availability(kSchema) == 'downloadable');
assert_false(navigator.userActivation.isActive);
await promise_rejects_dom(
t, 'NotAllowedError', DecisionModel.create(kSchema));
await test_driver.bless();
const createPromise = DecisionModel.create(kSchema);
// User activation is not consumed by the create call.
assert_true(navigator.userActivation.isActive);
consumeTransientUserActivation();
(await createPromise).destroy();
// Create does not require transient user activation.
assert_equals(await DecisionModel.availability(kSchema), 'available');
assert_false(navigator.userActivation.isActive);
(await DecisionModel.create(kSchema)).destroy();
}, 'Create requires sticky user activation when availability is "downloadable"');