Changeset 222306 in webkit
- Timestamp:
- Sep 20, 2017, 6:15:23 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r222298 r222306 2103 2103 loader/FrameLoader.cpp 2104 2104 loader/FrameLoaderStateMachine.cpp 2105 loader/HTTPHeaderField.cpp 2105 2106 loader/HistoryController.cpp 2106 2107 loader/ImageLoader.cpp -
trunk/Source/WebCore/ChangeLog
r222304 r222306 1 2017-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 1 32 2017-09-20 Said Abou-Hallawa <sabouhallawa@apple.com> 2 33 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r222298 r222306 2740 2740 5C9B860C1C21E3C900110F36 /* NetworkLoadMetrics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C9B860B1C21E3C600110F36 /* NetworkLoadMetrics.mm */; }; 2741 2741 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, ); }; }; 2742 2744 5CB37FFE1C62D28C00F20188 /* ScrollAnimatorMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */; }; 2743 2745 5CB37FFF1C62D2A100F20188 /* ScrollAnimatorMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */; }; … … 10688 10690 5C9EF16F1DFF719900A452E3 /* XPathGrammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XPathGrammar.cpp; sourceTree = "<group>"; }; 10689 10691 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>"; }; 10690 10694 5CB37FFC1C62D27800F20188 /* ScrollAnimatorMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollAnimatorMock.cpp; sourceTree = "<group>"; }; 10691 10695 5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollAnimatorMock.h; sourceTree = "<group>"; }; … … 24440 24444 97DCE1FF10807C750057D394 /* HistoryController.cpp */, 24441 24445 97DCE20010807C750057D394 /* HistoryController.h */, 24446 5CA1DEC21F71E68600E71BD3 /* HTTPHeaderField.cpp */, 24447 5CA1DEC41F71E68700E71BD3 /* HTTPHeaderField.h */, 24442 24448 089582530E857A7E00F82C83 /* ImageLoader.cpp */, 24443 24449 089582540E857A7E00F82C83 /* ImageLoader.h */, … … 28146 28152 E44613AB0CD6331000FADA75 /* HTMLVideoElement.h in Headers */, 28147 28153 839AAFED1A0C0C8D00605F99 /* HTMLWBRElement.h in Headers */, 28154 5CA1DEC61F71F1C700E71BD3 /* HTTPHeaderField.h in Headers */, 28148 28155 514C76710CE923A1007EF3CD /* HTTPHeaderMap.h in Headers */, 28149 28156 1AB5EBD2194A50F30059AC70 /* HTTPHeaderNames.h in Headers */, … … 29203 29210 7AE6C93C1BE0C60100E19E03 /* MainThreadSharedTimer.h in Headers */, 29204 29211 1A8F6BC60DB55CDC001DB794 /* ManifestParser.h in Headers */, 29212 CE1866451F72E5B400A0CAB6 /* MarkerSubrange.h in Headers */, 29205 29213 93309DF8099E64920056E581 /* markup.h in Headers */, 29206 CE1866451F72E5B400A0CAB6 /* MarkerSubrange.h in Headers */,29207 29214 9728C3141268E4390041E89B /* MarkupAccumulator.h in Headers */, 29208 29215 00C60E3F13D76D7E0092A275 /* MarkupTokenizerInlines.h in Headers */, … … 32190 32197 E44613AA0CD6331000FADA75 /* HTMLVideoElement.cpp in Sources */, 32191 32198 839AAFEC1A0C0C8D00605F99 /* HTMLWBRElement.cpp in Sources */, 32199 5CA1DEC51F71EF9900E71BD3 /* HTTPHeaderField.cpp in Sources */, 32192 32200 0B8C56D40F28627F000502E1 /* HTTPHeaderMap.cpp in Sources */, 32193 32201 1AC900C31943C0FC008625B5 /* HTTPHeaderNames.cpp in Sources */, … … 33277 33285 7AE6C9381BE0C5C800E19E03 /* MainThreadSharedTimerCF.cpp in Sources */, 33278 33286 1A8F6BC50DB55CDC001DB794 /* ManifestParser.cpp in Sources */, 33287 CE1866441F72E5B400A0CAB6 /* MarkerSubrange.cpp in Sources */, 33279 33288 93309DF7099E64920056E581 /* markup.cpp in Sources */, 33280 CE1866441F72E5B400A0CAB6 /* MarkerSubrange.cpp in Sources */,33281 33289 9728C3131268E4390041E89B /* MarkupAccumulator.cpp in Sources */, 33282 33290 FABE72F41059C1EB00D888CC /* MathMLAnnotationElement.cpp in Sources */, -
trunk/Source/WebCore/loader/DocumentLoader.cpp
r222097 r222306 53 53 #include "HTMLFormElement.h" 54 54 #include "HTMLFrameOwnerElement.h" 55 #include "HTTPHeaderField.h" 55 56 #include "HTTPHeaderNames.h" 56 57 #include "HistoryItem.h" -
trunk/Source/WebCore/loader/DocumentLoader.h
r222097 r222306 70 70 class Frame; 71 71 class FrameLoader; 72 class HTTPHeaderField; 72 73 class IconLoader; 73 74 class Page; … … 296 297 const Vector<LinkIcon>& linkIcons() const { return m_linkIcons; } 297 298 299 void setCustomHeaderFields(Vector<HTTPHeaderField>&& fields) { m_customHeaderFields = WTFMove(fields); } 300 298 301 protected: 299 302 WEBCORE_EXPORT DocumentLoader(const ResourceRequest&, const SubstituteData&); … … 453 456 Vector<LinkIcon> m_linkIcons; 454 457 458 Vector<HTTPHeaderField> m_customHeaderFields; 459 455 460 bool m_subresourceLoadersArePageCacheAcceptable { false }; 456 461 ShouldOpenExternalURLsPolicy m_shouldOpenExternalURLsPolicy { ShouldOpenExternalURLsPolicy::ShouldNotAllow }; -
trunk/Source/WebKit/ChangeLog
r222296 r222306 1 2017-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 1 24 2017-09-20 Michael Catanzaro <mcatanzaro@igalia.com> 2 25 -
trunk/Source/WebKit/Shared/WebsitePolicies.h
r221760 r222306 26 26 #pragma once 27 27 28 #include <WebCore/HTTPHeaderField.h> 28 29 #include <wtf/EnumTraits.h> 29 30 #include <wtf/OptionSet.h> 30 31 #include <wtf/Optional.h> 32 #include <wtf/Vector.h> 31 33 32 34 namespace WebKit { … … 49 51 OptionSet<WebsiteAutoplayQuirk> allowedAutoplayQuirks; 50 52 WebsiteAutoplayPolicy autoplayPolicy { WebsiteAutoplayPolicy::Default }; 53 Vector<WebCore::HTTPHeaderField> customHeaderFields; 51 54 52 55 template<class Encoder> void encode(Encoder&) const; … … 77 80 encoder << autoplayPolicy; 78 81 encoder << allowedAutoplayQuirks; 82 encoder << customHeaderFields; 79 83 } 80 84 … … 95 99 if (!allowedAutoplayQuirks) 96 100 return std::nullopt; 101 102 std::optional<Vector<WebCore::HTTPHeaderField>> customHeaderFields; 103 decoder >> customHeaderFields; 104 if (!customHeaderFields) 105 return std::nullopt; 97 106 98 107 return { { … … 100 109 WTFMove(*allowedAutoplayQuirks), 101 110 WTFMove(*autoplayPolicy), 111 WTFMove(*customHeaderFields), 102 112 } }; 103 113 } -
trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.h
r218229 r222306 47 47 void setAutoplayPolicy(WebKit::WebsiteAutoplayPolicy policy) { m_websitePolicies.autoplayPolicy = policy; } 48 48 49 void setCustomHeaderFields(Vector<WebCore::HTTPHeaderField>&& customHeaderFields) { m_websitePolicies.customHeaderFields = WTFMove(customHeaderFields); }; 50 const Vector<WebCore::HTTPHeaderField> customHeaderFields() { return m_websitePolicies.customHeaderFields; } 51 49 52 const WebKit::WebsitePolicies& websitePolicies() { return m_websitePolicies; } 50 53 -
trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp
r218229 r222306 27 27 #include "WKWebsitePolicies.h" 28 28 29 #include "APIArray.h" 29 30 #include "APIWebsitePolicies.h" 30 31 #include "WKAPICast.h" 32 #include "WKArray.h" 31 33 #include "WebsitePolicies.h" 32 34 … … 51 53 { 52 54 return toImpl(websitePolicies)->contentBlockersEnabled(); 55 } 56 57 WK_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 67 WK_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)); 53 79 } 54 80 -
trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.h
r218229 r222306 52 52 WK_EXPORT void WKWebsitePoliciesSetContentBlockersEnabled(WKWebsitePoliciesRef, bool); 53 53 54 WK_EXPORT WKArrayRef WKWebsitePoliciesCopyCustomHeaderFields(WKWebsitePoliciesRef); 55 WK_EXPORT void WKWebsitePoliciesSetCustomHeaderFields(WKWebsitePoliciesRef, WKArrayRef); 56 54 57 WK_EXPORT WKWebsiteAutoplayQuirk WKWebsitePoliciesGetAllowedAutoplayQuirks(WKWebsitePoliciesRef); 55 58 WK_EXPORT void WKWebsitePoliciesSetAllowedAutoplayQuirks(WKWebsitePoliciesRef, WKWebsiteAutoplayQuirk); -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.h
r221930 r222306 46 46 @property (nonatomic) _WKWebsiteAutoplayQuirk allowedAutoplayQuirks WK_API_AVAILABLE(macosx(10.13), ios(11.0)); 47 47 @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)); 48 49 49 50 @end -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.mm
r218229 r222306 117 117 } 118 118 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 119 141 - (NSString *)description 120 142 { -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
r222059 r222306 822 822 } 823 823 824 documentLoader->setCustomHeaderFields(WTFMove(websitePolicies.customHeaderFields)); 825 824 826 // Only setUserContentExtensionsEnabled if it hasn't already been disabled by reloading without content blockers. 825 827 if (documentLoader->userContentExtensionsEnabled()) -
trunk/Tools/ChangeLog
r222298 r222306 1 2017-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 1 17 2017-09-20 Daniel Bates <dabates@apple.com> 2 18 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r222298 r222306 236 236 5C9E59421D3EB5AC00E3C62E /* ApplicationCache.db-shm in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */; }; 237 237 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 */; }; 238 239 5CB18BA81F5645E300EE23C4 /* ClickAutoFillButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CB18BA71F5645B200EE23C4 /* ClickAutoFillButton.mm */; }; 239 240 5CB40B4E1F4B98D3007DC7B9 /* UIDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CB40B4D1F4B98BE007DC7B9 /* UIDelegate.mm */; }; … … 1332 1333 5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ApplicationCache.db-shm"; sourceTree = "<group>"; }; 1333 1334 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>"; }; 1334 1336 5CB18BA71F5645B200EE23C4 /* ClickAutoFillButton.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ClickAutoFillButton.mm; sourceTree = "<group>"; }; 1335 1337 5CB40B4D1F4B98BE007DC7B9 /* UIDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = UIDelegate.mm; sourceTree = "<group>"; }; … … 2083 2085 8E4A85361E1D1AA100F53B0F /* GridPosition.cpp */, 2084 2086 83B88A331C80056D00BB2418 /* HTMLParserIdioms.cpp */, 2087 5CA1DEC71F71F40700E71BD3 /* HTTPHeaderField.cpp */, 2085 2088 7A909A731D877475007E10F8 /* IntPoint.cpp */, 2086 2089 7A909A741D877475007E10F8 /* IntRect.cpp */, … … 3242 3245 7CCE7EC21A411A7E00447C4C /* HTMLFormCollectionNamedItem.mm in Sources */, 3243 3246 7C83E0501D0A641800FEBCF3 /* HTMLParserIdioms.cpp in Sources */, 3247 5CA1DEC81F71F70100E71BD3 /* HTTPHeaderField.cpp in Sources */, 3244 3248 51AF23DF1EF1A3730072F281 /* IconLoadingDelegate.mm in Sources */, 3245 3249 510477781D29923B009747EB /* IDBDeleteRecovery.mm in Sources */, … … 3283 3287 7A6A2C701DCCFA8C00C0D085 /* LocalStorageQuirkTest.mm in Sources */, 3284 3288 076E507F1F4513D6006E9F5A /* Logging.cpp in Sources */, 3289 CE1866491F72E8F100A0CAB6 /* MarkerSubrange.cpp in Sources */, 3285 3290 CDA315981ED53651009F60D3 /* MediaPlaybackSleepAssertion.mm in Sources */, 3286 3291 CDC9442E1EF1FC080059C3C4 /* MediaStreamTrackDetached.mm in Sources */, … … 3373 3378 ECA680CE1E68CC0900731D20 /* StringUtilities.mm in Sources */, 3374 3379 CE4D5DE71F6743BA0072CFC6 /* StringWithDirection.cpp in Sources */, 3375 CE1866491F72E8F100A0CAB6 /* MarkerSubrange.cpp in Sources */,3376 3380 7CCE7ED21A411A7E00447C4C /* SubresourceErrorCrash.mm in Sources */, 3377 3381 7CCE7EA81A411A1900447C4C /* SyntheticBackingScaleFactorWindow.m in Sources */, -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm
r221505 r222306 623 623 [webView waitForMessage:@"playing"]; 624 624 } 625 #endif 626 627 #endif 625 #endif // PLATFORM(MAC) 626 627 TEST(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.