mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
* Re-implement readablestream: basics and default reader and controller --------- Co-authored-by: Jason Tsai <jason@pews.dev> Signed-off-by: Wu Wayne <yuweiwu@pm.me> Add remaining WebIDLs of ReadableStream (#32605) * Add Reader's WebIDL files * Add necessary methods in ReadableStream.webidl Signed-off-by: Wu Wayne <yuweiwu@pm.me> Create safe wrapper for JSFunctions (#32620) * Create safe wrapper for JSFunctions Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com> * Add assert to check if the name ends in a null character Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com> * Create macro to wrap unsafe extern "C" function calls Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com> * Remove WRAPPER_FN Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com> * Add macro example documentation Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com> * Use C-string literals Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com> * Ensure name is Cstr type Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com> * Scope #[allow(unsafe_code)] Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com> --------- Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com> Signed-off-by: Wu Wayne <yuweiwu@pm.me> Start implementation of default controller and reader Start implementation of default controller and reader * implement basic internal slots, with todos Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * enum for controller Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * re-implement native controller methods Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * add calling into pull algo Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * more details on chunk enqueuing Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * add fulfill read request, clean-up warnings Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * read request and reader typing Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * allow for more than one non-native underlying source type Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * add todo for should pull Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * add underlying source dom struct container Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * remove rc around source type * add default controller init in stream constructor * setup source container with prototype of source dict * clean-up docs, dispatch of controller in pull algo call * turn off SM streams * remove prototype setting on underlying source container * fix read request promise resolving * tidy * clean-up js conversions in read req handlers * add queue with sizes concept * use dom in pull promise handlers * Demonstrate using dictionary as callback this object. * move value with size to a struct * fmt * put readable stream state in a cell * nits in expectations * remove allow unroot by passing read result directly to promise resolving * tidy * root default controller inside call_pull_if_needed --------- Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Co-authored-by: Josh Matthews <josh@joshmatthews.net> Signed-off-by: Wu Wayne <yuweiwu@pm.me> ReadableStream: implement Cancel and Locked (#33136) * implement Locked * implement Cancel and close Signed-off-by: Wu Wayne <yuweiwu@pm.me> Add GetPromiseIsHandled and SetAnyPromiseIsHandled to Promise Signed-off-by: Taym <haddadi.taym@gmail.com> mach fmt Signed-off-by: Taym <haddadi.taym@gmail.com> Readablestream default controller: get desired size (#33497) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> stream: implement controller close (#33498) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> implement stream default controller error (#33503) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Readablestream default controller: enqueue (#33528) * Implement ReadableStreamDefaultControllerMethods::Enqueue Signed-off-by: Wu Wayne <yuweiwu@pm.me> * Add spec comments Signed-off-by: Wu Wayne <yuweiwu@pm.me> --------- Signed-off-by: Wu Wayne <yuweiwu@pm.me> readablestream default controller: fulfill read requests (#33542) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Fix extract_size_algorithm (#33561) Signed-off-by: Wu Wayne <yuweiwu@pm.me> Readablestream default controller: use strategy size (#33551) * readablestream default controller: use strategy size, fallible enqueue Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> docs * readablestream default controller: clear strategy size Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * prevent potential re-borrow panics when calling into the strategy size Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * document readablestream constructor Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> --------- Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Readablestream: impl default controller should pull, start algo (#33586) * implement should-pull algo for default controller Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * add start algorithm setup for default controller Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> --------- Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> implement promise native handling for start and pull algorithms (#33603) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Implement ReadableStreamDefaultReader (#33160) * Implement ReadableStreamDefaultReader Make the stream mutable readable-stream-reader-generic-release Proper error types when releasing Closed Cancel Signed-off-by: Taym <haddadi.taym@gmail.com> * follow the spec more closely Signed-off-by: Taym <haddadi.taym@gmail.com> --------- Signed-off-by: Taym <haddadi.taym@gmail.com> Implement ReadableStreamDefaultReader read (#34007) * Implement ReadableStreamDefaultReader read Signed-off-by: Taym <haddadi.taym@gmail.com> * Perform readRequest’s error steps with stream.stored_error Signed-off-by: Taym <haddadi.taym@gmail.com> --------- Signed-off-by: Taym <haddadi.taym@gmail.com> Improve ReadableStreamDefaultReader close (#34014) * improve ReadableStreamDefaultReader close Signed-off-by: Taym <haddadi.taym@gmail.com> * remove resolve_closed_promise Signed-off-by: Taym <haddadi.taym@gmail.com> --------- Signed-off-by: Taym <haddadi.taym@gmail.com> Use Rc<Box<[u8]>> for queue to optimize get_in_memory_bytes Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> * Improve read_a_chunk and stop_reading implemntation (#34077) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Implement ReadableStreamDefaultReader::Constructor (#34056) * Implement ReadableStreamDefaultReader::Constructor Signed-off-by: Taym <haddadi.taym@gmail.com> * make start_reading returns ReadableStreamDefaultReader Signed-off-by: Taym <haddadi.taym@gmail.com> * Fix can_gc Signed-off-by: Taym <haddadi.taym@gmail.com> * Add canGc to ReadableStream::GetReader Signed-off-by: Taym <haddadi.taym@gmail.com> --------- Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Readablestream fix CanGc (#34080) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * correct ReadableStream::error_native implementation and fix clippy warnings (#34088) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * turn assertion of stream present on controller on a early return with false (#34097) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Fix already mutably borrowed crash (#34105) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Refactor `get_in_memory_bytes` to return `Option<Vec<u8>> and avoid `unreachable!` panic (#34123) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Set ReadableStream ReadableStreamDefaultReader in start_reading (#34125) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Fix Unhandled rejection with value: object `TypeError: stream is not locked` (#34204) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Fix assert!(self.is_readable()) crash in ReadableStream::close (#34207) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * fix call to to_js_object in underlying source algos (#34098) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * do not assume presence of a stream when performing pull steps (#34244) * do not assume presence of a stream when performing pull steps Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * add doc comments Co-authored-by: Taym Haddadi <haddadi.taym@gmail.com> Signed-off-by: Gregory Terzian <2792687+gterzian@users.noreply.github.com> --------- Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Gregory Terzian <2792687+gterzian@users.noreply.github.com> Co-authored-by: Taym Haddadi <haddadi.taym@gmail.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * gracefully handle failure of underlying source algorithms (#34243) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * ensure result of calling start algo is an object (#34245) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * return js failed error if underlying source constructor threw (#34246) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Use JSVal for ValueWithSize::value (#34259) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * fix release reader lock, (#34255) fix setting stream on controller in new, fix matching fallthrough, reduce visibility of controller error method Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * in stream cancel, reject promist if locked (#34271) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Fix UnderlyingSourceContainer::call_start_algorithm (#34277) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * implement controller cancel steps, fix stream cancel method (#34301) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * fix conditional in perform pull steps (#34324) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * set reader closed promise to one resolved with undefined if stream closed on init (#34321) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * fix init of stream and controller (#34323) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Stream: Fix reborrow in controller enqueue, and fix error and exception handling. (#34338) * fix re-borrow in controller enqueue Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * do not call to_jsval on JSFailed error in enqueue Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * fix error and exception handling in controller enqueue Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * remove TODO about correctness of stored error, since this was done as part of the switch to a js val. Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> --------- Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Stream: Fix incorrect "this" object in underlying source callbacks (#34368) * in controller close, throw type error if stream cannot be closed Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * store original js object for underlying source, for use as this object in callbacks Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> --------- Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * fix conditional logic in enqueue to ensure pull is called into (#34375) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Stream: Fix bytelength queueing strategy (#34376) * fix handling of value that is not an object in bytelength queuing strategy Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * return type error if strategy size call fails, to prevent panic because no exception is pending Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> --------- Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * set correct default count queuing size strategy (#34389) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * use proto in stream constructor (#34441) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * fix edge cases in get_desired_size (#34440) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Stream: fix algo and strategy calls error handling. (#34424) * fix error handling in cancel steps Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * in pull steps, reject promise if pull algo throws Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * if start algorithm fails, rethrow the error Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * when the strategy size fails, directly get the pending exception and use it to error the stream Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * add error handling to enqueue value with size Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * when enqueueing a value errors, ensure we error and stream with the same error used to throw an exception Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> --------- Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * fix native use of streams (#34468) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Implement readablestreamdefaulttee (#34405) * Implement readablestreamdefaulttee Signed-off-by: Taym <haddadi.taym@gmail.com> * Create UnderlyingSourceType::Tee each stream Signed-off-by: Taym <haddadi.taym@gmail.com> * Use Dom instead of DomRoot Signed-off-by: Taym <haddadi.taym@gmail.com> * Queue a microtask for readRequest chunk steps Signed-off-by: Taym <haddadi.taym@gmail.com> * fix create_readable_stream Signed-off-by: Taym <haddadi.taym@gmail.com> * Remove unnecessary Rc Signed-off-by: Taym <haddadi.taym@gmail.com> * Use correct doc link Signed-off-by: Taym <haddadi.taym@gmail.com> * Add #[allow(crown::unrooted_must_root)] Signed-off-by: Taym <haddadi.taym@gmail.com> * Fix crash in ClosedPromiseRejectionHandler Signed-off-by: Taym <haddadi.taym@gmail.com> * reflect TeeReadRequest and TeeUnderlyingSource Signed-off-by: Taym <haddadi.taym@gmail.com> * fix can_gc Signed-off-by: Taym <haddadi.taym@gmail.com> * reflect tee source, and fix use of mutable dom for tee source and request Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * Fix typo that resolves multiple test failures in 'Tee' tests Signed-off-by: Taym <haddadi.taym@gmail.com> * Fix readable-streams/tee.any.js test Signed-off-by: Taym <haddadi.taym@gmail.com> --------- Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Co-authored-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Align ReadableStreamDefaultReader with spec and fix additional tests in default-reader.any.js (#34531) And fix crate::DomTypeHolder usage * Align ReadableStreamDefaultReader with spec and fix additional tests in default-reader.any.js Signed-off-by: Taym <haddadi.taym@gmail.com> * make reader rooted in Constructor and acquire_default_reader Signed-off-by: Taym <haddadi.taym@gmail.com> * Remove spaces Signed-off-by: Taym <haddadi.taym@gmail.com> --------- Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Streams: fetch stream chunks should be uint8 arrays (#34553) * fetch stream chunks should be uint8 arrays Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> * fix clippy Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> --------- Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> Co-authored-by: Taym Haddadi <haddadi.taym@gmail.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Update wpt test for ReadableStream reimplementation (#34579) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Fix ignore_malloc_size_of in readablestream tee (#34578) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Remove incorrect use of handle array, fail test safely by giving only one reason (#34560) Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Update more wpt test for ReadableStream reimplementation (#34598) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Fix doc and rename Tee to DefaultTee (#34612) Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * fix: Address review comments Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Update response-stream-with-broken-then.any.js.ini test expectation Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * fix reflect_dom_object can_gc Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Fix compositeReason for DefaultTeeUnderlyingSource (#34627) * Fix compositeReason for DefaultTeeUnderlyingSource Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Update test Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> --------- Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> * Last fixes stream (#34636) * remove now unsused from_js method of readable stream * fix documenation of error steps * return type error instread of panicking on a todo, when trying to construct a stream of type bytes Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> --------- Signed-off-by: Gregory Terzian <2792687+gterzian@users.noreply.github.com> * fix crown rooting related errors (#34662) Signed-off-by: Gregory Terzian <2792687+gterzian@users.noreply.github.com> --------- Signed-off-by: Taym <haddadi.taym@gmail.com> Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com> Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com> Signed-off-by: Gregory Terzian <2792687+gterzian@users.noreply.github.com> Co-authored-by: Wu Wayne <yuweiwu@pm.me> Co-authored-by: Taym Haddadi <haddadi.taym@gmail.com>
618 lines
18 KiB
Rust
618 lines
18 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
//! The implementation of the DOM.
|
|
//!
|
|
//! The DOM is comprised of interfaces (defined by specifications using
|
|
//! [WebIDL](https://heycam.github.io/webidl/)) that are implemented as Rust
|
|
//! structs in submodules of this module. Its implementation is documented
|
|
//! below.
|
|
//!
|
|
//! A DOM object and its reflector
|
|
//! ==============================
|
|
//!
|
|
//! The implementation of an interface `Foo` in Servo's DOM involves two
|
|
//! related but distinct objects:
|
|
//!
|
|
//! * the **DOM object**: an instance of the Rust struct `dom::foo::Foo`
|
|
//! (marked with the `#[dom_struct]` attribute) on the Rust heap;
|
|
//! * the **reflector**: a `JSObject` allocated by SpiderMonkey, that owns the
|
|
//! DOM object.
|
|
//!
|
|
//! Memory management
|
|
//! =================
|
|
//!
|
|
//! Reflectors of DOM objects, and thus the DOM objects themselves, are managed
|
|
//! by the SpiderMonkey Garbage Collector. Thus, keeping alive a DOM object
|
|
//! is done through its reflector.
|
|
//!
|
|
//! For more information, see:
|
|
//!
|
|
//! * rooting pointers on the stack:
|
|
//! the [`Root`](bindings/root/struct.Root.html) smart pointer;
|
|
//! * tracing pointers in member fields: the [`Dom`](bindings/root/struct.Dom.html),
|
|
//! [`MutNullableDom`](bindings/root/struct.MutNullableDom.html) and
|
|
//! [`MutDom`](bindings/root/struct.MutDom.html) smart pointers and
|
|
//! [the tracing implementation](bindings/trace/index.html);
|
|
//! * rooting pointers from across thread boundaries or in channels: the
|
|
//! [`Trusted`](bindings/refcounted/struct.Trusted.html) smart pointer;
|
|
//!
|
|
//! Inheritance
|
|
//! ===========
|
|
//!
|
|
//! Rust does not support struct inheritance, as would be used for the
|
|
//! object-oriented DOM APIs. To work around this issue, Servo stores an
|
|
//! instance of the superclass in the first field of its subclasses. (Note that
|
|
//! it is stored by value, rather than in a smart pointer such as `Dom<T>`.)
|
|
//!
|
|
//! This implies that a pointer to an object can safely be cast to a pointer
|
|
//! to all its classes.
|
|
//!
|
|
//! This invariant is enforced by the lint in
|
|
//! `plugins::lints::inheritance_integrity`.
|
|
//!
|
|
//! Interfaces which either derive from or are derived by other interfaces
|
|
//! implement the `Castable` trait, which provides three methods `is::<T>()`,
|
|
//! `downcast::<T>()` and `upcast::<T>()` to cast across the type hierarchy
|
|
//! and check whether a given instance is of a given type.
|
|
//!
|
|
//! ```ignore
|
|
//! use dom::bindings::inheritance::Castable;
|
|
//! use dom::element::Element;
|
|
//! use dom::htmlelement::HTMLElement;
|
|
//! use dom::htmlinputelement::HTMLInputElement;
|
|
//!
|
|
//! if let Some(elem) = node.downcast::<Element> {
|
|
//! if elem.is::<HTMLInputElement>() {
|
|
//! return elem.upcast::<HTMLElement>();
|
|
//! }
|
|
//! }
|
|
//! ```
|
|
//!
|
|
//! Furthermore, when discriminating a given instance against multiple
|
|
//! interface types, code generation provides a convenient TypeId enum
|
|
//! which can be used to write `match` expressions instead of multiple
|
|
//! calls to `Castable::is::<T>`. The `type_id()` method of an instance is
|
|
//! provided by the farthest interface it derives from, e.g. `EventTarget`
|
|
//! for `HTMLMediaElement`. For convenience, that method is also provided
|
|
//! on the `Node` interface to avoid unnecessary upcasts to `EventTarget`.
|
|
//!
|
|
//! ```ignore
|
|
//! use dom::bindings::inheritance::{EventTargetTypeId, NodeTypeId};
|
|
//!
|
|
//! match *node.type_id() {
|
|
//! EventTargetTypeId::Node(NodeTypeId::CharacterData(_)) => ...,
|
|
//! EventTargetTypeId::Node(NodeTypeId::Element(_)) => ...,
|
|
//! ...,
|
|
//! }
|
|
//! ```
|
|
//!
|
|
//! Construction
|
|
//! ============
|
|
//!
|
|
//! DOM objects of type `T` in Servo have two constructors:
|
|
//!
|
|
//! * a `T::new_inherited` static method that returns a plain `T`, and
|
|
//! * a `T::new` static method that returns `DomRoot<T>`.
|
|
//!
|
|
//! (The result of either method can be wrapped in `Result`, if that is
|
|
//! appropriate for the type in question.)
|
|
//!
|
|
//! The latter calls the former, boxes the result, and creates a reflector
|
|
//! corresponding to it by calling `dom::bindings::utils::reflect_dom_object`
|
|
//! (which yields ownership of the object to the SpiderMonkey Garbage Collector).
|
|
//! This is the API to use when creating a DOM object.
|
|
//!
|
|
//! The former should only be called by the latter, and by subclasses'
|
|
//! `new_inherited` methods.
|
|
//!
|
|
//! DOM object constructors in JavaScript correspond to a `T::Constructor`
|
|
//! static method. This method is always fallible.
|
|
//!
|
|
//! Destruction
|
|
//! ===========
|
|
//!
|
|
//! When the SpiderMonkey Garbage Collector discovers that the reflector of a
|
|
//! DOM object is garbage, it calls the reflector's finalization hook. This
|
|
//! function deletes the reflector's DOM object, calling its destructor in the
|
|
//! process.
|
|
//!
|
|
//! Mutability and aliasing
|
|
//! =======================
|
|
//!
|
|
//! Reflectors are JavaScript objects, and as such can be freely aliased. As
|
|
//! Rust does not allow mutable aliasing, mutable borrows of DOM objects are
|
|
//! not allowed. In particular, any mutable fields use `Cell` or `DomRefCell`
|
|
//! to manage their mutability.
|
|
//!
|
|
//! `Reflector` and `DomObject`
|
|
//! =============================
|
|
//!
|
|
//! Every DOM object has a `Reflector` as its first (transitive) member field.
|
|
//! This contains a `*mut JSObject` that points to its reflector.
|
|
//!
|
|
//! The `FooBinding::Wrap` function creates the reflector, stores a pointer to
|
|
//! the DOM object in the reflector, and initializes the pointer to the reflector
|
|
//! in the `Reflector` field.
|
|
//!
|
|
//! The `DomObject` trait provides a `reflector()` method that returns the
|
|
//! DOM object's `Reflector`. It is implemented automatically for DOM structs
|
|
//! through the `#[dom_struct]` attribute.
|
|
//!
|
|
//! Implementing methods for a DOM object
|
|
//! =====================================
|
|
//!
|
|
//! * `dom::bindings::codegen::Bindings::FooBindings::FooMethods` for methods
|
|
//! defined through IDL;
|
|
//! * `&self` public methods for public helpers;
|
|
//! * `&self` methods for private helpers.
|
|
//!
|
|
//! Accessing fields of a DOM object
|
|
//! ================================
|
|
//!
|
|
//! All fields of DOM objects are private; accessing them from outside their
|
|
//! module is done through explicit getter or setter methods.
|
|
//!
|
|
//! Inheritance and casting
|
|
//! =======================
|
|
//!
|
|
//! All DOM interfaces part of an inheritance chain (i.e. interfaces
|
|
//! that derive others or are derived from) implement the trait `Castable`
|
|
//! which provides both downcast and upcasts.
|
|
//!
|
|
//! ```ignore
|
|
//! # use script::dom::bindings::inheritance::Castable;
|
|
//! # use script::dom::element::Element;
|
|
//! # use script::dom::node::Node;
|
|
//! # use script::dom::htmlelement::HTMLElement;
|
|
//! fn f(element: &Element) {
|
|
//! let base = element.upcast::<Node>();
|
|
//! let derived = element.downcast::<HTMLElement>().unwrap();
|
|
//! }
|
|
//! ```
|
|
//!
|
|
//! Adding a new DOM interface
|
|
//! ==========================
|
|
//!
|
|
//! Adding a new interface `Foo` requires at least the following:
|
|
//!
|
|
//! * adding the new IDL file at `components/script/dom/webidls/Foo.webidl`;
|
|
//! * creating `components/script/dom/foo.rs`;
|
|
//! * listing `foo.rs` in `components/script/dom/mod.rs`;
|
|
//! * defining the DOM struct `Foo` with a `#[dom_struct]` attribute, a
|
|
//! superclass or `Reflector` member, and other members as appropriate;
|
|
//! * implementing the
|
|
//! `dom::bindings::codegen::Bindings::FooBindings::FooMethods` trait for
|
|
//! `Foo`;
|
|
//! * adding/updating the match arm in create_element in
|
|
//! `components/script/dom/create.rs` (only applicable to new types inheriting
|
|
//! from `HTMLElement`)
|
|
//!
|
|
//! More information is available in the [bindings module](bindings/index.html).
|
|
//!
|
|
//! Accessing DOM objects from layout
|
|
//! =================================
|
|
//!
|
|
//! Layout code can access the DOM through the
|
|
//! [`LayoutDom`](bindings/root/struct.LayoutDom.html) smart pointer. This does not
|
|
//! keep the DOM object alive; we ensure that no DOM code (Garbage Collection
|
|
//! in particular) runs while layout is accessing the DOM.
|
|
//!
|
|
//! Methods accessible to layout are implemented on `LayoutDom<Foo>` using
|
|
//! `LayoutFooHelpers` traits.
|
|
|
|
#[macro_use]
|
|
pub mod macros;
|
|
|
|
pub mod types {
|
|
include!(concat!(env!("OUT_DIR"), "/InterfaceTypes.rs"));
|
|
}
|
|
|
|
pub mod abortcontroller;
|
|
pub mod abstractrange;
|
|
pub mod abstractworker;
|
|
pub mod abstractworkerglobalscope;
|
|
pub mod activation;
|
|
pub mod analysernode;
|
|
pub mod animationevent;
|
|
pub mod attr;
|
|
pub mod audiobuffer;
|
|
pub mod audiobuffersourcenode;
|
|
pub mod audiocontext;
|
|
pub mod audiodestinationnode;
|
|
pub mod audiolistener;
|
|
pub mod audionode;
|
|
pub mod audioparam;
|
|
pub mod audioscheduledsourcenode;
|
|
pub mod audiotrack;
|
|
pub mod audiotracklist;
|
|
pub mod baseaudiocontext;
|
|
pub mod beforeunloadevent;
|
|
pub mod bindings;
|
|
pub mod biquadfilternode;
|
|
pub mod blob;
|
|
pub mod bluetooth;
|
|
pub mod bluetoothadvertisingevent;
|
|
pub mod bluetoothcharacteristicproperties;
|
|
pub mod bluetoothdevice;
|
|
pub mod bluetoothpermissionresult;
|
|
pub mod bluetoothremotegattcharacteristic;
|
|
pub mod bluetoothremotegattdescriptor;
|
|
pub mod bluetoothremotegattserver;
|
|
pub mod bluetoothremotegattservice;
|
|
pub mod bluetoothuuid;
|
|
pub mod broadcastchannel;
|
|
pub mod bytelengthqueuingstrategy;
|
|
pub mod canvasgradient;
|
|
pub mod canvaspattern;
|
|
pub mod canvasrenderingcontext2d;
|
|
pub mod cdatasection;
|
|
pub mod channelmergernode;
|
|
pub mod channelsplitternode;
|
|
pub mod characterdata;
|
|
pub mod client;
|
|
pub mod closeevent;
|
|
pub mod comment;
|
|
pub mod compositionevent;
|
|
pub mod console;
|
|
pub mod constantsourcenode;
|
|
pub mod countqueuingstrategy;
|
|
mod create;
|
|
pub mod crypto;
|
|
pub mod cryptokey;
|
|
pub mod css;
|
|
pub mod cssconditionrule;
|
|
pub mod cssfontfacerule;
|
|
pub mod cssgroupingrule;
|
|
pub mod cssimportrule;
|
|
pub mod csskeyframerule;
|
|
pub mod csskeyframesrule;
|
|
pub mod csslayerblockrule;
|
|
pub mod csslayerstatementrule;
|
|
pub mod cssmediarule;
|
|
pub mod cssnamespacerule;
|
|
pub mod cssrule;
|
|
pub mod cssrulelist;
|
|
pub mod cssstyledeclaration;
|
|
pub mod cssstylerule;
|
|
pub mod cssstylesheet;
|
|
pub mod cssstylevalue;
|
|
pub mod csssupportsrule;
|
|
pub mod customelementregistry;
|
|
pub mod customevent;
|
|
pub mod datatransfer;
|
|
pub mod datatransferitem;
|
|
pub mod datatransferitemlist;
|
|
pub mod dedicatedworkerglobalscope;
|
|
pub mod defaultteereadrequest;
|
|
pub mod defaultteeunderlyingsource;
|
|
pub mod dissimilaroriginlocation;
|
|
pub mod dissimilaroriginwindow;
|
|
pub mod document;
|
|
pub mod documentfragment;
|
|
pub mod documentorshadowroot;
|
|
pub mod documenttype;
|
|
pub mod domexception;
|
|
pub mod domimplementation;
|
|
pub mod dommatrix;
|
|
pub mod dommatrixreadonly;
|
|
pub mod domparser;
|
|
pub mod dompoint;
|
|
pub mod dompointreadonly;
|
|
pub mod domquad;
|
|
pub mod domrect;
|
|
pub mod domrectlist;
|
|
pub mod domrectreadonly;
|
|
pub mod domstringlist;
|
|
pub mod domstringmap;
|
|
pub mod domtokenlist;
|
|
pub mod dynamicmoduleowner;
|
|
pub mod element;
|
|
pub mod elementinternals;
|
|
pub mod errorevent;
|
|
pub mod event;
|
|
pub mod eventsource;
|
|
pub mod eventtarget;
|
|
pub mod extendableevent;
|
|
pub mod extendablemessageevent;
|
|
pub mod file;
|
|
pub mod filelist;
|
|
pub mod filereader;
|
|
pub mod filereadersync;
|
|
pub mod focusevent;
|
|
pub mod fontfaceset;
|
|
pub mod formdata;
|
|
pub mod formdataevent;
|
|
pub mod gainnode;
|
|
pub mod gamepad;
|
|
pub mod gamepadbutton;
|
|
pub mod gamepadbuttonlist;
|
|
pub mod gamepadevent;
|
|
pub mod gamepadhapticactuator;
|
|
pub mod gamepadpose;
|
|
pub mod globalscope;
|
|
pub mod hashchangeevent;
|
|
pub mod headers;
|
|
pub mod history;
|
|
pub mod htmlanchorelement;
|
|
pub mod htmlareaelement;
|
|
pub mod htmlaudioelement;
|
|
pub mod htmlbaseelement;
|
|
pub mod htmlbodyelement;
|
|
pub mod htmlbrelement;
|
|
pub mod htmlbuttonelement;
|
|
pub mod htmlcanvaselement;
|
|
pub mod htmlcollection;
|
|
pub mod htmldataelement;
|
|
pub mod htmldatalistelement;
|
|
pub mod htmldetailselement;
|
|
pub mod htmldialogelement;
|
|
pub mod htmldirectoryelement;
|
|
pub mod htmldivelement;
|
|
pub mod htmldlistelement;
|
|
pub mod htmlelement;
|
|
pub mod htmlembedelement;
|
|
pub mod htmlfieldsetelement;
|
|
pub mod htmlfontelement;
|
|
pub mod htmlformcontrolscollection;
|
|
pub mod htmlformelement;
|
|
pub mod htmlframeelement;
|
|
pub mod htmlframesetelement;
|
|
pub mod htmlheadelement;
|
|
pub mod htmlheadingelement;
|
|
pub mod htmlhrelement;
|
|
pub mod htmlhtmlelement;
|
|
pub mod htmliframeelement;
|
|
pub mod htmlimageelement;
|
|
pub mod htmlinputelement;
|
|
pub mod htmllabelelement;
|
|
pub mod htmllegendelement;
|
|
pub mod htmllielement;
|
|
pub mod htmllinkelement;
|
|
pub mod htmlmapelement;
|
|
pub mod htmlmediaelement;
|
|
pub mod htmlmenuelement;
|
|
pub mod htmlmetaelement;
|
|
pub mod htmlmeterelement;
|
|
pub mod htmlmodelement;
|
|
pub mod htmlobjectelement;
|
|
pub mod htmlolistelement;
|
|
pub mod htmloptgroupelement;
|
|
pub mod htmloptionelement;
|
|
pub mod htmloptionscollection;
|
|
pub mod htmloutputelement;
|
|
pub mod htmlparagraphelement;
|
|
pub mod htmlparamelement;
|
|
pub mod htmlpictureelement;
|
|
pub mod htmlpreelement;
|
|
pub mod htmlprogresselement;
|
|
pub mod htmlquoteelement;
|
|
pub mod htmlscriptelement;
|
|
pub mod htmlselectelement;
|
|
pub mod htmlsourceelement;
|
|
pub mod htmlspanelement;
|
|
pub mod htmlstyleelement;
|
|
pub mod htmltablecaptionelement;
|
|
pub mod htmltablecellelement;
|
|
pub mod htmltablecolelement;
|
|
pub mod htmltableelement;
|
|
pub mod htmltablerowelement;
|
|
pub mod htmltablesectionelement;
|
|
pub mod htmltemplateelement;
|
|
pub mod htmltextareaelement;
|
|
pub mod htmltimeelement;
|
|
pub mod htmltitleelement;
|
|
pub mod htmltrackelement;
|
|
pub mod htmlulistelement;
|
|
pub mod htmlunknownelement;
|
|
pub mod htmlvideoelement;
|
|
pub mod iirfilternode;
|
|
pub mod imagebitmap;
|
|
pub mod imagedata;
|
|
pub mod inputevent;
|
|
pub mod intersectionobserver;
|
|
pub mod intersectionobserverentry;
|
|
pub mod keyboardevent;
|
|
pub mod location;
|
|
pub mod mediadeviceinfo;
|
|
pub mod mediadevices;
|
|
pub mod mediaelementaudiosourcenode;
|
|
pub mod mediaerror;
|
|
pub mod mediafragmentparser;
|
|
pub mod medialist;
|
|
pub mod mediametadata;
|
|
pub mod mediaquerylist;
|
|
pub mod mediaquerylistevent;
|
|
pub mod mediasession;
|
|
pub mod mediastream;
|
|
pub mod mediastreamaudiodestinationnode;
|
|
pub mod mediastreamaudiosourcenode;
|
|
pub mod mediastreamtrack;
|
|
pub mod mediastreamtrackaudiosourcenode;
|
|
pub mod messagechannel;
|
|
pub mod messageevent;
|
|
pub mod messageport;
|
|
pub mod mimetype;
|
|
pub mod mimetypearray;
|
|
pub mod mouseevent;
|
|
pub mod mutationobserver;
|
|
pub mod mutationrecord;
|
|
pub mod namednodemap;
|
|
pub mod navigationpreloadmanager;
|
|
pub mod navigator;
|
|
pub mod navigatorinfo;
|
|
pub mod node;
|
|
pub mod nodeiterator;
|
|
pub mod nodelist;
|
|
pub mod offlineaudiocompletionevent;
|
|
pub mod offlineaudiocontext;
|
|
pub mod offscreencanvas;
|
|
pub mod offscreencanvasrenderingcontext2d;
|
|
pub mod oscillatornode;
|
|
pub mod pagetransitionevent;
|
|
pub mod paintrenderingcontext2d;
|
|
pub mod paintsize;
|
|
pub mod paintworkletglobalscope;
|
|
pub mod pannernode;
|
|
pub mod performance;
|
|
pub mod performanceentry;
|
|
pub mod performancemark;
|
|
pub mod performancemeasure;
|
|
pub mod performancenavigation;
|
|
pub mod performancenavigationtiming;
|
|
pub mod performanceobserver;
|
|
pub mod performanceobserverentrylist;
|
|
pub mod performancepainttiming;
|
|
pub mod performanceresourcetiming;
|
|
pub mod permissions;
|
|
pub mod permissionstatus;
|
|
pub mod plugin;
|
|
pub mod pluginarray;
|
|
pub mod pointerevent;
|
|
pub mod popstateevent;
|
|
pub mod processinginstruction;
|
|
pub mod progressevent;
|
|
pub mod promise;
|
|
pub mod promisenativehandler;
|
|
pub mod promiserejectionevent;
|
|
pub mod radionodelist;
|
|
pub mod range;
|
|
pub mod raredata;
|
|
pub mod readablebytestreamcontroller;
|
|
pub mod readablestream;
|
|
pub mod readablestreambyobreader;
|
|
pub mod readablestreambyobrequest;
|
|
pub mod readablestreamdefaultcontroller;
|
|
pub mod readablestreamdefaultreader;
|
|
pub mod request;
|
|
pub mod resizeobserver;
|
|
pub mod resizeobserverentry;
|
|
pub mod resizeobserversize;
|
|
pub mod response;
|
|
pub mod rtcdatachannel;
|
|
pub mod rtcdatachannelevent;
|
|
pub mod rtcerror;
|
|
pub mod rtcerrorevent;
|
|
pub mod rtcicecandidate;
|
|
pub mod rtcpeerconnection;
|
|
pub mod rtcpeerconnectioniceevent;
|
|
pub(crate) mod rtcrtpsender;
|
|
pub(crate) mod rtcrtptransceiver;
|
|
pub mod rtcsessiondescription;
|
|
pub mod rtctrackevent;
|
|
pub mod screen;
|
|
pub mod securitypolicyviolationevent;
|
|
pub mod selection;
|
|
pub mod serviceworker;
|
|
pub mod serviceworkercontainer;
|
|
pub mod serviceworkerglobalscope;
|
|
pub mod serviceworkerregistration;
|
|
pub mod servoparser;
|
|
pub mod shadowroot;
|
|
pub mod staticrange;
|
|
pub mod stereopannernode;
|
|
pub mod storage;
|
|
pub mod storageevent;
|
|
pub mod stylepropertymapreadonly;
|
|
pub mod stylesheet;
|
|
pub mod stylesheetlist;
|
|
pub mod submitevent;
|
|
pub mod subtlecrypto;
|
|
pub mod svgelement;
|
|
pub mod svggraphicselement;
|
|
pub mod svgsvgelement;
|
|
pub mod testbinding;
|
|
pub mod testbindingiterable;
|
|
pub mod testbindingmaplike;
|
|
pub mod testbindingpairiterable;
|
|
pub mod testbindingproxy;
|
|
pub mod testbindingsetlike;
|
|
pub mod testns;
|
|
pub mod testrunner;
|
|
pub mod testworklet;
|
|
pub mod testworkletglobalscope;
|
|
pub mod text;
|
|
pub mod textcontrol;
|
|
pub mod textdecoder;
|
|
pub mod textencoder;
|
|
pub mod textmetrics;
|
|
pub mod texttrack;
|
|
pub mod texttrackcue;
|
|
pub mod texttrackcuelist;
|
|
pub mod texttracklist;
|
|
pub mod timeranges;
|
|
pub mod touch;
|
|
pub mod touchevent;
|
|
pub mod touchlist;
|
|
pub mod trackevent;
|
|
pub mod transitionevent;
|
|
pub mod treewalker;
|
|
pub mod uievent;
|
|
pub mod underlyingsourcecontainer;
|
|
pub mod url;
|
|
pub mod urlhelper;
|
|
pub mod urlsearchparams;
|
|
pub mod userscripts;
|
|
pub mod validation;
|
|
pub mod validitystate;
|
|
pub mod values;
|
|
pub mod vertexarrayobject;
|
|
pub mod videotrack;
|
|
pub mod videotracklist;
|
|
pub mod virtualmethods;
|
|
pub mod visibilitystateentry;
|
|
pub mod vttcue;
|
|
pub mod vttregion;
|
|
pub mod webgl2renderingcontext;
|
|
pub mod webgl_extensions;
|
|
pub mod webgl_validations;
|
|
pub mod webglactiveinfo;
|
|
pub mod webglbuffer;
|
|
pub mod webglcontextevent;
|
|
pub mod webglframebuffer;
|
|
pub mod webglobject;
|
|
pub mod webglprogram;
|
|
pub mod webglquery;
|
|
pub mod webglrenderbuffer;
|
|
pub mod webglrenderingcontext;
|
|
pub mod webglsampler;
|
|
pub mod webglshader;
|
|
pub mod webglshaderprecisionformat;
|
|
pub mod webglsync;
|
|
pub mod webgltexture;
|
|
pub mod webgltransformfeedback;
|
|
pub mod webgluniformlocation;
|
|
pub mod webglvertexarrayobject;
|
|
pub mod webglvertexarrayobjectoes;
|
|
pub mod websocket;
|
|
#[cfg(feature = "webxr")]
|
|
mod webxr;
|
|
#[cfg(feature = "webxr")]
|
|
pub use self::webxr::*;
|
|
#[cfg(feature = "webgpu")]
|
|
pub mod webgpu;
|
|
#[cfg(feature = "webgpu")]
|
|
pub use self::webgpu::*;
|
|
#[cfg(not(feature = "webgpu"))]
|
|
pub mod gpucanvascontext;
|
|
#[cfg(not(feature = "webgpu"))]
|
|
pub use gpucanvascontext::GPUCanvasContext;
|
|
pub mod wheelevent;
|
|
pub mod window;
|
|
pub mod windowproxy;
|
|
pub mod worker;
|
|
pub mod workerglobalscope;
|
|
pub mod workerlocation;
|
|
pub mod workernavigator;
|
|
pub mod worklet;
|
|
pub mod workletglobalscope;
|
|
pub mod xmldocument;
|
|
pub mod xmlhttprequest;
|
|
pub mod xmlhttprequesteventtarget;
|
|
pub mod xmlhttprequestupload;
|
|
pub mod xmlserializer;
|
|
pub mod xpathevaluator;
|
|
pub mod xpathexpression;
|
|
pub mod xpathresult;
|
|
pub use self::webgl_extensions::ext::*;
|