Unofficial Draft
Copyright © 2023 the document editors/authors. Text is available under the Creative Commons Attribution 4.0 International Public License; additional terms may apply.
The objective of this API is to enable smart card (PC/SC) applications to move to the Web Platform. It gives them access to the PC/SC implementation (and card reader drivers) available in the host OS. There is also a companion explainer document.
This document is a draft of a potential specification. It has no official standing of any kind and does not represent the support or consensus of any standards organization.
WebIDL[Exposed=(DedicatedWorker, SharedWorker, Window), SecureContext]
interface SmartCardResourceManager
{
Promise<SmartCardContext
> establishContext
();
};
Methods on this interface complete asynchronously, queuing work on the smart card task source.
Requests a PC/SC context from the platform's PC/SC stack.
TheestablishContext
()
method steps are:
SecurityError
" DOMException
.
RESOURCEMANAGER
class.EstablishContext
method of resourceManager with
a "system" Scope
parameter.RESPONSECODE
is not SCARD_S_SUCCESS
, perform
the following steps:
corresponding
exception.SmartCardContext
whose
[[resourceManager]]
internal slot is set
to resourceManager.A context for communicating with the PC/SC resource manager.
WebIDL[Exposed=(DedicatedWorker, SharedWorker, Window), SecureContext]
interface SmartCardContext
{
Promise<sequence<DOMString>> listReaders
();
Promise<sequence<SmartCardReaderStateOut
>> getStatusChange
(
sequence<SmartCardReaderStateIn
> readerStates,
optional SmartCardGetStatusChangeOptions
options = {});
Promise<SmartCardConnectResult
> connect
(
DOMString readerName,
SmartCardAccessMode
accessMode,
optional SmartCardConnectOptions
options = {});
};
Instances of SmartCardContext
are created with the internal slots
described in the following table:
Internal slot | Initial value | Description (non-normative) |
---|---|---|
[[resourceManager]] | null |
The platform's [PCSC5] RESOURCEMANAGER to be used. |
[[operationInProgress]] | false |
Whether there is an ongoing PC/SC operation in this context. |
[[connections]] | An empty ordered set | The existing SmartCardConnection s created by this context. |
[[tracker]] | null |
A [PCSC5] SCARDTRACK instance. |
[[signal]] | null |
The AbortSignal of the outstanding
getStatusChange () call, if any. |
The listReaders
()
method steps
are:
[[operationInProgress]]
is
true
, reject promise with a "InvalidStateError
"
DOMException
and return promise.[[operationInProgress]]
to
true
.RESOURCEQUERY
class, with
this.[[resourceManager]]
as its
constructor input parameter.STR[]
containing the list of group names that is equivalent to "all
readers in the system" in that platform.
STR[]
.
ListReaders
method of resourceQuery with
groups as input and pcscReaders as output parameters.RESPONSECODE
.SCARD_S_SUCCESS
:
SCARD_E_NO_READERS_AVAILABLE
,
resolve promise with an empty sequence
of
DOMString
.
corresponding
to
responseCode.sequence
of
DOMString
equivalent to pcscReaders.The getStatusChange
(readerStates, options)
method steps
are:
[[operationInProgress]]
is
true
, reject promise with a "InvalidStateError
"
DOMException
and return promise.signal
"]
exists, run the following steps:
signal
"].[[signal]]
to signalCancel the outstanding GetStatusChange
algorithm to signal.DWORD
set to [PCSC5]
INFINITE
.timeout
"]
exists, set pcscTimeout to
options["timeout
"].SCARD_READERSTATE[]
corresponding to
readerStates.[[operationInProgress]]
to
true
.[[tracker]]
to a new instance of the
platform's [PCSC5] SCARDTRACK
class, with
this.[[resourceManager]]
as its
constructor input parameter.[[tracker]]
.GetStatusChange()
with pcscReaderStates and pcscTimeout as input parameters.RESPONSECODE
.[[tracker]]
to null
.undefined
.[[signal]]
is not null
,
run the following steps:
[[signal]]
is
aborted then set abortReason to
this.[[signal]]
's
abort reason.cancel the outstanding GetStatusChange
algorithm from
this.[[signal]]
.[[signal]]
to
null
.SCARD_S_SUCCESS
, run the
following steps:
SCARD_E_CANCELLED
and
abortReason is not undefined
then reject
promise with abortReason.corresponding
to responseCode.SmartCardReaderStateOut
corresponding to
pcscReaderStates.WebIDLdictionary SmartCardReaderStateIn
{
required DOMString readerName
;
required SmartCardReaderStateFlagsIn
currentState
;
unsigned long currentCount
;
};
readerName
membercurrentState
membercurrentCount
memberGiven a sequence of SmartCardReaderStateIn
named
readerStates, a
corresponding
[PCSC5] SCARD_READERSTATE[]
is created with the following
steps:
SCARD_READERSTATE[]
.SCARD_READERSTATE
.Reader
to
stateIn["readerName
"].CurrentState
to the DWORD
corresponding
to stateIn["currentState
"].currentCount
"]
exists, set the high word of
pcscState.CurrentState
to
stateIn["currentCount
"].EventState
to zero.WebIDLdictionary SmartCardReaderStateFlagsIn
{
boolean unaware
= false;
boolean ignore
= false;
boolean empty
= false;
boolean present
= false;
boolean exclusive
= false;
boolean inuse
= false;
boolean mute
= false;
boolean unpowered
= false;
};
unaware
memberignore
memberunavailable
memberempty
memberpresent
memberexclusive
memberinuse
membermute
memberunpowered
memberThe [PCSC5] DWORD
corresponding
to a given SmartCardReaderStateFlagsIn
is created with the
following steps:
SmartCardReaderStateFlagsIn
.DWORD
set to zero.unaware
"] is
true
, add [PCSC5] SCARD_STATE_UNAWARE
to
pcscFlags.ignore
"] is
true
, add [PCSC5] SCARD_STATE_IGNORE
to
pcscFlags.unavailable
"]
is true
, add [PCSC5]
SCARD_STATE_UNAVAILABLE
to pcscFlags.empty
"] is
true
, add [PCSC5] SCARD_STATE_EMPTY
to
pcscFlags.present
"] is
true
, add [PCSC5] SCARD_STATE_PRESENT
to
pcscFlags.exclusive
"] is
true
, add [PCSC5] SCARD_STATE_EXCLUSIVE
to
pcscFlags.inuse
"] is
true
, add [PCSC5] SCARD_STATE_INUSE
to
pcscFlags.mute
"] is
true
, add SCARD_STATE_MUTE
to
pcscFlags.
unpowered
"] is
true
, add SCARD_STATE_UNPOWERED
to
pcscFlags.The actual state of a smart card reader.
WebIDLdictionary SmartCardReaderStateOut
{
required DOMString readerName
;
required SmartCardReaderStateFlagsOut
eventState
;
required unsigned long eventCount
;
ArrayBuffer answerToReset
;
};
readerName
membereventState
membereventCount
memberanswerToReset
memberGiven a [PCSC5] SCARD_READERSTATE[]
named
pcscReaderStates, a corresponding sequence of
SmartCardReaderStateOut
is created with the following steps:
SmartCardReaderStateOut
.SmartCardReaderStateOut
.readerName
"] to
pcscState.Reader
.eventState
"] to
the SmartCardReaderStateFlagsOut
dictionary
corresponding
to pcscState.EventState
.eventCount
"] to
the high word of pcscState.EventState
.
SCARD_READERSTATE
structure has a member
containing the card's [ISO7186-3] Answer To Reset, set
stateOut["answerToReset
"] to
that value.WebIDLdictionary SmartCardReaderStateFlagsOut
{
boolean ignore
= false;
boolean changed
= false;
boolean unknown
= false;
boolean empty
= false;
boolean present
= false;
boolean exclusive
= false;
boolean inuse
= false;
boolean mute
= false;
boolean unpowered
= false;
};
ignore
memberchanged
memberunavailable
memberunknown
memberempty
memberpresent
memberexclusive
memberinuse
membermute
memberunpowered
memberGiven a [PCSC5] DWORD
named pcscFlags, a corresponding
SmartCardReaderStateFlagsOut
dictionary is created with the
following steps:
SmartCardReaderStateFlagsOut
dictionary with default members.SCARD_STATE_IGNORE
, set
flagsOut["ignore
"] to
true
.SCARD_STATE_CHANGED
, set
flagsOut["changed
"] to
true
.SCARD_STATE_UNAVAILABLE
, set
flagsOut["unavailable
"] to
true
.SCARD_STATE_UNKNOWN
, set
flagsOut["unknown
"] to
true
.SCARD_STATE_EMPTY
, set
flagsOut["empty
"] to
true
.SCARD_STATE_PRESENT
, set
flagsOut["present
"] to
true
.SCARD_STATE_EXCLUSIVE
, set
flagsOut["exclusive
"] to
true
.SCARD_STATE_INUSE
, set
flagsOut["inuse
"] to
true
.SCARD_STATE_MUTE
, set
flagsOut["mute
"] to
true
.SCARD_STATE_UNPOWERED
, set
flagsOut["unpowered
"] to
true
.WebIDLdictionary SmartCardGetStatusChangeOptions
{
DOMHighResTimeStamp timeout
;
AbortSignal signal
;
};
timeout
membersignal
memberThe connect
(readerName, accessMode, options)
method steps are:
[[operationInProgress]]
is
true
, reject promise with a "InvalidStateError
"
DOMException
and return promise.[[operationInProgress]]
to
true
.DWORD
corresponding to
accessMode.DWORD
set to 0
.preferredProtocols
"]
exists, set protocolFlags to its
corresponding flags.DWORD
set to 0
.SCARDCOMM
class, with
this.[[resourceManager]]
as its
constructor parameter.Connect()
with readerName, accessFlags
and protocolFlags as input and activeProtocol as output parameters.RESPONSECODE
.SCARD_S_SUCCESS
:
corresponding
to responseCode and abort these steps.SmartCardConnectResult
dictionary.SmartCardConnection
.[[connections]]
.[[comm]]
to comm.
[[context]]
to
this.
[[activeProtocol]]
to
activeProtocol.
connection
"] to
connection.activeProtocol
"] to the
corresponding SmartCardProtocol
.WebIDLenum SmartCardProtocol
{
"raw
",
"t0
",
"t1
"
};
raw
SCARD_PROTOCOL_RAW
DWORD
.t0
SCARD_PROTOCOL_T0
DWORD
.t1
SCARD_PROTOCOL_T1
DWORD
.A [PCSC5] DWORD
is a valid protocol value if it is either
[PCSC5] SCARD_PROTOCOL_T0
, [PCSC5] SCARD_PROTOCOL_T1
or
[PCSC5] SCARD_PROTOCOL_RAW
.
Given a sequence of SmartCardProtocol
named
protocols, a [PCSC5] DWORD
with the corresponding
flags is created with the following steps:
WebIDLdictionary SmartCardConnectResult
{
required SmartCardConnection
connection
;
SmartCardProtocol
activeProtocol
;
};
connection
memberactiveProtocol
memberWebIDLenum SmartCardAccessMode
{
"shared
",
"exclusive
",
"direct
"
};
shared
exclusive
direct
Given a SmartCardAccessMode
enum named
accessMode, a corresponding [PCSC5]
DWORD
is created with the following steps:
WebIDLdictionary SmartCardConnectOptions
{
sequence<SmartCardProtocol
> preferredProtocols
;
};
preferredProtocols
To clear the operationInProgress of a
SmartCardContext
context, perform the following steps:
[[operationInProgress]]
is true
.[[operationInProgress]]
to
false
.[[connections]]
:
[[operationInProgress]]
is
true
, abort there steps.The cancel the outstanding GetStatusChange algorithm steps are:
[[tracker]]
.Cancel()
.The high word of a [PCSC5] DWORD
is the result of an
unsigned right shift of 16 bits on that DWORD
.
To set the high word of a [PCSC5] DWORD
named
dword to a given number n, perform the following steps.
0xFFFF
.To add a flag f to a [PCSC5] DWORD
flags, set flags to flags bitwise OR f.
A [PCSC5] DWORD
flags has a flag f
if flags bitwise AND f is f.
WebIDL[Exposed=(DedicatedWorker, SharedWorker, Window), SecureContext]
interface SmartCardConnection
{
Promise<undefined> disconnect
(optional SmartCardDisposition
disposition = "leave");
Promise<ArrayBuffer> transmit
(BufferSource sendBuffer,
optional SmartCardTransmitOptions
options = {});
Promise<undefined> startTransaction
(SmartCardTransactionCallback
transaction,
optional SmartCardTransactionOptions
options = {});
Promise<SmartCardConnectionStatus
> status
();
Promise<ArrayBuffer> control
([EnforceRange] unsigned long controlCode,
BufferSource data);
Promise<ArrayBuffer> getAttribute
([EnforceRange] unsigned long tag);
Promise<undefined> setAttribute
([EnforceRange] unsigned long tag, BufferSource value);
};
callback SmartCardTransactionCallback
= Promise<SmartCardDisposition
?> ();
Instances of SmartCardConnection
are created with the internal slots
described in the following table:
Internal slot | Initial value | Description (non-normative) |
---|---|---|
[[comm]] | null |
The platform's [PCSC5] SCARDCOMM to be used. |
[[context]] | null |
The SmartCardContext that created this instance. |
[[activeProtocol]] | 0 | The active protocol DWORD , as returned by the platform's
[PCSC5] implementation. |
[[transactionState]] | null |
Holds the state of an ongoing transaction
started with startTransaction () , if
any. |
The disconnect
(disposition)
method steps
are:
[[context]]
.[[operationInProgress]]
is true
, reject promise with a "InvalidStateError
"
DOMException
and return promise.[[comm]]
is null
, reject
promise with a "InvalidStateError
" DOMException
and return
promise.[[context]]
.[[operationInProgress]]
to true
.[[comm]]
.Disconnect()
with a DWORD
corresponding to
disposition as input parameter.RESPONSECODE
.[[context]]
.SCARD_S_SUCCESS
, reject
promise with an exception
corresponding
to responseCode and abort
these steps.[[comm]]
.[[comm]]
to null
.WebIDLenum SmartCardDisposition
{
"leave
",
"reset
",
"unpower
",
"eject
"
};
leave
SCARD_LEAVE_CARD
DWORD
.reset
SCARD_RESET_CARD
DWORD
.unpower
SCARD_UNPOWER_CARD
DWORD
.eject
SCARD_EJECT_CARD
DWORD
.The transmit
(sendBuffer, options)
method steps
are:
[[context]]
.[[operationInProgress]]
is true
, reject promise with a "InvalidStateError
"
DOMException
and return promise.[[comm]]
is null
, reject
promise with a "InvalidStateError
" DOMException
and return
promise.DWORD
set to
this.[[activeProtocol]]
.
protocol
"]
exists, set protocol to the DWORD
corresponding to
options["protocol
"].
InvalidStateError
" DOMException
and return promise.[[context]]
.[[operationInProgress]]
to true
.SCARD_IO_HEADER
corresponding to
this.[[activeProtocol]]
.BYTE[]
containing sendBuffer.SCARD_IO_HEADER
equivalent of empty or null.BYTE[]
big enough to hold
the largest [ISO7186-3] extended response APDU (65538 bytes).DWORD
set to 0
.[[comm]]
.Transmit()
with sendPci, pcscSendBuffer, recvPci, recvBuffer and
recvLength as arguments.RESPONSECODE
.[[context]]
.SCARD_S_SUCCESS
, reject
promise with an exception
corresponding
to responseCode and abort
these steps.ArrayBuffer
containing
the first recvLength bytes of recvBuffer.WebIDLdictionary SmartCardTransmitOptions
{
SmartCardProtocol
protocol
;
};
protocol
memberThe startTransaction
(transaction, options)
method steps are:
[[context]]
.[[operationInProgress]]
is true
, reject promise with a "InvalidStateError
"
DOMException
and return promise.[[comm]]
is null
, reject
promise with a "InvalidStateError
" DOMException
and return
promise.[[transactionState]]
is not
null
, reject promise with a "InvalidStateError
"
DOMException
and return promise.AbortSignal
set to null
.signal
"]
exists, run the following steps:
[[context]]
.[[operationInProgress]]
to true
.[[comm]]
.BeginTransaction()
.RESPONSECODE
.WebIDLdictionary SmartCardTransactionOptions
{
AbortSignal signal
;
};
signal
memberA transaction state is a struct with the following items:
Item | Description (non-normative) |
---|---|
pendingDisposition | If set, it means once the ongoing PC/SC operation finishes
[PCSC5] EndTransaction() should be called with this value as the
SmartCardDisposition parameter. |
pendingException | The exception to be used when rejecting promise. |
promise | The pending Promise returned by a
startTransaction () call. |
To process the result of a BeginTransaction given a
SmartCardConnection
connection, a [PCSC5]
RESPONSECODE
responseCode, an AbortSignal
signal, a SmartCardTransactionCallback
transaction and a Promise
promise, perform the following steps:
[[context]]
.undefined
.null
:
cancel
algorithm from
signal.SCARD_S_SUCCESS
:
SCARD_E_CANCELLED
and
abortReason is not undefined
then reject
promise with abortReason.corresponding
to
responseCode.[[transactionState]]
to transactionState.reset
".
undefined
, set disposition to
v.[[context]]
.[[operationInProgress]]
is true
:
InvalidStateError
"
DOMException
.[[context]]
.[[operationInProgress]]
is true
, set
transactionState's pendingDisposition to
"reset
".reset
".To end the transaction of a SmartCardConnection
connection with a SmartCardDisposition
disposition, perform the following steps:
[[context]]
.[[operationInProgress]]
is false
.[[transactionState]]
is not
null
.[[transactionState]]
's
pendingDisposition is null
.[[transactionState]]
's
promise.[[comm]]
is null
:
InvalidStateError
"
DOMException
.[[transactionState]]
to
null
.[[context]]
.[[operationInProgress]]
to true
.[[comm]]
.EndTransaction()
with
a DWORD
corresponding to disposition as input parameter.RESPONSECODE
.[[context]]
.[[transactionState]]
's
pendingException.null
, perform the following steps:
SCARD_S_SUCCESS
,
resolve transactionPromise.corresponding
to
responseCode.[[transactionState]]
to null
.To end any settled transaction of a
SmartCardConnection
connection, perform the
following steps:
[[transactionState]]
is
null
, abort these steps.[[transactionState]]
's
pendingDisposition.null
, abort these steps.[[transactionState]]
's
pendingDisposition to null
.To cancel outstanding [PCSC5] SCARDCOMM
operations,
call this.[[comm]]
.Cancel()
.
The status
()
method steps are:
[[context]]
.[[operationInProgress]]
is true
, reject promise with a "InvalidStateError
"
DOMException
and return promise.[[comm]]
is null
, reject
promise with a "InvalidStateError
" DOMException
and return
promise.[[context]]
.[[operationInProgress]]
to true
.STR[]
.DWORD
set to 0
.DWORD
set to 0
.BYTE[]
big enough to hold
any [ISO7186-3] Answer To Reset (ATR).[[comm]]
.Status()
with pcscReader, pcscState, activeProtocol and pcscAtr as
output parameters.RESPONSECODE
.[[context]]
.SCARD_S_SUCCESS
, reject
promise with an exception
corresponding
to responseCode and abort
these steps.SmartCardConnectionState
corresponding to pcscState
and activeProtocol.undefined
, reject promise with an
"UnknownError
" DOMException
and abort these steps.SmartCardConnectionStatus
.readerName
"]
to pcscReader.state
"]
to state.answerToReset
"] to
an ArrayBuffer
with the bytes that were written to
pcscAtr.WebIDLdictionary SmartCardConnectionStatus
{
required DOMString readerName
;
required SmartCardConnectionState
state
;
ArrayBuffer answerToReset
;
};
readerName
memberstate
memberanswerToReset
memberWebIDLenum SmartCardConnectionState
{
"absent
",
"present
",
"swallowed
",
"powered
",
"negotiable
",
"t0
",
"t1
",
"raw
"
};
absent
present
swallowed
powered
negotiable
t0
t1
raw
Given a [PCSC5] DWORD
pcscState and a DWORD
activeProtocol, a
corresponding
SmartCardConnectionState
is created with the following steps:
SCARD_ABSENT
, return
"absent
".SCARD_PRESENT
, return
"present
".SCARD_SWALLOWED
, return
"swallowed
".SCARD_POWERED
, return
"powered
".SCARD_NEGOTIABLE
, return
"negotiable
".SCARD_SPECIFIC
, perform the
following steps:
undefined
.The control
(controlCode, data)
method steps are:
[[context]]
.[[operationInProgress]]
is true
, reject promise with a "InvalidStateError
"
DOMException
and return promise.[[comm]]
is null
, reject
promise with a "InvalidStateError
" DOMException
and return
promise.[[context]]
.[[operationInProgress]]
to true
.DWORD
containing
controlCode.BYTE[]
inBuffer.BYTE[]
large enough
to hold any control command response.DWORD
set to 0
.[[comm]]
.Control()
with pcscControlCode, inBuffer, outBuffer and
outBufferLength as arguments.RESPONSECODE
.[[context]]
.SCARD_S_SUCCESS
, reject
promise with an exception
corresponding
to responseCode and abort
these steps.ArrayBuffer
from
resultBytes in this's relevant Realm.The getAttribute
(tag)
method steps are:
[[context]]
.[[operationInProgress]]
is true
, reject promise with a "InvalidStateError
"
DOMException
and return promise.[[comm]]
is null
, reject
promise with a "InvalidStateError
" DOMException
and return
promise.[[context]]
.[[operationInProgress]]
to true
.DWORD
containing tag.BYTE[]
large
enough to hold this reader attribute, as determined by the
platform's [PCSC5] implementation.[[comm]]
.GetReaderCapabilities()
with pcscTag and buffer as arguments.RESPONSECODE
.[[context]]
.SCARD_S_SUCCESS
, reject
promise with an exception
corresponding
to responseCode and abort
these steps.ArrayBuffer
from
resultBytes in this's relevant Realm.The setAttribute
(tag, value)
method steps are:
[[context]]
.[[operationInProgress]]
is true
, reject promise with a "InvalidStateError
"
DOMException
and return promise.[[comm]]
is null
, reject
promise with a "InvalidStateError
" DOMException
and return
promise.[[context]]
.[[operationInProgress]]
to true
.DWORD
containing
tag.BYTE[]
buffer.[[comm]]
.SetReaderCapabilities()
with pcscTag and buffer as arguments.RESPONSECODE
.[[context]]
.SCARD_S_SUCCESS
, reject
promise with an exception
corresponding
to responseCode and abort
these steps.WebIDL[Exposed=(DedicatedWorker, SharedWorker, Window), Serializable]
interface SmartCardError
: DOMException {
constructor
(optional DOMString message = "", SmartCardErrorOptions
options);
readonly attribute SmartCardResponseCode
responseCode
;
};
The responseCode
attribute is the error or warning response
code returned by the related [PCSC5] method.
Given a [PCSC5] RESPONSECODE
different from SCARD_S_SUCCESS
, a
corresponding exception is
created with the following steps:
RESPONSECODE
.SCARD_E_NO_SERVICE
, return a new
"no-service
" SmartCardError
.
SCARD_E_NO_SMARTCARD
, return a new
"no-smartcard
" SmartCardError
.SCARD_E_NOT_READY
, return a new
"not-ready
" SmartCardError
.SCARD_E_NOT_TRANSACTED
, return a new
"not-transacted
" SmartCardError
.SCARD_E_PROTO_MISMATCH
, return a new
"proto-mismatch
" SmartCardError
.SCARD_E_READER_UNAVAILABLE
, return a new
"reader-unavailable
"
SmartCardError
.SCARD_W_REMOVED_CARD
, return a new
"removed-card
" SmartCardError
.SCARD_W_RESET_CARD
, return a new
"reset-card
" SmartCardError
.SCARD_E_SERVER_TOO_BUSY
, return a new
"server-too-busy
" SmartCardError
.SCARD_E_SHARING_VIOLATION
, return a new
"sharing-violation
" SmartCardError
.SCARD_E_SYSTEM_CANCELLED
, return a new
"system-cancelled
" SmartCardError
.SCARD_E_UNKNOWN_READER
, return a new
"unknown-reader
" SmartCardError
.SCARD_W_UNPOWERED_CARD
, return a new
"unpowered-card
" SmartCardError
.SCARD_W_UNRESPONSIVE_CARD
, return a new
"unresponsive-card
" SmartCardError
.SCARD_W_UNSUPPORTED_CARD
, return a new
"unsupported-card
" SmartCardError
.SCARD_E_UNSUPPORTED_FEATURE
, return a new
"unsupported-feature
"
SmartCardError
.SCARD_E_INVALID_PARAMETER
, return a new
TypeError
.SCARD_E_INVALID_HANDLE
, return a new
"InvalidStateError
" DOMException
.SCARD_E_SERVICE_STOPPED
, return a new
"InvalidStateError
" DOMException
.SCARD_P_SHUTDOWN
, return a new
"AbortError
" DOMException
.UnknownError
" DOMException
.WebIDLdictionary SmartCardErrorOptions
{
required SmartCardResponseCode
responseCode
;
};
The responseCode
member is the value for SmartCardError
's
responseCode
attribute.
WebIDLenum SmartCardResponseCode
{
"no-service
",
"no-smartcard
",
"not-ready
",
"not-transacted
",
"proto-mismatch
",
"reader-unavailable
",
"removed-card
",
"reset-card
",
"server-too-busy
",
"sharing-violation
",
"system-cancelled
",
"unknown-reader
",
"unpowered-card
",
"unresponsive-card
",
"unsupported-card
",
"unsupported-feature
"
};
no-service
no-smartcard
not-ready
not-transacted
proto-mismatch
reader-unavailable
removed-card
reset-card
server-too-busy
sharing-violation
system-cancelled
unknown-reader
unpowered-card
unresponsive-card
unsupported-card
unsupported-feature
This specification defines a feature that controls whether the
methods exposed by the smartCard
attribute on the
Navigator
object may be used.
The feature name for this feature is "smart-card".
The default allowlist for this feature
is 'self'
.
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: