diff --git a/.github/workflows/auto-publish.yml b/.github/workflows/auto-publish.yml
index 13594f567..7562816c8 100644
--- a/.github/workflows/auto-publish.yml
+++ b/.github/workflows/auto-publish.yml
@@ -13,10 +13,10 @@ jobs:
steps:
- name: Checking out the repository
uses: actions/checkout@v4
- - name: Setting up Python 3.9
+ - name: Setting up Python 3.12
uses: actions/setup-python@v5
with:
- python-version: '3.9'
+ python-version: '3.12'
- name: Installing and updating Bikeshed
run: pip3 install bikeshed && bikeshed update
shell: bash
diff --git a/compile.sh b/compile.sh
index 4d3cf60bc..00d62c37b 100755
--- a/compile.sh
+++ b/compile.sh
@@ -41,6 +41,7 @@ bikeshed --print=plain -f spec 2>&1 | tee $BSLOG
# Also remove any lines that start "cannot identify image file" because the path
# is based the machine doing the build so we don't want that in the results.
sed 's;^LINE [0-9]*:[0-9]*:;LINE:;' $BSLOG |
+ sed 's;^LINE [0-9]*:[0-9]* of file .*(included by a block on [0-9]*:[0-9]*):;LINE:;' |
sed '/^cannot identify image file/d' |
sed -e '$a\' > $ERRLOG
diff --git a/expected-errs.txt b/expected-errs.txt
index d97559c93..cc68ccf54 100644
--- a/expected-errs.txt
+++ b/expected-errs.txt
@@ -47,11 +47,87 @@ LINE: No 'idl' refs found for '[CC-MODE]'.
{{ChannelCountMode/[CC-MODE]}}
LINE: No 'idl' refs found for '[CC-INTERP]'.
{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
LINE: Multiple possible 'audio' element refs.
Arbitrarily chose https://html.spec.whatwg.org/multipage/media.html#audio
To auto-select one of the following refs, insert one of these lines into a
block:
spec:html; type:element; text:audio
spec:epub-34; type:element; text:audio
<{audio}>
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
+LINE: No 'idl' refs found for '[CC-MODE]'.
+{{ChannelCountMode/[CC-MODE]}}
+LINE: No 'idl' refs found for '[CC-INTERP]'.
+{{ChannelInterpretation/[CC-INTERP]}}
LINE: W3C policy requires Privacy Considerations and Security Considerations to be separate sections, but you appear to have them combined into one.
✔ Successfully generated, but fatal errors were suppressed
diff --git a/index.bs b/index.bs
index 35eb26d27..67f9b866d 100644
--- a/index.bs
+++ b/index.bs
@@ -4202,7 +4202,7 @@ Methods
- cancelTime: The time after which any previously scheduled parameter changes will be cancelled. It is a time in the same time coordinate system as the {{AudioContext}}'s {{BaseAudioContext/currentTime}} attribute. A {{RangeError}} exception MUST be thrown if cancelTime is negative. If {{AudioParam/cancelAndHoldAtTime()/cancelTime}} is less than {{BaseAudioContext/currentTime}}, it is clamped to {{BaseAudioContext/currentTime}}.
+ cancelTime: The time after which any previously scheduled parameter changes will be cancelled. It is a time in the same time coordinate system as the {{AudioContext}}'s {{BaseAudioContext/currentTime}} attribute. A {{RangeError}} exception MUST be thrown if cancelTime is negative. If {{AudioParam/cancelAndHoldAtTime()/cancelTime}} is less than {{BaseAudioContext/currentTime}}, it is clamped to {{BaseAudioContext/currentTime}}.
@@ -8861,7 +8861,7 @@ enum OscillatorType {
{{OscillatorType}} enumeration description
- | Enum value | Description |
+ | Enum value | Description |
| "sine" | A sine wave
|
| "square" | A square wave of duty period 0.5
@@ -9134,7 +9134,7 @@ enum PanningModelType {
{{PanningModelType}} enumeration description
- | Enum value | Description |
+ | Enum value | Description |
| "equalpower"
|
@@ -9186,7 +9186,10 @@ enum DistanceModelType {
{{DistanceModelType}} enumeration description
- | Enum value | Description |
+
+ | Enum value |
+ Description |
+
"linear"
@@ -10077,7 +10080,10 @@ enum OverSampleType {
{{OverSampleType}} enumeration description
- | Enum value | Description |
+
+ | Enum value |
+ Description |
+
| "none"
| Don't oversample
@@ -11666,8 +11672,8 @@ Each {{AudioContext}} possesses exactly one {{AudioPlaybackStats}}.
Attributes
Note: These attributes update only once per second and under specific
-conditions. See [[#update-audio-stats]] and [[#AudioPlaybackStats-mitigations]]
-for details.
+conditions. See [[#update-audio-stats]] and
+[[#AudioPlaybackStats-privacy-mitigations]] for details.
: underrunDuration
@@ -11677,32 +11683,37 @@ for details.
NOTE: This metric can be used together with {{totalDuration}} to
calculate the percentage of played out media that was not provided by
the {{AudioContext}}.
-
+
: underrunEvents
::
Returns the value of the {{[[underrun events]]}} internal slot.
+
: totalDuration
::
Returns the value of the {{[[total duration]]}} internal slot.
+
: averageLatency
::
Returns the value of the {{[[average latency]]}} internal slot.
+
: minimumLatency
::
Returns the value of the {{[[minimum latency]]}} internal slot.
+
: maximumLatency
::
Returns the value of the {{[[maximum latency]]}} internal slot.
+
Methods
@@ -11721,40 +11732,42 @@ Methods
1. Set {{[[average latency]]}} to currentLatency.
1. Set {{[[minimum latency]]}} to currentLatency.
1. Set {{[[maximum latency]]}} to currentLatency.
+
Updating the stats
Once per second, execute the update audio stats algorithm:
-1. If {{[[audio context]]}} is not running, abort these steps.
-1. Let canUpdate be false.
-1. Let document be the current [=this=]'s
- [=relevant global object=]'s [=associated Document=].
-If document is [=Document/fully active=] and document's
- [=Document/visibility state=] is `"visible"`, set canUpdate to
- true.
-1. Let permission be the [=permission state=] for the permission
- associated with [="microphone"=] access.
-If permission is "granted", set canUpdate to true.
-1. If canUpdate is false, abort these steps.
-1. Set {{[[underrun duration]]}} to the total duration of all [=underrun events=]
- (in seconds)
- that have occurred in {{[[audio context]]}} playback since its construction.
-1. Set {{[[underrun events]]}} to the total number of [=underrun events=]
- that have occurred in {{[[audio context]]}} playback since its
- construction.
-1. Set {{[[total duration]]}} to {{[[underrun duration]]}} +
- {{[[audio context]]}}.{{BaseAudioContext/currentTime}}.
-1. Set {{[[average latency]]}} to the average playback latency (in seconds) of
- {{[[audio context]]}} playback over the {{currently tracked interval}}.
-1. Set {{[[minimum latency]]}} to the minimum playback latency (in seconds) of
- {{[[audio context]]}} playback over the {{currently tracked interval}}.
-1. Set {{[[maximum latency]]}} to the maximum playback latency (in seconds) of
- {{[[audio context]]}} playback over the {{currently tracked interval}}.
+ 1. If {{[[audio context]]}} is not running, abort these steps.
+ 1. Let canUpdate be false.
+ 1. Let document be the current [=this=]'s
+ [=relevant global object=]'s [=associated Document=].
+ If document is [=Document/fully active=] and document's
+ [=Document/visibility state=] is `"visible"`, set canUpdate to
+ true.
+ 1. Let permission be the [=permission state=] for the permission
+ associated with "microphone" access.
+ If permission is "granted", set canUpdate to true.
+ 1. If canUpdate is false, abort these steps.
+ 1. Set {{[[underrun duration]]}} to the total duration of all [=underrun events=]
+ (in seconds)
+ that have occurred in {{[[audio context]]}} playback since its construction.
+ 1. Set {{[[underrun events]]}} to the total number of [=underrun events=]
+ that have occurred in {{[[audio context]]}} playback since its
+ construction.
+ 1. Set {{[[total duration]]}} to {{[[underrun duration]]}} +
+ {{[[audio context]]}}.{{BaseAudioContext/currentTime}}.
+ 1. Set {{[[average latency]]}} to the average playback latency (in seconds) of
+ {{[[audio context]]}} playback over the {{currently tracked interval}}.
+ 1. Set {{[[minimum latency]]}} to the minimum playback latency (in seconds) of
+ {{[[audio context]]}} playback over the {{currently tracked interval}}.
+ 1. Set {{[[maximum latency]]}} to the maximum playback latency (in seconds) of
+ {{[[audio context]]}} playback over the {{currently tracked interval}}.
-Privacy considerations for {{AudioPlaybackStats}}
+
+Privacy considerations for {{AudioPlaybackStats}}
-Risk
+Risk
Audio underrun information could be used to form a cross-site
covert channel between two cooperating sites.
One site could transmit information by intentionally causing audio glitches
@@ -11765,7 +11778,8 @@ Note: This covert channel depends on specific system characteristics.
It typically requires a shared linearization point (such as an OS or browser
audio mixer) and callbacks that are effectively synchronous from that point,
without intermediate buffering that would flatten load spikes.
-Mitigations
+
+Mitigations
To inhibit the usage of such a covert channel, the API implements these
mitigations.
- The values returned by the API MUST not be updated more than once per
@@ -11855,10 +11869,9 @@ thread is done using control message passing.
Communication in the other direction is done using regular event loop
tasks.
-Each {{AudioContext}} has a single control message
-queue that is a list of control
-messages that are operations running on the rendering
-thread.
+Each {{AudioContext}} has a single control message queue
+that is a list of control messages that are
+operations running on the rendering thread.
Queuing a control message
means adding the message to the end of the control message queue of an
| | | |