[webkit-changes] [WebKit/WebKit] f4419f: Digital Credentials: implement Digital Credentials...

Marcos Cáceres noreply at github.com
Sun Feb 9 05:52:09 PST 2025


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f4419f04902e3be11bcc20229648c197968702f4
      https://github.com/WebKit/WebKit/commit/f4419f04902e3be11bcc20229648c197968702f4
  Author: Marcos Caceres <marcosc at apple.com>
  Date:   2025-02-09 (Sun, 09 Feb 2025)

  Changed paths:
    M LayoutTests/imported/w3c/web-platform-tests/digital-credentials/allow-attribute.https-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/digital-credentials/disabled-by-permissions-policy.https.sub-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub-expected.txt
    M Source/WTF/wtf/PlatformHave.h
    M Source/WebCore/Headers.cmake
    M Source/WebCore/Modules/credentialmanagement/CredentialsContainer.cpp
    M Source/WebCore/Modules/credentialmanagement/CredentialsContainer.h
    M Source/WebCore/Modules/identity/CredentialRequestCoordinator.cpp
    M Source/WebCore/Modules/identity/CredentialRequestCoordinator.h
    M Source/WebCore/Modules/identity/CredentialRequestCoordinatorClient.h
    M Source/WebCore/Modules/identity/DigitalCredential.cpp
    M Source/WebCore/Modules/identity/DigitalCredential.h
    M Source/WebCore/Modules/identity/DigitalCredentialRequest.h
    M Source/WebCore/Modules/identity/DigitalCredentialRequestOptions.h
    A Source/WebCore/Modules/identity/DigitalCredentialsRequestData.h
    A Source/WebCore/Modules/identity/DigitalCredentialsResponseData.h
    R Source/WebCore/Modules/identity/IdentityCredentialsContainer.cpp
    R Source/WebCore/Modules/identity/IdentityCredentialsContainer.h
    A Source/WebCore/Modules/identity/dummy/DummyCredentialRequestCoordinatorClient.cpp
    A Source/WebCore/Modules/identity/dummy/DummyCredentialRequestCoordinatorClient.h
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/bindings/js/WebCoreBuiltinNames.h
    M Source/WebCore/loader/EmptyClients.cpp
    M Source/WebCore/page/Chrome.cpp
    M Source/WebCore/page/Chrome.h
    M Source/WebCore/page/ChromeClient.h
    M Source/WebCore/page/Page.cpp
    M Source/WebCore/page/Page.h
    M Source/WebCore/page/PageConfiguration.cpp
    M Source/WebCore/page/PageConfiguration.h
    M Source/WebCore/platform/Logging.h
    M Source/WebKit/CMakeLists.txt
    M Source/WebKit/DerivedSources-input.xcfilelist
    M Source/WebKit/DerivedSources-output.xcfilelist
    M Source/WebKit/DerivedSources.make
    M Source/WebKit/Platform/Logging.h
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
    M Source/WebKit/Sources.txt
    M Source/WebKit/SourcesCocoa.txt
    M Source/WebKit/UIProcess/API/APIWebPushDaemonConnection.cpp
    M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h
    R Source/WebKit/UIProcess/DigitalCredentials/DigitalCredentialsCoordinatorProxy.cpp
    R Source/WebKit/UIProcess/DigitalCredentials/DigitalCredentialsCoordinatorProxy.h
    R Source/WebKit/UIProcess/DigitalCredentials/DigitalCredentialsCoordinatorProxy.messages.in
    A Source/WebKit/UIProcess/DigitalCredentials/WKDigitalCredentialsPicker.h
    A Source/WebKit/UIProcess/DigitalCredentials/WKDigitalCredentialsPicker.mm
    M Source/WebKit/UIProcess/PageClient.h
    M Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.messages.in
    M Source/WebKit/UIProcess/ios/PageClientImplIOS.h
    M Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
    M Source/WebKit/UIProcess/ios/UIKitUtilities.mm
    M Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
    M Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
    M Source/WebKit/UIProcess/mac/PageClientImplMac.h
    M Source/WebKit/UIProcess/mac/PageClientImplMac.mm
    M Source/WebKit/UIProcess/mac/WebViewImpl.h
    M Source/WebKit/UIProcess/mac/WebViewImpl.mm
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/DigitalCredentials/DigitalCredentialsCoordinator.cpp
    M Source/WebKit/WebProcess/DigitalCredentials/DigitalCredentialsCoordinator.h
    M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
    M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h
    M Source/WebKitLegacy/mac/WebView/WebPreferences.mm
    M Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h
    M Source/WebKitLegacy/mac/WebView/WebView.mm

  Log Message:
  -----------
  Digital Credentials: implement Digital Credentials Coordinator and IPC
