diff options
author | Gregory Terzian <gterzian@users.noreply.github.com> | 2020-02-29 11:59:10 +0800 |
---|---|---|
committer | Gregory Terzian <gterzian@users.noreply.github.com> | 2020-06-04 11:38:35 +0800 |
commit | bd5796c90b8e8e066a32e7da9cfa5251d1559046 (patch) | |
tree | aa5ed3de6608b8046924ef6e8e8ad43b91cf81a7 /components/script/dom/bindings/codegen/CodegenRust.py | |
parent | 0281acea955085aec01a4fc6da5f89f326a14842 (diff) | |
download | servo-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.py | 37 |
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 |