Title: [159833] trunk/Source/WebKit2
Revision
159833
Author
[email protected]
Date
2013-11-27 20:34:08 -0800 (Wed, 27 Nov 2013)

Log Message

Give the PageClient a chance to handle geolocation permission requests if the UIClient doesn't handle it
https://bugs.webkit.org/show_bug.cgi?id=124955

Reviewed by Dan Bernstein.

Use the new PageClient function to remove the need for WKContentView to take over the WKPageUIClient.

* UIProcess/API/ios/PageClientImplIOS.h:
* UIProcess/API/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest):
* UIProcess/API/ios/WKContentView.mm:
(-[WKContentView _decidePolicyForGeolocationRequestFromOrigin:frame:request:]):
(-[WKContentView _commonInitWithProcessGroup:browsingContextGroup:]):
* UIProcess/API/ios/WKContentViewInternal.h:
* UIProcess/PageClient.h:
(WebKit::PageClient::decidePolicyForGeolocationPermissionRequest):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::requestGeolocationPermissionForFrame):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (159832 => 159833)


--- trunk/Source/WebKit2/ChangeLog	2013-11-28 03:23:48 UTC (rev 159832)
+++ trunk/Source/WebKit2/ChangeLog	2013-11-28 04:34:08 UTC (rev 159833)
@@ -1,5 +1,26 @@
 2013-11-27  Sam Weinig  <[email protected]>
 
+        Give the PageClient a chance to handle geolocation permission requests if the UIClient doesn't handle it
+        https://bugs.webkit.org/show_bug.cgi?id=124955
+
+        Reviewed by Dan Bernstein.
+
+        Use the new PageClient function to remove the need for WKContentView to take over the WKPageUIClient.
+
+        * UIProcess/API/ios/PageClientImplIOS.h:
+        * UIProcess/API/ios/PageClientImplIOS.mm:
+        (WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest):
+        * UIProcess/API/ios/WKContentView.mm:
+        (-[WKContentView _decidePolicyForGeolocationRequestFromOrigin:frame:request:]):
+        (-[WKContentView _commonInitWithProcessGroup:browsingContextGroup:]):
+        * UIProcess/API/ios/WKContentViewInternal.h:
+        * UIProcess/PageClient.h:
+        (WebKit::PageClient::decidePolicyForGeolocationPermissionRequest):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
+
+2013-11-27  Sam Weinig  <[email protected]>
+
         Fix the iOS build.
 
         * UIProcess/API/ios/WKGeolocationProviderIOS.mm:

Modified: trunk/Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.h (159832 => 159833)


--- trunk/Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.h	2013-11-28 03:23:48 UTC (rev 159832)
+++ trunk/Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.h	2013-11-28 04:34:08 UTC (rev 159833)
@@ -57,6 +57,7 @@
     virtual void pageClosed() OVERRIDE;
     virtual void preferencesDidChange() OVERRIDE;
     virtual void toolTipChanged(const String&, const String&) OVERRIDE;
+    virtual bool decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, WebSecurityOrigin&, GeolocationPermissionRequestProxy&) OVERRIDE;
     virtual void didChangeContentSize(const WebCore::IntSize&) OVERRIDE;
     virtual void setCursor(const WebCore::Cursor&) OVERRIDE;
     virtual void setCursorHiddenUntilMouseMoves(bool) OVERRIDE;

Modified: trunk/Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.mm (159832 => 159833)


--- trunk/Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.mm	2013-11-28 03:23:48 UTC (rev 159832)
+++ trunk/Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.mm	2013-11-28 04:34:08 UTC (rev 159833)
@@ -144,6 +144,12 @@
     notImplemented();
 }
 
