Changeset 159833 in webkit


Ignore:
Timestamp:
Nov 27, 2013 8:34:08 PM (10 years ago)
Author:
weinig@apple.com
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):

Location:
trunk/Source/WebKit2
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r159832 r159833  
     12013-11-27  Sam Weinig  <sam@webkit.org>
     2
     3        Give the PageClient a chance to handle geolocation permission requests if the UIClient doesn't handle it
     4        https://bugs.webkit.org/show_bug.cgi?id=124955
     5
     6        Reviewed by Dan Bernstein.
     7
     8        Use the new PageClient function to remove the need for WKContentView to take over the WKPageUIClient.
     9
     10        * UIProcess/API/ios/PageClientImplIOS.h:
     11        * UIProcess/API/ios/PageClientImplIOS.mm:
     12        (WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest):
     13        * UIProcess/API/ios/WKContentView.mm:
     14        (-[WKContentView _decidePolicyForGeolocationRequestFromOrigin:frame:request:]):
     15        (-[WKContentView _commonInitWithProcessGroup:browsingContextGroup:]):
     16        * UIProcess/API/ios/WKContentViewInternal.h:
     17        * UIProcess/PageClient.h:
     18        (WebKit::PageClient::decidePolicyForGeolocationPermissionRequest):
     19        * UIProcess/WebPageProxy.cpp:
     20        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
     21
    1222013-11-27  Sam Weinig  <sam@webkit.org>
    223
  • trunk/Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.h

    r159724 r159833  
    5858    virtual void preferencesDidChange() OVERRIDE;
    5959    virtual void toolTipChanged(const String&, const String&) OVERRIDE;
     60    virtual bool decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, WebSecurityOrigin&, GeolocationPermissionRequestProxy&) OVERRIDE;
    6061    virtual void didChangeContentSize(const WebCore::IntSize&) OVERRIDE;
    6162    virtual void setCursor(const WebCore::Cursor&) OVERRIDE;
  • trunk/Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.mm

    r159724 r159833  
    145145}
    146146
     147bool PageClientImpl::decidePolicyForGeolocationPermissionRequest(WebFrameProxy& frame, WebSecurityOrigin& origin, GeolocationPermissionRequestProxy& request)
     148{
     149    [m_view _decidePolicyForGeolocationRequestFromOrigin:origin frame:frame request:request];
     150    return true;
     151}
     152
    147153void PageClientImpl::didChangeContentSize(const IntSize& contentsSize)
    148154{
  • trunk/Source/WebKit2/UIProcess/API/ios/WKContentView.mm

    r159724 r159833  
    3434#import "WKBrowsingContextGroupPrivate.h"
    3535#import "WKGeolocationProviderIOS.h"
     36#import "WKInteractionView.h"
    3637#import "WKProcessGroupPrivate.h"
    37 #import "WKInteractionView.h"
    3838#import "WebContext.h"
     39#import "WebFrameProxy.h"
    3940#import "WebPageGroup.h"
    4041#import "WebSystemInterface.h"
     
    148149}
    149150
    150 static void decidePolicyForGeolocationPermissionRequest(WKPageRef page, WKFrameRef frame, WKSecurityOriginRef origin, WKGeolocationPermissionRequestRef permissionRequest, const void* clientInfo)
    151 {
    152     WKContentView *view = reinterpret_cast<WKContentView *>(const_cast<void*>(clientInfo));
    153     ASSERT([view isKindOfClass:[WKContentView class]]);
    154 
    155     [[view->_processGroup _geolocationProvider] decidePolicyForGeolocationRequestFromOrigin:origin frame:frame request:permissionRequest window:[view window]];
     151- (void)_decidePolicyForGeolocationRequestFromOrigin:(WebSecurityOrigin&)origin frame:(WebFrameProxy&)frame request:(GeolocationPermissionRequestProxy&)permissionRequest
     152{
     153    [[_processGroup _geolocationProvider] decidePolicyForGeolocationRequestFromOrigin:toAPI(&origin) frame:toAPI(&frame) request:toAPI(&permissionRequest) window:[self window]];
    156154}
    157155
     
    175173    _page->setUseFixedLayout(true);
    176174
    177     WKPageUIClient pageUIClient = {
    178         kWKPageUIClientCurrentVersion,
    179         self,
    180         0, // createNewPage_deprecatedForUseWithV0
    181         0, // showPage
    182         0, // closeOtherPage
    183         0, // takeFocus
    184         0, // focus
    185         0, // unfocus
    186         0, // runJavaScriptAlert
    187         0, // runJavaScriptConfirm
    188         0, // runJavaScriptPrompt
    189         0, // setStatusText
    190         0, // mouseDidMoveOverElement_deprecatedForUseWithV0
    191         0, // missingPluginButtonClicked
    192         0, // didNotHandleKeyEvent
    193         0, // didNotHandleWheelEvent
    194         0, // toolbarsAreVisible
    195         0, // setToolbarsAreVisible
    196         0, // menuBarIsVisible
    197         0, // setMenuBarIsVisible
    198         0, // statusBarIsVisible
    199         0, // setStatusBarIsVisible
    200         0, // isResizable
    201         0, // setIsResizable
    202         0, // getWindowFrameOtherPage
    203         0, // setWindowFrameOtherPage
    204         0, // runBeforeUnloadConfirmPanel
    205         0, // didDraw
    206         0, // pageDidScroll
    207         0, // exceededDatabaseQuota
    208         0, // runOpenPanel
    209         decidePolicyForGeolocationPermissionRequest,
    210         0, // headerHeight
    211         0, // footerHeight
    212         0, // drawHeader
    213         0, // drawFooter
    214         0, // printFrame
    215         0, // runModal
    216         0, // didCompleteRubberBandForMainFrame
    217         0, // saveDataToFileInDownloadsFolder
    218         0, // shouldInterruptJavaScript
    219         0, // createOtherPage
    220         0, // mouseDidMoveOverElement
    221         0, // decidePolicyForNotificationPermissionRequest
    222         0, // unavailablePluginButtonClicked
    223         0, // showColorPicker
    224         0, // hideColorPicker
    225         0, // unavailablePluginButtonClicked
    226     };
    227     WKPageSetPageUIClient(toAPI(_page.get()), &pageUIClient);
    228 
    229175    _browsingContextController = adoptNS([[WKBrowsingContextController alloc] _initWithPageRef:toAPI(_page.get())]);
    230176    [_browsingContextController setLoadDelegateInternal:self];
  • trunk/Source/WebKit2/UIProcess/API/ios/WKContentViewInternal.h

    r159724 r159833  
    3838namespace WebKit {
    3939class DrawingAreaProxy;
     40class GeolocationPermissionRequestProxy;
    4041class LayerTreeContext;
     42class WebFrameProxy;
     43class WebSecurityOrigin;
    4144}
    4245
     
    6164- (void)_didChangeViewportArguments:(const WebCore::ViewportArguments&)viewportArguments;
    6265
     66- (void)_decidePolicyForGeolocationRequestFromOrigin:(WebKit::WebSecurityOrigin&)origin frame:(WebKit::WebFrameProxy&)frame request:(WebKit::GeolocationPermissionRequestProxy&)permissionRequest;
     67
    6368@end
  • trunk/Source/WebKit2/UIProcess/PageClient.h

    r159724 r159833  
    121121    virtual void toolTipChanged(const String&, const String&) = 0;
    122122
     123    virtual bool decidePolicyForGeolocationPermissionRequest(WebFrameProxy&, WebSecurityOrigin&, GeolocationPermissionRequestProxy&)
     124    {
     125        return false;
     126    }
     127
    123128#if USE(TILED_BACKING_STORE)
    124129    virtual void pageDidRequestScroll(const WebCore::IntPoint&) = 0;
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r159765 r159833  
    39323932    RefPtr<GeolocationPermissionRequestProxy> request = m_geolocationPermissionRequestManager.createRequest(geolocationID);
    39333933
    3934     if (!m_uiClient.decidePolicyForGeolocationPermissionRequest(this, frame, origin.get(), request.get()))
    3935         request->deny();
     3934    if (m_uiClient.decidePolicyForGeolocationPermissionRequest(this, frame, origin.get(), request.get()))
     3935        return;
     3936
     3937    if (m_pageClient->decidePolicyForGeolocationPermissionRequest(*frame, *origin, *request))
     3938        return;
     3939
     3940    request->deny();
    39363941}
    39373942
Note: See TracChangeset for help on using the changeset viewer.