Bug 1487649 - Don't do a name check when cloning a shadow root for print preview. r=smaug

Otherwise the ShadowRoot for <use> or other internal ones may not get cloned
properly.

Differential Revision: https://phabricator.services.mozilla.com/D4756

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Emilio Cobos Álvarez 2018-08-31 12:08:04 +00:00
Родитель 1f2797495b
Коммит d4aeb28fd2
2 изменённых файлов: 36 добавлений и 6 удалений

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

@ -610,13 +610,8 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
if (clone->OwnerDoc()->IsStaticDocument()) {
ShadowRoot* originalShadowRoot = aNode->AsElement()->GetShadowRoot();
if (originalShadowRoot) {
ShadowRootInit init;
init.mMode = originalShadowRoot->Mode();
RefPtr<ShadowRoot> newShadowRoot =
clone->AsElement()->AttachShadow(init, aError);
if (NS_WARN_IF(aError.Failed())) {
return nullptr;
}
clone->AsElement()->AttachShadowWithoutNameChecks(originalShadowRoot->Mode());
newShadowRoot->CloneInternalDataFrom(originalShadowRoot);
for (nsIContent* origChild = originalShadowRoot->GetFirstChild();

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

@ -306,6 +306,41 @@ async function runTest8() {
exitprintpreview();
ok(compareCanvases(), "Printing pages with fonts loaded from CSS and JS should be the same.");
requestAnimationFrame(function() { setTimeout(runTest9); } );
}
// Test for bug 1487649
async function runTest9() {
window.frames[0].document.body.innerHTML = `
<svg width="100" height="100">
<rect width='100' height='100' fill='lime'/>
</svg>
`;
printpreview();
ctx1.drawWindow(window.frames[1], 0, 0, 400, 400, "rgb(255,255,255)");
exitprintpreview();
window.frames[0].document.body.innerHTML = `
<svg width="100" height="100">
<defs>
<g id="useme">
<rect width='100' height='100' fill='lime'/>
</g>
</defs>
<use href="#useme" />
</svg>
`;
// Ensure the <use> shadow tree is created so we test what we want to test.
await new Promise(resolve => requestAnimationFrame(resolve));
await new Promise(resolve => requestAnimationFrame(resolve));
printpreview();
ctx2.drawWindow(window.frames[1], 0, 0, 400, 400, "rgb(255,255,255)");
exitprintpreview();
ok(compareCanvases(), "Printing <use> subtrees should create same output");
finish();
}