Make it easier to hit the significant rendered text layout milestone on pages with...
authorwenson_hsieh@apple.com <wenson_hsieh@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Jul 2018 06:22:33 +0000 (06:22 +0000)
committerwenson_hsieh@apple.com <wenson_hsieh@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Jul 2018 06:22:33 +0000 (06:22 +0000)
commit4aea2bf859a39d3ded14aeeec0bc76311eb10949
treebabccd5800d47dd98c93da67f4a7846b9170baef
parentfa16aea31c5704672cfb1bcd302ee3dc3feb417c
Make it easier to hit the significant rendered text layout milestone on pages with main article elements
https://bugs.webkit.org/show_bug.cgi?id=187578
<rdar://problem/42104637>

Reviewed by Ryosuke Niwa.

Source/WebCore:

Our current heuristics for triggering the significant rendered text layout milestone are very conservative, with
the intention of avoiding false positives. In practice, we can relax some of these constraints when we've
detected the presence of a main article element on the page. (e.g. in New York Times articles). See per-method
changes below for more detail.

Test: RenderingProgressTests.DidRenderSignificantAmountOfText

* dom/Document.cpp:
(WebCore::Document::registerArticleElement):
(WebCore::Document::unregisterArticleElement):
(WebCore::Document::updateMainArticleElementAfterLayout):

As a post layout task, update the main article element by looping through the articles (up to a maximum limit of
10) in search of an article element that is several times larger than the second largest article element.

* dom/Document.h:

Store a set containing the article elements in the document, as well as the current main article on the page.

(WebCore::Document::hasMainArticleElement const):
* html/Element.cpp:
(WebCore::Element::insertedIntoAncestor):
(WebCore::Element::removedFromAncestor):

Keep track of the article elements that exist in the document whenever elements with the article tag are added
to or removed from the document.

* page/FrameView.cpp:

Add new minimum thresholds for firing the significant rendered text milestone when there exists a main article.

(WebCore::FrameView::performPostLayoutTasks):
(WebCore::FrameView::updateSignificantRenderedTextMilestoneIfNeeded):

Take the main article element into consideration when determining whether to fire the significant text
layout milestone.

Tools:

Tweak an existing layout test to additionally check that the significant text layout milestone is fired on a
page with an article element that is clearly the "main" content on the page (i.e. much taller than all other
articles).

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKitCocoa/significant-text-milestone-article.html: Copied from Tools/TestWebKitAPI/Tests/WebKitCocoa/significant-text-milestone.html.
* TestWebKitAPI/Tests/WebKitCocoa/significant-text-milestone.html:
* TestWebKitAPI/Tests/ios/RenderingProgressTests.mm:
(TEST):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233794 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/Document.h
Source/WebCore/dom/Element.cpp
Source/WebCore/page/FrameView.cpp
Tools/ChangeLog
Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
Tools/TestWebKitAPI/Tests/WebKitCocoa/significant-text-milestone-article.html [new file with mode: 0644]
Tools/TestWebKitAPI/Tests/WebKitCocoa/significant-text-milestone.html
Tools/TestWebKitAPI/Tests/ios/RenderingProgressTests.mm