aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py4
-rw-r--r--components/script/dom/customelementregistry.rs18
-rw-r--r--components/script/dom/eventtarget.rs66
3 files changed, 58 insertions, 30 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 92f6b3a71b6..cc9a37a5ecc 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -4549,7 +4549,7 @@ class ClassConstructor(ClassItem):
"});\n"
"// Note: callback cannot be moved after calling init.\n"
"match Rc::get_mut(&mut ret) {\n"
- " Some(ref mut callback) => unsafe { callback.parent.init(%s, %s) },\n"
+ " Some(ref mut callback) => callback.parent.init(%s, %s),\n"
" None => unreachable!(),\n"
"};\n"
"ret") % (cgClass.name, '\n'.join(initializers),
@@ -4564,7 +4564,7 @@ class ClassConstructor(ClassItem):
body = ' {\n' + body + '}'
return string.Template("""\
-pub fn ${decorators}new(${args}) -> Rc<${className}>${body}
+pub unsafe fn ${decorators}new(${args}) -> Rc<${className}>${body}
""").substitute({'decorators': self.getDecorators(True),
'className': cgClass.getNameString(),
'args': args,
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs
index 99b38717ac2..a208f99def6 100644
--- a/components/script/dom/customelementregistry.rs
+++ b/components/script/dom/customelementregistry.rs
@@ -121,7 +121,8 @@ impl CustomElementRegistry {
/// <https://html.spec.whatwg.org/multipage/#dom-customelementregistry-define>
/// Steps 10.3, 10.4
- fn get_callbacks(&self, prototype: HandleObject) -> Fallible<LifecycleCallbacks> {
+ #[allow(unsafe_code)]
+ unsafe fn get_callbacks(&self, prototype: HandleObject) -> Fallible<LifecycleCallbacks> {
let cx = self.window.get_cx();
// Step 4
@@ -164,20 +165,21 @@ impl CustomElementRegistry {
/// <https://html.spec.whatwg.org/multipage/#dom-customelementregistry-define>
/// Step 10.4
#[allow(unsafe_code)]
-fn get_callback(cx: *mut JSContext, prototype: HandleObject, name: &[u8]) -> Fallible<Option<Rc<Function>>> {
+unsafe fn get_callback(
+ cx: *mut JSContext,
+ prototype: HandleObject,
+ name: &[u8],
+) -> Fallible<Option<Rc<Function>>> {
rooted!(in(cx) let mut callback = UndefinedValue());
// Step 10.4.1
- if unsafe { !JS_GetProperty(cx,
- prototype,
- name.as_ptr() as *const _,
- callback.handle_mut()) } {
+ if !JS_GetProperty(cx, prototype, name.as_ptr() as *const _, callback.handle_mut()) {
return Err(Error::JSFailed);
}
// Step 10.4.2
if !callback.is_undefined() {
- if !callback.is_object() || unsafe { !IsCallable(callback.to_object()) } {
+ if !callback.is_object() || !IsCallable(callback.to_object()) {
return Err(Error::Type("Lifecycle callback is not callable".to_owned()));
}
Ok(Some(Function::new(cx, callback.to_object())))
@@ -265,7 +267,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
rooted!(in(cx) let proto_object = prototype.to_object());
let callbacks = {
let _ac = JSAutoCompartment::new(cx, proto_object.get());
- match self.get_callbacks(proto_object.handle()) {
+ match unsafe { self.get_callbacks(proto_object.handle()) } {
Ok(callbacks) => callbacks,
Err(error) => {
self.element_definition_is_running.set(false);
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs
index 426752e42d5..7418efce422 100644
--- a/components/script/dom/eventtarget.rs
+++ b/components/script/dom/eventtarget.rs
@@ -471,50 +471,76 @@ impl EventTarget {
assert!(!funobj.is_null());
// Step 1.14
if is_error {
- Some(CommonEventHandler::ErrorEventHandler(OnErrorEventHandlerNonNull::new(cx, funobj)))
+ Some(CommonEventHandler::ErrorEventHandler(
+ unsafe { OnErrorEventHandlerNonNull::new(cx, funobj) },
+ ))
} else {
if ty == &atom!("beforeunload") {
Some(CommonEventHandler::BeforeUnloadEventHandler(
- OnBeforeUnloadEventHandlerNonNull::new(cx, funobj)))
+ unsafe { OnBeforeUnloadEventHandlerNonNull::new(cx, funobj) },
+ ))
} else {
- Some(CommonEventHandler::EventHandler(EventHandlerNonNull::new(cx, funobj)))
+ Some(CommonEventHandler::EventHandler(
+ unsafe { EventHandlerNonNull::new(cx, funobj) },
+ ))
}
}
}
+ #[allow(unsafe_code)]
pub fn set_event_handler_common<T: CallbackContainer>(
- &self, ty: &str, listener: Option<Rc<T>>)
+ &self,
+ ty: &str,
+ listener: Option<Rc<T>>,
+ )
+ where
+ T: CallbackContainer,
{
let cx = self.global().get_cx();
- let event_listener = listener.map(|listener|
- InlineEventListener::Compiled(
- CommonEventHandler::EventHandler(
- EventHandlerNonNull::new(cx, listener.callback()))));
+ let event_listener = listener.map(|listener| {
+ InlineEventListener::Compiled(CommonEventHandler::EventHandler(
+ unsafe { EventHandlerNonNull::new(cx, listener.callback()) },
+ ))
+ });
self.set_inline_event_listener(Atom::from(ty), event_listener);
}
+ #[allow(unsafe_code)]
pub fn set_error_event_handler<T: CallbackContainer>(
- &self, ty: &str, listener: Option<Rc<T>>)
+ &self,
+ ty: &str,
+ listener: Option<Rc<T>>,
+ )
+ where
+ T: CallbackContainer,
{
let cx = self.global().get_cx();
- let event_listener = listener.map(|listener|
- InlineEventListener::Compiled(
- CommonEventHandler::ErrorEventHandler(
- OnErrorEventHandlerNonNull::new(cx, listener.callback()))));
+ let event_listener = listener.map(|listener| {
+ InlineEventListener::Compiled(CommonEventHandler::ErrorEventHandler(
+ unsafe { OnErrorEventHandlerNonNull::new(cx, listener.callback()) }
+ ))
+ });
self.set_inline_event_listener(Atom::from(ty), event_listener);
}
- pub fn set_beforeunload_event_handler<T: CallbackContainer>(&self, ty: &str,
- listener: Option<Rc<T>>) {
+ #[allow(unsafe_code)]
+ pub fn set_beforeunload_event_handler<T: CallbackContainer>(
+ &self,
+ ty: &str,
+ listener: Option<Rc<T>>,
+ )
+ where
+ T: CallbackContainer,
+ {
let cx = self.global().get_cx();
- let event_listener = listener.map(|listener|
- InlineEventListener::Compiled(
- CommonEventHandler::BeforeUnloadEventHandler(
- OnBeforeUnloadEventHandlerNonNull::new(cx, listener.callback())))
- );
+ let event_listener = listener.map(|listener| {
+ InlineEventListener::Compiled(CommonEventHandler::BeforeUnloadEventHandler(
+ unsafe { OnBeforeUnloadEventHandlerNonNull::new(cx, listener.callback()) }
+ ))
+ });
self.set_inline_event_listener(Atom::from(ty), event_listener);
}