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
{