diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2019-07-23 21:24:57 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-23 21:24:57 -0400 |
commit | 7ffe65e6726c4f179e97140a7ff679c6cb706c40 (patch) | |
tree | bc68b9a08471c4a32660e7c856fca653243ab237 /components/script/dom/bindings/conversions.rs | |
parent | 8f7440f36881fa60f4237d0dec8928799a6aa747 (diff) | |
parent | e34a15c5ef268149daef79376a981108545fa34d (diff) | |
download | servo-7ffe65e6726c4f179e97140a7ff679c6cb706c40.tar.gz servo-7ffe65e6726c4f179e97140a7ff679c6cb706c40.zip |
Auto merge of #23745 - georgeroman:implement_get_element_property_wd_command, r=jdm
Implement GetElementProperty wd command
<!-- 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: -->
- [X] There are tests for these changes
<!-- 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/23745)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/bindings/conversions.rs')
-rw-r--r-- | components/script/dom/bindings/conversions.rs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index 17f72956ca1..c84adf64dbb 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -60,7 +60,7 @@ use js::jsapi::{ }; use js::jsapi::{JS_NewStringCopyN, JS_StringHasLatin1Chars}; use js::jsval::{ObjectValue, StringValue, UndefinedValue}; -use js::rust::wrappers::{JS_GetProperty, JS_IsArrayObject}; +use js::rust::wrappers::{JS_GetProperty, JS_HasProperty, JS_IsArrayObject}; use js::rust::{get_object_class, is_dom_class, is_dom_object, maybe_wrap_value, ToString}; use js::rust::{HandleId, HandleObject, HandleValue, MutableHandleValue}; use num_traits::Float; @@ -596,11 +596,18 @@ pub unsafe fn get_property_jsval( Ok(cname) => cname, Err(_) => return Ok(()), }; - JS_GetProperty(cx, object, cname.as_ptr(), rval); - if JS_IsExceptionPending(cx) { - return Err(Error::JSFailed); + let mut found = false; + if JS_HasProperty(cx, object, cname.as_ptr(), &mut found) && found { + JS_GetProperty(cx, object, cname.as_ptr(), rval); + if JS_IsExceptionPending(cx) { + return Err(Error::JSFailed); + } + Ok(()) + } else if JS_IsExceptionPending(cx) { + Err(Error::JSFailed) + } else { + Ok(()) } - Ok(()) } /// Get a property from a JS object, and convert it to a Rust value. |