aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/attr.rs
diff options
context:
space:
mode:
authorConnor Brewster <connor.brewster@eagles.oc.edu>2017-06-21 14:40:34 -0600
committerConnor Brewster <connor.brewster@eagles.oc.edu>2017-07-17 22:23:45 -0600
commit46659915036bb44e73e7ef2696ea9f35105f1659 (patch)
tree7713715250a9ff9f695062fdceec0acf40f10488 /components/script/dom/attr.rs
parent596ed557d2a44174572eec28b9945f317f1310de (diff)
downloadservo-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.rs15
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);