Changeset 206206 in webkit
- Timestamp:
- Sep 21, 2016 2:56:16 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r206201 r206206 1 2016-09-21 Youenn Fablet <youenn@apple.com> 2 3 [Fetch] Align Accept header default values with fetch spec 4 https://bugs.webkit.org/show_bug.cgi?id=162260 5 6 Reviewed by Sam Weinig. 7 8 * http/tests/misc/resources/image-checks-for-accept.php: Updated according new image Accept header value. 9 1 10 2016-09-21 Chris Dumez <cdumez@apple.com> 2 11 -
trunk/LayoutTests/http/tests/misc/resources/image-checks-for-accept.php
r54892 r206206 1 1 <?php 2 if($_SERVER["HTTP_ACCEPT"] == " */*" || $_SERVER["HTTP_ACCEPT"] == "image/*" || $_SERVER["HTTP_ACCEPT"] == "image/jpg")2 if($_SERVER["HTTP_ACCEPT"] == "image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5") 3 3 { 4 4 header("Content-Type: image/jpg"); -
trunk/LayoutTests/imported/w3c/ChangeLog
r206201 r206206 1 2016-09-21 Youenn Fablet <youenn@apple.com> 2 3 [Fetch] Align Accept header default values with fetch spec 4 https://bugs.webkit.org/show_bug.cgi?id=162260 5 6 Reviewed by Sam Weinig. 7 8 Ensuring Accept and Accept-Language user-specific values are going up to the server. 9 10 * web-platform-tests/fetch/api/basic/accept-header-expected.txt: 11 * web-platform-tests/fetch/api/basic/accept-header-worker-expected.txt: 12 * web-platform-tests/fetch/api/basic/accept-header.js: 13 (promise_test): 14 1 15 2016-09-21 Chris Dumez <cdumez@apple.com> 2 16 -
trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/accept-header-expected.txt
r198665 r206206 1 1 2 2 PASS Request through fetch should have 'accept' header with value '*/*' 3 PASS Request through fetch should have 'accept' header with value 'custom/*' 4 PASS Request through fetch should have a 'accept-language' header 5 PASS Request through fetch should have 'accept-language' header with value 'bzh' 3 6 -
trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/accept-header-worker-expected.txt
r198891 r206206 1 1 2 2 PASS Request through fetch should have 'accept' header with value '*/*' 3 PASS Request through fetch should have 'accept' header with value 'custom/*' 4 PASS Request through fetch should have a 'accept-language' header 5 PASS Request through fetch should have 'accept-language' header with value 'bzh' 3 6 -
trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/accept-header.js
r197748 r206206 12 12 }, "Request through fetch should have 'accept' header with value '*/*'"); 13 13 14 promise_test(function() { 15 return fetch(RESOURCES_DIR + "inspect-headers.py?headers=Accept", {"headers": [["Accept", "custom/*"]]}).then(function(response) { 16 assert_equals(response.status, 200, "HTTP status is 200"); 17 assert_equals(response.type , "basic", "Response's type is basic"); 18 assert_equals(response.headers.get("x-request-accept"), "custom/*", "Request has accept header with value 'custom/*'"); 19 }); 20 }, "Request through fetch should have 'accept' header with value 'custom/*'"); 21 22 promise_test(function() { 23 return fetch(RESOURCES_DIR + "inspect-headers.py?headers=Accept-Language").then(function(response) { 24 assert_equals(response.status, 200, "HTTP status is 200"); 25 assert_equals(response.type , "basic", "Response's type is basic"); 26 assert_true(response.headers.has("x-request-accept-language")); 27 }); 28 }, "Request through fetch should have a 'accept-language' header"); 29 30 promise_test(function() { 31 return fetch(RESOURCES_DIR + "inspect-headers.py?headers=Accept-Language", {"headers": [["Accept-Language", "bzh"]]}).then(function(response) { 32 assert_equals(response.status, 200, "HTTP status is 200"); 33 assert_equals(response.type , "basic", "Response's type is basic"); 34 assert_equals(response.headers.get("x-request-accept-language"), "bzh", "Request has accept header with value 'bzh'"); 35 }); 36 }, "Request through fetch should have 'accept-language' header with value 'bzh'"); 37 14 38 done(); -
trunk/Source/WebCore/ChangeLog
r206205 r206206 1 2016-09-21 Youenn Fablet <youenn@apple.com> 2 3 [Fetch] Align Accept header default values with fetch spec 4 https://bugs.webkit.org/show_bug.cgi?id=162260 5 6 Reviewed by Sam Weinig. 7 8 Covered by existing and updated tests. 9 10 To start implementing step 1 to 7 of fetch algorithm, this patch updates Accept header handling. 11 12 Default values are set according the spec based on resource type. 13 Some resource types are not defined in the spec and we keep using existing values. 14 15 We check if Accept header is already present in the request. If that is the case, no change is done to that header. 16 17 If the Accept header is not set, the default value '*/*' is used. 18 An Accept header is therefore always set at CachedResourceLoader level. 19 20 * loader/cache/CachedCSSStyleSheet.cpp: 21 (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet): Removing accept initialization. 22 * loader/cache/CachedResource.cpp: 23 (WebCore::CachedResource::load): Removing accept header setting. 24 * loader/cache/CachedResource.h: 25 (WebCore::CachedResource::accept): Deleted. 26 (WebCore::CachedResource::setAccept): Deleted. 27 * loader/cache/CachedResourceLoader.cpp: 28 (WebCore::acceptHeaderValueFromType): helper routine merging fetch spec and existing WebKit accept values. 29 (WebCore::CachedResourceLoader::prepareFetch): Should implement step 1 to 7 of https://fetch.spec.whatwg.org/#fetching. 30 (WebCore::CachedResourceLoader::requestResource): Making use of prepareFetch. 31 * loader/cache/CachedResourceLoader.h: 32 * loader/cache/CachedSVGDocument.cpp: 33 (WebCore::CachedSVGDocument::CachedSVGDocument): Removing accept initialization. 34 * loader/cache/CachedScript.cpp: 35 (WebCore::CachedScript::CachedScript): Removing accept initialization. 36 * loader/cache/CachedXSLStyleSheet.cpp: 37 (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet): Removing accept initialization. 38 * platform/network/ResourceRequestBase.cpp: 39 (WebCore::ResourceRequestBase::hasHTTPHeader): Introduced to check for header presence. 40 * platform/network/ResourceRequestBase.h: 41 1 42 2016-09-21 Jeremy Huddleston Sequoia <jeremyhu@apple.com> 2 43 -
trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp
r206016 r206206 46 46 , m_decoder(TextResourceDecoder::create("text/css", request.charset())) 47 47 { 48 // Prefer text/css but accept any type (dell.com serves a stylesheet49 // as text/html; see <http://bugs.webkit.org/show_bug.cgi?id=11451>).50 setAccept("text/css,*/*;q=0.1");51 48 } 52 49 -
trunk/Source/WebCore/loader/cache/CachedResource.cpp
r206189 r206206 308 308 #endif 309 309 310 if (!accept().isEmpty())311 m_resourceRequest.setHTTPAccept(accept());312 313 310 if (isCacheValidator()) { 314 311 CachedResource* resourceToRevalidate = m_resourceToRevalidate; -
trunk/Source/WebCore/loader/cache/CachedResource.h
r206016 r206206 221 221 bool isExpired() const; 222 222 223 // List of acceptable MIME types separated by ",".224 // A MIME type may contain a wildcard, e.g. "text/*".225 String accept() const { return m_accept; }226 void setAccept(const String& accept) { m_accept = accept; }227 228 223 void cancelLoad(); 229 224 bool wasCanceled() const { return m_error.isCancellation(); } … … 320 315 HashMap<CachedResourceClient*, std::unique_ptr<Callback>> m_clientsAwaitingCallback; 321 316 SessionID m_sessionID; 322 String m_accept;323 317 ResourceLoadPriority m_loadPriority; 324 318 std::chrono::system_clock::time_point m_responseTimestamp; -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp
r206203 r206206 571 571 } 572 572 573 static inline String acceptHeaderValueFromType(CachedResource::Type type) 574 { 575 switch (type) { 576 case CachedResource::Type::MainResource: 577 return ASCIILiteral("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 578 case CachedResource::Type::ImageResource: 579 return ASCIILiteral("image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5"); 580 case CachedResource::Type::CSSStyleSheet: 581 return ASCIILiteral("text/css,*/*;q=0.1"); 582 case CachedResource::Type::SVGDocumentResource: 583 return ASCIILiteral("image/svg+xml"); 584 #if ENABLE(XSLT) 585 case CachedResource::Type::XSLStyleSheet: 586 // FIXME: This should accept more general xml formats */*+xml, image/svg+xml for example. 587 return ASCIILiteral("text/xml,application/xml,application/xhtml+xml,text/xsl,application/rss+xml,application/atom+xml"); 588 #endif 589 default: 590 return ASCIILiteral("*/*"); 591 } 592 } 593 594 void CachedResourceLoader::prepareFetch(CachedResource::Type type, CachedResourceRequest& request) 595 { 596 // Implementing step 1 to 7 of https://fetch.spec.whatwg.org/#fetching 597 598 if (!request.resourceRequest().hasHTTPHeader(HTTPHeaderName::Accept)) 599 request.mutableResourceRequest().setHTTPHeaderField(HTTPHeaderName::Accept, acceptHeaderValueFromType(type)); 600 601 // Accept-Language value is handled in underlying port-specific code. 602 // FIXME: Decide whether to support client hints 603 } 604 573 605 CachedResourceHandle<CachedResource> CachedResourceLoader::requestResource(CachedResource::Type type, CachedResourceRequest&& request) 574 606 { … … 587 619 return nullptr; 588 620 } 621 622 prepareFetch(type, request); 589 623 590 624 if (!canRequest(type, url, request.options(), request.forPreload())) { -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.h
r206203 r206206 152 152 153 153 CachedResourceHandle<CachedResource> requestResource(CachedResource::Type, CachedResourceRequest&&); 154 void prepareFetch(CachedResource::Type, CachedResourceRequest&); 154 155 CachedResourceHandle<CachedResource> revalidateResource(CachedResourceRequest&&, CachedResource&); 155 156 CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, CachedResourceRequest&&); -
trunk/Source/WebCore/loader/cache/CachedSVGDocument.cpp
r206016 r206206 32 32 , m_decoder(TextResourceDecoder::create("application/xml")) 33 33 { 34 setAccept("image/svg+xml");35 34 } 36 35 -
trunk/Source/WebCore/loader/cache/CachedScript.cpp
r206016 r206206 45 45 , m_decoder(TextResourceDecoder::create(ASCIILiteral("application/javascript"), request.charset())) 46 46 { 47 // It's javascript we want.48 // But some websites think their scripts are <some wrong mimetype here>49 // and refuse to serve them if we only accept application/x-javascript.50 setAccept("*/*");51 47 } 52 48 -
trunk/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp
r206016 r206206 41 41 , m_decoder(TextResourceDecoder::create("text/xsl")) 42 42 { 43 // It's XML we want.44 // FIXME: This should accept more general xml formats */*+xml, image/svg+xml for example.45 setAccept("text/xml, application/xml, application/xhtml+xml, text/xsl, application/rss+xml, application/atom+xml");46 43 } 47 44 -
trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp
r206009 r206206 334 334 } 335 335 336 bool ResourceRequestBase::hasHTTPHeader(HTTPHeaderName name) const 337 { 338 return m_httpHeaderFields.contains(name); 339 } 340 336 341 String ResourceRequestBase::httpUserAgent() const 337 342 { -
trunk/Source/WebCore/platform/network/ResourceRequestBase.h
r206009 r206206 98 98 void clearHTTPContentType(); 99 99 100 bool hasHTTPHeader(HTTPHeaderName) const; 101 100 102 WEBCORE_EXPORT String httpReferrer() const; 101 103 bool hasHTTPReferrer() const;
Note: See TracChangeset
for help on using the changeset viewer.