WebKit Bugzilla
Attachment 361091 Details for
Bug 194168
: [First paint] Adjust "finishedParsingMainDocument" flag by taking deferred and async scripts into account.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194168-20190204134236.patch (text/plain), 24.28 KB, created by
zalan
on 2019-02-04 13:42:37 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
zalan
Created:
2019-02-04 13:42:37 PST
Size:
24.28 KB
patch
obsolete
>Subversion Revision: 240807 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 511461a9f89d279f171e509f76ef115508fc553e..95854396fec8cd4885dc495d02997df5ec35bca4 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,15 @@ >+2019-02-01 Zalan Bujtas <zalan@apple.com> >+ >+ [First paint] Adjust "finishedParsingMainDocument" flag by taking deferred and async scripts into account. >+ https://bugs.webkit.org/show_bug.cgi?id=194168 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ First paint should not be block by async or deferred scripts. >+ >+ * page/FrameView.cpp: >+ (WebCore::FrameView::qualifiesAsVisuallyNonEmpty const): >+ > 2019-01-31 Justin Fan <justin_fan@apple.com> > > [WebGPU] WebGPUAdapterDescriptor -> GPURequestAdapterOptions and take powerPreference into account >diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp >index d5c8897fe12ce6a4c81c75944870548fac1e9e83..ae42fe9f6d745da02b58b23b88acc420ecf418e0 100644 >--- a/Source/WebCore/page/FrameView.cpp >+++ b/Source/WebCore/page/FrameView.cpp >@@ -4464,7 +4464,7 @@ bool FrameView::qualifiesAsVisuallyNonEmpty() const > 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; >@@ -4495,11 +4495,8 @@ bool FrameView::qualifiesAsVisuallyNonEmpty() const > 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; >@@ -4512,7 +4509,7 @@ bool FrameView::qualifiesAsVisuallyNonEmpty() const > 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; >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index c42d240fedcfa98741c737be3f03a002be2e1aa9..9fd0042f4fb3e422b5947feb169adad82cc10a08 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,20 @@ >+2019-02-04 Zalan Bujtas <zalan@apple.com> >+ >+ [First paint] Adjust "finishedParsingMainDocument" flag by taking deferred and async scripts into account. >+ https://bugs.webkit.org/show_bug.cgi?id=194168 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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-01-31 Jiewen Tan <jiewen_tan@apple.com> > > Formalize WebKitAdditions mechanism of LoadOptimizer >diff --git a/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj b/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj >index 98b074496d19b6ef841e9743c5382af0b651a8b7..1ee3a0ddcbcf35612791a9ba095ed334a9081098 100644 >--- a/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj >+++ b/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj >@@ -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 */, >diff --git a/Tools/TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm b/Tools/TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm >new file mode 100644 >index 0000000000000000000000000000000000000000..2f5ad0d387684a8d13044838f52fb02b4525b729 >--- /dev/null >+++ b/Tools/TestWebKitAPI/Tests/WebKit/FirstVisuallyNonEmptyMilestoneWithDeferredScript.mm >@@ -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 >diff --git a/Tools/TestWebKitAPI/Tests/WebKit/deferred-script-load.html b/Tools/TestWebKitAPI/Tests/WebKit/deferred-script-load.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8a82e2aa6b2772962aa37c0d6f3353d67fd06972 >--- /dev/null >+++ b/Tools/TestWebKitAPI/Tests/WebKit/deferred-script-load.html >@@ -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="deferred-script.js"></script> >diff --git a/Tools/TestWebKitAPI/Tests/WebKit/deferred-script.js b/Tools/TestWebKitAPI/Tests/WebKit/deferred-script.js >new file mode 100644 >index 0000000000000000000000000000000000000000..4444f906ecd4058468166a94528fed7ede369cec >--- /dev/null >+++ b/Tools/TestWebKitAPI/Tests/WebKit/deferred-script.js >@@ -0,0 +1 @@ >+window.webkit.messageHandlers.firstpaint.postMessage("running deferred script"); >\ No newline at end of file
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194168
:
360880
|
361091
|
361092