aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2018-03-21 11:10:27 -0400
committerGitHub <noreply@github.com>2018-03-21 11:10:27 -0400
commitde04783fd9593cc21ce1b4709cf572f4450880ad (patch)
tree23fc4d0fb348ac57c0d90a23a0f58df0599f37b3
parent797fb553bbfdece69538644da89bb0c937ece997 (diff)
parent3df9492dcfa05f564ef5bbfd93282253a39c9810 (diff)
downloadservo-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.rs24
-rw-r--r--components/script/dom/file.rs4
-rw-r--r--components/script/dom/webidls/Blob.webidl2
-rw-r--r--tests/wpt/metadata/FileAPI/blob/Blob-constructor.html.ini24
-rw-r--r--tests/wpt/metadata/FileAPI/blob/Blob-slice.html.ini60
-rw-r--r--tests/wpt/metadata/FileAPI/file/File-constructor.html.ini13
-rw-r--r--tests/wpt/metadata/FileAPI/reading-data-section/Determining-Encoding.html.ini24
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
-