Title: [240942] trunk
Revision
240942
Author
[email protected]
Date
2019-02-04 14:19:41 -0800 (Mon, 04 Feb 2019)

Log Message

[First paint] Adjust "finishedParsingMainDocument" flag by taking deferred and async scripts into account.
https://bugs.webkit.org/show_bug.cgi?id=194168

Reviewed by Simon Fraser.

Source/WebCore:

First paint should not be blocked by async or deferred scripts.

* page/FrameView.cpp:
(WebCore::FrameView::qualifiesAsVisuallyNonEmpty const):

Tools:

Test if the firstVisuallyNoneEmpty milestone fires before the deferred script's post-message.

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm: Added.
(-[FirstPaintMessageHandler userContentController:didReceiveScriptMessage:]):
(-[RenderingProgressNavigationDelegate _webView:renderingProgressDidChange:]):
(TEST):
* TestWebKitAPI/Tests/WebKit/deferred-script-load.html: Added.
* TestWebKitAPI/Tests/WebKit/deferred-script.js: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (240941 => 240942)


--- trunk/Source/WebCore/ChangeLog	2019-02-04 21:51:32 UTC (rev 240941)
+++ trunk/Source/WebCore/ChangeLog	2019-02-04 22:19:41 UTC (rev 240942)
@@ -1,3 +1,15 @@
+2019-02-04  Zalan Bujtas  <[email protected]>
+
+        [First paint] Adjust "finishedParsingMainDocument" flag by taking deferred and async scripts into account.
+        https://bugs.webkit.org/show_bug.cgi?id=194168
+
+        Reviewed by Simon Fraser.
+
+        First paint should not be blocked by async or deferred scripts.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty const):
+
 2019-02-04  Simon Fraser  <[email protected]>
 
         Async overflow scroll with border-radius renders incorrectly

Modified: trunk/Source/WebCore/page/FrameView.cpp (240941 => 240942)


--- trunk/Source/WebCore/page/FrameView.cpp	2019-02-04 21:51:32 UTC (rev 240941)
+++ trunk/Source/WebCore/page/FrameView.cpp	2019-02-04 22:19:41 UTC (rev 240942)
@@ -4446,7 +4446,7 @@
     if (frame().document()->styleScope().hasPendingSheetsBeforeBody())
         return false;
 
-    auto finishedParsingMainDocument = frame().loader().stateMachine().committedFirstRealDocumentLoad() && !frame().document()->parsing();
+    auto finishedParsingMainDocument = frame().loader().stateMachine().committedFirstRealDocumentLoad() && (frame().document()->readyState() == Document::Interactive || frame().document()->readyState() == Document::Complete);
     // Ensure that we always fire visually non-empty milestone eventually.
     if (finishedParsingMainDocument && frame().loader().isComplete())
         return true;