+bool PageClientImpl::decidePolicyForGeolocationPermissionRequest(WebFrameProxy& frame, WebSecurityOrigin& origin, GeolocationPermissionRequestProxy& request)
+{
+    [m_view _decidePolicyForGeolocationRequestFromOrigin:origin frame:frame request:request];
+    return true;
+}
+
 void PageClientImpl::didChangeContentSize(const IntSize& contentsSize)
 {
     [m_view _didChangeContentSize:contentsSize];

Modified: trunk/Source/WebKit2/UIProcess/API/ios/WKContentView.mm (159832 => 159833)


--- trunk/Source/WebKit2/UIProcess/API/ios/WKContentView.mm	2013-11-28 03:23:48 UTC (rev 159832)
+++ trunk/Source/WebKit2/UIProcess/API/ios/WKContentView.mm	2013-11-28 04:34:08 UTC (rev 159833)
@@ -33,9 +33,10 @@
 #import "WKBrowsingContextControllerInternal.h"
 #import "WKBrowsingContextGroupPrivate.h"
 #import "WKGeolocationProviderIOS.h"
-#import "WKProcessGroupPrivate.h"
 #import "WKInteractionView.h"
+#import "WKProcessGroupPrivate.h"
 #import "WebContext.h"
+#import "WebFrameProxy.h"
 #import "WebPageGroup.h"
 #import "WebSystemInterface.h"
 #import <QuartzCore/CALayerHost.h>
@@ -147,12 +148,9 @@
     _page->didFinishZooming(scale);
 }
 
-static void decidePolicyForGeolocationPermissionRequest(WKPageRef page, WKFrameRef frame, WKSecurityOriginRef origin, WKGeolocationPermissionRequestRef permissionRequest, const void* clientInfo)
+- (void)_decidePolicyForGeolocationRequestFromOrigin:(WebSecurityOrigin&)origin frame:(WebFrameProxy&)frame request:(GeolocationPermissionRequestProxy&)permissionRequest
 {
-    WKContentView *view = reinterpret_cast<WKContentView *>(const_cast<void*>(clientInfo));
-    ASSERT([view isKindOfClass:[WKContentView class]]);
-
-    [[view->_processGroup _geolocationProvider] decidePolicyForGeolocationRequestFromOrigin:origin frame:frame request:permissionRequest window:[view window]];
+    [[_processGroup _geolocationProvider] decidePolicyForGeolocationRequestFromOrigin:toAPI(&origin) frame:toAPI(&frame) request:toAPI(&permissionRequest) window:[self window]];
 }
 
 - (void)_commonInitWithProcessGroup:(WKProcessGroup *)processGroup browsingContextGroup:(WKBrowsingContextGroup *)browsingContextGroup
@@ -174,58 +172,6 @@
     _page->setIntrinsicDeviceScaleFactor([UIScreen mainScreen].scale);
     _page->setUseFixedLayout(true);
 
-    WKPageUIClient pageUIClient = {
-        kWKPageUIClientCurrentVersion,
-        self,
-        0, // createNewPage_deprecatedForUseWithV0
-        0, // showPage
-        0, // closeOtherPage
-        0, // takeFocus
-        0, // focus
-        0, // unfocus
-        0, // runJavaScriptAlert
-        0, // runJavaScriptConfirm
-        0, // runJavaScriptPrompt
-        0, // setStatusText
-        0, // mouseDidMoveOverElement_deprecatedForUseWithV0
-        0, // missingPluginButtonClicked
-        0, // didNotHandleKeyEvent
-        0, // didNotHandleWheelEvent
-        0, // toolbarsAreVisible
-        0, // setToolbarsAreVisible
-        0, // menuBarIsVisible
-        0, // setMenuBarIsVisible
-        0, // statusBarIsVisible
-        0, // setStatusBarIsVisible
-        0, // isResizable
-        0, // setIsResizable
-        0, // getWindowFrameOtherPage
-        0, // setWindowFrameOtherPage
-        0, // runBeforeUnloadConfirmPanel
-        0, // didDraw
-        0, // pageDidScroll
-        0, // exceededDatabaseQuota
-        0, // runOpenPanel
-        decidePolicyForGeolocationPermissionRequest,
-        0, // headerHeight
-        0, // footerHeight
-        0, // drawHeader
-        0, // drawFooter
-        0, // printFrame
-        0, // runModal
-        0, // didCompleteRubberBandForMainFrame
-        0, // saveDataToFileInDownloadsFolder
-        0, // shouldInterruptJavaScript
-        0, // createOtherPage
-        0, // mouseDidMoveOverElement
-        0, // decidePolicyForNotificationPermissionRequest
-        0, // unavailablePluginButtonClicked
-        0, // showColorPicker
-        0, // hideColorPicker
-        0, // unavailablePluginButtonClicked
-    };
-    WKPageSetPageUIClient(toAPI(_page.get()), &pageUIClient);
-
     _browsingContextController = adoptNS([[WKBrowsingContextController alloc] _initWithPageRef:toAPI(_page.get())]);
     [_browsingContextController setLoadDelegateInternal:self];
 

Modified: trunk/Source/WebKit2/UIProcess/API/ios/WKContentViewInternal.h (159832 => 159833)


--- trunk/Source/WebKit2/UIProcess/API/ios/WKContentViewInternal.h	2013-11-28 03:23:48 UTC (rev 159832)
+++ trunk/Source/WebKit2/UIProcess/API/ios/WKContentViewInternal.h	2013-11-28 04:34:08 UTC (rev 159833)
@@ -37,7 +37,10 @@
 
 namespace WebKit {
 class DrawingAreaProxy;
+class GeolocationPermissionRequestProxy;
 class LayerTreeContext;
+class WebFrameProxy;
+class WebSecurityOrigin;
 }
 
 @class WebIOSEvent;
@@ -60,4 +63,6 @@
 - (BOOL)_interpretKeyEvent:(WebIOSEvent *)theEvent isCharEvent:(BOOL)isCharEvent;
 - (void)_didChangeViewportArguments:(const WebCore::ViewportArguments&)viewportArguments;
 
+- (void)_decidePolicyForGeolocationRequestFromOrigin:(WebKit::WebSecurityOrigin&)origin frame:(WebKit::WebFrameProxy&)frame request:(WebKit::GeolocationPermissionRequestProxy&)permissionRequest;
+
 @end

Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (159832 => 159833)


--- trunk/Source/WebKit2/UIProcess/PageClient.h	2013-11-28 03:23:48 UTC (rev 159832)
+++ trunk/Source/WebKit2/UIProcess/PageClient.h	2013-11-28 04:34:08 UTC (rev 159833)
@@ -120,6 +120,11 @@
 
     virtual void toolTipChanged(const String&, const String&) = 0;
 
+    virtual bool decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, WebSecurityOrigin&, GeolocationPermissionRequestProxy&)
+    {
+        return false;
+    }
+
 #if USE(TILED_BACKING_STORE)
     virtual void pageDidRequestScroll(const WebCore::IntPoint&) = 0;
     virtual void didRenderFrame(const WebCore::IntSize& contentsSize, const WebCore::IntRect& coveredRect) = 0;

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (159832 => 159833)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2013-11-28 03:23:48 UTC (rev 159832)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2013-11-28 04:34:08 UTC (rev 159833)
@@ -3931,8 +3931,13 @@
     RefPtr<WebSecurityOrigin> origin = WebSecurityOrigin::createFromDatabaseIdentifier(originIdentifier);
     RefPtr<GeolocationPermissionRequestProxy> request = m_geolocationPermissionRequestManager.createRequest(geolocationID);
 
-    if (!m_uiClient.decidePolicyForGeolocationPermissionRequest(this, frame, origin.get(), request.get()))
-        request->deny();
+    if (m_uiClient.decidePolicyForGeolocationPermissionRequest(this, frame, origin.get(), request.get()))
+        return;
+
+    if (m_pageClient->decidePolicyForGeolocationPermissionRequest(*frame, *origin, *request))
+        return;
+
+    request->deny();
 }
 
 void WebPageProxy::requestNotificationPermission(uint64_t requestID, const String& originString)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to