Changeset 221899 in webkit


Ignore:
Timestamp:
Sep 11, 2017 7:05:21 PM (7 years ago)
Author:
achristensen@apple.com
Message:

Clean up API::UIClient
https://bugs.webkit.org/show_bug.cgi?id=176568

Reviewed by Brady Eidson.

We don't need createNewPage and createNewPageAsync.
An async version can support synchronous delegate calls by just calling the completion handler synchronously.

  • UIProcess/API/APIUIClient.h:

(API::UIClient::createNewPage):
(API::UIClient::createNewPageAsync): Deleted.
(API::UIClient::canCreateNewPageAsync): Deleted.

  • UIProcess/API/C/WKPage.cpp:

(WKPageSetPageUIClient):

  • UIProcess/API/glib/WebKitUIClient.cpp:
  • UIProcess/API/glib/WebKitUIClient.h:
  • UIProcess/Cocoa/UIDelegate.h:
  • UIProcess/Cocoa/UIDelegate.mm:

(WebKit::UIDelegate::UIClient::createNewPage):
(WebKit::UIDelegate::UIClient::createNewPageCommon): Deleted.
(WebKit::UIDelegate::UIClient::canCreateNewPageAsync): Deleted.
(WebKit::UIDelegate::UIClient::createNewPageAsync): Deleted.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::createNewPage):

  • UIProcess/WebPageProxy.h:
