diff options
author | Connor Brewster <connor.brewster@eagles.oc.edu> | 2017-06-21 14:40:34 -0600 |
---|---|---|
committer | Connor Brewster <connor.brewster@eagles.oc.edu> | 2017-07-17 22:23:45 -0600 |
commit | 46659915036bb44e73e7ef2696ea9f35105f1659 (patch) | |
tree | 7713715250a9ff9f695062fdceec0acf40f10488 /components/script/dom/attr.rs | |
parent | 596ed557d2a44174572eec28b9945f317f1310de (diff) | |
download | servo-46659915036bb44e73e7ef2696ea9f35105f1659.tar.gz servo-46659915036bb44e73e7ef2696ea9f35105f1659.zip |
Support custom element callback reactions
Diffstat (limited to 'components/script/dom/attr.rs')
-rw-r--r-- | components/script/dom/attr.rs | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/components/script/dom/attr.rs b/components/script/dom/attr.rs index af5f0107ae4..bf2ecd6e910 100644 --- a/components/script/dom/attr.rs +++ b/components/script/dom/attr.rs @@ -9,6 +9,7 @@ use dom::bindings::inheritance::Castable; use dom::bindings::js::{LayoutJS, MutNullableJS, Root, RootedReference}; use dom::bindings::reflector::{Reflector, reflect_dom_object}; use dom::bindings::str::DOMString; +use dom::customelementregistry::CallbackReaction; use dom::element::{AttributeMutation, Element}; use dom::mutationobserver::{Mutation, MutationObserver}; use dom::node::Node; @@ -16,6 +17,7 @@ use dom::virtualmethods::vtable_for; use dom::window::Window; use dom_struct::dom_struct; use html5ever::{Prefix, LocalName, Namespace}; +use script_thread::ScriptThread; use servo_atoms::Atom; use std::borrow::ToOwned; use std::cell::Ref; @@ -175,9 +177,20 @@ impl Attr { let name = self.local_name().clone(); let namespace = self.namespace().clone(); let old_value = DOMString::from(&**self.value()); - let mutation = Mutation::Attribute { name, namespace, old_value }; + let new_value = DOMString::from(&*value); + let mutation = Mutation::Attribute { + name: name.clone(), + namespace: namespace.clone(), + old_value: old_value.clone(), + }; + MutationObserver::queue_a_mutation_record(owner.upcast::<Node>(), mutation); + if owner.get_custom_element_definition().is_some() { + let reaction = CallbackReaction::AttributeChanged(name, Some(old_value), Some(new_value), namespace); + ScriptThread::enqueue_callback_reaction(owner, reaction); + } + assert!(Some(owner) == self.owner().r()); owner.will_mutate_attr(self); self.swap_value(&mut value); |