Diff
Modified: trunk/Source/WebKit/ChangeLog (221786 => 221787)
--- trunk/Source/WebKit/ChangeLog 2017-09-08 16:03:53 UTC (rev 221786)
+++ trunk/Source/WebKit/ChangeLog 2017-09-08 16:19:23 UTC (rev 221787)
@@ -1,3 +1,15 @@
+2017-09-08 Ryan Haddad <[email protected]>
+
+ Unreviewed, rolling out r221771.
+
+ This change caused two API tests to crash.
+
+ Reverted changeset:
+
+ "Clean up API::UIClient"
+ https://bugs.webkit.org/show_bug.cgi?id=176568
+ http://trac.webkit.org/changeset/221771
+
2017-09-07 Carlos Garcia Campos <[email protected]>
[GTK][WPE] UI process crash in WebBackForwardList::restoreFromState
Modified: trunk/Source/WebKit/UIProcess/API/APIUIClient.h (221786 => 221787)
--- trunk/Source/WebKit/UIProcess/API/APIUIClient.h 2017-09-08 16:03:53 UTC (rev 221786)
+++ trunk/Source/WebKit/UIProcess/API/APIUIClient.h 2017-09-08 16:19:23 UTC (rev 221787)
@@ -71,7 +71,9 @@
public:
virtual ~UIClient() { }
- virtual void createNewPage(WebKit::WebPageProxy&, Ref<FrameInfo>&&, WebCore::ResourceRequest&&, WebCore::WindowFeatures&&, WebKit::NavigationActionData&&, WTF::Function<void(RefPtr<WebKit::WebPageProxy>&&)>&&) { }
+ virtual RefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, WebKit::NavigationActionData&&) { return nullptr; }
+ virtual void createNewPageAsync(WebKit::WebPageProxy*, FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, WebKit::NavigationActionData&&, WTF::Function<void(RefPtr<WebKit::WebPageProxy>&&)>&& completionHandler) { }
+ virtual bool canCreateNewPageAsync() { return false; }
virtual void showPage(WebKit::WebPageProxy*) { }
virtual void fullscreenMayReturnToInline(WebKit::WebPageProxy*) { }
virtual void didEnterFullscreen(WebKit::WebPageProxy*) { }
Modified: trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp (221786 => 221787)
--- trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp 2017-09-08 16:03:53 UTC (rev 221786)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp 2017-09-08 16:19:23 UTC (rev 221787)
@@ -1565,19 +1565,19 @@
}
private:
- void createNewPage(WebPageProxy& page, Ref<API::FrameInfo>&& sourceFrameInfo, WebCore::ResourceRequest&& resourceRequest, WebCore::WindowFeatures&& windowFeatures, NavigationActionData&& navigationActionData, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler) final
+ RefPtr<WebPageProxy> createNewPage(WebPageProxy* page, API::FrameInfo& sourceFrameInfo, ResourceRequest&& resourceRequest, const WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData) final
{
if (m_client.createNewPage) {
- auto configuration = page.configuration().copy();
- configuration->setRelatedPage(&page);
+ auto configuration = page->configuration().copy();
+ configuration->setRelatedPage(page);
- auto userInitiatedActivity = page.process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier);
- bool shouldOpenAppLinks = !hostsAreEqual(sourceFrameInfo->request().url(), resourceRequest.url());
- auto apiNavigationAction = API::NavigationAction::create(WTFMove(navigationActionData), sourceFrameInfo.ptr(), nullptr, WTFMove(resourceRequest), WebCore::URL(), shouldOpenAppLinks, WTFMove(userInitiatedActivity));
+ auto userInitiatedActivity = page->process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier);
+ bool shouldOpenAppLinks = !hostsAreEqual(sourceFrameInfo.request().url(), resourceRequest.url());
+ auto apiNavigationAction = API::NavigationAction::create(WTFMove(navigationActionData), &sourceFrameInfo, nullptr, WTFMove(resourceRequest), WebCore::URL(), shouldOpenAppLinks, WTFMove(userInitiatedActivity));
auto apiWindowFeatures = API::WindowFeatures::create(windowFeatures);
- return completionHandler(adoptRef(toImpl(m_client.createNewPage(toAPI(&page), toAPI(configuration.ptr()), toAPI(apiNavigationAction.ptr()), toAPI(apiWindowFeatures.ptr()), m_client.base.clientInfo))));
+ return adoptRef(toImpl(m_client.createNewPage(toAPI(page), toAPI(configuration.ptr()), toAPI(apiNavigationAction.ptr()), toAPI(apiWindowFeatures.ptr()), m_client.base.clientInfo)));
}
if (m_client.createNewPage_deprecatedForUseWithV1 || m_client.createNewPage_deprecatedForUseWithV0) {
@@ -1602,14 +1602,14 @@
if (m_client.createNewPage_deprecatedForUseWithV1) {
Ref<API::URLRequest> request = API::URLRequest::create(resourceRequest);
- return completionHandler(adoptRef(toImpl(m_client.createNewPage_deprecatedForUseWithV1(toAPI(&page), toAPI(request.ptr()), toAPI(featuresMap.ptr()), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), m_client.base.clientInfo))));
+ return adoptRef(toImpl(m_client.createNewPage_deprecatedForUseWithV1(toAPI(page), toAPI(request.ptr()), toAPI(featuresMap.ptr()), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), m_client.base.clientInfo)));
}
ASSERT(m_client.createNewPage_deprecatedForUseWithV0);
- return completionHandler(adoptRef(toImpl(m_client.createNewPage_deprecatedForUseWithV0(toAPI(&page), toAPI(featuresMap.ptr()), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), m_client.base.clientInfo))));
+ return adoptRef(toImpl(m_client.createNewPage_deprecatedForUseWithV0(toAPI(page), toAPI(featuresMap.ptr()), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), m_client.base.clientInfo)));
}
- completionHandler(nullptr);
+ return nullptr;
}
void showPage(WebPageProxy* page) final
Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp (221786 => 221787)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp 2017-09-08 16:03:53 UTC (rev 221786)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp 2017-09-08 16:19:23 UTC (rev 221787)
@@ -46,11 +46,11 @@
}
private:
- void createNewPage(WebPageProxy&, Ref<API::FrameInfo>&&, WebCore::ResourceRequest&& resourceRequest, WebCore::WindowFeatures&& windowFeatures, NavigationActionData&& navigationActionData, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler)
+ RefPtr<WebPageProxy> createNewPage(WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&& resourceRequest, const WebCore::WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData) override
{
GRefPtr<WebKitURIRequest> request = adoptGRef(webkitURIRequestCreateForResourceRequest(resourceRequest));
WebKitNavigationAction navigationAction(request.get(), navigationActionData);
- completionHandler(webkitWebViewCreateNewPage(m_webView, windowFeatures, &navigationAction));
+ return webkitWebViewCreateNewPage(m_webView, windowFeatures, &navigationAction);
}
void showPage(WebPageProxy*) override
Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.h (221786 => 221787)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.h 2017-09-08 16:03:53 UTC (rev 221786)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.h 2017-09-08 16:19:23 UTC (rev 221787)
@@ -17,8 +17,11 @@
* Boston, MA 02110-1301, USA.
*/
-#pragma once
+#ifndef WebKitUIClient_h
+#define WebKitUIClient_h
#include "WebKitWebView.h"
void attachUIClientToView(WebKitWebView*);
+
+#endif
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h (221786 => 221787)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h 2017-09-08 16:03:53 UTC (rev 221786)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h 2017-09-08 16:19:23 UTC (rev 221787)
@@ -79,7 +79,11 @@
private:
// API::UIClient
- void createNewPage(WebPageProxy&, Ref<API::FrameInfo>&&, WebCore::ResourceRequest&&, WebCore::WindowFeatures&&, NavigationActionData&&, WTF::Function<void(RefPtr<WebPageProxy>&&)>&&) 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<WebPageProxy> createNewPageCommon(WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, NavigationActionData&&, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler);
+
void close(WebPageProxy*) final;
void fullscreenMayReturnToInline(WebPageProxy*) final;
void didEnterFullscreen(WebPageProxy*) final;
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (221786 => 221787)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2017-09-08 16:03:53 UTC (rev 221786)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2017-09-08 16:19:23 UTC (rev 221787)
@@ -191,7 +191,7 @@
{
}
-void UIDelegate::UIClient::createNewPage(WebPageProxy& page, Ref<API::FrameInfo>&& sourceFrameInfo, WebCore::ResourceRequest&& request, WebCore::WindowFeatures&& windowFeatures, NavigationActionData&& navigationActionData, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler)
+RefPtr<WebPageProxy> UIDelegate::UIClient::createNewPageCommon(WebPageProxy* page, API::FrameInfo& sourceFrameInfo, WebCore::ResourceRequest&& request, const WebCore::WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler)
{
auto delegate = m_uiDelegate.m_delegate.get();
ASSERT(delegate);
@@ -199,13 +199,13 @@
auto configuration = adoptNS([m_uiDelegate.m_webView->_configuration copy]);
[configuration _setRelatedWebView:m_uiDelegate.m_webView];
- auto userInitiatedActivity = page.process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier);
- bool shouldOpenAppLinks = !hostsAreEqual(sourceFrameInfo->request().url(), request.url());
- auto apiNavigationAction = API::NavigationAction::create(WTFMove(navigationActionData), sourceFrameInfo.ptr(), nullptr, WTFMove(request), WebCore::URL(), shouldOpenAppLinks, WTFMove(userInitiatedActivity));
+ auto userInitiatedActivity = page->process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier);
+ bool shouldOpenAppLinks = !hostsAreEqual(sourceFrameInfo.request().url(), request.url());
+ auto apiNavigationAction = API::NavigationAction::create(WTFMove(navigationActionData), &sourceFrameInfo, nullptr, WTFMove(request), WebCore::URL(), shouldOpenAppLinks, WTFMove(userInitiatedActivity));
auto apiWindowFeatures = API::WindowFeatures::create(windowFeatures);
- if (m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeaturesAsync) {
+ if (completionHandler) {
RefPtr<CompletionHandlerCallChecker> checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:completionHandler:));
[(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView createWebViewWithConfiguration:configuration.get() forNavigationAction:wrapper(apiNavigationAction) windowFeatures:wrapper(apiWindowFeatures) completionHandler:BlockPtr<void (WKWebView *)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = WTFMove(checker), relatedWebView = RetainPtr<WKWebView>(m_uiDelegate.m_webView)](WKWebView *webView) {
@@ -223,19 +223,50 @@
completionHandler(webView->_page.get());
}).get()];
+
+ return nullptr;
}
- if (!m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeatures)
- return completionHandler(nullptr);
RetainPtr<WKWebView> webView = [delegate webView:m_uiDelegate.m_webView createWebViewWithConfiguration:configuration.get() forNavigationAction:wrapper(apiNavigationAction) windowFeatures:wrapper(apiWindowFeatures)];
+
if (!webView)
- return completionHandler(nullptr);
+ return nullptr;
if ([webView->_configuration _relatedWebView] != m_uiDelegate.m_webView)
[NSException raise:NSInternalInconsistencyException format:@"Returned WKWebView was not created with the given configuration."];
- completionHandler(webView->_page.get());
+
+ return webView->_page.get();
}
+RefPtr<WebPageProxy> UIDelegate::UIClient::createNewPage(WebPageProxy* page, API::FrameInfo& originatingFrameInfo, WebCore::ResourceRequest&& request, const WebCore::WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData)
+{
+ if (!m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeatures)
+ return nullptr;
+
+ auto delegate = m_uiDelegate.m_delegate.get();
+ if (!delegate)
+ return nullptr;
+
+ return createNewPageCommon(page, originatingFrameInfo, WTFMove(request), windowFeatures, WTFMove(navigationActionData), nullptr);
+}
+
+bool UIDelegate::UIClient::canCreateNewPageAsync()
+{
+ return m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeaturesAsync
+ && m_uiDelegate.m_delegate.get();
+}
+
+void UIDelegate::UIClient::createNewPageAsync(WebPageProxy* page, API::FrameInfo& originatingFrameInfo, WebCore::ResourceRequest&& request, const WebCore::WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler)
+{
+ ASSERT(canCreateNewPageAsync());
+ ASSERT(m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeaturesAsync);
+
+ auto delegate = m_uiDelegate.m_delegate.get();
+ ASSERT(delegate);
+
+ createNewPageCommon(page, originatingFrameInfo, WTFMove(request), windowFeatures, WTFMove(navigationActionData), WTFMove(completionHandler));
+}
+
void UIDelegate::UIClient::runJavaScriptAlert(WebPageProxy*, const WTF::String& message, WebFrameProxy* webFrameProxy, const WebCore::SecurityOriginData& securityOriginData, Function<void()>&& completionHandler)
{
if (!m_uiDelegate.m_delegateMethods.webViewRunJavaScriptAlertPanelWithMessageInitiatedByFrameCompletionHandler) {
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (221786 => 221787)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2017-09-08 16:03:53 UTC (rev 221786)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2017-09-08 16:19:23 UTC (rev 221787)
@@ -3864,7 +3864,7 @@
// UIClient
-void WebPageProxy::createNewPage(const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, ResourceRequest&& request, WindowFeatures&& windowFeatures, NavigationActionData&& navigationActionData, Ref<Messages::WebPageProxy::CreateNewPage::DelayedReply>&& reply)
+void WebPageProxy::createNewPage(const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, ResourceRequest&& request, const WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData, Ref<Messages::WebPageProxy::CreateNewPage::DelayedReply>&& reply)
{
MESSAGE_CHECK(m_process->webFrame(originatingFrameInfoData.frameID));
auto originatingFrameInfo = API::FrameInfo::create(originatingFrameInfoData, m_process->webPage(originatingPageID));
@@ -3871,7 +3871,7 @@
auto mainFrameURL = m_mainFrame->url();
- m_uiClient->createNewPage(*this, WTFMove(originatingFrameInfo), WTFMove(request), WTFMove(windowFeatures), WTFMove(navigationActionData), [this, protectedThis = RefPtr<WebPageProxy>(this), mainFrameURL, request, reply = WTFMove(reply)](RefPtr<WebPageProxy> newPage) {
+ auto completionHandler = [this, protectedThis = RefPtr<WebPageProxy>(this), mainFrameURL, request, reply = WTFMove(reply)](RefPtr<WebPageProxy> newPage) {
if (!newPage) {
reply->send(0, { });
return;
@@ -3881,7 +3881,18 @@
WebsiteDataStore::cloneSessionData(*this, *newPage);
newPage->m_shouldSuppressAppLinksInNextNavigationPolicyDecision = hostsAreEqual(URL(ParsedURLString, mainFrameURL), request.url());
- });
+
+ };
+
+ if (m_uiClient->canCreateNewPageAsync()) {
+ m_uiClient->createNewPageAsync(this, originatingFrameInfo, WTFMove(request), windowFeatures, WTFMove(navigationActionData), [completionHandler = WTFMove(completionHandler)](RefPtr<WebPageProxy> newPage) {
+ completionHandler(newPage);
+ });
+ return;
+ }
+
+ RefPtr<WebPageProxy> newPage = m_uiClient->createNewPage(this, originatingFrameInfo, WTFMove(request), windowFeatures, WTFMove(navigationActionData));
+ completionHandler(WTFMove(newPage));
}
void WebPageProxy::showPage()
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (221786 => 221787)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2017-09-08 16:03:53 UTC (rev 221786)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2017-09-08 16:19:23 UTC (rev 221787)
@@ -1292,7 +1292,7 @@
void didUpdateHistoryTitle(const String& title, const String& url, uint64_t frameID);
// UI client
- void createNewPage(const FrameInfoData&, uint64_t originatingPageID, WebCore::ResourceRequest&&, WebCore::WindowFeatures&&, NavigationActionData&&, Ref<Messages::WebPageProxy::CreateNewPage::DelayedReply>&&);
+ void createNewPage(const FrameInfoData&, uint64_t originatingPageID, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, NavigationActionData&&, Ref<Messages::WebPageProxy::CreateNewPage::DelayedReply>&&);
void showPage();
void runJavaScriptAlert(uint64_t frameID, const WebCore::SecurityOriginData&, const String&, Ref<Messages::WebPageProxy::RunJavaScriptAlert::DelayedReply>&&);
void runJavaScriptConfirm(uint64_t frameID, const WebCore::SecurityOriginData&, const String&, Ref<Messages::WebPageProxy::RunJavaScriptConfirm::DelayedReply>&&);