mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Before it was only used when converting to a `Record`, using it all the times allow us to remove two methods. Plus added a helper method in CodegenRust.py to avoid repeated code. Testing: a successful build and existing tests should cover the changes. Fixes: #36410 --------- Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
113 lines
3.8 KiB
Rust
113 lines
3.8 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* 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 std::cell::RefCell;
|
|
use std::thread::LocalKey;
|
|
|
|
use js::glue::JSPrincipalsCallbacks;
|
|
use js::jsapi::{CallArgs, HandleObject as RawHandleObject, JSContext as RawJSContext, JSObject};
|
|
use js::rust::{HandleObject, MutableHandleObject};
|
|
use servo_url::{MutableOrigin, ServoUrl};
|
|
|
|
use crate::DomTypes;
|
|
use crate::codegen::PrototypeList;
|
|
use crate::conversions::DerivedFrom;
|
|
use crate::error::Error;
|
|
use crate::realms::InRealm;
|
|
use crate::reflector::{DomObject, DomObjectWrap};
|
|
use crate::root::DomRoot;
|
|
use crate::script_runtime::{CanGc, JSContext};
|
|
use crate::settings_stack::StackEntry;
|
|
use crate::utils::ProtoOrIfaceArray;
|
|
|
|
/// Operations that can be invoked for a WebIDL interface against
|
|
/// a global object.
|
|
///
|
|
/// <https://github.com/mozilla/gecko-dev/blob/3fd619f47/dom/bindings/WebIDLGlobalNameHash.h#L24>
|
|
pub struct Interface {
|
|
/// Define the JS object for this interface on the given global.
|
|
pub define: fn(JSContext, HandleObject),
|
|
/// Returns true if this interface's conditions are met for the given global.
|
|
pub enabled: fn(JSContext, HandleObject) -> bool,
|
|
}
|
|
|
|
/// Operations that must be invoked from the generated bindings.
|
|
pub trait DomHelpers<D: DomTypes> {
|
|
fn throw_dom_exception(cx: JSContext, global: &D::GlobalScope, result: Error, can_gc: CanGc);
|
|
|
|
fn call_html_constructor<T: DerivedFrom<D::Element> + DomObject>(
|
|
cx: JSContext,
|
|
args: &CallArgs,
|
|
global: &D::GlobalScope,
|
|
proto_id: PrototypeList::ID,
|
|
creator: unsafe fn(JSContext, HandleObject, *mut ProtoOrIfaceArray),
|
|
can_gc: CanGc,
|
|
) -> bool;
|
|
|
|
fn settings_stack() -> &'static LocalKey<RefCell<Vec<StackEntry<D>>>>;
|
|
|
|
fn principals_callbacks() -> &'static JSPrincipalsCallbacks;
|
|
|
|
fn is_platform_object_same_origin(cx: JSContext, obj: RawHandleObject) -> bool;
|
|
|
|
fn interface_map() -> &'static phf::Map<&'static [u8], Interface>;
|
|
|
|
fn push_new_element_queue();
|
|
fn pop_current_element_queue(can_gc: CanGc);
|
|
|
|
fn reflect_dom_object<T, U>(obj: Box<T>, global: &U, can_gc: CanGc) -> DomRoot<T>
|
|
where
|
|
T: DomObject + DomObjectWrap<D>,
|
|
U: DerivedFrom<D::GlobalScope>;
|
|
|
|
fn report_pending_exception(cx: JSContext, dispatch_event: bool, realm: InRealm, can_gc: CanGc);
|
|
}
|
|
|
|
/// Operations that must be invoked from the generated bindings.
|
|
#[allow(unsafe_code)]
|
|
pub trait GlobalScopeHelpers<D: DomTypes> {
|
|
/// # Safety
|
|
/// `cx` must point to a valid, non-null RawJSContext.
|
|
unsafe fn from_context(cx: *mut RawJSContext, realm: InRealm) -> DomRoot<D::GlobalScope>;
|
|
fn get_cx() -> JSContext;
|
|
/// # Safety
|
|
/// `obj` must point to a valid, non-null JSObject.
|
|
unsafe fn from_object(obj: *mut JSObject) -> DomRoot<D::GlobalScope>;
|
|
fn from_reflector(reflector: &impl DomObject, realm: InRealm) -> DomRoot<D::GlobalScope>;
|
|
|
|
fn origin(&self) -> &MutableOrigin;
|
|
|
|
fn incumbent() -> Option<DomRoot<D::GlobalScope>>;
|
|
|
|
fn perform_a_microtask_checkpoint(&self, can_gc: CanGc);
|
|
|
|
fn get_url(&self) -> ServoUrl;
|
|
|
|
fn is_secure_context(&self) -> bool;
|
|
}
|
|
|
|
pub trait DocumentHelpers {
|
|
fn ensure_safe_to_run_script_or_layout(&self);
|
|
}
|
|
|
|
pub trait ServoInternalsHelpers {
|
|
fn is_servo_internal(cx: JSContext, global: HandleObject) -> bool;
|
|
}
|
|
|
|
pub trait TestBindingHelpers {
|
|
fn condition_satisfied(cx: JSContext, global: HandleObject) -> bool;
|
|
fn condition_unsatisfied(cx: JSContext, global: HandleObject) -> bool;
|
|
}
|
|
|
|
pub trait WebGL2RenderingContextHelpers {
|
|
fn is_webgl2_enabled(cx: JSContext, global: HandleObject) -> bool;
|
|
}
|
|
|
|
pub trait WindowHelpers {
|
|
fn create_named_properties_object(
|
|
cx: JSContext,
|
|
proto: HandleObject,
|
|
object: MutableHandleObject,
|
|
);
|
|
}
|