Changeset 173019 in webkit
- Timestamp:
- Aug 27, 2014, 2:48:02 PM (11 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r173014 r173019 1 2014-08-27 Benjamin Poulain <bpoulain@apple.com> 2 3 [iOS WK2] Provide a delegate callback to skip Geolocation authorization per page for WebApp 4 https://bugs.webkit.org/show_bug.cgi?id=136243 5 6 Reviewed by Sam Weinig. 7 8 Just ask the UI if the authorization dialog needs to be skipped. 9 10 * UIProcess/API/Cocoa/WKUIDelegate.h: 11 * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: 12 * UIProcess/ios/PageClientImplIOS.mm: 13 (WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest): 14 15 * UIProcess/ios/WKContentView.h: 16 * UIProcess/ios/WKContentView.mm: 17 (-[WKContentView _decidePolicyForGeolocationRequestFromOrigin:frame:request:]): Deleted. 18 The code in WKContentView only exists due to legacy. Instead, the PageClient dispatch the request 19 to the GeolocationProvider directly. 20 21 * UIProcess/ios/WKGeolocationProviderIOS.h: 22 * UIProcess/ios/WKGeolocationProviderIOS.mm: 23 (-[WKGeolocationProviderIOS decidePolicyForGeolocationRequestFromOrigin:frame:request:view:]): 24 (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]): 25 (-[WKGeolocationProviderIOS positionChanged:]): 26 (-[WKGeolocationProviderIOS decidePolicyForGeolocationRequestFromOrigin:frame:request:window:]): Deleted. 27 1 28 2014-08-27 Beth Dakin <bdakin@apple.com> 2 29 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegate.h
r170214 r173019 31 31 32 32 @class WKFrameInfo; 33 @class WKNavigationAction; 33 34 @class WKWebViewConfiguration; 34 35 @class WKWindowFeatures; -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegatePrivate.h
r170320 r173019 49 49 - (void)_webView:(WKWebView *)webView didNotHandleTapAsClickAtPoint:(CGPoint)point; 50 50 - (void)_webView:(WKWebView *)webView usesMinimalUI:(BOOL)wantMinimalUI; 51 - (bool)_webView:(WKWebView *)webView shouldRequestGeolocationAuthorizationForURL:(NSURL *)url isMainFrame:(BOOL)isMainFrame mainFrameURL:(NSURL *)mainFrameURL; 51 52 #endif 52 53 -
trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm
r172966 r173019 39 39 #import "WKContentView.h" 40 40 #import "WKContentViewInteraction.h" 41 #import "WKGeolocationProviderIOS.h" 42 #import "WKProcessPoolInternal.h" 41 43 #import "WKWebViewConfigurationInternal.h" 42 44 #import "WKWebViewContentProviderRegistry.h" … … 229 231 bool PageClientImpl::decidePolicyForGeolocationPermissionRequest(WebFrameProxy& frame, WebSecurityOrigin& origin, GeolocationPermissionRequestProxy& request) 230 232 { 231 [ m_contentView _decidePolicyForGeolocationRequestFromOrigin:origin frame:frame request:request];233 [[wrapper(m_webView->_page->process().context()) _geolocationProvider] decidePolicyForGeolocationRequestFromOrigin:origin.securityOrigin() frame:frame request:request view:m_webView]; 232 234 return true; 233 235 } -
trunk/Source/WebKit2/UIProcess/ios/WKContentView.h
r171663 r173019 86 86 - (void)_didCommitLayerTree:(const WebKit::RemoteLayerTreeTransaction&)layerTreeTransaction; 87 87 88 - (void)_decidePolicyForGeolocationRequestFromOrigin:(WebKit::WebSecurityOrigin&)origin frame:(WebKit::WebFrameProxy&)frame request:(WebKit::GeolocationPermissionRequestProxy&)permissionRequest;89 90 88 - (void)_setAccessibilityWebProcessToken:(NSData *)data; 91 89 -
trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm
r171663 r173019 35 35 #import "WKBrowsingContextControllerInternal.h" 36 36 #import "WKBrowsingContextGroupPrivate.h" 37 #import "WKGeolocationProviderIOS.h"38 37 #import "WKInspectorHighlightView.h" 39 38 #import "WKPreferencesInternal.h" 40 39 #import "WKProcessGroupPrivate.h" 41 #import "WKProcessPoolInternal.h"42 40 #import "WKWebViewConfiguration.h" 43 41 #import "WKWebViewInternal.h" … … 474 472 } 475 473 476 - (void)_decidePolicyForGeolocationRequestFromOrigin:(WebSecurityOrigin&)origin frame:(WebFrameProxy&)frame request:(GeolocationPermissionRequestProxy&)permissionRequest477 {478 [[wrapper(_page->process().context()) _geolocationProvider] decidePolicyForGeolocationRequestFromOrigin:toAPI(&origin) frame:toAPI(&frame) request:toAPI(&permissionRequest) window:[self window]];479 }480 481 474 - (BOOL)_scrollToRect:(CGRect)targetRect withOrigin:(CGPoint)origin minimumScrollDistance:(CGFloat)minimumScrollDistance 482 475 { -
trunk/Source/WebKit2/UIProcess/ios/WKGeolocationProviderIOS.h
r168541 r173019 1 1 /* 2 * Copyright (C) 2012 Apple Inc. All rights reserved.2 * Copyright (C) 2012, 2014 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 30 30 31 31 namespace WebKit { 32 class GeolocationPermissionRequestProxy; 32 33 class WebContext; 34 class WebFrameProxy; 33 35 } 34 36 35 @class UIWindow; 37 namespace WebCore { 38 class SecurityOrigin; 39 } 40 41 @class WKWebView; 36 42 37 43 @interface WKGeolocationProviderIOS : NSObject 38 44 -(id)initWithContext:(WebKit::WebContext*)context; 39 -(void)decidePolicyForGeolocationRequestFromOrigin:(W KSecurityOriginRef)origin frame:(WKFrameRef)frame request:(WKGeolocationPermissionRequestRef)permissionRequest window:(UIWindow*)window;45 -(void)decidePolicyForGeolocationRequestFromOrigin:(WebCore::SecurityOrigin&)origin frame:(WebKit::WebFrameProxy&)frame request:(WebKit::GeolocationPermissionRequestProxy&)permissionRequest view:(WKWebView*)view; 40 46 @end 41 47 -
trunk/Source/WebKit2/UIProcess/ios/WKGeolocationProviderIOS.mm
r170774 r173019 1 1 /* 2 * Copyright (C) 2012 ,2014 Apple Inc. All rights reserved.2 * Copyright (C) 2012-2014 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 30 30 31 31 #import "GeolocationPermissionRequestProxy.h" 32 #import "WKUIDelegatePrivate.h" 33 #import "WKWebView.h" 32 34 #import "WebContext.h" 33 35 #import "WebGeolocationManagerProxy.h" … … 35 37 #import <WebGeolocationPosition.h> 36 38 #import <WebCore/GeolocationPosition.h> 37 #import <Web Kit/WKGeolocationPermissionRequest.h>39 #import <WebCore/URL.h> 38 40 #import <wtf/Assertions.h> 39 41 #import <wtf/PassRefPtr.h> … … 46 48 #import <WebKit/WebAllowDenyPolicyListener.h> 47 49 50 using namespace WebCore; 48 51 using namespace WebKit; 49 52 … … 60 63 61 64 namespace WebKit { 62 void decidePolicyForGeolocationRequestFromOrigin( WebCore::SecurityOrigin*, const String& urlString, id<WebAllowDenyPolicyListener>, UIWindow*);65 void decidePolicyForGeolocationRequestFromOrigin(SecurityOrigin*, const String& urlString, id<WebAllowDenyPolicyListener>, UIWindow*); 63 66 }; 64 67 65 68 struct GeolocationRequestData { 66 RefPtr< WebCore::SecurityOrigin> origin;69 RefPtr<SecurityOrigin> origin; 67 70 RefPtr<WebFrameProxy> frame; 68 71 RefPtr<GeolocationPermissionRequestProxy> permissionRequest; 69 RetainPtr< UIWindow> window;72 RetainPtr<WKWebView> view; 70 73 }; 71 74 … … 151 154 } 152 155 153 -(void)decidePolicyForGeolocationRequestFromOrigin:( WKSecurityOriginRef)origin frame:(WKFrameRef)frame request:(WKGeolocationPermissionRequestRef)permissionRequest window:(UIWindow*)window156 -(void)decidePolicyForGeolocationRequestFromOrigin:(SecurityOrigin&)origin frame:(WebFrameProxy&)frame request:(GeolocationPermissionRequestProxy&)permissionRequest view:(WKWebView*)contentView 154 157 { 155 158 // Step 1: ask the user if the app can use Geolocation. 156 159 GeolocationRequestData geolocationRequestData; 157 geolocationRequestData.origin = const_cast<WebCore::SecurityOrigin*>(&toImpl(origin)->securityOrigin());158 geolocationRequestData.frame = toImpl(frame);159 geolocationRequestData.permissionRequest = toImpl(permissionRequest);160 geolocationRequestData. window = window;160 geolocationRequestData.origin = &origin; 161 geolocationRequestData.frame = &frame; 162 geolocationRequestData.permissionRequest = &permissionRequest; 163 geolocationRequestData.view = contentView; 161 164 _requestsWaitingForCoreLocationAuthorization.append(geolocationRequestData); 162 165 [_coreLocationProvider requestGeolocationAuthorization]; … … 173 176 Vector<GeolocationRequestData> requests = WTF::move(_requestsWaitingForCoreLocationAuthorization); 174 177 for (const auto& request : requests) { 175 RetainPtr<WKWebAllowDenyPolicyListener> policyListener = adoptNS([[WKWebAllowDenyPolicyListener alloc] initWithPermissionRequestProxy:request.permissionRequest.get()]); 176 decidePolicyForGeolocationRequestFromOrigin(request.origin.get(), request.frame->url(), policyListener.get(), request.window.get()); 178 bool requiresUserAuthorization = true; 179 180 id<WKUIDelegatePrivate> uiDelegate = static_cast<id <WKUIDelegatePrivate>>([request.view UIDelegate]); 181 if ([uiDelegate respondsToSelector:@selector(_webView:shouldRequestGeolocationAuthorizationForURL:isMainFrame:mainFrameURL:)]) { 182 const WebFrameProxy* mainFrame = request.frame->page()->mainFrame(); 183 bool isMainFrame = request.frame == mainFrame; 184 URL requestFrameURL(URL(), request.frame->url()); 185 URL mainFrameURL(URL(), mainFrame->url()); 186 requiresUserAuthorization = [uiDelegate _webView:request.view.get() 187 shouldRequestGeolocationAuthorizationForURL:requestFrameURL 188 isMainFrame:isMainFrame 189 mainFrameURL:mainFrameURL]; 190 } 191 192 if (requiresUserAuthorization) { 193 RetainPtr<WKWebAllowDenyPolicyListener> policyListener = adoptNS([[WKWebAllowDenyPolicyListener alloc] initWithPermissionRequestProxy:request.permissionRequest.get()]); 194 decidePolicyForGeolocationRequestFromOrigin(request.origin.get(), request.frame->url(), policyListener.get(), [request.view window]); 195 } else 196 request.permissionRequest->allow(); 177 197 } 178 198 } … … 185 205 } 186 206 187 - (void)positionChanged:( WebCore::GeolocationPosition*)position207 - (void)positionChanged:(GeolocationPosition*)position 188 208 { 189 209 _lastActivePosition = WebGeolocationPosition::create(position->timestamp(), position->latitude(), position->longitude(), position->accuracy(), position->canProvideAltitude(), position->altitude(), position->canProvideAltitudeAccuracy(), position->altitudeAccuracy(), position->canProvideHeading(), position->heading(), position->canProvideSpeed(), position->speed());
Note:
See TracChangeset
for help on using the changeset viewer.