aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2019-05-06 11:38:34 -0400
committerJosh Matthews <josh@joshmatthews.net>2019-05-10 22:43:43 -0400
commit4328713f71d5bc389ecd47e78bfe9b8087b8c104 (patch)
treea61f5fe1150d1e5ff333e3b5af3f1cc1a7911101 /components/script/dom
parentd0d3401361cd44de3b8bf133d44c9338dfefdbef (diff)
downloadservo-4328713f71d5bc389ecd47e78bfe9b8087b8c104.tar.gz
servo-4328713f71d5bc389ecd47e78bfe9b8087b8c104.zip
Update to SpiderMonkey 66.
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/audiobuffer.rs4
-rw-r--r--components/script/dom/bindings/callback.rs12
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py37
-rw-r--r--components/script/dom/bindings/htmlconstructor.rs4
-rw-r--r--components/script/dom/bindings/interface.rs28
-rw-r--r--components/script/dom/bindings/structuredclone.rs13
-rw-r--r--components/script/dom/bindings/utils.rs13
-rw-r--r--components/script/dom/bluetooth.rs2
-rw-r--r--components/script/dom/create.rs8
-rw-r--r--components/script/dom/customelementregistry.rs16
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs5
-rw-r--r--components/script/dom/eventsource.rs4
-rw-r--r--components/script/dom/eventtarget.rs17
-rw-r--r--components/script/dom/filereader.rs5
-rw-r--r--components/script/dom/globalscope.rs15
-rw-r--r--components/script/dom/paintworkletglobalscope.rs4
-rw-r--r--components/script/dom/promise.rs14
-rw-r--r--components/script/dom/serviceworkerglobalscope.rs5
-rw-r--r--components/script/dom/websocket.rs4
-rw-r--r--components/script/dom/window.rs8
-rw-r--r--components/script/dom/windowproxy.rs8
-rw-r--r--components/script/dom/worker.rs4
-rw-r--r--components/script/dom/workerglobalscope.rs4
-rw-r--r--components/script/dom/worklet.rs4
24 files changed, 121 insertions, 117 deletions
diff --git a/components/script/dom/audiobuffer.rs b/components/script/dom/audiobuffer.rs
index cabd281dc63..f36e28ad089 100644
--- a/components/script/dom/audiobuffer.rs
+++ b/components/script/dom/audiobuffer.rs
@@ -14,7 +14,7 @@ use crate::dom::bindings::root::DomRoot;
use crate::dom::window::Window;
use dom_struct::dom_struct;
use js::jsapi::JS_GetArrayBufferViewBuffer;
-use js::jsapi::{Heap, JSAutoCompartment, JSContext, JSObject};
+use js::jsapi::{Heap, JSAutoRealm, JSContext, JSObject};
use js::rust::wrappers::JS_DetachArrayBuffer;
use js::rust::CustomAutoRooterGuard;
use js::typedarray::{CreateWith, Float32Array};
@@ -127,7 +127,7 @@ impl AudioBuffer {
#[allow(unsafe_code)]
unsafe fn restore_js_channel_data(&self, cx: *mut JSContext) -> bool {
let global = self.global();
- let _ac = JSAutoCompartment::new(cx, global.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(cx, global.reflector().get_jsobject().get());
for (i, channel) in self.js_channels.borrow_mut().iter().enumerate() {
if !channel.get().is_null() {
// Already have data in JS array.
diff --git a/components/script/dom/bindings/callback.rs b/components/script/dom/bindings/callback.rs
index 88bb02ce44e..fd33be86546 100644
--- a/components/script/dom/bindings/callback.rs
+++ b/components/script/dom/bindings/callback.rs
@@ -14,9 +14,9 @@ use crate::dom::bindings::utils::AsCCharPtrPtr;
use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
use js::jsapi::Heap;
-use js::jsapi::JSAutoCompartment;
+use js::jsapi::JSAutoRealm;
use js::jsapi::{AddRawValueRoot, IsCallable, JSContext, JSObject};
-use js::jsapi::{JSCompartment, JS_EnterCompartment, JS_LeaveCompartment, RemoveRawValueRoot};
+use js::jsapi::{EnterRealm, LeaveRealm, Realm, RemoveRawValueRoot};
use js::jsval::{JSVal, ObjectValue, UndefinedValue};
use js::rust::wrappers::{JS_GetProperty, JS_WrapObject};
use js::rust::{MutableHandleObject, Runtime};
@@ -229,7 +229,7 @@ pub struct CallSetup {
/// The `JSContext` used for the call.
cx: *mut JSContext,
/// The compartment we were in before the call.
- old_compartment: *mut JSCompartment,
+ old_realm: *mut Realm,
/// The exception handling used for the call.
handling: ExceptionHandling,
/// <https://heycam.github.io/webidl/#es-invoking-callback-functions>
@@ -255,7 +255,7 @@ impl CallSetup {
CallSetup {
exception_global: global,
cx: cx,
- old_compartment: unsafe { JS_EnterCompartment(cx, callback.callback()) },
+ old_realm: unsafe { EnterRealm(cx, callback.callback()) },
handling: handling,
entry_script: Some(aes),
incumbent_script: ais,
@@ -271,9 +271,9 @@ impl CallSetup {
impl Drop for CallSetup {
fn drop(&mut self) {
unsafe {
- JS_LeaveCompartment(self.cx, self.old_compartment);
+ LeaveRealm(self.cx, self.old_realm);
if self.handling == ExceptionHandling::Report {
- let _ac = JSAutoCompartment::new(
+ let _ac = JSAutoRealm::new(
self.cx,
self.exception_global.reflector().get_jsobject().get(),
);
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index ea21989178b..27bfdce71b4 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -458,7 +458,7 @@ class CGMethodCall(CGThing):
pickFirstSignature("%s.get().is_object() && "
"{ rooted!(in(cx) let obj = %s.get().to_object()); "
"let mut is_date = false; "
- "assert!(JS_ObjectIsDate(cx, obj.handle(), &mut is_date)); "
+ "assert!(ObjectIsDate(cx, obj.handle(), &mut is_date)); "
"is_date }" %
(distinguishingArg, distinguishingArg),
lambda s: (s[1][distinguishingIndex].type.isDate() or
@@ -795,7 +795,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
# our own implementation code.
templateBody = fill(
"""
- { // Scope for our JSAutoCompartment.
+ { // Scope for our JSAutoRealm.
rooted!(in(cx) let globalObj = CurrentGlobalOrNull(cx));
let promiseGlobal = GlobalScope::from_object_maybe_wrapped(globalObj.handle().get());
@@ -2709,7 +2709,7 @@ assert!(!scope.get().is_null());
assert!(((*get_object_class(scope.get())).flags & JSCLASS_IS_GLOBAL) != 0);
rooted!(in(cx) let mut proto = ptr::null_mut::<JSObject>());
-let _ac = JSAutoCompartment::new(cx, scope.get());
+let _ac = JSAutoRealm::new(cx, scope.get());
GetProtoObject(cx, scope, proto.handle_mut());
assert!(!proto.is_null());
@@ -2764,7 +2764,7 @@ assert!(!obj.is_null());
(*raw).init_reflector(obj.get());
-let _ac = JSAutoCompartment::new(cx, obj.get());
+let _ac = JSAutoRealm::new(cx, obj.get());
rooted!(in(cx) let mut proto = ptr::null_mut::<JSObject>());
GetProtoObject(cx, obj.handle(), proto.handle_mut());
assert!(JS_SplicePrototype(cx, obj.handle(), proto.handle()));
@@ -2883,7 +2883,7 @@ class CGCreateInterfaceObjectsMethod(CGAbstractMethod):
name = self.descriptor.interface.identifier.name
if self.descriptor.interface.isNamespace():
if self.descriptor.interface.getExtendedAttribute("ProtoObjectHack"):
- proto = "JS_GetObjectPrototype(cx, global)"
+ proto = "GetRealmObjectPrototype(cx)"
else:
proto = "JS_NewPlainObject(cx)"
if self.properties.static_methods.length():
@@ -2919,11 +2919,12 @@ assert!((*cache)[PrototypeList::Constructor::%(id)s as usize].is_null());
parentName = self.descriptor.getParentName()
if not parentName:
if self.descriptor.interface.getExtendedAttribute("ExceptionClass"):
- getPrototypeProto = "prototype_proto.set(JS_GetErrorPrototype(cx))"
+ protoGetter = "GetRealmErrorPrototype"
elif self.descriptor.interface.isIteratorInterface():
- getPrototypeProto = "prototype_proto.set(JS_GetIteratorPrototype(cx))"
+ protoGetter = "GetRealmIteratorPrototype"
else:
- getPrototypeProto = "prototype_proto.set(JS_GetObjectPrototype(cx, global))"
+ protoGetter = "GetRealmObjectPrototype"
+ getPrototypeProto = "prototype_proto.set(%s(cx))" % protoGetter
else:
getPrototypeProto = ("%s::GetProtoObject(cx, global, prototype_proto.handle_mut())" %
toBindingNamespace(parentName))
@@ -2981,14 +2982,13 @@ assert!((*cache)[PrototypeList::ID::%(id)s as usize].is_null());
else:
properties["length"] = 0
parentName = self.descriptor.getParentName()
+ code.append(CGGeneric("rooted!(in(cx) let mut interface_proto = ptr::null_mut::<JSObject>());"))
if parentName:
parentName = toBindingNamespace(parentName)
code.append(CGGeneric("""
-rooted!(in(cx) let mut interface_proto = ptr::null_mut::<JSObject>());
%s::GetConstructorObject(cx, global, interface_proto.handle_mut());""" % parentName))
else:
- code.append(CGGeneric("""
-rooted!(in(cx) let interface_proto = JS_GetFunctionPrototype(cx, global));"""))
+ code.append(CGGeneric("interface_proto.set(GetRealmFunctionPrototype(cx));"))
code.append(CGGeneric("""\
assert!(!interface_proto.is_null());
@@ -5544,7 +5544,7 @@ if args.callee() == new_target.get() {
rooted!(in(cx) let mut prototype = ptr::null_mut::<JSObject>());
{
rooted!(in(cx) let mut proto_val = UndefinedValue());
- let _ac = JSAutoCompartment::new(cx, new_target.get());
+ let _ac = JSAutoRealm::new(cx, new_target.get());
if !JS_GetProperty(cx, new_target.handle(), b"prototype\\0".as_ptr() as *const _, proto_val.handle_mut()) {
return false;
}
@@ -5765,7 +5765,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
'js::jsapi::Heap',
'js::jsapi::INTERNED_STRING_TO_JSID',
'js::jsapi::IsCallable',
- 'js::jsapi::JSAutoCompartment',
+ 'js::jsapi::JSAutoRealm',
'js::jsapi::JSCLASS_FOREGROUND_FINALIZE',
'js::jsapi::JSCLASS_RESERVED_SLOTS_SHIFT',
'js::jsapi::JSClass',
@@ -5804,11 +5804,10 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
'js::rust::wrappers::JS_DefineProperty',
'js::rust::wrappers::JS_DefinePropertyById2',
'js::jsapi::JS_ForwardGetPropertyTo',
- 'js::jsapi::JS_GetErrorPrototype',
- 'js::rust::wrappers::JS_GetFunctionPrototype',
- 'js::jsapi::JS_GetGlobalForObject',
- 'js::jsapi::JS_GetIteratorPrototype',
- 'js::rust::wrappers::JS_GetObjectPrototype',
+ 'js::jsapi::GetRealmErrorPrototype',
+ 'js::jsapi::GetRealmFunctionPrototype',
+ 'js::jsapi::GetRealmIteratorPrototype',
+ 'js::jsapi::GetRealmObjectPrototype',
'js::rust::wrappers::JS_GetProperty',
'js::jsapi::JS_GetPropertyById',
'js::jsapi::JS_GetPropertyDescriptorById',
@@ -5819,7 +5818,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
'js::jsapi::JS_NewObject',
'js::rust::wrappers::JS_NewObjectWithGivenProto',
'js::rust::wrappers::JS_NewObjectWithoutMetadata',
- 'js::rust::wrappers::JS_ObjectIsDate',
+ 'js::rust::wrappers::ObjectIsDate',
'js::rust::wrappers::JS_SetImmutablePrototype',
'js::rust::wrappers::JS_SetProperty',
'js::rust::wrappers::JS_SetPrototype',
diff --git a/components/script/dom/bindings/htmlconstructor.rs b/components/script/dom/bindings/htmlconstructor.rs
index a13b6fa9ecb..08323e1e8cd 100644
--- a/components/script/dom/bindings/htmlconstructor.rs
+++ b/components/script/dom/bindings/htmlconstructor.rs
@@ -81,7 +81,7 @@ use html5ever::interface::QualName;
use html5ever::LocalName;
use js::glue::UnwrapObject;
use js::jsapi::{CallArgs, CurrentGlobalOrNull};
-use js::jsapi::{JSAutoCompartment, JSContext, JSObject};
+use js::jsapi::{JSAutoRealm, JSContext, JSObject};
use js::rust::HandleObject;
use js::rust::MutableHandleObject;
use std::ptr;
@@ -115,7 +115,7 @@ where
}
{
- let _ac = JSAutoCompartment::new(window.get_cx(), callee.get());
+ let _ac = JSAutoRealm::new(window.get_cx(), callee.get());
rooted!(in(window.get_cx()) let mut constructor = ptr::null_mut::<JSObject>());
rooted!(in(window.get_cx()) let global_object = CurrentGlobalOrNull(window.get_cx()));
diff --git a/components/script/dom/bindings/interface.rs b/components/script/dom/bindings/interface.rs
index aa681049c3d..8c44ceec23b 100644
--- a/components/script/dom/bindings/interface.rs
+++ b/components/script/dom/bindings/interface.rs
@@ -16,11 +16,9 @@ use js::error::throw_type_error;
use js::glue::{UncheckedUnwrapObject, RUST_SYMBOL_TO_JSID};
use js::jsapi::HandleObject as RawHandleObject;
use js::jsapi::MutableHandleValue as RawMutableHandleValue;
-use js::jsapi::{Class, ClassOps, CompartmentOptions};
-use js::jsapi::{GetGlobalForObjectCrossCompartment, GetWellKnownSymbol};
-use js::jsapi::{
- JSAutoCompartment, JSClass, JSContext, JSFunctionSpec, JSObject, JSFUN_CONSTRUCTOR,
-};
+use js::jsapi::{Class, ClassOps, RealmOptions};
+use js::jsapi::{GetNonCCWObjectGlobal, GetWellKnownSymbol};
+use js::jsapi::{JSAutoRealm, JSClass, JSContext, JSFunctionSpec, JSObject, JSFUN_CONSTRUCTOR};
use js::jsapi::{JSPropertySpec, JSString, JSTracer, JS_AtomizeAndPinString};
use js::jsapi::{JS_GetFunctionObject, JS_NewFunction, JS_NewGlobalObject};
use js::jsapi::{JS_NewObject, JS_NewPlainObject};
@@ -29,8 +27,8 @@ use js::jsapi::{ObjectOps, OnNewGlobalHookOption, SymbolCode};
use js::jsapi::{TrueHandleValue, Value};
use js::jsapi::{JSPROP_PERMANENT, JSPROP_READONLY, JSPROP_RESOLVING};
use js::jsval::{JSVal, PrivateValue};
-use js::rust::wrappers::{JS_DefineProperty, JS_DefineProperty2};
-use js::rust::wrappers::{JS_DefineProperty3, JS_DefineProperty4, JS_DefinePropertyById4};
+use js::rust::wrappers::{JS_DefineProperty, JS_DefineProperty5};
+use js::rust::wrappers::{JS_DefineProperty3, JS_DefineProperty4, JS_DefinePropertyById5};
use js::rust::wrappers::{JS_FireOnNewGlobalObject, JS_GetPrototype};
use js::rust::wrappers::{JS_LinkConstructorAndPrototype, JS_NewObjectWithUniqueType};
use js::rust::{define_methods, define_properties, get_object_class};
@@ -138,7 +136,7 @@ pub unsafe fn create_global_object(
) {
assert!(rval.is_null());
- let mut options = CompartmentOptions::default();
+ let mut options = RealmOptions::default();
options.creationOptions_.traceGlobal_ = Some(trace);
options.creationOptions_.sharedMemoryAndAtomics_ = true;
@@ -160,7 +158,7 @@ pub unsafe fn create_global_object(
let val = PrivateValue(Box::into_raw(proto_array) as *const libc::c_void);
JS_SetReservedSlot(rval.get(), DOM_PROTOTYPE_SLOT, &val);
- let _ac = JSAutoCompartment::new(cx, rval.get());
+ let _ac = JSAutoRealm::new(cx, rval.get());
JS_FireOnNewGlobalObject(cx, rval.handle());
}
@@ -209,7 +207,7 @@ pub unsafe fn create_interface_prototype_object(
assert!(!unscopable_symbol.is_null());
rooted!(in(cx) let unscopable_id = RUST_SYMBOL_TO_JSID(unscopable_symbol));
- assert!(JS_DefinePropertyById4(
+ assert!(JS_DefinePropertyById5(
cx,
rval.handle(),
unscopable_id.handle(),
@@ -275,7 +273,7 @@ pub unsafe fn create_named_constructors(
constructor.set(JS_GetFunctionObject(fun));
assert!(!constructor.is_null());
- assert!(JS_DefineProperty2(
+ assert!(JS_DefineProperty3(
cx,
constructor.handle(),
b"prototype\0".as_ptr() as *const libc::c_char,
@@ -360,7 +358,7 @@ pub unsafe fn define_on_global_object(
obj: HandleObject,
) {
assert_eq!(*name.last().unwrap(), b'\0');
- assert!(JS_DefineProperty2(
+ assert!(JS_DefineProperty3(
cx,
global,
name.as_ptr() as *const libc::c_char,
@@ -442,7 +440,7 @@ unsafe fn has_instance(
}
// Step 2.
- let global = GetGlobalForObjectCrossCompartment(interface_object.get());
+ let global = GetNonCCWObjectGlobal(interface_object.get());
assert!(!global.is_null());
let proto_or_iface_array = get_proto_or_iface_array(global);
rooted!(in(cx) let prototype = (*proto_or_iface_array)[object_class.proto_id as usize]);
@@ -488,7 +486,7 @@ unsafe fn define_name(cx: *mut JSContext, obj: HandleObject, name: &[u8]) {
assert_eq!(*name.last().unwrap(), b'\0');
rooted!(in(cx) let name = JS_AtomizeAndPinString(cx, name.as_ptr() as *const libc::c_char));
assert!(!name.is_null());
- assert!(JS_DefineProperty3(
+ assert!(JS_DefineProperty4(
cx,
obj,
b"name\0".as_ptr() as *const libc::c_char,
@@ -498,7 +496,7 @@ unsafe fn define_name(cx: *mut JSContext, obj: HandleObject, name: &[u8]) {
}
unsafe fn define_length(cx: *mut JSContext, obj: HandleObject, length: i32) {
- assert!(JS_DefineProperty4(
+ assert!(JS_DefineProperty5(
cx,
obj,
b"length\0".as_ptr() as *const libc::c_char,
diff --git a/components/script/dom/bindings/structuredclone.rs b/components/script/dom/bindings/structuredclone.rs
index 8b6d9c2c1c1..c411dece76b 100644
--- a/components/script/dom/bindings/structuredclone.rs
+++ b/components/script/dom/bindings/structuredclone.rs
@@ -22,7 +22,7 @@ use js::jsapi::MutableHandleObject as RawMutableHandleObject;
use js::jsapi::StructuredCloneScope;
use js::jsapi::TransferableOwnership;
use js::jsapi::JS_STRUCTURED_CLONE_VERSION;
-use js::jsapi::{JSAutoCompartment, JSContext};
+use js::jsapi::{JSAutoRealm, JSContext};
use js::jsapi::{JSObject, JS_ClearPendingException};
use js::jsapi::{JSStructuredCloneCallbacks, JSStructuredCloneReader, JSStructuredCloneWriter};
use js::jsapi::{JS_ReadBytes, JS_WriteBytes};
@@ -220,6 +220,14 @@ unsafe extern "C" fn free_transfer_callback(
) {
}
+unsafe extern "C" fn can_transfer_callback(
+ _cx: *mut JSContext,
+ _obj: RawHandleObject,
+ _closure: *mut raw::c_void,
+) -> bool {
+ false
+}
+
unsafe extern "C" fn report_error_callback(_cx: *mut JSContext, _errorid: u32) {}
static STRUCTURED_CLONE_CALLBACKS: JSStructuredCloneCallbacks = JSStructuredCloneCallbacks {
@@ -229,6 +237,7 @@ static STRUCTURED_CLONE_CALLBACKS: JSStructuredCloneCallbacks = JSStructuredClon
readTransfer: Some(read_transfer_callback),
writeTransfer: Some(write_transfer_callback),
freeTransfer: Some(free_transfer_callback),
+ canTransfer: Some(can_transfer_callback),
};
struct StructuredCloneHolder {
@@ -299,7 +308,7 @@ impl StructuredCloneData {
fn read_clone(global: &GlobalScope, data: *mut u64, nbytes: size_t, rval: MutableHandleValue) {
let cx = global.get_cx();
let globalhandle = global.reflector().get_jsobject();
- let _ac = JSAutoCompartment::new(cx, globalhandle.get());
+ let _ac = JSAutoRealm::new(cx, globalhandle.get());
let mut sc_holder = StructuredCloneHolder { blob: None };
let sc_holder_ptr = &mut sc_holder as *mut _;
unsafe {
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index 727915592e5..621a95c6ef9 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -20,8 +20,8 @@ use js::glue::{RUST_FUNCTION_VALUE_TO_JITINFO, RUST_JSID_IS_INT, RUST_JSID_IS_ST
use js::jsapi::HandleId as RawHandleId;
use js::jsapi::HandleObject as RawHandleObject;
use js::jsapi::MutableHandleObject as RawMutableHandleObject;
-use js::jsapi::{CallArgs, DOMCallbacks, GetGlobalForObjectCrossCompartment};
-use js::jsapi::{Heap, JSAutoCompartment, JSContext};
+use js::jsapi::{CallArgs, DOMCallbacks, GetNonCCWObjectGlobal};
+use js::jsapi::{Heap, JSAutoRealm, JSContext};
use js::jsapi::{JSJitInfo, JSObject, JSTracer, JSWrapObjectCallbacks};
use js::jsapi::{JS_EnumerateStandardClasses, JS_GetLatin1StringCharsAndLength};
use js::jsapi::{JS_IsExceptionPending, JS_IsGlobalObject};
@@ -408,7 +408,7 @@ unsafe extern "C" fn pre_wrap(
_object_passed_to_wrap: RawHandleObject,
rval: RawMutableHandleObject,
) {
- let _ac = JSAutoCompartment::new(cx, obj.get());
+ let _ac = JSAutoRealm::new(cx, obj.get());
let obj = ToWindowProxyIfWindow(obj.get());
assert!(!obj.is_null());
rval.set(obj)
@@ -455,12 +455,11 @@ unsafe fn generic_call(
return false;
}
- let obj = if thisobj.get().is_object() {
+ rooted!(in(cx) let obj = if thisobj.get().is_object() {
thisobj.get().to_object()
} else {
- GetGlobalForObjectCrossCompartment(JS_CALLEE(cx, vp).to_object_or_null())
- };
- rooted!(in(cx) let obj = obj);
+ GetNonCCWObjectGlobal(JS_CALLEE(cx, vp).to_object_or_null())
+ });
let depth = (*info).depth;
let proto_check =
|class: &'static DOMClass| class.interface_chain[depth as usize] as u16 == proto_id;
diff --git a/components/script/dom/bluetooth.rs b/components/script/dom/bluetooth.rs
index 4b31a4b765e..ae7e387a9c3 100644
--- a/components/script/dom/bluetooth.rs
+++ b/components/script/dom/bluetooth.rs
@@ -116,7 +116,7 @@ where
fn response(&mut self, response: BluetoothResponseResult) {
let promise = self.promise.take().expect("bt promise is missing").root();
- // JSAutoCompartment needs to be manually made.
+ // JSAutoRealm needs to be manually made.
// Otherwise, Servo will crash.
match response {
Ok(response) => self.receiver.root().handle_response(response, &promise),
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs
index 6ffb38f753a..5ca05d2f713 100644
--- a/components/script/dom/create.rs
+++ b/components/script/dom/create.rs
@@ -82,7 +82,7 @@ use crate::dom::htmlvideoelement::HTMLVideoElement;
use crate::dom::svgsvgelement::SVGSVGElement;
use crate::script_thread::ScriptThread;
use html5ever::{LocalName, Prefix, QualName};
-use js::jsapi::JSAutoCompartment;
+use js::jsapi::JSAutoRealm;
use servo_config::pref;
fn create_svg_element(
@@ -156,10 +156,8 @@ fn create_html_element(
// Step 6.1.1
unsafe {
- let _ac = JSAutoCompartment::new(
- cx,
- global.reflector().get_jsobject().get(),
- );
+ let _ac =
+ JSAutoRealm::new(cx, global.reflector().get_jsobject().get());
throw_dom_exception(cx, &global, error);
report_pending_exception(cx, true);
}
diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs
index 39824e334a2..32cbe140b2c 100644
--- a/components/script/dom/customelementregistry.rs
+++ b/components/script/dom/customelementregistry.rs
@@ -37,9 +37,9 @@ use html5ever::{LocalName, Namespace, Prefix};
use js::conversions::ToJSValConvertible;
use js::glue::UnwrapObject;
use js::jsapi::{HandleValueArray, Heap, IsCallable, IsConstructor};
-use js::jsapi::{JSAutoCompartment, JSContext, JSObject};
+use js::jsapi::{JSAutoRealm, JSContext, JSObject};
use js::jsval::{JSVal, NullValue, ObjectValue, UndefinedValue};
-use js::rust::wrappers::{Construct1, JS_GetProperty, JS_SameValue};
+use js::rust::wrappers::{Construct1, JS_GetProperty, SameValue};
use js::rust::{HandleObject, HandleValue, MutableHandleValue};
use std::cell::Cell;
use std::collections::{HashMap, VecDeque};
@@ -324,7 +324,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
// Steps 10.1 - 10.2
rooted!(in(cx) let mut prototype = UndefinedValue());
{
- let _ac = JSAutoCompartment::new(cx, constructor.get());
+ let _ac = JSAutoRealm::new(cx, constructor.get());
if let Err(error) = self.check_prototype(constructor.handle(), prototype.handle_mut()) {
self.element_definition_is_running.set(false);
return Err(error);
@@ -334,7 +334,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
// Steps 10.3 - 10.4
rooted!(in(cx) let proto_object = prototype.to_object());
let callbacks = {
- let _ac = JSAutoCompartment::new(cx, proto_object.get());
+ let _ac = JSAutoRealm::new(cx, proto_object.get());
match unsafe { self.get_callbacks(proto_object.handle()) } {
Ok(callbacks) => callbacks,
Err(error) => {
@@ -346,7 +346,7 @@ impl CustomElementRegistryMethods for CustomElementRegistry {
// Step 10.5 - 10.6
let observed_attributes = if callbacks.attribute_changed_callback.is_some() {
- let _ac = JSAutoCompartment::new(cx, constructor.get());
+ let _ac = JSAutoRealm::new(cx, constructor.get());
match self.get_observed_attributes(constructor.handle()) {
Ok(attributes) => attributes,
Err(error) => {
@@ -535,7 +535,7 @@ impl CustomElementDefinition {
rooted!(in(cx) let mut element = ptr::null_mut::<JSObject>());
{
// Go into the constructor's compartment
- let _ac = JSAutoCompartment::new(cx, self.constructor.callback());
+ let _ac = JSAutoRealm::new(cx, self.constructor.callback());
let args = HandleValueArray::new();
if unsafe { !Construct1(cx, constructor.handle(), &args, element.handle_mut()) } {
return Err(Error::JSFailed);
@@ -665,7 +665,7 @@ fn run_upgrade_constructor(
rooted!(in(cx) let mut construct_result = ptr::null_mut::<JSObject>());
{
// Go into the constructor's compartment
- let _ac = JSAutoCompartment::new(cx, constructor.callback());
+ let _ac = JSAutoRealm::new(cx, constructor.callback());
let args = HandleValueArray::new();
// Step 7.1
if unsafe {
@@ -682,7 +682,7 @@ fn run_upgrade_constructor(
let mut same = false;
rooted!(in(cx) let construct_result_val = ObjectValue(construct_result.get()));
if unsafe {
- !JS_SameValue(
+ !SameValue(
cx,
construct_result_val.handle(),
element_val.handle(),
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index 374471b8798..8e49fb40e2d 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -33,7 +33,7 @@ use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use ipc_channel::router::ROUTER;
use js::jsapi::JS_AddInterruptCallback;
-use js::jsapi::{JSAutoCompartment, JSContext};
+use js::jsapi::{JSAutoRealm, JSContext};
use js::jsval::UndefinedValue;
use js::rust::HandleValue;
use msg::constellation_msg::{PipelineId, TopLevelBrowsingContextId};
@@ -433,8 +433,7 @@ impl DedicatedWorkerGlobalScope {
WorkerScriptMsg::DOMMessage(data) => {
let scope = self.upcast::<WorkerGlobalScope>();
let target = self.upcast();
- let _ac =
- JSAutoCompartment::new(scope.get_cx(), scope.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(scope.get_cx(), scope.reflector().get_jsobject().get());
rooted!(in(scope.get_cx()) let mut message = UndefinedValue());
data.read(scope.upcast(), message.handle_mut());
MessageEvent::dispatch_jsval(target, scope.upcast(), message.handle(), None, None);
diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs
index 69fcc7ce903..cad3e268a8c 100644
--- a/components/script/dom/eventsource.rs
+++ b/components/script/dom/eventsource.rs
@@ -28,7 +28,7 @@ use http::header::{self, HeaderName, HeaderValue};
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
use js::conversions::ToJSValConvertible;
-use js::jsapi::JSAutoCompartment;
+use js::jsapi::JSAutoRealm;
use js::jsval::UndefinedValue;
use mime::{self, Mime};
use net_traits::request::{CacheMode, CorsSettings, CredentialsMode};
@@ -222,7 +222,7 @@ impl EventSourceContext {
};
// Steps 4-5
let event = {
- let _ac = JSAutoCompartment::new(
+ let _ac = JSAutoRealm::new(
event_source.global().get_cx(),
event_source.reflector().get_jsobject().get(),
);
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs
index 69e536f73f9..b5376b88945 100644
--- a/components/script/dom/eventtarget.rs
+++ b/components/script/dom/eventtarget.rs
@@ -34,10 +34,10 @@ use crate::dom::virtualmethods::VirtualMethods;
use crate::dom::window::Window;
use dom_struct::dom_struct;
use fnv::FnvHasher;
-use js::jsapi::{JSAutoCompartment, JSFunction, JS_GetFunctionObject};
+use js::jsapi::{JSAutoRealm, JSFunction, JS_GetFunctionObject, SourceText};
use js::rust::wrappers::CompileFunction;
use js::rust::{AutoObjectVectorWrapper, CompileOptionsWrapper};
-use libc::{c_char, size_t};
+use libc::c_char;
use servo_atoms::Atom;
use servo_url::ServoUrl;
use std::collections::hash_map::Entry::{Occupied, Vacant};
@@ -45,6 +45,7 @@ use std::collections::HashMap;
use std::default::Default;
use std::ffi::CString;
use std::hash::BuildHasherDefault;
+use std::marker::PhantomData;
use std::mem;
use std::ops::{Deref, DerefMut};
use std::ptr;
@@ -505,7 +506,7 @@ impl EventTarget {
let scopechain = AutoObjectVectorWrapper::new(cx);
- let _ac = JSAutoCompartment::new(cx, window.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(cx, window.reflector().get_jsobject().get());
rooted!(in(cx) let mut handler = ptr::null_mut::<JSFunction>());
let rv = unsafe {
CompileFunction(
@@ -515,15 +516,19 @@ impl EventTarget {
name.as_ptr(),
args.len() as u32,
args.as_ptr(),
- body.as_ptr(),
- body.len() as size_t,
+ &mut SourceText {
+ units_: body.as_ptr() as *const _,
+ length_: body.len() as u32,
+ ownsUnits_: false,
+ _phantom_0: PhantomData,
+ },
handler.handle_mut().into(),
)
};
if !rv || handler.get().is_null() {
// Step 1.8.2
unsafe {
- let _ac = JSAutoCompartment::new(cx, self.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(cx, self.reflector().get_jsobject().get());
// FIXME(#13152): dispatch error event.
report_pending_exception(cx, false);
}
diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs
index 55989078d4f..677503acea7 100644
--- a/components/script/dom/filereader.rs
+++ b/components/script/dom/filereader.rs
@@ -28,7 +28,7 @@ use base64;
use dom_struct::dom_struct;
use encoding_rs::{Encoding, UTF_8};
use js::jsapi::Heap;
-use js::jsapi::JSAutoCompartment;
+use js::jsapi::JSAutoRealm;
use js::jsapi::JSContext;
use js::jsapi::JSObject;
use js::jsval::{self, JSVal};
@@ -262,8 +262,7 @@ impl FileReader {
FileReader::perform_readastext(&fr.result, data, &blob_contents)
},
FileReaderFunction::ReadAsArrayBuffer => {
- let _ac =
- JSAutoCompartment::new(fr.global().get_cx(), *fr.reflector().get_jsobject());
+ let _ac = JSAutoRealm::new(fr.global().get_cx(), *fr.reflector().get_jsobject());
FileReader::perform_readasarraybuffer(
&fr.result,
fr.global().get_cx(),
diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs
index 33458bf2ece..f803d6228b7 100644
--- a/components/script/dom/globalscope.rs
+++ b/components/script/dom/globalscope.rs
@@ -42,11 +42,11 @@ use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use js::glue::{IsWrapper, UnwrapObject};
use js::jsapi::JSObject;
-use js::jsapi::{CurrentGlobalOrNull, GetGlobalForObjectCrossCompartment};
+use js::jsapi::{CurrentGlobalOrNull, GetNonCCWObjectGlobal};
use js::jsapi::{HandleObject, Heap};
-use js::jsapi::{JSAutoCompartment, JSContext};
+use js::jsapi::{JSAutoRealm, JSContext};
use js::panic::maybe_resume_unwind;
-use js::rust::wrappers::Evaluate2;
+use js::rust::wrappers::EvaluateUtf8;
use js::rust::{get_object_class, CompileOptionsWrapper, ParentRuntime, Runtime};
use js::rust::{HandleValue, MutableHandleValue};
use js::{JSCLASS_IS_DOMJSCLASS, JSCLASS_IS_GLOBAL};
@@ -230,7 +230,7 @@ impl GlobalScope {
#[allow(unsafe_code)]
pub unsafe fn from_object(obj: *mut JSObject) -> DomRoot<Self> {
assert!(!obj.is_null());
- let global = GetGlobalForObjectCrossCompartment(obj);
+ let global = GetNonCCWObjectGlobal(obj);
global_scope_from_global(global)
}
@@ -540,19 +540,18 @@ impl GlobalScope {
|| {
let cx = self.get_cx();
let globalhandle = self.reflector().get_jsobject();
- let code: Vec<u16> = code.encode_utf16().collect();
let filename = CString::new(filename).unwrap();
- let _ac = JSAutoCompartment::new(cx, globalhandle.get());
+ let _ac = JSAutoRealm::new(cx, globalhandle.get());
let _aes = AutoEntryScript::new(self);
let options = CompileOptionsWrapper::new(cx, filename.as_ptr(), line_number);
debug!("evaluating Dom string");
let result = unsafe {
- Evaluate2(
+ EvaluateUtf8(
cx,
options.ptr,
- code.as_ptr(),
+ code.as_ptr() as *const _,
code.len() as libc::size_t,
rval,
)
diff --git a/components/script/dom/paintworkletglobalscope.rs b/components/script/dom/paintworkletglobalscope.rs
index 89b9907c95c..36b57e266f9 100644
--- a/components/script/dom/paintworkletglobalscope.rs
+++ b/components/script/dom/paintworkletglobalscope.rs
@@ -31,7 +31,7 @@ use js::jsapi::HandleValueArray;
use js::jsapi::Heap;
use js::jsapi::IsCallable;
use js::jsapi::IsConstructor;
-use js::jsapi::JSAutoCompartment;
+use js::jsapi::JSAutoRealm;
use js::jsapi::JSObject;
use js::jsapi::JS_ClearPendingException;
use js::jsapi::JS_IsExceptionPending;
@@ -252,7 +252,7 @@ impl PaintWorkletGlobalScope {
);
let cx = self.worklet_global.get_cx();
- let _ac = JSAutoCompartment::new(cx, self.worklet_global.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(cx, self.worklet_global.reflector().get_jsobject().get());
// TODO: Steps 1-2.1.
// Step 2.2-5.1.
diff --git a/components/script/dom/promise.rs b/components/script/dom/promise.rs
index c868d5d52d7..152828b8110 100644
--- a/components/script/dom/promise.rs
+++ b/components/script/dom/promise.rs
@@ -22,7 +22,7 @@ use dom_struct::dom_struct;
use js::conversions::ToJSValConvertible;
use js::jsapi::{AddRawValueRoot, CallArgs, GetFunctionNativeReserved};
use js::jsapi::{Heap, JS_ClearPendingException};
-use js::jsapi::{JSAutoCompartment, JSContext, JSObject, JS_GetFunctionObject};
+use js::jsapi::{JSAutoRealm, JSContext, JSObject, JS_GetFunctionObject};
use js::jsapi::{JS_NewFunction, NewFunctionWithReserved, PromiseState};
use js::jsapi::{RemoveRawValueRoot, SetFunctionNativeReserved};
use js::jsval::{Int32Value, JSVal, ObjectValue, UndefinedValue};
@@ -82,7 +82,7 @@ impl Drop for Promise {
impl Promise {
pub fn new(global: &GlobalScope) -> Rc<Promise> {
let compartment =
- JSAutoCompartment::new(global.get_cx(), global.reflector().get_jsobject().get());
+ JSAutoRealm::new(global.get_cx(), global.reflector().get_jsobject().get());
let comp = InCompartment::Entered(&compartment);
Promise::new_in_current_compartment(global, comp)
}
@@ -142,7 +142,7 @@ impl Promise {
cx: *mut JSContext,
value: HandleValue,
) -> Fallible<Rc<Promise>> {
- let _ac = JSAutoCompartment::new(cx, global.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(cx, global.reflector().get_jsobject().get());
rooted!(in(cx) let p = CallOriginalPromiseResolve(cx, value));
assert!(!p.handle().is_null());
Ok(Promise::new_with_js_promise(p.handle(), cx))
@@ -154,7 +154,7 @@ impl Promise {
cx: *mut JSContext,
value: HandleValue,
) -> Fallible<Rc<Promise>> {
- let _ac = JSAutoCompartment::new(cx, global.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(cx, global.reflector().get_jsobject().get());
rooted!(in(cx) let p = CallOriginalPromiseReject(cx, value));
assert!(!p.handle().is_null());
Ok(Promise::new_with_js_promise(p.handle(), cx))
@@ -166,7 +166,7 @@ impl Promise {
T: ToJSValConvertible,
{
let cx = self.global().get_cx();
- let _ac = JSAutoCompartment::new(cx, self.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(cx, self.reflector().get_jsobject().get());
rooted!(in(cx) let mut v = UndefinedValue());
unsafe {
val.to_jsval(cx, v.handle_mut());
@@ -187,7 +187,7 @@ impl Promise {
T: ToJSValConvertible,
{
let cx = self.global().get_cx();
- let _ac = JSAutoCompartment::new(cx, self.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(cx, self.reflector().get_jsobject().get());
rooted!(in(cx) let mut v = UndefinedValue());
unsafe {
val.to_jsval(cx, v.handle_mut());
@@ -198,7 +198,7 @@ impl Promise {
#[allow(unsafe_code)]
pub fn reject_error(&self, error: Error) {
let cx = self.global().get_cx();
- let _ac = JSAutoCompartment::new(cx, self.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(cx, self.reflector().get_jsobject().get());
rooted!(in(cx) let mut v = UndefinedValue());
unsafe {
error.to_jsval(cx, &self.global(), v.handle_mut());
diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs
index 1ecdbf00b9b..2a5bd7c3312 100644
--- a/components/script/dom/serviceworkerglobalscope.rs
+++ b/components/script/dom/serviceworkerglobalscope.rs
@@ -28,7 +28,7 @@ use devtools_traits::DevtoolScriptControlMsg;
use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use ipc_channel::router::ROUTER;
-use js::jsapi::{JSAutoCompartment, JSContext, JS_AddInterruptCallback};
+use js::jsapi::{JSAutoRealm, JSContext, JS_AddInterruptCallback};
use js::jsval::UndefinedValue;
use msg::constellation_msg::PipelineId;
use net_traits::request::{CredentialsMode, Destination, Referrer, RequestBuilder};
@@ -406,8 +406,7 @@ impl ServiceWorkerGlobalScope {
CommonWorker(WorkerScriptMsg::DOMMessage(data)) => {
let scope = self.upcast::<WorkerGlobalScope>();
let target = self.upcast();
- let _ac =
- JSAutoCompartment::new(scope.get_cx(), scope.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(scope.get_cx(), scope.reflector().get_jsobject().get());
rooted!(in(scope.get_cx()) let mut message = UndefinedValue());
data.read(scope.upcast(), message.handle_mut());
ExtendableMessageEvent::dispatch_jsval(target, scope.upcast(), message.handle());
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 794069f5522..530d2ca6f76 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -27,7 +27,7 @@ use crate::task_source::websocket::WebsocketTaskSource;
use crate::task_source::TaskSource;
use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
-use js::jsapi::{JSAutoCompartment, JSObject};
+use js::jsapi::{JSAutoRealm, JSObject};
use js::jsval::UndefinedValue;
use js::rust::CustomAutoRooterGuard;
use js::typedarray::{ArrayBuffer, ArrayBufferView, CreateWith};
@@ -570,7 +570,7 @@ impl TaskOnce for MessageReceivedTask {
// global.get_cx() returns a valid `JSContext` pointer, so this is safe.
unsafe {
let cx = global.get_cx();
- let _ac = JSAutoCompartment::new(cx, ws.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(cx, ws.reflector().get_jsobject().get());
rooted!(in(cx) let mut message = UndefinedValue());
match self.message {
MessageData::Text(text) => text.to_jsval(cx, message.handle_mut()),
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index e57e27fd8c4..1a8b5e68c8b 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -76,10 +76,10 @@ use embedder_traits::EmbedderMsg;
use euclid::{Point2D, Rect, Size2D, TypedPoint2D, TypedScale, TypedSize2D, Vector2D};
use ipc_channel::ipc::{channel, IpcSender};
use ipc_channel::router::ROUTER;
-use js::jsapi::JSAutoCompartment;
+use js::jsapi::JSAutoRealm;
use js::jsapi::JSContext;
use js::jsapi::JSPROP_ENUMERATE;
-use js::jsapi::JS_GC;
+use js::jsapi::{GCReason, JS_GC};
use js::jsval::JSVal;
use js::jsval::UndefinedValue;
use js::rust::wrappers::JS_DefineProperty;
@@ -901,7 +901,7 @@ impl WindowMethods for Window {
#[allow(unsafe_code)]
fn Gc(&self) {
unsafe {
- JS_GC(self.get_cx());
+ JS_GC(self.get_cx(), GCReason::API);
}
}
@@ -2213,7 +2213,7 @@ impl Window {
// Steps 7.2.-7.5.
let cx = this.get_cx();
let obj = this.reflector().get_jsobject();
- let _ac = JSAutoCompartment::new(cx, obj.get());
+ let _ac = JSAutoRealm::new(cx, obj.get());
rooted!(in(cx) let mut message_clone = UndefinedValue());
serialize_with_transfer_result.read(
this.upcast(),
diff --git a/components/script/dom/windowproxy.rs b/components/script/dom/windowproxy.rs
index 12e726f1752..7b53656e918 100644
--- a/components/script/dom/windowproxy.rs
+++ b/components/script/dom/windowproxy.rs
@@ -31,7 +31,7 @@ use js::jsapi::HandleValue as RawHandleValue;
use js::jsapi::MutableHandle as RawMutableHandle;
use js::jsapi::MutableHandleObject as RawMutableHandleObject;
use js::jsapi::MutableHandleValue as RawMutableHandleValue;
-use js::jsapi::{JSAutoCompartment, JSContext, JSErrNum, JSFreeOp, JSObject};
+use js::jsapi::{JSAutoRealm, JSContext, JSErrNum, JSFreeOp, JSObject};
use js::jsapi::{JSTracer, JS_DefinePropertyById, JSPROP_ENUMERATE, JSPROP_READONLY};
use js::jsapi::{JS_ForwardGetPropertyTo, JS_ForwardSetPropertyTo};
use js::jsapi::{JS_GetOwnPropertyDescriptorById, JS_IsExceptionPending};
@@ -148,7 +148,7 @@ impl WindowProxy {
((*get_object_class(window_jsobject.get())).flags & JSCLASS_IS_GLOBAL),
0
);
- let _ac = JSAutoCompartment::new(cx, window_jsobject.get());
+ let _ac = JSAutoRealm::new(cx, window_jsobject.get());
// Create a new window proxy.
rooted!(in(cx) let js_proxy = NewWindowProxy(cx, window_jsobject, handler));
@@ -219,7 +219,7 @@ impl WindowProxy {
((*get_object_class(window_jsobject.get())).flags & JSCLASS_IS_GLOBAL),
0
);
- let _ac = JSAutoCompartment::new(cx, window_jsobject.get());
+ let _ac = JSAutoRealm::new(cx, window_jsobject.get());
// Create a new window proxy.
rooted!(in(cx) let js_proxy = NewWindowProxy(cx, window_jsobject, handler));
@@ -548,7 +548,7 @@ impl WindowProxy {
((*get_object_class(window_jsobject.get())).flags & JSCLASS_IS_GLOBAL),
0
);
- let _ac = JSAutoCompartment::new(cx, window_jsobject.get());
+ let _ac = JSAutoRealm::new(cx, window_jsobject.get());
// The old window proxy no longer owns this browsing context.
SetProxyReservedSlot(old_js_proxy.get(), 0, &PrivateValue(ptr::null_mut()));
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index aeabbeb2645..76eab2fb666 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -25,7 +25,7 @@ use crossbeam_channel::{unbounded, Sender};
use devtools_traits::{DevtoolsPageInfo, ScriptToDevtoolsControlMsg};
use dom_struct::dom_struct;
use ipc_channel::ipc;
-use js::jsapi::{JSAutoCompartment, JSContext, JS_RequestInterruptCallback};
+use js::jsapi::{JSAutoRealm, JSContext, JS_RequestInterruptCallback};
use js::jsval::UndefinedValue;
use js::rust::HandleValue;
use script_traits::WorkerScriptLoadOrigin;
@@ -137,7 +137,7 @@ impl Worker {
let global = worker.global();
let target = worker.upcast();
- let _ac = JSAutoCompartment::new(global.get_cx(), target.reflector().get_jsobject().get());
+ let _ac = JSAutoRealm::new(global.get_cx(), target.reflector().get_jsobject().get());
rooted!(in(global.get_cx()) let mut message = UndefinedValue());
data.read(&global, message.handle_mut());
MessageEvent::dispatch_jsval(target, &global, message.handle(), None, None);
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index 41b90fa2fa9..cb0a78649dc 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -37,7 +37,7 @@ use crossbeam_channel::Receiver;
use devtools_traits::{DevtoolScriptControlMsg, WorkerId};
use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
-use js::jsapi::{JSAutoCompartment, JSContext};
+use js::jsapi::{JSAutoRealm, JSContext};
use js::jsval::UndefinedValue;
use js::panic::maybe_resume_unwind;
use js::rust::{HandleValue, ParentRuntime};
@@ -401,7 +401,7 @@ impl WorkerGlobalScope {
// https://github.com/servo/servo/issues/6422
println!("evaluate_script failed");
unsafe {
- let _ac = JSAutoCompartment::new(
+ let _ac = JSAutoRealm::new(
self.runtime.cx(),
self.reflector().get_jsobject().get(),
);
diff --git a/components/script/dom/worklet.rs b/components/script/dom/worklet.rs
index a7611517d13..569af7fd184 100644
--- a/components/script/dom/worklet.rs
+++ b/components/script/dom/worklet.rs
@@ -46,7 +46,7 @@ use dom_struct::dom_struct;
use js::jsapi::JSGCParamKey;
use js::jsapi::JSTracer;
use js::jsapi::JS_GetGCParameter;
-use js::jsapi::JS_GC;
+use js::jsapi::{GCReason, JS_GC};
use msg::constellation_msg::PipelineId;
use net_traits::request::Destination;
use net_traits::request::RequestBuilder;
@@ -568,7 +568,7 @@ impl WorkletThread {
self.current_memory_usage(),
self.gc_threshold
);
- unsafe { JS_GC(self.runtime.cx()) };
+ unsafe { JS_GC(self.runtime.cx(), GCReason::API) };
self.gc_threshold = max(MIN_GC_THRESHOLD, self.current_memory_usage() * 2);
debug!(
"END GC (usage = {}, threshold = {}).",