diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-07-18 07:19:49 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-18 07:19:49 -0700 |
commit | fa432a5a34866356c4431f18b0790be4cfd2fb3f (patch) | |
tree | c560d115cf83e726440213cc1760d58a6f585441 /components/script/dom/blob.rs | |
parent | d87ea67bf2efec45368d3e48634c6c16de7486ff (diff) | |
parent | 8985f37fa7098437271dd7b42b2314a9fc15ec1a (diff) | |
download | servo-fa432a5a34866356c4431f18b0790be4cfd2fb3f.tar.gz servo-fa432a5a34866356c4431f18b0790be4cfd2fb3f.zip |
Auto merge of #12400 - izgzhen:fix-type-string, r=Manishearth
Fix Blob type-string
Use a final construction guard over type-string format; and other minor related cleanups
r? @Manishearth
<!-- Please describe your changes on the following line: -->
---
<!-- 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
<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because _____
<!-- 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/12400)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/blob.rs')
-rw-r--r-- | components/script/dom/blob.rs | 44 |
1 files changed, 19 insertions, 25 deletions
diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs index b2bce4f2ece..f63e66e3b7b 100644 --- a/components/script/dom/blob.rs +++ b/components/script/dom/blob.rs @@ -17,7 +17,6 @@ use ipc_channel::ipc; use net_traits::IpcSend; use net_traits::blob_url_store::{BlobBuf, get_blob_origin}; use net_traits::filemanager_thread::{FileManagerThreadMsg, SelectedFileId, RelativePos}; -use std::ascii::AsciiExt; use std::cell::Cell; use std::ops::Index; use std::path::PathBuf; @@ -86,7 +85,9 @@ impl Blob { Blob { reflector_: Reflector::new(), blob_impl: DOMRefCell::new(blob_impl), - typeString: typeString, + // NOTE: Guarding the format correctness here, + // https://w3c.github.io/FileAPI/#dfn-type + typeString: normalize_type_string(&typeString), isClosed_: Cell::new(false), } } @@ -135,7 +136,7 @@ impl Blob { } }; - Ok(Blob::new(global, BlobImpl::new_from_bytes(bytes), blobPropertyBag.get_typestring())) + Ok(Blob::new(global, BlobImpl::new_from_bytes(bytes), blobPropertyBag.type_.to_string())) } /// Get a slice to inner data, this might incur synchronous read and caching @@ -332,20 +333,8 @@ impl BlobMethods for Blob { end: Option<i64>, contentType: Option<DOMString>) -> Root<Blob> { - let relativeContentType = match contentType { - None => DOMString::new(), - Some(mut str) => { - if is_ascii_printable(&str) { - str.make_ascii_lowercase(); - str - } else { - DOMString::new() - } - } - }; - let rel_pos = RelativePos::from_opts(start, end); - Blob::new_sliced(self, rel_pos, relativeContentType) + Blob::new_sliced(self, rel_pos, contentType.unwrap_or(DOMString::from(""))) } // https://w3c.github.io/FileAPI/#dfn-isClosed @@ -368,15 +357,20 @@ impl BlobMethods for Blob { } } -impl BlobBinding::BlobPropertyBag { - /// Get the normalized inner type string - /// https://w3c.github.io/FileAPI/#dfn-type - pub fn get_typestring(&self) -> String { - if is_ascii_printable(&self.type_) { - self.type_.to_lowercase() - } else { - "".to_string() - } +/// Get the normalized, MIME-parsable type string +/// https://w3c.github.io/FileAPI/#dfn-type +/// XXX: We will relax the restriction here, +/// since the spec has some problem over this part. +/// see https://github.com/w3c/FileAPI/issues/43 +fn normalize_type_string(s: &str) -> String { + if is_ascii_printable(s) { + let s_lower = s.to_lowercase(); + // match s_lower.parse() as Result<Mime, ()> { + // Ok(_) => s_lower, + // Err(_) => "".to_string() + s_lower + } else { + "".to_string() } } |