Changeset 221764 in webkit


Ignore:
Timestamp:
Sep 7, 2017, 3:20:39 PM (8 years ago)
Author:
achristensen@apple.com
Message:

Clean up Geolocation request handling
https://bugs.webkit.org/show_bug.cgi?id=176562

Reviewed by Tim Horton.

Instead of passing a GeolocationPermissionRequestProxy& to each client and returning a bool if the request will be handled,
pass a Function<void(bool)>&& completionHandler and return the function if it won't be handled.
This allows to temporarily support our UIClient/PageClient hybrid design while moving towards a sane design.

  • UIProcess/API/APIUIClient.h:

(API::UIClient::Function<void):
(API::UIClient::decidePolicyForGeolocationPermissionRequest): Deleted.

  • UIProcess/API/C/WKAPICast.h:
  • UIProcess/API/C/WKGeolocationPermissionRequest.cpp:

(WKGeolocationPermissionRequestGetTypeID):

  • UIProcess/API/C/WKPage.cpp:

(WKPageSetPageUIClient):

  • UIProcess/GeolocationPermissionRequestProxy.cpp:

(WebKit::GeolocationPermissionRequestProxy::allow):
(WebKit::GeolocationPermissionRequestProxy::deny):
(WebKit::GeolocationPermissionRequestProxy::invalidate):

  • UIProcess/GeolocationPermissionRequestProxy.h:

(WebKit::GeolocationPermissionRequest::create):
(WebKit::GeolocationPermissionRequest::allow):
(WebKit::GeolocationPermissionRequest::deny):
(WebKit::GeolocationPermissionRequest::GeolocationPermissionRequest):

  • UIProcess/PageClient.h:

(WebKit::PageClient::decidePolicyForGeolocationPermissionRequest): Deleted.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::requestGeolocationPermissionForFrame):

  • UIProcess/ios/PageClientImplIOS.h:
  • UIProcess/ios/PageClientImplIOS.mm:

(WebKit::Function<void):
(WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest): Deleted.

  • UIProcess/ios/WKContentView.h:
  • UIProcess/ios/WKGeolocationProviderIOS.h:
  • UIProcess/ios/WKGeolocationProviderIOS.mm:

