Untry script

This commit is contained in:
Simon Sapin 2017-06-18 13:21:32 +02:00
parent a5bb55790f
commit 7af5a7fd54
36 changed files with 199 additions and 199 deletions

View file

@ -148,8 +148,8 @@ fn run_form_data_algorithm(root: &GlobalScope, bytes: Vec<u8>, mime: &[u8]) -> F
} else { } else {
"" ""
}; };
let mime: Mime = try!(mime_str.parse().map_err( let mime: Mime = mime_str.parse().map_err(
|_| Error::Type("Inappropriate MIME-type for Body".to_string()))); |_| Error::Type("Inappropriate MIME-type for Body".to_string()))?;
match mime { match mime {
// TODO // TODO
// ... Parser for Mime(TopLevel::Multipart, SubLevel::FormData, _) // ... Parser for Mime(TopLevel::Multipart, SubLevel::FormData, _)

View file

@ -390,7 +390,7 @@ pub unsafe fn private_from_proto_check<F>(mut obj: *mut JSObject,
-> Result<*const libc::c_void, ()> -> Result<*const libc::c_void, ()>
where F: Fn(&'static DOMClass) -> bool where F: Fn(&'static DOMClass) -> bool
{ {
let dom_class = try!(get_dom_class(obj).or_else(|_| { let dom_class = get_dom_class(obj).or_else(|_| {
if IsWrapper(obj) { if IsWrapper(obj) {
trace!("found wrapper"); trace!("found wrapper");
obj = UnwrapObject(obj, /* stopAtWindowProxy = */ 0); obj = UnwrapObject(obj, /* stopAtWindowProxy = */ 0);
@ -406,7 +406,7 @@ pub unsafe fn private_from_proto_check<F>(mut obj: *mut JSObject,
trace!("not a dom wrapper"); trace!("not a dom wrapper");
Err(()) Err(())
} }
})); })?;
if proto_check(dom_class) { if proto_check(dom_class) {
trace!("good prototype"); trace!("good prototype");

View file

@ -69,7 +69,7 @@ impl<T, C> FromJSValConvertible for MozMap<T>
return Err(()); return Err(());
} }
let property = match try!(T::from_jsval(cx, property.handle(), config.clone())) { let property = match T::from_jsval(cx, property.handle(), config.clone())? {
ConversionResult::Success(property) => property, ConversionResult::Success(property) => property,
ConversionResult::Failure(message) => return Ok(ConversionResult::Failure(message)), ConversionResult::Failure(message) => return Ok(ConversionResult::Failure(message)),
}; };

View file

@ -114,7 +114,7 @@ unsafe fn write_blob(blob: Root<Blob>,
w: *mut JSStructuredCloneWriter) w: *mut JSStructuredCloneWriter)
-> Result<(), ()> { -> Result<(), ()> {
let structured_writer = StructuredCloneWriter { w: w }; let structured_writer = StructuredCloneWriter { w: w };
let blob_vec = try!(blob.get_bytes()); let blob_vec = blob.get_bytes()?;
assert!(JS_WriteUint32Pair(w, StructuredCloneTags::DomBlob as u32, 0)); assert!(JS_WriteUint32Pair(w, StructuredCloneTags::DomBlob as u32, 0));
structured_writer.write_slice(&blob_vec); structured_writer.write_slice(&blob_vec);
structured_writer.write_str(&blob.type_string()); structured_writer.write_str(&blob.type_string());

View file

@ -32,7 +32,7 @@ pub fn validate_and_extract(namespace: Option<DOMString>,
let namespace = namespace_from_domstring(namespace); let namespace = namespace_from_domstring(namespace);
// Step 2. // Step 2.
try!(validate_qualified_name(qualified_name)); validate_qualified_name(qualified_name)?;
let colon = ':'; let colon = ':';

View file

@ -328,7 +328,7 @@ fn canonicalize_filter(filter: &BluetoothLEScanFilterInit) -> Fallible<Bluetooth
for service in services { for service in services {
// Step 3.2 - 3.3. // Step 3.2 - 3.3.
let uuid = try!(BluetoothUUID::service(service.clone())).to_string(); let uuid = BluetoothUUID::service(service.clone())?.to_string();
// Step 3.4. // Step 3.4.
if uuid_is_blocklisted(uuid.as_ref(), Blocklist::All) { if uuid_is_blocklisted(uuid.as_ref(), Blocklist::All) {
@ -393,7 +393,7 @@ fn canonicalize_filter(filter: &BluetoothLEScanFilterInit) -> Fallible<Bluetooth
// Step 7.3: No need to convert to IDL values since this is only used by native code. // Step 7.3: No need to convert to IDL values since this is only used by native code.
// Step 7.4 - 7.5. // Step 7.4 - 7.5.
map.insert(manufacturer_id, try!(canonicalize_bluetooth_data_filter_init(bdfi))); map.insert(manufacturer_id, canonicalize_bluetooth_data_filter_init(bdfi)?);
} }
Some(map) Some(map)
}, },
@ -417,7 +417,7 @@ fn canonicalize_filter(filter: &BluetoothLEScanFilterInit) -> Fallible<Bluetooth
}; };
// Step 9.3 - 9.4. // Step 9.3 - 9.4.
let service = try!(BluetoothUUID::service(service_name)).to_string(); let service = BluetoothUUID::service(service_name)?.to_string();
// Step 9.5. // Step 9.5.
if uuid_is_blocklisted(service.as_ref(), Blocklist::All) { if uuid_is_blocklisted(service.as_ref(), Blocklist::All) {
@ -427,7 +427,7 @@ fn canonicalize_filter(filter: &BluetoothLEScanFilterInit) -> Fallible<Bluetooth
// Step 9.6: No need to convert to IDL values since this is only used by native code. // Step 9.6: No need to convert to IDL values since this is only used by native code.
// Step 9.7 - 9.8. // Step 9.7 - 9.8.
map.insert(service, try!(canonicalize_bluetooth_data_filter_init(bdfi))); map.insert(service, canonicalize_bluetooth_data_filter_init(bdfi)?);
} }
Some(map) Some(map)
}, },

View file

@ -1137,18 +1137,18 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
// https://html.spec.whatwg.org/multipage/#img-error // https://html.spec.whatwg.org/multipage/#img-error
// If the image argument is an HTMLImageElement object that is in the broken state, // If the image argument is an HTMLImageElement object that is in the broken state,
// then throw an InvalidStateError exception // then throw an InvalidStateError exception
try!(self.fetch_image_data(image).ok_or(Error::InvalidState)) self.fetch_image_data(image).ok_or(Error::InvalidState)?
}, },
HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::HTMLCanvasElement(ref canvas) => { HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::HTMLCanvasElement(ref canvas) => {
let _ = canvas.get_or_init_2d_context(); let _ = canvas.get_or_init_2d_context();
try!(canvas.fetch_all_data().ok_or(Error::InvalidState)) canvas.fetch_all_data().ok_or(Error::InvalidState)?
}, },
HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::CanvasRenderingContext2D(ref context) => { HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::CanvasRenderingContext2D(ref context) => {
let canvas = context.Canvas(); let canvas = context.Canvas();
let _ = canvas.get_or_init_2d_context(); let _ = canvas.get_or_init_2d_context();
try!(canvas.fetch_all_data().ok_or(Error::InvalidState)) canvas.fetch_all_data().ok_or(Error::InvalidState)?
} }
}; };

View file

