Bug 1272651. Fix fallback loading of <embed> inside an <object> with no type attribute to actually work reliably. r=qdot

This commit is contained in:
Boris Zbarsky 2016-05-20 23:13:17 -04:00
Родитель 2b85094faf
Коммит 29016786b4
4 изменённых файлов: 52 добавлений и 2 удалений

Просмотреть файл

@ -3120,7 +3120,8 @@ nsObjectLoadingContent::LoadFallback(FallbackType aType, bool aNotify) {
thisContent->IsHTMLElement(nsGkAtoms::applet)) &&
(aType == eFallbackUnsupported ||
aType == eFallbackDisabled ||
aType == eFallbackBlocklisted))
aType == eFallbackBlocklisted ||
aType == eFallbackAlternate))
{
for (nsIContent* child = thisContent->GetFirstChild(); child;
child = child->GetNextNode(thisContent)) {
@ -3129,7 +3130,8 @@ nsObjectLoadingContent::LoadFallback(FallbackType aType, bool aNotify) {
nsStyleUtil::IsSignificantChild(child, true, false)) {
aType = eFallbackAlternate;
}
if (child->IsHTMLElement(nsGkAtoms::embed)) {
if (child->IsHTMLElement(nsGkAtoms::embed) &&
thisContent->IsHTMLElement(nsGkAtoms::object)) {
HTMLSharedObjectElement* object = static_cast<HTMLSharedObjectElement*>(child);
if (object) {
object->StartObjectLoad(true, true);

Просмотреть файл

@ -36003,6 +36003,12 @@
"url": "/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling.html"
}
],
"html/semantics/embedded-content/the-embed-element/embed-in-object-fallback.html": [
{
"path": "html/semantics/embedded-content/the-embed-element/embed-in-object-fallback.html",
"url": "/html/semantics/embedded-content/the-embed-element/embed-in-object-fallback.html"
}
],
"html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html": [
{
"path": "html/semantics/embedded-content/the-iframe-element/iframe-allowfullscreen.html",

Просмотреть файл

@ -0,0 +1,4 @@
<script>
var varName = location.search.substr(1);
parent[varName] = true;
</script>

Просмотреть файл

@ -0,0 +1,38 @@
<!doctype html>
<meta charset=utf-8>
<title>Ensure that embed elements inside object elements load when the objects
fall back but not otherwise</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
var child1Loaded = false;
var child2Loaded = false;
var child3Loaded = false;
var parent3Loaded = false;
</script>
<object>
<embed src="embed-in-object-fallback-subdocument.html?child1Loaded">
</object>
<object>
<embed id="two" src="embed-in-object-fallback-subdocument.html?child2Loaded">
<!-- Something that forces the embed to be in the tree before the <object>
is done parsing -->
<script>
test(function() {
assert_equals(document.getElementById("two").localName,
"embed");
}, "We have the right embed element");
</script>
</object>
<object data="embed-in-object-fallback-subdocument.html?parent3Loaded">
<embed src="embed-in-object-fallback-subdocument.html?child3Loaded">
</object>
<script>
var t = async_test("Check that the right things loaded");
onload = t.step_func_done(function() {
assert_true(child1Loaded, "child 1 should load");
assert_true(child2Loaded, "child 2 should load");
assert_false(child3Loaded, "child 3 should not load");
assert_true(parent3Loaded, "parent 3 should load");
});
</script>