Title: [272629] trunk/Source/WebKit
Revision
272629
Author
[email protected]
Date
2021-02-09 17:52:17 -0800 (Tue, 09 Feb 2021)

Log Message

Make sure we are no longer show the previous page when running a JS prompt
https://bugs.webkit.org/show_bug.cgi?id=215782
<rdar://problem/67698601>

Reviewed by Simon Fraser.

Make sure we are no longer show the previous page when running a JS prompt.
If we have not yet done a layer tree commit since the last load commit, then
we are likely still showing the previous page. If we are asked to run a JS
prompt / alert / confirm at this point, it would be confusing to still show
the previous page. In order to address the issue, we now make the view blank
in such scenario (ideally, we'd have painted the new page but this is
currently not a trivial thing to do).

To make the view blank, the approach chosen was to add a blank overlay view
on top of the content. This overlay view gets taken down as soon as we
paint the view again.

* SourcesCocoa.txt:
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _hasBlankOverlay]):
(-[WKWebView _setHasBlankOverlay:]):
* UIProcess/API/Cocoa/WKWebViewInternal.h:
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
* UIProcess/Cocoa/PageClientImplCocoa.h:
* UIProcess/Cocoa/PageClientImplCocoa.mm:
(WebKit::PageClientImplCocoa::setHasBlankOverlay):
* UIProcess/Cocoa/WKBlankOverlayView.h: Added.
* UIProcess/Cocoa/WKBlankOverlayView.mm: Added.
(-[WKBlankOverlayView initWithFrame:]):
* UIProcess/PageClient.h:
(WebKit::PageClient::setHasBlankOverlay):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didFirstLayerTreeCommitAfterCommittingLoad):
(WebKit::WebPageProxy::makeViewBlankIfUnpaintedSinceLastLoadCommit):
(WebKit::WebPageProxy::didCommitLoadForFrame):
(WebKit::WebPageProxy::runJavaScriptAlert):
(WebKit::WebPageProxy::runJavaScriptConfirm):
(WebKit::WebPageProxy::runJavaScriptPrompt):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::didCommitLayerTree):
* UIProcess/mac/WebPageProxyMac.mm:
(WebKit::WebPageProxy::didUpdateRenderingAfterCommittingLoad):
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::didCommitLoad):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::updateRendering):
* WebProcess/WebPage/mac/WebPageMac.mm:
(WebKit::WebPage::didUpdateRendering):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (272628 => 272629)


--- trunk/Source/WebKit/ChangeLog	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/ChangeLog	2021-02-10 01:52:17 UTC (rev 272629)
@@ -1,3 +1,59 @@
+2021-02-09  Chris Dumez  <[email protected]>
+
+        Make sure we are no longer show the previous page when running a JS prompt
+        https://bugs.webkit.org/show_bug.cgi?id=215782
+        <rdar://problem/67698601>
+
+        Reviewed by Simon Fraser.
+
+        Make sure we are no longer show the previous page when running a JS prompt.
+        If we have not yet done a layer tree commit since the last load commit, then
+        we are likely still showing the previous page. If we are asked to run a JS
+        prompt / alert / confirm at this point, it would be confusing to still show
+        the previous page. In order to address the issue, we now make the view blank
+        in such scenario (ideally, we'd have painted the new page but this is
+        currently not a trivial thing to do).
+
+        To make the view blank, the approach chosen was to add a blank overlay view
+        on top of the content. This overlay view gets taken down as soon as we
+        paint the view again.
+
+        * SourcesCocoa.txt:
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _hasBlankOverlay]):
+        (-[WKWebView _setHasBlankOverlay:]):
+        * UIProcess/API/Cocoa/WKWebViewInternal.h:
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+        * UIProcess/Cocoa/PageClientImplCocoa.h:
+        * UIProcess/Cocoa/PageClientImplCocoa.mm:
+        (WebKit::PageClientImplCocoa::setHasBlankOverlay):
+        * UIProcess/Cocoa/WKBlankOverlayView.h: Added.
+        * UIProcess/Cocoa/WKBlankOverlayView.mm: Added.
+        (-[WKBlankOverlayView initWithFrame:]):
+        * UIProcess/PageClient.h:
+        (WebKit::PageClient::setHasBlankOverlay):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::didFirstLayerTreeCommitAfterCommittingLoad):
+        (WebKit::WebPageProxy::makeViewBlankIfUnpaintedSinceLastLoadCommit):
+        (WebKit::WebPageProxy::didCommitLoadForFrame):
+        (WebKit::WebPageProxy::runJavaScriptAlert):
+        (WebKit::WebPageProxy::runJavaScriptConfirm):
+        (WebKit::WebPageProxy::runJavaScriptPrompt):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+        * UIProcess/ios/WebPageProxyIOS.mm:
+        (WebKit::WebPageProxy::didCommitLayerTree):
+        * UIProcess/mac/WebPageProxyMac.mm:
+        (WebKit::WebPageProxy::didUpdateRenderingAfterCommittingLoad):
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::didCommitLoad):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+        (WebKit::TiledCoreAnimationDrawingArea::updateRendering):
+        * WebProcess/WebPage/mac/WebPageMac.mm:
+        (WebKit::WebPage::didUpdateRendering):
+
 2021-02-09  Alex Christensen  <[email protected]>
 
         Use CompletionHandler instead of ImageCallback

