aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorGregory Terzian <gterzian@users.noreply.github.com>2020-02-29 11:59:10 +0800
committerGregory Terzian <gterzian@users.noreply.github.com>2020-06-04 11:38:35 +0800
commitbd5796c90b8e8e066a32e7da9cfa5251d1559046 (patch)
treeaa5ed3de6608b8046924ef6e8e8ad43b91cf81a7 /components/script/dom/bindings/codegen/CodegenRust.py
parent0281acea955085aec01a4fc6da5f89f326a14842 (diff)
downloadservo-bd5796c90b8e8e066a32e7da9cfa5251d1559046.tar.gz
servo-bd5796c90b8e8e066a32e7da9cfa5251d1559046.zip
integrate readablestream with fetch and blob
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index b486806e562..0b1187a07fb 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -906,6 +906,40 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
return handleOptional(templateBody, declType, handleDefault("None"))
+ if type.isReadableStream():
+ assert not isEnforceRange and not isClamp
+
+ if failureCode is None:
+ unwrapFailureCode = '''throw_type_error(*cx, "This object is not \
+ an instance of ReadableStream.");\n'''
+ else:
+ unwrapFailureCode = failureCode
+
+ templateBody = fill(
+ """
+ {
+ use crate::realms::{AlreadyInRealm, InRealm};
+ let in_realm_proof = AlreadyInRealm::assert_for_cx(cx);
+ match ReadableStream::from_js(cx, $${val}.get().to_object(), InRealm::Already(&in_realm_proof)) {
+ Ok(val) => val,
+ Err(()) => {
+ $*{failureCode}
+ }
+ }
+
+ }
+ """,
+ failureCode=unwrapFailureCode + "\n",
+ )
+
+ templateBody = wrapObjectTemplate(templateBody, "None",
+ isDefinitelyObject, type, failureCode)
+
+ declType = CGGeneric("DomRoot<ReadableStream>")
+
+ return handleOptional(templateBody, declType,
+ handleDefault("None"))
+
elif type.isSpiderMonkeyInterface():
raise TypeError("Can't handle SpiderMonkey interface arguments other than typed arrays yet")
@@ -4481,6 +4515,9 @@ def getUnionTypeTemplateVars(type, descriptorProvider):
elif type.isObject():
name = type.name
typeName = "Heap<*mut JSObject>"
+ elif type.isReadableStream():
+ name = type.name
+ typeName = "DomRoot<ReadableStream>"
elif is_typed_array(type):
name = type.name
typeName = "typedarray::Heap" + name