Skip to content

Commit

Permalink
CredentialRequestOptions gains a "digital" member
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=270196
rdar://123744112

Reviewed by Anne van Kesteren.

Adds "digital" member to CredentialRequestOptions dictionary:
https://wicg.github.io/digital-identities/#extensions-to-credentialrequestoptions-dictionary

Given the spec changed names again, changed pref name to DigitalIdentityEnabled and updated a few files to reflect the name change.

* LayoutTests/http/wpt/credential-management/setDigitalCredentialsEnable.https-expected.txt: Copied from LayoutTests/http/wpt/credential-management/setDigitalIdentityEnable.https-expected.txt.
* LayoutTests/http/wpt/credential-management/setDigitalCredentialsEnable.https.html: Renamed from LayoutTests/http/wpt/credential-management/setDigitalIdentityEnable.https.html.
* LayoutTests/http/wpt/credential-management/setDigitalCreditialsEnable.https-expected.txt: Renamed from LayoutTests/http/wpt/credential-management/setDigitalIdentityEnable.https-expected.txt.
* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
* Source/WebCore/Headers.cmake:
* Source/WebCore/Modules/credentialmanagement/CredentialRequestOptions.h:
* Source/WebCore/Modules/credentialmanagement/CredentialRequestOptions.idl:
* Source/WebCore/Modules/credentialmanagement/DigitalCredential.idl:
* Source/WebCore/Modules/identity/Navigator+Identity.idl:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:

Canonical link: https://commits.webkit.org/275616@main
  • Loading branch information
marcoscaceres committed Mar 4, 2024
1 parent e39148d commit 3850dd4
Show file tree
Hide file tree
Showing 10 changed files with 55 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html>
<head>
<title>
Check that parts of the Digital Identity API are not exposed by
Check that parts of the Digital Credentials API are not exposed by
setting
</title>
</head>
Expand All @@ -20,9 +20,28 @@
);
}

window.internals.settings.setDigitalIdentityEnabled(true);
// We check that the "digital" is not web exposed by checking if the
// navigator.credentials.get() method rejects with an AbortError.
const abortController = new AbortController();
abortController.abort();
const digitalTypeCheckPromise = navigator.credentials.get({
digital: "", // expects a dictionary
signal: abortController.signal,
});

window.internals.settings.setDigitalCredentialsEnabled(true);

async function checkIFrame() {
try {
await digitalTypeCheckPromise;
} catch (err) {
if (err.name !== "AbortError") {
console.log(
`FAIL: navigator.credentials.get() must reject with an AbortError. Got ${err.name} instead.`
);
}
}

const iframeWin = document.querySelector("iframe").contentWindow;

if (iframeWin.navigator.credentials.requestIdentity) {
Expand All @@ -37,6 +56,17 @@
"FAIL: navigator.identity must be exposed. Was enabled by pref."
);
}

try {
await identity.get({ digital: "" });
} catch (err) {
if (err.name !== "TypeError") {
console.log(
`FAIL: navigator.identity.get() must reject with an TypeError. Got ${err.name} instead.`
);
}
}

const isInstanceOfCredentialContainer =
identity instanceof iframeWin.CredentialsContainer;
if (!isInstanceOfCredentialContainer) {
Expand All @@ -53,11 +83,14 @@
"FAIL: DigitalCredential's prototype interface must be an instance of Credential."
);
}

console.log("Test finished");
testRunner.notifyDone();
}
</script>
<body>
<iframe src="about:blank" onload="checkIFrame()"></iframe>
<iframe
src="about:blank"
onload="checkIFrame().catch(console.error).finally(() => testRunner.notifyDone())"
></iframe>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CONSOLE MESSAGE: Test finished

6 changes: 3 additions & 3 deletions Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2394,12 +2394,12 @@ DiagnosticLoggingEnabled:
WebCore:
default: false

