Diff
Modified: trunk/Source/WebKit/ChangeLog (221054 => 221055)
--- trunk/Source/WebKit/ChangeLog 2017-08-22 23:11:05 UTC (rev 221054)
+++ trunk/Source/WebKit/ChangeLog 2017-08-22 23:15:05 UTC (rev 221055)
@@ -1,3 +1,22 @@
+2017-08-22 Alex Christensen <achristen...@webkit.org>
+
+ Add UIDelegatePrivate SPI corresponding to WKPageUIClient.showPage
+ https://bugs.webkit.org/show_bug.cgi?id=175797
+ <rdar://problem/29270035>
+
+ Reviewed by Geoffrey Garen.
+
+ * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
+ * UIProcess/Cocoa/UIDelegate.h:
+ * UIProcess/Cocoa/UIDelegate.mm:
+ (WebKit::UIDelegate::setDelegate):
+ (WebKit::UIDelegate::UIClient::showPage):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::registerURLSchemeHandler):
+ window.open, createWebViewWithConfiguration, and WKURLSchemeHandlers all used together
+ make it so that URLSchemeHandlers are added to WebPages that already have them. The
+ assertions are no longer valid.
+
2017-08-22 Matt Lewis <jlew...@apple.com>
Unreviewed, rolling out r221026.
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h (221054 => 221055)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h 2017-08-22 23:11:05 UTC (rev 221054)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h 2017-08-22 23:15:05 UTC (rev 221055)
@@ -119,6 +119,7 @@
#endif
- (void)_webView:(WKWebView *)webView didChangeSafeAreaShouldAffectObscuredInsets:(BOOL)safeAreaShouldAffectObscuredInsets WK_API_AVAILABLE(ios(WK_IOS_TBA));
#else
+- (void)_webViewShow:(WKWebView *)webView WK_API_AVAILABLE(macosx(WK_MAC_TBA));
- (NSMenu *)_webView:(WKWebView *)webView contextMenu:(NSMenu *)menu forElement:(_WKContextMenuElementInfo *)element WK_API_AVAILABLE(macosx(10.12));
- (NSMenu *)_webView:(WKWebView *)webView contextMenu:(NSMenu *)menu forElement:(_WKContextMenuElementInfo *)element userInfo:(id <NSSecureCoding>)userInfo WK_API_AVAILABLE(macosx(10.12));
#endif
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h (221054 => 221055)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h 2017-08-22 23:11:05 UTC (rev 221054)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h 2017-08-22 23:15:05 UTC (rev 221055)
@@ -79,10 +79,10 @@
private:
// API::UIClient
- RefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, WebKit::NavigationActionData&&) override;
- void createNewPageAsync(WebKit::WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, WebKit::NavigationActionData&&, WTF::Function<void(RefPtr<WebKit::WebPageProxy>&&)>&& completionHandler) final;
+ RefPtr<WebPageProxy> createNewPage(WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, NavigationActionData&&) final;
+ void createNewPageAsync(WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, NavigationActionData&&, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler) final;
bool canCreateNewPageAsync() final;
- RefPtr<WebKit::WebPageProxy> createNewPageCommon(WebKit::WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, WebKit::NavigationActionData&&, WTF::Function<void(RefPtr<WebKit::WebPageProxy>&&)>&& completionHandler);
+ RefPtr<WebPageProxy> createNewPageCommon(WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, NavigationActionData&&, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler);
void close(WebKit::WebPageProxy*) override;
void fullscreenMayReturnToInline(WebKit::WebPageProxy*) override;
@@ -96,6 +96,7 @@
void exceededDatabaseQuota(WebPageProxy*, WebFrameProxy*, API::SecurityOrigin*, const WTF::String& databaseName, const WTF::String& displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentUsage, unsigned long long expectedUsage, Function<void (unsigned long long)>&& completionHandler) override;
void reachedApplicationCacheOriginQuota(WebPageProxy*, const WebCore::SecurityOrigin&, uint64_t currentQuota, uint64_t totalBytesNeeded, Function<void (unsigned long long)>&& completionHandler) override;
#if PLATFORM(MAC)
+ void showPage(WebPageProxy*) final;
bool runOpenPanel(WebPageProxy*, WebFrameProxy*, const WebCore::SecurityOriginData&, API::OpenPanelParameters*, WebOpenPanelResultListenerProxy*) override;
#endif
bool decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, API::SecurityOrigin&, API::SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy&) override;
@@ -131,6 +132,7 @@
struct {
bool webViewCreateWebViewWithConfigurationForNavigationActionWindowFeatures : 1;
bool webViewCreateWebViewWithConfigurationForNavigationActionWindowFeaturesAsync : 1;
+ bool webViewShow : 1;
bool webViewRunJavaScriptAlertPanelWithMessageInitiatedByFrameCompletionHandler : 1;
bool webViewRunJavaScriptConfirmPanelWithMessageInitiatedByFrameCompletionHandler : 1;
bool webViewRunJavaScriptTextInputPanelWithPromptDefaultTextInitiatedByFrameCompletionHandler : 1;
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (221054 => 221055)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2017-08-22 23:11:05 UTC (rev 221054)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2017-08-22 23:15:05 UTC (rev 221055)
@@ -100,6 +100,7 @@
m_delegateMethods.webViewRunBeforeUnloadConfirmPanelWithMessageInitiatedByFrameCompletionHandler = [delegate respondsToSelector:@selector(_webView:runBeforeUnloadConfirmPanelWithMessage:initiatedByFrame:completionHandler:)];
#if PLATFORM(MAC)
+ m_delegateMethods.webViewShow = [delegate respondsToSelector:@selector(_webViewShow:)];
m_delegateMethods.webViewRunOpenPanelWithParametersInitiatedByFrameCompletionHandler = [delegate respondsToSelector:@selector(webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:)];
#endif
@@ -371,6 +372,18 @@
}
#if PLATFORM(MAC)
+void UIDelegate::UIClient::showPage(WebPageProxy*)
+{
+ if (!m_uiDelegate.m_delegateMethods.webViewShow)
+ return;
+
+ auto delegate = m_uiDelegate.m_delegate.get();
+ if (!delegate)
+ return;
+
+ [(id <WKUIDelegatePrivate>)delegate _webViewShow:m_uiDelegate.m_webView];
+}
+
bool UIDelegate::UIClient::runOpenPanel(WebPageProxy*, WebFrameProxy* webFrameProxy, const WebCore::SecurityOriginData& securityOriginData, API::OpenPanelParameters* openPanelParameters, WebOpenPanelResultListenerProxy* listener)
{
if (!m_uiDelegate.m_delegateMethods.webViewRunOpenPanelWithParametersInitiatedByFrameCompletionHandler)
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (221054 => 221055)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2017-08-22 23:11:05 UTC (rev 221054)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2017-08-22 23:15:05 UTC (rev 221055)
@@ -5932,10 +5932,7 @@
void WebPage::registerURLSchemeHandler(uint64_t handlerIdentifier, const String& scheme)
{
auto schemeResult = m_schemeToURLSchemeHandlerProxyMap.add(scheme, WebURLSchemeHandlerProxy::create(*this, handlerIdentifier));
- ASSERT(schemeResult.isNewEntry);
-
- auto identifierResult = m_identifierToURLSchemeHandlerProxyMap.add(handlerIdentifier, schemeResult.iterator->value.get());
- ASSERT_UNUSED(identifierResult, identifierResult.isNewEntry);
+ m_identifierToURLSchemeHandlerProxyMap.add(handlerIdentifier, schemeResult.iterator->value.get());
}
void WebPage::urlSchemeTaskDidPerformRedirection(uint64_t handlerIdentifier, uint64_t taskIdentifier, ResourceResponse&& response, ResourceRequest&& request)
Modified: trunk/Tools/ChangeLog (221054 => 221055)
--- trunk/Tools/ChangeLog 2017-08-22 23:11:05 UTC (rev 221054)
+++ trunk/Tools/ChangeLog 2017-08-22 23:15:05 UTC (rev 221055)
@@ -1,3 +1,19 @@
+2017-08-22 Alex Christensen <achristen...@webkit.org>
+
+ Add UIDelegatePrivate SPI corresponding to WKPageUIClient.showPage
+ https://bugs.webkit.org/show_bug.cgi?id=175797
+ <rdar://problem/29270035>
+
+ Reviewed by Geoffrey Garen.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+ * TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm: Added.
+ (-[UITestDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
+ (-[UITestDelegate _showPage:]):
+ (-[UITestDelegate webView:startURLSchemeTask:]):
+ (-[UITestDelegate webView:stopURLSchemeTask:]):
+ (TEST):
+
2017-08-22 Devin Rousso <web...@devinrousso.com>
Unreviewed, change my IRC nick.
Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (221054 => 221055)
--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2017-08-22 23:11:05 UTC (rev 221054)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2017-08-22 23:15:05 UTC (rev 221055)
@@ -232,6 +232,7 @@
5C9E59411D3EB5AC00E3C62E /* ApplicationCache.db in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E593E1D3EB1DE00E3C62E /* ApplicationCache.db */; };
5C9E59421D3EB5AC00E3C62E /* ApplicationCache.db-shm in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */; };
5C9E59431D3EB5AC00E3C62E /* ApplicationCache.db-wal in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E59401D3EB1DE00E3C62E /* ApplicationCache.db-wal */; };
+ 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 */; };
631EFFF61E7B5E8D00D2EBB8 /* Geolocation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 631EFFF51E7B5E8D00D2EBB8 /* Geolocation.mm */; };
@@ -1303,6 +1304,7 @@
5C9E593E1D3EB1DE00E3C62E /* ApplicationCache.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = ApplicationCache.db; sourceTree = "<group>"; };
5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ApplicationCache.db-shm"; sourceTree = "<group>"; };
5C9E59401D3EB1DE00E3C62E /* ApplicationCache.db-wal */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ApplicationCache.db-wal"; 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>"; };
631EFFF51E7B5E8D00D2EBB8 /* Geolocation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Geolocation.mm; sourceTree = "<group>"; };
@@ -1941,6 +1943,7 @@
2D9A53AE1B31FA8D0074D5AA /* ShrinkToFit.mm */,
2DFF7B6C1DA487AF00814614 /* SnapshotStore.mm */,
515BE1701D428BD100DD7C68 /* StoreBlobThenDelete.mm */,
+ 5CB40B4D1F4B98BE007DC7B9 /* UIDelegate.mm */,
7CC3E1FA197E234100BE6252 /* UserContentController.mm */,
7C882E031C80C624006BF731 /* UserContentWorld.mm */,
7C882E041C80C624006BF731 /* UserContentWorldPlugIn.mm */,
@@ -3213,6 +3216,7 @@
51E6A8941D2F1C0A00C004B6 /* LocalStorageClear.mm in Sources */,
46C519DA1D355AB200DAA51A /* LocalStorageNullEntries.mm in Sources */,
7A6A2C701DCCFA8C00C0D085 /* LocalStorageQuirkTest.mm in Sources */,
+ 076E507F1F4513D6006E9F5A /* Logging.cpp in Sources */,
CDA315981ED53651009F60D3 /* MediaPlaybackSleepAssertion.mm in Sources */,
CDC9442E1EF1FC080059C3C4 /* MediaStreamTrackDetached.mm in Sources */,
7CCE7EB21A411A5100447C4C /* MemoryCacheAddImageToCacheIOS.mm in Sources */,
@@ -3257,7 +3261,6 @@
A1EC11881F42541200D0146E /* PreviewLoader.cpp in Sources */,
7CCE7F0C1A411AE600447C4C /* PrivateBrowsingPushStateNoHistoryCallback.cpp in Sources */,
4647B1261EBA3B850041D7EF /* ProcessDidTerminate.cpp in Sources */,
- 076E507F1F4513D6006E9F5A /* Logging.cpp in Sources */,
7C83E0C11D0A652F00FEBCF3 /* ProvisionalURLNotChange.mm in Sources */,
7CCE7EC81A411A7E00447C4C /* PublicSuffix.mm in Sources */,
7C83E0C21D0A653500FEBCF3 /* QuickLook.mm in Sources */,
@@ -3312,6 +3315,7 @@
CE3524F91B1441C40028A7C5 /* TextFieldDidBeginAndEndEditing.cpp in Sources */,
7CCE7EDD1A411A9200447C4C /* TimeRanges.cpp in Sources */,
7CCE7ED31A411A7E00447C4C /* TypingStyleCrash.mm in Sources */,
+ 5CB40B4E1F4B98D3007DC7B9 /* UIDelegate.mm in Sources */,
F46849BE1EEF58E400B937FE /* UIPasteboardTests.mm in Sources */,
7CCE7EDE1A411A9200447C4C /* URL.cpp in Sources */,
7CCE7EB01A411A4400447C4C /* URLExtras.mm in Sources */,
Added: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm (0 => 221055)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UIDelegate.mm 2017-08-22 23:15:05 UTC (rev 221055)
@@ -0,0 +1,92 @@
+/*
+ * 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
+
+#if PLATFORM(MAC)
+
+#import "TestWKWebView.h"
+#import "Utilities.h"
+#import <WebKit/WKUIDelegatePrivate.h>
+#import <WebKit/WKWebView.h>
+#import <wtf/RetainPtr.h>
+
+@class UITestDelegate;
+
+static RetainPtr<WKWebView> webViewFromDelegateCallback;
+static RetainPtr<WKWebView> createdWebView;
+static RetainPtr<UITestDelegate> delegate;
+static bool done;
+
+@interface UITestDelegate : NSObject <WKUIDelegatePrivate, WKURLSchemeHandler>
+@end
+
+@implementation UITestDelegate
+
+- (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
+{
+ createdWebView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration]);
+ [createdWebView setUIDelegate:delegate.get()];
+ return createdWebView.get();
+}
+
+- (void)_webViewShow:(WKWebView *)webView
+{
+ webViewFromDelegateCallback = webView;
+ done = true;
+}
+
+- (void)webView:(WKWebView *)webView startURLSchemeTask:(id <WKURLSchemeTask>)urlSchemeTask
+{
+ NSString *data = ""
+ [urlSchemeTask didReceiveResponse:[[[NSURLResponse alloc] initWithURL:urlSchemeTask.request.URL MIMEType:@"text/html" expectedContentLength:data.length textEncodingName:nil] autorelease]];
+ [urlSchemeTask didReceiveData:[data dataUsingEncoding:NSUTF8StringEncoding]];
+ [urlSchemeTask didFinish];
+}
+
+- (void)webView:(WKWebView *)webView stopURLSchemeTask:(id <WKURLSchemeTask>)urlSchemeTask
+{
+}
+
+@end
+
+TEST(WebKit2, ShowPage)
+{
+ delegate = adoptNS([[UITestDelegate alloc] init]);
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ [configuration setURLSchemeHandler:delegate.get() forURLScheme:@"test"];
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration.get()]);
+ [webView setUIDelegate:delegate.get()];
+ [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"test:///first"]]];
+ TestWebKitAPI::Util::run(&done);
+
+ ASSERT_EQ(webViewFromDelegateCallback, createdWebView);
+}
+
+#endif // PLATFORM(MAC)
+
+#endif // WK_API_ENABLED