Location:
trunk/Source/WebKit
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r221896 r221899  
     12017-09-11  Alex Christensen  <achristensen@webkit.org>
     2
     3        Clean up API::UIClient
     4        https://bugs.webkit.org/show_bug.cgi?id=176568
     5
     6        Reviewed by Brady Eidson.
     7
     8        We don't need createNewPage and createNewPageAsync.
     9        An async version can support synchronous delegate calls by just calling the completion handler synchronously.
     10
     11        * UIProcess/API/APIUIClient.h:
     12        (API::UIClient::createNewPage):
     13        (API::UIClient::createNewPageAsync): Deleted.
     14        (API::UIClient::canCreateNewPageAsync): Deleted.
     15        * UIProcess/API/C/WKPage.cpp:
     16        (WKPageSetPageUIClient):
     17        * UIProcess/API/glib/WebKitUIClient.cpp:
     18        * UIProcess/API/glib/WebKitUIClient.h:
     19        * UIProcess/Cocoa/UIDelegate.h:
     20        * UIProcess/Cocoa/UIDelegate.mm:
     21        (WebKit::UIDelegate::UIClient::createNewPage):
     22        (WebKit::UIDelegate::UIClient::createNewPageCommon): Deleted.
     23        (WebKit::UIDelegate::UIClient::canCreateNewPageAsync): Deleted.
     24        (WebKit::UIDelegate::UIClient::createNewPageAsync): Deleted.
     25        * UIProcess/WebPageProxy.cpp:
     26        (WebKit::WebPageProxy::createNewPage):
     27        * UIProcess/WebPageProxy.h:
     28
    1292017-09-11  Alex Christensen  <achristensen@webkit.org>
    230
  • trunk/Source/WebKit/UIProcess/API/APIUIClient.h

    r221894 r221899  
    7272    virtual ~UIClient() { }
    7373
    74     virtual RefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, WebKit::NavigationActionData&&) { return nullptr; }
    75     virtual void createNewPageAsync(WebKit::WebPageProxy*, FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, WebKit::NavigationActionData&&, WTF::Function<void(RefPtr<WebKit::WebPageProxy>&&)>&& completionHandler) { }
    76     virtual bool canCreateNewPageAsync() { return false; }
     74    virtual void createNewPage(WebKit::WebPageProxy&, Ref<FrameInfo>&&, WebCore::ResourceRequest&&, WebCore::WindowFeatures&&, WebKit::NavigationActionData&&, WTF::Function<void(RefPtr<WebKit::WebPageProxy>&&)>&&) { }
    7775    virtual void showPage(WebKit::WebPageProxy*) { }
    7876    virtual void fullscreenMayReturnToInline(WebKit::WebPageProxy*) { }
  • trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp

    r221894 r221899  
    15661566
    15671567    private:
    1568         RefPtr<WebPageProxy> createNewPage(WebPageProxy* page, API::FrameInfo& sourceFrameInfo, ResourceRequest&& resourceRequest, const WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData) final
     1568        void createNewPage(WebPageProxy& page, Ref<API::FrameInfo>&& sourceFrameInfo, WebCore::ResourceRequest&& resourceRequest, WebCore::WindowFeatures&& windowFeatures, NavigationActionData&& navigationActionData, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler) final
    15691569        {
    15701570            if (m_client.createNewPage) {
    1571                 auto configuration = page->configuration().copy();
    1572                 configuration->setRelatedPage(page);
    1573 
    1574                 auto userInitiatedActivity = page->process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier);
    1575                 bool shouldOpenAppLinks = !hostsAreEqual(sourceFrameInfo.request().url(), resourceRequest.url());
    1576                 auto apiNavigationAction = API::NavigationAction::create(WTFMove(navigationActionData), &sourceFrameInfo, nullptr, WTFMove(resourceRequest), WebCore::URL(), shouldOpenAppLinks, WTFMove(userInitiatedActivity));
     1571                auto configuration = page.configuration().copy();
     1572                configuration->setRelatedPage(&page);
     1573
     1574                auto userInitiatedActivity = page.process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier);
     1575                bool shouldOpenAppLinks = !hostsAreEqual(sourceFrameInfo->request().url(), resourceRequest.url());
     1576                auto apiNavigationAction = API::NavigationAction::create(WTFMove(navigationActionData), sourceFrameInfo.ptr(), nullptr, WTFMove(resourceRequest), WebCore::URL(), shouldOpenAppLinks, WTFMove(userInitiatedActivity));
    15771577
    15781578                auto apiWindowFeatures = API::WindowFeatures::create(windowFeatures);
    15791579
    1580                 return adoptRef(toImpl(m_client.createNewPage(toAPI(page), toAPI(configuration.ptr()), toAPI(apiNavigationAction.ptr()), toAPI(apiWindowFeatures.ptr()), m_client.base.clientInfo)));
     1580                return completionHandler(adoptRef(toImpl(m_client.createNewPage(toAPI(&page), toAPI(configuration.ptr()), toAPI(apiNavigationAction.ptr()), toAPI(apiWindowFeatures.ptr()), m_client.base.clientInfo))));
    15811581            }
    15821582       
     
    16031603                if (m_client.createNewPage_deprecatedForUseWithV1) {
    16041604                    Ref<API::URLRequest> request = API::URLRequest::create(resourceRequest);
    1605                     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)));
     1605                    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))));
    16061606                }
    16071607   
    16081608                ASSERT(m_client.createNewPage_deprecatedForUseWithV0);
    1609                 return adoptRef(toImpl(m_client.createNewPage_deprecatedForUseWithV0(toAPI(page), toAPI(featuresMap.ptr()), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), m_client.base.clientInfo)));
     1609                return completionHandler(adoptRef(toImpl(m_client.createNewPage_deprecatedForUseWithV0(toAPI(&page), toAPI(featuresMap.ptr()), toAPI(navigationActionData.modifiers), toAPI(navigationActionData.mouseButton), m_client.base.clientInfo))));
    16101610            }
    16111611
    1612             return nullptr;
     1612            completionHandler(nullptr);
    16131613        }
    16141614
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp

    r221894 r221899  
    4747
    4848private:
    49     RefPtr<WebPageProxy> createNewPage(WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&& resourceRequest, const WebCore::WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData) override
     49    void createNewPage(WebPageProxy&, Ref<API::FrameInfo>&&, WebCore::ResourceRequest&& resourceRequest, WebCore::WindowFeatures&& windowFeatures, NavigationActionData&& navigationActionData, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler)
    5050    {
    5151        GRefPtr<WebKitURIRequest> request = adoptGRef(webkitURIRequestCreateForResourceRequest(resourceRequest));
    5252        WebKitNavigationAction navigationAction(request.get(), navigationActionData);
    53         return webkitWebViewCreateNewPage(m_webView, windowFeatures, &navigationAction);
     53        completionHandler(webkitWebViewCreateNewPage(m_webView, windowFeatures, &navigationAction));
    5454    }
    5555
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.h

    r221787 r221899  
    1818 */
    1919
    20 #ifndef WebKitUIClient_h
    21 #define WebKitUIClient_h
     20#pragma once
    2221
    2322#include "WebKitWebView.h"
    2423
    2524void attachUIClientToView(WebKitWebView*);
    26 
    27 #endif
  • trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h

    r221887 r221899  
    8080    private:
    8181        // API::UIClient
    82         RefPtr<WebPageProxy> createNewPage(WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, NavigationActionData&&) final;
    83         void createNewPageAsync(WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, NavigationActionData&&, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler) final;
    84         bool canCreateNewPageAsync() final;
    85         RefPtr<WebPageProxy> createNewPageCommon(WebPageProxy*, API::FrameInfo&, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, NavigationActionData&&, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler);
    86 
     82        void createNewPage(WebPageProxy&, Ref<API::FrameInfo>&&, WebCore::ResourceRequest&&, WebCore::WindowFeatures&&, NavigationActionData&&, WTF::Function<void(RefPtr<WebPageProxy>&&)>&&) final;
    8783        void close(WebPageProxy*) final;
    8884        void fullscreenMayReturnToInline(WebPageProxy*) final;
  • trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm

    r221887 r221899  
    193193}
    194194
    195 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)
     195void UIDelegate::UIClient::createNewPage(WebPageProxy& page, Ref<API::FrameInfo>&& sourceFrameInfo, WebCore::ResourceRequest&& request, WebCore::WindowFeatures&& windowFeatures, NavigationActionData&& navigationActionData, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler)
    196196{
    197197    auto delegate = m_uiDelegate.m_delegate.get();
     
    201201    [configuration _setRelatedWebView:m_uiDelegate.m_webView];
    202202
    203     auto userInitiatedActivity = page->process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier);
    204     bool shouldOpenAppLinks = !hostsAreEqual(sourceFrameInfo.request().url(), request.url());
    205     auto apiNavigationAction = API::NavigationAction::create(WTFMove(navigationActionData), &sourceFrameInfo, nullptr, WTFMove(request), WebCore::URL(), shouldOpenAppLinks, WTFMove(userInitiatedActivity));
     203    auto userInitiatedActivity = page.process().userInitiatedActivity(navigationActionData.userGestureTokenIdentifier);
     204    bool shouldOpenAppLinks = !hostsAreEqual(sourceFrameInfo->request().url(), request.url());
     205    auto apiNavigationAction = API::NavigationAction::create(WTFMove(navigationActionData), sourceFrameInfo.ptr(), nullptr, WTFMove(request), WebCore::URL(), shouldOpenAppLinks, WTFMove(userInitiatedActivity));
    206206
    207207    auto apiWindowFeatures = API::WindowFeatures::create(windowFeatures);
    208208
    209     if (completionHandler) {
     209    if (m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeaturesAsync) {
    210210        RefPtr<CompletionHandlerCallChecker> checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:completionHandler:));
    211211
     
    225225            completionHandler(webView->_page.get());
    226226        }).get()];
    227 
    228         return nullptr;
    229     }
     227        return;
     228    }
     229    if (!m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeatures)
     230        return completionHandler(nullptr);
    230231
    231232    RetainPtr<WKWebView> webView = [delegate webView:m_uiDelegate.m_webView createWebViewWithConfiguration:configuration.get() forNavigationAction:wrapper(apiNavigationAction) windowFeatures:wrapper(apiWindowFeatures)];
    232 
    233233    if (!webView)
    234         return nullptr;
     234        return completionHandler(nullptr);
    235235
    236236    if ([webView->_configuration _relatedWebView] != m_uiDelegate.m_webView)
    237237        [NSException raise:NSInternalInconsistencyException format:@"Returned WKWebView was not created with the given configuration."];
    238 
    239     return webView->_page.get();
    240 }
    241 
    242 RefPtr<WebPageProxy> UIDelegate::UIClient::createNewPage(WebPageProxy* page, API::FrameInfo& originatingFrameInfo, WebCore::ResourceRequest&& request, const WebCore::WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData)
    243 {
    244     if (!m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeatures)
    245         return nullptr;
    246 
    247     auto delegate = m_uiDelegate.m_delegate.get();
    248     if (!delegate)
    249         return nullptr;
    250 
    251     return createNewPageCommon(page, originatingFrameInfo, WTFMove(request), windowFeatures, WTFMove(navigationActionData), nullptr);
    252 }
    253 
    254 bool UIDelegate::UIClient::canCreateNewPageAsync()
    255 {
    256     return m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeaturesAsync
    257         && m_uiDelegate.m_delegate.get();
    258 }
    259 
    260 void UIDelegate::UIClient::createNewPageAsync(WebPageProxy* page, API::FrameInfo& originatingFrameInfo, WebCore::ResourceRequest&& request, const WebCore::WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData, WTF::Function<void(RefPtr<WebPageProxy>&&)>&& completionHandler)
    261 {
    262     ASSERT(canCreateNewPageAsync());
    263     ASSERT(m_uiDelegate.m_delegateMethods.webViewCreateWebViewWithConfigurationForNavigationActionWindowFeaturesAsync);
    264 
    265     auto delegate = m_uiDelegate.m_delegate.get();
    266     ASSERT(delegate);
    267 
    268     createNewPageCommon(page, originatingFrameInfo, WTFMove(request), windowFeatures, WTFMove(navigationActionData), WTFMove(completionHandler));
     238    completionHandler(webView->_page.get());
    269239}
    270240
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r221894 r221899  
    38653865// UIClient
    38663866
    3867 void WebPageProxy::createNewPage(const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, ResourceRequest&& request, const WindowFeatures& windowFeatures, NavigationActionData&& navigationActionData, Ref<Messages::WebPageProxy::CreateNewPage::DelayedReply>&& reply)
     3867void WebPageProxy::createNewPage(const FrameInfoData& originatingFrameInfoData, uint64_t originatingPageID, ResourceRequest&& request, WindowFeatures&& windowFeatures, NavigationActionData&& navigationActionData, Ref<Messages::WebPageProxy::CreateNewPage::DelayedReply>&& reply)
    38683868{
    38693869    MESSAGE_CHECK(m_process->webFrame(originatingFrameInfoData.frameID));
     
    38723872    auto mainFrameURL = m_mainFrame->url();
    38733873
    3874     auto completionHandler = [this, protectedThis = RefPtr<WebPageProxy>(this), mainFrameURL, request, reply = WTFMove(reply)](RefPtr<WebPageProxy> newPage) {
     3874    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) {
    38753875        if (!newPage) {
    38763876            reply->send(0, { });
     
    38823882        WebsiteDataStore::cloneSessionData(*this, *newPage);
    38833883        newPage->m_shouldSuppressAppLinksInNextNavigationPolicyDecision = hostsAreEqual(URL(ParsedURLString, mainFrameURL), request.url());
    3884 
    3885     };
    3886 
    3887     if (m_uiClient->canCreateNewPageAsync()) {
    3888         m_uiClient->createNewPageAsync(this, originatingFrameInfo, WTFMove(request), windowFeatures, WTFMove(navigationActionData), [completionHandler = WTFMove(completionHandler)](RefPtr<WebPageProxy> newPage) {
    3889             completionHandler(newPage);
    3890         });
    3891         return;
    3892     }
    3893 
    3894     RefPtr<WebPageProxy> newPage = m_uiClient->createNewPage(this, originatingFrameInfo, WTFMove(request), windowFeatures, WTFMove(navigationActionData));
    3895     completionHandler(WTFMove(newPage));
     3884    });
    38963885}
    38973886   
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r221887 r221899  
    12941294
    12951295    // UI client
    1296     void createNewPage(const FrameInfoData&, uint64_t originatingPageID, WebCore::ResourceRequest&&, const WebCore::WindowFeatures&, NavigationActionData&&, Ref<Messages::WebPageProxy::CreateNewPage::DelayedReply>&&);
     1296    void createNewPage(const FrameInfoData&, uint64_t originatingPageID, WebCore::ResourceRequest&&, WebCore::WindowFeatures&&, NavigationActionData&&, Ref<Messages::WebPageProxy::CreateNewPage::DelayedReply>&&);
    12971297    void showPage();
    12981298    void runJavaScriptAlert(uint64_t frameID, const WebCore::SecurityOriginData&, const String&, Ref<Messages::WebPageProxy::RunJavaScriptAlert::DelayedReply>&&);
Note: See TracChangeset for help on using the changeset viewer.