Modified: trunk/Source/WebKit/SourcesCocoa.txt (272628 => 272629)


--- trunk/Source/WebKit/SourcesCocoa.txt	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/SourcesCocoa.txt	2021-02-10 01:52:17 UTC (rev 272629)
@@ -409,6 +409,7 @@
 UIProcess/Cocoa/WebProcessProxyCocoa.mm
 UIProcess/Cocoa/WebURLSchemeHandlerCocoa.mm
 UIProcess/Cocoa/WebViewImpl.mm
+UIProcess/Cocoa/WKBlankOverlayView.mm
 UIProcess/Cocoa/WKContactPicker.mm
 UIProcess/Cocoa/WKEditCommand.mm
 UIProcess/Cocoa/WKFullKeyboardAccessWatcher.mm

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2021-02-10 01:52:17 UTC (rev 272629)
@@ -1383,7 +1383,25 @@
 
 #endif // ENABLE(ATTACHMENT_ELEMENT)
 
+- (BOOL)_hasBlankOverlay
+{
+    return !!_blankOverlayView;
+}
 
+- (void)_setHasBlankOverlay:(BOOL)hasBlankOverlay
+{
+    if (!!_blankOverlayView == hasBlankOverlay)
+        return;
+
+    if (hasBlankOverlay) {
+        _blankOverlayView = adoptNS([[WKBlankOverlayView alloc] initWithFrame:[self bounds]]);
+        [self addSubview:_blankOverlayView.get()];
+    } else {
+        [_blankOverlayView removeFromSuperview];
+        _blankOverlayView = nullptr;
+    }
+}
+
 - (id <_WKAppHighlightDelegate>)_appHighlightDelegate
 {
 #if ENABLE(APP_HIGHLIGHTS)

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h	2021-02-10 01:52:17 UTC (rev 272629)
@@ -25,6 +25,7 @@
 
 #import "PDFPluginIdentifier.h"
 #import "SameDocumentNavigationType.h"
+#import "WKBlankOverlayView.h"
 #import "WKShareSheet.h"
 #import "WKWebViewConfiguration.h"
 #import "WKWebViewPrivate.h"
@@ -130,6 +131,8 @@
     _WKRenderingProgressEvents _observedRenderingProgressEvents;
     BOOL _usePlatformFindUI;
 
+    RetainPtr<WKBlankOverlayView> _blankOverlayView;
+
 #if PLATFORM(MAC)
     std::unique_ptr<WebKit::WebViewImpl> _impl;
     RetainPtr<WKTextFinderClient> _textFinderClient;

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2021-02-10 01:52:17 UTC (rev 272629)
@@ -365,6 +365,8 @@
 - (void)_didEnableBrowserExtensions:(NSDictionary<NSString *, NSString *> *)extensionIDToNameMap WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 - (void)_didDisableBrowserExtensions:(NSSet<NSString *> *)extensionIDs WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 
+@property (nonatomic, setter=_setHasBlankOverlay:) BOOL _hasBlankOverlay WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
 @property (nonatomic, weak, setter=_setAppHighlightDelegate:) id <_WKAppHighlightDelegate> _appHighlightDelegate WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 - (void)_restoreAppHighlights:(NSData *)data WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 

Modified: trunk/Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.h (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.h	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.h	2021-02-10 01:52:17 UTC (rev 272629)
@@ -58,6 +58,8 @@
 
     bool scrollingUpdatesDisabledForTesting() final;
 
+    void setHasBlankOverlay(bool) final;
+
 #if ENABLE(ATTACHMENT_ELEMENT)
     void didInsertAttachment(API::Attachment&, const String& source) final;
     void didRemoveAttachment(API::Attachment&) final;

Modified: trunk/Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.mm (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.mm	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.mm	2021-02-10 01:52:17 UTC (rev 272629)
@@ -28,6 +28,7 @@
 
 #import "WKWebViewConfigurationPrivate.h"
 #import "WKWebViewInternal.h"
+#import "WKWebViewPrivate.h"
 #import "WKWebViewPrivateForTesting.h"
 #import <WebCore/AlternativeTextUIController.h>
 #import <wtf/Vector.h>
@@ -79,6 +80,11 @@
     return [m_webView _scrollingUpdatesDisabledForTesting];
 }
 
+void PageClientImplCocoa::setHasBlankOverlay(bool hasBlankOverlay)
+{
+    [m_webView _setHasBlankOverlay:hasBlankOverlay];
+}
+
 #if ENABLE(ATTACHMENT_ELEMENT)
 
 void PageClientImplCocoa::didInsertAttachment(API::Attachment& attachment, const String& source)

Added: trunk/Source/WebKit/UIProcess/Cocoa/WKBlankOverlayView.h (0 => 272629)


--- trunk/Source/WebKit/UIProcess/Cocoa/WKBlankOverlayView.h	                        (rev 0)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WKBlankOverlayView.h	2021-02-10 01:52:17 UTC (rev 272629)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+
+#pragma once
+
+#if PLATFORM(MAC)
+#import <AppKit/AppKit.h>
+
+using ViewType = NSView;
+using RectType = NSRect;
+#else
+#import <UIKit/UIKit.h>
+
+using ViewType = UIView;
+using RectType = CGRect;
+#endif
+
+@interface WKBlankOverlayView : ViewType
+
+- (instancetype)initWithFrame:(RectType)frame;
+
+@end

Added: trunk/Source/WebKit/UIProcess/Cocoa/WKBlankOverlayView.mm (0 => 272629)


--- trunk/Source/WebKit/UIProcess/Cocoa/WKBlankOverlayView.mm	                        (rev 0)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WKBlankOverlayView.mm	2021-02-10 01:52:17 UTC (rev 272629)
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2021 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 "WKBlankOverlayView.mm"
+
+@implementation WKBlankOverlayView {
+}
+
+- (instancetype)initWithFrame:(RectType)frame
+{
+    if (!(self = [super initWithFrame:frame]))
+        return nil;
+
+#if PLATFORM(MAC)
+    [self setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
+    [self setWantsLayer:YES];
+    [[self layer] setBackgroundColor:[[NSColor whiteColor] CGColor]];
+#else
+    [self setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
+    [[self layer] setBackgroundColor:[[UIColor whiteColor] CGColor]];
+#endif
+    [[self layer] setName:@"WKBlankOverlayView layer"];
+
+    return self;
+}
+
+@end

Modified: trunk/Source/WebKit/UIProcess/PageClient.h (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/PageClient.h	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/PageClient.h	2021-02-10 01:52:17 UTC (rev 272629)
@@ -512,6 +512,8 @@
 
     virtual void setMouseEventPolicy(WebCore::MouseEventPolicy) { }
 
+    virtual void setHasBlankOverlay(bool) { }
+
 #if ENABLE(IMAGE_EXTRACTION)
     virtual void requestImageExtraction(const ShareableBitmap::Handle&, CompletionHandler<void(WebCore::ImageExtractionResult&&)>&& completion) { completion({ }); }
 #endif

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-02-10 01:52:17 UTC (rev 272629)
@@ -2395,6 +2395,25 @@
 }
 #endif
 
+void WebPageProxy::stopMakingViewBlankDueToLackOfRenderingUpdate()
+{
+#if PLATFORM(COCOA)
+    ASSERT(m_hasUpdatedRenderingAfterDidCommitLoad);
+    pageClient().setHasBlankOverlay(false);
+#endif
+}
+
+void WebPageProxy::makeViewBlankIfUnpaintedSinceLastLoadCommit()
+{
+#if PLATFORM(COCOA)
+    if (!m_hasUpdatedRenderingAfterDidCommitLoad) {
+        // Add a blank overlay view to make the view blank. This overlay will be taken down once
+        // when we've painted for the first time after committing a load.
+        pageClient().setHasBlankOverlay(true);
+    }
+#endif
+}
+
 void WebPageProxy::discardQueuedMouseEvents()
 {
     while (m_mouseEventQueue.size() > 1)
@@ -4638,10 +4657,12 @@
     m_hasCommittedAnyProvisionalLoads = true;
     m_process->didCommitProvisionalLoad();
 
+#if PLATFORM(COCOA)
+    if (frame->isMainFrame()) {
+        m_hasUpdatedRenderingAfterDidCommitLoad = false;
 #if PLATFORM(IOS_FAMILY)
-    if (frame->isMainFrame()) {
-        m_hasReceivedLayerTreeTransactionAfterDidCommitLoad = false;
         m_firstLayerTreeTransactionIdAfterDidCommitLoad = downcast<RemoteLayerTreeDrawingAreaProxy>(*drawingArea()).nextLayerTreeTransactionID();
+#endif
     }
 #endif
 
@@ -5631,6 +5652,12 @@
         if (auto* automationSession = process().processPool().automationSession())
             automationSession->willShowJavaScriptDialog(*this);
     }
+
+    // If we have not painted yet since the last load commit, then we are likely still displaying the previous page.
+    // Displaying a JS prompt for the new page with the old page behind would be confusing so we add a blank overlay
+    // on top of the view in this case.
+    makeViewBlankIfUnpaintedSinceLastLoadCommit();
+
     m_uiClient->runJavaScriptAlert(*this, message, frame, WTFMove(frameInfo), WTFMove(reply));
 }
 
@@ -5649,6 +5676,11 @@
             automationSession->willShowJavaScriptDialog(*this);
     }
 
+    // If we have not painted yet since the last load commit, then we are likely still displaying the previous page.
+    // Displaying a JS prompt for the new page with the old page behind would be confusing so we add a blank overlay
+    // on top of the view in this case.
+    makeViewBlankIfUnpaintedSinceLastLoadCommit();
+
     m_uiClient->runJavaScriptConfirm(*this, message, frame, WTFMove(frameInfo), WTFMove(reply));
 }
 
@@ -5667,6 +5699,11 @@
             automationSession->willShowJavaScriptDialog(*this);
     }
 
+    // If we have not painted yet since the last load commit, then we are likely still displaying the previous page.
+    // Displaying a JS prompt for the new page with the old page behind would be confusing so we add a blank overlay
+    // on top of the view in this case.
+    makeViewBlankIfUnpaintedSinceLastLoadCommit();
+
     m_uiClient->runJavaScriptPrompt(*this, message, defaultValue, frame, WTFMove(frameInfo), WTFMove(reply));
 }
 

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2021-02-10 01:52:17 UTC (rev 272629)
@@ -2135,6 +2135,9 @@
     void didPerformDictionaryLookup(const WebCore::DictionaryPopupInfo&);
 #endif
 
+    void stopMakingViewBlankDueToLackOfRenderingUpdate();
+    void makeViewBlankIfUnpaintedSinceLastLoadCommit();
+
     // Spelling and grammar.
     void checkSpellingOfString(const String& text, CompletionHandler<void(int32_t misspellingLocation, int32_t misspellingLength)>&&);
     void checkGrammarOfString(const String& text, CompletionHandler<void(Vector<WebCore::GrammarDetail>&&, int32_t badGrammarLocation, int32_t badGrammarLength)>&&);
@@ -2162,6 +2165,7 @@
     void applicationManifestCallback(const Optional<WebCore::ApplicationManifest>&, CallbackID);
 #endif
 #if PLATFORM(MAC)
+    void didUpdateRenderingAfterCommittingLoad();
     void fontAtSelectionCallback(const FontInfo&, double, bool, CallbackID);
 #endif
 #if PLATFORM(IOS_FAMILY)
@@ -2458,11 +2462,13 @@
     std::unique_ptr<MediaUsageManager> m_mediaUsageManager;
 #endif
 
+#if PLATFORM(COCOA)
+    bool m_hasUpdatedRenderingAfterDidCommitLoad { true };
+#endif
 #if PLATFORM(IOS_FAMILY)
     Optional<WebCore::InputMode> m_pendingInputModeChange;
     TransactionID m_firstLayerTreeTransactionIdAfterDidCommitLoad;
     int32_t m_deviceOrientation { 0 };
