Skip to content

Commit 907307b

Browse files
committed
Add Reader webidl files
1 parent b5e44ee commit 907307b

File tree

7 files changed

+202
-4
lines changed

7 files changed

+202
-4
lines changed

components/script/dom/bindings/codegen/CodegenRust.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -949,7 +949,7 @@ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
949949

950950
if failureCode is None:
951951
unwrapFailureCode = '''throw_type_error(*cx, "This object is not \
952-
an instance of ReadableStream.");\n'''
952+
an instance of ReadableStream.");\nreturn false;\n'''
953953
else:
954954
unwrapFailureCode = failureCode
955955

@@ -958,7 +958,7 @@ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
958958
{
959959
use crate::realms::{AlreadyInRealm, InRealm};
960960
let in_realm_proof = AlreadyInRealm::assert_for_cx(cx);
961-
match ReadableStream::from_js(cx, $${val}.get().to_object(), InRealm::Already(&in_realm_proof)) {
961+
match dom::readablestream::ReadableStream::from_js(cx, $${val}.get().to_object(), InRealm::Already(&in_realm_proof)) {
962962
Ok(val) => val,
963963
Err(()) => {
964964
$*{failureCode}
@@ -973,7 +973,7 @@ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
973973
templateBody = wrapObjectTemplate(templateBody, "None",
974974
isDefinitelyObject, type, failureCode)
975975

976-
declType = CGGeneric("DomRoot<ReadableStream>")
976+
declType = CGGeneric("DomRoot<dom::readablestream::ReadableStream>")
977977

978978
return handleOptional(templateBody, declType,
979979
handleDefault("None"))

components/script/dom/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,8 +509,10 @@ pub mod range;
509509
pub mod raredata;
510510
pub mod readablebytestreamcontroller;
511511
pub mod readablestream;
512+
pub mod readablestreambyobreader;
512513
pub mod readablestreambyobrequest;
513514
pub mod readablestreamdefaultcontroller;
515+
pub mod readablestreamdefaultreader;
514516
pub mod request;
515517
pub mod resizeobserver;
516518
pub mod resizeobserverentry;
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this
3+
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4+
5+
use dom_struct::dom_struct;
6+
use js::jsapi::{
7+
AutoRequireNoGC, HandleObject, HandleValue, Heap, IsReadableStream, JSContext, JSObject,
8+
};
9+
use js::jsval::{JSVal, ObjectValue, UndefinedValue};
10+
use js::rust::{HandleObject as SafeHandleObject, HandleValue as SafeHandleValue, IntoHandle};
11+
12+
use crate::dom::bindings::codegen::Bindings::ReadableStreamBYOBReaderBinding::ReadableStreamBYOBReaderMethods;
13+
use crate::dom::bindings::conversions::{ConversionBehavior, ConversionResult};
14+
use crate::dom::bindings::error::Error;
15+
use crate::dom::bindings::import::module::Fallible;
16+
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
17+
use crate::dom::bindings::root::DomRoot;
18+
use crate::dom::bindings::settings_stack::{AutoEntryScript, AutoIncumbentScript};
19+
use crate::dom::bindings::utils::get_dictionary_property;
20+
use crate::dom::globalscope::GlobalScope;
21+
use crate::dom::promise::Promise;
22+
use crate::dom::readablestream::ReadableStream;
23+
use crate::js::conversions::FromJSValConvertible;
24+
use crate::realms::{enter_realm, InRealm};
25+
use crate::script_runtime::JSContext as SafeJSContext;
26+
27+
#[dom_struct]
28+
pub struct ReadableStreamBYOBReader {
29+
reflector_: Reflector,
30+
}
31+
32+
impl ReadableStreamBYOBReader {
33+
#[allow(non_snake_case)]
34+
pub fn Constructor(
35+
global: &GlobalScope,
36+
proto: Option<SafeHandleObject>,
37+
stream: DomRoot<ReadableStream>,
38+
) -> Fallible<DomRoot<Self>> {
39+
todo!()
40+
}
41+
42+
fn new_inherited() -> ReadableStreamBYOBReader {
43+
ReadableStreamBYOBReader {
44+
reflector_: Reflector::new(),
45+
}
46+
}
47+
48+
fn new(global: &GlobalScope) -> DomRoot<ReadableStreamBYOBReader> {
49+
reflect_dom_object(Box::new(ReadableStreamBYOBReader::new_inherited()), global)
50+
}
51+
}
52+
53+
impl ReadableStreamBYOBReaderMethods for ReadableStreamBYOBReader {
54+
fn Read(
55+
&self,
56+
view: js::gc::CustomAutoRooterGuard<js::typedarray::ArrayBufferView>,
57+
) -> std::rc::Rc<Promise> {
58+
todo!()
59+
}
60+
61+
fn ReleaseLock(&self) -> Fallible<()> {
62+
todo!()
63+
}
64+
65+
fn Closed(&self) -> std::rc::Rc<Promise> {
66+
todo!()
67+
}
68+
69+
fn Cancel(&self, cx: SafeJSContext, reason: SafeHandleValue) -> std::rc::Rc<Promise> {
70+
todo!()
71+
}
72+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this
3+
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4+
5+
use dom_struct::dom_struct;
6+
use js::jsapi::{
7+
AutoRequireNoGC, HandleObject, HandleValue, Heap, IsReadableStream, JSContext, JSObject,
8+
};
9+
use js::jsval::{JSVal, ObjectValue, UndefinedValue};
10+
use js::rust::{HandleObject as SafeHandleObject, HandleValue as SafeHandleValue, IntoHandle};
11+
12+
use crate::dom::bindings::codegen::Bindings::ReadableStreamDefaultReaderBinding::ReadableStreamDefaultReaderMethods;
13+
use crate::dom::bindings::conversions::{ConversionBehavior, ConversionResult};
14+
use crate::dom::bindings::error::Error;
15+
use crate::dom::bindings::import::module::Fallible;
16+
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
17+
use crate::dom::bindings::root::DomRoot;
18+
use crate::dom::bindings::settings_stack::{AutoEntryScript, AutoIncumbentScript};
19+
use crate::dom::bindings::utils::get_dictionary_property;
20+
use crate::dom::globalscope::GlobalScope;
21+
use crate::dom::promise::Promise;
22+
use crate::dom::readablestream::ReadableStream;
23+
use crate::js::conversions::FromJSValConvertible;
24+
use crate::realms::{enter_realm, InRealm};
25+
use crate::script_runtime::JSContext as SafeJSContext;
26+
27+
#[dom_struct]
28+
pub struct ReadableStreamDefaultReader {
29+
reflector_: Reflector,
30+
}
31+
32+
impl ReadableStreamDefaultReader {
33+
#[allow(non_snake_case)]
34+
pub fn Constructor(
35+
global: &GlobalScope,
36+
proto: Option<SafeHandleObject>,
37+
stream: DomRoot<ReadableStream>,
38+
) -> Fallible<DomRoot<Self>> {
39+
todo!()
40+
}
41+
42+
fn new_inherited() -> ReadableStreamDefaultReader {
43+
ReadableStreamDefaultReader {
44+
reflector_: Reflector::new(),
45+
}
46+
}
47+
48+
fn new(global: &GlobalScope) -> DomRoot<ReadableStreamDefaultReader> {
49+
reflect_dom_object(
50+
Box::new(ReadableStreamDefaultReader::new_inherited()),
51+
global,
52+
)
53+
}
54+
}
55+
56+
impl ReadableStreamDefaultReaderMethods for ReadableStreamDefaultReader {
57+
fn Read(&self) -> std::rc::Rc<Promise> {
58+
todo!()
59+
}
60+
61+
fn ReleaseLock(&self) -> Fallible<()> {
62+
todo!()
63+
}
64+
65+
fn Closed(&self) -> std::rc::Rc<Promise> {
66+
todo!()
67+
}
68+
69+
fn Cancel(&self, cx: SafeJSContext, reason: SafeHandleValue) -> std::rc::Rc<Promise> {
70+
todo!()
71+
}
72+
}

components/script/dom/webidls/ReadableStream.webidl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
// https://streams.spec.whatwg.org/#readablestream
66

7-
[Exposed=(Window,Worker)]
7+
[Exposed=*]
88
interface _ReadableStream {
99
[Throws]
1010
constructor(optional object underlyingSource, optional QueuingStrategy strategy = {});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this
3+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4+
5+
// https://streams.spec.whatwg.org/#byob-reader-class-definition
6+
7+
[Exposed=*]
8+
interface ReadableStreamBYOBReader {
9+
[Throws]
10+
constructor(ReadableStream stream);
11+
12+
[NewObject]
13+
Promise<ReadableStreamReadResult> read(ArrayBufferView view);
14+
15+
[Throws]
16+
undefined releaseLock();
17+
};
18+
ReadableStreamBYOBReader includes ReadableStreamGenericReader;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this
3+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4+
5+
// https://streams.spec.whatwg.org/#generic-reader-mixin-definition
6+
// https://streams.spec.whatwg.org/#default-reader-class-definition
7+
8+
typedef (ReadableStreamDefaultReader or ReadableStreamBYOBReader) ReadableStreamReader;
9+
10+
interface mixin ReadableStreamGenericReader {
11+
readonly attribute Promise<undefined> closed;
12+
13+
[NewObject]
14+
Promise<undefined> cancel(optional any reason);
15+
};
16+
17+
[Exposed=*]
18+
interface ReadableStreamDefaultReader {
19+
[Throws]
20+
constructor(ReadableStream stream);
21+
22+
[NewObject]
23+
Promise<ReadableStreamReadResult> read();
24+
25+
[Throws]
26+
undefined releaseLock();
27+
};
28+
ReadableStreamDefaultReader includes ReadableStreamGenericReader;
29+
30+
31+
dictionary ReadableStreamReadResult {
32+
any value;
33+
boolean done;
34+
};

0 commit comments

Comments
 (0)