This commit is contained in:
Josh Matthews 2022-11-22 00:24:52 -05:00
parent 76edfce6a7
commit f76bb20c2e
9 changed files with 60 additions and 43 deletions

View file

@ -44,8 +44,12 @@ use js::jsval::ObjectValue;
use js::jsval::UndefinedValue; use js::jsval::UndefinedValue;
use js::rust::wrappers::JS_AlreadyHasOwnPropertyById; use js::rust::wrappers::JS_AlreadyHasOwnPropertyById;
use js::rust::wrappers::JS_NewObjectWithGivenProto; use js::rust::wrappers::JS_NewObjectWithGivenProto;
use js::rust::wrappers::{AppendToIdVector, RUST_INTERNED_STRING_TO_JSID, SetDataPropertyDescriptor}; use js::rust::wrappers::{
use js::rust::{get_context_realm, Handle, HandleObject, HandleValue, MutableHandle, MutableHandleObject}; AppendToIdVector, SetDataPropertyDescriptor, RUST_INTERNED_STRING_TO_JSID,
};
use js::rust::{
get_context_realm, Handle, HandleObject, HandleValue, MutableHandle, MutableHandleObject,
};
use std::{ffi::CStr, os::raw::c_char, ptr}; use std::{ffi::CStr, os::raw::c_char, ptr};
/// Determine if this id shadows any existing properties for this proxy. /// Determine if this id shadows any existing properties for this proxy.

View file

@ -8,6 +8,7 @@ use crate::dom::bindings::conversions::jsid_to_string;
use crate::dom::bindings::str::{ByteString, DOMString, USVString}; use crate::dom::bindings::str::{ByteString, DOMString, USVString};
use indexmap::IndexMap; use indexmap::IndexMap;
use js::conversions::{ConversionResult, FromJSValConvertible, ToJSValConvertible}; use js::conversions::{ConversionResult, FromJSValConvertible, ToJSValConvertible};
use js::jsapi::glue::JS_GetOwnPropertyDescriptorById;
use js::jsapi::HandleId as RawHandleId; use js::jsapi::HandleId as RawHandleId;
use js::jsapi::JSContext; use js::jsapi::JSContext;
use js::jsapi::JS_NewPlainObject; use js::jsapi::JS_NewPlainObject;
@ -20,7 +21,6 @@ use js::jsval::ObjectValue;
use js::jsval::UndefinedValue; use js::jsval::UndefinedValue;
use js::rust::wrappers::GetPropertyKeys; use js::rust::wrappers::GetPropertyKeys;
use js::rust::wrappers::JS_DefineUCProperty2; use js::rust::wrappers::JS_DefineUCProperty2;
use js::jsapi::glue::JS_GetOwnPropertyDescriptorById;
use js::rust::wrappers::JS_GetPropertyById; use js::rust::wrappers::JS_GetPropertyById;
use js::rust::wrappers::JS_IdToValue; use js::rust::wrappers::JS_IdToValue;
use js::rust::HandleId; use js::rust::HandleId;
@ -136,8 +136,13 @@ where
rooted!(in(cx) let mut desc = PropertyDescriptor::default()); rooted!(in(cx) let mut desc = PropertyDescriptor::default());
let mut is_none = false; let mut is_none = false;
if !JS_GetOwnPropertyDescriptorById(cx, object.handle().into(), id.handle().into(), desc.handle_mut().into(), &mut is_none) if !JS_GetOwnPropertyDescriptorById(
{ cx,
object.handle().into(),
id.handle().into(),
desc.handle_mut().into(),
&mut is_none,
) {
return Err(()); return Err(());
} }

View file

