mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 23:31:56 +00:00
Bug 788322. Don't crash when we drawWindow on a page containing a remote <iframe>. r=mattwoodrow
The test is actually a test for bug 792351. It doesn't pass yet, since we're not drawing remote iframes properly, but the test should at least not cause a crash. --HG-- extra : rebase_source : c25305bf872525d9b918950a3f9d77479a78a1e4
This commit is contained in:
parent
2732b3ebdd
commit
88fcfa236d
@ -149,6 +149,7 @@ MOCHITEST_FILES = \
|
||||
test_bug761572.html \
|
||||
test_bug770106.html \
|
||||
test_maxLineBoxWidth.html \
|
||||
test_remote_frame.html \
|
||||
$(NULL)
|
||||
|
||||
# Tests for bugs 441782, 467672 and 570378 don't pass reliably on Windows, because of bug 469208
|
||||
|
65
layout/base/tests/test_remote_frame.html
Normal file
65
layout/base/tests/test_remote_frame.html
Normal file
@ -0,0 +1,65 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
<style>
|
||||
div, iframe {
|
||||
position:absolute;
|
||||
left:0; top:50px;
|
||||
width:400px; height:400px;
|
||||
transform: translateY(50px);
|
||||
border:5px solid black;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="d" style="background:blue"></div>
|
||||
|
||||
<script type="application/javascript;version=1.7">
|
||||
"use strict";
|
||||
|
||||
var referenceSnapshot;
|
||||
var iterations = 0;
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function pollForTestPass() {
|
||||
var snapshot = snapshotWindow(window);
|
||||
if (compareSnapshots(referenceSnapshot, snapshot, true)[0]) {
|
||||
ok(true, "Test passed after " + iterations + " iterations");
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
}
|
||||
|
||||
++iterations;
|
||||
if (iterations == 20) {
|
||||
todo(false, "We couldn't draw the frame, but at least we didn't crash");
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
}
|
||||
setTimeout(pollForTestPass, 10);
|
||||
}
|
||||
function addRemoteFrame() {
|
||||
let iframe = document.createElement("iframe");
|
||||
iframe.mozbrowser = true;
|
||||
iframe.src = "data:text/html,<html style='background:blue;'>";
|
||||
|
||||
document.body.appendChild(iframe);
|
||||
|
||||
pollForTestPass();
|
||||
}
|
||||
addEventListener("load", function() {
|
||||
referenceSnapshot = snapshotWindow(window);
|
||||
document.getElementById("d").style.display = 'none';
|
||||
SpecialPowers.addPermission("browser", true, document);
|
||||
SpecialPowers.pushPrefEnv({
|
||||
"set": [
|
||||
["dom.ipc.browser_frames.oop_by_default", true],
|
||||
["dom.mozBrowserFramesEnabled", true]
|
||||
]
|
||||
}, addRemoteFrame);
|
||||
});
|
||||
</script>
|
||||
</body>
|
@ -658,13 +658,15 @@ RenderFrameParent::BuildLayer(nsDisplayListBuilder* aBuilder,
|
||||
mContainer->Manager() == aManager,
|
||||
"retaining manager changed out from under us ... HELP!");
|
||||
|
||||
if (mContainer && mContainer->Manager() != aManager) {
|
||||
if (IsTempLayerManager(aManager) ||
|
||||
(mContainer && mContainer->Manager() != aManager)) {
|
||||
// This can happen if aManager is a "temporary" manager, or if the
|
||||
// widget's layer manager changed out from under us. We need to
|
||||
// FIXME handle the former case somehow, probably with an API to
|
||||
// draw a manager's subtree. The latter is bad bad bad, but the
|
||||
// the NS_ABORT_IF_FALSE() above will flag it. Returning NULL
|
||||
// here will just cause the shadow subtree not to be rendered.
|
||||
NS_WARNING("Remote iframe not rendered");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user