Title: [221764] trunk/Source/WebKit
Revision
221764
Author
[email protected]
Date
2017-09-07 15:20:39 -0700 (Thu, 07 Sep 2017)

Log 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.

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (221763 => 221764)


--- trunk/Source/WebKit/ChangeLog	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/ChangeLog	2017-09-07 22:20:39 UTC (rev 221764)
@@ -1,5 +1,53 @@
 2017-09-07  Alex Christensen  <[email protected]>
 
+        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.
+
+2017-09-07  Alex Christensen  <[email protected]>
+
         Allow modern decoding of enums and OptionSets
         https://bugs.webkit.org/show_bug.cgi?id=176480
 

Modified: trunk/Source/WebKit/UIProcess/API/APIUIClient.h (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/API/APIUIClient.h	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/API/APIUIClient.h	2017-09-07 22:20:39 UTC (rev 221764)
@@ -44,7 +44,6 @@
 }
 
 namespace WebKit {
-class GeolocationPermissionRequestProxy;
 class NativeWebKeyboardEvent;
 class NativeWebWheelEvent;
 class NotificationPermissionRequest;
@@ -127,7 +126,7 @@
     }
 
     virtual bool runOpenPanel(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, OpenPanelParameters*, WebKit::WebOpenPanelResultListenerProxy*) { return false; }
-    virtual bool decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, WebKit::GeolocationPermissionRequestProxy&) { return false; }
+    virtual Function<void(bool)> decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, Function<void(bool)>&& completionHandler) { return WTFMove(completionHandler); }
     virtual bool decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy&) { return false; }
     virtual bool checkUserMediaPermissionForOrigin(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, SecurityOrigin&, WebKit::UserMediaPermissionCheckProxy&) { return false; }
     virtual bool decidePolicyForNotificationPermissionRequest(WebKit::WebPageProxy*, SecurityOrigin*, WebKit::NotificationPermissionRequest*) { return false; }

Modified: trunk/Source/WebKit/UIProcess/API/C/WKAPICast.h (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/API/C/WKAPICast.h	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/API/C/WKAPICast.h	2017-09-07 22:20:39 UTC (rev 221764)
@@ -77,7 +77,7 @@
 class AuthenticationChallengeProxy;
 class AuthenticationDecisionListener;
 class DownloadProxy;
-class GeolocationPermissionRequestProxy;
+class GeolocationPermissionRequest;
 class NotificationPermissionRequest;
 class UserMediaPermissionCheckProxy;
 class UserMediaPermissionRequestProxy;
@@ -131,7 +131,7 @@
 WK_ADD_API_MAPPING(WKFrameInfoRef, API::FrameInfo)
 WK_ADD_API_MAPPING(WKFrameRef, WebFrameProxy)
 WK_ADD_API_MAPPING(WKGeolocationManagerRef, WebGeolocationManagerProxy)
-WK_ADD_API_MAPPING(WKGeolocationPermissionRequestRef, GeolocationPermissionRequestProxy)
+WK_ADD_API_MAPPING(WKGeolocationPermissionRequestRef, GeolocationPermissionRequest)
 WK_ADD_API_MAPPING(WKGeolocationPositionRef, WebGeolocationPosition)
 WK_ADD_API_MAPPING(WKHitTestResultRef, API::HitTestResult)
 WK_ADD_API_MAPPING(WKIconDatabaseRef, WebIconDatabase)

Modified: trunk/Source/WebKit/UIProcess/API/C/WKGeolocationPermissionRequest.cpp (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/API/C/WKGeolocationPermissionRequest.cpp	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/API/C/WKGeolocationPermissionRequest.cpp	2017-09-07 22:20:39 UTC (rev 221764)
@@ -33,7 +33,7 @@
 
 WKTypeID WKGeolocationPermissionRequestGetTypeID()
 {
-    return toAPI(GeolocationPermissionRequestProxy::APIType);
+    return toAPI(GeolocationPermissionRequest::APIType);
 }
 
 void WKGeolocationPermissionRequestAllow(WKGeolocationPermissionRequestRef geolocationPermissionRequestRef)

Modified: trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp	2017-09-07 22:20:39 UTC (rev 221764)
@@ -1953,13 +1953,13 @@
             return true;
         }
 
-        bool decidePolicyForGeolocationPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& origin, GeolocationPermissionRequestProxy& permissionRequest) final
+        Function<void(bool)> decidePolicyForGeolocationPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& origin, Function<void(bool)>&& completionHandler) final
         {
             if (!m_client.decidePolicyForGeolocationPermissionRequest)
-                return false;
+                return WTFMove(completionHandler);
 
-            m_client.decidePolicyForGeolocationPermissionRequest(toAPI(&page), toAPI(&frame), toAPI(&origin), toAPI(&permissionRequest), m_client.base.clientInfo);
-            return true;
+            m_client.decidePolicyForGeolocationPermissionRequest(toAPI(&page), toAPI(&frame), toAPI(&origin), toAPI(GeolocationPermissionRequest::create(WTFMove(completionHandler)).ptr()), m_client.base.clientInfo);
+            return nullptr;
         }
 
         bool decidePolicyForUserMediaPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& userMediaDocumentOrigin, API::SecurityOrigin& topLevelDocumentOrigin, UserMediaPermissionRequestProxy& permissionRequest) final

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequest.cpp (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequest.cpp	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequest.cpp	2017-09-07 22:20:39 UTC (rev 221764)
@@ -60,7 +60,7 @@
 static void webkit_permission_request_interface_init(WebKitPermissionRequestIface*);
 
 struct _WebKitGeolocationPermissionRequestPrivate {
-    RefPtr<GeolocationPermissionRequestProxy> request;
+    RefPtr<GeolocationPermissionRequest> request;
     bool madeDecision;
 };
 
@@ -115,7 +115,7 @@
     objectClass->dispose = webkitGeolocationPermissionRequestDispose;
 }
 