-    bool m_hasReceivedLayerTreeTransactionAfterDidCommitLoad { true };
     bool m_hasNetworkRequestsOnSuspended { false };
     bool m_isKeyboardAnimatingIn { false };
     bool m_isScrollingOrZooming { false };

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in	2021-02-10 01:52:17 UTC (rev 272629)
@@ -377,6 +377,7 @@
     RecordAutocorrectionResponse(int32_t response, String replacedString, String replacementString);
 
     SetEditableElementIsFocused(bool editableElementIsFocused)
+    DidUpdateRenderingAfterCommittingLoad()
 #endif
 
 #if USE(DICTATION_ALTERNATIVES)

Modified: trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm	2021-02-10 01:52:17 UTC (rev 272629)
@@ -338,9 +338,10 @@
     themeColorChanged(layerTreeTransaction.themeColor());
     pageExtendedBackgroundColorDidChange(layerTreeTransaction.pageExtendedBackgroundColor());
 
-    if (!m_hasReceivedLayerTreeTransactionAfterDidCommitLoad) {
+    if (!m_hasUpdatedRenderingAfterDidCommitLoad) {
         if (layerTreeTransaction.transactionID() >= m_firstLayerTreeTransactionIdAfterDidCommitLoad) {
-            m_hasReceivedLayerTreeTransactionAfterDidCommitLoad = true;
+            m_hasUpdatedRenderingAfterDidCommitLoad = true;
+            stopMakingViewBlankDueToLackOfRenderingUpdate();
             m_lastVisibleContentRectUpdate = VisibleContentRectUpdateInfo();
         }
     }

Modified: trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm (272628 => 272629)


--- trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm	2021-02-10 01:52:17 UTC (rev 272629)
@@ -657,6 +657,15 @@
     return m_preferences->store().getBoolValueForKey(WebPreferencesKey::useiTunesAVOutputContextKey());
 }
 
