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", `
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>

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

@ -524,7 +524,7 @@ IsBlockNode(nsIContent* aContent)
}
static bool
IsVisibleNode(nsINode* aNode)
IsDisplayedNode(nsINode* aNode)
{
if (!aNode->IsContent()) {
return false;
@ -536,6 +536,22 @@ IsVisibleNode(nsINode* aNode)
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();
}
@ -544,7 +560,7 @@ SkipNode(nsIContent* aContent)
{
nsIContent* content = aContent;
while (content) {
if (!IsVisibleNode(content) ||
if (!IsDisplayedNode(content) ||
content->IsComment() ||
content->IsAnyOfHTMLElements(nsGkAtoms::script,
nsGkAtoms::noframes,