-WebKitGeolocationPermissionRequest* webkitGeolocationPermissionRequestCreate(GeolocationPermissionRequestProxy* request)
+WebKitGeolocationPermissionRequest* webkitGeolocationPermissionRequestCreate(GeolocationPermissionRequest* request)
 {
     WebKitGeolocationPermissionRequest* geolocationPermissionRequest = WEBKIT_GEOLOCATION_PERMISSION_REQUEST(g_object_new(WEBKIT_TYPE_GEOLOCATION_PERMISSION_REQUEST, NULL));
     geolocationPermissionRequest->priv->request = request;

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequestPrivate.h (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequestPrivate.h	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitGeolocationPermissionRequestPrivate.h	2017-09-07 22:20:39 UTC (rev 221764)
@@ -21,4 +21,4 @@
 
 #include "WebKitGeolocationPermissionRequest.h"
 
-WebKitGeolocationPermissionRequest* webkitGeolocationPermissionRequestCreate(WebKit::GeolocationPermissionRequestProxy*);
+WebKitGeolocationPermissionRequest* webkitGeolocationPermissionRequestCreate(WebKit::GeolocationPermissionRequest*);

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp	2017-09-07 22:20:39 UTC (rev 221764)
@@ -182,11 +182,11 @@
         return true;
     }
 
-    bool decidePolicyForGeolocationPermissionRequest(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, GeolocationPermissionRequestProxy& permissionRequest) final
+    Function<void(bool)> decidePolicyForGeolocationPermissionRequest(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, Function<void(bool)>&& completionHandler) final
     {
-        GRefPtr<WebKitGeolocationPermissionRequest> geolocationPermissionRequest = adoptGRef(webkitGeolocationPermissionRequestCreate(&permissionRequest));
+        GRefPtr<WebKitGeolocationPermissionRequest> geolocationPermissionRequest = adoptGRef(webkitGeolocationPermissionRequestCreate(GeolocationPermissionRequest::create(WTFMove(completionHandler)).ptr()));
         webkitWebViewMakePermissionRequest(m_webView, WEBKIT_PERMISSION_REQUEST(geolocationPermissionRequest.get()));
-        return true;
+        return nullptr;
     }
 
     bool decidePolicyForUserMediaPermissionRequest(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin& userMediaDocumentOrigin, API::SecurityOrigin& topLevelDocumentOrigin, UserMediaPermissionRequestProxy& permissionRequest) override

Modified: trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestProxy.cpp (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestProxy.cpp	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestProxy.cpp	2017-09-07 22:20:39 UTC (rev 221764)
@@ -42,7 +42,7 @@
         return;
 
     m_manager->didReceiveGeolocationPermissionDecision(m_geolocationID, true);
-    m_manager = 0;
+    m_manager = nullptr;
 }
 
 void GeolocationPermissionRequestProxy::deny()
@@ -51,12 +51,12 @@
         return;
     
     m_manager->didReceiveGeolocationPermissionDecision(m_geolocationID, false);
-    m_manager = 0;
+    m_manager = nullptr;
 }
 
 void GeolocationPermissionRequestProxy::invalidate()
 {
-    m_manager = 0;
+    m_manager = nullptr;
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestProxy.h (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestProxy.h	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestProxy.h	2017-09-07 22:20:39 UTC (rev 221764)
@@ -23,16 +23,16 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef GeolocationPermissionRequestProxy_h
-#define GeolocationPermissionRequestProxy_h
+#pragma once
 
 #include "APIObject.h"
+#include <wtf/Function.h>
 
 namespace WebKit {
 
 class GeolocationPermissionRequestManagerProxy;
 
-class GeolocationPermissionRequestProxy : public API::ObjectImpl<API::Object::Type::GeolocationPermissionRequest> {
+class GeolocationPermissionRequestProxy : public RefCounted<GeolocationPermissionRequestProxy> {
 public:
     static Ref<GeolocationPermissionRequestProxy> create(GeolocationPermissionRequestManagerProxy* manager, uint64_t geolocationID)
     {
@@ -51,6 +51,22 @@
     uint64_t m_geolocationID;
 };
 
+class GeolocationPermissionRequest : public API::ObjectImpl<API::Object::Type::GeolocationPermissionRequest> {
+public:
+    static Ref<GeolocationPermissionRequest> create(Function<void(bool)>&& completionHandler)
+    {
+        return adoptRef(*new GeolocationPermissionRequest(WTFMove(completionHandler)));
+    }
+    
+    void allow() { m_completionHandler(true); }
+    void deny() { m_completionHandler(false); }
+
+private:
+    GeolocationPermissionRequest(Function<void(bool)>&& completionHandler)
+        : m_completionHandler(WTFMove(completionHandler))
+    { }
+    
+    Function<void(bool)> m_completionHandler;
+};
+
 } // namespace WebKit
-
-#endif // GeolocationPermissionRequestProxy_h

Modified: trunk/Source/WebKit/UIProcess/PageClient.h (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/PageClient.h	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/PageClient.h	2017-09-07 22:20:39 UTC (rev 221764)
@@ -141,10 +141,10 @@
 
     virtual void toolTipChanged(const String&, const String&) = 0;
 
-    virtual bool decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, API::SecurityOrigin&, GeolocationPermissionRequestProxy&)
-    {
-        return false;
-    }
+#if PLATFORM(IOS)
+    // FIXME: Adopt the WKUIDelegatePrivate callback on iOS and remove this.
+    virtual Function<void(bool)> decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, API::SecurityOrigin&, Function<void(bool)>&&) = 0;
+#endif
 
     virtual void didStartProvisionalLoadForMainFrame() { };
     virtual void didFailProvisionalLoadForMainFrame() { };

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-09-07 22:20:39 UTC (rev 221764)
@@ -5811,14 +5811,24 @@
     // FIXME: Geolocation should probably be using toString() as its string representation instead of databaseIdentifier().
     auto origin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(originIdentifier)->securityOrigin());
     auto request = m_geolocationPermissionRequestManager.createRequest(geolocationID);
+    Function<void(bool)> completionHandler = [request = WTFMove(request)](bool allowed) {
+        if (allowed)
+            request->allow();
+        else
+            request->deny();
+    };
 
-    if (m_uiClient->decidePolicyForGeolocationPermissionRequest(*this, *frame, origin.get(), request.get()))
-        return;
-
-    if (m_pageClient.decidePolicyForGeolocationPermissionRequest(*frame, origin.get(), request.get()))
-        return;
-
-    request->deny();
+    // FIXME: Once iOS migrates to the new WKUIDelegate SPI, clean this up
+    // and make it one UIClient call that calls the completionHandler with false
+    // if there is no delegate instead of returning the completionHandler
+    // for other code paths to try.
+    completionHandler = m_uiClient->decidePolicyForGeolocationPermissionRequest(*this, *frame, origin.get(), WTFMove(completionHandler));
+#if PLATFORM(IOS)
+    if (completionHandler)
+        completionHandler = m_pageClient.decidePolicyForGeolocationPermissionRequest(*frame, origin.get(), WTFMove(completionHandler));
+#endif
+    if (completionHandler)
+        completionHandler(false);
 }
 
 #if ENABLE(MEDIA_STREAM)

Modified: trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h	2017-09-07 22:20:39 UTC (rev 221764)
@@ -63,7 +63,7 @@
     void pageClosed() override;
     void preferencesDidChange() override;
     void toolTipChanged(const String&, const String&) override;
-    bool decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, API::SecurityOrigin&, GeolocationPermissionRequestProxy&) override;
+    Function<void(bool)> decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, API::SecurityOrigin&, Function<void(bool)>&&) override;
     void didStartProvisionalLoadForMainFrame() override;
     void didFailProvisionalLoadForMainFrame() override;
     void didCommitLoadForMainFrame(const String& mimeType, bool useCustomContentProvider) override;

