Diff
Modified: trunk/Source/WebKit/ChangeLog (224070 => 224071)
--- trunk/Source/WebKit/ChangeLog 2017-10-26 23:50:35 UTC (rev 224070)
+++ trunk/Source/WebKit/ChangeLog 2017-10-26 23:59:59 UTC (rev 224071)
@@ -1,3 +1,21 @@
+2017-10-26 Alex Christensen <[email protected]>
+
+ Move WKWebViewConfiguration validation to WKWebView construction
+ https://bugs.webkit.org/show_bug.cgi?id=178840
+
+ Reviewed by Tim Horton.
+
+ I'm trying to remove WKWebViewConfigurationInternal methods so I can make WKWebViewConfiguration
+ a wrapper around an APIObject like all the other API objects. A small step towards making this easier
+ is to remove the unnecessary method _validate and move its logic to its one callsite. I added an API test
+ that ensures no change in behavior.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _initializeWithConfiguration:]):
+ * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
+ (-[WKWebViewConfiguration _validate]): Deleted.
+ * UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h:
+
2017-10-26 Megan Gardner <[email protected]>
Remove unneeded block selection calculation code
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (224070 => 224071)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2017-10-26 23:50:35 UTC (rev 224070)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2017-10-26 23:59:59 UTC (rev 224071)
@@ -446,6 +446,29 @@
}
#endif
+static void validate(WKWebViewConfiguration *configuration)
+{
+ if (!configuration.processPool)
+ [NSException raise:NSInvalidArgumentException format:@"configuration.processPool is nil"];
+
+ if (!configuration.preferences)
+ [NSException raise:NSInvalidArgumentException format:@"configuration.preferences is nil"];
+
+ if (!configuration.userContentController)
+ [NSException raise:NSInvalidArgumentException format:@"configuration.userContentController is nil"];
+
+ if (!configuration.websiteDataStore)
+ [NSException raise:NSInvalidArgumentException format:@"configuration.websiteDataStore is nil"];
+
+ if (!configuration._visitedLinkStore)
+ [NSException raise:NSInvalidArgumentException format:@"configuration._visitedLinkStore is nil"];
+
+#if PLATFORM(IOS)
+ if (!configuration._contentProviderRegistry)
+ [NSException raise:NSInvalidArgumentException format:@"configuration._contentProviderRegistry is nil"];
+#endif
+}
+
- (void)_initializeWithConfiguration:(WKWebViewConfiguration *)configuration
{
if (!configuration)
@@ -462,7 +485,7 @@
[_configuration setProcessPool:relatedWebViewProcessPool];
}
- [_configuration _validate];
+ validate(_configuration.get());
WebKit::WebProcessPool& processPool = *[_configuration processPool]->_processPool;
processPool.setResourceLoadStatisticsEnabled(configuration.websiteDataStore._resourceLoadStatisticsEnabled);
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm (224070 => 224071)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm 2017-10-26 23:50:35 UTC (rev 224070)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm 2017-10-26 23:59:59 UTC (rev 224071)
@@ -495,29 +495,6 @@
}
#endif
-- (void)_validate
-{
- if (!self.processPool)
- [NSException raise:NSInvalidArgumentException format:@"configuration.processPool is nil"];
-
- if (!self.preferences)
- [NSException raise:NSInvalidArgumentException format:@"configuration.preferences is nil"];
-
- if (!self.userContentController)
- [NSException raise:NSInvalidArgumentException format:@"configuration.userContentController is nil"];
-
- if (!self.websiteDataStore)
- [NSException raise:NSInvalidArgumentException format:@"configuration.websiteDataStore is nil"];
-
- if (!self._visitedLinkStore)
- [NSException raise:NSInvalidArgumentException format:@"configuration._visitedLinkStore is nil"];
-
-#if PLATFORM(IOS)
- if (!self._contentProviderRegistry)
- [NSException raise:NSInvalidArgumentException format:@"configuration._contentProviderRegistry is nil"];
-#endif
-}
-
@end
@implementation WKWebViewConfiguration (WKPrivate)
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h (224070 => 224071)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h 2017-10-26 23:50:35 UTC (rev 224070)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h 2017-10-26 23:59:59 UTC (rev 224071)
@@ -38,8 +38,6 @@
@property (nonatomic, setter=_setContentProviderRegistry:) WKWebViewContentProviderRegistry *_contentProviderRegistry;
#endif
-- (void)_validate;
-
@end
#endif
Modified: trunk/Tools/ChangeLog (224070 => 224071)
--- trunk/Tools/ChangeLog 2017-10-26 23:50:35 UTC (rev 224070)
+++ trunk/Tools/ChangeLog 2017-10-26 23:59:59 UTC (rev 224071)
@@ -1,3 +1,14 @@
+2017-10-26 Alex Christensen <[email protected]>
+
+ Move WKWebViewConfiguration validation to WKWebView construction
+ https://bugs.webkit.org/show_bug.cgi?id=178840
+
+ Reviewed by Tim Horton.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+ * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewConfiguration.mm: Added.
+ (TEST):
+
2017-10-26 Myles C. Maxfield <[email protected]>
Demonstrate a possible structure of the WebGPU API
Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (224070 => 224071)
--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2017-10-26 23:50:35 UTC (rev 224070)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2017-10-26 23:59:59 UTC (rev 224071)
@@ -244,6 +244,7 @@
5CA1DEC81F71F70100E71BD3 /* HTTPHeaderField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CA1DEC71F71F40700E71BD3 /* HTTPHeaderField.cpp */; };
5CA1DED91F74A91A00E71BD3 /* ContentRuleListNotification.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CA1DED81F74A87100E71BD3 /* ContentRuleListNotification.mm */; };
5CB18BA81F5645E300EE23C4 /* ClickAutoFillButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CB18BA71F5645B200EE23C4 /* ClickAutoFillButton.mm */; };
+ 5CB3CE391FA1697F00C3A2D6 /* WKWebViewConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CB3CE381FA1691700C3A2D6 /* WKWebViewConfiguration.mm */; };
5CB40B4E1F4B98D3007DC7B9 /* UIDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CB40B4D1F4B98BE007DC7B9 /* UIDelegate.mm */; };
5CE354D91E70DA5C00BEFE3B /* WKContentExtensionStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CE354D81E70D9C300BEFE3B /* WKContentExtensionStore.mm */; };
5E4B1D2E1D404C6100053621 /* WKScrollViewDelegateCrash.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5E4B1D2C1D404C6100053621 /* WKScrollViewDelegateCrash.mm */; };
@@ -1374,6 +1375,7 @@
5CA1DEC71F71F40700E71BD3 /* HTTPHeaderField.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPHeaderField.cpp; sourceTree = "<group>"; };
5CA1DED81F74A87100E71BD3 /* ContentRuleListNotification.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ContentRuleListNotification.mm; sourceTree = "<group>"; };
5CB18BA71F5645B200EE23C4 /* ClickAutoFillButton.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ClickAutoFillButton.mm; sourceTree = "<group>"; };
+ 5CB3CE381FA1691700C3A2D6 /* WKWebViewConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewConfiguration.mm; sourceTree = "<group>"; };
5CB40B4D1F4B98BE007DC7B9 /* UIDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = UIDelegate.mm; sourceTree = "<group>"; };
5CE354D81E70D9C300BEFE3B /* WKContentExtensionStore.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKContentExtensionStore.mm; sourceTree = "<group>"; };
5E4B1D2C1D404C6100053621 /* WKScrollViewDelegateCrash.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WKScrollViewDelegateCrash.mm; path = ../ios/WKScrollViewDelegateCrash.mm; sourceTree = "<group>"; };
@@ -2088,6 +2090,7 @@
51C683DD1EA134DB00650183 /* WKURLSchemeHandler-1.mm */,
5182C22D1F2BCB410059BA7C /* WKURLSchemeHandler-leaks.mm */,
2EFF06D61D8AF34A0004BB30 /* WKWebViewCandidateTests.mm */,
+ 5CB3CE381FA1691700C3A2D6 /* WKWebViewConfiguration.mm */,
7C417F311D19E14800B8EF53 /* WKWebViewDefaultNavigationDelegate.mm */,
46E66A8F1F0D75590026D83C /* WKWebViewDiagnosticLogging.mm */,
2DB647871F4161F70051A89E /* WKWebViewDoesNotLogDuringInitialization.mm */,
@@ -3548,6 +3551,7 @@
5182C22E1F2BCE540059BA7C /* WKURLSchemeHandler-leaks.mm in Sources */,
514958BE1F7427AC00E87BAD /* WKWebViewAutofillTests.mm in Sources */,
2EFF06D71D8AF34A0004BB30 /* WKWebViewCandidateTests.mm in Sources */,
+ 5CB3CE391FA1697F00C3A2D6 /* WKWebViewConfiguration.mm in Sources */,
A14FC5851B89739100D107EB /* WKWebViewConfigurationExtras.mm in Sources */,
7C417F331D19E14800B8EF53 /* WKWebViewDefaultNavigationDelegate.mm in Sources */,
46E66A901F0D75590026D83C /* WKWebViewDiagnosticLogging.mm in Sources */,
Added: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewConfiguration.mm (0 => 224071)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewConfiguration.mm (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewConfiguration.mm 2017-10-26 23:59:59 UTC (rev 224071)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2017 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 WK_API_ENABLED
+
+#import "PlatformUtilities.h"
+#import <WebKit/WKWebView.h>
+#import <WebKit/WKWebViewConfigurationPrivate.h>
+#import <wtf/Function.h>
+#import <wtf/RetainPtr.h>
+
+TEST(WebKit, InvalidConfiguration)
+{
+ auto shouldThrowExceptionWhenUsed = [](Function<void(WKWebViewConfiguration *)>&& modifier) {
+ @try {
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ modifier(configuration.get());
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
+ EXPECT_TRUE(false);
+ } @catch (NSException *exception) {
+ EXPECT_WK_STREQ(NSInvalidArgumentException, exception.name);
+ }
+ };
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnonnull"
+ shouldThrowExceptionWhenUsed([](WKWebViewConfiguration *configuration) {
+ [configuration setProcessPool:nil];
+ });
+ shouldThrowExceptionWhenUsed([](WKWebViewConfiguration *configuration) {
+ [configuration setPreferences:nil];
+ });
+ shouldThrowExceptionWhenUsed([](WKWebViewConfiguration *configuration) {
+ [configuration setUserContentController:nil];
+ });
+ shouldThrowExceptionWhenUsed([](WKWebViewConfiguration *configuration) {
+ [configuration setWebsiteDataStore:nil];
+ });
+ shouldThrowExceptionWhenUsed([](WKWebViewConfiguration *configuration) {
+ [configuration _setVisitedLinkStore:nil];
+ });
+#pragma clang diagnostic pop
+}
+
+#endif // WK_API_ENABLED