<!DOCTYPE html>
<script src=../resources/testharness.js></script>
<script src=../resources/testharnessreport.js></script>
<script src=../resources/webidl2.js></script>
<script src=../resources/idlharness.js></script>
<script type="text/plain" id="tested">
[SecureContext, Exposed=Window]
interface PublicKeyCredential : Credential {
    [SameObject] readonly attribute ArrayBuffer           rawId;
    [SameObject] readonly attribute AuthenticatorResponse response;
};

partial dictionary CredentialCreationOptions {
    MakePublicKeyCredentialOptions? publicKey;
};

partial dictionary CredentialRequestOptions {
    PublicKeyCredentialRequestOptions? publicKey;
};

[SecureContext, Exposed=Window]
interface AuthenticatorResponse {
    [SameObject] readonly attribute ArrayBuffer clientDataJSON;
};

[SecureContext, Exposed=Window]
interface AuthenticatorAttestationResponse : AuthenticatorResponse {
    [SameObject] readonly attribute ArrayBuffer attestationObject;
};

[SecureContext, Exposed=Window]
interface AuthenticatorAssertionResponse : AuthenticatorResponse {
    [SameObject] readonly attribute ArrayBuffer      authenticatorData;
    [SameObject] readonly attribute ArrayBuffer      signature;
    [SameObject] readonly attribute ArrayBuffer?     userHandle;
};

dictionary PublicKeyCredentialParameters {
    required PublicKeyCredentialType type;
    required COSEAlgorithmIdentifier alg;
};

dictionary MakePublicKeyCredentialOptions {
    required PublicKeyCredentialRpEntity rp;
    required PublicKeyCredentialUserEntity user;

    required BufferSource                            challenge;
    required sequence<PublicKeyCredentialParameters> pubKeyCredParams;

    unsigned long                                    timeout;
    sequence<PublicKeyCredentialDescriptor>          excludeCredentials = [];
    AuthenticatorSelectionCriteria                   authenticatorSelection;
};

dictionary PublicKeyCredentialEntity {
    required DOMString name;
    USVString icon;
};

dictionary PublicKeyCredentialRpEntity : PublicKeyCredentialEntity {
    DOMString      id;
};

dictionary PublicKeyCredentialUserEntity : PublicKeyCredentialEntity {
    required BufferSource   id;
    required DOMString      displayName;
};

dictionary AuthenticatorSelectionCriteria {
    AuthenticatorAttachment    authenticatorAttachment;
    boolean                    requireResidentKey = false;
    boolean                    requireUserVerification = false;
};

enum AuthenticatorAttachment {
    "platform",
    "cross-platform"
};

dictionary PublicKeyCredentialRequestOptions {
    required BufferSource                   challenge;
    unsigned long                           timeout;
    USVString                               rpId;
    sequence<PublicKeyCredentialDescriptor> allowCredentials = [];
};

dictionary CollectedClientData {
    required DOMString           type;
    required DOMString           challenge;
    required DOMString           origin;
    DOMString                    tokenBindingId;
};

enum PublicKeyCredentialType {
    "public-key"
};

dictionary PublicKeyCredentialDescriptor {
    required PublicKeyCredentialType type;
    required BufferSource id;
    sequence<AuthenticatorTransport>   transports;
};

enum AuthenticatorTransport {
    "usb",
    "nfc",
    "ble"
};

typedef long COSEAlgorithmIdentifier;

</script>
<script>
(function() {
    "use strict";
    var idl_array = new IdlArray();
    idl_array.add_idls(document.querySelector('#tested').textContent);
    idl_array.test();
})();
</script>
