⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 282881 in webkit


Ignore:
Timestamp:
Sep 22, 2021, 10:58:45 AM (5 years ago)
Author:
beidson@apple.com
Message:

Disable FTP.
<rdar://81193860> and https://bugs.webkit.org/show_bug.cgi?id=230477

Reviewed by Geoff Garen.

Source/WebKit:

Covered by new API tests.

  • NetworkProcess/NetworkLoad.cpp:

(WebKit::NetworkLoad::start):
(WebKit::NetworkLoad::willPerformHTTPRedirection):

  • NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::initializeNetworkProcess):

  • NetworkProcess/NetworkProcess.h:

(WebKit::NetworkProcess::ftpEnabled const):

  • NetworkProcess/NetworkProcessCreationParameters.cpp:

(WebKit::NetworkProcessCreationParameters::encode const):
(WebKit::NetworkProcessCreationParameters::decode):

  • NetworkProcess/NetworkProcessCreationParameters.h:
  • UIProcess/Cocoa/WebProcessPoolCocoa.mm:

(WebKit::WebProcessPool::platformInitializeNetworkProcess):

Source/WTF:

  • Scripts/Preferences/WebPreferencesExperimental.yaml:
  • wtf/URL.cpp:

(WTF::URL::protocolIsInFTPFamily const):
(WTF::protocolIsInFTPFamily):

  • wtf/URL.h:

Tools:

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKitCocoa/BundlePageConsoleMessage.mm: Added.

(willAddMessageToConsoleCallback):
(-[BundlePageConsoleMessage webProcessPlugIn:didCreateBrowserContextController:]):

  • TestWebKitAPI/Tests/WebKitCocoa/FTP.mm: Added.

(TestWebKitAPI::didReceivePageMessageFromInjectedBundle):
(TestWebKitAPI::setInjectedBundleClient):
(TestWebKitAPI::TEST):

  • TestWebKitAPI/PlatformUtilities.h:
  • TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm:

(TestWebKitAPI::Util::toNS):

