Bug 1457336: Skip only undisplayed nodes, not invisible nodes. r=mats

MozReview-Commit-ID: 5KgV1lqmim3
This commit is contained in:
Emilio Cobos Álvarez 2018-05-22 11:27:02 +02:00
Родитель 576df97088
Коммит 699a696c0f
2 изменённых файлов: 26 добавлений и 2 удалений

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

@ -67,5 +67,13 @@ iframe.onload = t.step_func_done(function() {
testFindable(false, "me and me", ` testFindable(false, "me and me", `
me <fieldset>and</fieldset> me me <fieldset>and</fieldset> me
`); `);
testFindable(true, "This text should be visible", `
<div style="visibility: hidden">
<div style="visibility: visible">
This text should be visible
</div>
</div>
`);
}); });
</script> </script>

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

@ -524,7 +524,7 @@ IsBlockNode(nsIContent* aContent)
} }
static bool static bool
IsVisibleNode(nsINode* aNode) IsDisplayedNode(nsINode* aNode)
{ {
if (!aNode->IsContent()) { if (!aNode->IsContent()) {
return false; return false;
@ -536,6 +536,22 @@ IsVisibleNode(nsINode* aNode)
return aNode->IsElement() && aNode->AsElement()->IsDisplayContents(); return aNode->IsElement() && aNode->AsElement()->IsDisplayContents();
} }
return true;
}
static bool
IsVisibleNode(nsINode* aNode)
{
if (!IsDisplayedNode(aNode)) {
return false;
}
nsIFrame* frame = aNode->AsContent()->GetPrimaryFrame();
if (!frame) {
// display: contents
return true;
}
return frame->StyleVisibility()->IsVisible(); return frame->StyleVisibility()->IsVisible();
} }
@ -544,7 +560,7 @@ SkipNode(nsIContent* aContent)
{ {
nsIContent* content = aContent; nsIContent* content = aContent;
while (content) { while (content) {
if (!IsVisibleNode(content) || if (!IsDisplayedNode(content) ||
content->IsComment() || content->IsComment() ||
content->IsAnyOfHTMLElements(nsGkAtoms::script, content->IsAnyOfHTMLElements(nsGkAtoms::script,
nsGkAtoms::noframes, nsGkAtoms::noframes,