Title: [136273] branches/chromium/1271
Revision
136273
Author
[email protected]
Date
2012-11-30 13:52:22 -0800 (Fri, 30 Nov 2012)

Log Message

Merge 135740
BUG=158204
Review URL: https://codereview.chromium.org/11418272

Modified Paths

Added Paths

Diff

Copied: branches/chromium/1271/LayoutTests/fast/frames/page-visibility-crash-expected.txt (from rev 135740, trunk/LayoutTests/fast/frames/page-visibility-crash-expected.txt) (0 => 136273)


--- branches/chromium/1271/LayoutTests/fast/frames/page-visibility-crash-expected.txt	                        (rev 0)
+++ branches/chromium/1271/LayoutTests/fast/frames/page-visibility-crash-expected.txt	2012-11-30 21:52:22 UTC (rev 136273)
@@ -0,0 +1 @@
+PASS. WebKit didn't crash

Copied: branches/chromium/1271/LayoutTests/fast/frames/page-visibility-crash.html (from rev 135740, trunk/LayoutTests/fast/frames/page-visibility-crash.html) (0 => 136273)


--- branches/chromium/1271/LayoutTests/fast/frames/page-visibility-crash.html	                        (rev 0)
+++ branches/chromium/1271/LayoutTests/fast/frames/page-visibility-crash.html	2012-11-30 21:52:22 UTC (rev 136273)
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script>
+if (window.testRunner) {
+    window.testRunner.dumpAsText();
+    window.testRunner.waitUntilDone();
+}
+
+function finish() {
+    if (window.testRunner)
+        testRunner.resetPageVisibility();
+
+    document.open();
+    document.write("PASS. WebKit didn't crash");
+    document.close();
+
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+
+function crash()
+{     
+    document.body.removeChild(document.getElementById("f"));
+    setTimeout("finish()", 0);
+}
+
+frame = document.createElement("iframe");
+frame.id = "f";
+document.body.appendChild(frame);
+scriptElement = frame.contentDocument.createElement("script");
+frame.contentDocument.body.appendChild(scriptElement);
+scriptElement.innerText = "function handleVisibilityChange() \
+                           { \
+                               parent.crash(); \
+                           } \
+                           document.addEventListener('webkitvisibilitychange', handleVisibilityChange, false);";
+
+if (window.testRunner)
+    testRunner.setPageVisibility("hidden");
+    
+// Many platforms don't support the page visibility api. For those, just bail out.
+setTimeout("finish()", 10);
+</script>
+</body>
+</html>

Modified: branches/chromium/1271/Source/WebCore/page/Frame.cpp (136272 => 136273)


--- branches/chromium/1271/Source/WebCore/page/Frame.cpp	2012-11-30 21:48:27 UTC (rev 136272)
+++ branches/chromium/1271/Source/WebCore/page/Frame.cpp	2012-11-30 21:52:22 UTC (rev 136273)
@@ -667,8 +667,13 @@
 {
     if (m_doc)
         m_doc->dispatchVisibilityStateChangeEvent();
+
+    Vector<RefPtr<Frame> > childFrames;
     for (Frame* child = tree()->firstChild(); child; child = child->tree()->nextSibling())
-        child->dispatchVisibilityStateChangeEvent();
+        childFrames.append(child);
+
+    for (size_t i = 0; i < childFrames.size(); ++i)
+        childFrames[i]->dispatchVisibilityStateChangeEvent();
 }
 #endif
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to