@@ -4477,11 +4477,8 @@
         return true;
 
     auto isMoreContentExpected = [&]() {
-        // Pending css/_javascript_/font loading/processing means we should wait a little longer.
-        auto hasPendingScriptExecution = frame().document()->scriptRunner().hasPendingScripts();
-        if (hasPendingScriptExecution)
-            return true;
-
+        ASSERT(finishedParsingMainDocument);
+        // Pending css/font loading means we should wait a little longer. Classic non-async, non-defer scripts are all processed by now.
         auto* documentLoader = frame().loader().documentLoader();
         if (!documentLoader)
             return false;
@@ -4494,7 +4491,7 @@
         for (auto& resource : resources) {
             if (resource.value->isLoaded())
                 continue;
-            if (resource.value->type() == CachedResource::Type::CSSStyleSheet || resource.value->type() == CachedResource::Type::Script || resource.value->type() == CachedResource::Type::FontResource)
+            if (resource.value->type() == CachedResource::Type::CSSStyleSheet || resource.value->type() == CachedResource::Type::FontResource)
                 return true;
         }
         return false;

Modified: trunk/Tools/ChangeLog (240941 => 240942)


--- trunk/Tools/ChangeLog	2019-02-04 21:51:32 UTC (rev 240941)
+++ trunk/Tools/ChangeLog	2019-02-04 22:19:41 UTC (rev 240942)
@@ -1,3 +1,20 @@
+2019-02-04  Zalan Bujtas  <[email protected]>
+
+        [First paint] Adjust "finishedParsingMainDocument" flag by taking deferred and async scripts into account.
+        https://bugs.webkit.org/show_bug.cgi?id=194168
+
+        Reviewed by Simon Fraser.
+
+        Test if the firstVisuallyNoneEmpty milestone fires before the deferred script's post-message. 
+
+        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+        * TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm: Added.
+        (-[FirstPaintMessageHandler userContentController:didReceiveScriptMessage:]):
+        (-[RenderingProgressNavigationDelegate _webView:renderingProgressDidChange:]):
+        (TEST):
+        * TestWebKitAPI/Tests/WebKit/deferred-script-load.html: Added.
+        * TestWebKitAPI/Tests/WebKit/deferred-script.js: Added.
+
 2019-02-04  Dean Johnson  <[email protected]>
 
         REGRESSION (r237269): webkit-patch what-broke is broken 

Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (240941 => 240942)


--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2019-02-04 21:51:32 UTC (rev 240941)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj	2019-02-04 22:19:41 UTC (rev 240942)
@@ -50,6 +50,9 @@
 		0F5651F91FCE513500310FBC /* scroll-to-anchor.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 0F5651F81FCE50E800310FBC /* scroll-to-anchor.html */; };
 		115EB3431EE0BA03003C2C0A /* ViewportSizeForViewportUnits.mm in Sources */ = {isa = PBXBuildFile; fileRef = 115EB3421EE0B720003C2C0A /* ViewportSizeForViewportUnits.mm */; };
 		1171B24F219F49CD00CB897D /* FirstMeaningfulPaintMilestone_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11B7FD21219F46DD0069B27F /* FirstMeaningfulPaintMilestone_Bundle.cpp */; };
+		118153442208B7AC00B2CCD2 /* deferred-script-load.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 118153432208B7AC00B2CCD2 /* deferred-script-load.html */; };
+		118153462208B7E500B2CCD2 /* deferred-script.js in Copy Resources */ = {isa = PBXBuildFile; fileRef = 118153452208B7E500B2CCD2 /* deferred-script.js */; };
+		118153482208BADF00B2CCD2 /* FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm in Sources */ = {isa = PBXBuildFile; fileRef = 118153472208BADF00B2CCD2 /* FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm */; };
 		11B7FD28219F47110069B27F /* FirstMeaningfulPaintMilestone.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11B7FD22219F46DD0069B27F /* FirstMeaningfulPaintMilestone.cpp */; };
 		11C2598D21FA6324004C9E23 /* async-script-load.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 11C2598C21FA618D004C9E23 /* async-script-load.html */; };
 		143DDE9820C9018B007F76FA /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 574F55D0204D471C002948C6 /* Security.framework */; };
@@ -1058,6 +1061,8 @@
 				F486B1D01F67952300F34BDD /* DataTransfer-setDragImage.html in Copy Resources */,
 				F457A9D6202D68AF00F7E9D5 /* DataTransfer.html in Copy Resources */,
 				F4512E131F60C44600BB369E /* DataTransferItem-getAsEntry.html in Copy Resources */,
+				118153442208B7AC00B2CCD2 /* deferred-script-load.html in Copy Resources */,
+				118153462208B7E500B2CCD2 /* deferred-script.js in Copy Resources */,
 				C07E6CB213FD73930038B22B /* devicePixelRatio.html in Copy Resources */,
 				0799C34B1EBA3301003B7532 /* disableGetUserMedia.html in Copy Resources */,
 				63A61B8B1FAD251100F06885 /* display-mode.html in Copy Resources */,
