aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/proxyhandler.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/bindings/proxyhandler.rs')
-rw-r--r--src/components/script/dom/bindings/proxyhandler.rs21
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);