mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Auto merge of #9458 - servo:wpt, r=Ms2ger
Update web-platform-tests to revision 7f2f85a88f434798e9d643427b34b05fab8278c6 <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/9458) <!-- Reviewable:end -->
This commit is contained in:
commit
4daf19e06a
180 changed files with 5807 additions and 169 deletions
|
@ -13583,6 +13583,10 @@
|
|||
"path": "cssom-view/elementsFromPoint.html",
|
||||
"url": "/cssom-view/elementsFromPoint.html"
|
||||
},
|
||||
{
|
||||
"path": "cssom-view/scrollingElement.html",
|
||||
"url": "/cssom-view/scrollingElement.html"
|
||||
},
|
||||
{
|
||||
"path": "custom-elements/concepts/custom-elements-type-naming.html",
|
||||
"url": "/custom-elements/concepts/custom-elements-type-naming.html"
|
||||
|
@ -15119,6 +15123,366 @@
|
|||
"path": "ext-xhtml-pubid/the-xhtml-syntax/parsing-xhtml-documents/xhtml-pubid-1.html",
|
||||
"url": "/ext-xhtml-pubid/the-xhtml-syntax/parsing-xhtml-documents/xhtml-pubid-1.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/accept-header-worker.html",
|
||||
"url": "/fetch/api/basic/accept-header-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/accept-header.html",
|
||||
"url": "/fetch/api/basic/accept-header.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/integrity-worker.html",
|
||||
"url": "/fetch/api/basic/integrity-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/integrity.html",
|
||||
"url": "/fetch/api/basic/integrity.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/mode-no-cors-worker.html",
|
||||
"url": "/fetch/api/basic/mode-no-cors-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/mode-no-cors.html",
|
||||
"url": "/fetch/api/basic/mode-no-cors.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/mode-same-origin-worker.html",
|
||||
"url": "/fetch/api/basic/mode-same-origin-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/mode-same-origin.html",
|
||||
"url": "/fetch/api/basic/mode-same-origin.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/request-forbidden-headers-worker.html",
|
||||
"url": "/fetch/api/basic/request-forbidden-headers-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/request-forbidden-headers.html",
|
||||
"url": "/fetch/api/basic/request-forbidden-headers.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/request-headers-worker.html",
|
||||
"url": "/fetch/api/basic/request-headers-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/request-headers.html",
|
||||
"url": "/fetch/api/basic/request-headers.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/scheme-about-worker.html",
|
||||
"url": "/fetch/api/basic/scheme-about-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/scheme-about.html",
|
||||
"url": "/fetch/api/basic/scheme-about.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/scheme-blob-worker.html",
|
||||
"url": "/fetch/api/basic/scheme-blob-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/scheme-blob.html",
|
||||
"url": "/fetch/api/basic/scheme-blob.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/scheme-data-worker.html",
|
||||
"url": "/fetch/api/basic/scheme-data-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/scheme-data.html",
|
||||
"url": "/fetch/api/basic/scheme-data.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/scheme-others-worker.html",
|
||||
"url": "/fetch/api/basic/scheme-others-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/scheme-others.html",
|
||||
"url": "/fetch/api/basic/scheme-others.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/stream-response-worker.html",
|
||||
"url": "/fetch/api/basic/stream-response-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/basic/stream-response.html",
|
||||
"url": "/fetch/api/basic/stream-response.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-basic-worker.html",
|
||||
"url": "/fetch/api/cors/cors-basic-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-basic.html",
|
||||
"url": "/fetch/api/cors/cors-basic.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-cookies-worker.html",
|
||||
"url": "/fetch/api/cors/cors-cookies-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-cookies.html",
|
||||
"url": "/fetch/api/cors/cors-cookies.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-filtering-worker.html",
|
||||
"url": "/fetch/api/cors/cors-filtering-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-filtering.html",
|
||||
"url": "/fetch/api/cors/cors-filtering.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-multiple-origins-worker.html",
|
||||
"url": "/fetch/api/cors/cors-multiple-origins-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-multiple-origins.html",
|
||||
"url": "/fetch/api/cors/cors-multiple-origins.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-no-preflight-worker.html",
|
||||
"url": "/fetch/api/cors/cors-no-preflight-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-no-preflight.html",
|
||||
"url": "/fetch/api/cors/cors-no-preflight.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-origin-worker.html",
|
||||
"url": "/fetch/api/cors/cors-origin-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-origin.html",
|
||||
"url": "/fetch/api/cors/cors-origin.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-preflight-redirect-worker.html",
|
||||
"url": "/fetch/api/cors/cors-preflight-redirect-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-preflight-redirect.html",
|
||||
"url": "/fetch/api/cors/cors-preflight-redirect.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-preflight-referrer-worker.html",
|
||||
"url": "/fetch/api/cors/cors-preflight-referrer-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-preflight-referrer.html",
|
||||
"url": "/fetch/api/cors/cors-preflight-referrer.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-preflight-status-worker.html",
|
||||
"url": "/fetch/api/cors/cors-preflight-status-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-preflight-status.html",
|
||||
"url": "/fetch/api/cors/cors-preflight-status.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-preflight-worker.html",
|
||||
"url": "/fetch/api/cors/cors-preflight-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-preflight.html",
|
||||
"url": "/fetch/api/cors/cors-preflight.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-redirect-credentials-worker.html",
|
||||
"url": "/fetch/api/cors/cors-redirect-credentials-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-redirect-credentials.html",
|
||||
"url": "/fetch/api/cors/cors-redirect-credentials.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-redirect-worker.html",
|
||||
"url": "/fetch/api/cors/cors-redirect-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/cors/cors-redirect.html",
|
||||
"url": "/fetch/api/cors/cors-redirect.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/credentials/authentication-basic-worker.html",
|
||||
"url": "/fetch/api/credentials/authentication-basic-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/credentials/authentication-basic.html",
|
||||
"url": "/fetch/api/credentials/authentication-basic.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/credentials/cookies-worker.html",
|
||||
"url": "/fetch/api/credentials/cookies-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/credentials/cookies.html",
|
||||
"url": "/fetch/api/credentials/cookies.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/headers/headers-basic.html",
|
||||
"url": "/fetch/api/headers/headers-basic.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/headers/headers-casing.html",
|
||||
"url": "/fetch/api/headers/headers-casing.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/headers/headers-combine.html",
|
||||
"url": "/fetch/api/headers/headers-combine.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/headers/headers-errors.html",
|
||||
"url": "/fetch/api/headers/headers-errors.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/headers/headers-idl.html",
|
||||
"url": "/fetch/api/headers/headers-idl.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/headers/headers-normalize.html",
|
||||
"url": "/fetch/api/headers/headers-normalize.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/headers/headers-structure.html",
|
||||
"url": "/fetch/api/headers/headers-structure.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/policies/csp-blocked-worker.html",
|
||||
"url": "/fetch/api/policies/csp-blocked-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/policies/csp-blocked.html",
|
||||
"url": "/fetch/api/policies/csp-blocked.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/policies/referrer-no-referrer-worker.html",
|
||||
"url": "/fetch/api/policies/referrer-no-referrer-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/policies/referrer-no-referrer.html",
|
||||
"url": "/fetch/api/policies/referrer-no-referrer.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/policies/referrer-origin-worker.html",
|
||||
"url": "/fetch/api/policies/referrer-origin-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/policies/referrer-origin.html",
|
||||
"url": "/fetch/api/policies/referrer-origin.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/policies/referrer-unsafe-url-worker.html",
|
||||
"url": "/fetch/api/policies/referrer-unsafe-url-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/policies/referrer-unsafe-url.html",
|
||||
"url": "/fetch/api/policies/referrer-unsafe-url.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/redirect/redirect-count-worker.html",
|
||||
"url": "/fetch/api/redirect/redirect-count-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/redirect/redirect-count.html",
|
||||
"url": "/fetch/api/redirect/redirect-count.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/redirect/redirect-location-worker.html",
|
||||
"url": "/fetch/api/redirect/redirect-location-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/redirect/redirect-location.html",
|
||||
"url": "/fetch/api/redirect/redirect-location.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/redirect/redirect-method-worker.html",
|
||||
"url": "/fetch/api/redirect/redirect-method-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/redirect/redirect-method.html",
|
||||
"url": "/fetch/api/redirect/redirect-method.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/redirect/redirect-mode-worker.html",
|
||||
"url": "/fetch/api/redirect/redirect-mode-worker.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/redirect/redirect-mode.html",
|
||||
"url": "/fetch/api/redirect/redirect-mode.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/request/request-clone.sub.html",
|
||||
"url": "/fetch/api/request/request-clone.sub.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/request/request-consume.html",
|
||||
"url": "/fetch/api/request/request-consume.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/request/request-disturbed.html",
|
||||
"url": "/fetch/api/request/request-disturbed.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/request/request-error.html",
|
||||
"url": "/fetch/api/request/request-error.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/request/request-idl.html",
|
||||
"url": "/fetch/api/request/request-idl.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/request/request-init-001.sub.html",
|
||||
"url": "/fetch/api/request/request-init-001.sub.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/request/request-init-002.html",
|
||||
"url": "/fetch/api/request/request-init-002.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/request/request-init-003.sub.html",
|
||||
"url": "/fetch/api/request/request-init-003.sub.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/request/request-structure.html",
|
||||
"url": "/fetch/api/request/request-structure.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/response/response-clone.html",
|
||||
"url": "/fetch/api/response/response-clone.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/response/response-consume.html",
|
||||
"url": "/fetch/api/response/response-consume.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/response/response-error.html",
|
||||
"url": "/fetch/api/response/response-error.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/response/response-idl.html",
|
||||
"url": "/fetch/api/response/response-idl.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/response/response-init-001.html",
|
||||
"url": "/fetch/api/response/response-init-001.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/response/response-init-002.html",
|
||||
"url": "/fetch/api/response/response-init-002.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/response/response-static-error.html",
|
||||
"url": "/fetch/api/response/response-static-error.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/api/response/response-static-redirect.html",
|
||||
"url": "/fetch/api/response/response-static-redirect.html"
|
||||
},
|
||||
{
|
||||
"path": "fetch/nosniff/image.html",
|
||||
"url": "/fetch/nosniff/image.html"
|
||||
|
@ -17615,6 +17979,18 @@
|
|||
"path": "html/semantics/embedded-content/media-elements/volume_nonfinite.html",
|
||||
"url": "/html/semantics/embedded-content/media-elements/volume_nonfinite.html"
|
||||
},
|
||||
{
|
||||
"path": "html/semantics/embedded-content/the-area-element/area-coords.html",
|
||||
"url": "/html/semantics/embedded-content/the-area-element/area-coords.html"
|
||||
},
|
||||
{
|
||||
"path": "html/semantics/embedded-content/the-area-element/area-processing.html",
|
||||
"url": "/html/semantics/embedded-content/the-area-element/area-processing.html"
|
||||
},
|
||||
{
|
||||
"path": "html/semantics/embedded-content/the-area-element/area-shape.html",
|
||||
"url": "/html/semantics/embedded-content/the-area-element/area-shape.html"
|
||||
},
|
||||
{
|
||||
"path": "html/semantics/embedded-content/the-area-element/area-stringifier.html",
|
||||
"url": "/html/semantics/embedded-content/the-area-element/area-stringifier.html"
|
||||
|
@ -18055,6 +18431,10 @@
|
|||
"path": "html/semantics/embedded-content/the-embed-element/embed-dimension.html",
|
||||
"url": "/html/semantics/embedded-content/the-embed-element/embed-dimension.html"
|
||||
},
|
||||
{
|
||||
"path": "html/semantics/embedded-content/the-embed-element/embed-document.html",
|
||||
"url": "/html/semantics/embedded-content/the-embed-element/embed-document.html"
|
||||
},
|
||||
{
|
||||
"path": "html/semantics/embedded-content/the-iframe-element/iframe_javascript_url_01.htm",
|
||||
"url": "/html/semantics/embedded-content/the-iframe-element/iframe_javascript_url_01.htm"
|
||||
|
@ -19135,6 +19515,10 @@
|
|||
"path": "html/webappapis/scripting/events/event-handler-javascript.html",
|
||||
"url": "/html/webappapis/scripting/events/event-handler-javascript.html"
|
||||
},
|
||||
{
|
||||
"path": "html/webappapis/scripting/events/event-handler-onresize.html",
|
||||
"url": "/html/webappapis/scripting/events/event-handler-onresize.html"
|
||||
},
|
||||
{
|
||||
"path": "html/webappapis/scripting/events/event-handler-spec-example.html",
|
||||
"url": "/html/webappapis/scripting/events/event-handler-spec-example.html"
|
||||
|
@ -20859,10 +21243,6 @@
|
|||
"path": "old-tests/submission/Microsoft/sandbox/sandbox_001.htm",
|
||||
"url": "/old-tests/submission/Microsoft/sandbox/sandbox_001.htm"
|
||||
},
|
||||
{
|
||||
"path": "old-tests/submission/Microsoft/sandbox/sandbox_002.htm",
|
||||
"url": "/old-tests/submission/Microsoft/sandbox/sandbox_002.htm"
|
||||
},
|
||||
{
|
||||
"path": "old-tests/submission/Microsoft/sandbox/sandbox_005.htm",
|
||||
"url": "/old-tests/submission/Microsoft/sandbox/sandbox_005.htm"
|
||||
|
@ -26351,6 +26731,10 @@
|
|||
"path": "shadow-dom/ShadowRoot-interface.html",
|
||||
"url": "/shadow-dom/ShadowRoot-interface.html"
|
||||
},
|
||||
{
|
||||
"path": "shadow-dom/styles/shadow-cascade-order.html",
|
||||
"url": "/shadow-dom/styles/shadow-cascade-order.html"
|
||||
},
|
||||
{
|
||||
"path": "shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001.html",
|
||||
"url": "/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001.html"
|
||||
|
@ -27007,6 +27391,10 @@
|
|||
"path": "vibration/silent-ignore.html",
|
||||
"url": "/vibration/silent-ignore.html"
|
||||
},
|
||||
{
|
||||
"path": "web-animations/animatable/animate.html",
|
||||
"url": "/web-animations/animatable/animate.html"
|
||||
},
|
||||
{
|
||||
"path": "web-animations/animation-node/animation-node-after.html",
|
||||
"url": "/web-animations/animation-node/animation-node-after.html"
|
||||
|
@ -30271,6 +30659,10 @@
|
|||
"path": "websockets/Create-Secure-verify-url-set-non-default-port.htm",
|
||||
"url": "/websockets/Create-Secure-verify-url-set-non-default-port.htm"
|
||||
},
|
||||
{
|
||||
"path": "websockets/Create-asciiSep-protocol-string.htm",
|
||||
"url": "/websockets/Create-asciiSep-protocol-string.htm"
|
||||
},
|
||||
{
|
||||
"path": "websockets/Create-invalid-urls.htm",
|
||||
"url": "/websockets/Create-invalid-urls.htm"
|
||||
|
@ -30287,6 +30679,10 @@
|
|||
"path": "websockets/Create-protocol-with-space.htm",
|
||||
"url": "/websockets/Create-protocol-with-space.htm"
|
||||
},
|
||||
{
|
||||
"path": "websockets/Create-protocols-repeated-case-insensitive.htm",
|
||||
"url": "/websockets/Create-protocols-repeated-case-insensitive.htm"
|
||||
},
|
||||
{
|
||||
"path": "websockets/Create-protocols-repeated.htm",
|
||||
"url": "/websockets/Create-protocols-repeated.htm"
|
||||
|
@ -31572,12 +31968,12 @@
|
|||
"url": "/workers/interfaces/WorkerUtils/WindowTimers/004.html"
|
||||
},
|
||||
{
|
||||
"path": "workers/interfaces/WorkerUtils/importScripts/001.html",
|
||||
"url": "/workers/interfaces/WorkerUtils/importScripts/001.html"
|
||||
"path": "workers/interfaces/WorkerUtils/importScripts/001.worker.js",
|
||||
"url": "/workers/interfaces/WorkerUtils/importScripts/001.worker"
|
||||
},
|
||||
{
|
||||
"path": "workers/interfaces/WorkerUtils/importScripts/002.html",
|
||||
"url": "/workers/interfaces/WorkerUtils/importScripts/002.html"
|
||||
"path": "workers/interfaces/WorkerUtils/importScripts/002.worker.js",
|
||||
"url": "/workers/interfaces/WorkerUtils/importScripts/002.worker"
|
||||
},
|
||||
{
|
||||
"path": "workers/interfaces/WorkerUtils/importScripts/003.html",
|
||||
|
@ -33001,6 +33397,11 @@
|
|||
"timeout": "long",
|
||||
"url": "/media-source/mediasource-redundant-seek.html"
|
||||
},
|
||||
{
|
||||
"path": "old-tests/submission/Microsoft/sandbox/sandbox_002.htm",
|
||||
"timeout": "long",
|
||||
"url": "/old-tests/submission/Microsoft/sandbox/sandbox_002.htm"
|
||||
},
|
||||
{
|
||||
"path": "quirks-mode/hashless-hex-color.html",
|
||||
"timeout": "long",
|
||||
|
@ -33316,28 +33717,7 @@
|
|||
},
|
||||
"local_changes": {
|
||||
"deleted": [],
|
||||
"items": {
|
||||
"testharness": {
|
||||
"html/webappapis/scripting/events/event-handler-onresize.html": [
|
||||
{
|
||||
"path": "html/webappapis/scripting/events/event-handler-onresize.html",
|
||||
"url": "/html/webappapis/scripting/events/event-handler-onresize.html"
|
||||
}
|
||||
],
|
||||
"websockets/Create-asciiSep-protocol-string.htm": [
|
||||
{
|
||||
"path": "websockets/Create-asciiSep-protocol-string.htm",
|
||||
"url": "/websockets/Create-asciiSep-protocol-string.htm"
|
||||
}
|
||||
],
|
||||
"websockets/Create-protocols-repeated-case-insensitive.htm": [
|
||||
{
|
||||
"path": "websockets/Create-protocols-repeated-case-insensitive.htm",
|
||||
"url": "/websockets/Create-protocols-repeated-case-insensitive.htm"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"items": {},
|
||||
"reftest_nodes": {}
|
||||
},
|
||||
"reftest_nodes": {
|
||||
|
@ -39450,7 +39830,7 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"rev": "0d9238c8062f05a55898a0cb60dc0c353794d87a",
|
||||
"rev": "7f2f85a88f434798e9d643427b34b05fab8278c6",
|
||||
"url_base": "/",
|
||||
"version": 2
|
||||
}
|
||||
|
|
|
@ -0,0 +1,98 @@
|
|||
[area-coords.html]
|
||||
type: testharness
|
||||
[COMMA: "2,2,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[SEMICOLON: "2;2;10;10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[SPACE: "2 2 10 10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[TAB: "2\\t2\\t10\\t10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[FORM FEED: "2\\f2\\f10\\f10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[LINE FEED: "2\\n2\\n10\\n10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[CARRIGAGE RETURN: "2\\r2\\r10\\r10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[LINE TABULATION: "2\\v2\\v10\\v10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[LINE NEXT: "2
2
10
10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[EN QUAD: "2 2 10 10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[abc between numbers: "2a2b20c20,2,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[COLON between numbers: "2:2:20:20,2,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[U+0000 between numbers: "2\\02\\020\\020,2,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[leading COMMA: ",2,2,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[leading SPACE: " 2,2,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[leading SEMICOLON: ";2,2,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[trailing COMMA: "2,2,10," (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[trailing SPACE: "2,2,10 " (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[trailing SEMICOLON: "2,2,10;" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[PERCENT: "2%,2%,10%,10%" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[CSS units: "2in,2in,10cm,10cm" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[float: "1.4,1.4,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[number starting with PERIOD: ".4,.4,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[sci-not: "2,2,1e1,1e1" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[leading/trailing garbage: "='2,2,10,10' " (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[non-ascii garbage: "“2,2,10,10\\"" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[URL garbage with number: "2,2,10ls/spain/holidays/regions/10/Canary+Islands/Canary+Islands.html" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[consecutive COMMAs: "2,,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[consecutive SPACEs: "2 10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[consecutive SEMICOLONs: "2;;10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[several consecutive separators: ",,2;,;2,;,10 \\t\\r\\n10;;" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[one too many numbers, trailing COMMA: "100,100,120,100,100,120,300," (poly)]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
[area-processing.html]
|
||||
type: testharness
|
||||
[too few numbers: "2,2,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[negative: "-10,-10,10,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[empty string: "" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[omitted coords: null (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[first > third: "10,2,2,10" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[second > fourth: "2,10,10,2" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[first > third, second > fourth: "10,10,2,2" (rect)]
|
||||
expected: FAIL
|
||||
|
||||
[negative: "-10,-10,-10,-10" (default)]
|
||||
expected: FAIL
|
||||
|
||||
[too few numbers: "20,40" (circle)]
|
||||
expected: FAIL
|
||||
|
||||
[negative radius: "20,40,-10" (circle)]
|
||||
expected: FAIL
|
||||
|
||||
[zero radius: "20,40,0" (circle)]
|
||||
expected: FAIL
|
||||
|
||||
[too few numbers: "100,100,120,100,100" (poly)]
|
||||
expected: FAIL
|
||||
|
||||
[one too many numbers: "100,100,120,100,100,120,300" (poly)]
|
||||
expected: FAIL
|
||||
|
||||
[even-odd rule: "100,100,200,100,100,200,150,50,200,200" (poly)]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
[area-shape.html]
|
||||
type: testharness
|
||||
[missing value default: "2,2,10,10" (null)]
|
||||
expected: FAIL
|
||||
|
||||
[missing value default: "20,40,10" (null)]
|
||||
expected: FAIL
|
||||
|
||||
[missing value default: null (null)]
|
||||
expected: FAIL
|
||||
|
||||
[invalid value default: "2,2,10,10" (foobar invalid)]
|
||||
expected: FAIL
|
||||
|
||||
[invalid value default: "2,2,10,10" ()]
|
||||
expected: FAIL
|
||||
|
||||
[empty string: "" (default)]
|
||||
expected: FAIL
|
||||
|
||||
[omitted coords: null (DEFAULT)]
|
||||
expected: FAIL
|
||||
|
||||
[simple: "20,40,10" (circle)]
|
||||
expected: FAIL
|
||||
|
||||
[simple: "20,40,10" (circ)]
|
||||
expected: FAIL
|
||||
|
||||
[simple: "20,40,10" (CIRCLE)]
|
||||
expected: FAIL
|
||||
|
||||
[simple: "20,40,10" (CIRC)]
|
||||
expected: FAIL
|
||||
|
||||
[LATIN CAPITAL LETTER I WITH DOT ABOVE: "20,40,10" (CİRCLE)]
|
||||
expected: FAIL
|
||||
|
||||
[LATIN SMALL LETTER DOTLESS I: "20,40,10" (cırcle)]
|
||||
expected: FAIL
|
||||
|
||||
[simple: "100,100,120,100,100,120" (poly)]
|
||||
expected: FAIL
|
||||
|
||||
[simple: "100,100,120,100,100,120" (polygon)]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[embed-document.html]
|
||||
type: testharness
|
||||
[Test document type embedding]
|
||||
expected: FAIL
|
||||
|
|
@ -1 +1 @@
|
|||
8a1d0a8f3e4206c98f35a4bba98fc26237c1f906
|
||||
6b1a08c051f3be4b7bc7e6200053dfa530ecd106
|
|
@ -198,3 +198,9 @@
|
|||
[Parsing: <file:a> against <http://www.example.com/test>]
|
||||
expected: FAIL
|
||||
|
||||
[Parsing: <http://example.com/foo/%2e%2> against <about:blank>]
|
||||
expected: FAIL
|
||||
|
||||
[Parsing: <http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar> against <about:blank>]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
return fd;
|
||||
}
|
||||
|
||||
do_test("formdata with blob", create_formdata(['key', new Blob(['value'], {type: 'text/x-value'})]), '\nkey=blob:text/x-value:5,');
|
||||
do_test("formdata with blob", create_formdata(['key', new Blob(['value'], {type: 'text/x-value'})]), 'key=value,\n');
|
||||
do_test("formdata with named blob", create_formdata(['key', new Blob(['value'], {type: 'text/x-value'}), 'blob.txt']), '\nkey=blob.txt:text/x-value:5,');
|
||||
// If 3rd argument is given and 2nd is not a Blob, formdata.append() should throw
|
||||
var test = async_test('formdata.append() should throw if value is string and file name is given'); // needs to be async just because the others above are
|
||||
|
|
3
tests/wpt/web-platform-tests/battery-status/OWNERS
Normal file
3
tests/wpt/web-platform-tests/battery-status/OWNERS
Normal file
|
@ -0,0 +1,3 @@
|
|||
@anssiko
|
||||
@dontcallmedom
|
||||
@zqzhang
|
|
@ -0,0 +1,97 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<title>cssom-view - scrollingElement</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<iframe id="quirksframe"></iframe>
|
||||
<iframe id="nonquirksframe"></iframe>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
|
||||
var quirksFrame;
|
||||
var nonQuirksFrame;
|
||||
|
||||
function loadTestFrames(callback) {
|
||||
quirksFrame = document.getElementById("quirksframe");
|
||||
quirksFrame.onload = function() {
|
||||
nonQuirksFrame = document.getElementById("nonquirksframe");
|
||||
nonQuirksFrame.onload = callback;
|
||||
nonQuirksFrame.src =
|
||||
URL.createObjectURL(new Blob(["<!doctype html>"], { type: "text/html" }));
|
||||
}
|
||||
quirksFrame.src =
|
||||
URL.createObjectURL(new Blob([""], { type: "text/html" }));
|
||||
}
|
||||
|
||||
var test = async_test("Tests for scrollingElement");
|
||||
loadTestFrames(function() {
|
||||
test.step(function() {
|
||||
var quirksDoc = quirksFrame.contentDocument;
|
||||
var nonQuirksDoc = nonQuirksFrame.contentDocument;
|
||||
|
||||
// Initial checks that we have the expected kinds of documents.
|
||||
assert_equals(quirksDoc.compatMode, "BackCompat", "Should be in quirks mode.");
|
||||
assert_equals(nonQuirksDoc.compatMode, "CSS1Compat", "Should be in standards mode.");
|
||||
|
||||
assert_not_equals(quirksDoc.body, null, "Should have a body element");
|
||||
assert_not_equals(nonQuirksDoc.body, null, "Should have a body element");
|
||||
|
||||
// Tests for quirks mode document.
|
||||
assert_equals(quirksDoc.scrollingElement, quirksDoc.body,
|
||||
"scrollingElement in quirks mode should default to body element.");
|
||||
|
||||
quirksDoc.documentElement.style.overflow = "scroll";
|
||||
quirksDoc.body.style.overflow = "scroll";
|
||||
assert_equals(quirksDoc.scrollingElement, null,
|
||||
"scrollingElement in quirks mode should be null if overflow of body and root element isn't visible.");
|
||||
quirksDoc.documentElement.style.overflow = "visible";
|
||||
assert_equals(quirksDoc.scrollingElement, quirksDoc.body);
|
||||
quirksDoc.documentElement.style.overflow = "scroll";
|
||||
quirksDoc.body.style.overflow = "visible";
|
||||
assert_equals(quirksDoc.scrollingElement, quirksDoc.body);
|
||||
quirksDoc.documentElement.style.overflow = "visible";
|
||||
assert_equals(quirksDoc.scrollingElement, quirksDoc.body);
|
||||
|
||||
quirksDoc.body.style.display = "none";
|
||||
assert_equals(quirksDoc.scrollingElement, quirksDoc.body)
|
||||
quirksDoc.body.style.display = "block";
|
||||
assert_equals(quirksDoc.scrollingElement, quirksDoc.body);
|
||||
|
||||
quirksDoc.documentElement.appendChild(quirksDoc.createElement("body"));
|
||||
assert_equals(quirksDoc.scrollingElement, quirksDoc.body);
|
||||
assert_equals(quirksDoc.scrollingElement, quirksDoc.getElementsByTagName("body")[0]);
|
||||
quirksDoc.documentElement.removeChild(quirksDoc.documentElement.lastChild);
|
||||
assert_equals(quirksDoc.scrollingElement, quirksDoc.body);
|
||||
|
||||
quirksDoc.documentElement.removeChild(quirksDoc.body);
|
||||
assert_equals(quirksDoc.scrollingElement, null);
|
||||
quirksDoc.documentElement.appendChild(quirksDoc.createElementNS("foobarNS", "body"));
|
||||
assert_equals(quirksDoc.scrollingElement, null);
|
||||
|
||||
quirksDoc.removeChild(quirksDoc.documentElement);
|
||||
assert_equals(quirksDoc.scrollingElement, null);
|
||||
|
||||
quirksDoc.appendChild(quirksDoc.createElementNS("foobarNS", "html"));
|
||||
quirksDoc.documentElement.appendChild(quirksDoc.createElement("body"));
|
||||
assert_equals(quirksDoc.scrollingElement, null);
|
||||
|
||||
quirksDoc.removeChild(quirksDoc.documentElement);
|
||||
quirksDoc.appendChild(quirksDoc.createElement("body"));
|
||||
assert_equals(quirksDoc.scrollingElement, null);
|
||||
|
||||
// Tests for standards mode document.
|
||||
assert_equals(nonQuirksDoc.scrollingElement, nonQuirksDoc.documentElement,
|
||||
"scrollingElement in standards mode should be the document element.");
|
||||
nonQuirksDoc.documentElement.style.overflow = "scroll";
|
||||
nonQuirksDoc.body.style.overflow = "scroll";
|
||||
assert_equals(nonQuirksDoc.scrollingElement, nonQuirksDoc.documentElement);
|
||||
|
||||
nonQuirksDoc.removeChild(nonQuirksDoc.documentElement);
|
||||
assert_equals(nonQuirksDoc.scrollingElement, null);
|
||||
nonQuirksDoc.appendChild(nonQuirksDoc.createElement("foobar"));
|
||||
assert_equals(nonQuirksDoc.scrollingElement.localName, "foobar");
|
||||
|
||||
});
|
||||
test.done();
|
||||
});
|
||||
</script>
|
|
@ -120,4 +120,14 @@ test(function() {
|
|||
}
|
||||
})
|
||||
})
|
||||
|
||||
test(function() {
|
||||
assert_throws(new TypeError(), function() {
|
||||
document.implementation.createDocument()
|
||||
}, "createDocument() should throw")
|
||||
|
||||
assert_throws(new TypeError(), function() {
|
||||
document.implementation.createDocument('')
|
||||
}, "createDocument('') should throw")
|
||||
}, "createDocument with missing arguments");
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: accept header</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#fetching">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("accept-header.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,15 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: accept header</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#fetching">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="accept-header.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,14 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
promise_test(function() {
|
||||
return fetch(RESOURCES_DIR + "inspect-headers.py?headers=Accept").then(function(response) {
|
||||
assert_equals(response.status, 200, "HTTP status is 200");
|
||||
assert_equals(response.type , "basic", "Response's type is basic");
|
||||
assert_equals(response.headers.get("x-request-accept"), "*/*", "Request has accept header with value '*/*'");
|
||||
});
|
||||
}, "Request through fetch should have 'accept' header with value '*/*'");
|
||||
|
||||
done();
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: integrity handling</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("integrity.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
15
tests/wpt/web-platform-tests/fetch/api/basic/integrity.html
Normal file
15
tests/wpt/web-platform-tests/fetch/api/basic/integrity.html
Normal file
|
@ -0,0 +1,15 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: integrity handling</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="integrity.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
45
tests/wpt/web-platform-tests/fetch/api/basic/integrity.js
Normal file
45
tests/wpt/web-platform-tests/fetch/api/basic/integrity.js
Normal file
|
@ -0,0 +1,45 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function integrity(desc, url, integrity, shouldPass) {
|
||||
if (shouldPass) {
|
||||
promise_test(function(test) {
|
||||
return fetch(url, {'integrity': integrity}).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Response's status is 200");
|
||||
});
|
||||
}, desc);
|
||||
} else {
|
||||
promise_test(function(test) {
|
||||
return promise_rejects(test, new TypeError(), fetch(url, {'integrity': integrity}));
|
||||
}, desc);
|
||||
}
|
||||
}
|
||||
|
||||
var topSha256 = "sha256-KHIDZcXnR2oBHk9DrAA+5fFiR6JjudYjqoXtMR1zvzk=";
|
||||
var topSha384 = "sha384-MgZYnnAzPM/MjhqfOIMfQK5qcFvGZsGLzx4Phd7/A8fHTqqLqXqKo8cNzY3xEPTL";
|
||||
var topSha512 = "sha512-D6yns0qxG0E7+TwkevZ4Jt5t7Iy3ugmAajG/dlf6Pado1JqTyneKXICDiqFIkLMRExgtvg8PlxbKTkYfRejSOg==";
|
||||
var invalidSha256 = "sha256-dKUcPOn/AlUjWIwcHeHNqYXPlvyGiq+2dWOdFcE+24I=";
|
||||
var invalidSha512 = "sha512-oUceBRNxPxnY60g/VtPCj2syT4wo4EZh2CgYdWy9veW8+OsReTXoh7dizMGZafvx9+QhMS39L/gIkxnPIn41Zg==";
|
||||
|
||||
var url = "../resources/top.txt";
|
||||
var corsUrl = "http://www1.{{host}}:{{ports[http][0]}}" + dirname(location.pathname) + RESOURCES_DIR + "top.txt";
|
||||
/* Enable CORS*/
|
||||
corsUrl += "?pipe=header(Access-Control-Allow-Origin,*)";
|
||||
|
||||
integrity("Empty string integrity", url, "", true);
|
||||
integrity("SHA-256 integrity", url, topSha256, true);
|
||||
integrity("SHA-384 integrity", url, topSha384, true);
|
||||
integrity("SHA-512 integrity", url, topSha512, true);
|
||||
integrity("Invalid integrity", url, invalidSha256, false);
|
||||
integrity("Multiple integrities: valid stronger than invalid", url, invalidSha256 + " " + topSha384, true);
|
||||
integrity("Multiple integrities: invalid stronger than valid", url, invalidSha512 + " " + topSha384, false);
|
||||
integrity("Multiple integrities: invalid as strong as valid", url, invalidSha512 + " " + topSha512, true);
|
||||
integrity("Multiple integrities: both are valid", url, topSha384 + " " + topSha512, true);
|
||||
integrity("Multiple integrities: both are invalid", url, invalidSha256 + " " + invalidSha512, false);
|
||||
integrity("CORS empty integrity", corsUrl, "", true);
|
||||
integrity("CORS SHA-512 integrity", corsUrl, topSha512, true);
|
||||
integrity("CORS invalid integrity", corsUrl, invalidSha512, false);
|
||||
|
||||
done();
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: no-cors mode and opaque filtering</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#concept-filtered-response-opaque">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("mode-no-cors.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: no-cors mode and opaque filtering</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#concept-filtered-response-opaque">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="mode-no-cors.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
31
tests/wpt/web-platform-tests/fetch/api/basic/mode-no-cors.js
Normal file
31
tests/wpt/web-platform-tests/fetch/api/basic/mode-no-cors.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function fetchNoCors(url, isOpaqueFiltered) {
|
||||
var urlQuery = "?pipe=header(x-is-filtered,value)"
|
||||
promise_test(function(test) {
|
||||
if (isOpaqueFiltered)
|
||||
return fetch(url + urlQuery, {"mode": "no-cors"}).then(function(resp) {
|
||||
assert_equals(resp.status, 0, "Opaque filter: status is 0");
|
||||
assert_equals(resp.statusText, "", "Opaque filter: statusText is \"\"");
|
||||
assert_equals(resp.type , "opaque", "Opaque filter: response's type is opaque");
|
||||
assert_equals(resp.headers.get("x-is-filtered"), null, "Header x-is-filtered is filtered");
|
||||
});
|
||||
else
|
||||
return fetch(url + urlQuery, {"mode": "no-cors"}).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
assert_equals(resp.type , "basic", "Response's type is basic");
|
||||
assert_equals(resp.headers.get("x-is-filtered"), "value", "Header x-is-filtered is not filtered");
|
||||
});
|
||||
}, "Fetch "+ url + " with no-cors mode");
|
||||
}
|
||||
|
||||
fetchNoCors(RESOURCES_DIR + "top.txt", false);
|
||||
fetchNoCors("http://{{host}}:{{ports[http][0]}}/fetch/api/resources/top.txt", false);
|
||||
fetchNoCors("https://{{host}}:{{ports[https][0]}}/fetch/api/resources/top.txt", true);
|
||||
fetchNoCors("http://{{domains[www]}}:{{ports[http][0]}}/fetch/api/resources/top.txt", true);
|
||||
|
||||
done();
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: same-origin mode</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#basic-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("mode-same-origin.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: same-origin mode</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#basic-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="mode-same-origin.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,24 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function fetchSameOrigin(url, shouldPass) {
|
||||
promise_test(function(test) {
|
||||
if (shouldPass)
|
||||
return fetch(url , {"mode": "same-origin"}).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
assert_equals(resp.type, "basic", "response type is basic");
|
||||
});
|
||||
else
|
||||
return promise_rejects(test, new TypeError, fetch(url, {mode: "same-origin"}));
|
||||
}, "Fetch "+ url + " with same-origin mode");
|
||||
}
|
||||
|
||||
fetchSameOrigin(RESOURCES_DIR + "top.txt", true);
|
||||
fetchSameOrigin("http://{{host}}:{{ports[http][0]}}/fetch/api/resources/top.txt", true);
|
||||
fetchSameOrigin("https://{{host}}:{{ports[https][0]}}/fetch/api/resources/top.txt", false);
|
||||
fetchSameOrigin("http://{{domains[www]}}:{{ports[http][0]}}/fetch/api/resources/top.txt", false);
|
||||
|
||||
done();
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: forbidden request header management</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#forbidden-header-name">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("request-forbidden-headers.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: forbidden request header management</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#forbidden-header-name">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="request-forbidden-headers.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,48 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function requestForbiddenHeaders(desc, forbiddenHeaders) {
|
||||
var url = RESOURCES_DIR + "inspect-headers.py";
|
||||
var requestInit = {"headers": forbiddenHeaders}
|
||||
var urlParameters = "?headers=" + Object.keys(forbiddenHeaders).join("|");
|
||||
|
||||
promise_test(function(test){
|
||||
return fetch(url + urlParameters, requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
assert_equals(resp.type , "basic", "Response's type is basic");
|
||||
for (var header in forbiddenHeaders)
|
||||
assert_not_equals(resp.headers.get("x-request-" + header), forbiddenHeaders[header], header + " does not have the value we defined");
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
|
||||
requestForbiddenHeaders("Accept-Charset is a forbidden request header", {"Accept-Charset": "utf-8"});
|
||||
requestForbiddenHeaders("Accept-Encoding is a forbidden request header", {"Accept-Encoding": ""});
|
||||
|
||||
requestForbiddenHeaders("Access-Control-Request-Headers is a forbidden request header", {"Access-Control-Request-Headers": ""});
|
||||
requestForbiddenHeaders("Access-Control-Request-Method is a forbidden request header", {"Access-Control-Request-Method": ""});
|
||||
requestForbiddenHeaders("Connection is a forbidden request header", {"Connection": "close"});
|
||||
requestForbiddenHeaders("Content-Length is a forbidden request header", {"Content-Length": "42"});
|
||||
requestForbiddenHeaders("Cookie is a forbidden request header", {"Cookie": "cookie=none"});
|
||||
requestForbiddenHeaders("Cookie2 is a forbidden request header", {"Cookie2": "cookie2=none"});
|
||||
requestForbiddenHeaders("Date is a forbidden request header", {"Date": "Wed, 04 May 1988 22:22:22 GMT"});
|
||||
requestForbiddenHeaders("DNT is a forbidden request header", {"DNT": "4"});
|
||||
requestForbiddenHeaders("Expect is a forbidden request header", {"Expect": "100-continue"});
|
||||
requestForbiddenHeaders("Host is a forbidden request header", {"Host": "http://wrong-host.com"});
|
||||
requestForbiddenHeaders("Keep-Alive is a forbidden request header", {"Keep-Alive": "timeout=15"});
|
||||
requestForbiddenHeaders("Origin is a forbidden request header", {"Origin": "http://wrong-origin.com"});
|
||||
requestForbiddenHeaders("Referer is a forbidden request header", {"Referer": "http://wrong-referer.com"});
|
||||
requestForbiddenHeaders("TE is a forbidden request header", {"TE": "trailers"});
|
||||
requestForbiddenHeaders("Trailer is a forbidden request header", {"Trailer": "Accept"});
|
||||
requestForbiddenHeaders("Transfer-Encoding is a forbidden request header", {"Transfer-Encoding": "chunked"});
|
||||
requestForbiddenHeaders("Upgrade is a forbidden request header", {"Upgrade": "HTTP/2.0"});
|
||||
requestForbiddenHeaders("Via is a forbidden request header", {"Via": "1.1 nowhere.com"});
|
||||
requestForbiddenHeaders("Proxy- is a forbidden request header", {"Proxy-": "value"});
|
||||
requestForbiddenHeaders("Proxy-Test is a forbidden request header", {"Proxy-Test": "value"});
|
||||
requestForbiddenHeaders("Sec- is a forbidden request header", {"Sec-": "value"});
|
||||
requestForbiddenHeaders("Sec-Test is a forbidden request header", {"Sec-Test": "value"});
|
||||
|
||||
done();
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: User agent add headers to request</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("request-headers.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,15 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: User agent add headers to request</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="request-headers.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,35 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function requestHeaders(desc, url, method, body, expectedOrigin, expectedContentLength) {
|
||||
var urlParameters = "?headers=origin|user-agent|accept-charset|content-length";
|
||||
var requestInit = {"method": method}
|
||||
if (body)
|
||||
requestInit["body"] = body;
|
||||
promise_test(function(test){
|
||||
return fetch(url + urlParameters, requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
assert_equals(resp.type , "basic", "Response's type is basic");
|
||||
assert_equals(resp.headers.get("x-request-origin") , expectedOrigin, "Request has header origin: " + expectedOrigin);
|
||||
assert_equals(resp.headers.get("x-request-content-length") , expectedContentLength, "Request has header content-length: " + expectedContentLength);
|
||||
assert_true(resp.headers.has("x-request-user-agent"), "Request has header user-agent");
|
||||
assert_false(resp.headers.has("accept-charset"), "Request has header accept-charset");
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
|
||||
var url = RESOURCES_DIR + "inspect-headers.py"
|
||||
|
||||
requestHeaders("Fetch with GET", url, "GET", null, location.origin, null);
|
||||
requestHeaders("Fetch with HEAD", url, "HEAD", null, location.origin, "0");
|
||||
requestHeaders("Fetch with HEAD with body", url, "HEAD", "Request's body", location.origin, "14");
|
||||
requestHeaders("Fetch with PUT without body", url, "POST", null, location.origin, "0");
|
||||
requestHeaders("Fetch with PUT with body", url, "PUT", "Request's body", location.origin, "14");
|
||||
requestHeaders("Fetch with POST without body", url, "POST", null, location.origin, "0");
|
||||
requestHeaders("Fetch with POST with body", url, "POST", "Request's body", location.origin, "14");
|
||||
requestHeaders("Fetch with Chicken", url, "Chicken", null, location.origin, null);
|
||||
requestHeaders("Fetch with Chicken with body", url, "Chicken", "Request's body", location.origin, "14");
|
||||
|
||||
done();
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: about scheme</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#basic-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("scheme-about.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: about scheme</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#basic-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="scheme-about.js"></script>
|
||||
</body>
|
||||
</html>
|
40
tests/wpt/web-platform-tests/fetch/api/basic/scheme-about.js
Normal file
40
tests/wpt/web-platform-tests/fetch/api/basic/scheme-about.js
Normal file
|
@ -0,0 +1,40 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
var unicorn = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2361 1572" fill="hotpink"><path d="m1648 1570c-42-12 6-93 55-94 46 0 50-10 46-123-5-122-7-126-119-202-81-55-145-128-175-201-12-30-26-59-31-63s-58-4-119 0c-70 6-131 5-170-2-59-10-84-21-220-93-68-36-72-37-145-31-41 4-100 11-131 17-55 10-57 12-62 47-16 95 3 152 49 152 14 0 29 8 34 19 14 25 13 101-0 101-12 0-60-46-60-58 0-4-17-18-38-31l-38-23-2-115c-1-64 2-124 8-133s24-21 42-25c59-12 128-37 128-46 0-5-4-9-10-9-14 0-28-30-45-95-12-47-13-69-3-124 11-62 10-71-10-109-12-23-22-50-22-60s-7-27-15-37c-18-23-19-18-5 24 8 24 7 50-5 110-10 48-14 96-10 120 8 47-9 72-48 72-40 0-66-26-77-81-6-28-30-88-53-133-23-45-45-88-48-96-4-8-22-20-41-26-26-9-34-17-34-36 0-22 4-24 37-21l37 3-9-33c-12-43-6-47 31-20l30 22 26-20c14-11 39-38 55-61 39-53 63-62 139-49 46 8 64 8 75-2 8-7 15-8 15-4-0 15-14 30-34 37-37 14-6 19 44 7 49-12 53-11 90 15 28 19 48 26 69 23 37-6 29 10-16 28-19 8-32 19-28 24 4 6 15 5 30-2 18-8 35-7 71 5 27 9 58 16 71 16 32 0 29 17-7 35-16 9-30 17-30 20 0 2 22 2 49-2 44-5 52-3 96 31 27 20 54 34 62 32 25-10 14 4-16 19-16 8-39 15-50 15-29 0-26 16 20 87 45 68 96 101 189 123 149 35 239 59 268 71 27 12 36 11 67-4 21-10 41-29 47-45 23-59 39-78 80-101 60-32 141-27 175 12 23 28 25 34 43 178 15 118 36 182 72 224 28 32 35 35 90 35 75 0 125-21 167-68l33-37-17 40c-16 41-65 98-100 117-11 6-42 17-70 24l-50 12 62 1c48 0 72-5 116-28 50-25 55-26 45-8-17 33-98 115-136 139-29 18-51 22-113 22-71 1-80-2-115-30-21-17-86-28-99-128-7-56 0-176 0-176s18-102-6-175c-19-57-81-86-123-20-19 30-43 60-54 67-18 12-18 13 6 59 34 67 38 144 14 260l-20 95 24 35c13 20 40 51 59 70 40 38 41 50 29 252-6 92-9 107-25 111-10 3-19 12-19 20s-7 18-17 20c-32 10-87 15-105 10zm-1228-1255c0-18-2-19-16-8-12 10-13 15-3 21 18 11 18 11 18-13zm743 1151c-12-5-23-14-23-20 0-17 57-69 76-69 21 0 130-65 167-99 47-43 36-101-38-198-30-39-73-148-63-158 2-2 30-5 63-7l60-3 32 60c41 77 38 69 63 145 40 115 41 112-31 166-34 27-79 62-98 79-20 17-43 34-53 38-10 3-22 17-27 30-5 14-13 27-17 29-19 12-90 16-111 7zm-913-440c0-23 28-113 44-145 6-11 32-51 57-90 26-39 50-81 53-95 5-21 22-30 103-59 53-19 102-36 108-38 6-2 18 11 27 30l16 34-92 28c-105 32-126 47-161 122-16 34-35 58-50 63-32 13-40 42-22 85l15 36-37 25c-45 30-62 31-62 4zm-48-843c-41-18-25-52 19-39 21 6 23 10 14 28-9 17-15 19-33 11zm-74-25c-28-6-31-32-4-32 13 0 26 4 29 8 8 13-8 28-25 24zm-78-37c0-9 6-12 15-9 19 7 19 24 0 24-8 0-15-7-15-15zm-50-15c0-5 7-7 15-4 19 7 19 14 0 14-8 0-15-4-15-10z"/></svg>';
|
||||
|
||||
function checkFetchResponse(url, data, mime, desc) {
|
||||
if (!desc) {
|
||||
var cut = (url.length >= 45) ? "[...]" : "";
|
||||
desc = "Fetching " + url.substring(0, 45) + cut + " is OK"
|
||||
}
|
||||
promise_test(function(test) {
|
||||
return fetch(url).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
assert_equals(resp.type, "basic", "response type is basic");
|
||||
assert_equals(resp.headers.get("Content-Type"), mime, "Content-Type is " + resp.headers.get("Content-Type"));
|
||||
return resp.text();
|
||||
}).then(function(bodyAsText) {
|
||||
assert_equals(bodyAsText, data, "Response's body is " + data);
|
||||
})
|
||||
}, desc);
|
||||
}
|
||||
|
||||
checkFetchResponse("about:blank", "", "text/html;charset=utf-8");
|
||||
checkFetchResponse("about:unicorn", unicorn, "image/svg+xml");
|
||||
|
||||
function checkKoUrl(url, desc) {
|
||||
if (!desc)
|
||||
desc = "Fetching " + url.substring(0, 45) + " is KO"
|
||||
promise_test(function(test) {
|
||||
var promise = fetch(url);
|
||||
return promise_rejects(test, new TypeError(), promise);
|
||||
}, desc);
|
||||
}
|
||||
|
||||
checkKoUrl("about:invalid.com");
|
||||
checkKoUrl("about:config");
|
||||
|
||||
done();
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: blob scheme</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#basic-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("scheme-blob.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: blob scheme</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#basic-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="scheme-blob.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
41
tests/wpt/web-platform-tests/fetch/api/basic/scheme-blob.js
Normal file
41
tests/wpt/web-platform-tests/fetch/api/basic/scheme-blob.js
Normal file
|
@ -0,0 +1,41 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function checkFetchResponse(url, data, mime, size, desc) {
|
||||
if (!desc)
|
||||
var cut = (url.length >= 45) ? "[...]" : "";
|
||||
desc = "Fetching " + url.substring(0, 45) + cut + " is OK"
|
||||
promise_test(function(test) {
|
||||
size = size.toString();
|
||||
return fetch(url).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
assert_equals(resp.type, "basic", "response type is basic");
|
||||
assert_equals(resp.headers.get("Content-Type"), mime, "Content-Type is " + resp.headers.get("Content-Type"));
|
||||
assert_equals(resp.headers.get("Content-Length"), size, "Content-Length is " + resp.headers.get("Content-Length"));
|
||||
return resp.text();
|
||||
}).then(function(bodyAsText) {
|
||||
assert_equals(bodyAsText, data, "Response's body is " + data);
|
||||
})
|
||||
}, desc);
|
||||
}
|
||||
|
||||
var blob = new Blob(["Blob's data"], { "type" : "text/plain" });
|
||||
checkFetchResponse(URL.createObjectURL(blob), "Blob's data", "text/plain", blob.size);
|
||||
|
||||
function checkKoUrl(url, method, desc) {
|
||||
if (!desc)
|
||||
var cut = (url.length >= 45) ? "[...]" : "";
|
||||
desc = "Fetching [" + method + "] " + url.substring(0, 45) + cut + " is KO"
|
||||
promise_test(function(test) {
|
||||
var promise = fetch(url, {"method": method});
|
||||
return promise_rejects(test, new TypeError(), promise);
|
||||
}, desc);
|
||||
}
|
||||
|
||||
var blob2 = new Blob(["Blob's data"], { "type" : "text/plain" });
|
||||
checkKoUrl("blob:http://{{domains[www]}}:{{ports[http][0]}}/", "GET");
|
||||
checkKoUrl(URL.createObjectURL(blob2), "POST");
|
||||
|
||||
done();
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: data scheme</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#basic-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("scheme-data.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: data scheme</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#basic-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="scheme-data.js"></script>
|
||||
</body>
|
||||
</html>
|
39
tests/wpt/web-platform-tests/fetch/api/basic/scheme-data.js
Normal file
39
tests/wpt/web-platform-tests/fetch/api/basic/scheme-data.js
Normal file
|
@ -0,0 +1,39 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function checkFetchResponse(url, data, mime) {
|
||||
var cut = (url.length >= 40) ? "[...]" : "";
|
||||
desc = "Fetching " + url.substring(0, 40) + cut + " is OK"
|
||||
promise_test(function(test) {
|
||||
return fetch(url).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
assert_equals(resp.type, "basic", "response type is basic");
|
||||
assert_equals(resp.headers.get("Content-Type"), mime, "Content-Type is " + resp.headers.get("Content-Type"));
|
||||
return resp.text();
|
||||
}).then(function(body) {
|
||||
assert_equals(body, data, "Response's body is correct");
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
|
||||
checkFetchResponse("data:,response%27s%20body", "response's body", "text/plain;charset=US-ASCII");
|
||||
checkFetchResponse("data:text/plain;base64,cmVzcG9uc2UncyBib2R5", "response's body", "text/plain");
|
||||
checkFetchResponse("data:image/png;base64,cmVzcG9uc2UncyBib2R5",
|
||||
"response's body",
|
||||
"image/png");
|
||||
|
||||
function checkKoUrl(url, method, desc) {
|
||||
var cut = (url.length >= 40) ? "[...]" : "";
|
||||
desc = "Fetching [" + method + "] " + url.substring(0, 45) + cut + " is KO"
|
||||
promise_test(function(test) {
|
||||
return promise_rejects(test, new TypeError(), fetch(url, {"method": method}));
|
||||
}, desc);
|
||||
}
|
||||
|
||||
checkKoUrl("data:notAdataUrl.com", "GET");
|
||||
checkKoUrl("data:,response%27s%20body", "POST");
|
||||
checkKoUrl("data:,response%27s%20body", "HEAD");
|
||||
|
||||
done();
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: urls with unsupported schemes</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#basic-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("scheme-others.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: urls with unsupported schemes</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#basic-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="scheme-others.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,33 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function checkKoUrl(url, desc) {
|
||||
if (!desc)
|
||||
desc = "Fetching " + url.substring(0, 45) + " is KO"
|
||||
promise_test(function(test) {
|
||||
var promise = fetch(url);
|
||||
return promise_rejects(test, new TypeError(), promise);
|
||||
}, desc);
|
||||
}
|
||||
|
||||
var urlWithoutScheme = "://{{host}}:{{ports[http][0]}}/";
|
||||
checkKoUrl("aaa" + urlWithoutScheme);
|
||||
checkKoUrl("cap" + urlWithoutScheme);
|
||||
checkKoUrl("cid" + urlWithoutScheme);
|
||||
checkKoUrl("dav" + urlWithoutScheme);
|
||||
checkKoUrl("dict" + urlWithoutScheme);
|
||||
checkKoUrl("dns" + urlWithoutScheme);
|
||||
checkKoUrl("geo" + urlWithoutScheme);
|
||||
checkKoUrl("im" + urlWithoutScheme);
|
||||
checkKoUrl("imap" + urlWithoutScheme);
|
||||
checkKoUrl("ipp" + urlWithoutScheme);
|
||||
checkKoUrl("ldap" + urlWithoutScheme);
|
||||
checkKoUrl("mailto" + urlWithoutScheme);
|
||||
checkKoUrl("nfs" + urlWithoutScheme);
|
||||
checkKoUrl("pop" + urlWithoutScheme);
|
||||
checkKoUrl("rtsp" + urlWithoutScheme);
|
||||
checkKoUrl("snmp" + urlWithoutScheme);
|
||||
|
||||
done();
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: retrieve response's body progressively</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("stream-response.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: retrieve response's body progressively</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="stream-response.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,37 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function streamBody(reader, test, count) {
|
||||
return reader.read().then(function(data) {
|
||||
if (!data.done && count < 2) {
|
||||
count += 1;
|
||||
return streamBody(reader, test, count);
|
||||
} else {
|
||||
test.step(function() {
|
||||
assert_true(count >= 2, "Retrieve body progressively");
|
||||
test.done();
|
||||
return;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//simulate streaming:
|
||||
//count is large enough to let the UA deliver the body before it is completely retrieved
|
||||
async_test(function(test) {
|
||||
fetch(RESOURCES_DIR + "trickle.py?ms=30&count=100").then(function(resp) {
|
||||
var count = 0;
|
||||
if (resp.body)
|
||||
return streamBody(resp.body.getReader(), test, count);
|
||||
else
|
||||
test.step(function() {
|
||||
assert_unreached( "Body does not exist in response");
|
||||
test.done();
|
||||
return;
|
||||
});
|
||||
});
|
||||
}, "Stream response's body");
|
||||
|
||||
done();
|
|
@ -0,0 +1,19 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: basic CORS</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#concept-filtered-response-cors">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#concept-cors-check">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-basic.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
18
tests/wpt/web-platform-tests/fetch/api/cors/cors-basic.html
Normal file
18
tests/wpt/web-platform-tests/fetch/api/cors/cors-basic.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: basic CORS</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#concept-filtered-response-cors">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#concept-cors-check">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-basic.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
45
tests/wpt/web-platform-tests/fetch/api/cors/cors-basic.js
Normal file
45
tests/wpt/web-platform-tests/fetch/api/cors/cors-basic.js
Normal file
|
@ -0,0 +1,45 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function cors(desc, scheme, subdomain, port) {
|
||||
if (!port)
|
||||
port = location.port;
|
||||
if (subdomain)
|
||||
subdomain = subdomain + ".";
|
||||
else
|
||||
subdomain = "";
|
||||
|
||||
var url = scheme + "://" + subdomain + "{{host}}" + ":" + port + dirname(location.pathname);
|
||||
var urlParameters = "?pipe=header(Access-Control-Allow-Origin,*)";
|
||||
|
||||
promise_test(function(test) {
|
||||
return fetch(url + RESOURCES_DIR + "top.txt" + urlParameters, {"mode": "no-cors"} ).then(function(resp) {
|
||||
assert_equals(resp.status, 0, "Opaque filter: status is 0");
|
||||
assert_equals(resp.statusText, "", "Opaque filter: statusText is \"\"");
|
||||
assert_equals(resp.type , "opaque", "Opaque filter: response's type is opaque");
|
||||
});
|
||||
}, desc + " [no-cors mode]");
|
||||
|
||||
promise_test(function(test) {
|
||||
var testedPromise = fetch(url + RESOURCES_DIR + "top.txt", {"mode": "cors"} ).then(function(resp) {
|
||||
return promise_rejects(test, new TypeError(), testedPromise);
|
||||
});
|
||||
}, desc + " [server forbid CORS]");
|
||||
|
||||
promise_test(function(test) {
|
||||
return fetch(url + RESOURCES_DIR + "top.txt" + urlParameters, {"mode": "cors"} ).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Fetch's response's status is 200");
|
||||
assert_equals(resp.type , "cors", "CORS response's type is cors");
|
||||
});
|
||||
}, desc + " [cors mode]");
|
||||
}
|
||||
|
||||
cors("Cross domain basic usage", "http", "www1");
|
||||
cors("Same domain different port", "http", undefined, "{{ports[http][1]}}");
|
||||
cors("Cross domain different port", "http", "www1", "{{ports[http][1]}}");
|
||||
cors("Cross domain different protocol", "https", "www1", "{{ports[https][0]}}");
|
||||
cors("Same domain different protocol different port", "https", undefined, "{{ports[https][0]}}");
|
||||
|
||||
done();
|
|
@ -0,0 +1,18 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: cookies management for cors requests</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-cookies.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: cookies management for cors requests</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-cookies.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
58
tests/wpt/web-platform-tests/fetch/api/cors/cors-cookies.js
Normal file
58
tests/wpt/web-platform-tests/fetch/api/cors/cors-cookies.js
Normal file
|
@ -0,0 +1,58 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function corsCookies(desc, domain1, domain2, credentialsMode, cookies) {
|
||||
var urlSetCookie = "http://" + domain1 + ":{{ports[http][0]}}" + dirname(location.pathname) + RESOURCES_DIR + "top.txt";
|
||||
var urlCheckCookies = "http://" + domain2 + ":{{ports[http][0]}}" + dirname(location.pathname) + RESOURCES_DIR + "inspect-headers.py?cors&headers=cookie";
|
||||
//enable cors with credentials
|
||||
var urlParameters = "?pipe=header(Access-Control-Allow-Origin," + location.origin + ")";
|
||||
urlParameters += "|header(Access-Control-Allow-Credentials,true)";
|
||||
|
||||
var urlCleanParameters = "?pipe=header(Access-Control-Allow-Origin," + location.origin + ")";
|
||||
urlCleanParameters += "|header(Access-Control-Allow-Credentials,true)";
|
||||
if (cookies) {
|
||||
urlParameters += "|header(Set-Cookie,";
|
||||
urlParameters += cookies.join(",True)|header(Set-Cookie,") + ",True)";
|
||||
urlCleanParameters += "|header(Set-Cookie,";
|
||||
urlCleanParameters += cookies.join("%3B%20max-age=0,True)|header(Set-Cookie,") + "%3B%20max-age=0,True)";
|
||||
}
|
||||
|
||||
var requestInit = {"credentials": credentialsMode, "mode": "cors"};
|
||||
|
||||
promise_test(function(test){
|
||||
return fetch(urlSetCookie + urlParameters, requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
//check cookies sent
|
||||
return fetch(urlCheckCookies, requestInit);
|
||||
}).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
assert_false(resp.headers.has("Cookie") , "Cookie header is not exposed in response");
|
||||
if (credentialsMode === "include" && domain1 === domain2) {
|
||||
assert_equals(resp.headers.get("x-request-cookie") , cookies.join("; "), "Request includes cookie(s)");
|
||||
}
|
||||
else {
|
||||
assert_false(resp.headers.has("x-request-cookie") , "Request should have no cookie");
|
||||
}
|
||||
//clean cookies
|
||||
return fetch(urlSetCookie + urlCleanParameters, {"credentials": "include"});
|
||||
}).catch(function(e) {
|
||||
fetch(urlSetCookie + urlCleanParameters, {"credentials": "include"});
|
||||
throw e;
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
|
||||
var local = "{{host}}";
|
||||
var remote = "www.{{host}}";
|
||||
var remote1 = "www1.{{host}}";
|
||||
|
||||
corsCookies("Include mode: 1 cookie", remote, remote, "include", ["a=1"]);
|
||||
corsCookies("Include mode: local cookies are not sent with remote request", local, remote, "include", ["c=3"]);
|
||||
corsCookies("Include mode: remote cookies are not sent with local request", remote, local, "include", ["d=4"]);
|
||||
corsCookies("Include mode: remote cookies are not sent with other remote request", remote, remote1, "include", ["e=5"]);
|
||||
corsCookies("Same-origin mode: cookies are discarded in cors request", remote, remote, "same-origin", ["f=6"]);
|
||||
corsCookies("Omit mode: no cookie sent", local, local, "omit", ["g=7"]);
|
||||
|
||||
done();
|
|
@ -0,0 +1,18 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: filtered headers in CORS response</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#concept-filtered-response-cors">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-filtering.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: filtered headers in CORS response</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#concept-filtered-response-cors">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-filtering.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,66 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function corsFilter(corsUrl, headerName, headerValue, isFiltered) {
|
||||
var url = corsUrl + "?pipe=header(" + headerName + "," + encodeURIComponent(headerValue) +")|header(Access-Control-Allow-Origin,*)";
|
||||
promise_test(function(test) {
|
||||
return fetch(url).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Fetch success with code 200");
|
||||
assert_equals(resp.type , "cors", "CORS fetch's response has cors type");
|
||||
if (!isFiltered) {
|
||||
assert_equals(resp.headers.get(headerName), headerValue,
|
||||
headerName + " header should be included in response with value: " + headerValue);
|
||||
} else {
|
||||
assert_false(resp.headers.has(headerName), "UA should exclude " + headerName + " header from response");
|
||||
}
|
||||
test.done();
|
||||
});
|
||||
}, "CORS filter on " + headerName + " header");
|
||||
}
|
||||
|
||||
function corsExposeFilter(corsUrl, headerName, headerValue, isForbidden) {
|
||||
var url = corsUrl + "?pipe=header(" + headerName + "," + encodeURIComponent(headerValue) +")|" +
|
||||
"header(Access-Control-Allow-Origin,*)" +
|
||||
"header(Access-Control-Expose-Headers," + headerName + ")";
|
||||
|
||||
promise_test(function(test) {
|
||||
return fetch(url).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Fetch success with code 200");
|
||||
assert_equals(resp.type , "cors", "CORS fetch's response has cors type");
|
||||
if (!isForbidden) {
|
||||
assert_equals(resp.headers.get(headerName), headerValue,
|
||||
headerName + " header should be included in response with value: " + headerValue);
|
||||
} else {
|
||||
assert_false(resp.headers.has(headerName), "UA should exclude " + headerName + " header from response");
|
||||
}
|
||||
test.done();
|
||||
});
|
||||
}, "CORS filter on " + headerName + " header, header is exposed");
|
||||
}
|
||||
|
||||
var url = "http://www1.{{host}}:{{ports[http][1]}}" + dirname(location.pathname) + RESOURCES_DIR + "top.txt";
|
||||
|
||||
corsFilter(url, "Cache-Control", "no-cache", false);
|
||||
corsFilter(url, "Content-Language", "fr", false);
|
||||
corsFilter(url, "Content-Type", "text/html", false);
|
||||
corsFilter(url, "Expires","04 May 1988 22:22:22 GMT" , false);
|
||||
corsFilter(url, "Last-Modified", "04 May 1988 22:22:22 GMT", false);
|
||||
corsFilter(url, "Pragma", "no-cache", false);
|
||||
|
||||
corsFilter(url, "Age", "27", true);
|
||||
corsFilter(url, "Server", "wptServe" , true);
|
||||
corsFilter(url, "Warning", "Mind the gap" , true);
|
||||
corsFilter(url, "Content-Length", "0" , true);
|
||||
corsFilter(url, "Set-Cookie", "name=value" , true);
|
||||
corsFilter(url, "Set-Cookie2", "name=value" , true);
|
||||
|
||||
corsExposeFilter(url, "Age", "27", false);
|
||||
corsExposeFilter(url, "Server", "wptServe" , false);
|
||||
corsExposeFilter(url, "Warning", "Mind the gap" , false);
|
||||
corsExposeFilter(url, "Content-Length", "0" , false);
|
||||
corsExposeFilter(url, "Set-Cookie", "name=value" , true);
|
||||
corsExposeFilter(url, "Set-Cookie2", "name=value" , true);
|
||||
|
||||
done();
|
|
@ -0,0 +1,19 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: check multiple Access-Control-Allow-Origin header management</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#cors-check">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-multiple-origins.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,18 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: check multiple Access-Control-Allow-Origin header management</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#cors-check">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-multiple-origins.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,32 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function corsMultipleOrigins(desc, originList, shouldPass) {
|
||||
var urlParameters = "?origin=" + encodeURIComponent(originList.join(", "));
|
||||
var url = "http://www1.{{host}}:{{ports[http][0]}}" + dirname(location.pathname) + RESOURCES_DIR + "preflight.py";
|
||||
|
||||
if (shouldPass) {
|
||||
promise_test(function(test) {
|
||||
return fetch(url + urlParameters).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Response's status is 200");
|
||||
});
|
||||
}, desc);
|
||||
} else {
|
||||
promise_test(function(test) {
|
||||
return promise_rejects(test, new TypeError(), fetch(url + urlParameters));
|
||||
}, desc);
|
||||
}
|
||||
}
|
||||
/* Actual origin */
|
||||
var origin = "http://{{host}}:{{ports[http][0]}}";
|
||||
|
||||
corsMultipleOrigins("3 origins allowed, match the 3rd (" + origin + ")", ["\"\"", "http://example.com", origin], true);
|
||||
corsMultipleOrigins("3 origins allowed, match the 3rd (\"*\")", ["\"\"", "http://example.com", "*"], true);
|
||||
corsMultipleOrigins("3 origins allowed, match twice (" + origin + ")", ["\"\"", origin, origin], true);
|
||||
corsMultipleOrigins("3 origins allowed, match twice (\"*\")", ["*", "http://example.com", "*"], true);
|
||||
corsMultipleOrigins("3 origins allowed, match twice (\"*\" and " + origin + ")", ["*", "http://example.com", origin], true);
|
||||
corsMultipleOrigins("3 origins allowed, no match", ["", "http://example.com", "https://example2.com"], false);
|
||||
|
||||
done();
|
|
@ -0,0 +1,20 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: CORS request with simple methods and headers</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#simple-method">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#simple-header">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-no-preflight.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,20 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: CORS request with simple methods and headers</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#simple-method">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#simple-header">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-no-preflight.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,50 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("/common/utils.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function corsNoPreflight(desc, scheme, subdomain, port, method, headerName, headerValue) {
|
||||
if (!port)
|
||||
port = location.port;
|
||||
if (subdomain)
|
||||
subdomain = subdomain + ".";
|
||||
else
|
||||
subdomain = "";
|
||||
|
||||
var uuid_token = token();
|
||||
var url = scheme + "://" + subdomain + "{{host}}" + ":" + port + dirname(location.pathname) + RESOURCES_DIR + "preflight.py";
|
||||
var urlParameters = "?token=" + uuid_token + "&max_age=0";
|
||||
var requestInit = {"mode": "cors", "method": method, "headers":{}};
|
||||
if (headerName)
|
||||
requestInit["headers"][headerName] = headerValue;
|
||||
|
||||
promise_test(function(test) {
|
||||
fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Clean stash response's status is 200");
|
||||
return fetch(url + urlParameters, requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Response's status is 200");
|
||||
assert_equals(resp.headers.get("x-did-preflight"), "0", "No preflight request has been made");
|
||||
});
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
var port2 = "{{ports[http][1]}}";
|
||||
var httpsPort = "{{ports[https][0]}}";
|
||||
|
||||
corsNoPreflight("Cross domain basic usage [GET]", "http", "www1", undefined, "GET");
|
||||
corsNoPreflight("Same domain different port [GET]", "http", undefined, port2, "GET");
|
||||
corsNoPreflight("Cross domain different port [GET]", "http", "www1", port2, "GET");
|
||||
corsNoPreflight("Cross domain different protocol [GET]", "https", "www1", httpsPort, "GET");
|
||||
corsNoPreflight("Same domain different protocol different port [GET]", "https", undefined, httpsPort, "GET");
|
||||
corsNoPreflight("Cross domain [POST]", "http", "www1", undefined, "POST");
|
||||
corsNoPreflight("Cross domain [HEAD]", "http", "www1", undefined, "HEAD");
|
||||
corsNoPreflight("Cross domain [GET] [Accept: */*]", "http", "www1", undefined, "GET" , "Accept", "*/*");
|
||||
corsNoPreflight("Cross domain [GET] [Accept-Language: fr]", "http", "www1", undefined, "GET" , "Accept-Language", "fr");
|
||||
corsNoPreflight("Cross domain [GET] [Content-Language: fr]", "http", "www1", undefined, "GET" , "Content-Language", "fr");
|
||||
corsNoPreflight("Cross domain [GET] [Content-Type: application/x-www-form-urlencoded]", "http", "www1", undefined, "GET" , "Content-Type", "application/x-www-form-urlencoded");
|
||||
corsNoPreflight("Cross domain [GET] [Content-Type: multipart/form-data]", "http", "www1", undefined, "GET" , "Content-Type", "multipart/form-data");
|
||||
corsNoPreflight("Cross domain [GET] [Content-Type: text/plain]", "http", "www1", undefined, "GET" , "Content-Type", "text/plain");
|
||||
corsNoPreflight("Cross domain [GET] [Content-Type: text/plain;charset=utf-8]", "http", "www1", undefined, "GET" , "Content-Type", "text/plain;charset=utf-8");
|
||||
|
||||
done();
|
|
@ -0,0 +1,19 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: check Access-Control-Allow-Origin header management</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#cors-check">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-origin.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
19
tests/wpt/web-platform-tests/fetch/api/cors/cors-origin.html
Normal file
19
tests/wpt/web-platform-tests/fetch/api/cors/cors-origin.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: check Access-Control-Allow-Origin header management</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#cors-check">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-origin.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
61
tests/wpt/web-platform-tests/fetch/api/cors/cors-origin.js
Normal file
61
tests/wpt/web-platform-tests/fetch/api/cors/cors-origin.js
Normal file
|
@ -0,0 +1,61 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
importScripts("/common/utils.js");
|
||||
}
|
||||
|
||||
/* If origin is undefined, it is set to fetched url's origin*/
|
||||
function corsOrigin(desc, scheme, subdomain, port, method, origin, shouldPass) {
|
||||
if (!port)
|
||||
port = location.port;
|
||||
if (subdomain)
|
||||
subdomain = subdomain + ".";
|
||||
else
|
||||
subdomain = "";
|
||||
if (!origin)
|
||||
origin = scheme + "://" + subdomain + "{{host}}" + ":" + port;
|
||||
|
||||
var uuid_token = token();
|
||||
var urlParameters = "?token=" + uuid_token + "&max_age=0&origin=" + encodeURIComponent(origin) + "&allow_methods=" + method;
|
||||
var url = scheme + "://" + subdomain + "{{host}}" + ":" + port + dirname(location.pathname) + RESOURCES_DIR + "preflight.py";
|
||||
var requestInit = {"mode": "cors", "method": method};
|
||||
|
||||
promise_test(function(test) {
|
||||
fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Clean stash response's status is 200");
|
||||
if (shouldPass) {
|
||||
return fetch(url + urlParameters, requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Response's status is 200");
|
||||
});
|
||||
} else {
|
||||
return promise_rejects(test, new TypeError(), fetch(url + urlParameters, requestInit));
|
||||
}
|
||||
});
|
||||
}, desc);
|
||||
|
||||
}
|
||||
var port = "{{ports[http][0]}}";
|
||||
var port2 = "{{ports[http][1]}}";
|
||||
var httpsPort = "{{ports[https][0]}}";
|
||||
/* Actual origin */
|
||||
var origin = "http://{{host}}:{{ports[http][0]}}";
|
||||
|
||||
corsOrigin("Cross domain different subdomain [origin OK]", "http", "www1", undefined, "GET", origin, true);
|
||||
corsOrigin("Cross domain different subdomain [origin KO]", "http", "www1", undefined, "GET", undefined, false);
|
||||
corsOrigin("Same domain different port [origin OK]", "http", undefined, port2, "GET", origin, true);
|
||||
corsOrigin("Same domain different port [origin KO]", "http", undefined, port2, "GET", undefined, false);
|
||||
corsOrigin("Cross domain different port [origin OK]", "http", "www1", port2, "GET", origin, true);
|
||||
corsOrigin("Cross domain different port [origin KO]", "http", "www1", port2, "GET", undefined, false);
|
||||
corsOrigin("Cross domain different protocol [origin OK]", "https", "www1", httpsPort, "GET", origin, true);
|
||||
corsOrigin("Cross domain different protocol [origin KO]", "https", "www1", httpsPort, "GET", undefined, false);
|
||||
corsOrigin("Same domain different protocol different port [origin OK]", "https", undefined, httpsPort, "GET", origin, true);
|
||||
corsOrigin("Same domain different protocol different port [origin KO]", "https", undefined, httpsPort, "GET", undefined, false);
|
||||
corsOrigin("Cross domain [POST] [origin OK]", "http", "www1", undefined, "POST", origin, true);
|
||||
corsOrigin("Cross domain [POST] [origin KO]", "http", "www1", undefined, "POST", undefined, false);
|
||||
corsOrigin("Cross domain [HEAD] [origin OK]", "http", "www1", undefined, "HEAD", origin, true);
|
||||
corsOrigin("Cross domain [HEAD] [origin KO]", "http", "www1", undefined, "HEAD", undefined, false);
|
||||
corsOrigin("CORS preflight [PUT] [origin OK]", "http", "www1", undefined, "PUT", origin, true);
|
||||
corsOrigin("CORS preflight [PUT] [origin KO]", "http", "www1", undefined, "PUT", undefined, false);
|
||||
corsOrigin("Allowed origin: \"\" [origin KO]", "http", "www1", undefined, "GET", "" , false);
|
||||
|
||||
done();
|
|
@ -0,0 +1,18 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: redirection handling for cors with preflight</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-preflight-redirect.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,18 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: redirection handling for cors with preflight</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-preflight-redirect.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,40 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
importScripts("/common/utils.js");
|
||||
}
|
||||
|
||||
function corsPreflightRedirect(desc, redirectUrl, redirectLocation, redirectStatus, redirectPreflight) {
|
||||
var uuid_token = token();
|
||||
var url = redirectUrl;
|
||||
var urlParameters = "?token=" + uuid_token + "&max_age=0";
|
||||
urlParameters += "&redirect_status=" + redirectStatus;
|
||||
urlParameters += "&location=" + encodeURIComponent(redirectLocation);
|
||||
|
||||
if (redirectPreflight)
|
||||
urlParameters += "&redirect_preflight";
|
||||
var requestInit = {"mode": "cors", "redirect": "follow"};
|
||||
|
||||
/* Force preflight */
|
||||
requestInit["headers"] = {"x-force-preflight": ""};
|
||||
urlParameters += "&allow_headers=x-force-preflight";
|
||||
|
||||
promise_test(function(test) {
|
||||
fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Clean stash response's status is 200");
|
||||
return promise_rejects(test, new TypeError(), fetch(url + urlParameters, requestInit));
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
|
||||
var redirectUrl = "http://www1.{{host}}:{{ports[http][0]}}" + dirname(location.pathname) + RESOURCES_DIR + "redirect.py";
|
||||
var locationUrl = "http://www1.{{host}}:{{ports[http][0]}}" + dirname(location.pathname) + RESOURCES_DIR + "preflight.py";
|
||||
|
||||
for (var code of [301, 302, 303, 307, 308]) {
|
||||
/* preflight should not follow the redirection */
|
||||
corsPreflightRedirect("Redirection " + code + " on preflight failed", redirectUrl, locationUrl, code, true);
|
||||
/* preflight is done before redirection: preflight force redirect to error */
|
||||
corsPreflightRedirect("Redirection " + code + " after preflight failed", redirectUrl, locationUrl, code, false);
|
||||
}
|
||||
|
||||
done();
|
|
@ -0,0 +1,18 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: Referer header management in CORS request with preflight</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#cors-preflight-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-preflight-referrer.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,18 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: Referer header management in CORS request with preflight</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#cors-preflight-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-preflight-referrer.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,39 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("/common/utils.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function corsPreflightReferrer(desc, corsUrl, referrerPolicy, expectedReferrer) {
|
||||
var uuid_token = token();
|
||||
var url = corsUrl;
|
||||
var urlParameters = "?token=" + uuid_token + "&max_age=0";
|
||||
var requestInit = {"mode": "cors", "referrerPolicy": referrerPolicy};
|
||||
|
||||
/* Force preflight */
|
||||
requestInit["headers"] = {"x-force-preflight": ""};
|
||||
urlParameters += "&allow_headers=x-force-preflight";
|
||||
|
||||
promise_test(function(test) {
|
||||
fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Clean stash response's status is 200");
|
||||
return fetch(url + urlParameters, requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Response's status is 200");
|
||||
assert_equals(resp.headers.get("x-did-preflight"), "1", "Preflight request has been made");
|
||||
assert_equals(resp.headers.get("x-preflight-referrer"), expectedReferrer, "Preflight's referrer is correct");
|
||||
assert_equals(resp.headers.get("x-referrer"), expectedReferrer, "Request's refferer is correct");
|
||||
});
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
|
||||
var corsUrl = "http://www1.{{host}}:{{ports[http][0]}}" + dirname(location.pathname) + RESOURCES_DIR + "preflight.py";
|
||||
var origin = "http://{{host}}:{{ports[http][0]}}";
|
||||
|
||||
corsPreflightReferrer("Referrer policy: no-referrer", corsUrl, "no-referrer", "");
|
||||
corsPreflightReferrer("Referrer policy: \"\"", corsUrl, "", "");
|
||||
corsPreflightReferrer("Referrer policy: origin-only", corsUrl, "origin-only", origin);
|
||||
corsPreflightReferrer("Referrer policy: origin-when-cross-origin", corsUrl, "origin-when-cross-origin", origin);
|
||||
corsPreflightReferrer("Referrer policy: unsafe-url", corsUrl, "unsafe-url", location.toString());
|
||||
|
||||
done();
|
|
@ -0,0 +1,18 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: preflight status code handling</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#cors-preflight-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-preflight-status.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: preflight status code handling</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#cors-preflight-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-preflight-status.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,41 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
importScripts("/common/utils.js");
|
||||
}
|
||||
|
||||
/* Check preflight is ok if status is ok status (200 to 299)*/
|
||||
function corsPreflightStatus(desc, corsUrl, preflightStatus) {
|
||||
var uuid_token = token();
|
||||
var url = corsUrl;
|
||||
var requestInit = {"mode": "cors"};
|
||||
/* Force preflight */
|
||||
requestInit["headers"] = {"x-force-preflight": ""};
|
||||
|
||||
var urlParameters = "?token=" + uuid_token + "&max_age=0";
|
||||
urlParameters += "&allow_headers=x-force-preflight";
|
||||
urlParameters += "&preflight_status=" + preflightStatus;
|
||||
|
||||
promise_test(function(test) {
|
||||
fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Clean stash response's status is 200");
|
||||
if (200 <= preflightStatus && 299 >= preflightStatus) {
|
||||
return fetch(url + urlParameters, requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Response's status is 200");
|
||||
assert_equals(resp.headers.get("x-did-preflight"), "1", "Preflight request has been made");
|
||||
});
|
||||
} else {
|
||||
return promise_rejects(test, new TypeError(), fetch(url + urlParameters, requestInit));
|
||||
}
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
|
||||
var corsUrl = "http://www1.{{host}}:{{ports[http][0]}}" + dirname(location.pathname) + RESOURCES_DIR + "preflight.py";
|
||||
for (status of [200, 201, 202, 203, 204, 205, 206,
|
||||
300, 301, 302, 303, 304, 305, 306, 307, 308,
|
||||
400, 401, 402, 403, 404, 405,
|
||||
501, 502, 503, 504, 505])
|
||||
corsPreflightStatus("Preflight answered with status " + status, corsUrl, status);
|
||||
|
||||
done();
|
|
@ -0,0 +1,20 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: Check cors fetches requiring prefligh</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#simple-method">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#simple-header">
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-preflight.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,20 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: Check cors fetches requiring preflight</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-cors-protocol">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#simple-method">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#simple-header">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="cors-preflight.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,82 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
importScripts("/common/utils.js");
|
||||
}
|
||||
|
||||
/*
|
||||
Check preflight is done
|
||||
Control if server allows method and headers and check accordingly
|
||||
Check control access headers added by UA (for method and headers)
|
||||
*/
|
||||
function corsPreflight(desc, corsUrl, method, allowed, headers) {
|
||||
var uuid_token = token();
|
||||
fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(response) {
|
||||
|
||||
var url = corsUrl;
|
||||
var urlParameters = "?token=" + uuid_token + "&max_age=0";
|
||||
var requestInit = {"mode": "cors", "method": method};
|
||||
if (headers)
|
||||
requestInit["headers"] = headers;
|
||||
|
||||
if (allowed) {
|
||||
urlParameters += "&allow_methods=" + method;
|
||||
if (headers) {
|
||||
//Let's check prefligh request.
|
||||
//Server will send back headers from Access-Control-Request-Headers in x-control-request-headers
|
||||
urlParameters += "&control_request_headers"
|
||||
//Make the server allow the headers
|
||||
urlParameters += "&allow_headers="
|
||||
urlParameters += headers.join("%2C%20");
|
||||
}
|
||||
promise_test(function(test) {
|
||||
test.add_cleanup(function() {
|
||||
fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token);
|
||||
});
|
||||
return fetch(url + urlParameters, requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Response's status is 200");
|
||||
assert_equals(resp.headers.get("x-did-preflight"), "1", "Preflight request has been made");
|
||||
if (headers) {
|
||||
var actualHeaders = resp.headers.get("x-control-request-headers").split(",");
|
||||
for (var i in actualHeaders)
|
||||
actualHeaders[i] = actualHeaders[i].trim();
|
||||
for (var header in headers)
|
||||
assert_in_array(header, actualHeaders, "Preflight asked permission for header: " + header);
|
||||
}
|
||||
});
|
||||
}, desc);
|
||||
} else {
|
||||
promise_test(function(test) {
|
||||
test.add_cleanup(function() {
|
||||
fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token);
|
||||
});
|
||||
return promise_rejects(test, new TypeError(), fetch(url + urlParameters, requestInit));
|
||||
}, desc);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var corsUrl = "http://www1.{{host}}:{{ports[http][0]}}" + dirname(location.pathname) + RESOURCES_DIR + "preflight.py";
|
||||
|
||||
corsPreflight("CORS [DELETE], server allows", corsUrl, "DELETE", true);
|
||||
corsPreflight("CORS [DELETE], server refuses", corsUrl, "DELETE", false);
|
||||
corsPreflight("CORS [PUT], server allows", corsUrl, "PUT", true);
|
||||
corsPreflight("CORS [PUT], server refuses", corsUrl, "PUT", false);
|
||||
corsPreflight("CORS [PATCH], server allows", corsUrl, "PATCH", true);
|
||||
corsPreflight("CORS [PATCH], server refuses", corsUrl, "PATCH", false);
|
||||
corsPreflight("CORS [NEW], server allows", corsUrl, "NEW", true);
|
||||
corsPreflight("CORS [NEW], server refuses", corsUrl, "NEW", false);
|
||||
|
||||
corsPreflight("CORS [GET] [x-test-header: allowed], server allows", corsUrl, "GET", true, {"x-test-header1": "allowed"});
|
||||
corsPreflight("CORS [GET] [x-test-header: refused], server refuses", corsUrl, "GET", false, {"x-test-header1": "refused"});
|
||||
|
||||
var headers = {"x-test-header1": "allowedOrRefused",
|
||||
"x-test-header2": "allowedOrRefused",
|
||||
"x-test-header3": "allowedOrRefused",
|
||||
};
|
||||
corsPreflight("CORS [GET] [several headers], server allows", corsUrl, "GET", true, headers);
|
||||
corsPreflight("CORS [GET] [several headers], server refuses", corsUrl, "GET", false, headers);
|
||||
corsPreflight("CORS [PUT] [several headers], server allows", corsUrl, "PUT", true, headers);
|
||||
corsPreflight("CORS [PUT] [several headers], server refuses", corsUrl, "PUT", false, headers);
|
||||
|
||||
done();
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: redirection url has credentials</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-redirect-credentials.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,15 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: redirection url has credentials</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-redirect-credentials.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,47 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function corsRedirectCredentials(desc, redirectUrl, redirectLocation, redirectStatus, locationCredentials) {
|
||||
|
||||
var url = redirectUrl
|
||||
var urlParameters = "?redirect_status=" + redirectStatus;
|
||||
urlParameters += "&location=" + encodeURIComponent(redirectLocation.replace("://", "://" + locationCredentials + "@"));
|
||||
|
||||
var requestInit = {"mode": "cors", "redirect": "follow", "credentials":"include"};
|
||||
|
||||
promise_test(function(test) {
|
||||
return promise_rejects(test, new TypeError(), fetch(url + urlParameters, requestInit));
|
||||
}, desc);
|
||||
}
|
||||
|
||||
var redirPath = dirname(location.pathname) + RESOURCES_DIR + "redirect.py";
|
||||
var preflightPath = dirname(location.pathname) + RESOURCES_DIR + "preflight.py";
|
||||
|
||||
var localRedirect = "http://{{host}}:{{ports[http][0]}}" + redirPath;
|
||||
var remoteRedirect = "http://www1.{{host}}:{{ports[http][0]}}" + redirPath;
|
||||
|
||||
var localLocation = "http://{{host}}:{{ports[http][0]}}" + preflightPath;
|
||||
var remoteLocation = "http://www1.{{host}}:{{ports[http][0]}}" + preflightPath;
|
||||
var remoteLocation2 = "http://www.{{host}}:{{ports[http][0]}}" + preflightPath;
|
||||
|
||||
for (var code of [301, 302, 303, 307, 308]) {
|
||||
corsRedirectCredentials("Redirect " + code + " from same origin to remote with user and password", localRedirect, remoteLocation, code, "user:password");
|
||||
corsRedirectCredentials("Redirect " + code + " from same origin to remote with user", localRedirect, remoteLocation, code, "user:");
|
||||
corsRedirectCredentials("Redirect " + code + " from same origin to remote with password", localRedirect, remoteLocation, code, ":password");
|
||||
|
||||
corsRedirectCredentials("Redirect " + code + " from remote to same origin with user and password", remoteRedirect, localLocation, code, "user:password");
|
||||
corsRedirectCredentials("Redirect " + code + " from remote to same origin with user", remoteRedirect, localLocation, code, "user:");
|
||||
corsRedirectCredentials("Redirect " + code + " from remote to same origin with password", remoteRedirect, localLocation, code, ":password");
|
||||
|
||||
corsRedirectCredentials("Redirect " + code + " from remote to another remote with user and password", remoteRedirect, remoteLocation2, code, "user:password");
|
||||
corsRedirectCredentials("Redirect " + code + " from remote to another remote with user", remoteRedirect, remoteLocation2, code, "user:");
|
||||
corsRedirectCredentials("Redirect " + code + " from remote to another remote with password", remoteRedirect, remoteLocation2, code, ":password");
|
||||
|
||||
corsRedirectCredentials("Redirect " + code + " from remote to same remote with user and password", remoteRedirect, remoteLocation, code, "user:password");
|
||||
corsRedirectCredentials("Redirect " + code + " from remote to same remote with user", remoteRedirect, remoteLocation, code, "user:");
|
||||
corsRedirectCredentials("Redirect " + code + " from remote to same remote with password", remoteRedirect, remoteLocation, code, ":password");
|
||||
}
|
||||
|
||||
done();
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: CORS Redirection with several origins</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cors-redirect.js?pipe=sub"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: CORS Redirection with several origins</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="/common/utils.js"></script>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cors-redirect.js?pipe=sub"></script>
|
||||
</body>
|
||||
</html>
|
44
tests/wpt/web-platform-tests/fetch/api/cors/cors-redirect.js
Normal file
44
tests/wpt/web-platform-tests/fetch/api/cors/cors-redirect.js
Normal file
|
@ -0,0 +1,44 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("/common/utils.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function corsRedirect(desc, redirectUrl, redirectLocation, redirectStatus, expectedOrigin) {
|
||||
var uuid_token = token();
|
||||
var url = redirectUrl;
|
||||
var urlParameters = "?token=" + uuid_token + "&max_age=0";
|
||||
urlParameters += "&redirect_status=" + redirectStatus;
|
||||
urlParameters += "&location=" + encodeURIComponent(redirectLocation);
|
||||
|
||||
var requestInit = {"mode": "cors", "redirect": "follow"};
|
||||
|
||||
promise_test(function(test) {
|
||||
fetch(RESOURCES_DIR + "clean-stash.py?token=" + uuid_token).then(function(resp) {
|
||||
return fetch(url + urlParameters, requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "Response's status is 200");
|
||||
assert_equals(resp.headers.get("x-did-preflight"), "0", "No preflight request has been made");
|
||||
assert_equals(resp.headers.get("x-origin"), expectedOrigin, "Origin is correctly set after redirect");
|
||||
});
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
|
||||
var redirPath = dirname(location.pathname) + RESOURCES_DIR + "redirect.py";
|
||||
var preflightPath = dirname(location.pathname) + RESOURCES_DIR + "preflight.py";
|
||||
|
||||
var localRedirect = "http://{{host}}:{{ports[http][0]}}" + redirPath;
|
||||
var remoteRedirect = "http://www1.{{host}}:{{ports[http][0]}}" + redirPath;
|
||||
|
||||
var localLocation = "http://{{host}}:{{ports[http][0]}}" + preflightPath;
|
||||
var remoteLocation = "http://www1.{{host}}:{{ports[http][0]}}" + preflightPath;
|
||||
var remoteLocation2 = "http://www.{{host}}:{{ports[http][0]}}" + preflightPath;
|
||||
|
||||
for (var code of [301, 302, 303, 307, 308]) {
|
||||
corsRedirect("Redirect " + code + ": cors to same cors", remoteRedirect, remoteLocation, code, location.origin);
|
||||
corsRedirect("Redirect " + code + ": cors to another cors", remoteRedirect, remoteLocation2, code, "null");
|
||||
corsRedirect("Redirect " + code + ": same origin to cors", localRedirect, remoteLocation, code, location.origin);
|
||||
corsRedirect("Redirect " + code + ": cors to same origin", remoteRedirect, localLocation, code, "null");
|
||||
}
|
||||
|
||||
done();
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: Authorisation header management for basic authentication</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("authentication-basic.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,15 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: Authorisation header management for basic authentication</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="authentication-basic.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,21 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function basicAuth(desc, user, pass, mode, status) {
|
||||
promise_test(function(test) {
|
||||
var headers = { "Authorization": "Basic " + btoa(user + ":" + pass)};
|
||||
var requestInit = {"credentials": mode, "headers": headers};
|
||||
return fetch(RESOURCES_DIR + "authentication.py?realm=test", requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, status, "HTTP status is " + status);
|
||||
assert_equals(resp.type , "basic", "Response's type is basic");
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
|
||||
basicAuth("User-added Authorization header with include mode", "user", "password", "include", 200);
|
||||
basicAuth("User-added Authorization header with same-origin mode", "user", "password", "same-origin", 200);
|
||||
basicAuth("User-added Authorization header with omit mode", "user", "password", "omit", 200);
|
||||
|
||||
done();
|
|
@ -0,0 +1,18 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: cookies management</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("cookies.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: cookies management</title>
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-fetch">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="cookies.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,51 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
function cookies(desc, credentials1, credentials2 ,cookies) {
|
||||
var url = RESOURCES_DIR + "top.txt"
|
||||
var urlParameters = "";
|
||||
var urlCleanParameters = "";
|
||||
if (cookies) {
|
||||
urlParameters +="?pipe=header(Set-Cookie,";
|
||||
urlParameters += cookies.join(",True)|header(Set-Cookie,") + ",True)";
|
||||
urlCleanParameters +="?pipe=header(Set-Cookie,";
|
||||
urlCleanParameters += cookies.join("%3B%20max-age=0,True)|header(Set-Cookie,") + "%3B%20max-age=0,True)";
|
||||
}
|
||||
|
||||
var requestInit = {"credentials": credentials1}
|
||||
promise_test(function(test){
|
||||
var requestInit = {"credentials": credentials1}
|
||||
return fetch(url + urlParameters, requestInit).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
assert_equals(resp.type , "basic", "Response's type is basic");
|
||||
//check cookies sent
|
||||
return fetch(RESOURCES_DIR + "inspect-headers.py?headers=cookie" , {"credentials": credentials2});
|
||||
}).then(function(resp) {
|
||||
assert_equals(resp.status, 200, "HTTP status is 200");
|
||||
assert_equals(resp.type , "basic", "Response's type is basic");
|
||||
assert_false(resp.headers.has("Cookie") , "Cookie header is not exposed in response");
|
||||
if (credentials1 != "omit" && credentials2 != "omit") {
|
||||
assert_equals(resp.headers.get("x-request-cookie") , cookies.join("; "), "Request include cookie(s)");
|
||||
}
|
||||
else {
|
||||
assert_false(resp.headers.has("x-request-cookie") , "Request does not have cookie(s)");
|
||||
}
|
||||
//clean cookies
|
||||
return fetch(url + urlCleanParameters, {"credentials": "include"});
|
||||
}).catch(function() {
|
||||
fetch(url + urlCleanParameters, {"credentials": "include"});
|
||||
});
|
||||
}, desc);
|
||||
}
|
||||
|
||||
cookies("Include mode: 1 cookie", "include", "include", ["a=1"]);
|
||||
cookies("Include mode: 2 cookies", "include", "include", ["b=2", "c=3"]);
|
||||
cookies("Omit mode: discard cookies", "omit", "omit", ["d=4"]);
|
||||
cookies("Omit mode: no cookie is stored", "omit", "include", ["e=5"]);
|
||||
cookies("Omit mode: no cookie is sent", "include", "omit", ["f=6"]);
|
||||
cookies("Same-origin mode: 1 cookie", "same-origin", "same-origin", ["a=1"]);
|
||||
cookies("Same-origin mode: 2 cookies", "same-origin", "same-origin", ["b=2", "c=3"]);
|
||||
|
||||
done();
|
|
@ -0,0 +1,111 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Headers structure</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#headers">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
test(function() {
|
||||
new Headers();
|
||||
}, "Create headers from no parameter");
|
||||
|
||||
test(function() {
|
||||
new Headers(undefined);
|
||||
}, "Create headers from undefined parameter");
|
||||
|
||||
test(function() {
|
||||
new Headers({});
|
||||
}, "Create headers from empty object");
|
||||
|
||||
var parameters = [null, 1];
|
||||
parameters.forEach(function(parameter) {
|
||||
test(function() {
|
||||
assert_throws(new TypeError(), () => new Headers(parameter));
|
||||
}, "Create headers with " + parameter + " should throw");
|
||||
});
|
||||
|
||||
var headerDict = {"name1": "value1",
|
||||
"name2": "value2",
|
||||
"name3": "value3",
|
||||
"name5": undefined,
|
||||
"name4": null,
|
||||
"Content-Type": "value4"
|
||||
};
|
||||
|
||||
var headerSeq = [];
|
||||
for (var name in headerDict)
|
||||
headerSeq.push([name, headerDict[name]]);
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerSeq);
|
||||
for (name in headerDict)
|
||||
assert_equals(headers.get(name), String(headerDict[name]),
|
||||
"name: " + name + " has value: " + headerDict[name]);
|
||||
}, "Create headers with sequence");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerDict);
|
||||
for (name in headerDict)
|
||||
assert_equals(headers.get(name), String(headerDict[name]),
|
||||
"name: " + name + " has value: " + headerDict[name]);
|
||||
}, "Create headers with OpenEndedDictionary");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerDict);
|
||||
var headers2 = new Headers(headers);
|
||||
for (name in headerDict)
|
||||
assert_equals(headers2.get(name), String(headerDict[name]),
|
||||
"name: " + name + " has value: " + headerDict[name]);
|
||||
}, "Create headers whith existing headers");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
for (name in headerDict) {
|
||||
headers.append(name, headerDict[name]);
|
||||
assert_equals(headers.get(name), String(headerDict[name]),
|
||||
"name: " + name + " has value: " + headerDict[name]);
|
||||
}
|
||||
}, "Check append method");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
for (name in headerDict) {
|
||||
headers.set(name, headerDict[name]);
|
||||
assert_equals(headers.get(name), String(headerDict[name]),
|
||||
"name: " + name + " has value: " + headerDict[name]);
|
||||
}
|
||||
}, "Check set method");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerDict);
|
||||
for (name in headerDict)
|
||||
assert_true(headers.has(name),"headers has name " + name);
|
||||
|
||||
assert_false(headers.has("nameNotInHeaders"),"headers do not have header: nameNotInHeaders");
|
||||
}, "Check has method");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerDict);
|
||||
for (name in headerDict) {
|
||||
assert_true(headers.has(name),"headers have a header: " + name);
|
||||
headers.delete(name)
|
||||
assert_true(!headers.has(name),"headers do not have anymore a header: " + name);
|
||||
}
|
||||
}, "Check delete method");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerDict);
|
||||
for (name in headerDict)
|
||||
assert_equals(headers.get(name), String(headerDict[name]),
|
||||
"name: " + name + "has value: " + headerDict[name]);
|
||||
|
||||
assert_equals(headers.get("nameNotInHeaders"), null, "header: nameNotInHeaders has no value");
|
||||
}, "Check get method");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,64 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Headers case management</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#concept-header-list-append">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
var headerDictCase = {"UPPERCASE": "value1",
|
||||
"lowercase": "value2",
|
||||
"mixedCase": "value3",
|
||||
"Content-TYPE": "value4"
|
||||
};
|
||||
|
||||
function checkHeadersCase(originalName, headersToCheck, expectedDict) {
|
||||
var lowCaseName = originalName.toLowerCase();
|
||||
var upCaseName = originalName.toUpperCase();
|
||||
var expectedValue = expectedDict[originalName];
|
||||
assert_equals(headersToCheck.get(originalName), expectedValue,
|
||||
"name: " + originalName + " has value: " + expectedValue);
|
||||
assert_equals(headersToCheck.get(lowCaseName), expectedValue,
|
||||
"name: " + lowCaseName + " has value: " + expectedValue);
|
||||
assert_equals(headersToCheck.get(upCaseName), expectedValue,
|
||||
"name: " + upCaseName + " has value: " + expectedValue);
|
||||
}
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerDictCase);
|
||||
for (name in headerDictCase)
|
||||
checkHeadersCase(name, headers, headerDictCase)
|
||||
}, "Create headers, names use characters with different case");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
for (name in headerDictCase) {
|
||||
headers.append(name, headerDictCase[name]);
|
||||
checkHeadersCase(name, headers, headerDictCase);
|
||||
}
|
||||
}, "Check append method, names use characters with different case");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
for (name in headerDictCase) {
|
||||
headers.set(name, headerDictCase[name]);
|
||||
checkHeadersCase(name, headers, headerDictCase);
|
||||
}
|
||||
}, "Check set method, names use characters with different case");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
for (name in headerDictCase)
|
||||
headers.set(name, headerDictCase[name]);
|
||||
for (name in headerDictCase)
|
||||
headers.delete(name.toLowerCase());
|
||||
for (name in headerDictCase)
|
||||
assert_false(headers.has(name), "header " + name + " should have been deleted");
|
||||
}, "Check delete method, names use characters with different case");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,60 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Headers nameshake</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#headers">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
var headerSeqCombine = [["single", "singleValue"],
|
||||
["double", "doubleValue1"],
|
||||
["double", "doubleValue2"],
|
||||
["triple", "tripleValue1"],
|
||||
["triple", "tripleValue2"],
|
||||
["triple", "tripleValue3"]
|
||||
];
|
||||
var expectedDict = {"single": "singleValue",
|
||||
"double": "doubleValue1, doubleValue2",
|
||||
"triple": "tripleValue1, tripleValue2, tripleValue3"
|
||||
};
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerSeqCombine);
|
||||
for (name in expectedDict)
|
||||
assert_equals(headers.get(name), expectedDict[name],
|
||||
"name: " + name + " has value: " + expectedDict[name]);
|
||||
}, "Create headers using same name for different values");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerSeqCombine);
|
||||
for (name in expectedDict) {
|
||||
assert_true(headers.has(name), "name: " + name + " has value(s)");
|
||||
headers.delete(name);
|
||||
assert_false(headers.has(name), "name: " + name + " has no value(s) anymore");
|
||||
}
|
||||
}, "Check delete and has methods when using same name for different values");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerSeqCombine);
|
||||
for (name in expectedDict) {
|
||||
headers.set(name,"newSingleValue");
|
||||
assert_equals(headers.get(name), "newSingleValue", "name: " + name + " has value: newSingleValue");
|
||||
}
|
||||
}, "Check set methods when called with already used name");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerSeqCombine);
|
||||
for (name in expectedDict) {
|
||||
var value = headers.get(name);
|
||||
headers.append(name,"newSingleValue");
|
||||
assert_equals(headers.get(name), (value + ", " + "newSingleValue"),
|
||||
"name: " + name + " has value: " + headers.get(name));
|
||||
}
|
||||
}, "Check append methods when called with already used name");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,66 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Headers errors</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#headers">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
|
||||
test(function() {
|
||||
assert_throws(new TypeError() , function() { new Headers([["name"]]) });
|
||||
}, "Create headers giving an array having one string as init argument");
|
||||
|
||||
test(function() {
|
||||
assert_throws(new TypeError() , function() { new Headers([["invalid", "invalidValue1", "invalidValue2"]]) });
|
||||
}, "Create headers giving an array having three strings as init argument");
|
||||
|
||||
test(function() {
|
||||
assert_throws(new TypeError() , function() { new Headers([["invalidĀ", "Value1"]]) });
|
||||
}, "Create headers giving bad header name as init argument");
|
||||
|
||||
test(function() {
|
||||
assert_throws(new TypeError() , function() { new Headers([["name", "invalidValueĀ"]]) });
|
||||
}, "Create headers giving bad header value as init argument");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
assert_throws(new TypeError() , function() { headers.get("invalidĀ") });
|
||||
}, "Check headers get with an invalid name");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
assert_throws(new TypeError() , function() { headers.delete("invalidĀ") });
|
||||
}, "Check headers delete with an invalid name");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
assert_throws(new TypeError() , function() { headers.has("invalidĀ") });
|
||||
}, "Check headers has with an invalid name");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
assert_throws(new TypeError() , function() { headers.set("invalidĀ", "Value1") });
|
||||
}, "Check headers set with an invalid name");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
assert_throws(new TypeError() , function() { headers.set("name", "invalidValueĀ") });
|
||||
}, "Check headers set with an invalid value");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
assert_throws(new TypeError() , function() { headers.append("invalidĀ", "Value1") });
|
||||
}, "Check headers append with an invalid name");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
assert_throws(new TypeError() , function() { headers.append("name", "invalidValueĀ") });
|
||||
}, "Check headers append with an invalid value");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,36 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Headers idl interface</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#response">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/WebIDLParser.js"></script>
|
||||
<script src="/resources/idlharness.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script id="headers-idl" type="text/plain">
|
||||
typedef (Headers or sequence<sequence<ByteString>> or OpenEndedDictionary<ByteString>) HeadersInit;
|
||||
|
||||
[Constructor(optional HeadersInit init),
|
||||
Exposed=(Window,Worker)]
|
||||
interface Headers {
|
||||
void append(ByteString name, ByteString value);
|
||||
void delete(ByteString name);
|
||||
ByteString? get(ByteString name);
|
||||
boolean has(ByteString name);
|
||||
void set(ByteString name, ByteString value);
|
||||
iterable<ByteString, ByteString>;
|
||||
};
|
||||
</script>
|
||||
<script>
|
||||
var idlsArray = new IdlArray();
|
||||
var idl = document.getElementById("headers-idl").innerHTML
|
||||
idlsArray.add_idls(idl);
|
||||
idlsArray.add_objects({ Headers: ['new Headers()'] });
|
||||
idlsArray.test();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,47 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Headers normalize values</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#concept-header-value-normalize">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
var headerDictWS = {"name1": " space ",
|
||||
"name2": "\ttab\t",
|
||||
"name3": " spaceAndTab\t",
|
||||
"name4": "\r\n newLine", //obs-fold cases
|
||||
"name5": "newLine\r\n ",
|
||||
"name6": "\r\n\tnewLine",
|
||||
};
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers(headerDictWS);
|
||||
for (name in headerDictWS)
|
||||
assert_equals(headers.get(name), headerDictWS[name].trim(),
|
||||
"name: " + name + " has normalized value: " + headerDictWS[name].trim());
|
||||
}, "Create headers with not normalized values");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
for (name in headerDictWS) {
|
||||
headers.append(name, headerDictWS[name]);
|
||||
assert_equals(headers.get(name), headerDictWS[name].trim(),
|
||||
"name: " + name + " has value: " + headerDictWS[name].trim());
|
||||
}
|
||||
}, "Check append method whith not normalized values");
|
||||
|
||||
test(function() {
|
||||
var headers = new Headers();
|
||||
for (name in headerDictWS) {
|
||||
headers.set(name, headerDictWS[name]);
|
||||
assert_equals(headers.get(name), headerDictWS[name].trim(),
|
||||
"name: " + name + " has value: " + headerDictWS[name].trim());
|
||||
}
|
||||
}, "Check set method whith not normalized values");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,31 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Headers basic</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#headers">
|
||||
<meta name="help" href="https://heycam.github.io/webidl/#idl-iterable">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
var headers = new Headers();
|
||||
var methods = ["append",
|
||||
"delete",
|
||||
"get",
|
||||
"has",
|
||||
"set",
|
||||
//Headers is iterable
|
||||
"entries",
|
||||
"keys",
|
||||
"values"
|
||||
];
|
||||
for (var idx in methods)
|
||||
test(function() {
|
||||
assert_true(methods[idx] in headers, "headers has " + methods[idx] + " method");
|
||||
}, "Headers has " + methods[idx] + " method");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,16 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: blocked by CSP</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("csp-blocked.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,15 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: blocked by CSP</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="csp-blocked.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1 @@
|
|||
Content-Security-Policy: connect-src 'none';
|
|
@ -0,0 +1,13 @@
|
|||
if (this.document === undefined) {
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("../resources/utils.js");
|
||||
}
|
||||
|
||||
//Content-Security-Policy: connect-src 'none'; cf .headers file
|
||||
cspViolationUrl = RESOURCES_DIR + "top.txt";
|
||||
|
||||
promise_test(function(test) {
|
||||
return promise_rejects(test, new TypeError(), fetch(cspViolationUrl));
|
||||
}, "Fetch is blocked by CSP, got a TypeError");
|
||||
|
||||
done();
|
|
@ -0,0 +1 @@
|
|||
Content-Security-Policy: connect-src 'none';
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch in worker: referrer with no-referrer policy</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("referrer-no-referrer.js"));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,15 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fetch: referrer with no-referrer policy</title>
|
||||
<meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="../resources/utils.js"></script>
|
||||
<script src="referrer-no-referrer.js"></script>
|
||||
</body>
|
||||
</html>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue