Changeset 222306 in webkit


Ignore:
Timestamp:
Sep 20, 2017, 6:15:23 PM (8 years ago)
Author:
achristensen@apple.com
Message:

Add infrastructure for adding custom headers to requests per website
https://bugs.webkit.org/show_bug.cgi?id=177255

Reviewed by Geoffrey Garen.

Source/WebCore:

Covered by API tests.

  • CMakeLists.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • loader/DocumentLoader.cpp:
  • loader/DocumentLoader.h:

(WebCore::DocumentLoader::setCustomHeaderFields):

  • loader/HTTPHeaderField.cpp: Added.

(WebCore::RFC7230::isTokenCharacter):
(WebCore::RFC7230::isDelimiter):
(WebCore::RFC7230::isVisibleCharacter):
(WebCore::RFC7230::isWhitespace):
(WebCore::RFC7230::isInRange):
(WebCore::RFC7230::isOBSText):
(WebCore::RFC7230::isQuotedTextCharacter):
(WebCore::RFC7230::isQuotedPairSecondOctet):
(WebCore::RFC7230::isCommentText):
(WebCore::RFC7230::isValidName):
(WebCore::RFC7230::isValidValue):
(WebCore::HTTPHeaderField::HTTPHeaderField):

  • loader/HTTPHeaderField.h: Added.

(WebCore::HTTPHeaderField::encode const):
(WebCore::HTTPHeaderField::decode):

Source/WebKit:

  • Shared/WebsitePolicies.cpp: Added.
  • Shared/WebsitePolicies.h:

(WebKit::WebsitePolicies::encode const):
(WebKit::WebsitePolicies::decode):

  • UIProcess/API/APIWebsitePolicies.h:
  • UIProcess/API/C/WKWebsitePolicies.cpp:

(WKWebsitePoliciesCopyCustomHeaderFields):
(WKWebsitePoliciesSetCustomHeaderFields):

  • UIProcess/API/C/WKWebsitePolicies.h:
  • UIProcess/API/Cocoa/_WKWebsitePolicies.h:
  • UIProcess/API/Cocoa/_WKWebsitePolicies.mm:

(-[_WKWebsitePolicies customHeaderFields]):
(-[_WKWebsitePolicies setCustomHeaderFields:]):

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

Tools:

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebCore/HTTPHeaderField.cpp: Added.

