summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/credential-management/support/fedcm-mock.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /testing/web-platform/tests/credential-management/support/fedcm-mock.js
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/credential-management/support/fedcm-mock.js')
-rw-r--r--testing/web-platform/tests/credential-management/support/fedcm-mock.js130
1 files changed, 130 insertions, 0 deletions
diff --git a/testing/web-platform/tests/credential-management/support/fedcm-mock.js b/testing/web-platform/tests/credential-management/support/fedcm-mock.js
new file mode 100644
index 0000000000..16a72b1d2c
--- /dev/null
+++ b/testing/web-platform/tests/credential-management/support/fedcm-mock.js
@@ -0,0 +1,130 @@
+import { RequestTokenStatus, LogoutRpsStatus, FederatedAuthRequest, FederatedAuthRequestReceiver } from '/gen/third_party/blink/public/mojom/webid/federated_auth_request.mojom.m.js';
+
+function toMojoTokenStatus(status) {
+ return RequestTokenStatus["k" + status];
+}
+
+// A mock service for responding to federated auth requests.
+export class MockFederatedAuthRequest {
+ constructor() {
+ this.receiver_ = new FederatedAuthRequestReceiver(this);
+ this.interceptor_ = new MojoInterfaceInterceptor(FederatedAuthRequest.$interfaceName);
+ this.interceptor_.oninterfacerequest = e => {
+ this.receiver_.$.bindHandle(e.handle);
+ }
+ this.interceptor_.start();
+ this.token_ = null;
+ this.selected_identity_provider_config_url_ = null;
+ this.status_ = RequestTokenStatus.kError;
+ this.logoutRpsStatus_ = LogoutRpsStatus.kError;
+ this.returnPending_ = false;
+ this.pendingPromiseResolve_ = null;
+ }
+
+ // Causes the subsequent `navigator.credentials.get()` to resolve with the token.
+ returnToken(selected_identity_provider_config_url, token) {
+ this.status_ = RequestTokenStatus.kSuccess;
+ this.selected_identity_provider_config_url_ = selected_identity_provider_config_url;
+ this.token_ = token;
+ this.returnPending_ = false;
+ }
+
+ // Causes the subsequent `navigator.credentials.get()` to reject with the error.
+ returnError(error) {
+ if (error == "Success")
+ throw new Error("Success is not a valid error");
+ this.status_ = toMojoTokenStatus(error);
+ this.selected_identity_provider_config_url_ = null;
+ this.token_ = null;
+ this.returnPending_ = false;
+ }
+
+ // Causes the subsequent `navigator.credentials.get()` to return a pending promise
+ // that can be cancelled using `cancelTokenRequest()`.
+ returnPendingPromise() {
+ this.returnPending_ = true;
+ }
+
+ logoutRpsReturn(status) {
+ let validated = LogoutRpsStatus[status];
+ if (validated === undefined)
+ throw new Error("Invalid status: " + status);
+ this.logoutRpsStatus_ = validated;
+ }
+
+ // Implements
+ // RequestToken(array<IdentityProviderGetParameters> idp_get_params) =>
+ // (RequestTokenStatus status,
+ // url.mojom.Url? selected_identity_provider_config_url,
+ // string? token);
+ async requestToken(idp_get_params) {
+ if (this.returnPending_) {
+ this.pendingPromise_ = new Promise((resolve, reject) => {
+ this.pendingPromiseResolve_ = resolve;
+ });
+ return this.pendingPromise_;
+ }
+ return Promise.resolve({
+ status: this.status_,
+ selected_identity_provider_config_url: this.selected_identity_provider_config_url_,
+ token: this.token_
+ });
+ }
+
+ async cancelTokenRequest() {
+ this.pendingPromiseResolve_({
+ status: toMojoTokenStatus("ErrorCanceled"),
+ selected_identity_provider_config_url: null,
+ token: null
+ });
+ this.pendingPromiseResolve_ = null;
+ }
+
+ // Implements
+ // RequestUserInfo(IdentityProviderGetParameters idp_get_param) =>
+ // (RequestUserInfoStatus status, array<IdentityUserInfo>? user_info);
+ async requestUserInfo(idp_get_param) {
+ return Promise.resolve({
+ status: "",
+ user_info: ""
+ });
+ }
+
+ async logoutRps(logout_endpoints) {
+ return Promise.resolve({
+ status: this.logoutRpsStatus_
+ });
+ }
+
+ async setIdpSigninStatus(origin, status) {
+ }
+
+ async registerIdP(configURL) {
+ }
+
+ async unregisterIdP(configURL) {
+ }
+
+ async resolveTokenRequest(token) {
+ }
+
+ async closeModalDialogView() {
+ }
+
+ async preventSilentAccess() {
+ }
+
+ async reset() {
+ this.token_ = null;
+ this.selected_identity_provider_config_url_ = null;
+ this.status_ = RequestTokenStatus.kError;
+ this.logoutRpsStatus_ = LogoutRpsStatus.kError;
+ this.receiver_.$.close();
+ this.interceptor_.stop();
+
+ // Clean up and reset mock stubs asynchronously, so that the blink side
+ // closes its proxies and notifies JS sensor objects before new test is
+ // started.
+ await new Promise(resolve => { step_timeout(resolve, 0); });
+ }
+}