@@ -1329,6 +1334,9 @@
 		0FEAE3671B7D19CB00CE17F2 /* Condition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Condition.cpp; sourceTree = "<group>"; };
 		0FFC45A41B73EBE20085BD62 /* Lock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Lock.cpp; sourceTree = "<group>"; };
 		115EB3421EE0B720003C2C0A /* ViewportSizeForViewportUnits.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ViewportSizeForViewportUnits.mm; sourceTree = "<group>"; };
+		118153432208B7AC00B2CCD2 /* deferred-script-load.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "deferred-script-load.html"; sourceTree = "<group>"; };
+		118153452208B7E500B2CCD2 /* deferred-script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode._javascript_; path = "deferred-script.js"; sourceTree = "<group>"; };
+		118153472208BADF00B2CCD2 /* FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm; sourceTree = "<group>"; };
 		11B7FD21219F46DD0069B27F /* FirstMeaningfulPaintMilestone_Bundle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FirstMeaningfulPaintMilestone_Bundle.cpp; sourceTree = "<group>"; };
 		11B7FD22219F46DD0069B27F /* FirstMeaningfulPaintMilestone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FirstMeaningfulPaintMilestone.cpp; sourceTree = "<group>"; };
 		11C2598C21FA618D004C9E23 /* async-script-load.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "async-script-load.html"; sourceTree = "<group>"; };
@@ -2513,7 +2521,6 @@
 				A125478D1DB18B9400358564 /* LoadDataWithNilMIMEType.mm */,
 				4612C2B8210A6ABF00B788A6 /* LoadFileThenReload.mm */,
 				57901FAC1CAF12C200ED64F9 /* LoadInvalidURLRequest.mm */,
-				5774AA6721FBBF7800AF2A1B /* TestLoadOptimizer.mm */,
 				51E6A8921D2F1BEC00C004B6 /* LocalStorageClear.mm */,
 				CA38459520AE012E00990D3B /* LocalStorageDatabaseTracker.mm */,
 				46C519D81D355A7300DAA51A /* LocalStorageNullEntries.mm */,
@@ -2574,6 +2581,7 @@
 				515BE1701D428BD100DD7C68 /* StoreBlobThenDelete.mm */,
 				1C734B5220788C4800F430EA /* SystemColors.mm */,
 				2D70059521EDA0C6003463CB /* TabOutOfWebView.mm */,
+				5774AA6721FBBF7800AF2A1B /* TestLoadOptimizer.mm */,
 				F4CD74C720FDB49600DE3794 /* TestURLSchemeHandler.h */,
 				F4CD74C820FDB49600DE3794 /* TestURLSchemeHandler.mm */,
 				5CB40B4D1F4B98BE007DC7B9 /* UIDelegate.mm */,
@@ -3087,6 +3095,7 @@
 				C51AFB98169F49FF009CCF66 /* FindMatches.mm */,
 				11B7FD22219F46DD0069B27F /* FirstMeaningfulPaintMilestone.cpp */,
 				11B7FD21219F46DD0069B27F /* FirstMeaningfulPaintMilestone_Bundle.cpp */,
+				118153472208BADF00B2CCD2 /* FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm */,
 				1ADBEFAD130C689C00D61D19 /* ForceRepaint.cpp */,
 				376C8C041D6E197C007D2BB9 /* FrameHandle.cpp */,
 				BCBD370F125AA2EB00D2C29F /* FrameMIMETypeHTML.cpp */,
@@ -3298,6 +3307,8 @@
 				9B270FED1DDC25FD002D53F3 /* closed-shadow-tree-test.html */,
 				5C9E56861DF9148E00C9EE33 /* contentBlockerCheck.html */,
 				290F4274172A1FDE00939FF0 /* custom-protocol-sync-xhr.html */,
+				118153432208B7AC00B2CCD2 /* deferred-script-load.html */,
+				118153452208B7E500B2CCD2 /* deferred-script.js */,
 				A14AAB641E78DC3F00C1ADC2 /* encrypted.pdf */,
 				07492B391DF8ADA400633DE1 /* enumerateMediaDevices.html */,
 				C5E1AFFD16B22179006CC1F2 /* execCopy.html */,
@@ -4019,6 +4030,7 @@
 				11B7FD28219F47110069B27F /* FirstMeaningfulPaintMilestone.cpp in Sources */,
 				7C83E0401D0A63E300FEBCF3 /* FirstResponderScrollingPosition.mm in Sources */,
 				C9E6DD351EA97D0800DD78AA /* FirstResponderSuppression.mm in Sources */,
+				118153482208BADF00B2CCD2 /* FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm in Sources */,
 				7C83E0BC1D0A650700FEBCF3 /* FixedLayoutSize.mm in Sources */,
 				7A909A7E1D877480007E10F8 /* FloatPoint.cpp in Sources */,
 				7A909A7F1D877480007E10F8 /* FloatRect.cpp in Sources */,
