- Revision
- 248839
- Author
- bshaf...@apple.com
- Date
- 2019-08-18 23:03:30 -0700 (Sun, 18 Aug 2019)
Log Message
Cherry-pick r248776. rdar://problem/54455007
REGRESSION (r248436): WKWebView doesn’t respect isOpaque setting in NIB.
https://bugs.webkit.org/show_bug.cgi?id=200802
rdar://problem/54357818
Reviewed by Tim Horton.
Source/WebKit:
Tests: WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _initializeWithConfiguration:]): Call _setOpaqueInternal:NO instead of self.opaque = NO.
(-[WKWebView _setOpaqueInternal:]): Added. Moved code from setOpaque:.
(-[WKWebView setOpaque:]): Call _setOpaqueInternal:.
Tools:
* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added WKWebViewOpaque.mm.
* TestWebKitAPI/Tests/ios/WKWebViewOpaque.mm: Added.
(-[OpaqueTestWKWebView isOpaque]): Added.
(-[NonOpaqueTestWKWebView isOpaque]): Added.
(isOpaque): Added.
(TEST): Added WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248776 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Modified Paths
Added Paths
Diff
Modified: branches/safari-608-branch/Source/WebKit/ChangeLog (248838 => 248839)
--- branches/safari-608-branch/Source/WebKit/ChangeLog 2019-08-19 06:03:27 UTC (rev 248838)
+++ branches/safari-608-branch/Source/WebKit/ChangeLog 2019-08-19 06:03:30 UTC (rev 248839)
@@ -1,5 +1,57 @@
2019-08-18 Babak Shafiei <bshaf...@apple.com>
+ Cherry-pick r248776. rdar://problem/54455007
+
+ REGRESSION (r248436): WKWebView doesn’t respect isOpaque setting in NIB.
+ https://bugs.webkit.org/show_bug.cgi?id=200802
+ rdar://problem/54357818
+
+ Reviewed by Tim Horton.
+
+ Source/WebKit:
+
+ Tests: WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
+ WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
+ WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _initializeWithConfiguration:]): Call _setOpaqueInternal:NO instead of self.opaque = NO.
+ (-[WKWebView _setOpaqueInternal:]): Added. Moved code from setOpaque:.
+ (-[WKWebView setOpaque:]): Call _setOpaqueInternal:.
+
+ Tools:
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added WKWebViewOpaque.mm.
+ * TestWebKitAPI/Tests/ios/WKWebViewOpaque.mm: Added.
+ (-[OpaqueTestWKWebView isOpaque]): Added.
+ (-[NonOpaqueTestWKWebView isOpaque]): Added.
+ (isOpaque): Added.
+ (TEST): Added WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
+ WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
+ WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248776 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2019-08-16 Timothy Hatcher <timo...@apple.com>
+
+ REGRESSION (r248436): WKWebView doesn’t respect isOpaque setting in NIB.
+ https://bugs.webkit.org/show_bug.cgi?id=200802
+ rdar://problem/54357818
+
+ Reviewed by Tim Horton.
+
+ Tests: WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
+ WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
+ WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _initializeWithConfiguration:]): Call _setOpaqueInternal:NO instead of self.opaque = NO.
+ (-[WKWebView _setOpaqueInternal:]): Added. Moved code from setOpaque:.
+ (-[WKWebView setOpaque:]): Call _setOpaqueInternal:.
+
+2019-08-18 Babak Shafiei <bshaf...@apple.com>
+
Cherry-pick r248733. rdar://problem/54454989
Occasional hang under -[UIKeyboardTaskQueue lockWhenReadyForMainThread] when long-pressing non-editable text
Modified: branches/safari-608-branch/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (248838 => 248839)
--- branches/safari-608-branch/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2019-08-19 06:03:27 UTC (rev 248838)
+++ branches/safari-608-branch/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2019-08-19 06:03:30 UTC (rev 248839)
@@ -712,7 +712,7 @@
[self _dispatchSetDeviceOrientation:deviceOrientation()];
if (!self.opaque || !pageConfiguration->drawsBackground())
- self.opaque = NO;
+ [self _setOpaqueInternal:NO];
[_contentView layer].anchorPoint = CGPointZero;
[_contentView setFrame:bounds];
@@ -2577,16 +2577,12 @@
_page->webViewDidMoveToWindow();
}
-- (void)setOpaque:(BOOL)opaque
+- (void)_setOpaqueInternal:(BOOL)opaque
{
- BOOL oldOpaque = self.opaque;
+ [super setOpaque:opaque];
- [super setOpaque:opaque];
[_contentView setOpaque:opaque];
- if (oldOpaque == opaque)
- return;
-
if (!_page)
return;
@@ -2594,9 +2590,18 @@
if (!opaque)
backgroundColor = WebCore::Color(WebCore::Color::transparent);
_page->setBackgroundColor(backgroundColor);
+
[self _updateScrollViewBackground];
}
+- (void)setOpaque:(BOOL)opaque
+{
+ if (opaque == self.opaque)
+ return;
+
+ [self _setOpaqueInternal:opaque];
+}
+
- (void)setBackgroundColor:(UIColor *)backgroundColor
{
[super setBackgroundColor:backgroundColor];
Modified: branches/safari-608-branch/Tools/ChangeLog (248838 => 248839)
--- branches/safari-608-branch/Tools/ChangeLog 2019-08-19 06:03:27 UTC (rev 248838)
+++ branches/safari-608-branch/Tools/ChangeLog 2019-08-19 06:03:30 UTC (rev 248839)
@@ -1,3 +1,55 @@
+2019-08-18 Babak Shafiei <bshaf...@apple.com>
+
+ Cherry-pick r248776. rdar://problem/54455007
+
+ REGRESSION (r248436): WKWebView doesn’t respect isOpaque setting in NIB.
+ https://bugs.webkit.org/show_bug.cgi?id=200802
+ rdar://problem/54357818
+
+ Reviewed by Tim Horton.
+
+ Source/WebKit:
+
+ Tests: WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
+ WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
+ WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _initializeWithConfiguration:]): Call _setOpaqueInternal:NO instead of self.opaque = NO.
+ (-[WKWebView _setOpaqueInternal:]): Added. Moved code from setOpaque:.
+ (-[WKWebView setOpaque:]): Call _setOpaqueInternal:.
+
+ Tools:
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added WKWebViewOpaque.mm.
+ * TestWebKitAPI/Tests/ios/WKWebViewOpaque.mm: Added.
+ (-[OpaqueTestWKWebView isOpaque]): Added.
+ (-[NonOpaqueTestWKWebView isOpaque]): Added.
+ (isOpaque): Added.
+ (TEST): Added WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
+ WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
+ WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248776 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2019-08-16 Timothy Hatcher <timo...@apple.com>
+
+ REGRESSION (r248436): WKWebView doesn’t respect isOpaque setting in NIB.
+ https://bugs.webkit.org/show_bug.cgi?id=200802
+ rdar://problem/54357818
+
+ Reviewed by Tim Horton.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added WKWebViewOpaque.mm.
+ * TestWebKitAPI/Tests/ios/WKWebViewOpaque.mm: Added.
+ (-[OpaqueTestWKWebView isOpaque]): Added.
+ (-[NonOpaqueTestWKWebView isOpaque]): Added.
+ (isOpaque): Added.
+ (TEST): Added WKWebView.IsOpaqueDefault, WKWebView.SetOpaqueYes, WKWebView.SetOpaqueNo, WKWebView.IsOpaqueYesSubclassOverridden,
+ WKWebView.IsOpaqueNoSubclassOverridden, WKWebView.IsOpaqueYesDecodedFromArchive, WKWebView.IsOpaqueNoDecodedFromArchive,
+ WKWebView.IsOpaqueDrawsBackgroundYesConfiguration, WKWebView.IsOpaqueDrawsBackgroundNoConfiguration.
+
2019-08-15 Alan Coon <alanc...@apple.com>
Cherry-pick r248717. rdar://problem/54360854
Modified: branches/safari-608-branch/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (248838 => 248839)
--- branches/safari-608-branch/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2019-08-19 06:03:27 UTC (rev 248838)
+++ branches/safari-608-branch/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2019-08-19 06:03:30 UTC (rev 248839)
@@ -89,6 +89,7 @@
1C734B5320788C4800F430EA /* SystemColors.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C734B5220788C4800F430EA /* SystemColors.mm */; };
1C7FEB20207C0F2E00D23278 /* BackgroundColor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C7FEB1F207C0F2D00D23278 /* BackgroundColor.mm */; };
1C9EB8411E380DA1005C6442 /* ComplexTextController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C9EB8401E380DA1005C6442 /* ComplexTextController.cpp */; };
+ 1CACADA1230620AE0007D54C /* WKWebViewOpaque.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1CACADA0230620AD0007D54C /* WKWebViewOpaque.mm */; };
1CAD1F861E5CE7DA00AF2C2C /* FontCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CAD1F851E5CE7DA00AF2C2C /* FontCache.cpp */; };
1CF59AE221E68925006E37EC /* ForceLightAppearanceInBundle_Bundle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1CF59AE021E68925006E37EC /* ForceLightAppearanceInBundle_Bundle.mm */; };
1CF59AE321E68932006E37EC /* ForceLightAppearanceInBundle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1CF59ADF21E68925006E37EC /* ForceLightAppearanceInBundle.mm */; };
@@ -1487,6 +1488,7 @@
1C734B5220788C4800F430EA /* SystemColors.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SystemColors.mm; sourceTree = "<group>"; };
1C7FEB1F207C0F2D00D23278 /* BackgroundColor.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BackgroundColor.mm; sourceTree = "<group>"; };
1C9EB8401E380DA1005C6442 /* ComplexTextController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComplexTextController.cpp; sourceTree = "<group>"; };
+ 1CACADA0230620AD0007D54C /* WKWebViewOpaque.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewOpaque.mm; sourceTree = "<group>"; };
1CAD1F851E5CE7DA00AF2C2C /* FontCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontCache.cpp; sourceTree = "<group>"; };
1CB9BC371A67482300FE5678 /* WeakPtr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeakPtr.cpp; sourceTree = "<group>"; };
1CF0D3781BBF2F3D00B4EF54 /* WKRetainPtr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKRetainPtr.cpp; sourceTree = "<group>"; };
@@ -3020,6 +3022,7 @@
F46849BD1EEF58E400B937FE /* UIPasteboardTests.mm */,
F43E3BBE20DADA1E00A4E7ED /* WKScrollViewTests.mm */,
514958BD1F7427AC00E87BAD /* WKWebViewAutofillTests.mm */,
+ 1CACADA0230620AD0007D54C /* WKWebViewOpaque.mm */,
);
path = ios;
sourceTree = "<group>";
@@ -4732,6 +4735,7 @@
F4106C6921ACBF84004B89A1 /* WKWebViewFirstResponderTests.mm in Sources */,
D34E08761E4E42E1005FF14A /* WKWebViewGetContents.mm in Sources */,
F4FA91811E61849B007B8C1D /* WKWebViewMacEditingTests.mm in Sources */,
+ 1CACADA1230620AE0007D54C /* WKWebViewOpaque.mm in Sources */,
37A9DBE9213B4C9300D261A2 /* WKWebViewServerTrustKVC.mm in Sources */,
93F56DA91E5F919D003EDE84 /* WKWebViewSnapshot.mm in Sources */,
CD7F89DC22A86CDA00D683AE /* WKWebViewSuspendAllMediaPlayback.mm in Sources */,
Added: branches/safari-608-branch/Tools/TestWebKitAPI/Tests/ios/WKWebViewOpaque.mm (0 => 248839)
--- branches/safari-608-branch/Tools/TestWebKitAPI/Tests/ios/WKWebViewOpaque.mm (rev 0)
+++ branches/safari-608-branch/Tools/TestWebKitAPI/Tests/ios/WKWebViewOpaque.mm 2019-08-19 06:03:30 UTC (rev 248839)
@@ -0,0 +1,159 @@
+/*
+ * 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"
+
+#if PLATFORM(IOS_FAMILY)
+
+#import "Test.h"
+#import "TestWKWebView.h"
+#import <WebKit/WKWebViewConfigurationPrivate.h>
+#import <pal/spi/cocoa/NSKeyedArchiverSPI.h>
+
+@interface OpaqueTestWKWebView : TestWKWebView
+@end
+
+@implementation OpaqueTestWKWebView
+
+- (BOOL)isOpaque
+{
+ return YES;
+}
+
+@end
+
+@interface NonOpaqueTestWKWebView : TestWKWebView
+@end
+
+@implementation NonOpaqueTestWKWebView
+
+- (BOOL)isOpaque
+{
+ return NO;
+}
+
+@end
+
+static void isOpaque(TestWKWebView *webView, BOOL opaque)
+{
+ EXPECT_EQ([webView isOpaque], opaque);
+ EXPECT_EQ([[webView wkContentView] isOpaque], opaque);
+
+ CGFloat backgroundColorAlpha = 0;
+ [[webView scrollView].backgroundColor getRed:nullptr green:nullptr blue:nullptr alpha:&backgroundColorAlpha];
+
+ EXPECT_EQ(backgroundColorAlpha, opaque ? 1 : 0);
+}
+
+TEST(WKWebView, IsOpaqueDefault)
+{
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSZeroRect]);
+
+ isOpaque(webView.get(), YES);
+}
+
+TEST(WKWebView, SetOpaqueYes)
+{
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSZeroRect]);
+
+ [webView setOpaque:YES];
+
+ isOpaque(webView.get(), YES);
+}
+
+TEST(WKWebView, SetOpaqueNo)
+{
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSZeroRect]);
+
+ [webView setOpaque:NO];
+
+ isOpaque(webView.get(), NO);
+}
+
+TEST(WKWebView, IsOpaqueYesSubclassOverridden)
+{
+ auto webView = adoptNS([[OpaqueTestWKWebView alloc] initWithFrame:NSZeroRect]);
+
+ isOpaque(webView.get(), YES);
+}
+
+TEST(WKWebView, IsOpaqueNoSubclassOverridden)
+{
+ auto webView = adoptNS([[NonOpaqueTestWKWebView alloc] initWithFrame:NSZeroRect]);
+
+ isOpaque(webView.get(), NO);
+}
+
+TEST(WKWebView, IsOpaqueYesDecodedFromArchive)
+{
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSZeroRect]);
+
+ [webView setOpaque:YES];
+
+ auto data = ""
+ TestWKWebView *decodedWebView = insecurelyUnarchiveObjectFromData(data);
+
+ isOpaque(decodedWebView, YES);
+}
+
+TEST(WKWebView, IsOpaqueNoDecodedFromArchive)
+{
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSZeroRect]);
+
+ [webView setOpaque:NO];
+
+ auto data = ""
+ TestWKWebView *decodedWebView = insecurelyUnarchiveObjectFromData(data);
+
+ isOpaque(decodedWebView, NO);
+}
+
+TEST(WKWebView, IsOpaqueDrawsBackgroundYesConfiguration)
+{
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+
+ [configuration _setDrawsBackground:YES];
+
+ EXPECT_EQ([configuration _drawsBackground], YES);
+
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSZeroRect configuration:configuration.get()]);
+
+ isOpaque(webView.get(), YES);
+}
+
+TEST(WKWebView, IsOpaqueDrawsBackgroundNoConfiguration)
+{
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+
+ [configuration _setDrawsBackground:NO];
+
+ EXPECT_EQ([configuration _drawsBackground], NO);
+
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSZeroRect configuration:configuration.get()]);
+
+ isOpaque(webView.get(), NO);
+}
+
+#endif