Index: Source/web/tests/DocumentLoadingRenderingTest.cpp |
diff --git a/Source/web/tests/DocumentLoadingRenderingTest.cpp b/Source/web/tests/DocumentLoadingRenderingTest.cpp |
index 2283f8507e2d753268c77eae9cc0c9d69d6cb5ec..0f64c43a4e6c29fb8d459d5e6c755a7a834b3812 100644 |
--- a/Source/web/tests/DocumentLoadingRenderingTest.cpp |
+++ b/Source/web/tests/DocumentLoadingRenderingTest.cpp |
@@ -16,49 +16,148 @@ |
namespace blink { |
class DocumentLoadingRenderingTest : public ::testing::Test { |
- void SetUp() override |
+protected: |
+ DocumentLoadingRenderingTest() |
+ : m_webViewClient(m_layerTreeView) |
{ |
+ m_webViewHelper.initialize(true, nullptr, &m_webViewClient); |
Document::setThreadedParsingEnabledForUnitTestsOnly(false); |
} |
- void TearDown() override |
+ virtual ~DocumentLoadingRenderingTest() |
{ |
Document::setThreadedParsingEnabledForUnitTestsOnly(true); |
} |
+ |
+ void loadURL(const String& url) |
+ { |
+ WebURLRequest request; |
+ request.initialize(); |
+ request.setURL(KURL(ParsedURLString, url)); |
+ m_webViewHelper.webViewImpl()->mainFrameImpl()->loadRequest(request); |
+ } |
+ |
+ SimNetwork m_network; |
+ SimLayerTreeView m_layerTreeView; |
+ SimWebViewClient m_webViewClient; |
+ FrameTestHelpers::WebViewHelper m_webViewHelper; |
}; |
TEST_F(DocumentLoadingRenderingTest, ShouldResumeCommitsAfterBodyParsedWithoutSheets) |
{ |
- SimLayerTreeView layerTreeView; |
- SimWebViewClient webViewClient(layerTreeView); |
- FrameTestHelpers::WebViewHelper webViewHelper; |
- webViewHelper.initialize(true, nullptr, &webViewClient); |
- |
- SimNetwork network; |
SimRequest mainResource("https://example.com/test.html", "text/html"); |
- WebURLRequest request; |
- request.initialize(); |
- request.setURL(KURL(ParsedURLString, "https://example.com/test.html")); |
- |
- webViewHelper.webViewImpl()->mainFrameImpl()->loadRequest(request); |
+ loadURL("https://example.com/test.html"); |
mainResource.start(); |
// Still in the head, should not resume commits. |
mainResource.write("<!DOCTYPE html>"); |
- EXPECT_TRUE(layerTreeView.deferCommits()); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
mainResource.write("<title>Test</title><style>div { color red; }</style>"); |
- EXPECT_TRUE(layerTreeView.deferCommits()); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
// Implicitly inserts the body. Since there's no loading stylesheets we |
// should resume commits. |
mainResource.write("<p>Hello World</p>"); |
- EXPECT_FALSE(layerTreeView.deferCommits()); |
+ EXPECT_FALSE(m_layerTreeView.deferCommits()); |
+ |
+ // Finish the load, should stay resumed. |
+ mainResource.finish(); |
+ EXPECT_FALSE(m_layerTreeView.deferCommits()); |
+} |
+ |
+TEST_F(DocumentLoadingRenderingTest, ShouldResumeCommitsAfterBodyIfSheetsLoaded) |
+{ |
+ SimRequest mainResource("https://example.com/test.html", "text/html"); |
+ SimRequest cssResource("https://example.com/test.css", "text/css"); |
+ |
+ loadURL("https://example.com/test.html"); |
+ |
+ mainResource.start(); |
+ |
+ // Still in the head, should not resume commits. |
+ mainResource.write("<!DOCTYPE html><link rel=stylesheet href=test.css>"); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
+ |
+ // Sheet is streaming in, but not ready yet. |
+ cssResource.start(); |
+ cssResource.write("a { color: red; }"); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
+ |
+ // Sheet finished, but no body yet, so don't resume. |
+ cssResource.finish(); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
+ |
+ // Body inserted and sheet is loaded so resume commits. |
+ mainResource.write("<body>"); |
+ EXPECT_FALSE(m_layerTreeView.deferCommits()); |
+ |
+ // Finish the load, should stay resumed. |
+ mainResource.finish(); |
+ EXPECT_FALSE(m_layerTreeView.deferCommits()); |
+} |
+ |
+TEST_F(DocumentLoadingRenderingTest, ShouldResumeCommitsAfterSheetsLoaded) |
+{ |
+ SimRequest mainResource("https://example.com/test.html", "text/html"); |
+ SimRequest cssResource("https://example.com/test.css", "text/css"); |
+ |
+ loadURL("https://example.com/test.html"); |
+ |
+ mainResource.start(); |
+ |
+ // Still in the head, should not resume commits. |
+ mainResource.write("<!DOCTYPE html><link rel=stylesheet href=test.css>"); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
+ |
+ // Sheet is streaming in, but not ready yet. |
+ cssResource.start(); |
+ cssResource.write("a { color: red; }"); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
+ |
+ // Body inserted, but sheet is still loading so don't resume. |
+ mainResource.write("<body>"); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
+ |
+ // Sheet finished and there's a body so resume. |
+ cssResource.finish(); |
+ EXPECT_FALSE(m_layerTreeView.deferCommits()); |
// Finish the load, should stay resumed. |
mainResource.finish(); |
- EXPECT_FALSE(layerTreeView.deferCommits()); |
+ EXPECT_FALSE(m_layerTreeView.deferCommits()); |
+} |
+ |
+TEST_F(DocumentLoadingRenderingTest, ShouldResumeCommitsAfterParsingSvg) |
+{ |
+ SimRequest mainResource("https://example.com/test.svg", "image/svg+xml"); |
+ SimRequest cssResource("https://example.com/test.css", "text/css"); |
+ |
+ loadURL("https://example.com/test.svg"); |
+ |
+ mainResource.start(); |
+ |
+ // Not done parsing. |
+ mainResource.write("<?xml-stylesheet type='text/css' href='test.css'?>"); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
+ |
+ // Sheet is streaming in, but not ready yet. |
+ cssResource.start(); |
+ cssResource.write("a { color: red; }"); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
+ |
+ // Root inserted, but sheet is still loading so don't resume. |
+ mainResource.write("<svg>"); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
+ |
+ // Sheet finished, but no body since it's svg so don't resume. |
+ cssResource.finish(); |
+ EXPECT_TRUE(m_layerTreeView.deferCommits()); |
+ |
+ // Finish the load and resume. |
+ mainResource.finish(); |
+ EXPECT_FALSE(m_layerTreeView.deferCommits()); |
} |
} // namespace blink |