@@ -4241,6 +4253,7 @@
 				F4F5BB5221667BAA002D06B9 /* TestFontOptions.mm in Sources */,
 				F45E15762112CE6200307E82 /* TestInputDelegate.mm in Sources */,
 				F45D3891215A7B4B002A2979 /* TestInspectorBar.mm in Sources */,
+				5774AA6821FBBF7800AF2A1B /* TestLoadOptimizer.mm in Sources */,
 				2D1C04A71D76298B000A6816 /* TestNavigationDelegate.mm in Sources */,
 				A14FC5901B8AE36F00D107EB /* TestProtocol.mm in Sources */,
 				7CCE7EAE1A411A3400447C4C /* TestsController.cpp in Sources */,
@@ -4259,7 +4272,6 @@
 				7CCE7F271A411AF600447C4C /* UserContentController.mm in Sources */,
 				7CCE7F2D1A411B1000447C4C /* UserContentTest.mm in Sources */,
 				7C882E0A1C80C764006BF731 /* UserContentWorld.mm in Sources */,
-				5774AA6821FBBF7800AF2A1B /* TestLoadOptimizer.mm in Sources */,
 				7CCB99211D3B41F6003922F6 /* UserInitiatedActionInNavigationAction.mm in Sources */,
 				7CCE7F171A411AE600447C4C /* UserMedia.cpp in Sources */,
 				0799C3491EBA2D7B003B7532 /* UserMediaDisabled.mm in Sources */,

Added: trunk/Tools/TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm (0 => 240942)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm	                        (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm	2019-02-04 22:19:41 UTC (rev 240942)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#import "config.h"
+
+#import "PlatformUtilities.h"
+#import "TestNavigationDelegate.h"
+#import <wtf/RetainPtr.h>
+
+#if WK_API_ENABLED
+
+static bool didFirstVisuallyNonEmptyLayout;
+static bool receivedMessage;
+
+@interface FirstPaintMessageHandler : NSObject <WKScriptMessageHandler>
+@end
+
+@implementation FirstPaintMessageHandler
+- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
+{
+    receivedMessage = true;
+}
+@end
+
+@interface RenderingProgressNavigationDelegate : NSObject <WKNavigationDelegate>
+@end
+
+@implementation RenderingProgressNavigationDelegate
+- (void)_webView:(WKWebView *)webView renderingProgressDidChange:(_WKRenderingProgressEvents)progressEvents
+{
+    if (progressEvents & _WKRenderingProgressEventFirstVisuallyNonEmptyLayout)
+        didFirstVisuallyNonEmptyLayout = true;
+}
+@end
+
+TEST(WebKit, FirstVisuallyNonEmptyMilestoneWithDeferredScript)
+{
+    auto webViewConfiguration = adoptNS([[WKWebViewConfiguration alloc] init]);
+    auto messageHandler = adoptNS([[FirstPaintMessageHandler alloc] init]);
+    [[webViewConfiguration userContentController] addScriptMessageHandler:messageHandler.get() name:@"firstpaint"];
+
+    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:webViewConfiguration.get()]);
+
+    RetainPtr<RenderingProgressNavigationDelegate> delegate = adoptNS([[RenderingProgressNavigationDelegate alloc] init]);
+    [webView setNavigationDelegate:delegate.get()];
+
+    receivedMessage = false;
+    didFirstVisuallyNonEmptyLayout = false;
+
+    [webView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"deferred-script-load" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]];
+
+    TestWebKitAPI::Util::run(&receivedMessage);
+    EXPECT_TRUE(didFirstVisuallyNonEmptyLayout);
+}
+
+#endif