https://bugs.webkit.org/show_bug.cgi?id=277850
rdar://134026261

Reviewed by Jean-Yves Avenard.

The patch introduces a Digital Credentials Coordinator that manages digital credential requests and integrates a new picker UI component (`WKDigitalCredentialsPicker`) to allow user interaction.
This is part of the implementation for the Digital Credentials API, which provides a way for web applications to request and use digital credentials from the user's device. Spec:
https://wicg.github.io/digital-credentials/

At at high level, this patch:

- Integrates digital credentials support into WebKit's existing credentials management infrastructure.
- Ensures digital credentials requests are handled asynchronously across process boundaries with robust error handling.
- Provides a friendly interface for selecting and returning digital credentials on supported platforms.

Key Changes:

- Digital Credentials Coordinator
  - Receives digital credential requests and validates preconditions (e.g. document focus, visibility, and permissions), as per spec.
  - Delegates the presentation of a picker UI to the platform-specific UI layer.
  - Handles completion callbacks by resolving or rejecting promises based on user input or errors.

- New UI Component - WKDigitalCredentialsPicker
  - Implements the picker UI in Objective-C++.
  - Provides methods to present and dismiss the picker.
  - Returns the digital credentials response data (or an error) via an asynchronous completion handler.

- IPC and Asynchronous Messaging
  - Adds new IPC messages (`ShowDigitalCredentialsPicker` and `DismissDigitalCredentialsPicker`) to route requests between the WebProcess and UIProcess.
  - Updates related classes (e.g. WebPage, PageClient, and their platform-specific implementations) to integrate digital credentials actions.

- Preferences and Feature Flags
  - Introduces a new preference key (`WebKitDigitalCredentialsEnabledPreferenceKey`) to enable or disable the Digital Credentials API.

- Platform Integration and Refactoring
  - Removes legacy digital credentials proxy code, consolidating functionality into the new coordinator.
  - Updates iOS and macOS clients (e.g. `PageClientImplIOS`, `PageClientImplMac`, and `WKContentViewInteraction`) so they can present and dismiss the digital credentials picker.
  - Provides a dummy client implementation for unsupported platforms to ensure graceful degradation.

