Changeset 287628 in webkit
- Timestamp:
- Jan 5, 2022, 10:21:08 AM (5 years ago)
- Location:
- branches/safari-612-branch
- Files:
-
- 15 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkDataTask.cpp (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/NetworkDataTask.h (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/NetworkLoad.cpp (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/NetworkLoad.h (modified) (1 diff)
-
Source/WebKit/NetworkProcess/PingLoad.cpp (modified) (1 diff)
-
Source/WebKit/NetworkProcess/PingLoad.h (modified) (1 diff)
-
Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp (modified) (2 diffs)
-
Source/WebKit/Shared/WebErrors.cpp (modified) (1 diff)
-
Source/WebKit/Shared/WebErrors.h (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-612-branch/Source/WebKit/ChangeLog
r287619 r287628 1 2022-01-05 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r287039. rdar://problem/85015428 4 5 Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask 6 https://bugs.webkit.org/show_bug.cgi?id=234280 7 Source/WebKit: 8 9 <rdar://85015428> 10 11 Reviewed by Brady Eidson. 12 13 A NetworkLoad synchronously failing has caused several issues. 14 This issue is when a WKDownload is prevented in this way, we don't have a WKDownload in the UI process yet, 15 and we haven't assigned it an identifier in the network process yet either, so we dereference null and send 16 unreceived messages in many places. To fix this issue, I move the FTP check to the NetworkDataTask constructor 17 like we do with blocked port checks and invalid URL checks. I also found that there is a race condition with 18 CFNetwork also failing to load an empty FTP URL, so we need to prevent us from asking CFNetwork to start a load 19 for which we have scheduled a failure. 20 21 Covered by an API test which used to hit all the horrible failures and now passes reliably. 22 23 * NetworkProcess/NetworkCORSPreflightChecker.cpp: 24 (WebKit::NetworkCORSPreflightChecker::wasBlockedByDisabledFTP): 25 * NetworkProcess/NetworkCORSPreflightChecker.h: 26 * NetworkProcess/NetworkDataTask.cpp: 27 (WebKit::NetworkDataTask::NetworkDataTask): 28 (WebKit::NetworkDataTask::scheduleFailure): 29 * NetworkProcess/NetworkDataTask.h: 30 * NetworkProcess/NetworkLoad.cpp: 31 (WebKit::NetworkLoad::start): 32 (WebKit::NetworkLoad::wasBlockedByDisabledFTP): 33 * NetworkProcess/NetworkLoad.h: 34 * NetworkProcess/PingLoad.cpp: 35 (WebKit::PingLoad::wasBlockedByDisabledFTP): 36 * NetworkProcess/PingLoad.h: 37 * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: 38 (WebKit::NetworkDataTaskCocoa::resume): 39 * Shared/WebErrors.cpp: 40 (WebKit::ftpDisabledError): 41 * Shared/WebErrors.h: 42 43 Tools: 44 45 Reviewed by Brady Eidson. 46 47 * TestWebKitAPI/Tests/WebKitCocoa/Download.mm: 48 49 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@287039 268f45cc-cd09-0410-ab3c-d52691b4dbfc 50 51 2021-12-14 Alex Christensen <achristensen@webkit.org> 52 53 Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask 54 https://bugs.webkit.org/show_bug.cgi?id=234280 55 <rdar://85015428> 56 57 Reviewed by Brady Eidson. 58 59 A NetworkLoad synchronously failing has caused several issues. 60 This issue is when a WKDownload is prevented in this way, we don't have a WKDownload in the UI process yet, 61 and we haven't assigned it an identifier in the network process yet either, so we dereference null and send 62 unreceived messages in many places. To fix this issue, I move the FTP check to the NetworkDataTask constructor 63 like we do with blocked port checks and invalid URL checks. I also found that there is a race condition with 64 CFNetwork also failing to load an empty FTP URL, so we need to prevent us from asking CFNetwork to start a load 65 for which we have scheduled a failure. 66 67 Covered by an API test which used to hit all the horrible failures and now passes reliably. 68 69 * NetworkProcess/NetworkCORSPreflightChecker.cpp: 70 (WebKit::NetworkCORSPreflightChecker::wasBlockedByDisabledFTP): 71 * NetworkProcess/NetworkCORSPreflightChecker.h: 72 * NetworkProcess/NetworkDataTask.cpp: 73 (WebKit::NetworkDataTask::NetworkDataTask): 74 (WebKit::NetworkDataTask::scheduleFailure): 75 * NetworkProcess/NetworkDataTask.h: 76 * NetworkProcess/NetworkLoad.cpp: 77 (WebKit::NetworkLoad::start): 78 (WebKit::NetworkLoad::wasBlockedByDisabledFTP): 79 * NetworkProcess/NetworkLoad.h: 80 * NetworkProcess/PingLoad.cpp: 81 (WebKit::PingLoad::wasBlockedByDisabledFTP): 82 * NetworkProcess/PingLoad.h: 83 * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: 84 (WebKit::NetworkDataTaskCocoa::resume): 85 * Shared/WebErrors.cpp: 86 (WebKit::ftpDisabledError): 87 * Shared/WebErrors.h: 88 1 89 2022-01-05 Russell Epstein <repstein@apple.com> 2 90 -
branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.cpp
r280425 r287628 33 33 #include "NetworkProcess.h" 34 34 #include "NetworkResourceLoader.h" 35 #include "WebErrors.h" 35 36 #include <WebCore/CrossOriginAccessControl.h> 36 37 #include <WebCore/SecurityOrigin.h> … … 173 174 } 174 175 176 void NetworkCORSPreflightChecker::wasBlockedByDisabledFTP() 177 { 178 m_completionCallback(ftpDisabledError(m_parameters.originalRequest)); 179 } 180 175 181 NetworkTransactionInformation NetworkCORSPreflightChecker::takeInformation() 176 182 { -
branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkCORSPreflightChecker.h
r258052 r287628 78 78 void cannotShowURL() final; 79 79 void wasBlockedByRestrictions() final; 80 void wasBlockedByDisabledFTP() final; 80 81 81 82 Parameters m_parameters; -
branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkDataTask.cpp
r284400 r287628 77 77 78 78 if (!requestWithCredentials.url().isValid()) { 79 scheduleFailure( InvalidURLFailure);79 scheduleFailure(FailureType::InvalidURL); 80 80 return; 81 81 } 82 82 83 83 if (!portAllowed(requestWithCredentials.url())) { 84 scheduleFailure(BlockedFailure); 84 scheduleFailure(FailureType::Blocked); 85 return; 86 } 87 88 if (!session.networkProcess().ftpEnabled() 89 && requestWithCredentials.url().protocolIsInFTPFamily()) { 90 scheduleFailure(FailureType::FTPDisabled); 85 91 return; 86 92 } … … 95 101 void NetworkDataTask::scheduleFailure(FailureType type) 96 102 { 103 m_failureScheduled = true; 97 104 RunLoop::main().dispatch([this, weakThis = makeWeakPtr(*this), type] { 98 105 if (!weakThis || !m_client) … … 100 107 101 108 switch (type) { 102 case BlockedFailure:109 case FailureType::Blocked: 103 110 m_client->wasBlocked(); 104 111 return; 105 case InvalidURLFailure:112 case FailureType::InvalidURL: 106 113 m_client->cannotShowURL(); 107 114 return; 108 case RestrictedURLFailure:115 case FailureType::RestrictedURL: 109 116 m_client->wasBlockedByRestrictions(); 110 117 return; 118 case FailureType::FTPDisabled: 119 m_client->wasBlockedByDisabledFTP(); 111 120 } 112 121 }); -
branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkDataTask.h
r284400 r287628 70 70 virtual void cannotShowURL() = 0; 71 71 virtual void wasBlockedByRestrictions() = 0; 72 virtual void wasBlockedByDisabledFTP() = 0; 72 73 73 74 virtual bool shouldCaptureExtraNetworkLoadMetrics() const { return false; } … … 146 147 NetworkDataTask(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentialsPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect, bool dataTaskIsForMainFrameNavigation); 147 148 148 enum FailureType { 149 BlockedFailure, 150 InvalidURLFailure, 151 RestrictedURLFailure 149 enum class FailureType : uint8_t { 150 Blocked, 151 InvalidURL, 152 RestrictedURL, 153 FTPDisabled 152 154 }; 153 155 void scheduleFailure(FailureType); … … 173 175 String m_suggestedFilename; 174 176 bool m_dataTaskIsForMainFrameNavigation { false }; 177 bool m_failureScheduled { false }; 175 178 }; 176 179 -
branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkLoad.cpp
r284400 r287628 61 61 if (!m_task) 62 62 return; 63 64 if (!m_networkProcess->ftpEnabled() && m_parameters.request.url().protocolIsInFTPFamily()) {65 m_task->clearClient();66 m_task = nullptr;67 WebCore::NetworkLoadMetrics emptyMetrics;68 didCompleteWithError(ResourceError { errorDomainWebKitInternal, 0, url(), "FTP URLs are disabled"_s, ResourceError::Type::AccessControl }, emptyMetrics);69 return;70 }71 72 63 m_task->resume(); 73 64 } … … 297 288 } 298 289 290 void NetworkLoad::wasBlockedByDisabledFTP() 291 { 292 m_client.get().didFailLoading(ftpDisabledError(m_currentRequest)); 293 } 294 299 295 void NetworkLoad::didNegotiateModernTLS(const URL& url) 300 296 { -
branches/safari-612-branch/Source/WebKit/NetworkProcess/NetworkLoad.h
r284400 r287628 87 87 void cannotShowURL() final; 88 88 void wasBlockedByRestrictions() final; 89 void wasBlockedByDisabledFTP() final; 89 90 void didNegotiateModernTLS(const URL&) final; 90 91 -
branches/safari-612-branch/Source/WebKit/NetworkProcess/PingLoad.cpp
r280953 r287628 211 211 } 212 212 213 void PingLoad::wasBlockedByDisabledFTP() 214 { 215 PING_RELEASE_LOG("wasBlockedByDisabledFTP"); 216 didFinish(ftpDisabledError(ResourceRequest(currentURL()))); 217 } 218 213 219 void PingLoad::timeoutTimerFired() 214 220 { -
branches/safari-612-branch/Source/WebKit/NetworkProcess/PingLoad.h
r255846 r287628 61 61 void cannotShowURL() final; 62 62 void wasBlockedByRestrictions() final; 63 void wasBlockedByDisabledFTP() final; 63 64 void timeoutTimerFired(); 64 65 -
branches/safari-612-branch/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm
r286236 r287628 640 640 WTFEmitSignpost(m_task.get(), "DataTask", "resume"); 641 641 642 if (m_failureScheduled) 643 return; 644 642 645 auto& cocoaSession = static_cast<NetworkSessionCocoa&>(*m_session); 643 646 if (cocoaSession.deviceManagementRestrictionsEnabled() && m_isForMainResourceNavigationForAnyFrame) { … … 645 648 callOnMainRunLoop([this, protectedThis = WTFMove(protectedThis), isBlocked] { 646 649 if (isBlocked) { 647 scheduleFailure( RestrictedURLFailure);650 scheduleFailure(FailureType::RestrictedURL); 648 651 return; 649 652 } -
branches/safari-612-branch/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp
r279872 r287628 152 152 153 153 if (!m_currentRequest.url().protocolIsInHTTPFamily()) { 154 scheduleFailure( InvalidURLFailure);154 scheduleFailure(FailureType::InvalidURL); 155 155 return; 156 156 } … … 160 160 m_soupMessage = m_currentRequest.createSoupMessage(m_session->blobRegistry()); 161 161 if (!m_soupMessage) { 162 scheduleFailure( InvalidURLFailure);162 scheduleFailure(FailureType::InvalidURL); 163 163 return; 164 164 } -
branches/safari-612-branch/Source/WebKit/Shared/WebErrors.cpp
r264021 r287628 63 63 } 64 64 65 ResourceError ftpDisabledError(const ResourceRequest& request) 66 { 67 return ResourceError(errorDomainWebKitInternal, 0, request.url(), "FTP URLs are disabled"_s, ResourceError::Type::AccessControl); 68 } 69 65 70 ResourceError failedCustomProtocolSyncLoad(const ResourceRequest& request) 66 71 { -
branches/safari-612-branch/Source/WebKit/Shared/WebErrors.h
r264021 r287628 42 42 WebCore::ResourceError wasBlockedByRestrictionsError(const WebCore::ResourceRequest&); 43 43 WebCore::ResourceError interruptedForPolicyChangeError(const WebCore::ResourceRequest&); 44 WebCore::ResourceError ftpDisabledError(const WebCore::ResourceRequest&); 44 45 WebCore::ResourceError failedCustomProtocolSyncLoad(const WebCore::ResourceRequest&); 45 46 #if ENABLE(CONTENT_FILTERING) -
branches/safari-612-branch/Tools/ChangeLog
r287618 r287628 1 2022-01-05 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r287039. rdar://problem/85015428 4 5 Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask 6 https://bugs.webkit.org/show_bug.cgi?id=234280 7 Source/WebKit: 8 9 <rdar://85015428> 10 11 Reviewed by Brady Eidson. 12 13 A NetworkLoad synchronously failing has caused several issues. 14 This issue is when a WKDownload is prevented in this way, we don't have a WKDownload in the UI process yet, 15 and we haven't assigned it an identifier in the network process yet either, so we dereference null and send 16 unreceived messages in many places. To fix this issue, I move the FTP check to the NetworkDataTask constructor 17 like we do with blocked port checks and invalid URL checks. I also found that there is a race condition with 18 CFNetwork also failing to load an empty FTP URL, so we need to prevent us from asking CFNetwork to start a load 19 for which we have scheduled a failure. 20 21 Covered by an API test which used to hit all the horrible failures and now passes reliably. 22 23 * NetworkProcess/NetworkCORSPreflightChecker.cpp: 24 (WebKit::NetworkCORSPreflightChecker::wasBlockedByDisabledFTP): 25 * NetworkProcess/NetworkCORSPreflightChecker.h: 26 * NetworkProcess/NetworkDataTask.cpp: 27 (WebKit::NetworkDataTask::NetworkDataTask): 28 (WebKit::NetworkDataTask::scheduleFailure): 29 * NetworkProcess/NetworkDataTask.h: 30 * NetworkProcess/NetworkLoad.cpp: 31 (WebKit::NetworkLoad::start): 32 (WebKit::NetworkLoad::wasBlockedByDisabledFTP): 33 * NetworkProcess/NetworkLoad.h: 34 * NetworkProcess/PingLoad.cpp: 35 (WebKit::PingLoad::wasBlockedByDisabledFTP): 36 * NetworkProcess/PingLoad.h: 37 * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: 38 (WebKit::NetworkDataTaskCocoa::resume): 39 * Shared/WebErrors.cpp: 40 (WebKit::ftpDisabledError): 41 * Shared/WebErrors.h: 42 43 Tools: 44 45 Reviewed by Brady Eidson. 46 47 * TestWebKitAPI/Tests/WebKitCocoa/Download.mm: 48 49 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@287039 268f45cc-cd09-0410-ab3c-d52691b4dbfc 50 51 2021-12-14 Alex Christensen <achristensen@webkit.org> 52 53 Move FTP disabling from NetworkLoad::start to NetworkDataTask::NetworkDataTask 54 https://bugs.webkit.org/show_bug.cgi?id=234280 55 56 Reviewed by Brady Eidson. 57 58 * TestWebKitAPI/Tests/WebKitCocoa/Download.mm: 59 1 60 2022-01-05 Russell Epstein <repstein@apple.com> 2 61 -
branches/safari-612-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/Download.mm
r283789 r287628 2158 2158 DownloadCallback::DidFailWithError, 2159 2159 }); 2160 2161 failed = false; 2162 [webView startDownloadUsingRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ftp:///"]] completionHandler:^(WKDownload *download) { 2163 download.delegate = delegate.get(); 2164 delegate.get().didFailWithError = ^(WKDownload *download, NSError *error, NSData *resumeData) { 2165 EXPECT_WK_STREQ(error.domain, WebKitErrorDomain); 2166 EXPECT_EQ(error.code, 101); 2167 failed = true; 2168 }; 2169 }]; 2170 Util::run(&failed); 2171 2172 checkCallbackRecord(delegate.get(), { 2173 DownloadCallback::DidFailWithError, 2174 }); 2160 2175 } 2161 2176
Note:
See TracChangeset
for help on using the changeset viewer.