Skip to content

Run install() downloads in parallel instead of blocking the main thread. - #200

Merged
padenot merged 2 commits into
mainfrom
install-async
Aug 10, 2026
Merged

padenot merged 2 commits into
mainfrom
install-async

Conversation

@padenot

@padenot padenot commented Aug 6, 2026 •

Copy link
Copy Markdown
Member

Step 6 queued a task on the relevant global object's task queue that then waited for the language pack downloads to complete, which stalls script on the main thread. Move the download initiation and the wait into an [=in parallel=] block, and queue a task only to resolve the promise.

Fixes #199


Preview | Diff

padenot added 2 commits August 6, 2026 16:12
Step 6 queued a task on the relevant global object's task queue that then
waited for the language pack downloads to complete, which stalls script on
the main thread. Move the download initiation and the wait into an
[=in parallel=] block, and queue a task only to resolve the promise.

Fixes #199
The prose already states the promise resolves to false if options.langs is
empty, but no step implemented it: an empty sequence vacuously passes the
unsupported-language check and then trivially succeeds with no downloads,
resolving to true. Add an explicit step, matching how the availability
algorithm treats an empty sequence as unavailable.
@padenot

padenot commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

Added another commit that fixes a mistake in the prose, but it was clear what to do.

@padenot
padenot requested a review from evanbliu August 6, 2026 14:17
@padenot
padenot merged commit 7cc1f35 into main Aug 10, 2026
1 check passed
github-actions Bot added a commit that referenced this pull request Aug 10, 2026
…ad. (#200)

SHA: 7cc1f35
Reason: push, by padenot

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
evanbliu pushed a commit to evanbliu/speech-api that referenced this pull request Oct 8, 2026
Review comments addressed:
- install(): add the transient user activation requirement to the
  algorithm so it matches the privacy section's claim. The check is
  keyed off the (masked) availability status so that whether install()
  requires activation cannot itself leak the true download status.
  Document the NotAllowedError rejection and link the privacy bullet to
  the new step.
- Download Masking: drop the vestigial "API" component from the masking
  state tuple.
- Installation-time friction: name the "on-device-speech-recognition"
  policy-controlled feature directly instead of "per-API".
- Disk Space / Runtime Shared Resources: "set to `true`" and
  "a SpeechRecognitionErrorEvent".
- OS-Provided Models: reword to match the Writing Assistance source text
  ("still need to ensure ... even if the user agent has less control"),
  making clear this restates requirements defined elsewhere rather than
  adding an unmarked normative one.

Editorial cleanups of the same classes found while reviewing:
- Remove remaining vestigial multi-API wording ("these APIs") and the
  "UA" abbreviation; spell out "user agent".
- Mark the user-agent transparency "should" in the cloud section per
  this section's <strong> convention; de-2119 developer guidance.
- Nest Download Masking under Language Pack Availability so that
  masking/friction/cancelation/eviction are siblings, as in the source.
- Title-case the "Installation-Time Friction" heading; fix a subject
  shift in the unmasking sentence; strip trailing whitespace.

Also merges upstream/main (needed because WebAudio#200 restructured install()).
evanbliu added a commit that referenced this pull request Oct 27, 2026
* Apply privacy and security mitigations used by the Web Translation API to the Web Speech API

* Apply privacy and security mitigations used by the Web Translation API to the Web Speech API

* Apply privacy and security mitigations used by the Web Translation API to the Web Speech API

* Address review feedback on privacy mitigations

- Fix formatting for `true` code span
- Fix typo: 'an per-API' -> 'a per-API'
- Remove redundant Alternate Options subsection

* Address review feedback from hoch@ on privacy mitigations

Review comments addressed:
- install(): add the transient user activation requirement to the
  algorithm so it matches the privacy section's claim. The check is
  keyed off the (masked) availability status so that whether install()
  requires activation cannot itself leak the true download status.
  Document the NotAllowedError rejection and link the privacy bullet to
  the new step.
- Download Masking: drop the vestigial "API" component from the masking
  state tuple.
- Installation-time friction: name the "on-device-speech-recognition"
  policy-controlled feature directly instead of "per-API".
- Disk Space / Runtime Shared Resources: "set to `true`" and
  "a SpeechRecognitionErrorEvent".
- OS-Provided Models: reword to match the Writing Assistance source text
  ("still need to ensure ... even if the user agent has less control"),
  making clear this restates requirements defined elsewhere rather than
  adding an unmarked normative one.

Editorial cleanups of the same classes found while reviewing:
- Remove remaining vestigial multi-API wording ("these APIs") and the
  "UA" abbreviation; spell out "user agent".
- Mark the user-agent transparency "should" in the cloud section per
  this section's <strong> convention; de-2119 developer guidance.
- Nest Download Masking under Language Pack Availability so that
  masking/friction/cancelation/eviction are siblings, as in the source.
- Title-case the "Installation-Time Friction" heading; fix a subject
  shift in the unmasking sentence; strip trailing whitespace.

Also merges upstream/main (needed because #200 restructured install()).

* Address review feedback on privacy and security mitigations

* Use standard rfc2119 markup instead of strong emphasis in privacy/security sections

* Move normative privacy and security requirements into API Description section

* Address review feedback on language pack eviction and background tab examples

* Enforce download masking for local recognition regardless of processLocally

---------

Co-authored-by: Evan Liu <evliu@google.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

install() algorithm blocks main thread

2 participants