mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Implement inner slot for cryptographic nonce (#36965)
Also update the `html/dom/reflection-metadata.html` test to handle the case where `nonce` does not reflect back to the attribute after an IDL change. Part of https://github.com/servo/servo/issues/4577 Fixes https://github.com/web-platform-tests/wpt/issues/43286 Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
This commit is contained in:
parent
3aff272e14
commit
a24fce3ae7
14 changed files with 132 additions and 98 deletions
|
@ -8,12 +8,13 @@ use js::rust::HandleObject;
|
|||
use script_bindings::str::DOMString;
|
||||
use stylo_dom::ElementState;
|
||||
|
||||
use crate::dom::attr::Attr;
|
||||
use crate::dom::bindings::codegen::Bindings::SVGElementBinding::SVGElementMethods;
|
||||
use crate::dom::bindings::inheritance::Castable;
|
||||
use crate::dom::bindings::root::{Dom, DomRoot, MutNullableDom};
|
||||
use crate::dom::cssstyledeclaration::{CSSModificationAccess, CSSStyleDeclaration, CSSStyleOwner};
|
||||
use crate::dom::document::Document;
|
||||
use crate::dom::element::Element;
|
||||
use crate::dom::element::{AttributeMutation, Element};
|
||||
use crate::dom::node::{Node, NodeTraits};
|
||||
use crate::dom::virtualmethods::VirtualMethods;
|
||||
use crate::script_runtime::CanGc;
|
||||
|
@ -59,11 +60,33 @@ impl SVGElement {
|
|||
can_gc,
|
||||
)
|
||||
}
|
||||
|
||||
fn as_element(&self) -> &Element {
|
||||
self.upcast::<Element>()
|
||||
}
|
||||
}
|
||||
|
||||
impl VirtualMethods for SVGElement {
|
||||
fn super_type(&self) -> Option<&dyn VirtualMethods> {
|
||||
Some(self.upcast::<Element>() as &dyn VirtualMethods)
|
||||
Some(self.as_element() as &dyn VirtualMethods)
|
||||
}
|
||||
|
||||
fn attribute_mutated(&self, attr: &Attr, mutation: AttributeMutation, can_gc: CanGc) {
|
||||
self.super_type()
|
||||
.unwrap()
|
||||
.attribute_mutated(attr, mutation, can_gc);
|
||||
let element = self.as_element();
|
||||
if let (&local_name!("nonce"), mutation) = (attr.local_name(), mutation) {
|
||||
match mutation {
|
||||
AttributeMutation::Set(_) => {
|
||||
let nonce = &**attr.value();
|
||||
element.update_nonce_internal_slot(nonce.to_owned());
|
||||
},
|
||||
AttributeMutation::Removed => {
|
||||
element.update_nonce_internal_slot(String::new());
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,13 +108,16 @@ impl SVGElementMethods<crate::DomTypeHolder> for SVGElement {
|
|||
// <https://html.spec.whatwg.org/multipage/#globaleventhandlers>
|
||||
global_event_handlers!();
|
||||
|
||||
// FIXME: The nonce should be stored in an internal slot instead of an
|
||||
// attribute (https://html.spec.whatwg.org/multipage/#cryptographicnonce)
|
||||
// https://html.spec.whatwg.org/multipage/#dom-noncedelement-nonce
|
||||
make_getter!(Nonce, "nonce");
|
||||
fn Nonce(&self) -> DOMString {
|
||||
self.as_element().nonce_value().into()
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-noncedelement-nonce
|
||||
make_setter!(SetNonce, "nonce");
|
||||
fn SetNonce(&self, value: DOMString) {
|
||||
self.as_element()
|
||||
.update_nonce_internal_slot(value.to_string())
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-fe-autofocus
|
||||
fn Autofocus(&self) -> bool {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue