Title: [118307] releases/WebKitGTK/webkit-1.8
- Revision
- 118307
- Author
- [email protected]
- Date
- 2012-05-23 19:18:48 -0700 (Wed, 23 May 2012)
Log Message
Merge 109058 - [MutationObservers] Clear pending mutation records on disconnect()
https://bugs.webkit.org/show_bug.cgi?id=78639
Reviewed by Ojan Vafai.
Source/WebCore:
Test: fast/mutation/disconnect-cancel-pending.html
* dom/WebKitMutationObserver.cpp:
(WebCore::WebKitMutationObserver::disconnect): Clear pending records.
(WebCore::WebKitMutationObserver::deliver): Avoid calling the callback if no records are pending delivery.
LayoutTests:
* fast/mutation/disconnect-cancel-pending-expected.txt: Added.
* fast/mutation/disconnect-cancel-pending.html: Added.
Modified Paths
Added Paths
Diff
Modified: releases/WebKitGTK/webkit-1.8/LayoutTests/ChangeLog (118306 => 118307)
--- releases/WebKitGTK/webkit-1.8/LayoutTests/ChangeLog 2012-05-24 02:18:22 UTC (rev 118306)
+++ releases/WebKitGTK/webkit-1.8/LayoutTests/ChangeLog 2012-05-24 02:18:48 UTC (rev 118307)
@@ -1,3 +1,13 @@
+2012-02-27 Adam Klein <[email protected]>
+
+ [MutationObservers] Clear pending mutation records on disconnect()
+ https://bugs.webkit.org/show_bug.cgi?id=78639
+
+ Reviewed by Ojan Vafai.
+
+ * fast/mutation/disconnect-cancel-pending-expected.txt: Added.
+ * fast/mutation/disconnect-cancel-pending.html: Added.
+
2012-04-04 Simon Fraser <[email protected]>
REGRESSION(112939): compositing/reflections/backface-hidden-reflection.html is crashing
Added: releases/WebKitGTK/webkit-1.8/LayoutTests/fast/mutation/disconnect-cancel-pending-expected.txt (0 => 118307)
--- releases/WebKitGTK/webkit-1.8/LayoutTests/fast/mutation/disconnect-cancel-pending-expected.txt (rev 0)
+++ releases/WebKitGTK/webkit-1.8/LayoutTests/fast/mutation/disconnect-cancel-pending-expected.txt 2012-05-24 02:18:48 UTC (rev 118307)
@@ -0,0 +1,14 @@
+Test that WebKitMutationObserver.disconnect cancels pending delivery
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Disconnecting should cancel any pending delivery...
+PASS mutations is null
+...and re-observing should not see any of the previously-generated records.
+PASS mutations.length is 1
+PASS mutations[0].attributeName is "bar"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: releases/WebKitGTK/webkit-1.8/LayoutTests/fast/mutation/disconnect-cancel-pending.html (0 => 118307)
--- releases/WebKitGTK/webkit-1.8/LayoutTests/fast/mutation/disconnect-cancel-pending.html (rev 0)
+++ releases/WebKitGTK/webkit-1.8/LayoutTests/fast/mutation/disconnect-cancel-pending.html 2012-05-24 02:18:48 UTC (rev 118307)
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<script src=""
+<script>
+description('Test that WebKitMutationObserver.disconnect cancels pending delivery');
+
+window.jsTestIsAsync = true;
+var mutations;
+var observer;
+
+function start() {
+ mutations = null;
+ div = document.createElement('div');
+
+ observer = new WebKitMutationObserver(function(m) {
+ mutations = m;
+ });
+
+ observer.observe(div, { attributes: true });
+ div.setAttribute('foo', 'bar');
+ observer.disconnect();
+ setTimeout(next, 0);
+}
+
+function next() {
+ debug('Disconnecting should cancel any pending delivery...');
+ shouldBeNull('mutations');
+ observer.observe(div, { attributes: true });
+ div.setAttribute('bar', 'baz');
+ setTimeout(finish, 0);
+}
+
+function finish() {
+ debug('...and re-observing should not see any of the previously-generated records.');
+ shouldBe('mutations.length', '1');
+ shouldBe('mutations[0].attributeName', '"bar"');
+ finishJSTest();
+}
+
+if (!window.WebKitMutationObserver)
+ testFailed('This test requires ENABLE(MUTATION_OBSERVERS)');
+else
+ start();
+
+</script>
+<script src=""
Modified: releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog (118306 => 118307)
--- releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog 2012-05-24 02:18:22 UTC (rev 118306)
+++ releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog 2012-05-24 02:18:48 UTC (rev 118307)
@@ -1,3 +1,16 @@
+2012-02-27 Adam Klein <[email protected]>
+
+ [MutationObservers] Clear pending mutation records on disconnect()
+ https://bugs.webkit.org/show_bug.cgi?id=78639
+
+ Reviewed by Ojan Vafai.
+
+ Test: fast/mutation/disconnect-cancel-pending.html
+
+ * dom/WebKitMutationObserver.cpp:
+ (WebCore::WebKitMutationObserver::disconnect): Clear pending records.
+ (WebCore::WebKitMutationObserver::deliver): Avoid calling the callback if no records are pending delivery.
+
2012-04-04 Dmitry Lomov <[email protected]>
WorkerEventQueue::close might access deleted WorkerEventQueue::EventDispatcherTask.
Modified: releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/WebKitMutationObserver.cpp (118306 => 118307)
--- releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/WebKitMutationObserver.cpp 2012-05-24 02:18:22 UTC (rev 118306)
+++ releases/WebKitGTK/webkit-1.8/Source/WebCore/dom/WebKitMutationObserver.cpp 2012-05-24 02:18:48 UTC (rev 118307)
@@ -89,6 +89,7 @@
void WebKitMutationObserver::disconnect()
{
+ m_records.clear();
HashSet<MutationObserverRegistration*> registrations(m_registrations);
for (HashSet<MutationObserverRegistration*>::iterator iter = registrations.begin(); iter != registrations.end(); ++iter)
(*iter)->unregister();
@@ -123,6 +124,9 @@
void WebKitMutationObserver::deliver()
{
+ if (m_records.isEmpty())
+ return;
+
MutationRecordArray records;
records.swap(m_records);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes