Changeset 163112 in webkit
- Timestamp:
- Jan 30, 2014 2:06:42 PM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r163109 r163112 1 2014-01-30 Anders Carlsson <andersca@apple.com> 2 3 Implement policy response delegate handling 4 https://bugs.webkit.org/show_bug.cgi?id=127945 5 6 Reviewed by Dan Bernstein. 7 8 * UIProcess/API/APIPolicyClient.h: 9 (API::PolicyClient::decidePolicyForResponse): 10 * UIProcess/API/C/WKPage.cpp: 11 (WKPageSetPagePolicyClient): 12 * UIProcess/API/Cocoa/WKNavigationDelegate.h: 13 (NS_ENUM): 14 * UIProcess/Cocoa/NavigationState.h: 15 * UIProcess/Cocoa/NavigationState.mm: 16 (WebKit::NavigationState::setNavigationDelegate): 17 (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction): 18 (WebKit::NavigationState::PolicyClient::decidePolicyForResponse): 19 * UIProcess/WebPageProxy.cpp: 20 (WebKit::WebPageProxy::decidePolicyForResponse): 21 1 22 2014-01-29 Dean Jackson <dino@apple.com> 2 23 -
trunk/Source/WebKit2/UIProcess/API/APIPolicyClient.h
r163108 r163112 54 54 virtual void decidePolicyForNavigationAction(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebKit::NavigationActionData&, WebKit::WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, RefPtr<WebKit::WebFramePolicyListenerProxy> listener, API::Object* userData) { listener->use(); } 55 55 virtual void decidePolicyForNewWindowAction(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, WebCore::NavigationType, WebKit::WebEvent::Modifiers, WebKit::WebMouseEvent::Button, const WebCore::ResourceRequest&, const WTF::String& frameName, WebKit::WebFramePolicyListenerProxy* listener, API::Object* userData) { listener->use(); } 56 virtual void decidePolicyForResponse(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, WebKit::WebFramePolicyListenerProxy*listener, API::Object* userData) { listener->use(); }56 virtual void decidePolicyForResponse(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, RefPtr<WebKit::WebFramePolicyListenerProxy> listener, API::Object* userData) { listener->use(); } 57 57 virtual void unableToImplementPolicy(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::ResourceError&, API::Object* userData) { } 58 58 }; -
trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp
r163108 r163112 1024 1024 } 1025 1025 1026 virtual void decidePolicyForResponse(WebPageProxy* page, WebFrameProxy* frame, const ResourceResponse& resourceResponse, const ResourceRequest& resourceRequest, bool canShowMIMEType, WebFramePolicyListenerProxy*listener, API::Object* userData) override1026 virtual void decidePolicyForResponse(WebPageProxy* page, WebFrameProxy* frame, const ResourceResponse& resourceResponse, const ResourceRequest& resourceRequest, bool canShowMIMEType, RefPtr<WebFramePolicyListenerProxy> listener, API::Object* userData) override 1027 1027 { 1028 1028 if (!m_client.decidePolicyForResponse_deprecatedForUseWithV0 && !m_client.decidePolicyForResponse) { … … 1035 1035 1036 1036 if (m_client.decidePolicyForResponse_deprecatedForUseWithV0) 1037 m_client.decidePolicyForResponse_deprecatedForUseWithV0(toAPI(page), toAPI(frame), toAPI(response.get()), toAPI(request.get()), toAPI(listener ), toAPI(userData), m_client.base.clientInfo);1037 m_client.decidePolicyForResponse_deprecatedForUseWithV0(toAPI(page), toAPI(frame), toAPI(response.get()), toAPI(request.get()), toAPI(listener.get()), toAPI(userData), m_client.base.clientInfo); 1038 1038 else 1039 m_client.decidePolicyForResponse(toAPI(page), toAPI(frame), toAPI(response.get()), toAPI(request.get()), canShowMIMEType, toAPI(listener ), toAPI(userData), m_client.base.clientInfo);1039 m_client.decidePolicyForResponse(toAPI(page), toAPI(frame), toAPI(response.get()), toAPI(request.get()), canShowMIMEType, toAPI(listener.get()), toAPI(userData), m_client.base.clientInfo); 1040 1040 } 1041 1041 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegate.h
r163108 r163112 30 30 31 31 @class WKNavigationAction; 32 @class WKNavigationResponse; 32 33 @class WKWebView; 33 34 … … 38 39 }; 39 40 41 typedef NS_ENUM(NSInteger, WKNavigationResponsePolicyDecision) { 42 WKNavigationResponsePolicyDecisionCancel, 43 WKNavigationResponsePolicyDecisionAllow, 44 WKNavigationResponsePolicyDecisionBecomeDownload 45 }; 46 40 47 @protocol WKNavigationDelegate <NSObject> 41 48 … … 43 50 44 51 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationPolicyDecision))decisionHandler; 52 - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicyDecision))decisionHandler; 45 53 46 54 @end -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h
r163108 r163112 63 63 // API::PolicyClient 64 64 virtual void decidePolicyForNavigationAction(WebPageProxy*, WebFrameProxy*, const NavigationActionData&, WebFrameProxy* originatingFrame, const WebCore::ResourceRequest& originalRequest, const WebCore::ResourceRequest&, RefPtr<WebFramePolicyListenerProxy>, API::Object* userData) override; 65 virtual void decidePolicyForResponse(WebPageProxy*, WebFrameProxy*, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, bool canShowMIMEType, RefPtr<WebFramePolicyListenerProxy>, API::Object* userData) override; 65 66 66 67 NavigationState& m_navigationState; … … 69 70 struct { 70 71 bool webViewDecidePolicyForNavigationActionDecisionHandler : 1; 72 bool webViewDecidePolicyForNavigationResponseDecisionHandler : 1; 71 73 } m_navigationDelegateMethods; 72 74 -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm
r163108 r163112 53 53 54 54 m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]; 55 m_navigationDelegateMethods.webViewDecidePolicyForNavigationResponseDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationResponse:decisionHandler:)]; 55 56 } 56 57 … … 97 98 WKNavigationAction *navigationAction = nil; 98 99 99 [navigationDelegate .get()webView:m_navigationState.m_webView decidePolicyForNavigationAction:navigationAction decisionHandler:[listener](WKNavigationPolicyDecision policyDecision) {100 [navigationDelegate webView:m_navigationState.m_webView decidePolicyForNavigationAction:navigationAction decisionHandler:[listener](WKNavigationPolicyDecision policyDecision) { 100 101 switch (policyDecision) { 101 102 case WKNavigationPolicyDecisionAllow: … … 114 115 } 115 116 117 void NavigationState::PolicyClient::decidePolicyForResponse(WebPageProxy*, WebFrameProxy*, const WebCore::ResourceResponse&, const WebCore::ResourceRequest& resourceRequest, bool canShowMIMEType, RefPtr<WebFramePolicyListenerProxy> listener, API::Object* userData) 118 { 119 if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationResponseDecisionHandler) { 120 // FIXME: <rdar://problem/15949822> Figure out what the "default delegate behavior" should be here. 121 listener->use(); 122 return; 123 } 124 125 auto navigationDelegate = m_navigationState.m_navigationDelegate.get(); 126 if (!navigationDelegate) 127 return; 128 129 // FIXME: Set up the navigation response object. 130 WKNavigationResponse *navigationResponse = nil; 131 132 [navigationDelegate webView:m_navigationState.m_webView decidePolicyForNavigationResponse:navigationResponse decisionHandler:[listener](WKNavigationResponsePolicyDecision policyDecision) { 133 switch (policyDecision) { 134 case WKNavigationResponsePolicyDecisionAllow: 135 listener->use(); 136 break; 137 138 case WKNavigationResponsePolicyDecisionCancel: 139 listener->ignore(); 140 break; 141 142 case WKNavigationResponsePolicyDecisionBecomeDownload: 143 listener->download(); 144 break; 145 } 146 }]; 147 } 148 116 149 } // namespace WebKit 117 150 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r163108 r163112 2495 2495 RefPtr<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID); 2496 2496 2497 m_policyClient->decidePolicyForResponse(this, frame, response, request, canShowMIMEType, listener.get(), userData.get());2497 m_policyClient->decidePolicyForResponse(this, frame, response, request, canShowMIMEType, std::move(listener), userData.get()); 2498 2498 } 2499 2499
Note: See TracChangeset
for help on using the changeset viewer.