mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Fix Blob type-string
This commit is contained in:
parent
2df5d705e1
commit
8985f37fa7
2 changed files with 22 additions and 28 deletions
|
@ -17,7 +17,6 @@ use ipc_channel::ipc;
|
||||||
use net_traits::IpcSend;
|
use net_traits::IpcSend;
|
||||||
use net_traits::blob_url_store::BlobBuf;
|
use net_traits::blob_url_store::BlobBuf;
|
||||||
use net_traits::filemanager_thread::{FileManagerThreadMsg, SelectedFileId, RelativePos};
|
use net_traits::filemanager_thread::{FileManagerThreadMsg, SelectedFileId, RelativePos};
|
||||||
use std::ascii::AsciiExt;
|
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::ops::Index;
|
use std::ops::Index;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
@ -86,7 +85,9 @@ impl Blob {
|
||||||
Blob {
|
Blob {
|
||||||
reflector_: Reflector::new(),
|
reflector_: Reflector::new(),
|
||||||
blob_impl: DOMRefCell::new(blob_impl),
|
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),
|
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
|
/// Get a slice to inner data, this might incur synchronous read and caching
|
||||||
|
@ -332,20 +333,8 @@ impl BlobMethods for Blob {
|
||||||
end: Option<i64>,
|
end: Option<i64>,
|
||||||
contentType: Option<DOMString>)
|
contentType: Option<DOMString>)
|
||||||
-> Root<Blob> {
|
-> 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);
|
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
|
// https://w3c.github.io/FileAPI/#dfn-isClosed
|
||||||
|
@ -368,15 +357,20 @@ impl BlobMethods for Blob {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BlobBinding::BlobPropertyBag {
|
/// Get the normalized, MIME-parsable type string
|
||||||
/// Get the normalized inner type string
|
/// https://w3c.github.io/FileAPI/#dfn-type
|
||||||
/// https://w3c.github.io/FileAPI/#dfn-type
|
/// XXX: We will relax the restriction here,
|
||||||
pub fn get_typestring(&self) -> String {
|
/// since the spec has some problem over this part.
|
||||||
if is_ascii_printable(&self.type_) {
|
/// see https://github.com/w3c/FileAPI/issues/43
|
||||||
self.type_.to_lowercase()
|
fn normalize_type_string(s: &str) -> String {
|
||||||
} else {
|
if is_ascii_printable(s) {
|
||||||
"".to_string()
|
let s_lower = s.to_lowercase();
|
||||||
}
|
// match s_lower.parse() as Result<Mime, ()> {
|
||||||
|
// Ok(_) => s_lower,
|
||||||
|
// Err(_) => "".to_string()
|
||||||
|
s_lower
|
||||||
|
} else {
|
||||||
|
"".to_string()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ impl File {
|
||||||
let global = GlobalRef::Window(window);
|
let global = GlobalRef::Window(window);
|
||||||
|
|
||||||
File::new(global, BlobImpl::new_from_file(selected.id, selected.filename, selected.size),
|
File::new(global, BlobImpl::new_from_file(selected.id, selected.filename, selected.size),
|
||||||
name, Some(selected.modified as i64), "")
|
name, Some(selected.modified as i64), &selected.type_string)
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/FileAPI/#file-constructor
|
// https://w3c.github.io/FileAPI/#file-constructor
|
||||||
|
@ -70,10 +70,10 @@ impl File {
|
||||||
};
|
};
|
||||||
|
|
||||||
let ref blobPropertyBag = filePropertyBag.parent;
|
let ref blobPropertyBag = filePropertyBag.parent;
|
||||||
let typeString = blobPropertyBag.get_typestring();
|
let ref typeString = blobPropertyBag.type_;
|
||||||
|
|
||||||
let modified = filePropertyBag.lastModified;
|
let modified = filePropertyBag.lastModified;
|
||||||
Ok(File::new(global, BlobImpl::new_from_bytes(bytes), filename, modified, &typeString))
|
Ok(File::new(global, BlobImpl::new_from_bytes(bytes), filename, modified, typeString))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn name(&self) -> &DOMString {
|
pub fn name(&self) -> &DOMString {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue