/* 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/. */ //! Registered custom properties. use super::rule::{Descriptors, PropertyRuleName}; use crate::derives::*; use crate::selector_map::PrecomputedHashMap; use crate::stylesheets::UrlExtraData; use crate::Atom; use cssparser::SourceLocation; /// A computed, already-validated property registration. /// #[derive(Debug, Clone, MallocSizeOf)] pub struct PropertyRegistration { /// The custom property name. pub name: PropertyRuleName, /// The actual information about the property. pub descriptors: Descriptors, /// The url data that is used to parse and compute the registration's initial value. Note that /// it's not the url data that should be used to parse other values. Other values should use /// the data of the style sheet where they came from. pub url_data: UrlExtraData, /// The source location of this registration, if it comes from a CSS rule. pub source_location: SourceLocation, } /// The script registry of custom properties. /// #[derive(Default)] #[cfg_attr(feature = "servo", derive(MallocSizeOf))] pub struct ScriptRegistry { properties: PrecomputedHashMap, } impl ScriptRegistry { /// Gets an already-registered custom property via script. #[inline] pub fn get(&self, name: &Atom) -> Option<&PropertyRegistration> { self.properties.get(name) } /// Gets already-registered custom properties via script. #[inline] pub fn properties(&self) -> &PrecomputedHashMap { &self.properties } /// Register a given property. As per /// /// we don't allow overriding the registration. #[inline] pub fn register(&mut self, registration: PropertyRegistration) { let name = registration.name.0.clone(); let old = self.properties.insert(name, registration); debug_assert!(old.is_none(), "Already registered? Should be an error"); } /// Returns the properties hashmap. #[inline] pub fn get_all(&self) -> &PrecomputedHashMap { &self.properties } }