+void WebPageProxy::didUpdateRenderingAfterCommittingLoad()
+{
+    if (m_hasUpdatedRenderingAfterDidCommitLoad)
+        return;
+
+    m_hasUpdatedRenderingAfterDidCommitLoad = true;
+    stopMakingViewBlankDueToLackOfRenderingUpdate();
+}
+
 #if ENABLE(UI_PROCESS_PDF_HUD)
 
 void WebPageProxy::createPDFHUD(PDFPluginIdentifier identifier, const WebCore::IntRect& rect)

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (272628 => 272629)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-02-10 01:52:17 UTC (rev 272629)
@@ -948,6 +948,7 @@
 		44EC3EA9247F5C090059489C /* _WKDragActionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 44EC3EA8247F5C080059489C /* _WKDragActionsInternal.h */; };
 		460F488F1F996F7100CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */; };
 		460F48901F996F7100CF4B87 /* WebSWContextManagerConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 460F488E1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessages.h */; };
+		4613A74425D32CCF00A5033A /* WKBlankOverlayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4613A74225D32CB800A5033A /* WKBlankOverlayView.h */; };
 		461CCCA5231485A700B659B9 /* UIRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 463236852314833F00A48FA7 /* UIRemoteObjectRegistry.h */; };
 		461CCCA6231485AA00B659B9 /* WebRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 46323683231481EF00A48FA7 /* WebRemoteObjectRegistry.h */; };
 		463FD4801EB9459600A2982C /* WKProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD47F1EB9458400A2982C /* WKProcessTerminationReason.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3793,6 +3794,8 @@
 		4603011B234BE31E009C8217 /* WebBackForwardCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebBackForwardCache.h; sourceTree = "<group>"; };
 		460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSWContextManagerConnectionMessageReceiver.cpp; path = DerivedSources/WebKit2/WebSWContextManagerConnectionMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
 		460F488E1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSWContextManagerConnectionMessages.h; path = DerivedSources/WebKit2/WebSWContextManagerConnectionMessages.h; sourceTree = BUILT_PRODUCTS_DIR; };
+		4613A74225D32CB800A5033A /* WKBlankOverlayView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKBlankOverlayView.h; sourceTree = "<group>"; };
+		4613A74325D32CB900A5033A /* WKBlankOverlayView.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WKBlankOverlayView.mm; sourceTree = "<group>"; };
 		462107D71F38DBD300DD7810 /* PingLoad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PingLoad.cpp; sourceTree = "<group>"; };
 		46323683231481EF00A48FA7 /* WebRemoteObjectRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebRemoteObjectRegistry.h; sourceTree = "<group>"; };
 		463236842314825C00A48FA7 /* WebRemoteObjectRegistry.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebRemoteObjectRegistry.cpp; sourceTree = "<group>"; };
@@ -6857,6 +6860,8 @@
 				51D124321E6DE521002B2820 /* WebURLSchemeHandlerCocoa.mm */,
 				2DFC7DB91BCCC19500C1548C /* WebViewImpl.h */,
 				2DFC7DBA1BCCC19500C1548C /* WebViewImpl.mm */,
