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