Modified: trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm	2017-09-07 22:20:39 UTC (rev 221764)
@@ -237,10 +237,10 @@
     [m_contentView _didCompleteSyntheticClick];
 }
 
-bool PageClientImpl::decidePolicyForGeolocationPermissionRequest(WebFrameProxy& frame, API::SecurityOrigin& origin, GeolocationPermissionRequestProxy& request)
+Function<void(bool)> PageClientImpl::decidePolicyForGeolocationPermissionRequest(WebFrameProxy& frame, API::SecurityOrigin& origin, Function<void(bool)>&& completionHandler)
 {
-    [[wrapper(m_webView->_page->process().processPool()) _geolocationProvider] decidePolicyForGeolocationRequestFromOrigin:origin.securityOrigin() frame:frame request:request view:m_webView];
-    return true;
+    [[wrapper(m_webView->_page->process().processPool()) _geolocationProvider] decidePolicyForGeolocationRequestFromOrigin:origin.securityOrigin() frame:frame completionHandler:WTFMove(completionHandler) view:m_webView];
+    return nullptr;
 }
 
 void PageClientImpl::didStartProvisionalLoadForMainFrame()

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentView.h (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/ios/WKContentView.h	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentView.h	2017-09-07 22:20:39 UTC (rev 221764)
@@ -43,7 +43,6 @@
 
 namespace WebKit {
 class DrawingAreaProxy;
-class GeolocationPermissionRequestProxy;
 class RemoteLayerTreeTransaction;
 class WebFrameProxy;
 class WebPageProxy;

Modified: trunk/Source/WebKit/UIProcess/ios/WKGeolocationProviderIOS.h (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/ios/WKGeolocationProviderIOS.h	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/ios/WKGeolocationProviderIOS.h	2017-09-07 22:20:39 UTC (rev 221764)
@@ -27,9 +27,9 @@
 
 #import <Foundation/NSObject.h>
 #import <WebKit/WKBase.h>
+#import <wtf/Function.h>
 
 namespace WebKit {
-class GeolocationPermissionRequestProxy;
 class WebFrameProxy;
 class WebProcessPool;
 }
@@ -42,7 +42,7 @@
 
 @interface WKGeolocationProviderIOS : NSObject
 -(id)initWithProcessPool:(WebKit::WebProcessPool&)processPool;
--(void)decidePolicyForGeolocationRequestFromOrigin:(WebCore::SecurityOrigin&)origin frame:(WebKit::WebFrameProxy&)frame request:(WebKit::GeolocationPermissionRequestProxy&)permissionRequest view:(WKWebView*)view;
+-(void)decidePolicyForGeolocationRequestFromOrigin:(WebCore::SecurityOrigin&)origin frame:(WebKit::WebFrameProxy&)frame completionHandler:(Function<void(bool)>&&)completionHandler view:(WKWebView*)view;
 @end
 
 #endif // PLATFORM(IOS)

Modified: trunk/Source/WebKit/UIProcess/ios/WKGeolocationProviderIOS.mm (221763 => 221764)


--- trunk/Source/WebKit/UIProcess/ios/WKGeolocationProviderIOS.mm	2017-09-07 22:08:44 UTC (rev 221763)
+++ trunk/Source/WebKit/UIProcess/ios/WKGeolocationProviderIOS.mm	2017-09-07 22:20:39 UTC (rev 221764)
@@ -31,7 +31,6 @@
 #import "APIFrameInfo.h"
 #import "APISecurityOrigin.h"
 #import "CompletionHandlerCallChecker.h"
-#import "GeolocationPermissionRequestProxy.h"
 #import "WKFrameInfoInternal.h"
 #import "WKGeolocationManager.h"
 #import "WKProcessPoolInternal.h"
@@ -67,7 +66,7 @@
 @end
 
 @interface WKWebAllowDenyPolicyListener : NSObject<WebAllowDenyPolicyListener>
-- (id)initWithPermissionRequestProxy:(RefPtr<GeolocationPermissionRequestProxy>&&)permissionRequestProxy;
+- (id)initWithCompletionHandler:(Function<void(bool)>&&)completionHandler;
 - (void)denyOnlyThisRequest NO_RETURN_DUE_TO_ASSERT;
 @end
 
@@ -83,7 +82,7 @@
 struct GeolocationRequestData {
     RefPtr<SecurityOrigin> origin;
     RefPtr<WebFrameProxy> frame;
-    RefPtr<GeolocationPermissionRequestProxy> permissionRequest;
+    Function<void(bool)> completionHandler;
     RetainPtr<WKWebView> view;
 };
 
@@ -168,15 +167,15 @@
     return self;
 }
 
--(void)decidePolicyForGeolocationRequestFromOrigin:(SecurityOrigin&)origin frame:(WebFrameProxy&)frame request:(GeolocationPermissionRequestProxy&)permissionRequest view:(WKWebView*)contentView
+-(void)decidePolicyForGeolocationRequestFromOrigin:(SecurityOrigin&)origin frame:(WebFrameProxy&)frame completionHandler:(Function<void(bool)>&&)completionHandler view:(WKWebView*)contentView
 {
     // Step 1: ask the user if the app can use Geolocation.
     GeolocationRequestData geolocationRequestData;
     geolocationRequestData.origin = &origin;
     geolocationRequestData.frame = &frame;
-    geolocationRequestData.permissionRequest = &permissionRequest;
+    geolocationRequestData.completionHandler = WTFMove(completionHandler);
     geolocationRequestData.view = contentView;
-    _requestsWaitingForCoreLocationAuthorization.append(geolocationRequestData);
+    _requestsWaitingForCoreLocationAuthorization.append(WTFMove(geolocationRequestData));
     [_coreLocationProvider requestGeolocationAuthorization];
 }
 @end
@@ -189,7 +188,7 @@
 {
     // Step 2: ask the user if the this particular page can use gelocation.
     Vector<GeolocationRequestData> requests = WTFMove(_requestsWaitingForCoreLocationAuthorization);
-    for (const auto& request : requests) {
+    for (auto& request : requests) {
         bool requiresUserAuthorization = true;
 
         id<WKUIDelegatePrivate> uiDelegate = static_cast<id <WKUIDelegatePrivate>>([request.view UIDelegate]);
@@ -197,14 +196,12 @@
             URL requestFrameURL(URL(), request.frame->url());
             RetainPtr<WKFrameInfo> frameInfo = wrapper(API::FrameInfo::create(*request.frame.get(), *request.origin.get()));
             RefPtr<CompletionHandlerCallChecker> checker = CompletionHandlerCallChecker::create(uiDelegate, @selector(_webView:requestGeolocationAuthorizationForURL:frame:decisionHandler:));
-            [uiDelegate _webView:request.view.get() requestGeolocationAuthorizationForURL:requestFrameURL frame:frameInfo.get() decisionHandler:BlockPtr<void(BOOL)>::fromCallable([request, checker = WTFMove(checker)](BOOL authorized) {
+            WKWebView *viewFromRequest = request.view.get();
+            [uiDelegate _webView:viewFromRequest requestGeolocationAuthorizationForURL:requestFrameURL frame:frameInfo.get() decisionHandler:BlockPtr<void(BOOL)>::fromCallable([request = WTFMove(request), checker = WTFMove(checker)](BOOL authorized) {
                 if (checker->completionHandlerHasBeenCalled())
                     return;
-                if (authorized)
-                    request.permissionRequest->allow();
-                else
-                    request.permissionRequest->deny();
                 checker->didCallCompletionHandler();
+                request.completionHandler(authorized);
             }).get()];
             return;
         }
@@ -221,10 +218,10 @@
         }
 
         if (requiresUserAuthorization) {
-            RetainPtr<WKWebAllowDenyPolicyListener> policyListener = adoptNS([[WKWebAllowDenyPolicyListener alloc] initWithPermissionRequestProxy:request.permissionRequest.get()]);
+            RetainPtr<WKWebAllowDenyPolicyListener> policyListener = adoptNS([[WKWebAllowDenyPolicyListener alloc] initWithCompletionHandler:WTFMove(request.completionHandler)]);
             decidePolicyForGeolocationRequestFromOrigin(request.origin.get(), request.frame->url(), policyListener.get(), [request.view window]);
         } else
-            request.permissionRequest->allow();
+            request.completionHandler(true);
     }
 }
 
@@ -232,7 +229,7 @@
 {
     Vector<GeolocationRequestData> requests = WTFMove(_requestsWaitingForCoreLocationAuthorization);
     for (const auto& requestData : requests)
-        requestData.permissionRequest->deny();
+        requestData.completionHandler(false);
 }
 
 - (void)positionChanged:(_WKGeolocationPosition *)position
@@ -330,27 +327,27 @@
 
 # pragma mark - Implementation of WKWebAllowDenyPolicyListener
 @implementation WKWebAllowDenyPolicyListener {
-    RefPtr<GeolocationPermissionRequestProxy> _permissionRequestProxy;
+    Function<void(bool)> _completionHandler;
 }
 
-- (id)initWithPermissionRequestProxy:(RefPtr<GeolocationPermissionRequestProxy>&&)permissionRequestProxy
+- (id)initWithCompletionHandler:(Function<void(bool)>&&)completionHandler
 {
     self = [super init];
     if (!self)
         return nil;
 
-    _permissionRequestProxy = WTFMove(permissionRequestProxy);
+    _completionHandler = WTFMove(completionHandler);
     return self;
 }
 
 - (void)allow
 {
-    _permissionRequestProxy->allow();
+    _completionHandler(true);
 }
 
 - (void)deny
 {
-    _permissionRequestProxy->deny();
+    _completionHandler(false);
 }
 
 - (void)denyOnlyThisRequest
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to