aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2023-05-28 22:43:55 -0400
committerJosh Matthews <josh@joshmatthews.net>2023-05-28 23:23:12 -0400
commitdbff26bce05d404027ef5bbfd85fb5995e4726bc (patch)
tree6ebb631eef396c2f387fe8269b0d59bde0dccae2 /components/script/dom
parentd9600ff50f3c1bdd8c44e2dfc15a18416d80cb82 (diff)
downloadservo-dbff26bce05d404027ef5bbfd85fb5995e4726bc.tar.gz
servo-dbff26bce05d404027ef5bbfd85fb5995e4726bc.zip
Support arbitrary protos when wrapping DOM objects with constructors.
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/analysernode.rs20
-rw-r--r--components/script/dom/animationevent.rs12
-rw-r--r--components/script/dom/audiobuffer.rs22
-rw-r--r--components/script/dom/audiobuffersourcenode.rs19
-rw-r--r--components/script/dom/audiocontext.rs10
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py4
-rw-r--r--components/script/dom/bindings/htmlconstructor.rs6
-rw-r--r--components/script/dom/bindings/reflector.rs4
-rw-r--r--components/script/dom/biquadfilternode.rs19
-rw-r--r--components/script/dom/blob.rs12
-rw-r--r--components/script/dom/bluetoothadvertisingevent.rs11
-rw-r--r--components/script/dom/broadcastchannel.rs12
-rw-r--r--components/script/dom/channelmergernode.rs19
-rw-r--r--components/script/dom/channelsplitternode.rs19
-rw-r--r--components/script/dom/characterdata.rs2
-rw-r--r--components/script/dom/closeevent.rs31
-rw-r--r--components/script/dom/comment.rs9
-rw-r--r--components/script/dom/compositionevent.rs32
-rw-r--r--components/script/dom/constantsourcenode.rs19
-rw-r--r--components/script/dom/create.rs29
-rw-r--r--components/script/dom/customevent.rs17
-rw-r--r--components/script/dom/document.rs53
-rw-r--r--components/script/dom/documentfragment.rs12
-rw-r--r--components/script/dom/domexception.rs7
-rw-r--r--components/script/dom/domimplementation.rs7
-rw-r--r--components/script/dom/dommatrix.rs21
-rw-r--r--components/script/dom/dommatrixreadonly.rs21
-rw-r--r--components/script/dom/domparser.rs11
-rw-r--r--components/script/dom/dompoint.rs12
-rw-r--r--components/script/dom/dompointreadonly.rs13
-rw-r--r--components/script/dom/domquad.rs20
-rw-r--r--components/script/dom/domrect.rs13
-rw-r--r--components/script/dom/domrectreadonly.rs12
-rw-r--r--components/script/dom/element.rs11
-rw-r--r--components/script/dom/errorevent.rs40
-rw-r--r--components/script/dom/event.rs24
-rw-r--r--components/script/dom/eventsource.rs10
-rw-r--r--components/script/dom/eventtarget.rs10
-rw-r--r--components/script/dom/extendableevent.rs21
-rw-r--r--components/script/dom/extendablemessageevent.rs34
-rw-r--r--components/script/dom/file.rs22
-rw-r--r--components/script/dom/filereader.rs11
-rw-r--r--components/script/dom/filereadersync.rs11
-rw-r--r--components/script/dom/focusevent.rs37
-rw-r--r--components/script/dom/formdata.rs14
-rw-r--r--components/script/dom/formdataevent.rs28
-rw-r--r--components/script/dom/gainnode.rs19
-rw-r--r--components/script/dom/gamepadevent.rs20
-rw-r--r--components/script/dom/gpuoutofmemoryerror.rs13
-rw-r--r--components/script/dom/gpuuncapturederrorevent.rs18
-rw-r--r--components/script/dom/gpuvalidationerror.rs13
-rw-r--r--components/script/dom/hashchangeevent.rs29
-rw-r--r--components/script/dom/headers.rs12
-rw-r--r--components/script/dom/htmlanchorelement.rs5
-rw-r--r--components/script/dom/htmlareaelement.rs5
-rw-r--r--components/script/dom/htmlaudioelement.rs8
-rw-r--r--components/script/dom/htmlbaseelement.rs5
-rw-r--r--components/script/dom/htmlbodyelement.rs5
-rw-r--r--components/script/dom/htmlbrelement.rs5
-rwxr-xr-xcomponents/script/dom/htmlbuttonelement.rs5
-rw-r--r--components/script/dom/htmlcanvaselement.rs6
-rw-r--r--components/script/dom/htmldataelement.rs5
-rw-r--r--components/script/dom/htmldatalistelement.rs5
-rw-r--r--components/script/dom/htmldetailselement.rs5
-rw-r--r--components/script/dom/htmldialogelement.rs5
-rw-r--r--components/script/dom/htmldirectoryelement.rs5
-rw-r--r--components/script/dom/htmldivelement.rs5
-rw-r--r--components/script/dom/htmldlistelement.rs5
-rw-r--r--components/script/dom/htmlelement.rs7
-rw-r--r--components/script/dom/htmlembedelement.rs5
-rw-r--r--components/script/dom/htmlfieldsetelement.rs5
-rw-r--r--components/script/dom/htmlfontelement.rs5
-rw-r--r--components/script/dom/htmlformelement.rs5
-rw-r--r--components/script/dom/htmlframeelement.rs5
-rw-r--r--components/script/dom/htmlframesetelement.rs5
-rw-r--r--components/script/dom/htmlheadelement.rs5
-rw-r--r--components/script/dom/htmlheadingelement.rs5
-rw-r--r--components/script/dom/htmlhrelement.rs5
-rw-r--r--components/script/dom/htmlhtmlelement.rs5
-rw-r--r--components/script/dom/htmliframeelement.rs5
-rw-r--r--components/script/dom/htmlimageelement.rs7
-rwxr-xr-xcomponents/script/dom/htmlinputelement.rs4
-rw-r--r--components/script/dom/htmllabelelement.rs5
-rw-r--r--components/script/dom/htmllegendelement.rs5
-rw-r--r--components/script/dom/htmllielement.rs5
-rw-r--r--components/script/dom/htmllinkelement.rs5
-rw-r--r--components/script/dom/htmlmapelement.rs5
-rw-r--r--components/script/dom/htmlmediaelement.rs2
-rw-r--r--components/script/dom/htmlmenuelement.rs5
-rw-r--r--components/script/dom/htmlmetaelement.rs5
-rw-r--r--components/script/dom/htmlmeterelement.rs5
-rw-r--r--components/script/dom/htmlmodelement.rs5
-rwxr-xr-xcomponents/script/dom/htmlobjectelement.rs5
-rw-r--r--components/script/dom/htmlolistelement.rs5
-rw-r--r--components/script/dom/htmloptgroupelement.rs5
-rw-r--r--components/script/dom/htmloptionelement.rs7
-rw-r--r--components/script/dom/htmloptionscollection.rs2
-rw-r--r--components/script/dom/htmloutputelement.rs5
-rw-r--r--components/script/dom/htmlparagraphelement.rs5
-rw-r--r--components/script/dom/htmlparamelement.rs5
-rw-r--r--components/script/dom/htmlpictureelement.rs5
-rw-r--r--components/script/dom/htmlpreelement.rs5
-rw-r--r--components/script/dom/htmlprogresselement.rs5
-rw-r--r--components/script/dom/htmlquoteelement.rs5
-rw-r--r--components/script/dom/htmlscriptelement.rs5
-rwxr-xr-xcomponents/script/dom/htmlselectelement.rs5
-rw-r--r--components/script/dom/htmlsourceelement.rs5
-rw-r--r--components/script/dom/htmlspanelement.rs5
-rw-r--r--components/script/dom/htmlstyleelement.rs5
-rw-r--r--components/script/dom/htmltablecaptionelement.rs5
-rw-r--r--components/script/dom/htmltablecellelement.rs5
-rw-r--r--components/script/dom/htmltablecolelement.rs5
-rw-r--r--components/script/dom/htmltableelement.rs12
-rw-r--r--components/script/dom/htmltablerowelement.rs7
-rw-r--r--components/script/dom/htmltablesectionelement.rs7
-rw-r--r--components/script/dom/htmltemplateelement.rs5
-rwxr-xr-xcomponents/script/dom/htmltextareaelement.rs5
-rw-r--r--components/script/dom/htmltimeelement.rs5
-rw-r--r--components/script/dom/htmltitleelement.rs5
-rw-r--r--components/script/dom/htmltrackelement.rs5
-rw-r--r--components/script/dom/htmlulistelement.rs5
-rw-r--r--components/script/dom/htmlunknownelement.rs5
-rw-r--r--components/script/dom/htmlvideoelement.rs5
-rw-r--r--components/script/dom/imagedata.rs21
-rw-r--r--components/script/dom/inputevent.rs11
-rw-r--r--components/script/dom/keyboardevent.rs51
-rw-r--r--components/script/dom/mediaelementaudiosourcenode.rs19
-rw-r--r--components/script/dom/mediametadata.rs12
-rw-r--r--components/script/dom/mediaquerylistevent.rs26
-rw-r--r--components/script/dom/mediastream.rs28
-rw-r--r--components/script/dom/mediastreamaudiodestinationnode.rs19
-rw-r--r--components/script/dom/mediastreamaudiosourcenode.rs19
-rw-r--r--components/script/dom/mediastreamtrackaudiosourcenode.rs19
-rw-r--r--components/script/dom/messagechannel.rs12
-rw-r--r--components/script/dom/messageevent.rs46
-rw-r--r--components/script/dom/mouseevent.rs59
-rw-r--r--components/script/dom/mutationobserver.rs10
-rw-r--r--components/script/dom/node.rs13
-rw-r--r--components/script/dom/offlineaudiocompletionevent.rs20
-rw-r--r--components/script/dom/offlineaudiocontext.rs11
-rw-r--r--components/script/dom/offscreencanvas.rs13
-rw-r--r--components/script/dom/oscillatornode.rs19
-rw-r--r--components/script/dom/pagetransitionevent.rs24
-rw-r--r--components/script/dom/pannernode.rs19
-rw-r--r--components/script/dom/performanceobserver.rs19
-rw-r--r--components/script/dom/popstateevent.rs17
-rw-r--r--components/script/dom/progressevent.rs33
-rw-r--r--components/script/dom/promiserejectionevent.rs25
-rw-r--r--components/script/dom/range.rs32
-rw-r--r--components/script/dom/request.rs16
-rw-r--r--components/script/dom/response.rs12
-rw-r--r--components/script/dom/rtcdatachannelevent.rs21
-rw-r--r--components/script/dom/rtcerror.rs13
-rw-r--r--components/script/dom/rtcerrorevent.rs20
-rw-r--r--components/script/dom/rtcicecandidate.rs21
-rw-r--r--components/script/dom/rtcpeerconnection.rs15
-rw-r--r--components/script/dom/rtcpeerconnectioniceevent.rs21
-rw-r--r--components/script/dom/rtcsessiondescription.rs11
-rw-r--r--components/script/dom/rtctrackevent.rs20
-rw-r--r--components/script/dom/servoparser/async_html.rs2
-rw-r--r--components/script/dom/servoparser/mod.rs6
-rw-r--r--components/script/dom/stereopannernode.rs19
-rw-r--r--components/script/dom/storageevent.rs43
-rw-r--r--components/script/dom/submitevent.rs20
-rw-r--r--components/script/dom/svgelement.rs5
-rw-r--r--components/script/dom/svgsvgelement.rs5
-rw-r--r--components/script/dom/testbinding.rs18
-rw-r--r--components/script/dom/testbindingiterable.rs12
-rw-r--r--components/script/dom/testbindingpairiterable.rs12
-rw-r--r--components/script/dom/testworklet.rs11
-rw-r--r--components/script/dom/text.rs11
-rw-r--r--components/script/dom/textdecoder.rs11
-rw-r--r--components/script/dom/textencoder.rs11
-rw-r--r--components/script/dom/trackevent.rs20
-rw-r--r--components/script/dom/transitionevent.rs17
-rw-r--r--components/script/dom/uievent.rs27
-rw-r--r--components/script/dom/url.rs10
-rw-r--r--components/script/dom/urlsearchparams.rs12
-rw-r--r--components/script/dom/vttcue.rs12
-rw-r--r--components/script/dom/vttregion.rs13
-rw-r--r--components/script/dom/webglcontextevent.rs23
-rw-r--r--components/script/dom/websocket.rs10
-rw-r--r--components/script/dom/wheelevent.rs41
-rw-r--r--components/script/dom/worker.rs12
-rw-r--r--components/script/dom/xmlhttprequest.rs12
-rw-r--r--components/script/dom/xmlserializer.rs11
-rw-r--r--components/script/dom/xrinputsourceevent.rs22
-rw-r--r--components/script/dom/xrinputsourceschangeevent.rs34
-rw-r--r--components/script/dom/xrlayerevent.rs10
-rw-r--r--components/script/dom/xrmediabinding.rs11
-rw-r--r--components/script/dom/xrray.rs14
-rw-r--r--components/script/dom/xrrigidtransform.rs12
-rw-r--r--components/script/dom/xrsessionevent.rs20
-rw-r--r--components/script/dom/xrwebglbinding.rs12
-rw-r--r--components/script/dom/xrwebgllayer.rs11
195 files changed, 2026 insertions, 584 deletions
diff --git a/components/script/dom/analysernode.rs b/components/script/dom/analysernode.rs
index d09dd61d9f3..ac703adcea7 100644
--- a/components/script/dom/analysernode.rs
+++ b/components/script/dom/analysernode.rs
@@ -14,14 +14,14 @@ use crate::dom::bindings::codegen::Bindings::AudioNodeBinding::{
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::num::Finite;
use crate::dom::bindings::refcounted::Trusted;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::window::Window;
use crate::task_source::TaskSource;
use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcReceiver};
use ipc_channel::router::ROUTER;
-use js::rust::CustomAutoRooterGuard;
+use js::rust::{CustomAutoRooterGuard, HandleObject};
use js::typedarray::{Float32Array, Uint8Array};
use servo_media::audio::analyser_node::AnalysisEngine;
use servo_media::audio::block::Block;
@@ -89,14 +89,23 @@ impl AnalyserNode {
))
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &BaseAudioContext,
options: &AnalyserOptions,
) -> Fallible<DomRoot<AnalyserNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ pub fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &BaseAudioContext,
+ options: &AnalyserOptions,
+ ) -> Fallible<DomRoot<AnalyserNode>> {
let (node, recv) = AnalyserNode::new_inherited(window, context, options)?;
- let object = reflect_dom_object(Box::new(node), window);
+ let object = reflect_dom_object2(Box::new(node), window, proto);
let (source, canceller) = window
.task_manager()
.dom_manipulation_task_source_with_canceller();
@@ -122,10 +131,11 @@ impl AnalyserNode {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &BaseAudioContext,
options: &AnalyserOptions,
) -> Fallible<DomRoot<AnalyserNode>> {
- AnalyserNode::new(window, context, options)
+ AnalyserNode::new_with_proto(window, proto, context, options)
}
pub fn push_block(&self, block: Block) {
diff --git a/components/script/dom/animationevent.rs b/components/script/dom/animationevent.rs
index 191b460228d..1a5179c7ebe 100644
--- a/components/script/dom/animationevent.rs
+++ b/components/script/dom/animationevent.rs
@@ -8,12 +8,13 @@ use crate::dom::bindings::codegen::Bindings::AnimationEventBinding::{
use crate::dom::bindings::codegen::Bindings::EventBinding::EventMethods;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::num::Finite;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -35,7 +36,11 @@ impl AnimationEvent {
}
pub fn new(window: &Window, type_: Atom, init: &AnimationEventInit) -> DomRoot<AnimationEvent> {
- let ev = reflect_dom_object(Box::new(AnimationEvent::new_inherited(init)), window);
+ Self::new_with_proto(window, None, type_, init)
+ }
+
+ fn new_with_proto(window: &Window, proto: Option<HandleObject>, type_: Atom, init: &AnimationEventInit) -> DomRoot<AnimationEvent> {
+ let ev = reflect_dom_object2(Box::new(AnimationEvent::new_inherited(init)), window, proto);
{
let event = ev.upcast::<Event>();
event.init_event(type_, init.parent.bubbles, init.parent.cancelable);
@@ -46,10 +51,11 @@ impl AnimationEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &AnimationEventInit,
) -> DomRoot<AnimationEvent> {
- AnimationEvent::new(window, Atom::from(type_), init)
+ AnimationEvent::new_with_proto(window, proto, Atom::from(type_), init)
}
}
diff --git a/components/script/dom/audiobuffer.rs b/components/script/dom/audiobuffer.rs
index 268424d1c4b..9d1e011066a 100644
--- a/components/script/dom/audiobuffer.rs
+++ b/components/script/dom/audiobuffer.rs
@@ -9,7 +9,7 @@ use crate::dom::bindings::codegen::Bindings::AudioBufferBinding::{
};
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::num::Finite;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
@@ -20,6 +20,7 @@ use js::jsapi::JS_GetArrayBufferViewBuffer;
use js::jsapi::{Heap, JSObject};
use js::rust::wrappers::DetachArrayBuffer;
use js::rust::CustomAutoRooterGuard;
+use js::rust::HandleObject;
use js::typedarray::{CreateWith, Float32Array};
use servo_media::audio::buffer_source_node::AudioBuffer as ServoMediaAudioBuffer;
use std::cmp::min;
@@ -76,7 +77,6 @@ impl AudioBuffer {
}
}
- #[allow(unrooted_must_root)]
pub fn new(
global: &Window,
number_of_channels: u32,
@@ -84,8 +84,20 @@ impl AudioBuffer {
sample_rate: f32,
initial_data: Option<&[Vec<f32>]>,
) -> DomRoot<AudioBuffer> {
+ Self::new_with_proto(global, None, number_of_channels, length, sample_rate, initial_data)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ global: &Window,
+ proto: Option<HandleObject>,
+ number_of_channels: u32,
+ length: u32,
+ sample_rate: f32,
+ initial_data: Option<&[Vec<f32>]>,
+ ) -> DomRoot<AudioBuffer> {
let buffer = AudioBuffer::new_inherited(number_of_channels, length, sample_rate);
- let buffer = reflect_dom_object(Box::new(buffer), global);
+ let buffer = reflect_dom_object2(Box::new(buffer), global, proto);
buffer.set_initial_data(initial_data);
buffer
}
@@ -94,6 +106,7 @@ impl AudioBuffer {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
options: &AudioBufferOptions,
) -> Fallible<DomRoot<AudioBuffer>> {
if options.length <= 0 ||
@@ -104,8 +117,9 @@ impl AudioBuffer {
{
return Err(Error::NotSupported);
}
- Ok(AudioBuffer::new(
+ Ok(AudioBuffer::new_with_proto(
window,
+ proto,
options.numberOfChannels,
options.length,
*options.sampleRate,
diff --git a/components/script/dom/audiobuffersourcenode.rs b/components/script/dom/audiobuffersourcenode.rs
index 683f32f4ec0..affbe4797fe 100644
--- a/components/script/dom/audiobuffersourcenode.rs
+++ b/components/script/dom/audiobuffersourcenode.rs
@@ -13,10 +13,11 @@ use crate::dom::bindings::codegen::Bindings::AudioScheduledSourceNodeBinding::Au
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::num::Finite;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot, MutNullableDom};
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::buffer_source_node::AudioBufferSourceNodeMessage;
use servo_media::audio::buffer_source_node::AudioBufferSourceNodeOptions;
use servo_media::audio::node::{AudioNodeInit, AudioNodeMessage};
@@ -92,23 +93,33 @@ impl AudioBufferSourceNode {
Ok(node)
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &BaseAudioContext,
options: &AudioBufferSourceOptions,
) -> Fallible<DomRoot<AudioBufferSourceNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &BaseAudioContext,
+ options: &AudioBufferSourceOptions,
+ ) -> Fallible<DomRoot<AudioBufferSourceNode>> {
let node = AudioBufferSourceNode::new_inherited(window, context, options)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &BaseAudioContext,
options: &AudioBufferSourceOptions,
) -> Fallible<DomRoot<AudioBufferSourceNode>> {
- AudioBufferSourceNode::new(window, context, options)
+ AudioBufferSourceNode::new_with_proto(window, proto, context, options)
}
}
diff --git a/components/script/dom/audiocontext.rs b/components/script/dom/audiocontext.rs
index 4f0d10285fa..1dac9a00cf6 100644
--- a/components/script/dom/audiocontext.rs
+++ b/components/script/dom/audiocontext.rs
@@ -17,7 +17,7 @@ use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::num::Finite;
use crate::dom::bindings::refcounted::{Trusted, TrustedPromise};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::DomRoot;
use crate::dom::htmlmediaelement::HTMLMediaElement;
use crate::dom::mediaelementaudiosourcenode::MediaElementAudioSourceNode;
@@ -31,6 +31,7 @@ use crate::dom::window::Window;
use crate::realms::InRealm;
use crate::task_source::TaskSource;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use msg::constellation_msg::PipelineId;
use servo_media::audio::context::{LatencyCategory, ProcessingState, RealTimeAudioContextOptions};
use std::rc::Rc;
@@ -79,10 +80,10 @@ impl AudioContext {
}
#[allow(unrooted_must_root)]
- pub fn new(window: &Window, options: &AudioContextOptions) -> DomRoot<AudioContext> {
+ fn new(window: &Window, proto: Option<HandleObject>, options: &AudioContextOptions) -> DomRoot<AudioContext> {
let pipeline_id = window.pipeline_id();
let context = AudioContext::new_inherited(options, pipeline_id);
- let context = reflect_dom_object(Box::new(context), window);
+ let context = reflect_dom_object2(Box::new(context), window, proto);
context.resume();
context
}
@@ -91,9 +92,10 @@ impl AudioContext {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
options: &AudioContextOptions,
) -> Fallible<DomRoot<AudioContext>> {
- Ok(AudioContext::new(window, options))
+ Ok(AudioContext::new(window, proto, options))
}
fn resume(&self) {
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 5ed330083b9..b0f89c6a1d3 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -6147,9 +6147,7 @@ let global = DomRoot::downcast::<dom::types::%s>(global).unwrap();
else:
name = self.constructor.identifier.name
nativeName = MakeNativeName(self.descriptor.binaryNameFor(name))
- args = ["&global"]
- if self.descriptor.interface.identifier.name == "EventTarget":
- args += ["desired_proto.handle()"]
+ args = ["&global", "Some(desired_proto.handle())"]
constructorCall = CGMethodCall(args, nativeName, True,
self.descriptor, self.constructor)
return CGList([preamble, constructorCall])
diff --git a/components/script/dom/bindings/htmlconstructor.rs b/components/script/dom/bindings/htmlconstructor.rs
index 76d717ff4b7..5d74f153c8b 100644
--- a/components/script/dom/bindings/htmlconstructor.rs
+++ b/components/script/dom/bindings/htmlconstructor.rs
@@ -225,10 +225,12 @@ unsafe fn html_constructor(
None => {
// Step 8.1
let name = QualName::new(None, ns!(html), definition.local_name.clone());
+ // Any prototype used to create these elements will be overwritten before returning
+ // from this function, so we don't bother overwriting the defaults here.
let element = if definition.is_autonomous() {
- DomRoot::upcast(HTMLElement::new(name.local, None, &*document))
+ DomRoot::upcast(HTMLElement::new(name.local, None, &*document, None))
} else {
- create_native_html_element(name, None, &*document, ElementCreator::ScriptCreated)
+ create_native_html_element(name, None, &*document, ElementCreator::ScriptCreated, None)
};
// Step 8.2 is performed in the generated caller code.
diff --git a/components/script/dom/bindings/reflector.rs b/components/script/dom/bindings/reflector.rs
index 32c3d7645e1..418cad032e3 100644
--- a/components/script/dom/bindings/reflector.rs
+++ b/components/script/dom/bindings/reflector.rs
@@ -26,13 +26,13 @@ where
unsafe { T::WRAP(GlobalScope::get_cx(), global_scope, None, obj) }
}
-pub fn reflect_dom_object2<T, U>(obj: Box<T>, global: &U, proto: HandleObject) -> DomRoot<T>
+pub fn reflect_dom_object2<T, U>(obj: Box<T>, global: &U, proto: Option<HandleObject>) -> DomRoot<T>
where
T: DomObject + DomObjectWrap,
U: DerivedFrom<GlobalScope>,
{
let global_scope = global.upcast();
- unsafe { T::WRAP(GlobalScope::get_cx(), global_scope, Some(proto), obj) }
+ unsafe { T::WRAP(GlobalScope::get_cx(), global_scope, proto, obj) }
}
/// A struct to store a reference to the reflector of a DOM object.
diff --git a/components/script/dom/biquadfilternode.rs b/components/script/dom/biquadfilternode.rs
index 540f094bfe5..6359383d2ac 100644
--- a/components/script/dom/biquadfilternode.rs
+++ b/components/script/dom/biquadfilternode.rs
@@ -13,10 +13,11 @@ use crate::dom::bindings::codegen::Bindings::BiquadFilterNodeBinding::BiquadFilt
use crate::dom::bindings::codegen::Bindings::BiquadFilterNodeBinding::BiquadFilterOptions;
use crate::dom::bindings::codegen::Bindings::BiquadFilterNodeBinding::BiquadFilterType;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::biquad_filter_node::BiquadFilterNodeMessage;
use servo_media::audio::biquad_filter_node::{BiquadFilterNodeOptions, FilterType};
use servo_media::audio::node::{AudioNodeInit, AudioNodeMessage};
@@ -104,23 +105,33 @@ impl BiquadFilterNode {
})
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &BaseAudioContext,
options: &BiquadFilterOptions,
) -> Fallible<DomRoot<BiquadFilterNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &BaseAudioContext,
+ options: &BiquadFilterOptions,
+ ) -> Fallible<DomRoot<BiquadFilterNode>> {
let node = BiquadFilterNode::new_inherited(window, context, options)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &BaseAudioContext,
options: &BiquadFilterOptions,
) -> Fallible<DomRoot<BiquadFilterNode>> {
- BiquadFilterNode::new(window, context, options)
+ BiquadFilterNode::new_with_proto(window, proto, context, options)
}
}
diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs
index 4cc0149d008..fe0bd2647a4 100644
--- a/components/script/dom/blob.rs
+++ b/components/script/dom/blob.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::BlobBinding;
use crate::dom::bindings::codegen::Bindings::BlobBinding::BlobMethods;
use crate::dom::bindings::codegen::UnionTypes::ArrayBufferOrArrayBufferViewOrBlobOrString;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::serializable::{Serializable, StorageKey};
use crate::dom::bindings::str::DOMString;
@@ -20,6 +20,7 @@ use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use encoding_rs::UTF_8;
use js::jsapi::JSObject;
+use js::rust::HandleObject;
use msg::constellation_msg::{BlobId, BlobIndex, PipelineNamespaceId};
use net_traits::filemanager_thread::RelativePos;
use script_traits::serializable::BlobImpl;
@@ -38,7 +39,11 @@ pub struct Blob {
impl Blob {
pub fn new(global: &GlobalScope, blob_impl: BlobImpl) -> DomRoot<Blob> {
- let dom_blob = reflect_dom_object(Box::new(Blob::new_inherited(&blob_impl)), global);
+ Self::new_with_proto(global, None, blob_impl)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>, blob_impl: BlobImpl) -> DomRoot<Blob> {
+ let dom_blob = reflect_dom_object2(Box::new(Blob::new_inherited(&blob_impl)), global, proto);
global.track_blob(&dom_blob, blob_impl);
dom_blob
}
@@ -55,6 +60,7 @@ impl Blob {
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
blobParts: Option<Vec<ArrayBufferOrArrayBufferViewOrBlobOrString>>,
blobPropertyBag: &BlobBinding::BlobPropertyBag,
) -> Fallible<DomRoot<Blob>> {
@@ -69,7 +75,7 @@ impl Blob {
let type_string = normalize_type_string(&blobPropertyBag.type_.to_string());
let blob_impl = BlobImpl::new_from_bytes(bytes, type_string);
- Ok(Blob::new(global, blob_impl))
+ Ok(Blob::new_with_proto(global, proto, blob_impl))
}
/// Get a slice to inner data, this might incur synchronous read and caching
diff --git a/components/script/dom/bluetoothadvertisingevent.rs b/components/script/dom/bluetoothadvertisingevent.rs
index 7d31fad2dc7..0110b898222 100644
--- a/components/script/dom/bluetoothadvertisingevent.rs
+++ b/components/script/dom/bluetoothadvertisingevent.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::BluetoothAdvertisingEventBinding::B
use crate::dom::bindings::codegen::Bindings::EventBinding::EventBinding::EventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::bluetoothdevice::BluetoothDevice;
@@ -15,6 +15,7 @@ use crate::dom::event::{Event, EventBubbles, EventCancelable};
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothadvertisingevent
@@ -47,8 +48,9 @@ impl BluetoothAdvertisingEvent {
}
}
- pub fn new(
+ fn new(
global: &GlobalScope,
+ proto: Option<HandleObject>,
type_: Atom,
bubbles: EventBubbles,
cancelable: EventCancelable,
@@ -58,11 +60,12 @@ impl BluetoothAdvertisingEvent {
txPower: Option<i8>,
rssi: Option<i8>,
) -> DomRoot<BluetoothAdvertisingEvent> {
- let ev = reflect_dom_object(
+ let ev = reflect_dom_object2(
Box::new(BluetoothAdvertisingEvent::new_inherited(
device, name, appearance, txPower, rssi,
)),
global,
+ proto,
);
{
let event = ev.upcast::<Event>();
@@ -74,6 +77,7 @@ impl BluetoothAdvertisingEvent {
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothadvertisingevent-bluetoothadvertisingevent
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &BluetoothAdvertisingEventInit,
) -> Fallible<DomRoot<BluetoothAdvertisingEvent>> {
@@ -86,6 +90,7 @@ impl BluetoothAdvertisingEvent {
let cancelable = EventCancelable::from(init.parent.cancelable);
Ok(BluetoothAdvertisingEvent::new(
global,
+ proto,
Atom::from(type_),
bubbles,
cancelable,
diff --git a/components/script/dom/broadcastchannel.rs b/components/script/dom/broadcastchannel.rs
index 701f71b27cd..57aa572e652 100644
--- a/components/script/dom/broadcastchannel.rs
+++ b/components/script/dom/broadcastchannel.rs
@@ -4,7 +4,7 @@
use crate::dom::bindings::codegen::Bindings::BroadcastChannelBinding::BroadcastChannelMethods;
use crate::dom::bindings::error::{Error, ErrorResult};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::structuredclone;
@@ -12,7 +12,7 @@ use crate::dom::eventtarget::EventTarget;
use crate::dom::globalscope::GlobalScope;
use crate::script_runtime::JSContext as SafeJSContext;
use dom_struct::dom_struct;
-use js::rust::HandleValue;
+use js::rust::{HandleValue, HandleObject};
use script_traits::BroadcastMsg;
use std::cell::Cell;
use uuid::Uuid;
@@ -28,12 +28,12 @@ pub struct BroadcastChannel {
impl BroadcastChannel {
/// <https://html.spec.whatwg.org/multipage/#broadcastchannel>
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope, name: DOMString) -> DomRoot<BroadcastChannel> {
- BroadcastChannel::new(global, name)
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>, name: DOMString) -> DomRoot<BroadcastChannel> {
+ BroadcastChannel::new(global, proto, name)
}
- pub fn new(global: &GlobalScope, name: DOMString) -> DomRoot<BroadcastChannel> {
- let channel = reflect_dom_object(Box::new(BroadcastChannel::new_inherited(name)), global);
+ fn new(global: &GlobalScope, proto: Option<HandleObject>, name: DOMString) -> DomRoot<BroadcastChannel> {
+ let channel = reflect_dom_object2(Box::new(BroadcastChannel::new_inherited(name)), global, proto);
global.track_broadcast_channel(&*channel);
channel
}
diff --git a/components/script/dom/channelmergernode.rs b/components/script/dom/channelmergernode.rs
index 7e8bccd885e..e57543019f6 100644
--- a/components/script/dom/channelmergernode.rs
+++ b/components/script/dom/channelmergernode.rs
@@ -9,10 +9,11 @@ use crate::dom::bindings::codegen::Bindings::AudioNodeBinding::{
};
use crate::dom::bindings::codegen::Bindings::ChannelMergerNodeBinding::ChannelMergerOptions;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::channel_node::ChannelNodeOptions;
use servo_media::audio::node::AudioNodeInit;
@@ -52,23 +53,33 @@ impl ChannelMergerNode {
Ok(ChannelMergerNode { node })
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &BaseAudioContext,
options: &ChannelMergerOptions,
) -> Fallible<DomRoot<ChannelMergerNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &BaseAudioContext,
+ options: &ChannelMergerOptions,
+ ) -> Fallible<DomRoot<ChannelMergerNode>> {
let node = ChannelMergerNode::new_inherited(window, context, options)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &BaseAudioContext,
options: &ChannelMergerOptions,
) -> Fallible<DomRoot<ChannelMergerNode>> {
- ChannelMergerNode::new(window, context, options)
+ ChannelMergerNode::new_with_proto(window, proto, context, options)
}
}
diff --git a/components/script/dom/channelsplitternode.rs b/components/script/dom/channelsplitternode.rs
index 3efd3b2465c..ca9477be9fa 100644
--- a/components/script/dom/channelsplitternode.rs
+++ b/components/script/dom/channelsplitternode.rs
@@ -9,10 +9,11 @@ use crate::dom::bindings::codegen::Bindings::AudioNodeBinding::{
};
use crate::dom::bindings::codegen::Bindings::ChannelSplitterNodeBinding::ChannelSplitterOptions;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::node::AudioNodeInit;
#[dom_struct]
@@ -54,22 +55,32 @@ impl ChannelSplitterNode {
Ok(ChannelSplitterNode { node })
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &BaseAudioContext,
options: &ChannelSplitterOptions,
) -> Fallible<DomRoot<ChannelSplitterNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &BaseAudioContext,
+ options: &ChannelSplitterOptions,
+ ) -> Fallible<DomRoot<ChannelSplitterNode>> {
let node = ChannelSplitterNode::new_inherited(window, context, options)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &BaseAudioContext,
options: &ChannelSplitterOptions,
) -> Fallible<DomRoot<ChannelSplitterNode>> {
- ChannelSplitterNode::new(window, context, options)
+ ChannelSplitterNode::new_with_proto(window, proto, context, options)
}
}
diff --git a/components/script/dom/characterdata.rs b/components/script/dom/characterdata.rs
index f8c5acb5a8f..cbaa847e8ee 100644
--- a/components/script/dom/characterdata.rs
+++ b/components/script/dom/characterdata.rs
@@ -43,7 +43,7 @@ impl CharacterData {
pub fn clone_with_data(&self, data: DOMString, document: &Document) -> DomRoot<Node> {
match self.upcast::<Node>().type_id() {
NodeTypeId::CharacterData(CharacterDataTypeId::Comment) => {
- DomRoot::upcast(Comment::new(data, &document))
+ DomRoot::upcast(Comment::new(data, &document, None))
},
NodeTypeId::CharacterData(CharacterDataTypeId::ProcessingInstruction) => {
let pi = self.downcast::<ProcessingInstruction>().unwrap();
diff --git a/components/script/dom/closeevent.rs b/components/script/dom/closeevent.rs
index abc579d8df9..81bf60c99af 100644
--- a/components/script/dom/closeevent.rs
+++ b/components/script/dom/closeevent.rs
@@ -7,12 +7,13 @@ use crate::dom::bindings::codegen::Bindings::CloseEventBinding::CloseEventMethod
use crate::dom::bindings::codegen::Bindings::EventBinding::EventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::{Event, EventBubbles, EventCancelable};
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -43,8 +44,30 @@ impl CloseEvent {
code: u16,
reason: DOMString,
) -> DomRoot<CloseEvent> {
+ Self::new_with_proto(
+ global,
+ None,
+ type_,
+ bubbles,
+ cancelable,
+ wasClean,
+ code,
+ reason,
+ )
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: EventBubbles,
+ cancelable: EventCancelable,
+ wasClean: bool,
+ code: u16,
+ reason: DOMString,
+ ) -> DomRoot<CloseEvent> {
let event = Box::new(CloseEvent::new_inherited(wasClean, code, reason));
- let ev = reflect_dom_object(event, global);
+ let ev = reflect_dom_object2(event, global, proto);
{
let event = ev.upcast::<Event>();
event.init_event(type_, bool::from(bubbles), bool::from(cancelable));
@@ -54,13 +77,15 @@ impl CloseEvent {
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &CloseEventBinding::CloseEventInit,
) -> Fallible<DomRoot<CloseEvent>> {
let bubbles = EventBubbles::from(init.parent.bubbles);
let cancelable = EventCancelable::from(init.parent.cancelable);
- Ok(CloseEvent::new(
+ Ok(CloseEvent::new_with_proto(
global,
+ proto,
Atom::from(type_),
bubbles,
cancelable,
diff --git a/components/script/dom/comment.rs b/components/script/dom/comment.rs
index d87f4d77094..96df242a5df 100644
--- a/components/script/dom/comment.rs
+++ b/components/script/dom/comment.rs
@@ -11,6 +11,7 @@ use crate::dom::document::Document;
use crate::dom::node::Node;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
/// An HTML comment.
#[dom_struct]
@@ -25,13 +26,13 @@ impl Comment {
}
}
- pub fn new(text: DOMString, document: &Document) -> DomRoot<Comment> {
- Node::reflect_node(Box::new(Comment::new_inherited(text, document)), document)
+ pub fn new(text: DOMString, document: &Document, proto: Option<HandleObject>) -> DomRoot<Comment> {
+ Node::reflect_node_with_proto(Box::new(Comment::new_inherited(text, document)), document, proto)
}
#[allow(non_snake_case)]
- pub fn Constructor(window: &Window, data: DOMString) -> Fallible<DomRoot<Comment>> {
+ pub fn Constructor(window: &Window, proto: Option<HandleObject>, data: DOMString) -> Fallible<DomRoot<Comment>> {
let document = window.Document();
- Ok(Comment::new(data, &document))
+ Ok(Comment::new(data, &document, proto))
}
}
diff --git a/components/script/dom/compositionevent.rs b/components/script/dom/compositionevent.rs
index 1cdc1cd8dcc..58c31c6e215 100644
--- a/components/script/dom/compositionevent.rs
+++ b/components/script/dom/compositionevent.rs
@@ -7,12 +7,13 @@ use crate::dom::bindings::codegen::Bindings::CompositionEventBinding::{
};
use crate::dom::bindings::codegen::Bindings::UIEventBinding::UIEventBinding::UIEventMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::{reflect_dom_object, reflect_dom_object2};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::uievent::UIEvent;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct CompositionEvent {
@@ -41,12 +42,35 @@ impl CompositionEvent {
detail: i32,
data: DOMString,
) -> DomRoot<CompositionEvent> {
- let ev = reflect_dom_object(
+ Self::new_with_proto(
+ window,
+ None,
+ type_,
+ can_bubble,
+ cancelable,
+ view,
+ detail,
+ data,
+ )
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: DOMString,
+ can_bubble: bool,
+ cancelable: bool,
+ view: Option<&Window>,
+ detail: i32,
+ data: DOMString,
+ ) -> DomRoot<CompositionEvent> {
+ let ev = reflect_dom_object2(
Box::new(CompositionEvent {
uievent: UIEvent::new_inherited(),
data: data,
}),
window,
+ proto,
);
ev.uievent
.InitUIEvent(type_, can_bubble, cancelable, view, detail);
@@ -56,11 +80,13 @@ impl CompositionEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &CompositionEventBinding::CompositionEventInit,
) -> Fallible<DomRoot<CompositionEvent>> {
- let event = CompositionEvent::new(
+ let event = CompositionEvent::new_with_proto(
window,
+ proto,
type_,
init.parent.parent.bubbles,
init.parent.parent.cancelable,
diff --git a/components/script/dom/constantsourcenode.rs b/components/script/dom/constantsourcenode.rs
index 90851da88c2..be1125bb283 100644
--- a/components/script/dom/constantsourcenode.rs
+++ b/components/script/dom/constantsourcenode.rs
@@ -9,10 +9,11 @@ use crate::dom::bindings::codegen::Bindings::AudioParamBinding::AutomationRate;
use crate::dom::bindings::codegen::Bindings::ConstantSourceNodeBinding::ConstantSourceNodeMethods;
use crate::dom::bindings::codegen::Bindings::ConstantSourceNodeBinding::ConstantSourceOptions;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::constant_source_node::ConstantSourceNodeOptions as ServoMediaConstantSourceOptions;
use servo_media::audio::node::AudioNodeInit;
use servo_media::audio::param::ParamType;
@@ -57,23 +58,33 @@ impl ConstantSourceNode {
})
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &BaseAudioContext,
options: &ConstantSourceOptions,
) -> Fallible<DomRoot<ConstantSourceNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &BaseAudioContext,
+ options: &ConstantSourceOptions,
+ ) -> Fallible<DomRoot<ConstantSourceNode>> {
let node = ConstantSourceNode::new_inherited(window, context, options)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &BaseAudioContext,
options: &ConstantSourceOptions,
) -> Fallible<DomRoot<ConstantSourceNode>> {
- ConstantSourceNode::new(window, context, options)
+ ConstantSourceNode::new_with_proto(window, proto, context, options)
}
}
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs
index 1a4815d1179..087148cb037 100644
--- a/components/script/dom/create.rs
+++ b/components/script/dom/create.rs
@@ -85,28 +85,30 @@ use crate::dom::svgsvgelement::SVGSVGElement;
use crate::realms::{enter_realm, InRealm};
use crate::script_thread::ScriptThread;
use html5ever::{LocalName, Prefix, QualName};
+use js::rust::HandleObject;
use servo_config::pref;
fn create_svg_element(
name: QualName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<Element> {
assert_eq!(name.ns, ns!(svg));
macro_rules! make(
($ctor:ident) => ({
- let obj = $ctor::new(name.local, prefix, document);
+ let obj = $ctor::new(name.local, prefix, document, proto);
DomRoot::upcast(obj)
});
($ctor:ident, $($arg:expr),+) => ({
- let obj = $ctor::new(name.local, prefix, document, $($arg),+);
+ let obj = $ctor::new(name.local, prefix, document, proto, $($arg),+);
DomRoot::upcast(obj)
})
);
if !pref!(dom.svg.enabled) {
- return Element::new(name.local, name.ns, prefix, document);
+ return Element::new(name.local, name.ns, prefix, document, proto);
}
match name.local {
@@ -124,6 +126,7 @@ fn create_html_element(
document: &Document,
creator: ElementCreator,
mode: CustomElementCreationMode,
+ proto: Option<HandleObject>,
) -> DomRoot<Element> {
assert_eq!(name.ns, ns!(html));
@@ -138,6 +141,7 @@ fn create_html_element(
name.local.clone(),
prefix.clone(),
document,
+ proto,
));
result.set_custom_element_state(CustomElementState::Undefined);
ScriptThread::enqueue_upgrade_reaction(&*result, definition);
@@ -145,6 +149,7 @@ fn create_html_element(
},
CustomElementCreationMode::Synchronous => {
let local_name = name.local.clone();
+ //TODO(jdm) Pass proto to create_element?
return match definition.create_element(document, prefix.clone()) {
Ok(element) => {
element.set_custom_element_definition(definition.clone());
@@ -165,7 +170,7 @@ fn create_html_element(
// Step 6.1.2
let element = DomRoot::upcast::<Element>(HTMLUnknownElement::new(
- local_name, prefix, document,
+ local_name, prefix, document, proto,
));
element.set_custom_element_state(CustomElementState::Failed);
element
@@ -175,7 +180,7 @@ fn create_html_element(
}
} else {
// Steps 5.1-5.2
- let element = create_native_html_element(name, prefix, document, creator);
+ let element = create_native_html_element(name, prefix, document, creator, proto);
element.set_is(definition.name.clone());
element.set_custom_element_state(CustomElementState::Undefined);
match mode {
@@ -191,7 +196,7 @@ fn create_html_element(
}
// Steps 7.1-7.3
- let result = create_native_html_element(name.clone(), prefix, document, creator);
+ let result = create_native_html_element(name.clone(), prefix, document, creator, proto);
match is {
Some(is) => {
result.set_is(is);
@@ -215,16 +220,17 @@ pub fn create_native_html_element(
prefix: Option<Prefix>,
document: &Document,
creator: ElementCreator,
+ proto: Option<HandleObject>,
) -> DomRoot<Element> {
assert_eq!(name.ns, ns!(html));
macro_rules! make(
($ctor:ident) => ({
- let obj = $ctor::new(name.local, prefix, document);
+ let obj = $ctor::new(name.local, prefix, document, proto);
DomRoot::upcast(obj)
});
($ctor:ident, $($arg:expr),+) => ({
- let obj = $ctor::new(name.local, prefix, document, $($arg),+);
+ let obj = $ctor::new(name.local, prefix, document, proto, $($arg),+);
DomRoot::upcast(obj)
})
);
@@ -386,11 +392,12 @@ pub fn create_element(
document: &Document,
creator: ElementCreator,
mode: CustomElementCreationMode,
+ proto: Option<HandleObject>,
) -> DomRoot<Element> {
let prefix = name.prefix.clone();
match name.ns {
- ns!(html) => create_html_element(name, prefix, is, document, creator, mode),
- ns!(svg) => create_svg_element(name, prefix, document),
- _ => Element::new(name.local, name.ns, prefix, document),
+ ns!(html) => create_html_element(name, prefix, is, document, creator, mode, proto),
+ ns!(svg) => create_svg_element(name, prefix, document, proto),
+ _ => Element::new(name.local, name.ns, prefix, document, proto),
}
}
diff --git a/components/script/dom/customevent.rs b/components/script/dom/customevent.rs
index 7dadacee375..c3f6afd26a8 100644
--- a/components/script/dom/customevent.rs
+++ b/components/script/dom/customevent.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::CustomEventBinding::CustomEventMeth
use crate::dom::bindings::codegen::Bindings::EventBinding::EventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::RootedTraceableBox;
@@ -17,6 +17,7 @@ use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use js::jsapi::Heap;
use js::jsval::JSVal;
+use js::rust::HandleObject;
use js::rust::HandleValue;
use servo_atoms::Atom;
@@ -37,16 +38,22 @@ impl CustomEvent {
}
pub fn new_uninitialized(global: &GlobalScope) -> DomRoot<CustomEvent> {
- reflect_dom_object(Box::new(CustomEvent::new_inherited()), global)
+ Self::new_uninitialized_with_proto(global, None)
}
- pub fn new(
+
+ fn new_uninitialized_with_proto(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<CustomEvent> {
+ reflect_dom_object2(Box::new(CustomEvent::new_inherited()), global, proto)
+ }
+
+ fn new(
global: &GlobalScope,
+ proto: Option<HandleObject>,
type_: Atom,
bubbles: bool,
cancelable: bool,
detail: HandleValue,
) -> DomRoot<CustomEvent> {
- let ev = CustomEvent::new_uninitialized(global);
+ let ev = CustomEvent::new_uninitialized_with_proto(global, proto);
ev.init_custom_event(type_, bubbles, cancelable, detail);
ev
}
@@ -54,11 +61,13 @@ impl CustomEvent {
#[allow(unsafe_code, non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
type_: DOMString,
init: RootedTraceableBox<CustomEventBinding::CustomEventInit>,
) -> Fallible<DomRoot<CustomEvent>> {
Ok(CustomEvent::new(
global,
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index cb2d43dd62c..4e8d1283c4d 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -31,7 +31,7 @@ use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::{Castable, ElementTypeId, HTMLElementTypeId, NodeTypeId};
use crate::dom::bindings::num::Finite;
use crate::dom::bindings::refcounted::{Trusted, TrustedPromise};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot, DomSlice, LayoutDom, MutNullableDom};
use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::bindings::xmlname::XMLName::InvalidXMLName;
@@ -123,6 +123,7 @@ use html5ever::{LocalName, Namespace, QualName};
use hyper_serde::Serde;
use ipc_channel::ipc::{self, IpcSender};
use js::jsapi::JSObject;
+use js::rust::HandleObject;
use keyboard_types::{Code, Key, KeyState};
use metrics::{
InteractiveFlag, InteractiveMetrics, InteractiveWindow, ProfilerMetadataFactory,
@@ -3248,11 +3249,12 @@ impl Document {
// https://dom.spec.whatwg.org/#dom-document-document
#[allow(non_snake_case)]
- pub fn Constructor(window: &Window) -> Fallible<DomRoot<Document>> {
+ pub fn Constructor(window: &Window, proto: Option<HandleObject>) -> Fallible<DomRoot<Document>> {
let doc = window.Document();
let docloader = DocumentLoader::new(&*doc.loader());
- Ok(Document::new(
+ Ok(Document::new_with_proto(
window,
+ proto,
HasBrowsingContext::No,
None,
doc.origin().clone(),
@@ -3283,7 +3285,41 @@ impl Document {
referrer_policy: Option<ReferrerPolicy>,
canceller: FetchCanceller,
) -> DomRoot<Document> {
- let document = reflect_dom_object(
+ Self::new_with_proto(
+ window,
+ None,
+ has_browsing_context,
+ url,
+ origin,
+ doctype,
+ content_type,
+ last_modified,
+ activity,
+ source,
+ doc_loader,
+ referrer,
+ referrer_policy,
+ canceller,
+ )
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ has_browsing_context: HasBrowsingContext,
+ url: Option<ServoUrl>,
+ origin: MutableOrigin,
+ doctype: IsHTMLDocument,
+ content_type: Option<Mime>,
+ last_modified: Option<String>,
+ activity: DocumentActivity,
+ source: DocumentSource,
+ doc_loader: DocumentLoader,
+ referrer: Option<String>,
+ referrer_policy: Option<ReferrerPolicy>,
+ canceller: FetchCanceller,
+ ) -> DomRoot<Document> {
+ let document = reflect_dom_object2(
Box::new(Document::new_inherited(
window,
has_browsing_context,
@@ -3300,6 +3336,7 @@ impl Document {
canceller,
)),
window,
+ proto,
);
{
let node = document.upcast::<Node>();
@@ -4143,6 +4180,7 @@ impl DocumentMethods for Document {
self,
ElementCreator::ScriptCreated,
CustomElementCreationMode::Synchronous,
+ None,
))
}
@@ -4167,6 +4205,7 @@ impl DocumentMethods for Document {
self,
ElementCreator::ScriptCreated,
CustomElementCreationMode::Synchronous,
+ None,
))
}
@@ -4241,7 +4280,7 @@ impl DocumentMethods for Document {
// https://dom.spec.whatwg.org/#dom-document-createcomment
fn CreateComment(&self, data: DOMString) -> DomRoot<Comment> {
- Comment::new(data, self)
+ Comment::new(data, self, None)
}
// https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction
@@ -4361,7 +4400,7 @@ impl DocumentMethods for Document {
// https://dom.spec.whatwg.org/#dom-document-createrange
fn CreateRange(&self) -> DomRoot<Range> {
- Range::new_with_doc(self)
+ Range::new_with_doc(self, None)
}
// https://dom.spec.whatwg.org/#dom-document-createnodeiteratorroot-whattoshow-filter
@@ -4434,6 +4473,7 @@ impl DocumentMethods for Document {
self,
ElementCreator::ScriptCreated,
CustomElementCreationMode::Synchronous,
+ None,
);
let parent = root.upcast::<Node>();
let child = elem.upcast::<Node>();
@@ -4458,6 +4498,7 @@ impl DocumentMethods for Document {
self,
ElementCreator::ScriptCreated,
CustomElementCreationMode::Synchronous,
+ None,
);
head.upcast::<Node>().AppendChild(elem.upcast()).unwrap()
},
diff --git a/components/script/dom/documentfragment.rs b/components/script/dom/documentfragment.rs
index ac87a9a786e..716f3dabcb5 100644
--- a/components/script/dom/documentfragment.rs
+++ b/components/script/dom/documentfragment.rs
@@ -17,6 +17,7 @@ use crate::dom::node::{window_from_node, Node};
use crate::dom::nodelist::NodeList;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
use std::collections::HashMap;
@@ -38,17 +39,22 @@ impl DocumentFragment {
}
pub fn new(document: &Document) -> DomRoot<DocumentFragment> {
- Node::reflect_node(
+ Self::new_with_proto(document, None)
+ }
+
+ fn new_with_proto(document: &Document, proto: Option<HandleObject>) -> DomRoot<DocumentFragment> {
+ Node::reflect_node_with_proto(
Box::new(DocumentFragment::new_inherited(document)),
document,
+ proto,
)
}
#[allow(non_snake_case)]
- pub fn Constructor(window: &Window) -> Fallible<DomRoot<DocumentFragment>> {
+ pub fn Constructor(window: &Window, proto: Option<HandleObject>) -> Fallible<DomRoot<DocumentFragment>> {
let document = window.Document();
- Ok(DocumentFragment::new(&document))
+ Ok(DocumentFragment::new_with_proto(&document, proto))
}
pub fn id_map(&self) -> &DomRefCell<HashMap<Atom, Vec<Dom<Element>>>> {
diff --git a/components/script/dom/domexception.rs b/components/script/dom/domexception.rs
index c2533cd7932..6252837b66c 100644
--- a/components/script/dom/domexception.rs
+++ b/components/script/dom/domexception.rs
@@ -5,11 +5,12 @@
use crate::dom::bindings::codegen::Bindings::DOMExceptionBinding::DOMExceptionConstants;
use crate::dom::bindings::codegen::Bindings::DOMExceptionBinding::DOMExceptionMethods;
use crate::dom::bindings::error::Error;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object, reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[repr(u16)]
#[derive(Clone, Copy, Debug, Eq, JSTraceable, MallocSizeOf, Ord, PartialEq, PartialOrd)]
@@ -139,12 +140,14 @@ impl DOMException {
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
message: DOMString,
name: DOMString,
) -> Result<DomRoot<DOMException>, Error> {
- Ok(reflect_dom_object(
+ Ok(reflect_dom_object2(
Box::new(DOMException::new_inherited(message, name)),
global,
+ proto,
))
}
diff --git a/components/script/dom/domimplementation.rs b/components/script/dom/domimplementation.rs
index d5a3f07bde2..31d1d116959 100644
--- a/components/script/dom/domimplementation.rs
+++ b/components/script/dom/domimplementation.rs
@@ -168,13 +168,13 @@ impl DOMImplementationMethods for DOMImplementation {
// Step 4.
let doc_node = doc.upcast::<Node>();
let doc_html =
- DomRoot::upcast::<Node>(HTMLHtmlElement::new(local_name!("html"), None, &doc));
+ DomRoot::upcast::<Node>(HTMLHtmlElement::new(local_name!("html"), None, &doc, None));
doc_node.AppendChild(&doc_html).expect("Appending failed");
{
// Step 5.
let doc_head =
- DomRoot::upcast::<Node>(HTMLHeadElement::new(local_name!("head"), None, &doc));
+ DomRoot::upcast::<Node>(HTMLHeadElement::new(local_name!("head"), None, &doc, None));
doc_html.AppendChild(&doc_head).unwrap();
// Step 6.
@@ -184,6 +184,7 @@ impl DOMImplementationMethods for DOMImplementation {
local_name!("title"),
None,
&doc,
+ None,
));
doc_head.AppendChild(&doc_title).unwrap();
@@ -194,7 +195,7 @@ impl DOMImplementationMethods for DOMImplementation {
}
// Step 7.
- let doc_body = HTMLBodyElement::new(local_name!("body"), None, &doc);
+ let doc_body = HTMLBodyElement::new(local_name!("body"), None, &doc, None);
doc_html.AppendChild(doc_body.upcast()).unwrap();
}
diff --git a/components/script/dom/dommatrix.rs b/components/script/dom/dommatrix.rs
index c5520c7d6a7..2cbc9aa011c 100644
--- a/components/script/dom/dommatrix.rs
+++ b/components/script/dom/dommatrix.rs
@@ -8,7 +8,7 @@ use crate::dom::bindings::codegen::UnionTypes::StringOrUnrestrictedDoubleSequenc
use crate::dom::bindings::error;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::dommatrixreadonly::{
dommatrixinit_to_matrix, entries_to_matrix, transform_to_matrix, DOMMatrixReadOnly,
@@ -17,7 +17,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use dom_struct::dom_struct;
use euclid::default::Transform3D;
-use js::rust::CustomAutoRooterGuard;
+use js::rust::{CustomAutoRooterGuard, HandleObject};
use js::typedarray::{Float32Array, Float64Array};
#[dom_struct]
@@ -27,10 +27,14 @@ pub struct DOMMatrix {
#[allow(non_snake_case)]
impl DOMMatrix {
- #[allow(unrooted_must_root)]
pub fn new(global: &GlobalScope, is2D: bool, matrix: Transform3D<f64>) -> DomRoot<Self> {
+ Self::new_with_proto(global, None, is2D, matrix)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>, is2D: bool, matrix: Transform3D<f64>) -> DomRoot<Self> {
let dommatrix = Self::new_inherited(is2D, matrix);
- reflect_dom_object(Box::new(dommatrix), global)
+ reflect_dom_object2(Box::new(dommatrix), global, proto)
}
pub fn new_inherited(is2D: bool, matrix: Transform3D<f64>) -> Self {
@@ -42,10 +46,11 @@ impl DOMMatrix {
// https://drafts.fxtf.org/geometry-1/#dom-dommatrixreadonly-dommatrixreadonly
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
init: Option<StringOrUnrestrictedDoubleSequence>,
) -> Fallible<DomRoot<Self>> {
if init.is_none() {
- return Ok(Self::new(global, true, Transform3D::identity()));
+ return Ok(Self::new_with_proto(global, proto, true, Transform3D::identity()));
}
match init.unwrap() {
StringOrUnrestrictedDoubleSequence::String(ref s) => {
@@ -58,11 +63,11 @@ impl DOMMatrix {
return Ok(Self::new(global, true, Transform3D::identity()));
}
transform_to_matrix(s.to_string())
- .map(|(is2D, matrix)| Self::new(global, is2D, matrix))
+ .map(|(is2D, matrix)| Self::new_with_proto(global, proto, is2D, matrix))
},
StringOrUnrestrictedDoubleSequence::UnrestrictedDoubleSequence(ref entries) => {
entries_to_matrix(&entries[..])
- .map(|(is2D, matrix)| Self::new(global, is2D, matrix))
+ .map(|(is2D, matrix)| Self::new_with_proto(global, proto, is2D, matrix))
},
}
}
@@ -84,6 +89,7 @@ impl DOMMatrix {
let vec: Vec<f64> = array.to_vec().iter().map(|&x| x as f64).collect();
DOMMatrix::Constructor(
global,
+ None,
Some(StringOrUnrestrictedDoubleSequence::UnrestrictedDoubleSequence(vec)),
)
}
@@ -96,6 +102,7 @@ impl DOMMatrix {
let vec: Vec<f64> = array.to_vec();
DOMMatrix::Constructor(
global,
+ None,
Some(StringOrUnrestrictedDoubleSequence::UnrestrictedDoubleSequence(vec)),
)
}
diff --git a/components/script/dom/dommatrixreadonly.rs b/components/script/dom/dommatrixreadonly.rs
index 84ef18fd8fc..dd78a3935ae 100644
--- a/components/script/dom/dommatrixreadonly.rs
+++ b/components/script/dom/dommatrixreadonly.rs
@@ -10,7 +10,7 @@ use crate::dom::bindings::codegen::UnionTypes::StringOrUnrestrictedDoubleSequenc
use crate::dom::bindings::error;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::dommatrix::DOMMatrix;
use crate::dom::dompoint::DOMPoint;
@@ -21,7 +21,7 @@ use cssparser::{Parser, ParserInput};
use dom_struct::dom_struct;
use euclid::{default::Transform3D, Angle};
use js::jsapi::JSObject;
-use js::rust::CustomAutoRooterGuard;
+use js::rust::{CustomAutoRooterGuard, HandleObject};
use js::typedarray::CreateWith;
use js::typedarray::{Float32Array, Float64Array};
use std::cell::Cell;
@@ -40,10 +40,14 @@ pub struct DOMMatrixReadOnly {
#[allow(non_snake_case)]
impl DOMMatrixReadOnly {
- #[allow(unrooted_must_root)]
pub fn new(global: &GlobalScope, is2D: bool, matrix: Transform3D<f64>) -> DomRoot<Self> {
+ Self::new_with_proto(global, None, is2D, matrix)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>, is2D: bool, matrix: Transform3D<f64>) -> DomRoot<Self> {
let dommatrix = Self::new_inherited(is2D, matrix);
- reflect_dom_object(Box::new(dommatrix), global)
+ reflect_dom_object2(Box::new(dommatrix), global, proto)
}
pub fn new_inherited(is2D: bool, matrix: Transform3D<f64>) -> Self {
@@ -57,10 +61,11 @@ impl DOMMatrixReadOnly {
// https://drafts.fxtf.org/geometry-1/#dom-dommatrixreadonly-dommatrixreadonly
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
init: Option<StringOrUnrestrictedDoubleSequence>,
) -> Fallible<DomRoot<Self>> {
if init.is_none() {
- return Ok(Self::new(global, true, Transform3D::identity()));
+ return Ok(Self::new_with_proto(global, proto, true, Transform3D::identity()));
}
match init.unwrap() {
StringOrUnrestrictedDoubleSequence::String(ref s) => {
@@ -73,11 +78,11 @@ impl DOMMatrixReadOnly {
return Ok(Self::new(global, true, Transform3D::identity()));
}
transform_to_matrix(s.to_string())
- .map(|(is2D, matrix)| Self::new(global, is2D, matrix))
+ .map(|(is2D, matrix)| Self::new_with_proto(global, proto, is2D, matrix))
},
StringOrUnrestrictedDoubleSequence::UnrestrictedDoubleSequence(ref entries) => {
entries_to_matrix(&entries[..])
- .map(|(is2D, matrix)| Self::new(global, is2D, matrix))
+ .map(|(is2D, matrix)| Self::new_with_proto(global, proto, is2D, matrix))
},
}
}
@@ -392,6 +397,7 @@ impl DOMMatrixReadOnly {
let vec: Vec<f64> = array.to_vec().iter().map(|&x| x as f64).collect();
DOMMatrixReadOnly::Constructor(
global,
+ None,
Some(StringOrUnrestrictedDoubleSequence::UnrestrictedDoubleSequence(vec)),
)
}
@@ -405,6 +411,7 @@ impl DOMMatrixReadOnly {
let vec: Vec<f64> = array.to_vec();
DOMMatrixReadOnly::Constructor(
global,
+ None,
Some(StringOrUnrestrictedDoubleSequence::UnrestrictedDoubleSequence(vec)),
)
}
diff --git a/components/script/dom/domparser.rs b/components/script/dom/domparser.rs
index 876d87eef25..6e08fb10c4f 100644
--- a/components/script/dom/domparser.rs
+++ b/components/script/dom/domparser.rs
@@ -12,7 +12,7 @@ use crate::dom::bindings::codegen::Bindings::DOMParserBinding::SupportedType::Te
use crate::dom::bindings::codegen::Bindings::DocumentBinding::DocumentReadyState;
use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::document::DocumentSource;
@@ -20,6 +20,7 @@ use crate::dom::document::{Document, HasBrowsingContext, IsHTMLDocument};
use crate::dom::servoparser::ServoParser;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use script_traits::DocumentActivity;
#[dom_struct]
@@ -36,13 +37,13 @@ impl DOMParser {
}
}
- pub fn new(window: &Window) -> DomRoot<DOMParser> {
- reflect_dom_object(Box::new(DOMParser::new_inherited(window)), window)
+ fn new(window: &Window, proto: Option<HandleObject>) -> DomRoot<DOMParser> {
+ reflect_dom_object2(Box::new(DOMParser::new_inherited(window)), window, proto)
}
#[allow(non_snake_case)]
- pub fn Constructor(window: &Window) -> Fallible<DomRoot<DOMParser>> {
- Ok(DOMParser::new(window))
+ pub fn Constructor(window: &Window, proto: Option<HandleObject>) -> Fallible<DomRoot<DOMParser>> {
+ Ok(DOMParser::new(window, proto))
}
}
diff --git a/components/script/dom/dompoint.rs b/components/script/dom/dompoint.rs
index fe523b8e766..2e580d57457 100644
--- a/components/script/dom/dompoint.rs
+++ b/components/script/dom/dompoint.rs
@@ -5,11 +5,12 @@
use crate::dom::bindings::codegen::Bindings::DOMPointBinding::{DOMPointInit, DOMPointMethods};
use crate::dom::bindings::codegen::Bindings::DOMPointReadOnlyBinding::DOMPointReadOnlyMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::dompointreadonly::{DOMPointReadOnly, DOMPointWriteMethods};
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
// http://dev.w3.org/fxtf/geometry/Overview.html#dompoint
#[dom_struct]
@@ -26,17 +27,22 @@ impl DOMPoint {
}
pub fn new(global: &GlobalScope, x: f64, y: f64, z: f64, w: f64) -> DomRoot<DOMPoint> {
- reflect_dom_object(Box::new(DOMPoint::new_inherited(x, y, z, w)), global)
+ Self::new_with_proto(global, None, x, y, z, w)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>, x: f64, y: f64, z: f64, w: f64) -> DomRoot<DOMPoint> {
+ reflect_dom_object2(Box::new(DOMPoint::new_inherited(x, y, z, w)), global, proto)
}
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
x: f64,
y: f64,
z: f64,
w: f64,
) -> Fallible<DomRoot<DOMPoint>> {
- Ok(DOMPoint::new(global, x, y, z, w))
+ Ok(DOMPoint::new_with_proto(global, proto, x, y, z, w))
}
// https://drafts.fxtf.org/geometry/#dom-dompoint-frompoint
diff --git a/components/script/dom/dompointreadonly.rs b/components/script/dom/dompointreadonly.rs
index 9d093db2b81..453642c0a00 100644
--- a/components/script/dom/dompointreadonly.rs
+++ b/components/script/dom/dompointreadonly.rs
@@ -5,10 +5,11 @@
use crate::dom::bindings::codegen::Bindings::DOMPointBinding::DOMPointInit;
use crate::dom::bindings::codegen::Bindings::DOMPointReadOnlyBinding::DOMPointReadOnlyMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use std::cell::Cell;
// http://dev.w3.org/fxtf/geometry/Overview.html#dompointreadonly
@@ -34,20 +35,26 @@ impl DOMPointReadOnly {
}
pub fn new(global: &GlobalScope, x: f64, y: f64, z: f64, w: f64) -> DomRoot<DOMPointReadOnly> {
- reflect_dom_object(
+ Self::new_with_proto(global, None, x, y, z, w)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>, x: f64, y: f64, z: f64, w: f64) -> DomRoot<DOMPointReadOnly> {
+ reflect_dom_object2(
Box::new(DOMPointReadOnly::new_inherited(x, y, z, w)),
global,
+ proto,
)
}
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
x: f64,
y: f64,
z: f64,
w: f64,
) -> Fallible<DomRoot<DOMPointReadOnly>> {
- Ok(DOMPointReadOnly::new(global, x, y, z, w))
+ Ok(DOMPointReadOnly::new_with_proto(global, proto, x, y, z, w))
}
// https://drafts.fxtf.org/geometry/#dom-dompointreadonly-frompoint
diff --git a/components/script/dom/domquad.rs b/components/script/dom/domquad.rs
index e6decd7e1b2..775dbf7321f 100644
--- a/components/script/dom/domquad.rs
+++ b/components/script/dom/domquad.rs
@@ -6,12 +6,13 @@ use crate::dom::bindings::codegen::Bindings::DOMPointBinding::{DOMPointInit, DOM
use crate::dom::bindings::codegen::Bindings::DOMQuadBinding::{DOMQuadInit, DOMQuadMethods};
use crate::dom::bindings::codegen::Bindings::DOMRectReadOnlyBinding::DOMRectInit;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::dompoint::DOMPoint;
use crate::dom::domrect::DOMRect;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
// https://drafts.fxtf.org/geometry/#DOMQuad
#[dom_struct]
@@ -42,18 +43,31 @@ impl DOMQuad {
p3: &DOMPoint,
p4: &DOMPoint,
) -> DomRoot<DOMQuad> {
- reflect_dom_object(Box::new(DOMQuad::new_inherited(p1, p2, p3, p4)), global)
+ Self::new_with_proto(global, None, p1, p2, p3, p4)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ p1: &DOMPoint,
+ p2: &DOMPoint,
+ p3: &DOMPoint,
+ p4: &DOMPoint,
+ ) -> DomRoot<DOMQuad> {
+ reflect_dom_object2(Box::new(DOMQuad::new_inherited(p1, p2, p3, p4)), global, proto)
}
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
p1: &DOMPointInit,
p2: &DOMPointInit,
p3: &DOMPointInit,
p4: &DOMPointInit,
) -> Fallible<DomRoot<DOMQuad>> {
- Ok(DOMQuad::new(
+ Ok(DOMQuad::new_with_proto(
global,
+ proto,
&*DOMPoint::new_from_init(global, p1),
&*DOMPoint::new_from_init(global, p2),
&*DOMPoint::new_from_init(global, p3),
diff --git a/components/script/dom/domrect.rs b/components/script/dom/domrect.rs
index d925176f96d..8ab7daa2b57 100644
--- a/components/script/dom/domrect.rs
+++ b/components/script/dom/domrect.rs
@@ -5,11 +5,12 @@
use crate::dom::bindings::codegen::Bindings::DOMRectBinding::DOMRectMethods;
use crate::dom::bindings::codegen::Bindings::DOMRectReadOnlyBinding::DOMRectReadOnlyMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::domrectreadonly::DOMRectReadOnly;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct DOMRect {
@@ -24,21 +25,27 @@ impl DOMRect {
}
pub fn new(global: &GlobalScope, x: f64, y: f64, width: f64, height: f64) -> DomRoot<DOMRect> {
- reflect_dom_object(
+ Self::new_with_proto(global, None, x, y, width, height)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>, x: f64, y: f64, width: f64, height: f64) -> DomRoot<DOMRect> {
+ reflect_dom_object2(
Box::new(DOMRect::new_inherited(x, y, width, height)),
global,
+ proto,
)
}
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
x: f64,
y: f64,
width: f64,
height: f64,
) -> Fallible<DomRoot<DOMRect>> {
- Ok(DOMRect::new(global, x, y, width, height))
+ Ok(DOMRect::new_with_proto(global, proto, x, y, width, height))
}
}
diff --git a/components/script/dom/domrectreadonly.rs b/components/script/dom/domrectreadonly.rs
index 49eed59ac58..80bb793857d 100644
--- a/components/script/dom/domrectreadonly.rs
+++ b/components/script/dom/domrectreadonly.rs
@@ -4,10 +4,11 @@
use crate::dom::bindings::codegen::Bindings::DOMRectReadOnlyBinding::DOMRectReadOnlyMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use std::cell::Cell;
#[dom_struct]
@@ -30,28 +31,31 @@ impl DOMRectReadOnly {
}
}
- pub fn new(
+ fn new(
global: &GlobalScope,
+ proto: Option<HandleObject>,
x: f64,
y: f64,
width: f64,
height: f64,
) -> DomRoot<DOMRectReadOnly> {
- reflect_dom_object(
+ reflect_dom_object2(
Box::new(DOMRectReadOnly::new_inherited(x, y, width, height)),
global,
+ proto,
)
}
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
x: f64,
y: f64,
width: f64,
height: f64,
) -> Fallible<DomRoot<DOMRectReadOnly>> {
- Ok(DOMRectReadOnly::new(global, x, y, width, height))
+ Ok(DOMRectReadOnly::new(global, proto, x, y, width, height))
}
pub fn set_x(&self, value: f64) {
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 1ceec50281d..dc4b4096469 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -95,6 +95,7 @@ use html5ever::serialize::TraversalScope::{ChildrenOnly, IncludeNode};
use html5ever::{LocalName, Namespace, Prefix, QualName};
use js::jsapi::Heap;
use js::jsval::JSVal;
+use js::rust::HandleObject;
use msg::constellation_msg::InputMethodType;
use net_traits::request::CorsSettings;
use net_traits::ReferrerPolicy;
@@ -241,8 +242,9 @@ impl Element {
document: &Document,
creator: ElementCreator,
mode: CustomElementCreationMode,
+ proto: Option<HandleObject>,
) -> DomRoot<Element> {
- create_element(name, is, document, creator, mode)
+ create_element(name, is, document, creator, mode, proto)
}
pub fn new_inherited(
@@ -290,12 +292,14 @@ impl Element {
namespace: Namespace,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<Element> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(Element::new_inherited(
local_name, namespace, prefix, document,
)),
document,
+ proto,
)
}
@@ -1817,7 +1821,7 @@ impl Element {
{
DomRoot::from_ref(elem)
},
- _ => DomRoot::upcast(HTMLBodyElement::new(local_name!("body"), None, owner_doc)),
+ _ => DomRoot::upcast(HTMLBodyElement::new(local_name!("body"), None, owner_doc, None)),
}
}
@@ -2588,6 +2592,7 @@ impl ElementMethods for Element {
&context_document,
ElementCreator::ScriptCreated,
CustomElementCreationMode::Synchronous,
+ None,
);
DomRoot::upcast(body_elem)
},
diff --git a/components/script/dom/errorevent.rs b/components/script/dom/errorevent.rs
index 129f96dc910..cee89cae434 100644
--- a/components/script/dom/errorevent.rs
+++ b/components/script/dom/errorevent.rs
@@ -8,7 +8,7 @@ use crate::dom::bindings::codegen::Bindings::ErrorEventBinding::ErrorEventMethod
use crate::dom::bindings::codegen::Bindings::EventBinding::EventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::RootedTraceableBox;
@@ -18,7 +18,7 @@ use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use js::jsapi::Heap;
use js::jsval::JSVal;
-use js::rust::HandleValue;
+use js::rust::{HandleObject, HandleValue};
use servo_atoms::Atom;
use std::cell::Cell;
@@ -45,8 +45,8 @@ impl ErrorEvent {
}
}
- pub fn new_uninitialized(global: &GlobalScope) -> DomRoot<ErrorEvent> {
- reflect_dom_object(Box::new(ErrorEvent::new_inherited()), global)
+ fn new_uninitialized(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<ErrorEvent> {
+ reflect_dom_object2(Box::new(ErrorEvent::new_inherited()), global, proto)
}
pub fn new(
@@ -60,7 +60,33 @@ impl ErrorEvent {
colno: u32,
error: HandleValue,
) -> DomRoot<ErrorEvent> {
- let ev = ErrorEvent::new_uninitialized(global);
+ Self::new_with_proto(
+ global,
+ None,
+ type_,
+ bubbles,
+ cancelable,
+ message,
+ filename,
+ lineno,
+ colno,
+ error,
+ )
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: EventBubbles,
+ cancelable: EventCancelable,
+ message: DOMString,
+ filename: DOMString,
+ lineno: u32,
+ colno: u32,
+ error: HandleValue,
+ ) -> DomRoot<ErrorEvent> {
+ let ev = ErrorEvent::new_uninitialized(global, proto);
{
let event = ev.upcast::<Event>();
event.init_event(type_, bool::from(bubbles), bool::from(cancelable));
@@ -76,6 +102,7 @@ impl ErrorEvent {
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
type_: DOMString,
init: RootedTraceableBox<ErrorEventBinding::ErrorEventInit>,
) -> Fallible<DomRoot<ErrorEvent>> {
@@ -97,8 +124,9 @@ impl ErrorEvent {
let cancelable = EventCancelable::from(init.parent.cancelable);
- let event = ErrorEvent::new(
+ let event = ErrorEvent::new_with_proto(
global,
+ proto,
Atom::from(type_),
bubbles,
cancelable,
diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs
index 8093bd852a9..205bf58e37e 100644
--- a/components/script/dom/event.rs
+++ b/components/script/dom/event.rs
@@ -12,7 +12,7 @@ use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::refcounted::Trusted;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::DOMString;
use crate::dom::document::Document;
@@ -28,6 +28,7 @@ use crate::dom::window::Window;
use crate::task::TaskOnce;
use devtools_traits::{TimelineMarker, TimelineMarkerType};
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use metrics::ToMs;
use servo_atoms::Atom;
use std::cell::Cell;
@@ -72,7 +73,11 @@ impl Event {
}
pub fn new_uninitialized(global: &GlobalScope) -> DomRoot<Event> {
- reflect_dom_object(Box::new(Event::new_inherited()), global)
+ Self::new_uninitialized_with_proto(global, None)
+ }
+
+ pub fn new_uninitialized_with_proto(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<Event> {
+ reflect_dom_object2(Box::new(Event::new_inherited()), global, proto)
}
pub fn new(
@@ -81,7 +86,17 @@ impl Event {
bubbles: EventBubbles,
cancelable: EventCancelable,
) -> DomRoot<Event> {
- let event = Event::new_uninitialized(global);
+ Self::new_with_proto(global, None, type_, bubbles, cancelable)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: EventBubbles,
+ cancelable: EventCancelable,
+ ) -> DomRoot<Event> {
+ let event = Event::new_uninitialized_with_proto(global, proto);
event.init_event(type_, bool::from(bubbles), bool::from(cancelable));
event
}
@@ -89,12 +104,13 @@ impl Event {
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &EventBinding::EventInit,
) -> Fallible<DomRoot<Event>> {
let bubbles = EventBubbles::from(init.bubbles);
let cancelable = EventCancelable::from(init.cancelable);
- Ok(Event::new(global, Atom::from(type_), bubbles, cancelable))
+ Ok(Event::new_with_proto(global, proto, Atom::from(type_), bubbles, cancelable))
}
pub fn init_event(&self, type_: Atom, bubbles: bool, cancelable: bool) {
diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs
index 9be9962378e..7897c5b79fd 100644
--- a/components/script/dom/eventsource.rs
+++ b/components/script/dom/eventsource.rs
@@ -9,7 +9,7 @@ use crate::dom::bindings::codegen::Bindings::EventSourceBinding::{
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::refcounted::Trusted;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -30,6 +30,7 @@ use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
use js::conversions::ToJSValConvertible;
use js::jsval::UndefinedValue;
+use js::rust::HandleObject;
use mime::{self, Mime};
use net_traits::request::{CacheMode, CorsSettings, Destination, RequestBuilder};
use net_traits::{CoreResourceMsg, FetchChannels, FetchMetadata, FilteredMetadata};
@@ -459,10 +460,11 @@ impl EventSource {
}
}
- fn new(global: &GlobalScope, url: ServoUrl, with_credentials: bool) -> DomRoot<EventSource> {
- reflect_dom_object(
+ fn new(global: &GlobalScope, proto: Option<HandleObject>, url: ServoUrl, with_credentials: bool) -> DomRoot<EventSource> {
+ reflect_dom_object2(
Box::new(EventSource::new_inherited(url, with_credentials)),
global,
+ proto,
)
}
@@ -501,6 +503,7 @@ impl EventSource {
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
url: DOMString,
event_source_init: &EventSourceInit,
) -> Fallible<DomRoot<EventSource>> {
@@ -515,6 +518,7 @@ impl EventSource {
// Step 1, 5
let ev = EventSource::new(
global,
+ proto,
url_record.clone(),
event_source_init.withCredentials,
);
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs
index dd0079c47dd..861e113f6ed 100644
--- a/components/script/dom/eventtarget.rs
+++ b/components/script/dom/eventtarget.rs
@@ -21,7 +21,7 @@ use crate::dom::bindings::codegen::UnionTypes::EventListenerOptionsOrBoolean;
use crate::dom::bindings::codegen::UnionTypes::EventOrString;
use crate::dom::bindings::error::{report_pending_exception, Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, reflect_dom_object2, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::element::Element;
@@ -355,13 +355,13 @@ impl EventTarget {
}
}
- fn new(global: &GlobalScope) -> DomRoot<EventTarget> {
- reflect_dom_object(Box::new(EventTarget::new_inherited()), global)
+ fn new(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<EventTarget> {
+ reflect_dom_object2(Box::new(EventTarget::new_inherited()), global, proto)
}
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope, proto: HandleObject) -> Fallible<DomRoot<EventTarget>> {
- Ok(reflect_dom_object2(Box::new(EventTarget::new_inherited()), global, proto))
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>) -> Fallible<DomRoot<EventTarget>> {
+ Ok(EventTarget::new(global, proto))
}
pub fn has_listeners_for(&self, type_: &Atom) -> bool {
diff --git a/components/script/dom/extendableevent.rs b/components/script/dom/extendableevent.rs
index deb2dce4dfa..a19190ebd03 100644
--- a/components/script/dom/extendableevent.rs
+++ b/components/script/dom/extendableevent.rs
@@ -6,14 +6,14 @@ use crate::dom::bindings::codegen::Bindings::EventBinding::{self, EventMethods};
use crate::dom::bindings::codegen::Bindings::ExtendableEventBinding;
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
use crate::dom::serviceworkerglobalscope::ServiceWorkerGlobalScope;
use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
-use js::rust::HandleValue;
+use js::rust::{HandleObject, HandleValue};
use servo_atoms::Atom;
// https://w3c.github.io/ServiceWorker/#extendable-event
@@ -31,13 +31,24 @@ impl ExtendableEvent {
extensions_allowed: true,
}
}
+
pub fn new(
worker: &ServiceWorkerGlobalScope,
type_: Atom,
bubbles: bool,
cancelable: bool,
) -> DomRoot<ExtendableEvent> {
- let ev = reflect_dom_object(Box::new(ExtendableEvent::new_inherited()), worker);
+ Self::new_with_proto(worker, None, type_, bubbles, cancelable)
+ }
+
+ fn new_with_proto(
+ worker: &ServiceWorkerGlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ ) -> DomRoot<ExtendableEvent> {
+ let ev = reflect_dom_object2(Box::new(ExtendableEvent::new_inherited()), worker, proto);
{
let event = ev.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@@ -47,11 +58,13 @@ impl ExtendableEvent {
pub fn Constructor(
worker: &ServiceWorkerGlobalScope,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &ExtendableEventBinding::ExtendableEventInit,
) -> Fallible<DomRoot<ExtendableEvent>> {
- Ok(ExtendableEvent::new(
+ Ok(ExtendableEvent::new_with_proto(
worker,
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/extendablemessageevent.rs b/components/script/dom/extendablemessageevent.rs
index 19bca33c6ca..2d22e00be94 100644
--- a/components/script/dom/extendablemessageevent.rs
+++ b/components/script/dom/extendablemessageevent.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::ExtendableMessageEventBinding;
use crate::dom::bindings::codegen::Bindings::ExtendableMessageEventBinding::ExtendableMessageEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::RootedTraceableBox;
@@ -22,7 +22,7 @@ use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use js::jsapi::Heap;
use js::jsval::JSVal;
-use js::rust::HandleValue;
+use js::rust::{HandleObject, HandleValue};
use servo_atoms::Atom;
#[dom_struct]
@@ -73,12 +73,36 @@ impl ExtendableMessageEvent {
lastEventId: DOMString,
ports: Vec<DomRoot<MessagePort>>,
) -> DomRoot<ExtendableMessageEvent> {
+ Self::new_with_proto(
+ global,
+ None,
+ type_,
+ bubbles,
+ cancelable,
+ data,
+ origin,
+ lastEventId,
+ ports,
+ )
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ data: HandleValue,
+ origin: DOMString,
+ lastEventId: DOMString,
+ ports: Vec<DomRoot<MessagePort>>,
+ ) -> DomRoot<ExtendableMessageEvent> {
let ev = Box::new(ExtendableMessageEvent::new_inherited(
origin,
lastEventId,
ports,
));
- let ev = reflect_dom_object(ev, global);
+ let ev = reflect_dom_object2(ev, global, proto);
{
let event = ev.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@@ -90,12 +114,14 @@ impl ExtendableMessageEvent {
pub fn Constructor(
worker: &ServiceWorkerGlobalScope,
+ proto: Option<HandleObject>,
type_: DOMString,
init: RootedTraceableBox<ExtendableMessageEventBinding::ExtendableMessageEventInit>,
) -> Fallible<DomRoot<ExtendableMessageEvent>> {
let global = worker.upcast::<GlobalScope>();
- let ev = ExtendableMessageEvent::new(
+ let ev = ExtendableMessageEvent::new_with_proto(
global,
+ proto,
Atom::from(type_),
init.parent.parent.bubbles,
init.parent.parent.cancelable,
diff --git a/components/script/dom/file.rs b/components/script/dom/file.rs
index cbbc16bd264..946677d5b35 100644
--- a/components/script/dom/file.rs
+++ b/components/script/dom/file.rs
@@ -7,13 +7,14 @@ use crate::dom::bindings::codegen::Bindings::FileBinding::FileMethods;
use crate::dom::bindings::codegen::UnionTypes::ArrayBufferOrArrayBufferViewOrBlobOrString;
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::blob::{blob_parts_to_bytes, normalize_type_string, Blob};
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use net_traits::filemanager_thread::SelectedFile;
use script_traits::serializable::BlobImpl;
@@ -41,16 +42,27 @@ impl File {
}
}
- #[allow(unrooted_must_root)]
pub fn new(
global: &GlobalScope,
blob_impl: BlobImpl,
name: DOMString,
modified: Option<i64>,
) -> DomRoot<File> {
- let file = reflect_dom_object(
+ Self::new_with_proto(global, None, blob_impl, name, modified)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ blob_impl: BlobImpl,
+ name: DOMString,
+ modified: Option<i64>,
+ ) -> DomRoot<File> {
+ let file = reflect_dom_object2(
Box::new(File::new_inherited(&blob_impl, name, modified)),
global,
+ proto,
);
global.track_file(&file, blob_impl);
file
@@ -82,6 +94,7 @@ impl File {
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
fileBits: Vec<ArrayBufferOrArrayBufferViewOrBlobOrString>,
filename: DOMString,
filePropertyBag: &FileBinding::FilePropertyBag,
@@ -98,8 +111,9 @@ impl File {
// see https://github.com/w3c/FileAPI/issues/41
let replaced_filename = DOMString::from_string(filename.replace("/", ":"));
let type_string = normalize_type_string(&blobPropertyBag.type_.to_string());
- Ok(File::new(
+ Ok(File::new_with_proto(
global,
+ proto,
BlobImpl::new_from_bytes(bytes, type_string),
replaced_filename,
modified,
diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs
index 2e56f48079c..bc5024cb1fa 100644
--- a/components/script/dom/filereader.rs
+++ b/components/script/dom/filereader.rs
@@ -11,7 +11,7 @@ use crate::dom::bindings::codegen::UnionTypes::StringOrObject;
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::refcounted::Trusted;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::RootedTraceableBox;
@@ -31,6 +31,7 @@ use encoding_rs::{Encoding, UTF_8};
use js::jsapi::Heap;
use js::jsapi::JSObject;
use js::jsval::{self, JSVal};
+use js::rust::HandleObject;
use js::typedarray::{ArrayBuffer, CreateWith};
use mime::{self, Mime};
use servo_atoms::Atom;
@@ -151,13 +152,13 @@ impl FileReader {
}
}
- pub fn new(global: &GlobalScope) -> DomRoot<FileReader> {
- reflect_dom_object(Box::new(FileReader::new_inherited()), global)
+ fn new(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<FileReader> {
+ reflect_dom_object2(Box::new(FileReader::new_inherited()), global, proto)
}
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope) -> Fallible<DomRoot<FileReader>> {
- Ok(FileReader::new(global))
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>) -> Fallible<DomRoot<FileReader>> {
+ Ok(FileReader::new(global, proto))
}
//https://w3c.github.io/FileAPI/#dfn-error-steps
diff --git a/components/script/dom/filereadersync.rs b/components/script/dom/filereadersync.rs
index 044cb48c27d..0f74ed504bd 100644
--- a/components/script/dom/filereadersync.rs
+++ b/components/script/dom/filereadersync.rs
@@ -5,7 +5,7 @@
use crate::dom::bindings::codegen::Bindings::BlobBinding::BlobMethods;
use crate::dom::bindings::codegen::Bindings::FileReaderSyncBinding::FileReaderSyncMethods;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::blob::Blob;
@@ -14,6 +14,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use js::jsapi::JSObject;
+use js::rust::HandleObject;
use js::typedarray::{ArrayBuffer, CreateWith};
use std::ptr;
use std::ptr::NonNull;
@@ -30,13 +31,13 @@ impl FileReaderSync {
}
}
- pub fn new(global: &GlobalScope) -> DomRoot<FileReaderSync> {
- reflect_dom_object(Box::new(FileReaderSync::new_inherited()), global)
+ fn new(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<FileReaderSync> {
+ reflect_dom_object2(Box::new(FileReaderSync::new_inherited()), global, proto)
}
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope) -> Fallible<DomRoot<FileReaderSync>> {
- Ok(FileReaderSync::new(global))
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>) -> Fallible<DomRoot<FileReaderSync>> {
+ Ok(FileReaderSync::new(global, proto))
}
fn get_blob_bytes(blob: &Blob) -> Result<Vec<u8>, Error> {
diff --git a/components/script/dom/focusevent.rs b/components/script/dom/focusevent.rs
index 2d983bcc881..76d546a541e 100644
--- a/components/script/dom/focusevent.rs
+++ b/components/script/dom/focusevent.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::FocusEventBinding::FocusEventMethod
use crate::dom::bindings::codegen::Bindings::UIEventBinding::UIEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::{EventBubbles, EventCancelable};
@@ -15,6 +15,7 @@ use crate::dom::eventtarget::EventTarget;
use crate::dom::uievent::UIEvent;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use std::default::Default;
#[dom_struct]
@@ -32,7 +33,11 @@ impl FocusEvent {
}
pub fn new_uninitialized(window: &Window) -> DomRoot<FocusEvent> {
- reflect_dom_object(Box::new(FocusEvent::new_inherited()), window)
+ Self::new_uninitialized_with_proto(window, None)
+ }
+
+ pub fn new_uninitialized_with_proto(window: &Window, proto: Option<HandleObject>) -> DomRoot<FocusEvent> {
+ reflect_dom_object2(Box::new(FocusEvent::new_inherited()), window, proto)
}
pub fn new(
@@ -44,7 +49,29 @@ impl FocusEvent {
detail: i32,
related_target: Option<&EventTarget>,
) -> DomRoot<FocusEvent> {
- let ev = FocusEvent::new_uninitialized(window);
+ Self::new_with_proto(
+ window,
+ None,
+ type_,
+ can_bubble,
+ cancelable,
+ view,
+ detail,
+ related_target,
+ )
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: DOMString,
+ can_bubble: EventBubbles,
+ cancelable: EventCancelable,
+ view: Option<&Window>,
+ detail: i32,
+ related_target: Option<&EventTarget>,
+ ) -> DomRoot<FocusEvent> {
+ let ev = FocusEvent::new_uninitialized_with_proto(window, proto);
ev.upcast::<UIEvent>().InitUIEvent(
type_,
bool::from(can_bubble),
@@ -59,13 +86,15 @@ impl FocusEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &FocusEventBinding::FocusEventInit,
) -> Fallible<DomRoot<FocusEvent>> {
let bubbles = EventBubbles::from(init.parent.parent.bubbles);
let cancelable = EventCancelable::from(init.parent.parent.cancelable);
- let event = FocusEvent::new(
+ let event = FocusEvent::new_with_proto(
window,
+ proto,
type_,
bubbles,
cancelable,
diff --git a/components/script/dom/formdata.rs b/components/script/dom/formdata.rs
index 3a8f3ce4b5b..3d1d28a0ddc 100644
--- a/components/script/dom/formdata.rs
+++ b/components/script/dom/formdata.rs
@@ -8,7 +8,7 @@ use crate::dom::bindings::codegen::UnionTypes::FileOrUSVString;
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::iterable::Iterable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::blob::Blob;
@@ -17,6 +17,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::htmlformelement::{FormDatum, FormDatumValue, HTMLFormElement};
use dom_struct::dom_struct;
use html5ever::LocalName;
+use js::rust::HandleObject;
use script_traits::serializable::BlobImpl;
#[dom_struct]
@@ -42,23 +43,28 @@ impl FormData {
}
pub fn new(form_datums: Option<Vec<FormDatum>>, global: &GlobalScope) -> DomRoot<FormData> {
- reflect_dom_object(Box::new(FormData::new_inherited(form_datums)), global)
+ Self::new_with_proto(form_datums, global, None)
+ }
+
+ fn new_with_proto(form_datums: Option<Vec<FormDatum>>, global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<FormData> {
+ reflect_dom_object2(Box::new(FormData::new_inherited(form_datums)), global, proto)
}
// https://xhr.spec.whatwg.org/#dom-formdata
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
form: Option<&HTMLFormElement>,
) -> Fallible<DomRoot<FormData>> {
if let Some(opt_form) = form {
return match opt_form.get_form_dataset(None, None) {
- Some(form_datums) => Ok(FormData::new(Some(form_datums), global)),
+ Some(form_datums) => Ok(FormData::new_with_proto(Some(form_datums), global, proto)),
None => Err(Error::InvalidState),
};
}
- Ok(FormData::new(None, global))
+ Ok(FormData::new_with_proto(None, global, proto))
}
}
diff --git a/components/script/dom/formdataevent.rs b/components/script/dom/formdataevent.rs
index 263d176f66f..00b6c0718b3 100644
--- a/components/script/dom/formdataevent.rs
+++ b/components/script/dom/formdataevent.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::FormDataEventBinding;
use crate::dom::bindings::codegen::Bindings::FormDataEventBinding::FormDataEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -16,6 +16,7 @@ use crate::dom::formdata::FormData;
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -32,12 +33,31 @@ impl FormDataEvent {
cancelable: EventCancelable,
form_data: &FormData,
) -> DomRoot<FormDataEvent> {
- let ev = reflect_dom_object(
+ Self::new_with_proto(
+ global,
+ None,
+ type_,
+ can_bubble,
+ cancelable,
+ form_data,
+ )
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ can_bubble: EventBubbles,
+ cancelable: EventCancelable,
+ form_data: &FormData,
+ ) -> DomRoot<FormDataEvent> {
+ let ev = reflect_dom_object2(
Box::new(FormDataEvent {
event: Event::new_inherited(),
form_data: Dom::from_ref(form_data),
}),
global,
+ proto,
);
{
@@ -50,14 +70,16 @@ impl FormDataEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &FormDataEventBinding::FormDataEventInit,
) -> Fallible<DomRoot<FormDataEvent>> {
let bubbles = EventBubbles::from(init.parent.bubbles);
let cancelable = EventCancelable::from(init.parent.cancelable);
- let event = FormDataEvent::new(
+ let event = FormDataEvent::new_with_proto(
&window.global(),
+ proto,
Atom::from(type_),
bubbles,
cancelable,
diff --git a/components/script/dom/gainnode.rs b/components/script/dom/gainnode.rs
index 86a957734dd..9b3910cf31a 100644
--- a/components/script/dom/gainnode.rs
+++ b/components/script/dom/gainnode.rs
@@ -11,10 +11,11 @@ use crate::dom::bindings::codegen::Bindings::AudioNodeBinding::{
use crate::dom::bindings::codegen::Bindings::AudioParamBinding::AutomationRate;
use crate::dom::bindings::codegen::Bindings::GainNodeBinding::{GainNodeMethods, GainOptions};
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::gain_node::GainNodeOptions;
use servo_media::audio::node::AudioNodeInit;
use servo_media::audio::param::ParamType;
@@ -60,23 +61,33 @@ impl GainNode {
})
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &BaseAudioContext,
options: &GainOptions,
) -> Fallible<DomRoot<GainNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &BaseAudioContext,
+ options: &GainOptions,
+ ) -> Fallible<DomRoot<GainNode>> {
let node = GainNode::new_inherited(window, context, options)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &BaseAudioContext,
options: &GainOptions,
) -> Fallible<DomRoot<GainNode>> {
- GainNode::new(window, context, options)
+ GainNode::new_with_proto(window, proto, context, options)
}
}
diff --git a/components/script/dom/gamepadevent.rs b/components/script/dom/gamepadevent.rs
index a6a3ad9e57c..effacc6eeb2 100644
--- a/components/script/dom/gamepadevent.rs
+++ b/components/script/dom/gamepadevent.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::GamepadEventBinding;
use crate::dom::bindings::codegen::Bindings::GamepadEventBinding::GamepadEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -15,6 +15,7 @@ use crate::dom::gamepad::Gamepad;
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -43,7 +44,18 @@ impl GamepadEvent {
cancelable: bool,
gamepad: &Gamepad,
) -> DomRoot<GamepadEvent> {
- let ev = reflect_dom_object(Box::new(GamepadEvent::new_inherited(&gamepad)), global);
+ Self::new_with_proto(global, None, type_, bubbles, cancelable, gamepad)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ gamepad: &Gamepad,
+ ) -> DomRoot<GamepadEvent> {
+ let ev = reflect_dom_object2(Box::new(GamepadEvent::new_inherited(&gamepad)), global, proto);
{
let event = ev.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@@ -68,11 +80,13 @@ impl GamepadEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &GamepadEventBinding::GamepadEventInit,
) -> Fallible<DomRoot<GamepadEvent>> {
- Ok(GamepadEvent::new(
+ Ok(GamepadEvent::new_with_proto(
&window.global(),
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/gpuoutofmemoryerror.rs b/components/script/dom/gpuoutofmemoryerror.rs
index fb0b2e11d86..0689e8df3bb 100644
--- a/components/script/dom/gpuoutofmemoryerror.rs
+++ b/components/script/dom/gpuoutofmemoryerror.rs
@@ -2,10 +2,11 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct GPUOutOfMemoryError {
@@ -20,12 +21,16 @@ impl GPUOutOfMemoryError {
}
pub fn new(global: &GlobalScope) -> DomRoot<Self> {
- reflect_dom_object(Box::new(GPUOutOfMemoryError::new_inherited()), global)
+ Self::new_with_proto(global, None)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<Self> {
+ reflect_dom_object2(Box::new(GPUOutOfMemoryError::new_inherited()), global, proto)
}
/// https://gpuweb.github.io/gpuweb/#dom-gpuoutofmemoryerror-gpuoutofmemoryerror
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope) -> DomRoot<Self> {
- GPUOutOfMemoryError::new(global)
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<Self> {
+ GPUOutOfMemoryError::new_with_proto(global, proto)
}
}
diff --git a/components/script/dom/gpuuncapturederrorevent.rs b/components/script/dom/gpuuncapturederrorevent.rs
index 30c9692a27d..bdf62162dfe 100644
--- a/components/script/dom/gpuuncapturederrorevent.rs
+++ b/components/script/dom/gpuuncapturederrorevent.rs
@@ -7,12 +7,13 @@ use crate::dom::bindings::codegen::Bindings::GPUUncapturedErrorEventBinding::{
GPUUncapturedErrorEventInit, GPUUncapturedErrorEventMethods,
};
use crate::dom::bindings::codegen::Bindings::GPUValidationErrorBinding::GPUError;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -35,9 +36,19 @@ impl GPUUncapturedErrorEvent {
type_: DOMString,
init: &GPUUncapturedErrorEventInit,
) -> DomRoot<Self> {
- let ev = reflect_dom_object(
+ Self::new_with_proto(global, None, type_, init)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: DOMString,
+ init: &GPUUncapturedErrorEventInit,
+ ) -> DomRoot<Self> {
+ let ev = reflect_dom_object2(
Box::new(GPUUncapturedErrorEvent::new_inherited(init)),
global,
+ proto,
);
ev.event.init_event(
Atom::from(type_),
@@ -51,10 +62,11 @@ impl GPUUncapturedErrorEvent {
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &GPUUncapturedErrorEventInit,
) -> DomRoot<Self> {
- GPUUncapturedErrorEvent::new(global, type_, init)
+ GPUUncapturedErrorEvent::new_with_proto(global, proto, type_, init)
}
}
diff --git a/components/script/dom/gpuvalidationerror.rs b/components/script/dom/gpuvalidationerror.rs
index 4b0b6ec1627..e1456b510a6 100644
--- a/components/script/dom/gpuvalidationerror.rs
+++ b/components/script/dom/gpuvalidationerror.rs
@@ -3,11 +3,12 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use crate::dom::bindings::codegen::Bindings::GPUValidationErrorBinding::GPUValidationErrorMethods;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct GPUValidationError {
@@ -24,13 +25,17 @@ impl GPUValidationError {
}
pub fn new(global: &GlobalScope, message: DOMString) -> DomRoot<Self> {
- reflect_dom_object(Box::new(GPUValidationError::new_inherited(message)), global)
+ Self::new_with_proto(global, None, message)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>, message: DOMString) -> DomRoot<Self> {
+ reflect_dom_object2(Box::new(GPUValidationError::new_inherited(message)), global, proto)
}
/// https://gpuweb.github.io/gpuweb/#dom-gpuvalidationerror-gpuvalidationerror
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope, message: DOMString) -> DomRoot<Self> {
- GPUValidationError::new(global, message)
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>, message: DOMString) -> DomRoot<Self> {
+ GPUValidationError::new_with_proto(global, proto, message)
}
}
diff --git a/components/script/dom/hashchangeevent.rs b/components/script/dom/hashchangeevent.rs
index 046500b9b6d..8dbb2fd704a 100644
--- a/components/script/dom/hashchangeevent.rs
+++ b/components/script/dom/hashchangeevent.rs
@@ -7,12 +7,13 @@ use crate::dom::bindings::codegen::Bindings::HashChangeEventBinding;
use crate::dom::bindings::codegen::Bindings::HashChangeEventBinding::HashChangeEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::event::Event;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
// https://html.spec.whatwg.org/multipage/#hashchangeevent
@@ -33,9 +34,14 @@ impl HashChangeEvent {
}
pub fn new_uninitialized(window: &Window) -> DomRoot<HashChangeEvent> {
- reflect_dom_object(
+ Self::new_uninitialized_with_proto(window, None)
+ }
+
+ fn new_uninitialized_with_proto(window: &Window, proto: Option<HandleObject>) -> DomRoot<HashChangeEvent> {
+ reflect_dom_object2(
Box::new(HashChangeEvent::new_inherited(String::new(), String::new())),
window,
+ proto,
)
}
@@ -47,9 +53,22 @@ impl HashChangeEvent {
old_url: String,
new_url: String,
) -> DomRoot<HashChangeEvent> {
- let ev = reflect_dom_object(
+ Self::new_with_proto(window, None, type_, bubbles, cancelable, old_url, new_url)
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ old_url: String,
+ new_url: String,
+ ) -> DomRoot<HashChangeEvent> {
+ let ev = reflect_dom_object2(
Box::new(HashChangeEvent::new_inherited(old_url, new_url)),
window,
+ proto,
);
{
let event = ev.upcast::<Event>();
@@ -61,11 +80,13 @@ impl HashChangeEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &HashChangeEventBinding::HashChangeEventInit,
) -> Fallible<DomRoot<HashChangeEvent>> {
- Ok(HashChangeEvent::new(
+ Ok(HashChangeEvent::new_with_proto(
window,
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/headers.rs b/components/script/dom/headers.rs
index 6d466ea0c61..8cae2df36a1 100644
--- a/components/script/dom/headers.rs
+++ b/components/script/dom/headers.rs
@@ -6,13 +6,14 @@ use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::HeadersBinding::{HeadersInit, HeadersMethods};
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::iterable::Iterable;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::{is_token, ByteString};
use crate::dom::globalscope::GlobalScope;
use data_url::mime::Mime as DataUrlMime;
use dom_struct::dom_struct;
use http::header::{HeaderMap as HyperHeaders, HeaderName, HeaderValue};
+use js::rust::HandleObject;
use net_traits::{
fetch::headers::get_value_from_header_list, request::is_cors_safelisted_request_header,
};
@@ -47,16 +48,21 @@ impl Headers {
}
pub fn new(global: &GlobalScope) -> DomRoot<Headers> {
- reflect_dom_object(Box::new(Headers::new_inherited()), global)
+ Self::new_with_proto(global, None)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<Headers> {
+ reflect_dom_object2(Box::new(Headers::new_inherited()), global, proto)
}
// https://fetch.spec.whatwg.org/#dom-headers
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
init: Option<HeadersInit>,
) -> Fallible<DomRoot<Headers>> {
- let dom_headers_new = Headers::new(global);
+ let dom_headers_new = Headers::new_with_proto(global, proto);
dom_headers_new.fill(init)?;
Ok(dom_headers_new)
}
diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs
index bd9a526cd16..e36119dd790 100644
--- a/components/script/dom/htmlanchorelement.rs
+++ b/components/script/dom/htmlanchorelement.rs
@@ -29,6 +29,7 @@ use crate::dom::virtualmethods::VirtualMethods;
use crate::task_source::TaskSource;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use net_traits::request::Referrer;
use num_traits::ToPrimitive;
use script_traits::{HistoryEntryReplacement, LoadData, LoadOrigin};
@@ -62,12 +63,14 @@ impl HTMLAnchorElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLAnchorElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLAnchorElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlareaelement.rs b/components/script/dom/htmlareaelement.rs
index ef85bb8791e..0df17d1b857 100644
--- a/components/script/dom/htmlareaelement.rs
+++ b/components/script/dom/htmlareaelement.rs
@@ -19,6 +19,7 @@ use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use euclid::default::Point2D;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use servo_atoms::Atom;
use std::default::Default;
use std::f32;
@@ -253,10 +254,12 @@ impl HTMLAreaElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLAreaElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLAreaElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlaudioelement.rs b/components/script/dom/htmlaudioelement.rs
index db8f1877a6d..661f882944a 100644
--- a/components/script/dom/htmlaudioelement.rs
+++ b/components/script/dom/htmlaudioelement.rs
@@ -15,6 +15,7 @@ use crate::dom::node::Node;
use crate::dom::window::Window;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix, QualName};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLAudioElement {
@@ -37,24 +38,27 @@ impl HTMLAudioElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLAudioElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLAudioElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
// https://html.spec.whatwg.org/multipage/#dom-audio
#[allow(non_snake_case)]
- pub fn Audio(window: &Window, src: Option<DOMString>) -> Fallible<DomRoot<HTMLAudioElement>> {
+ pub fn Audio(window: &Window, proto: Option<HandleObject>, src: Option<DOMString>) -> Fallible<DomRoot<HTMLAudioElement>> {
let element = Element::create(
QualName::new(None, ns!(html), local_name!("audio")),
None,
&window.Document(),
ElementCreator::ScriptCreated,
CustomElementCreationMode::Synchronous,
+ proto,
);
let audio = DomRoot::downcast::<HTMLAudioElement>(element).unwrap();
diff --git a/components/script/dom/htmlbaseelement.rs b/components/script/dom/htmlbaseelement.rs
index e6568716e1f..29fd459458a 100644
--- a/components/script/dom/htmlbaseelement.rs
+++ b/components/script/dom/htmlbaseelement.rs
@@ -14,6 +14,7 @@ use crate::dom::node::{document_from_node, BindContext, Node, UnbindContext};
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use servo_url::ServoUrl;
#[dom_struct]
@@ -37,10 +38,12 @@ impl HTMLBaseElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLBaseElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLBaseElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlbodyelement.rs b/components/script/dom/htmlbodyelement.rs
index 775af6a686c..d3408db6386 100644
--- a/components/script/dom/htmlbodyelement.rs
+++ b/components/script/dom/htmlbodyelement.rs
@@ -18,6 +18,7 @@ use cssparser::RGBA;
use dom_struct::dom_struct;
use embedder_traits::EmbedderMsg;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use servo_url::ServoUrl;
use style::attr::AttrValue;
@@ -46,10 +47,12 @@ impl HTMLBodyElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLBodyElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLBodyElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlbrelement.rs b/components/script/dom/htmlbrelement.rs
index d087dfffb02..a1388218ecb 100644
--- a/components/script/dom/htmlbrelement.rs
+++ b/components/script/dom/htmlbrelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLBRElement {
@@ -30,10 +31,12 @@ impl HTMLBRElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>
) -> DomRoot<HTMLBRElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLBRElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs
index 9e9898f328c..6b22c542681 100755
--- a/components/script/dom/htmlbuttonelement.rs
+++ b/components/script/dom/htmlbuttonelement.rs
@@ -24,6 +24,7 @@ use crate::dom::validitystate::ValidityState;
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use std::cell::Cell;
use std::default::Default;
use style::element_state::ElementState;
@@ -69,12 +70,14 @@ impl HTMLButtonElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLButtonElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLButtonElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs
index 33f0c6c6a34..d12a7847d02 100644
--- a/components/script/dom/htmlcanvaselement.rs
+++ b/components/script/dom/htmlcanvaselement.rs
@@ -41,7 +41,7 @@ use image::codecs::png::PngEncoder;
use image::{ColorType, ImageEncoder};
use ipc_channel::ipc::{self as ipcchan, IpcSharedMemory};
use js::error::throw_type_error;
-use js::rust::HandleValue;
+use js::rust::{HandleObject, HandleValue};
use profile_traits::ipc;
use script_layout_interface::{HTMLCanvasData, HTMLCanvasDataSource};
use script_traits::ScriptMsg;
@@ -84,12 +84,14 @@ impl HTMLCanvasElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLCanvasElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLCanvasElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmldataelement.rs b/components/script/dom/htmldataelement.rs
index 93594ec8816..70fdb2f95fd 100644
--- a/components/script/dom/htmldataelement.rs
+++ b/components/script/dom/htmldataelement.rs
@@ -10,6 +10,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLDataElement {
@@ -32,10 +33,12 @@ impl HTMLDataElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLDataElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLDataElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmldatalistelement.rs b/components/script/dom/htmldatalistelement.rs
index 6bddb2800e4..9323a627c15 100644
--- a/components/script/dom/htmldatalistelement.rs
+++ b/components/script/dom/htmldatalistelement.rs
@@ -13,6 +13,7 @@ use crate::dom::htmloptionelement::HTMLOptionElement;
use crate::dom::node::{window_from_node, Node};
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLDataListElement {
@@ -35,12 +36,14 @@ impl HTMLDataListElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLDataListElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLDataListElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmldetailselement.rs b/components/script/dom/htmldetailselement.rs
index 5ec9ab68604..6996164fe00 100644
--- a/components/script/dom/htmldetailselement.rs
+++ b/components/script/dom/htmldetailselement.rs
@@ -16,6 +16,7 @@ use crate::dom::virtualmethods::VirtualMethods;
use crate::task_source::TaskSource;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use std::cell::Cell;
#[dom_struct]
@@ -41,12 +42,14 @@ impl HTMLDetailsElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLDetailsElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLDetailsElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmldialogelement.rs b/components/script/dom/htmldialogelement.rs
index 135f7afe035..b907e3d3912 100644
--- a/components/script/dom/htmldialogelement.rs
+++ b/components/script/dom/htmldialogelement.rs
@@ -14,6 +14,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::{window_from_node, Node};
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLDialogElement {
@@ -38,12 +39,14 @@ impl HTMLDialogElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLDialogElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLDialogElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmldirectoryelement.rs b/components/script/dom/htmldirectoryelement.rs
index ce2472be3d3..697607e8336 100644
--- a/components/script/dom/htmldirectoryelement.rs
+++ b/components/script/dom/htmldirectoryelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLDirectoryElement {
@@ -30,12 +31,14 @@ impl HTMLDirectoryElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLDirectoryElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLDirectoryElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmldivelement.rs b/components/script/dom/htmldivelement.rs
index 0bd558210a0..284e1af3690 100644
--- a/components/script/dom/htmldivelement.rs
+++ b/components/script/dom/htmldivelement.rs
@@ -10,6 +10,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLDivElement {
@@ -32,10 +33,12 @@ impl HTMLDivElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLDivElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLDivElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmldlistelement.rs b/components/script/dom/htmldlistelement.rs
index 356c30c8c94..1477c95668c 100644
--- a/components/script/dom/htmldlistelement.rs
+++ b/components/script/dom/htmldlistelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLDListElement {
@@ -30,12 +31,14 @@ impl HTMLDListElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLDListElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLDListElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs
index 0b1cb499fe2..c2c2bb29a7f 100644
--- a/components/script/dom/htmlelement.rs
+++ b/components/script/dom/htmlelement.rs
@@ -36,6 +36,7 @@ use crate::dom::text::Text;
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use script_layout_interface::message::QueryMsg;
use std::collections::HashSet;
use std::default::Default;
@@ -83,10 +84,12 @@ impl HTMLElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
@@ -487,7 +490,7 @@ impl HTMLElementMethods for HTMLElement {
text = String::new();
}
- let br = HTMLBRElement::new(local_name!("br"), None, &document);
+ let br = HTMLBRElement::new(local_name!("br"), None, &document, None);
fragment.upcast::<Node>().AppendChild(&br.upcast()).unwrap();
},
_ => {
diff --git a/components/script/dom/htmlembedelement.rs b/components/script/dom/htmlembedelement.rs
index e21b8f5ce35..ac7097e0331 100644
--- a/components/script/dom/htmlembedelement.rs
+++ b/components/script/dom/htmlembedelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLEmbedElement {
@@ -30,12 +31,14 @@ impl HTMLEmbedElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLEmbedElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLEmbedElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs
index cefee026751..f6629b5860b 100644
--- a/components/script/dom/htmlfieldsetelement.rs
+++ b/components/script/dom/htmlfieldsetelement.rs
@@ -19,6 +19,7 @@ use crate::dom::validitystate::ValidityState;
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use std::default::Default;
use style::element_state::ElementState;
@@ -52,12 +53,14 @@ impl HTMLFieldSetElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLFieldSetElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLFieldSetElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlfontelement.rs b/components/script/dom/htmlfontelement.rs
index f9b1575577e..8ec432cf504 100644
--- a/components/script/dom/htmlfontelement.rs
+++ b/components/script/dom/htmlfontelement.rs
@@ -15,6 +15,7 @@ use crate::dom::virtualmethods::VirtualMethods;
use cssparser::RGBA;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use servo_atoms::Atom;
use style::attr::AttrValue;
use style::str::{read_numbers, HTML_SPACE_CHARACTERS};
@@ -40,10 +41,12 @@ impl HTMLFontElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLFontElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLFontElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs
index 404f3f4b648..5d8d83d6783 100644
--- a/components/script/dom/htmlformelement.rs
+++ b/components/script/dom/htmlformelement.rs
@@ -62,6 +62,7 @@ use encoding_rs::{Encoding, UTF_8};
use headers::{ContentType, HeaderMapExt};
use html5ever::{LocalName, Prefix};
use http::Method;
+use js::rust::HandleObject;
use mime::{self, Mime};
use net_traits::http_percent_encode;
use net_traits::request::Referrer;
@@ -120,10 +121,12 @@ impl HTMLFormElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLFormElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLFormElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlframeelement.rs b/components/script/dom/htmlframeelement.rs
index fa3ad51393e..4128a50841c 100644
--- a/components/script/dom/htmlframeelement.rs
+++ b/components/script/dom/htmlframeelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLFrameElement {
@@ -30,12 +31,14 @@ impl HTMLFrameElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLFrameElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLFrameElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlframesetelement.rs b/components/script/dom/htmlframesetelement.rs
index dc071b47074..0b7f209c677 100644
--- a/components/script/dom/htmlframesetelement.rs
+++ b/components/script/dom/htmlframesetelement.rs
@@ -11,6 +11,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::{document_from_node, Node};
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLFrameSetElement {
@@ -33,12 +34,14 @@ impl HTMLFrameSetElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLFrameSetElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLFrameSetElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
n
diff --git a/components/script/dom/htmlheadelement.rs b/components/script/dom/htmlheadelement.rs
index 1bd6e5e1148..81c0f4bd777 100644
--- a/components/script/dom/htmlheadelement.rs
+++ b/components/script/dom/htmlheadelement.rs
@@ -14,6 +14,7 @@ use crate::dom::userscripts::load_script;
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLHeadElement {
@@ -36,10 +37,12 @@ impl HTMLHeadElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLHeadElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLHeadElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
diff --git a/components/script/dom/htmlheadingelement.rs b/components/script/dom/htmlheadingelement.rs
index 659cf14f4d2..f990883498e 100644
--- a/components/script/dom/htmlheadingelement.rs
+++ b/components/script/dom/htmlheadingelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[derive(JSTraceable, MallocSizeOf)]
pub enum HeadingLevel {
@@ -43,13 +44,15 @@ impl HTMLHeadingElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
level: HeadingLevel,
) -> DomRoot<HTMLHeadingElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLHeadingElement::new_inherited(
local_name, prefix, document, level,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlhrelement.rs b/components/script/dom/htmlhrelement.rs
index 69fa8887bb1..d553e8f3261 100644
--- a/components/script/dom/htmlhrelement.rs
+++ b/components/script/dom/htmlhrelement.rs
@@ -14,6 +14,7 @@ use crate::dom::virtualmethods::VirtualMethods;
use cssparser::RGBA;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
#[dom_struct]
@@ -37,10 +38,12 @@ impl HTMLHRElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLHRElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLHRElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlhtmlelement.rs b/components/script/dom/htmlhtmlelement.rs
index da77d3464d9..171a071ee8d 100644
--- a/components/script/dom/htmlhtmlelement.rs
+++ b/components/script/dom/htmlhtmlelement.rs
@@ -9,6 +9,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLHtmlElement {
@@ -32,10 +33,12 @@ impl HTMLHtmlElement {
localName: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLHtmlElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLHtmlElement::new_inherited(localName, prefix, document)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs
index 1fe04c04518..e0fe53317ce 100644
--- a/components/script/dom/htmliframeelement.rs
+++ b/components/script/dom/htmliframeelement.rs
@@ -28,6 +28,7 @@ use crate::script_thread::ScriptThread;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
use ipc_channel::ipc;
+use js::rust::HandleObject;
use msg::constellation_msg::{BrowsingContextId, PipelineId, TopLevelBrowsingContextId};
use profile_traits::ipc as ProfiledIpc;
use script_layout_interface::message::ReflowGoal;
@@ -441,12 +442,14 @@ impl HTMLIFrameElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLIFrameElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLIFrameElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs
index 1c898d1dc98..1598dbd7e2d 100644
--- a/components/script/dom/htmlimageelement.rs
+++ b/components/script/dom/htmlimageelement.rs
@@ -58,6 +58,7 @@ use ipc_channel::ipc;
use ipc_channel::ipc::IpcSender;
use ipc_channel::router::ROUTER;
use js::jsapi::JSAutoRealm;
+use js::rust::HandleObject;
use mime::{self, Mime};
use msg::constellation_msg::PipelineId;
use net_traits::image::base::{Image, ImageMetadata};
@@ -1246,17 +1247,20 @@ impl HTMLImageElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLImageElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLImageElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
pub fn Image(
window: &Window,
+ proto: Option<HandleObject>,
width: Option<u32>,
height: Option<u32>,
) -> Fallible<DomRoot<HTMLImageElement>> {
@@ -1266,6 +1270,7 @@ impl HTMLImageElement {
&window.Document(),
ElementCreator::ScriptCreated,
CustomElementCreationMode::Synchronous,
+ proto,
);
let image = DomRoot::downcast::<HTMLImageElement>(element).unwrap();
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs
index e81e07e9643..046f90dbad8 100755
--- a/components/script/dom/htmlinputelement.rs
+++ b/components/script/dom/htmlinputelement.rs
@@ -330,12 +330,14 @@ impl HTMLInputElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLInputElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLInputElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmllabelelement.rs b/components/script/dom/htmllabelelement.rs
index 970f4a97b7a..e42bc8b508d 100644
--- a/components/script/dom/htmllabelelement.rs
+++ b/components/script/dom/htmllabelelement.rs
@@ -22,6 +22,7 @@ use crate::dom::node::{Node, ShadowIncluding};
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use style::attr::AttrValue;
#[dom_struct]
@@ -45,12 +46,14 @@ impl HTMLLabelElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLLabelElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLLabelElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmllegendelement.rs b/components/script/dom/htmllegendelement.rs
index bfb0f0701c8..32fa5e88808 100644
--- a/components/script/dom/htmllegendelement.rs
+++ b/components/script/dom/htmllegendelement.rs
@@ -15,6 +15,7 @@ use crate::dom::node::{BindContext, Node, UnbindContext};
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLLegendElement {
@@ -39,12 +40,14 @@ impl HTMLLegendElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLLegendElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLLegendElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmllielement.rs b/components/script/dom/htmllielement.rs
index 2697f6643e8..e2e2248272d 100644
--- a/components/script/dom/htmllielement.rs
+++ b/components/script/dom/htmllielement.rs
@@ -12,6 +12,7 @@ use crate::dom::node::Node;
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use style::attr::AttrValue;
#[dom_struct]
@@ -35,10 +36,12 @@ impl HTMLLIElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLLIElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLLIElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs
index 30a45471203..5b8ed9e2250 100644
--- a/components/script/dom/htmllinkelement.rs
+++ b/components/script/dom/htmllinkelement.rs
@@ -29,6 +29,7 @@ use cssparser::{Parser as CssParser, ParserInput};
use dom_struct::dom_struct;
use embedder_traits::EmbedderMsg;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use net_traits::ReferrerPolicy;
use servo_arc::Arc;
use servo_atoms::Atom;
@@ -94,13 +95,15 @@ impl HTMLLinkElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
creator: ElementCreator,
) -> DomRoot<HTMLLinkElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLLinkElement::new_inherited(
local_name, prefix, document, creator,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlmapelement.rs b/components/script/dom/htmlmapelement.rs
index d3024bb6e95..3e1b19be48a 100644
--- a/components/script/dom/htmlmapelement.rs
+++ b/components/script/dom/htmlmapelement.rs
@@ -10,6 +10,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::{Node, ShadowIncluding};
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLMapElement {
@@ -32,10 +33,12 @@ impl HTMLMapElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLMapElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLMapElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index 5eb9f709838..2d404cf2d49 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -1865,6 +1865,7 @@ impl HTMLMediaElement {
local_name!("script"),
None,
&document,
+ None,
ElementCreator::ScriptCreated,
);
let mut media_controls_script = resources::read_string(EmbedderResource::MediaControlsJS);
@@ -1892,6 +1893,7 @@ impl HTMLMediaElement {
local_name!("script"),
None,
&document,
+ None,
ElementCreator::ScriptCreated,
);
style
diff --git a/components/script/dom/htmlmenuelement.rs b/components/script/dom/htmlmenuelement.rs
index 43e0ff07ed9..9698a058fb1 100644
--- a/components/script/dom/htmlmenuelement.rs
+++ b/components/script/dom/htmlmenuelement.rs
@@ -9,6 +9,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLMenuElement {
@@ -31,10 +32,12 @@ impl HTMLMenuElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLMenuElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLMenuElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlmetaelement.rs b/components/script/dom/htmlmetaelement.rs
index 168c29cdb0b..a6be8e1747b 100644
--- a/components/script/dom/htmlmetaelement.rs
+++ b/components/script/dom/htmlmetaelement.rs
@@ -21,6 +21,7 @@ use crate::dom::node::{
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use servo_arc::Arc;
use servo_config::pref;
use std::sync::atomic::AtomicBool;
@@ -54,10 +55,12 @@ impl HTMLMetaElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLMetaElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLMetaElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlmeterelement.rs b/components/script/dom/htmlmeterelement.rs
index 01f3b0dc94c..42fb531614c 100644
--- a/components/script/dom/htmlmeterelement.rs
+++ b/components/script/dom/htmlmeterelement.rs
@@ -11,6 +11,7 @@ use crate::dom::node::Node;
use crate::dom::nodelist::NodeList;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLMeterElement {
@@ -35,12 +36,14 @@ impl HTMLMeterElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLMeterElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLMeterElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlmodelement.rs b/components/script/dom/htmlmodelement.rs
index d54156bbbc8..f271c0e25d1 100644
--- a/components/script/dom/htmlmodelement.rs
+++ b/components/script/dom/htmlmodelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLModElement {
@@ -30,10 +31,12 @@ impl HTMLModElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLModElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLModElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlobjectelement.rs b/components/script/dom/htmlobjectelement.rs
index 928c593cec6..a6f78b6ec70 100755
--- a/components/script/dom/htmlobjectelement.rs
+++ b/components/script/dom/htmlobjectelement.rs
@@ -18,6 +18,7 @@ use crate::dom::validitystate::ValidityState;
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use net_traits::image::base::Image;
use servo_arc::Arc;
use std::default::Default;
@@ -50,12 +51,14 @@ impl HTMLObjectElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLObjectElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLObjectElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlolistelement.rs b/components/script/dom/htmlolistelement.rs
index 456625d6447..05f8bb69bba 100644
--- a/components/script/dom/htmlolistelement.rs
+++ b/components/script/dom/htmlolistelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLOListElement {
@@ -30,12 +31,14 @@ impl HTMLOListElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLOListElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLOListElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmloptgroupelement.rs b/components/script/dom/htmloptgroupelement.rs
index 4ee3263c9ac..03e379055f6 100644
--- a/components/script/dom/htmloptgroupelement.rs
+++ b/components/script/dom/htmloptgroupelement.rs
@@ -14,6 +14,7 @@ use crate::dom::node::Node;
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use style::element_state::ElementState;
#[dom_struct]
@@ -42,12 +43,14 @@ impl HTMLOptGroupElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLOptGroupElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLOptGroupElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs
index 0ba7eadcf11..8e22d8edbaf 100644
--- a/components/script/dom/htmloptionelement.rs
+++ b/components/script/dom/htmloptionelement.rs
@@ -26,6 +26,7 @@ use crate::dom::virtualmethods::VirtualMethods;
use crate::dom::window::Window;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix, QualName};
+use js::rust::HandleObject;
use std::cell::Cell;
use std::convert::TryInto;
use style::element_state::ElementState;
@@ -65,12 +66,14 @@ impl HTMLOptionElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLOptionElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLOptionElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
@@ -78,6 +81,7 @@ impl HTMLOptionElement {
#[allow(non_snake_case)]
pub fn Option(
window: &Window,
+ proto: Option<HandleObject>,
text: DOMString,
value: Option<DOMString>,
default_selected: bool,
@@ -89,6 +93,7 @@ impl HTMLOptionElement {
&window.Document(),
ElementCreator::ScriptCreated,
CustomElementCreationMode::Synchronous,
+ proto,
);
let option = DomRoot::downcast::<HTMLOptionElement>(element).unwrap();
diff --git a/components/script/dom/htmloptionscollection.rs b/components/script/dom/htmloptionscollection.rs
index 2a79c83d55e..a4b47a2b49b 100644
--- a/components/script/dom/htmloptionscollection.rs
+++ b/components/script/dom/htmloptionscollection.rs
@@ -54,7 +54,7 @@ impl HTMLOptionsCollection {
let document = document_from_node(&*root);
for _ in 0..count {
- let element = HTMLOptionElement::new(local_name!("option"), None, &document);
+ let element = HTMLOptionElement::new(local_name!("option"), None, &document, None);
let node = element.upcast::<Node>();
root.AppendChild(node)?;
}
diff --git a/components/script/dom/htmloutputelement.rs b/components/script/dom/htmloutputelement.rs
index e20dbcc29b2..533fc953d5c 100644
--- a/components/script/dom/htmloutputelement.rs
+++ b/components/script/dom/htmloutputelement.rs
@@ -19,6 +19,7 @@ use crate::dom::validitystate::ValidityState;
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLOutputElement {
@@ -49,12 +50,14 @@ impl HTMLOutputElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLOutputElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLOutputElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlparagraphelement.rs b/components/script/dom/htmlparagraphelement.rs
index 101f7058138..82defe4113b 100644
--- a/components/script/dom/htmlparagraphelement.rs
+++ b/components/script/dom/htmlparagraphelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLParagraphElement {
@@ -30,12 +31,14 @@ impl HTMLParagraphElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLParagraphElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLParagraphElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlparamelement.rs b/components/script/dom/htmlparamelement.rs
index fd1a139a84d..a2b30e7ecd1 100644
--- a/components/script/dom/htmlparamelement.rs
+++ b/components/script/dom/htmlparamelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLParamElement {
@@ -30,12 +31,14 @@ impl HTMLParamElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLParamElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLParamElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlpictureelement.rs b/components/script/dom/htmlpictureelement.rs
index 726f7afd5f8..62de53ef704 100644
--- a/components/script/dom/htmlpictureelement.rs
+++ b/components/script/dom/htmlpictureelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLPictureElement {
@@ -30,12 +31,14 @@ impl HTMLPictureElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLPictureElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLPictureElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlpreelement.rs b/components/script/dom/htmlpreelement.rs
index 36e2706e168..0243be8d4ae 100644
--- a/components/script/dom/htmlpreelement.rs
+++ b/components/script/dom/htmlpreelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLPreElement {
@@ -30,10 +31,12 @@ impl HTMLPreElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLPreElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLPreElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlprogresselement.rs b/components/script/dom/htmlprogresselement.rs
index 718d1999256..917ed3f592e 100644
--- a/components/script/dom/htmlprogresselement.rs
+++ b/components/script/dom/htmlprogresselement.rs
@@ -13,6 +13,7 @@ use crate::dom::node::Node;
use crate::dom::nodelist::NodeList;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLProgressElement {
@@ -37,12 +38,14 @@ impl HTMLProgressElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLProgressElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLProgressElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlquoteelement.rs b/components/script/dom/htmlquoteelement.rs
index 4ad38f78338..f6f42dc4231 100644
--- a/components/script/dom/htmlquoteelement.rs
+++ b/components/script/dom/htmlquoteelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLQuoteElement {
@@ -30,12 +31,14 @@ impl HTMLQuoteElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLQuoteElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLQuoteElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index 1a0afeb1c84..9fe67db44a0 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -46,6 +46,7 @@ use js::jsapi::{CanCompileOffThread, CompileToStencilOffThread1, OffThreadToken}
use js::jsval::UndefinedValue;
use js::rust::{
transform_str_to_source_text, CompileOptionsWrapper, FinishOffThreadStencil, Stencil,
+ HandleObject,
};
use msg::constellation_msg::PipelineId;
use net_traits::request::{
@@ -194,13 +195,15 @@ impl HTMLScriptElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
creator: ElementCreator,
) -> DomRoot<HTMLScriptElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLScriptElement::new_inherited(
local_name, prefix, document, creator,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs
index 9d36413e4b5..00bd8b76f91 100755
--- a/components/script/dom/htmlselectelement.rs
+++ b/components/script/dom/htmlselectelement.rs
@@ -31,6 +31,7 @@ use crate::dom::validitystate::{ValidationFlags, ValidityState};
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use std::default::Default;
use std::iter;
use style::attr::AttrValue;
@@ -92,12 +93,14 @@ impl HTMLSelectElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLSelectElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLSelectElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
diff --git a/components/script/dom/htmlsourceelement.rs b/components/script/dom/htmlsourceelement.rs
index 5b581e466b5..e8b542c7a4c 100644
--- a/components/script/dom/htmlsourceelement.rs
+++ b/components/script/dom/htmlsourceelement.rs
@@ -18,6 +18,7 @@ use crate::dom::node::{BindContext, Node, UnbindContext};
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLSourceElement {
@@ -40,12 +41,14 @@ impl HTMLSourceElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLSourceElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLSourceElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmlspanelement.rs b/components/script/dom/htmlspanelement.rs
index e8a374f5f9b..ac9a711d716 100644
--- a/components/script/dom/htmlspanelement.rs
+++ b/components/script/dom/htmlspanelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLSpanElement {
@@ -30,10 +31,12 @@ impl HTMLSpanElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLSpanElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLSpanElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs
index 83d35fc78c8..6dd0ee24ab4 100644
--- a/components/script/dom/htmlstyleelement.rs
+++ b/components/script/dom/htmlstyleelement.rs
@@ -21,6 +21,7 @@ use crate::stylesheet_loader::{StylesheetLoader, StylesheetOwner};
use cssparser::{Parser as CssParser, ParserInput};
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use net_traits::ReferrerPolicy;
use servo_arc::Arc;
use std::cell::Cell;
@@ -67,13 +68,15 @@ impl HTMLStyleElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
creator: ElementCreator,
) -> DomRoot<HTMLStyleElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLStyleElement::new_inherited(
local_name, prefix, document, creator,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmltablecaptionelement.rs b/components/script/dom/htmltablecaptionelement.rs
index b89b647691e..c7c91ae359e 100644
--- a/components/script/dom/htmltablecaptionelement.rs
+++ b/components/script/dom/htmltablecaptionelement.rs
@@ -9,6 +9,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLTableCaptionElement {
@@ -31,12 +32,14 @@ impl HTMLTableCaptionElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTableCaptionElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLTableCaptionElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
diff --git a/components/script/dom/htmltablecellelement.rs b/components/script/dom/htmltablecellelement.rs
index 75a2140a090..68daaa76614 100644
--- a/components/script/dom/htmltablecellelement.rs
+++ b/components/script/dom/htmltablecellelement.rs
@@ -17,6 +17,7 @@ use crate::dom::virtualmethods::VirtualMethods;
use cssparser::RGBA;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
use style::context::QuirksMode;
@@ -44,12 +45,14 @@ impl HTMLTableCellElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTableCellElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLTableCellElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
diff --git a/components/script/dom/htmltablecolelement.rs b/components/script/dom/htmltablecolelement.rs
index 86382e1c2cb..2700defb19a 100644
--- a/components/script/dom/htmltablecolelement.rs
+++ b/components/script/dom/htmltablecolelement.rs
@@ -9,6 +9,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLTableColElement {
@@ -31,12 +32,14 @@ impl HTMLTableColElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTableColElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLTableColElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs
index 2fa44f3ad37..d807d14890c 100644
--- a/components/script/dom/htmltableelement.rs
+++ b/components/script/dom/htmltableelement.rs
@@ -23,6 +23,7 @@ use crate::dom::virtualmethods::VirtualMethods;
use cssparser::RGBA;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use std::cell::Cell;
use style::attr::{parse_unsigned_integer, AttrValue, LengthOrPercentageOrAuto};
@@ -69,12 +70,14 @@ impl HTMLTableElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTableElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLTableElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
@@ -135,7 +138,7 @@ impl HTMLTableElement {
return section;
}
- let section = HTMLTableSectionElement::new(atom.clone(), None, &document_from_node(self));
+ let section = HTMLTableSectionElement::new(atom.clone(), None, &document_from_node(self), None);
match atom {
&local_name!("thead") => self.SetTHead(Some(&section)),
&local_name!("tfoot") => self.SetTFoot(Some(&section)),
@@ -205,6 +208,7 @@ impl HTMLTableElementMethods for HTMLTableElement {
local_name!("caption"),
None,
&document_from_node(self),
+ None,
);
self.SetCaption(Some(&caption));
caption
@@ -296,7 +300,7 @@ impl HTMLTableElementMethods for HTMLTableElement {
// https://html.spec.whatwg.org/multipage/#dom-table-createtbody
fn CreateTBody(&self) -> DomRoot<HTMLTableSectionElement> {
let tbody =
- HTMLTableSectionElement::new(local_name!("tbody"), None, &document_from_node(self));
+ HTMLTableSectionElement::new(local_name!("tbody"), None, &document_from_node(self), None);
let node = self.upcast::<Node>();
let last_tbody = node
.rev_children()
@@ -318,7 +322,7 @@ impl HTMLTableElementMethods for HTMLTableElement {
return Err(Error::IndexSize);
}
- let new_row = HTMLTableRowElement::new(local_name!("tr"), None, &document_from_node(self));
+ let new_row = HTMLTableRowElement::new(local_name!("tr"), None, &document_from_node(self), None);
let node = self.upcast::<Node>();
if number_of_row_elements == 0 {
diff --git a/components/script/dom/htmltablerowelement.rs b/components/script/dom/htmltablerowelement.rs
index 5da05be4019..6e8eb34899e 100644
--- a/components/script/dom/htmltablerowelement.rs
+++ b/components/script/dom/htmltablerowelement.rs
@@ -22,6 +22,7 @@ use crate::dom::virtualmethods::VirtualMethods;
use cssparser::RGBA;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use style::attr::AttrValue;
#[derive(JSTraceable)]
@@ -56,12 +57,14 @@ impl HTMLTableRowElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTableRowElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLTableRowElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
@@ -100,7 +103,7 @@ impl HTMLTableRowElementMethods for HTMLTableRowElement {
node.insert_cell_or_row(
index,
|| self.Cells(),
- || HTMLTableCellElement::new(local_name!("td"), None, &node.owner_doc()),
+ || HTMLTableCellElement::new(local_name!("td"), None, &node.owner_doc(), None),
)
}
diff --git a/components/script/dom/htmltablesectionelement.rs b/components/script/dom/htmltablesectionelement.rs
index 5787546f2be..03cddf7bdd4 100644
--- a/components/script/dom/htmltablesectionelement.rs
+++ b/components/script/dom/htmltablesectionelement.rs
@@ -18,6 +18,7 @@ use crate::dom::virtualmethods::VirtualMethods;
use cssparser::RGBA;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use style::attr::AttrValue;
#[dom_struct]
@@ -41,12 +42,14 @@ impl HTMLTableSectionElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTableSectionElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLTableSectionElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
@@ -75,7 +78,7 @@ impl HTMLTableSectionElementMethods for HTMLTableSectionElement {
node.insert_cell_or_row(
index,
|| self.Rows(),
- || HTMLTableRowElement::new(local_name!("tr"), None, &node.owner_doc()),
+ || HTMLTableRowElement::new(local_name!("tr"), None, &node.owner_doc(), None),
)
}
diff --git a/components/script/dom/htmltemplateelement.rs b/components/script/dom/htmltemplateelement.rs
index 673f6e0c98a..1a542171ef0 100644
--- a/components/script/dom/htmltemplateelement.rs
+++ b/components/script/dom/htmltemplateelement.rs
@@ -14,6 +14,7 @@ use crate::dom::node::{document_from_node, CloneChildrenFlag, Node};
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLTemplateElement {
@@ -40,12 +41,14 @@ impl HTMLTemplateElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTemplateElement> {
- let n = Node::reflect_node(
+ let n = Node::reflect_node_with_proto(
Box::new(HTMLTemplateElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
);
n.upcast::<Node>().set_weird_parser_insertion_mode();
diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs
index aee9c1eadff..f3656664239 100755
--- a/components/script/dom/htmltextareaelement.rs
+++ b/components/script/dom/htmltextareaelement.rs
@@ -37,6 +37,7 @@ use crate::textinput::{
};
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use script_traits::ScriptToConstellationChan;
use std::cell::Cell;
use std::default::Default;
@@ -174,12 +175,14 @@ impl HTMLTextAreaElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTextAreaElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLTextAreaElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/htmltimeelement.rs b/components/script/dom/htmltimeelement.rs
index 2b0974dd76c..712983f8460 100644
--- a/components/script/dom/htmltimeelement.rs
+++ b/components/script/dom/htmltimeelement.rs
@@ -10,6 +10,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLTimeElement {
@@ -32,10 +33,12 @@ impl HTMLTimeElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTimeElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLTimeElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmltitleelement.rs b/components/script/dom/htmltitleelement.rs
index 7fce947e626..464bbaab2e0 100644
--- a/components/script/dom/htmltitleelement.rs
+++ b/components/script/dom/htmltitleelement.rs
@@ -13,6 +13,7 @@ use crate::dom::node::{BindContext, ChildrenMutation, Node};
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLTitleElement {
@@ -35,12 +36,14 @@ impl HTMLTitleElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTitleElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLTitleElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmltrackelement.rs b/components/script/dom/htmltrackelement.rs
index c068bd88295..05ceed14f1e 100644
--- a/components/script/dom/htmltrackelement.rs
+++ b/components/script/dom/htmltrackelement.rs
@@ -15,6 +15,7 @@ use crate::dom::node::Node;
use crate::dom::texttrack::TextTrack;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
#[repr(u16)]
@@ -51,6 +52,7 @@ impl HTMLTrackElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLTrackElement> {
let track = TextTrack::new(
&document.window(),
@@ -61,11 +63,12 @@ impl HTMLTrackElement {
Default::default(),
None,
);
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLTrackElement::new_inherited(
local_name, prefix, document, &track,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlulistelement.rs b/components/script/dom/htmlulistelement.rs
index aab11124365..73704e70418 100644
--- a/components/script/dom/htmlulistelement.rs
+++ b/components/script/dom/htmlulistelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLUListElement {
@@ -30,12 +31,14 @@ impl HTMLUListElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLUListElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLUListElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlunknownelement.rs b/components/script/dom/htmlunknownelement.rs
index 27fa932e936..c59b4d81e8c 100644
--- a/components/script/dom/htmlunknownelement.rs
+++ b/components/script/dom/htmlunknownelement.rs
@@ -8,6 +8,7 @@ use crate::dom::htmlelement::HTMLElement;
use crate::dom::node::Node;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
#[dom_struct]
pub struct HTMLUnknownElement {
@@ -30,12 +31,14 @@ impl HTMLUnknownElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLUnknownElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLUnknownElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/htmlvideoelement.rs b/components/script/dom/htmlvideoelement.rs
index eb1b35ee07a..4a288607be7 100644
--- a/components/script/dom/htmlvideoelement.rs
+++ b/components/script/dom/htmlvideoelement.rs
@@ -26,6 +26,7 @@ use euclid::default::Size2D;
use html5ever::{LocalName, Prefix};
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
+use js::rust::HandleObject;
use net_traits::image_cache::{
ImageCache, ImageCacheResult, ImageOrMetadataAvailable, ImageResponse, PendingImageId,
UsePlaceholder,
@@ -84,12 +85,14 @@ impl HTMLVideoElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<HTMLVideoElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(HTMLVideoElement::new_inherited(
local_name, prefix, document,
)),
document,
+ proto,
)
}
diff --git a/components/script/dom/imagedata.rs b/components/script/dom/imagedata.rs
index 43df0951492..42638f40351 100644
--- a/components/script/dom/imagedata.rs
+++ b/components/script/dom/imagedata.rs
@@ -4,7 +4,7 @@
use crate::dom::bindings::codegen::Bindings::ImageDataBinding::ImageDataMethods;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::globalscope::GlobalScope;
use crate::script_runtime::JSContext;
@@ -12,7 +12,7 @@ use dom_struct::dom_struct;
use euclid::default::{Rect, Size2D};
use ipc_channel::ipc::IpcSharedMemory;
use js::jsapi::{Heap, JSObject};
-use js::rust::Runtime;
+use js::rust::{HandleObject, Runtime};
use js::typedarray::{CreateWith, Uint8ClampedArray};
use std::borrow::Cow;
use std::default::Default;
@@ -45,9 +45,9 @@ impl ImageData {
d.resize(len as usize, 0);
let data = CreateWith::Slice(&d[..]);
Uint8ClampedArray::create(*cx, data, js_object.handle_mut()).unwrap();
- Self::new_with_jsobject(global, width, Some(height), js_object.get())
+ Self::new_with_jsobject(global, None, width, Some(height), js_object.get())
} else {
- Self::new_without_jsobject(global, width, height)
+ Self::new_without_jsobject(global, None, width, height)
}
}
}
@@ -55,6 +55,7 @@ impl ImageData {
#[allow(unsafe_code)]
unsafe fn new_with_jsobject(
global: &GlobalScope,
+ proto: Option<HandleObject>,
width: u32,
opt_height: Option<u32>,
jsobject: *mut JSObject,
@@ -90,12 +91,13 @@ impl ImageData {
(*imagedata).data.set(jsobject);
- Ok(reflect_dom_object(imagedata, global))
+ Ok(reflect_dom_object2(imagedata, global, proto))
}
#[allow(unsafe_code)]
unsafe fn new_without_jsobject(
global: &GlobalScope,
+ proto: Option<HandleObject>,
width: u32,
height: u32,
) -> Fallible<DomRoot<ImageData>> {
@@ -117,12 +119,12 @@ impl ImageData {
.unwrap();
(*imagedata).data.set(array.get());
- Ok(reflect_dom_object(imagedata, global))
+ Ok(reflect_dom_object2(imagedata, global, proto))
}
// https://html.spec.whatwg.org/multipage/#pixel-manipulation:dom-imagedata-3
#[allow(unsafe_code, non_snake_case)]
- pub fn Constructor(global: &GlobalScope, width: u32, height: u32) -> Fallible<DomRoot<Self>> {
- unsafe { Self::new_without_jsobject(global, width, height) }
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>, width: u32, height: u32) -> Fallible<DomRoot<Self>> {
+ unsafe { Self::new_without_jsobject(global, proto, width, height) }
}
// https://html.spec.whatwg.org/multipage/#pixel-manipulation:dom-imagedata-4
@@ -130,11 +132,12 @@ impl ImageData {
pub unsafe fn Constructor_(
cx: JSContext,
global: &GlobalScope,
+ proto: Option<HandleObject>,
jsobject: *mut JSObject,
width: u32,
opt_height: Option<u32>,
) -> Fallible<DomRoot<Self>> {
- Self::new_with_jsobject(global, width, opt_height, jsobject)
+ Self::new_with_jsobject(global, proto, width, opt_height, jsobject)
}
/// Nothing must change the array on the JS side while the slice is live.
diff --git a/components/script/dom/inputevent.rs b/components/script/dom/inputevent.rs
index 33a4ed3bbdb..2c1ee15cbae 100644
--- a/components/script/dom/inputevent.rs
+++ b/components/script/dom/inputevent.rs
@@ -5,12 +5,13 @@
use crate::dom::bindings::codegen::Bindings::InputEventBinding::{self, InputEventMethods};
use crate::dom::bindings::codegen::Bindings::UIEventBinding::UIEventBinding::UIEventMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::uievent::UIEvent;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct InputEvent {
@@ -20,8 +21,9 @@ pub struct InputEvent {
}
impl InputEvent {
- pub fn new(
+ fn new(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
can_bubble: bool,
cancelable: bool,
@@ -30,13 +32,14 @@ impl InputEvent {
data: Option<DOMString>,
is_composing: bool,
) -> DomRoot<InputEvent> {
- let ev = reflect_dom_object(
+ let ev = reflect_dom_object2(
Box::new(InputEvent {
uievent: UIEvent::new_inherited(),
data: data,
is_composing: is_composing,
}),
window,
+ proto,
);
ev.uievent
.InitUIEvent(type_, can_bubble, cancelable, view, detail);
@@ -46,11 +49,13 @@ impl InputEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &InputEventBinding::InputEventInit,
) -> Fallible<DomRoot<InputEvent>> {
let event = InputEvent::new(
window,
+ proto,
type_,
init.parent.parent.bubbles,
init.parent.parent.cancelable,
diff --git a/components/script/dom/keyboardevent.rs b/components/script/dom/keyboardevent.rs
index 12668a6c214..a3dd23bfb21 100644
--- a/components/script/dom/keyboardevent.rs
+++ b/components/script/dom/keyboardevent.rs
@@ -8,7 +8,7 @@ use crate::dom::bindings::codegen::Bindings::KeyboardEventBinding::KeyboardEvent
use crate::dom::bindings::codegen::Bindings::UIEventBinding::UIEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -16,6 +16,7 @@ use crate::dom::uievent::UIEvent;
use crate::dom::window::Window;
use dom_struct::dom_struct;
use keyboard_types::{Key, Modifiers};
+use js::rust::HandleObject;
use std::cell::Cell;
unsafe_no_jsmanaged_fields!(Key);
@@ -52,7 +53,11 @@ impl KeyboardEvent {
}
pub fn new_uninitialized(window: &Window) -> DomRoot<KeyboardEvent> {
- reflect_dom_object(Box::new(KeyboardEvent::new_inherited()), window)
+ Self::new_uninitialized_with_proto(window, None)
+ }
+
+ fn new_uninitialized_with_proto(window: &Window, proto: Option<HandleObject>) -> DomRoot<KeyboardEvent> {
+ reflect_dom_object2(Box::new(KeyboardEvent::new_inherited()), window, proto)
}
pub fn new(
@@ -61,6 +66,42 @@ impl KeyboardEvent {
can_bubble: bool,
cancelable: bool,
view: Option<&Window>,
+ detail: i32,
+ key: Key,
+ code: DOMString,
+ location: u32,
+ repeat: bool,
+ is_composing: bool,
+ modifiers: Modifiers,
+ char_code: u32,
+ key_code: u32,
+ ) -> DomRoot<KeyboardEvent> {
+ Self::new_with_proto(
+ window,
+ None,
+ type_,
+ can_bubble,
+ cancelable,
+ view,
+ detail,
+ key,
+ code,
+ location,
+ repeat,
+ is_composing,
+ modifiers,
+ char_code,
+ key_code,
+ )
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: DOMString,
+ can_bubble: bool,
+ cancelable: bool,
+ view: Option<&Window>,
_detail: i32,
key: Key,
code: DOMString,
@@ -71,7 +112,7 @@ impl KeyboardEvent {
char_code: u32,
key_code: u32,
) -> DomRoot<KeyboardEvent> {
- let ev = KeyboardEvent::new_uninitialized(window);
+ let ev = KeyboardEvent::new_uninitialized_with_proto(window, proto);
ev.InitKeyboardEvent(
type_,
can_bubble,
@@ -95,6 +136,7 @@ impl KeyboardEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &KeyboardEventBinding::KeyboardEventInit,
) -> Fallible<DomRoot<KeyboardEvent>> {
@@ -103,8 +145,9 @@ impl KeyboardEvent {
modifiers.set(Modifiers::ALT, init.parent.altKey);
modifiers.set(Modifiers::SHIFT, init.parent.shiftKey);
modifiers.set(Modifiers::META, init.parent.metaKey);
- let event = KeyboardEvent::new(
+ let event = KeyboardEvent::new_with_proto(
window,
+ proto,
type_,
init.parent.parent.parent.bubbles,
init.parent.parent.parent.cancelable,
diff --git a/components/script/dom/mediaelementaudiosourcenode.rs b/components/script/dom/mediaelementaudiosourcenode.rs
index 29737fc3bc0..98f43a063be 100644
--- a/components/script/dom/mediaelementaudiosourcenode.rs
+++ b/components/script/dom/mediaelementaudiosourcenode.rs
@@ -7,11 +7,12 @@ use crate::dom::audionode::AudioNode;
use crate::dom::bindings::codegen::Bindings::MediaElementAudioSourceNodeBinding::MediaElementAudioSourceNodeMethods;
use crate::dom::bindings::codegen::Bindings::MediaElementAudioSourceNodeBinding::MediaElementAudioSourceOptions;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::htmlmediaelement::HTMLMediaElement;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::media_element_source_node::MediaElementSourceNodeMessage;
use servo_media::audio::node::{AudioNodeInit, AudioNodeMessage};
use std::sync::mpsc;
@@ -48,23 +49,33 @@ impl MediaElementAudioSourceNode {
})
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &AudioContext,
media_element: &HTMLMediaElement,
) -> Fallible<DomRoot<MediaElementAudioSourceNode>> {
+ Self::new_with_proto(window, None, context, media_element)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &AudioContext,
+ media_element: &HTMLMediaElement,
+ ) -> Fallible<DomRoot<MediaElementAudioSourceNode>> {
let node = MediaElementAudioSourceNode::new_inherited(context, media_element)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &AudioContext,
options: &MediaElementAudioSourceOptions,
) -> Fallible<DomRoot<MediaElementAudioSourceNode>> {
- MediaElementAudioSourceNode::new(window, context, &*options.mediaElement)
+ MediaElementAudioSourceNode::new_with_proto(window, proto, context, &*options.mediaElement)
}
}
diff --git a/components/script/dom/mediametadata.rs b/components/script/dom/mediametadata.rs
index 3abe0a1a20c..24f9a31120c 100644
--- a/components/script/dom/mediametadata.rs
+++ b/components/script/dom/mediametadata.rs
@@ -6,12 +6,13 @@ use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::MediaMetadataBinding::MediaMetadataInit;
use crate::dom::bindings::codegen::Bindings::MediaMetadataBinding::MediaMetadataMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::DOMString;
use crate::dom::mediasession::MediaSession;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct MediaMetadata {
@@ -34,16 +35,21 @@ impl MediaMetadata {
}
pub fn new(global: &Window, init: &MediaMetadataInit) -> DomRoot<MediaMetadata> {
- reflect_dom_object(Box::new(MediaMetadata::new_inherited(init)), global)
+ Self::new_with_proto(global, None, init)
+ }
+
+ fn new_with_proto(global: &Window, proto: Option<HandleObject>, init: &MediaMetadataInit) -> DomRoot<MediaMetadata> {
+ reflect_dom_object2(Box::new(MediaMetadata::new_inherited(init)), global, proto)
}
/// https://w3c.github.io/mediasession/#dom-mediametadata-mediametadata
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
init: &MediaMetadataInit,
) -> Fallible<DomRoot<MediaMetadata>> {
- Ok(MediaMetadata::new(window, init))
+ Ok(MediaMetadata::new_with_proto(window, proto, init))
}
fn queue_update_metadata_algorithm(&self) {
diff --git a/components/script/dom/mediaquerylistevent.rs b/components/script/dom/mediaquerylistevent.rs
index c34c3d5116f..fdeedc93052 100644
--- a/components/script/dom/mediaquerylistevent.rs
+++ b/components/script/dom/mediaquerylistevent.rs
@@ -7,13 +7,14 @@ use crate::dom::bindings::codegen::Bindings::MediaQueryListEventBinding::MediaQu
use crate::dom::bindings::codegen::Bindings::MediaQueryListEventBinding::MediaQueryListEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
use std::cell::Cell;
@@ -26,8 +27,9 @@ pub struct MediaQueryListEvent {
}
impl MediaQueryListEvent {
- pub fn new_initialized(
+ fn new_initialized(
global: &GlobalScope,
+ proto: Option<HandleObject>,
media: DOMString,
matches: bool,
) -> DomRoot<MediaQueryListEvent> {
@@ -36,7 +38,7 @@ impl MediaQueryListEvent {
media: media,
matches: Cell::new(matches),
});
- reflect_dom_object(ev, global)
+ reflect_dom_object2(ev, global, proto)
}
pub fn new(
@@ -47,7 +49,19 @@ impl MediaQueryListEvent {
media: DOMString,
matches: bool,
) -> DomRoot<MediaQueryListEvent> {
- let ev = MediaQueryListEvent::new_initialized(global, media, matches);
+ Self::new_with_proto(global, None, type_, bubbles, cancelable, media, matches)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ media: DOMString,
+ matches: bool,
+ ) -> DomRoot<MediaQueryListEvent> {
+ let ev = MediaQueryListEvent::new_initialized(global, proto, media, matches);
{
let event = ev.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@@ -58,12 +72,14 @@ impl MediaQueryListEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &MediaQueryListEventInit,
) -> Fallible<DomRoot<MediaQueryListEvent>> {
let global = window.upcast::<GlobalScope>();
- Ok(MediaQueryListEvent::new(
+ Ok(MediaQueryListEvent::new_with_proto(
global,
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/mediastream.rs b/components/script/dom/mediastream.rs
index ff2c8f3a990..812552d3793 100644
--- a/components/script/dom/mediastream.rs
+++ b/components/script/dom/mediastream.rs
@@ -5,7 +5,7 @@
use crate::dom::bindings::cell::{DomRefCell, Ref};
use crate::dom::bindings::codegen::Bindings::MediaStreamBinding::MediaStreamMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::eventtarget::EventTarget;
@@ -13,6 +13,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::mediastreamtrack::MediaStreamTrack;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::streams::registry::MediaStreamId;
use servo_media::streams::MediaStreamType;
@@ -32,7 +33,11 @@ impl MediaStream {
}
pub fn new(global: &GlobalScope) -> DomRoot<MediaStream> {
- reflect_dom_object(Box::new(MediaStream::new_inherited()), global)
+ Self::new_with_proto(global, None)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<MediaStream> {
+ reflect_dom_object2(Box::new(MediaStream::new_inherited()), global, proto)
}
pub fn new_single(
@@ -46,19 +51,20 @@ impl MediaStream {
this
}
- pub fn Constructor(global: &Window) -> Fallible<DomRoot<MediaStream>> {
- Ok(MediaStream::new(&global.global()))
+ pub fn Constructor(global: &Window, proto: Option<HandleObject>) -> Fallible<DomRoot<MediaStream>> {
+ Ok(MediaStream::new_with_proto(&global.global(), proto))
}
- pub fn Constructor_(_: &Window, stream: &MediaStream) -> Fallible<DomRoot<MediaStream>> {
- Ok(stream.Clone())
+ pub fn Constructor_(_: &Window, proto: Option<HandleObject>, stream: &MediaStream) -> Fallible<DomRoot<MediaStream>> {
+ Ok(stream.clone_with_proto(proto))
}
pub fn Constructor__(
global: &Window,
+ proto: Option<HandleObject>,
tracks: Vec<DomRoot<MediaStreamTrack>>,
) -> Fallible<DomRoot<MediaStream>> {
- let new = MediaStream::new(&global.global());
+ let new = MediaStream::new_with_proto(&global.global(), proto);
for track in tracks {
// this is quadratic, but shouldn't matter much
// if this becomes a problem we can use a hash map
@@ -132,7 +138,13 @@ impl MediaStreamMethods for MediaStream {
/// https://w3c.github.io/mediacapture-main/#dom-mediastream-clone
fn Clone(&self) -> DomRoot<MediaStream> {
- let new = MediaStream::new(&self.global());
+ self.clone_with_proto(None)
+ }
+}
+
+impl MediaStream {
+ fn clone_with_proto(&self, proto: Option<HandleObject>) -> DomRoot<MediaStream> {
+ let new = MediaStream::new_with_proto(&self.global(), proto);
for track in &*self.tracks.borrow() {
new.add_track(&track)
}
diff --git a/components/script/dom/mediastreamaudiodestinationnode.rs b/components/script/dom/mediastreamaudiodestinationnode.rs
index d402f07b590..b42fb9d89f8 100644
--- a/components/script/dom/mediastreamaudiodestinationnode.rs
+++ b/components/script/dom/mediastreamaudiodestinationnode.rs
@@ -11,11 +11,12 @@ use crate::dom::bindings::codegen::Bindings::AudioNodeBinding::{
use crate::dom::bindings::codegen::Bindings::MediaStreamAudioDestinationNodeBinding::MediaStreamAudioDestinationNodeMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::mediastream::MediaStream;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::node::AudioNodeInit;
use servo_media::streams::MediaStreamType;
use servo_media::ServoMedia;
@@ -53,23 +54,33 @@ impl MediaStreamAudioDestinationNode {
})
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &AudioContext,
options: &AudioNodeOptions,
) -> Fallible<DomRoot<MediaStreamAudioDestinationNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &AudioContext,
+ options: &AudioNodeOptions,
+ ) -> Fallible<DomRoot<MediaStreamAudioDestinationNode>> {
let node = MediaStreamAudioDestinationNode::new_inherited(context, options)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &AudioContext,
options: &AudioNodeOptions,
) -> Fallible<DomRoot<MediaStreamAudioDestinationNode>> {
- MediaStreamAudioDestinationNode::new(window, context, options)
+ MediaStreamAudioDestinationNode::new_with_proto(window, proto, context, options)
}
}
diff --git a/components/script/dom/mediastreamaudiosourcenode.rs b/components/script/dom/mediastreamaudiosourcenode.rs
index f6925af75c3..4137b0c2896 100644
--- a/components/script/dom/mediastreamaudiosourcenode.rs
+++ b/components/script/dom/mediastreamaudiosourcenode.rs
@@ -9,11 +9,12 @@ use crate::dom::bindings::codegen::Bindings::MediaStreamAudioSourceNodeBinding::
};
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::mediastream::MediaStream;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::node::AudioNodeInit;
use servo_media::streams::MediaStreamType;
@@ -48,23 +49,33 @@ impl MediaStreamAudioSourceNode {
})
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &AudioContext,
stream: &MediaStream,
) -> Fallible<DomRoot<MediaStreamAudioSourceNode>> {
+ Self::new_with_proto(window, None, context, stream)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &AudioContext,
+ stream: &MediaStream,
+ ) -> Fallible<DomRoot<MediaStreamAudioSourceNode>> {
let node = MediaStreamAudioSourceNode::new_inherited(context, stream)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &AudioContext,
options: &MediaStreamAudioSourceOptions,
) -> Fallible<DomRoot<MediaStreamAudioSourceNode>> {
- MediaStreamAudioSourceNode::new(window, context, &options.mediaStream)
+ MediaStreamAudioSourceNode::new_with_proto(window, proto, context, &options.mediaStream)
}
}
diff --git a/components/script/dom/mediastreamtrackaudiosourcenode.rs b/components/script/dom/mediastreamtrackaudiosourcenode.rs
index 6399ee5f6a4..387ad20d741 100644
--- a/components/script/dom/mediastreamtrackaudiosourcenode.rs
+++ b/components/script/dom/mediastreamtrackaudiosourcenode.rs
@@ -7,11 +7,12 @@ use crate::dom::audionode::AudioNode;
use crate::dom::bindings::codegen::Bindings::MediaStreamTrackAudioSourceNodeBinding::MediaStreamTrackAudioSourceOptions;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::mediastreamtrack::MediaStreamTrack;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::node::AudioNodeInit;
#[dom_struct]
@@ -39,22 +40,32 @@ impl MediaStreamTrackAudioSourceNode {
})
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &AudioContext,
track: &MediaStreamTrack,
) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
+ Self::new_with_proto(window, None, context, track)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &AudioContext,
+ track: &MediaStreamTrack,
+ ) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
let node = MediaStreamTrackAudioSourceNode::new_inherited(context, track)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &AudioContext,
options: &MediaStreamTrackAudioSourceOptions,
) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
- MediaStreamTrackAudioSourceNode::new(window, context, &options.mediaStreamTrack)
+ MediaStreamTrackAudioSourceNode::new_with_proto(window, proto, context, &options.mediaStreamTrack)
}
}
diff --git a/components/script/dom/messagechannel.rs b/components/script/dom/messagechannel.rs
index 3075dac3088..f3df61924a5 100644
--- a/components/script/dom/messagechannel.rs
+++ b/components/script/dom/messagechannel.rs
@@ -3,11 +3,12 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use crate::dom::bindings::codegen::Bindings::MessageChannelBinding::MessageChannelMethods;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::globalscope::GlobalScope;
use crate::dom::messageport::MessagePort;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct MessageChannel {
@@ -19,12 +20,12 @@ pub struct MessageChannel {
impl MessageChannel {
/// <https://html.spec.whatwg.org/multipage/#dom-messagechannel>
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope) -> DomRoot<MessageChannel> {
- MessageChannel::new(global)
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<MessageChannel> {
+ MessageChannel::new(global, proto)
}
/// <https://html.spec.whatwg.org/multipage/#dom-messagechannel>
- pub fn new(incumbent: &GlobalScope) -> DomRoot<MessageChannel> {
+ fn new(incumbent: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<MessageChannel> {
// Step 1
let port1 = MessagePort::new(&incumbent);
@@ -41,9 +42,10 @@ impl MessageChannel {
);
// Steps 4-6
- reflect_dom_object(
+ reflect_dom_object2(
Box::new(MessageChannel::new_inherited(&*port1, &*port2)),
incumbent,
+ proto,
)
}
diff --git a/components/script/dom/messageevent.rs b/components/script/dom/messageevent.rs
index c00e2bc5dec..9c2428912f8 100644
--- a/components/script/dom/messageevent.rs
+++ b/components/script/dom/messageevent.rs
@@ -9,7 +9,7 @@ use crate::dom::bindings::codegen::Bindings::MessageEventBinding::MessageEventMe
use crate::dom::bindings::codegen::UnionTypes::WindowProxyOrMessagePortOrServiceWorker;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::RootedTraceableBox;
@@ -24,7 +24,7 @@ use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use js::jsapi::Heap;
use js::jsval::JSVal;
-use js::rust::HandleValue;
+use js::rust::{HandleObject, HandleValue};
use servo_atoms::Atom;
#[unrooted_must_root_lint::must_root]
@@ -91,8 +91,13 @@ impl MessageEvent {
}
pub fn new_uninitialized(global: &GlobalScope) -> DomRoot<MessageEvent> {
+ Self::new_uninitialized_with_proto(global, None)
+ }
+
+ fn new_uninitialized_with_proto(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<MessageEvent> {
MessageEvent::new_initialized(
global,
+ proto,
HandleValue::undefined(),
DOMString::new(),
None,
@@ -101,8 +106,9 @@ impl MessageEvent {
)
}
- pub fn new_initialized(
+ fn new_initialized(
global: &GlobalScope,
+ proto: Option<HandleObject>,
data: HandleValue,
origin: DOMString,
source: Option<&WindowProxyOrMessagePortOrServiceWorker>,
@@ -115,7 +121,7 @@ impl MessageEvent {
lastEventId,
ports,
));
- let ev = reflect_dom_object(ev, global);
+ let ev = reflect_dom_object2(ev, global, proto);
ev.data.set(data.get());
ev
@@ -132,7 +138,33 @@ impl MessageEvent {
lastEventId: DOMString,
ports: Vec<DomRoot<MessagePort>>,
) -> DomRoot<MessageEvent> {
- let ev = MessageEvent::new_initialized(global, data, origin, source, lastEventId, ports);
+ Self::new_with_proto(
+ global,
+ None,
+ type_,
+ bubbles,
+ cancelable,
+ data,
+ origin,
+ source,
+ lastEventId,
+ ports,
+ )
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ data: HandleValue,
+ origin: DOMString,
+ source: Option<&WindowProxyOrMessagePortOrServiceWorker>,
+ lastEventId: DOMString,
+ ports: Vec<DomRoot<MessagePort>>,
+ ) -> DomRoot<MessageEvent> {
+ let ev = MessageEvent::new_initialized(global, proto, data, origin, source, lastEventId, ports);
{
let event = ev.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@@ -142,11 +174,13 @@ impl MessageEvent {
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
type_: DOMString,
init: RootedTraceableBox<MessageEventBinding::MessageEventInit>,
) -> Fallible<DomRoot<MessageEvent>> {
- let ev = MessageEvent::new(
+ let ev = MessageEvent::new_with_proto(
global,
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs
index d5fbe6b15e8..97399e5ea07 100644
--- a/components/script/dom/mouseevent.rs
+++ b/components/script/dom/mouseevent.rs
@@ -8,7 +8,7 @@ use crate::dom::bindings::codegen::Bindings::MouseEventBinding::MouseEventMethod
use crate::dom::bindings::codegen::Bindings::UIEventBinding::UIEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::{Event, EventBubbles, EventCancelable};
@@ -18,6 +18,7 @@ use crate::dom::uievent::UIEvent;
use crate::dom::window::Window;
use dom_struct::dom_struct;
use euclid::default::Point2D;
+use js::rust::HandleObject;
use servo_config::pref;
use std::cell::Cell;
use std::default::Default;
@@ -71,7 +72,11 @@ impl MouseEvent {
}
pub fn new_uninitialized(window: &Window) -> DomRoot<MouseEvent> {
- reflect_dom_object(Box::new(MouseEvent::new_inherited()), window)
+ Self::new_uninitialized_with_proto(window, None)
+ }
+
+ fn new_uninitialized_with_proto(window: &Window, proto: Option<HandleObject>) -> DomRoot<MouseEvent> {
+ reflect_dom_object2(Box::new(MouseEvent::new_inherited()), window, proto)
}
pub fn new(
@@ -94,7 +99,51 @@ impl MouseEvent {
related_target: Option<&EventTarget>,
point_in_target: Option<Point2D<f32>>,
) -> DomRoot<MouseEvent> {
- let ev = MouseEvent::new_uninitialized(window);
+ Self::new_with_proto(
+ window,
+ None,
+ type_,
+ can_bubble,
+ cancelable,
+ view,
+ detail,
+ screen_x,
+ screen_y,
+ client_x,
+ client_y,
+ ctrl_key,
+ alt_key,
+ shift_key,
+ meta_key,
+ button,
+ buttons,
+ related_target,
+ point_in_target,
+ )
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: DOMString,
+ can_bubble: EventBubbles,
+ cancelable: EventCancelable,
+ view: Option<&Window>,
+ detail: i32,
+ screen_x: i32,
+ screen_y: i32,
+ client_x: i32,
+ client_y: i32,
+ ctrl_key: bool,
+ alt_key: bool,
+ shift_key: bool,
+ meta_key: bool,
+ button: i16,
+ buttons: u16,
+ related_target: Option<&EventTarget>,
+ point_in_target: Option<Point2D<f32>>,
+ ) -> DomRoot<MouseEvent> {
+ let ev = MouseEvent::new_uninitialized_with_proto(window, proto);
ev.InitMouseEvent(
type_,
bool::from(can_bubble),
@@ -123,13 +172,15 @@ impl MouseEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &MouseEventBinding::MouseEventInit,
) -> Fallible<DomRoot<MouseEvent>> {
let bubbles = EventBubbles::from(init.parent.parent.parent.bubbles);
let cancelable = EventCancelable::from(init.parent.parent.parent.cancelable);
- let event = MouseEvent::new(
+ let event = MouseEvent::new_with_proto(
window,
+ proto,
type_,
bubbles,
cancelable,
diff --git a/components/script/dom/mutationobserver.rs b/components/script/dom/mutationobserver.rs
index e4141af14a6..c822fd9a290 100644
--- a/components/script/dom/mutationobserver.rs
+++ b/components/script/dom/mutationobserver.rs
@@ -8,7 +8,7 @@ use crate::dom::bindings::codegen::Bindings::MutationObserverBinding::MutationCa
use crate::dom::bindings::codegen::Bindings::MutationObserverBinding::MutationObserverBinding::MutationObserverMethods;
use crate::dom::bindings::codegen::Bindings::MutationObserverBinding::MutationObserverInit;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::mutationrecord::MutationRecord;
@@ -18,6 +18,7 @@ use crate::microtask::Microtask;
use crate::script_thread::ScriptThread;
use dom_struct::dom_struct;
use html5ever::{LocalName, Namespace};
+use js::rust::HandleObject;
use std::rc::Rc;
#[dom_struct]
@@ -64,9 +65,9 @@ pub struct ObserverOptions {
}
impl MutationObserver {
- fn new(global: &Window, callback: Rc<MutationCallback>) -> DomRoot<MutationObserver> {
+ fn new_with_proto(global: &Window, proto: Option<HandleObject>, callback: Rc<MutationCallback>) -> DomRoot<MutationObserver> {
let boxed_observer = Box::new(MutationObserver::new_inherited(callback));
- reflect_dom_object(boxed_observer, global)
+ reflect_dom_object2(boxed_observer, global, proto)
}
fn new_inherited(callback: Rc<MutationCallback>) -> MutationObserver {
@@ -81,10 +82,11 @@ impl MutationObserver {
#[allow(non_snake_case)]
pub fn Constructor(
global: &Window,
+ proto: Option<HandleObject>,
callback: Rc<MutationCallback>,
) -> Fallible<DomRoot<MutationObserver>> {
global.set_exists_mut_observer();
- let observer = MutationObserver::new(global, callback);
+ let observer = MutationObserver::new_with_proto(global, proto, callback);
ScriptThread::add_mutation_observer(&*observer);
Ok(observer)
}
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index a7186806785..4908fc65e9b 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -26,7 +26,7 @@ use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::{Castable, CharacterDataTypeId, ElementTypeId};
use crate::dom::bindings::inheritance::{EventTargetTypeId, HTMLElementTypeId, NodeTypeId};
use crate::dom::bindings::inheritance::{SVGElementTypeId, SVGGraphicsElementTypeId, TextTypeId};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, DomObjectWrap};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, DomObjectWrap};
use crate::dom::bindings::root::{Dom, DomRoot, DomSlice, LayoutDom, MutNullableDom};
use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::bindings::xmlname::namespace_from_domstring;
@@ -70,6 +70,7 @@ use dom_struct::dom_struct;
use euclid::default::{Point2D, Rect, Size2D, Vector2D};
use html5ever::{Namespace, Prefix, QualName};
use js::jsapi::JSObject;
+use js::rust::HandleObject;
use libc::{self, c_void, uintptr_t};
use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use msg::constellation_msg::{BrowsingContextId, PipelineId};
@@ -1756,8 +1757,15 @@ impl Node {
where
N: DerivedFrom<Node> + DomObject + DomObjectWrap,
{
+ Self::reflect_node_with_proto(node, document, None)
+ }
+
+ pub fn reflect_node_with_proto<N>(node: Box<N>, document: &Document, proto: Option<HandleObject>) -> DomRoot<N>
+ where
+ N: DerivedFrom<Node> + DomObject + DomObjectWrap,
+ {
let window = document.window();
- reflect_dom_object(node, window)
+ reflect_dom_object2(node, window, proto)
}
pub fn new_inherited(doc: &Document) -> Node {
@@ -2290,6 +2298,7 @@ impl Node {
&document,
ElementCreator::ScriptCreated,
CustomElementCreationMode::Asynchronous,
+ None,
);
DomRoot::upcast::<Node>(element)
},
diff --git a/components/script/dom/offlineaudiocompletionevent.rs b/components/script/dom/offlineaudiocompletionevent.rs
index 5162f4e9671..ae77c5e96d3 100644
--- a/components/script/dom/offlineaudiocompletionevent.rs
+++ b/components/script/dom/offlineaudiocompletionevent.rs
@@ -8,12 +8,13 @@ use crate::dom::bindings::codegen::Bindings::OfflineAudioCompletionEventBinding:
use crate::dom::bindings::codegen::Bindings::OfflineAudioCompletionEventBinding::OfflineAudioCompletionEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::{Event, EventBubbles, EventCancelable};
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -37,8 +38,19 @@ impl OfflineAudioCompletionEvent {
cancelable: EventCancelable,
rendered_buffer: &AudioBuffer,
) -> DomRoot<OfflineAudioCompletionEvent> {
+ Self::new_with_proto(window, None, type_, bubbles, cancelable, rendered_buffer)
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: EventBubbles,
+ cancelable: EventCancelable,
+ rendered_buffer: &AudioBuffer,
+ ) -> DomRoot<OfflineAudioCompletionEvent> {
let event = Box::new(OfflineAudioCompletionEvent::new_inherited(rendered_buffer));
- let ev = reflect_dom_object(event, window);
+ let ev = reflect_dom_object2(event, window, proto);
{
let event = ev.upcast::<Event>();
event.init_event(type_, bool::from(bubbles), bool::from(cancelable));
@@ -49,13 +61,15 @@ impl OfflineAudioCompletionEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &OfflineAudioCompletionEventInit,
) -> Fallible<DomRoot<OfflineAudioCompletionEvent>> {
let bubbles = EventBubbles::from(init.parent.bubbles);
let cancelable = EventCancelable::from(init.parent.cancelable);
- Ok(OfflineAudioCompletionEvent::new(
+ Ok(OfflineAudioCompletionEvent::new_with_proto(
window,
+ proto,
Atom::from(type_),
bubbles,
cancelable,
diff --git a/components/script/dom/offlineaudiocontext.rs b/components/script/dom/offlineaudiocontext.rs
index 798abe76f7d..243020f213e 100644
--- a/components/script/dom/offlineaudiocontext.rs
+++ b/components/script/dom/offlineaudiocontext.rs
@@ -13,7 +13,7 @@ use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::num::Finite;
use crate::dom::bindings::refcounted::Trusted;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::DomRoot;
use crate::dom::event::{Event, EventBubbles, EventCancelable};
use crate::dom::offlineaudiocompletionevent::OfflineAudioCompletionEvent;
@@ -22,6 +22,7 @@ use crate::dom::window::Window;
use crate::realms::InRealm;
use crate::task_source::TaskSource;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use msg::constellation_msg::PipelineId;
use servo_media::audio::context::OfflineAudioContextOptions as ServoMediaOfflineAudioContextOptions;
use std::cell::Cell;
@@ -70,6 +71,7 @@ impl OfflineAudioContext {
#[allow(unrooted_must_root)]
fn new(
window: &Window,
+ proto: Option<HandleObject>,
channel_count: u32,
length: u32,
sample_rate: f32,
@@ -85,15 +87,17 @@ impl OfflineAudioContext {
let pipeline_id = window.pipeline_id();
let context =
OfflineAudioContext::new_inherited(channel_count, length, sample_rate, pipeline_id);
- Ok(reflect_dom_object(Box::new(context), window))
+ Ok(reflect_dom_object2(Box::new(context), window, proto))
}
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
options: &OfflineAudioContextOptions,
) -> Fallible<DomRoot<OfflineAudioContext>> {
OfflineAudioContext::new(
window,
+ proto,
options.numberOfChannels,
options.length,
*options.sampleRate,
@@ -102,11 +106,12 @@ impl OfflineAudioContext {
pub fn Constructor_(
window: &Window,
+ proto: Option<HandleObject>,
number_of_channels: u32,
length: u32,
sample_rate: Finite<f32>,
) -> Fallible<DomRoot<OfflineAudioContext>> {
- OfflineAudioContext::new(window, number_of_channels, length, *sample_rate)
+ OfflineAudioContext::new(window, proto, number_of_channels, length, *sample_rate)
}
}
diff --git a/components/script/dom/offscreencanvas.rs b/components/script/dom/offscreencanvas.rs
index b381c245cfa..c607099e04c 100644
--- a/components/script/dom/offscreencanvas.rs
+++ b/components/script/dom/offscreencanvas.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::OffscreenCanvasBinding::{
OffscreenCanvasMethods, OffscreenRenderingContext,
};
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::reflector::DomObject;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
@@ -20,7 +20,7 @@ use canvas_traits::canvas::{CanvasMsg, FromScriptMsg};
use dom_struct::dom_struct;
use euclid::default::Size2D;
use ipc_channel::ipc::IpcSharedMemory;
-use js::rust::HandleValue;
+use js::rust::{HandleObject, HandleValue};
use profile_traits::ipc;
use std::cell::Cell;
@@ -56,25 +56,28 @@ impl OffscreenCanvas {
}
}
- pub fn new(
+ fn new(
global: &GlobalScope,
+ proto: Option<HandleObject>,
width: u64,
height: u64,
placeholder: Option<&HTMLCanvasElement>,
) -> DomRoot<OffscreenCanvas> {
- reflect_dom_object(
+ reflect_dom_object2(
Box::new(OffscreenCanvas::new_inherited(width, height, placeholder)),
global,
+ proto,
)
}
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
width: u64,
height: u64,
) -> Fallible<DomRoot<OffscreenCanvas>> {
- let offscreencanvas = OffscreenCanvas::new(global, width, height, None);
+ let offscreencanvas = OffscreenCanvas::new(global, proto, width, height, None);
Ok(offscreencanvas)
}
diff --git a/components/script/dom/oscillatornode.rs b/components/script/dom/oscillatornode.rs
index 948603ca6e2..febc8f95d01 100644
--- a/components/script/dom/oscillatornode.rs
+++ b/components/script/dom/oscillatornode.rs
@@ -14,10 +14,11 @@ use crate::dom::bindings::codegen::Bindings::OscillatorNodeBinding::{
OscillatorOptions, OscillatorType,
};
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::node::{AudioNodeInit, AudioNodeMessage};
use servo_media::audio::oscillator_node::OscillatorNodeMessage;
use servo_media::audio::oscillator_node::OscillatorNodeOptions as ServoMediaOscillatorOptions;
@@ -81,23 +82,33 @@ impl OscillatorNode {
})
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &BaseAudioContext,
options: &OscillatorOptions,
) -> Fallible<DomRoot<OscillatorNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &BaseAudioContext,
+ options: &OscillatorOptions,
+ ) -> Fallible<DomRoot<OscillatorNode>> {
let node = OscillatorNode::new_inherited(window, context, options)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &BaseAudioContext,
options: &OscillatorOptions,
) -> Fallible<DomRoot<OscillatorNode>> {
- OscillatorNode::new(window, context, options)
+ OscillatorNode::new_with_proto(window, proto, context, options)
}
}
diff --git a/components/script/dom/pagetransitionevent.rs b/components/script/dom/pagetransitionevent.rs
index 5d11fb62540..8a9ec07978f 100644
--- a/components/script/dom/pagetransitionevent.rs
+++ b/components/script/dom/pagetransitionevent.rs
@@ -7,12 +7,13 @@ use crate::dom::bindings::codegen::Bindings::PageTransitionEventBinding;
use crate::dom::bindings::codegen::Bindings::PageTransitionEventBinding::PageTransitionEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
use std::cell::Cell;
@@ -31,8 +32,8 @@ impl PageTransitionEvent {
}
}
- pub fn new_uninitialized(window: &Window) -> DomRoot<PageTransitionEvent> {
- reflect_dom_object(Box::new(PageTransitionEvent::new_inherited()), window)
+ fn new_uninitialized(window: &Window, proto: Option<HandleObject>) -> DomRoot<PageTransitionEvent> {
+ reflect_dom_object2(Box::new(PageTransitionEvent::new_inherited()), window, proto)
}
pub fn new(
@@ -42,7 +43,18 @@ impl PageTransitionEvent {
cancelable: bool,
persisted: bool,
) -> DomRoot<PageTransitionEvent> {
- let ev = PageTransitionEvent::new_uninitialized(window);
+ Self::new_with_proto(window, None, type_, bubbles, cancelable, persisted)
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ persisted: bool,
+ ) -> DomRoot<PageTransitionEvent> {
+ let ev = PageTransitionEvent::new_uninitialized(window, proto);
ev.persisted.set(persisted);
{
let event = ev.upcast::<Event>();
@@ -54,11 +66,13 @@ impl PageTransitionEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &PageTransitionEventBinding::PageTransitionEventInit,
) -> Fallible<DomRoot<PageTransitionEvent>> {
- Ok(PageTransitionEvent::new(
+ Ok(PageTransitionEvent::new_with_proto(
window,
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/pannernode.rs b/components/script/dom/pannernode.rs
index 98b9226287b..22d411878d9 100644
--- a/components/script/dom/pannernode.rs
+++ b/components/script/dom/pannernode.rs
@@ -20,10 +20,11 @@ use crate::dom::bindings::codegen::Bindings::PannerNodeBinding::{
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::num::Finite;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::node::{AudioNodeInit, AudioNodeMessage};
use servo_media::audio::panner_node::PannerNodeMessage;
use servo_media::audio::panner_node::{DistanceModel, PannerNodeOptions, PanningModel};
@@ -170,23 +171,33 @@ impl PannerNode {
})
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &BaseAudioContext,
options: &PannerOptions,
) -> Fallible<DomRoot<PannerNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &BaseAudioContext,
+ options: &PannerOptions,
+ ) -> Fallible<DomRoot<PannerNode>> {
let node = PannerNode::new_inherited(window, context, options)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &BaseAudioContext,
options: &PannerOptions,
) -> Fallible<DomRoot<PannerNode>> {
- PannerNode::new(window, context, options)
+ PannerNode::new_with_proto(window, proto, context, options)
}
}
diff --git a/components/script/dom/performanceobserver.rs b/components/script/dom/performanceobserver.rs
index 8d689a35785..c3349dd3d87 100644
--- a/components/script/dom/performanceobserver.rs
+++ b/components/script/dom/performanceobserver.rs
@@ -9,7 +9,7 @@ use crate::dom::bindings::codegen::Bindings::PerformanceObserverBinding::Perform
use crate::dom::bindings::codegen::Bindings::PerformanceObserverBinding::PerformanceObserverInit;
use crate::dom::bindings::codegen::Bindings::PerformanceObserverBinding::PerformanceObserverMethods;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::console::Console;
@@ -20,6 +20,7 @@ use crate::dom::performanceobserverentrylist::PerformanceObserverEntryList;
use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use js::jsval::JSVal;
+use js::rust::HandleObject;
use std::cell::Cell;
use std::rc::Rc;
@@ -63,22 +64,32 @@ impl PerformanceObserver {
}
}
- #[allow(unrooted_must_root)]
pub fn new(
global: &GlobalScope,
callback: Rc<PerformanceObserverCallback>,
entries: DOMPerformanceEntryList,
) -> DomRoot<PerformanceObserver> {
+ Self::new_with_proto(global, None, callback, entries)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ callback: Rc<PerformanceObserverCallback>,
+ entries: DOMPerformanceEntryList,
+ ) -> DomRoot<PerformanceObserver> {
let observer = PerformanceObserver::new_inherited(callback, DomRefCell::new(entries));
- reflect_dom_object(Box::new(observer), global)
+ reflect_dom_object2(Box::new(observer), global, proto)
}
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
callback: Rc<PerformanceObserverCallback>,
) -> Fallible<DomRoot<PerformanceObserver>> {
- Ok(PerformanceObserver::new(global, callback, Vec::new()))
+ Ok(PerformanceObserver::new_with_proto(global, proto, callback, Vec::new()))
}
/// Buffer a new performance entry.
diff --git a/components/script/dom/popstateevent.rs b/components/script/dom/popstateevent.rs
index 851064df389..b6095389791 100644
--- a/components/script/dom/popstateevent.rs
+++ b/components/script/dom/popstateevent.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::PopStateEventBinding;
use crate::dom::bindings::codegen::Bindings::PopStateEventBinding::PopStateEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::RootedTraceableBox;
@@ -18,7 +18,7 @@ use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use js::jsapi::Heap;
use js::jsval::JSVal;
-use js::rust::HandleValue;
+use js::rust::{HandleObject, HandleValue};
use servo_atoms::Atom;
// https://html.spec.whatwg.org/multipage/#the-popstateevent-interface
@@ -37,18 +37,19 @@ impl PopStateEvent {
}
}
- pub fn new_uninitialized(window: &Window) -> DomRoot<PopStateEvent> {
- reflect_dom_object(Box::new(PopStateEvent::new_inherited()), window)
+ fn new_uninitialized(window: &Window, proto: Option<HandleObject>) -> DomRoot<PopStateEvent> {
+ reflect_dom_object2(Box::new(PopStateEvent::new_inherited()), window, proto)
}
- pub fn new(
+ fn new(
window: &Window,
+ proto: Option<HandleObject>,
type_: Atom,
bubbles: bool,
cancelable: bool,
state: HandleValue,
) -> DomRoot<PopStateEvent> {
- let ev = PopStateEvent::new_uninitialized(window);
+ let ev = PopStateEvent::new_uninitialized(window, proto);
ev.state.set(state.get());
{
let event = ev.upcast::<Event>();
@@ -60,11 +61,13 @@ impl PopStateEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: RootedTraceableBox<PopStateEventBinding::PopStateEventInit>,
) -> Fallible<DomRoot<PopStateEvent>> {
Ok(PopStateEvent::new(
window,
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
@@ -73,7 +76,7 @@ impl PopStateEvent {
}
pub fn dispatch_jsval(target: &EventTarget, window: &Window, state: HandleValue) {
- let event = PopStateEvent::new(window, atom!("popstate"), false, false, state);
+ let event = PopStateEvent::new(window, None, atom!("popstate"), false, false, state);
event.upcast::<Event>().fire(target);
}
}
diff --git a/components/script/dom/progressevent.rs b/components/script/dom/progressevent.rs
index 32e6917a15d..e70d3e1db07 100644
--- a/components/script/dom/progressevent.rs
+++ b/components/script/dom/progressevent.rs
@@ -7,12 +7,13 @@ use crate::dom::bindings::codegen::Bindings::ProgressEventBinding;
use crate::dom::bindings::codegen::Bindings::ProgressEventBinding::ProgressEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::{Event, EventBubbles, EventCancelable};
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -32,6 +33,7 @@ impl ProgressEvent {
total: total,
}
}
+
pub fn new(
global: &GlobalScope,
type_: Atom,
@@ -41,13 +43,36 @@ impl ProgressEvent {
loaded: u64,
total: u64,
) -> DomRoot<ProgressEvent> {
- let ev = reflect_dom_object(
+ Self::new_with_proto(
+ global,
+ None,
+ type_,
+ can_bubble,
+ cancelable,
+ length_computable,
+ loaded,
+ total,
+ )
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ can_bubble: EventBubbles,
+ cancelable: EventCancelable,
+ length_computable: bool,
+ loaded: u64,
+ total: u64,
+ ) -> DomRoot<ProgressEvent> {
+ let ev = reflect_dom_object2(
Box::new(ProgressEvent::new_inherited(
length_computable,
loaded,
total,
)),
global,
+ proto,
);
{
let event = ev.upcast::<Event>();
@@ -59,13 +84,15 @@ impl ProgressEvent {
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &ProgressEventBinding::ProgressEventInit,
) -> Fallible<DomRoot<ProgressEvent>> {
let bubbles = EventBubbles::from(init.parent.bubbles);
let cancelable = EventCancelable::from(init.parent.cancelable);
- let ev = ProgressEvent::new(
+ let ev = ProgressEvent::new_with_proto(
global,
+ proto,
Atom::from(type_),
bubbles,
cancelable,
diff --git a/components/script/dom/promiserejectionevent.rs b/components/script/dom/promiserejectionevent.rs
index 92d67725ca0..c136cf8d46a 100644
--- a/components/script/dom/promiserejectionevent.rs
+++ b/components/script/dom/promiserejectionevent.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::PromiseRejectionEventBinding;
use crate::dom::bindings::codegen::Bindings::PromiseRejectionEventBinding::PromiseRejectionEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::RootedTraceableBox;
@@ -18,7 +18,7 @@ use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use js::jsapi::Heap;
use js::jsval::JSVal;
-use js::rust::HandleValue;
+use js::rust::{HandleObject, HandleValue};
use servo_atoms::Atom;
use std::rc::Rc;
@@ -41,7 +41,6 @@ impl PromiseRejectionEvent {
}
}
- #[allow(unrooted_must_root)]
pub fn new(
global: &GlobalScope,
type_: Atom,
@@ -50,9 +49,23 @@ impl PromiseRejectionEvent {
promise: Rc<Promise>,
reason: HandleValue,
) -> DomRoot<Self> {
- let ev = reflect_dom_object(
+ Self::new_with_proto(global, None, type_, bubbles, cancelable, promise, reason)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: EventBubbles,
+ cancelable: EventCancelable,
+ promise: Rc<Promise>,
+ reason: HandleValue,
+ ) -> DomRoot<Self> {
+ let ev = reflect_dom_object2(
Box::new(PromiseRejectionEvent::new_inherited(promise)),
global,
+ proto,
);
{
@@ -67,6 +80,7 @@ impl PromiseRejectionEvent {
#[allow(unrooted_must_root, non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
type_: DOMString,
init: RootedTraceableBox<PromiseRejectionEventBinding::PromiseRejectionEventInit>,
) -> Fallible<DomRoot<Self>> {
@@ -75,8 +89,9 @@ impl PromiseRejectionEvent {
let bubbles = EventBubbles::from(init.parent.bubbles);
let cancelable = EventCancelable::from(init.parent.cancelable);
- let event = PromiseRejectionEvent::new(
+ let event = PromiseRejectionEvent::new_with_proto(
global,
+ proto,
Atom::from(type_),
bubbles,
cancelable,
diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs
index b48e186bc3f..e5d731702ad 100644
--- a/components/script/dom/range.rs
+++ b/components/script/dom/range.rs
@@ -14,7 +14,7 @@ use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::inheritance::{CharacterDataTypeId, NodeTypeId};
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot, MutDom};
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::JSTraceable;
@@ -30,6 +30,7 @@ use crate::dom::text::Text;
use crate::dom::window::Window;
use dom_struct::dom_struct;
use js::jsapi::JSTracer;
+use js::rust::HandleObject;
use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use std::cell::{Cell, UnsafeCell};
use std::cmp::{Ord, Ordering, PartialEq, PartialOrd};
@@ -66,9 +67,9 @@ impl Range {
}
}
- pub fn new_with_doc(document: &Document) -> DomRoot<Range> {
+ pub fn new_with_doc(document: &Document, proto: Option<HandleObject>) -> DomRoot<Range> {
let root = document.upcast();
- Range::new(document, root, 0, root, 0)
+ Range::new_with_proto(document, proto, root, 0, root, 0)
}
pub fn new(
@@ -78,7 +79,25 @@ impl Range {
end_container: &Node,
end_offset: u32,
) -> DomRoot<Range> {
- let range = reflect_dom_object(
+ Self::new_with_proto(
+ document,
+ None,
+ start_container,
+ start_offset,
+ end_container,
+ end_offset,
+ )
+ }
+
+ fn new_with_proto(
+ document: &Document,
+ proto: Option<HandleObject>,
+ start_container: &Node,
+ start_offset: u32,
+ end_container: &Node,
+ end_offset: u32,
+ ) -> DomRoot<Range> {
+ let range = reflect_dom_object2(
Box::new(Range::new_inherited(
start_container,
start_offset,
@@ -86,6 +105,7 @@ impl Range {
end_offset,
)),
document.window(),
+ proto,
);
start_container.ranges().push(WeakRef::new(&range));
if start_container != end_container {
@@ -96,9 +116,9 @@ impl Range {
// https://dom.spec.whatwg.org/#dom-range
#[allow(non_snake_case)]
- pub fn Constructor(window: &Window) -> Fallible<DomRoot<Range>> {
+ pub fn Constructor(window: &Window, proto: Option<HandleObject>) -> Fallible<DomRoot<Range>> {
let document = window.Document();
- Ok(Range::new_with_doc(&document))
+ Ok(Range::new_with_doc(&document, proto))
}
// https://dom.spec.whatwg.org/#contained
diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs
index 7bd89875b6f..1ddf1c7742a 100644
--- a/components/script/dom/request.rs
+++ b/components/script/dom/request.rs
@@ -16,7 +16,7 @@ use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestMethods;
use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestMode;
use crate::dom::bindings::codegen::Bindings::RequestBinding::RequestRedirect;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::{ByteString, DOMString, USVString};
use crate::dom::bindings::trace::RootedTraceableBox;
@@ -30,6 +30,7 @@ use http::header::{HeaderName, HeaderValue};
use http::method::InvalidMethod;
use http::Method as HttpMethod;
use js::jsapi::JSObject;
+use js::rust::HandleObject;
use net_traits::request::CacheMode as NetTraitsRequestCache;
use net_traits::request::CredentialsMode as NetTraitsRequestCredentials;
use net_traits::request::Destination as NetTraitsRequestDestination;
@@ -62,14 +63,15 @@ impl Request {
}
}
- pub fn new(global: &GlobalScope, url: ServoUrl) -> DomRoot<Request> {
- reflect_dom_object(Box::new(Request::new_inherited(global, url)), global)
+ fn new(global: &GlobalScope, proto: Option<HandleObject>, url: ServoUrl) -> DomRoot<Request> {
+ reflect_dom_object2(Box::new(Request::new_inherited(global, url)), global, proto)
}
// https://fetch.spec.whatwg.org/#dom-request
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
mut input: RequestInfo,
init: RootedTraceableBox<RequestInit>,
) -> Fallible<DomRoot<Request>> {
@@ -289,7 +291,7 @@ impl Request {
// Step 27 TODO: "If init["priority"] exists..."
// Step 28
- let r = Request::from_net_request(global, request);
+ let r = Request::from_net_request(global, proto, request);
// Step 29 TODO: "Set this's signal to new AbortSignal object..."
// Step 30 TODO: "If signal is not null..."
@@ -438,8 +440,8 @@ impl Request {
}
impl Request {
- fn from_net_request(global: &GlobalScope, net_request: NetTraitsRequest) -> DomRoot<Request> {
- let r = Request::new(global, net_request.current_url());
+ fn from_net_request(global: &GlobalScope, proto: Option<HandleObject>, net_request: NetTraitsRequest) -> DomRoot<Request> {
+ let r = Request::new(global, proto, net_request.current_url());
*r.request.borrow_mut() = net_request;
r
}
@@ -448,7 +450,7 @@ impl Request {
let req = r.request.borrow();
let url = req.url();
let headers_guard = r.Headers().get_guard();
- let r_clone = Request::new(&r.global(), url);
+ let r_clone = Request::new(&r.global(), None, url);
r_clone.request.borrow_mut().pipeline_id = req.pipeline_id;
{
let mut borrowed_r_request = r_clone.request.borrow_mut();
diff --git a/components/script/dom/response.rs b/components/script/dom/response.rs
index d7e4486afd5..b42f3cc014f 100644
--- a/components/script/dom/response.rs
+++ b/components/script/dom/response.rs
@@ -12,7 +12,7 @@ use crate::dom::bindings::codegen::Bindings::ResponseBinding::{
};
use crate::dom::bindings::codegen::Bindings::XMLHttpRequestBinding::BodyInit;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::{ByteString, USVString};
use crate::dom::globalscope::GlobalScope;
@@ -27,6 +27,7 @@ use http::header::HeaderMap as HyperHeaders;
use http::StatusCode;
use hyper_serde::Serde;
use js::jsapi::JSObject;
+use js::rust::HandleObject;
use servo_url::ServoUrl;
use std::ptr::NonNull;
use std::rc::Rc;
@@ -74,12 +75,17 @@ impl Response {
// https://fetch.spec.whatwg.org/#dom-response
pub fn new(global: &GlobalScope) -> DomRoot<Response> {
- reflect_dom_object(Box::new(Response::new_inherited(global)), global)
+ Self::new_with_proto(global, None)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<Response> {
+ reflect_dom_object2(Box::new(Response::new_inherited(global)), global, proto)
}
// https://fetch.spec.whatwg.org/#initialize-a-response
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
body: Option<BodyInit>,
init: &ResponseBinding::ResponseInit,
) -> Fallible<DomRoot<Response>> {
@@ -99,7 +105,7 @@ impl Response {
));
}
- let r = Response::new(global);
+ let r = Response::new_with_proto(global, proto);
// Step 3
*r.status.borrow_mut() = Some(StatusCode::from_u16(init.status).unwrap());
diff --git a/components/script/dom/rtcdatachannelevent.rs b/components/script/dom/rtcdatachannelevent.rs
index 95935f68107..c8e5ab8c457 100644
--- a/components/script/dom/rtcdatachannelevent.rs
+++ b/components/script/dom/rtcdatachannelevent.rs
@@ -6,7 +6,7 @@ use crate::dom::bindings::codegen::Bindings::EventBinding::EventMethods;
use crate::dom::bindings::codegen::Bindings::RTCDataChannelEventBinding::RTCDataChannelEventInit;
use crate::dom::bindings::codegen::Bindings::RTCDataChannelEventBinding::RTCDataChannelEventMethods;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -14,6 +14,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::rtcdatachannel::RTCDataChannel;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -37,9 +38,21 @@ impl RTCDataChannelEvent {
cancelable: bool,
channel: &RTCDataChannel,
) -> DomRoot<RTCDataChannelEvent> {
- let event = reflect_dom_object(
+ Self::new_with_proto(global, None, type_, bubbles, cancelable, channel)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ channel: &RTCDataChannel,
+ ) -> DomRoot<RTCDataChannelEvent> {
+ let event = reflect_dom_object2(
Box::new(RTCDataChannelEvent::new_inherited(&channel)),
global,
+ proto,
);
{
let event = event.upcast::<Event>();
@@ -51,11 +64,13 @@ impl RTCDataChannelEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &RTCDataChannelEventInit,
) -> DomRoot<RTCDataChannelEvent> {
- RTCDataChannelEvent::new(
+ RTCDataChannelEvent::new_with_proto(
&window.global(),
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/rtcerror.rs b/components/script/dom/rtcerror.rs
index 615cd267c9f..de9a6e8645b 100644
--- a/components/script/dom/rtcerror.rs
+++ b/components/script/dom/rtcerror.rs
@@ -5,13 +5,14 @@
use crate::dom::bindings::codegen::Bindings::RTCErrorBinding::RTCErrorDetailType;
use crate::dom::bindings::codegen::Bindings::RTCErrorBinding::RTCErrorInit;
use crate::dom::bindings::codegen::Bindings::RTCErrorBinding::RTCErrorMethods;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::domexception::{DOMErrorName, DOMException};
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct RTCError {
@@ -41,19 +42,25 @@ impl RTCError {
}
pub fn new(global: &GlobalScope, init: &RTCErrorInit, message: DOMString) -> DomRoot<RTCError> {
- reflect_dom_object(
+ Self::new_with_proto(global, None, init, message)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>, init: &RTCErrorInit, message: DOMString) -> DomRoot<RTCError> {
+ reflect_dom_object2(
Box::new(RTCError::new_inherited(global, init, message)),
global,
+ proto,
)
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
init: &RTCErrorInit,
message: DOMString,
) -> DomRoot<RTCError> {
- RTCError::new(&window.global(), init, message)
+ RTCError::new_with_proto(&window.global(), proto, init, message)
}
}
diff --git a/components/script/dom/rtcerrorevent.rs b/components/script/dom/rtcerrorevent.rs
index 2d40844423a..48f4224df95 100644
--- a/components/script/dom/rtcerrorevent.rs
+++ b/components/script/dom/rtcerrorevent.rs
@@ -6,7 +6,7 @@ use crate::dom::bindings::codegen::Bindings::EventBinding::EventMethods;
use crate::dom::bindings::codegen::Bindings::RTCErrorEventBinding::RTCErrorEventInit;
use crate::dom::bindings::codegen::Bindings::RTCErrorEventBinding::RTCErrorEventMethods;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -14,6 +14,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::rtcerror::RTCError;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -37,7 +38,18 @@ impl RTCErrorEvent {
cancelable: bool,
error: &RTCError,
) -> DomRoot<RTCErrorEvent> {
- let event = reflect_dom_object(Box::new(RTCErrorEvent::new_inherited(&error)), global);
+ Self::new_with_proto(global, None, type_, bubbles, cancelable, error)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ error: &RTCError,
+ ) -> DomRoot<RTCErrorEvent> {
+ let event = reflect_dom_object2(Box::new(RTCErrorEvent::new_inherited(&error)), global, proto);
{
let event = event.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@@ -48,11 +60,13 @@ impl RTCErrorEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &RTCErrorEventInit,
) -> DomRoot<RTCErrorEvent> {
- RTCErrorEvent::new(
+ RTCErrorEvent::new_with_proto(
&window.global(),
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/rtcicecandidate.rs b/components/script/dom/rtcicecandidate.rs
index 371f3d7693a..fc60867d5e2 100644
--- a/components/script/dom/rtcicecandidate.rs
+++ b/components/script/dom/rtcicecandidate.rs
@@ -5,13 +5,14 @@
use crate::dom::bindings::codegen::Bindings::RTCIceCandidateBinding::RTCIceCandidateInit;
use crate::dom::bindings::codegen::Bindings::RTCIceCandidateBinding::RTCIceCandidateMethods;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::reflector::{DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct RTCIceCandidate {
@@ -45,7 +46,18 @@ impl RTCIceCandidate {
sdp_m_line_index: Option<u16>,
username_fragment: Option<DOMString>,
) -> DomRoot<RTCIceCandidate> {
- reflect_dom_object(
+ Self::new_with_proto(global, None, candidate, sdp_m_id, sdp_m_line_index, username_fragment)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ candidate: DOMString,
+ sdp_m_id: Option<DOMString>,
+ sdp_m_line_index: Option<u16>,
+ username_fragment: Option<DOMString>,
+ ) -> DomRoot<RTCIceCandidate> {
+ reflect_dom_object2(
Box::new(RTCIceCandidate::new_inherited(
candidate,
sdp_m_id,
@@ -53,12 +65,14 @@ impl RTCIceCandidate {
username_fragment,
)),
global,
+ proto,
)
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
config: &RTCIceCandidateInit,
) -> Fallible<DomRoot<RTCIceCandidate>> {
if config.sdpMid.is_none() && config.sdpMLineIndex.is_none() {
@@ -66,8 +80,9 @@ impl RTCIceCandidate {
"one of sdpMid and sdpMLineIndex must be set"
)));
}
- Ok(RTCIceCandidate::new(
+ Ok(RTCIceCandidate::new_with_proto(
&window.global(),
+ proto,
config.candidate.clone(),
config.sdpMid.clone(),
config.sdpMLineIndex,
diff --git a/components/script/dom/rtcpeerconnection.rs b/components/script/dom/rtcpeerconnection.rs
index 2342dd6730e..aad751dbfe2 100644
--- a/components/script/dom/rtcpeerconnection.rs
+++ b/components/script/dom/rtcpeerconnection.rs
@@ -18,7 +18,7 @@ use crate::dom::bindings::error::Error;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::refcounted::{Trusted, TrustedPromise};
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::reflector::DomObject;
use crate::dom::bindings::root::{Dom, DomRoot, MutNullableDom};
use crate::dom::bindings::str::USVString;
@@ -41,7 +41,7 @@ use crate::task::TaskCanceller;
use crate::task_source::networking::NetworkingTaskSource;
use crate::task_source::TaskSource;
use dom_struct::dom_struct;
-
+use js::rust::HandleObject;
use servo_media::streams::registry::MediaStreamId;
use servo_media::streams::MediaStreamType;
use servo_media::webrtc::{
@@ -193,8 +193,8 @@ impl RTCPeerConnection {
}
}
- pub fn new(global: &GlobalScope, config: &RTCConfiguration) -> DomRoot<RTCPeerConnection> {
- let this = reflect_dom_object(Box::new(RTCPeerConnection::new_inherited()), global);
+ fn new(global: &GlobalScope, proto: Option<HandleObject>, config: &RTCConfiguration) -> DomRoot<RTCPeerConnection> {
+ let this = reflect_dom_object2(Box::new(RTCPeerConnection::new_inherited()), global, proto);
let signaller = this.make_signaller();
*this.controller.borrow_mut() = Some(ServoMedia::get().unwrap().create_webrtc(signaller));
if let Some(ref servers) = config.iceServers {
@@ -223,9 +223,10 @@ impl RTCPeerConnection {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
config: &RTCConfiguration,
) -> Fallible<DomRoot<RTCPeerConnection>> {
- Ok(RTCPeerConnection::new(&window.global(), config))
+ Ok(RTCPeerConnection::new(&window.global(), proto, config))
}
pub fn get_webrtc_controller(&self) -> &DomRefCell<Option<WebRtcController>> {
@@ -638,7 +639,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
// dance between pending/current local/remote descriptions
let this = this.root();
let desc = desc.into();
- let desc = RTCSessionDescription::Constructor(&this.global().as_window(), &desc).unwrap();
+ let desc = RTCSessionDescription::Constructor(&this.global().as_window(), None, &desc).unwrap();
this.local_description.set(Some(&desc));
trusted_promise.root().resolve_native(&())
}),
@@ -671,7 +672,7 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
// dance between pending/current local/remote descriptions
let this = this.root();
let desc = desc.into();
- let desc = RTCSessionDescription::Constructor(&this.global().as_window(), &desc).unwrap();
+ let desc = RTCSessionDescription::Constructor(&this.global().as_window(), None, &desc).unwrap();
this.remote_description.set(Some(&desc));
trusted_promise.root().resolve_native(&())
}),
diff --git a/components/script/dom/rtcpeerconnectioniceevent.rs b/components/script/dom/rtcpeerconnectioniceevent.rs
index e88222e34ad..8fbe1564960 100644
--- a/components/script/dom/rtcpeerconnectioniceevent.rs
+++ b/components/script/dom/rtcpeerconnectioniceevent.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::RTCPeerConnectionIceEventBinding::R
use crate::dom::bindings::codegen::Bindings::RTCPeerConnectionIceEventBinding::RTCPeerConnectionIceEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::reflector::DomObject;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
@@ -16,6 +16,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::rtcicecandidate::RTCIceCandidate;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -44,9 +45,21 @@ impl RTCPeerConnectionIceEvent {
url: Option<DOMString>,
trusted: bool,
) -> DomRoot<RTCPeerConnectionIceEvent> {
- let e = reflect_dom_object(
+ Self::new_with_proto(global, None, ty, candidate, url, trusted)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ ty: Atom,
+ candidate: Option<&RTCIceCandidate>,
+ url: Option<DOMString>,
+ trusted: bool,
+ ) -> DomRoot<RTCPeerConnectionIceEvent> {
+ let e = reflect_dom_object2(
Box::new(RTCPeerConnectionIceEvent::new_inherited(candidate, url)),
global,
+ proto,
);
let evt = e.upcast::<Event>();
evt.init_event(ty, false, false); // XXXManishearth bubbles/cancelable?
@@ -57,11 +70,13 @@ impl RTCPeerConnectionIceEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
ty: DOMString,
init: &RTCPeerConnectionIceEventInit,
) -> Fallible<DomRoot<RTCPeerConnectionIceEvent>> {
- Ok(RTCPeerConnectionIceEvent::new(
+ Ok(RTCPeerConnectionIceEvent::new_with_proto(
&window.global(),
+ proto,
ty.into(),
init.candidate
.as_ref()
diff --git a/components/script/dom/rtcsessiondescription.rs b/components/script/dom/rtcsessiondescription.rs
index 2ff7157e5d4..83a5e9d998c 100644
--- a/components/script/dom/rtcsessiondescription.rs
+++ b/components/script/dom/rtcsessiondescription.rs
@@ -7,13 +7,14 @@ use crate::dom::bindings::codegen::Bindings::RTCSessionDescriptionBinding::{
RTCSdpType, RTCSessionDescriptionInit,
};
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::reflector::{DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct RTCSessionDescription {
@@ -31,24 +32,28 @@ impl RTCSessionDescription {
}
}
- pub fn new(
+ fn new(
global: &GlobalScope,
+ proto: Option<HandleObject>,
ty: RTCSdpType,
sdp: DOMString,
) -> DomRoot<RTCSessionDescription> {
- reflect_dom_object(
+ reflect_dom_object2(
Box::new(RTCSessionDescription::new_inherited(ty, sdp)),
global,
+ proto,
)
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
config: &RTCSessionDescriptionInit,
) -> Fallible<DomRoot<RTCSessionDescription>> {
Ok(RTCSessionDescription::new(
&window.global(),
+ proto,
config.type_,
config.sdp.clone(),
))
diff --git a/components/script/dom/rtctrackevent.rs b/components/script/dom/rtctrackevent.rs
index 0cf8605170b..77dae80a4ca 100644
--- a/components/script/dom/rtctrackevent.rs
+++ b/components/script/dom/rtctrackevent.rs
@@ -6,7 +6,7 @@ use crate::dom::bindings::codegen::Bindings::EventBinding::EventBinding::EventMe
use crate::dom::bindings::codegen::Bindings::RTCTrackEventBinding::{self, RTCTrackEventMethods};
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -14,6 +14,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::mediastreamtrack::MediaStreamTrack;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -38,7 +39,18 @@ impl RTCTrackEvent {
cancelable: bool,
track: &MediaStreamTrack,
) -> DomRoot<RTCTrackEvent> {
- let trackevent = reflect_dom_object(Box::new(RTCTrackEvent::new_inherited(&track)), global);
+ Self::new_with_proto(global, None, type_, bubbles, cancelable, track)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ track: &MediaStreamTrack,
+ ) -> DomRoot<RTCTrackEvent> {
+ let trackevent = reflect_dom_object2(Box::new(RTCTrackEvent::new_inherited(&track)), global, proto);
{
let event = trackevent.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@@ -49,11 +61,13 @@ impl RTCTrackEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &RTCTrackEventBinding::RTCTrackEventInit,
) -> Fallible<DomRoot<RTCTrackEvent>> {
- Ok(RTCTrackEvent::new(
+ Ok(RTCTrackEvent::new_with_proto(
&window.global(),
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/servoparser/async_html.rs b/components/script/dom/servoparser/async_html.rs
index 538007d9057..4a2e34316eb 100644
--- a/components/script/dom/servoparser/async_html.rs
+++ b/components/script/dom/servoparser/async_html.rs
@@ -420,7 +420,7 @@ impl Tokenizer {
self.insert_node(node, Dom::from_ref(element.upcast()));
},
ParseOperation::CreateComment { text, node } => {
- let comment = Comment::new(DOMString::from(text), document);
+ let comment = Comment::new(DOMString::from(text), document, None);
self.insert_node(node, Dom::from_ref(&comment.upcast()));
},
ParseOperation::AppendBeforeSibling { sibling, node } => {
diff --git a/components/script/dom/servoparser/mod.rs b/components/script/dom/servoparser/mod.rs
index c4b52a038ea..6bfed4d8dea 100644
--- a/components/script/dom/servoparser/mod.rs
+++ b/components/script/dom/servoparser/mod.rs
@@ -857,7 +857,7 @@ impl FetchResponseListener for ParserContext {
let doc = &parser.document;
let doc_body = DomRoot::upcast::<Node>(doc.GetBody().unwrap());
- let img = HTMLImageElement::new(local_name!("img"), None, doc);
+ let img = HTMLImageElement::new(local_name!("img"), None, doc, None);
img.SetSrc(USVString(self.url.to_string()));
doc_body
.AppendChild(&DomRoot::upcast::<Node>(img))
@@ -1119,7 +1119,7 @@ impl TreeSink for Sink {
}
fn create_comment(&mut self, text: StrTendril) -> Dom<Node> {
- let comment = Comment::new(DOMString::from(String::from(text)), &*self.document);
+ let comment = Comment::new(DOMString::from(String::from(text)), &*self.document, None);
Dom::from_ref(comment.upcast())
}
@@ -1329,7 +1329,7 @@ fn create_element_for_token(
CustomElementCreationMode::Asynchronous
};
- let element = Element::create(name, is, document, creator, creation_mode);
+ let element = Element::create(name, is, document, creator, creation_mode, None);
// https://html.spec.whatwg.org/multipage#the-input-element:value-sanitization-algorithm-3
// says to invoke sanitization "when an input element is first created";
diff --git a/components/script/dom/stereopannernode.rs b/components/script/dom/stereopannernode.rs
index cc71c69593b..318308f6abf 100644
--- a/components/script/dom/stereopannernode.rs
+++ b/components/script/dom/stereopannernode.rs
@@ -12,10 +12,11 @@ use crate::dom::bindings::codegen::Bindings::AudioParamBinding::AutomationRate;
use crate::dom::bindings::codegen::Bindings::StereoPannerNodeBinding::StereoPannerNodeMethods;
use crate::dom::bindings::codegen::Bindings::StereoPannerNodeBinding::StereoPannerOptions;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_media::audio::node::AudioNodeInit;
use servo_media::audio::param::ParamType;
use servo_media::audio::stereo_panner::StereoPannerOptions as ServoMediaStereoPannerOptions;
@@ -69,23 +70,33 @@ impl StereoPannerNode {
})
}
- #[allow(unrooted_must_root)]
pub fn new(
window: &Window,
context: &BaseAudioContext,
options: &StereoPannerOptions,
) -> Fallible<DomRoot<StereoPannerNode>> {
+ Self::new_with_proto(window, None, context, options)
+ }
+
+ #[allow(unrooted_must_root)]
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ context: &BaseAudioContext,
+ options: &StereoPannerOptions,
+ ) -> Fallible<DomRoot<StereoPannerNode>> {
let node = StereoPannerNode::new_inherited(window, context, options)?;
- Ok(reflect_dom_object(Box::new(node), window))
+ Ok(reflect_dom_object2(Box::new(node), window, proto))
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
context: &BaseAudioContext,
options: &StereoPannerOptions,
) -> Fallible<DomRoot<StereoPannerNode>> {
- StereoPannerNode::new(window, context, options)
+ StereoPannerNode::new_with_proto(window, proto, context, options)
}
}
diff --git a/components/script/dom/storageevent.rs b/components/script/dom/storageevent.rs
index a50c1267585..b1da211f1c1 100644
--- a/components/script/dom/storageevent.rs
+++ b/components/script/dom/storageevent.rs
@@ -8,13 +8,14 @@ use crate::dom::bindings::codegen::Bindings::StorageEventBinding;
use crate::dom::bindings::codegen::Bindings::StorageEventBinding::StorageEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::event::{Event, EventBubbles, EventCancelable};
use crate::dom::storage::Storage;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -47,9 +48,14 @@ impl StorageEvent {
}
pub fn new_uninitialized(window: &Window, url: DOMString) -> DomRoot<StorageEvent> {
- reflect_dom_object(
+ Self::new_uninitialized_with_proto(window, None, url)
+ }
+
+ fn new_uninitialized_with_proto(window: &Window, proto: Option<HandleObject>, url: DOMString) -> DomRoot<StorageEvent> {
+ reflect_dom_object2(
Box::new(StorageEvent::new_inherited(None, None, None, url, None)),
window,
+ proto,
)
}
@@ -64,7 +70,33 @@ impl StorageEvent {
url: DOMString,
storageArea: Option<&Storage>,
) -> DomRoot<StorageEvent> {
- let ev = reflect_dom_object(
+ Self::new_with_proto(
+ global,
+ None,
+ type_,
+ bubbles,
+ cancelable,
+ key,
+ oldValue,
+ newValue,
+ url,
+ storageArea,
+ )
+ }
+
+ fn new_with_proto(
+ global: &Window,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: EventBubbles,
+ cancelable: EventCancelable,
+ key: Option<DOMString>,
+ oldValue: Option<DOMString>,
+ newValue: Option<DOMString>,
+ url: DOMString,
+ storageArea: Option<&Storage>,
+ ) -> DomRoot<StorageEvent> {
+ let ev = reflect_dom_object2(
Box::new(StorageEvent::new_inherited(
key,
oldValue,
@@ -73,6 +105,7 @@ impl StorageEvent {
storageArea,
)),
global,
+ proto,
);
{
let event = ev.upcast::<Event>();
@@ -83,6 +116,7 @@ impl StorageEvent {
pub fn Constructor(
global: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &StorageEventBinding::StorageEventInit,
) -> Fallible<DomRoot<StorageEvent>> {
@@ -93,8 +127,9 @@ impl StorageEvent {
let storageArea = init.storageArea.as_deref();
let bubbles = EventBubbles::from(init.parent.bubbles);
let cancelable = EventCancelable::from(init.parent.cancelable);
- let event = StorageEvent::new(
+ let event = StorageEvent::new_with_proto(
global,
+ proto,
Atom::from(type_),
bubbles,
cancelable,
diff --git a/components/script/dom/submitevent.rs b/components/script/dom/submitevent.rs
index c9965b762b1..cf62813a4dc 100644
--- a/components/script/dom/submitevent.rs
+++ b/components/script/dom/submitevent.rs
@@ -6,7 +6,7 @@ use crate::dom::bindings::codegen::Bindings::EventBinding::EventMethods;
use crate::dom::bindings::codegen::Bindings::SubmitEventBinding;
use crate::dom::bindings::codegen::Bindings::SubmitEventBinding::SubmitEventMethods;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -14,6 +14,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::htmlelement::HTMLElement;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -38,7 +39,18 @@ impl SubmitEvent {
cancelable: bool,
submitter: Option<DomRoot<HTMLElement>>,
) -> DomRoot<SubmitEvent> {
- let ev = reflect_dom_object(Box::new(SubmitEvent::new_inherited(submitter)), global);
+ Self::new_with_proto(global, None, type_, bubbles, cancelable, submitter)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ submitter: Option<DomRoot<HTMLElement>>,
+ ) -> DomRoot<SubmitEvent> {
+ let ev = reflect_dom_object2(Box::new(SubmitEvent::new_inherited(submitter)), global, proto);
{
let event = ev.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@@ -49,11 +61,13 @@ impl SubmitEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &SubmitEventBinding::SubmitEventInit,
) -> DomRoot<SubmitEvent> {
- SubmitEvent::new(
+ SubmitEvent::new_with_proto(
&window.global(),
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/svgelement.rs b/components/script/dom/svgelement.rs
index 92c56c95c5d..3f88ab608c0 100644
--- a/components/script/dom/svgelement.rs
+++ b/components/script/dom/svgelement.rs
@@ -13,6 +13,7 @@ use crate::dom::node::Node;
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use style::element_state::ElementState;
#[dom_struct]
@@ -46,10 +47,12 @@ impl SVGElement {
tag_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<SVGElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(SVGElement::new_inherited(tag_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/svgsvgelement.rs b/components/script/dom/svgsvgelement.rs
index 583bdb0eb44..df3d1e5cd3a 100644
--- a/components/script/dom/svgsvgelement.rs
+++ b/components/script/dom/svgsvgelement.rs
@@ -13,6 +13,7 @@ use crate::dom::svggraphicselement::SVGGraphicsElement;
use crate::dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever::{LocalName, Prefix};
+use js::rust::HandleObject;
use script_layout_interface::SVGSVGData;
use style::attr::AttrValue;
@@ -40,10 +41,12 @@ impl SVGSVGElement {
local_name: LocalName,
prefix: Option<Prefix>,
document: &Document,
+ proto: Option<HandleObject>,
) -> DomRoot<SVGSVGElement> {
- Node::reflect_node(
+ Node::reflect_node_with_proto(
Box::new(SVGSVGElement::new_inherited(local_name, prefix, document)),
document,
+ proto,
)
}
}
diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs
index b8d2fefc951..9788b3fa85f 100644
--- a/components/script/dom/testbinding.rs
+++ b/components/script/dom/testbinding.rs
@@ -40,7 +40,7 @@ use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::num::Finite;
use crate::dom::bindings::record::Record;
use crate::dom::bindings::refcounted::TrustedPromise;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::{ByteString, DOMString, USVString};
use crate::dom::bindings::trace::RootedTraceableBox;
@@ -84,22 +84,22 @@ impl TestBinding {
}
}
- pub fn new(global: &GlobalScope) -> DomRoot<TestBinding> {
- reflect_dom_object(Box::new(TestBinding::new_inherited()), global)
+ fn new(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<TestBinding> {
+ reflect_dom_object2(Box::new(TestBinding::new_inherited()), global, proto)
}
- pub fn Constructor(global: &GlobalScope) -> Fallible<DomRoot<TestBinding>> {
- Ok(TestBinding::new(global))
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>) -> Fallible<DomRoot<TestBinding>> {
+ Ok(TestBinding::new(global, proto))
}
#[allow(unused_variables)]
- pub fn Constructor_(global: &GlobalScope, nums: Vec<f64>) -> Fallible<DomRoot<TestBinding>> {
- Ok(TestBinding::new(global))
+ pub fn Constructor_(global: &GlobalScope, proto: Option<HandleObject>, nums: Vec<f64>) -> Fallible<DomRoot<TestBinding>> {
+ Ok(TestBinding::new(global, proto))
}
#[allow(unused_variables)]
- pub fn Constructor__(global: &GlobalScope, num: f64) -> Fallible<DomRoot<TestBinding>> {
- Ok(TestBinding::new(global))
+ pub fn Constructor__(global: &GlobalScope, proto: Option<HandleObject>, num: f64) -> Fallible<DomRoot<TestBinding>> {
+ Ok(TestBinding::new(global, proto))
}
}
diff --git a/components/script/dom/testbindingiterable.rs b/components/script/dom/testbindingiterable.rs
index 5befaaa2c59..1ed0434c70b 100644
--- a/components/script/dom/testbindingiterable.rs
+++ b/components/script/dom/testbindingiterable.rs
@@ -7,11 +7,12 @@
use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::TestBindingIterableBinding::TestBindingIterableMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct TestBindingIterable {
@@ -20,19 +21,20 @@ pub struct TestBindingIterable {
}
impl TestBindingIterable {
- fn new(global: &GlobalScope) -> DomRoot<TestBindingIterable> {
- reflect_dom_object(
+ fn new(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<TestBindingIterable> {
+ reflect_dom_object2(
Box::new(TestBindingIterable {
reflector: Reflector::new(),
vals: DomRefCell::new(vec![]),
}),
global,
+ proto,
)
}
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope) -> Fallible<DomRoot<TestBindingIterable>> {
- Ok(TestBindingIterable::new(global))
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>) -> Fallible<DomRoot<TestBindingIterable>> {
+ Ok(TestBindingIterable::new(global, proto))
}
}
diff --git a/components/script/dom/testbindingpairiterable.rs b/components/script/dom/testbindingpairiterable.rs
index e8775af5ce7..ec593b27616 100644
--- a/components/script/dom/testbindingpairiterable.rs
+++ b/components/script/dom/testbindingpairiterable.rs
@@ -8,11 +8,12 @@ use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::TestBindingPairIterableBinding::TestBindingPairIterableMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::iterable::Iterable;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct TestBindingPairIterable {
@@ -47,19 +48,20 @@ impl Iterable for TestBindingPairIterable {
}
impl TestBindingPairIterable {
- fn new(global: &GlobalScope) -> DomRoot<TestBindingPairIterable> {
- reflect_dom_object(
+ fn new(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<TestBindingPairIterable> {
+ reflect_dom_object2(
Box::new(TestBindingPairIterable {
reflector: Reflector::new(),
map: DomRefCell::new(vec![]),
}),
global,
+ proto,
)
}
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope) -> Fallible<DomRoot<TestBindingPairIterable>> {
- Ok(TestBindingPairIterable::new(global))
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>) -> Fallible<DomRoot<TestBindingPairIterable>> {
+ Ok(TestBindingPairIterable::new(global, proto))
}
}
diff --git a/components/script/dom/testworklet.rs b/components/script/dom/testworklet.rs
index 16e49b55493..1fdbbab07c1 100644
--- a/components/script/dom/testworklet.rs
+++ b/components/script/dom/testworklet.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::TestWorkletBinding::TestWorkletMeth
use crate::dom::bindings::codegen::Bindings::WorkletBinding::WorkletBinding::WorkletMethods;
use crate::dom::bindings::codegen::Bindings::WorkletBinding::WorkletOptions;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::reflector::Reflector;
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
@@ -19,6 +19,7 @@ use crate::dom::workletglobalscope::WorkletGlobalScopeType;
use crate::realms::InRealm;
use crate::script_thread::ScriptThread;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use std::rc::Rc;
#[dom_struct]
@@ -35,14 +36,14 @@ impl TestWorklet {
}
}
- fn new(window: &Window) -> DomRoot<TestWorklet> {
+ fn new(window: &Window, proto: Option<HandleObject>) -> DomRoot<TestWorklet> {
let worklet = Worklet::new(window, WorkletGlobalScopeType::Test);
- reflect_dom_object(Box::new(TestWorklet::new_inherited(&*worklet)), window)
+ reflect_dom_object2(Box::new(TestWorklet::new_inherited(&*worklet)), window, proto)
}
#[allow(non_snake_case)]
- pub fn Constructor(window: &Window) -> Fallible<DomRoot<TestWorklet>> {
- Ok(TestWorklet::new(window))
+ pub fn Constructor(window: &Window, proto: Option<HandleObject>) -> Fallible<DomRoot<TestWorklet>> {
+ Ok(TestWorklet::new(window, proto))
}
}
diff --git a/components/script/dom/text.rs b/components/script/dom/text.rs
index 64fae977556..137b347bba9 100644
--- a/components/script/dom/text.rs
+++ b/components/script/dom/text.rs
@@ -16,6 +16,7 @@ use crate::dom::document::Document;
use crate::dom::node::Node;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
/// An HTML text node.
#[dom_struct]
@@ -31,13 +32,17 @@ impl Text {
}
pub fn new(text: DOMString, document: &Document) -> DomRoot<Text> {
- Node::reflect_node(Box::new(Text::new_inherited(text, document)), document)
+ Self::new_with_proto(text, document, None)
+ }
+
+ fn new_with_proto(text: DOMString, document: &Document, proto: Option<HandleObject>) -> DomRoot<Text> {
+ Node::reflect_node_with_proto(Box::new(Text::new_inherited(text, document)), document, proto)
}
#[allow(non_snake_case)]
- pub fn Constructor(window: &Window, text: DOMString) -> Fallible<DomRoot<Text>> {
+ pub fn Constructor(window: &Window, proto: Option<HandleObject>, text: DOMString) -> Fallible<DomRoot<Text>> {
let document = window.Document();
- Ok(Text::new(text, &document))
+ Ok(Text::new_with_proto(text, &document, proto))
}
}
diff --git a/components/script/dom/textdecoder.rs b/components/script/dom/textdecoder.rs
index 7d664242467..b81fd538c6b 100644
--- a/components/script/dom/textdecoder.rs
+++ b/components/script/dom/textdecoder.rs
@@ -8,12 +8,13 @@ use crate::dom::bindings::codegen::Bindings::TextDecoderBinding::{
};
use crate::dom::bindings::codegen::UnionTypes::ArrayBufferViewOrArrayBuffer;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
use encoding_rs::{Decoder, DecoderResult, Encoding};
+use js::rust::HandleObject;
use std::borrow::ToOwned;
use std::cell::{Cell, RefCell};
@@ -54,21 +55,24 @@ impl TextDecoder {
))
}
- pub fn new(
+ fn new(
global: &GlobalScope,
+ proto: Option<HandleObject>,
encoding: &'static Encoding,
fatal: bool,
ignoreBOM: bool,
) -> DomRoot<TextDecoder> {
- reflect_dom_object(
+ reflect_dom_object2(
Box::new(TextDecoder::new_inherited(encoding, fatal, ignoreBOM)),
global,
+ proto,
)
}
/// <https://encoding.spec.whatwg.org/#dom-textdecoder>
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
label: DOMString,
options: &TextDecoderBinding::TextDecoderOptions,
) -> Fallible<DomRoot<TextDecoder>> {
@@ -78,6 +82,7 @@ impl TextDecoder {
};
Ok(TextDecoder::new(
global,
+ proto,
encoding,
options.fatal,
options.ignoreBOM,
diff --git a/components/script/dom/textencoder.rs b/components/script/dom/textencoder.rs
index 4df1143531f..caf0cdb3699 100644
--- a/components/script/dom/textencoder.rs
+++ b/components/script/dom/textencoder.rs
@@ -4,13 +4,14 @@
use crate::dom::bindings::codegen::Bindings::TextEncoderBinding::TextEncoderMethods;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::globalscope::GlobalScope;
use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use js::jsapi::JSObject;
+use js::rust::HandleObject;
use js::typedarray::{CreateWith, Uint8Array};
use std::ptr;
use std::ptr::NonNull;
@@ -27,14 +28,14 @@ impl TextEncoder {
}
}
- pub fn new(global: &GlobalScope) -> DomRoot<TextEncoder> {
- reflect_dom_object(Box::new(TextEncoder::new_inherited()), global)
+ fn new(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<TextEncoder> {
+ reflect_dom_object2(Box::new(TextEncoder::new_inherited()), global, proto)
}
// https://encoding.spec.whatwg.org/#dom-textencoder
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope) -> Fallible<DomRoot<TextEncoder>> {
- Ok(TextEncoder::new(global))
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>) -> Fallible<DomRoot<TextEncoder>> {
+ Ok(TextEncoder::new(global, proto))
}
}
diff --git a/components/script/dom/trackevent.rs b/components/script/dom/trackevent.rs
index 34148f26527..7959574938e 100644
--- a/components/script/dom/trackevent.rs
+++ b/components/script/dom/trackevent.rs
@@ -9,7 +9,7 @@ use crate::dom::bindings::codegen::Bindings::TrackEventBinding::TrackEventMethod
use crate::dom::bindings::codegen::UnionTypes::VideoTrackOrAudioTrackOrTextTrack;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -18,6 +18,7 @@ use crate::dom::texttrack::TextTrack;
use crate::dom::videotrack::VideoTrack;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[unrooted_must_root_lint::must_root]
@@ -64,7 +65,18 @@ impl TrackEvent {
cancelable: bool,
track: &Option<VideoTrackOrAudioTrackOrTextTrack>,
) -> DomRoot<TrackEvent> {
- let te = reflect_dom_object(Box::new(TrackEvent::new_inherited(&track)), global);
+ Self::new_with_proto(global, None, type_, bubbles, cancelable, track)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ track: &Option<VideoTrackOrAudioTrackOrTextTrack>,
+ ) -> DomRoot<TrackEvent> {
+ let te = reflect_dom_object2(Box::new(TrackEvent::new_inherited(&track)), global, proto);
{
let event = te.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@@ -74,11 +86,13 @@ impl TrackEvent {
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &TrackEventBinding::TrackEventInit,
) -> Fallible<DomRoot<TrackEvent>> {
- Ok(TrackEvent::new(
+ Ok(TrackEvent::new_with_proto(
&window.global(),
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/transitionevent.rs b/components/script/dom/transitionevent.rs
index 2305a9489ff..9e2132b407a 100644
--- a/components/script/dom/transitionevent.rs
+++ b/components/script/dom/transitionevent.rs
@@ -9,12 +9,13 @@ use crate::dom::bindings::codegen::Bindings::TransitionEventBinding::{
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::num::Finite;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -40,7 +41,16 @@ impl TransitionEvent {
type_: Atom,
init: &TransitionEventInit,
) -> DomRoot<TransitionEvent> {
- let ev = reflect_dom_object(Box::new(TransitionEvent::new_inherited(init)), window);
+ Self::new_with_proto(window, None, type_, init)
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ init: &TransitionEventInit,
+ ) -> DomRoot<TransitionEvent> {
+ let ev = reflect_dom_object2(Box::new(TransitionEvent::new_inherited(init)), window, proto);
{
let event = ev.upcast::<Event>();
event.init_event(type_, init.parent.bubbles, init.parent.cancelable);
@@ -51,10 +61,11 @@ impl TransitionEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &TransitionEventInit,
) -> Fallible<DomRoot<TransitionEvent>> {
- Ok(TransitionEvent::new(window, Atom::from(type_), init))
+ Ok(TransitionEvent::new_with_proto(window, proto, Atom::from(type_), init))
}
}
diff --git a/components/script/dom/uievent.rs b/components/script/dom/uievent.rs
index c54265f4fb5..33916963a1d 100644
--- a/components/script/dom/uievent.rs
+++ b/components/script/dom/uievent.rs
@@ -7,12 +7,13 @@ use crate::dom::bindings::codegen::Bindings::UIEventBinding;
use crate::dom::bindings::codegen::Bindings::UIEventBinding::UIEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::{Event, EventBubbles, EventCancelable};
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
use std::cell::Cell;
use std::default::Default;
@@ -35,7 +36,11 @@ impl UIEvent {
}
pub fn new_uninitialized(window: &Window) -> DomRoot<UIEvent> {
- reflect_dom_object(Box::new(UIEvent::new_inherited()), window)
+ Self::new_uninitialized_with_proto(window, None)
+ }
+
+ fn new_uninitialized_with_proto(window: &Window, proto: Option<HandleObject>) -> DomRoot<UIEvent> {
+ reflect_dom_object2(Box::new(UIEvent::new_inherited()), window, proto)
}
pub fn new(
@@ -46,7 +51,19 @@ impl UIEvent {
view: Option<&Window>,
detail: i32,
) -> DomRoot<UIEvent> {
- let ev = UIEvent::new_uninitialized(window);
+ Self::new_with_proto(window, None, type_, can_bubble, cancelable, view, detail)
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: DOMString,
+ can_bubble: EventBubbles,
+ cancelable: EventCancelable,
+ view: Option<&Window>,
+ detail: i32,
+ ) -> DomRoot<UIEvent> {
+ let ev = UIEvent::new_uninitialized_with_proto(window, proto);
ev.InitUIEvent(
type_,
bool::from(can_bubble),
@@ -60,13 +77,15 @@ impl UIEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &UIEventBinding::UIEventInit,
) -> Fallible<DomRoot<UIEvent>> {
let bubbles = EventBubbles::from(init.parent.bubbles);
let cancelable = EventCancelable::from(init.parent.cancelable);
- let event = UIEvent::new(
+ let event = UIEvent::new_with_proto(
window,
+ proto,
type_,
bubbles,
cancelable,
diff --git a/components/script/dom/url.rs b/components/script/dom/url.rs
index ecc7fb38591..74056c9f02e 100644
--- a/components/script/dom/url.rs
+++ b/components/script/dom/url.rs
@@ -5,7 +5,7 @@
use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::URLBinding::URLMethods;
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::blob::Blob;
@@ -13,6 +13,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::urlhelper::UrlHelper;
use crate::dom::urlsearchparams::URLSearchParams;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use net_traits::blob_url_store::{get_blob_origin, parse_blob_url};
use net_traits::filemanager_thread::FileManagerThreadMsg;
use net_traits::{CoreResourceMsg, IpcSend};
@@ -42,8 +43,8 @@ impl URL {
}
}
- pub fn new(global: &GlobalScope, url: ServoUrl) -> DomRoot<URL> {
- reflect_dom_object(Box::new(URL::new_inherited(url)), global)
+ fn new(global: &GlobalScope, proto: Option<HandleObject>, url: ServoUrl) -> DomRoot<URL> {
+ reflect_dom_object2(Box::new(URL::new_inherited(url)), global, proto)
}
pub fn query_pairs(&self) -> Vec<(String, String)> {
@@ -74,6 +75,7 @@ impl URL {
// https://url.spec.whatwg.org/#constructors
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
url: USVString,
base: Option<USVString>,
) -> Fallible<DomRoot<URL>> {
@@ -108,7 +110,7 @@ impl URL {
// Step 7. Set this’s query object’s URL object to this.
// Step 4. Set this’s URL to parsedURL.
- Ok(URL::new(global, parsed_url))
+ Ok(URL::new(global, proto, parsed_url))
}
// https://url.spec.whatwg.org/#dom-url-canparse
diff --git a/components/script/dom/urlsearchparams.rs b/components/script/dom/urlsearchparams.rs
index 4b7e2880ef1..e4f2df9c91d 100644
--- a/components/script/dom/urlsearchparams.rs
+++ b/components/script/dom/urlsearchparams.rs
@@ -7,13 +7,14 @@ use crate::dom::bindings::codegen::Bindings::URLSearchParamsBinding::URLSearchPa
use crate::dom::bindings::codegen::UnionTypes::USVStringSequenceSequenceOrUSVStringUSVStringRecordOrUSVString;
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::iterable::Iterable;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::bindings::weakref::MutableWeakRef;
use crate::dom::globalscope::GlobalScope;
use crate::dom::url::URL;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use url::form_urlencoded;
// https://url.spec.whatwg.org/#interface-urlsearchparams
@@ -36,17 +37,22 @@ impl URLSearchParams {
}
pub fn new(global: &GlobalScope, url: Option<&URL>) -> DomRoot<URLSearchParams> {
- reflect_dom_object(Box::new(URLSearchParams::new_inherited(url)), global)
+ Self::new_with_proto(global, None, url)
+ }
+
+ pub fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>, url: Option<&URL>) -> DomRoot<URLSearchParams> {
+ reflect_dom_object2(Box::new(URLSearchParams::new_inherited(url)), global, proto)
}
// https://url.spec.whatwg.org/#dom-urlsearchparams-urlsearchparams
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
init: USVStringSequenceSequenceOrUSVStringUSVStringRecordOrUSVString,
) -> Fallible<DomRoot<URLSearchParams>> {
// Step 1.
- let query = URLSearchParams::new(global, None);
+ let query = URLSearchParams::new_with_proto(global, proto, None);
match init {
USVStringSequenceSequenceOrUSVStringUSVStringRecordOrUSVString::USVStringSequenceSequence(init) => {
// Step 2.
diff --git a/components/script/dom/vttcue.rs b/components/script/dom/vttcue.rs
index 28c9cd22e33..695ddce5262 100644
--- a/components/script/dom/vttcue.rs
+++ b/components/script/dom/vttcue.rs
@@ -9,7 +9,7 @@ use crate::dom::bindings::codegen::Bindings::VTTCueBinding::{
};
use crate::dom::bindings::error::{Error, ErrorResult};
use crate::dom::bindings::num::Finite;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::documentfragment::DocumentFragment;
@@ -18,6 +18,7 @@ use crate::dom::texttrackcue::TextTrackCue;
use crate::dom::vttregion::VTTRegion;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use std::cell::Cell;
#[dom_struct]
@@ -57,26 +58,29 @@ impl VTTCue {
}
}
- pub fn new(
+ fn new(
global: &GlobalScope,
+ proto: Option<HandleObject>,
start_time: f64,
end_time: f64,
text: DOMString,
) -> DomRoot<Self> {
- reflect_dom_object(
+ reflect_dom_object2(
Box::new(Self::new_inherited(start_time, end_time, text)),
global,
+ proto,
)
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
start_time: Finite<f64>,
end_time: Finite<f64>,
text: DOMString,
) -> DomRoot<Self> {
- VTTCue::new(&window.global(), *start_time, *end_time, text)
+ VTTCue::new(&window.global(), proto, *start_time, *end_time, text)
}
}
diff --git a/components/script/dom/vttregion.rs b/components/script/dom/vttregion.rs
index 987af730f14..f061416d3de 100644
--- a/components/script/dom/vttregion.rs
+++ b/components/script/dom/vttregion.rs
@@ -6,12 +6,13 @@ use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::VTTRegionBinding::{ScrollSetting, VTTRegionMethods};
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::num::Finite;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use std::cell::Cell;
#[dom_struct]
@@ -28,7 +29,7 @@ pub struct VTTRegion {
}
impl VTTRegion {
- pub fn new_inherited() -> Self {
+ fn new_inherited() -> Self {
VTTRegion {
reflector_: Reflector::new(),
id: DomRefCell::new(DOMString::default()),
@@ -42,13 +43,13 @@ impl VTTRegion {
}
}
- pub fn new(global: &GlobalScope) -> DomRoot<Self> {
- reflect_dom_object(Box::new(Self::new_inherited()), global)
+ fn new(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<Self> {
+ reflect_dom_object2(Box::new(Self::new_inherited()), global, proto)
}
#[allow(non_snake_case)]
- pub fn Constructor(window: &Window) -> Fallible<DomRoot<Self>> {
- Ok(VTTRegion::new(&window.global()))
+ pub fn Constructor(window: &Window, proto: Option<HandleObject>) -> Fallible<DomRoot<Self>> {
+ Ok(VTTRegion::new(&window.global(), proto))
}
}
diff --git a/components/script/dom/webglcontextevent.rs b/components/script/dom/webglcontextevent.rs
index 95e83cbf3a5..3d4c43e357e 100644
--- a/components/script/dom/webglcontextevent.rs
+++ b/components/script/dom/webglcontextevent.rs
@@ -7,12 +7,13 @@ use crate::dom::bindings::codegen::Bindings::WebGLContextEventBinding::WebGLCont
use crate::dom::bindings::codegen::Bindings::WebGLContextEventBinding::WebGLContextEventMethods;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::{Event, EventBubbles, EventCancelable};
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -34,7 +35,7 @@ impl WebGLContextEventMethods for WebGLContextEvent {
}
impl WebGLContextEvent {
- pub fn new_inherited(status_message: DOMString) -> WebGLContextEvent {
+ fn new_inherited(status_message: DOMString) -> WebGLContextEvent {
WebGLContextEvent {
event: Event::new_inherited(),
status_message: status_message,
@@ -48,9 +49,21 @@ impl WebGLContextEvent {
cancelable: EventCancelable,
status_message: DOMString,
) -> DomRoot<WebGLContextEvent> {
- let event = reflect_dom_object(
+ Self::new_with_proto(window, None, type_, bubbles, cancelable, status_message)
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: EventBubbles,
+ cancelable: EventCancelable,
+ status_message: DOMString,
+ ) -> DomRoot<WebGLContextEvent> {
+ let event = reflect_dom_object2(
Box::new(WebGLContextEvent::new_inherited(status_message)),
window,
+ proto,
);
{
@@ -64,6 +77,7 @@ impl WebGLContextEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &WebGLContextEventInit,
) -> Fallible<DomRoot<WebGLContextEvent>> {
@@ -76,8 +90,9 @@ impl WebGLContextEvent {
let cancelable = EventCancelable::from(init.parent.cancelable);
- Ok(WebGLContextEvent::new(
+ Ok(WebGLContextEvent::new_with_proto(
window,
+ proto,
Atom::from(type_),
bubbles,
cancelable,
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 59b87d08987..212e88af8d0 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -10,7 +10,7 @@ use crate::dom::bindings::conversions::ToJSValConvertible;
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::refcounted::Trusted;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::{is_token, DOMString, USVString};
use crate::dom::blob::Blob;
@@ -29,7 +29,7 @@ use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use ipc_channel::router::ROUTER;
use js::jsapi::{JSAutoRealm, JSObject};
use js::jsval::UndefinedValue;
-use js::rust::CustomAutoRooterGuard;
+use js::rust::{CustomAutoRooterGuard, HandleObject};
use js::typedarray::{ArrayBuffer, ArrayBufferView, CreateWith};
use net_traits::request::{Referrer, RequestBuilder, RequestMode};
use net_traits::MessageData;
@@ -127,16 +127,18 @@ impl WebSocket {
fn new(
global: &GlobalScope,
+ proto: Option<HandleObject>,
url: ServoUrl,
sender: IpcSender<WebSocketDomAction>,
) -> DomRoot<WebSocket> {
- reflect_dom_object(Box::new(WebSocket::new_inherited(url, sender)), global)
+ reflect_dom_object2(Box::new(WebSocket::new_inherited(url, sender)), global, proto)
}
/// <https://html.spec.whatwg.org/multipage/#dom-websocket>
#[allow(non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
url: DOMString,
protocols: Option<StringOrStringSequence>,
) -> Fallible<DomRoot<WebSocket>> {
@@ -190,7 +192,7 @@ impl WebSocket {
ProfiledIpc::IpcReceiver<WebSocketNetworkEvent>,
) = ProfiledIpc::channel(global.time_profiler_chan().clone()).unwrap();
- let ws = WebSocket::new(global, url_record.clone(), dom_action_sender);
+ let ws = WebSocket::new(global, proto, url_record.clone(), dom_action_sender);
let address = Trusted::new(&*ws);
// Step 8.
diff --git a/components/script/dom/wheelevent.rs b/components/script/dom/wheelevent.rs
index d7e33b84633..cc7847b1dcd 100644
--- a/components/script/dom/wheelevent.rs
+++ b/components/script/dom/wheelevent.rs
@@ -8,13 +8,14 @@ use crate::dom::bindings::codegen::Bindings::WheelEventBinding::WheelEventMethod
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::num::Finite;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
use crate::dom::event::{Event, EventBubbles, EventCancelable};
use crate::dom::mouseevent::MouseEvent;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use std::cell::Cell;
#[dom_struct]
@@ -37,8 +38,8 @@ impl WheelEvent {
}
}
- pub fn new_unintialized(window: &Window) -> DomRoot<WheelEvent> {
- reflect_dom_object(Box::new(WheelEvent::new_inherited()), window)
+ fn new_unintialized(window: &Window, proto: Option<HandleObject>) -> DomRoot<WheelEvent> {
+ reflect_dom_object2(Box::new(WheelEvent::new_inherited()), window, proto)
}
pub fn new(
@@ -53,7 +54,35 @@ impl WheelEvent {
delta_z: Finite<f64>,
delta_mode: u32,
) -> DomRoot<WheelEvent> {
- let ev = WheelEvent::new_unintialized(window);
+ Self::new_with_proto(
+ window,
+ None,
+ type_,
+ can_bubble,
+ cancelable,
+ view,
+ detail,
+ delta_x,
+ delta_y,
+ delta_z,
+ delta_mode,
+ )
+ }
+
+ fn new_with_proto(
+ window: &Window,
+ proto: Option<HandleObject>,
+ type_: DOMString,
+ can_bubble: EventBubbles,
+ cancelable: EventCancelable,
+ view: Option<&Window>,
+ detail: i32,
+ delta_x: Finite<f64>,
+ delta_y: Finite<f64>,
+ delta_z: Finite<f64>,
+ delta_mode: u32,
+ ) -> DomRoot<WheelEvent> {
+ let ev = WheelEvent::new_unintialized(window, proto);
ev.InitWheelEvent(
type_,
bool::from(can_bubble),
@@ -72,11 +101,13 @@ impl WheelEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &WheelEventBinding::WheelEventInit,
) -> Fallible<DomRoot<WheelEvent>> {
- let event = WheelEvent::new(
+ let event = WheelEvent::new_with_proto(
window,
+ proto,
type_,
EventBubbles::from(init.parent.parent.parent.parent.bubbles),
EventCancelable::from(init.parent.parent.parent.parent.cancelable),
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index b9370f02914..5bd0acf701c 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -9,7 +9,7 @@ use crate::dom::bindings::codegen::Bindings::WorkerBinding::{WorkerMethods, Work
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::refcounted::Trusted;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::USVString;
use crate::dom::bindings::structuredclone;
@@ -31,7 +31,7 @@ use dom_struct::dom_struct;
use ipc_channel::ipc;
use js::jsapi::{Heap, JSObject, JS_RequestInterruptCallback};
use js::jsval::UndefinedValue;
-use js::rust::{CustomAutoRooter, CustomAutoRooterGuard, HandleValue};
+use js::rust::{CustomAutoRooter, CustomAutoRooterGuard, HandleObject, HandleValue};
use script_traits::{StructuredSerializedData, WorkerScriptLoadOrigin};
use std::cell::Cell;
use std::sync::atomic::{AtomicBool, Ordering};
@@ -63,18 +63,20 @@ impl Worker {
}
}
- pub fn new(
+ fn new(
global: &GlobalScope,
+ proto: Option<HandleObject>,
sender: Sender<DedicatedWorkerScriptMsg>,
closing: Arc<AtomicBool>,
) -> DomRoot<Worker> {
- reflect_dom_object(Box::new(Worker::new_inherited(sender, closing)), global)
+ reflect_dom_object2(Box::new(Worker::new_inherited(sender, closing)), global, proto)
}
// https://html.spec.whatwg.org/multipage/#dom-worker
#[allow(unsafe_code, non_snake_case)]
pub fn Constructor(
global: &GlobalScope,
+ proto: Option<HandleObject>,
script_url: USVString,
worker_options: &WorkerOptions,
) -> Fallible<DomRoot<Worker>> {
@@ -86,7 +88,7 @@ impl Worker {
let (sender, receiver) = unbounded();
let closing = Arc::new(AtomicBool::new(false));
- let worker = Worker::new(global, sender.clone(), closing.clone());
+ let worker = Worker::new(global, proto, sender.clone(), closing.clone());
let worker_ref = Trusted::new(&*worker);
let worker_load_origin = WorkerScriptLoadOrigin {
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index 1c6db3a5953..04c875aadd1 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -13,7 +13,7 @@ use crate::dom::bindings::conversions::ToJSValConvertible;
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::refcounted::Trusted;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot, MutNullableDom};
use crate::dom::bindings::str::{is_token, ByteString, DOMString, USVString};
use crate::dom::blob::{normalize_type_string, Blob};
@@ -52,6 +52,7 @@ use ipc_channel::router::ROUTER;
use js::jsapi::JS_ClearPendingException;
use js::jsapi::{Heap, JSObject};
use js::jsval::{JSVal, NullValue, UndefinedValue};
+use js::rust::HandleObject;
use js::rust::wrappers::JS_ParseJSON;
use js::typedarray::{ArrayBuffer, CreateWith};
use mime::{self, Mime, Name};
@@ -213,14 +214,15 @@ impl XMLHttpRequest {
canceller: DomRefCell::new(Default::default()),
}
}
- pub fn new(global: &GlobalScope) -> DomRoot<XMLHttpRequest> {
- reflect_dom_object(Box::new(XMLHttpRequest::new_inherited(global)), global)
+
+ fn new(global: &GlobalScope, proto: Option<HandleObject>) -> DomRoot<XMLHttpRequest> {
+ reflect_dom_object2(Box::new(XMLHttpRequest::new_inherited(global)), global, proto)
}
// https://xhr.spec.whatwg.org/#constructors
#[allow(non_snake_case)]
- pub fn Constructor(global: &GlobalScope) -> Fallible<DomRoot<XMLHttpRequest>> {
- Ok(XMLHttpRequest::new(global))
+ pub fn Constructor(global: &GlobalScope, proto: Option<HandleObject>) -> Fallible<DomRoot<XMLHttpRequest>> {
+ Ok(XMLHttpRequest::new(global, proto))
}
fn sync_in_window(&self) -> bool {
diff --git a/components/script/dom/xmlserializer.rs b/components/script/dom/xmlserializer.rs
index 2b65d061fa6..e7f74697657 100644
--- a/components/script/dom/xmlserializer.rs
+++ b/components/script/dom/xmlserializer.rs
@@ -4,12 +4,13 @@
use crate::dom::bindings::codegen::Bindings::XMLSerializerBinding::XMLSerializerMethods;
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::node::Node;
use crate::dom::window::Window;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use xml5ever::serialize::{serialize, SerializeOpts, TraversalScope};
#[dom_struct]
@@ -26,13 +27,13 @@ impl XMLSerializer {
}
}
- pub fn new(window: &Window) -> DomRoot<XMLSerializer> {
- reflect_dom_object(Box::new(XMLSerializer::new_inherited(window)), window)
+ pub fn new(window: &Window, proto: Option<HandleObject>) -> DomRoot<XMLSerializer> {
+ reflect_dom_object2(Box::new(XMLSerializer::new_inherited(window)), window, proto)
}
#[allow(non_snake_case)]
- pub fn Constructor(window: &Window) -> Fallible<DomRoot<XMLSerializer>> {
- Ok(XMLSerializer::new(window))
+ pub fn Constructor(window: &Window, proto: Option<HandleObject>) -> Fallible<DomRoot<XMLSerializer>> {
+ Ok(XMLSerializer::new(window, proto))
}
}
diff --git a/components/script/dom/xrinputsourceevent.rs b/components/script/dom/xrinputsourceevent.rs
index 47ed6d90626..cdbc63b6454 100644
--- a/components/script/dom/xrinputsourceevent.rs
+++ b/components/script/dom/xrinputsourceevent.rs
@@ -8,7 +8,7 @@ use crate::dom::bindings::codegen::Bindings::XRInputSourceEventBinding::{
};
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -17,6 +17,7 @@ use crate::dom::window::Window;
use crate::dom::xrframe::XRFrame;
use crate::dom::xrinputsource::XRInputSource;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -44,9 +45,22 @@ impl XRInputSourceEvent {
frame: &XRFrame,
source: &XRInputSource,
) -> DomRoot<XRInputSourceEvent> {
- let trackevent = reflect_dom_object(
+ Self::new_with_proto(global, None, type_, bubbles, cancelable, frame, source)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ frame: &XRFrame,
+ source: &XRInputSource,
+ ) -> DomRoot<XRInputSourceEvent> {
+ let trackevent = reflect_dom_object2(
Box::new(XRInputSourceEvent::new_inherited(frame, source)),
global,
+ proto,
);
{
let event = trackevent.upcast::<Event>();
@@ -58,11 +72,13 @@ impl XRInputSourceEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &XRInputSourceEventBinding::XRInputSourceEventInit,
) -> Fallible<DomRoot<XRInputSourceEvent>> {
- Ok(XRInputSourceEvent::new(
+ Ok(XRInputSourceEvent::new_with_proto(
&window.global(),
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/xrinputsourceschangeevent.rs b/components/script/dom/xrinputsourceschangeevent.rs
index 99e5da7ead7..09cbcdc2fc1 100644
--- a/components/script/dom/xrinputsourceschangeevent.rs
+++ b/components/script/dom/xrinputsourceschangeevent.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::XRInputSourcesChangeEventBinding::{
self, XRInputSourcesChangeEventMethods,
};
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -21,6 +21,7 @@ use dom_struct::dom_struct;
use js::conversions::ToJSValConvertible;
use js::jsapi::Heap;
use js::jsval::{JSVal, UndefinedValue};
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -44,7 +45,6 @@ impl XRInputSourcesChangeEvent {
}
}
- #[allow(unsafe_code)]
pub fn new(
global: &GlobalScope,
type_: Atom,
@@ -54,9 +54,33 @@ impl XRInputSourcesChangeEvent {
added: &[DomRoot<XRInputSource>],
removed: &[DomRoot<XRInputSource>],
) -> DomRoot<XRInputSourcesChangeEvent> {
- let changeevent = reflect_dom_object(
+ Self::new_with_proto(
+ global,
+ None,
+ type_,
+ bubbles,
+ cancelable,
+ session,
+ added,
+ removed,
+ )
+ }
+
+ #[allow(unsafe_code)]
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ session: &XRSession,
+ added: &[DomRoot<XRInputSource>],
+ removed: &[DomRoot<XRInputSource>],
+ ) -> DomRoot<XRInputSourcesChangeEvent> {
+ let changeevent = reflect_dom_object2(
Box::new(XRInputSourcesChangeEvent::new_inherited(session)),
global,
+ proto,
);
{
let event = changeevent.upcast::<Event>();
@@ -79,11 +103,13 @@ impl XRInputSourcesChangeEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &XRInputSourcesChangeEventBinding::XRInputSourcesChangeEventInit,
) -> DomRoot<XRInputSourcesChangeEvent> {
- XRInputSourcesChangeEvent::new(
+ XRInputSourcesChangeEvent::new_with_proto(
&window.global(),
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/xrlayerevent.rs b/components/script/dom/xrlayerevent.rs
index d3485fa1c51..dc8cfe3662d 100644
--- a/components/script/dom/xrlayerevent.rs
+++ b/components/script/dom/xrlayerevent.rs
@@ -5,7 +5,7 @@
use crate::dom::bindings::codegen::Bindings::EventBinding::EventBinding::EventMethods;
use crate::dom::bindings::codegen::Bindings::XRLayerEventBinding::XRLayerEventInit;
use crate::dom::bindings::codegen::Bindings::XRLayerEventBinding::XRLayerEventMethods;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::root::Dom;
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::DOMString;
@@ -13,6 +13,7 @@ use crate::dom::event::Event;
use crate::dom::window::Window;
use crate::dom::xrlayer::XRLayer;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
// https://w3c.github.io/uievents/#interface-uievent
@@ -30,17 +31,18 @@ impl XRLayerEvent {
}
}
- pub fn new(window: &Window, layer: &XRLayer) -> DomRoot<XRLayerEvent> {
- reflect_dom_object(Box::new(XRLayerEvent::new_inherited(layer)), window)
+ fn new(window: &Window, proto: Option<HandleObject>, layer: &XRLayer) -> DomRoot<XRLayerEvent> {
+ reflect_dom_object2(Box::new(XRLayerEvent::new_inherited(layer)), window, proto)
}
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &XRLayerEventInit,
) -> DomRoot<XRLayerEvent> {
- let event = XRLayerEvent::new(window, &init.layer);
+ let event = XRLayerEvent::new(window, proto, &init.layer);
let type_ = Atom::from(type_);
let bubbles = init.parent.bubbles;
let cancelable = init.parent.cancelable;
diff --git a/components/script/dom/xrmediabinding.rs b/components/script/dom/xrmediabinding.rs
index 5e1dfd3abeb..c3c4c3a5fc7 100644
--- a/components/script/dom/xrmediabinding.rs
+++ b/components/script/dom/xrmediabinding.rs
@@ -6,7 +6,7 @@ use crate::dom::bindings::codegen::Bindings::XRMediaBindingBinding::XRMediaBindi
use crate::dom::bindings::codegen::Bindings::XRMediaBindingBinding::XRMediaLayerInit;
use crate::dom::bindings::error::Error;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::reflector::Reflector;
use crate::dom::bindings::root::Dom;
use crate::dom::bindings::root::DomRoot;
@@ -17,6 +17,7 @@ use crate::dom::xrequirectlayer::XREquirectLayer;
use crate::dom::xrquadlayer::XRQuadLayer;
use crate::dom::xrsession::XRSession;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct XRMediaBinding {
@@ -32,12 +33,12 @@ impl XRMediaBinding {
}
}
- pub fn new(global: &Window, session: &XRSession) -> DomRoot<XRMediaBinding> {
- reflect_dom_object(Box::new(XRMediaBinding::new_inherited(session)), global)
+ fn new(global: &Window, proto: Option<HandleObject>, session: &XRSession) -> DomRoot<XRMediaBinding> {
+ reflect_dom_object2(Box::new(XRMediaBinding::new_inherited(session)), global, proto)
}
#[allow(non_snake_case)]
- pub fn Constructor(global: &Window, session: &XRSession) -> Fallible<DomRoot<XRMediaBinding>> {
+ pub fn Constructor(global: &Window, proto: Option<HandleObject>, session: &XRSession) -> Fallible<DomRoot<XRMediaBinding>> {
// Step 1.
if session.is_ended() {
return Err(Error::InvalidState);
@@ -49,7 +50,7 @@ impl XRMediaBinding {
}
// Steps 3-5.
- Ok(XRMediaBinding::new(global, session))
+ Ok(XRMediaBinding::new(global, proto, session))
}
}
diff --git a/components/script/dom/xrray.rs b/components/script/dom/xrray.rs
index 781ff6a396b..029929ae37d 100644
--- a/components/script/dom/xrray.rs
+++ b/components/script/dom/xrray.rs
@@ -5,7 +5,7 @@
use crate::dom::bindings::codegen::Bindings::DOMPointBinding::DOMPointInit;
use crate::dom::bindings::codegen::Bindings::XRRayBinding::{XRRayDirectionInit, XRRayMethods};
use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::utils::create_typed_array;
use crate::dom::dompointreadonly::DOMPointReadOnly;
@@ -16,6 +16,7 @@ use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use euclid::{Angle, RigidTransform3D, Rotation3D, Vector3D};
use js::jsapi::{Heap, JSObject};
+use js::rust::HandleObject;
use std::ptr::NonNull;
use webxr_api::{ApiSpace, Ray};
@@ -37,14 +38,15 @@ impl XRRay {
}
}
- pub fn new(global: &GlobalScope, ray: Ray<ApiSpace>) -> DomRoot<XRRay> {
- reflect_dom_object(Box::new(XRRay::new_inherited(ray)), global)
+ fn new(global: &GlobalScope, proto: Option<HandleObject>, ray: Ray<ApiSpace>) -> DomRoot<XRRay> {
+ reflect_dom_object2(Box::new(XRRay::new_inherited(ray)), global, proto)
}
#[allow(non_snake_case)]
/// https://immersive-web.github.io/hit-test/#dom-xrray-xrray
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
origin: &DOMPointInit,
direction: &XRRayDirectionInit,
) -> Fallible<DomRoot<Self>> {
@@ -68,19 +70,19 @@ impl XRRay {
)
.normalize();
- Ok(Self::new(&window.global(), Ray { origin, direction }))
+ Ok(Self::new(&window.global(), proto, Ray { origin, direction }))
}
#[allow(non_snake_case)]
/// https://immersive-web.github.io/hit-test/#dom-xrray-xrray-transform
- pub fn Constructor_(window: &Window, transform: &XRRigidTransform) -> Fallible<DomRoot<Self>> {
+ pub fn Constructor_(window: &Window, proto: Option<HandleObject>, transform: &XRRigidTransform) -> Fallible<DomRoot<Self>> {
let transform = transform.transform();
let origin = transform.translation;
let direction = transform
.rotation
.transform_vector3d(Vector3D::new(0., 0., -1.));
- Ok(Self::new(&window.global(), Ray { origin, direction }))
+ Ok(Self::new(&window.global(), proto, Ray { origin, direction }))
}
pub fn ray(&self) -> Ray<ApiSpace> {
diff --git a/components/script/dom/xrrigidtransform.rs b/components/script/dom/xrrigidtransform.rs
index 00909e1fe1c..4cbbee32386 100644
--- a/components/script/dom/xrrigidtransform.rs
+++ b/components/script/dom/xrrigidtransform.rs
@@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::XRRigidTransformBinding::XRRigidTra
use crate::dom::bindings::error::Error;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::reflector::DomObject;
-use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::reflector::{reflect_dom_object2, Reflector};
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
use crate::dom::bindings::utils::create_typed_array;
use crate::dom::dompointreadonly::DOMPointReadOnly;
@@ -18,6 +18,7 @@ use crate::script_runtime::JSContext;
use dom_struct::dom_struct;
use euclid::{RigidTransform3D, Rotation3D, Vector3D};
use js::jsapi::{Heap, JSObject};
+use js::rust::HandleObject;
use std::ptr::NonNull;
#[dom_struct]
@@ -45,7 +46,11 @@ impl XRRigidTransform {
}
pub fn new(global: &GlobalScope, transform: ApiRigidTransform) -> DomRoot<XRRigidTransform> {
- reflect_dom_object(Box::new(XRRigidTransform::new_inherited(transform)), global)
+ Self::new_with_proto(global, None, transform)
+ }
+
+ fn new_with_proto(global: &GlobalScope, proto: Option<HandleObject>, transform: ApiRigidTransform) -> DomRoot<XRRigidTransform> {
+ reflect_dom_object2(Box::new(XRRigidTransform::new_inherited(transform)), global, proto)
}
pub fn identity(window: &GlobalScope) -> DomRoot<XRRigidTransform> {
@@ -57,6 +62,7 @@ impl XRRigidTransform {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
position: &DOMPointInit,
orientation: &DOMPointInit,
) -> Fallible<DomRoot<Self>> {
@@ -81,7 +87,7 @@ impl XRRigidTransform {
return Err(Error::InvalidState);
}
let transform = RigidTransform3D::new(rotate, translate);
- Ok(XRRigidTransform::new(&window.global(), transform))
+ Ok(XRRigidTransform::new_with_proto(&window.global(), proto, transform))
}
}
diff --git a/components/script/dom/xrsessionevent.rs b/components/script/dom/xrsessionevent.rs
index 95005d4e397..4fcfbfff3e2 100644
--- a/components/script/dom/xrsessionevent.rs
+++ b/components/script/dom/xrsessionevent.rs
@@ -6,7 +6,7 @@ use crate::dom::bindings::codegen::Bindings::EventBinding::EventBinding::EventMe
use crate::dom::bindings::codegen::Bindings::XRSessionEventBinding::{self, XRSessionEventMethods};
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::bindings::str::DOMString;
use crate::dom::event::Event;
@@ -14,6 +14,7 @@ use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use crate::dom::xrsession::XRSession;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
use servo_atoms::Atom;
#[dom_struct]
@@ -38,8 +39,19 @@ impl XRSessionEvent {
cancelable: bool,
session: &XRSession,
) -> DomRoot<XRSessionEvent> {
+ Self::new_with_proto(global, None, type_, bubbles, cancelable, session)
+ }
+
+ fn new_with_proto(
+ global: &GlobalScope,
+ proto: Option<HandleObject>,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ session: &XRSession,
+ ) -> DomRoot<XRSessionEvent> {
let trackevent =
- reflect_dom_object(Box::new(XRSessionEvent::new_inherited(&session)), global);
+ reflect_dom_object2(Box::new(XRSessionEvent::new_inherited(&session)), global, proto);
{
let event = trackevent.upcast::<Event>();
event.init_event(type_, bubbles, cancelable);
@@ -50,11 +62,13 @@ impl XRSessionEvent {
#[allow(non_snake_case)]
pub fn Constructor(
window: &Window,
+ proto: Option<HandleObject>,
type_: DOMString,
init: &XRSessionEventBinding::XRSessionEventInit,
) -> Fallible<DomRoot<XRSessionEvent>> {
- Ok(XRSessionEvent::new(
+ Ok(XRSessionEvent::new_with_proto(
&window.global(),
+ proto,
Atom::from(type_),
init.parent.bubbles,
init.parent.cancelable,
diff --git a/components/script/dom/xrwebglbinding.rs b/components/script/dom/xrwebglbinding.rs
index 64ea31e0bce..fb64c92d7e6 100644
--- a/components/script/dom/xrwebglbinding.rs
+++ b/components/script/dom/xrwebglbinding.rs
@@ -13,7 +13,7 @@ use crate::dom::bindings::codegen::Bindings::XRWebGLBindingBinding::XRWebGLBindi
use crate::dom::bindings::codegen::UnionTypes::WebGLRenderingContextOrWebGL2RenderingContext;
use crate::dom::bindings::error::Error;
use crate::dom::bindings::error::Fallible;
-use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::reflect_dom_object2;
use crate::dom::bindings::reflector::Reflector;
use crate::dom::bindings::root::Dom;
use crate::dom::bindings::root::DomRoot;
@@ -30,6 +30,7 @@ use crate::dom::xrsession::XRSession;
use crate::dom::xrview::XRView;
use crate::dom::xrwebglsubimage::XRWebGLSubImage;
use dom_struct::dom_struct;
+use js::rust::HandleObject;
#[dom_struct]
pub struct XRWebGLBinding {
@@ -47,20 +48,23 @@ impl XRWebGLBinding {
}
}
- pub fn new(
+ fn new(
global: &Window,
+ proto: Option<HandleObject>,
session: &XRSession,
context: &WebGLRenderingContext,
) -> DomRoot<XRWebGLBinding> {
- reflect_dom_object(
+ reflect_dom_object2(
Box::new(XRWebGLBinding::new_inherited(session, context)),
global,
+ proto,
)
}
#[allow(non_snake_case)]
pub fn Constructor(
global: &Window,
+ proto: Option<HandleObject>,
session: &XRSession,
context: WebGLRenderingContextOrWebGL2RenderingContext,
) -> DomRoot<XRWebGLBinding> {
@@ -70,7 +74,7 @@ impl XRWebGLBinding {
ctx.base_context()
},
};
- XRWebGLBinding::new(global, session, &context)
+ XRWebGLBinding::new(global, proto, session, &context)
}
}
diff --git a/components/script/dom/xrwebgllayer.rs b/components/script/dom/xrwebgllayer.rs
index dd1e4eff57f..bbf6e76e5db 100644
--- a/components/script/dom/xrwebgllayer.rs
+++ b/components/script/dom/xrwebgllayer.rs
@@ -10,7 +10,7 @@ use crate::dom::bindings::codegen::Bindings::XRWebGLLayerBinding::XRWebGLRenderi
use crate::dom::bindings::error::Error;
use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::inheritance::Castable;
-use crate::dom::bindings::reflector::{reflect_dom_object, DomObject};
+use crate::dom::bindings::reflector::{reflect_dom_object2, DomObject};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::globalscope::GlobalScope;
use crate::dom::webglframebuffer::WebGLFramebuffer;
@@ -28,6 +28,7 @@ use canvas_traits::webgl::WebGLContextId;
use canvas_traits::webgl::WebGLTextureId;
use dom_struct::dom_struct;
use euclid::{Rect, Size2D};
+use js::rust::HandleObject;
use std::convert::TryInto;
use webxr_api::ContextId as WebXRContextId;
use webxr_api::LayerId;
@@ -78,15 +79,16 @@ impl XRWebGLLayer {
}
}
- pub fn new(
+ fn new(
global: &GlobalScope,
+ proto: Option<HandleObject>,
session: &XRSession,
context: &WebGLRenderingContext,
init: &XRWebGLLayerInit,
framebuffer: Option<&WebGLFramebuffer>,
layer_id: Option<LayerId>,
) -> DomRoot<XRWebGLLayer> {
- reflect_dom_object(
+ reflect_dom_object2(
Box::new(XRWebGLLayer::new_inherited(
session,
context,
@@ -95,6 +97,7 @@ impl XRWebGLLayer {
layer_id,
)),
global,
+ proto,
)
}
@@ -102,6 +105,7 @@ impl XRWebGLLayer {
#[allow(non_snake_case)]
pub fn Constructor(
global: &Window,
+ proto: Option<HandleObject>,
session: &XRSession,
context: XRWebGLRenderingContext,
init: &XRWebGLLayerInit,
@@ -147,6 +151,7 @@ impl XRWebGLLayer {
// Step 10. "Return layer."
Ok(XRWebGLLayer::new(
&global.global(),
+ proto,
session,
&context,
init,