Changeset 163112 in webkit


Ignore:
Timestamp:
Jan 30, 2014 2:06:42 PM (10 years ago)
Author:
andersca@apple.com
Message:

Implement policy response delegate handling
https://bugs.webkit.org/show_bug.cgi?id=127945

Reviewed by Dan Bernstein.

  • UIProcess/API/APIPolicyClient.h:

(API::PolicyClient::decidePolicyForResponse):

  • UIProcess/API/C/WKPage.cpp:

(WKPageSetPagePolicyClient):

  • UIProcess/API/Cocoa/WKNavigationDelegate.h:

(NS_ENUM):

  • UIProcess/Cocoa/NavigationState.h:
  • UIProcess/Cocoa/NavigationState.mm:

(WebKit::NavigationState::setNavigationDelegate):
(WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
(WebKit::NavigationState::PolicyClient::decidePolicyForResponse):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::decidePolicyForResponse):

Location:
trunk/Source/WebKit2
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r163109 r163112  
     12014-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
    1222014-01-29  Dean Jackson  <dino@apple.com>
    223
  • trunk/Source/WebKit2/UIProcess/API/APIPolicyClient.h

    r163108 r163112  
    5454    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(); }
    5555    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(); }
    5757    virtual void unableToImplementPolicy(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::ResourceError&, API::Object* userData) { }
    5858};
  • trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp

    r163108 r163112  
    10241024        }
    10251025
    1026         virtual void decidePolicyForResponse(WebPageProxy* page, WebFrameProxy* frame, const ResourceResponse& resourceResponse, const ResourceRequest& resourceRequest, bool canShowMIMEType, WebFramePolicyListenerProxy* listener, API::Object* userData) override
     1026        virtual void decidePolicyForResponse(WebPageProxy* page, WebFrameProxy* frame, const ResourceResponse& resourceResponse, const ResourceRequest& resourceRequest, bool canShowMIMEType, RefPtr<WebFramePolicyListenerProxy> listener, API::Object* userData) override
    10271027        {
    10281028            if (!m_client.decidePolicyForResponse_deprecatedForUseWithV0 && !m_client.decidePolicyForResponse) {
     
    10351035
    10361036            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);
    10381038            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);
    10401040        }
    10411041
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationDelegate.h

    r163108 r163112  
    3030
    3131@class WKNavigationAction;
     32@class WKNavigationResponse;
    3233@class WKWebView;
    3334
     
    3839};
    3940
     41typedef NS_ENUM(NSInteger, WKNavigationResponsePolicyDecision) {
     42    WKNavigationResponsePolicyDecisionCancel,
     43    WKNavigationResponsePolicyDecisionAllow,
     44    WKNavigationResponsePolicyDecisionBecomeDownload
     45};
     46
    4047@protocol WKNavigationDelegate <NSObject>
    4148
     
    4350
    4451- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationPolicyDecision))decisionHandler;
     52- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicyDecision))decisionHandler;
    4553
    4654@end
  • trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h

    r163108 r163112  
    6363        // API::PolicyClient
    6464        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;
    6566
    6667        NavigationState& m_navigationState;
     
    6970    struct {
    7071        bool webViewDecidePolicyForNavigationActionDecisionHandler : 1;
     72        bool webViewDecidePolicyForNavigationResponseDecisionHandler : 1;
    7173    } m_navigationDelegateMethods;
    7274
  • trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm

    r163108 r163112  
    5353
    5454    m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)];
     55    m_navigationDelegateMethods.webViewDecidePolicyForNavigationResponseDecisionHandler = [delegate respondsToSelector:@selector(webView:decidePolicyForNavigationResponse:decisionHandler:)];
    5556}
    5657
     
    9798    WKNavigationAction *navigationAction = nil;
    9899
    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) {
    100101        switch (policyDecision) {
    101102        case WKNavigationPolicyDecisionAllow:
     
    114115}
    115116
     117void 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
    116149} // namespace WebKit
    117150
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r163108 r163112  
    24952495    RefPtr<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID);
    24962496
    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());
    24982498}
    24992499
Note: See TracChangeset for help on using the changeset viewer.