DigitalIdentityEnabled:
DigitalCredentialsEnabled:
type: bool
status: unstable
category: dom
humanReadableName: "Digital Identity API"
humanReadableDescription: "Enable the experimental Digital Identity API"
humanReadableName: "Digital Credentials API"
humanReadableDescription: "Enable the experimental Digital Credentials API"
defaultValue:
WebKitLegacy:
default: false
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/Headers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,7 @@ set(WebCore_PRIVATE_FRAMEWORK_HEADERS
Modules/cookie-store/CookieStoreGetOptions.h

Modules/credentialmanagement/CredentialRequestOptions.h
Modules/credentialmanagement/DigitalCredentialRequestOptions.h

Modules/encryptedmedia/CDMClient.h
Modules/encryptedmedia/MediaKeySystemClient.h
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

#if ENABLE(WEB_AUTHN)

#include "DigitalCredentialRequestOptions.h"
#include "MediationRequirement.h"
#include "PublicKeyCredentialRequestOptions.h"
#include <wtf/RefCounted.h>
Expand All @@ -41,6 +42,7 @@ struct CredentialRequestOptions {
MediationRequirement mediation;
RefPtr<AbortSignal> signal;
std::optional<PublicKeyCredentialRequestOptions> publicKey;
DigitalCredentialRequestOptions digital;
};

} // namespace WebCore
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,6 @@
CredentialMediationRequirement mediation = "optional";
AbortSignal signal;
PublicKeyCredentialRequestOptions publicKey;
// https://wicg.github.io/digital-identities/#extensions-to-credentialrequestoptions-dictionary
[EnabledBySetting=DigitalCredentialsEnabled] DigitalCredentialRequestOptions digital;
};
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
[
Exposed=Window,
SecureContext,
EnabledBySetting=DigitalIdentityEnabled,
EnabledBySetting=DigitalCredentialsEnabled,
Conditional=WEB_AUTHN,
] interface DigitalCredential : BasicCredential {
[SameObject] readonly attribute ArrayBuffer data;
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/Modules/identity/Navigator+Identity.idl
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
//https://wicg.github.io/digital-identities/#extensions-to-the-navigator-interface
[
Conditional=WEB_AUTHN,
EnabledBySetting=DigitalIdentityEnabled,
EnabledBySetting=DigitalCredentialsEnabled,
ImplementedBy=NavigatorIdentity
] partial interface Navigator {
[SecureContext, SameObject] readonly attribute CredentialsContainer identity;
Expand Down
6 changes: 6 additions & 0 deletions Source/WebCore/WebCore.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,10 @@
0C3F1F5B10C8871200D72CE1 /* WebGLUniformLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C3F1F5810C8871200D72CE1 /* WebGLUniformLocation.h */; };
0C45342810CDBBFA00869157 /* JSWebGLUniformLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C45342610CDBBFA00869157 /* JSWebGLUniformLocation.h */; };
0D431A7D2B5A397C00864655 /* DigitalCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D431A7C2B5A397C00864655 /* DigitalCredential.h */; };
0D431F002B9053DC001E222F /* DigitalCredentialRequestOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D494DEC2B5DF3DC00B61C51 /* DigitalCredentialRequestOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
0D431F012B905BC4001E222F /* IdentityRequestProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D494DED2B5DF55000B61C51 /* IdentityRequestProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
0D44C33E2ABA1B9F0017FB5D /* ThermalMitigationNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D8EF8122A9D511F000118F8 /* ThermalMitigationNotifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
0D77A8522B9063A700BBD327 /* IdentityCredentialProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D431A842B5A42AB00864655 /* IdentityCredentialProtocol.h */; settings = {ATTRIBUTES = (Private, ); }; };
0DFB86682B16CC98009A0A0D /* JSCredentialMediationRequirement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DFB86642B16CC1E009A0A0D /* JSCredentialMediationRequirement.h */; };
0DFB86792B1A42CB009A0A0D /* JSPublicKeyCredentialClientCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DFB86742B1A4237009A0A0D /* JSPublicKeyCredentialClientCapabilities.h */; };
0E7058F41BC5CEDA0045A507 /* SearchPopupMenuCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E7058F31BC5CCD70045A507 /* SearchPopupMenuCocoa.h */; settings = {ATTRIBUTES = (Private, ); }; };
Expand Down Expand Up @@ -38818,6 +38821,7 @@
937FF3D51A1012D6008EBA31 /* DictionaryLookup.h in Headers */,
2D5646B01B8F8493003C4994 /* DictionaryPopupInfo.h in Headers */,
0D431A7D2B5A397C00864655 /* DigitalCredential.h in Headers */,
0D431F002B9053DC001E222F /* DigitalCredentialRequestOptions.h in Headers */,
FDAF19991513D131008DB0C3 /* DirectConvolver.h in Headers */,
835D54C51F4DE53800E60671 /* DirectoryFileListCreator.h in Headers */,
F47A09D120A93A9700240FAE /* DisabledAdaptations.h in Headers */,
Expand Down Expand Up @@ -39551,6 +39555,8 @@
5185FCB01BB4C4E80012898F /* IDBVersionChangeEvent.h in Headers */,
E4A814E01C7338EB00BF85AC /* IdChangeInvalidation.h in Headers */,
1A71D57C0F33819000F9CE4E /* IdentifierRep.h in Headers */,
0D77A8522B9063A700BBD327 /* IdentityCredentialProtocol.h in Headers */,
0D431F012B905BC4001E222F /* IdentityRequestProvider.h in Headers */,
49E911C50EF86D47009D0CAF /* IdentityTransformOperation.h in Headers */,
7CE9A12B1EA2F1DB00651AD1 /* IDLAttributes.json in Headers */,
9B864F06234C0893006D10EB /* IdleCallbackController.h in Headers */,
Expand Down

0 comments on commit 3850dd4

Please sign in to comment.