Web NFC IDL tests

    interface Navigator {
    };

    dictionary NFCMessage {
        sequence records;
        USVString           url;
    };

    typedef (DOMString or unrestricted double or ArrayBuffer or Dictionary) NFCRecordData;

    dictionary NFCRecord {
        NFCRecordType recordType;
        USVString     mediaType;
        NFCRecordData data;
    };

    enum NFCRecordType {
        "empty",
        "text",
        "url",
        "json",
        "opaque"
    };

    partial interface Navigator {
        readonly attribute NFC nfc;
    };

    typedef (DOMString or ArrayBuffer or NFCMessage) NFCPushMessage;

    interface NFC {
        Promise push(NFCPushMessage message, optional NFCPushOptions options);
        Promise cancelPush(optional NFCPushTarget target = "any");
        Promise watch(MessageCallback callback,
                            optional NFCWatchOptions options);
        Promise cancelWatch(optional long id);
    };

    callback MessageCallback = void (NFCMessage message);

    dictionary NFCPushOptions {
        NFCPushTarget       target = "any";
        unrestricted double timeout = Infinity;
        boolean             ignoreRead = true;
    };

    enum NFCPushTarget {
        "tag",
        "peer",
        "any"
    };

    dictionary NFCWatchOptions {
        USVString      url = "";
        NFCRecordType? recordType;
        USVString      mediaType = "";
        NFCWatchMode   mode = "web-nfc-only";
    };

    enum NFCWatchMode {
        "web-nfc-only",
        "any"
    };