* LayoutTests/imported/w3c/web-platform-tests/digital-credentials/allow-attribute.https-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/digital-credentials/disabled-by-permissions-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/digital-credentials/enabled-on-self-origin-by-permissions-policy.https.sub-expected.txt:
* Source/WTF/wtf/PlatformHave.h:
* Source/WebCore/Headers.cmake:
* Source/WebCore/Modules/credentialmanagement/CredentialsContainer.cpp:
(WebCore::CredentialsContainer::get):
* Source/WebCore/Modules/credentialmanagement/CredentialsContainer.h:
* Source/WebCore/Modules/identity/CredentialRequestCoordinator.cpp:
(WebCore::CredentialRequestCoordinator::create):
(WebCore::CredentialRequestCoordinator::CredentialRequestCoordinator):
(WebCore::CredentialRequestCoordinator::PickerStateGuard::PickerStateGuard):
(WebCore::CredentialRequestCoordinator::PickerStateGuard::~PickerStateGuard):
(WebCore::CredentialRequestCoordinator::currentState const):
(WebCore::CredentialRequestCoordinator::canTransitionTo const):
(WebCore::CredentialRequestCoordinator::setState):
(WebCore::CredentialRequestCoordinator::setCurrentPromise):
(WebCore::CredentialRequestCoordinator::currentPromise):
(WebCore::CredentialRequestCoordinator::presentPicker):
(WebCore::CredentialRequestCoordinator::handleDigitalCredentialsPickerResult):
(WebCore::CredentialRequestCoordinator::parseDigitalCredentialsResponseData const):
(WebCore::CredentialRequestCoordinator::finalizeDigitalCredential):
(WebCore::CredentialRequestCoordinator::abortPicker):
(WebCore::CredentialRequestCoordinator::~CredentialRequestCoordinator):
(WebCore::CredentialRequestCoordinator::discoverFromExternalSource): Deleted.
* Source/WebCore/Modules/identity/CredentialRequestCoordinator.h:
* Source/WebCore/Modules/identity/CredentialRequestCoordinatorClient.h:
* Source/WebCore/Modules/identity/DigitalCredential.cpp:
(WebCore::DigitalCredential::discoverFromExternalSource):
* Source/WebCore/Modules/identity/DigitalCredential.h:
* Source/WebCore/Modules/identity/DigitalCredentialRequest.h:
* Source/WebCore/Modules/identity/DigitalCredentialRequestOptions.h:
* Source/WebCore/Modules/identity/DigitalCredentialsRequestData.h: Copied from Source/WebCore/Modules/identity/DigitalCredentialRequest.h.
* Source/WebCore/Modules/identity/DigitalCredentialsResponseData.h: Copied from Source/WebCore/Modules/identity/DigitalCredentialRequest.h.
* Source/WebCore/Modules/identity/IdentityCredentialsContainer.cpp: Removed.
* Source/WebCore/Modules/identity/dummy/DummyCredentialRequestCoordinatorClient.cpp: Renamed from Source/WebCore/Modules/identity/IdentityCredentialsContainer.h.
(WebCore::DummyCredentialRequestCoordinatorClient::showDigitalCredentialsPicker):
(WebCore::DummyCredentialRequestCoordinatorClient::dismissDigitalCredentialsPicker):
* Source/WebCore/Modules/identity/dummy/DummyCredentialRequestCoordinatorClient.h: Copied from Source/WebCore/Modules/identity/CredentialRequestCoordinatorClient.h.
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/bindings/js/WebCoreBuiltinNames.h:
* Source/WebCore/loader/EmptyClients.cpp:
(WebCore::pageConfigurationWithEmptyClients):
* Source/WebCore/page/Chrome.cpp:
(WebCore::Chrome::showDigitalCredentialsPicker):
(WebCore::Chrome::dismissDigitalCredentialsPicker):
* Source/WebCore/page/Chrome.h:
* Source/WebCore/page/ChromeClient.h:
(WebCore::ChromeClient::showDigitalCredentialsPicker):
(WebCore::ChromeClient::dismissDigitalCredentialsPicker):
* Source/WebCore/page/Page.cpp:
* Source/WebCore/page/Page.h:
(WebCore::Page::credentialRequestCoordinator):
* Source/WebCore/page/PageConfiguration.cpp:
(WebCore::PageConfiguration::PageConfiguration):
* Source/WebCore/page/PageConfiguration.h:
* Source/WebCore/platform/Logging.h:
* Source/WebKit/CMakeLists.txt:
* Source/WebKit/DerivedSources-input.xcfilelist:
* Source/WebKit/DerivedSources-output.xcfilelist:
* Source/WebKit/DerivedSources.make:
* Source/WebKit/Platform/Logging.h:
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/Sources.txt:
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/UIProcess/API/APIWebPushDaemonConnection.cpp:
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _showDigitalCredentialsPicker:completionHandler:]):
(-[WKWebView _dismissDigitalCredentialsPicker:]):
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h:
* Source/WebKit/UIProcess/DigitalCredentials/DigitalCredentialsCoordinatorProxy.cpp: Removed.
* Source/WebKit/UIProcess/DigitalCredentials/DigitalCredentialsCoordinatorProxy.h: Removed.
* Source/WebKit/UIProcess/DigitalCredentials/DigitalCredentialsCoordinatorProxy.messages.in: Removed.
* Source/WebKit/UIProcess/DigitalCredentials/WKDigitalCredentialsPicker.h: Copied from Source/WebCore/Modules/identity/CredentialRequestCoordinator.h.
* Source/WebKit/UIProcess/DigitalCredentials/WKDigitalCredentialsPicker.mm: Added.
(-[WKDigitalCredentialsPickerDelegate initWithDigitalCredentialsPickerDelegate:]):
(-[WKRequestDataResult initWithRequestDataBytes:protocol:]):
(-[WKDigitalCredentialsPicker initWithView:]):
(-[WKDigitalCredentialsPicker delegate]):
(-[WKDigitalCredentialsPicker setDelegate:]):
(-[WKDigitalCredentialsPicker presentWithRequestData:completionHandler:]):
(-[WKDigitalCredentialsPicker dismissWithCompletionHandler:]):
(-[WKDigitalCredentialsPicker dismiss]):
(-[WKDigitalCredentialsPicker dismissWithResponse:]):
(-[WKDigitalCredentialsPicker completeWith:]):
* Source/WebKit/UIProcess/PageClient.h:
(WebKit::PageClient::showDigitalCredentialsPicker):
(WebKit::PageClient::dismissDigitalCredentialsPicker):
* Source/WebKit/UIProcess/WebAuthentication/Cocoa/WebAuthenticatorCoordinatorProxy.mm:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didAttachToRunningProcess):
(WebKit::WebPageProxy::didDestroyFrame):
(WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
(WebKit::WebPageProxy::showDigitalCredentialsPicker):
(WebKit::WebPageProxy::dismissDigitalCredentialsPicker):
(WebKit::WebPageProxy::resetState):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/UIProcess/ios/PageClientImplIOS.h:
* Source/WebKit/UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::showDigitalCredentialsPicker):
(WebKit::PageClientImpl::dismissDigitalCredentialsPicker):
* Source/WebKit/UIProcess/ios/UIKitUtilities.mm:
* Source/WebKit/UIProcess/ios/WKContentViewInteraction.h:
* Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView shareSheetDidDismiss:]):
(-[WKContentView _showDigitalCredentialsPicker:completionHandler:]):
(-[WKContentView _dismissDigitalCredentialsPicker:]):
* Source/WebKit/UIProcess/mac/PageClientImplMac.h:
* Source/WebKit/UIProcess/mac/PageClientImplMac.mm:
(WebKit::PageClientImpl::showDigitalCredentialsPicker):
(WebKit::PageClientImpl::dismissDigitalCredentialsPicker):
* Source/WebKit/UIProcess/mac/WebViewImpl.h:
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::showDigitalCredentialsPicker):
(WebKit::WebViewImpl::dismissDigitalCredentialsPicker):
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/DigitalCredentials/DigitalCredentialsCoordinator.cpp:
(WebKit::DigitalCredentialsCoordinator::showDigitalCredentialsPicker):
(WebKit::DigitalCredentialsCoordinator::dismissDigitalCredentialsPicker):
(WebKit::DigitalCredentialsCoordinator::requestDigitalCredential): Deleted.
(WebKit::DigitalCredentialsCoordinator::cancel): Deleted.
* Source/WebKit/WebProcess/DigitalCredentials/DigitalCredentialsCoordinator.h:
(): Deleted.
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::showDigitalCredentialsPicker):
(WebKit::WebChromeClient::dismissDigitalCredentialsPicker):
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::m_textAnimationController):
(WebKit::WebPage::showDigitalCredentialsPicker):
(WebKit::WebPage::dismissDigitalCredentialsPicker):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h:
* Source/WebKitLegacy/mac/WebView/WebPreferences.mm:
(-[WebPreferences digitalCredentialsEnabled]):
(-[WebPreferences setDigitalCredentialsEnabled:]):
* Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h:
* Source/WebKitLegacy/mac/WebView/WebView.mm:
(-[WebView _commonInitializationWithFrameName:groupName:]):
(-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):

Canonical link: https://commits.webkit.org/290115@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list