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)