add a generic utility to convert a slice into a frozen array

This commit is contained in:
Gregory Terzian 2020-01-09 16:12:08 +08:00
parent c5069835d7
commit e768ca1643
3 changed files with 6 additions and 11 deletions

View file

@ -10,10 +10,8 @@ use crate::dom::bindings::codegen::PrototypeList::{MAX_PROTO_CHAIN_LENGTH, PROTO
use crate::dom::bindings::conversions::{jsstring_to_str, private_from_proto_check}; use crate::dom::bindings::conversions::{jsstring_to_str, private_from_proto_check};
use crate::dom::bindings::error::throw_invalid_this; use crate::dom::bindings::error::throw_invalid_this;
use crate::dom::bindings::inheritance::TopTypeId; use crate::dom::bindings::inheritance::TopTypeId;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString; use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::trace_object; use crate::dom::bindings::trace::trace_object;
use crate::dom::messageport::MessagePort;
use crate::dom::windowproxy; use crate::dom::windowproxy;
use crate::script_runtime::JSContext as SafeJSContext; use crate::script_runtime::JSContext as SafeJSContext;
use js::conversions::{jsstr_to_string, ToJSValConvertible}; use js::conversions::{jsstr_to_string, ToJSValConvertible};
@ -126,12 +124,9 @@ impl Clone for DOMJSClass {
unsafe impl Sync for DOMJSClass {} unsafe impl Sync for DOMJSClass {}
/// Returns a JSVal representing a frozen array of ports /// Returns a JSVal representing a frozen array of ports
pub fn message_ports_to_frozen_array( pub fn to_frozen_array<T: ToJSValConvertible>(convertibles: &[T], cx: SafeJSContext) -> JSVal {
message_ports: &[DomRoot<MessagePort>],
cx: SafeJSContext,
) -> JSVal {
rooted!(in(*cx) let mut ports = UndefinedValue()); rooted!(in(*cx) let mut ports = UndefinedValue());
unsafe { message_ports.to_jsval(*cx, ports.handle_mut()) }; unsafe { convertibles.to_jsval(*cx, ports.handle_mut()) };
rooted!(in(*cx) let obj = ports.to_object()); rooted!(in(*cx) let obj = ports.to_object());
unsafe { JS_FreezeObject(*cx, RawHandleObject::from(obj.handle())) }; unsafe { JS_FreezeObject(*cx, RawHandleObject::from(obj.handle())) };

View file

@ -10,7 +10,7 @@ use crate::dom::bindings::reflector::reflect_dom_object;
use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString; use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::RootedTraceableBox; use crate::dom::bindings::trace::RootedTraceableBox;
use crate::dom::bindings::utils::message_ports_to_frozen_array; use crate::dom::bindings::utils::to_frozen_array;
use crate::dom::event::Event; use crate::dom::event::Event;
use crate::dom::eventtarget::EventTarget; use crate::dom::eventtarget::EventTarget;
use crate::dom::extendableevent::ExtendableEvent; use crate::dom::extendableevent::ExtendableEvent;
@ -146,6 +146,6 @@ impl ExtendableMessageEventMethods for ExtendableMessageEvent {
.iter() .iter()
.map(|port| DomRoot::from_ref(&**port)) .map(|port| DomRoot::from_ref(&**port))
.collect(); .collect();
message_ports_to_frozen_array(ports.as_slice(), cx) to_frozen_array(ports.as_slice(), cx)
} }
} }

View file

@ -13,7 +13,7 @@ use crate::dom::bindings::reflector::reflect_dom_object;
use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString; use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::RootedTraceableBox; use crate::dom::bindings::trace::RootedTraceableBox;
use crate::dom::bindings::utils::message_ports_to_frozen_array; use crate::dom::bindings::utils::to_frozen_array;
use crate::dom::event::Event; use crate::dom::event::Event;
use crate::dom::eventtarget::EventTarget; use crate::dom::eventtarget::EventTarget;
use crate::dom::globalscope::GlobalScope; use crate::dom::globalscope::GlobalScope;
@ -244,7 +244,7 @@ impl MessageEventMethods for MessageEvent {
.iter() .iter()
.map(|port| DomRoot::from_ref(&**port)) .map(|port| DomRoot::from_ref(&**port))
.collect(); .collect();
message_ports_to_frozen_array(ports.as_slice(), cx) to_frozen_array(ports.as_slice(), cx)
} }
/// <https://html.spec.whatwg.org/multipage/#dom-messageevent-initmessageevent> /// <https://html.spec.whatwg.org/multipage/#dom-messageevent-initmessageevent>