зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1845488 - [bidi] Add support for "userActivation" parameter to script evaluation. r=webdriver-reviewers,whimboo
Differential Revision: https://phabricator.services.mozilla.com/D192078
This commit is contained in:
Родитель
ba1fbc7a46
Коммит
5d77c81510
|
@ -150,6 +150,7 @@ export class WindowRealm extends Realm {
|
|||
#globalObjectReference;
|
||||
#isSandbox;
|
||||
#sandboxName;
|
||||
#userActivationEnabled;
|
||||
#window;
|
||||
|
||||
static type = RealmType.Window;
|
||||
|
@ -175,6 +176,7 @@ export class WindowRealm extends Realm {
|
|||
this.#globalObject
|
||||
);
|
||||
this.#realmAutomationFeaturesEnabled = false;
|
||||
this.#userActivationEnabled = false;
|
||||
}
|
||||
|
||||
destroy() {
|
||||
|
@ -207,6 +209,25 @@ export class WindowRealm extends Realm {
|
|||
return this.#window.origin;
|
||||
}
|
||||
|
||||
get userActivationEnabled() {
|
||||
return this.#userActivationEnabled;
|
||||
}
|
||||
|
||||
set userActivationEnabled(enable) {
|
||||
if (enable === this.#userActivationEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
const document = this.#window.document;
|
||||
if (enable) {
|
||||
document.notifyUserGestureActivation();
|
||||
} else {
|
||||
document.clearUserGestureActivation();
|
||||
}
|
||||
|
||||
this.#userActivationEnabled = enable;
|
||||
}
|
||||
|
||||
#createDebuggerObject(obj) {
|
||||
return this.#globalObjectReference.makeDebuggeeValue(obj);
|
||||
}
|
||||
|
|
|
@ -95,3 +95,22 @@ add_task(async function test_windowRealm_isSandbox() {
|
|||
const realm2 = new WindowRealm(contentWindow, { sandboxName: "test" });
|
||||
Assert.equal(realm2.isSandbox, true);
|
||||
});
|
||||
|
||||
add_task(async function test_windowRealm_userActivationEnabled() {
|
||||
const windowlessBrowser = Services.appShell.createWindowlessBrowser(false);
|
||||
const contentWindow = windowlessBrowser.docShell.domWindow;
|
||||
const userActivation = contentWindow.navigator.userActivation;
|
||||
|
||||
const realm = new WindowRealm(contentWindow);
|
||||
|
||||
Assert.equal(realm.userActivationEnabled, false);
|
||||
Assert.equal(userActivation.isActive && userActivation.hasBeenActive, false);
|
||||
|
||||
realm.userActivationEnabled = true;
|
||||
Assert.equal(realm.userActivationEnabled, true);
|
||||
Assert.equal(userActivation.isActive && userActivation.hasBeenActive, true);
|
||||
|
||||
realm.userActivationEnabled = false;
|
||||
Assert.equal(realm.userActivationEnabled, false);
|
||||
Assert.equal(userActivation.isActive && userActivation.hasBeenActive, false);
|
||||
});
|
||||
|
|
|
@ -1880,13 +1880,7 @@
|
|||
{
|
||||
"testIdPattern": "[evaluation.spec] Evaluation specs Page.evaluate should simulate a user gesture",
|
||||
"platforms": ["darwin", "linux", "win32"],
|
||||
"parameters": ["firefox", "webDriverBiDi"],
|
||||
"expectations": ["FAIL"]
|
||||
},
|
||||
{
|
||||
"testIdPattern": "[evaluation.spec] Evaluation specs Page.evaluate should simulate a user gesture",
|
||||
"platforms": ["darwin", "linux", "win32"],
|
||||
"parameters": ["chrome", "webDriverBiDi"],
|
||||
"parameters": ["webDriverBiDi"],
|
||||
"expectations": ["PASS"]
|
||||
},
|
||||
{
|
||||
|
|
|
@ -253,6 +253,9 @@ class ScriptModule extends Module {
|
|||
* a RealmTarget or for ContextTarget.
|
||||
* @param {RemoteValue=} options.this
|
||||
* The value of the this keyword for the function call.
|
||||
* @param {boolean=} options.userActivation
|
||||
* Determines whether execution should be treated as initiated by user.
|
||||
* Defaults to `false`.
|
||||
*
|
||||
* @returns {ScriptEvaluateResult}
|
||||
*
|
||||
|
@ -270,6 +273,7 @@ class ScriptModule extends Module {
|
|||
serializationOptions,
|
||||
target = {},
|
||||
this: thisParameter = null,
|
||||
userActivation = false,
|
||||
} = options;
|
||||
|
||||
lazy.assert.string(
|
||||
|
@ -282,6 +286,11 @@ class ScriptModule extends Module {
|
|||
`Expected "awaitPromise" to be a boolean, got ${awaitPromise}`
|
||||
);
|
||||
|
||||
lazy.assert.boolean(
|
||||
userActivation,
|
||||
`Expected "userActivation" to be a boolean, got ${userActivation}`
|
||||
);
|
||||
|
||||
this.#assertResultOwnership(resultOwnership);
|
||||
|
||||
if (commandArguments != null) {
|
||||
|
@ -316,6 +325,7 @@ class ScriptModule extends Module {
|
|||
sandbox,
|
||||
serializationOptions: serializationOptionsWithDefaults,
|
||||
thisParameter,
|
||||
userActivation,
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -384,6 +394,9 @@ class ScriptModule extends Module {
|
|||
* @param {object} options.target
|
||||
* The target for the evaluation, which either matches the definition for
|
||||
* a RealmTarget or for ContextTarget.
|
||||
* @param {boolean=} options.userActivation
|
||||
* Determines whether execution should be treated as initiated by user.
|
||||
* Defaults to `false`.
|
||||
*
|
||||
* @returns {ScriptEvaluateResult}
|
||||
*
|
||||
|
@ -399,6 +412,7 @@ class ScriptModule extends Module {
|
|||
resultOwnership = lazy.OwnershipModel.None,
|
||||
serializationOptions,
|
||||
target = {},
|
||||
userActivation = false,
|
||||
} = options;
|
||||
|
||||
lazy.assert.string(
|
||||
|
@ -411,6 +425,11 @@ class ScriptModule extends Module {
|
|||
`Expected "awaitPromise" to be a boolean, got ${awaitPromise}`
|
||||
);
|
||||
|
||||
lazy.assert.boolean(
|
||||
userActivation,
|
||||
`Expected "userActivation" to be a boolean, got ${userActivation}`
|
||||
);
|
||||
|
||||
this.#assertResultOwnership(resultOwnership);
|
||||
|
||||
const { contextId, realmId, sandbox } = this.#assertTarget(target);
|
||||
|
@ -431,6 +450,7 @@ class ScriptModule extends Module {
|
|||
resultOwnership,
|
||||
sandbox,
|
||||
serializationOptions: serializationOptionsWithDefaults,
|
||||
userActivation,
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
@ -324,6 +324,8 @@ class ScriptModule extends WindowGlobalBiDiModule {
|
|||
* in case of ECMAScript objects should be serialized.
|
||||
* @param {RemoteValue=} options.thisParameter
|
||||
* The value of the this keyword for the function call.
|
||||
* @param {boolean=} options.userActivation
|
||||
* Determines whether execution should be treated as initiated by user.
|
||||
*
|
||||
* @returns {object}
|
||||
* - evaluationStatus {EvaluationStatus} One of "normal", "throw".
|
||||
|
@ -342,6 +344,7 @@ class ScriptModule extends WindowGlobalBiDiModule {
|
|||
sandbox: sandboxName = null,
|
||||
serializationOptions,
|
||||
thisParameter = null,
|
||||
userActivation,
|
||||
} = options;
|
||||
|
||||
const realm = this.messageHandler.getRealm({ realmId, sandboxName });
|
||||
|
@ -362,6 +365,8 @@ class ScriptModule extends WindowGlobalBiDiModule {
|
|||
})
|
||||
: null;
|
||||
|
||||
realm.userActivationEnabled = userActivation;
|
||||
|
||||
const rv = realm.executeInGlobalWithBindings(
|
||||
functionDeclaration,
|
||||
deserializedArguments,
|
||||
|
@ -412,6 +417,8 @@ class ScriptModule extends WindowGlobalBiDiModule {
|
|||
* The ownership model to use for the results of this evaluation.
|
||||
* @param {string=} options.sandbox
|
||||
* The name of the sandbox.
|
||||
* @param {boolean=} options.userActivation
|
||||
* Determines whether execution should be treated as initiated by user.
|
||||
*
|
||||
* @returns {object}
|
||||
* - evaluationStatus {EvaluationStatus} One of "normal", "throw".
|
||||
|
@ -428,10 +435,13 @@ class ScriptModule extends WindowGlobalBiDiModule {
|
|||
resultOwnership,
|
||||
sandbox: sandboxName = null,
|
||||
serializationOptions,
|
||||
userActivation,
|
||||
} = options;
|
||||
|
||||
const realm = this.messageHandler.getRealm({ realmId, sandboxName });
|
||||
|
||||
realm.userActivationEnabled = userActivation;
|
||||
|
||||
const rv = realm.executeInGlobal(expression);
|
||||
|
||||
return this.#buildReturnValue(
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
[invalid.py]
|
||||
[test_params_user_activation_invalid_type[foo\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_params_user_activation_invalid_type[42\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_params_user_activation_invalid_type[user_activation2\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_params_user_activation_invalid_type[user_activation3\]]
|
||||
expected: FAIL
|
|
@ -1,6 +0,0 @@
|
|||
[user_activation.py]
|
||||
[test_userActivation[True\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_userActivation_copy[True\]]
|
||||
expected: FAIL
|
|
@ -1,12 +0,0 @@
|
|||
[invalid.py]
|
||||
[test_params_user_activation_invalid_type[foo\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_params_user_activation_invalid_type[42\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_params_user_activation_invalid_type[user_activation2\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_params_user_activation_invalid_type[user_activation3\]]
|
||||
expected: FAIL
|
|
@ -1,6 +0,0 @@
|
|||
[user_activation.py]
|
||||
[test_userActivation[True\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_userActivation_copy[True\]]
|
||||
expected: FAIL
|
Загрузка…
Ссылка в новой задаче