(-[WKGeolocationProviderIOS decidePolicyForGeolocationRequestFromOrigin:frame:completionHandler:view:]):
(-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
(-[WKGeolocationProviderIOS geolocationAuthorizationDenied]):
(-[WKWebAllowDenyPolicyListener initWithCompletionHandler:]):
(-[WKWebAllowDenyPolicyListener allow]):
(-[WKWebAllowDenyPolicyListener deny]):
(-[WKGeolocationProviderIOS decidePolicyForGeolocationRequestFromOrigin:frame:request:view:]): Deleted.
(-[WKWebAllowDenyPolicyListener initWithPermissionRequestProxy:]): Deleted.

Location:
trunk/Source/WebKit
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r221760 r221764  
     12017-09-07  Alex Christensen  <achristensen@webkit.org>
     2
     3        Clean up Geolocation request handling
     4        https://bugs.webkit.org/show_bug.cgi?id=176562
     5
     6        Reviewed by Tim Horton.
     7
     8        Instead of passing a GeolocationPermissionRequestProxy& to each client and returning a bool if the request will be handled,
     9        pass a Function<void(bool)>&& completionHandler and return the function if it won't be handled.
     10        This allows to temporarily support our UIClient/PageClient hybrid design while moving towards a sane design.
     11
     12        * UIProcess/API/APIUIClient.h:
     13        (API::UIClient::Function<void):
     14        (API::UIClient::decidePolicyForGeolocationPermissionRequest): Deleted.
     15        * UIProcess/API/C/WKAPICast.h:
     16        * UIProcess/API/C/WKGeolocationPermissionRequest.cpp:
     17        (WKGeolocationPermissionRequestGetTypeID):
     18        * UIProcess/API/C/WKPage.cpp:
     19        (WKPageSetPageUIClient):
     20        * UIProcess/GeolocationPermissionRequestProxy.cpp:
     21        (WebKit::GeolocationPermissionRequestProxy::allow):
     22        (WebKit::GeolocationPermissionRequestProxy::deny):
     23        (WebKit::GeolocationPermissionRequestProxy::invalidate):
     24        * UIProcess/GeolocationPermissionRequestProxy.h:
     25        (WebKit::GeolocationPermissionRequest::create):
     26        (WebKit::GeolocationPermissionRequest::allow):
     27        (WebKit::GeolocationPermissionRequest::deny):
     28        (WebKit::GeolocationPermissionRequest::GeolocationPermissionRequest):
     29        * UIProcess/PageClient.h:
     30        (WebKit::PageClient::decidePolicyForGeolocationPermissionRequest): Deleted.
     31        * UIProcess/WebPageProxy.cpp:
     32        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
     33        * UIProcess/ios/PageClientImplIOS.h:
     34        * UIProcess/ios/PageClientImplIOS.mm:
     35        (WebKit::Function<void):
     36        (WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest): Deleted.
     37        * UIProcess/ios/WKContentView.h:
     38        * UIProcess/ios/WKGeolocationProviderIOS.h:
     39        * UIProcess/ios/WKGeolocationProviderIOS.mm:
     40        (-[WKGeolocationProviderIOS decidePolicyForGeolocationRequestFromOrigin:frame:completionHandler:view:]):
     41        (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
     42        (-[WKGeolocationProviderIOS geolocationAuthorizationDenied]):
     43        (-[WKWebAllowDenyPolicyListener initWithCompletionHandler:]):
     44        (-[WKWebAllowDenyPolicyListener allow]):
     45        (-[WKWebAllowDenyPolicyListener deny]):
     46        (-[WKGeolocationProviderIOS decidePolicyForGeolocationRequestFromOrigin:frame:request:view:]): Deleted.
     47        (-[WKWebAllowDenyPolicyListener initWithPermissionRequestProxy:]): Deleted.
     48
    1492017-09-07  Alex Christensen  <achristensen@webkit.org>
    250
  • trunk/Source/WebKit/UIProcess/API/APIUIClient.h

    r221743 r221764  
    4545
    4646namespace WebKit {
    47 class GeolocationPermissionRequestProxy;
    4847class NativeWebKeyboardEvent;
    4948class NativeWebWheelEvent;
     
    128127
    129128    virtual bool runOpenPanel(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, OpenPanelParameters*, WebKit::WebOpenPanelResultListenerProxy*) { return false; }
    130     virtual bool decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, WebKit::GeolocationPermissionRequestProxy&) { return false; }
     129    virtual Function<void(bool)> decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, Function<void(bool)>&& completionHandler) { return WTFMove(completionHandler); }
    131130    virtual bool decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy&) { return false; }
    132131    virtual bool checkUserMediaPermissionForOrigin(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionCheckProxy&) { return false; }
  • trunk/Source/WebKit/UIProcess/API/C/WKAPICast.h

    r217531 r221764  
    7878class AuthenticationDecisionListener;
    7979class DownloadProxy;
    80 class GeolocationPermissionRequestProxy;
     80class GeolocationPermissionRequest;
    8181class NotificationPermissionRequest;
    8282class UserMediaPermissionCheckProxy;
     
    132132WK_ADD_API_MAPPING(WKFrameRef, WebFrameProxy)
    133133WK_ADD_API_MAPPING(WKGeolocationManagerRef, WebGeolocationManagerProxy)
    134 WK_ADD_API_MAPPING(WKGeolocationPermissionRequestRef, GeolocationPermissionRequestProxy)
     134WK_ADD_API_MAPPING(WKGeolocationPermissionRequestRef, GeolocationPermissionRequest)
    135135WK_ADD_API_MAPPING(WKGeolocationPositionRef, WebGeolocationPosition)
    136136WK_ADD_API_MAPPING(WKHitTestResultRef, API::HitTestResult)
  • trunk/Source/WebKit/UIProcess/API/C/WKGeolocationPermissionRequest.cpp

    r95901 r221764  
    3434WKTypeID WKGeolocationPermissionRequestGetTypeID()
    3535{
    36     return toAPI(GeolocationPermissionRequestProxy::APIType);
     36    return toAPI(GeolocationPermissionRequest::APIType);
    3737}
    3838
  • trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp

    r221743 r221764  
    19541954        }
    19551955
    1956         bool decidePolicyForGeolocationPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& origin, GeolocationPermissionRequestProxy& permissionRequest) final
     1956        Function<void(bool)> decidePolicyForGeolocationPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& origin, Function<void(bool)>&& completionHandler) final
    19571957        {
    19581958            if (!m_client.decidePolicyForGeolocationPermissionRequest)
    1959                 return false;
    1960 
    1961             m_client.decidePolicyForGeolocationPermissionRequest(toAPI(&page), toAPI(&frame), toAPI(&origin), toAPI(&permissionRequest), m_client.base.clientInfo);
    1962             return true;
     1959                return WTFMove(completionHandler);
     1960
     1961            m_client.decidePolicyForGeolocationPermissionRequest(toAPI(&page), toAPI(&frame), toAPI(&origin), toAPI(GeolocationPermissionRequest::create(WTFMove(completionHandler)).ptr()), m_client.base.clientInfo);
     1962            return nullptr;
    19631963        }
    19641964
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequest.cpp

    r221132 r221764  
    6161
    6262struct _WebKitGeolocationPermissionRequestPrivate {
    63     RefPtr<GeolocationPermissionRequestProxy> request;
     63    RefPtr<GeolocationPermissionRequest> request;
    6464    bool madeDecision;
    6565};
     
    116116}
    117117
    118 WebKitGeolocationPermissionRequest* webkitGeolocationPermissionRequestCreate(GeolocationPermissionRequestProxy* request)
     118WebKitGeolocationPermissionRequest* webkitGeolocationPermissionRequestCreate(GeolocationPermissionRequest* request)
    119119{
    120120    WebKitGeolocationPermissionRequest* geolocationPermissionRequest = WEBKIT_GEOLOCATION_PERMISSION_REQUEST(g_object_new(WEBKIT_TYPE_GEOLOCATION_PERMISSION_REQUEST, NULL));
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequestPrivate.h

    r218487 r221764  
    2222#include "WebKitGeolocationPermissionRequest.h"
    2323
    24 WebKitGeolocationPermissionRequest* webkitGeolocationPermissionRequestCreate(WebKit::GeolocationPermissionRequestProxy*);
     24WebKitGeolocationPermissionRequest* webkitGeolocationPermissionRequestCreate(WebKit::GeolocationPermissionRequest*);
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp

    r221743 r221764  
    183183    }
    184184
    185     bool decidePolicyForGeolocationPermissionRequest(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, GeolocationPermissionRequestProxy& permissionRequest) final
    186     {
    187         GRefPtr<WebKitGeolocationPermissionRequest> geolocationPermissionRequest = adoptGRef(webkitGeolocationPermissionRequestCreate(&permissionRequest));
     185    Function<void(bool)> decidePolicyForGeolocationPermissionRequest(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, Function<void(bool)>&& completionHandler) final
     186    {
     187        GRefPtr<WebKitGeolocationPermissionRequest> geolocationPermissionRequest = adoptGRef(webkitGeolocationPermissionRequestCreate(GeolocationPermissionRequest::create(WTFMove(completionHandler)).ptr()));
    188188        webkitWebViewMakePermissionRequest(m_webView, WEBKIT_PERMISSION_REQUEST(geolocationPermissionRequest.get()));
    189         return true;
     189        return nullptr;
    190190    }
    191191
  • trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestProxy.cpp

    r95901 r221764  
    4343
    4444    m_manager->didReceiveGeolocationPermissionDecision(m_geolocationID, true);
    45     m_manager = 0;
     45    m_manager = nullptr;
    4646}
    4747
     
    5252   
    5353    m_manager->didReceiveGeolocationPermissionDecision(m_geolocationID, false);
    54     m_manager = 0;
     54    m_manager = nullptr;
    5555}
    5656
    5757void GeolocationPermissionRequestProxy::invalidate()
    5858{
    59     m_manager = 0;
     59    m_manager = nullptr;
    6060}
    6161
  • trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestProxy.h

    r204466 r221764  
    2424 */
    2525
    26 #ifndef GeolocationPermissionRequestProxy_h
    27 #define GeolocationPermissionRequestProxy_h
     26#pragma once
    2827
    2928#include "APIObject.h"
     29#include <wtf/Function.h>
    3030
    3131namespace WebKit {
     
    3333class GeolocationPermissionRequestManagerProxy;
    3434
    35 class GeolocationPermissionRequestProxy : public API::ObjectImpl<API::Object::Type::GeolocationPermissionRequest> {
     35class GeolocationPermissionRequestProxy : public RefCounted<GeolocationPermissionRequestProxy> {
    3636public:
    3737    static Ref<GeolocationPermissionRequestProxy> create(GeolocationPermissionRequestManagerProxy* manager, uint64_t geolocationID)
     
    5252};
    5353
     54class GeolocationPermissionRequest : public API::ObjectImpl<API::Object::Type::GeolocationPermissionRequest> {
     55public:
     56    static Ref<GeolocationPermissionRequest> create(Function<void(bool)>&& completionHandler)
     57    {
     58        return adoptRef(*new GeolocationPermissionRequest(WTFMove(completionHandler)));
     59    }
     60   
     61    void allow() { m_completionHandler(true); }
     62    void deny() { m_completionHandler(false); }
     63
     64private:
     65    GeolocationPermissionRequest(Function<void(bool)>&& completionHandler)
     66        : m_completionHandler(WTFMove(completionHandler))
     67    { }
     68   
     69    Function<void(bool)> m_completionHandler;
     70};
     71
    5472} // namespace WebKit
    55 
    56 #endif // GeolocationPermissionRequestProxy_h
  • trunk/Source/WebKit/UIProcess/PageClient.h

    r221707 r221764  
    142142    virtual void toolTipChanged(const String&, const String&) = 0;
    143143
    144     virtual bool decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, API::SecurityOrigin&, GeolocationPermissionRequestProxy&)
    145     {
    146         return false;
    147     }
     144#if PLATFORM(IOS)
     145    // FIXME: Adopt the WKUIDelegatePrivate callback on iOS and remove this.
     146    virtual Function<void(bool)> decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, API::SecurityOrigin&, Function<void(bool)>&&) = 0;
     147#endif
    148148
    149149    virtual void didStartProvisionalLoadForMainFrame() { };
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r221743 r221764  
    58125812    auto origin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(originIdentifier)->securityOrigin());
    58135813    auto request = m_geolocationPermissionRequestManager.createRequest(geolocationID);
    5814 
    5815     if (m_uiClient->decidePolicyForGeolocationPermissionRequest(*this, *frame, origin.get(), request.get()))
    5816         return;
    5817 
    5818     if (m_pageClient.decidePolicyForGeolocationPermissionRequest(*frame, origin.get(), request.get()))
    5819         return;
    5820 
    5821     request->deny();
     5814    Function<void(bool)> completionHandler = [request = WTFMove(request)](bool allowed) {
     5815        if (allowed)
     5816            request->allow();
     5817        else
     5818            request->deny();
     5819    };
     5820
     5821    // FIXME: Once iOS migrates to the new WKUIDelegate SPI, clean this up
     5822    // and make it one UIClient call that calls the completionHandler with false
     5823    // if there is no delegate instead of returning the completionHandler
     5824    // for other code paths to try.
     5825    completionHandler = m_uiClient->decidePolicyForGeolocationPermissionRequest(*this, *frame, origin.get(), WTFMove(completionHandler));
     5826#if PLATFORM(IOS)
     5827    if (completionHandler)
     5828        completionHandler = m_pageClient.decidePolicyForGeolocationPermissionRequest(*frame, origin.get(), WTFMove(completionHandler));
     5829#endif
     5830    if (completionHandler)
     5831        completionHandler(false);
    58225832}
    58235833
  • trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h

    r221660 r221764  
    6464    void preferencesDidChange() override;
    6565    void toolTipChanged(const String&, const String&) override;
    66     bool decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, API::SecurityOrigin&, GeolocationPermissionRequestProxy&) override;
     66    Function<void(bool)> decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, API::SecurityOrigin&, Function<void(bool)>&&) override;
    6767    void didStartProvisionalLoadForMainFrame() override;
    6868    void didFailProvisionalLoadForMainFrame() override;
  • trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm

    r221660 r221764  
    238238}
    239239
    240 bool PageClientImpl::decidePolicyForGeolocationPermissionRequest(WebFrameProxy& frame, API::SecurityOrigin& origin, GeolocationPermissionRequestProxy& request)
    241 {
    242     [[wrapper(m_webView->_page->process().processPool()) _geolocationProvider] decidePolicyForGeolocationRequestFromOrigin:origin.securityOrigin() frame:frame request:request view:m_webView];
    243     return true;
     240Function<void(bool)> PageClientImpl::decidePolicyForGeolocationPermissionRequest(WebFrameProxy& frame, API::SecurityOrigin& origin, Function<void(bool)>&& completionHandler)
     241{
     242    [[wrapper(m_webView->_page->process().processPool()) _geolocationProvider] decidePolicyForGeolocationRequestFromOrigin:origin.securityOrigin() frame:frame completionHandler:WTFMove(completionHandler) view:m_webView];
     243    return nullptr;
    244244}
    245245
  • trunk/Source/WebKit/UIProcess/ios/WKContentView.h

    r216047 r221764  
    4444namespace WebKit {
    4545class DrawingAreaProxy;
    46 class GeolocationPermissionRequestProxy;
    4746class RemoteLayerTreeTransaction;
    4847class WebFrameProxy;
  • trunk/Source/WebKit/UIProcess/ios/WKGeolocationProviderIOS.h

    r180441 r221764  
    2828#import <Foundation/NSObject.h>
    2929#import <WebKit/WKBase.h>
     30#import <wtf/Function.h>
    3031
    3132namespace WebKit {
    32 class GeolocationPermissionRequestProxy;
    3333class WebFrameProxy;
    3434class WebProcessPool;
     
    4343@interface WKGeolocationProviderIOS : NSObject
    4444-(id)initWithProcessPool:(WebKit::WebProcessPool&)processPool;
    45 -(void)decidePolicyForGeolocationRequestFromOrigin:(WebCore::SecurityOrigin&)origin frame:(WebKit::WebFrameProxy&)frame request:(WebKit::GeolocationPermissionRequestProxy&)permissionRequest view:(WKWebView*)view;
     45-(void)decidePolicyForGeolocationRequestFromOrigin:(WebCore::SecurityOrigin&)origin frame:(WebKit::WebFrameProxy&)frame completionHandler:(Function<void(bool)>&&)completionHandler view:(WKWebView*)view;
    4646@end
    4747
  • trunk/Source/WebKit/UIProcess/ios/WKGeolocationProviderIOS.mm

    r218165 r221764  
    3232#import "APISecurityOrigin.h"
    3333#import "CompletionHandlerCallChecker.h"
    34 #import "GeolocationPermissionRequestProxy.h"
    3534#import "WKFrameInfoInternal.h"
    3635#import "WKGeolocationManager.h"
     
    6867
    6968@interface WKWebAllowDenyPolicyListener : NSObject<WebAllowDenyPolicyListener>
    70 - (id)initWithPermissionRequestProxy:(RefPtr<GeolocationPermissionRequestProxy>&&)permissionRequestProxy;
     69- (id)initWithCompletionHandler:(Function<void(bool)>&&)completionHandler;
    7170- (void)denyOnlyThisRequest NO_RETURN_DUE_TO_ASSERT;
    7271@end
     
    8483    RefPtr<SecurityOrigin> origin;
    8584    RefPtr<WebFrameProxy> frame;
    86     RefPtr<GeolocationPermissionRequestProxy> permissionRequest;
     85    Function<void(bool)> completionHandler;
    8786    RetainPtr<WKWebView> view;
    8887};
     
    169168}
    170169
    171 -(void)decidePolicyForGeolocationRequestFromOrigin:(SecurityOrigin&)origin frame:(WebFrameProxy&)frame request:(GeolocationPermissionRequestProxy&)permissionRequest view:(WKWebView*)contentView
     170-(void)decidePolicyForGeolocationRequestFromOrigin:(SecurityOrigin&)origin frame:(WebFrameProxy&)frame completionHandler:(Function<void(bool)>&&)completionHandler view:(WKWebView*)contentView
    172171{
    173172    // Step 1: ask the user if the app can use Geolocation.
     
    175174    geolocationRequestData.origin = &origin;
    176175    geolocationRequestData.frame = &frame;
    177     geolocationRequestData.permissionRequest = &permissionRequest;
     176    geolocationRequestData.completionHandler = WTFMove(completionHandler);
    178177    geolocationRequestData.view = contentView;
    179     _requestsWaitingForCoreLocationAuthorization.append(geolocationRequestData);
     178    _requestsWaitingForCoreLocationAuthorization.append(WTFMove(geolocationRequestData));
    180179    [_coreLocationProvider requestGeolocationAuthorization];
    181180}
     
    190189    // Step 2: ask the user if the this particular page can use gelocation.
    191190    Vector<GeolocationRequestData> requests = WTFMove(_requestsWaitingForCoreLocationAuthorization);
    192     for (const auto& request : requests) {
     191    for (auto& request : requests) {
    193192        bool requiresUserAuthorization = true;
    194193
     
    198197            RetainPtr<WKFrameInfo> frameInfo = wrapper(API::FrameInfo::create(*request.frame.get(), *request.origin.get()));
    199198            RefPtr<CompletionHandlerCallChecker> checker = CompletionHandlerCallChecker::create(uiDelegate, @selector(_webView:requestGeolocationAuthorizationForURL:frame:decisionHandler:));
    200             [uiDelegate _webView:request.view.get() requestGeolocationAuthorizationForURL:requestFrameURL frame:frameInfo.get() decisionHandler:BlockPtr<void(BOOL)>::fromCallable([request, checker = WTFMove(checker)](BOOL authorized) {
     199            WKWebView *viewFromRequest = request.view.get();
     200            [uiDelegate _webView:viewFromRequest requestGeolocationAuthorizationForURL:requestFrameURL frame:frameInfo.get() decisionHandler:BlockPtr<void(BOOL)>::fromCallable([request = WTFMove(request), checker = WTFMove(checker)](BOOL authorized) {
    201201                if (checker->completionHandlerHasBeenCalled())
    202202                    return;
    203                 if (authorized)
    204                     request.permissionRequest->allow();
    205                 else
    206                     request.permissionRequest->deny();
    207203                checker->didCallCompletionHandler();
     204                request.completionHandler(authorized);
    208205            }).get()];
    209206            return;
     
    222219
    223220        if (requiresUserAuthorization) {
    224             RetainPtr<WKWebAllowDenyPolicyListener> policyListener = adoptNS([[WKWebAllowDenyPolicyListener alloc] initWithPermissionRequestProxy:request.permissionRequest.get()]);
     221            RetainPtr<WKWebAllowDenyPolicyListener> policyListener = adoptNS([[WKWebAllowDenyPolicyListener alloc] initWithCompletionHandler:WTFMove(request.completionHandler)]);
    225222            decidePolicyForGeolocationRequestFromOrigin(request.origin.get(), request.frame->url(), policyListener.get(), [request.view window]);
    226223        } else
    227             request.permissionRequest->allow();
     224            request.completionHandler(true);
    228225    }
    229226}
     
    233230    Vector<GeolocationRequestData> requests = WTFMove(_requestsWaitingForCoreLocationAuthorization);
    234231    for (const auto& requestData : requests)
    235         requestData.permissionRequest->deny();
     232        requestData.completionHandler(false);
    236233}
    237234
     
    331328# pragma mark - Implementation of WKWebAllowDenyPolicyListener
    332329@implementation WKWebAllowDenyPolicyListener {
    333     RefPtr<GeolocationPermissionRequestProxy> _permissionRequestProxy;
    334 }
    335 
    336 - (id)initWithPermissionRequestProxy:(RefPtr<GeolocationPermissionRequestProxy>&&)permissionRequestProxy
     330    Function<void(bool)> _completionHandler;
     331}
     332
     333- (id)initWithCompletionHandler:(Function<void(bool)>&&)completionHandler
    337334{
    338335    self = [super init];
     
    340337        return nil;
    341338
    342     _permissionRequestProxy = WTFMove(permissionRequestProxy);
     339    _completionHandler = WTFMove(completionHandler);
    343340    return self;
    344341}
     
    346343- (void)allow
    347344{
    348     _permissionRequestProxy->allow();
     345    _completionHandler(true);
    349346}
    350347
    351348- (void)deny
    352349{
    353     _permissionRequestProxy->deny();
     350    _completionHandler(false);
    354351}
    355352
Note: See TracChangeset for help on using the changeset viewer.