@ -18,9 +18,9 @@ use crate::dom::windowproxy;
use crate::script_runtime::JSContext as SafeJSContext; use crate::script_runtime::JSContext as SafeJSContext;
use js::conversions::ToJSValConvertible; use js::conversions::ToJSValConvertible;
use js::glue::JS_GetReservedSlot; use js::glue::JS_GetReservedSlot;
use js::glue::RUST_FUNCTION_VALUE_TO_JITINFO;
use js::glue::{CallJitGetterOp, CallJitMethodOp, CallJitSetterOp, IsWrapper}; use js::glue::{CallJitGetterOp, CallJitMethodOp, CallJitSetterOp, IsWrapper};
use js::glue::{UnwrapObjectDynamic, UnwrapObjectStatic}; use js::glue::{UnwrapObjectDynamic, UnwrapObjectStatic};
use js::glue::RUST_FUNCTION_VALUE_TO_JITINFO;
use js::jsapi::HandleId as RawHandleId; use js::jsapi::HandleId as RawHandleId;
use js::jsapi::HandleObject as RawHandleObject; use js::jsapi::HandleObject as RawHandleObject;
use js::jsapi::MutableHandleIdVector as RawMutableHandleIdVector; use js::jsapi::MutableHandleIdVector as RawMutableHandleIdVector;

View file

@ -82,7 +82,7 @@ use js::glue::{IsWrapper, UnwrapObjectDynamic};
use js::jsapi::Compile1; use js::jsapi::Compile1;
use js::jsapi::SetScriptPrivate; use js::jsapi::SetScriptPrivate;
use js::jsapi::{CurrentGlobalOrNull, GetNonCCWObjectGlobal}; use js::jsapi::{CurrentGlobalOrNull, GetNonCCWObjectGlobal};
use js::jsapi::{HandleObject, Heap, InstantiateOptions, InstantiateGlobalStencil}; use js::jsapi::{HandleObject, Heap, InstantiateGlobalStencil, InstantiateOptions};
use js::jsapi::{JSContext, JSObject, JSScript}; use js::jsapi::{JSContext, JSObject, JSScript};
use js::jsval::PrivateValue; use js::jsval::PrivateValue;
use js::jsval::{JSVal, UndefinedValue}; use js::jsval::{JSVal, UndefinedValue};
@ -2631,7 +2631,12 @@ impl GlobalScope {
hideScriptFromDebugger: false, hideScriptFromDebugger: false,
deferDebugMetadata: false, deferDebugMetadata: false,
}; };
let script = InstantiateGlobalStencil(*cx, &options, *pre_compiled_script.source_code, ptr::null_mut()); let script = InstantiateGlobalStencil(
*cx,
&options,
*pre_compiled_script.source_code,
ptr::null_mut(),
);
compiled_script.set(script); compiled_script.set(script);
}, },
}; };

View file

