diff options
Diffstat (limited to 'src/components/script/dom/bindings/proxyhandler.rs')
-rw-r--r-- | src/components/script/dom/bindings/proxyhandler.rs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/components/script/dom/bindings/proxyhandler.rs b/src/components/script/dom/bindings/proxyhandler.rs index 07d750e438e..1a035a26eb2 100644 --- a/src/components/script/dom/bindings/proxyhandler.rs +++ b/src/components/script/dom/bindings/proxyhandler.rs @@ -10,7 +10,8 @@ use js::jsapi::{JS_GetPropertyDescriptorById, JS_NewUCString, JS_malloc, JS_free use js::jsapi::{JSBool, JS_DefinePropertyById, JS_NewObjectWithGivenProto}; use js::jsapi::{JS_ReportErrorFlagsAndNumber, JS_StrictPropertyStub}; use js::jsapi::{JSREPORT_WARNING, JSREPORT_STRICT, JSREPORT_STRICT_MODE_ERROR}; -use js::jsval::ObjectValue; +use js::jsapi::JS_DeletePropertyById2; +use js::jsval::{UndefinedValue, ObjectValue}; use js::glue::GetProxyExtra; use js::glue::{GetObjectProto, GetObjectParent, SetProxyExtra, GetProxyHandler}; use js::glue::InvokeGetOwnPropertyDescriptor; @@ -78,6 +79,24 @@ pub extern fn defineProperty(cx: *mut JSContext, proxy: *mut JSObject, id: jsid, defineProperty_(cx, proxy, id, desc) } +pub extern fn delete_(cx: *mut JSContext, proxy: *mut JSObject, id: jsid, + bp: *mut bool) -> JSBool { + unsafe { + let expando = EnsureExpandoObject(cx, proxy); + if expando.is_null() { + return 0; + } + + let mut value = UndefinedValue(); + if JS_DeletePropertyById2(cx, expando, id, &mut value) == 0 { + return 0; + } + + *bp = value.to_boolean(); + return 1; + } +} + pub fn _obj_toString(cx: *mut JSContext, className: *libc::c_char) -> *mut JSString { unsafe { let name = str::raw::from_c_str(className); |