diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-03-21 11:10:27 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-21 11:10:27 -0400 |
commit | de04783fd9593cc21ce1b4709cf572f4450880ad (patch) | |
tree | 23fc4d0fb348ac57c0d90a23a0f58df0599f37b3 | |
parent | 797fb553bbfdece69538644da89bb0c937ece997 (diff) | |
parent | 3df9492dcfa05f564ef5bbfd93282253a39c9810 (diff) | |
download | servo-de04783fd9593cc21ce1b4709cf572f4450880ad.tar.gz servo-de04783fd9593cc21ce1b4709cf572f4450880ad.zip |
Auto merge of #20370 - christianpoveda:issue_20348, r=jdm
Blobs support typed arrays now
<!-- Please describe your changes on the following line: -->
Blobs support typed arrays now, the relevant test were modified
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #20348 (github issue number if applicable).
<!-- Either: -->
- [X] There are tests for these changes OR
- [ ] These changes do not require tests because _____
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/20370)
<!-- Reviewable:end -->
-rw-r--r-- | components/script/dom/blob.rs | 24 | ||||
-rw-r--r-- | components/script/dom/file.rs | 4 | ||||
-rw-r--r-- | components/script/dom/webidls/Blob.webidl | 2 | ||||
-rw-r--r-- | tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini | 24 | ||||
-rw-r--r-- | tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini | 60 | ||||
-rw-r--r-- | tests/wpt/metadata/FileAPI/file/File-constructor.html.ini | 13 | ||||
-rw-r--r-- | tests/wpt/metadata/FileAPI/reading-data-section/Determining-Encoding.html.ini | 24 |
7 files changed, 19 insertions, 132 deletions
diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs index 32d923c7bc3..beb7ed69df3 100644 --- a/components/script/dom/blob.rs +++ b/components/script/dom/blob.rs @@ -5,7 +5,7 @@ use dom::bindings::cell::DomRefCell; use dom::bindings::codegen::Bindings::BlobBinding; use dom::bindings::codegen::Bindings::BlobBinding::BlobMethods; -use dom::bindings::codegen::UnionTypes::BlobOrString; +use dom::bindings::codegen::UnionTypes::ArrayBufferOrArrayBufferViewOrBlobOrString; use dom::bindings::error::{Error, Fallible}; use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; use dom::bindings::root::{Dom, DomRoot}; @@ -43,7 +43,7 @@ pub enum BlobImpl { /// relative positions of current slicing range, /// IMPORTANT: The depth of tree is only two, i.e. the parent Blob must be /// either File-based or Memory-based - Sliced(Dom<Blob>, RelativePos), + Sliced(Dom<Blob>, RelativePos) } impl BlobImpl { @@ -117,7 +117,7 @@ impl Blob { // https://w3c.github.io/FileAPI/#constructorBlob pub fn Constructor(global: &GlobalScope, - blobParts: Option<Vec<BlobOrString>>, + blobParts: Option<Vec<ArrayBufferOrArrayBufferViewOrBlobOrString>>, blobPropertyBag: &BlobBinding::BlobPropertyBag) -> Fallible<DomRoot<Blob>> { // TODO: accept other blobParts types - ArrayBuffer or ArrayBufferView @@ -329,18 +329,26 @@ fn read_file(global: &GlobalScope, id: Uuid) -> Result<Vec<u8>, ()> { /// Extract bytes from BlobParts, used by Blob and File constructor /// <https://w3c.github.io/FileAPI/#constructorBlob> -pub fn blob_parts_to_bytes(blobparts: Vec<BlobOrString>) -> Result<Vec<u8>, ()> { +#[allow(unsafe_code)] +pub fn blob_parts_to_bytes(mut blobparts: Vec<ArrayBufferOrArrayBufferViewOrBlobOrString>) -> Result<Vec<u8>, ()> { let mut ret = vec![]; - - for blobpart in &blobparts { + for blobpart in &mut blobparts { match blobpart { - &BlobOrString::String(ref s) => { + &mut ArrayBufferOrArrayBufferViewOrBlobOrString::String(ref s) => { ret.extend(s.as_bytes()); }, - &BlobOrString::Blob(ref b) => { + &mut ArrayBufferOrArrayBufferViewOrBlobOrString::Blob(ref b) => { let bytes = b.get_bytes().unwrap_or(vec![]); ret.extend(bytes); }, + &mut ArrayBufferOrArrayBufferViewOrBlobOrString::ArrayBuffer(ref mut a) => unsafe { + let bytes = a.as_slice(); + ret.extend(bytes); + }, + &mut ArrayBufferOrArrayBufferViewOrBlobOrString::ArrayBufferView(ref mut a) => unsafe { + let bytes = a.as_slice(); + ret.extend(bytes); + } } } diff --git a/components/script/dom/file.rs b/components/script/dom/file.rs index e80c92cf83b..942fbb1a055 100644 --- a/components/script/dom/file.rs +++ b/components/script/dom/file.rs @@ -4,7 +4,7 @@ use dom::bindings::codegen::Bindings::FileBinding; use dom::bindings::codegen::Bindings::FileBinding::FileMethods; -use dom::bindings::codegen::UnionTypes::BlobOrString; +use dom::bindings::codegen::UnionTypes::ArrayBufferOrArrayBufferViewOrBlobOrString; use dom::bindings::error::{Error, Fallible}; use dom::bindings::inheritance::Castable; use dom::bindings::reflector::reflect_dom_object; @@ -60,7 +60,7 @@ impl File { // https://w3c.github.io/FileAPI/#file-constructor pub fn Constructor(global: &GlobalScope, - fileBits: Vec<BlobOrString>, + fileBits: Vec<ArrayBufferOrArrayBufferViewOrBlobOrString>, filename: DOMString, filePropertyBag: &FileBinding::FilePropertyBag) -> Fallible<DomRoot<File>> { diff --git a/components/script/dom/webidls/Blob.webidl b/components/script/dom/webidls/Blob.webidl index 18a009d39a9..0e96a894c35 100644 --- a/components/script/dom/webidls/Blob.webidl +++ b/components/script/dom/webidls/Blob.webidl @@ -22,4 +22,4 @@ dictionary BlobPropertyBag { DOMString type = ""; }; -typedef (/*ArrayBuffer or ArrayBufferView or */Blob or DOMString) BlobPart; +typedef (ArrayBuffer or ArrayBufferView or Blob or DOMString) BlobPart; diff --git a/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini b/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini index 193d306bf54..6d64e867664 100644 --- a/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini +++ b/tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini @@ -4,34 +4,10 @@ expected: FAIL bug: https://github.com/servo/rust-mozjs/issues/269 - [ArrayBuffer elements of the blobParts array should be supported.] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Passing typed arrays as elements of the blobParts array should work.] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Passing a Float64Array as element of the blobParts array should work.] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - [Passing a FrozenArray as the blobParts array should work (FrozenArray<MessagePort>).] expected: FAIL bug: https://github.com/servo/servo/issues/7457 - [Array with two buffers] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Array with two bufferviews] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Array with mixed types] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - [options properties should be accessed in lexicographic order.] expected: FAIL diff --git a/tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini b/tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini index 25aa6248cf4..d602b90069f 100644 --- a/tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini +++ b/tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini @@ -1,62 +1,2 @@ [Blob-slice.html] type: testharness - [Slicing test: slice (5,0).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (5,1).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (5,2).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (5,3).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (6,0).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (6,1).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (6,2).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (7,0).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (7,1).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (7,2).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (7,3).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (8,0).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (8,1).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (8,2).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Slicing test: slice (8,3).] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - diff --git a/tests/wpt/metadata/FileAPI/file/File-constructor.html.ini b/tests/wpt/metadata/FileAPI/file/File-constructor.html.ini index a812f00415f..da1c2c9114d 100644 --- a/tests/wpt/metadata/FileAPI/file/File-constructor.html.ini +++ b/tests/wpt/metadata/FileAPI/file/File-constructor.html.ini @@ -1,20 +1,7 @@ [File-constructor.html] type: testharness - [ArrayBuffer fileBits] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Typed array fileBits] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Various fileBits] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - [HTMLDocument in fileBits] expected: FAIL [Invalid bits argument: "hello"] expected: FAIL - diff --git a/tests/wpt/metadata/FileAPI/reading-data-section/Determining-Encoding.html.ini b/tests/wpt/metadata/FileAPI/reading-data-section/Determining-Encoding.html.ini index 1b62c9bc1e0..e52ca0c4e3c 100644 --- a/tests/wpt/metadata/FileAPI/reading-data-section/Determining-Encoding.html.ini +++ b/tests/wpt/metadata/FileAPI/reading-data-section/Determining-Encoding.html.ini @@ -1,26 +1,2 @@ [Determining-Encoding.html] type: testharness - [Blob Determing Encoding with encoding argument] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Blob Determing Encoding with type attribute] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Blob Determing Encoding with UTF-8 BOM] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Blob Determing Encoding without anything implying charset.] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Blob Determing Encoding with UTF-16BE BOM] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - - [Blob Determing Encoding with UTF-16LE BOM] - expected: FAIL - bug: https://github.com/servo/servo/issues/10911 - |