Changeset 245038 in webkit
- Timestamp:
- May 7, 2019 2:51:43 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 23 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r245036 r245038 1 2019-05-07 Alex Christensen <achristensen@webkit.org> 2 3 Add SPI to set a list of hosts to which to send custom header fields cross-origin 4 https://bugs.webkit.org/show_bug.cgi?id=197397 5 6 Reviewed by Geoff Garen. 7 8 In r223001 I added the ability to send custom headers, but with a restriction that they will not be sent except to the origin of the main document. 9 We need the ability to specify what origins to send these headers to even if they are not first party requests. 10 We get this information in a list of strings which are the hosts to send the headers to. Some of the strings have an asterisk at the beginning, 11 indicating that the headers are to be sent to all subdomains. 12 13 I repurposed some ObjC SPI that was never adopted, but I keep testing the C API that was to verify no regression. 14 I also added some new API tests for the new behavior. 15 16 * Sources.txt: 17 * WebCore.xcodeproj/project.pbxproj: 18 * loader/CustomHeaderFields.cpp: Added. 19 (WebCore::CustomHeaderFields::thirdPartyDomainsMatch const): 20 * loader/CustomHeaderFields.h: Added. 21 (WebCore::CustomHeaderFields::encode const): 22 (WebCore::CustomHeaderFields::decode): 23 * loader/DocumentLoader.cpp: 24 (WebCore::DocumentLoader::setCustomHeaderFields): Deleted. 25 * loader/DocumentLoader.h: 26 (WebCore::DocumentLoader::setCustomHeaderFields): 27 (WebCore::DocumentLoader::customHeaderFields const): 28 (WebCore::DocumentLoader::customHeaderFields): Deleted. 29 * loader/cache/CachedResourceLoader.cpp: 30 (WebCore::CachedResourceLoader::requestResource): 31 1 32 2019-05-07 Andy Estes <aestes@apple.com> 2 33 -
trunk/Source/WebCore/Headers.cmake
r245025 r245038 655 655 loader/CrossOriginAccessControl.h 656 656 loader/CrossOriginPreflightResultCache.h 657 loader/CustomHeaderFields.h 657 658 loader/DocumentLoader.h 658 659 loader/DocumentWriter.h -
trunk/Source/WebCore/Sources.txt
r245025 r245038 1365 1365 loader/CrossOriginPreflightChecker.cpp 1366 1366 loader/CrossOriginPreflightResultCache.cpp 1367 loader/CustomHeaderFields.cpp @no-unify 1367 1368 loader/DocumentLoader.cpp 1368 1369 loader/DocumentThreadableLoader.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r245025 r245038 1873 1873 5C4304B1191AC908000E2BC0 /* EXTShaderTextureLOD.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C4304AE191AC908000E2BC0 /* EXTShaderTextureLOD.h */; }; 1874 1874 5C4304B6191AEF46000E2BC0 /* JSEXTShaderTextureLOD.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C4304B4191AEF46000E2BC0 /* JSEXTShaderTextureLOD.h */; }; 1875 5C5D2385227A0652000B9BDA /* CustomHeaderFields.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C5D2383227A063A000B9BDA /* CustomHeaderFields.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1875 1876 5C7C88D81D0F1F4A009D2F6D /* SocketProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C7C88D71D0F1F2B009D2F6D /* SocketProvider.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1876 1877 5C9C2DB52241A67B00996B0B /* ContentRuleListResults.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C9C2DB32241A67300996B0B /* ContentRuleListResults.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 1879 1880 5CB37FFF1C62D2A100F20188 /* ScrollAnimatorMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB37FFD1C62D27800F20188 /* ScrollAnimatorMock.h */; }; 1880 1881 5CBC8DAD1AAA302200E1C803 /* MediaAccessibilitySoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CBC8DAB1AAA302200E1C803 /* MediaAccessibilitySoftLink.h */; }; 1882 5CBD59592280E926002B22AA /* CustomHeaderFields.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C5D2386227A077C000B9BDA /* CustomHeaderFields.cpp */; }; 1881 1883 5CD9F5661AA0F73C00DA45FF /* DFABytecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C39305D1AA0F6A90029C816 /* DFABytecode.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1882 1884 5CD9F5671AA0F74200DA45FF /* DFABytecodeCompiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C39305F1AA0F6A90029C816 /* DFABytecodeCompiler.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 8831 8833 5C5381B31D87E08100E2EBE6 /* JSURLSearchParams.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSURLSearchParams.cpp; sourceTree = "<group>"; }; 8832 8834 5C5381B41D87E08100E2EBE6 /* JSURLSearchParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSURLSearchParams.h; sourceTree = "<group>"; }; 8835 5C5D2383227A063A000B9BDA /* CustomHeaderFields.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomHeaderFields.h; sourceTree = "<group>"; }; 8836 5C5D2386227A077C000B9BDA /* CustomHeaderFields.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CustomHeaderFields.cpp; sourceTree = "<group>"; }; 8833 8837 5C668E641E7C6C3500D32B3B /* SocketStreamHandleImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SocketStreamHandleImpl.cpp; sourceTree = "<group>"; }; 8834 8838 5C688AA01D380509000B54FA /* ThreadableWebSocketChannel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadableWebSocketChannel.cpp; sourceTree = "<group>"; }; … … 25010 25014 E1C415DD0F655D7C0092D2FB /* CrossOriginPreflightResultCache.cpp */, 25011 25015 E1C415D90F655D6F0092D2FB /* CrossOriginPreflightResultCache.h */, 25016 5C5D2386227A077C000B9BDA /* CustomHeaderFields.cpp */, 25017 5C5D2383227A063A000B9BDA /* CustomHeaderFields.h */, 25012 25018 93E227DB0AF589AD00D48324 /* DocumentLoader.cpp */, 25013 25019 656D371E0ADBA5DE00A4554D /* DocumentLoader.h */, … … 28682 28688 9BD4E91B1C462CFC005065BC /* CustomElementRegistry.h in Headers */, 28683 28689 62CD325A1157E57C0063B0A7 /* CustomEvent.h in Headers */, 28690 5C5D2385227A0652000B9BDA /* CustomHeaderFields.h in Headers */, 28684 28691 4B1E13E721790D660042CF98 /* CustomPaintCanvas.h in Headers */, 28685 28692 4B7AE4932177B56F00C59959 /* CustomPaintImage.h in Headers */, … … 32606 32613 46C696CC1E7205FC00597937 /* CPUMonitor.cpp in Sources */, 32607 32614 1ABA76CA11D20E50004C201C /* CSSPropertyNames.cpp in Sources */, 32615 5CBD59592280E926002B22AA /* CustomHeaderFields.cpp in Sources */, 32608 32616 BE23480C18A9870B00E4B6E8 /* DataCue.cpp in Sources */, 32609 32617 4463CF682212FA68001A8577 /* DataDetectorsCoreSoftLink.mm in Sources */, -
trunk/Source/WebCore/loader/DocumentLoader.cpp
r244589 r245038 39 39 #include "ContentExtensionError.h" 40 40 #include "ContentSecurityPolicy.h" 41 #include "CustomHeaderFields.h" 41 42 #include "DOMWindow.h" 42 43 #include "Document.h" … … 54 55 #include "HTMLFormElement.h" 55 56 #include "HTMLFrameOwnerElement.h" 56 #include "HTTPHeaderField.h"57 57 #include "HTTPHeaderNames.h" 58 58 #include "HistoryItem.h" … … 1323 1323 #endif 1324 1324 1325 void DocumentLoader::setCustomHeaderFields(Vector<HTTPHeaderField>&& fields)1326 {1327 m_customHeaderFields = WTFMove(fields);1328 }1329 1330 1325 bool DocumentLoader::isLoadingInAPISense() const 1331 1326 { -
trunk/Source/WebCore/loader/DocumentLoader.h
r244382 r245038 77 77 class CachedResourceLoader; 78 78 class ContentFilter; 79 struct CustomHeaderFields; 79 80 class FormState; 80 81 class Frame; 81 82 class FrameLoader; 82 class HTTPHeaderField;83 83 class IconLoader; 84 84 class Page; … … 372 372 #endif 373 373 374 WEBCORE_EXPORT void setCustomHeaderFields(Vector<HTTPHeaderField>&& fields);375 const Vector< HTTPHeaderField>& customHeaderFields(){ return m_customHeaderFields; }374 void setCustomHeaderFields(Vector<CustomHeaderFields>&& fields) { m_customHeaderFields = WTFMove(fields); } 375 const Vector<CustomHeaderFields>& customHeaderFields() const { return m_customHeaderFields; } 376 376 377 377 void setAllowsWebArchiveForMainFrame(bool allowsWebArchiveForMainFrame) { m_allowsWebArchiveForMainFrame = allowsWebArchiveForMainFrame; } … … 565 565 #endif 566 566 567 Vector< HTTPHeaderField> m_customHeaderFields;567 Vector<CustomHeaderFields> m_customHeaderFields; 568 568 569 569 bool m_subresourceLoadersArePageCacheAcceptable { false }; -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp
r244700 r245038 44 44 #include "ContentSecurityPolicy.h" 45 45 #include "CrossOriginAccessControl.h" 46 #include "CustomHeaderFields.h" 46 47 #include "DOMWindow.h" 47 48 #include "DiagnosticLoggingClient.h" … … 859 860 && document()->securityOrigin().isSameSchemeHostPort(requestedOrigin.get()); 860 861 } 861 if (sameOriginRequest) { 862 for (auto& field : m_documentLoader->customHeaderFields()) 863 request.resourceRequest().setHTTPHeaderField(field.name(), field.value()); 862 for (auto& fields : m_documentLoader->customHeaderFields()) { 863 if (sameOriginRequest || fields.thirdPartyDomainsMatch(url)) { 864 for (auto& field : fields.fields) 865 request.resourceRequest().setHTTPHeaderField(field.name(), field.value()); 866 } 864 867 } 865 868 } -
trunk/Source/WebKit/ChangeLog
r245027 r245038 1 2019-05-07 Alex Christensen <achristensen@webkit.org> 2 3 Add SPI to set a list of hosts to which to send custom header fields cross-origin 4 https://bugs.webkit.org/show_bug.cgi?id=197397 5 6 Reviewed by Geoff Garen. 7 8 * Shared/API/APIObject.h: 9 * Shared/Cocoa/APIObject.mm: 10 (API::Object::newObject): 11 * Shared/WebsitePoliciesData.cpp: 12 (WebKit::WebsitePoliciesData::decode): 13 * Shared/WebsitePoliciesData.h: 14 * SourcesCocoa.txt: 15 * UIProcess/API/APICustomHeaderFields.h: Added. 16 * UIProcess/API/APIWebsitePolicies.cpp: 17 (API::WebsitePolicies::WebsitePolicies): 18 (API::WebsitePolicies::copy const): 19 (API::WebsitePolicies::data): 20 * UIProcess/API/APIWebsitePolicies.h: 21 * UIProcess/API/C/WKWebsitePolicies.cpp: 22 (WKWebsitePoliciesCopyCustomHeaderFields): 23 (WKWebsitePoliciesSetCustomHeaderFields): 24 * UIProcess/API/Cocoa/WKWebpagePreferences.mm: 25 (-[WKWebpagePreferences _customHeaderFields]): 26 (-[WKWebpagePreferences _setCustomHeaderFields:]): 27 * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h: 28 * UIProcess/API/Cocoa/_WKCustomHeaderFields.h: Added. 29 * UIProcess/API/Cocoa/_WKCustomHeaderFields.mm: Added. 30 (-[_WKCustomHeaderFields init]): 31 (-[_WKCustomHeaderFields dealloc]): 32 (-[_WKCustomHeaderFields fields]): 33 (-[_WKCustomHeaderFields setFields:]): 34 (-[_WKCustomHeaderFields thirdPartyDomains]): 35 (-[_WKCustomHeaderFields setThirdPartyDomains:]): 36 (-[_WKCustomHeaderFields _apiObject]): 37 * UIProcess/API/Cocoa/_WKCustomHeaderFieldsInternal.h: Added. 38 * UIProcess/API/Cocoa/_WKWebsitePolicies.h: 39 * UIProcess/API/Cocoa/_WKWebsitePolicies.mm: 40 (-[_WKWebsitePolicies customHeaderFields]): Deleted. 41 (-[_WKWebsitePolicies setCustomHeaderFields:]): Deleted. 42 * UIProcess/Cocoa/WebViewImpl.h: 43 * UIProcess/Cocoa/WebViewImpl.mm: 44 (WebKit::WebViewImpl::takeFocus): 45 (WebKit::WebViewImpl::accessibilityAttributeValue): 46 * WebKit.xcodeproj/project.pbxproj: 47 1 48 2019-05-07 Adrian Perez de Castro <aperez@igalia.com> 2 49 -
trunk/Source/WebKit/Shared/API/APIObject.h
r244307 r245038 112 112 ContextMenuListener, 113 113 CookieManager, 114 CustomHeaderFields, 114 115 InternalDebugFeature, 115 116 Download, -
trunk/Source/WebKit/Shared/Cocoa/APIObject.mm
r244307 r245038 71 71 #import "_WKAutomationSessionInternal.h" 72 72 #import "_WKContentRuleListActionInternal.h" 73 #import "_WKCustomHeaderFieldsInternal.h" 73 74 #import "_WKDownloadInternal.h" 74 75 #import "_WKExperimentalFeatureInternal.h" … … 313 314 break; 314 315 316 case Type::CustomHeaderFields: 317 wrapper = [_WKCustomHeaderFields alloc]; 318 break; 319 315 320 case Type::UserContentWorld: 316 321 wrapper = [_WKUserContentWorld alloc]; -
trunk/Source/WebKit/Shared/WebsitePoliciesData.cpp
r244382 r245038 29 29 #include "ArgumentCoders.h" 30 30 #include "WebProcess.h" 31 #include <WebCore/CustomHeaderFields.h> 31 32 #include <WebCore/DocumentLoader.h> 32 33 #include <WebCore/Frame.h> … … 78 79 return WTF::nullopt; 79 80 80 Optional<Vector<WebCore:: HTTPHeaderField>> customHeaderFields;81 Optional<Vector<WebCore::CustomHeaderFields>> customHeaderFields; 81 82 decoder >> customHeaderFields; 82 83 if (!customHeaderFields) -
trunk/Source/WebKit/Shared/WebsitePoliciesData.h
r244382 r245038 33 33 #include "WebsitePopUpPolicy.h" 34 34 #include "WebsiteSimulatedMouseEventsDispatchPolicy.h" 35 #include <WebCore/CustomHeaderFields.h> 35 36 #include <WebCore/DeviceOrientationOrMotionPermissionState.h> 36 #include <WebCore/HTTPHeaderField.h>37 37 #include <wtf/OptionSet.h> 38 38 … … 57 57 WebCore::DeviceOrientationOrMotionPermissionState deviceOrientationAndMotionAccessState; 58 58 #endif 59 Vector<WebCore:: HTTPHeaderField> customHeaderFields;59 Vector<WebCore::CustomHeaderFields> customHeaderFields; 60 60 WebsitePopUpPolicy popUpPolicy { WebsitePopUpPolicy::Default }; 61 61 Optional<WebsiteDataStoreParameters> websiteDataStoreParameters; -
trunk/Source/WebKit/SourcesCocoa.txt
r245021 r245038 242 242 UIProcess/API/Cocoa/_WKContentRuleListAction.mm 243 243 UIProcess/API/Cocoa/_WKContextMenuElementInfo.mm 244 UIProcess/API/Cocoa/_WKCustomHeaderFields.mm @no-unify 244 245 UIProcess/API/Cocoa/_WKDownload.mm 245 246 UIProcess/API/Cocoa/_WKElementAction.mm -
trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.cpp
r244966 r245038 34 34 WebsitePolicies::WebsitePolicies() = default; 35 35 36 WebsitePolicies::WebsitePolicies(bool contentBlockersEnabled, OptionSet<WebKit::WebsiteAutoplayQuirk> allowedAutoplayQuirks, WebKit::WebsiteAutoplayPolicy autoplayPolicy, Vector<WebCore::HTTPHeaderField>&& customHeaderFields, WebKit::WebsitePopUpPolicy popUpPolicy, RefPtr<WebsiteDataStore>&& websiteDataStore)36 WebsitePolicies::WebsitePolicies(bool contentBlockersEnabled, OptionSet<WebKit::WebsiteAutoplayQuirk> allowedAutoplayQuirks, WebKit::WebsiteAutoplayPolicy autoplayPolicy, Vector<WebCore::HTTPHeaderField>&& legacyCustomHeaderFields, Vector<WebCore::CustomHeaderFields>&& customHeaderFields, WebKit::WebsitePopUpPolicy popUpPolicy, RefPtr<WebsiteDataStore>&& websiteDataStore) 37 37 : m_contentBlockersEnabled(contentBlockersEnabled) 38 38 , m_allowedAutoplayQuirks(allowedAutoplayQuirks) 39 39 , m_autoplayPolicy(autoplayPolicy) 40 , m_legacyCustomHeaderFields(WTFMove(legacyCustomHeaderFields)) 40 41 , m_customHeaderFields(WTFMove(customHeaderFields)) 41 42 , m_popUpPolicy(popUpPolicy) … … 61 62 policies->setMediaSourcePolicy(m_mediaSourcePolicy); 62 63 policies->setSimulatedMouseEventsDispatchPolicy(m_simulatedMouseEventsDispatchPolicy); 63 Vector<WebCore::HTTPHeaderField> customHeaderFields; 64 65 Vector<WebCore::HTTPHeaderField> legacyCustomHeaderFields; 66 legacyCustomHeaderFields.reserveInitialCapacity(m_legacyCustomHeaderFields.size()); 67 for (auto& field : m_legacyCustomHeaderFields) 68 legacyCustomHeaderFields.uncheckedAppend(field); 69 policies->setLegacyCustomHeaderFields(WTFMove(legacyCustomHeaderFields)); 70 71 Vector<WebCore::CustomHeaderFields> customHeaderFields; 64 72 customHeaderFields.reserveInitialCapacity(m_customHeaderFields.size()); 65 73 for (auto& field : m_customHeaderFields) 66 customHeaderFields. append(WebCore::HTTPHeaderField(field));74 customHeaderFields.uncheckedAppend(field); 67 75 policies->setCustomHeaderFields(WTFMove(customHeaderFields)); 68 76 policies->setAllowSiteSpecificQuirksToOverrideCompatibilityMode(m_allowSiteSpecificQuirksToOverrideCompatibilityMode); … … 81 89 WebKit::WebsitePoliciesData WebsitePolicies::data() 82 90 { 91 bool hasLegacyCustomHeaderFields = legacyCustomHeaderFields().size(); 92 Vector<WebCore::CustomHeaderFields> customHeaderFields; 93 customHeaderFields.reserveInitialCapacity(this->customHeaderFields().size() + hasLegacyCustomHeaderFields); 94 for (auto& field : this->customHeaderFields()) 95 customHeaderFields.uncheckedAppend(field); 96 if (hasLegacyCustomHeaderFields) 97 customHeaderFields.uncheckedAppend({ legacyCustomHeaderFields(), { }}); 98 83 99 return { 84 100 contentBlockersEnabled(), … … 88 104 deviceOrientationAndMotionAccessState(), 89 105 #endif 90 customHeaderFields(),106 WTFMove(customHeaderFields), 91 107 popUpPolicy(), 92 108 m_websiteDataStore ? Optional<WebKit::WebsiteDataStoreParameters> { m_websiteDataStore->websiteDataStore().parameters() } : WTF::nullopt, -
trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.h
r244966 r245038 34 34 #include "WebsitePopUpPolicy.h" 35 35 #include "WebsiteSimulatedMouseEventsDispatchPolicy.h" 36 #include <WebCore/CustomHeaderFields.h> 36 37 #include <WebCore/DeviceOrientationOrMotionPermissionState.h> 37 38 #include <WebCore/HTTPHeaderField.h> … … 69 70 #endif 70 71 71 const Vector<WebCore::HTTPHeaderField>& customHeaderFields() const { return m_customHeaderFields; } 72 Vector<WebCore::HTTPHeaderField>&& takeCustomHeaderFields() { return WTFMove(m_customHeaderFields); } 73 void setCustomHeaderFields(Vector<WebCore::HTTPHeaderField>&& fields) { m_customHeaderFields = WTFMove(fields); } 72 const Vector<WebCore::HTTPHeaderField>& legacyCustomHeaderFields() const { return m_legacyCustomHeaderFields; } 73 void setLegacyCustomHeaderFields(Vector<WebCore::HTTPHeaderField>&& fields) { m_legacyCustomHeaderFields = WTFMove(fields); } 74 75 const Vector<WebCore::CustomHeaderFields>& customHeaderFields() const { return m_customHeaderFields; } 76 void setCustomHeaderFields(Vector<WebCore::CustomHeaderFields>&& fields) { m_customHeaderFields = WTFMove(fields); } 74 77 75 78 WebKit::WebsitePopUpPolicy popUpPolicy() const { return m_popUpPolicy; } … … 106 109 107 110 private: 108 WebsitePolicies(bool contentBlockersEnabled, OptionSet<WebKit::WebsiteAutoplayQuirk>, WebKit::WebsiteAutoplayPolicy, Vector<WebCore::HTTPHeaderField>&&, WebKit::WebsitePopUpPolicy, RefPtr<WebsiteDataStore>&&);111 WebsitePolicies(bool contentBlockersEnabled, OptionSet<WebKit::WebsiteAutoplayQuirk>, WebKit::WebsiteAutoplayPolicy, Vector<WebCore::HTTPHeaderField>&&, Vector<WebCore::CustomHeaderFields>&&, WebKit::WebsitePopUpPolicy, RefPtr<WebsiteDataStore>&&); 109 112 110 113 bool m_contentBlockersEnabled { true }; … … 114 117 WebCore::DeviceOrientationOrMotionPermissionState m_deviceOrientationAndMotionAccessState { WebCore::DeviceOrientationOrMotionPermissionState::Prompt }; 115 118 #endif 116 Vector<WebCore::HTTPHeaderField> m_customHeaderFields; 119 Vector<WebCore::HTTPHeaderField> m_legacyCustomHeaderFields; 120 Vector<WebCore::CustomHeaderFields> m_customHeaderFields; 117 121 WebKit::WebsitePopUpPolicy m_popUpPolicy { WebKit::WebsitePopUpPolicy::Default }; 118 122 RefPtr<WebsiteDataStore> m_websiteDataStore; -
trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp
r239830 r245038 60 60 { 61 61 HashMap<WTF::String, RefPtr<API::Object>> fields; 62 for (const auto& field : toImpl(websitePolicies)-> customHeaderFields())62 for (const auto& field : toImpl(websitePolicies)->legacyCustomHeaderFields()) 63 63 fields.add(field.name(), API::String::create(field.value())); 64 64 return toAPI(API::Dictionary::create(WTFMove(fields)).ptr()); … … 77 77 fields.uncheckedAppend(WTFMove(*field)); 78 78 } 79 toImpl(websitePolicies)->set CustomHeaderFields(WTFMove(fields));79 toImpl(websitePolicies)->setLegacyCustomHeaderFields(WTFMove(fields)); 80 80 } 81 81 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm
r244966 r245038 27 27 #import "WKWebpagePreferences.h" 28 28 29 #import "APICustomHeaderFields.h" 29 30 #import "WKWebpagePreferencesInternal.h" 30 31 #import "WKWebsiteDataStoreInternal.h" 31 32 #import "WebCompatibilityMode.h" 33 #import "_WKCustomHeaderFieldsInternal.h" 32 34 #import "_WKWebsitePoliciesInternal.h" 33 35 #import <wtf/RetainPtr.h> … … 215 217 } 216 218 217 - (NS Dictionary<NSString *, NSString*> *)_customHeaderFields219 - (NSArray<_WKCustomHeaderFields *> *)_customHeaderFields 218 220 { 219 221 const auto& fields = _websitePolicies->customHeaderFields(); 220 auto dictionary = adoptNS([[NSMutableDictionary alloc] initWithCapacity:fields.size()]);222 NSMutableArray *array = [[[NSMutableArray alloc] initWithCapacity:fields.size()] autorelease]; 221 223 for (const auto& field : fields) 222 [dictionary setObject:field.value() forKey:field.name()]; 223 return dictionary.autorelease(); 224 } 225 226 - (void)_setCustomHeaderFields:(NSDictionary<NSString *, NSString *> *)fields 227 { 228 Vector<WebCore::HTTPHeaderField> parsedFields; 229 parsedFields.reserveInitialCapacity(fields.count); 230 231 for (NSString *name in fields) { 232 auto field = WebCore::HTTPHeaderField::create(name, [fields objectForKey:name]); 233 if (field && startsWithLettersIgnoringASCIICase(field->name(), "x-")) 234 parsedFields.uncheckedAppend(WTFMove(*field)); 235 } 236 _websitePolicies->setCustomHeaderFields(WTFMove(parsedFields)); 224 [array addObject:wrapper(API::CustomHeaderFields::create(field))]; 225 return array; 226 } 227 228 - (void)_setCustomHeaderFields:(NSArray<_WKCustomHeaderFields *> *)fields 229 { 230 Vector<WebCore::CustomHeaderFields> vector; 231 vector.reserveInitialCapacity(fields.count); 232 for (_WKCustomHeaderFields *element in fields) 233 vector.uncheckedAppend(static_cast<API::CustomHeaderFields&>([element _apiObject]).coreFields()); 234 _websitePolicies->setCustomHeaderFields(WTFMove(vector)); 237 235 } 238 236 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h
r244966 r245038 56 56 } WK_API_AVAILABLE(macos(10.14), ios(12.0)); 57 57 58 @class _WKCustomHeaderFields; 59 58 60 @interface WKWebpagePreferences (WKPrivate) 59 61 … … 61 63 @property (nonatomic, setter=_setAllowedAutoplayQuirks:) _WKWebsiteAutoplayQuirk _allowedAutoplayQuirks; 62 64 @property (nonatomic, setter=_setAutoplayPolicy:) _WKWebsiteAutoplayPolicy _autoplayPolicy; 63 @property (nonatomic, copy, setter=_setCustomHeaderFields:) NS Dictionary<NSString *, NSString*> *_customHeaderFields;65 @property (nonatomic, copy, setter=_setCustomHeaderFields:) NSArray<_WKCustomHeaderFields *> *_customHeaderFields; 64 66 @property (nonatomic, setter=_setPopUpPolicy:) _WKWebsitePopUpPolicy _popUpPolicy; 65 67 @property (nonatomic, strong, setter=_setWebsiteDataStore:) WKWebsiteDataStore *_websiteDataStore; -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKCustomHeaderFields.h
r245037 r245038 1 1 /* 2 * Copyright (C) 201 6Apple Inc. All rights reserved.2 * Copyright (C) 2019 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 25 25 26 26 #import <WebKit/WKFoundation.h> 27 #import <WebKit/WKWebpagePreferencesPrivate.h>28 27 29 @class WKWebsiteDataStore; 28 NS_ASSUME_NONNULL_BEGIN 30 29 31 WK_CLASS_AVAILABLE(macos( 10.12.3), ios(10.3))32 @interface _WK WebsitePolicies : NSObject30 WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)) 31 @interface _WKCustomHeaderFields : NSObject 33 32 34 @property (nonatomic) BOOL contentBlockersEnabled; 35 @property (nonatomic) _WKWebsiteAutoplayQuirk allowedAutoplayQuirks WK_API_AVAILABLE(macos(10.13), ios(11.0)); 36 @property (nonatomic) _WKWebsiteAutoplayPolicy autoplayPolicy WK_API_AVAILABLE(macos(10.13), ios(11.0)); 37 @property (nonatomic, copy) NSDictionary<NSString *, NSString *> *customHeaderFields WK_API_AVAILABLE(macos(10.13.4), ios(11.3)); 38 @property (nonatomic) _WKWebsitePopUpPolicy popUpPolicy WK_API_AVAILABLE(macos(10.14), ios(12.0)); 39 @property (nonatomic, strong) WKWebsiteDataStore *websiteDataStore WK_API_AVAILABLE(macos(10.13.4), ios(11.3)); 40 @property (nonatomic, copy) NSString *customUserAgent WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 41 @property (nonatomic, copy) NSString *customJavaScriptUserAgentAsSiteSpecificQuirks WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 42 @property (nonatomic, copy) NSString *customNavigatorPlatform WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 43 @property (nonatomic) _WKWebsiteDeviceOrientationAndMotionAccessPolicy deviceOrientationAndMotionAccessPolicy WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 33 @property (nonatomic, copy) NSDictionary<NSString *, NSString *> *fields; 34 @property (nonatomic, copy) NSArray<NSString *> *thirdPartyDomains; 44 35 45 36 @end 37 38 NS_ASSUME_NONNULL_END -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.h
r243726 r245038 35 35 @property (nonatomic) _WKWebsiteAutoplayQuirk allowedAutoplayQuirks WK_API_AVAILABLE(macos(10.13), ios(11.0)); 36 36 @property (nonatomic) _WKWebsiteAutoplayPolicy autoplayPolicy WK_API_AVAILABLE(macos(10.13), ios(11.0)); 37 @property (nonatomic, copy) NSDictionary<NSString *, NSString *> *customHeaderFields WK_API_AVAILABLE(macos(10.13.4), ios(11.3));38 37 @property (nonatomic) _WKWebsitePopUpPolicy popUpPolicy WK_API_AVAILABLE(macos(10.14), ios(12.0)); 39 38 @property (nonatomic, strong) WKWebsiteDataStore *websiteDataStore WK_API_AVAILABLE(macos(10.13.4), ios(11.3)); -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.mm
r243726 r245038 96 96 } 97 97 98 - (NSDictionary<NSString *, NSString *> *)customHeaderFields99 {100 return [_webpagePreferences _customHeaderFields];101 }102 103 - (void)setCustomHeaderFields:(NSDictionary<NSString *, NSString *> *)fields104 {105 [_webpagePreferences _setCustomHeaderFields:fields];106 }107 108 98 - (WKWebsiteDataStore *)websiteDataStore 109 99 { -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r245021 r245038 1078 1078 5C5CEC34220912B400D6BBB0 /* AuxiliaryProcessMain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C5CEC31220912AF00D6BBB0 /* AuxiliaryProcessMain.cpp */; }; 1079 1079 5C5CEC35220912B400D6BBB0 /* AuxiliaryProcessMain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C5CEC31220912AF00D6BBB0 /* AuxiliaryProcessMain.cpp */; }; 1080 5C5D238C227A2CDA000B9BDA /* _WKCustomHeaderFields.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C5D2389227A1892000B9BDA /* _WKCustomHeaderFields.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1080 1081 5C62FDF91EFC271C00CE072E /* WKURLSchemeTaskPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C62FDF81EFC263C00CE072E /* WKURLSchemeTaskPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1081 1082 5C7FB47021E97DC5009E3241 /* WebCookieJar.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C7FB46F21E97C0C009E3241 /* WebCookieJar.h */; }; … … 1092 1093 5CB2378E1DF0E0D300117AA3 /* _WKWebsitePoliciesInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB2378D1DF0E0C200117AA3 /* _WKWebsitePoliciesInternal.h */; }; 1093 1094 5CBC9B8E1C652CA000A8FDCF /* NetworkDataTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CBC9B891C6524A500A8FDCF /* NetworkDataTask.h */; }; 1095 5CBD595C2280EDF4002B22AA /* _WKCustomHeaderFields.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C5D2388227A1892000B9BDA /* _WKCustomHeaderFields.mm */; }; 1094 1096 5CD286511E7235990094FDC8 /* WKContentRuleListStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD2864D1E722F440094FDC8 /* WKContentRuleListStore.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1095 1097 5CD286531E7235AA0094FDC8 /* _WKUserContentFilterPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD286491E722F440094FDC8 /* _WKUserContentFilterPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 3525 3527 5C5CEC382209583200D6BBB0 /* DaemonEntryPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DaemonEntryPoint.h; sourceTree = "<group>"; }; 3526 3528 5C5CEC392209583200D6BBB0 /* DaemonEntryPoint.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DaemonEntryPoint.mm; sourceTree = "<group>"; }; 3529 5C5D2387227A1891000B9BDA /* _WKCustomHeaderFieldsInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKCustomHeaderFieldsInternal.h; sourceTree = "<group>"; }; 3530 5C5D2388227A1892000B9BDA /* _WKCustomHeaderFields.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKCustomHeaderFields.mm; sourceTree = "<group>"; }; 3531 5C5D2389227A1892000B9BDA /* _WKCustomHeaderFields.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKCustomHeaderFields.h; sourceTree = "<group>"; }; 3532 5C5D238A227A1D9B000B9BDA /* APICustomHeaderFields.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APICustomHeaderFields.h; sourceTree = "<group>"; }; 3527 3533 5C62FDF81EFC263C00CE072E /* WKURLSchemeTaskPrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKURLSchemeTaskPrivate.h; sourceTree = "<group>"; }; 3528 3534 5C6CE6D01F59BC460007C6CB /* PageClientImplCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PageClientImplCocoa.mm; sourceTree = "<group>"; }; … … 6133 6139 1A5704F61BE01FF400874AF1 /* _WKContextMenuElementInfo.h */, 6134 6140 1A5704F51BE01FF400874AF1 /* _WKContextMenuElementInfo.mm */, 6141 5C5D2389227A1892000B9BDA /* _WKCustomHeaderFields.h */, 6142 5C5D2388227A1892000B9BDA /* _WKCustomHeaderFields.mm */, 6143 5C5D2387227A1891000B9BDA /* _WKCustomHeaderFieldsInternal.h */, 6135 6144 83891B681A68BEBC0030F386 /* _WKDiagnosticLoggingDelegate.h */, 6136 6145 A1A4FE5718DCE9FA00B5EA8A /* _WKDownload.h */, … … 7695 7704 7C3A06A61AAB903E009D74BA /* APIContentRuleListStore.h */, 7696 7705 076E884D1A13CADF005E90FC /* APIContextMenuClient.h */, 7706 5C5D238A227A1D9B000B9BDA /* APICustomHeaderFields.h */, 7697 7707 7A821F4F1E2F7A5C00604577 /* APICustomProtocolManagerClient.h */, 7698 7708 83891B621A68B3420030F386 /* APIDiagnosticLoggingClient.h */, … … 9006 9016 5C4609E8224317BB009943C2 /* _WKContentRuleListActionInternal.h in Headers */, 9007 9017 1A5704F81BE01FF400874AF1 /* _WKContextMenuElementInfo.h in Headers */, 9018 5C5D238C227A2CDA000B9BDA /* _WKCustomHeaderFields.h in Headers */, 9008 9019 83891B691A68BEBC0030F386 /* _WKDiagnosticLoggingDelegate.h in Headers */, 9009 9020 A1A4FE5A18DCE9FA00B5EA8A /* _WKDownload.h in Headers */, … … 10942 10953 buildActionMask = 2147483647; 10943 10954 files = ( 10955 5CBD595C2280EDF4002B22AA /* _WKCustomHeaderFields.mm in Sources */, 10944 10956 99E7189A21F79D9E0055E975 /* _WKTouchEventGenerator.mm in Sources */, 10945 10957 2D92A784212B6AB100F493FD /* ActivityAssertion.cpp in Sources */, -
trunk/Tools/ChangeLog
r245037 r245038 1 2019-05-07 Alex Christensen <achristensen@webkit.org> 2 3 Add SPI to set a list of hosts to which to send custom header fields cross-origin 4 https://bugs.webkit.org/show_bug.cgi?id=197397 5 6 Reviewed by Geoff Garen. 7 8 * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm: 9 (TEST): 10 (expectLegacyHeaders): 11 (expectHeaders): 12 (-[CustomHeaderFieldsDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]): 13 (-[CustomHeaderFieldsDelegate webView:startURLSchemeTask:]): 14 (-[CustomHeaderFieldsDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]): Deleted. 15 1 16 2019-05-07 Keith Rollin <krollin@apple.com> 2 17 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm
r244390 r245038 29 29 #import "TestNavigationDelegate.h" 30 30 #import "TestWKWebView.h" 31 #import <WebKit/WKMutableDictionary.h> 31 32 #import <WebKit/WKNavigationDelegatePrivate.h> 32 33 #import <WebKit/WKPagePrivate.h> 33 34 #import <WebKit/WKPreferencesPrivate.h> 34 35 #import <WebKit/WKPreferencesRefPrivate.h> 36 #import <WebKit/WKString.h> 35 37 #import <WebKit/WKUIDelegatePrivate.h> 36 38 #import <WebKit/WKURLSchemeTaskPrivate.h> … … 39 41 #import <WebKit/WKWebsiteDataStorePrivate.h> 40 42 #import <WebKit/WKWebsitePolicies.h> 43 #import <WebKit/_WKCustomHeaderFields.h> 41 44 #import <WebKit/_WKUserContentExtensionStorePrivate.h> 42 45 #import <WebKit/_WKWebsiteDataStoreConfiguration.h> … … 908 911 TEST(WebKit, InvalidCustomHeaders) 909 912 { 910 auto websitePolicies = adoptNS([[_WKWebsitePolicies alloc] init]);911 [ websitePolicies setCustomHeaderFields:@{@"invalidheader" : @"", @"noncustom" : @"header", @" x-Custom ":@" Needs Canonicalization\t ", @"x-other" : @"other value"}];912 NSDictionary<NSString *, NSString *> *canonicalized = [ websitePolicies customHeaderFields];913 auto customHeaderFields = adoptNS([[_WKCustomHeaderFields alloc] init]); 914 [customHeaderFields setFields:@{@"invalidheader" : @"", @"noncustom" : @"header", @" x-Custom ":@" Needs Canonicalization\t ", @"x-other" : @"other value"}]; 915 NSDictionary<NSString *, NSString *> *canonicalized = [customHeaderFields fields]; 913 916 EXPECT_EQ(canonicalized.count, 2u); 914 917 EXPECT_STREQ([canonicalized objectForKey:@"x-Custom"].UTF8String, "Needs Canonicalization"); … … 920 923 static bool thirdTestDone; 921 924 static bool fourthTestDone; 922 923 static void expectHeaders(id <WKURLSchemeTask> task, bool expected) 925 static bool fifthTestDone; 926 927 static void expectLegacyHeaders(id <WKURLSchemeTask> task, bool expected) 924 928 { 925 929 NSURLRequest *request = task.request; … … 933 937 } 934 938 939 static void expectHeaders(id <WKURLSchemeTask> task, bool expected) 940 { 941 NSURLRequest *request = task.request; 942 if (expected) { 943 EXPECT_STREQ([[request valueForHTTPHeaderField:@"X-key3"] UTF8String], "value3"); 944 EXPECT_STREQ([[request valueForHTTPHeaderField:@"X-key4"] UTF8String], "value4"); 945 } else { 946 EXPECT_TRUE([request valueForHTTPHeaderField:@"X-key3"] == nil); 947 EXPECT_TRUE([request valueForHTTPHeaderField:@"X-key4"] == nil); 948 } 949 } 950 935 951 static void respond(id <WKURLSchemeTask>task, NSString *html = nil) 936 952 { … … 945 961 @implementation CustomHeaderFieldsDelegate 946 962 947 IGNORE_WARNINGS_BEGIN("deprecated-implementations") 948 - (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler 949 IGNORE_WARNINGS_END 950 { 951 _WKWebsitePolicies *websitePolicies = [[[_WKWebsitePolicies alloc] init] autorelease]; 952 [websitePolicies setCustomHeaderFields:@{@"X-key1": @"value1", @"X-key2": @"value2"}]; 963 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction preferences:(WKWebpagePreferences *)preferences decisionHandler:(void (^)(WKNavigationActionPolicy, WKWebpagePreferences *))decisionHandler 964 { 965 auto legacyHeaderFieldDictionary = adoptWK(WKMutableDictionaryCreate()); 966 WKDictionarySetItem(legacyHeaderFieldDictionary.get(), adoptWK(WKStringCreateWithUTF8CString("X-key1")).get(), adoptWK(WKStringCreateWithUTF8CString("value1")).get()); 967 WKDictionarySetItem(legacyHeaderFieldDictionary.get(), adoptWK(WKStringCreateWithUTF8CString("X-key2")).get(), adoptWK(WKStringCreateWithUTF8CString("value2")).get()); 968 WKWebsitePoliciesSetCustomHeaderFields((WKWebsitePoliciesRef)preferences, legacyHeaderFieldDictionary.get()); 969 970 _WKCustomHeaderFields *headerFields = [[[_WKCustomHeaderFields alloc] init] autorelease]; 971 [headerFields setFields:@{@"X-key3": @"value3", @"X-key4": @"value4"}]; 972 [headerFields setThirdPartyDomains:@[ 973 @"*.hostwithasterisk.com", 974 @"hostwithoutasterisk.com", 975 @"*.com" // should be ignored. 976 ]]; 977 978 [preferences _setCustomHeaderFields:@[headerFields]]; 979 953 980 if ([navigationAction.request.URL.path isEqualToString:@"/mainresource"]) { 954 981 dispatch_async(dispatch_get_main_queue(), ^{ 955 decisionHandler(WKNavigationActionPolicyAllow, websitePolicies);982 decisionHandler(WKNavigationActionPolicyAllow, preferences); 956 983 }); 957 984 } else 958 decisionHandler(WKNavigationActionPolicyAllow, websitePolicies);985 decisionHandler(WKNavigationActionPolicyAllow, preferences); 959 986 } 960 987 … … 963 990 NSString *path = urlSchemeTask.request.URL.path; 964 991 if ([path isEqualToString:@"/mainresource"]) { 965 expect Headers(urlSchemeTask, true);992 expectLegacyHeaders(urlSchemeTask, true); 966 993 respond(urlSchemeTask, @"<script>fetch('subresource').then(function(response){fetch('test://differentsecurityorigin/crossoriginsubresource',{mode:'no-cors'})})</script>"); 967 994 } else if ([path isEqualToString:@"/subresource"]) { 968 expect Headers(urlSchemeTask, true);995 expectLegacyHeaders(urlSchemeTask, true); 969 996 respond(urlSchemeTask); 970 997 } else if ([path isEqualToString:@"/crossoriginsubresource"]) { 971 expect Headers(urlSchemeTask, false);998 expectLegacyHeaders(urlSchemeTask, false); 972 999 respond(urlSchemeTask); 973 1000 firstTestDone = true; 974 1001 } else if ([path isEqualToString:@"/mainresourcewithiframe"]) { 975 expect Headers(urlSchemeTask, true);1002 expectLegacyHeaders(urlSchemeTask, true); 976 1003 respond(urlSchemeTask, @"<iframe src='test://iframeorigin/iframemainresource'></iframe>"); 977 1004 } else if ([path isEqualToString:@"/iframemainresource"]) { 978 expect Headers(urlSchemeTask, false);1005 expectLegacyHeaders(urlSchemeTask, false); 979 1006 respond(urlSchemeTask, @"<script>fetch('iframesubresource').then(function(response){fetch('test://mainframeorigin/originaloriginsubresource',{mode:'no-cors'})})</script>"); 980 1007 } else if ([path isEqualToString:@"/iframesubresource"]) { 981 expect Headers(urlSchemeTask, false);1008 expectLegacyHeaders(urlSchemeTask, false); 982 1009 respond(urlSchemeTask); 983 1010 } else if ([path isEqualToString:@"/originaloriginsubresource"]) { 984 expect Headers(urlSchemeTask, false);1011 expectLegacyHeaders(urlSchemeTask, false); 985 1012 respond(urlSchemeTask); 986 1013 secondTestDone = true; 987 1014 } else if ([path isEqualToString:@"/nestedtop"]) { 988 expect Headers(urlSchemeTask, true);1015 expectLegacyHeaders(urlSchemeTask, true); 989 1016 respond(urlSchemeTask, @"<iframe src='test://otherorigin/nestedmid'></iframe>"); 990 1017 } else if ([path isEqualToString:@"/nestedmid"]) { 991 expect Headers(urlSchemeTask, false);1018 expectLegacyHeaders(urlSchemeTask, false); 992 1019 respond(urlSchemeTask, @"<iframe src='test://toporigin/nestedbottom'></iframe>"); 993 1020 } else if ([path isEqualToString:@"/nestedbottom"]) { 994 expect Headers(urlSchemeTask, true);1021 expectLegacyHeaders(urlSchemeTask, true); 995 1022 respond(urlSchemeTask); 996 1023 thirdTestDone = true; 997 1024 } else if ([path isEqualToString:@"/requestfromaboutblank"]) { 1025 expectLegacyHeaders(urlSchemeTask, true); 1026 respond(urlSchemeTask); 1027 fourthTestDone = true; 1028 } else if ([path isEqualToString:@"/testcustomheaderfieldhosts"]) { 1029 expectHeaders(urlSchemeTask, true); 1030 NSString *html = @"<script>fetch('test://a.b.c.sub.hostwithasterisk.com/hosttest1',{mode:'no-cors'})" 1031 ".then(function(response){fetch('test://subhostwithasterisk.com/hosttest2',{mode:'no-cors'})})" 1032 ".then(function(response){fetch('test://hostwithoutasterisk.com/hosttest3',{mode:'no-cors'})})" 1033 ".then(function(response){fetch('test://a.b.c.sub.hostwithoutasterisk.com/hosttest4',{mode:'no-cors'})})</script>"; 1034 respond(urlSchemeTask, html); 1035 } else if ([path isEqualToString:@"/hosttest1"]) { 998 1036 expectHeaders(urlSchemeTask, true); 999 1037 respond(urlSchemeTask); 1000 fourthTestDone = true; 1001 } else 1038 } else if ([path isEqualToString:@"/hosttest2"]) { 1039 expectHeaders(urlSchemeTask, false); 1040 respond(urlSchemeTask); 1041 } else if ([path isEqualToString:@"/hosttest3"]) { 1042 expectHeaders(urlSchemeTask, true); 1043 respond(urlSchemeTask); 1044 } else if ([path isEqualToString:@"/hosttest4"]) { 1045 expectHeaders(urlSchemeTask, false); 1046 respond(urlSchemeTask); 1047 fifthTestDone = true; 1048 } else if ([path isEqualToString:@"/testcustomheaderfieldhosts"]) 1002 1049 EXPECT_TRUE(false); 1003 1050 } … … 1024 1071 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"test://toporigin/nestedtop"]]]; 1025 1072 TestWebKitAPI::Util::run(&thirdTestDone); 1073 1074 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"test://host/testcustomheaderfieldhosts"]]]; 1075 TestWebKitAPI::Util::run(&fifthTestDone); 1026 1076 } 1027 1077
Note: See TracChangeset
for help on using the changeset viewer.