<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[270142] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/270142">270142</a></dd>
<dt>Author</dt> <dd>jiewen_tan@apple.com</dd>
<dt>Date</dt> <dd>2020-11-21 00:11:34 -0800 (Sat, 21 Nov 2020)</dd>
</dl>

<h3>Log Message</h3>
<pre>[WebAuthn] Implement SPI for AuthenticationServices.Framework
https://bugs.webkit.org/show_bug.cgi?id=218893
<rdar://problem/71364731>

Reviewed by Alex Christensen.

Source/WebCore:

Covered by API tests.

* Modules/webauthn/PublicKeyCredentialCreationOptions.h:
* Modules/webauthn/PublicKeyCredentialRequestOptions.h:
Tweaks some macros to expose an empty struct for ports that have WebAuthn disabled.

Source/WebKit:

This patch implements the SPI for AuthenticationServices.Framework, which is more or less a direct
translation of the WebAuthn Web IDLs and a thin wrapper on top of functionalities of the WebAuthn
process.

It deprecates the existing _WKWebAuthenticationPanel SPI which is for Safari to show UI only. This
patch does not just repurpose the SPI but also modifies some of the implementations. The most noticeable one
is the change of ownerships. Prior to this change, AuthenticatorManager owns the APIWebAuthenticationPanel.
Now, it's the opposite way.

Since there will be a period of time that the deprecated implementation will coexist with the new implementation,
this path also marks things that are meant to deprecate in the future to reduce confusions.

* UIProcess/API/APIWebAuthenticationPanel.cpp:
(API::WebAuthenticationPanel::WebAuthenticationPanel):
(API::WebAuthenticationPanel::handleRequest):
(API::WebAuthenticationPanel::cancel const):
* UIProcess/API/APIWebAuthenticationPanel.h:
Implements the plumbing for the new SPI and owns the AuthenticatorManager now.

* UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
* UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
(-[_WKAuthenticationExtensionsClientOutputs initWithAppid:]):
(-[_WKAuthenticatorResponse initWithRawId:extensions:]):
(-[_WKAuthenticatorAssertionResponse initWithRawId:extensions:authenticatorData:signature:userHandle:]):
(-[_WKAuthenticatorAttestationResponse initWithRawId:extensions:attestationObject:]):
(-[_WKAuthenticatorSelectionCriteria init]):
(-[_WKPublicKeyCredentialCreationOptions initWithRp:user:pubKeyCredParams:]):
(-[_WKPublicKeyCredentialDescriptor initWithType:identifier:]):
(-[_WKPublicKeyCredentialEntity initWithName:]):
(-[_WKPublicKeyCredentialParameters initWithType:alg:]):
(-[_WKPublicKeyCredentialRequestOptions init]):
(-[_WKPublicKeyCredentialRpEntity initWithName:]):
(-[_WKPublicKeyCredentialUserEntity initWithName:identifier:displayName:]):
(-[_WKWebAuthenticationPanel init]):
(vectorFromNSData):
(encodeEntity):
(publicKeyCredentialRpEntity):
(publicKeyCredentialUserEntity):
(publicKeyCredentialParameters):
(authenticatorTransport):
(authenticatorTransports):
(publicKeyCredentialDescriptors):
(authenticatorAttachment):
(userVerification):
(authenticatorSelectionCriteria):
(attestationConveyancePreference):
(authenticationExtensionsClientInputs):
(+[_WKWebAuthenticationPanel convertToCoreCreationOptionsWithOptions:]):
(wkAuthenticatorAttestationResponse):
(-[_WKWebAuthenticationPanel makeCredentialWithHash:options:completionHandler:]):
(+[_WKWebAuthenticationPanel convertToCoreRequestOptionsWithOptions:]):
(wkAuthenticatorAssertionResponse):
(-[_WKWebAuthenticationPanel getAssertionWithHash:options:completionHandler:]):
(+[_WKWebAuthenticationPanel isUserVerifyingPlatformAuthenticatorAvailable]):
Implements the SPI.

* UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
Marks things as to deprecate.

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
(TestWebKitAPI::TEST):
(): Deleted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModuleswebauthnPublicKeyCredentialCreationOptionsh">trunk/Source/WebCore/Modules/webauthn/PublicKeyCredentialCreationOptions.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebauthnPublicKeyCredentialRequestOptionsh">trunk/Source/WebCore/Modules/webauthn/PublicKeyCredentialRequestOptions.h</a></li>
<li><a href="#trunkSourceWebKitChangeLog">trunk/Source/WebKit/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPIAPIWebAuthenticationPanelcpp">trunk/Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPIAPIWebAuthenticationPanelh">trunk/Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKWebAuthenticationPanelh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKWebAuthenticationPanelmm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah">trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h</a></li>
<li><a href="#trunkSourceWebKitWebKitxcodeprojprojectpbxproj">trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKitCocoa_WKWebAuthenticationPanelmm">trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticationExtensionsClientInputsh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientInputs.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticationExtensionsClientInputsmm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientInputs.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticationExtensionsClientOutputsh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputs.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticationExtensionsClientOutputsmm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputs.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticationExtensionsClientOutputsInternalh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputsInternal.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAssertionResponseh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponse.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAssertionResponsemm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponse.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAssertionResponseInternalh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponseInternal.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAttestationResponseh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponse.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAttestationResponsemm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponse.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAttestationResponseInternalh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponseInternal.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorResponseh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponse.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorResponsemm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponse.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorResponseInternalh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponseInternal.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorSelectionCriteriah">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorSelectionCriteriamm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialCreationOptionsh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialCreationOptionsmm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialDescriptorh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialDescriptor.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialDescriptormm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialDescriptor.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialEntityh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialEntity.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialEntitymm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialEntity.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialParametersh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialParameters.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialParametersmm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialParameters.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialRelyingPartyEntityh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRelyingPartyEntity.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialRelyingPartyEntitymm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRelyingPartyEntity.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialRequestOptionsh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialRequestOptionsmm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialUserEntityh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialUserEntity.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialUserEntitymm">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialUserEntity.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKUserVerificationRequirementh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserVerificationRequirement.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessAPICocoa_WKWebAuthenticationPanelForTestingh">trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanelForTesting.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Source/WebCore/ChangeLog      2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2020-11-21  Jiewen Tan  <jiewen_tan@apple.com>
+
+        [WebAuthn] Implement SPI for AuthenticationServices.Framework
+        https://bugs.webkit.org/show_bug.cgi?id=218893
+        <rdar://problem/71364731>
+
+        Reviewed by Alex Christensen.
+
+        Covered by API tests.
+
+        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
+        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
+        Tweaks some macros to expose an empty struct for ports that have WebAuthn disabled.
+
</ins><span class="cx"> 2020-11-20  Chris Dumez  <cdumez@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Poor resampling quality when using AudioContext sampleRate parameter
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebauthnPublicKeyCredentialCreationOptionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webauthn/PublicKeyCredentialCreationOptions.h (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webauthn/PublicKeyCredentialCreationOptions.h       2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Source/WebCore/Modules/webauthn/PublicKeyCredentialCreationOptions.h  2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -26,7 +26,6 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_AUTHN)
</span><del>-
</del><span class="cx"> #include "AttestationConveyancePreference.h"
</span><span class="cx"> #include "AuthenticationExtensionsClientInputs.h"
</span><span class="cx"> #include "BufferSource.h"
</span><span class="lines">@@ -34,10 +33,12 @@
</span><span class="cx"> #include "PublicKeyCredentialType.h"
</span><span class="cx"> #include "UserVerificationRequirement.h"
</span><span class="cx"> #include <wtf/Forward.h>
</span><ins>+#endif // ENABLE(WEB_AUTHN)
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> struct PublicKeyCredentialCreationOptions {
</span><ins>+#if ENABLE(WEB_AUTHN)
</ins><span class="cx">     enum class AuthenticatorAttachment {
</span><span class="cx">         Platform,
</span><span class="cx">         CrossPlatform
</span><span class="lines">@@ -89,8 +90,10 @@
</span><span class="cx"> 
</span><span class="cx">     template<class Encoder> void encode(Encoder&) const;
</span><span class="cx">     template<class Decoder> static Optional<PublicKeyCredentialCreationOptions> decode(Decoder&);
</span><ins>+#endif // ENABLE(WEB_AUTHN)
</ins><span class="cx"> };
</span><span class="cx"> 
</span><ins>+#if ENABLE(WEB_AUTHN)
</ins><span class="cx"> template<class Encoder>
</span><span class="cx"> void PublicKeyCredentialCreationOptions::Parameters::encode(Encoder& encoder) const
</span><span class="cx"> {
</span><span class="lines">@@ -196,9 +199,11 @@
</span><span class="cx"> 
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><ins>+#endif // ENABLE(WEB_AUTHN)
</ins><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><ins>+#if ENABLE(WEB_AUTHN)
</ins><span class="cx"> namespace WTF {
</span><span class="cx"> 
</span><span class="cx"> template<> struct EnumTraits<WebCore::PublicKeyCredentialCreationOptions::AuthenticatorAttachment> {
</span><span class="lines">@@ -210,5 +215,4 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WTF
</span><del>-
</del><span class="cx"> #endif // ENABLE(WEB_AUTHN)
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebauthnPublicKeyCredentialRequestOptionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webauthn/PublicKeyCredentialRequestOptions.h (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webauthn/PublicKeyCredentialRequestOptions.h        2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Source/WebCore/Modules/webauthn/PublicKeyCredentialRequestOptions.h   2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -26,16 +26,17 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_AUTHN)
</span><del>-
</del><span class="cx"> #include "AuthenticationExtensionsClientInputs.h"
</span><span class="cx"> #include "BufferSource.h"
</span><span class="cx"> #include "PublicKeyCredentialDescriptor.h"
</span><span class="cx"> #include "UserVerificationRequirement.h"
</span><span class="cx"> #include <wtf/Forward.h>
</span><ins>+#endif // ENABLE(WEB_AUTHN)
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> struct PublicKeyCredentialRequestOptions {
</span><ins>+#if ENABLE(WEB_AUTHN)
</ins><span class="cx">     BufferSource challenge;
</span><span class="cx">     Optional<unsigned> timeout;
</span><span class="cx">     mutable String rpId;
</span><span class="lines">@@ -45,8 +46,10 @@
</span><span class="cx"> 
</span><span class="cx">     template<class Encoder> void encode(Encoder&) const;
</span><span class="cx">     template<class Decoder> static Optional<PublicKeyCredentialRequestOptions> decode(Decoder&);
</span><ins>+#endif // ENABLE(WEB_AUTHN)
</ins><span class="cx"> };
</span><span class="cx"> 
</span><ins>+#if ENABLE(WEB_AUTHN)
</ins><span class="cx"> // Not every member is encoded.
</span><span class="cx"> template<class Encoder>
</span><span class="cx"> void PublicKeyCredentialRequestOptions::encode(Encoder& encoder) const
</span><span class="lines">@@ -84,7 +87,6 @@
</span><span class="cx"> 
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><ins>+#endif // ENABLE(WEB_AUTHN)
</ins><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // ENABLE(WEB_AUTHN)
</del></span></pre></div>
<a id="trunkSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ChangeLog (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ChangeLog    2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Source/WebKit/ChangeLog       2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -1,3 +1,70 @@
</span><ins>+2020-11-21  Jiewen Tan  <jiewen_tan@apple.com>
+
+        [WebAuthn] Implement SPI for AuthenticationServices.Framework
+        https://bugs.webkit.org/show_bug.cgi?id=218893
+        <rdar://problem/71364731>
+
+        Reviewed by Alex Christensen.
+
+        This patch implements the SPI for AuthenticationServices.Framework, which is more or less a direct
+        translation of the WebAuthn Web IDLs and a thin wrapper on top of functionalities of the WebAuthn
+        process.
+
+        It deprecates the existing _WKWebAuthenticationPanel SPI which is for Safari to show UI only. This
+        patch does not just repurpose the SPI but also modifies some of the implementations. The most noticeable one
+        is the change of ownerships. Prior to this change, AuthenticatorManager owns the APIWebAuthenticationPanel.
+        Now, it's the opposite way.
+
+        Since there will be a period of time that the deprecated implementation will coexist with the new implementation,
+        this path also marks things that are meant to deprecate in the future to reduce confusions.
+
+        * UIProcess/API/APIWebAuthenticationPanel.cpp:
+        (API::WebAuthenticationPanel::WebAuthenticationPanel):
+        (API::WebAuthenticationPanel::handleRequest):
+        (API::WebAuthenticationPanel::cancel const):
+        * UIProcess/API/APIWebAuthenticationPanel.h:
+        Implements the plumbing for the new SPI and owns the AuthenticatorManager now.
+
+        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h:
+        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
+        (-[_WKAuthenticationExtensionsClientOutputs initWithAppid:]):
+        (-[_WKAuthenticatorResponse initWithRawId:extensions:]):
+        (-[_WKAuthenticatorAssertionResponse initWithRawId:extensions:authenticatorData:signature:userHandle:]):
+        (-[_WKAuthenticatorAttestationResponse initWithRawId:extensions:attestationObject:]):
+        (-[_WKAuthenticatorSelectionCriteria init]):
+        (-[_WKPublicKeyCredentialCreationOptions initWithRp:user:pubKeyCredParams:]):
+        (-[_WKPublicKeyCredentialDescriptor initWithType:identifier:]):
+        (-[_WKPublicKeyCredentialEntity initWithName:]):
+        (-[_WKPublicKeyCredentialParameters initWithType:alg:]):
+        (-[_WKPublicKeyCredentialRequestOptions init]):
+        (-[_WKPublicKeyCredentialRpEntity initWithName:]):
+        (-[_WKPublicKeyCredentialUserEntity initWithName:identifier:displayName:]):
+        (-[_WKWebAuthenticationPanel init]):
+        (vectorFromNSData):
+        (encodeEntity):
+        (publicKeyCredentialRpEntity):
+        (publicKeyCredentialUserEntity):
+        (publicKeyCredentialParameters):
+        (authenticatorTransport):
+        (authenticatorTransports):
+        (publicKeyCredentialDescriptors):
+        (authenticatorAttachment):
+        (userVerification):
+        (authenticatorSelectionCriteria):
+        (attestationConveyancePreference):
+        (authenticationExtensionsClientInputs):
+        (+[_WKWebAuthenticationPanel convertToCoreCreationOptionsWithOptions:]):
+        (wkAuthenticatorAttestationResponse):
+        (-[_WKWebAuthenticationPanel makeCredentialWithHash:options:completionHandler:]):
+        (+[_WKWebAuthenticationPanel convertToCoreRequestOptionsWithOptions:]):
+        (wkAuthenticatorAssertionResponse):
+        (-[_WKWebAuthenticationPanel getAssertionWithHash:options:completionHandler:]):
+        (+[_WKWebAuthenticationPanel isUserVerifyingPlatformAuthenticatorAvailable]):
+        Implements the SPI.
+
+        * UIProcess/WebAuthentication/WebAuthenticationRequestData.h:
+        Marks things as to deprecate.
+
</ins><span class="cx"> 2020-11-20  Kate Cheney  <katherine_cheney@apple.com>
</span><span class="cx"> 
</span><span class="cx">         PCM: Persist pending ad clicks and attributions so they can survive browser restart
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPIAPIWebAuthenticationPanelcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp  2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.cpp     2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -41,10 +41,16 @@
</span><span class="cx">     return adoptRef(*new WebAuthenticationPanel(manager, rpId, transports, type));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WebAuthenticationPanel::WebAuthenticationPanel()
+    : m_manager(makeUnique<AuthenticatorManager>())
+    , m_client(makeUniqueRef<WebAuthenticationPanelClient>())
+{
+}
+
</ins><span class="cx"> WebAuthenticationPanel::WebAuthenticationPanel(const AuthenticatorManager& manager, const WTF::String& rpId, const TransportSet& transports, ClientDataType type)
</span><del>-    : m_manager(makeWeakPtr(manager))
</del><ins>+    : m_client(makeUniqueRef<WebAuthenticationPanelClient>())
+    , m_weakManager(makeWeakPtr(manager))
</ins><span class="cx">     , m_rpId(rpId)
</span><del>-    , m_client(WTF::makeUniqueRef<WebAuthenticationPanelClient>())
</del><span class="cx">     , m_clientDataType(type)
</span><span class="cx"> {
</span><span class="cx">     m_transports = Vector<AuthenticatorTransport>();
</span><span class="lines">@@ -59,10 +65,16 @@
</span><span class="cx"> 
</span><span class="cx"> WebAuthenticationPanel::~WebAuthenticationPanel() = default;
</span><span class="cx"> 
</span><ins>+void WebAuthenticationPanel::handleRequest(WebAuthenticationRequestData&& request, Callback&& callback)
+{
+    ASSERT(m_manager);
+    m_manager->handleRequest(WTFMove(request), WTFMove(callback));
+}
+
</ins><span class="cx"> void WebAuthenticationPanel::cancel() const
</span><span class="cx"> {
</span><del>-    if (m_manager)
-        m_manager->cancelRequest(*this);
</del><ins>+    if (m_weakManager)
+        m_weakManager->cancelRequest(*this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebAuthenticationPanel::setClient(UniqueRef<WebAuthenticationPanelClient>&& client)
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPIAPIWebAuthenticationPanelh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h    2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Source/WebKit/UIProcess/API/APIWebAuthenticationPanel.h       2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -35,10 +35,16 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> enum class ClientDataType : bool;
</span><ins>+
+class AuthenticatorResponse;
+
+struct ExceptionData;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> class AuthenticatorManager;
</span><ins>+
+struct WebAuthenticationRequestData;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace API {
</span><span class="lines">@@ -47,25 +53,35 @@
</span><span class="cx"> 
</span><span class="cx"> class WebAuthenticationPanel final : public ObjectImpl<Object::Type::WebAuthenticationPanel>, public CanMakeWeakPtr<WebAuthenticationPanel> {
</span><span class="cx"> public:
</span><del>-    using TransportSet = HashSet<WebCore::AuthenticatorTransport, WTF::IntHash<WebCore::AuthenticatorTransport>, WTF::StrongEnumHashTraits<WebCore::AuthenticatorTransport>>;
</del><ins>+    using Response = Variant<Ref<WebCore::AuthenticatorResponse>, WebCore::ExceptionData>;
+    using Callback = CompletionHandler<void(Response&&)>;
</ins><span class="cx"> 
</span><del>-    static Ref<WebAuthenticationPanel> create(const WebKit::AuthenticatorManager&, const WTF::String& rpId, const TransportSet&, WebCore::ClientDataType);
</del><ins>+    WebAuthenticationPanel();
</ins><span class="cx">     ~WebAuthenticationPanel();
</span><span class="cx"> 
</span><del>-    WTF::String rpId() const { return m_rpId; }
-    const Vector<WebCore::AuthenticatorTransport>& transports() const { return m_transports; }
-    WebCore::ClientDataType clientDataType() const { return m_clientDataType; }
</del><ins>+    void handleRequest(WebKit::WebAuthenticationRequestData&&, Callback&&);
</ins><span class="cx">     void cancel() const;
</span><span class="cx"> 
</span><span class="cx">     const WebAuthenticationPanelClient& client() const { return m_client.get(); }
</span><span class="cx">     void setClient(UniqueRef<WebAuthenticationPanelClient>&&);
</span><span class="cx"> 
</span><ins>+    // FIXME: <rdar://problem/71509848> Remove the following deprecated methods.
+    using TransportSet = HashSet<WebCore::AuthenticatorTransport, WTF::IntHash<WebCore::AuthenticatorTransport>, WTF::StrongEnumHashTraits<WebCore::AuthenticatorTransport>>;
+    static Ref<WebAuthenticationPanel> create(const WebKit::AuthenticatorManager&, const WTF::String& rpId, const TransportSet&, WebCore::ClientDataType);
+    WTF::String rpId() const { return m_rpId; }
+    const Vector<WebCore::AuthenticatorTransport>& transports() const { return m_transports; }
+    WebCore::ClientDataType clientDataType() const { return m_clientDataType; }
+
</ins><span class="cx"> private:
</span><ins>+    // FIXME: <rdar://problem/71509848> Remove the following deprecated method.
</ins><span class="cx">     WebAuthenticationPanel(const WebKit::AuthenticatorManager&, const WTF::String& rpId, const TransportSet&, WebCore::ClientDataType);
</span><span class="cx"> 
</span><del>-    WeakPtr<WebKit::AuthenticatorManager> m_manager;
</del><ins>+    std::unique_ptr<WebKit::AuthenticatorManager> m_manager; // FIXME: <rdar://problem/71509848> Change to UniqueRef.
+    UniqueRef<WebAuthenticationPanelClient> m_client;
+
+    // FIXME: <rdar://problem/71509848> Remove the following deprecated fields.
+    WeakPtr<WebKit::AuthenticatorManager> m_weakManager;
</ins><span class="cx">     WTF::String m_rpId;
</span><del>-    UniqueRef<WebAuthenticationPanelClient> m_client;
</del><span class="cx">     Vector<WebCore::AuthenticatorTransport> m_transports;
</span><span class="cx">     WebCore::ClientDataType m_clientDataType;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticationExtensionsClientInputshfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientInputs.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientInputs.h                                (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientInputs.h   2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/WKFoundation.h>
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKAuthenticationExtensionsClientInputs : NSObject
+
+@property (nullable, nonatomic, copy) NSString *appid;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticationExtensionsClientInputsmmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientInputs.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientInputs.mm                               (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientInputs.mm  2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKAuthenticationExtensionsClientInputs.h"
+
+@implementation _WKAuthenticationExtensionsClientInputs
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticationExtensionsClientOutputshfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputs.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputs.h                               (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputs.h  2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/WKFoundation.h>
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKAuthenticationExtensionsClientOutputs : NSObject
+
+@property (nonatomic, readonly) BOOL appid;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticationExtensionsClientOutputsmmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputs.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputs.mm                              (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputs.mm 2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKAuthenticationExtensionsClientOutputs.h"
+
+@implementation _WKAuthenticationExtensionsClientOutputs
+
+- (instancetype)initWithAppid:(BOOL)appid
+{
+    if (!(self = [super init]))
+        return nil;
+
+    _appid = appid;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticationExtensionsClientOutputsInternalhfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputsInternal.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputsInternal.h                               (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticationExtensionsClientOutputsInternal.h  2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import "_WKAuthenticationExtensionsClientOutputs.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface _WKAuthenticationExtensionsClientOutputs ()
+
+- (instancetype)initWithAppid:(BOOL)appid;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAssertionResponsehfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponse.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponse.h                              (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponse.h 2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/_WKAuthenticatorResponse.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKAuthenticatorAssertionResponse : _WKAuthenticatorResponse
+
+@property (nonatomic, readonly) NSData *authenticatorData;
+@property (nonatomic, readonly) NSData *signature;
+@property (nullable, nonatomic, readonly) NSData *userHandle;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAssertionResponsemmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponse.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponse.mm                             (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponse.mm        2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKAuthenticatorAssertionResponse.h"
+
+#import "_WKAuthenticationExtensionsClientOutputs.h"
+#import "_WKAuthenticatorResponseInternal.h"
+#import <wtf/RetainPtr.h>
+
+@implementation _WKAuthenticatorAssertionResponse
+
+- (instancetype)initWithRawId:(NSData *)rawId extensions:(RetainPtr<_WKAuthenticationExtensionsClientOutputs>&&)extensions authenticatorData:(NSData *)authenticatorData signature:(NSData *)signature userHandle:(NSData *)userHandle
+{
+    if (!(self = [super initWithRawId:rawId extensions:WTFMove(extensions)]))
+        return nil;
+
+    _authenticatorData = authenticatorData;
+    _signature = signature;
+    _userHandle = userHandle;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAssertionResponseInternalhfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponseInternal.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponseInternal.h                              (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAssertionResponseInternal.h 2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import "_WKAuthenticatorAssertionResponse.h"
+#import <wtf/RetainPtr.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class _WKAuthenticationExtensionsClientOutputs;
+
+@interface _WKAuthenticatorAssertionResponse ()
+
+- (instancetype)initWithRawId:(NSData *)rawId extensions:(RetainPtr<_WKAuthenticationExtensionsClientOutputs>&&)extensions authenticatorData:(NSData *)authenticatorData signature:(NSData *)signature userHandle:(NSData *)userHandle;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAttestationResponsehfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponse.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponse.h                            (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponse.h       2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/_WKAuthenticatorResponse.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKAuthenticatorAttestationResponse : _WKAuthenticatorResponse
+
+@property (nonatomic, readonly) NSData *attestationObject;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAttestationResponsemmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponse.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponse.mm                           (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponse.mm      2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKAuthenticatorAttestationResponse.h"
+
+#import "_WKAuthenticationExtensionsClientOutputs.h"
+#import "_WKAuthenticatorResponseInternal.h"
+#import <wtf/RetainPtr.h>
+
+@implementation _WKAuthenticatorAttestationResponse
+
+- (instancetype)initWithRawId:(NSData *)rawId extensions:(RetainPtr<_WKAuthenticationExtensionsClientOutputs>&&)extensions attestationObject:(NSData *)attestationObject
+{
+    if (!(self = [super initWithRawId:rawId extensions:WTFMove(extensions)]))
+        return nil;
+
+    _attestationObject = attestationObject;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorAttestationResponseInternalhfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponseInternal.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponseInternal.h                            (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorAttestationResponseInternal.h       2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import "_WKAuthenticatorAttestationResponse.h"
+#import <wtf/RetainPtr.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class _WKAuthenticationExtensionsClientOutputs;
+
+@interface _WKAuthenticatorAttestationResponse ()
+
+- (instancetype)initWithRawId:(NSData *)rawId extensions:(RetainPtr<_WKAuthenticationExtensionsClientOutputs>&&)extensions attestationObject:(NSData *)attestationObject;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorResponsehfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponse.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponse.h                               (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponse.h  2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/WKFoundation.h>
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class _WKAuthenticationExtensionsClientOutputs;
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKAuthenticatorResponse : NSObject
+
+@property (nonatomic, readonly) NSData *rawId;
+@property (nullable, nonatomic, readonly, strong) _WKAuthenticationExtensionsClientOutputs *extensions;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorResponsemmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponse.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponse.mm                              (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponse.mm 2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKAuthenticatorResponseInternal.h"
+
+#import "_WKAuthenticationExtensionsClientOutputs.h"
+#import <wtf/RetainPtr.h>
+
+@implementation _WKAuthenticatorResponse {
+    RetainPtr<_WKAuthenticationExtensionsClientOutputs> _extensions;
+}
+
+- (instancetype)initWithRawId:(NSData *)rawId extensions:(RetainPtr<_WKAuthenticationExtensionsClientOutputs>&&)extensions
+{
+    if (!(self = [super init]))
+        return nil;
+
+    _rawId = rawId;
+    _extensions = extensions;
+    return self;
+}
+
+- (_WKAuthenticationExtensionsClientOutputs *)extensions
+{
+    return _extensions.get();
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorResponseInternalhfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponseInternal.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponseInternal.h                               (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorResponseInternal.h  2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import "_WKAuthenticatorResponse.h"
+#import <wtf/RetainPtr.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class _WKAuthenticationExtensionsClientOutputs;
+
+@interface _WKAuthenticatorResponse ()
+
+- (instancetype)initWithRawId:(NSData *)rawId extensions:(RetainPtr<_WKAuthenticationExtensionsClientOutputs>&&)extensions;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorSelectionCriteriahfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.h                              (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.h 2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/WKFoundation.h>
+
+#import <Foundation/Foundation.h>
+#import <WebKit/_WKUserVerificationRequirement.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, _WKAuthenticatorAttachment) {
+    _WKAuthenticatorAttachmentAll,
+    _WKAuthenticatorAttachmentPlatform,
+    _WKAuthenticatorAttachmentCrossPlatform,
+} WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKAuthenticatorSelectionCriteria : NSObject
+
+/*!@discussion The default value is _WKAuthenticatorAttachmentAll.*/
+@property (nonatomic) _WKAuthenticatorAttachment authenticatorAttachment;
+
+/*!@discussion The default value is NO.*/
+@property (nonatomic) BOOL requireResidentKey;
+
+/*!@discussion The default value is _WKUserVerificationRequirementPreferred.*/
+@property (nonatomic) _WKUserVerificationRequirement userVerification;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKAuthenticatorSelectionCriteriammfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.mm                             (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAuthenticatorSelectionCriteria.mm        2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,42 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKAuthenticatorSelectionCriteria.h"
+
+@implementation _WKAuthenticatorSelectionCriteria
+
+- (instancetype)init
+{
+    if (!(self = [super init]))
+        return nil;
+
+    self.authenticatorAttachment = _WKAuthenticatorAttachmentAll;
+    self.requireResidentKey = NO;
+    self.userVerification = _WKUserVerificationRequirementPreferred;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialCreationOptionsh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.h (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.h                          (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.h     2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,69 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/WKFoundation.h>
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class _WKAuthenticationExtensionsClientInputs;
+@class _WKAuthenticatorSelectionCriteria;
+@class _WKPublicKeyCredentialDescriptor;
+@class _WKPublicKeyCredentialParameters;
+@class _WKPublicKeyCredentialRelyingPartyEntity;
+@class _WKPublicKeyCredentialUserEntity;
+
+typedef NS_ENUM(NSInteger, _WKAttestationConveyancePreference) {
+    _WKAttestationConveyancePreferenceNone,
+    _WKAttestationConveyancePreferenceIndirect,
+    _WKAttestationConveyancePreferenceDirect,
+} WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKPublicKeyCredentialCreationOptions : NSObject
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithRelyingParty:(_WKPublicKeyCredentialRelyingPartyEntity *)relyingParty user:(_WKPublicKeyCredentialUserEntity *)user publicKeyCredentialParamaters:(NSArray<_WKPublicKeyCredentialParameters *> *)publicKeyCredentialParamaters;
+
+@property (nonatomic, strong) _WKPublicKeyCredentialRelyingPartyEntity *relyingParty;
+@property (nonatomic, strong) _WKPublicKeyCredentialUserEntity *user;
+
+@property (nonatomic, copy) NSArray<_WKPublicKeyCredentialParameters *> *publicKeyCredentialParamaters;
+
+@property (nullable, nonatomic, copy) NSNumber *timeout;
+@property (nullable, nonatomic, copy) NSArray<_WKPublicKeyCredentialDescriptor *> *excludeCredentials;
+@property (nullable, nonatomic, strong) _WKAuthenticatorSelectionCriteria *authenticatorSelection;
+
+/*!@discussion The default value is _WKAttestationConveyancePrefenprenceNone.*/
+@property (nonatomic) _WKAttestationConveyancePreference attestation;
+@property (nullable, nonatomic, strong) _WKAuthenticationExtensionsClientInputs *extensions;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialCreationOptionsmmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.mm                         (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialCreationOptions.mm    2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,45 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKPublicKeyCredentialCreationOptions.h"
+
+#import "_WKPublicKeyCredentialRelyingPartyEntity.h"
+#import "_WKPublicKeyCredentialUserEntity.h"
+
+@implementation _WKPublicKeyCredentialCreationOptions
+
+- (instancetype)initWithRelyingParty:(_WKPublicKeyCredentialRelyingPartyEntity *)relyingParty user:(_WKPublicKeyCredentialUserEntity *)user publicKeyCredentialParamaters:(NSArray<_WKPublicKeyCredentialParameters *> *)publicKeyCredentialParamaters
+{
+    if (!(self = [super init]))
+        return nil;
+
+    self.relyingParty = relyingParty;
+    self.user = user;
+    self.publicKeyCredentialParamaters = publicKeyCredentialParamaters;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialDescriptorhfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialDescriptor.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialDescriptor.h                               (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialDescriptor.h  2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/WKFoundation.h>
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKPublicKeyCredentialDescriptor : NSObject
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithIdentifier:(NSData *)identifier;
+
+@property (nonatomic, copy) NSData *identifier;
+@property (nullable, nonatomic, copy) NSArray<NSNumber *> *transports;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialDescriptormmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialDescriptor.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialDescriptor.mm                              (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialDescriptor.mm 2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKPublicKeyCredentialDescriptor.h"
+
+@implementation _WKPublicKeyCredentialDescriptor
+
+- (instancetype)initWithIdentifier:(NSData *)identifier
+{
+    if (!(self = [super init]))
+        return nil;
+
+    self.identifier = identifier;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialEntityhfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialEntity.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialEntity.h                           (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialEntity.h      2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/WKFoundation.h>
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKPublicKeyCredentialEntity : NSObject
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithName:(NSString *)name;
+
+@property (nonatomic, copy) NSString *name;
+@property (nullable, nonatomic, copy) NSString *icon;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialEntitymmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialEntity.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialEntity.mm                          (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialEntity.mm     2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKPublicKeyCredentialEntity.h"
+
+@implementation _WKPublicKeyCredentialEntity
+
+- (instancetype)initWithName:(NSString *)name
+{
+    if (!(self = [super init]))
+        return nil;
+
+    self.name = name;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialParametershfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialParameters.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialParameters.h                               (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialParameters.h  2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,45 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/WKFoundation.h>
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKPublicKeyCredentialParameters : NSObject
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithAlgorithm:(NSNumber *)algorithm;
+
+@property (nonatomic, copy) NSNumber *algorithm;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialParametersmmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialParameters.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialParameters.mm                              (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialParameters.mm 2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKPublicKeyCredentialParameters.h"
+
+@implementation _WKPublicKeyCredentialParameters
+
+- (instancetype)initWithAlgorithm:(NSNumber *)algorithm
+{
+    if (!(self = [super init]))
+        return nil;
+
+    self.algorithm = algorithm;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialRelyingPartyEntityhfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRelyingPartyEntity.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRelyingPartyEntity.h                               (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRelyingPartyEntity.h  2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,43 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/_WKPublicKeyCredentialEntity.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKPublicKeyCredentialRelyingPartyEntity : _WKPublicKeyCredentialEntity
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithName:(NSString *)name;
+
+@property (nullable, nonatomic, copy) NSString *identifier;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialRelyingPartyEntitymmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRelyingPartyEntity.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRelyingPartyEntity.mm                              (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRelyingPartyEntity.mm 2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKPublicKeyCredentialRelyingPartyEntity.h"
+
+@implementation _WKPublicKeyCredentialRelyingPartyEntity
+
+- (instancetype)initWithName:(NSString *)name
+{
+    if (!(self = [super initWithName:name]))
+        return nil;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialRequestOptionshfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.h                           (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.h      2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/WKFoundation.h>
+
+#import <Foundation/Foundation.h>
+#import <WebKit/_WKUserVerificationRequirement.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class _WKAuthenticationExtensionsClientInputs;
+@class _WKPublicKeyCredentialDescriptor;
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKPublicKeyCredentialRequestOptions : NSObject
+
+@property (nullable, nonatomic, copy) NSNumber *timeout;
+@property (nullable, nonatomic, copy) NSString *relyingPartyIdentifier;
+@property (nullable, nonatomic, copy) NSArray<_WKPublicKeyCredentialDescriptor *> *allowCredentials;
+/*!@discussion The default value is _WKUserVerificationRequirementPreferred.*/
+@property (nonatomic) _WKUserVerificationRequirement userVerification;
+@property (nullable, nonatomic, strong) _WKAuthenticationExtensionsClientInputs *extensions;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialRequestOptionsmmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.mm                          (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialRequestOptions.mm     2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKPublicKeyCredentialRequestOptions.h"
+
+@implementation _WKPublicKeyCredentialRequestOptions
+
+- (instancetype)init
+{
+    if (!(self = [super init]))
+        return nil;
+
+    self.userVerification = _WKUserVerificationRequirementPreferred;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialUserEntityhfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialUserEntity.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialUserEntity.h                               (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialUserEntity.h  2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,45 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/_WKPublicKeyCredentialEntity.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKPublicKeyCredentialUserEntity : _WKPublicKeyCredentialEntity
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithName:(NSString *)name NS_UNAVAILABLE;
+- (instancetype)initWithName:(NSString *)name identifier:(NSData *)identifier displayName:(NSString *)displayName;
+
+@property (nonatomic, copy) NSData *identifier;
+@property (nonatomic, copy) NSString *displayName;
+
+@end
+
+NS_ASSUME_NONNULL_END
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKPublicKeyCredentialUserEntitymmfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialUserEntity.mm (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialUserEntity.mm                              (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKPublicKeyCredentialUserEntity.mm 2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "_WKPublicKeyCredentialUserEntity.h"
+
+@implementation _WKPublicKeyCredentialUserEntity
+
+- (instancetype)initWithName:(NSString *)name identifier:(NSData *)identifier displayName:(NSString *)displayName
+{
+    if (!(self = [super initWithName:name]))
+        return nil;
+
+    self.identifier = identifier;
+    self.displayName = displayName;
+    return self;
+}
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKUserVerificationRequirementhfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserVerificationRequirement.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserVerificationRequirement.h                         (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserVerificationRequirement.h    2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import <WebKit/WKFoundation.h>
+
+typedef NS_ENUM(NSInteger, _WKUserVerificationRequirement) {
+    _WKUserVerificationRequirementRequired,
+    _WKUserVerificationRequirementPreferred,
+    _WKUserVerificationRequirementDiscouraged,
+} WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKWebAuthenticationPanelh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h      2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.h 2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -28,7 +28,10 @@
</span><span class="cx"> 
</span><span class="cx"> NS_ASSUME_NONNULL_BEGIN
</span><span class="cx"> 
</span><del>-@class LAContext;
</del><ins>+@class _WKAuthenticatorAttestationResponse;
+@class _WKAuthenticatorAssertionResponse;
+@class _WKPublicKeyCredentialCreationOptions;
+@class _WKPublicKeyCredentialRequestOptions;
</ins><span class="cx"> @class _WKWebAuthenticationAssertionResponse;
</span><span class="cx"> @class _WKWebAuthenticationPanel;
</span><span class="cx"> 
</span><span class="lines">@@ -75,6 +78,7 @@
</span><span class="cx">     _WKWebAuthenticationSourceExternal,
</span><span class="cx"> } WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
</span><span class="cx"> 
</span><ins>+// FIXME: <rdar://problem/71509141> Optimize the delegate for the AuthenticationService.framework.
</ins><span class="cx"> @protocol _WKWebAuthenticationPanelDelegate <NSObject>
</span><span class="cx"> 
</span><span class="cx"> @optional
</span><span class="lines">@@ -91,14 +95,23 @@
</span><span class="cx"> @interface _WKWebAuthenticationPanel : NSObject
</span><span class="cx"> 
</span><span class="cx"> @property (nullable, nonatomic, weak) id <_WKWebAuthenticationPanelDelegate> delegate;
</span><del>-@property (nonatomic, readonly, copy) NSString *relyingPartyID;
-@property (nonatomic, readonly, copy) NSSet *transports;
-@property (nonatomic, readonly) _WKWebAuthenticationType type;
</del><span class="cx"> 
</span><span class="cx"> + (void)clearAllLocalAuthenticatorCredentials;
</span><ins>++ (BOOL)isUserVerifyingPlatformAuthenticatorAvailable;
</ins><span class="cx"> 
</span><ins>+- (instancetype)init;
+
+// FIXME: <rdar://problem/71509394> Adds ClientDataJSON.
+// FIXME: <rdar://problem/71509485> Adds detailed NSError.
+- (void)makeCredentialWithHash:(NSData *)hash options:(_WKPublicKeyCredentialCreationOptions *)options completionHandler:(void (^)(_WKAuthenticatorAttestationResponse *, NSError *))handler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+- (void)getAssertionWithHash:(NSData *)hash options:(_WKPublicKeyCredentialRequestOptions *)options completionHandler:(void (^)(_WKAuthenticatorAssertionResponse *, NSError *))handler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
</ins><span class="cx"> - (void)cancel;
</span><span class="cx"> 
</span><ins>+// FIXME: <rdar://problem/71509848> Deprecate the following properties.
+@property (nonatomic, readonly, copy) NSString *relyingPartyID;
+@property (nonatomic, readonly, copy) NSSet *transports;
+@property (nonatomic, readonly) _WKWebAuthenticationType type;
+
</ins><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> NS_ASSUME_NONNULL_END
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKWebAuthenticationPanelmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm     2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm        2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -26,9 +26,28 @@
</span><span class="cx"> #import "config.h"
</span><span class="cx"> #import "_WKWebAuthenticationPanelInternal.h"
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> #import "LocalAuthenticator.h"
</span><ins>+#import "LocalService.h"
+#import "WKError.h"
</ins><span class="cx"> #import "WebAuthenticationPanelClient.h"
</span><ins>+#import "_WKAuthenticationExtensionsClientInputs.h"
+#import "_WKAuthenticationExtensionsClientOutputsInternal.h"
+#import "_WKAuthenticatorAssertionResponseInternal.h"
+#import "_WKAuthenticatorAttestationResponseInternal.h"
+#import "_WKAuthenticatorSelectionCriteria.h"
+#import "_WKPublicKeyCredentialCreationOptions.h"
+#import "_WKPublicKeyCredentialDescriptor.h"
+#import "_WKPublicKeyCredentialParameters.h"
+#import "_WKPublicKeyCredentialRequestOptions.h"
+#import "_WKPublicKeyCredentialRelyingPartyEntity.h"
+#import "_WKPublicKeyCredentialUserEntity.h"
+#import <WebCore/AuthenticatorResponse.h>
+#import <WebCore/AuthenticatorResponseData.h>
+#import <WebCore/PublicKeyCredentialCreationOptions.h>
+#import <WebCore/PublicKeyCredentialRequestOptions.h>
</ins><span class="cx"> #import <WebCore/WebAuthenticationConstants.h>
</span><ins>+#import <wtf/BlockPtr.h>
</ins><span class="cx"> #import <wtf/RetainPtr.h>
</span><span class="cx"> 
</span><span class="cx"> @implementation _WKWebAuthenticationPanel {
</span><span class="lines">@@ -38,8 +57,19 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (instancetype)init
+{
+    if (!(self = [super init]))
+        return nil;
+
</ins><span class="cx"> #if ENABLE(WEB_AUTHN)
</span><ins>+    API::Object::constructInWrapper<API::WebAuthenticationPanel>(self);
+#endif
+    return self;
+}
</ins><span class="cx"> 
</span><ins>+#if ENABLE(WEB_AUTHN)
+
</ins><span class="cx"> - (void)dealloc
</span><span class="cx"> {
</span><span class="cx">     _panel->~WebAuthenticationPanel();
</span><span class="lines">@@ -136,6 +166,248 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_AUTHN)
</span><ins>+static Vector<uint8_t> vectorFromNSData(NSData* data)
+{
+    Vector<uint8_t> result;
+    result.append((const uint8_t*)data.bytes, data.length);
+    return result;
+}
+
+static WebCore::PublicKeyCredentialCreationOptions::RpEntity publicKeyCredentialRpEntity(_WKPublicKeyCredentialRelyingPartyEntity *rpEntity)
+{
+    WebCore::PublicKeyCredentialCreationOptions::RpEntity result;
+    result.name = rpEntity.name;
+    result.icon = rpEntity.icon;
+    result.id = rpEntity.identifier;
+
+    return result;
+}
+
+static WebCore::PublicKeyCredentialCreationOptions::UserEntity publicKeyCredentialUserEntity(_WKPublicKeyCredentialUserEntity *userEntity)
+{
+    WebCore::PublicKeyCredentialCreationOptions::UserEntity result;
+    result.name = userEntity.name;
+    result.icon = userEntity.icon;
+    result.idVector = vectorFromNSData(userEntity.identifier);
+    result.displayName = userEntity.displayName;
+
+    return result;
+}
+
+static Vector<WebCore::PublicKeyCredentialCreationOptions::Parameters> publicKeyCredentialParameters(NSArray<_WKPublicKeyCredentialParameters *> *publicKeyCredentialParamaters)
+{
+    Vector<WebCore::PublicKeyCredentialCreationOptions::Parameters> result;
+    result.reserveInitialCapacity(publicKeyCredentialParamaters.count);
+
+    for (_WKPublicKeyCredentialParameters *param : publicKeyCredentialParamaters)
+        result.uncheckedAppend({ WebCore::PublicKeyCredentialType::PublicKey, param.algorithm.longLongValue });
+
+    return result;
+}
+
+static WebCore::AuthenticatorTransport authenticatorTransport(_WKWebAuthenticationTransport transport)
+{
+    switch (transport) {
+    case _WKWebAuthenticationTransportUSB:
+        return WebCore::AuthenticatorTransport::Usb;
+    case _WKWebAuthenticationTransportNFC:
+        return WebCore::AuthenticatorTransport::Nfc;
+    case _WKWebAuthenticationTransportInternal:
+        return WebCore::AuthenticatorTransport::Internal;
+    default:
+        ASSERT_NOT_REACHED();
+        return WebCore::AuthenticatorTransport::Usb;
+    }
+}
+
+static Vector<WebCore::AuthenticatorTransport> authenticatorTransports(NSArray<NSNumber *> *transports)
+{
+    Vector<WebCore::AuthenticatorTransport> result;
+    result.reserveInitialCapacity(transports.count);
+
+    for (NSNumber *transport : transports)
+        result.uncheckedAppend(authenticatorTransport((_WKWebAuthenticationTransport)transport.intValue));
+
+    return result;
+}
+
+static Vector<WebCore::PublicKeyCredentialDescriptor> publicKeyCredentialDescriptors(NSArray<_WKPublicKeyCredentialDescriptor *> *credentials)
+{
+    Vector<WebCore::PublicKeyCredentialDescriptor> result;
+    result.reserveInitialCapacity(credentials.count);
+
+    for (_WKPublicKeyCredentialDescriptor *credential : credentials)
+        result.uncheckedAppend({ WebCore::PublicKeyCredentialType::PublicKey, { }, vectorFromNSData(credential.identifier), authenticatorTransports(credential.transports) });
+
+    return result;
+}
+
+static Optional<WebCore::PublicKeyCredentialCreationOptions::AuthenticatorAttachment> authenticatorAttachment(_WKAuthenticatorAttachment attachment)
+{
+    switch (attachment) {
+    case _WKAuthenticatorAttachmentAll:
+        return WTF::nullopt;
+    case _WKAuthenticatorAttachmentPlatform:
+        return WebCore::PublicKeyCredentialCreationOptions::AuthenticatorAttachment::Platform;
+    case _WKAuthenticatorAttachmentCrossPlatform:
+        return WebCore::PublicKeyCredentialCreationOptions::AuthenticatorAttachment::CrossPlatform;
+    default:
+        ASSERT_NOT_REACHED();
+        return WTF::nullopt;
+    }
+}
+
+static WebCore::UserVerificationRequirement userVerification(_WKUserVerificationRequirement uv)
+{
+    switch (uv) {
+    case _WKUserVerificationRequirementRequired:
+        return WebCore::UserVerificationRequirement::Required;
+    case _WKUserVerificationRequirementPreferred:
+        return WebCore::UserVerificationRequirement::Preferred;
+    case _WKUserVerificationRequirementDiscouraged:
+        return WebCore::UserVerificationRequirement::Discouraged;
+    default:
+        ASSERT_NOT_REACHED();
+        return WebCore::UserVerificationRequirement::Preferred;
+    }
+}
+
+static WebCore::PublicKeyCredentialCreationOptions::AuthenticatorSelectionCriteria authenticatorSelectionCriteria(_WKAuthenticatorSelectionCriteria *authenticatorSelection)
+{
+    WebCore::PublicKeyCredentialCreationOptions::AuthenticatorSelectionCriteria result;
+    result.authenticatorAttachment = authenticatorAttachment(authenticatorSelection.authenticatorAttachment);
+    result.requireResidentKey = authenticatorSelection.requireResidentKey;
+    result.userVerification = userVerification(authenticatorSelection.userVerification);
+
+    return result;
+}
+
+static WebCore::AttestationConveyancePreference attestationConveyancePreference(_WKAttestationConveyancePreference attestation)
+{
+    switch (attestation) {
+    case _WKAttestationConveyancePreferenceNone:
+        return WebCore::AttestationConveyancePreference::None;
+    case _WKAttestationConveyancePreferenceIndirect:
+        return WebCore::AttestationConveyancePreference::Indirect;
+    case _WKAttestationConveyancePreferenceDirect:
+        return WebCore::AttestationConveyancePreference::Direct;
+    default:
+        ASSERT_NOT_REACHED();
+        return WebCore::AttestationConveyancePreference::None;
+    }
+}
+
+static WebCore::AuthenticationExtensionsClientInputs authenticationExtensionsClientInputs(_WKAuthenticationExtensionsClientInputs *extensions)
+{
+    WebCore::AuthenticationExtensionsClientInputs result;
+    result.appid = extensions.appid;
+    result.googleLegacyAppidSupport = false;
+
+    return result;
+}
+#endif
+
++ (WebCore::PublicKeyCredentialCreationOptions)convertToCoreCreationOptionsWithOptions:(_WKPublicKeyCredentialCreationOptions *)options
+{
+    WebCore::PublicKeyCredentialCreationOptions result;
+
+#if ENABLE(WEB_AUTHN)
+    result.rp = publicKeyCredentialRpEntity(options.relyingParty);
+    result.user = publicKeyCredentialUserEntity(options.user);
+
+    result.pubKeyCredParams = publicKeyCredentialParameters(options.publicKeyCredentialParamaters);
+
+    if (options.timeout)
+        result.timeout = options.timeout.unsignedIntValue;
+    if (options.excludeCredentials)
+        result.excludeCredentials = publicKeyCredentialDescriptors(options.excludeCredentials);
+    if (options.authenticatorSelection)
+        result.authenticatorSelection = authenticatorSelectionCriteria(options.authenticatorSelection);
+    result.attestation = attestationConveyancePreference(options.attestation);
+    result.extensions = authenticationExtensionsClientInputs(options.extensions);
+#endif
+
+    return result;
+}
+
+#if ENABLE(WEB_AUTHN)
+static RetainPtr<_WKAuthenticatorAttestationResponse> wkAuthenticatorAttestationResponse(const WebCore::AuthenticatorResponseData& data)
+{
+    return adoptNS([[_WKAuthenticatorAttestationResponse alloc] initWithRawId:[NSData dataWithBytes:data.rawId->data() length:data.rawId->byteLength()] extensions:nil attestationObject:[NSData dataWithBytes:data.attestationObject->data() length:data.attestationObject->byteLength()]]);
+}
+#endif
+
+- (void)makeCredentialWithHash:(NSData *)hash options:(_WKPublicKeyCredentialCreationOptions *)options completionHandler:(void (^)(_WKAuthenticatorAttestationResponse *, NSError *))handler
+{
+#if ENABLE(WEB_AUTHN)
+    auto callback = [handler = makeBlockPtr(handler)] (Variant<Ref<WebCore::AuthenticatorResponse>, WebCore::ExceptionData>&& result) mutable {
+        WTF::switchOn(result, [&](const Ref<WebCore::AuthenticatorResponse>& response) {
+            handler(wkAuthenticatorAttestationResponse(response->data()).get(), nil);
+        }, [&](const WebCore::ExceptionData& exception) {
+            handler(nil, [NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:nil]);
+        });
+    };
+    _panel->handleRequest({ vectorFromNSData(hash), [_WKWebAuthenticationPanel convertToCoreCreationOptionsWithOptions:options], nullptr, WebKit::WebAuthenticationPanelResult::Unavailable, nullptr, WTF::nullopt, { }, true, String() }, WTFMove(callback));
+#endif
+}
+
++ (WebCore::PublicKeyCredentialRequestOptions)convertToCoreRequestOptionsWithOptions:(_WKPublicKeyCredentialRequestOptions *)options
+{
+    WebCore::PublicKeyCredentialRequestOptions result;
+
+#if ENABLE(WEB_AUTHN)
+    if (options.timeout)
+        result.timeout = options.timeout.unsignedIntValue;
+    if (options.relyingPartyIdentifier)
+        result.rpId = options.relyingPartyIdentifier;
+    if (options.allowCredentials)
+        result.allowCredentials = publicKeyCredentialDescriptors(options.allowCredentials);
+    result.userVerification = userVerification(options.userVerification);
+    result.extensions = authenticationExtensionsClientInputs(options.extensions);
+#endif
+
+    return result;
+}
+
+#if ENABLE(WEB_AUTHN)
+static RetainPtr<_WKAuthenticatorAssertionResponse> wkAuthenticatorAssertionResponse(const WebCore::AuthenticatorResponseData& data)
+{
+    RetainPtr<_WKAuthenticationExtensionsClientOutputs> extensions;
+    if (data.appid)
+        extensions = adoptNS([[_WKAuthenticationExtensionsClientOutputs alloc] initWithAppid:data.appid.value()]);
+
+    NSData *userHandle = nil;
+    if (data.userHandle)
+        userHandle = [NSData dataWithBytes:data.userHandle->data() length:data.userHandle->byteLength()];
+
+    return adoptNS([[_WKAuthenticatorAssertionResponse alloc] initWithRawId:[NSData dataWithBytes:data.rawId->data() length:data.rawId->byteLength()] extensions:WTFMove(extensions) authenticatorData:[NSData dataWithBytes:data.authenticatorData->data() length:data.authenticatorData->byteLength()] signature:[NSData dataWithBytes:data.signature->data() length:data.signature->byteLength()] userHandle:userHandle]);
+}
+#endif
+
+- (void)getAssertionWithHash:(NSData *)hash options:(_WKPublicKeyCredentialRequestOptions *)options completionHandler:(void (^)(_WKAuthenticatorAssertionResponse *, NSError *))handler
+{
+#if ENABLE(WEB_AUTHN)
+    auto callback = [handler = makeBlockPtr(handler)] (Variant<Ref<WebCore::AuthenticatorResponse>, WebCore::ExceptionData>&& result) mutable {
+        WTF::switchOn(result, [&](const Ref<WebCore::AuthenticatorResponse>& response) {
+            handler(wkAuthenticatorAssertionResponse(response->data()).get(), nil);
+        }, [&](const WebCore::ExceptionData& exception) {
+            handler(nil, [NSError errorWithDomain:WKErrorDomain code:WKErrorUnknown userInfo:nil]);
+        });
+    };
+    _panel->handleRequest({ vectorFromNSData(hash), [_WKWebAuthenticationPanel convertToCoreRequestOptionsWithOptions:options], nullptr, WebKit::WebAuthenticationPanelResult::Unavailable, nullptr, WTF::nullopt, { }, true, String() }, WTFMove(callback));
+#endif
+}
+
++ (BOOL)isUserVerifyingPlatformAuthenticatorAvailable
+{
+#if ENABLE(WEB_AUTHN)
+    return WebKit::LocalService::isAvailable();
+#else
+    return NO;
+#endif
+}
+
+#if ENABLE(WEB_AUTHN)
</ins><span class="cx"> #pragma mark WKObject protocol implementation
</span><span class="cx"> 
</span><span class="cx"> - (API::Object&)_apiObject
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessAPICocoa_WKWebAuthenticationPanelForTestinghfromrev270141trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanelForTesting.h (from rev 270141, trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h) (0 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanelForTesting.h                            (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanelForTesting.h       2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -0,0 +1,42 @@
</span><ins>+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#import "_WKWebAuthenticationPanel.h"
+
+namespace WebCore {
+struct PublicKeyCredentialCreationOptions;
+struct PublicKeyCredentialRequestOptions;
+}
+
+WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
+@interface _WKWebAuthenticationPanel (WKTesting)
+
+// FIXME: <rdar://problem/71509714> Introduces mock testing.
++ (WebCore::PublicKeyCredentialCreationOptions)convertToCoreCreationOptionsWithOptions:(_WKPublicKeyCredentialCreationOptions *)options WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
++ (WebCore::PublicKeyCredentialRequestOptions)convertToCoreRequestOptionsWithOptions:(_WKPublicKeyCredentialRequestOptions *)options WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
+@end
</ins></span></pre></div>
<a id="trunkSourceWebKitUIProcessWebAuthenticationWebAuthenticationRequestDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h   2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthenticationRequestData.h      2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -45,11 +45,14 @@
</span><span class="cx"> struct WebAuthenticationRequestData {
</span><span class="cx">     Vector<uint8_t> hash;
</span><span class="cx">     Variant<WebCore::PublicKeyCredentialCreationOptions, WebCore::PublicKeyCredentialRequestOptions> options;
</span><ins>+
+    // FIXME<rdar://problem/71509848>: Remove the following deprecated fields.
</ins><span class="cx">     WeakPtr<WebPageProxy> page;
</span><span class="cx">     WebAuthenticationPanelResult panelResult { WebAuthenticationPanelResult::Unavailable };
</span><span class="cx">     RefPtr<API::WebAuthenticationPanel> panel;
</span><span class="cx">     WTF::Optional<WebCore::GlobalFrameIdentifier> frameID;
</span><span class="cx">     WebKit::FrameInfoData frameInfo;
</span><ins>+
</ins><span class="cx">     bool processingUserGesture;
</span><span class="cx">     String cachedPin; // Only used to improve NFC Client PIN experience.
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebKitWebKitxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj     2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj        2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -1133,6 +1133,38 @@
</span><span class="cx">          577FF7822346E81C004EDFB9 /* APIWebAuthenticationPanelClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 577FF7812346E81C004EDFB9 /* APIWebAuthenticationPanelClient.h */; };
</span><span class="cx">          577FF7852346ECAA004EDFB9 /* WebAuthenticationPanelClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 577FF7832346ECAA004EDFB9 /* WebAuthenticationPanelClient.h */; };
</span><span class="cx">          578DC2982155A0020074E815 /* LocalAuthenticationSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 578DC2972155A0010074E815 /* LocalAuthenticationSoftLink.h */; };
</span><ins>+               5790A6532565DED30077C5A7 /* _WKWebAuthenticationPanelForTesting.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A6512565DE6A0077C5A7 /* _WKWebAuthenticationPanelForTesting.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A656256799DA0077C5A7 /* _WKPublicKeyCredentialEntity.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A654256799DA0077C5A7 /* _WKPublicKeyCredentialEntity.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A657256799DA0077C5A7 /* _WKPublicKeyCredentialEntity.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A655256799DA0077C5A7 /* _WKPublicKeyCredentialEntity.mm */; };
+               5790A65A25679B260077C5A7 /* _WKPublicKeyCredentialRelyingPartyEntity.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A65825679B260077C5A7 /* _WKPublicKeyCredentialRelyingPartyEntity.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A65B25679B260077C5A7 /* _WKPublicKeyCredentialRelyingPartyEntity.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A65925679B260077C5A7 /* _WKPublicKeyCredentialRelyingPartyEntity.mm */; };
+               5790A65E25679C110077C5A7 /* _WKPublicKeyCredentialUserEntity.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A65C25679C110077C5A7 /* _WKPublicKeyCredentialUserEntity.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A65F25679C110077C5A7 /* _WKPublicKeyCredentialUserEntity.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A65D25679C110077C5A7 /* _WKPublicKeyCredentialUserEntity.mm */; };
+               5790A66225679C860077C5A7 /* _WKPublicKeyCredentialParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A66025679C860077C5A7 /* _WKPublicKeyCredentialParameters.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A66325679C860077C5A7 /* _WKPublicKeyCredentialParameters.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A66125679C860077C5A7 /* _WKPublicKeyCredentialParameters.mm */; };
+               5790A66625679CEA0077C5A7 /* _WKAuthenticatorSelectionCriteria.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A66425679CEA0077C5A7 /* _WKAuthenticatorSelectionCriteria.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A66725679CEA0077C5A7 /* _WKAuthenticatorSelectionCriteria.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A66525679CEA0077C5A7 /* _WKAuthenticatorSelectionCriteria.mm */; };
+               5790A66925679E000077C5A7 /* _WKUserVerificationRequirement.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A66825679E000077C5A7 /* _WKUserVerificationRequirement.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A66C25679EB70077C5A7 /* _WKPublicKeyCredentialDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A66A25679EB70077C5A7 /* _WKPublicKeyCredentialDescriptor.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A66D25679EB70077C5A7 /* _WKPublicKeyCredentialDescriptor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A66B25679EB70077C5A7 /* _WKPublicKeyCredentialDescriptor.mm */; };
+               5790A67025679F1A0077C5A7 /* _WKAuthenticationExtensionsClientInputs.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A66E25679F1A0077C5A7 /* _WKAuthenticationExtensionsClientInputs.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A67125679F1A0077C5A7 /* _WKAuthenticationExtensionsClientInputs.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A66F25679F1A0077C5A7 /* _WKAuthenticationExtensionsClientInputs.mm */; };
+               5790A67425679F740077C5A7 /* _WKPublicKeyCredentialCreationOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A67225679F740077C5A7 /* _WKPublicKeyCredentialCreationOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A67525679F740077C5A7 /* _WKPublicKeyCredentialCreationOptions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A67325679F740077C5A7 /* _WKPublicKeyCredentialCreationOptions.mm */; };
+               5790A6782567A0CD0077C5A7 /* _WKPublicKeyCredentialRequestOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A6762567A0CD0077C5A7 /* _WKPublicKeyCredentialRequestOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A6792567A0CD0077C5A7 /* _WKPublicKeyCredentialRequestOptions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A6772567A0CD0077C5A7 /* _WKPublicKeyCredentialRequestOptions.mm */; };
+               5790A67C2567A13E0077C5A7 /* _WKAuthenticationExtensionsClientOutputs.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A67A2567A13E0077C5A7 /* _WKAuthenticationExtensionsClientOutputs.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A67D2567A13E0077C5A7 /* _WKAuthenticationExtensionsClientOutputs.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A67B2567A13E0077C5A7 /* _WKAuthenticationExtensionsClientOutputs.mm */; };
+               5790A6802567A1AC0077C5A7 /* _WKAuthenticatorResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A67E2567A1AC0077C5A7 /* _WKAuthenticatorResponse.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A6812567A1AC0077C5A7 /* _WKAuthenticatorResponse.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A67F2567A1AC0077C5A7 /* _WKAuthenticatorResponse.mm */; };
+               5790A6842567A21E0077C5A7 /* _WKAuthenticatorAttestationResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A6822567A21E0077C5A7 /* _WKAuthenticatorAttestationResponse.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A6852567A21E0077C5A7 /* _WKAuthenticatorAttestationResponse.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A6832567A21E0077C5A7 /* _WKAuthenticatorAttestationResponse.mm */; };
+               5790A6882567A28A0077C5A7 /* _WKAuthenticatorAssertionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A6862567A28A0077C5A7 /* _WKAuthenticatorAssertionResponse.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               5790A6892567A28A0077C5A7 /* _WKAuthenticatorAssertionResponse.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5790A6872567A28A0077C5A7 /* _WKAuthenticatorAssertionResponse.mm */; };
+               5790A68B2567A4CC0077C5A7 /* _WKAuthenticatorResponseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A68A2567A4CC0077C5A7 /* _WKAuthenticatorResponseInternal.h */; };
+               5790A68D2567B4490077C5A7 /* _WKAuthenticatorAttestationResponseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A68C2567B4490077C5A7 /* _WKAuthenticatorAttestationResponseInternal.h */; };
+               5790A68F2567B4CF0077C5A7 /* _WKAuthenticatorAssertionResponseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A68E2567B4CF0077C5A7 /* _WKAuthenticatorAssertionResponseInternal.h */; };
+               5790A6912567B5E00077C5A7 /* _WKAuthenticationExtensionsClientOutputsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5790A6902567B5E00077C5A7 /* _WKAuthenticationExtensionsClientOutputsInternal.h */; };
</ins><span class="cx">           579F1BF623C80DB600C7D4B4 /* _WKWebAuthenticationAssertionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 579F1BF423C80DB600C7D4B4 /* _WKWebAuthenticationAssertionResponse.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">          579F1BF923C80EC600C7D4B4 /* _WKWebAuthenticationAssertionResponseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 579F1BF823C80EC600C7D4B4 /* _WKWebAuthenticationAssertionResponseInternal.h */; };
</span><span class="cx">          579F1BFC23C811CF00C7D4B4 /* APIWebAuthenticationAssertionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 579F1BFA23C811CF00C7D4B4 /* APIWebAuthenticationAssertionResponse.h */; };
</span><span class="lines">@@ -4013,6 +4045,38 @@
</span><span class="cx">          577FF7832346ECAA004EDFB9 /* WebAuthenticationPanelClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebAuthenticationPanelClient.h; sourceTree = "<group>"; };
</span><span class="cx">          577FF7842346ECAA004EDFB9 /* WebAuthenticationPanelClient.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WebAuthenticationPanelClient.mm; sourceTree = "<group>"; };
</span><span class="cx">          578DC2972155A0010074E815 /* LocalAuthenticationSoftLink.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LocalAuthenticationSoftLink.h; sourceTree = "<group>"; };
</span><ins>+               5790A6512565DE6A0077C5A7 /* _WKWebAuthenticationPanelForTesting.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKWebAuthenticationPanelForTesting.h; sourceTree = "<group>"; };
+               5790A654256799DA0077C5A7 /* _WKPublicKeyCredentialEntity.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKPublicKeyCredentialEntity.h; sourceTree = "<group>"; };
+               5790A655256799DA0077C5A7 /* _WKPublicKeyCredentialEntity.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKPublicKeyCredentialEntity.mm; sourceTree = "<group>"; };
+               5790A65825679B260077C5A7 /* _WKPublicKeyCredentialRelyingPartyEntity.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKPublicKeyCredentialRelyingPartyEntity.h; sourceTree = "<group>"; };
+               5790A65925679B260077C5A7 /* _WKPublicKeyCredentialRelyingPartyEntity.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKPublicKeyCredentialRelyingPartyEntity.mm; sourceTree = "<group>"; };
+               5790A65C25679C110077C5A7 /* _WKPublicKeyCredentialUserEntity.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKPublicKeyCredentialUserEntity.h; sourceTree = "<group>"; };
+               5790A65D25679C110077C5A7 /* _WKPublicKeyCredentialUserEntity.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKPublicKeyCredentialUserEntity.mm; sourceTree = "<group>"; };
+               5790A66025679C860077C5A7 /* _WKPublicKeyCredentialParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKPublicKeyCredentialParameters.h; sourceTree = "<group>"; };
+               5790A66125679C860077C5A7 /* _WKPublicKeyCredentialParameters.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKPublicKeyCredentialParameters.mm; sourceTree = "<group>"; };
+               5790A66425679CEA0077C5A7 /* _WKAuthenticatorSelectionCriteria.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKAuthenticatorSelectionCriteria.h; sourceTree = "<group>"; };
+               5790A66525679CEA0077C5A7 /* _WKAuthenticatorSelectionCriteria.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKAuthenticatorSelectionCriteria.mm; sourceTree = "<group>"; };
+               5790A66825679E000077C5A7 /* _WKUserVerificationRequirement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKUserVerificationRequirement.h; sourceTree = "<group>"; };
+               5790A66A25679EB70077C5A7 /* _WKPublicKeyCredentialDescriptor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKPublicKeyCredentialDescriptor.h; sourceTree = "<group>"; };
+               5790A66B25679EB70077C5A7 /* _WKPublicKeyCredentialDescriptor.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKPublicKeyCredentialDescriptor.mm; sourceTree = "<group>"; };
+               5790A66E25679F1A0077C5A7 /* _WKAuthenticationExtensionsClientInputs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKAuthenticationExtensionsClientInputs.h; sourceTree = "<group>"; };
+               5790A66F25679F1A0077C5A7 /* _WKAuthenticationExtensionsClientInputs.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKAuthenticationExtensionsClientInputs.mm; sourceTree = "<group>"; };
+               5790A67225679F740077C5A7 /* _WKPublicKeyCredentialCreationOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKPublicKeyCredentialCreationOptions.h; sourceTree = "<group>"; };
+               5790A67325679F740077C5A7 /* _WKPublicKeyCredentialCreationOptions.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKPublicKeyCredentialCreationOptions.mm; sourceTree = "<group>"; };
+               5790A6762567A0CD0077C5A7 /* _WKPublicKeyCredentialRequestOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKPublicKeyCredentialRequestOptions.h; sourceTree = "<group>"; };
+               5790A6772567A0CD0077C5A7 /* _WKPublicKeyCredentialRequestOptions.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKPublicKeyCredentialRequestOptions.mm; sourceTree = "<group>"; };
+               5790A67A2567A13E0077C5A7 /* _WKAuthenticationExtensionsClientOutputs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKAuthenticationExtensionsClientOutputs.h; sourceTree = "<group>"; };
+               5790A67B2567A13E0077C5A7 /* _WKAuthenticationExtensionsClientOutputs.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKAuthenticationExtensionsClientOutputs.mm; sourceTree = "<group>"; };
+               5790A67E2567A1AC0077C5A7 /* _WKAuthenticatorResponse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKAuthenticatorResponse.h; sourceTree = "<group>"; };
+               5790A67F2567A1AC0077C5A7 /* _WKAuthenticatorResponse.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKAuthenticatorResponse.mm; sourceTree = "<group>"; };
+               5790A6822567A21E0077C5A7 /* _WKAuthenticatorAttestationResponse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKAuthenticatorAttestationResponse.h; sourceTree = "<group>"; };
+               5790A6832567A21E0077C5A7 /* _WKAuthenticatorAttestationResponse.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKAuthenticatorAttestationResponse.mm; sourceTree = "<group>"; };
+               5790A6862567A28A0077C5A7 /* _WKAuthenticatorAssertionResponse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKAuthenticatorAssertionResponse.h; sourceTree = "<group>"; };
+               5790A6872567A28A0077C5A7 /* _WKAuthenticatorAssertionResponse.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKAuthenticatorAssertionResponse.mm; sourceTree = "<group>"; };
+               5790A68A2567A4CC0077C5A7 /* _WKAuthenticatorResponseInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKAuthenticatorResponseInternal.h; sourceTree = "<group>"; };
+               5790A68C2567B4490077C5A7 /* _WKAuthenticatorAttestationResponseInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKAuthenticatorAttestationResponseInternal.h; sourceTree = "<group>"; };
+               5790A68E2567B4CF0077C5A7 /* _WKAuthenticatorAssertionResponseInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKAuthenticatorAssertionResponseInternal.h; sourceTree = "<group>"; };
+               5790A6902567B5E00077C5A7 /* _WKAuthenticationExtensionsClientOutputsInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKAuthenticationExtensionsClientOutputsInternal.h; sourceTree = "<group>"; };
</ins><span class="cx">           579F1BF423C80DB600C7D4B4 /* _WKWebAuthenticationAssertionResponse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKWebAuthenticationAssertionResponse.h; sourceTree = "<group>"; };
</span><span class="cx">          579F1BF523C80DB600C7D4B4 /* _WKWebAuthenticationAssertionResponse.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKWebAuthenticationAssertionResponse.mm; sourceTree = "<group>"; };
</span><span class="cx">          579F1BF823C80EC600C7D4B4 /* _WKWebAuthenticationAssertionResponseInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKWebAuthenticationAssertionResponseInternal.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -7373,6 +7437,22 @@
</span><span class="cx">                          F44291911FA59107002CC93E /* _WKAttachment.h */,
</span><span class="cx">                          F44291931FA59311002CC93E /* _WKAttachment.mm */,
</span><span class="cx">                          F44291951FA5942A002CC93E /* _WKAttachmentInternal.h */,
</span><ins>+                               5790A66E25679F1A0077C5A7 /* _WKAuthenticationExtensionsClientInputs.h */,
+                               5790A66F25679F1A0077C5A7 /* _WKAuthenticationExtensionsClientInputs.mm */,
+                               5790A67A2567A13E0077C5A7 /* _WKAuthenticationExtensionsClientOutputs.h */,
+                               5790A67B2567A13E0077C5A7 /* _WKAuthenticationExtensionsClientOutputs.mm */,
+                               5790A6902567B5E00077C5A7 /* _WKAuthenticationExtensionsClientOutputsInternal.h */,
+                               5790A6862567A28A0077C5A7 /* _WKAuthenticatorAssertionResponse.h */,
+                               5790A6872567A28A0077C5A7 /* _WKAuthenticatorAssertionResponse.mm */,
+                               5790A68E2567B4CF0077C5A7 /* _WKAuthenticatorAssertionResponseInternal.h */,
+                               5790A6822567A21E0077C5A7 /* _WKAuthenticatorAttestationResponse.h */,
+                               5790A6832567A21E0077C5A7 /* _WKAuthenticatorAttestationResponse.mm */,
+                               5790A68C2567B4490077C5A7 /* _WKAuthenticatorAttestationResponseInternal.h */,
+                               5790A67E2567A1AC0077C5A7 /* _WKAuthenticatorResponse.h */,
+                               5790A67F2567A1AC0077C5A7 /* _WKAuthenticatorResponse.mm */,
+                               5790A68A2567A4CC0077C5A7 /* _WKAuthenticatorResponseInternal.h */,
+                               5790A66425679CEA0077C5A7 /* _WKAuthenticatorSelectionCriteria.h */,
+                               5790A66525679CEA0077C5A7 /* _WKAuthenticatorSelectionCriteria.mm */,
</ins><span class="cx">                           99E714C11C1249E600665B3A /* _WKAutomationDelegate.h */,
</span><span class="cx">                          990D28A71C6404B000986977 /* _WKAutomationSession.h */,
</span><span class="cx">                          990D28AD1C65190400986977 /* _WKAutomationSession.mm */,
</span><span class="lines">@@ -7445,6 +7525,20 @@
</span><span class="cx">                          1A43E828188F3CDC009E4D30 /* _WKProcessPoolConfiguration.h */,
</span><span class="cx">                          1A43E827188F3CDC009E4D30 /* _WKProcessPoolConfiguration.mm */,
</span><span class="cx">                          7C89D2D61A6C6BE6003A5FDE /* _WKProcessPoolConfigurationInternal.h */,
</span><ins>+                               5790A67225679F740077C5A7 /* _WKPublicKeyCredentialCreationOptions.h */,
+                               5790A67325679F740077C5A7 /* _WKPublicKeyCredentialCreationOptions.mm */,
+                               5790A66A25679EB70077C5A7 /* _WKPublicKeyCredentialDescriptor.h */,
+                               5790A66B25679EB70077C5A7 /* _WKPublicKeyCredentialDescriptor.mm */,
+                               5790A654256799DA0077C5A7 /* _WKPublicKeyCredentialEntity.h */,
+                               5790A655256799DA0077C5A7 /* _WKPublicKeyCredentialEntity.mm */,
+                               5790A66025679C860077C5A7 /* _WKPublicKeyCredentialParameters.h */,
+                               5790A66125679C860077C5A7 /* _WKPublicKeyCredentialParameters.mm */,
+                               5790A65825679B260077C5A7 /* _WKPublicKeyCredentialRelyingPartyEntity.h */,
+                               5790A65925679B260077C5A7 /* _WKPublicKeyCredentialRelyingPartyEntity.mm */,
+                               5790A6762567A0CD0077C5A7 /* _WKPublicKeyCredentialRequestOptions.h */,
+                               5790A6772567A0CD0077C5A7 /* _WKPublicKeyCredentialRequestOptions.mm */,
+                               5790A65C25679C110077C5A7 /* _WKPublicKeyCredentialUserEntity.h */,
+                               5790A65D25679C110077C5A7 /* _WKPublicKeyCredentialUserEntity.mm */,
</ins><span class="cx">                           A55BA80C1BA12BE1007CD33D /* _WKRemoteWebInspectorViewController.h */,
</span><span class="cx">                          A55BA80D1BA12BE1007CD33D /* _WKRemoteWebInspectorViewController.mm */,
</span><span class="cx">                          990E1E082384A88B004602DF /* _WKRemoteWebInspectorViewControllerPrivate.h */,
</span><span class="lines">@@ -7493,6 +7587,7 @@
</span><span class="cx">                          2D87861B1BDB54BF00D02ABB /* _WKUserStyleSheet.h */,
</span><span class="cx">                          2D87861C1BDB54BF00D02ABB /* _WKUserStyleSheet.mm */,
</span><span class="cx">                          2D87861F1BDB57F500D02ABB /* _WKUserStyleSheetInternal.h */,
</span><ins>+                               5790A66825679E000077C5A7 /* _WKUserVerificationRequirement.h */,
</ins><span class="cx">                           1A81B37F18BD66AD0007FDAC /* _WKVisitedLinkStore.h */,
</span><span class="cx">                          1A81B37E18BD66AD0007FDAC /* _WKVisitedLinkStore.mm */,
</span><span class="cx">                          1A81B38418BD673A0007FDAC /* _WKVisitedLinkStoreInternal.h */,
</span><span class="lines">@@ -7501,6 +7596,7 @@
</span><span class="cx">                          579F1BF823C80EC600C7D4B4 /* _WKWebAuthenticationAssertionResponseInternal.h */,
</span><span class="cx">                          574728CF23456E98001700AF /* _WKWebAuthenticationPanel.h */,
</span><span class="cx">                          574728D023456E98001700AF /* _WKWebAuthenticationPanel.mm */,
</span><ins>+                               5790A6512565DE6A0077C5A7 /* _WKWebAuthenticationPanelForTesting.h */,
</ins><span class="cx">                           574728D3234570AE001700AF /* _WKWebAuthenticationPanelInternal.h */,
</span><span class="cx">                          1AE286761C7E76510069AC4F /* _WKWebsiteDataSize.h */,
</span><span class="cx">                          1AE286751C7E76510069AC4F /* _WKWebsiteDataSize.mm */,
</span><span class="lines">@@ -10847,6 +10943,16 @@
</span><span class="cx">                          63108F991F9671F700A0DB84 /* _WKApplicationManifestInternal.h in Headers */,
</span><span class="cx">                          F44291921FA591C9002CC93E /* _WKAttachment.h in Headers */,
</span><span class="cx">                          F44291961FA5942A002CC93E /* _WKAttachmentInternal.h in Headers */,
</span><ins>+                               5790A67025679F1A0077C5A7 /* _WKAuthenticationExtensionsClientInputs.h in Headers */,
+                               5790A67C2567A13E0077C5A7 /* _WKAuthenticationExtensionsClientOutputs.h in Headers */,
+                               5790A6912567B5E00077C5A7 /* _WKAuthenticationExtensionsClientOutputsInternal.h in Headers */,
+                               5790A6882567A28A0077C5A7 /* _WKAuthenticatorAssertionResponse.h in Headers */,
+                               5790A68F2567B4CF0077C5A7 /* _WKAuthenticatorAssertionResponseInternal.h in Headers */,
+                               5790A6842567A21E0077C5A7 /* _WKAuthenticatorAttestationResponse.h in Headers */,
+                               5790A68D2567B4490077C5A7 /* _WKAuthenticatorAttestationResponseInternal.h in Headers */,
+                               5790A6802567A1AC0077C5A7 /* _WKAuthenticatorResponse.h in Headers */,
+                               5790A68B2567A4CC0077C5A7 /* _WKAuthenticatorResponseInternal.h in Headers */,
+                               5790A66625679CEA0077C5A7 /* _WKAuthenticatorSelectionCriteria.h in Headers */,
</ins><span class="cx">                           99E714C51C124A0400665B3A /* _WKAutomationDelegate.h in Headers */,
</span><span class="cx">                          990D28AB1C6420C600986977 /* _WKAutomationSession.h in Headers */,
</span><span class="cx">                          99788ACB1F421DDA00C08000 /* _WKAutomationSessionConfiguration.h in Headers */,
</span><span class="lines">@@ -10903,6 +11009,13 @@
</span><span class="cx">                          9323611E1B015DA800FA9232 /* _WKOverlayScrollbarStyle.h in Headers */,
</span><span class="cx">                          1A43E82A188F3CDC009E4D30 /* _WKProcessPoolConfiguration.h in Headers */,
</span><span class="cx">                          7C89D2D71A6C6BE6003A5FDE /* _WKProcessPoolConfigurationInternal.h in Headers */,
</span><ins>+                               5790A67425679F740077C5A7 /* _WKPublicKeyCredentialCreationOptions.h in Headers */,
+                               5790A66C25679EB70077C5A7 /* _WKPublicKeyCredentialDescriptor.h in Headers */,
+                               5790A656256799DA0077C5A7 /* _WKPublicKeyCredentialEntity.h in Headers */,
+                               5790A66225679C860077C5A7 /* _WKPublicKeyCredentialParameters.h in Headers */,
+                               5790A6782567A0CD0077C5A7 /* _WKPublicKeyCredentialRequestOptions.h in Headers */,
+                               5790A65A25679B260077C5A7 /* _WKPublicKeyCredentialRelyingPartyEntity.h in Headers */,
+                               5790A65E25679C110077C5A7 /* _WKPublicKeyCredentialUserEntity.h in Headers */,
</ins><span class="cx">                           1A9E328D182165A900F5D04C /* _WKRemoteObjectInterface.h in Headers */,
</span><span class="cx">                          1AABFE3A1829C1ED005B070E /* _WKRemoteObjectInterfaceInternal.h in Headers */,
</span><span class="cx">                          1A9E32891821636900F5D04C /* _WKRemoteObjectRegistry.h in Headers */,
</span><span class="lines">@@ -10943,11 +11056,13 @@
</span><span class="cx">                          7CB365AD1D31DC10007158CA /* _WKUserInitiatedActionInternal.h in Headers */,
</span><span class="cx">                          2D87861D1BDB54BF00D02ABB /* _WKUserStyleSheet.h in Headers */,
</span><span class="cx">                          2D8786201BDB57F500D02ABB /* _WKUserStyleSheetInternal.h in Headers */,
</span><ins>+                               5790A66925679E000077C5A7 /* _WKUserVerificationRequirement.h in Headers */,
</ins><span class="cx">                           1A81B38118BD66AD0007FDAC /* _WKVisitedLinkStore.h in Headers */,
</span><span class="cx">                          1A81B38518BD673A0007FDAC /* _WKVisitedLinkStoreInternal.h in Headers */,
</span><span class="cx">                          579F1BF623C80DB600C7D4B4 /* _WKWebAuthenticationAssertionResponse.h in Headers */,
</span><span class="cx">                          579F1BF923C80EC600C7D4B4 /* _WKWebAuthenticationAssertionResponseInternal.h in Headers */,
</span><span class="cx">                          574728D123456E98001700AF /* _WKWebAuthenticationPanel.h in Headers */,
</span><ins>+                               5790A6532565DED30077C5A7 /* _WKWebAuthenticationPanelForTesting.h in Headers */,
</ins><span class="cx">                           574728D4234570AE001700AF /* _WKWebAuthenticationPanelInternal.h in Headers */,
</span><span class="cx">                          1AE286781C7E76510069AC4F /* _WKWebsiteDataSize.h in Headers */,
</span><span class="cx">                          1AE286801C7F92C00069AC4F /* _WKWebsiteDataSizeInternal.h in Headers */,
</span><span class="lines">@@ -13080,7 +13195,20 @@
</span><span class="cx">                  isa = PBXSourcesBuildPhase;
</span><span class="cx">                  buildActionMask = 2147483647;
</span><span class="cx">                  files = (
</span><ins>+                               5790A67125679F1A0077C5A7 /* _WKAuthenticationExtensionsClientInputs.mm in Sources */,
+                               5790A67D2567A13E0077C5A7 /* _WKAuthenticationExtensionsClientOutputs.mm in Sources */,
+                               5790A6892567A28A0077C5A7 /* _WKAuthenticatorAssertionResponse.mm in Sources */,
+                               5790A6852567A21E0077C5A7 /* _WKAuthenticatorAttestationResponse.mm in Sources */,
+                               5790A6812567A1AC0077C5A7 /* _WKAuthenticatorResponse.mm in Sources */,
+                               5790A66725679CEA0077C5A7 /* _WKAuthenticatorSelectionCriteria.mm in Sources */,
</ins><span class="cx">                           5CBD595C2280EDF4002B22AA /* _WKCustomHeaderFields.mm in Sources */,
</span><ins>+                               5790A67525679F740077C5A7 /* _WKPublicKeyCredentialCreationOptions.mm in Sources */,
+                               5790A66D25679EB70077C5A7 /* _WKPublicKeyCredentialDescriptor.mm in Sources */,
+                               5790A657256799DA0077C5A7 /* _WKPublicKeyCredentialEntity.mm in Sources */,
+                               5790A66325679C860077C5A7 /* _WKPublicKeyCredentialParameters.mm in Sources */,
+                               5790A6792567A0CD0077C5A7 /* _WKPublicKeyCredentialRequestOptions.mm in Sources */,
+                               5790A65B25679B260077C5A7 /* _WKPublicKeyCredentialRelyingPartyEntity.mm in Sources */,
+                               5790A65F25679C110077C5A7 /* _WKPublicKeyCredentialUserEntity.mm in Sources */,
</ins><span class="cx">                           49FBEFFD239B011D00BD032F /* _WKResourceLoadStatisticsFirstParty.mm in Sources */,
</span><span class="cx">                          49FBEFFF239B012F00BD032F /* _WKResourceLoadStatisticsThirdParty.mm in Sources */,
</span><span class="cx">                          99E7189A21F79D9E0055E975 /* _WKTouchEventGenerator.mm in Sources */,
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog    2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Tools/ChangeLog       2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2020-11-21  Jiewen Tan  <jiewen_tan@apple.com>
+
+        [WebAuthn] Implement SPI for AuthenticationServices.Framework
+        https://bugs.webkit.org/show_bug.cgi?id=218893
+        <rdar://problem/71364731>
+
+        Reviewed by Alex Christensen.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm:
+        (TestWebKitAPI::TEST):
+        (): Deleted.
+
</ins><span class="cx"> 2020-11-20  Kate Cheney  <katherine_cheney@apple.com>
</span><span class="cx"> 
</span><span class="cx">         PCM: Persist pending ad clicks and attributions so they can survive browser restart
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKitCocoa_WKWebAuthenticationPanelmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm (270141 => 270142)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm 2020-11-21 01:45:54 UTC (rev 270141)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/_WKWebAuthenticationPanel.mm    2020-11-21 08:11:34 UTC (rev 270142)
</span><span class="lines">@@ -33,11 +33,25 @@
</span><span class="cx"> #import "TestWKWebView.h"
</span><span class="cx"> #import "WKWebViewConfigurationExtras.h"
</span><span class="cx"> #import <LocalAuthentication/LocalAuthentication.h>
</span><ins>+#import <WebCore/PublicKeyCredentialCreationOptions.h>
+#import <WebCore/PublicKeyCredentialRequestOptions.h>
</ins><span class="cx"> #import <WebKit/WKPreferencesPrivate.h>
</span><span class="cx"> #import <WebKit/WKUIDelegatePrivate.h>
</span><ins>+#import <WebKit/_WKAuthenticationExtensionsClientInputs.h>
+#import <WebKit/_WKAuthenticationExtensionsClientOutputs.h>
+#import <WebKit/_WKAuthenticatorAssertionResponse.h>
+#import <WebKit/_WKAuthenticatorAttestationResponse.h>
+#import <WebKit/_WKAuthenticatorSelectionCriteria.h>
</ins><span class="cx"> #import <WebKit/_WKExperimentalFeature.h>
</span><ins>+#import <WebKit/_WKPublicKeyCredentialCreationOptions.h>
+#import <WebKit/_WKPublicKeyCredentialDescriptor.h>
+#import <WebKit/_WKPublicKeyCredentialParameters.h>
+#import <WebKit/_WKPublicKeyCredentialRequestOptions.h>
+#import <WebKit/_WKPublicKeyCredentialRelyingPartyEntity.h>
+#import <WebKit/_WKPublicKeyCredentialUserEntity.h>
</ins><span class="cx"> #import <WebKit/_WKWebAuthenticationAssertionResponse.h>
</span><span class="cx"> #import <WebKit/_WKWebAuthenticationPanel.h>
</span><ins>+#import <WebKit/_WKWebAuthenticationPanelForTesting.h>
</ins><span class="cx"> #import <wtf/BlockPtr.h>
</span><span class="cx"> #import <wtf/RandomNumber.h>
</span><span class="cx"> #import <wtf/spi/cocoa/SecuritySPI.h>
</span><span class="lines">@@ -237,6 +251,7 @@
</span><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> namespace TestWebKitAPI {
</span><ins>+using namespace WebCore;
</ins><span class="cx"> 
</span><span class="cx"> namespace {
</span><span class="cx"> 
</span><span class="lines">@@ -1432,6 +1447,358 @@
</span><span class="cx"> 
</span><span class="cx"> #endif // USE(APPLE_INTERNAL_SDK) || PLATFORM(IOS)
</span><span class="cx"> 
</span><ins>+TEST(WebAuthenticationPanel, PublicKeyCredentialCreationOptionsMinimun)
+{
+    uint8_t identifier[] = { 0x01, 0x02, 0x03, 0x04 };
+    NSData *nsIdentifier = [NSData dataWithBytes:identifier length:sizeof(identifier)];
+    auto parameters = adoptNS([[_WKPublicKeyCredentialParameters alloc] initWithAlgorithm:@-7]);
+
+    auto rp = adoptNS([[_WKPublicKeyCredentialRelyingPartyEntity alloc] initWithName:@"example.com"]);
+    auto user = adoptNS([[_WKPublicKeyCredentialUserEntity alloc] initWithName:@"jappleseed@example.com" identifier:nsIdentifier displayName:@"J Appleseed"]);
+    NSArray<_WKPublicKeyCredentialParameters *> *publicKeyCredentialParamaters = @[ parameters.get() ];
+
+    auto options = adoptNS([[_WKPublicKeyCredentialCreationOptions alloc] initWithRelyingParty:rp.get() user:user.get() publicKeyCredentialParamaters:publicKeyCredentialParamaters]);
+    auto result = [_WKWebAuthenticationPanel convertToCoreCreationOptionsWithOptions:options.get()];
+
+    EXPECT_WK_STREQ(result.rp.name, "example.com");
+    EXPECT_TRUE(result.rp.icon.isNull());
+    EXPECT_TRUE(result.rp.id.isNull());
+
+    EXPECT_WK_STREQ(result.user.name, "jappleseed@example.com");
+    EXPECT_TRUE(result.user.icon.isNull());
+    EXPECT_EQ(result.user.idVector.size(), sizeof(identifier));
+    EXPECT_EQ(memcmp(result.user.idVector.data(), identifier, sizeof(identifier)), 0);
+    EXPECT_WK_STREQ(result.user.displayName, "J Appleseed");
+
+    EXPECT_EQ(result.pubKeyCredParams.size(), 1lu);
+    EXPECT_EQ(result.pubKeyCredParams[0].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.pubKeyCredParams[0].alg, -7);
+
+    EXPECT_EQ(result.timeout, WTF::nullopt);
+    EXPECT_EQ(result.excludeCredentials.size(), 0lu);
+    EXPECT_EQ(result.authenticatorSelection, WTF::nullopt);
+    EXPECT_EQ(result.attestation, AttestationConveyancePreference::None);
+    EXPECT_TRUE(result.extensions->appid.isNull());
+    EXPECT_EQ(result.extensions->googleLegacyAppidSupport, false);
+}
+
+TEST(WebAuthenticationPanel, PublicKeyCredentialCreationOptionsMaximumDefault)
+{
+    uint8_t identifier[] = { 0x01, 0x02, 0x03, 0x04 };
+    NSData *nsIdentifier = [NSData dataWithBytes:identifier length:sizeof(identifier)];
+    auto parameters1 = adoptNS([[_WKPublicKeyCredentialParameters alloc] initWithAlgorithm:@-7]);
+    auto parameters2 = adoptNS([[_WKPublicKeyCredentialParameters alloc] initWithAlgorithm:@-257]);
+    auto descriptor = adoptNS([[_WKPublicKeyCredentialDescriptor alloc] initWithIdentifier:nsIdentifier]);
+
+    auto rp = adoptNS([[_WKPublicKeyCredentialRelyingPartyEntity alloc] initWithName:@"example.com"]);
+    auto user = adoptNS([[_WKPublicKeyCredentialUserEntity alloc] initWithName:@"jappleseed@example.com" identifier:nsIdentifier displayName:@"J Appleseed"]);
+    NSArray<_WKPublicKeyCredentialParameters *> *publicKeyCredentialParamaters = @[ parameters1.get(), parameters2.get() ];
+    auto authenticatorSelection = adoptNS([[_WKAuthenticatorSelectionCriteria alloc] init]);
+    auto extensions = adoptNS([[_WKAuthenticationExtensionsClientInputs alloc] init]);
+
+    auto options = adoptNS([[_WKPublicKeyCredentialCreationOptions alloc] initWithRelyingParty:rp.get() user:user.get() publicKeyCredentialParamaters:publicKeyCredentialParamaters]);
+    [options setTimeout:@120];
+    [options setExcludeCredentials:@[ descriptor.get() ]];
+    [options setAuthenticatorSelection:authenticatorSelection.get()];
+    [options setExtensions:extensions.get()];
+
+    auto result = [_WKWebAuthenticationPanel convertToCoreCreationOptionsWithOptions:options.get()];
+
+    EXPECT_WK_STREQ(result.rp.name, "example.com");
+    EXPECT_TRUE(result.rp.icon.isNull());
+    EXPECT_TRUE(result.rp.id.isNull());
+
+    EXPECT_WK_STREQ(result.user.name, "jappleseed@example.com");
+    EXPECT_TRUE(result.user.icon.isNull());
+    EXPECT_EQ(result.user.idVector.size(), sizeof(identifier));
+    EXPECT_EQ(memcmp(result.user.idVector.data(), identifier, sizeof(identifier)), 0);
+    EXPECT_WK_STREQ(result.user.displayName, "J Appleseed");
+
+    EXPECT_EQ(result.pubKeyCredParams.size(), 2lu);
+    EXPECT_EQ(result.pubKeyCredParams[0].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.pubKeyCredParams[0].alg, -7);
+    EXPECT_EQ(result.pubKeyCredParams[1].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.pubKeyCredParams[1].alg, -257);
+
+    EXPECT_EQ(result.timeout, 120u);
+
+    EXPECT_EQ(result.excludeCredentials.size(), 1lu);
+    EXPECT_EQ(result.excludeCredentials[0].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.excludeCredentials[0].idVector.size(), sizeof(identifier));
+    EXPECT_EQ(memcmp(result.excludeCredentials[0].idVector.data(), identifier, sizeof(identifier)), 0);
+
+    EXPECT_EQ(result.authenticatorSelection->authenticatorAttachment, WTF::nullopt);
+    EXPECT_EQ(result.authenticatorSelection->requireResidentKey, false);
+    EXPECT_EQ(result.authenticatorSelection->userVerification, UserVerificationRequirement::Preferred);
+
+    EXPECT_EQ(result.attestation, AttestationConveyancePreference::None);
+    EXPECT_TRUE(result.extensions->appid.isNull());
+}
+
+TEST(WebAuthenticationPanel, PublicKeyCredentialCreationOptionsMaximum1)
+{
+    uint8_t identifier[] = { 0x01, 0x02, 0x03, 0x04 };
+    NSData *nsIdentifier = [NSData dataWithBytes:identifier length:sizeof(identifier)];
+    auto parameters1 = adoptNS([[_WKPublicKeyCredentialParameters alloc] initWithAlgorithm:@-7]);
+    auto parameters2 = adoptNS([[_WKPublicKeyCredentialParameters alloc] initWithAlgorithm:@-257]);
+
+    auto rp = adoptNS([[_WKPublicKeyCredentialRelyingPartyEntity alloc] initWithName:@"example.com"]);
+    [rp setIcon:@"https//www.example.com/icon.jpg"];
+    [rp setIdentifier:@"example.com"];
+
+    auto user = adoptNS([[_WKPublicKeyCredentialUserEntity alloc] initWithName:@"jappleseed@example.com" identifier:nsIdentifier displayName:@"J Appleseed"]);
+    [user setIcon:@"https//www.example.com/icon.jpg"];
+
+    NSArray<_WKPublicKeyCredentialParameters *> *publicKeyCredentialParamaters = @[ parameters1.get(), parameters2.get() ];
+
+    auto options = adoptNS([[_WKPublicKeyCredentialCreationOptions alloc] initWithRelyingParty:rp.get() user:user.get() publicKeyCredentialParamaters:publicKeyCredentialParamaters]);
+    [options setTimeout:@120];
+
+    auto usb = adoptNS([NSNumber numberWithInt:_WKWebAuthenticationTransportUSB]);
+    auto nfc = adoptNS([NSNumber numberWithInt:_WKWebAuthenticationTransportNFC]);
+    auto internal = adoptNS([NSNumber numberWithInt:_WKWebAuthenticationTransportInternal]);
+    auto credential = adoptNS([[_WKPublicKeyCredentialDescriptor alloc] initWithIdentifier:nsIdentifier]);
+    [credential setTransports:@[ usb.get(), nfc.get(), internal.get() ]];
+    [options setExcludeCredentials:@[ credential.get(), credential.get() ]];
+
+    auto authenticatorSelection = adoptNS([[_WKAuthenticatorSelectionCriteria alloc] init]);
+    [authenticatorSelection setAuthenticatorAttachment:_WKAuthenticatorAttachmentPlatform];
+    [authenticatorSelection setRequireResidentKey:YES];
+    [authenticatorSelection setUserVerification:_WKUserVerificationRequirementRequired];
+    [options setAuthenticatorSelection:authenticatorSelection.get()];
+
+    [options setAttestation:_WKAttestationConveyancePreferenceDirect];
+
+    auto result = [_WKWebAuthenticationPanel convertToCoreCreationOptionsWithOptions:options.get()];
+
+    EXPECT_WK_STREQ(result.rp.name, "example.com");
+    EXPECT_WK_STREQ(result.rp.icon, @"https//www.example.com/icon.jpg");
+    EXPECT_WK_STREQ(result.rp.id, "example.com");
+
+    EXPECT_WK_STREQ(result.user.name, "jappleseed@example.com");
+    EXPECT_WK_STREQ(result.user.icon, @"https//www.example.com/icon.jpg");
+    EXPECT_EQ(result.user.idVector.size(), sizeof(identifier));
+    EXPECT_EQ(memcmp(result.user.idVector.data(), identifier, sizeof(identifier)), 0);
+    EXPECT_WK_STREQ(result.user.displayName, "J Appleseed");
+
+    EXPECT_EQ(result.pubKeyCredParams.size(), 2lu);
+    EXPECT_EQ(result.pubKeyCredParams[0].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.pubKeyCredParams[0].alg, -7);
+    EXPECT_EQ(result.pubKeyCredParams[1].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.pubKeyCredParams[1].alg, -257);
+
+    EXPECT_EQ(result.timeout, 120u);
+
+    EXPECT_EQ(result.excludeCredentials.size(), 2lu);
+    EXPECT_EQ(result.excludeCredentials[0].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.excludeCredentials[0].idVector.size(), sizeof(identifier));
+    EXPECT_EQ(memcmp(result.excludeCredentials[0].idVector.data(), identifier, sizeof(identifier)), 0);
+    EXPECT_EQ(result.excludeCredentials[0].transports.size(), 3lu);
+    EXPECT_EQ(result.excludeCredentials[0].transports[0], AuthenticatorTransport::Usb);
+    EXPECT_EQ(result.excludeCredentials[0].transports[1], AuthenticatorTransport::Nfc);
+    EXPECT_EQ(result.excludeCredentials[0].transports[2], AuthenticatorTransport::Internal);
+
+    EXPECT_EQ(result.authenticatorSelection->authenticatorAttachment, PublicKeyCredentialCreationOptions::AuthenticatorAttachment::Platform);
+    EXPECT_EQ(result.authenticatorSelection->requireResidentKey, true);
+    EXPECT_EQ(result.authenticatorSelection->userVerification, UserVerificationRequirement::Required);
+
+    EXPECT_EQ(result.attestation, AttestationConveyancePreference::Direct);
+}
+
+TEST(WebAuthenticationPanel, PublicKeyCredentialCreationOptionsMaximum2)
+{
+    uint8_t identifier[] = { 0x01, 0x02, 0x03, 0x04 };
+    NSData *nsIdentifier = [NSData dataWithBytes:identifier length:sizeof(identifier)];
+    auto parameters1 = adoptNS([[_WKPublicKeyCredentialParameters alloc] initWithAlgorithm:@-7]);
+    auto parameters2 = adoptNS([[_WKPublicKeyCredentialParameters alloc] initWithAlgorithm:@-257]);
+
+    auto rp = adoptNS([[_WKPublicKeyCredentialRelyingPartyEntity alloc] initWithName:@"example.com"]);
+    [rp setIcon:@"https//www.example.com/icon.jpg"];
+    [rp setIdentifier:@"example.com"];
+
+    auto user = adoptNS([[_WKPublicKeyCredentialUserEntity alloc] initWithName:@"jappleseed@example.com" identifier:nsIdentifier displayName:@"J Appleseed"]);
+    [user setIcon:@"https//www.example.com/icon.jpg"];
+
+    NSArray<_WKPublicKeyCredentialParameters *> *publicKeyCredentialParamaters = @[ parameters1.get(), parameters2.get() ];
+
+    auto options = adoptNS([[_WKPublicKeyCredentialCreationOptions alloc] initWithRelyingParty:rp.get() user:user.get() publicKeyCredentialParamaters:publicKeyCredentialParamaters]);
+    [options setTimeout:@120];
+
+    auto usb = adoptNS([NSNumber numberWithInt:_WKWebAuthenticationTransportUSB]);
+    auto nfc = adoptNS([NSNumber numberWithInt:_WKWebAuthenticationTransportNFC]);
+    auto internal = adoptNS([NSNumber numberWithInt:_WKWebAuthenticationTransportInternal]);
+    auto credential = adoptNS([[_WKPublicKeyCredentialDescriptor alloc] initWithIdentifier:nsIdentifier]);
+    [credential setTransports:@[ usb.get(), nfc.get(), internal.get() ]];
+    [options setExcludeCredentials:@[ credential.get(), credential.get() ]];
+
+    auto authenticatorSelection = adoptNS([[_WKAuthenticatorSelectionCriteria alloc] init]);
+    [authenticatorSelection setAuthenticatorAttachment:_WKAuthenticatorAttachmentCrossPlatform]; //
+    [authenticatorSelection setRequireResidentKey:YES];
+    [authenticatorSelection setUserVerification:_WKUserVerificationRequirementDiscouraged]; //
+    [options setAuthenticatorSelection:authenticatorSelection.get()];
+
+    [options setAttestation:_WKAttestationConveyancePreferenceIndirect]; //
+
+    auto result = [_WKWebAuthenticationPanel convertToCoreCreationOptionsWithOptions:options.get()];
+
+    EXPECT_WK_STREQ(result.rp.name, "example.com");
+    EXPECT_WK_STREQ(result.rp.icon, @"https//www.example.com/icon.jpg");
+    EXPECT_WK_STREQ(result.rp.id, "example.com");
+
+    EXPECT_WK_STREQ(result.user.name, "jappleseed@example.com");
+    EXPECT_WK_STREQ(result.user.icon, @"https//www.example.com/icon.jpg");
+    EXPECT_EQ(result.user.idVector.size(), sizeof(identifier));
+    EXPECT_EQ(memcmp(result.user.idVector.data(), identifier, sizeof(identifier)), 0);
+    EXPECT_WK_STREQ(result.user.displayName, "J Appleseed");
+
+    EXPECT_EQ(result.pubKeyCredParams.size(), 2lu);
+    EXPECT_EQ(result.pubKeyCredParams[0].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.pubKeyCredParams[0].alg, -7);
+    EXPECT_EQ(result.pubKeyCredParams[1].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.pubKeyCredParams[1].alg, -257);
+
+    EXPECT_EQ(result.timeout, 120u);
+
+    EXPECT_EQ(result.excludeCredentials.size(), 2lu);
+    EXPECT_EQ(result.excludeCredentials[0].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.excludeCredentials[0].idVector.size(), sizeof(identifier));
+    EXPECT_EQ(memcmp(result.excludeCredentials[0].idVector.data(), identifier, sizeof(identifier)), 0);
+    EXPECT_EQ(result.excludeCredentials[0].transports.size(), 3lu);
+    EXPECT_EQ(result.excludeCredentials[0].transports[0], AuthenticatorTransport::Usb);
+    EXPECT_EQ(result.excludeCredentials[0].transports[1], AuthenticatorTransport::Nfc);
+    EXPECT_EQ(result.excludeCredentials[0].transports[2], AuthenticatorTransport::Internal);
+
+    EXPECT_EQ(result.authenticatorSelection->authenticatorAttachment, PublicKeyCredentialCreationOptions::AuthenticatorAttachment::CrossPlatform);
+    EXPECT_EQ(result.authenticatorSelection->requireResidentKey, true);
+    EXPECT_EQ(result.authenticatorSelection->userVerification, UserVerificationRequirement::Discouraged);
+
+    EXPECT_EQ(result.attestation, AttestationConveyancePreference::Indirect);
+}
+
+TEST(WebAuthenticationPanel, MakeCredentialSPITimeout)
+{
+    reset();
+
+    uint8_t identifier[] = { 0x01, 0x02, 0x03, 0x04 };
+    uint8_t hash[] = { 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04 };
+    NSData *nsIdentifier = [NSData dataWithBytes:identifier length:sizeof(identifier)];
+    NSData *nsHash = [NSData dataWithBytes:hash length:sizeof(hash)];
+    auto parameters = adoptNS([[_WKPublicKeyCredentialParameters alloc] initWithAlgorithm:@-7]);
+
+    auto rp = adoptNS([[_WKPublicKeyCredentialRelyingPartyEntity alloc] initWithName:@"example.com"]);
+    auto user = adoptNS([[_WKPublicKeyCredentialUserEntity alloc] initWithName:@"jappleseed@example.com" identifier:nsIdentifier displayName:@"J Appleseed"]);
+    NSArray<_WKPublicKeyCredentialParameters *> *publicKeyCredentialParamaters = @[ parameters.get() ];
+    auto options = adoptNS([[_WKPublicKeyCredentialCreationOptions alloc] initWithRelyingParty:rp.get() user:user.get() publicKeyCredentialParamaters:publicKeyCredentialParamaters]);
+    [options setTimeout:@120];
+
+    auto panel = adoptNS([[_WKWebAuthenticationPanel alloc] init]);
+    [panel makeCredentialWithHash:nsHash options:options.get() completionHandler:^(_WKAuthenticatorAttestationResponse *response, NSError *error) {
+        webAuthenticationPanelRan = true;
+
+        EXPECT_NULL(response);
+        EXPECT_EQ(error.domain, WKErrorDomain);
+        EXPECT_EQ(error.code, WKErrorUnknown);
+    }];
+    Util::run(&webAuthenticationPanelRan);
+}
+
+TEST(WebAuthenticationPanel, PublicKeyCredentialRequestOptionsMinimun)
+{
+    auto options = adoptNS([[_WKPublicKeyCredentialRequestOptions alloc] init]);
+    auto result = [_WKWebAuthenticationPanel convertToCoreRequestOptionsWithOptions:options.get()];
+
+    EXPECT_EQ(result.timeout, WTF::nullopt);
+    EXPECT_TRUE(result.rpId.isNull());
+    EXPECT_EQ(result.allowCredentials.size(), 0lu);
+    EXPECT_EQ(result.userVerification, UserVerificationRequirement::Preferred);
+    EXPECT_TRUE(result.extensions->appid.isNull());
+    EXPECT_EQ(result.extensions->googleLegacyAppidSupport, false);
+}
+
+TEST(WebAuthenticationPanel, PublicKeyCredentialRequestOptionsMaximumDefault)
+{
+    uint8_t identifier[] = { 0x01, 0x02, 0x03, 0x04 };
+    NSData *nsIdentifier = [NSData dataWithBytes:identifier length:sizeof(identifier)];
+    auto descriptor = adoptNS([[_WKPublicKeyCredentialDescriptor alloc] initWithIdentifier:nsIdentifier]);
+    auto extensions = adoptNS([[_WKAuthenticationExtensionsClientInputs alloc] init]);
+
+    auto options = adoptNS([[_WKPublicKeyCredentialRequestOptions alloc] init]);
+    [options setTimeout:@120];
+    [options setAllowCredentials:@[ descriptor.get() ]];
+    [options setExtensions:extensions.get()];
+
+    auto result = [_WKWebAuthenticationPanel convertToCoreRequestOptionsWithOptions:options.get()];
+
+    EXPECT_EQ(result.timeout, 120u);
+
+    EXPECT_EQ(result.allowCredentials.size(), 1lu);
+    EXPECT_EQ(result.allowCredentials[0].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.allowCredentials[0].idVector.size(), sizeof(identifier));
+    EXPECT_EQ(memcmp(result.allowCredentials[0].idVector.data(), identifier, sizeof(identifier)), 0);
+
+    EXPECT_EQ(result.userVerification, UserVerificationRequirement::Preferred);
+    EXPECT_TRUE(result.extensions->appid.isNull());
+}
+
+TEST(WebAuthenticationPanel, PublicKeyCredentialRequestOptionsMaximum)
+{
+    uint8_t identifier[] = { 0x01, 0x02, 0x03, 0x04 };
+    NSData *nsIdentifier = [NSData dataWithBytes:identifier length:sizeof(identifier)];
+
+    auto options = adoptNS([[_WKPublicKeyCredentialRequestOptions alloc] init]);
+    [options setTimeout:@120];
+
+    auto usb = adoptNS([NSNumber numberWithInt:_WKWebAuthenticationTransportUSB]);
+    auto nfc = adoptNS([NSNumber numberWithInt:_WKWebAuthenticationTransportNFC]);
+    auto internal = adoptNS([NSNumber numberWithInt:_WKWebAuthenticationTransportInternal]);
+    auto credential = adoptNS([[_WKPublicKeyCredentialDescriptor alloc] initWithIdentifier:nsIdentifier]);
+    [credential setTransports:@[ usb.get(), nfc.get(), internal.get() ]];
+    [options setAllowCredentials:@[ credential.get(), credential.get() ]];
+
+    [options setUserVerification:_WKUserVerificationRequirementRequired];
+
+    auto extensions = adoptNS([[_WKAuthenticationExtensionsClientInputs alloc] init]);
+    [extensions setAppid:@"https//www.example.com/fido"];
+    [options setExtensions:extensions.get()];
+
+    auto result = [_WKWebAuthenticationPanel convertToCoreRequestOptionsWithOptions:options.get()];
+
+    EXPECT_EQ(result.timeout, 120u);
+
+    EXPECT_EQ(result.allowCredentials.size(), 2lu);
+    EXPECT_EQ(result.allowCredentials[0].type, WebCore::PublicKeyCredentialType::PublicKey);
+    EXPECT_EQ(result.allowCredentials[0].idVector.size(), sizeof(identifier));
+    EXPECT_EQ(memcmp(result.allowCredentials[0].idVector.data(), identifier, sizeof(identifier)), 0);
+    EXPECT_EQ(result.allowCredentials[0].transports.size(), 3lu);
+    EXPECT_EQ(result.allowCredentials[0].transports[0], AuthenticatorTransport::Usb);
+    EXPECT_EQ(result.allowCredentials[0].transports[1], AuthenticatorTransport::Nfc);
+    EXPECT_EQ(result.allowCredentials[0].transports[2], AuthenticatorTransport::Internal);
+
+    EXPECT_EQ(result.userVerification, UserVerificationRequirement::Required);
+    EXPECT_WK_STREQ(result.extensions->appid, "https//www.example.com/fido");
+}
+
+TEST(WebAuthenticationPanel, GetAssertionSPITimeout)
+{
+    reset();
+
+    uint8_t hash[] = { 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04 };
+    NSData *nsHash = [NSData dataWithBytes:hash length:sizeof(hash)];
+
+    auto options = adoptNS([[_WKPublicKeyCredentialRequestOptions alloc] init]);
+    [options setTimeout:@120];
+
+    auto panel = adoptNS([[_WKWebAuthenticationPanel alloc] init]);
+    [panel getAssertionWithHash:nsHash options:options.get() completionHandler:^(_WKAuthenticatorAssertionResponse *response, NSError *error) {
+        webAuthenticationPanelRan = true;
+
+        EXPECT_NULL(response);
+        EXPECT_EQ(error.domain, WKErrorDomain);
+        EXPECT_EQ(error.code, WKErrorUnknown);
+    }];
+    Util::run(&webAuthenticationPanelRan);
+}
+
</ins><span class="cx"> } // namespace TestWebKitAPI
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(WEB_AUTHN)
</span></span></pre>
</div>
</div>

</body>
</html>