Title: [287628] branches/safari-612-branch
Revision
287628
Author
repst...@apple.com
Date
2022-01-05 10:21:08 -0800 (Wed, 05 Jan 2022)

Log Message

Cherry-pick r287039. rdar://problem/85015428

    Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask
    https://bugs.webkit.org/show_bug.cgi?id=234280
    Source/WebKit:

    <rdar://85015428>

    Reviewed by Brady Eidson.

    A NetworkLoad synchronously failing has caused several issues.
    This issue is when a WKDownload is prevented in this way, we don't have a WKDownload in the UI process yet,
    and we haven't assigned it an identifier in the network process yet either, so we dereference null and send
    unreceived messages in many places.  To fix this issue, I move the FTP check to the NetworkDataTask constructor
    like we do with blocked port checks and invalid URL checks.  I also found that there is a race condition with
    CFNetwork also failing to load an empty FTP URL, so we need to prevent us from asking CFNetwork to start a load
    for which we have scheduled a failure.

    Covered by an API test which used to hit all the horrible failures and now passes reliably.

    * NetworkProcess/NetworkCORSPreflightChecker.cpp:
    (WebKit::NetworkCORSPreflightChecker::wasBlockedByDisabledFTP):
    * NetworkProcess/NetworkCORSPreflightChecker.h:
    * NetworkProcess/NetworkDataTask.cpp:
    (WebKit::NetworkDataTask::NetworkDataTask):
    (WebKit::NetworkDataTask::scheduleFailure):
    * NetworkProcess/NetworkDataTask.h:
    * NetworkProcess/NetworkLoad.cpp:
    (WebKit::NetworkLoad::start):
    (WebKit::NetworkLoad::wasBlockedByDisabledFTP):
    * NetworkProcess/NetworkLoad.h:
    * NetworkProcess/PingLoad.cpp:
    (WebKit::PingLoad::wasBlockedByDisabledFTP):
    * NetworkProcess/PingLoad.h:
    * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
    (WebKit::NetworkDataTaskCocoa::resume):
    * Shared/WebErrors.cpp:
    (WebKit::ftpDisabledError):
    * Shared/WebErrors.h:

    Tools:

    Reviewed by Brady Eidson.

    * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@287039 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-612-branch/Source/WebKit/ChangeLog (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/ChangeLog	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/ChangeLog	2022-01-05 18:21:08 UTC (rev 287628)
@@ -1,5 +1,93 @@
 2022-01-05  Russell Epstein  <repst...@apple.com>
 
+        Cherry-pick r287039. rdar://problem/85015428
+
+    Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask
+    https://bugs.webkit.org/show_bug.cgi?id=234280
+    Source/WebKit:
+    
+    <rdar://85015428>
+    
+    Reviewed by Brady Eidson.
+    
+    A NetworkLoad synchronously failing has caused several issues.
+    This issue is when a WKDownload is prevented in this way, we don't have a WKDownload in the UI process yet,
+    and we haven't assigned it an identifier in the network process yet either, so we dereference null and send
+    unreceived messages in many places.  To fix this issue, I move the FTP check to the NetworkDataTask constructor
+    like we do with blocked port checks and invalid URL checks.  I also found that there is a race condition with
+    CFNetwork also failing to load an empty FTP URL, so we need to prevent us from asking CFNetwork to start a load
+    for which we have scheduled a failure.
+    
+    Covered by an API test which used to hit all the horrible failures and now passes reliably.
+    
+    * NetworkProcess/NetworkCORSPreflightChecker.cpp:
+    (WebKit::NetworkCORSPreflightChecker::wasBlockedByDisabledFTP):
+    * NetworkProcess/NetworkCORSPreflightChecker.h:
+    * NetworkProcess/NetworkDataTask.cpp:
+    (WebKit::NetworkDataTask::NetworkDataTask):
+    (WebKit::NetworkDataTask::scheduleFailure):
+    * NetworkProcess/NetworkDataTask.h:
+    * NetworkProcess/NetworkLoad.cpp:
+    (WebKit::NetworkLoad::start):
+    (WebKit::NetworkLoad::wasBlockedByDisabledFTP):
+    * NetworkProcess/NetworkLoad.h:
+    * NetworkProcess/PingLoad.cpp:
+    (WebKit::PingLoad::wasBlockedByDisabledFTP):
+    * NetworkProcess/PingLoad.h:
+    * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
+    (WebKit::NetworkDataTaskCocoa::resume):
+    * Shared/WebErrors.cpp:
+    (WebKit::ftpDisabledError):
+    * Shared/WebErrors.h:
+    
+    Tools:
+    
+    Reviewed by Brady Eidson.
+    
+    * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@287039 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-12-14  Alex Christensen  <achristen...@webkit.org>
+
+            Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask
+            https://bugs.webkit.org/show_bug.cgi?id=234280
+            <rdar://85015428>
+
+            Reviewed by Brady Eidson.
+
+            A NetworkLoad synchronously failing has caused several issues.
+            This issue is when a WKDownload is prevented in this way, we don't have a WKDownload in the UI process yet,
+            and we haven't assigned it an identifier in the network process yet either, so we dereference null and send
+            unreceived messages in many places.  To fix this issue, I move the FTP check to the NetworkDataTask constructor
+            like we do with blocked port checks and invalid URL checks.  I also found that there is a race condition with
+            CFNetwork also failing to load an empty FTP URL, so we need to prevent us from asking CFNetwork to start a load
+            for which we have scheduled a failure.
+
+            Covered by an API test which used to hit all the horrible failures and now passes reliably.
+
+            * NetworkProcess/NetworkCORSPreflightChecker.cpp:
+            (WebKit::NetworkCORSPreflightChecker::wasBlockedByDisabledFTP):
+            * NetworkProcess/NetworkCORSPreflightChecker.h:
+            * NetworkProcess/NetworkDataTask.cpp:
+            (WebKit::NetworkDataTask::NetworkDataTask):
+            (WebKit::NetworkDataTask::scheduleFailure):
+            * NetworkProcess/NetworkDataTask.h:
+            * NetworkProcess/NetworkLoad.cpp:
+            (WebKit::NetworkLoad::start):
+            (WebKit::NetworkLoad::wasBlockedByDisabledFTP):
+            * NetworkProcess/NetworkLoad.h:
+            * NetworkProcess/PingLoad.cpp:
+            (WebKit::PingLoad::wasBlockedByDisabledFTP):
+            * NetworkProcess/PingLoad.h:
+            * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
+            (WebKit::NetworkDataTaskCocoa::resume):
+            * Shared/WebErrors.cpp:
+            (WebKit::ftpDisabledError):
+            * Shared/WebErrors.h:
+
+2022-01-05  Russell Epstein  <repst...@apple.com>
+
         Cherry-pick r285431. rdar://problem/87124705
 
     WKSyntheticTapGestureRecognizer's action targets should be weak pointers

Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp	2022-01-05 18:21:08 UTC (rev 287628)
@@ -32,6 +32,7 @@
 #include "NetworkLoadParameters.h"
 #include "NetworkProcess.h"
 #include "NetworkResourceLoader.h"
+#include "WebErrors.h"
 #include <WebCore/CrossOriginAccessControl.h>
 #include <WebCore/SecurityOrigin.h>
 
@@ -172,6 +173,11 @@
     m_completionCallback(ResourceError { errorDomainWebKitInternal, 0, m_parameters.originalRequest.url(), "Preflight response was blocked"_s, ResourceError::Type::AccessControl });
 }
 
