Title: [111964] releases/WebKitGTK/webkit-1.8

Diff

Modified: releases/WebKitGTK/webkit-1.8/LayoutTests/ChangeLog (111963 => 111964)


--- releases/WebKitGTK/webkit-1.8/LayoutTests/ChangeLog	2012-03-24 01:28:12 UTC (rev 111963)
+++ releases/WebKitGTK/webkit-1.8/LayoutTests/ChangeLog	2012-03-24 01:38:25 UTC (rev 111964)
@@ -1,3 +1,13 @@
+2012-03-23  Adam Klein  <[email protected]>
+
+        REGRESSION(r103452): 100% CPU usage and 5s pause after clicking on a link in Yahoo Mail
+        https://bugs.webkit.org/show_bug.cgi?id=81141
+
+        Reviewed by Ojan Vafai.
+
+        * fast/dom/subtree-modified-attributes-expected.txt: Added.
+        * fast/dom/subtree-modified-attributes.html: Added.
+
 2012-03-23  Daniel Bates  <[email protected]>
 
         REGRESSION(r99369): File input button doesn't highlight when pressed

Added: releases/WebKitGTK/webkit-1.8/LayoutTests/fast/dom/subtree-modified-attributes-expected.txt (0 => 111964)


--- releases/WebKitGTK/webkit-1.8/LayoutTests/fast/dom/subtree-modified-attributes-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-1.8/LayoutTests/fast/dom/subtree-modified-attributes-expected.txt	2012-03-24 01:38:25 UTC (rev 111964)
@@ -0,0 +1,13 @@
+DOMSubtreeModified should fire when attributes are added or removed, but not modified (see bug 81141)
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS expected is true
+PASS expected is true
+PASS expected is true
+PASS expected is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Property changes on: releases/WebKitGTK/webkit-1.8/LayoutTests/fast/dom/subtree-modified-attributes-expected.txt
___________________________________________________________________

Added: svn:eol-style

Added: releases/WebKitGTK/webkit-1.8/LayoutTests/fast/dom/subtree-modified-attributes.html (0 => 111964)


--- releases/WebKitGTK/webkit-1.8/LayoutTests/fast/dom/subtree-modified-attributes.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-1.8/LayoutTests/fast/dom/subtree-modified-attributes.html	2012-03-24 01:38:25 UTC (rev 111964)
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<body>
+<script src=""
+<script>
+description('DOMSubtreeModified should fire when attributes are added or removed, but not modified (see bug 81141)');
+
+var div = document.createElement('div');
+document.body.appendChild(div);
+var expected = false;
+div.addEventListener('DOMSubtreeModified', function(evt) {
+    shouldBeTrue('expected');
+});
+expected = true;
+div.setAttribute('foo', 'bar');
+expected = false;
+div.setAttribute('foo', 'baz');
+expected = true;
+div.removeAttribute('foo');
+
+var attr = document.createAttribute('bar');
+attr.value = 'foo';
+expected = true;
+div.setAttributeNode(attr);
+expected = false;
+attr.value = 'bar';
+expected = true;
+div.removeAttributeNode(attr);
+</script>
+<script src=""
+</body>
Property changes on: releases/WebKitGTK/webkit-1.8/LayoutTests/fast/dom/subtree-modified-attributes.html
___________________________________________________________________

Added: svn:eol-style

Modified: releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog (111963 => 111964)


--- releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog	2012-03-24 01:28:12 UTC (rev 111963)
+++ releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog	2012-03-24 01:38:25 UTC (rev 111964)
@@ -1,3 +1,29 @@
+2012-03-23  Adam Klein  <[email protected]>
+
+        REGRESSION(r103452): 100% CPU usage and 5s pause after clicking on a link in Yahoo Mail
+        https://bugs.webkit.org/show_bug.cgi?id=81141
+
+        Reviewed by Ojan Vafai.
+
+        Revert the behavior change from r103452: don't fire DOMSubtreeModified
+        events when an attribute value merely changes. Still fire that event
+        when an attribute is added or removed from an element.
+
+        Though this contradicts the DOM3 spec, it matches legacy WebKit behavior,
+        and given that Mutation Events are deprecated, it seems unwise to make
+        any additions to WebKit's implementation of them.
+
+        Test: fast/dom/subtree-modified-attributes.html
+
+        * dom/Element.cpp:
+        (WebCore::Element::didAddAttribute): Renamed from didModifyAttribute.
+        (WebCore::Element::didModifyAttribute): Remove the call to dispatchSubtreeModifiedEvent.
+        (WebCore):
+        * dom/Element.h:
+        (Element):
+        * dom/ElementAttributeData.cpp:
+        (WebCore::ElementAttributeData::addAttribute): Call didAddAttribute instead of didModifyAttribute.
+
 2012-03-23  Daniel Bates  <[email protected]>
 
         REGRESSION(r99369): File input button doesn't highlight when pressed

Modified: releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/Element.cpp (111963 => 111964)


--- releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/Element.cpp	2012-03-24 01:28:12 UTC (rev 111963)
+++ releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/Element.cpp	2012-03-24 01:38:25 UTC (rev 111964)
@@ -2009,16 +2009,27 @@
 #endif
 }
 
-void Element::didModifyAttribute(Attribute* attr)
+void Element::didAddAttribute(Attribute* attr)
 {
     attributeChanged(attr);
-
     if (!isSynchronizingStyleAttribute()) {
         InspectorInstrumentation::didModifyDOMAttr(document(), this, attr->name().localName(), attr->value());
         dispatchSubtreeModifiedEvent();
     }
 }
 
+void Element::didModifyAttribute(Attribute* attr)
+{
+    attributeChanged(attr);
+    if (!isSynchronizingStyleAttribute()) {
+        InspectorInstrumentation::didModifyDOMAttr(document(), this, attr->name().localName(), attr->value());
+        // Do not dispatch a DOMSubtreeModified event here; see bug 81141.
+    }
+}
+
+void Element::didModifyAttribute(Attribute* attr)
+{
+
 void Element::didRemoveAttribute(Attribute* attr)
 {
     if (attr->isNull())

Modified: releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/Element.h (111963 => 111964)


--- releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/Element.h	2012-03-24 01:28:12 UTC (rev 111963)
+++ releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/Element.h	2012-03-24 01:38:25 UTC (rev 111964)
@@ -296,6 +296,7 @@
 
     void willModifyAttribute(const QualifiedName&, const AtomicString& oldValue, const AtomicString& newValue);
     void willRemoveAttribute(const QualifiedName&, const AtomicString& value);
+    void didAddAttribute(Attribute*);
     void didModifyAttribute(Attribute*);
     void didRemoveAttribute(Attribute*);
 

Modified: releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/ElementAttributeData.cpp (111963 => 111964)


--- releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/ElementAttributeData.cpp	2012-03-24 01:28:12 UTC (rev 111963)
+++ releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/ElementAttributeData.cpp	2012-03-24 01:38:25 UTC (rev 111964)
@@ -71,7 +71,7 @@
         attr->m_element = element;
 
     if (element)
-        element->didModifyAttribute(attribute.get());
+        element->didAddAttribute(attribute.get());
 }
 
 void ElementAttributeData::removeAttribute(size_t index, Element* element)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to