Location:
trunk
Files:
2 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r282876 r282881  
     12021-09-22  Brady Eidson  <beidson@apple.com>
     2
     3        Disable FTP.
     4        <rdar://81193860> and https://bugs.webkit.org/show_bug.cgi?id=230477
     5
     6        Reviewed by Geoff Garen.
     7
     8        * Scripts/Preferences/WebPreferencesExperimental.yaml:
     9
     10        * wtf/URL.cpp:
     11        (WTF::URL::protocolIsInFTPFamily const):
     12        (WTF::protocolIsInFTPFamily):
     13        * wtf/URL.h:
     14
    1152021-09-22  Simon Fraser  <simon.fraser@apple.com>
    216
  • trunk/Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml

    r282752 r282881  
    422422      default: false
    423423
     424FTPEnabled:
     425  type: bool
     426  humanReadableName: "FTP support enabled"
     427  humanReadableDescription: "FTP support enabled"
     428  defaultValue:
     429    WebCore:
     430      default: false
     431    WebKit:
     432      default: false
     433    WebKitLegacy:
     434      default: false
     435     
    424436# FIXME: This seems to be accidentally enabled for WebKit1 right now due to the old code using the
    425437# wrong preference key in some places. We should identify whether it really makes sense to keep this
  • trunk/Source/WTF/wtf/URL.cpp

    r281854 r282881  
    330330}
    331331
     332bool URL::protocolIsInFTPFamily() const
     333{
     334    return WTF::protocolIsInFTPFamily(string());
     335}
     336
    332337bool URL::protocolIs(const char* protocol) const
    333338{
     
    855860{
    856861    return protocolIsInternal(string, "javascript");
     862}
     863
     864bool protocolIsInFTPFamily(StringView url)
     865{
     866    auto length = url.length();
     867    // Do the comparison without making a new string object.
     868    return length >= 4
     869        && isASCIIAlphaCaselessEqual(url[0], 'f')
     870        && isASCIIAlphaCaselessEqual(url[1], 't')
     871        && isASCIIAlphaCaselessEqual(url[2], 'p')
     872        && (url[3] == ':' || (isASCIIAlphaCaselessEqual(url[3], 's') && length >= 5 && url[4] == ':'));
    857873}
    858874
  • trunk/Source/WTF/wtf/URL.h

    r281854 r282881  
    137137    WTF_EXPORT_PRIVATE bool protocolIsAbout() const;
    138138    WTF_EXPORT_PRIVATE bool protocolIsJavaScript() const;
     139    WTF_EXPORT_PRIVATE bool protocolIsInFTPFamily() const;
    139140    bool protocolIsInHTTPFamily() const;
    140141    WTF_EXPORT_PRIVATE bool isLocalFile() const;
     
    260261WTF_EXPORT_PRIVATE bool protocolIs(StringView url, const char* protocol);
    261262WTF_EXPORT_PRIVATE bool protocolIsJavaScript(StringView url);
     263WTF_EXPORT_PRIVATE bool protocolIsInFTPFamily(StringView url);
    262264WTF_EXPORT_PRIVATE bool protocolIsInHTTPFamily(StringView url);
    263265
  • trunk/Source/WebKit/ChangeLog

    r282879 r282881  
     12021-09-22  Brady Eidson  <beidson@apple.com>
     2
     3        Disable FTP.
     4        <rdar://81193860> and https://bugs.webkit.org/show_bug.cgi?id=230477
     5
     6        Reviewed by Geoff Garen.
     7
     8        Covered by new API tests.
     9
     10        * NetworkProcess/NetworkLoad.cpp:
     11        (WebKit::NetworkLoad::start):
     12        (WebKit::NetworkLoad::willPerformHTTPRedirection):
     13       
     14        * NetworkProcess/NetworkProcess.cpp:
     15        (WebKit::NetworkProcess::initializeNetworkProcess):
     16        * NetworkProcess/NetworkProcess.h:
     17        (WebKit::NetworkProcess::ftpEnabled const):
     18       
     19        * NetworkProcess/NetworkProcessCreationParameters.cpp:
     20        (WebKit::NetworkProcessCreationParameters::encode const):
     21        (WebKit::NetworkProcessCreationParameters::decode):
     22        * NetworkProcess/NetworkProcessCreationParameters.h:
     23       
     24        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
     25        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
     26
    1272021-09-22  Megan Gardner  <megan_gardner@apple.com>
    228
  • trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp

    r282252 r282881  
    5959void NetworkLoad::start()
    6060{
    61     if (m_task)
    62         m_task->resume();
     61    if (!m_task)
     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    m_task->resume();
    6373}
    6474
     
    182192    ASSERT(!m_redirectCompletionHandler);
    183193
     194    if (!m_networkProcess->ftpEnabled() && request.url().protocolIsInFTPFamily()) {
     195        m_task->clearClient();
     196        m_task = nullptr;
     197        WebCore::NetworkLoadMetrics emptyMetrics;
     198        didCompleteWithError(ResourceError { errorDomainWebKitInternal, 0, url(), "FTP URLs are disabled"_s, ResourceError::Type::AccessControl }, emptyMetrics);
     199       
     200        if (completionHandler)
     201            completionHandler({ });
     202        return;
     203    }
     204   
    184205    redirectResponse.setSource(ResourceResponse::Source::Network);
    185206    m_redirectCompletionHandler = WTFMove(completionHandler);
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r282755 r282881  
    347347    setPrivateClickMeasurementEnabled(parameters.enablePrivateClickMeasurement);
    348348    setPrivateClickMeasurementDebugMode(parameters.enablePrivateClickMeasurementDebugMode);
     349    m_ftpEnabled = parameters.ftpEnabled;
    349350
    350351    for (auto& supplement : m_supplements.values())
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.h

    r282712 r282881  
    391391#endif
    392392
     393    bool ftpEnabled() const { return m_ftpEnabled; }
     394
    393395private:
    394396    void platformInitializeNetworkProcess(const NetworkProcessCreationParameters&);
     
    616618    bool m_privateClickMeasurementEnabled { true };
    617619    bool m_privateClickMeasurementDebugModeEnabled { false };
     620    bool m_ftpEnabled { false };
    618621
    619622    HashMap<PAL::SessionID, Ref<NetworkStorageManager>> m_storageManagers;
  • trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp

    r281070 r282881  
    7373    encoder << enablePrivateClickMeasurement;
    7474    encoder << enablePrivateClickMeasurementDebugMode;
     75    encoder << ftpEnabled;
    7576    encoder << websiteDataStoreParameters;
    7677}
     
    147148    if (!decoder.decode(result.enablePrivateClickMeasurementDebugMode))
    148149        return false;
     150    if (!decoder.decode(result.ftpEnabled))
     151        return false;
    149152
    150153    std::optional<Vector<WebsiteDataStoreParameters>> websiteDataStoreParameters;
  • trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h

    r281070 r282881  
    8989    bool enablePrivateClickMeasurement { true };
    9090    bool enablePrivateClickMeasurementDebugMode { false };
     91    bool ftpEnabled { false };
    9192
    9293    Vector<WebsiteDataStoreParameters> websiteDataStoreParameters;
  • trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp

    r282853 r282881  
    348348        m_networkLoad->startWithScheduling();
    349349
    350     LOADER_RELEASE_LOG("startNetworkLoad: Going to the network (description=%" PUBLIC_LOG_STRING ")", m_networkLoad->description().utf8().data());
     350    if (m_networkLoad)
     351        LOADER_RELEASE_LOG("startNetworkLoad: Going to the network (description=%" PUBLIC_LOG_STRING ")", m_networkLoad->description().utf8().data());
    351352}
    352353
  • trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm

    r282849 r282881  
    568568#endif
    569569    parameters.enablePrivateClickMeasurementDebugMode = [defaults boolForKey:[NSString stringWithFormat:format, WebPreferencesKey::privateClickMeasurementDebugModeEnabledKey().createCFString().get()]];
     570   
     571    parameters.ftpEnabled = [defaults objectForKey:WebPreferencesKey::ftpEnabledKey()] && [defaults boolForKey:WebPreferencesKey::ftpEnabledKey()];
    570572}
    571573
  • trunk/Tools/ChangeLog

    r282878 r282881  
     12021-09-22  Brady Eidson  <beidson@apple.com>
     2
     3        Disable FTP.
     4        <rdar://81193860> and https://bugs.webkit.org/show_bug.cgi?id=230477
     5
     6        Reviewed by Geoff Garen.
     7
     8        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     9
     10        * TestWebKitAPI/Tests/WebKitCocoa/BundlePageConsoleMessage.mm: Added.
     11        (willAddMessageToConsoleCallback):
     12        (-[BundlePageConsoleMessage webProcessPlugIn:didCreateBrowserContextController:]):
     13
     14        * TestWebKitAPI/Tests/WebKitCocoa/FTP.mm: Added.
     15        (TestWebKitAPI::didReceivePageMessageFromInjectedBundle):
     16        (TestWebKitAPI::setInjectedBundleClient):
     17        (TestWebKitAPI::TEST):
     18
     19        * TestWebKitAPI/PlatformUtilities.h:
     20        * TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm:
     21        (TestWebKitAPI::Util::toNS):
     22
    1232021-09-22  Philippe Normand  <pnormand@igalia.com>
    224
  • trunk/Tools/TestWebKitAPI/PlatformUtilities.h

    r276276 r282881  
    6767std::string toSTD(WKRetainPtr<WKStringRef>);
    6868
     69#if PLATFORM(MAC)
     70NSString *toNS(WKStringRef);
     71NSString *toNS(WKRetainPtr<WKStringRef>);
     72#endif // PLATFORM(MAC)
     73
    6974WKRetainPtr<WKStringRef> toWK(const char* utf8String);
    7075
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r282844 r282881  
    349349                51714EB51CF8C78C004723C4 /* WebProcessKillIDBCleanup-2.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 51714EB31CF8C761004723C4 /* WebProcessKillIDBCleanup-2.html */; };
    350350                51714EB81CF8CA17004723C4 /* WebProcessKillIDBCleanup.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51714EB61CF8C7A4004723C4 /* WebProcessKillIDBCleanup.mm */; };
     351                5175C7A226F876230003AF5C /* BundlePageConsoleMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5175C7A126F876230003AF5C /* BundlePageConsoleMessage.mm */; };
    351352                517E7E04151119C100D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 517E7E031511187500D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html */; };
     353                51819F2A26EAC98300E47375 /* FTP.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51819F2926EAC98200E47375 /* FTP.mm */; };
    352354                51820A4D22F4EE7F00DF0A01 /* JavascriptURLNavigation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51820A4C22F4EE7700DF0A01 /* JavascriptURLNavigation.mm */; };
    353355                5182C22E1F2BCE540059BA7C /* WKURLSchemeHandler-leaks.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5182C22D1F2BCB410059BA7C /* WKURLSchemeHandler-leaks.mm */; };
     
    21952197                51714EB61CF8C7A4004723C4 /* WebProcessKillIDBCleanup.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebProcessKillIDBCleanup.mm; sourceTree = "<group>"; };
    21962198                51714EB91D087416004723C4 /* CrossThreadTask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CrossThreadTask.cpp; sourceTree = "<group>"; };
     2199                5175C7A126F876230003AF5C /* BundlePageConsoleMessage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BundlePageConsoleMessage.mm; sourceTree = "<group>"; };
    21972200                517E7DFB15110EA600D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MemoryCachePruneWithinResourceLoadDelegate.mm; sourceTree = "<group>"; };
    21982201                517E7E031511187500D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = MemoryCachePruneWithinResourceLoadDelegate.html; sourceTree = "<group>"; };
     2202                51819F2926EAC98200E47375 /* FTP.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FTP.mm; sourceTree = "<group>"; };
    21992203                51820A4C22F4EE7700DF0A01 /* JavascriptURLNavigation.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = JavascriptURLNavigation.mm; sourceTree = "<group>"; };
    22002204                5182C22D1F2BCB410059BA7C /* WKURLSchemeHandler-leaks.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "WKURLSchemeHandler-leaks.mm"; sourceTree = "<group>"; };
     
    34363440                                7A89BB662331635D0042CB1E /* BundleFormDelegatePlugIn.mm */,
    34373441                                7A89BB69233165650042CB1E /* BundleFormDelegateProtocol.h */,
     3442                                5175C7A126F876230003AF5C /* BundlePageConsoleMessage.mm */,
    34383443                                A13EBBAC1B87436F00097110 /* BundleParameters.mm */,
    34393444                                A13EBBAE1B87436F00097110 /* BundleParametersPlugIn.mm */,
     
    34873492                                CDA29B2820FD2A9900F15CED /* ExitFullscreenOnEnterPiP.mm */,
    34883493                                1D12BEBF245BEF85004C0B7A /* ExitPiPOnSuspendVideoElement.mm */,
     3494                                51819F2926EAC98200E47375 /* FTP.mm */,
    34893495                                2D8104CB1BEC13E70020DA46 /* FindInPage.mm */,
    34903496                                51242CD42374E61E00EED9C1 /* FindInPageAPI.mm */,
     
    58375843                                37BCA61C1B596BA9002012CA /* ShouldOpenExternalURLsInNewWindowActions.mm in Sources */,
    58385844                                7C83E0C51D0A654600FEBCF3 /* ShrinkToFit.mm in Sources */,
     5845                                51819F2A26EAC98300E47375 /* FTP.mm in Sources */,
    58395846                                7CCE7ECD1A411A7E00447C4C /* SimplifyMarkup.mm in Sources */,
    58405847                                C149D550242E98DF003EBB12 /* SleepDisabler.mm in Sources */,
     
    60736080                                F44C7A0020F9EEBF0014478C /* ParserYieldTokenPlugIn.mm in Sources */,
    60746081                                A13EBBAB1B87434600097110 /* PlatformUtilitiesCocoa.mm in Sources */,
     6082                                5175C7A226F876230003AF5C /* BundlePageConsoleMessage.mm in Sources */,
    60756083                                1A4F81CF1BDFFD53004E672E /* RemoteObjectRegistryPlugIn.mm in Sources */,
    60766084                                A12DDC021E837C2400CF6CAE /* RenderedImageWithOptionsPlugIn.mm in Sources */,
  • trunk/Tools/TestWebKitAPI/cocoa/PlatformUtilitiesCocoa.mm

    r273620 r282881  
    3333namespace TestWebKitAPI {
    3434namespace Util {
     35
     36#if PLATFORM(MAC)
     37
     38NSString *toNS(WKStringRef string)
     39{
     40    size_t bufferSize = WKStringGetMaximumUTF8CStringSize(string) + 1;
     41    auto buffer = makeUniqueWithoutFastMallocCheck<char[]>(bufferSize);
     42    size_t stringLength = WKStringGetUTF8CString(string, buffer.get(), bufferSize);
     43    buffer[stringLength] = '\0';
     44
     45    return [NSString stringWithUTF8String:buffer.get()];
     46}
     47
     48NSString *toNS(WKRetainPtr<WKStringRef> string)
     49{
     50    return toNS(string.get());
     51}
     52
     53#endif // PLATFORM(MAC)
    3554
    3655std::string toSTD(NSString *string)
Note: See TracChangeset for help on using the changeset viewer.