@ -42,11 +42,11 @@ use encoding_rs::Encoding;
use html5ever::{LocalName, Prefix}; use html5ever::{LocalName, Prefix};
use ipc_channel::ipc; use ipc_channel::ipc;
use ipc_channel::router::ROUTER; use ipc_channel::router::ROUTER;
use js::jsapi::{ use js::jsapi::{CanCompileOffThread, CompileToStencilOffThread1, OffThreadToken};
CanCompileOffThread, CompileToStencilOffThread1, OffThreadToken,
};
use js::jsval::UndefinedValue; use js::jsval::UndefinedValue;
use js::rust::{transform_str_to_source_text, CompileOptionsWrapper, FinishOffThreadStencil, Stencil}; use js::rust::{
transform_str_to_source_text, CompileOptionsWrapper, FinishOffThreadStencil, Stencil,
};
use msg::constellation_msg::PipelineId; use msg::constellation_msg::PipelineId;
use net_traits::request::{ use net_traits::request::{
CorsSettings, CredentialsMode, Destination, ParserMetadata, RequestBuilder, CorsSettings, CredentialsMode, Destination, ParserMetadata, RequestBuilder,
@ -1109,7 +1109,8 @@ impl HTMLScriptElement {
if let Some(record) = record { if let Some(record) = record {
rooted!(in(*global.get_cx()) let mut rval = UndefinedValue()); rooted!(in(*global.get_cx()) let mut rval = UndefinedValue());
let evaluated = module_tree.execute_module(global, record, rval.handle_mut().into()); let evaluated =
module_tree.execute_module(global, record, rval.handle_mut().into());
if let Err(exception) = evaluated { if let Err(exception) = evaluated {
module_tree.set_rethrow_error(exception); module_tree.set_rethrow_error(exception);

View file

@ -18,15 +18,15 @@ use js::glue::{
CreateReadableStreamUnderlyingSource, DeleteReadableStreamUnderlyingSource, CreateReadableStreamUnderlyingSource, DeleteReadableStreamUnderlyingSource,
ReadableStreamUnderlyingSourceTraps, ReadableStreamUnderlyingSourceTraps,
}; };
use js::jsapi::{HandleObject, HandleValue, Heap, JSContext, JSObject};
use js::jsapi::{ use js::jsapi::{
IsReadableStream, NewReadableExternalSourceStreamObject, ReadableStreamClose, AutoRequireNoGC, IsReadableStream, JS_GetArrayBufferViewData,
ReadableStreamDefaultReaderRead, ReadableStreamError, ReadableStreamGetReader, NewReadableExternalSourceStreamObject, ReadableStreamClose, ReadableStreamDefaultReaderRead,
ReadableStreamIsDisturbed, ReadableStreamIsLocked, ReadableStreamIsReadable, ReadableStreamError, ReadableStreamGetReader, ReadableStreamIsDisturbed,
ReadableStreamReaderMode, ReadableStreamReaderReleaseLock, ReadableStreamUnderlyingSource, ReadableStreamIsLocked, ReadableStreamIsReadable, ReadableStreamReaderMode,
ReadableStreamUpdateDataAvailableFromSource, UnwrapReadableStream, JS_GetArrayBufferViewData, ReadableStreamReaderReleaseLock, ReadableStreamUnderlyingSource,
AutoRequireNoGC, ReadableStreamUpdateDataAvailableFromSource, UnwrapReadableStream,
}; };
use js::jsapi::{HandleObject, HandleValue, Heap, JSContext, JSObject};
use js::jsval::JSVal; use js::jsval::JSVal;
use js::jsval::UndefinedValue; use js::jsval::UndefinedValue;
use js::rust::HandleValue as SafeHandleValue; use js::rust::HandleValue as SafeHandleValue;
@ -339,7 +339,11 @@ unsafe extern "C" fn write_into_read_request_buffer(
) { ) {
let source = &*(source as *const ExternalUnderlyingSourceController); let source = &*(source as *const ExternalUnderlyingSourceController);
let mut is_shared_memory = false; let mut is_shared_memory = false;
let buffer = JS_GetArrayBufferViewData(*chunk, &mut is_shared_memory, &AutoRequireNoGC { _address: 0 }); let buffer = JS_GetArrayBufferViewData(
*chunk,
&mut is_shared_memory,
&AutoRequireNoGC { _address: 0 },
);
assert!(!is_shared_memory); assert!(!is_shared_memory);
let slice = slice::from_raw_parts_mut(buffer as *mut u8, length); let slice = slice::from_raw_parts_mut(buffer as *mut u8, length);
source.write_into_buffer(slice); source.write_into_buffer(slice);

View file

@ -25,9 +25,7 @@ use embedder_traits::EmbedderMsg;
use indexmap::map::IndexMap; use indexmap::map::IndexMap;
use ipc_channel::ipc; use ipc_channel::ipc;
use js::glue::{CreateWrapperProxyHandler, ProxyTraps}; use js::glue::{CreateWrapperProxyHandler, ProxyTraps};
use js::glue::{ use js::glue::{GetProxyPrivate, GetProxyReservedSlot, SetProxyReservedSlot};
GetProxyPrivate, GetProxyReservedSlot, SetProxyReservedSlot,
};
use js::jsapi::Handle as RawHandle; use js::jsapi::Handle as RawHandle;
use js::jsapi::HandleId as RawHandleId; use js::jsapi::HandleId as RawHandleId;
use js::jsapi::HandleObject as RawHandleObject; use js::jsapi::HandleObject as RawHandleObject;
@ -35,7 +33,7 @@ use js::jsapi::HandleValue as RawHandleValue;
use js::jsapi::MutableHandle as RawMutableHandle; use js::jsapi::MutableHandle as RawMutableHandle;
use js::jsapi::MutableHandleObject as RawMutableHandleObject; use js::jsapi::MutableHandleObject as RawMutableHandleObject;
use js::jsapi::MutableHandleValue as RawMutableHandleValue; use js::jsapi::MutableHandleValue as RawMutableHandleValue;
use js::jsapi::{JSAutoRealm, JSContext, JSErrNum, JSObject, GCContext}; use js::jsapi::{GCContext, JSAutoRealm, JSContext, JSErrNum, JSObject};
use js::jsapi::{JSTracer, JS_DefinePropertyById, JSPROP_ENUMERATE, JSPROP_READONLY}; use js::jsapi::{JSTracer, JS_DefinePropertyById, JSPROP_ENUMERATE, JSPROP_READONLY};
use js::jsapi::{JS_ForwardGetPropertyTo, JS_ForwardSetPropertyTo}; use js::jsapi::{JS_ForwardGetPropertyTo, JS_ForwardSetPropertyTo};
use js::jsapi::{JS_GetOwnPropertyDescriptorById, JS_IsExceptionPending}; use js::jsapi::{JS_GetOwnPropertyDescriptorById, JS_IsExceptionPending};

View file

@ -47,13 +47,13 @@ use js::jsapi::HandleValue as RawHandleValue;
use js::jsapi::MutableHandleValue; use js::jsapi::MutableHandleValue;
use js::jsapi::Value; use js::jsapi::Value;
use js::jsapi::{CompileModule1, ExceptionStackBehavior, FinishDynamicModuleImport}; use js::jsapi::{CompileModule1, ExceptionStackBehavior, FinishDynamicModuleImport};
use js::jsapi::{SetModuleDynamicImportHook, SetScriptPrivateReferenceHooks}; use js::jsapi::{GetModuleRequestSpecifier, GetRequestedModules, SetModuleMetadataHook};
use js::jsapi::{GetModuleResolveHook, JSRuntime, SetModuleResolveHook}; use js::jsapi::{GetModuleResolveHook, JSRuntime, SetModuleResolveHook};
use js::jsapi::{GetRequestedModules, SetModuleMetadataHook, GetModuleRequestSpecifier};
use js::jsapi::{Heap, JSContext, JS_ClearPendingException, SetModulePrivate}; use js::jsapi::{Heap, JSContext, JS_ClearPendingException, SetModulePrivate};
use js::jsapi::{JSAutoRealm, JSObject, JSString}; use js::jsapi::{JSAutoRealm, JSObject, JSString};
use js::jsapi::{JS_DefineProperty4, JS_IsExceptionPending, JS_NewStringCopyN, JSPROP_ENUMERATE}; use js::jsapi::{JS_DefineProperty4, JS_IsExceptionPending, JS_NewStringCopyN, JSPROP_ENUMERATE};
use js::jsapi::{ModuleEvaluate, ModuleLink, ThrowOnModuleEvaluationFailure, ModuleErrorBehaviour}; use js::jsapi::{ModuleErrorBehaviour, ModuleEvaluate, ModuleLink, ThrowOnModuleEvaluationFailure};
use js::jsapi::{SetModuleDynamicImportHook, SetScriptPrivateReferenceHooks};
use js::jsval::{JSVal, PrivateValue, UndefinedValue}; use js::jsval::{JSVal, PrivateValue, UndefinedValue};
use js::rust::jsapi_wrapped::{GetArrayLength, JS_GetElement}; use js::rust::jsapi_wrapped::{GetArrayLength, JS_GetElement};
use js::rust::jsapi_wrapped::{GetRequestedModuleSpecifier, JS_GetPendingException}; use js::rust::jsapi_wrapped::{GetRequestedModuleSpecifier, JS_GetPendingException};
@ -526,10 +526,7 @@ impl ModuleTree {
warn!("fail to evaluate module"); warn!("fail to evaluate module");
rooted!(in(*cx) let mut exception = UndefinedValue()); rooted!(in(*cx) let mut exception = UndefinedValue());
assert!(JS_GetPendingException( assert!(JS_GetPendingException(*cx, &mut exception.handle_mut()));
*cx,
&mut exception.handle_mut()
));
JS_ClearPendingException(*cx); JS_ClearPendingException(*cx);
Err(RethrowError(RootedTraceableBox::from_box(Heap::boxed( Err(RethrowError(RootedTraceableBox::from_box(Heap::boxed(
@ -998,7 +995,9 @@ impl ModuleOwner {
.map(|record| record.handle()); .map(|record| record.handle());
if let Some(record) = record { if let Some(record) = record {
let evaluated = module_tree.execute_module(&global, record, rval.handle_mut().into()).err(); let evaluated = module_tree
.execute_module(&global, record, rval.handle_mut().into())
.err();
if let Some(exception) = evaluated.clone() { if let Some(exception) = evaluated.clone() {
module_tree.set_rethrow_error(exception); module_tree.set_rethrow_error(exception);
@ -1020,7 +1019,7 @@ impl ModuleOwner {
); );
}, },
// do nothing if there's no errors // do nothing if there's no errors
(None, None) => {} (None, None) => {},
}; };
debug!("Finishing dynamic import for {:?}", module_identity); debug!("Finishing dynamic import for {:?}", module_identity);
@ -1430,7 +1429,11 @@ unsafe extern "C" fn HostResolveImportedModule(
// Step 5. // Step 5.
rooted!(in(*global_scope.get_cx()) let specifier = GetModuleRequestSpecifier(cx, specifier)); rooted!(in(*global_scope.get_cx()) let specifier = GetModuleRequestSpecifier(cx, specifier));
let url = ModuleTree::resolve_module_specifier(*global_scope.get_cx(), &base_url, specifier.handle().into()); let url = ModuleTree::resolve_module_specifier(
*global_scope.get_cx(),
&base_url,
specifier.handle().into(),
);
// Step 6. // Step 6.
assert!(url.is_ok()); assert!(url.is_ok());

View file

@ -52,8 +52,8 @@ use js::jsapi::StreamConsumer as JSStreamConsumer;
use js::jsapi::{BuildIdCharVector, DisableIncrementalGC, GCDescription, GCProgress}; use js::jsapi::{BuildIdCharVector, DisableIncrementalGC, GCDescription, GCProgress};
use js::jsapi::{Dispatchable as JSRunnable, Dispatchable_MaybeShuttingDown}; use js::jsapi::{Dispatchable as JSRunnable, Dispatchable_MaybeShuttingDown};
use js::jsapi::{ use js::jsapi::{
GCReason, GCOptions, JSGCStatus, JS_AddExtraGCRootsTracer, GCOptions, GCReason, JSGCStatus, JS_AddExtraGCRootsTracer, JS_RequestInterruptCallback,
JS_RequestInterruptCallback, JS_SetGCCallback, JS_SetGCCallback,
}; };
use js::jsapi::{HandleObject, Heap, JobQueue}; use js::jsapi::{HandleObject, Heap, JobQueue};
use js::jsapi::{JSContext as RawJSContext, JSTracer, SetDOMCallbacks, SetGCSliceCallback}; use js::jsapi::{JSContext as RawJSContext, JSTracer, SetDOMCallbacks, SetGCSliceCallback};
@ -793,13 +793,10 @@ unsafe extern "C" fn gc_slice_callback(
let desc: &GCDescription = &*desc; let desc: &GCDescription = &*desc;
let options = match desc.options_ { let options = match desc.options_ {
GCOptions::Normal => "Normal", GCOptions::Normal => "Normal",
GCOptions::Shrink => "Shrink", GCOptions::Shrink => "Shrink",
GCOptions::Shutdown => "Shutdown", GCOptions::Shutdown => "Shutdown",
}; };
println!( println!(" isZone={}, options={}", desc.isZone_, options);
" isZone={}, options={}",
desc.isZone_, options
);
} }
let _ = stdout().flush(); let _ = stdout().flush();
} }