(shouldRemainUnchanged):
(shouldBeInvalid):
(shouldBecome):
(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

(TEST):

Location:
trunk
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r222298 r222306  
    21032103    loader/FrameLoader.cpp
    21042104    loader/FrameLoaderStateMachine.cpp
     2105    loader/HTTPHeaderField.cpp
    21052106    loader/HistoryController.cpp
    21062107    loader/ImageLoader.cpp
  • trunk/Source/WebCore/ChangeLog

    r222304 r222306  
     12017-09-20  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add infrastructure for adding custom headers to requests per website
     4        https://bugs.webkit.org/show_bug.cgi?id=177255
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Covered by API tests.
     9
     10        * CMakeLists.txt:
     11        * WebCore.xcodeproj/project.pbxproj:
     12        * loader/DocumentLoader.cpp:
     13        * loader/DocumentLoader.h:
     14        (WebCore::DocumentLoader::setCustomHeaderFields):
     15        * loader/HTTPHeaderField.cpp: Added.
     16        (WebCore::RFC7230::isTokenCharacter):
     17        (WebCore::RFC7230::isDelimiter):
     18        (WebCore::RFC7230::isVisibleCharacter):
     19        (WebCore::RFC7230::isWhitespace):
     20        (WebCore::RFC7230::isInRange):
     21        (WebCore::RFC7230::isOBSText):
     22        (WebCore::RFC7230::isQuotedTextCharacter):
     23        (WebCore::RFC7230::isQuotedPairSecondOctet):
     24        (WebCore::RFC7230::isCommentText):
     25        (WebCore::RFC7230::isValidName):
     26        (WebCore::RFC7230::isValidValue):
     27        (WebCore::HTTPHeaderField::HTTPHeaderField):
     28        * loader/HTTPHeaderField.h: Added.
     29        (WebCore::HTTPHeaderField::encode const):
     30        (WebCore::HTTPHeaderField::decode):
     31
    1322017-09-20  Said Abou-Hallawa  <sabouhallawa@apple.com>
    233
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r222298 r222306  
    27402740                5C9B860C1C21E3C900110F36 /* NetworkLoadMetrics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C9B860B1C21E3C600110F36 /* NetworkLoadMetrics.mm */; };
    27412741                5C9EF1711DFF71CC00A452E3 /* XPathGrammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C9EF16F1DFF719900A452E3 /* XPathGrammar.cpp */; };
     2742                5CA1DEC51F71EF9900E71BD3 /* HTTPHeaderField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CA1DEC21F71E68600E71BD3 /* HTTPHeaderField.cpp */; };
     2743                5CA1DEC61F71F1C700E71BD3 /* HTTPHeaderField.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CA1DEC41F71E68700E71BD3 /* HTTPHeaderField.h */; settings = {ATTRIBUTES = (Private, ); }; };
    27422744                5CB37FFE1C62D28C00F20188 /* ScrollAnimatorMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */; };
    27432745                5CB37FFF1C62D2A100F20188 /* ScrollAnimatorMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */; };
     
    1068810690                5C9EF16F1DFF719900A452E3 /* XPathGrammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XPathGrammar.cpp; sourceTree = "<group>"; };
    1068910691                5C9EF1701DFF719900A452E3 /* XPathGrammar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPathGrammar.h; sourceTree = "<group>"; };
     10692                5CA1DEC21F71E68600E71BD3 /* HTTPHeaderField.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPHeaderField.cpp; sourceTree = "<group>"; };
     10693                5CA1DEC41F71E68700E71BD3 /* HTTPHeaderField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPHeaderField.h; sourceTree = "<group>"; };
    1069010694                5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollAnimatorMock.cpp; sourceTree = "<group>"; };
    1069110695                5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollAnimatorMock.h; sourceTree = "<group>"; };
     
    2444024444                                97DCE1FF10807C750057D394 /* HistoryController.cpp */,
    2444124445                                97DCE20010807C750057D394 /* HistoryController.h */,
     24446                                5CA1DEC21F71E68600E71BD3 /* HTTPHeaderField.cpp */,
     24447                                5CA1DEC41F71E68700E71BD3 /* HTTPHeaderField.h */,
    2444224448                                089582530E857A7E00F82C83 /* ImageLoader.cpp */,
    2444324449                                089582540E857A7E00F82C83 /* ImageLoader.h */,
     
    2814628152                                E44613AB0CD6331000FADA75 /* HTMLVideoElement.h in Headers */,
    2814728153                                839AAFED1A0C0C8D00605F99 /* HTMLWBRElement.h in Headers */,
     28154                                5CA1DEC61F71F1C700E71BD3 /* HTTPHeaderField.h in Headers */,
    2814828155                                514C76710CE923A1007EF3CD /* HTTPHeaderMap.h in Headers */,
    2814928156                                1AB5EBD2194A50F30059AC70 /* HTTPHeaderNames.h in Headers */,
     
    2920329210                                7AE6C93C1BE0C60100E19E03 /* MainThreadSharedTimer.h in Headers */,
    2920429211                                1A8F6BC60DB55CDC001DB794 /* ManifestParser.h in Headers */,
     29212                                CE1866451F72E5B400A0CAB6 /* MarkerSubrange.h in Headers */,
    2920529213                                93309DF8099E64920056E581 /* markup.h in Headers */,
    29206                                 CE1866451F72E5B400A0CAB6 /* MarkerSubrange.h in Headers */,
    2920729214                                9728C3141268E4390041E89B /* MarkupAccumulator.h in Headers */,
    2920829215                                00C60E3F13D76D7E0092A275 /* MarkupTokenizerInlines.h in Headers */,
     
    3219032197                                E44613AA0CD6331000FADA75 /* HTMLVideoElement.cpp in Sources */,
    3219132198                                839AAFEC1A0C0C8D00605F99 /* HTMLWBRElement.cpp in Sources */,
     32199                                5CA1DEC51F71EF9900E71BD3 /* HTTPHeaderField.cpp in Sources */,
    3219232200                                0B8C56D40F28627F000502E1 /* HTTPHeaderMap.cpp in Sources */,
    3219332201                                1AC900C31943C0FC008625B5 /* HTTPHeaderNames.cpp in Sources */,
     
    3327733285                                7AE6C9381BE0C5C800E19E03 /* MainThreadSharedTimerCF.cpp in Sources */,
    3327833286                                1A8F6BC50DB55CDC001DB794 /* ManifestParser.cpp in Sources */,
     33287                                CE1866441F72E5B400A0CAB6 /* MarkerSubrange.cpp in Sources */,
    3327933288                                93309DF7099E64920056E581 /* markup.cpp in Sources */,
    33280                                 CE1866441F72E5B400A0CAB6 /* MarkerSubrange.cpp in Sources */,
    3328133289                                9728C3131268E4390041E89B /* MarkupAccumulator.cpp in Sources */,
    3328233290                                FABE72F41059C1EB00D888CC /* MathMLAnnotationElement.cpp in Sources */,
  • trunk/Source/WebCore/loader/DocumentLoader.cpp

    r222097 r222306  
    5353#include "HTMLFormElement.h"
    5454#include "HTMLFrameOwnerElement.h"
     55#include "HTTPHeaderField.h"
    5556#include "HTTPHeaderNames.h"
    5657#include "HistoryItem.h"
  • trunk/Source/WebCore/loader/DocumentLoader.h

    r222097 r222306  
    7070class Frame;
    7171class FrameLoader;
     72class HTTPHeaderField;
    7273class IconLoader;
    7374class Page;
     
    296297    const Vector<LinkIcon>& linkIcons() const { return m_linkIcons; }
    297298
     299    void setCustomHeaderFields(Vector<HTTPHeaderField>&& fields) { m_customHeaderFields = WTFMove(fields); }
     300   
    298301protected:
    299302    WEBCORE_EXPORT DocumentLoader(const ResourceRequest&, const SubstituteData&);
     
    453456    Vector<LinkIcon> m_linkIcons;
    454457
     458    Vector<HTTPHeaderField> m_customHeaderFields;
     459   
    455460    bool m_subresourceLoadersArePageCacheAcceptable { false };
    456461    ShouldOpenExternalURLsPolicy m_shouldOpenExternalURLsPolicy { ShouldOpenExternalURLsPolicy::ShouldNotAllow };
  • trunk/Source/WebKit/ChangeLog

    r222296 r222306  
     12017-09-20  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add infrastructure for adding custom headers to requests per website
     4        https://bugs.webkit.org/show_bug.cgi?id=177255
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        * Shared/WebsitePolicies.cpp: Added.
     9        * Shared/WebsitePolicies.h:
     10        (WebKit::WebsitePolicies::encode const):
     11        (WebKit::WebsitePolicies::decode):
     12        * UIProcess/API/APIWebsitePolicies.h:
     13        * UIProcess/API/C/WKWebsitePolicies.cpp:
     14        (WKWebsitePoliciesCopyCustomHeaderFields):
     15        (WKWebsitePoliciesSetCustomHeaderFields):
     16        * UIProcess/API/C/WKWebsitePolicies.h:
     17        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
     18        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
     19        (-[_WKWebsitePolicies customHeaderFields]):
     20        (-[_WKWebsitePolicies setCustomHeaderFields:]):
     21        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     22        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
     23
    1242017-09-20  Michael Catanzaro  <mcatanzaro@igalia.com>
    225
  • trunk/Source/WebKit/Shared/WebsitePolicies.h

    r221760 r222306  
    2626#pragma once
    2727
     28#include <WebCore/HTTPHeaderField.h>
    2829#include <wtf/EnumTraits.h>
    2930#include <wtf/OptionSet.h>
    3031#include <wtf/Optional.h>
     32#include <wtf/Vector.h>
    3133
    3234namespace WebKit {
     
    4951    OptionSet<WebsiteAutoplayQuirk> allowedAutoplayQuirks;
    5052    WebsiteAutoplayPolicy autoplayPolicy { WebsiteAutoplayPolicy::Default };
     53    Vector<WebCore::HTTPHeaderField> customHeaderFields;
    5154
    5255    template<class Encoder> void encode(Encoder&) const;
     
    7780    encoder << autoplayPolicy;
    7881    encoder << allowedAutoplayQuirks;
     82    encoder << customHeaderFields;
    7983}
    8084
     
    9599    if (!allowedAutoplayQuirks)
    96100        return std::nullopt;
     101   
     102    std::optional<Vector<WebCore::HTTPHeaderField>> customHeaderFields;
     103    decoder >> customHeaderFields;
     104    if (!customHeaderFields)
     105        return std::nullopt;
    97106
    98107    return { {
     
    100109        WTFMove(*allowedAutoplayQuirks),
    101110        WTFMove(*autoplayPolicy),
     111        WTFMove(*customHeaderFields),
    102112    } };
    103113}
  • trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.h

    r218229 r222306  
    4747    void setAutoplayPolicy(WebKit::WebsiteAutoplayPolicy policy) { m_websitePolicies.autoplayPolicy = policy; }
    4848
     49    void setCustomHeaderFields(Vector<WebCore::HTTPHeaderField>&& customHeaderFields) { m_websitePolicies.customHeaderFields = WTFMove(customHeaderFields); };
     50    const Vector<WebCore::HTTPHeaderField> customHeaderFields() { return m_websitePolicies.customHeaderFields; }
     51
    4952    const WebKit::WebsitePolicies& websitePolicies() { return m_websitePolicies; }
    5053   
  • trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp

    r218229 r222306  
    2727#include "WKWebsitePolicies.h"
    2828
     29#include "APIArray.h"
    2930#include "APIWebsitePolicies.h"
    3031#include "WKAPICast.h"
     32#include "WKArray.h"
    3133#include "WebsitePolicies.h"
    3234
     
    5153{
    5254    return toImpl(websitePolicies)->contentBlockersEnabled();
     55}
     56
     57WK_EXPORT WKArrayRef WKWebsitePoliciesCopyCustomHeaderFields(WKWebsitePoliciesRef websitePolicies)
     58{
     59    const auto& fields = toImpl(websitePolicies)->customHeaderFields();
     60    Vector<RefPtr<API::Object>> strings;
     61    strings.reserveInitialCapacity(fields.size());
     62    for (const auto& field : fields)
     63        strings.uncheckedAppend(API::String::create(field.field()));
     64    return toAPI(API::Array::create(WTFMove(strings)).ptr());
     65}
     66
     67WK_EXPORT void WKWebsitePoliciesSetCustomHeaderFields(WKWebsitePoliciesRef websitePolicies, WKArrayRef array)
     68{
     69    size_t length = WKArrayGetSize(array);
     70    Vector<WebCore::HTTPHeaderField> fields;
     71    fields.reserveInitialCapacity(length);
     72    for (size_t i = 0; i < length; ++i) {
     73        WebCore::HTTPHeaderField parsedField(toImpl(static_cast<WKStringRef>(WKArrayGetItemAtIndex(array, i)))->string());
     74        if (!parsedField.field().isNull()
     75            && parsedField.field().startsWithIgnoringASCIICase("X-")) // Let's just pretend RFC6648 never happened.
     76            fields.uncheckedAppend(WTFMove(parsedField));
     77    }
     78    toImpl(websitePolicies)->setCustomHeaderFields(WTFMove(fields));
    5379}
    5480
  • trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.h

    r218229 r222306  
    5252WK_EXPORT void WKWebsitePoliciesSetContentBlockersEnabled(WKWebsitePoliciesRef, bool);
    5353
     54WK_EXPORT WKArrayRef WKWebsitePoliciesCopyCustomHeaderFields(WKWebsitePoliciesRef);
     55WK_EXPORT void WKWebsitePoliciesSetCustomHeaderFields(WKWebsitePoliciesRef, WKArrayRef);
     56
    5457WK_EXPORT WKWebsiteAutoplayQuirk WKWebsitePoliciesGetAllowedAutoplayQuirks(WKWebsitePoliciesRef);
    5558WK_EXPORT void WKWebsitePoliciesSetAllowedAutoplayQuirks(WKWebsitePoliciesRef, WKWebsiteAutoplayQuirk);
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.h

    r221930 r222306  
    4646@property (nonatomic) _WKWebsiteAutoplayQuirk allowedAutoplayQuirks WK_API_AVAILABLE(macosx(10.13), ios(11.0));
    4747@property (nonatomic) _WKWebsiteAutoplayPolicy autoplayPolicy WK_API_AVAILABLE(macosx(10.13), ios(11.0));
     48@property (nonatomic, copy, setter=setCustomHeaderFields:) NSArray<NSString *> *customHeaderFields WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
    4849
    4950@end
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.mm

    r218229 r222306  
    117117}
    118118
     119- (NSArray<NSString *> *)customHeaderFields
     120{
     121    const auto& fields = _websitePolicies->customHeaderFields();
     122    NSMutableArray *array = [[[NSMutableArray alloc] initWithCapacity:fields.size()] autorelease];
     123    for (const auto& field : fields)
     124        [array addObject:field.field()];
     125    return array;
     126}
     127
     128- (void)setCustomHeaderFields:(NSArray<NSString *> *)fields
     129{
     130    Vector<WebCore::HTTPHeaderField> parsedFields;
     131    parsedFields.reserveInitialCapacity(fields.count);
     132    for (NSString *string in fields) {
     133        WebCore::HTTPHeaderField parsedField(string);
     134        if (!parsedField.field().isNull()
     135            && parsedField.field().startsWithIgnoringASCIICase("X-")) // Let's just pretend RFC6648 never happened.
     136            parsedFields.uncheckedAppend(WTFMove(parsedField));
     137    }
     138    _websitePolicies->setCustomHeaderFields(WTFMove(parsedFields));
     139}
     140
    119141- (NSString *)description
    120142{
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r222059 r222306  
    822822    }
    823823
     824    documentLoader->setCustomHeaderFields(WTFMove(websitePolicies.customHeaderFields));
     825   
    824826    // Only setUserContentExtensionsEnabled if it hasn't already been disabled by reloading without content blockers.
    825827    if (documentLoader->userContentExtensionsEnabled())
  • trunk/Tools/ChangeLog

    r222298 r222306  
     12017-09-20  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add infrastructure for adding custom headers to requests per website
     4        https://bugs.webkit.org/show_bug.cgi?id=177255
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     9        * TestWebKitAPI/Tests/WebCore/HTTPHeaderField.cpp: Added.
     10        (shouldRemainUnchanged):
     11        (shouldBeInvalid):
     12        (shouldBecome):
     13        (TEST):
     14        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
     15        (TEST):
     16
    1172017-09-20  Daniel Bates  <dabates@apple.com>
    218
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r222298 r222306  
    236236                5C9E59421D3EB5AC00E3C62E /* ApplicationCache.db-shm in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */; };
    237237                5C9E59431D3EB5AC00E3C62E /* ApplicationCache.db-wal in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E59401D3EB1DE00E3C62E /* ApplicationCache.db-wal */; };
     238                5CA1DEC81F71F70100E71BD3 /* HTTPHeaderField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CA1DEC71F71F40700E71BD3 /* HTTPHeaderField.cpp */; };
    238239                5CB18BA81F5645E300EE23C4 /* ClickAutoFillButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CB18BA71F5645B200EE23C4 /* ClickAutoFillButton.mm */; };
    239240                5CB40B4E1F4B98D3007DC7B9 /* UIDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CB40B4D1F4B98BE007DC7B9 /* UIDelegate.mm */; };
     
    13321333                5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ApplicationCache.db-shm"; sourceTree = "<group>"; };
    13331334                5C9E59401D3EB1DE00E3C62E /* ApplicationCache.db-wal */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ApplicationCache.db-wal"; sourceTree = "<group>"; };
     1335                5CA1DEC71F71F40700E71BD3 /* HTTPHeaderField.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPHeaderField.cpp; sourceTree = "<group>"; };
    13341336                5CB18BA71F5645B200EE23C4 /* ClickAutoFillButton.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ClickAutoFillButton.mm; sourceTree = "<group>"; };
    13351337                5CB40B4D1F4B98BE007DC7B9 /* UIDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = UIDelegate.mm; sourceTree = "<group>"; };
     
    20832085                                8E4A85361E1D1AA100F53B0F /* GridPosition.cpp */,
    20842086                                83B88A331C80056D00BB2418 /* HTMLParserIdioms.cpp */,
     2087                                5CA1DEC71F71F40700E71BD3 /* HTTPHeaderField.cpp */,
    20852088                                7A909A731D877475007E10F8 /* IntPoint.cpp */,
    20862089                                7A909A741D877475007E10F8 /* IntRect.cpp */,
     
    32423245                                7CCE7EC21A411A7E00447C4C /* HTMLFormCollectionNamedItem.mm in Sources */,
    32433246                                7C83E0501D0A641800FEBCF3 /* HTMLParserIdioms.cpp in Sources */,
     3247                                5CA1DEC81F71F70100E71BD3 /* HTTPHeaderField.cpp in Sources */,
    32443248                                51AF23DF1EF1A3730072F281 /* IconLoadingDelegate.mm in Sources */,
    32453249                                510477781D29923B009747EB /* IDBDeleteRecovery.mm in Sources */,
     
    32833287                                7A6A2C701DCCFA8C00C0D085 /* LocalStorageQuirkTest.mm in Sources */,
    32843288                                076E507F1F4513D6006E9F5A /* Logging.cpp in Sources */,
     3289                                CE1866491F72E8F100A0CAB6 /* MarkerSubrange.cpp in Sources */,
    32853290                                CDA315981ED53651009F60D3 /* MediaPlaybackSleepAssertion.mm in Sources */,
    32863291                                CDC9442E1EF1FC080059C3C4 /* MediaStreamTrackDetached.mm in Sources */,
     
    33733378                                ECA680CE1E68CC0900731D20 /* StringUtilities.mm in Sources */,
    33743379                                CE4D5DE71F6743BA0072CFC6 /* StringWithDirection.cpp in Sources */,
    3375                                 CE1866491F72E8F100A0CAB6 /* MarkerSubrange.cpp in Sources */,
    33763380                                7CCE7ED21A411A7E00447C4C /* SubresourceErrorCrash.mm in Sources */,
    33773381                                7CCE7EA81A411A1900447C4C /* SyntheticBackingScaleFactorWindow.m in Sources */,
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm

    r221505 r222306  
    623623    [webView waitForMessage:@"playing"];
    624624}
    625 #endif
    626 
    627 #endif
     625#endif // PLATFORM(MAC)
     626
     627TEST(WebKit, InvalidCustomHeaders)
     628{
     629    auto websitePolicies = adoptNS([[_WKWebsitePolicies alloc] init]);
     630    [websitePolicies setCustomHeaderFields:@[@"invalidheader:", @"noncustom: header", @"X-custom: header", @"    x-Custom :  Needs Canonicalization\t "]];
     631    NSArray<NSString *> *canonicalized = [websitePolicies customHeaderFields];
     632    EXPECT_EQ(canonicalized.count, 2u);
     633    EXPECT_STREQ([canonicalized objectAtIndex:0].UTF8String, "X-custom: header");
     634    EXPECT_STREQ([canonicalized objectAtIndex:1].UTF8String, "x-Custom: Needs Canonicalization");
     635}
     636
     637// FIXME: Apply the custom headers from the DocumentLoader to each request and test that they are sent on main resource and subresources.
     638
     639#endif // WK_API_ENABLED
Note: See TracChangeset for help on using the changeset viewer.