Title: [136274] branches/chromium/1312
- Revision
- 136274
- Author
- [email protected]
- Date
- 2012-11-30 13:53:32 -0800 (Fri, 30 Nov 2012)
Log Message
Merge 135740
BUG=158204
Review URL: https://codereview.chromium.org/11348330
Modified Paths
Added Paths
Diff
Copied: branches/chromium/1312/LayoutTests/fast/frames/page-visibility-crash-expected.txt (from rev 135740, trunk/LayoutTests/fast/frames/page-visibility-crash-expected.txt) (0 => 136274)
--- branches/chromium/1312/LayoutTests/fast/frames/page-visibility-crash-expected.txt (rev 0)
+++ branches/chromium/1312/LayoutTests/fast/frames/page-visibility-crash-expected.txt 2012-11-30 21:53:32 UTC (rev 136274)
@@ -0,0 +1 @@
+PASS. WebKit didn't crash
Copied: branches/chromium/1312/LayoutTests/fast/frames/page-visibility-crash.html (from rev 135740, trunk/LayoutTests/fast/frames/page-visibility-crash.html) (0 => 136274)
--- branches/chromium/1312/LayoutTests/fast/frames/page-visibility-crash.html (rev 0)
+++ branches/chromium/1312/LayoutTests/fast/frames/page-visibility-crash.html 2012-11-30 21:53:32 UTC (rev 136274)
@@ -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/1312/Source/WebCore/page/Frame.cpp (136273 => 136274)
--- branches/chromium/1312/Source/WebCore/page/Frame.cpp 2012-11-30 21:52:22 UTC (rev 136273)
+++ branches/chromium/1312/Source/WebCore/page/Frame.cpp 2012-11-30 21:53:32 UTC (rev 136274)
@@ -669,8 +669,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