Added: trunk/Tools/TestWebKitAPI/Tests/WebKit/deferred-script-load.html (0 => 240942)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit/deferred-script-load.html	                        (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/deferred-script-load.html	2019-02-04 22:19:41 UTC (rev 240942)
@@ -0,0 +1,33 @@
+<body>
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vitae ultrices leo. Nullam consequat, massa id imperdiet sodales, erat lorem auctor tortor, vel rhoncus nunc odio in lectus. Praesent eget ante velit. Quisque vulputate mi ut erat pharetra, vel vulputate risus ullamcorper. Quisque sollicitudin turpis at mi posuere consectetur. Proin nec hendrerit dolor. Vestibulum efficitur eleifend nisi. Duis tincidunt accumsan tincidunt.
+
+Duis et erat placerat lorem iaculis fermentum. Duis tincidunt sagittis venenatis. Quisque tincidunt metus tortor, vitae elementum neque interdum vitae. Maecenas nec pretium nisl. Morbi accumsan, urna sit amet laoreet viverra, eros nisl suscipit nibh, iaculis molestie massa massa id dui. Nam arcu felis, volutpat sit amet metus et, varius molestie tellus. Donec varius dictum massa, sed gravida nibh porta at. Etiam et faucibus ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet massa leo, sit amet malesuada turpis egestas ut. Integer in eleifend est.
+
+Duis sollicitudin ligula ut ligula malesuada, ut mattis dolor congue. Nulla auctor, velit at elementum dictum, orci ipsum auctor lectus, nec viverra mauris nibh eu tellus. Maecenas vitae odio ultricies, venenatis lacus quis, aliquet velit. Praesent rhoncus at ipsum nec gravida. Praesent ut neque sed lacus hendrerit accumsan in ac erat. Mauris mollis at lacus eu consectetur. Vivamus sagittis viverra dui, vel dignissim enim. Vestibulum quis quam id felis dictum efficitur at in erat. Etiam sagittis semper suscipit.
+
+Maecenas purus nulla, elementum vel ligula non, aliquet vestibulum velit. Vivamus non ante imperdiet, luctus risus vitae, convallis mauris. Duis non nibh et elit venenatis cursus. Vivamus nisi ante, molestie sit amet fringilla at, consectetur semper tellus. Nunc urna velit, facilisis ac diam vel, molestie pulvinar sapien. Suspendisse potenti. Praesent maximus urna non urna tristique volutpat. Integer mattis neque et blandit efficitur. In faucibus fermentum eleifend.
+<script>
+document.body.offsetHeight;
+</script>
+Pellentesque aliquam nisi sed lacus lacinia dapibus. Praesent ultricies nisl vel orci sollicitudin fermentum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at porttitor eros. Nam sed justo neque. Aliquam vitae elit vehicula, pharetra lorem in, accumsan mauris. Aenean dignissim placerat urna, vitae facilisis erat pretium vitae. Proin sit amet turpis vitae sem convallis elementum ut vitae odio. Nulla vitae maximus sem, vel tempus ante. Suspendisse porttitor ipsum vitae turpis tempus dignissim. Nam efficitur cursus erat sed rhoncus. Nam ac arcu sit amet dui scelerisque blandit.
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vitae ultrices leo. Nullam consequat, massa id imperdiet sodales, erat lorem auctor tortor, vel rhoncus nunc odio in lectus. Praesent eget ante velit. Quisque vulputate mi ut erat pharetra, vel vulputate risus ullamcorper. Quisque sollicitudin turpis at mi posuere consectetur. Proin nec hendrerit dolor. Vestibulum efficitur eleifend nisi. Duis tincidunt accumsan tincidunt.
+
+Duis et erat placerat lorem iaculis fermentum. Duis tincidunt sagittis venenatis. Quisque tincidunt metus tortor, vitae elementum neque interdum vitae. Maecenas nec pretium nisl. Morbi accumsan, urna sit amet laoreet viverra, eros nisl suscipit nibh, iaculis molestie massa massa id dui. Nam arcu felis, volutpat sit amet metus et, varius molestie tellus. Donec varius dictum massa, sed gravida nibh porta at. Etiam et faucibus ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet massa leo, sit amet malesuada turpis egestas ut. Integer in eleifend est.
+
+Duis sollicitudin ligula ut ligula malesuada, ut mattis dolor congue. Nulla auctor, velit at elementum dictum, orci ipsum auctor lectus, nec viverra mauris nibh eu tellus. Maecenas vitae odio ultricies, venenatis lacus quis, aliquet velit. Praesent rhoncus at ipsum nec gravida. Praesent ut neque sed lacus hendrerit accumsan in ac erat. Mauris mollis at lacus eu consectetur. Vivamus sagittis viverra dui, vel dignissim enim. Vestibulum quis quam id felis dictum efficitur at in erat. Etiam sagittis semper suscipit.
+
+Maecenas purus nulla, elementum vel ligula non, aliquet vestibulum velit. Vivamus non ante imperdiet, luctus risus vitae, convallis mauris. Duis non nibh et elit venenatis cursus. Vivamus nisi ante, molestie sit amet fringilla at, consectetur semper tellus. Nunc urna velit, facilisis ac diam vel, molestie pulvinar sapien. Suspendisse potenti. Praesent maximus urna non urna tristique volutpat. Integer mattis neque et blandit efficitur. In faucibus fermentum eleifend.
+
+Pellentesque aliquam nisi sed lacus lacinia dapibus. Praesent ultricies nisl vel orci sollicitudin fermentum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at porttitor eros. Nam sed justo neque. Aliquam vitae elit vehicula, pharetra lorem in, accumsan mauris. Aenean dignissim placerat urna, vitae facilisis erat pretium vitae. Proin sit amet turpis vitae sem convallis elementum ut vitae odio. Nulla vitae maximus sem, vel tempus ante. Suspendisse porttitor ipsum vitae turpis tempus dignissim. Nam efficitur cursus erat sed rhoncus. Nam ac arcu sit amet dui scelerisque blandit.
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vitae ultrices leo. Nullam consequat, massa id imperdiet sodales, erat lorem auctor tortor, vel rhoncus nunc odio in lectus. Praesent eget ante velit. Quisque vulputate mi ut erat pharetra, vel vulputate risus ullamcorper. Quisque sollicitudin turpis at mi posuere consectetur. Proin nec hendrerit dolor. Vestibulum efficitur eleifend nisi. Duis tincidunt accumsan tincidunt.
+
+Duis et erat placerat lorem iaculis fermentum. Duis tincidunt sagittis venenatis. Quisque tincidunt metus tortor, vitae elementum neque interdum vitae. Maecenas nec pretium nisl. Morbi accumsan, urna sit amet laoreet viverra, eros nisl suscipit nibh, iaculis molestie massa massa id dui. Nam arcu felis, volutpat sit amet metus et, varius molestie tellus. Donec varius dictum massa, sed gravida nibh porta at. Etiam et faucibus ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla laoreet massa leo, sit amet malesuada turpis egestas ut. Integer in eleifend est.
+
+Duis sollicitudin ligula ut ligula malesuada, ut mattis dolor congue. Nulla auctor, velit at elementum dictum, orci ipsum auctor lectus, nec viverra mauris nibh eu tellus. Maecenas vitae odio ultricies, venenatis lacus quis, aliquet velit. Praesent rhoncus at ipsum nec gravida. Praesent ut neque sed lacus hendrerit accumsan in ac erat. Mauris mollis at lacus eu consectetur. Vivamus sagittis viverra dui, vel dignissim enim. Vestibulum quis quam id felis dictum efficitur at in erat. Etiam sagittis semper suscipit.
+
+Maecenas purus nulla, elementum vel ligula non, aliquet vestibulum velit. Vivamus non ante imperdiet, luctus risus vitae, convallis mauris. Duis non nibh et elit venenatis cursus. Vivamus nisi ante, molestie sit amet fringilla at, consectetur semper tellus. Nunc urna velit, facilisis ac diam vel, molestie pulvinar sapien. Suspendisse potenti. Praesent maximus urna non urna tristique volutpat. Integer mattis neque et blandit efficitur. In faucibus fermentum eleifend.
+
+Pellentesque aliquam nisi sed lacus lacinia dapibus. Praesent ultricies nisl vel orci sollicitudin fermentum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at porttitor eros. Nam sed justo neque. Aliquam vitae elit vehicula, pharetra lorem in, accumsan mauris. Aenean dignissim placerat urna, vitae facilisis erat pretium vitae. Proin sit amet turpis vitae sem convallis elementum ut vitae odio. Nulla vitae maximus sem, vel tempus ante. Suspendisse porttitor ipsum vitae turpis tempus dignissim. Nam efficitur cursus erat sed rhoncus. Nam ac arcu sit amet dui scelerisque blandit.</body>
+<script defer src=""

Added: trunk/Tools/TestWebKitAPI/Tests/WebKit/deferred-script.js (0 => 240942)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit/deferred-script.js	                        (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/deferred-script.js	2019-02-04 22:19:41 UTC (rev 240942)
@@ -0,0 +1 @@
+window.webkit.messageHandlers.firstpaint.postMessage("running deferred script");
\ No newline at end of file
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to