+void NetworkCORSPreflightChecker::wasBlockedByDisabledFTP()
+{
+    m_completionCallback(ftpDisabledError(m_parameters.originalRequest));
+}
+
 NetworkTransactionInformation NetworkCORSPreflightChecker::takeInformation()
 {
     ASSERT(m_shouldCaptureExtraNetworkLoadMetrics);

Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h	2022-01-05 18:21:08 UTC (rev 287628)
@@ -77,6 +77,7 @@
     void wasBlocked() final;
     void cannotShowURL() final;
     void wasBlockedByRestrictions() final;
+    void wasBlockedByDisabledFTP() final;
 
     Parameters m_parameters;
     Ref<NetworkProcess> m_networkProcess;

Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkDataTask.cpp (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkDataTask.cpp	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkDataTask.cpp	2022-01-05 18:21:08 UTC (rev 287628)
@@ -76,14 +76,20 @@
     ASSERT(RunLoop::isMain());
 
     if (!requestWithCredentials.url().isValid()) {
-        scheduleFailure(InvalidURLFailure);
+        scheduleFailure(FailureType::InvalidURL);
         return;
     }
 
     if (!portAllowed(requestWithCredentials.url())) {
-        scheduleFailure(BlockedFailure);
+        scheduleFailure(FailureType::Blocked);
         return;
     }
+
+    if (!session.networkProcess().ftpEnabled()
+        && requestWithCredentials.url().protocolIsInFTPFamily()) {
+        scheduleFailure(FailureType::FTPDisabled);
+        return;
+    }
 }
 
 NetworkDataTask::~NetworkDataTask()
@@ -94,20 +100,23 @@
 
 void NetworkDataTask::scheduleFailure(FailureType type)
 {
+    m_failureScheduled = true;
     RunLoop::main().dispatch([this, weakThis = makeWeakPtr(*this), type] {
         if (!weakThis || !m_client)
             return;
 
         switch (type) {
-        case BlockedFailure:
+        case FailureType::Blocked:
             m_client->wasBlocked();
             return;
-        case InvalidURLFailure:
+        case FailureType::InvalidURL:
             m_client->cannotShowURL();
             return;
-        case RestrictedURLFailure:
+        case FailureType::RestrictedURL:
             m_client->wasBlockedByRestrictions();
             return;
+        case FailureType::FTPDisabled:
+            m_client->wasBlockedByDisabledFTP();
         }
     });
 }

Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkDataTask.h (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkDataTask.h	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkDataTask.h	2022-01-05 18:21:08 UTC (rev 287628)
@@ -69,6 +69,7 @@
     virtual void wasBlocked() = 0;
     virtual void cannotShowURL() = 0;
     virtual void wasBlockedByRestrictions() = 0;
+    virtual void wasBlockedByDisabledFTP() = 0;
 
     virtual bool shouldCaptureExtraNetworkLoadMetrics() const { return false; }
 
@@ -145,10 +146,11 @@
 protected:
     NetworkDataTask(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation);
 
-    enum FailureType {
-        BlockedFailure,
-        InvalidURLFailure,
-        RestrictedURLFailure
+    enum class FailureType : uint8_t {
+        Blocked,
+        InvalidURL,
+        RestrictedURL,
+        FTPDisabled
     };
     void scheduleFailure(FailureType);
 
@@ -172,6 +174,7 @@
     bool m_shouldClearReferrerOnHTTPSToHTTPRedirect { true };
     String m_suggestedFilename;
     bool m_dataTaskIsForMainFrameNavigation { false };
+    bool m_failureScheduled { false };
 };
 
 } // namespace WebKit

Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkLoad.cpp (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkLoad.cpp	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkLoad.cpp	2022-01-05 18:21:08 UTC (rev 287628)
@@ -60,15 +60,6 @@
 {
     if (!m_task)
         return;
-
-    if (!m_networkProcess->ftpEnabled() && m_parameters.request.url().protocolIsInFTPFamily()) {
-        m_task->clearClient();
-        m_task = nullptr;
-        WebCore::NetworkLoadMetrics emptyMetrics;
-        didCompleteWithError(ResourceError { errorDomainWebKitInternal, 0, url(), "FTP URLs are disabled"_s, ResourceError::Type::AccessControl }, emptyMetrics);
-        return;
-    }
-
     m_task->resume();
 }
 
@@ -296,6 +287,11 @@
     m_client.get().didFailLoading(wasBlockedByRestrictionsError(m_currentRequest));
 }
 
+void NetworkLoad::wasBlockedByDisabledFTP()
+{
+    m_client.get().didFailLoading(ftpDisabledError(m_currentRequest));
+}
+
 void NetworkLoad::didNegotiateModernTLS(const URL& url)
 {
     if (m_parameters.webPageProxyID)

Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkLoad.h (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkLoad.h	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkLoad.h	2022-01-05 18:21:08 UTC (rev 287628)
@@ -86,6 +86,7 @@
     void wasBlocked() final;
     void cannotShowURL() final;
     void wasBlockedByRestrictions() final;
+    void wasBlockedByDisabledFTP() final;
     void didNegotiateModernTLS(const URL&) final;
 
     void notifyDidReceiveResponse(WebCore::ResourceResponse&&, NegotiatedLegacyTLS, ResponseCompletionHandler&&);

Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/PingLoad.cpp (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/NetworkProcess/PingLoad.cpp	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/PingLoad.cpp	2022-01-05 18:21:08 UTC (rev 287628)
@@ -210,6 +210,12 @@
     didFinish(wasBlockedByRestrictionsError(ResourceRequest { currentURL() }));
 }
 
+void PingLoad::wasBlockedByDisabledFTP()
+{
+    PING_RELEASE_LOG("wasBlockedByDisabledFTP");
+    didFinish(ftpDisabledError(ResourceRequest(currentURL())));
+}
+
 void PingLoad::timeoutTimerFired()
 {
     PING_RELEASE_LOG("timeoutTimerFired");

Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/PingLoad.h (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/NetworkProcess/PingLoad.h	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/PingLoad.h	2022-01-05 18:21:08 UTC (rev 287628)
@@ -60,6 +60,7 @@
     void wasBlocked() final;
     void cannotShowURL() final;
     void wasBlockedByRestrictions() final;
+    void wasBlockedByDisabledFTP() final;
     void timeoutTimerFired();
 
     void loadRequest(NetworkProcess&, WebCore::ResourceRequest&&);

Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm	2022-01-05 18:21:08 UTC (rev 287628)
@@ -639,12 +639,15 @@
 {
     WTFEmitSignpost(m_task.get(), "DataTask", "resume");
 
+    if (m_failureScheduled)
+        return;
+
     auto& cocoaSession = static_cast<NetworkSessionCocoa&>(*m_session);
     if (cocoaSession.deviceManagementRestrictionsEnabled() && m_isForMainResourceNavigationForAnyFrame) {
         auto didDetermineDeviceRestrictionPolicyForURL = makeBlockPtr([this, protectedThis = makeRef(*this)](BOOL isBlocked) mutable {
             callOnMainRunLoop([this, protectedThis = WTFMove(protectedThis), isBlocked] {
                 if (isBlocked) {
-                    scheduleFailure(RestrictedURLFailure);
+                    scheduleFailure(FailureType::RestrictedURL);
                     return;
                 }
 

Modified: branches/safari-612-branch/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp	2022-01-05 18:21:08 UTC (rev 287628)
@@ -151,7 +151,7 @@
         return;
 
     if (!m_currentRequest.url().protocolIsInHTTPFamily()) {
-        scheduleFailure(InvalidURLFailure);
+        scheduleFailure(FailureType::InvalidURL);
         return;
     }
 
@@ -159,7 +159,7 @@
 
     m_soupMessage = m_currentRequest.createSoupMessage(m_session->blobRegistry());
     if (!m_soupMessage) {
-        scheduleFailure(InvalidURLFailure);
+        scheduleFailure(FailureType::InvalidURL);
         return;
     }
 

Modified: branches/safari-612-branch/Source/WebKit/Shared/WebErrors.cpp (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/Shared/WebErrors.cpp	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/Shared/WebErrors.cpp	2022-01-05 18:21:08 UTC (rev 287628)
@@ -62,6 +62,11 @@
     return ResourceError(API::Error::webKitPolicyErrorDomain(), API::Error::Policy::FrameLoadInterruptedByPolicyChange, request.url(), WEB_UI_STRING("Frame load interrupted", "WebKitErrorFrameLoadInterruptedByPolicyChange description"));
 }
 
+ResourceError ftpDisabledError(const ResourceRequest& request)
+{
+    return ResourceError(errorDomainWebKitInternal, 0, request.url(), "FTP URLs are disabled"_s, ResourceError::Type::AccessControl);
+}
+
 ResourceError failedCustomProtocolSyncLoad(const ResourceRequest& request)
 {
     return ResourceError(errorDomainWebKitInternal, 0, request.url(), WEB_UI_STRING("Error handling synchronous load with custom protocol", "Custom protocol synchronous load failure description"));

Modified: branches/safari-612-branch/Source/WebKit/Shared/WebErrors.h (287627 => 287628)


--- branches/safari-612-branch/Source/WebKit/Shared/WebErrors.h	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Source/WebKit/Shared/WebErrors.h	2022-01-05 18:21:08 UTC (rev 287628)
@@ -41,6 +41,7 @@
 WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&);
 WebCore::ResourceError wasBlockedByRestrictionsError(const WebCore::ResourceRequest&);
 WebCore::ResourceError interruptedForPolicyChangeError(const WebCore::ResourceRequest&);
+WebCore::ResourceError ftpDisabledError(const WebCore::ResourceRequest&);
 WebCore::ResourceError failedCustomProtocolSyncLoad(const WebCore::ResourceRequest&);
 #if ENABLE(CONTENT_FILTERING)
 WebCore::ResourceError blockedByContentFilterError(const WebCore::ResourceRequest&);

Modified: branches/safari-612-branch/Tools/ChangeLog (287627 => 287628)


--- branches/safari-612-branch/Tools/ChangeLog	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Tools/ChangeLog	2022-01-05 18:21:08 UTC (rev 287628)
@@ -1,5 +1,64 @@
 2022-01-05  Russell Epstein  <repst...@apple.com>
 
+        Cherry-pick r287039. rdar://problem/85015428
+
+    Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask
+    https://bugs.webkit.org/show_bug.cgi?id=234280
+    Source/WebKit:
+    
+    <rdar://85015428>
+    
+    Reviewed by Brady Eidson.
+    
+    A NetworkLoad synchronously failing has caused several issues.
+    This issue is when a WKDownload is prevented in this way, we don't have a WKDownload in the UI process yet,
+    and we haven't assigned it an identifier in the network process yet either, so we dereference null and send
+    unreceived messages in many places.  To fix this issue, I move the FTP check to the NetworkDataTask constructor
+    like we do with blocked port checks and invalid URL checks.  I also found that there is a race condition with
+    CFNetwork also failing to load an empty FTP URL, so we need to prevent us from asking CFNetwork to start a load
+    for which we have scheduled a failure.
+    
+    Covered by an API test which used to hit all the horrible failures and now passes reliably.
+    
+    * NetworkProcess/NetworkCORSPreflightChecker.cpp:
+    (WebKit::NetworkCORSPreflightChecker::wasBlockedByDisabledFTP):
+    * NetworkProcess/NetworkCORSPreflightChecker.h:
+    * NetworkProcess/NetworkDataTask.cpp:
+    (WebKit::NetworkDataTask::NetworkDataTask):
+    (WebKit::NetworkDataTask::scheduleFailure):
+    * NetworkProcess/NetworkDataTask.h:
+    * NetworkProcess/NetworkLoad.cpp:
+    (WebKit::NetworkLoad::start):
+    (WebKit::NetworkLoad::wasBlockedByDisabledFTP):
+    * NetworkProcess/NetworkLoad.h:
+    * NetworkProcess/PingLoad.cpp:
+    (WebKit::PingLoad::wasBlockedByDisabledFTP):
+    * NetworkProcess/PingLoad.h:
+    * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
+    (WebKit::NetworkDataTaskCocoa::resume):
+    * Shared/WebErrors.cpp:
+    (WebKit::ftpDisabledError):
+    * Shared/WebErrors.h:
+    
+    Tools:
+    
+    Reviewed by Brady Eidson.
+    
+    * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@287039 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-12-14  Alex Christensen  <achristen...@webkit.org>
+
+            Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask
+            https://bugs.webkit.org/show_bug.cgi?id=234280
+
+            Reviewed by Brady Eidson.
+
+            * TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
+
+2022-01-05  Russell Epstein  <repst...@apple.com>
+
         Cherry-pick r284980. rdar://problem/84223894
 
     Fix CARingBuffer mix mode

Modified: branches/safari-612-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm (287627 => 287628)


--- branches/safari-612-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm	2022-01-05 18:21:03 UTC (rev 287627)
+++ branches/safari-612-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm	2022-01-05 18:21:08 UTC (rev 287628)
@@ -2157,6 +2157,21 @@
     checkCallbackRecord(delegate.get(), {
         DownloadCallback::DidFailWithError,
     });
+
+    failed = false;
+    [webView startDownloadUsingRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ftp:///"]] completionHandler:^(WKDownload *download) {
+        download.delegate = delegate.get();
+        delegate.get().didFailWithError = ^(WKDownload *download, NSError *error, NSData *resumeData) {
+            EXPECT_WK_STREQ(error.domain, WebKitErrorDomain);
+            EXPECT_EQ(error.code, 101);
+            failed = true;
+        };
+    }];
+    Util::run(&failed);
+
+    checkCallbackRecord(delegate.get(), {
+        DownloadCallback::DidFailWithError,
+    });
 }
 
 TEST(WKDownload, DownloadRequest404)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to