Skip to content

Commit

Permalink
Let specs define their own default mediation requirement
Browse files Browse the repository at this point in the history
  • Loading branch information
marcoscaceres committed Aug 23, 2024
1 parent 7432408 commit bcd0e73
Showing 1 changed file with 25 additions and 1 deletion.
26 changes: 25 additions & 1 deletion index.bs
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,10 @@ spec:css-syntax-3;
internal slot named <dfn for="Credential" attribute>\[[origin]]</dfn>, which stores the [=origin=]
for which the {{Credential}} may be [=effective=].

Credential interfaces can define a <dfn for="Credential" export>default get mediation</dfn> and
<dfn for="Credential" export>default create mediation</dfn> as an {{CredentialMediationRequirement}} enum value.
Together, they establish the default [[#mediation-requirements]] for when none are supplied by the developer.

### `Credential` Internal Methods ### {#credential-internal-methods}

The {{Credential}} [=interface object=] features several [=internal methods=] facilitating
Expand Down Expand Up @@ -700,7 +704,7 @@ spec:css-syntax-3;

<pre class="idl">
dictionary CredentialRequestOptions {
CredentialMediationRequirement mediation = "optional";
CredentialMediationRequirement mediation;
AbortSignal signal;
};
</pre>
Expand Down Expand Up @@ -988,6 +992,11 @@ spec:css-syntax-3;
1. If |interfaces| is [=set/empty=], then return[=a promise rejected with=]
a "{{NotSupportedError}}" {{DOMException}}.

1. If |options|.{{CredentialRequestOptions/mediation}} was not passed,
set |options|.{{CredentialRequestOptions/mediation}} to one of the following values:
1. If the |interfaces| together define a [=Credential/default get mediation=], that enum value.
1. Otherwise, {{CredentialMediationRequirement/conditional}}.

1. [=set/For each=] |interface| of |interfaces|:

1. If |options|.{{CredentialRequestOptions/mediation}} is
Expand Down Expand Up @@ -1194,6 +1203,11 @@ spec:css-syntax-3;

1. Let |interfaces| be the [=set=] of |options|' <a>relevant credential interface objects</a>.

1. If |options|.{{CredentialRequestOptions/mediation}} was not passed,
set |options|.{{CredentialRequestOptions/mediation}} to one of the following values:
1. If the |interfaces| together define a [=Credential/default create mediation=], that enum value.
1. Otherwise, {{CredentialMediationRequirement/conditional}}.

1. Return [=a promise rejected with=] `NotSupportedError` if any of the following statements
are true:

Expand Down Expand Up @@ -2477,6 +2491,16 @@ spec:css-syntax-3;
mediation=], define `ExampleCredential/isConditionalMediationAvailable()`
to return a new {{Promise}} that [=resolves=] with `true`.

1. Optionally, define a [=Credential/default get mediation=] and, optionally, a [=Credential/default create mediation=].

<div class="example">
<blockquote>
The <strong>default get mediation</strong> for the `ExampleCredential` is "{{CredentialMediationRequirement/required}}".
</blockquote>
</div>

Additionally, a specification can add its own set of restriction around what mediations are allowed to be passed into the API.

1. Following the procedure in [[#sctn-registry-requirements]], add an entry to the
[[#sctn-cred-type-registry|Credential Type Registry]] for the new
"example" [=credential type registry/credential type=] and its corresponding:
Expand Down

0 comments on commit bcd0e73

Please sign in to comment.