From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- dom/base/rust/Cargo.toml | 14 ++++ dom/base/rust/cbindgen.toml | 40 +++++++++ dom/base/rust/lib.rs | 198 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 252 insertions(+) create mode 100644 dom/base/rust/Cargo.toml create mode 100644 dom/base/rust/cbindgen.toml create mode 100644 dom/base/rust/lib.rs (limited to 'dom/base/rust') diff --git a/dom/base/rust/Cargo.toml b/dom/base/rust/Cargo.toml new file mode 100644 index 0000000000..38828c3f0f --- /dev/null +++ b/dom/base/rust/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "dom" +version = "0.1.0" +edition = "2021" +authors = [ + "Emilio Cobos Álvarez ", +] +license = "MPL-2.0" + +[lib] +path = "lib.rs" + +[dependencies] +bitflags = "2" diff --git a/dom/base/rust/cbindgen.toml b/dom/base/rust/cbindgen.toml new file mode 100644 index 0000000000..a34420e112 --- /dev/null +++ b/dom/base/rust/cbindgen.toml @@ -0,0 +1,40 @@ +header = """/* 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/. */ + +#ifndef mozilla_dom_RustTypes_h +#error "Don't include this file directly, include mozilla/dom/RustTypes.h instead" +#endif +""" +include_guard = "mozilla_dom_GeneratedElementDocumentState_h" +include_version = true +language = "C++" +namespaces = ["mozilla", "dom"] +includes = ["mozilla/Assertions.h"] + +[enum] +derive_helper_methods = true +derive_const_casts = true +cast_assert_name = "MOZ_DIAGNOSTIC_ASSERT" + +[struct] +associated_constants_in_body = true +derive_eq = true +derive_neq = true + +[macro_expansion] +bitflags = true + +[export] +include = [ + "ElementState", + "DocumentState", +] + +[export.body] +"ElementState" = """ + STATE_HELPERS(ElementState) +""" +"DocumentState" = """ + STATE_HELPERS(DocumentState) +""" diff --git a/dom/base/rust/lib.rs b/dom/base/rust/lib.rs new file mode 100644 index 0000000000..388c1320df --- /dev/null +++ b/dom/base/rust/lib.rs @@ -0,0 +1,198 @@ +/* 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/. */ + +//! DOM types to be shared between Rust and C++. + +use bitflags::bitflags; + +bitflags! { + /// Event-based element states. + #[repr(C)] + #[derive(Clone, Copy, Eq, PartialEq)] + pub struct ElementState: u64 { + /// The mouse is down on this element. + /// + /// FIXME(#7333): set/unset this when appropriate + const ACTIVE = 1 << 0; + /// This element has focus. + /// + const FOCUS = 1 << 1; + /// The mouse is hovering over this element. + /// + const HOVER = 1 << 2; + /// Content is enabled (and can be disabled). + /// + const ENABLED = 1 << 3; + /// Content is disabled. + /// + const DISABLED = 1 << 4; + /// Content is checked. + /// + const CHECKED = 1 << 5; + /// + const INDETERMINATE = 1 << 6; + /// + const PLACEHOLDER_SHOWN = 1 << 7; + /// + const URLTARGET = 1 << 8; + /// + const FULLSCREEN = 1 << 9; + /// + const VALID = 1 << 10; + /// + const INVALID = 1 << 11; + /// + const USER_VALID = 1 << 12; + /// + const USER_INVALID = 1 << 13; + /// Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-broken + const BROKEN = 1 << 14; + /// Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-loading + const LOADING = 1 << 15; + /// + const REQUIRED = 1 << 16; + /// + /// We use an underscore to workaround a silly windows.h define. + const OPTIONAL_ = 1 << 17; + /// + const DEFINED = 1 << 18; + /// + const VISITED = 1 << 19; + /// + const UNVISITED = 1 << 20; + /// + const VISITED_OR_UNVISITED = Self::VISITED.bits | Self::UNVISITED.bits; + /// Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-drag-over + const DRAGOVER = 1 << 21; + /// + const INRANGE = 1 << 22; + /// + const OUTOFRANGE = 1 << 23; + /// + const READONLY = 1 << 24; + /// + const READWRITE = 1 << 25; + /// + const DEFAULT = 1 << 26; + /// Non-standard & undocumented. + const OPTIMUM = 1 << 28; + /// Non-standard & undocumented. + const SUB_OPTIMUM = 1 << 29; + /// Non-standard & undocumented. + const SUB_SUB_OPTIMUM = 1 << 30; + /// Non-standard & undocumented. + const INCREMENT_SCRIPT_LEVEL = 1u64 << 31; + /// + const FOCUSRING = 1u64 << 32; + /// + const FOCUS_WITHIN = 1u64 << 33; + /// :dir matching; the states are used for dynamic change detection. + /// State that elements that match :dir(ltr) are in. + const LTR = 1u64 << 34; + /// State that elements that match :dir(rtl) are in. + const RTL = 1u64 << 35; + /// State that HTML elements that have a "dir" attr are in. + const HAS_DIR_ATTR = 1u64 << 36; + /// State that HTML elements with dir="ltr" (or something + /// case-insensitively equal to "ltr") are in. + const HAS_DIR_ATTR_LTR = 1u64 << 37; + /// State that HTML elements with dir="rtl" (or something + /// case-insensitively equal to "rtl") are in. + const HAS_DIR_ATTR_RTL = 1u64 << 38; + /// State that HTML elements without a valid-valued "dir" attr or + /// any HTML elements (including ) with dir="auto" (or something + /// case-insensitively equal to "auto") are in. + const HAS_DIR_ATTR_LIKE_AUTO = 1u64 << 39; + /// Non-standard & undocumented. + const AUTOFILL = 1u64 << 40; + /// Non-standard & undocumented. + const AUTOFILL_PREVIEW = 1u64 << 41; + /// State for modal elements: + /// + const MODAL = 1u64 << 42; + /// + const INERT = 1u64 << 43; + /// State for the topmost modal element in top layer + const TOPMOST_MODAL = 1u64 << 44; + /// Initially used for the devtools highlighter, but now somehow only + /// used for the devtools accessibility inspector. + const DEVTOOLS_HIGHLIGHTED = 1u64 << 45; + /// Used for the devtools style editor. Probably should go away. + const STYLEEDITOR_TRANSITIONING = 1u64 << 46; + /// For :-moz-value-empty (to show widgets like the reveal password + /// button or the clear button). + const VALUE_EMPTY = 1u64 << 47; + /// For :-moz-revealed. + const REVEALED = 1u64 << 48; + /// https://html.spec.whatwg.org/#selector-popover-open + /// Match element's popover visibility state of showing + const POPOVER_OPEN = 1u64 << 49; + + /// Some convenience unions. + const DIR_STATES = Self::LTR.bits | Self::RTL.bits; + + const DIR_ATTR_STATES = Self::HAS_DIR_ATTR.bits | + Self::HAS_DIR_ATTR_LTR.bits | + Self::HAS_DIR_ATTR_RTL.bits | + Self::HAS_DIR_ATTR_LIKE_AUTO.bits; + + const DISABLED_STATES = Self::DISABLED.bits | Self::ENABLED.bits; + + const REQUIRED_STATES = Self::REQUIRED.bits | Self::OPTIONAL_.bits; + + /// Event states that can be added and removed through + /// Element::{Add,Remove}ManuallyManagedStates. + /// + /// Take care when manually managing state bits. You are responsible + /// for setting or clearing the bit when an Element is added or removed + /// from a document (e.g. in BindToTree and UnbindFromTree), if that is + /// an appropriate thing to do for your state bit. + const MANUALLY_MANAGED_STATES = Self::AUTOFILL.bits | Self::AUTOFILL_PREVIEW.bits; + + /// Event states that are managed externally to an element (by the + /// EventStateManager, or by other code). As opposed to those in + /// INTRINSIC_STATES, which are are computed by the element itself + /// and returned from Element::IntrinsicState. + const EXTERNALLY_MANAGED_STATES = + Self::MANUALLY_MANAGED_STATES.bits | + Self::DIR_ATTR_STATES.bits | + Self::DISABLED_STATES.bits | + Self::REQUIRED_STATES.bits | + Self::ACTIVE.bits | + Self::DEFINED.bits | + Self::DRAGOVER.bits | + Self::FOCUS.bits | + Self::FOCUSRING.bits | + Self::FOCUS_WITHIN.bits | + Self::FULLSCREEN.bits | + Self::POPOVER_OPEN.bits | + Self::HOVER.bits | + Self::URLTARGET.bits | + Self::MODAL.bits | + Self::INERT.bits | + Self::TOPMOST_MODAL.bits | + Self::REVEALED.bits | + Self::VALUE_EMPTY.bits; + + const INTRINSIC_STATES = !Self::EXTERNALLY_MANAGED_STATES.bits; + } +} + +bitflags! { + /// Event-based document states. + #[repr(C)] + #[derive(Clone, Copy, Eq, PartialEq)] + pub struct DocumentState: u64 { + /// Window activation status + const WINDOW_INACTIVE = 1 << 0; + /// RTL locale: specific to the XUL localedir attribute + const RTL_LOCALE = 1 << 1; + /// LTR locale: specific to the XUL localedir attribute + const LTR_LOCALE = 1 << 2; + /// LWTheme status + const LWTHEME = 1 << 3; + + const ALL_LOCALEDIR_BITS = Self::LTR_LOCALE.bits | Self::RTL_LOCALE.bits; + } +} -- cgit v1.2.3