Changeset 223737 in webkit


Ignore:
Timestamp:
Oct 19, 2017 7:17:46 PM (7 years ago)
Author:
achristensen@apple.com
Message:

Modernize authentication challenge handling in WebKit
https://bugs.webkit.org/show_bug.cgi?id=178555

Reviewed by Tim Horton.

  • UIProcess/API/APILoaderClient.h:

(API::LoaderClient::didReceiveAuthenticationChallengeInFrame):

  • UIProcess/API/APINavigationClient.h:

(API::NavigationClient::didReceiveAuthenticationChallenge):

  • UIProcess/API/C/WKPage.cpp:

(WKPageSetPageLoaderClient):
(WKPageSetPageNavigationClient):

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

(WebKit::NavigationState::NavigationClient::canAuthenticateAgainstProtectionSpace):
(WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):

Location:
trunk/Source/WebKit
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r223730 r223737  
     12017-10-19  Alex Christensen  <achristensen@webkit.org>
     2
     3        Modernize authentication challenge handling in WebKit
     4        https://bugs.webkit.org/show_bug.cgi?id=178555
     5
     6        Reviewed by Tim Horton.
     7
     8        * UIProcess/API/APILoaderClient.h:
     9        (API::LoaderClient::didReceiveAuthenticationChallengeInFrame):
     10        * UIProcess/API/APINavigationClient.h:
     11        (API::NavigationClient::didReceiveAuthenticationChallenge):
     12        * UIProcess/API/C/WKPage.cpp:
     13        (WKPageSetPageLoaderClient):
     14        (WKPageSetPageNavigationClient):
     15        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
     16        * UIProcess/Cocoa/NavigationState.h:
     17        * UIProcess/Cocoa/NavigationState.mm:
     18        (WebKit::NavigationState::NavigationClient::canAuthenticateAgainstProtectionSpace):
     19        (WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge):
     20        * UIProcess/WebPageProxy.cpp:
     21        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
     22
    1232017-10-19  Alex Christensen  <achristensen@webkit.org>
    224
  • trunk/Source/WebKit/UIProcess/API/APILoaderClient.h

    r222824 r223737  
    7979   
    8080    virtual bool canAuthenticateAgainstProtectionSpaceInFrame(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, WebKit::WebProtectionSpace*) { return false; }
    81     virtual void didReceiveAuthenticationChallengeInFrame(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, WebKit::AuthenticationChallengeProxy*) { }
     81    virtual void didReceiveAuthenticationChallengeInFrame(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, WebKit::AuthenticationChallengeProxy&) { }
    8282
    8383    virtual void didStartProgress(WebKit::WebPageProxy&) { }
  • trunk/Source/WebKit/UIProcess/API/APINavigationClient.h

    r222944 r223737  
    8383
    8484    virtual bool canAuthenticateAgainstProtectionSpace(WebKit::WebPageProxy&, WebKit::WebProtectionSpace*) { return false; }
    85     virtual void didReceiveAuthenticationChallenge(WebKit::WebPageProxy&, WebKit::AuthenticationChallengeProxy*) { }
     85    virtual void didReceiveAuthenticationChallenge(WebKit::WebPageProxy&, WebKit::AuthenticationChallengeProxy&) { }
    8686
    8787    // FIXME: These function should not be part of this client.
  • trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp

    r222824 r223737  
    11491149        }
    11501150
    1151         void didReceiveAuthenticationChallengeInFrame(WebPageProxy& page, WebFrameProxy& frame, AuthenticationChallengeProxy* authenticationChallenge) override
     1151        void didReceiveAuthenticationChallengeInFrame(WebPageProxy& page, WebFrameProxy& frame, AuthenticationChallengeProxy& authenticationChallenge) override
    11521152        {
    11531153            if (!m_client.didReceiveAuthenticationChallengeInFrame)
    11541154                return;
    11551155
    1156             m_client.didReceiveAuthenticationChallengeInFrame(toAPI(&page), toAPI(&frame), toAPI(authenticationChallenge), m_client.base.clientInfo);
     1156            m_client.didReceiveAuthenticationChallengeInFrame(toAPI(&page), toAPI(&frame), toAPI(&authenticationChallenge), m_client.base.clientInfo);
    11571157        }
    11581158
     
    22362236        }
    22372237       
    2238         void didReceiveAuthenticationChallenge(WebPageProxy& page, AuthenticationChallengeProxy* authenticationChallenge) override
     2238        void didReceiveAuthenticationChallenge(WebPageProxy& page, AuthenticationChallengeProxy& authenticationChallenge) override
    22392239        {
    22402240            if (!m_client.didReceiveAuthenticationChallenge)
    22412241                return;
    2242             m_client.didReceiveAuthenticationChallenge(toAPI(&page), toAPI(authenticationChallenge), m_client.base.clientInfo);
     2242            m_client.didReceiveAuthenticationChallenge(toAPI(&page), toAPI(&authenticationChallenge), m_client.base.clientInfo);
    22432243        }
    22442244
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h

    r222944 r223737  
    6161- (void)_webView:(WKWebView *)webView renderingProgressDidChange:(_WKRenderingProgressEvents)progressEvents;
    6262
    63 - (BOOL)_webView:(WKWebView *)webView canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;
    64 - (void)_webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
     63- (BOOL)_webView:(WKWebView *)webView canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace WK_API_DEPRECATED_WITH_REPLACEMENT("webView:didReceiveAuthenticationChallenge:completionHandler:", macosx(10.10, WK_MAC_TBA), ios(8.0, WK_IOS_TBA));
     64- (void)_webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge WK_API_DEPRECATED_WITH_REPLACEMENT("webView:didReceiveAuthenticationChallenge:completionHandler:", macosx(10.10, WK_MAC_TBA), ios(8.0, WK_IOS_TBA));
    6565
    6666- (void)_webViewWebProcessDidCrash:(WKWebView *)webView;
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitLoaderClient.cpp

    r222824 r223737  
    106106    }
    107107
    108     void didReceiveAuthenticationChallengeInFrame(WebPageProxy&, WebFrameProxy&, AuthenticationChallengeProxy* authenticationChallenge) override
     108    void didReceiveAuthenticationChallengeInFrame(WebPageProxy&, WebFrameProxy&, AuthenticationChallengeProxy& authenticationChallenge) override
    109109    {
    110         webkitWebViewHandleAuthenticationChallenge(m_webView, authenticationChallenge);
     110        webkitWebViewHandleAuthenticationChallenge(m_webView, &authenticationChallenge);
    111111    }
    112112
  • trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h

    r222944 r223737  
    105105
    106106        bool canAuthenticateAgainstProtectionSpace(WebPageProxy&, WebProtectionSpace*) override;
    107         void didReceiveAuthenticationChallenge(WebPageProxy&, AuthenticationChallengeProxy*) override;
     107        void didReceiveAuthenticationChallenge(WebPageProxy&, AuthenticationChallengeProxy&) override;
    108108        void processDidTerminate(WebPageProxy&, ProcessTerminationReason) override;
    109109        void processDidBecomeResponsive(WebPageProxy&) override;
  • trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm

    r222944 r223737  
    820820        return false;
    821821
     822#pragma clang diagnostic push
     823#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    822824    return [static_cast<id <WKNavigationDelegatePrivate>>(navigationDelegate.get()) _webView:m_navigationState.m_webView canAuthenticateAgainstProtectionSpace:protectionSpace->protectionSpace().nsSpace()];
    823 }
    824 
    825 void NavigationState::NavigationClient::didReceiveAuthenticationChallenge(WebPageProxy&, AuthenticationChallengeProxy* authenticationChallenge)
     825#pragma clang diagnostic pop
     826}
     827
     828void NavigationState::NavigationClient::didReceiveAuthenticationChallenge(WebPageProxy&, AuthenticationChallengeProxy& authenticationChallenge)
    826829{
    827830    if (m_navigationState.m_navigationDelegateMethods.webViewDidReceiveAuthenticationChallengeCompletionHandler) {
    828831        auto navigationDelegate = m_navigationState.m_navigationDelegate.get();
    829832        if (!navigationDelegate) {
    830             authenticationChallenge->listener()->performDefaultHandling();
     833            authenticationChallenge.listener()->performDefaultHandling();
    831834            return;
    832835        }
    833836
    834         RefPtr<AuthenticationChallengeProxy> challenge = authenticationChallenge;
    835         RefPtr<CompletionHandlerCallChecker> checker = CompletionHandlerCallChecker::create(navigationDelegate.get(), @selector(webView:didReceiveAuthenticationChallenge:completionHandler:));
    836         [static_cast<id <WKNavigationDelegatePrivate>>(navigationDelegate.get()) webView:m_navigationState.m_webView didReceiveAuthenticationChallenge:wrapper(*authenticationChallenge)
    837             completionHandler:[challenge, checker](NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential) {
    838                 if (checker->completionHandlerHasBeenCalled())
    839                     return;
    840                 checker->didCallCompletionHandler();
    841 
    842                 switch (disposition) {
    843                 case NSURLSessionAuthChallengeUseCredential: {
    844                     RefPtr<WebCredential> webCredential;
    845                     if (credential)
    846                         webCredential = WebCredential::create(WebCore::Credential(credential));
    847 
    848                     challenge->listener()->useCredential(webCredential.get());
    849                     break;
    850                 }
    851 
    852                 case NSURLSessionAuthChallengePerformDefaultHandling:
    853                     challenge->listener()->performDefaultHandling();
    854                     break;
    855 
    856                 case NSURLSessionAuthChallengeCancelAuthenticationChallenge:
    857                     challenge->listener()->cancel();
    858                     break;
    859 
    860                 case NSURLSessionAuthChallengeRejectProtectionSpace:
    861                     challenge->listener()->rejectProtectionSpaceAndContinue();
    862                     break;
    863 
    864                 default:
    865                     [NSException raise:NSInvalidArgumentException format:@"Invalid NSURLSessionAuthChallengeDisposition (%ld)", (long)disposition];
    866                 }
     837        auto checker = CompletionHandlerCallChecker::create(navigationDelegate.get(), @selector(webView:didReceiveAuthenticationChallenge:completionHandler:));
     838        [static_cast<id <WKNavigationDelegatePrivate>>(navigationDelegate.get()) webView:m_navigationState.m_webView didReceiveAuthenticationChallenge:wrapper(authenticationChallenge) completionHandler:BlockPtr<void(NSURLSessionAuthChallengeDisposition, NSURLCredential *)>::fromCallable([challenge = makeRef(authenticationChallenge), checker = WTFMove(checker)](NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential) {
     839            if (checker->completionHandlerHasBeenCalled())
     840                return;
     841            checker->didCallCompletionHandler();
     842
     843            switch (disposition) {
     844            case NSURLSessionAuthChallengeUseCredential: {
     845                RefPtr<WebCredential> webCredential;
     846                if (credential)
     847                    webCredential = WebCredential::create(WebCore::Credential(credential));
     848
     849                challenge->listener()->useCredential(webCredential.get());
     850                break;
    867851            }
    868         ];
     852
     853            case NSURLSessionAuthChallengePerformDefaultHandling:
     854                challenge->listener()->performDefaultHandling();
     855                break;
     856
     857            case NSURLSessionAuthChallengeCancelAuthenticationChallenge:
     858                challenge->listener()->cancel();
     859                break;
     860
     861            case NSURLSessionAuthChallengeRejectProtectionSpace:
     862                challenge->listener()->rejectProtectionSpaceAndContinue();
     863                break;
     864
     865            default:
     866                [NSException raise:NSInvalidArgumentException format:@"Invalid NSURLSessionAuthChallengeDisposition (%ld)", (long)disposition];
     867            }
     868        }).get()];
    869869        return;
    870870    }
     
    877877        return;
    878878
    879     [static_cast<id <WKNavigationDelegatePrivate>>(navigationDelegate.get()) _webView:m_navigationState.m_webView didReceiveAuthenticationChallenge:wrapper(*authenticationChallenge)];
     879#pragma clang diagnostic push
     880#pragma clang diagnostic ignored "-Wdeprecated-declarations"
     881    [static_cast<id <WKNavigationDelegatePrivate>>(navigationDelegate.get()) _webView:m_navigationState.m_webView didReceiveAuthenticationChallenge:wrapper(authenticationChallenge)];
     882#pragma clang diagnostic pop
    880883}
    881884
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r223436 r223737  
    58255825
    58265826    if (m_navigationClient)
    5827         m_navigationClient->didReceiveAuthenticationChallenge(*this, authenticationChallenge.ptr());
     5827        m_navigationClient->didReceiveAuthenticationChallenge(*this, authenticationChallenge.get());
    58285828    else
    5829         m_loaderClient->didReceiveAuthenticationChallengeInFrame(*this, *frame, authenticationChallenge.ptr());
     5829        m_loaderClient->didReceiveAuthenticationChallengeInFrame(*this, *frame, authenticationChallenge.get());
    58305830}
    58315831
Note: See TracChangeset for help on using the changeset viewer.