@ -293,11 +293,11 @@ impl DedicatedWorkerGlobalScope {
} }
let ret = sel.wait(); let ret = sel.wait();
if ret == worker_handle.id() { if ret == worker_handle.id() {
Ok(MixedMessage::FromWorker(try!(worker_port.recv()))) Ok(MixedMessage::FromWorker(worker_port.recv()?))
} else if ret == timer_event_handle.id() { } else if ret == timer_event_handle.id() {
Ok(MixedMessage::FromScheduler(try!(timer_event_port.recv()))) Ok(MixedMessage::FromScheduler(timer_event_port.recv()?))
} else if ret == devtools_handle.id() { } else if ret == devtools_handle.id() {
Ok(MixedMessage::FromDevtools(try!(devtools_port.recv()))) Ok(MixedMessage::FromDevtools(devtools_port.recv()?))
} else { } else {
panic!("unexpected select result!") panic!("unexpected select result!")
} }
@ -384,7 +384,7 @@ impl DedicatedWorkerGlobalScopeMethods for DedicatedWorkerGlobalScope {
#[allow(unsafe_code)] #[allow(unsafe_code)]
// https://html.spec.whatwg.org/multipage/#dom-dedicatedworkerglobalscope-postmessage // https://html.spec.whatwg.org/multipage/#dom-dedicatedworkerglobalscope-postmessage
unsafe fn PostMessage(&self, cx: *mut JSContext, message: HandleValue) -> ErrorResult { unsafe fn PostMessage(&self, cx: *mut JSContext, message: HandleValue) -> ErrorResult {
let data = try!(StructuredCloneData::write(cx, message)); let data = StructuredCloneData::write(cx, message)?;
let worker = self.worker.borrow().as_ref().unwrap().clone(); let worker = self.worker.borrow().as_ref().unwrap().clone();
self.parent_sender self.parent_sender
.send(CommonScriptMsg::RunnableMsg(WorkerEvent, .send(CommonScriptMsg::RunnableMsg(WorkerEvent,

View file

@ -146,7 +146,7 @@ impl DissimilarOriginWindowMethods for DissimilarOriginWindow {
// Step 1-2, 6-8. // Step 1-2, 6-8.
// TODO(#12717): Should implement the `transfer` argument. // TODO(#12717): Should implement the `transfer` argument.
let data = try!(StructuredCloneData::write(cx, message)); let data = StructuredCloneData::write(cx, message)?;
// Step 9. // Step 9.
self.post_message(origin, data); self.post_message(origin, data);

View file

@ -1454,7 +1454,7 @@ impl Document {
for node in nodes { for node in nodes {
match node { match node {
NodeOrString::Node(node) => { NodeOrString::Node(node) => {
try!(fragment.AppendChild(&node)); fragment.AppendChild(&node)?;
}, },
NodeOrString::String(string) => { NodeOrString::String(string) => {
let node = Root::upcast::<Node>(self.CreateTextNode(string)); let node = Root::upcast::<Node>(self.CreateTextNode(string));
@ -2819,8 +2819,8 @@ impl DocumentMethods for Document {
namespace: Option<DOMString>, namespace: Option<DOMString>,
qualified_name: DOMString) qualified_name: DOMString)
-> Fallible<Root<Element>> { -> Fallible<Root<Element>> {
let (namespace, prefix, local_name) = try!(validate_and_extract(namespace, let (namespace, prefix, local_name) = validate_and_extract(namespace,
&qualified_name)); &qualified_name)?;
let name = QualName::new(prefix, namespace, local_name); let name = QualName::new(prefix, namespace, local_name);
Ok(Element::create(name, self, ElementCreator::ScriptCreated)) Ok(Element::create(name, self, ElementCreator::ScriptCreated))
} }
@ -2845,8 +2845,8 @@ impl DocumentMethods for Document {
namespace: Option<DOMString>, namespace: Option<DOMString>,
qualified_name: DOMString) qualified_name: DOMString)
-> Fallible<Root<Attr>> { -> Fallible<Root<Attr>> {
let (namespace, prefix, local_name) = try!(validate_and_extract(namespace, let (namespace, prefix, local_name) = validate_and_extract(namespace,
&qualified_name)); &qualified_name)?;
let value = AttrValue::String("".to_owned()); let value = AttrValue::String("".to_owned());
let qualified_name = LocalName::from(qualified_name); let qualified_name = LocalName::from(qualified_name);
Ok(Attr::new(&self.window, Ok(Attr::new(&self.window,

View file

@ -57,7 +57,7 @@ impl DOMImplementationMethods for DOMImplementation {
pubid: DOMString, pubid: DOMString,
sysid: DOMString) sysid: DOMString)
-> Fallible<Root<DocumentType>> { -> Fallible<Root<DocumentType>> {
try!(validate_qualified_name(&qualified_name)); validate_qualified_name(&qualified_name)?;
Ok(DocumentType::new(qualified_name, Some(pubid), Some(sysid), &self.document)) Ok(DocumentType::new(qualified_name, Some(pubid), Some(sysid), &self.document))
} }

View file

@ -84,7 +84,7 @@ impl DOMTokenListMethods for DOMTokenList {
fn Add(&self, tokens: Vec<DOMString>) -> ErrorResult { fn Add(&self, tokens: Vec<DOMString>) -> ErrorResult {
let mut atoms = self.element.get_tokenlist_attribute(&self.local_name); let mut atoms = self.element.get_tokenlist_attribute(&self.local_name);
for token in &tokens { for token in &tokens {
let token = try!(self.check_token_exceptions(&token)); let token = self.check_token_exceptions(&token)?;
if !atoms.iter().any(|atom| *atom == token) { if !atoms.iter().any(|atom| *atom == token) {
atoms.push(token); atoms.push(token);
} }
@ -97,7 +97,7 @@ impl DOMTokenListMethods for DOMTokenList {
fn Remove(&self, tokens: Vec<DOMString>) -> ErrorResult { fn Remove(&self, tokens: Vec<DOMString>) -> ErrorResult {
let mut atoms = self.element.get_tokenlist_attribute(&self.local_name); let mut atoms = self.element.get_tokenlist_attribute(&self.local_name);
for token in &tokens { for token in &tokens {
let token = try!(self.check_token_exceptions(&token)); let token = self.check_token_exceptions(&token)?;
atoms.iter().position(|atom| *atom == token).map(|index| atoms.remove(index)); atoms.iter().position(|atom| *atom == token).map(|index| atoms.remove(index));
} }
self.element.set_atomic_tokenlist_attribute(&self.local_name, atoms); self.element.set_atomic_tokenlist_attribute(&self.local_name, atoms);
@ -107,7 +107,7 @@ impl DOMTokenListMethods for DOMTokenList {
// https://dom.spec.whatwg.org/#dom-domtokenlist-toggle // https://dom.spec.whatwg.org/#dom-domtokenlist-toggle
fn Toggle(&self, token: DOMString, force: Option<bool>) -> Fallible<bool> { fn Toggle(&self, token: DOMString, force: Option<bool>) -> Fallible<bool> {
let mut atoms = self.element.get_tokenlist_attribute(&self.local_name); let mut atoms = self.element.get_tokenlist_attribute(&self.local_name);
let token = try!(self.check_token_exceptions(&token)); let token = self.check_token_exceptions(&token)?;
match atoms.iter().position(|atom| *atom == token) { match atoms.iter().position(|atom| *atom == token) {
Some(index) => match force { Some(index) => match force {
Some(true) => Ok(true), Some(true) => Ok(true),

View file

@ -144,9 +144,9 @@ pub struct Element {
impl fmt::Debug for Element { impl fmt::Debug for Element {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
try!(write!(f, "<{}", self.local_name)); write!(f, "<{}", self.local_name)?;
if let Some(ref id) = *self.id_attribute.borrow() { if let Some(ref id) = *self.id_attribute.borrow() {
try!(write!(f, " id={}", id)); write!(f, " id={}", id)?;
} }
write!(f, ">") write!(f, ">")
} }
@ -1532,7 +1532,7 @@ impl ElementMethods for Element {
qualified_name: DOMString, qualified_name: DOMString,
value: DOMString) -> ErrorResult { value: DOMString) -> ErrorResult {
let (namespace, prefix, local_name) = let (namespace, prefix, local_name) =
try!(validate_and_extract(namespace, &qualified_name)); validate_and_extract(namespace, &qualified_name)?;
let qualified_name = LocalName::from(qualified_name); let qualified_name = LocalName::from(qualified_name);
let value = self.parse_attribute(&namespace, &local_name, value); let value = self.parse_attribute(&namespace, &local_name, value);
self.set_first_matching_attribute( self.set_first_matching_attribute(
@ -1929,7 +1929,7 @@ impl ElementMethods for Element {
/// https://w3c.github.io/DOM-Parsing/#widl-Element-innerHTML /// https://w3c.github.io/DOM-Parsing/#widl-Element-innerHTML
fn SetInnerHTML(&self, value: DOMString) -> ErrorResult { fn SetInnerHTML(&self, value: DOMString) -> ErrorResult {
// Step 1. // Step 1.
let frag = try!(self.parse_fragment(value)); let frag = self.parse_fragment(value)?;
// Step 2. // Step 2.
// https://github.com/w3c/DOM-Parsing/issues/1 // https://github.com/w3c/DOM-Parsing/issues/1
let target = if let Some(template) = self.downcast::<HTMLTemplateElement>() { let target = if let Some(template) = self.downcast::<HTMLTemplateElement>() {
@ -1974,9 +1974,9 @@ impl ElementMethods for Element {
}; };
// Step 5. // Step 5.
let frag = try!(parent.parse_fragment(value)); let frag = parent.parse_fragment(value)?;
// Step 6. // Step 6.
try!(context_parent.ReplaceChild(frag.upcast(), context_node)); context_parent.ReplaceChild(frag.upcast(), context_node)?;
Ok(()) Ok(())
} }
@ -2095,8 +2095,8 @@ impl ElementMethods for Element {
// https://dom.spec.whatwg.org/#dom-element-insertadjacentelement // https://dom.spec.whatwg.org/#dom-element-insertadjacentelement
fn InsertAdjacentElement(&self, where_: DOMString, element: &Element) fn InsertAdjacentElement(&self, where_: DOMString, element: &Element)
-> Fallible<Option<Root<Element>>> { -> Fallible<Option<Root<Element>>> {
let where_ = try!(AdjacentPosition::try_from(&*where_)); let where_ = AdjacentPosition::try_from(&*where_)?;
let inserted_node = try!(self.insert_adjacent(where_, element.upcast())); let inserted_node = self.insert_adjacent(where_, element.upcast())?;
Ok(inserted_node.map(|node| Root::downcast(node).unwrap())) Ok(inserted_node.map(|node| Root::downcast(node).unwrap()))
} }
@ -2107,7 +2107,7 @@ impl ElementMethods for Element {
let text = Text::new(data, &document_from_node(self)); let text = Text::new(data, &document_from_node(self));
// Step 2. // Step 2.
let where_ = try!(AdjacentPosition::try_from(&*where_)); let where_ = AdjacentPosition::try_from(&*where_)?;
self.insert_adjacent(where_, text.upcast()).map(|_| ()) self.insert_adjacent(where_, text.upcast()).map(|_| ())
} }
@ -2115,7 +2115,7 @@ impl ElementMethods for Element {
fn InsertAdjacentHTML(&self, position: DOMString, text: DOMString) fn InsertAdjacentHTML(&self, position: DOMString, text: DOMString)
-> ErrorResult { -> ErrorResult {
// Step 1. // Step 1.
let position = try!(AdjacentPosition::try_from(&*position)); let position = AdjacentPosition::try_from(&*position)?;
let context = match position { let context = match position {
AdjacentPosition::BeforeBegin | AdjacentPosition::AfterEnd => { AdjacentPosition::BeforeBegin | AdjacentPosition::AfterEnd => {
@ -2137,7 +2137,7 @@ impl ElementMethods for Element {
&context.owner_doc(), context.downcast::<Element>()); &context.owner_doc(), context.downcast::<Element>());
// Step 3. // Step 3.
let fragment = try!(context.parse_fragment(text)); let fragment = context.parse_fragment(text)?;
// Step 4. // Step 4.
self.insert_adjacent(position, fragment.upcast()).map(|_| ()) self.insert_adjacent(position, fragment.upcast()).map(|_| ())

View file

@ -52,7 +52,7 @@ impl Headers {
pub fn Constructor(global: &GlobalScope, init: Option<HeadersInit>) pub fn Constructor(global: &GlobalScope, init: Option<HeadersInit>)
-> Fallible<Root<Headers>> { -> Fallible<Root<Headers>> {
let dom_headers_new = Headers::new(global); let dom_headers_new = Headers::new(global);
try!(dom_headers_new.fill(init)); dom_headers_new.fill(init)?;
Ok(dom_headers_new) Ok(dom_headers_new)
} }
} }
@ -63,7 +63,7 @@ impl HeadersMethods for Headers {
// Step 1 // Step 1
let value = normalize_value(value); let value = normalize_value(value);
// Step 2 // Step 2
let (mut valid_name, valid_value) = try!(validate_name_and_value(name, value)); let (mut valid_name, valid_value) = validate_name_and_value(name, value)?;
valid_name = valid_name.to_lowercase(); valid_name = valid_name.to_lowercase();
// Step 3 // Step 3
if self.guard.get() == Guard::Immutable { if self.guard.get() == Guard::Immutable {
@ -95,7 +95,7 @@ impl HeadersMethods for Headers {
// https://fetch.spec.whatwg.org/#dom-headers-delete // https://fetch.spec.whatwg.org/#dom-headers-delete
fn Delete(&self, name: ByteString) -> ErrorResult { fn Delete(&self, name: ByteString) -> ErrorResult {
// Step 1 // Step 1
let valid_name = try!(validate_name(name)); let valid_name = validate_name(name)?;
// Step 2 // Step 2
if self.guard.get() == Guard::Immutable { if self.guard.get() == Guard::Immutable {
return Err(Error::Type("Guard is immutable".to_string())); return Err(Error::Type("Guard is immutable".to_string()));
@ -121,7 +121,7 @@ impl HeadersMethods for Headers {
// https://fetch.spec.whatwg.org/#dom-headers-get // https://fetch.spec.whatwg.org/#dom-headers-get
fn Get(&self, name: ByteString) -> Fallible<Option<ByteString>> { fn Get(&self, name: ByteString) -> Fallible<Option<ByteString>> {
// Step 1 // Step 1
let valid_name = &try!(validate_name(name)); let valid_name = &validate_name(name)?;
Ok(self.header_list.borrow().get_raw(&valid_name).map(|v| { Ok(self.header_list.borrow().get_raw(&valid_name).map(|v| {
ByteString::new(v[0].clone()) ByteString::new(v[0].clone())
})) }))
@ -130,7 +130,7 @@ impl HeadersMethods for Headers {
// https://fetch.spec.whatwg.org/#dom-headers-has // https://fetch.spec.whatwg.org/#dom-headers-has
fn Has(&self, name: ByteString) -> Fallible<bool> { fn Has(&self, name: ByteString) -> Fallible<bool> {
// Step 1 // Step 1
let valid_name = try!(validate_name(name)); let valid_name = validate_name(name)?;
// Step 2 // Step 2
Ok(self.header_list.borrow_mut().get_raw(&valid_name).is_some()) Ok(self.header_list.borrow_mut().get_raw(&valid_name).is_some())
} }
@ -140,7 +140,7 @@ impl HeadersMethods for Headers {
// Step 1 // Step 1
let value = normalize_value(value); let value = normalize_value(value);
// Step 2 // Step 2
let (mut valid_name, valid_value) = try!(validate_name_and_value(name, value)); let (mut valid_name, valid_value) = validate_name_and_value(name, value)?;
valid_name = valid_name.to_lowercase(); valid_name = valid_name.to_lowercase();
// Step 3 // Step 3
if self.guard.get() == Guard::Immutable { if self.guard.get() == Guard::Immutable {
@ -172,10 +172,10 @@ impl Headers {
// Step 1 // Step 1
Some(HeadersInit::Headers(h)) => { Some(HeadersInit::Headers(h)) => {
for header in h.header_list.borrow().iter() { for header in h.header_list.borrow().iter() {
try!(self.Append( self.Append(
ByteString::new(Vec::from(header.name())), ByteString::new(Vec::from(header.name())),
ByteString::new(Vec::from(header.value_string().into_bytes())) ByteString::new(Vec::from(header.value_string().into_bytes()))
)); )?;
} }
Ok(()) Ok(())
}, },
@ -185,7 +185,7 @@ impl Headers {
if seq.len() == 2 { if seq.len() == 2 {
let val = seq.pop().unwrap(); let val = seq.pop().unwrap();
let name = seq.pop().unwrap(); let name = seq.pop().unwrap();
try!(self.Append(name, val)); self.Append(name, val)?;
} else { } else {
return Err(Error::Type( return Err(Error::Type(
format!("Each header object must be a sequence of length 2 - found one with length {}", format!("Each header object must be a sequence of length 2 - found one with length {}",
@ -198,7 +198,7 @@ impl Headers {
for (key, value) in m.iter() { for (key, value) in m.iter() {
let key_vec = key.as_ref().to_string().into(); let key_vec = key.as_ref().to_string().into();
let headers_key = ByteString::new(key_vec); let headers_key = ByteString::new(key_vec);
try!(self.Append(headers_key, value.clone())); self.Append(headers_key, value.clone())?;
} }
Ok(()) Ok(())
}, },
@ -360,7 +360,7 @@ pub fn is_forbidden_header_name(name: &str) -> bool {
// [4] https://www.rfc-editor.org/errata_search.php?rfc=7230 // [4] https://www.rfc-editor.org/errata_search.php?rfc=7230
fn validate_name_and_value(name: ByteString, value: ByteString) fn validate_name_and_value(name: ByteString, value: ByteString)
-> Fallible<(String, Vec<u8>)> { -> Fallible<(String, Vec<u8>)> {
let valid_name = try!(validate_name(name)); let valid_name = validate_name(name)?;
if !is_field_content(&value) { if !is_field_content(&value) {
return Err(Error::Type("Value is not valid".to_string())); return Err(Error::Type("Value is not valid".to_string()));
} }

View file

@ -297,9 +297,9 @@ impl HTMLCanvasElementMethods for HTMLCanvasElement {
// Step 3. // Step 3.
let raw_data = match *self.context.borrow() { let raw_data = match *self.context.borrow() {
Some(CanvasContext::Context2d(ref context)) => { Some(CanvasContext::Context2d(ref context)) => {
let image_data = try!(context.GetImageData(Finite::wrap(0f64), Finite::wrap(0f64), let image_data = context.GetImageData(Finite::wrap(0f64), Finite::wrap(0f64),
Finite::wrap(self.Width() as f64), Finite::wrap(self.Width() as f64),
Finite::wrap(self.Height() as f64))); Finite::wrap(self.Height() as f64))?;
image_data.get_data_array() image_data.get_data_array()
} }
None => { None => {

View file

@ -49,7 +49,7 @@ impl HTMLOptionsCollection {
for _ in 0..count { for _ in 0..count {
let element = HTMLOptionElement::new(local_name!("option"), None, &document); let element = HTMLOptionElement::new(local_name!("option"), None, &document);
let node = element.upcast::<Node>(); let node = element.upcast::<Node>();
try!(root.AppendChild(node)); root.AppendChild(node)?;
}; };
Ok(()) Ok(())
} }
@ -90,7 +90,7 @@ impl HTMLOptionsCollectionMethods for HTMLOptionsCollection {
// Step 4 // Step 4
if n > 0 { if n > 0 {
try!(self.add_new_elements(n as u32)); self.add_new_elements(n as u32)?;
} }
// Step 5 // Step 5

View file

@ -103,7 +103,7 @@ impl HTMLTableElement {
let reference_element = node.child_elements().find(reference_predicate); let reference_element = node.child_elements().find(reference_predicate);
let reference_node = reference_element.r().map(|e| e.upcast()); let reference_node = reference_element.r().map(|e| e.upcast());
try!(node.InsertBefore(section.upcast(), reference_node)); node.InsertBefore(section.upcast(), reference_node)?;
} }
Ok(()) Ok(())

View file

@ -65,8 +65,8 @@ impl ImageData {
if let Some(jsobject) = opt_jsobject { if let Some(jsobject) = opt_jsobject {
let cx = global.get_cx(); let cx = global.get_cx();
typedarray!(in(cx) let array_res: Uint8ClampedArray = jsobject); typedarray!(in(cx) let array_res: Uint8ClampedArray = jsobject);
let mut array = try!(array_res let mut array = array_res
.map_err(|_| Error::Type("Argument to Image data is not an Uint8ClampedArray".to_owned()))); .map_err(|_| Error::Type("Argument to Image data is not an Uint8ClampedArray".to_owned()))?;
let byte_len = array.as_slice().len() as u32; let byte_len = array.as_slice().len() as u32;
if byte_len % 4 != 0 { if byte_len % 4 != 0 {

View file

@ -70,7 +70,7 @@ impl Location {
impl LocationMethods for Location { impl LocationMethods for Location {
// https://html.spec.whatwg.org/multipage/#dom-location-assign // https://html.spec.whatwg.org/multipage/#dom-location-assign
fn Assign(&self, url: USVString) -> ErrorResult { fn Assign(&self, url: USVString) -> ErrorResult {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
// TODO: per spec, we should use the _API base URL_ specified by the // TODO: per spec, we should use the _API base URL_ specified by the
// _entry settings object_. // _entry settings object_.
let base_url = self.window.get_url(); let base_url = self.window.get_url();
@ -84,7 +84,7 @@ impl LocationMethods for Location {
// https://html.spec.whatwg.org/multipage/#dom-location-reload // https://html.spec.whatwg.org/multipage/#dom-location-reload
fn Reload(&self) -> ErrorResult { fn Reload(&self) -> ErrorResult {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
self.window.load_url(self.get_url(), true, true, None); self.window.load_url(self.get_url(), true, true, None);
Ok(()) Ok(())
} }
@ -105,7 +105,7 @@ impl LocationMethods for Location {
// https://html.spec.whatwg.org/multipage/#dom-location-hash // https://html.spec.whatwg.org/multipage/#dom-location-hash
fn GetHash(&self) -> Fallible<USVString> { fn GetHash(&self) -> Fallible<USVString> {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
Ok(UrlHelper::Hash(&self.get_url())) Ok(UrlHelper::Hash(&self.get_url()))
} }
@ -114,46 +114,46 @@ impl LocationMethods for Location {
if value.0.is_empty() { if value.0.is_empty() {
value = USVString("#".to_owned()); value = USVString("#".to_owned());
} }
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
self.set_url_component(value, UrlHelper::SetHash); self.set_url_component(value, UrlHelper::SetHash);
Ok(()) Ok(())
} }
// https://html.spec.whatwg.org/multipage/#dom-location-host // https://html.spec.whatwg.org/multipage/#dom-location-host
fn GetHost(&self) -> Fallible<USVString> { fn GetHost(&self) -> Fallible<USVString> {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
Ok(UrlHelper::Host(&self.get_url())) Ok(UrlHelper::Host(&self.get_url()))
} }
// https://html.spec.whatwg.org/multipage/#dom-location-host // https://html.spec.whatwg.org/multipage/#dom-location-host
fn SetHost(&self, value: USVString) -> ErrorResult { fn SetHost(&self, value: USVString) -> ErrorResult {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
self.set_url_component(value, UrlHelper::SetHost); self.set_url_component(value, UrlHelper::SetHost);
Ok(()) Ok(())
} }
// https://html.spec.whatwg.org/multipage/#dom-location-origin // https://html.spec.whatwg.org/multipage/#dom-location-origin
fn GetOrigin(&self) -> Fallible<USVString> { fn GetOrigin(&self) -> Fallible<USVString> {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
Ok(UrlHelper::Origin(&self.get_url())) Ok(UrlHelper::Origin(&self.get_url()))
} }
// https://html.spec.whatwg.org/multipage/#dom-location-hostname // https://html.spec.whatwg.org/multipage/#dom-location-hostname
fn GetHostname(&self) -> Fallible<USVString> { fn GetHostname(&self) -> Fallible<USVString> {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
Ok(UrlHelper::Hostname(&self.get_url())) Ok(UrlHelper::Hostname(&self.get_url()))
} }
// https://html.spec.whatwg.org/multipage/#dom-location-hostname // https://html.spec.whatwg.org/multipage/#dom-location-hostname
fn SetHostname(&self, value: USVString) -> ErrorResult { fn SetHostname(&self, value: USVString) -> ErrorResult {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
self.set_url_component(value, UrlHelper::SetHostname); self.set_url_component(value, UrlHelper::SetHostname);
Ok(()) Ok(())
} }
// https://html.spec.whatwg.org/multipage/#dom-location-href // https://html.spec.whatwg.org/multipage/#dom-location-href
fn GetHref(&self) -> Fallible<USVString> { fn GetHref(&self) -> Fallible<USVString> {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
Ok(UrlHelper::Href(&self.get_url())) Ok(UrlHelper::Href(&self.get_url()))
} }
@ -170,57 +170,57 @@ impl LocationMethods for Location {
// https://html.spec.whatwg.org/multipage/#dom-location-pathname // https://html.spec.whatwg.org/multipage/#dom-location-pathname
fn GetPathname(&self) -> Fallible<USVString> { fn GetPathname(&self) -> Fallible<USVString> {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
Ok(UrlHelper::Pathname(&self.get_url())) Ok(UrlHelper::Pathname(&self.get_url()))
} }
// https://html.spec.whatwg.org/multipage/#dom-location-pathname // https://html.spec.whatwg.org/multipage/#dom-location-pathname
fn SetPathname(&self, value: USVString) -> ErrorResult { fn SetPathname(&self, value: USVString) -> ErrorResult {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
self.set_url_component(value, UrlHelper::SetPathname); self.set_url_component(value, UrlHelper::SetPathname);
Ok(()) Ok(())
} }
// https://html.spec.whatwg.org/multipage/#dom-location-port // https://html.spec.whatwg.org/multipage/#dom-location-port
fn GetPort(&self) -> Fallible<USVString> { fn GetPort(&self) -> Fallible<USVString> {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
Ok(UrlHelper::Port(&self.get_url())) Ok(UrlHelper::Port(&self.get_url()))
} }
// https://html.spec.whatwg.org/multipage/#dom-location-port // https://html.spec.whatwg.org/multipage/#dom-location-port
fn SetPort(&self, value: USVString) -> ErrorResult { fn SetPort(&self, value: USVString) -> ErrorResult {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
self.set_url_component(value, UrlHelper::SetPort); self.set_url_component(value, UrlHelper::SetPort);
Ok(()) Ok(())
} }
// https://html.spec.whatwg.org/multipage/#dom-location-protocol // https://html.spec.whatwg.org/multipage/#dom-location-protocol
fn GetProtocol(&self) -> Fallible<USVString> { fn GetProtocol(&self) -> Fallible<USVString> {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
Ok(UrlHelper::Protocol(&self.get_url())) Ok(UrlHelper::Protocol(&self.get_url()))
} }
// https://html.spec.whatwg.org/multipage/#dom-location-protocol // https://html.spec.whatwg.org/multipage/#dom-location-protocol
fn SetProtocol(&self, value: USVString) -> ErrorResult { fn SetProtocol(&self, value: USVString) -> ErrorResult {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
self.set_url_component(value, UrlHelper::SetProtocol); self.set_url_component(value, UrlHelper::SetProtocol);
Ok(()) Ok(())
} }
// https://html.spec.whatwg.org/multipage/#dom-location-href // https://html.spec.whatwg.org/multipage/#dom-location-href
fn Stringifier(&self) -> Fallible<DOMString> { fn Stringifier(&self) -> Fallible<DOMString> {
Ok(DOMString::from(try!(self.GetHref()).0)) Ok(DOMString::from(self.GetHref()?.0))
} }
// https://html.spec.whatwg.org/multipage/#dom-location-search // https://html.spec.whatwg.org/multipage/#dom-location-search
fn GetSearch(&self) -> Fallible<USVString> { fn GetSearch(&self) -> Fallible<USVString> {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
Ok(UrlHelper::Search(&self.get_url())) Ok(UrlHelper::Search(&self.get_url()))
} }
// https://html.spec.whatwg.org/multipage/#dom-location-search // https://html.spec.whatwg.org/multipage/#dom-location-search
fn SetSearch(&self, value: USVString) -> ErrorResult { fn SetSearch(&self, value: USVString) -> ErrorResult {
try!(self.check_same_origin_domain()); self.check_same_origin_domain()?;
self.set_url_component(value, UrlHelper::SetSearch); self.set_url_component(value, UrlHelper::SetSearch);
Ok(()) Ok(())
} }

View file

@ -631,7 +631,7 @@ impl Node {
let viable_previous_sibling = first_node_not_in(self.preceding_siblings(), &nodes); let viable_previous_sibling = first_node_not_in(self.preceding_siblings(), &nodes);
// Step 4. // Step 4.
let node = try!(self.owner_doc().node_from_nodes_and_strings(nodes)); let node = self.owner_doc().node_from_nodes_and_strings(nodes)?;
// Step 5. // Step 5.
let viable_previous_sibling = match viable_previous_sibling { let viable_previous_sibling = match viable_previous_sibling {
@ -640,7 +640,7 @@ impl Node {
}; };
// Step 6. // Step 6.
try!(Node::pre_insert(&node, &parent, viable_previous_sibling.r())); Node::pre_insert(&node, &parent, viable_previous_sibling.r())?;
Ok(()) Ok(())
} }
@ -660,10 +660,10 @@ impl Node {
let viable_next_sibling = first_node_not_in(self.following_siblings(), &nodes); let viable_next_sibling = first_node_not_in(self.following_siblings(), &nodes);
// Step 4. // Step 4.
let node = try!(self.owner_doc().node_from_nodes_and_strings(nodes)); let node = self.owner_doc().node_from_nodes_and_strings(nodes)?;
// Step 5. // Step 5.
try!(Node::pre_insert(&node, &parent, viable_next_sibling.r())); Node::pre_insert(&node, &parent, viable_next_sibling.r())?;
Ok(()) Ok(())
} }
@ -680,13 +680,13 @@ impl Node {
// Step 3. // Step 3.
let viable_next_sibling = first_node_not_in(self.following_siblings(), &nodes); let viable_next_sibling = first_node_not_in(self.following_siblings(), &nodes);
// Step 4. // Step 4.
let node = try!(self.owner_doc().node_from_nodes_and_strings(nodes)); let node = self.owner_doc().node_from_nodes_and_strings(nodes)?;
if self.parent_node == Some(&*parent) { if self.parent_node == Some(&*parent) {
// Step 5. // Step 5.
try!(parent.ReplaceChild(&node, self)); parent.ReplaceChild(&node, self)?;
} else { } else {
// Step 6. // Step 6.
try!(Node::pre_insert(&node, &parent, viable_next_sibling.r())); Node::pre_insert(&node, &parent, viable_next_sibling.r())?;
} }
Ok(()) Ok(())
} }
@ -695,7 +695,7 @@ impl Node {
pub fn prepend(&self, nodes: Vec<NodeOrString>) -> ErrorResult { pub fn prepend(&self, nodes: Vec<NodeOrString>) -> ErrorResult {
// Step 1. // Step 1.
let doc = self.owner_doc(); let doc = self.owner_doc();
let node = try!(doc.node_from_nodes_and_strings(nodes)); let node = doc.node_from_nodes_and_strings(nodes)?;
// Step 2. // Step 2.
let first_child = self.first_child.get(); let first_child = self.first_child.get();
Node::pre_insert(&node, self, first_child.r()).map(|_| ()) Node::pre_insert(&node, self, first_child.r()).map(|_| ())
@ -705,7 +705,7 @@ impl Node {
pub fn append(&self, nodes: Vec<NodeOrString>) -> ErrorResult { pub fn append(&self, nodes: Vec<NodeOrString>) -> ErrorResult {
// Step 1. // Step 1.
let doc = self.owner_doc(); let doc = self.owner_doc();
let node = try!(doc.node_from_nodes_and_strings(nodes)); let node = doc.node_from_nodes_and_strings(nodes)?;
// Step 2. // Step 2.
self.AppendChild(&node).map(|_| ()) self.AppendChild(&node).map(|_| ())
} }
@ -751,7 +751,7 @@ impl Node {
#[allow(unsafe_code)] #[allow(unsafe_code)]
pub fn query_selector_all(&self, selectors: DOMString) -> Fallible<Root<NodeList>> { pub fn query_selector_all(&self, selectors: DOMString) -> Fallible<Root<NodeList>> {
let window = window_from_node(self); let window = window_from_node(self);
let iter = try!(self.query_selector_iter(selectors)); let iter = self.query_selector_iter(selectors)?;
Ok(NodeList::new_simple_list(&window, iter)) Ok(NodeList::new_simple_list(&window, iter))
} }
@ -852,7 +852,7 @@ impl Node {
{ {
let tr_node = tr.upcast::<Node>(); let tr_node = tr.upcast::<Node>();
if index == -1 { if index == -1 {
try!(self.InsertBefore(tr_node, None)); self.InsertBefore(tr_node, None)?;
} else { } else {
let items = get_items(); let items = get_items();
let node = match items.elements_iter() let node = match items.elements_iter()
@ -863,7 +863,7 @@ impl Node {
None => return Err(Error::IndexSize), None => return Err(Error::IndexSize),
Some(node) => node, Some(node) => node,
}; };
try!(self.InsertBefore(tr_node, node.r())); self.InsertBefore(tr_node, node.r())?;
} }
} }
@ -1566,7 +1566,7 @@ impl Node {
pub fn pre_insert(node: &Node, parent: &Node, child: Option<&Node>) pub fn pre_insert(node: &Node, parent: &Node, child: Option<&Node>)
-> Fallible<Root<Node>> { -> Fallible<Root<Node>> {
// Step 1. // Step 1.
try!(Node::ensure_pre_insertion_validity(node, parent, child)); Node::ensure_pre_insertion_validity(node, parent, child)?;
// Steps 2-3. // Steps 2-3.
let reference_child_root; let reference_child_root;

View file

@ -107,7 +107,7 @@ impl NodeIteratorMethods for NodeIterator {
before_node = false; before_node = false;
// Step 3-2. // Step 3-2.
let result = try!(self.accept_node(&node)); let result = self.accept_node(&node)?;
// Step 3-3. // Step 3-3.
if result == NodeFilterConstants::FILTER_ACCEPT { if result == NodeFilterConstants::FILTER_ACCEPT {
@ -122,7 +122,7 @@ impl NodeIteratorMethods for NodeIterator {
// Step 3-1. // Step 3-1.
for following_node in node.following_nodes(&self.root_node) { for following_node in node.following_nodes(&self.root_node) {
// Step 3-2. // Step 3-2.
let result = try!(self.accept_node(&following_node)); let result = self.accept_node(&following_node)?;
// Step 3-3. // Step 3-3.
if result == NodeFilterConstants::FILTER_ACCEPT { if result == NodeFilterConstants::FILTER_ACCEPT {
@ -151,7 +151,7 @@ impl NodeIteratorMethods for NodeIterator {
before_node = true; before_node = true;
// Step 3-2. // Step 3-2.
let result = try!(self.accept_node(&node)); let result = self.accept_node(&node)?;
// Step 3-3. // Step 3-3.
if result == NodeFilterConstants::FILTER_ACCEPT { if result == NodeFilterConstants::FILTER_ACCEPT {
@ -166,7 +166,7 @@ impl NodeIteratorMethods for NodeIterator {
// Step 3-1. // Step 3-1.
for preceding_node in node.preceding_nodes(&self.root_node) { for preceding_node in node.preceding_nodes(&self.root_node) {
// Step 3-2. // Step 3-2.
let result = try!(self.accept_node(&preceding_node)); let result = self.accept_node(&preceding_node)?;
// Step 3-3. // Step 3-3.
if result == NodeFilterConstants::FILTER_ACCEPT { if result == NodeFilterConstants::FILTER_ACCEPT {

View file

@ -269,25 +269,25 @@ impl RangeMethods for Range {
// https://dom.spec.whatwg.org/#dom-range-setstartbefore // https://dom.spec.whatwg.org/#dom-range-setstartbefore
fn SetStartBefore(&self, node: &Node) -> ErrorResult { fn SetStartBefore(&self, node: &Node) -> ErrorResult {
let parent = try!(node.GetParentNode().ok_or(Error::InvalidNodeType)); let parent = node.GetParentNode().ok_or(Error::InvalidNodeType)?;
self.SetStart(&parent, node.index()) self.SetStart(&parent, node.index())
} }
// https://dom.spec.whatwg.org/#dom-range-setstartafter // https://dom.spec.whatwg.org/#dom-range-setstartafter
fn SetStartAfter(&self, node: &Node) -> ErrorResult { fn SetStartAfter(&self, node: &Node) -> ErrorResult {
let parent = try!(node.GetParentNode().ok_or(Error::InvalidNodeType)); let parent = node.GetParentNode().ok_or(Error::InvalidNodeType)?;
self.SetStart(&parent, node.index() + 1) self.SetStart(&parent, node.index() + 1)
} }
// https://dom.spec.whatwg.org/#dom-range-setendbefore // https://dom.spec.whatwg.org/#dom-range-setendbefore
fn SetEndBefore(&self, node: &Node) -> ErrorResult { fn SetEndBefore(&self, node: &Node) -> ErrorResult {
let parent = try!(node.GetParentNode().ok_or(Error::InvalidNodeType)); let parent = node.GetParentNode().ok_or(Error::InvalidNodeType)?;
self.SetEnd(&parent, node.index()) self.SetEnd(&parent, node.index())
} }
// https://dom.spec.whatwg.org/#dom-range-setendafter // https://dom.spec.whatwg.org/#dom-range-setendafter
fn SetEndAfter(&self, node: &Node) -> ErrorResult { fn SetEndAfter(&self, node: &Node) -> ErrorResult {
let parent = try!(node.GetParentNode().ok_or(Error::InvalidNodeType)); let parent = node.GetParentNode().ok_or(Error::InvalidNodeType)?;
self.SetEnd(&parent, node.index() + 1) self.SetEnd(&parent, node.index() + 1)
} }
@ -303,7 +303,7 @@ impl RangeMethods for Range {
// https://dom.spec.whatwg.org/#dom-range-selectnode // https://dom.spec.whatwg.org/#dom-range-selectnode
fn SelectNode(&self, node: &Node) -> ErrorResult { fn SelectNode(&self, node: &Node) -> ErrorResult {
// Steps 1, 2. // Steps 1, 2.
let parent = try!(node.GetParentNode().ok_or(Error::InvalidNodeType)); let parent = node.GetParentNode().ok_or(Error::InvalidNodeType)?;
// Step 3. // Step 3.
let index = node.index(); let index = node.index();
// Step 4. // Step 4.
@ -446,7 +446,7 @@ impl RangeMethods for Range {
let data = cdata.SubstringData(start_offset, end_offset - start_offset).unwrap(); let data = cdata.SubstringData(start_offset, end_offset - start_offset).unwrap();
let clone = cdata.clone_with_data(data, &start_node.owner_doc()); let clone = cdata.clone_with_data(data, &start_node.owner_doc());
// Step 4.3. // Step 4.3.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
// Step 4.4 // Step 4.4
return Ok(fragment); return Ok(fragment);
} }
@ -454,7 +454,7 @@ impl RangeMethods for Range {
// Steps 5-12. // Steps 5-12.
let (first_contained_child, last_contained_child, contained_children) = let (first_contained_child, last_contained_child, contained_children) =
try!(self.contained_children()); self.contained_children()?;
if let Some(child) = first_contained_child { if let Some(child) = first_contained_child {
// Step 13. // Step 13.
@ -464,12 +464,12 @@ impl RangeMethods for Range {
let data = cdata.SubstringData(start_offset, start_node.len() - start_offset).unwrap(); let data = cdata.SubstringData(start_offset, start_node.len() - start_offset).unwrap();
let clone = cdata.clone_with_data(data, &start_node.owner_doc()); let clone = cdata.clone_with_data(data, &start_node.owner_doc());
// Step 13.3. // Step 13.3.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
} else { } else {
// Step 14.1. // Step 14.1.
let clone = child.CloneNode(false); let clone = child.CloneNode(false);
// Step 14.2. // Step 14.2.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
// Step 14.3. // Step 14.3.
let subrange = Range::new(&clone.owner_doc(), let subrange = Range::new(&clone.owner_doc(),
&start_node, &start_node,
@ -477,9 +477,9 @@ impl RangeMethods for Range {
&child, &child,
child.len()); child.len());
// Step 14.4. // Step 14.4.
let subfragment = try!(subrange.CloneContents()); let subfragment = subrange.CloneContents()?;
// Step 14.5. // Step 14.5.
try!(clone.AppendChild(subfragment.upcast())); clone.AppendChild(subfragment.upcast())?;
} }
} }
@ -488,7 +488,7 @@ impl RangeMethods for Range {
// Step 15.1. // Step 15.1.
let clone = child.CloneNode(true); let clone = child.CloneNode(true);
// Step 15.2. // Step 15.2.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
} }
if let Some(child) = last_contained_child { if let Some(child) = last_contained_child {
@ -499,12 +499,12 @@ impl RangeMethods for Range {
let data = cdata.SubstringData(0, end_offset).unwrap(); let data = cdata.SubstringData(0, end_offset).unwrap();
let clone = cdata.clone_with_data(data, &start_node.owner_doc()); let clone = cdata.clone_with_data(data, &start_node.owner_doc());
// Step 16.3. // Step 16.3.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
} else { } else {
// Step 17.1. // Step 17.1.
let clone = child.CloneNode(false); let clone = child.CloneNode(false);
// Step 17.2. // Step 17.2.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
// Step 17.3. // Step 17.3.
let subrange = Range::new(&clone.owner_doc(), let subrange = Range::new(&clone.owner_doc(),
&child, &child,
@ -512,9 +512,9 @@ impl RangeMethods for Range {
&end_node, &end_node,
end_offset); end_offset);
// Step 17.4. // Step 17.4.
let subfragment = try!(subrange.CloneContents()); let subfragment = subrange.CloneContents()?;
// Step 17.5. // Step 17.5.
try!(clone.AppendChild(subfragment.upcast())); clone.AppendChild(subfragment.upcast())?;
} }
} }
@ -547,11 +547,11 @@ impl RangeMethods for Range {
let text = end_data.SubstringData(start_offset, end_offset - start_offset); let text = end_data.SubstringData(start_offset, end_offset - start_offset);
clone.downcast::<CharacterData>().unwrap().SetData(text.unwrap()); clone.downcast::<CharacterData>().unwrap().SetData(text.unwrap());
// Step 4.3. // Step 4.3.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
// Step 4.4. // Step 4.4.
try!(end_data.ReplaceData(start_offset, end_data.ReplaceData(start_offset,
end_offset - start_offset, end_offset - start_offset,
DOMString::new())); DOMString::new())?;
// Step 4.5. // Step 4.5.
return Ok(fragment); return Ok(fragment);
} }
@ -559,7 +559,7 @@ impl RangeMethods for Range {
// Steps 5-12. // Steps 5-12.
let (first_contained_child, last_contained_child, contained_children) = let (first_contained_child, last_contained_child, contained_children) =
try!(self.contained_children()); self.contained_children()?;
let (new_node, new_offset) = if start_node.is_inclusive_ancestor_of(&end_node) { let (new_node, new_offset) = if start_node.is_inclusive_ancestor_of(&end_node) {
// Step 13. // Step 13.
@ -584,16 +584,16 @@ impl RangeMethods for Range {
start_node.len() - start_offset); start_node.len() - start_offset);
clone.downcast::<CharacterData>().unwrap().SetData(text.unwrap()); clone.downcast::<CharacterData>().unwrap().SetData(text.unwrap());
// Step 15.3. // Step 15.3.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
// Step 15.4. // Step 15.4.
try!(start_data.ReplaceData(start_offset, start_data.ReplaceData(start_offset,
start_node.len() - start_offset, start_node.len() - start_offset,
DOMString::new())); DOMString::new())?;
} else { } else {
// Step 16.1. // Step 16.1.
let clone = child.CloneNode(false); let clone = child.CloneNode(false);
// Step 16.2. // Step 16.2.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
// Step 16.3. // Step 16.3.
let subrange = Range::new(&clone.owner_doc(), let subrange = Range::new(&clone.owner_doc(),
&start_node, &start_node,
@ -601,15 +601,15 @@ impl RangeMethods for Range {
&child, &child,
child.len()); child.len());
// Step 16.4. // Step 16.4.
let subfragment = try!(subrange.ExtractContents()); let subfragment = subrange.ExtractContents()?;
// Step 16.5. // Step 16.5.
try!(clone.AppendChild(subfragment.upcast())); clone.AppendChild(subfragment.upcast())?;
} }
} }
// Step 17. // Step 17.
for child in contained_children { for child in contained_children {
try!(fragment.upcast::<Node>().AppendChild(&child)); fragment.upcast::<Node>().AppendChild(&child)?;
} }
if let Some(child) = last_contained_child { if let Some(child) = last_contained_child {
@ -621,14 +621,14 @@ impl RangeMethods for Range {
let text = end_data.SubstringData(0, end_offset); let text = end_data.SubstringData(0, end_offset);
clone.downcast::<CharacterData>().unwrap().SetData(text.unwrap()); clone.downcast::<CharacterData>().unwrap().SetData(text.unwrap());
// Step 18.3. // Step 18.3.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
// Step 18.4. // Step 18.4.
try!(end_data.ReplaceData(0, end_offset, DOMString::new())); end_data.ReplaceData(0, end_offset, DOMString::new())?;
} else { } else {
// Step 19.1. // Step 19.1.
let clone = child.CloneNode(false); let clone = child.CloneNode(false);
// Step 19.2. // Step 19.2.
try!(fragment.upcast::<Node>().AppendChild(&clone)); fragment.upcast::<Node>().AppendChild(&clone)?;
// Step 19.3. // Step 19.3.
let subrange = Range::new(&clone.owner_doc(), let subrange = Range::new(&clone.owner_doc(),
&child, &child,
@ -636,15 +636,15 @@ impl RangeMethods for Range {
&end_node, &end_node,
end_offset); end_offset);
// Step 19.4. // Step 19.4.
let subfragment = try!(subrange.ExtractContents()); let subfragment = subrange.ExtractContents()?;
// Step 19.5. // Step 19.5.
try!(clone.AppendChild(subfragment.upcast())); clone.AppendChild(subfragment.upcast())?;
} }
} }
// Step 20. // Step 20.
try!(self.SetStart(&new_node, new_offset)); self.SetStart(&new_node, new_offset)?;
try!(self.SetEnd(&new_node, new_offset)); self.SetEnd(&new_node, new_offset)?;
// Step 21. // Step 21.
Ok(fragment) Ok(fragment)
@ -690,16 +690,16 @@ impl RangeMethods for Range {
}; };
// Step 6. // Step 6.
try!(Node::ensure_pre_insertion_validity(node, Node::ensure_pre_insertion_validity(node,
&parent, &parent,
reference_node.r())); reference_node.r())?;
// Step 7. // Step 7.
let split_text; let split_text;
let reference_node = let reference_node =
match start_node.downcast::<Text>() { match start_node.downcast::<Text>() {
Some(text) => { Some(text) => {
split_text = try!(text.SplitText(start_offset)); split_text = text.SplitText(start_offset)?;
let new_reference = Root::upcast::<Node>(split_text); let new_reference = Root::upcast::<Node>(split_text);
assert!(new_reference.GetParentNode().r() == Some(&parent)); assert!(new_reference.GetParentNode().r() == Some(&parent));
Some(new_reference) Some(new_reference)
@ -729,7 +729,7 @@ impl RangeMethods for Range {
}; };
// Step 12. // Step 12.
try!(Node::pre_insert(node, &parent, reference_node.r())); Node::pre_insert(node, &parent, reference_node.r())?;
// Step 13. // Step 13.
if self.Collapsed() { if self.Collapsed() {
@ -839,16 +839,16 @@ impl RangeMethods for Range {
} }
// Step 3. // Step 3.
let fragment = try!(self.ExtractContents()); let fragment = self.ExtractContents()?;
// Step 4. // Step 4.
Node::replace_all(None, new_parent); Node::replace_all(None, new_parent);
// Step 5. // Step 5.
try!(self.InsertNode(new_parent)); self.InsertNode(new_parent)?;
// Step 6. // Step 6.
try!(new_parent.AppendChild(fragment.upcast())); new_parent.AppendChild(fragment.upcast())?;
// Step 7. // Step 7.
self.SelectNode(new_parent) self.SelectNode(new_parent)
@ -915,7 +915,7 @@ impl RangeMethods for Range {
let element = Element::fragment_parsing_context(&owner_doc, element.r()); let element = Element::fragment_parsing_context(&owner_doc, element.r());
// Step 3. // Step 3.
let fragment_node = try!(element.parse_fragment(fragment)); let fragment_node = element.parse_fragment(fragment)?;
// Step 4. // Step 4.
for node in fragment_node.upcast::<Node>().traverse_preorder() { for node in fragment_node.upcast::<Node>().traverse_preorder() {

View file

@ -308,12 +308,12 @@ impl Request {
headers_copy = Root::from_ref(&*init_headers); headers_copy = Root::from_ref(&*init_headers);
} }
&HeadersInit::ByteStringSequenceSequence(ref init_sequence) => { &HeadersInit::ByteStringSequenceSequence(ref init_sequence) => {
try!(headers_copy.fill(Some( headers_copy.fill(Some(
HeadersInit::ByteStringSequenceSequence(init_sequence.clone())))); HeadersInit::ByteStringSequenceSequence(init_sequence.clone())))?;
}, },
&HeadersInit::StringByteStringRecord(ref init_map) => { &HeadersInit::StringByteStringRecord(ref init_map) => {
try!(headers_copy.fill(Some( headers_copy.fill(Some(
HeadersInit::StringByteStringRecord(init_map.clone())))); HeadersInit::StringByteStringRecord(init_map.clone())))?;
}, },
} }
} }
@ -351,10 +351,10 @@ impl Request {
// but an input with headers is given, set request's // but an input with headers is given, set request's
// headers as the input's Headers. // headers as the input's Headers.
if let RequestInfo::Request(ref input_request) = input { if let RequestInfo::Request(ref input_request) = input {
try!(r.Headers().fill(Some(HeadersInit::Headers(input_request.Headers())))); r.Headers().fill(Some(HeadersInit::Headers(input_request.Headers())))?;
} }
}, },
Some(HeadersInit::Headers(_)) => try!(r.Headers().fill(Some(HeadersInit::Headers(headers_copy)))), Some(HeadersInit::Headers(_)) => r.Headers().fill(Some(HeadersInit::Headers(headers_copy)))?,
_ => {}, _ => {},
} }
@ -391,8 +391,8 @@ impl Request {
// Step 34.3 // Step 34.3
if let Some(contents) = content_type { if let Some(contents) = content_type {
if !r.Headers().Has(ByteString::new(b"Content-Type".to_vec())).unwrap() { if !r.Headers().Has(ByteString::new(b"Content-Type".to_vec())).unwrap() {
try!(r.Headers().Append(ByteString::new(b"Content-Type".to_vec()), r.Headers().Append(ByteString::new(b"Content-Type".to_vec()),
ByteString::new(contents.as_bytes().to_vec()))); ByteString::new(contents.as_bytes().to_vec()))?;
} }
} }
} }
@ -446,7 +446,7 @@ impl Request {
*r_clone.request.borrow_mut() = req.clone(); *r_clone.request.borrow_mut() = req.clone();
r_clone.body_used.set(body_used); r_clone.body_used.set(body_used);
*r_clone.mime_type.borrow_mut() = mime_type; *r_clone.mime_type.borrow_mut() = mime_type;
try!(r_clone.Headers().fill(Some(HeadersInit::Headers(r.Headers())))); r_clone.Headers().fill(Some(HeadersInit::Headers(r.Headers())))?;
r_clone.Headers().set_guard(headers_guard); r_clone.Headers().set_guard(headers_guard);
Ok(r_clone) Ok(r_clone)
} }

View file

@ -101,7 +101,7 @@ impl Response {
r.Headers().empty_header_list(); r.Headers().empty_header_list();
// Step 6.2 // Step 6.2
try!(r.Headers().fill(Some(headers_member.clone()))); r.Headers().fill(Some(headers_member.clone()))?;
} }
// Step 7 // Step 7
@ -119,8 +119,8 @@ impl Response {
// Step 7.4 // Step 7.4
if let Some(content_type_contents) = content_type { if let Some(content_type_contents) = content_type {
if !r.Headers().Has(ByteString::new(b"Content-Type".to_vec())).unwrap() { if !r.Headers().Has(ByteString::new(b"Content-Type".to_vec())).unwrap() {
try!(r.Headers().Append(ByteString::new(b"Content-Type".to_vec()), r.Headers().Append(ByteString::new(b"Content-Type".to_vec()),
ByteString::new(content_type_contents.as_bytes().to_vec()))); ByteString::new(content_type_contents.as_bytes().to_vec()))?;
} }
}; };
} }
@ -174,7 +174,7 @@ impl Response {
// Step 6 // Step 6
let url_bytestring = ByteString::from_str(url.as_str()).unwrap_or(ByteString::new(b"".to_vec())); let url_bytestring = ByteString::from_str(url.as_str()).unwrap_or(ByteString::new(b"".to_vec()));
try!(r.Headers().Set(ByteString::new(b"Location".to_vec()), url_bytestring)); r.Headers().Set(ByteString::new(b"Location".to_vec()), url_bytestring)?;
// Step 4 continued // Step 4 continued
// Headers Guard is set to Immutable here to prevent error in Step 6 // Headers Guard is set to Immutable here to prevent error in Step 6
@ -305,7 +305,7 @@ impl ResponseMethods for Response {
// Step 2 // Step 2
let new_response = Response::new(&self.global()); let new_response = Response::new(&self.global());
new_response.Headers().set_guard(self.Headers().get_guard()); new_response.Headers().set_guard(self.Headers().get_guard());
try!(new_response.Headers().fill(Some(HeadersInit::Headers(self.Headers())))); new_response.Headers().fill(Some(HeadersInit::Headers(self.Headers())))?;
// https://fetch.spec.whatwg.org/#concept-response-clone // https://fetch.spec.whatwg.org/#concept-response-clone
// Instead of storing a net_traits::Response internally, we // Instead of storing a net_traits::Response internally, we

View file

@ -89,7 +89,7 @@ impl ServiceWorkerMethods for ServiceWorker {
return Err(Error::InvalidState); return Err(Error::InvalidState);
} }
// Step 7 // Step 7
let data = try!(StructuredCloneData::write(cx, message)); let data = StructuredCloneData::write(cx, message)?;
let msg_vec = DOMMessage(data.move_to_arraybuffer()); let msg_vec = DOMMessage(data.move_to_arraybuffer());
let _ = let _ =
self.global() self.global()

View file

@ -303,11 +303,11 @@ impl ServiceWorkerGlobalScope {
let ret = sel.wait(); let ret = sel.wait();
if ret == worker_handle.id() { if ret == worker_handle.id() {
Ok(MixedMessage::FromServiceWorker(try!(worker_port.recv()))) Ok(MixedMessage::FromServiceWorker(worker_port.recv()?))
}else if ret == devtools_handle.id() { }else if ret == devtools_handle.id() {
Ok(MixedMessage::FromDevtools(try!(devtools_port.recv()))) Ok(MixedMessage::FromDevtools(devtools_port.recv()?))
} else if ret == timer_port_handle.id() { } else if ret == timer_port_handle.id() {
Ok(MixedMessage::FromTimeoutThread(try!(timer_event_port.recv()))) Ok(MixedMessage::FromTimeoutThread(timer_event_port.recv()?))
} else { } else {
panic!("unexpected select result!") panic!("unexpected select result!")
} }

View file

@ -135,7 +135,7 @@ impl<'a> Serialize for &'a Node {
let ar: AttrRef = (&qname, &**value); let ar: AttrRef = (&qname, &**value);
ar ar
}); });
try!(serializer.start_elem(name.clone(), attr_refs)); serializer.start_elem(name.clone(), attr_refs)?;
} }
let children = if let Some(tpl) = node.downcast::<HTMLTemplateElement>() { let children = if let Some(tpl) = node.downcast::<HTMLTemplateElement>() {
@ -146,18 +146,18 @@ impl<'a> Serialize for &'a Node {
}; };
for handle in children { for handle in children {
try!((&*handle).serialize(serializer, IncludeNode)); (&*handle).serialize(serializer, IncludeNode)?;
} }
if traversal_scope == IncludeNode { if traversal_scope == IncludeNode {
try!(serializer.end_elem(name.clone())); serializer.end_elem(name.clone())?;
} }
Ok(()) Ok(())
}, },
(ChildrenOnly, NodeTypeId::Document(_)) => { (ChildrenOnly, NodeTypeId::Document(_)) => {
for handle in node.children() { for handle in node.children() {
try!((&*handle).serialize(serializer, IncludeNode)); (&*handle).serialize(serializer, IncludeNode)?;
} }
Ok(()) Ok(())
}, },

View file

@ -104,7 +104,7 @@ impl TreeWalkerMethods for TreeWalker {
node = n; node = n;
// "2. If node is not null and filtering node returns FILTER_ACCEPT, // "2. If node is not null and filtering node returns FILTER_ACCEPT,
// then set the currentNode attribute to node, return node." // then set the currentNode attribute to node, return node."
if NodeFilterConstants::FILTER_ACCEPT == try!(self.accept_node(&node)) { if NodeFilterConstants::FILTER_ACCEPT == self.accept_node(&node)? {
self.current_node.set(&node); self.current_node.set(&node);
return Ok(Some(node)) return Ok(Some(node))
} }
@ -163,7 +163,7 @@ impl TreeWalkerMethods for TreeWalker {
// "4. If result is FILTER_ACCEPT, then // "4. If result is FILTER_ACCEPT, then
// set the currentNode attribute to node and return node." // set the currentNode attribute to node and return node."
loop { loop {
let result = try!(self.accept_node(&node)); let result = self.accept_node(&node)?;
match result { match result {
NodeFilterConstants::FILTER_REJECT => break, NodeFilterConstants::FILTER_REJECT => break,
_ if node.GetFirstChild().is_some() => _ if node.GetFirstChild().is_some() =>
@ -192,7 +192,7 @@ impl TreeWalkerMethods for TreeWalker {
} }
// "5. Filter node and if the return value is FILTER_ACCEPT, then // "5. Filter node and if the return value is FILTER_ACCEPT, then
// set the currentNode attribute to node and return node." // set the currentNode attribute to node and return node."
if NodeFilterConstants::FILTER_ACCEPT == try!(self.accept_node(&node)) { if NodeFilterConstants::FILTER_ACCEPT == self.accept_node(&node)? {
self.current_node.set(&node); self.current_node.set(&node);
return Ok(Some(node)) return Ok(Some(node))
} }
@ -220,7 +220,7 @@ impl TreeWalkerMethods for TreeWalker {
// "1. Set node to its first child." // "1. Set node to its first child."
node = child; node = child;
// "2. Filter node and set result to the return value." // "2. Filter node and set result to the return value."
result = try!(self.accept_node(&node)); result = self.accept_node(&node)?;
// "3. If result is FILTER_ACCEPT, then // "3. If result is FILTER_ACCEPT, then
// set the currentNode attribute to node and return node." // set the currentNode attribute to node and return node."
if NodeFilterConstants::FILTER_ACCEPT == result { if NodeFilterConstants::FILTER_ACCEPT == result {
@ -238,7 +238,7 @@ impl TreeWalkerMethods for TreeWalker {
Some(n) => { Some(n) => {
node = n; node = n;
// "3. Filter node and set result to the return value." // "3. Filter node and set result to the return value."
result = try!(self.accept_node(&node)); result = self.accept_node(&node)?;
// "4. If result is FILTER_ACCEPT, then // "4. If result is FILTER_ACCEPT, then
// set the currentNode attribute to node and return node." // set the currentNode attribute to node and return node."
if NodeFilterConstants::FILTER_ACCEPT == result { if NodeFilterConstants::FILTER_ACCEPT == result {
@ -275,7 +275,7 @@ impl TreeWalker {
// 4. Main: Repeat these substeps: // 4. Main: Repeat these substeps:
'main: loop { 'main: loop {
// "1. Filter node and let result be the return value." // "1. Filter node and let result be the return value."
let result = try!(self.accept_node(&node)); let result = self.accept_node(&node)?;
match result { match result {
// "2. If result is FILTER_ACCEPT, then set the currentNode // "2. If result is FILTER_ACCEPT, then set the currentNode
// attribute to node and return node." // attribute to node and return node."
@ -350,7 +350,7 @@ impl TreeWalker {
// "1. Set node to sibling." // "1. Set node to sibling."
node = sibling_op.unwrap(); node = sibling_op.unwrap();
// "2. Filter node and let result be the return value." // "2. Filter node and let result be the return value."
let result = try!(self.accept_node(&node)); let result = self.accept_node(&node)?;
// "3. If result is FILTER_ACCEPT, then set the currentNode // "3. If result is FILTER_ACCEPT, then set the currentNode
// attribute to node and return node." // attribute to node and return node."
if NodeFilterConstants::FILTER_ACCEPT == result { if NodeFilterConstants::FILTER_ACCEPT == result {
@ -378,7 +378,7 @@ impl TreeWalker {
// "5. Filter node and if the return value is FILTER_ACCEPT, then return null." // "5. Filter node and if the return value is FILTER_ACCEPT, then return null."
Some(n) => { Some(n) => {
node = n; node = n;
if NodeFilterConstants::FILTER_ACCEPT == try!(self.accept_node(&node)) { if NodeFilterConstants::FILTER_ACCEPT == self.accept_node(&node)? {
return Ok(None) return Ok(None)
} }
} }

View file

@ -636,8 +636,8 @@ fn validate_layer(cx: *mut JSContext,
let ctx = layer.source.as_ref().map(|ref s| s.get_or_init_webgl_context(cx, None)).unwrap_or(None); let ctx = layer.source.as_ref().map(|ref s| s.get_or_init_webgl_context(cx, None)).unwrap_or(None);
if let Some(ctx) = ctx { if let Some(ctx) = ctx {
let mut data = WebVRLayer::default(); let mut data = WebVRLayer::default();
try!(parse_bounds(&layer.leftBounds, &mut data.left_bounds)); parse_bounds(&layer.leftBounds, &mut data.left_bounds)?;
try!(parse_bounds(&layer.rightBounds, &mut data.right_bounds)); parse_bounds(&layer.rightBounds, &mut data.right_bounds)?;
Ok((data, ctx)) Ok((data, ctx))
} else { } else {
Err("VRLayer source must be a WebGL Context") Err("VRLayer source must be a WebGL Context")

View file

@ -285,7 +285,7 @@ impl<'a> WebGLValidator for TexImage2DValidator<'a> {
width, width,
height, height,
border, border,
} = try!(self.common_validator.validate()); } = self.common_validator.validate()?;
// GL_INVALID_VALUE is generated if target is one of the six cube map 2D // GL_INVALID_VALUE is generated if target is one of the six cube map 2D
// image targets and the width and height parameters are not equal. // image targets and the width and height parameters are not equal.

View file

@ -1496,7 +1496,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
typedarray!(in(cx) let array_buffer: ArrayBuffer = data); typedarray!(in(cx) let array_buffer: ArrayBuffer = data);
let data_vec = match array_buffer { let data_vec = match array_buffer {
Ok(mut data) => data.as_slice().to_vec(), Ok(mut data) => data.as_slice().to_vec(),
Err(_) => try!(fallible_array_buffer_view_to_vec(cx, data)), Err(_) => fallible_array_buffer_view_to_vec(cx, data)?,
}; };
let bound_buffer = match target { let bound_buffer = match target {
@ -1564,7 +1564,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
typedarray!(in(cx) let array_buffer: ArrayBuffer = data); typedarray!(in(cx) let array_buffer: ArrayBuffer = data);
let data_vec = match array_buffer { let data_vec = match array_buffer {
Ok(mut data) => data.as_slice().to_vec(), Ok(mut data) => data.as_slice().to_vec(),
Err(_) => try!(fallible_array_buffer_view_to_vec(cx, data)), Err(_) => fallible_array_buffer_view_to_vec(cx, data)?,
}; };
let bound_buffer = match target { let bound_buffer = match target {
@ -1596,7 +1596,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8
unsafe fn CompressedTexImage2D(&self, cx: *mut JSContext, _target: u32, _level: i32, _internal_format: u32, unsafe fn CompressedTexImage2D(&self, cx: *mut JSContext, _target: u32, _level: i32, _internal_format: u32,
_width: i32, _height: i32, _border: i32, pixels: *mut JSObject) -> Fallible<()> { _width: i32, _height: i32, _border: i32, pixels: *mut JSObject) -> Fallible<()> {
let _data = try!(fallible_array_buffer_view_to_vec(cx, pixels) ); let _data = fallible_array_buffer_view_to_vec(cx, pixels)?;
// FIXME: No compressed texture format is currently supported, so error out as per // FIXME: No compressed texture format is currently supported, so error out as per
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#COMPRESSED_TEXTURE_SUPPORT // https://www.khronos.org/registry/webgl/specs/latest/1.0/#COMPRESSED_TEXTURE_SUPPORT
self.webgl_error(InvalidEnum); self.webgl_error(InvalidEnum);
@ -1608,7 +1608,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
unsafe fn CompressedTexSubImage2D(&self, cx: *mut JSContext, _target: u32, _level: i32, unsafe fn CompressedTexSubImage2D(&self, cx: *mut JSContext, _target: u32, _level: i32,
_xoffset: i32, _yoffset: i32, _width: i32, _height: i32, _xoffset: i32, _yoffset: i32, _width: i32, _height: i32,
_format: u32, pixels: *mut JSObject) -> Fallible<()> { _format: u32, pixels: *mut JSObject) -> Fallible<()> {
let _data = try!(fallible_array_buffer_view_to_vec(cx, pixels)); let _data = fallible_array_buffer_view_to_vec(cx, pixels)?;
// FIXME: No compressed texture format is currently supported, so error out as per // FIXME: No compressed texture format is currently supported, so error out as per
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#COMPRESSED_TEXTURE_SUPPORT // https://www.khronos.org/registry/webgl/specs/latest/1.0/#COMPRESSED_TEXTURE_SUPPORT
self.webgl_error(InvalidEnum); self.webgl_error(InvalidEnum);
@ -2682,7 +2682,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
uniform: Option<&WebGLUniformLocation>, uniform: Option<&WebGLUniformLocation>,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Int32>(cx, data, ConversionBehavior::Default)); let data_vec = typed_array_or_sequence_to_vec::<Int32>(cx, data, ConversionBehavior::Default)?;
if self.validate_uniform_parameters(uniform, UniformSetterType::Int, &data_vec) { if self.validate_uniform_parameters(uniform, UniformSetterType::Int, &data_vec) {
self.ipc_renderer self.ipc_renderer
@ -2700,7 +2700,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
uniform: Option<&WebGLUniformLocation>, uniform: Option<&WebGLUniformLocation>,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if self.validate_uniform_parameters(uniform, UniformSetterType::Float, &data_vec) { if self.validate_uniform_parameters(uniform, UniformSetterType::Float, &data_vec) {
self.ipc_renderer self.ipc_renderer
@ -2729,7 +2729,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
uniform: Option<&WebGLUniformLocation>, uniform: Option<&WebGLUniformLocation>,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if self.validate_uniform_parameters(uniform, if self.validate_uniform_parameters(uniform,
UniformSetterType::FloatVec2, UniformSetterType::FloatVec2,
@ -2762,7 +2762,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
uniform: Option<&WebGLUniformLocation>, uniform: Option<&WebGLUniformLocation>,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Int32>(cx, data, ConversionBehavior::Default)); let data_vec = typed_array_or_sequence_to_vec::<Int32>(cx, data, ConversionBehavior::Default)?;
if self.validate_uniform_parameters(uniform, if self.validate_uniform_parameters(uniform,
UniformSetterType::IntVec2, UniformSetterType::IntVec2,
@ -2795,7 +2795,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
uniform: Option<&WebGLUniformLocation>, uniform: Option<&WebGLUniformLocation>,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if self.validate_uniform_parameters(uniform, if self.validate_uniform_parameters(uniform,
UniformSetterType::FloatVec3, UniformSetterType::FloatVec3,
@ -2828,7 +2828,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
uniform: Option<&WebGLUniformLocation>, uniform: Option<&WebGLUniformLocation>,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Int32>(cx, data, ConversionBehavior::Default)); let data_vec = typed_array_or_sequence_to_vec::<Int32>(cx, data, ConversionBehavior::Default)?;
if self.validate_uniform_parameters(uniform, if self.validate_uniform_parameters(uniform,
UniformSetterType::IntVec3, UniformSetterType::IntVec3,
@ -2862,7 +2862,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
uniform: Option<&WebGLUniformLocation>, uniform: Option<&WebGLUniformLocation>,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Int32>(cx, data, ConversionBehavior::Default)); let data_vec = typed_array_or_sequence_to_vec::<Int32>(cx, data, ConversionBehavior::Default)?;
if self.validate_uniform_parameters(uniform, if self.validate_uniform_parameters(uniform,
UniformSetterType::IntVec4, UniformSetterType::IntVec4,
@ -2895,7 +2895,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
uniform: Option<&WebGLUniformLocation>, uniform: Option<&WebGLUniformLocation>,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if self.validate_uniform_parameters(uniform, if self.validate_uniform_parameters(uniform,
UniformSetterType::FloatVec4, UniformSetterType::FloatVec4,
@ -2916,7 +2916,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
transpose: bool, transpose: bool,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if self.validate_uniform_parameters(uniform, if self.validate_uniform_parameters(uniform,
UniformSetterType::FloatMat2, UniformSetterType::FloatMat2,
&data_vec) { &data_vec) {
@ -2936,7 +2936,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
transpose: bool, transpose: bool,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if self.validate_uniform_parameters(uniform, if self.validate_uniform_parameters(uniform,
UniformSetterType::FloatMat3, UniformSetterType::FloatMat3,
&data_vec) { &data_vec) {
@ -2956,7 +2956,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
transpose: bool, transpose: bool,
data: *mut JSObject) -> Fallible<()> { data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if self.validate_uniform_parameters(uniform, if self.validate_uniform_parameters(uniform,
UniformSetterType::FloatMat4, UniformSetterType::FloatMat4,
&data_vec) { &data_vec) {
@ -2996,7 +2996,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
#[allow(unsafe_code)] #[allow(unsafe_code)]
unsafe fn VertexAttrib1fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> { unsafe fn VertexAttrib1fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if data_vec.len() < 1 { if data_vec.len() < 1 {
return Ok(self.webgl_error(InvalidOperation)); return Ok(self.webgl_error(InvalidOperation));
} }
@ -3013,7 +3013,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
#[allow(unsafe_code)] #[allow(unsafe_code)]
unsafe fn VertexAttrib2fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> { unsafe fn VertexAttrib2fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if data_vec.len() < 2 { if data_vec.len() < 2 {
return Ok(self.webgl_error(InvalidOperation)); return Ok(self.webgl_error(InvalidOperation));
} }
@ -3030,7 +3030,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
#[allow(unsafe_code)] #[allow(unsafe_code)]
unsafe fn VertexAttrib3fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> { unsafe fn VertexAttrib3fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if data_vec.len() < 3 { if data_vec.len() < 3 {
return Ok(self.webgl_error(InvalidOperation)); return Ok(self.webgl_error(InvalidOperation));
} }
@ -3047,7 +3047,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
#[allow(unsafe_code)] #[allow(unsafe_code)]
unsafe fn VertexAttrib4fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> { unsafe fn VertexAttrib4fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> {
assert!(!data.is_null()); assert!(!data.is_null());
let data_vec = try!(typed_array_or_sequence_to_vec::<Float32>(cx, data, ())); let data_vec = typed_array_or_sequence_to_vec::<Float32>(cx, data, ())?;
if data_vec.len() < 4 { if data_vec.len() < 4 {
return Ok(self.webgl_error(InvalidOperation)); return Ok(self.webgl_error(InvalidOperation));
} }
@ -3134,7 +3134,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
let data = if data_ptr.is_null() { let data = if data_ptr.is_null() {
None None
} else { } else {
Some(try!(fallible_array_buffer_view_to_vec(cx, data_ptr))) Some(fallible_array_buffer_view_to_vec(cx, data_ptr)?)
}; };
let validator = TexImage2DValidator::new(self, target, level, let validator = TexImage2DValidator::new(self, target, level,
@ -3261,7 +3261,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
let data = if data_ptr.is_null() { let data = if data_ptr.is_null() {
None None
} else { } else {
Some(try!(fallible_array_buffer_view_to_vec(cx, data_ptr))) Some(fallible_array_buffer_view_to_vec(cx, data_ptr)?)
}; };
let validator = TexImage2DValidator::new(self, target, level, let validator = TexImage2DValidator::new(self, target, level,

View file

@ -316,7 +316,7 @@ impl WebSocketMethods for WebSocket {
// https://html.spec.whatwg.org/multipage/#dom-websocket-send // https://html.spec.whatwg.org/multipage/#dom-websocket-send
fn Send(&self, data: USVString) -> ErrorResult { fn Send(&self, data: USVString) -> ErrorResult {
let data_byte_len = data.0.as_bytes().len() as u64; let data_byte_len = data.0.as_bytes().len() as u64;
let send_data = try!(self.send_impl(data_byte_len)); let send_data = self.send_impl(data_byte_len)?;
if send_data { if send_data {
let mut other_sender = self.sender.borrow_mut(); let mut other_sender = self.sender.borrow_mut();
@ -334,7 +334,7 @@ impl WebSocketMethods for WebSocket {
If the buffer limit is reached in the first place, there are likely other major problems If the buffer limit is reached in the first place, there are likely other major problems
*/ */
let data_byte_len = blob.Size(); let data_byte_len = blob.Size();
let send_data = try!(self.send_impl(data_byte_len)); let send_data = self.send_impl(data_byte_len)?;
if send_data { if send_data {
let mut other_sender = self.sender.borrow_mut(); let mut other_sender = self.sender.borrow_mut();

View file

@ -765,7 +765,7 @@ impl WindowMethods for Window {
// Step 1-2, 6-8. // Step 1-2, 6-8.
// TODO(#12717): Should implement the `transfer` argument. // TODO(#12717): Should implement the `transfer` argument.
let data = try!(StructuredCloneData::write(cx, message)); let data = StructuredCloneData::write(cx, message)?;
// Step 9. // Step 9.
self.post_message(origin, data); self.post_message(origin, data);
@ -993,9 +993,9 @@ impl WindowMethods for Window {
// check-tidy: no specs after this line // check-tidy: no specs after this line
fn OpenURLInDefaultBrowser(&self, href: DOMString) -> ErrorResult { fn OpenURLInDefaultBrowser(&self, href: DOMString) -> ErrorResult {
let url = try!(ServoUrl::parse(&href).map_err(|e| { let url = ServoUrl::parse(&href).map_err(|e| {
Error::Type(format!("Couldn't parse URL: {}", e)) Error::Type(format!("Couldn't parse URL: {}", e))
})); })?;
match open::that(url.as_str()) { match open::that(url.as_str()) {
Ok(_) => Ok(()), Ok(_) => Ok(()),
Err(e) => Err(Error::Type(format!("Couldn't open URL: {}", e))), Err(e) => Err(Error::Type(format!("Couldn't open URL: {}", e))),

View file

@ -167,7 +167,7 @@ impl WorkerMethods for Worker {
#[allow(unsafe_code)] #[allow(unsafe_code)]
// https://html.spec.whatwg.org/multipage/#dom-worker-postmessage // https://html.spec.whatwg.org/multipage/#dom-worker-postmessage
unsafe fn PostMessage(&self, cx: *mut JSContext, message: HandleValue) -> ErrorResult { unsafe fn PostMessage(&self, cx: *mut JSContext, message: HandleValue) -> ErrorResult {
let data = try!(StructuredCloneData::write(cx, message)); let data = StructuredCloneData::write(cx, message)?;
let address = Trusted::new(self); let address = Trusted::new(self);
// NOTE: step 9 of https://html.spec.whatwg.org/multipage/#dom-messageport-postmessage // NOTE: step 9 of https://html.spec.whatwg.org/multipage/#dom-messageport-postmessage

View file

@ -501,7 +501,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
// Step 4 (first half) // Step 4 (first half)
let extracted_or_serialized = match data { let extracted_or_serialized = match data {
Some(DocumentOrBodyInit::Document(ref doc)) => { Some(DocumentOrBodyInit::Document(ref doc)) => {
let data = Vec::from(try!(serialize_document(&doc)).as_ref()); let data = Vec::from(serialize_document(&doc)?.as_ref());
let content_type = if doc.is_html_document() { let content_type = if doc.is_html_document() {
"text/html;charset=UTF-8" "text/html;charset=UTF-8"
} else { } else {
@ -719,7 +719,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
_ => {}, _ => {},
} }
// Step 2 // Step 2
let override_mime = try!(mime.parse::<Mime>().map_err(|_| Error::Syntax)); let override_mime = mime.parse::<Mime>().map_err(|_| Error::Syntax)?;
// Step 3 // Step 3
let mime_no_params = Mime(override_mime.clone().0, override_mime.clone().1, vec![]); let mime_no_params = Mime(override_mime.clone().0, override_mime.clone().1, vec![]);
*self.override_mime_type.borrow_mut() = Some(mime_no_params); *self.override_mime_type.borrow_mut() = Some(mime_no_params);

View file

@ -371,9 +371,9 @@ pub struct ServoLayoutElement<'le> {
impl<'le> fmt::Debug for ServoLayoutElement<'le> { impl<'le> fmt::Debug for ServoLayoutElement<'le> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
try!(write!(f, "<{}", self.element.local_name())); write!(f, "<{}", self.element.local_name())?;
if let &Some(ref id) = unsafe { &*self.element.id_attribute() } { if let &Some(ref id) = unsafe { &*self.element.id_attribute() } {
try!(write!(f, " id={}", id)); write!(f, " id={}", id)?;
} }
write!(f, "> ({:#x})", self.as_node().opaque().0) write!(f, "> ({:#x})", self.as_node().opaque().0)
} }