+				4613A74225D32CB800A5033A /* WKBlankOverlayView.h */,
+				4613A74325D32CB900A5033A /* WKBlankOverlayView.mm */,
 				E596DD68251E71D300C275A7 /* WKContactPicker.h */,
 				E596DD69251E71D400C275A7 /* WKContactPicker.mm */,
 				2ECF66CC21D6B77E009E5C3F /* WKEditCommand.h */,
@@ -12306,6 +12311,7 @@
 				BC646C1B11DD399F006455B0 /* WKBackForwardListRef.h in Headers */,
 				BCDDB317124EBD130048D13C /* WKBase.h in Headers */,
 				7CD5EBBB1746A83E000C1C45 /* WKBaseMac.h in Headers */,
+				4613A74425D32CCF00A5033A /* WKBlankOverlayView.h in Headers */,
 				BCBAAC73144E619E0053F82F /* WKBrowsingContextController.h in Headers */,
 				BCBAAC74144E61A50053F82F /* WKBrowsingContextControllerInternal.h in Headers */,
 				3788A05C14743C90006319E5 /* WKBrowsingContextControllerPrivate.h in Headers */,

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (272628 => 272629)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2021-02-10 01:52:17 UTC (rev 272629)
@@ -6126,6 +6126,9 @@
             scalePage(1, IntPoint());
     }
 
+#if PLATFORM(MAC)
+    m_didUpdateRenderingAfterCommittingLoad = false;
+#endif
 #if PLATFORM(IOS_FAMILY)
     m_hasReceivedVisibleContentRectsAfterDidCommitLoad = false;
     m_hasRestoredExposedContentRectAfterDidCommitLoad = false;

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (272628 => 272629)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2021-02-10 01:52:17 UTC (rev 272629)
@@ -625,6 +625,8 @@
 #if PLATFORM(MAC)
     void setTopOverhangImage(WebImage*);
     void setBottomOverhangImage(WebImage*);
+
+    void didUpdateRendering();
     
     void setUseSystemAppearance(bool);
 
@@ -2123,6 +2125,9 @@
     CompletionHandler<void(InteractionInformationAtPosition&&)> m_pendingSynchronousPositionInformationReply;
     Optional<std::pair<TransactionID, double>> m_lastLayerTreeTransactionIdAndPageScaleBeforeScalingPage;
 #endif
+#if PLATFORM(MAC)
+    bool m_didUpdateRenderingAfterCommittingLoad { false };
+#endif
 
     WebCore::Timer m_layerVolatilityTimer;
     Vector<CompletionHandler<void(bool)>> m_markLayersAsVolatileCompletionHandlers;

Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (272628 => 272629)


--- trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm	2021-02-10 01:52:17 UTC (rev 272629)
@@ -483,6 +483,7 @@
         }
 
         sendDidFirstLayerFlushIfNeeded();
+        m_webPage.didUpdateRendering();
         handleActivityStateChangeCallbacksIfNeeded();
         invalidateRenderingUpdateRunLoopObserver();
     }

Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm (272628 => 272629)


--- trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm	2021-02-10 01:29:32 UTC (rev 272628)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm	2021-02-10 01:52:17 UTC (rev 272629)
@@ -1032,6 +1032,15 @@
 {
 }
 
+void WebPage::didUpdateRendering()
+{
+    if (m_didUpdateRenderingAfterCommittingLoad)
+        return;
+
+    m_didUpdateRenderingAfterCommittingLoad = true;
+    send(Messages::WebPageProxy::DidUpdateRenderingAfterCommittingLoad());
+}
+
 #if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS_FAMILY)
 void WebPage::playbackTargetSelected(PlaybackTargetClientContextIdentifier contextId, const WebCore::MediaPlaybackTargetContext& targetContext) const
 {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to