WebKit Bugzilla
Attachment 348114 Details for
Bug 188816
: Update WPT XHR tests to 87329a1
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for landing
bug-188816-20180826200652.patch (text/plain), 2.69 MB, created by
youenn fablet
on 2018-08-26 20:06:57 PDT
(
hide
)
Description:
Patch for landing
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-08-26 20:06:57 PDT
Size:
2.69 MB
patch
obsolete
>Subversion Revision: 235342 >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index e79a224c1d8c5926357c3f3b4c611841b18175fc..977dc944054bec8c4d76b40fe54a19d4f172b606 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,55 @@ >+2018-08-26 Youenn Fablet <youenn@apple.com> >+ >+ Update WPT XHR tests to 87329a1 >+ https://bugs.webkit.org/show_bug.cgi?id=188816 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Update expectations according renamed XMLHttpRequest to xhr folder. >+ >+ * TestExpectations: >+ * platform/gtk/TestExpectations: >+ * platform/gtk/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt: Renamed from LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt. >+ * platform/gtk/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt: Renamed from LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt. >+ * platform/gtk/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt: Renamed from LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt. >+ * platform/gtk/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt: Renamed from LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt. >+ * platform/gtk/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt: Renamed from LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt. >+ * platform/ios-wk1/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt: Renamed from LayoutTests/platform/ios-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt. >+ * platform/ios/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt: Renamed from LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt. >+ * platform/ios/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt: Renamed from LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt. >+ * platform/ios/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt: Renamed from LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt. >+ * platform/ios/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt: Renamed from LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt. >+ * platform/ios/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt: Renamed from LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt. >+ * platform/mac-sierra/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt: Renamed from LayoutTests/platform/mac-sierra/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt. >+ * platform/mac-wk1/TestExpectations: >+ * platform/mac-wk1/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt: Renamed from LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt. >+ * platform/mac-wk1/imported/w3c/web-platform-tests/xhr/late-upload-events-expected.txt: Renamed from LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/late-upload-events-expected.txt. >+ * platform/mac-wk1/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt: Renamed from LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt. >+ * platform/mac-wk1/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt: Renamed from LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt. >+ * platform/mac-wk1/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub-expected.txt: Renamed from LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub-expected.txt. >+ * platform/mac-wk2/TestExpectations: >+ * platform/mac/TestExpectations: >+ * platform/mac/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt: Renamed from LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt. >+ * platform/mac/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt: Renamed from LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt. >+ * platform/mac/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt: Renamed from LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt. >+ * platform/mac/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt: Renamed from LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt. >+ * platform/win/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt: Renamed from LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt. >+ * platform/win/imported/w3c/web-platform-tests/xhr/late-upload-events-expected.txt: Renamed from LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/late-upload-events-expected.txt. >+ * platform/win/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt: Renamed from LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt. >+ * platform/win/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt: Renamed from LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt. >+ * platform/wpe/TestExpectations: >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers-expected.txt. >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple-expected.txt. >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt. >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt. >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt. >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt. >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-expected.txt. >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync-expected.txt. >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt. >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-expected.txt. >+ * platform/wpe/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync-expected.txt: Renamed from LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync-expected.txt. >+ > 2018-08-26 Andy Estes <aestes@apple.com> > > [Apple Pay] PaymentRequest.show() should reject when an unsupported ApplePayRequest version is specified >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index 9764195f07f66bb047a7d551b745598a02145b68..8bbd0e86a55d0cc0c5f82e5ae91fc9e1064d9ed5 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,18 @@ >+2018-08-26 Youenn Fablet <youenn@apple.com> >+ >+ Update WPT XHR tests to 87329a1 >+ https://bugs.webkit.org/show_bug.cgi?id=188816 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Moved tests from XMLHttpRequest to xhr. >+ Updated xhr tests according upstream WPT. >+ >+ * resources/import-expectations.json: >+ * resources/resource-files.json: >+ * web-platform-tests/XMLHttpRequest: Removed. >+ * web-platform-tests/xhr: Added. >+ > 2018-08-24 Ryosuke Niwa <rniwa@webkit.org> > > Click event from click() is not composed >diff --git a/LayoutTests/TestExpectations b/LayoutTests/TestExpectations >index db7c940e8097e76bd59d391d3b3735ab1547f631..48c4ab1ba8fff72252e21fc77f9e36efebb497cf 100644 >--- a/LayoutTests/TestExpectations >+++ b/LayoutTests/TestExpectations >@@ -260,14 +260,22 @@ imported/w3c/web-platform-tests/workers/SharedWorker_blobUrl.html [ Skip ] > > imported/w3c/web-platform-tests/fetch/api/redirect/redirect-mode.html [ DumpJSConsoleLogInStdErr ] > imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-redirect.any.worker.html [ DumpJSConsoleLogInStdErr ] >-imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects.htm [ DumpJSConsoleLogInStdErr ] >-imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers.htm [ DumpJSConsoleLogInStdErr ] >-imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple.htm [ DumpJSConsoleLogInStdErr ] >-imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type.htm [ DumpJSConsoleLogInStdErr ] >-imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm [ DumpJSConsoleLogInStdErr ] >-imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm [ DumpJSConsoleLogInStdErr ] >+imported/w3c/web-platform-tests/xhr/access-control-and-redirects.htm [ DumpJSConsoleLogInStdErr ] >+imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers.htm [ DumpJSConsoleLogInStdErr ] >+imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple.htm [ DumpJSConsoleLogInStdErr ] >+imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type.htm [ DumpJSConsoleLogInStdErr ] >+imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-not-enabled.htm [ DumpJSConsoleLogInStdErr ] >+imported/w3c/web-platform-tests/xhr/send-authentication-cors-setrequestheader-no-cred.htm [ DumpJSConsoleLogInStdErr ] >+imported/w3c/web-platform-tests/xhr/send-authentication-cors-basic-setrequestheader.htm [ DumpJSConsoleLogInStdErr ] > imported/w3c/web-platform-tests/cors/request-headers.htm [ DumpJSConsoleLogInStdErr ] >- >+imported/w3c/web-platform-tests/xhr/event-error-order.sub.html [ DumpJSConsoleLogInStdErr ] >+ >+imported/w3c/web-platform-tests/xhr/event-error.sub.html [ Failure ] >+imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-existing-session.htm [ Failure ] >+imported/w3c/web-platform-tests/xhr/send-authentication-competing-names-passwords.htm [ Failure ] >+imported/w3c/web-platform-tests/xhr/preserve-ua-header-on-redirect.htm [ Failure ] >+imported/w3c/web-platform-tests/xhr/setrequestheader-case-insensitive.htm [ Failure ] >+imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub.htm [ Failure ] > http/tests/security/cross-origin-cached-images-parallel.html [ DumpJSConsoleLogInStdErr ] > > # textarea.animate is not supported >@@ -290,19 +298,19 @@ http/tests/inspector/paymentrequest [ Skip ] > imported/w3c/web-platform-tests/payment-request [ Skip ] > > http/tests/xmlhttprequest/redirect-cross-origin-sync-double.html [ DumpJSConsoleLogInStdErr ] >-imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-sync.htm [ DumpJSConsoleLogInStdErr ] >- >-imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html [ Skip ] >-webkit.org/b/179607 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async.htm [ Pass Failure ] >-webkit.org/b/179607 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-same-origin.htm [ Pass Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-header-denied.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-method-denied.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-not-supported.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-header-denied.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-method-denied.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-not-supported.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-cors.htm [ Failure ] >-webkit.org/b/179611 imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document.htm [ Pass Failure ] >+imported/w3c/web-platform-tests/xhr/send-redirect-bogus-sync.htm [ DumpJSConsoleLogInStdErr ] >+ >+imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html [ Skip ] >+webkit.org/b/179607 imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async.htm [ Pass Failure ] >+webkit.org/b/179607 imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-same-origin.htm [ Pass Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-async-header-denied.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-async-method-denied.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-async-not-supported.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-header-denied.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-method-denied.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-not-supported.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/send-conditional-cors.htm [ Failure ] >+webkit.org/b/179611 imported/w3c/web-platform-tests/xhr/send-entity-body-document.htm [ Pass Failure ] > webkit.org/b/145566 imported/w3c/web-platform-tests/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-001.html [ ImageOnlyFailure ] > webkit.org/b/145566 imported/w3c/web-platform-tests/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-002.html [ ImageOnlyFailure ] > webkit.org/b/145566 imported/w3c/web-platform-tests/css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-003.html [ ImageOnlyFailure ] >@@ -688,11 +696,11 @@ webkit.org/b/187034 imported/w3c/web-platform-tests/webmessaging/without-ports/0 > webkit.org/b/187034 imported/w3c/web-platform-tests/webmessaging/without-ports/021.html [ Skip ] > > # XMLHttpRequest tests requiring DTR/WTR to allow other URLs than localhost to not be blocked and be reachable (www2.localhost) >-imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus.htm [ Skip ] >-imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-cors.htm [ Skip ] >-imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-non-cors.htm [ Skip ] >+imported/w3c/web-platform-tests/xhr/send-redirect-bogus.htm [ Skip ] >+imported/w3c/web-platform-tests/xhr/send-redirect-to-cors.htm [ Skip ] >+imported/w3c/web-platform-tests/xhr/send-redirect-to-non-cors.htm [ Skip ] > # Failing assertion with dynamic message >-imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm [ Failure ] >+imported/w3c/web-platform-tests/xhr/responsexml-document-properties.htm [ Failure ] > > imported/w3c/web-platform-tests/fetch/api/basic/block-mime-as-script.html [ DumpJSConsoleLogInStdErr ] > imported/w3c/web-platform-tests/fetch/api/cors/cors-origin.any.html [ DumpJSConsoleLogInStdErr ] >@@ -712,7 +720,7 @@ webkit.org/b/171511 http/wpt/resource-timing/rt-revalidate-requests.html [ Pass > webkit.org/b/161312 imported/w3c/web-platform-tests/html/semantics/document-metadata/the-link-element/document-without-browsing-context.html [ Failure Pass ] > > imported/w3c/web-platform-tests/fetch/http-cache/partial.html [ Failure Pass ] >-webkit.org/b/159724 imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm [ Failure Pass ] >+webkit.org/b/159724 imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm [ Failure Pass ] > > # Flaky tests due to always changing assertion error message > imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/url-encoded.html [ Failure ] >@@ -1932,7 +1940,7 @@ webkit.org/b/170699 [ Debug ] imported/w3c/web-platform-tests/html/webappapis/ti > > webkit.org/b/90724 compositing/iframes/iframe-size-from-zero.html [ Failure Pass ] > >-webkit.org/b/171031 imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl.htm [ Failure ] >+webkit.org/b/171031 imported/w3c/web-platform-tests/xhr/getallresponseheaders-cl.htm [ Failure ] > > webkit.org/b/172961 fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events.html [ Pass Timeout ] > >diff --git a/LayoutTests/imported/w3c/resources/import-expectations.json b/LayoutTests/imported/w3c/resources/import-expectations.json >index b00f8342f486ce553c4a1fc1e3bf261609ceadca..8e738cd58b8796548624d029b2c3d5583a31d6bc 100644 >--- a/LayoutTests/imported/w3c/resources/import-expectations.json >+++ b/LayoutTests/imported/w3c/resources/import-expectations.json >@@ -347,5 +347,6 @@ > "web-platform-tests/webvtt": "skip", > "web-platform-tests/workers": "import", > "web-platform-tests/worklets": "skip", >- "web-platform-tests/x-frame-options": "skip" >+ "web-platform-tests/x-frame-options": "skip", >+ "web-platform-tests/xhr": "import" > } >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/resources/resource-files.json b/LayoutTests/imported/w3c/resources/resource-files.json >index 4cbf4aa7da9619f7e8722c467d4a50edd37b897e..fe8008f4e90e79c2d8f16f03cc61738ef38afca4 100644 >--- a/LayoutTests/imported/w3c/resources/resource-files.json >+++ b/LayoutTests/imported/w3c/resources/resource-files.json >@@ -798,6 +798,7 @@ > "web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-3.html", > "web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-4.html", > "web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-0.html", >+ "web-platform-tests/html/browsers/browsing-the-web/history-traversal/support/window-name-after-cross-origin-main-frame-navigation-popup.sub.html", > "web-platform-tests/html/browsers/browsing-the-web/history-traversal/support/window-name-navigation.sub.html", > "web-platform-tests/html/browsers/browsing-the-web/history-traversal/unset_context_name.html", > "web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-1.html", >@@ -837,9 +838,12 @@ > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload-1.html", > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload-2.html", > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/pagehide-on-history-forward-1.html", >+ "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt-and-unload-script-uncloseable-1.html", > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001-1.html", > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001-2.html", > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/002-1.html", >+ "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/004-1.html", >+ "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/004-2.html", > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-001.html", > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-002.html", > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-003.html", >@@ -860,6 +864,7 @@ > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009-1.html", > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/manual-001-1.html", > "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/manual-001.html", >+ "web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/pagehide-manual-1.html", > "web-platform-tests/html/browsers/history/the-history-interface/009-1.html", > "web-platform-tests/html/browsers/history/the-history-interface/009-3.html", > "web-platform-tests/html/browsers/history/the-history-interface/009-5.html", >@@ -1044,6 +1049,7 @@ > "web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-before.html", > "web-platform-tests/html/semantics/embedded-content/the-img-element/ismap/img-ismap-coordinates-iframe-inside.html", > "web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/sizes-iframed.sub.html", >+ "web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/support/sizes-iframed.sub.html", > "web-platform-tests/html/semantics/embedded-content/the-object-element/test0.html", > "web-platform-tests/html/semantics/embedded-content/the-object-element/test1.html", > "web-platform-tests/html/semantics/embedded-content/the-object-element/test2.html", >@@ -1113,6 +1119,7 @@ > "web-platform-tests/upgrade-insecure-requests/support/post-origin-to-parent.html", > "web-platform-tests/webmessaging/message-channels/004-1.html", > "web-platform-tests/webmessaging/message-channels/004-2.html", >+ "web-platform-tests/webmessaging/support/ChildWindowPostMessage.htm", > "web-platform-tests/webmessaging/without-ports/019-1.html", > "web-platform-tests/webmessaging/without-ports/020-1.html", > "web-platform-tests/workers/data-url-shared-window.html", >@@ -1130,6 +1137,7 @@ > "web-platform-tests/workers/support/WorkerLocation-origin.html", > "web-platform-tests/workers/support/iframe_sw_dataUrl.html", > "web-platform-tests/workers/support/sandboxed-tests.html", >+ "web-platform-tests/workers/support/sync_xhr_target.xml", > "web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts-subframe.html", > "web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader-subframe.html" > ] >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/FormData-append-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/FormData-append-expected.txt >deleted file mode 100644 >index ca2ce71646bf2be7cbbc18c907eb02315dcc4f3f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/FormData-append-expected.txt >+++ /dev/null >@@ -1,16 +0,0 @@ >- >-PASS Passing a String object to FormData.append should work. >-PASS testFormDataAppend1 >-PASS testFormDataAppend2 >-PASS testFormDataAppendUndefined1 >-PASS testFormDataAppendUndefined2 >-PASS testFormDataAppendNull1 >-PASS testFormDataAppendNull2 >-PASS testFormDataAppendToForm1 >-PASS testFormDataAppendToForm2 >-PASS testFormDataAppendToFormUndefined1 >-PASS testFormDataAppendToFormUndefined2 >-PASS testFormDataAppendToFormNull1 >-PASS testFormDataAppendToFormNull2 >-PASS testFormDataAppendEmptyBlob >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/FormData-append.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/FormData-append.html >deleted file mode 100644 >index bf6c66d0f665df8cfb30b97063cca33442900250..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/FormData-append.html >+++ /dev/null >@@ -1,99 +0,0 @@ >-<!doctype html> >-<meta charset="utf-8"> >-<title>FormData.append</title> >-<link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-append"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<form id="form" /> >-<script> >- function test_formdata(creator, verifier, description) { >- async_test(description).step(function() { >- var fd = creator(); >- var xhr = new XMLHttpRequest(); >- xhr.onload = this.step_func(function() { >- verifier(xhr.responseText); >- this.done(); >- }); >- xhr.open("POST", "resources/upload.py"); >- xhr.send(fd); >- }); >- } >- >- test_formdata(function() { >- var fd = new FormData(); >- fd.append("name", new String("value")); >- return fd; >- }, function(data) { >- assert_equals(data, "name=value,\n"); >- }, "Passing a String object to FormData.append should work."); >- >- test(function() { >- assert_equals(create_formdata(['key', 'value1']).get('key'), "value1"); >- }, 'testFormDataAppend1'); >- test(function() { >- assert_equals(create_formdata(['key', 'value2'], ['key', 'value1']).get('key'), "value2"); >- }, 'testFormDataAppend2'); >- test(function() { >- assert_equals(create_formdata(['key', undefined]).get('key'), "undefined"); >- }, 'testFormDataAppendUndefined1'); >- test(function() { >- assert_equals(create_formdata(['key', undefined], ['key', 'value1']).get('key'), "undefined"); >- }, 'testFormDataAppendUndefined2'); >- test(function() { >- assert_equals(create_formdata(['key', null]).get('key'), "null"); >- }, 'testFormDataAppendNull1'); >- test(function() { >- assert_equals(create_formdata(['key', null], ['key', 'value1']).get('key'), "null"); >- }, 'testFormDataAppendNull2'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.append('key', 'value1'); >- assert_equals(fd.get('key'), "value1"); >- }, 'testFormDataAppendToForm1'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.append('key', 'value2'); >- fd.append('key', 'value1'); >- assert_equals(fd.get('key'), "value2"); >- }, 'testFormDataAppendToForm2'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.append('key', undefined); >- assert_equals(fd.get('key'), "undefined"); >- }, 'testFormDataAppendToFormUndefined1'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.append('key', undefined); >- fd.append('key', 'value1'); >- assert_equals(fd.get('key'), "undefined"); >- }, 'testFormDataAppendToFormUndefined2'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.append('key', null); >- assert_equals(fd.get('key'), "null"); >- }, 'testFormDataAppendToFormNull1'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.append('key', null); >- fd.append('key', 'value1'); >- assert_equals(fd.get('key'), "null"); >- }, 'testFormDataAppendToFormNull2'); >- test(function() { >- var before = new Date(new Date().getTime() - 2000); // two seconds ago, in case there's clock drift >- var fd = create_formdata(['key', new Blob(), 'blank.txt']).get('key'); >- assert_equals(fd.name, "blank.txt"); >- assert_equals(fd.type, ""); >- assert_equals(fd.size, 0); >- assert_greater_than_equal(fd.lastModified, before); >- assert_less_than_equal(fd.lastModified, new Date()); >- }, 'testFormDataAppendEmptyBlob'); >- >- function create_formdata() { >- var fd = new FormData(); >- for (var i = 0; i < arguments.length; i++) { >- fd.append.apply(fd, arguments[i]); >- }; >- return fd; >- } >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/OWNERS >deleted file mode 100644 >index 5256cf3d602b0757464fb2131b15396d344b3e79..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/OWNERS >+++ /dev/null >@@ -1,12 +0,0 @@ >-@emilio >-@hallvors >-@kangxu >-@caitp >-@Manishearth >-@jungkees >-@ibelem >-@mathiasbynens >-@ronkorving >-@jdm >-@annevk >-@wisniewskit >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/README.md b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/README.md >deleted file mode 100644 >index 8fbe615bf648fa185224d67fd1e74c33c882a980..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/README.md >+++ /dev/null >@@ -1,7 +0,0 @@ >-Tests for the [XMLHttpRequest Standard](https://xhr.spec.whatwg.org/). >- >-More XMLHttpRequest-related tests can be found in >- >-* /cors >-* /fetch >-* /url (failure.html in particular) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials-expected.txt >deleted file mode 100644 >index 81912302fe621fb827dcadc94514f8a55b734e1f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >- >-PASS default value is false, set value is true >-PASS can also be set in OPEN state >-PASS setting on synchronous XHR >-PASS setting withCredentials when not in UNSENT, OPENED state (asynchronous) >-PASS setting withCredentials when in DONE state (synchronous) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any-expected.txt >deleted file mode 100644 >index 81912302fe621fb827dcadc94514f8a55b734e1f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >- >-PASS default value is false, set value is true >-PASS can also be set in OPEN state >-PASS setting on synchronous XHR >-PASS setting withCredentials when not in UNSENT, OPENED state (asynchronous) >-PASS setting withCredentials when in DONE state (synchronous) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.html >deleted file mode 100644 >index 2382913528e693b3a5d56c660a45060980b548c3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.html >+++ /dev/null >@@ -1 +0,0 @@ >-<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.js >deleted file mode 100644 >index 96e95c90faf0645dfad09c24a80ed4b8cd5a4880..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.js >+++ /dev/null >@@ -1,40 +0,0 @@ >-test(function() { >- var client = new XMLHttpRequest() >- assert_false(client.withCredentials, "withCredentials defaults to false") >- client.withCredentials = true >- assert_true(client.withCredentials, "is true after setting") >-}, "default value is false, set value is true") >- >-test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/delay.py?ms=1000", true) >- client.withCredentials = true >- assert_true(client.withCredentials, "set in OPEN state") >-}, "can also be set in OPEN state") >- >-test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/delay.py?ms=1000", false) >- client.withCredentials = true >- assert_true(client.withCredentials, "set in OPEN state") >-}, "setting on synchronous XHR") >- >-async_test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/delay.py?ms=1000") >- client.send() >- assert_throws("InvalidStateError", function() { client.withCredentials = true }) >- client.onreadystatechange = this.step_func(function() { >- assert_throws("InvalidStateError", function() { client.withCredentials = true }) >- if (client.readyState === 4) { >- this.done() >- } >- }) >-}, "setting withCredentials when not in UNSENT, OPENED state (asynchronous)") >- >-test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/delay.py?ms=1000", false) >- client.send(); >- assert_throws("InvalidStateError", function() { client.withCredentials = true }) >-}, "setting withCredentials when in DONE state (synchronous)") >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.worker-expected.txt >deleted file mode 100644 >index 81912302fe621fb827dcadc94514f8a55b734e1f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.worker-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >- >-PASS default value is false, set value is true >-PASS can also be set in OPEN state >-PASS setting on synchronous XHR >-PASS setting withCredentials when not in UNSENT, OPENED state (asynchronous) >-PASS setting withCredentials when in DONE state (synchronous) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.worker.html >deleted file mode 100644 >index 2382913528e693b3a5d56c660a45060980b548c3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.worker.html >+++ /dev/null >@@ -1 +0,0 @@ >-<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-receive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-receive-expected.txt >deleted file mode 100644 >index 606c860d32343ccfe236db50676976e74fff6a93..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-receive-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: abort() after successful receive should not fire "abort" event >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-receive.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-receive.htm >deleted file mode 100644 >index 1c460c898c3c2c57857cb100b13e9cf73dc427cc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-receive.htm >+++ /dev/null >@@ -1,42 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: abort() after successful receive should not fire "abort" event</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[5]"/> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- >- test.step(function() { >- var client = new XMLHttpRequest(); >- >- client.onreadystatechange = test.step_func(function() { >- if (client.readyState == 4) { >- // abort should not cause the "abort" event to fire >- >- client.abort(); >- >- assert_equals(client.readyState, 0); >- >- test.step_timeout(function(){ // use a timeout to catch any implementation that might queue an abort event for later - just in case >- test.done() >- }, 200); >- } >- }); >- >- client.onabort = test.step_func(function () { >- // this should not fire! >- >- assert_unreached("abort() should not cause the abort event to fire"); >- }); >- >- client.open("GET", "resources/well-formed.xml", true); >- client.send(null); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-send-expected.txt >deleted file mode 100644 >index db5d8c5a9e0ce9448899d498048865cb0f3381f7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-send-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: abort() after send() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-send.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-send.htm >deleted file mode 100644 >index 523a0d616b64bd356a51408ac3045e5e6da87561..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-send.htm >+++ /dev/null >@@ -1,46 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: abort() after send()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-event-order.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[1] following-sibling::ol/li[3] following-sibling::ol/li[4] following-sibling::ol/li[4]/ol/li[1] following-sibling::ol/li[4]/ol/li[3] following-sibling::ol/li[4]/ol/li[4] following-sibling::ol/li[4]/ol/li[5] following-sibling::ol/li[4]/ol/li[6] following-sibling::ol/li[5]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[3]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol/li[3]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getallresponseheaders" data-tested-assertations="following::ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="following::ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[1] following::dd[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest(), >- control_flag = false; >- prepare_xhr_for_event_order_test(client); >- client.addEventListener("readystatechange", test.step_func(function() { >- if(client.readyState == 4) { >- control_flag = true >- assert_equals(client.responseXML, null) >- assert_equals(client.responseText, "") >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.getAllResponseHeaders(), "") >- assert_equals(client.getResponseHeader('Content-Type'), null) >- } >- })) >- client.open("GET", "resources/well-formed.xml", true) >- client.send(null) >- client.abort() >- assert_true(control_flag) >- assert_equals(client.readyState, 0) >- assert_xhr_event_order_matches([1, "loadstart(0,0,false)", 4, "abort(0,0,false)", "loadend(0,0,false)"]) >- test.done() >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-timeout-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-timeout-expected.txt >deleted file mode 100644 >index 04106e6cce74b79fd4ab51501b8793b6bedb843a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-timeout-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: abort() after a timeout should not fire "abort" event >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-timeout.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-timeout.htm >deleted file mode 100644 >index 924bc424d50eac23bb6d765c5a8d0a9b155b68b9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-timeout.htm >+++ /dev/null >@@ -1,56 +0,0 @@ >-<!doctype html> >-<html> >-<head> >- <title>XMLHttpRequest: abort() after a timeout should not fire "abort" event</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[5]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]"/> >-</head> >-<body> >-<div id="log"></div> >-<script> >- var test = async_test(); >- >- test.step(function() { >- // timeout is 100ms >- // the download would otherwise take 1000ms >- // we check after 300ms to make sure abort does not fire an "abort" event >- >- var timeoutFired = false; >- >- var client = new XMLHttpRequest(); >- >- assert_true('timeout' in client, 'xhr.timeout is not supported in this user agent'); >- >- client.timeout = 100; >- >- test.step_timeout(() => { >- assert_true(timeoutFired); >- >- // abort should not cause the "abort" event to fire >- client.abort(); >- >- test.step_timeout(() => { // use a timeout to catch any implementation that might queue an abort event for later - just in case >- test.done() >- }, 200); >- >- assert_equals(client.readyState, 0); >- }, 300); >- >- client.ontimeout = function () { >- timeoutFired = true; >- }; >- >- client.onabort = test.step_func(function () { >- // this should not fire! >- >- assert_unreached("abort() should not cause the abort event to fire"); >- }); >- >- client.open("GET", "/common/blank.html?pipe=trickle(d1)", true); >- client.send(null); >- }); >-</script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-done-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-done-expected.txt >deleted file mode 100644 >index bec1fa2e7c3535bda66dd91beb619ac7d7ebbdf3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-done-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS XMLHttpRequest: abort() during DONE (sync) >-PASS XMLHttpRequest: abort() during DONE (sync aborted in readystatechange) >-PASS XMLHttpRequest: abort() during DONE (async) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-done.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-done.htm >deleted file mode 100644 >index 89301729abd3c32dfc9c67c3dac63d98116e83c4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-done.htm >+++ /dev/null >@@ -1,90 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: abort() during DONE</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- async_test(test => { >- var client = new XMLHttpRequest(), >- result = [], >- expected = [1, 4] // open() -> 1, send() -> 4 >- client.onreadystatechange = test.step_func(function() { >- result.push(client.readyState) >- }) >- client.open("GET", "resources/well-formed.xml", false) >- client.send(null) >- assert_equals(client.readyState, 4) >- assert_equals(client.status, 200) >- assert_equals(client.statusText, "OK") >- assert_equals(client.responseXML.documentElement.localName, "html") >- client.abort() >- assert_equals(client.readyState, 0) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.responseXML, null) >- assert_equals(client.getAllResponseHeaders(), "") >- assert_array_equals(result, expected) >- test.done() >- }, document.title + " (sync)") >- >- async_test(test => { >- var client = new XMLHttpRequest(), >- result = [], >- expected = [1, 4] // open() -> 1, send() -> 4 >- client.onreadystatechange = test.step_func(function() { >- result.push(client.readyState); >- if (client.readyState === 4) { >- assert_equals(client.readyState, 4) >- assert_equals(client.status, 200) >- assert_equals(client.statusText, "OK") >- assert_equals(client.responseXML.documentElement.localName, "html") >- client.abort(); >- assert_equals(client.readyState, 0) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.responseXML, null) >- assert_equals(client.getAllResponseHeaders(), "") >- test.done() >- } >- }) >- client.open("GET", "resources/well-formed.xml", false) >- client.send(null) >- assert_equals(client.readyState, 0) >- assert_equals(client.status, 200) >- assert_equals(client.statusText, "OK") >- assert_equals(client.responseXML.documentElement.localName, "html") >- }, document.title + " (sync aborted in readystatechange)") >- >- async_test(test => { >- var client = new XMLHttpRequest(), >- result = [], >- expected = [1, 2, 3, 4] >- client.onreadystatechange = test.step_func(function() { >- result.push(client.readyState); >- if (client.readyState === 4) { >- assert_equals(client.readyState, 4) >- assert_equals(client.status, 200) >- assert_equals(client.responseXML.documentElement.localName, "html") >- client.abort(); >- assert_equals(client.readyState, 0) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.responseXML, null) >- assert_equals(client.getAllResponseHeaders(), "") >- test.step_timeout(function() { >- assert_array_equals(result, expected) >- test.done(); >- }, 100); // wait a bit in case XHR timeout causes spurious event >- } >- }) >- client.open("GET", "resources/well-formed.xml") >- client.send(null) >- }, document.title + " (async)") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-headers-received-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-headers-received-expected.txt >deleted file mode 100644 >index 5c5a1890018fc0a04e8c375cee9946e257ffc1b9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-headers-received-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: abort() during HEADERS_RECEIVED >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-headers-received.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-headers-received.htm >deleted file mode 100644 >index a837347f8df26061f3aa9a3b99cd0657c9607f08..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-headers-received.htm >+++ /dev/null >@@ -1,53 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: abort() during HEADERS_RECEIVED</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- async_test(test => { >- var client = new XMLHttpRequest(), >- result = [], >- expected = [1, 2, 4] >- client.onreadystatechange = test.step_func(function() { >- result.push(client.readyState); >- if (client.readyState === 2) { >- assert_equals(client.status, 200) >- assert_equals(client.statusText, "OK") >- assert_equals(client.responseXML, null) >- client.abort(); >- assert_equals(client.readyState, 0) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.responseXML, null) >- assert_equals(client.getAllResponseHeaders(), "") >- } >- if (client.readyState === 4) { >- assert_equals(client.readyState, 4) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.responseXML, null) >- assert_equals(client.getAllResponseHeaders(), "") >- } >- }) >- client.onloadend = test.step_func(function() { >- assert_equals(client.readyState, 4) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.responseXML, null) >- assert_equals(client.getAllResponseHeaders(), "") >- test.step_timeout(function() { >- assert_array_equals(result, expected) >- test.done(); >- }, 100); // wait a bit in case XHR timeout causes spurious event >- }) >- client.open("GET", "resources/well-formed.xml") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-loading-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-loading-expected.txt >deleted file mode 100644 >index b073af634b7a0d8a93a0fbe2ad809d69cc1fbe42..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-loading-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: abort() during LOADING >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-loading.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-loading.htm >deleted file mode 100644 >index 501de90552de2e2e70a9b93a6350c67684cd1a0c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-loading.htm >+++ /dev/null >@@ -1,53 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: abort() during LOADING</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- async_test(test => { >- var client = new XMLHttpRequest(), >- result = [], >- expected = [1, 2, 3, 4] >- client.onreadystatechange = test.step_func(function() { >- result.push(client.readyState); >- if (client.readyState === 3) { >- assert_equals(client.status, 200) >- assert_equals(client.statusText, "OK") >- assert_equals(client.responseXML, null) >- client.abort(); >- assert_equals(client.readyState, 0) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.responseXML, null) >- assert_equals(client.getAllResponseHeaders(), "") >- } >- if (client.readyState === 4) { >- assert_equals(client.readyState, 4) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.responseXML, null) >- assert_equals(client.getAllResponseHeaders(), "") >- } >- }) >- client.onloadend = test.step_func(function() { >- assert_equals(client.readyState, 4) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.responseXML, null) >- assert_equals(client.getAllResponseHeaders(), "") >- test.step_timeout(function() { >- assert_array_equals(result, expected) >- test.done(); >- }, 100); // wait a bit in case XHR timeout causes spurious event >- }) >- client.open("GET", "resources/well-formed.xml") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open-expected.txt >deleted file mode 100644 >index d9df1a32ddfe62ad0f98411520944e20f841cd5d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: abort() during OPEN >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.htm >deleted file mode 100644 >index dde94f2398689a3c96096d7e91e6e1a97ca3ed85..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.htm >+++ /dev/null >@@ -1,14 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: abort() during OPEN</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script src="abort-during-open.js"></script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.js >deleted file mode 100644 >index 26d3f57e44aadf66ca1d750f9e30bcbafc588ec4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.js >+++ /dev/null >@@ -1,18 +0,0 @@ >-var test = async_test() >-test.step(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "...") >- client.onreadystatechange = function() { >- test.step(function() { >- assert_unreached() >- }) >- } >- assert_equals(client.readyState, 1, "before abort()") >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- client.abort() >- assert_equals(client.readyState, 1, "after abort()") >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >-}) >-test.done() >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.worker-expected.txt >deleted file mode 100644 >index c2c15e0b8a0e54a623bcb4fdca1f4cef72eeb240..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.worker-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Untitled >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.worker.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.worker.html >deleted file mode 100644 >index 2382913528e693b3a5d56c660a45060980b548c3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.worker.html >+++ /dev/null >@@ -1 +0,0 @@ >-<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.worker.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.worker.js >deleted file mode 100644 >index ffb687d0c87e86fb1b07a42b4c3d6e589a0e8e1a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.worker.js >+++ /dev/null >@@ -1,3 +0,0 @@ >-importScripts("/resources/testharness.js"); >-importScripts("abort-during-open.js"); >-done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-unsent-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-unsent-expected.txt >deleted file mode 100644 >index ea7d26485f0505a670a2be7567c96561f60c9a80..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-unsent-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: abort() during UNSENT >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-unsent.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-unsent.htm >deleted file mode 100644 >index a5bc7c27364a43a867700b7e1c27d01f8b8e662b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-unsent.htm >+++ /dev/null >@@ -1,31 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: abort() during UNSENT</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- assert_unreached() >- }) >- } >- assert_equals(client.readyState, 0) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- client.abort() >- assert_equals(client.readyState, 0) >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- }) >- test.done() >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-upload-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-upload-expected.txt >deleted file mode 100644 >index c5ee05fb83badc9892c9711e50d2619e8e20e421..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-upload-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-FAIL XMLHttpRequest: abort() while sending data assert_equals: expected "upload.loadstart(0,9999,true)" but got "upload.loadstart(0,0,false)" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-upload.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-upload.htm >deleted file mode 100644 >index 9fbc8b9bbb473fa3b605759516e8e0493ce5e098..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-upload.htm >+++ /dev/null >@@ -1,30 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: abort() while sending data</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-event-order.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[7] following-sibling::ol/li[4]/ol/li[7]/ol/li[2] following-sibling::ol/li[4]/ol/li[7]/ol/li[3] following-sibling::ol/li[4]/ol/li[7]/ol/li[4]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#make-upload-progress-notifications" data-tested-assertations="following::ul[1]/li[1] following::ul[1]/li[2]/ol[1]/li[2] following::ul[1]/li[2]/ol[1]/li[3] following::ul[1]/li[2]/ol[1]/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(document.title, {timeout:1100}) >- test.step(function() { >- var client = new XMLHttpRequest() >- prepare_xhr_for_event_order_test(client); >- client.open("POST", "resources/delay.py?ms=1000") >- client.addEventListener("loadend", function(e) { >- test.step(function() { >- assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,9999,true)", 4, "upload.abort(0,0,false)", "upload.loadend(0,0,false)", "abort(0,0,false)", "loadend(0,0,false)"]); >- test.done() >- }) >- }); >- client.send((new Array(10000)).join('a')) >- client.abort() >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-abort-expected.txt >deleted file mode 100644 >index 7a4c1a57b9a775c518d32b2cf36856e0bf2bbde5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-abort-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The abort() method: do not fire abort event in OPENED state when send() flag is unset. >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-abort.htm >deleted file mode 100644 >index eb2b2b743e6c36e536e156063ec105b8596d1ca7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-abort.htm >+++ /dev/null >@@ -1,46 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[5]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The abort() method: do not fire abort event in OPENED state when send() flag is unset.</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test() >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest() >- >- xhr.onreadystatechange = function() >- { >- test.step(function() >- { >- if (xhr.readyState == 1) >- { >- xhr.abort(); >- assert_equals(xhr.readyState, 1, "abort() cannot change readyState when readyState is 1 and send() flag is unset") >- } >- }); >- }; >- >- xhr.onabort = function(e) >- { >- test.step(function() >- { >- assert_unreached('when abort() is called, state is OPENED with the send() flag being unset, must not fire abort event per spec') >- }); >- }; >- >- xhr.open("GET", "./resources/content.py", true); // This should cause a readystatechange event that calls abort() >- xhr.send() // should not throw since abort() was a no-op >- test.done() >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-listeners-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-listeners-expected.txt >deleted file mode 100644 >index 7522e1443567333c41d3294304d15ae41578bcb7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-listeners-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: abort() should not reset event listeners >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-listeners.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-listeners.htm >deleted file mode 100644 >index 1c50ed394dce5b1953762ce84011a5984fbc99b6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-listeners.htm >+++ /dev/null >@@ -1,25 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: abort() should not reset event listeners</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[6] following-sibling::ol/li[7]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest(), >- test = function() {} >- client.onreadystatechange = test >- client.open("GET", "resources/well-formed.xml") >- client.send(null) >- client.abort() >- assert_equals(client.onreadystatechange, test) >- }) >- test.done() >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-loadend-expected.txt >deleted file mode 100644 >index 7f327fdeb0db6b102b375f26401ae11444fa133c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-loadend-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The abort() method: Fire a progress event named loadend >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-loadend.htm >deleted file mode 100644 >index 8b8dfdaa422cc96cd5d00cefc86393891113f557..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-loadend.htm >+++ /dev/null >@@ -1,44 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[6]"/> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The abort() method: Fire a progress event named loadend</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(function(test) >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.onloadstart = function() >- { >- test.step(function() >- { >- if (xhr.readyState == 1) >- { >- xhr.abort(); >- } >- }); >- }; >- >- xhr.onloadend = function(e) >- { >- test.step(function() >- { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "loadend"); >- test.done(); >- }); >- }; >- >- xhr.open("GET", "resources/content.py", true); >- xhr.send(); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-order-expected.txt >deleted file mode 100644 >index a01c33f93ba1021bb457222c40621f68f52a6192..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-order-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The abort() method: abort and loadend events >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-order.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-order.htm >deleted file mode 100644 >index f05c20628c4ae88347e0ba059561203cf08cb689..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-order.htm >+++ /dev/null >@@ -1,52 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[3] following-sibling::ol/li[4]/ol/li[5] following-sibling::ol/li[4]/ol/li[6] following-sibling::ol/li[4]/ol/li[7]/ol/li[3] following-sibling::ol/li[4]/ol/li[7]/ol/li[4] following-sibling::ol/li[5]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-event-order.js"></script> >- <title>XMLHttpRequest: The abort() method: abort and loadend events</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- prepare_xhr_for_event_order_test(xhr); >- >- xhr.addEventListener("loadstart", function() { >- test.step(function() >- { >- var readyState = xhr.readyState; >- if (readyState == 1) >- { >- xhr.abort(); >- VerifyResult(); >- } else { >- assert_unreached('Loadstart event should not fire in readyState '+readyState); >- } >- }); >- }); >- >- function VerifyResult() >- { >- test.step(function() >- { >- assert_xhr_event_order_matches([1, "loadstart(0,0,false)", 4, "upload.abort(0,0,false)", "upload.loadend(0,0,false)", "abort(0,0,false)", "loadend(0,0,false)"]); >- >- assert_equals(xhr.readyState, 0, 'state should be UNSENT'); >- test.done(); >- }); >- }; >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send("Test Message"); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-abort-expected.txt >deleted file mode 100644 >index 5d40e11a4bcdcd3502be52f89361f0355108990c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-abort-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The abort() method: Fire a progress event named abort on the XMLHttpRequestUpload object >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-abort.htm >deleted file mode 100644 >index 1d045448b5fdf2927b75b8b68e4cec85d0c261d5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-abort.htm >+++ /dev/null >@@ -1,47 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[7]/ol/li[3]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The abort() method: Fire a progress event named abort on the XMLHttpRequestUpload object</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.onloadstart = function() >- { >- test.step(function() >- { >- if (xhr.readyState == 1) >- { >- xhr.abort(); >- } >- }); >- }; >- >- xhr.upload.onabort = function(e) >- { >- test.step(function() >- { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "abort"); >- assert_equals(e.target, xhr.upload); >- test.done(); >- }); >- }; >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send("Test Message"); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-loadend-expected.txt >deleted file mode 100644 >index 983788d4578016e804a5d65f42ae7cd7da432b39..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-loadend-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The abort() method: Fire a progress event named loadend on the XMLHttpRequestUpload object >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-loadend.htm >deleted file mode 100644 >index 5b10b6530fd218ef8828fda16b16189085b7033c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-loadend.htm >+++ /dev/null >@@ -1,47 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[7]/ol/li[4]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The abort() method: Fire a progress event named loadend on the XMLHttpRequestUpload object</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.onloadstart = function() >- { >- test.step(function () >- { >- if (xhr.readyState == 1) >- { >- xhr.abort(); >- } >- }); >- }; >- >- xhr.upload.onloadend = function(e) >- { >- test.step(function() >- { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "loadend"); >- assert_equals(e.target, xhr.upload); >- test.done(); >- }); >- }; >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send("Test Message"); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-expected.txt >deleted file mode 100644 >index ecc2db33970d7287d1e01050e01cc20d08dc9ee2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-expected.txt >+++ /dev/null >@@ -1,15 +0,0 @@ >-CONSOLE MESSAGE: Cross-origin redirection to http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-star.py denied by Cross-Origin Resource Sharing policy: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/redirect-cors.py?location=http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-star.py& due to access control checks. >-CONSOLE MESSAGE: Cross-origin redirection to foo://bar.cgi denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/redirect-cors.py?location=foo://bar.cgi&allow_origin=true due to access control checks. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/redirect-cors.py?location=http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-star.py&allow_origin=true&redirect_preflight=true. Preflight response is not successful >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/redirect-cors.py?location=http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-star.py&allow_origin=true&allow_header=x-test&redirect_preflight=true. Preflight response is not successful >- >-PASS Request is redirected without CORS headers to a response with Access-Control-Allow-Origin=* >-PASS Request is redirected to a response with Access-Control-Allow-Origin=* >-FAIL Request with user info is redirected to a response with Access-Control-Allow-Origin=* assert_true: expected true got false >-PASS Request is redirect to a bad URL >-PASS Preflighted request is redirected to a response with Access-Control-Allow-Origin=* >-PASS Preflighted request is redirected to a response with Access-Control-Allow-Origin=* and header allowed >-PASS Request is redirected to a same-origin resource file >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-same-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-same-origin-expected.txt >deleted file mode 100644 >index c894f02d919876a989b3379aaa86a4a72adeef3a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-same-origin-expected.txt >+++ /dev/null >@@ -1,14 +0,0 @@ >-CONSOLE MESSAGE: Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-star.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py due to access control checks. >- >-PASS Request without credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star) >-PASS Request with credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star) >-PASS Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin >-FAIL Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin assert_false: expected false got true >-PASS Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials) >-PASS Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-same-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-same-origin.htm >deleted file mode 100644 >index 24cc80c228fa1de937b1e2d57111e875327f23e2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-same-origin.htm >+++ /dev/null >@@ -1,71 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that asynchronous XMLHttpRequests handle redirects according to the CORS standard.</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script> >- function runTest(test, path, credentials, expectSuccess) { >- const xhr = new XMLHttpRequest(); >- xhr.withCredentials = credentials; >- xhr.open("GET", "resources/redirect.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN + path, true); >- >- xhr.onload = test.step_func_done(function() { >- assert_true(expectSuccess); >- assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >- }); >- xhr.onerror = test.step_func_done(function() { >- assert_false(expectSuccess); >- assert_equals(xhr.status, 0); >- }); >- xhr.send(null); >- } >- >- const withoutCredentials = false; >- const withCredentials = true; >- const succeeds = true; >- const fails = false; >- >- // Test simple same origin requests that receive cross origin redirects. >- >- // The redirect response passes the access check. >- async_test(t => { >- runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow-star.py", >- withoutCredentials, succeeds) >- }, "Request without credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star)"); >- >- // The redirect response fails the access check because credentials were sent. >- async_test(t => { >- runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow-star.py", >- withCredentials, fails) >- }, "Request with credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star)"); >- >- // The redirect response passes the access check. >- async_test(t => { >- runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow.py", >- withoutCredentials, succeeds) >- }, "Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin"); >- >- // The redirect response passes the access check. >- async_test(t => { >- runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow.py", >- withCredentials, succeeds) >- }, "Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin"); >- >- // forbidding credentials. The redirect response passes the access check. >- async_test(t => { >- runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py", >- withoutCredentials, succeeds) >- }, "Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials)"); >- >- // forbidding credentials. The redirect response fails the access check. >- async_test(t => { >- runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py", >- withCredentials, fails) >- }, "Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials)"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async.htm >deleted file mode 100644 >index bf16c3c8a1cf1c3611a487b0614badd9bd3c0ae2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async.htm >+++ /dev/null >@@ -1,89 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that asynchronous XMLHttpRequests handle redirects according to the CORS standard.</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script> >- function runTest(test, destination, parameters, customHeader, local, expectSuccess) { >- const xhr = new XMLHttpRequest(); >- const url = (local ? get_host_info().HTTP_ORIGIN : get_host_info().HTTP_REMOTE_ORIGIN) + >- "/XMLHttpRequest/resources/redirect-cors.py?location=" + destination + "&" + parameters; >- >- xhr.open("GET", url, true); >- >- if (customHeader) >- xhr.setRequestHeader("x-test", "test"); >- >- xhr.onload = test.step_func_done(function() { >- assert_true(expectSuccess); >- assert_true(xhr.responseText.startsWith("PASS")); >- }); >- xhr.onerror = test.step_func_done(function() { >- assert_false(expectSuccess); >- assert_equals(xhr.status, 0); >- }); >- xhr.send(); >- } >- >- const withCustomHeader = true; >- const withoutCustomHeader = false; >- const local = true; >- const remote = false; >- const succeeds = true; >- const fails = false; >- >- // Test simple cross origin requests that receive redirects. >- >- // The redirect response fails the access check because the redirect lacks a CORS header. >- async_test(t => { >- runTest(t, get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow-star.py", "", >- withoutCustomHeader, remote, fails) >- }, "Request is redirected without CORS headers to a response with Access-Control-Allow-Origin=*"); >- >- // The redirect response passes the access check. >- async_test(t => { >- runTest(t, get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow-star.py", "allow_origin=true", >- withoutCustomHeader, remote, succeeds) >- }, "Request is redirected to a response with Access-Control-Allow-Origin=*"); >- >- // The redirect response fails the access check because user info was sent. >- async_test(t => { >- runTest(t, get_host_info().HTTP_REMOTE_ORIGIN.replace("http://", "http://username:password@") + >- "/XMLHttpRequest/resources/access-control-basic-allow-star.py", "allow_origin=true", >- withoutCustomHeader, remote, fails) >- }, "Request with user info is redirected to a response with Access-Control-Allow-Origin=*"); >- >- // The redirect response fails the access check because the URL scheme is unsupported. >- async_test(t => { >- runTest(t, "foo://bar.cgi", "allow_origin=true", withoutCustomHeader, remote, fails) >- }, "Request is redirect to a bad URL"); >- >- // The preflighted redirect response fails the access check because of preflighting. >- async_test(t => { >- runTest(t, get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow-star.py", >- "allow_origin=true&redirect_preflight=true", withCustomHeader, remote, fails) >- }, "Preflighted request is redirected to a response with Access-Control-Allow-Origin=*"); >- >- // The preflighted redirect response fails the access check after successful preflighting. >- async_test(t => { >- runTest(t, get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow-star.py", >- "allow_origin=true&allow_header=x-test&redirect_preflight=true", >- withCustomHeader, remote, fails) >- }, "Preflighted request is redirected to a response with Access-Control-Allow-Origin=* and header allowed"); >- >- // The same-origin redirect response passes the access check. >- async_test(t => { >- runTest(t, get_host_info().HTTP_ORIGIN + "/XMLHttpRequest/resources/pass.txt", >- "", withCustomHeader, local, succeeds) >- }, "Request is redirected to a same-origin resource file"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt >deleted file mode 100644 >index be57c53e95749cb68fd4957ccd551fd5fe47f3e1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >- >-PASS Local sync redirect to remote origin >-PASS Local async redirect to remote origin >-PASS Remote sync redirect to local origin >-PASS Remote async redirect to local origin >-PASS Remote sync redirect to same remote origin >-PASS Remote async redirect to same remote origin >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects.htm >deleted file mode 100644 >index dcdf40044cbd5fbd7d4b55e0b9f4a1b547d95633..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects.htm >+++ /dev/null >@@ -1,60 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that redirects between origins are allowed when access control is involved.</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script> >- function runSync(test, url) >- { >- const xhr = new XMLHttpRequest(); >- xhr.open("GET", url, false); >- xhr.send(); >- assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >- test.done(); >- } >- function runAsync(test, url) >- { >- const xhr = new XMLHttpRequest(); >- xhr.open("GET", url, true); >- xhr.onload = test.step_func_done(function() { >- assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >- }); >- xhr.onerror = test.unreached_func("Network error"); >- xhr.send(); >- test.done(); >- } >- test(t => { >- runSync(t, "resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow.py") >- }, "Local sync redirect to remote origin"); >- async_test(t => { >- runAsync(t, "resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow.py") >- }, "Local async redirect to remote origin"); >- test(t => { >- runSync(t, get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/redirect-cors.py?location=" + get_host_info().HTTP_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow.py&allow_origin=true") >- }, "Remote sync redirect to local origin"); >- async_test(t => { >- runAsync(t, get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/redirect-cors.py?location=" + get_host_info().HTTP_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow.py&allow_origin=true") >- }, "Remote async redirect to local origin"); >- test(t => { >- runSync(t, get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow.py&allow_origin=true") >- }, "Remote sync redirect to same remote origin"); >- async_test(t => { >- runAsync(t, get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow.py&allow_origin=true") >- }, "Remote async redirect to same remote origin"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header-data-url-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header-data-url-expected.txt >deleted file mode 100644 >index 73c5e3618523f49c4f25ae3654ce5e62b120411f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header-data-url-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >- >-PASS Access granted to null-origin iframe >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header-data-url.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header-data-url.htm >deleted file mode 100644 >index d73f56b017b259be36b81dca7ad062dd440b3faa..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header-data-url.htm >+++ /dev/null >@@ -1,43 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that cross-origin access is granted to null-origin embedded iframe</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-const url = get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-origin-header.py"; >-async_test(function(test) { >- window.addEventListener("message", test.step_func(function(evt) { >- if (evt.data == "ready") { >- document.getElementById("frame").contentWindow.postMessage(url, "*"); >- } else { >- assert_equals(evt.data, "PASS: Cross-domain access allowed.\nHTTP_ORIGIN: null"); >- test.done(); >- } >- }), false); >-}, "Access granted to null-origin iframe"); >- </script> >- <iframe id="frame" src='data:text/html, >- <script> >-(function() { >- parent.postMessage("ready", "*"); >- window.addEventListener("message", function(evt) { >- try { >- const url = evt.data; >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", url, false); >- xhr.send(); >- >- parent.postMessage(xhr.responseText, "*"); >- } catch(e) { >- parent.postMessage(e.message, "*"); >- } >- }); >-})(); >- </script>'> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header-expected.txt >deleted file mode 100644 >index c97ef653febcd8d6f78a72dcd992942e3f9ee0b1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Access control test with origin header >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header.htm >deleted file mode 100644 >index 87b7e4755f930ec0a5aec51dd67bbbb39d5232eb..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header.htm >+++ /dev/null >@@ -1,22 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test(function(test) { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-origin-header.py", false); >- xhr.send(); >- >- assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\n" + >- "HTTP_ORIGIN: " + get_host_info().HTTP_ORIGIN); >- test.done(); >- }, "Access control test with origin header"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-async-expected.txt >deleted file mode 100644 >index 2e0a49457093487ef69170b5949a73575ad0f8c9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-async-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Basic async cross-origin XHR request >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-async.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-async.htm >deleted file mode 100644 >index d9e03210d0c60e245bde96c89d8790acc8070934..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-async.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Testing a basic asynchronous CORS XHR request</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test(function(test) { >- const xhr = new XMLHttpRequest; >- >- xhr.onreadystatechange = test.step_func(function() { >- if (xhr.readyState == xhr.DONE) { >- assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >- test.done(); >- } >- }); >- >- xhr.onerror = test.unreached_func("FAIL: Network error."); >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-allow.py", true); >- xhr.send(); >- }, "Basic async cross-origin XHR request"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-expected.txt >deleted file mode 100644 >index a088d01b93f07e48ec258c670e7a93cc0dab6d22..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Allow basic >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method-async-expected.txt >deleted file mode 100644 >index ebd7eb7db50a73a0e5491f6005d0edfde847446e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method-async-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Allow async PUT request >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method-async.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method-async.htm >deleted file mode 100644 >index 57721aa684b9a8694d8a5766be0aa5afeb8684f4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method-async.htm >+++ /dev/null >@@ -1,27 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests cross-origin async request with non-CORS-safelisted method</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test((test) => { >- const xhr = new XMLHttpRequest; >- >- xhr.onload = test.step_func_done(() => { >- assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\nPASS: PUT data received"); >- }); >- >- xhr.onerror = test.unreached_func("Unexpected error."); >- >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-put-allow.py"); >- xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8"); >- xhr.send("PASS: PUT data received"); >- }, "Allow async PUT request"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method-expected.txt >deleted file mode 100644 >index 9128a60e1cc7cc8202c2c17a8a9e95639d4fef37..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Allow PUT request >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method.htm >deleted file mode 100644 >index 08f41117f879351d83cc25e46f00fdb80b3d2177..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method.htm >+++ /dev/null >@@ -1,24 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests cross-origin request with non-CORS-safelisted method</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- test(function() { >- const xhr = new XMLHttpRequest; >- >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-put-allow.py", false); >- >- xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8"); >- >- xhr.send("PASS: PUT data received"); >- >- assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\nPASS: PUT data received"); >- }, "Allow PUT request"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-expected.txt >deleted file mode 100644 >index e98c15979c4a9fb354a87e44df8064e97f02c634..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Preflight cache should allow second request >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-header-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-header-expected.txt >deleted file mode 100644 >index c5b9c8dd881724d09dbdab18cb6eed5b6ca61533..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-header-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Preflight cache should be invalidated in presence of custom header >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-header.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-header.htm >deleted file mode 100644 >index 5a1e396e52f18d29a945d063e70eef5ded802f11..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-header.htm >+++ /dev/null >@@ -1,48 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Preflight cache should be invalidated in presence of custom header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- const uuid = token(); >- const xhr = new XMLHttpRequest; >- >- async_test(function(test) { >- xhr.onerror = test.unreached_func("FAIL: Network error."); >- xhr.onload = test.step_func(function() { >- // Token reset. We can start the test now. >- assert_equals(xhr.responseText, "PASS"); >- firstRequest(); >- }); >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/reset-token.py?token=" + uuid, true); >- xhr.send(); >- >- function firstRequest() { >- xhr.onload = test.step_func(function() { >- assert_equals(xhr.responseText, "PASS: First PUT request."); >- secondRequest(); >- }); >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true); >- xhr.send(); >- } >- >- function secondRequest() { >- xhr.onload = test.step_func(function() { >- assert_equals(xhr.responseText, "PASS: Second OPTIONS request was sent."); >- test.done(); >- }); >- // Send a header not included in the inital cache. >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true); >- xhr.setRequestHeader("x-test", "headerValue"); >- xhr.send(); >- } >- }, "Preflight cache should be invalidated in presence of custom header"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-method-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-method-expected.txt >deleted file mode 100644 >index 54627b157793877b3d291720478bc7398a22f772..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-method-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Preflight cache should be invalidated by changed method >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-method.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-method.htm >deleted file mode 100644 >index 058943e839d22d78e7babdb6aad0a14ce923c5e3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-method.htm >+++ /dev/null >@@ -1,48 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Preflight cache should be invalidated by changed method</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- const uuid = token(); >- const xhr = new XMLHttpRequest; >- >- async_test(function(test) { >- xhr.onerror = test.unreached_func("FAIL: Network error."); >- xhr.onload = test.step_func(function() { >- // Token reset. We can start the test now. >- assert_equals(xhr.responseText, "PASS"); >- firstRequest(); >- }); >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/reset-token.py?token=" + uuid, true); >- xhr.send(); >- >- function firstRequest() { >- xhr.onload = test.step_func(function() { >- assert_equals(xhr.responseText, "PASS: First PUT request."); >- secondRequest(); >- }); >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true); >- xhr.send(); >- } >- >- function secondRequest() { >- xhr.onload = test.step_func(function() { >- assert_equals(xhr.responseText, "PASS: Second OPTIONS request was sent."); >- test.done(); >- }); >- // Send a header not included in the inital cache. >- xhr.open("XMETHOD", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true); >- xhr.send(); >- } >- }, "Preflight cache should be invalidated by changed method"); >- >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-timeout-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-timeout-expected.txt >deleted file mode 100644 >index b5566db7458e094760e000549d6472b3e2c17043..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-timeout-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Preflight cache should be invalidated on timeout >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-timeout.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-timeout.htm >deleted file mode 100644 >index 56702c01d0e886c8151b696e1392af85a7e33b40..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-timeout.htm >+++ /dev/null >@@ -1,46 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Preflight cache should be invalidated on timeout</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- const uuid = token(); >- let xhr = new XMLHttpRequest; >- >- async_test(function(test) { >- xhr.onerror = test.unreached_func("FAIL: Network error."); >- xhr.onload = test.step_func(function() { >- // Token reset. We can start the test now. >- assert_equals(xhr.responseText, "PASS"); >- firstRequest(); >- }); >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/reset-token.py?token=" + uuid, true); >- xhr.send(); >- >- function firstRequest() { >- xhr.onload = test.step_func(function() { >- assert_equals(xhr.responseText, "PASS: First PUT request."); >- step_timeout(secondRequest, 3000); // 3 seconds >- }); >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-timeout.py?token=" + uuid, true); >- xhr.send(); >- } >- >- function secondRequest() { >- xhr.onload = test.step_func(function() { >- assert_equals(xhr.responseText, "PASS: Second OPTIONS request was sent."); >- test.done(); >- }); >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-timeout.py?token=" + uuid, true); >- xhr.send(); >- } >- }, "Preflight cache should be invalidated on timeout"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache.htm >deleted file mode 100644 >index ad38a6bdb1d9a7543a3b6606e91d4dd44427dba2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache.htm >+++ /dev/null >@@ -1,45 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Preflight cache should allow second request without preflight OPTIONS request</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- const uuid = token(); >- >- async_test(function(test) { >- const xhr = new XMLHttpRequest; >- xhr.onerror = test.unreached_func("FAIL: Network error."); >- xhr.onload = test.step_func(function() { >- // Token reset. We can start the test now. >- assert_equals(xhr.responseText, "PASS"); >- firstRequest(); >- }); >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/reset-token.py?token=" + uuid, true); >- xhr.send(); >- >- function firstRequest() { >- xhr.onload = test.step_func(function() { >- assert_equals(xhr.responseText, "PASS: First PUT request."); >- secondRequest(); >- }); >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache.py?token=" + uuid, true); >- xhr.send(); >- } >- >- function secondRequest() { >- xhr.onload = test.step_func_done(function() { >- assert_equals(xhr.responseText, "PASS: Second PUT request. Preflight worked."); >- }); >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache.py?token=" + uuid, true); >- xhr.send(); >- } >- }, "Preflight cache should allow second request"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-star-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-star-expected.txt >deleted file mode 100644 >index 1f4b437ddcfb4768dd5edd9585a05b423b171cf7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-star-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Allow star >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-star.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-star.htm >deleted file mode 100644 >index fac25e297b5152d10acf35f53536a379dd7f8c57..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-star.htm >+++ /dev/null >@@ -1,22 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests "*" setting for Access-Control-Allow-Origin header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- const xhr = new XMLHttpRequest; >- >- test(function(test) { >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-allow-star.py", false); >- >- xhr.send(); >- >- assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >- }, "Allow star"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow.htm >deleted file mode 100644 >index f7e67babdf1ad573e5be96af35fdebcea9f24c6c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow.htm >+++ /dev/null >@@ -1,22 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests CORS with Access-Control-Allow-Origin header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- test(function() { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-allow.py", false); >- >- xhr.send(); >- >- assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >- }, "Allow basic"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers-expected.txt >deleted file mode 100644 >index 75eefb54c5f41ebaadb76b48e294e7a48cc24602..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-FAIL Request with CORS-safelisted headers A network error occurred. >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers.htm >deleted file mode 100644 >index 1d570a3c93ee3621d5d91aaf4129a8b50fc8621f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers.htm >+++ /dev/null >@@ -1,32 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that CORS-safelisted request headers are permitted in cross-origin request</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- test(function() { >- const xhr = new XMLHttpRequest; >- >- xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py", false); >- >- xhr.setRequestHeader("Accept", "*"); >- xhr.setRequestHeader("Accept-Language", "ru"); >- xhr.setRequestHeader("Content-Language", "ru"); >- xhr.setRequestHeader("Content-Type", "text/plain"); >- xhr.setRequestHeader("Save-Data", "on"); >- >- xhr.send(); >- >- assert_equals(xhr.responseText, >- "Accept: *\n" + >- "Accept-Language: ru\n" + >- "Content-Language: ru\n" + >- "Content-Type: text/plain\n"); >- }, "Request with CORS-safelisted headers"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-response-headers-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-response-headers-expected.txt >deleted file mode 100644 >index d6b38baa0f0812f6ac650769818ea02bc6a6ac94..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-response-headers-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Response with CORS-safelisted headers >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-response-headers.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-response-headers.htm >deleted file mode 100644 >index c795083ece991293735b8fbacc4b796f921f7818..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-response-headers.htm >+++ /dev/null >@@ -1,31 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that CORS-safelisted response headers are permitted in cross-origin request</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- test(function() { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-whitelist-response-headers.py", false); >- xhr.send(); >- >- assert_not_equals(xhr.getResponseHeader("cache-control"), null); >- assert_not_equals(xhr.getResponseHeader("content-language"), null); >- assert_not_equals(xhr.getResponseHeader("content-type"), null); >- assert_not_equals(xhr.getResponseHeader("expires"), null); >- assert_not_equals(xhr.getResponseHeader("last-modified"), null); >- assert_not_equals(xhr.getResponseHeader("pragma"), null); >- assert_equals(xhr.getResponseHeader("x-webkit"), null); >- >- assert_not_equals(xhr.getAllResponseHeaders().match("en"), null); >- assert_equals(xhr.getAllResponseHeaders().match("foobar"), null); >- }, "Response with CORS-safelisted headers"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied-expected.txt >deleted file mode 100644 >index c4d14134c039a5df678380334f41c7c85e1c0a65..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >-CONSOLE MESSAGE: line 26: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 26: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >- >-PASS Same-origin request accepted >-PASS Cross-origin request denied >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied.htm >deleted file mode 100644 >index 924bdd55a6990df38b1715354521eab38ea61516..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied.htm >+++ /dev/null >@@ -1,34 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests CORS denying resource without Access-Control-Allow-Origin header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- const path = "/XMLHttpRequest/resources/access-control-basic-denied.py"; >- >- test(function() { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_ORIGIN + path, false); >- xhr.send(); >- assert_equals(xhr.status, 200); >- }, "Same-origin request accepted"); >- >- test(function() { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + path, false); >- try { >- xhr.send(); >- assert_unreached("Error should occur here"); >- } catch(e) { >- assert_equals(xhr.status, 0); >- } >- }, "Cross-origin request denied"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple-expected.txt >deleted file mode 100644 >index e0c8ccbf9225465a82b2be29450fb245bd325106..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Preflighted cross-origin request denied >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple.htm >deleted file mode 100644 >index ccd9f7cab033f4f02398e943537bbb690d83ec02..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple.htm >+++ /dev/null >@@ -1,31 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests CORS denying preflighted request to resource without CORS headers for OPTIONS</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- test(function() { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-options-not-supported.py", false); >- >- // Non-CORS-safelisted header >- xhr.setRequestHeader("x-test", "foobar"); >- >- // This fails because the server-side script is not prepared for an OPTIONS request >- try { >- xhr.send(); >- } catch(e) { >- assert_equals(xhr.status, 0); >- return; >- } >- assert_unreached("Preflighted request was not denied."); >- }, "Preflighted cross-origin request denied"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type-expected.txt >deleted file mode 100644 >index bb2408d88c76a1b931d8ad779fab959d0eb80f06..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: line 26: Request header field Content-Type is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: line 26: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-put-allow.py due to access control checks. >- >-PASS Deny cross-origin request with non-CORS-safelisted content type >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type.htm >deleted file mode 100644 >index bff0cf569c560781edb3edaeda3739ef49026e3c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type.htm >+++ /dev/null >@@ -1,35 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests cross-origin request with non-CORS-safelisted content type</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- test(() => { >- const xhr = new XMLHttpRequest; >- >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-put-allow.py", false); >- xhr.setRequestHeader("Content-Type", "text/plain"); >- xhr.send("PASS: PUT data received"); >- >- assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\nPASS: PUT data received"); >- >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-put-allow.py", false); >- xhr.setRequestHeader("Content-Type", "application/xml"); >- >- try { >- xhr.send("FAIL: PUT data received"); >- } catch(e) { >- assert_equals(xhr.status, 0, "Cross-domain access was denied in 'send'."); >- return; >- } >- assert_unreached("Cross-domain access was not denied in 'send'."); >- }, "Deny cross-origin request with non-CORS-safelisted content type"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-success-no-content-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-success-no-content-type-expected.txt >deleted file mode 100644 >index b5cf9b1f0b2571eca20c917c672c5a0348282744..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-success-no-content-type-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS POST request with text content and no Content-Type header >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-success-no-content-type.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-success-no-content-type.htm >deleted file mode 100644 >index 8785a44504b6ac4b8a2d45e8cea8d5dc5eb9cd0a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-success-no-content-type.htm >+++ /dev/null >@@ -1,26 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that POST requests with text content and no content-type set explicitly don't generate a preflight request.</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test(function(test) { >- const xhr = new XMLHttpRequest; >- >- xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-options-not-supported.py"); >- >- xhr.onerror = test.unreached_func("Network error."); >- >- xhr.onload = test.step_func_done(function() { >- assert_equals(xhr.status, 200); >- }); >- >- xhr.send("Test"); >- }, "POST request with text content and no Content-Type header"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt >deleted file mode 100644 >index 678c53a5e7306ad069cfeeaf0b6f01c7373dcf18..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS Same-origin request with non-safelisted content type succeeds >-PASS CORS request with non-safelisted content type sends preflight and fails >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type.htm >deleted file mode 100644 >index 9867c796d68dadf8f83bd7e159e228b66b15b6cf..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type.htm >+++ /dev/null >@@ -1,42 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Non-CORS-safelisted value in the Content-Type header results in a request preflight</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- test(function() { >- const xhr = new XMLHttpRequest; >- >- xhr.open("POST", get_host_info().HTTP_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-options-not-supported.py", false); >- >- xhr.setRequestHeader("Content-Type", "application/xml"); >- >- xhr.send(); >- >- assert_equals(xhr.status, 200, "Same-origin access doesn't issue preflight; not denied."); >- }, "Same-origin request with non-safelisted content type succeeds"); >- >- test(function() { >- const xhr = new XMLHttpRequest; >- >- xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-options-not-supported.py", false); >- >- xhr.setRequestHeader("Content-Type", "application/xml"); >- >- try { >- xhr.send(); >- } catch(e) { >- assert_equals(xhr.status, 0, "Cross-domain access was denied in 'send'."); >- return; >- } >- assert_unreached("Cross-domain access was not denied in 'send'."); >- }, "CORS request with non-safelisted content type sends preflight and fails"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied-expected.txt >deleted file mode 100644 >index 155457e96adb14bbe5c885788f12dde51ca315ea..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >- >-PASS Tests async XHR preflight denial due to lack of CORS headers >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied.htm >deleted file mode 100644 >index d02bdf0dcdee49638a77e02c4f4ad56a066ee63f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied.htm >+++ /dev/null >@@ -1,31 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests async XHR preflight denial due to lack of CORS headers</title> >- <!--The original test addressed a more specific issue involving caching, >- but that issue has since been resolved. >- We maintain this test as a basic test of invalid preflight denial. >- Please refer to the comment in the following link for more information: >- https://chromium-review.googlesource.com/c/chromium/src/+/630338#message-0280542b95c9b0f82b121dc373320c04fcaece31 >- --> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test((test) => { >- const xhr = new XMLHttpRequest; >- xhr.onerror = test.step_func_done(() => { >- assert_equals(xhr.status, 0); >- }); >- >- xhr.onload = test.unreached_func("Request succeeded unexpectedly"); >- >- xhr.open("FOO", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-denied.py"); >- xhr.send(); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-header-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-header-denied-expected.txt >deleted file mode 100644 >index 1547f35691bc034bdd00d086f9a2a4ee24d9ec93..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-header-denied-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=e3414997-b8d9-44c5-ac25-b008d36bee33&command=header. Request header field x-test is not allowed by Access-Control-Allow-Headers. >- >-PASS Async request denied at preflight >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-header-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-header-denied.htm >deleted file mode 100644 >index 84a60eb6f635fcba99bfbf35230e36195328924b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-header-denied.htm >+++ /dev/null >@@ -1,39 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Async request denied at preflight because of non-CORS-safelisted header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- const uuid = token(); >- const url = get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-preflight-denied.py?token=" + uuid; >- >- async_test((test) => { >- let xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=reset", false); >- xhr.send(); >- >- xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=header", true); >- xhr.setRequestHeader("x-test", "foo"); >- >- xhr.onload = test.unreached_func( >- "Cross-domain access with custom header allowed without throwing exception"); >- >- xhr.onerror = test.step_func_done(() => { >- xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=complete", false); >- xhr.send(); >- assert_equals(xhr.responseText, "Request successfully blocked."); >- }); >- >- xhr.send(); >- }, "Async request denied at preflight"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-method-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-method-denied-expected.txt >deleted file mode 100644 >index f06137b3afb90aa6b7c4bb558035d8a79fd6c81c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-method-denied-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=1962aedd-a0e5-4366-a927-abb4eb2273ff&command=method. Method DELETE is not allowed by Access-Control-Allow-Methods. >- >-PASS Async request denied at preflight >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-method-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-method-denied.htm >deleted file mode 100644 >index eb36110f4961a91e117cbb0a7c8e50b652d000a7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-method-denied.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Async request denied at preflight because of non-CORS-safelisted method</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- const uuid = token(); >- const url = get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-preflight-denied.py?token=" + uuid; >- >- async_test((test) => { >- let xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=reset", false); >- xhr.send(); >- >- xhr = new XMLHttpRequest; >- xhr.open("DELETE", url + "&command=method", true); >- >- xhr.onload = test.unreached_func( >- "Cross-domain access with non-CORS-safelisted method allowed without throwing exception"); >- >- xhr.onerror = test.step_func_done(() => { >- xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=complete", false); >- xhr.send(); >- assert_equals(xhr.responseText, "Request successfully blocked."); >- }); >- >- xhr.send(); >- }, "Async request denied at preflight"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-not-supported-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-not-supported-expected.txt >deleted file mode 100644 >index 02b7c9ccf92954bcb0fd63e54ea2e009f93b18bc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-not-supported-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=9eb4bbeb-4ea2-4594-a908-491a02378bd9. Method PUT is not allowed by Access-Control-Allow-Methods. >- >-PASS Async PUT request denied at preflight >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-not-supported.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-not-supported.htm >deleted file mode 100644 >index e1607d4389ae143a8ac22fc565d24a3d90afa1c2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-not-supported.htm >+++ /dev/null >@@ -1,37 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Async PUT request denied at preflight</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-const uuid = token(); >-const url = get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-preflight-denied.py?token=" + uuid; >- >-async_test((test) => { >- let xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=reset", false); >- xhr.send(); >- >- xhr = new XMLHttpRequest; >- xhr.open("PUT", url, true); >- >- xhr.onload = test.unreached_func("Cross-domain access allowed unexpectedly."); >- >- xhr.onerror = test.step_func_done(() => { >- xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=complete", false); >- xhr.send(); >- assert_equals(xhr.responseText, "Request successfully blocked."); >- }); >- >- xhr.send(); >-}); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-async-expected.txt >deleted file mode 100644 >index 05dfd478d2c641aefe8db20d64991c5dc5a61b33..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-async-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS CORS async request with URL credentials >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-async.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-async.htm >deleted file mode 100644 >index d9ccc102826342ea9de4de328020657f06f1eab2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-async.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests proper handling of cross-origin async request with credentials</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test((test) => { >- const xhr = new XMLHttpRequest; >- >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-auth-basic.py?uid=fooUser", >- true, "fooUser", "barPass"); >- xhr.withCredentials = true; >- >- xhr.onerror = test.unreached_func("Unexpected error."); >- >- xhr.onload = test.step_func_done(() => { >- assert_equals(xhr.status, 401, "Request raises HTTP 401: Unauthorized error."); >- }); >- >- xhr.send(); >- }, "CORS async request with URL credentials"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-sync-expected.txt >deleted file mode 100644 >index d61e4eb2e79ac9676b0d8aabee5e23561a2487c9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-sync-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS CORS sync request with URL credentials >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-sync.htm >deleted file mode 100644 >index d0b990181608938528e6327f6bfcd1ed2eb37482..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-sync.htm >+++ /dev/null >@@ -1,24 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests proper handling of cross-origin sync request with credentials</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- test(() => { >- const xhr = new XMLHttpRequest; >- >- xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-auth-basic.py?uid=fooUser", false, "fooUser", "barPass"); >- >- xhr.withCredentials = true; >- >- xhr.send(); >- >- assert_equals(xhr.status, 401, "Request raises HTTP 401: Unauthorized error."); >- }, "CORS sync request with URL credentials"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-async-expected.txt >deleted file mode 100644 >index 185c56afe5065ad68cf85bcd6fe5b8d7812c0165..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-async-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Preflighted async request with custom header >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-async.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-async.htm >deleted file mode 100644 >index 6e05cfe385c2ed5819283f30bf95b5a31310b5af..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-async.htm >+++ /dev/null >@@ -1,35 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Test that async CORS requests with custom headers are sent with OPTIONS preflight</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-async_test((test) => { >- let xhr = new XMLHttpRequest; >- const uuid = token(); >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/reset-token.py?token=" + uuid, false); >- xhr.send(); >- >- xhr = new XMLHttpRequest; >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/no-custom-header-on-preflight.py?token=" + uuid); >- xhr.setRequestHeader("x-test", "foobar"); >- >- xhr.onerror = test.unreached_func("Unexpected error"); >- >- xhr.onload = test.step_func_done(() => { >- assert_equals(xhr.responseText, "PASS"); >- }); >- >- xhr.send(); >-}, "Preflighted async request with custom header"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-sync-expected.txt >deleted file mode 100644 >index cbac64da75cbb8339aa3fc135a4ad65f2aa0d9df..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-sync-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Preflighted sync request with custom header >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-sync.htm >deleted file mode 100644 >index 85fe446ceee82ebce49209aa090b32a91fcb579e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-sync.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Test that sync CORS requests with custom headers are not sent with OPTIONS preflight</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- test(function() { >- let xhr = new XMLHttpRequest; >- const uuid = token(); >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/reset-token.py?token=" + uuid, false); >- xhr.send(); >- >- xhr = new XMLHttpRequest; >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/no-custom-header-on-preflight.py?token=" + uuid, false); >- xhr.setRequestHeader("x-test", "foobar"); >- xhr.send(); >- assert_equals(xhr.responseText, "PASS"); >- }, "Preflighted sync request with custom header"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-lowercase-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-lowercase-expected.txt >deleted file mode 100644 >index 6bf6de610a2ceb07097efc244ca6490959127045..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-lowercase-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Request with uppercase header set >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-lowercase.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-lowercase.htm >deleted file mode 100644 >index d88cac8f967024f0950a30db72f5aaa570e3023a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-lowercase.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Access-Control-Request-Headers values should be lowercase</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test(function(test) { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-preflight-request-header-lowercase.py"); >- >- xhr.setRequestHeader("X-Test", "foobar"); >- >- xhr.onerror = test.unreached_func("Error occurred."); >- >- xhr.onload = test.step_func_done(function() { >- assert_equals(xhr.status, 200); >- assert_equals(xhr.responseText, "PASS"); >- }); >- >- xhr.send(); >- }, "Request with uppercase header set"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-sorted-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-sorted-expected.txt >deleted file mode 100644 >index bddfb84ddc53d9a88af1fd4ac17d0aa26b63b944..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-sorted-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Tests that Access-Control-Request-Headers are sorted. >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-sorted.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-sorted.htm >deleted file mode 100644 >index 2423b80cd8e223cddcb24c55bd81b6fea772c26d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-sorted.htm >+++ /dev/null >@@ -1,28 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >-<title>Tests that Access-Control-Request-Headers are sorted.</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<script src="/common/get-host-info.sub.js"></script> >-</head> >-<body> >-<script> >-async_test((test) => { >- const xhr = new XMLHttpRequest(); >- const url = get_host_info().HTTP_REMOTE_ORIGIN + '/XMLHttpRequest/resources/access-control-preflight-request-header-sorted.py'; >- xhr.open('GET', url); >- xhr.setRequestHeader("X-Custom-Test", "foobar"); >- xhr.setRequestHeader("X-Custom-ua", "foobar"); >- xhr.setRequestHeader("X-Custom-V", "foobar"); >- xhr.setRequestHeader("X-Custom-s", "foobar"); >- xhr.setRequestHeader("X-Custom-U", "foobar"); >- xhr.onerror = test.unreached_func('xhr failure'); >- xhr.onload = test.step_func_done(() => { >- assert_equals(xhr.responseText, 'PASS'); >- }); >- xhr.send(); >-}); >-</script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-headers-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-headers-origin-expected.txt >deleted file mode 100644 >index de28034fa0d878159d72fa75e7cdffd041bf2e9b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-headers-origin-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS 'Origin' should not be included in CORS Request-Headers >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-headers-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-headers-origin.htm >deleted file mode 100644 >index 67aeda9eeee828e123887eeddb3f4f42638e95e2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-headers-origin.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Test that 'Origin' is not included in Access-Control-Request-Headers in a preflight request</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-async_test((test) => { >- const xhr = new XMLHttpRequest; >- const url = get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-preflight-request-headers-origin.py"; >- >- xhr.open("GET", url); >- xhr.setRequestHeader("x-pass", "PASS"); >- >- xhr.onerror = test.unreached_func("Unexpected error"); >- >- xhr.onload = test.step_func_done(() => { >- assert_equals(xhr.responseText, "PASS"); >- }); >- >- xhr.send(); >-}, "'Origin' should not be included in CORS Request-Headers"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301-expected.txt >deleted file mode 100644 >index 784532bd9adee28dd66d4a864f333f99bfd49d33..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=301 due to access control checks. >- >-PASS Request with 301 preflight response >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301.htm >deleted file mode 100644 >index 669f7db80d2c57a4988bdada5e5856f3816a62ef..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301.htm >+++ /dev/null >@@ -1,28 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that preflight requests returning invalid 301 status code result in error.</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test((test) => { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=301"); >- >- xhr.setRequestHeader("x-pass", "pass"); >- >- xhr.onerror = test.step_func_done(function() { >- assert_equals(xhr.status, 0); >- }); >- >- xhr.onload = test.unreached_func("Invalid 301 response to preflight should result in error."); >- >- xhr.send(); >- }, "Request with 301 preflight response"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400-expected.txt >deleted file mode 100644 >index 95c44a23f9bb9e8f51b2e3598ebbffee934f82d9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=400 due to access control checks. >- >-PASS Request with 400 preflight response >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400.htm >deleted file mode 100644 >index 38520999783c62ddcf3577846b1d94161489a2f4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400.htm >+++ /dev/null >@@ -1,28 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that preflight requests returning invalid 400 status code result in error.</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test((test) => { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=400"); >- >- xhr.setRequestHeader("x-pass", "pass"); >- >- xhr.onerror = test.step_func_done(function() { >- assert_equals(xhr.status, 0); >- }); >- >- xhr.onload = test.unreached_func("Invalid 400 response to preflight should result in error."); >- >- xhr.send(); >- }, "Request with 400 preflight response"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501-expected.txt >deleted file mode 100644 >index 806e9c7ef93e7b0b7396075288124bc66430141d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=501 due to access control checks. >- >-PASS Request with 501 preflight response >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501.htm >deleted file mode 100644 >index 5f3c5e62c6118001f39cfc68bd14d7f3ab987f98..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501.htm >+++ /dev/null >@@ -1,28 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that preflight requests returning invalid 501 status code result in error.</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test((test) => { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=501"); >- >- xhr.setRequestHeader("x-pass", "pass"); >- >- xhr.onerror = test.step_func_done(function() { >- assert_equals(xhr.status, 0); >- }); >- >- xhr.onload = test.unreached_func("Invalid 501 response to preflight should result in error."); >- >- xhr.send(); >- }, "Request with 501 preflight response"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-must-not-contain-cookie-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-must-not-contain-cookie-expected.txt >deleted file mode 100644 >index 8cd8c38427bc82d8246fcbdc12fdf39fe29dd5f4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-must-not-contain-cookie-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-FAIL Preflight request must not contain any cookie header assert_equals: expected "COOKIE" but got "" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-must-not-contain-cookie.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-must-not-contain-cookie.htm >deleted file mode 100644 >index c7cb5cde42aeacce9e6e839ea8240698379d6f17..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-must-not-contain-cookie.htm >+++ /dev/null >@@ -1,57 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Preflight request must not contain any cookie header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test((test) => { >- function setupCookie() { >- const xhr = new XMLHttpRequest; >- // Delete all preexisting cookies and set a cookie named "foo" >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-cookie.py?cookie_name=foo"); >- xhr.withCredentials = true; >- xhr.send(); >- xhr.onerror = test.unreached_func("Unexpected error."); >- xhr.onload = test.step_func(() => { >- assert_equals(xhr.status, 200); >- sendPreflightedRequest(); >- }); >- } >- >- function sendPreflightedRequest() { >- const xhr = new XMLHttpRequest; >- // Request to server-side file fails if cookie is included in preflight >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-preflight-request-must-not-contain-cookie.py"); >- xhr.withCredentials = true; >- xhr.setRequestHeader("X-Proprietary-Header", "foo"); >- xhr.onerror = test.unreached_func("Unexpected error."); >- xhr.onload = test.step_func(() => { >- assert_equals(xhr.status, 200); >- assert_equals(xhr.responseText, "COOKIE"); >- cleanupCookies(); >- }); >- xhr.send(); >- } >- >- function cleanupCookies() { >- const xhr = new XMLHttpRequest; >- // Delete all cookies >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-cookie.py"); >- xhr.withCredentials = true; >- xhr.send(); >- xhr.onerror = test.unreached_func("Unexpected error."); >- xhr.onload = test.step_func_done(() => {}); >- } >- >- setupCookie(); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-header-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-header-denied-expected.txt >deleted file mode 100644 >index 8efcbeb3d6550f3173afa73a4349e972433e269d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-header-denied-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >-CONSOLE MESSAGE: line 26: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=aaa7efac-176b-4187-a85f-9d06157bf792&command=header. Request header field x-test is not allowed by Access-Control-Allow-Headers. >- >-PASS Sync request denied at preflight >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-header-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-header-denied.htm >deleted file mode 100644 >index 422c625e99c38de5190e34024b826663f28e0675..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-header-denied.htm >+++ /dev/null >@@ -1,39 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Sync request denied at preflight because of non-CORS-safelisted header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-const uuid = token(); >-const url = get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-preflight-denied.py?token=" + uuid; >- >-test(() => { >- let xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=reset", false); >- xhr.send(); >- >- xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=header", false); >- xhr.setRequestHeader("x-test", "foo"); >- >- try { >- xhr.send(); >- } catch(e) { >- xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=complete", false); >- xhr.send(); >- assert_equals(xhr.responseText, "Request successfully blocked."); >- return; >- } >- >- assert_unreached("Cross-domain access with custom header allowed without throwing exception"); >-}, "Sync request denied at preflight"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-method-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-method-denied-expected.txt >deleted file mode 100644 >index 052b20978f04f8e76b3db9512a0a74836a91a590..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-method-denied-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >-CONSOLE MESSAGE: line 25: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=b70429f0-0dd0-44b0-a5e8-dc0b7d355e72&command=method. Method DELETE is not allowed by Access-Control-Allow-Methods. >- >-PASS Sync request denied at preflight because of non-CORS-safelisted method >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-method-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-method-denied.htm >deleted file mode 100644 >index cd2999a82a5a8caa61b6a78b453720532a5d2745..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-method-denied.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Sync request denied at preflight because of non-CORS-safelisted method</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-const uuid = token(); >-const url = get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-preflight-denied.py?token=" + uuid; >- >-test(() => { >- let xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=reset", false); >- xhr.send(); >- >- xhr = new XMLHttpRequest; >- xhr.open("DELETE", url + "&command=method", false); >- >- try { >- xhr.send(); >- } catch(e) { >- xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=complete", false); >- xhr.send(); >- assert_equals(xhr.responseText, "Request successfully blocked."); >- return; >- } >- >- assert_unreached("Cross-domain access with non-CORS-safelisted method allowed without throwing exception"); >-}); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-not-supported-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-not-supported-expected.txt >deleted file mode 100644 >index 762f698728501cbc78a951687e885f19d5e3d686..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-not-supported-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >-CONSOLE MESSAGE: line 25: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=84ccb17b-d065-4a34-b161-0855f4d57d96. Method PUT is not allowed by Access-Control-Allow-Methods. >- >-PASS Sync PUT request denied at preflight >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-not-supported.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-not-supported.htm >deleted file mode 100644 >index a0b079e078913fadd8c821b28f3035c2e8ed1329..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-not-supported.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Sync PUT request denied at preflight</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-const uuid = token(); >-const url = get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-preflight-denied.py?token=" + uuid; >- >-test(() => { >- let xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=reset", false); >- xhr.send(); >- >- xhr = new XMLHttpRequest; >- xhr.open("PUT", url, false); >- >- try { >- xhr.send(""); >- } catch(e) { >- xhr = new XMLHttpRequest; >- xhr.open("GET", url + "&command=complete", false); >- xhr.send(); >- assert_equals(xhr.responseText, "Request successfully blocked."); >- return; >- } >- >- assert_unreached("Cross-domain access allowed without throwing exception"); >-}); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-recursive-failed-request-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-recursive-failed-request-expected.txt >deleted file mode 100644 >index 92c94c853ce89f6b7ba52809cbfe5c5ab5e72dd7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-recursive-failed-request-expected.txt >+++ /dev/null >@@ -1,23 +0,0 @@ >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >- >-PASS Recursively repeated CORS requests with failed preflights should never result in unexpected behavior >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-recursive-failed-request.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-recursive-failed-request.htm >deleted file mode 100644 >index e29a34a6d03e6bcbf7fa4746925f91d7cff69a16..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-recursive-failed-request.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Recursively repeated CORS requests with failed preflights should never result in unexpected behavior</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-let requestCount = 0; >-const requestMax = 10; >- >-async_test((test) => { >- function preflightRequest() { >- const xhr = new XMLHttpRequest; >- >- xhr.onload = test.unreached_func("Request succeeded unexpectedly."); >- >- xhr.onerror = test.step_func(() => { >- assert_equals(xhr.status, 0); >- if (++requestCount >= requestMax) { >- test.done(); >- return; >- } >- preflightRequest(); >- }); >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-basic-denied.py"); >- xhr.send(); >- } >- >- preflightRequest(); >-}); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body-expected.txt >deleted file mode 100644 >index 974e0b5850b07504aac111e8568f2ae6d56d6017..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Tests that XHR doesn't prepend the body from CORS preflight response to the actual response >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body-sync-expected.txt >deleted file mode 100644 >index ae42908489fd303bbe37a894872262e0f71dadf0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body-sync-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Tests body from CORS preflight response and actual response with sync request >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body-sync.htm >deleted file mode 100644 >index 559b7d21ad34309dd54f9cb9cb86fa620e4c4496..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body-sync.htm >+++ /dev/null >@@ -1,25 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests body from CORS preflight response and actual response with sync request</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-test(() => { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN+ >- "/XMLHttpRequest/resources/access-control-allow-with-body.py", false); >- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); >- xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); >- xhr.send(); >- >- assert_equals(xhr.status, 200); >- assert_equals(xhr.responseText, "PASS"); >-}); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body.htm >deleted file mode 100644 >index ab89cefd76ed2cf2da37672ce9da567ca188c02a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that XHR doesn't prepend the body from CORS preflight response to the actual response</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-async_test((test) => { >- const xhr = new XMLHttpRequest; >- >- xhr.onerror = test.unreached_func("Unexpected error."); >- >- xhr.onload = test.step_func_done(() => { >- assert_equals(xhr.status, 200); >- assert_equals(xhr.responseText, "PASS"); >- }); >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/access-control-allow-with-body.py"); >- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); >- xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); >- xhr.send(); >-}); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-exposed-headers-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-exposed-headers-expected.txt >deleted file mode 100644 >index 5a0379a0e419e9a7aa0ce52e88518c58e6bb60e2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-exposed-headers-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Test CORS response with 'Access-Control-Expose-Headers' header >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-exposed-headers.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-exposed-headers.htm >deleted file mode 100644 >index 23cd0fbb1c886cc59a3d1f1e03c10076d0e523fd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-exposed-headers.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Test CORS response with 'Access-Control-Expose-Headers' header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-async_test((test) => { >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >- "/XMLHttpRequest/resources/pass.txt?pipe=" + >- "header(Cache-Control,no-cache)|" + >- "header(Access-Control-Max-Age,0)|" + >- "header(Access-Control-Allow-Origin,*)|" + >- "header(X-foo,BAR)|" + >- "header(x-test,TEST)|" + >- "header(Access-Control-Expose-Headers,x-Foo)|", >- "header(Content-Type,text/html)"); >- >- xhr.onerror = test.unreached_func("Unexpected error"); >- >- xhr.onload = test.step_func_done(() => { >- assert_equals(xhr.status, 200); >- assert_equals(xhr.getResponseHeader("X-FOO"), "BAR"); >- assert_equals(xhr.getResponseHeader("x-foo"), "BAR"); >- assert_equals(xhr.getResponseHeader("x-test"), null); >- assert_equals(xhr.responseText, "PASS\n"); >- }); >- >- xhr.send(); >-}); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow-expected.txt >deleted file mode 100644 >index 4c277a0a34cc83353ba4a85ce55a6f81008a85b1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >- >-PASS Tests that sandboxed iframe has CORS XHR access to a server that accepts all domains >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow-origin-null-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow-origin-null-expected.txt >deleted file mode 100644 >index 05845932e93eda4e07968be8c80ef7d8eace631f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow-origin-null-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >- >-PASS Tests that sandboxed iframe has CORS XHR access to a server that accepts null domain >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow-origin-null.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow-origin-null.htm >deleted file mode 100644 >index 5c647dfa270d72577c64fffec73ad03644c60e74..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow-origin-null.htm >+++ /dev/null >@@ -1,32 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that sandboxed iframe has CORS XHR access to a server that accepts null domain</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-async_test((test) => { >- window.addEventListener("message", test.step_func((evt) => { >- if (evt.data === "ready") { >- document.getElementById("frame").contentWindow.postMessage( >- get_host_info().HTTP_ORIGIN + >- "/XMLHttpRequest/resources/pass.txt?pipe=" + >- "header(Cache-Control,no-store)|" + >- "header(Content-Type,text/plain)|" + >- "header(Access-Control-Allow-Credentials,true)|" + >- "header(Access-Control-Allow-External,true)|" + >- "header(Access-Control-Allow-Origin,null)", "*"); >- } else { >- assert_equals(evt.data.trim(), "PASS"); >- test.done(); >- } >- }), false); >-}); >- </script> >- <iframe id="frame" sandbox="allow-scripts" src="/XMLHttpRequest/resources/access-control-sandboxed-iframe.html"> >- </iframe> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow.htm >deleted file mode 100644 >index 21413f3866399b45e535f7e567d6ff9a01e48b07..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow.htm >+++ /dev/null >@@ -1,32 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that sandboxed iframe has CORS XHR access to a server that accepts all domains</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-async_test((test) => { >- window.addEventListener("message", test.step_func((evt) => { >- if (evt.data === "ready") { >- document.getElementById("frame").contentWindow.postMessage( >- get_host_info().HTTP_ORIGIN + >- "/XMLHttpRequest/resources/pass.txt?pipe=" + >- "header(Cache-Control,no-store)|" + >- "header(Content-Type,text/plain)|" + >- "header(Access-Control-Allow-Credentials,true)|" + >- "header(Access-Control-Allow-External,true)|" + >- "header(Access-Control-Allow-Origin,*)", "*"); >- } else { >- assert_equals(evt.data.trim(), "PASS"); >- test.done(); >- } >- }), false); >-}); >- </script> >- <iframe id="frame" sandbox="allow-scripts" src="/XMLHttpRequest/resources/access-control-sandboxed-iframe.html"> >- </iframe> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-expected.txt >deleted file mode 100644 >index da4536648715d8f9c9621cbe7c4e6c33b54c5a0c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >-CONSOLE MESSAGE: line 12: Origin null is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 12: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/pass.txt?pipe=header(Cache-Control,no-store)|header(Content-Type,text/plain) due to access control checks. >- >- >-PASS Check that path exists and is accessible via local XHR request >-PASS Sandboxed iframe is denied access to path >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt >deleted file mode 100644 >index 2da47a4a1983498ae94021f54c9ce874b0118ec1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >-CONSOLE MESSAGE: line 12: Origin null is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 12: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/pass.txt?pipe=header(Cache-Control,no-store)|header(Content-Type,text/plain)header(Access-Control-Allow-Credentials,true)|header(Access-Control-Allow-Origin,http://localhost:8800) due to access control checks. >- >- >-PASS Check that path exists and is accessible via CORS XHR request >-PASS Sandboxed iframe is denied CORS access to server that allows parent origin >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard.htm >deleted file mode 100644 >index 7c375f606684b663b940d3f126aafc6d66703242..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard.htm >+++ /dev/null >@@ -1,43 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that sandboxed iframe does not have CORS XHR access to server with "Access-Control-Allow-Origin" set to the original origin</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-const path = "/XMLHttpRequest/resources/pass.txt?pipe=" + >- "header(Cache-Control,no-store)|" + >- "header(Content-Type,text/plain)" + >- "header(Access-Control-Allow-Credentials,true)|" + >- "header(Access-Control-Allow-Origin," + get_host_info().HTTP_ORIGIN + ")"; >- >-async_test((test) => { >- const xhr = new XMLHttpRequest; >- xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + path); >- xhr.send(); >- xhr.onerror = test.unreached_func("Unexpected error"); >- xhr.onload = test.step_func_done(() => { >- assert_equals(xhr.status, 200); >- assert_equals(xhr.responseText.trim(), "PASS"); >- }); >-}, "Check that path exists and is accessible via CORS XHR request"); >- >-async_test((test) => { >- window.addEventListener("message", test.step_func((evt) => { >- if (evt.data === "ready") { >- document.getElementById("frame").contentWindow.postMessage( >- get_host_info().HTTP_REMOTE_ORIGIN + path, "*"); >- } else { >- assert_equals(evt.data, "Exception thrown. Sandboxed iframe XHR access was denied in 'send'."); >- test.done(); >- } >- }), false); >-}, "Sandboxed iframe is denied CORS access to server that allows parent origin"); >- </script> >- <iframe id="frame" sandbox="allow-scripts" src="/XMLHttpRequest/resources/access-control-sandboxed-iframe.html"> >- </iframe> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied.htm >deleted file mode 100644 >index a87dd7d1f255482f8b1b21d0d99f1107812b3e91..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied.htm >+++ /dev/null >@@ -1,41 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Tests that sandboxed iframe does not have CORS XHR access to its server</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >-const path = "/XMLHttpRequest/resources/pass.txt?pipe=" + >- "header(Cache-Control,no-store)|" + >- "header(Content-Type,text/plain)"; >- >-async_test((test) => { >- const xhr = new XMLHttpRequest; >- xhr.open("GET", get_host_info().HTTP_ORIGIN + path); >- xhr.send(); >- xhr.onerror = test.unreached_func("Unexpected error"); >- xhr.onload = test.step_func_done(() => { >- assert_equals(xhr.status, 200); >- assert_equals(xhr.responseText.trim(), "PASS"); >- }); >-}, "Check that path exists and is accessible via local XHR request"); >- >-async_test((test) => { >- window.addEventListener("message", test.step_func((evt) => { >- if (evt.data === "ready") { >- document.getElementById("frame").contentWindow.postMessage( >- get_host_info().HTTP_ORIGIN + path, "*"); >- } else { >- assert_equals(evt.data, "Exception thrown. Sandboxed iframe XHR access was denied in 'send'."); >- test.done(); >- } >- }), false); >-}, "Sandboxed iframe is denied access to path"); >- </script> >- <iframe id="frame" sandbox="allow-scripts" src="/XMLHttpRequest/resources/access-control-sandboxed-iframe.html"> >- </iframe> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/allow-lists-starting-with-comma-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/allow-lists-starting-with-comma-expected.txt >deleted file mode 100644 >index c40430150447b2064e11ae458d8ade993778a5ba..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/allow-lists-starting-with-comma-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Allow lists starting with a comma should be parsed correctly >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/allow-lists-starting-with-comma.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/allow-lists-starting-with-comma.htm >deleted file mode 100644 >index 4a4e5e2218c731dea528c4c521d8192c123bc2c4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/allow-lists-starting-with-comma.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>Allow lists starting with a comma should be parsed correctly</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/get-host-info.sub.js"></script> >- </head> >- <body> >- <script type="text/javascript"> >- async_test(function(test) { >- const client = new XMLHttpRequest(); >- let url = "XMLHttpRequest/resources/access-control-allow-lists.py?headers=,y-lol,x-print,%20,,,y-print&origin=" + >- get_host_info().HTTP_ORIGIN; >- client.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + '/' + url, false); >- client.setRequestHeader('x-print', 'unicorn') >- client.setRequestHeader('y-print', 'narwhal') >- // Sending GET request with custom headers >- assert_equals(client.send(null), undefined); >- const response = JSON.parse(client.response); >- assert_equals(response['x-print'], "unicorn"); >- assert_equals(response['y-print'], "narwhal"); >- >- url = "XMLHttpRequest/resources/access-control-allow-lists.py?methods=,,PUT,GET&origin=" + >- get_host_info().HTTP_ORIGIN; >- client.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + '/' + url, false); >- // Sending PUT request >- assert_equals(client.send(null), undefined); >- test.done(); >- }, "Allow lists starting with a comma should be parsed correctly"); >- </script> >- </body> >- </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/anonymous-mode-unsupported-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/anonymous-mode-unsupported-expected.txt >deleted file mode 100644 >index f68d75ba40862eaecb319dbc92bf3b09c7f99cfd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/anonymous-mode-unsupported-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: anonymous mode unsupported >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/anonymous-mode-unsupported.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/anonymous-mode-unsupported.htm >deleted file mode 100644 >index f995ec2a94e2206c06312eed2cd7ee11fa245dac..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/anonymous-mode-unsupported.htm >+++ /dev/null >@@ -1,40 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: anonymous mode unsupported</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- </head> >- <body> >- <div id="log"></div> >- <script> >- /* >- Older versions of the XMLHttpRequest spec had an 'anonymous' mode >- The point of this mode was to handle same-origin requests like other-origin requests, >- i.e. require preflight, drop authentication data (cookies and HTTP auth) >- Also the Origin: and Referer: headers would not be sent >- >- This mode was dropped due to lack of implementations and interest, >- and this test is here just to assert failure if any implementation >- supports this based on an older spec version. >- */ >- document.cookie = 'test=anonymous-mode-unsupported' >- test = async_test(); >- test.add_cleanup(function(){ >- // make sure we clean up the cookie again to avoid confusing other tests.. >- document.cookie = 'test=;expires=Fri, 28 Feb 2014 07:25:59 GMT'; >- }) >- test.step(function() { >- var client = new XMLHttpRequest({anonymous:true}) >- client.open("GET", "resources/inspect-headers.py?filter_name=cookie") >- client.onreadystatechange = test.step_func(function(){ >- if(client.readyState === 4){ >- assert_equals(client.responseText, 'Cookie: test=anonymous-mode-unsupported\n', 'The deprecated anonymous:true should be ignored, cookie sent anyway') >- test.done(); >- } >- }); >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/data-uri-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/data-uri-expected.txt >deleted file mode 100644 >index d53f48327be9b6abd4ada141b7c00063aec2bd62..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/data-uri-expected.txt >+++ /dev/null >@@ -1,12 +0,0 @@ >- >-PASS XHR method GET with MIME type text/plain >-PASS XHR method GET with MIME type text/plain (base64) >-PASS XHR method GET with MIME type text/html >-PASS XHR method GET with MIME type text/html;charset=UTF-8 >-PASS XHR method GET with MIME type image/png >-PASS XHR method POST with MIME type text/plain >-PASS XHR method PUT with MIME type text/plain >-PASS XHR method DELETE with MIME type text/plain >-FAIL XHR method HEAD with MIME type text/plain assert_equals: expected "" but got "Hello, World!" >-PASS XHR method UNICORN with MIME type text/plain >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/data-uri.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/data-uri.htm >deleted file mode 100644 >index 88a7d78fc5953bc89b45503f1792f3a1d1dfe789..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/data-uri.htm >+++ /dev/null >@@ -1,41 +0,0 @@ >-<!doctype html> >-<meta charset=utf-8> >-<title>XMLHttpRequest: data URLs</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >- >-<script> >- function do_test(method, url, mimeType, testNamePostfix) { >- if (typeof mimeType === 'undefined' || mimeType === null) mimeType = 'text/plain'; >- var test = async_test("XHR method " + method + " with MIME type " + mimeType + (testNamePostfix||'')); >- test.step(function() { >- var client = new XMLHttpRequest(), >- body = method === "HEAD" ? "" : "Hello, World!"; >- client.onreadystatechange = test.step_func(function () { >- if (client.readyState !== 4) { >- return; >- } >- assert_equals(client.responseText, body); >- assert_equals(client.status, 200); >- assert_equals(client.getResponseHeader('Content-Type'), mimeType); >- var allHeaders = client.getAllResponseHeaders(); >- assert_regexp_match(allHeaders, /content\-type\:/i, 'getAllResponseHeaders() includes Content-Type'); >- assert_false(/content\-length\:/i.test(allHeaders), 'getAllResponseHeaders() must not include Content-Length'); >- test.done(); >- }); >- client.open(method, url); >- client.send(null); >- }); >- } >- do_test('GET', "data:text/plain,Hello, World!"); >- do_test('GET', "data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==", undefined, " (base64)"); >- do_test('GET', "data:text/html,Hello, World!", 'text/html'); >- do_test('GET', "data:text/html;charset=UTF-8,Hello, World!", 'text/html;charset=UTF-8'); >- do_test('GET', "data:image/png,Hello, World!", 'image/png'); >- do_test('POST', "data:text/plain,Hello, World!"); >- do_test('PUT', "data:text/plain,Hello, World!"); >- do_test('DELETE', "data:text/plain,Hello, World!"); >- do_test('HEAD', "data:text/plain,Hello, World!"); >- do_test('UNICORN', "data:text/plain,Hello, World!"); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-abort-expected.txt >deleted file mode 100644 >index a89c58e14160dd87d87f4b99dda3042c9e319b0a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-abort-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: abort event >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-abort.htm >deleted file mode 100644 >index 2f80d1b60780a4c274a4ade882555e6e7a1b8845..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-abort.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: abort event</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onabort" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-abort" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-abort" data-tested-assertations="following::ol//ol//ol/li[3]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.onabort = test.step_func(function() { >- test.done(); >- }); >- client.open("GET", "resources/well-formed.xml"); >- client.send(null); >- client.abort(); >- test.step_timeout(() => { >- assert_unreached("onabort not called after 4 ms"); >- }, 4); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-error.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-error.sub-expected.txt >deleted file mode 100644 >index 7b75973cfaf8412902e89fbeb3dc569083f9b846..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-error.sub-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-Blocked access to external URL http://nonexistent-origin.localhost:8800/ >-CONSOLE MESSAGE: line 22: XMLHttpRequest cannot load http://nonexistent-origin.localhost:8800/ due to access control checks. >- >-PASS XMLHttpRequest Test: event - error >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-error.sub.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-error.sub.html >deleted file mode 100644 >index 3171c49d7a8d98fcda0155ffce06fe7588e83672..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-error.sub.html >+++ /dev/null >@@ -1,25 +0,0 @@ >-<!DOCTYPE html> >-<meta charset="utf-8"> >-<title>XMLHttpRequest Test: event - error</title> >-<link rel="author" title="Intel" href="http://www.intel.com"> >-<meta name="assert" content="Check if event onerror is fired When the request has failed."> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<div id="log"></div> >- >-<script> >- >-async_test(function (t) { >- var client = new XMLHttpRequest(); >- client.onerror = t.step_func(function(e) { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "error"); >- t.done(); >- }); >- >- client.open("GET", "http://nonexistent-origin.{{host}}:{{ports[http][0]}}"); >- client.send("null"); >-}, document.title); >- >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-load-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-load-expected.txt >deleted file mode 100644 >index d044be7b9b86af9b4a60e2bc6ef7167046586f4b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-load-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: Fire an event named load (synchronous flag is unset) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-load.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-load.htm >deleted file mode 100644 >index cdd0c5bb8ad1876a3a96797f5f64a7437eecae5d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-load.htm >+++ /dev/null >@@ -1,30 +0,0 @@ >-<!doctype html> >-<meta charset=utf-8> >-<title>XMLHttpRequest: The send() method: Fire an event named load (synchronous flag is unset)</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onload" data-tested-assertations="../.." /> >-<link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-load" data-tested-assertations="../.." /> >-<div id="log"></div> >- >-<script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.onload = test.step_func(function(e) { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "load"); >- assert_equals(client.readyState, 4); >- test.done(); >- }); >- client.onreadystatechange = test.step_func(function() { >- if (client.readyState !== 4) return; >- >- test.step_timeout(() => { >- assert_unreached("Didn't get load event within 4ms of readystatechange==4"); >- }, 4); >- }); >- client.open("GET", "resources/well-formed.xml"); >- client.send(null); >- }); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadend-expected.txt >deleted file mode 100644 >index 4cc92e81e110a1b9c60ed8c7b31168b2cab76f2f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadend-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: loadend event >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadend.htm >deleted file mode 100644 >index b17d9b9134ea8669fd440433c0d0d9ffc1a729db..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadend.htm >+++ /dev/null >@@ -1,32 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: loadend event</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="/../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="/../.." /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.onloadend = test.step_func(function(e) { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "loadend"); >- test.done(); >- }); >- client.onreadystatechange = function() { >- if (client.readyState !== 4) return; >- test.step_timeout(() => { >- assert_unreached("onloadend not called after 100 ms"); >- }, 100); >- }; >- client.open("GET", "resources/well-formed.xml"); >- client.send(null); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart-expected.txt >deleted file mode 100644 >index bbed51861314c3ce1f195c080814acef860852d3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: loadstart event >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart-upload-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart-upload-expected.txt >deleted file mode 100644 >index 8dac4591b05d84088779580982ded3fc43b1b883..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart-upload-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-FAIL XMLHttpRequest: The send() method: Fire a progress event named loadstart on upload object (synchronous flag is unset) assert_equals: upload.onloadstart: event.total expected 7 but got 0 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart-upload.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart-upload.htm >deleted file mode 100644 >index 275d418a7e090e11e20a60acac31e87978fe64c5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart-upload.htm >+++ /dev/null >@@ -1,28 +0,0 @@ >-<!doctype html> >-<html lang=en> >-<meta charset=utf-8> >-<title>XMLHttpRequest: The send() method: Fire a progress event named loadstart on upload object (synchronous flag is unset)</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="../.." /> >-<link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="../.." /> >-<div id="log"></div> >-<script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.upload.onloadstart = test.step_func(function(e) { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.total, 7, 'upload.onloadstart: event.total'); >- assert_equals(e.loaded, 0, 'upload.onloadstart: event.loaded'); >- assert_equals(e.type, "loadstart"); >- test.done(); >- }); >- client.onreadystatechange = test.step_func(function() { >- if (client.readyState === 4) >- assert_unreached("onloadstart not called."); >- }); >- client.open("POST", "resources/trickle.py?ms=5&count=8"); >- client.send('foo=bar'); >- }); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart.htm >deleted file mode 100644 >index 442be938dc7f95760da4e7df345cac1b1d1497b3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart.htm >+++ /dev/null >@@ -1,31 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: loadstart event</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[9]/ol/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.onloadstart = test.step_func(function(e) { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "loadstart"); >- assert_equals(client.readyState, 1); >- test.done(); >- }); >- test.step_timeout(function () { >- assert_unreached("onloadstart not called after 500 ms"); >- }, 500); >- client.open("GET", "resources/well-formed.xml"); >- client.send(null); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-progress-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-progress-expected.txt >deleted file mode 100644 >index 22ade068047b08cde6d08523fe03c1b16fd55c35..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-progress-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: Fire a progress event named progress (synchronous flag is unset) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-progress.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-progress.htm >deleted file mode 100644 >index 65d3f289810fc997264a3d082360f21640817b4b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-progress.htm >+++ /dev/null >@@ -1,26 +0,0 @@ >-<!doctype html> >-<html lang=en> >-<meta charset=utf-8> >-<title>XMLHttpRequest: The send() method: Fire a progress event named progress (synchronous flag is unset)</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="../.." /> >-<link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="../.." /> >-<div id="log"></div> >-<script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.onprogress = test.step_func(function(e) { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "progress"); >- test.done(); >- }); >- client.onreadystatechange = test.step_func(function() { >- if (client.readyState === 4) >- assert_unreached("onprogress not called."); >- }); >- client.open("GET", "resources/trickle.py?count=4&delay=150"); >- client.send(null); >- }); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystate-sync-open-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystate-sync-open-expected.txt >deleted file mode 100644 >index 765c952e98093ee08cea13f0d6f28ba3920e049c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystate-sync-open-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: open() call fires sync readystate event (sync) >-PASS XMLHttpRequest: open() call fires sync readystate event (async) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystate-sync-open.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystate-sync-open.htm >deleted file mode 100644 >index ae9697ea13a94fb230a31b61e11cf76593f7bf61..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystate-sync-open.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() call fires sync readystate event</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[13]/ol[1]/li[2]" /> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- var eventsFired = [] >- client.onreadystatechange = function(){ >- eventsFired.push(client.readyState) >- } >- client.open('GET', "...", false) >- assert_array_equals(eventsFired, [1]) >- }, document.title + ' (sync)') >- test(function() { >- var client = new XMLHttpRequest() >- var eventsFired = [] >- client.onreadystatechange = function(){ >- eventsFired.push(client.readyState) >- } >- client.open('GET', "...", true) >- assert_array_equals(eventsFired, [1]) >- }, document.title + ' (async)') >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystatechange-loaded-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystatechange-loaded-expected.txt >deleted file mode 100644 >index c110e02bf99acd40858c2d9ddb421c67089c5b19..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystatechange-loaded-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: the LOADING state change may be emitted multiple times >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystatechange-loaded.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystatechange-loaded.htm >deleted file mode 100644 >index 452efafae9f733b1e78ca6a73c65e017be2655fc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystatechange-loaded.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!doctype html> >-<html lang="en"> >-<head> >- <meta charset="utf-8"> >- <title>XMLHttpRequest: the LOADING state change may be emitted multiple times</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[10]/dt[1]"> >-</head> >- >-<div id="log"></div> >- >-<script> >- >-var test = async_test(); >- >-test.step(function() { >- var client = new XMLHttpRequest(); >- var countedLoading = 0; >- >- client.onreadystatechange = test.step_func(function() { >- if (client.readyState === 3) { >- countedLoading += 1; >- } >- >- if (client.readyState === 4) { >- assert_greater_than(countedLoading, 1, "LOADING state change may be emitted multiple times"); >- >- test.done(); >- } >- }); >- >- client.open("GET", "resources/trickle.py?count=10"); // default timeout in trickle.py is 1/2 sec, so this request will take 5 seconds to complete >- client.send(null); >-}); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-timeout-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-timeout-expected.txt >deleted file mode 100644 >index a054dd787af600d157994f0c4a2704c323e015fd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-timeout-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: timeout event >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-timeout.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-timeout.htm >deleted file mode 100644 >index c40213562b57ad56f8bf06a7a89f0453d53a1fd1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-timeout.htm >+++ /dev/null >@@ -1,34 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: timeout event</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-timeout" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following-sibling::ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.ontimeout = function() { >- test.step(function() { >- assert_equals(client.readyState, 4); >- test.done(); >- }); >- }; >- client.timeout = 5; >- client.open("GET", "resources/delay.py?ms=20000"); >- client.send(null); >- test.step_timeout(() => { >- assert_unreached("ontimeout not called."); >- }, 10); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin-expected.txt >deleted file mode 100644 >index e8dfbb23df60457d045e555f402e84d170dce76d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS Upload events registered on time (http://127.0.0.1:8800/XMLHttpRequest/resources/corsenabled.py) >-PASS Upload events registered on time (resources/redirect.py?code=307&location=http://127.0.0.1:8800/XMLHttpRequest/resources/corsenabled.py) >-PASS Upload events registered too late (http://127.0.0.1:8800/XMLHttpRequest/resources/corsenabled.py) >-PASS Upload events registered too late (resources/redirect.py?code=307&location=http://127.0.0.1:8800/XMLHttpRequest/resources/corsenabled.py) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.htm >deleted file mode 100644 >index 293f7bf2b9cdff43866e33fe3d80d944ac19c095..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!doctype html> >-<html lang=en> >-<meta charset=utf-8> >-<title>XMLHttpRequest: upload progress event for cross-origin requests</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<script src="/common/get-host-info.sub.js"></script> >-<div id="log"></div> >-<script> >-const remote = get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/corsenabled.py", >- redirect = "resources/redirect.py?code=307&location=" + remote; >- >-[remote, redirect].forEach(url => { >- async_test(test => { >- const client = new XMLHttpRequest(); >- client.upload.onprogress = test.step_func_done() >- client.onload = test.unreached_func() >- client.open("POST", url) >- client.send("On time: " + url) >- }, "Upload events registered on time (" + url + ")"); >-}); >- >-[remote, redirect].forEach(url => { >- async_test(test => { >- const client = new XMLHttpRequest(); >- client.onload = test.step_func_done(); >- client.open("POST", url); >- client.send("Too late: " + url); >- client.upload.onloadstart = test.unreached_func(); // registered too late >- client.upload.onprogress = test.unreached_func(); // registered too late >- }, "Upload events registered too late (" + url + ")"); >-}); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-expected.txt >deleted file mode 100644 >index 3e5bd6965d534254414ce22d3a4b2f2cf1ade54d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: upload progress event >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress.htm >deleted file mode 100644 >index e4b24e7cdd5c2f87c5b2aaa9b3d219c6c9ee7b3e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress.htm >+++ /dev/null >@@ -1,28 +0,0 @@ >-<!doctype html> >-<html lang=en> >-<meta charset=utf-8> >-<title>XMLHttpRequest: upload progress event</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-upload" data-tested-assertations=".." /> >- >-<div id="log"></div> >-<script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.upload.onprogress = test.step_func(function(e) { >- assert_true(e instanceof ProgressEvent); >- // This short payload will most likely be sent before the first progress evt >- assert_equals(e.loaded, 22); >- assert_equals(e.total, 22); >- test.done(); >- }); >- client.onreadystatechange = test.step_func(function() { >- if (client.readyState === 4) assert_unreached("onprogress not called."); >- }); >- client.open("POST", "resources/upload.py"); >- client.send("This is a test string."); >- }); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-content-length-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-content-length-expected.txt >deleted file mode 100644 >index fd661490bd83eb5a9d8f43a0108945f447715268..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-content-length-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS ProgressEvent: firing events for HTTP with Content-Length >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-content-length.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-content-length.html >deleted file mode 100644 >index 6e548525c321d5d28a360f38ab475161f3c0e69d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-content-length.html >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>ProgressEvent: firing events for HTTP with Content-Length</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#firing-events-using-the-progressevent-interface"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- >- test.step(function() { >- var xhr = new XMLHttpRequest(); >- >- xhr.onprogress = function(pe) { >- test.step(function() { >- if(pe.type == "progress") { >- assert_greater_than_equal(pe.loaded, 0, "loaded"); >- assert_true(pe.lengthComputable, "lengthComputable"); >- assert_equals(pe.total, 1300, "total"); >- } >- }, "Check lengthComputed, loaded, total when Content-Length is given."); >- } >- >- // "loadstart", "error", "abort", "load" tests are out of scope. >- // They SHOULD be tested in each spec that implement ProgressEvent. >- >- xhr.onloadend = function(pe) { >- test.done(); >- } >- xhr.open("GET", "resources/trickle.py?ms=0&count=100&specifylength=1", true); >- xhr.send(null); >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-no-content-length-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-no-content-length-expected.txt >deleted file mode 100644 >index 35f5ea3a68dbd2bdbad787b77dc67c0bcf85548a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-no-content-length-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS ProgressEvent: firing events for HTTP with no Content-Length >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-no-content-length.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-no-content-length.html >deleted file mode 100644 >index 2a4614aaa7bcbe7d2401b0b114c28c3299a7dff8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-no-content-length.html >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>ProgressEvent: firing events for HTTP with no Content-Length</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#firing-events-using-the-progressevent-interface"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- >- test.step(function() { >- var xhr = new XMLHttpRequest(); >- >- xhr.onprogress = function(pe) { >- test.step(function() { >- if(pe.type == "progress") { >- assert_greater_than_equal(pe.loaded, 0, "loaded"); >- assert_false(pe.lengthComputable, "lengthComputable"); >- assert_equals(pe.total, 0, "total"); >- } >- }, "Check lengthComputed, loaded, total when Content-Length is NOT given."); >- } >- >- // "loadstart", "error", "abort", "load" tests are out of scope. >- // They SHOULD be tested in each spec that implement ProgressEvent. >- >- xhr.onloadend = function(pe) { >- test.done(); >- } >- xhr.open("GET", "resources/trickle.py?ms=0&count=100", true); >- xhr.send(null); >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/folder.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/folder.txt >deleted file mode 100644 >index bf1a1fdefa3c7f4b0180a75a951e9574662a8bc8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/folder.txt >+++ /dev/null >@@ -1 +0,0 @@ >-top >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-blob-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-blob-expected.txt >deleted file mode 100644 >index 4550be6fc87abb8e215eea35eb99790ea3394251..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-blob-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS formdata with blob >-PASS formdata with named blob >-PASS formdata.append() should throw if value is string and file name is given >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-blob.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-blob.htm >deleted file mode 100644 >index 5efef7b615bbfa7dc54891fe40405c0f62eb98e2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-blob.htm >+++ /dev/null >@@ -1,46 +0,0 @@ >-<!doctype html> >-<html lang=en> >-<meta charset=utf-8> >-<title>XMLHttpRequest: upload formdata with blob</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#interface-formdata" data-tested-assertations="following::P[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata" data-tested-assertations="following::P[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-append" data-tested-assertations=".. following::P[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-append" data-tested-assertations="following::P[2] following::UL[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-FormData" data-tested-assertations="following::DD[1]" /> >-<div id="log"></div> >-<script> >- function do_test (name, fd, expected) { >- var test = async_test(name); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.onreadystatechange = test.step_func(function () { >- if (client.readyState !== 4) return; >- assert_equals(client.responseText, expected); >- test.done(); >- }); >- client.open("POST", "resources/upload.py"); >- client.send(fd); >- }); >- } >- >- function create_formdata () { >- var fd = new FormData(); >- for (var i = 0; i < arguments.length; i++) { >- fd.append.apply(fd, arguments[i]); >- } >- 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 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 >- test.step(function(){ >- assert_throws(new TypeError(), function(){ >- create_formdata('a', 'b', 'c'); >- }); >- }); >- test.done(); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-delete-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-delete-expected.txt >deleted file mode 100644 >index 66b9e3a9c9eb8517c43ec142cbe988a1f2cebc94..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-delete-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >- >-PASS testFormDataDelete >-PASS testFormDataDeleteFromForm >-PASS testFormDataDeleteFromFormNonExistentKey >-PASS testFormDataDeleteFromFormOtherKey >-PASS testFormDataDeleteFromEmptyForm >-PASS testFormDataDeleteNonExistentKey >-PASS testFormDataDeleteOtherKey >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-delete.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-delete.htm >deleted file mode 100644 >index 283b44b5ab01d1aaa51ba8751547d0f5670d6fcb..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-delete.htm >+++ /dev/null >@@ -1,65 +0,0 @@ >-<!doctype html> >-<html lang=en> >-<meta charset=utf-8> >-<title>FormData: delete</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-get" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-getall" /> >-<div id="log"></div> >-<form id="form1"> >- <input type="hidden" name="key" value="value1"> >- <input type="hidden" name="key" value="value2"> >-</form> >-<form id="form2"> >- <input type="hidden" name="key1" value="value1"> >- <input type="hidden" name="key2" value="value2"> >-</form> >-<form id="empty-form" /> >-<script> >- test(function() { >- var fd = create_formdata(['key', 'value1'], ['key', 'value2']); >- fd.delete('key'); >- assert_equals(fd.get('key'), null); >- }, 'testFormDataDelete'); >- test(function() { >- var fd = new FormData(document.getElementById('form1')); >- fd.delete('key'); >- assert_equals(fd.get('key'), null); >- }, 'testFormDataDeleteFromForm'); >- test(function() { >- var fd = new FormData(document.getElementById('form1')); >- fd.delete('nil'); >- assert_equals(fd.get('key'), 'value1'); >- }, 'testFormDataDeleteFromFormNonExistentKey'); >- test(function() { >- var fd = new FormData(document.getElementById('form2')); >- fd.delete('key1'); >- assert_equals(fd.get('key1'), null); >- assert_equals(fd.get('key2'), 'value2'); >- }, 'testFormDataDeleteFromFormOtherKey'); >- test(function() { >- var fd = new FormData(document.getElementById('empty-form')); >- fd.delete('key'); >- assert_equals(fd.get('key'), null); >- }, 'testFormDataDeleteFromEmptyForm'); >- test(function() { >- var fd = create_formdata(['key', 'value1'], ['key', 'value2']); >- fd.delete('nil'); >- assert_equals(fd.get('key'), 'value1'); >- }, 'testFormDataDeleteNonExistentKey'); >- test(function() { >- var fd = create_formdata(['key1', 'value1'], ['key2', 'value2']); >- fd.delete('key1'); >- assert_equals(fd.get('key1'), null); >- assert_equals(fd.get('key2'), 'value2'); >- }, 'testFormDataDeleteOtherKey'); >- >- function create_formdata() { >- var fd = new FormData(); >- for (var i = 0; i < arguments.length; i++) { >- fd.append.apply(fd, arguments[i]); >- }; >- return fd; >- } >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-expected.txt >deleted file mode 100644 >index 31c026a93137cfe42ba8a2189344b22f36a17532..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS empty formdata >-PASS formdata with string >-PASS formdata with named string >-PASS formdata from form >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-foreach-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-foreach-expected.txt >deleted file mode 100644 >index aaf6f6472ad195418056804719681d539b1a1cc4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-foreach-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS Iterator should return duplicate keys and non-deleted values >-PASS Entries iterator should return duplicate keys and non-deleted values >-PASS Keys iterator should return duplicates >-PASS Values iterator should return non-deleted values >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-foreach.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-foreach.html >deleted file mode 100644 >index 3ad184c4d55789a2d2f23db61d41b7ad9c650b0b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-foreach.html >+++ /dev/null >@@ -1,63 +0,0 @@ >-<!doctype html> >-<html lang=en> >-<meta charset=utf-8> >-<title>FormData: foreach</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#interface-formdata" /> >-<script> >- var fd = new FormData(); >- fd.append('n1', 'v1'); >- fd.append('n2', 'v2'); >- fd.append('n3', 'v3'); >- fd.append('n1', 'v4'); >- fd.append('n2', 'v5'); >- fd.append('n3', 'v6'); >- fd.delete('n2'); >- >- var file = new File(['hello'], "hello.txt"); >- fd.append('f1', file); >- >- var expected_keys = ['n1', 'n3', 'n1', 'n3', 'f1']; >- var expected_values = ['v1', 'v3', 'v4', 'v6', file]; >- test(function() { >- var mykeys = [], myvalues = []; >- for(var entry of fd) { >- assert_equals(entry.length, 2, >- 'Default iterator should yield key/value pairs'); >- mykeys.push(entry[0]); >- myvalues.push(entry[1]); >- } >- assert_array_equals(mykeys, expected_keys, >- 'Default iterator should see duplicate keys'); >- assert_array_equals(myvalues, expected_values, >- 'Default iterator should see non-deleted values'); >- }, 'Iterator should return duplicate keys and non-deleted values'); >- test(function() { >- var mykeys = [], myvalues = []; >- for(var entry of fd.entries()) { >- assert_equals(entry.length, 2, >- 'entries() iterator should yield key/value pairs'); >- mykeys.push(entry[0]); >- myvalues.push(entry[1]); >- } >- assert_array_equals(mykeys, expected_keys, >- 'entries() iterator should see duplicate keys'); >- assert_array_equals(myvalues, expected_values, >- 'entries() iterator should see non-deleted values'); >- }, 'Entries iterator should return duplicate keys and non-deleted values'); >- test(function() { >- var mykeys = []; >- for(var entry of fd.keys()) >- mykeys.push(entry); >- assert_array_equals(mykeys, expected_keys, >- 'keys() iterator should see duplicate keys'); >- }, 'Keys iterator should return duplicates'); >- test(function() { >- var myvalues = []; >- for(var entry of fd.values()) >- myvalues.push(entry); >- assert_array_equals(myvalues, expected_values, >- 'values() iterator should see non-deleted values'); >- }, 'Values iterator should return non-deleted values'); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-get-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-get-expected.txt >deleted file mode 100644 >index ab512c0726c2a56b06c342530657866c88220f53..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-get-expected.txt >+++ /dev/null >@@ -1,14 +0,0 @@ >- >-PASS testFormDataGet >-PASS testFormDataGetFromForm >-PASS testFormDataGetFromFormNull >-PASS testFormDataGetFromEmptyForm >-PASS testFormDataGetNull1 >-PASS testFormDataGetNull2 >-PASS testFormDataGetAll >-PASS testFormDataGetAllEmpty1 >-PASS testFormDataGetAllEmpty2 >-PASS testFormDataGetAllFromForm >-PASS testFormDataGetAllFromFormNull >-PASS testFormDataGetAllFromEmptyForm >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-get.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-get.htm >deleted file mode 100644 >index b71a72fa9bcc0a4981424fe94f17dc1b7688cfd2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-get.htm >+++ /dev/null >@@ -1,60 +0,0 @@ >-<!doctype html> >-<html lang=en> >-<meta charset=utf-8> >-<title>FormData: get and getAll</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-get" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-getall" /> >-<div id="log"></div> >-<form id="form"> >- <input type="hidden" name="key" value="value1"> >- <input type="hidden" name="key" value="value2"> >-</form> >-<form id="empty-form" /> >-<script> >- test(function() { >- assert_equals(create_formdata(['key', 'value1'], ['key', 'value2']).get('key'), "value1"); >- }, 'testFormDataGet'); >- test(function() { >- assert_equals(new FormData(document.getElementById('form')).get('key'), "value1"); >- }, 'testFormDataGetFromForm'); >- test(function() { >- assert_equals(new FormData(document.getElementById('form')).get('nil'), null); >- }, 'testFormDataGetFromFormNull'); >- test(function() { >- assert_equals(new FormData(document.getElementById('empty-form')).get('key'), null); >- }, 'testFormDataGetFromEmptyForm'); >- test(function() { >- assert_equals(create_formdata(['key', 'value1'], ['key', 'value2']).get('nil'), null); >- }, 'testFormDataGetNull1'); >- test(function() { >- assert_equals(create_formdata().get('key'), null); >- }, 'testFormDataGetNull2'); >- test(function() { >- assert_array_equals(create_formdata(['key', 'value1'], ['key', 'value2']).getAll('key'), ["value1", "value2"]); >- }, 'testFormDataGetAll'); >- test(function() { >- assert_array_equals(create_formdata(['key', 'value1'], ['key', 'value2']).getAll('nil'), []); >- }, 'testFormDataGetAllEmpty1'); >- test(function() { >- assert_array_equals(create_formdata().getAll('key'), []); >- }, 'testFormDataGetAllEmpty2'); >- test(function() { >- assert_array_equals(new FormData(document.getElementById('form')).getAll('key'), ["value1", "value2"]); >- }, 'testFormDataGetAllFromForm'); >- test(function() { >- assert_array_equals(new FormData(document.getElementById('form')).getAll('nil'), []); >- }, 'testFormDataGetAllFromFormNull'); >- test(function() { >- assert_array_equals(new FormData(document.getElementById('empty-form')).getAll('key'), []); >- }, 'testFormDataGetAllFromEmptyForm'); >- >- function create_formdata() { >- var fd = new FormData(); >- for (var i = 0; i < arguments.length; i++) { >- fd.append.apply(fd, arguments[i]); >- }; >- return fd; >- } >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-has-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-has-expected.txt >deleted file mode 100644 >index fafb511c5370f738171fd06c7f7f5b2411dd36c2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-has-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >- >-PASS testFormDataHas >-PASS testFormDataHasFromForm >-PASS testFormDataHasFromFormNull >-PASS testFormDataHasFromEmptyForm >-PASS testFormDataHasEmpty1 >-PASS testFormDataHasEmpty2 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-has.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-has.htm >deleted file mode 100644 >index ecd22b4e30b98508b10e54a4d2b356b97f3d1f5e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-has.htm >+++ /dev/null >@@ -1,42 +0,0 @@ >-<!doctype html> >-<html lang=en> >-<meta charset=utf-8> >-<title>FormData: has</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-get" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-getall" /> >-<div id="log"></div> >-<form id="form"> >- <input type="hidden" name="key" value="value1"> >- <input type="hidden" name="key" value="value2"> >-</form> >-<form id="empty-form" /> >-<script> >- test(function() { >- assert_equals(create_formdata(['key', 'value1'], ['key', 'value2']).has('key'), true); >- }, 'testFormDataHas'); >- test(function() { >- assert_equals(new FormData(document.getElementById('form')).has('key'), true); >- }, 'testFormDataHasFromForm'); >- test(function() { >- assert_equals(new FormData(document.getElementById('form')).has('nil'), false); >- }, 'testFormDataHasFromFormNull'); >- test(function() { >- assert_equals(new FormData(document.getElementById('empty-form')).has('key'), false); >- }, 'testFormDataHasFromEmptyForm'); >- test(function() { >- assert_equals(create_formdata(['key', 'value1'], ['key', 'value2']).has('nil'), false); >- }, 'testFormDataHasEmpty1'); >- test(function() { >- assert_equals(create_formdata().has('key'), false); >- }, 'testFormDataHasEmpty2'); >- >- function create_formdata() { >- var fd = new FormData(); >- for (var i = 0; i < arguments.length; i++) { >- fd.append.apply(fd, arguments[i]); >- }; >- return fd; >- } >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-set-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-set-expected.txt >deleted file mode 100644 >index f04616c983816ef63e26669fcf6e7ac28bc6adc7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-set-expected.txt >+++ /dev/null >@@ -1,16 +0,0 @@ >- >-PASS Passing a String object to FormData.set should work >-PASS testFormDataSet1 >-PASS testFormDataSet2 >-PASS testFormDataSetUndefined1 >-PASS testFormDataSetUndefined2 >-PASS testFormDataSetNull1 >-PASS testFormDataSetNull2 >-PASS testFormDataSetToForm1 >-PASS testFormDataSetToForm2 >-PASS testFormDataSetToFormUndefined1 >-PASS testFormDataSetToFormUndefined2 >-PASS testFormDataSetToFormNull1 >-PASS testFormDataSetToFormNull2 >-PASS testFormDataSetEmptyBlob >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-set.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-set.htm >deleted file mode 100644 >index f030caa78f95309e223ece150c30261dbf85d937..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-set.htm >+++ /dev/null >@@ -1,98 +0,0 @@ >-<!doctype html> >-<meta charset="utf-8"> >-<title>FormData: set</title> >-<link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-set"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<form id="form" /> >-<script> >- function test_formdata(creator, verifier, description) { >- async_test(description).step(function() { >- var fd = creator(); >- var xhr = new XMLHttpRequest(); >- xhr.onload = this.step_func(function() { >- verifier(xhr.responseText); >- this.done(); >- }); >- xhr.open("POST", "resources/upload.py"); >- xhr.send(fd); >- }); >- } >- >- test_formdata(function() { >- var fd = new FormData(); >- fd.set("name", new String("value")); >- return fd; >- }, function(data) { >- assert_equals(data, "name=value,\n"); >- }, "Passing a String object to FormData.set should work"); >- >- test(function() { >- assert_equals(create_formdata(['key', 'value1']).get('key'), "value1"); >- }, 'testFormDataSet1'); >- test(function() { >- assert_equals(create_formdata(['key', 'value2'], ['key', 'value1']).get('key'), "value1"); >- }, 'testFormDataSet2'); >- test(function() { >- assert_equals(create_formdata(['key', undefined]).get('key'), "undefined"); >- }, 'testFormDataSetUndefined1'); >- test(function() { >- assert_equals(create_formdata(['key', undefined], ['key', 'value1']).get('key'), "value1"); >- }, 'testFormDataSetUndefined2'); >- test(function() { >- assert_equals(create_formdata(['key', null]).get('key'), "null"); >- }, 'testFormDataSetNull1'); >- test(function() { >- assert_equals(create_formdata(['key', null], ['key', 'value1']).get('key'), "value1"); >- }, 'testFormDataSetNull2'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.set('key', 'value1'); >- assert_equals(fd.get('key'), "value1"); >- }, 'testFormDataSetToForm1'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.set('key', 'value2'); >- fd.set('key', 'value1'); >- assert_equals(fd.get('key'), "value1"); >- }, 'testFormDataSetToForm2'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.set('key', undefined); >- assert_equals(fd.get('key'), "undefined"); >- }, 'testFormDataSetToFormUndefined1'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.set('key', undefined); >- fd.set('key', 'value1'); >- assert_equals(fd.get('key'), "value1"); >- }, 'testFormDataSetToFormUndefined2'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.set('key', null); >- assert_equals(fd.get('key'), "null"); >- }, 'testFormDataSetToFormNull1'); >- test(function() { >- var fd = new FormData(document.getElementById("form")); >- fd.set('key', null); >- fd.set('key', 'value1'); >- assert_equals(fd.get('key'), "value1"); >- }, 'testFormDataSetToFormNull2'); >- test(function() { >- var fd = new FormData(); >- fd.set('key', new Blob([]), 'blank.txt'); >- var file = fd.get('key'); >- >- assert_true(file instanceof File); >- assert_equals(file.name, 'blank.txt'); >- }, 'testFormDataSetEmptyBlob'); >- >- function create_formdata() { >- var fd = new FormData(); >- for (var i = 0; i < arguments.length; i++) { >- fd.set.apply(fd, arguments[i]); >- }; >- return fd; >- } >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata.htm >deleted file mode 100644 >index e0d0a4e1d4b75420ee5e1592fc8902e1bdfce7a0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata.htm >+++ /dev/null >@@ -1,43 +0,0 @@ >-<!doctype html> >-<html lang=en> >-<meta charset=utf-8> >-<title>XMLHttpRequest: upload formdata</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#interface-formdata" data-tested-assertations="following::P[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata" data-tested-assertations=".. following::P[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-append" data-tested-assertations=".. following::UL[1]/LI[1] following::UL[1]/LI[2] following::UL[1]/LI[3]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-FormData" data-tested-assertations="following::DD[1]" /> >-<div id="log"></div> >-<form id="form"> >- <input type="hidden" name="key" value="value"> >-</form> >-<script> >- function do_test (name, fd, expected) { >- var test = async_test(name); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.onreadystatechange = test.step_func(function () { >- if (client.readyState !== 4) return; >- assert_equals(client.responseText, expected); >- test.done(); >- }); >- client.open("POST", "resources/upload.py"); >- client.send(fd); >- }); >- } >- >- function create_formdata () { >- var fd = new FormData(); >- for (var i = 0; i < arguments.length; i++) { >- fd.append.apply(fd, arguments[i]); >- }; >- return fd; >- } >- >- do_test("empty formdata", new FormData(), '\n'); >- do_test("formdata with string", create_formdata(['key', 'value']), 'key=value,\n'); >- do_test("formdata with named string", create_formdata(['key', new Blob(['value'], {type: 'text/plain'}), 'kv.txt']), '\nkey=kv.txt:text/plain:5,'); >- do_test("formdata from form", new FormData(document.getElementById('form')), 'key=value,\n'); >- >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl-expected.txt >deleted file mode 100644 >index 15860ed0b681a3a9c70831ef2a6321683cac16ae..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS Casing of known headers >-FAIL Casing of known headers 1 assert_regexp_match: expected object "/content-TYPE/" but got "Host: localhost:8800\r\nContent-Type: x/x\r\nConnection: keep-alive\r\nTHIS-IS-A-TEST: 1, 2\r\nAccept: */*\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/605.1.7+ (KHTML, like Gecko)\r\nReferer: http://localhost:8800/XMLHttpRequest/getallresponseheaders-cl.htm\r\nAccept-Language: en-us\r\nAccept-Encoding: gzip, deflate\r\n" >-PASS Casing of known headers 2 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl.htm >deleted file mode 100644 >index a6f7272e987f04f963e28c23d477e506bf3e0e21..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl.htm >+++ /dev/null >@@ -1,27 +0,0 @@ >-<!doctype html> >-<title>Casing of known headers</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<script> >-test(() => { >- const client = new XMLHttpRequest >- client.open("GET", "resources/header-content-length.asis", false) >- client.send() >- assert_equals(client.getAllResponseHeaders(), "content-length: 0\r\n") >-}) >-test(() => { >- const client = new XMLHttpRequest >- client.open("GET", "resources/echo-headers.py", false) >- client.setRequestHeader("THIS-IS-A-TEST", "1") >- client.setRequestHeader("THIS-is-A-test", "2") >- client.setRequestHeader("content-TYPE", "x/x") >- client.send() >- assert_regexp_match(client.responseText, /content-TYPE/) >- assert_regexp_match(client.responseText, /THIS-IS-A-TEST: 1, 2/) >-}) >-promise_test(() => { >- return fetch("resources/echo-headers.py", {headers: [["THIS-is-A-test", 1], ["THIS-IS-A-TEST", 2]] }).then(res => res.text()).then(body => { >- assert_regexp_match(body, /THIS-is-A-test: 1, 2/) >- }) >-}) >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cookies-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cookies-expected.txt >deleted file mode 100644 >index 2d3f81fb271da55f33afcbf6b3317c8dbe1bcbfe..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cookies-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: getAllResponseHeaders() excludes cookies >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cookies.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cookies.htm >deleted file mode 100644 >index 2cd8098185963658171889ecfe226b44c02bbb9d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cookies.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: getAllResponseHeaders() excludes cookies</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getallresponseheaders" data-tested-assertations="/following::OL[1]/LI[1] /following::OL[1]/LI[3]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- assert_equals(client.getAllResponseHeaders(), "") >- client.onreadystatechange = function() { >- test.step(function() { >- var headers = client.getAllResponseHeaders().toLowerCase() >- if(client.readyState == 1) { >- assert_equals(headers, "") >- } >- if(client.readyState > 1) { >- assert_true(headers.indexOf("\r\n") != -1, "carriage return") >- assert_true(headers.indexOf("content-type") != -1, "content-type") >- assert_true(headers.indexOf("x-custom-header") != -1, "x-custom-header") >- assert_false(headers.indexOf("set-cookie") != -1, "set-cookie") >- assert_false(headers.indexOf("set-cookie2") != -1, "set-cookie2") >- } >- if(client.readyState == 4) >- test.done() >- }) >- } >- client.open("GET", "resources/headers.py") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-expected.txt >deleted file mode 100644 >index 2cef77eb3d3d0b1743eb52d1a430109acb53e995..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: getAllResponseHeaders() >-PASS XMLHttpRequest: getAllResponseHeaders() 1 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-status-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-status-expected.txt >deleted file mode 100644 >index d22f3f00d4def118a7a4f1e6a2de3b457fccd6e0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-status-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: getAllResponseHeaders() excludes status >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-status.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-status.htm >deleted file mode 100644 >index ec1aa9a8072c01c709b3501564452bcd8bf92d0c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-status.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: getAllResponseHeaders() excludes status</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getallresponseheaders" data-tested-assertations="/following::OL[1]/LI[1] /following::OL[1]/LI[3]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- var headersUnsent = client.getAllResponseHeaders(); >- test.step(function() { >- assert_equals(headersUnsent, "") >- }); >- client.onreadystatechange = function() { >- test.step(function() { >- var headers = client.getAllResponseHeaders().toLowerCase() >- if(client.readyState == 1) { >- assert_equals(headers, "") >- } >- if(client.readyState > 1) { >- assert_false(headers.indexOf("200 ok") != -1) >- assert_false(headers.indexOf("http/1.") != -1) >- } >- if(client.readyState == 4) >- test.done() >- }) >- } >- client.open("GET", "resources/headers.py") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders.htm >deleted file mode 100644 >index 5d83ba4f57a90b7cc715ee7bfe4986d7b96d263e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders.htm >+++ /dev/null >@@ -1,24 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: getAllResponseHeaders()</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<div id="log"></div> >-<script> >-async_test((t) => { >- const client = new XMLHttpRequest() >- client.onload = t.step_func_done(() => { >- assert_equals(client.getAllResponseHeaders(), "foo-test: 1, 2, 3\r\n") >- }) >- client.open("GET", "resources/headers-basic.asis") >- client.send(null) >-}) >- >-async_test((t) => { >- const client = new XMLHttpRequest() >- client.onload = t.step_func_done(() => { >- assert_equals(client.getAllResponseHeaders(), "also-here: Mr. PB\r\newok: lego\r\nfoo-test: 1, 2\r\n") >- }) >- client.open("GET", "resources/headers.asis") >- client.send(null) >-}) >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt >deleted file mode 100644 >index b9f6d781b67d3287c29a0f3bd82dfe8261154929..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: getResponseHeader() case-insensitive matching >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive.htm >deleted file mode 100644 >index 6a961493574eed3d84e9a5b62fabdbd478a81da9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive.htm >+++ /dev/null >@@ -1,34 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: getResponseHeader() case-insensitive matching</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 4) { >- assert_equals(client.getResponseHeader("x-custom-header"), "test") >- assert_equals(client.getResponseHeader("X-Custom-Header"), "test") >- assert_equals(client.getResponseHeader("X-CUSTOM-HEADER"), "test") >- assert_equals(client.getResponseHeader("X-custom-HEADER"), "test") >- assert_equals(client.getResponseHeader("X-CUSTOM-header-COMMA"), "1, 2") >- assert_equals(client.getResponseHeader("X-CUSTOM-no-such-header-in-response"), null) >- assert_equals(client.getResponseHeader("CONTENT-TYPE"), "text/plain") >- test.done() >- } >- }) >- } >- client.open("GET", "resources/headers.py") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-chunked-trailer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-chunked-trailer-expected.txt >deleted file mode 100644 >index c9046bbf7adb608347af047622dce6b012ca23d2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-chunked-trailer-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: getResponseHeader() and HTTP trailer >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-chunked-trailer.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-chunked-trailer.htm >deleted file mode 100644 >index 0659a3a05e25ff1581387a72fd66477dde3ff868..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-chunked-trailer.htm >+++ /dev/null >@@ -1,32 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: getResponseHeader() and HTTP trailer</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="/following::OL[1]/LI[4] /following::OL[1]/LI[5] /following::OL[1]/LI[6]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 4) { >- assert_equals(client.getResponseHeader('Trailer'), 'X-Test-Me') >- assert_equals(client.getResponseHeader('X-Test-Me'), null) >- assert_equals(client.getAllResponseHeaders().indexOf('Trailer header value'), -1) >- assert_regexp_match(client.getAllResponseHeaders(), /trailer:\sX-Test-Me/) >- assert_equals(client.responseText, "First chunk\r\nSecond chunk\r\nYet another (third) chunk\r\nYet another (fourth) chunk\r\n") >- test.done() >- } >- }) >- } >- client.open("GET", "resources/chunked.py") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-cookies-and-more-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-cookies-and-more-expected.txt >deleted file mode 100644 >index 6cd62c17114205bf817a19445adf66f5c3e9f47e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-cookies-and-more-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: getResponseHeader() custom/non-existent headers and cookies >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-cookies-and-more.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-cookies-and-more.htm >deleted file mode 100644 >index 053fe441faf230908d5257ae363a4ccafa47a814..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-cookies-and-more.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: getResponseHeader() custom/non-existent headers and cookies</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="following::OL[1]/LI[3] following::OL[1]/LI[5] following::OL[1]/LI[6]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 1) { >- assert_equals(client.getResponseHeader("x-custom-header"), null) >- } >- if(client.readyState > 1) { >- assert_equals(client.getResponseHeader("x-custom-header"), "test") >- assert_equals(client.getResponseHeader("x-custom-header-empty"), "") >- assert_equals(client.getResponseHeader("set-cookie"), null) >- assert_equals(client.getResponseHeader("set-cookie2"), null) >- assert_equals(client.getResponseHeader("x-non-existent-header"), null) >- } >- if(client.readyState == 4) >- test.done() >- }) >- } >- client.open("GET", "resources/headers.py") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-error-state-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-error-state-expected.txt >deleted file mode 100644 >index 4df7cec85f95361f23f473cefb4d3497d82926a0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-error-state-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-Blocked access to external URL http://www1.localhost:8800/XMLHttpRequest/resources/nocors/folder.txt >-CONSOLE MESSAGE: line 32: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/nocors/folder.txt due to access control checks. >- >-PASS XMLHttpRequest: getResponseHeader() in error state (failing cross-origin test) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-error-state.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-error-state.htm >deleted file mode 100644 >index c9695fdee0fe4a2e7229e4f4401009c657192de2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-error-state.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: getResponseHeader() in error state (failing cross-origin test)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="following::OL[1]/LI[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 1) { >- assert_equals(client.getResponseHeader("x-custom-header"), null) >- } >- if(client.readyState > 1) { >- assert_equals(client.getResponseHeader("x-custom-header"), null) >- } >- if(client.readyState == 4){ >- assert_equals(client.getResponseHeader("x-custom-header"), null) >- test.done() >- } >- }) >- } >- var url = location.protocol + "//" + 'www1.' + location.host + (location.pathname.replace(/getresponseheader-error-state\.htm/, 'resources/nocors/folder.txt')) >- client.open("GET", url) >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-server-date-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-server-date-expected.txt >deleted file mode 100644 >index b7389ff8007231d1005622a4cd71c242d4c53059..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-server-date-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: getResponseHeader() server and date >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-server-date.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-server-date.htm >deleted file mode 100644 >index 409bc3503903c5c5726daa73f1cc4f59d3c35bd9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-server-date.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: getResponseHeader() server and date</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="/following::OL[1]/LI[4] /following::OL[1]/LI[5] /following::OL[1]/LI[6]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 4) { >- assert_true(client.getResponseHeader("Server") != null) >- assert_true(client.getResponseHeader("Date") != null) >- test.done() >- } >- }) >- } >- client.open("GET", "resources/headers.py") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-special-characters-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-special-characters-expected.txt >deleted file mode 100644 >index 1a407a0218a72eb4aafe4e33c2c1a2ce692f46f9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-special-characters-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: getResponseHeader() funny characters >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-special-characters.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-special-characters.htm >deleted file mode 100644 >index 980f8481c7e888a4f0c8f2d842d4eccca48490b4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-special-characters.htm >+++ /dev/null >@@ -1,34 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: getResponseHeader() funny characters</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="/following::OL[1]/LI[5] /following::OL[1]/LI[6]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 4) { >- assert_equals(client.getResponseHeader("x-custom-header "), null) >- assert_equals(client.getResponseHeader(" x-custom-header"), null) >- assert_equals(client.getResponseHeader("x-custom-header-bytes"), "\xE2\x80\xA6") >- assert_equals(client.getResponseHeader("x¾"), null) >- assert_equals(client.getResponseHeader("x-custom-header\n"), null) >- assert_equals(client.getResponseHeader("\nx-custom-header"), null) >- assert_equals(client.getResponseHeader("x-custom-header:"), null) >- test.done() >- } >- }) >- } >- client.open("GET", "resources/headers.py") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-unsent-opened-state-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-unsent-opened-state-expected.txt >deleted file mode 100644 >index ec098f3fc354443df63d775045d4437e430639aa..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-unsent-opened-state-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: getResponseHeader() in unsent, opened states >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-unsent-opened-state.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-unsent-opened-state.htm >deleted file mode 100644 >index e3bc2720f12d9e5a6128bc84fbec4ea290a81d1d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-unsent-opened-state.htm >+++ /dev/null >@@ -1,32 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: getResponseHeader() in unsent, opened states</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="/following::OL[1]/LI[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- assert_equals(client.getResponseHeader("x-custom-header"), null) >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState < 2) { >- assert_equals(client.getResponseHeader("x-custom-header"), null) >- assert_equals(client.getResponseHeader("CONTENT-TYPE"), null) >- test.done() >- } >- }) >- } >- client.open("GET", "resources/headers.py") >- assert_equals(client.getResponseHeader("x-custom-header"), null) >- assert_equals(client.getResponseHeader("Date"), null) >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/headers-normalize-response-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/headers-normalize-response-expected.txt >deleted file mode 100644 >index 85cd9dff2db2bca839289fc42fafbb6697185056..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/headers-normalize-response-expected.txt >+++ /dev/null >@@ -1,19 +0,0 @@ >-Whitespace and null in response header values >- >- >-PASS Header value: hello_world\0 >-PASS Header value: \0hello_world >-PASS Header value: hello\0world >-PASS Header value: __hello_world >-PASS Header value: hello_world__ >-PASS Header value: __hello_world__ >-PASS Header value: [tab]hello_world >-PASS Header value: hello_world[tab] >-PASS Header value: [tab]hello_world[tab] >-PASS Header value: hello______world >-PASS Header value: hello[tab]world >-PASS Header value: \0 >-PASS Header value: ___ >-PASS Header value: [tab] >-PASS Header value: >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/headers-normalize-response.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/headers-normalize-response.htm >deleted file mode 100644 >index 466b0d977cc6cdba12190a27dfe42e6452ea98d8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/headers-normalize-response.htm >+++ /dev/null >@@ -1,42 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<title>Whitespace and null in header values</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<script src=support.js?pipe=sub></script> >- >-<h1>Whitespace and null in response header values</h1> >- >-<div id=log></div> >- >-<script> >- >-function matchHeaderValue(val) { >- test(function () { >- var client = new XMLHttpRequest(); >- var trimmed = val.trim(); >- client.open("GET", "resources/parse-headers.py?my-custom-header="+encodeURIComponent(val), false); >- client.send(); >- var r = client.getResponseHeader("My-Custom-Header"); >- >- assert_equals(r, trimmed); >- }, "Header value: " + val.replace(/\t/g, "[tab]").replace(/ /g, "_").replace("\0", "\\0")); >-} >- >-matchHeaderValue("hello world\0"); >-matchHeaderValue("\0hello world"); >-matchHeaderValue("hello\0world"); >-matchHeaderValue(" hello world"); >-matchHeaderValue("hello world "); >-matchHeaderValue(" hello world "); >-matchHeaderValue("\thello world"); >-matchHeaderValue("hello world\t"); >-matchHeaderValue("\thello world\t"); >-matchHeaderValue("hello world"); >-matchHeaderValue("hello\tworld"); >-matchHeaderValue("\0"); >-matchHeaderValue(" "); >-matchHeaderValue("\t"); >-matchHeaderValue(""); >- >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/historical-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/historical-expected.txt >deleted file mode 100644 >index 426d650a5f489d442efc0d02030f062cf0f2aae6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/historical-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS Support for responseType = moz-blob >-PASS Support for responseType = moz-chunked-text >-PASS Support for responseType = moz-chunked-arraybuffer >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/historical.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/historical.html >deleted file mode 100644 >index 4af3da9f54ce50752568bb0fb340961b771ce1f8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/historical.html >+++ /dev/null >@@ -1,15 +0,0 @@ >-<!doctype html> >-<meta charset="utf-8"> >-<title>Historical features</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<script> >-["moz-blob", "moz-chunked-text", "moz-chunked-arraybuffer"].forEach(function(rt) { >- test(function() { >- var xhr = new XMLHttpRequest(); >- xhr.responseType = rt; >- assert_equals(xhr.responseType, ""); >- }, "Support for responseType = " + rt); >-}); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/interfaces-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/interfaces-expected.txt >deleted file mode 100644 >index ce1d969b95d44c4ed5e8aebce3432d1d59dc8970..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/interfaces-expected.txt >+++ /dev/null >@@ -1,208 +0,0 @@ >-CONSOLE MESSAGE: line 331: callback not yet supported >-CONSOLE MESSAGE: line 331: callback not yet supported >-XMLHttpRequest IDL tests >- >- >-PASS Test driver >-PASS XMLHttpRequestEventTarget interface: existence and properties of interface object >-PASS XMLHttpRequestEventTarget interface object length >-PASS XMLHttpRequestEventTarget interface object name >-PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object >-PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object's "constructor" property >-PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object's @@unscopables property >-PASS XMLHttpRequestEventTarget interface: attribute onloadstart >-PASS Unscopable handled correctly for onloadstart property on XMLHttpRequestEventTarget >-PASS XMLHttpRequestEventTarget interface: attribute onprogress >-PASS Unscopable handled correctly for onprogress property on XMLHttpRequestEventTarget >-PASS XMLHttpRequestEventTarget interface: attribute onabort >-PASS Unscopable handled correctly for onabort property on XMLHttpRequestEventTarget >-PASS XMLHttpRequestEventTarget interface: attribute onerror >-PASS Unscopable handled correctly for onerror property on XMLHttpRequestEventTarget >-PASS XMLHttpRequestEventTarget interface: attribute onload >-PASS Unscopable handled correctly for onload property on XMLHttpRequestEventTarget >-PASS XMLHttpRequestEventTarget interface: attribute ontimeout >-PASS Unscopable handled correctly for ontimeout property on XMLHttpRequestEventTarget >-PASS XMLHttpRequestEventTarget interface: attribute onloadend >-PASS Unscopable handled correctly for onloadend property on XMLHttpRequestEventTarget >-PASS XMLHttpRequestUpload interface: existence and properties of interface object >-PASS XMLHttpRequestUpload interface object length >-PASS XMLHttpRequestUpload interface object name >-PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object >-PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object's "constructor" property >-PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object's @@unscopables property >-PASS XMLHttpRequestUpload must be primary interface of (new XMLHttpRequest()).upload >-PASS Stringification of (new XMLHttpRequest()).upload >-PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onloadstart" with the proper type >-PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onprogress" with the proper type >-PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onabort" with the proper type >-PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onerror" with the proper type >-PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onload" with the proper type >-PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "ontimeout" with the proper type >-PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onloadend" with the proper type >-PASS XMLHttpRequest interface: existence and properties of interface object >-PASS XMLHttpRequest interface object length >-PASS XMLHttpRequest interface object name >-PASS XMLHttpRequest interface: existence and properties of interface prototype object >-PASS XMLHttpRequest interface: existence and properties of interface prototype object's "constructor" property >-PASS XMLHttpRequest interface: existence and properties of interface prototype object's @@unscopables property >-PASS XMLHttpRequest interface: attribute onreadystatechange >-PASS Unscopable handled correctly for onreadystatechange property on XMLHttpRequest >-PASS XMLHttpRequest interface: constant UNSENT on interface object >-PASS XMLHttpRequest interface: constant UNSENT on interface prototype object >-PASS XMLHttpRequest interface: constant OPENED on interface object >-PASS XMLHttpRequest interface: constant OPENED on interface prototype object >-PASS XMLHttpRequest interface: constant HEADERS_RECEIVED on interface object >-PASS XMLHttpRequest interface: constant HEADERS_RECEIVED on interface prototype object >-PASS XMLHttpRequest interface: constant LOADING on interface object >-PASS XMLHttpRequest interface: constant LOADING on interface prototype object >-PASS XMLHttpRequest interface: constant DONE on interface object >-PASS XMLHttpRequest interface: constant DONE on interface prototype object >-PASS XMLHttpRequest interface: attribute readyState >-PASS Unscopable handled correctly for readyState property on XMLHttpRequest >-PASS XMLHttpRequest interface: operation open(ByteString, USVString) >-PASS Unscopable handled correctly for open(ByteString, USVString) on XMLHttpRequest >-PASS XMLHttpRequest interface: operation open(ByteString, USVString, boolean, USVString, USVString) >-PASS Unscopable handled correctly for open(ByteString, USVString, boolean, USVString, USVString) on XMLHttpRequest >-PASS XMLHttpRequest interface: operation setRequestHeader(ByteString, ByteString) >-PASS Unscopable handled correctly for setRequestHeader(ByteString, ByteString) on XMLHttpRequest >-PASS XMLHttpRequest interface: attribute timeout >-PASS Unscopable handled correctly for timeout property on XMLHttpRequest >-PASS XMLHttpRequest interface: attribute withCredentials >-PASS Unscopable handled correctly for withCredentials property on XMLHttpRequest >-PASS XMLHttpRequest interface: attribute upload >-PASS Unscopable handled correctly for upload property on XMLHttpRequest >-PASS XMLHttpRequest interface: operation send([object Object],[object Object]) >-PASS Unscopable handled correctly for send([object Object],[object Object]) on XMLHttpRequest >-PASS XMLHttpRequest interface: operation abort() >-PASS Unscopable handled correctly for abort() on XMLHttpRequest >-PASS XMLHttpRequest interface: attribute responseURL >-PASS Unscopable handled correctly for responseURL property on XMLHttpRequest >-PASS XMLHttpRequest interface: attribute status >-PASS Unscopable handled correctly for status property on XMLHttpRequest >-PASS XMLHttpRequest interface: attribute statusText >-PASS Unscopable handled correctly for statusText property on XMLHttpRequest >-PASS XMLHttpRequest interface: operation getResponseHeader(ByteString) >-PASS Unscopable handled correctly for getResponseHeader(ByteString) on XMLHttpRequest >-PASS XMLHttpRequest interface: operation getAllResponseHeaders() >-PASS Unscopable handled correctly for getAllResponseHeaders() on XMLHttpRequest >-PASS XMLHttpRequest interface: operation overrideMimeType(DOMString) >-PASS Unscopable handled correctly for overrideMimeType(DOMString) on XMLHttpRequest >-PASS XMLHttpRequest interface: attribute responseType >-PASS Unscopable handled correctly for responseType property on XMLHttpRequest >-PASS XMLHttpRequest interface: attribute response >-PASS Unscopable handled correctly for response property on XMLHttpRequest >-PASS XMLHttpRequest interface: attribute responseText >-PASS Unscopable handled correctly for responseText property on XMLHttpRequest >-PASS XMLHttpRequest interface: attribute responseXML >-PASS Unscopable handled correctly for responseXML property on XMLHttpRequest >-PASS XMLHttpRequest must be primary interface of new XMLHttpRequest() >-PASS Stringification of new XMLHttpRequest() >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "onreadystatechange" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "UNSENT" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "OPENED" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "HEADERS_RECEIVED" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "LOADING" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "DONE" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "readyState" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "open(ByteString, USVString)" with the proper type >-PASS XMLHttpRequest interface: calling open(ByteString, USVString) on new XMLHttpRequest() with too few arguments must throw TypeError >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "open(ByteString, USVString, boolean, USVString, USVString)" with the proper type >-PASS XMLHttpRequest interface: calling open(ByteString, USVString, boolean, USVString, USVString) on new XMLHttpRequest() with too few arguments must throw TypeError >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "setRequestHeader(ByteString, ByteString)" with the proper type >-PASS XMLHttpRequest interface: calling setRequestHeader(ByteString, ByteString) on new XMLHttpRequest() with too few arguments must throw TypeError >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "timeout" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "withCredentials" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "upload" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "send([object Object],[object Object])" with the proper type >-PASS XMLHttpRequest interface: calling send([object Object],[object Object]) on new XMLHttpRequest() with too few arguments must throw TypeError >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "abort()" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseURL" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "status" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "statusText" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "getResponseHeader(ByteString)" with the proper type >-PASS XMLHttpRequest interface: calling getResponseHeader(ByteString) on new XMLHttpRequest() with too few arguments must throw TypeError >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "getAllResponseHeaders()" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "overrideMimeType(DOMString)" with the proper type >-PASS XMLHttpRequest interface: calling overrideMimeType(DOMString) on new XMLHttpRequest() with too few arguments must throw TypeError >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseType" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "response" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseText" with the proper type >-PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseXML" with the proper type >-PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onloadstart" with the proper type >-PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onprogress" with the proper type >-PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onabort" with the proper type >-PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onerror" with the proper type >-PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onload" with the proper type >-PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "ontimeout" with the proper type >-PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onloadend" with the proper type >-PASS FormData interface: existence and properties of interface object >-PASS FormData interface object length >-PASS FormData interface object name >-PASS FormData interface: existence and properties of interface prototype object >-PASS FormData interface: existence and properties of interface prototype object's "constructor" property >-PASS FormData interface: existence and properties of interface prototype object's @@unscopables property >-PASS FormData interface: operation append(USVString, Blob, USVString) >-PASS Unscopable handled correctly for append(USVString, Blob, USVString) on FormData >-PASS FormData interface: operation append(USVString, USVString) >-PASS Unscopable handled correctly for append(USVString, USVString) on FormData >-PASS FormData interface: operation delete(USVString) >-PASS Unscopable handled correctly for delete(USVString) on FormData >-PASS FormData interface: operation get(USVString) >-PASS Unscopable handled correctly for get(USVString) on FormData >-PASS FormData interface: operation getAll(USVString) >-PASS Unscopable handled correctly for getAll(USVString) on FormData >-PASS FormData interface: operation has(USVString) >-PASS Unscopable handled correctly for has(USVString) on FormData >-PASS FormData interface: operation set(USVString, Blob, USVString) >-PASS Unscopable handled correctly for set(USVString, Blob, USVString) on FormData >-PASS FormData interface: operation set(USVString, USVString) >-PASS Unscopable handled correctly for set(USVString, USVString) on FormData >-PASS FormData must be primary interface of new FormData() >-PASS Stringification of new FormData() >-PASS FormData interface: new FormData() must inherit property "append(USVString, Blob, USVString)" with the proper type >-PASS FormData interface: calling append(USVString, Blob, USVString) on new FormData() with too few arguments must throw TypeError >-PASS FormData interface: new FormData() must inherit property "append(USVString, USVString)" with the proper type >-PASS FormData interface: calling append(USVString, USVString) on new FormData() with too few arguments must throw TypeError >-PASS FormData interface: new FormData() must inherit property "delete(USVString)" with the proper type >-PASS FormData interface: calling delete(USVString) on new FormData() with too few arguments must throw TypeError >-PASS FormData interface: new FormData() must inherit property "get(USVString)" with the proper type >-PASS FormData interface: calling get(USVString) on new FormData() with too few arguments must throw TypeError >-PASS FormData interface: new FormData() must inherit property "getAll(USVString)" with the proper type >-PASS FormData interface: calling getAll(USVString) on new FormData() with too few arguments must throw TypeError >-PASS FormData interface: new FormData() must inherit property "has(USVString)" with the proper type >-PASS FormData interface: calling has(USVString) on new FormData() with too few arguments must throw TypeError >-PASS FormData interface: new FormData() must inherit property "set(USVString, Blob, USVString)" with the proper type >-PASS FormData interface: calling set(USVString, Blob, USVString) on new FormData() with too few arguments must throw TypeError >-PASS FormData interface: new FormData() must inherit property "set(USVString, USVString)" with the proper type >-PASS FormData interface: calling set(USVString, USVString) on new FormData() with too few arguments must throw TypeError >-PASS FormData must be primary interface of new FormData(form) >-PASS Stringification of new FormData(form) >-PASS FormData interface: new FormData(form) must inherit property "append(USVString, Blob, USVString)" with the proper type >-PASS FormData interface: calling append(USVString, Blob, USVString) on new FormData(form) with too few arguments must throw TypeError >-PASS FormData interface: new FormData(form) must inherit property "append(USVString, USVString)" with the proper type >-PASS FormData interface: calling append(USVString, USVString) on new FormData(form) with too few arguments must throw TypeError >-PASS FormData interface: new FormData(form) must inherit property "delete(USVString)" with the proper type >-PASS FormData interface: calling delete(USVString) on new FormData(form) with too few arguments must throw TypeError >-PASS FormData interface: new FormData(form) must inherit property "get(USVString)" with the proper type >-PASS FormData interface: calling get(USVString) on new FormData(form) with too few arguments must throw TypeError >-PASS FormData interface: new FormData(form) must inherit property "getAll(USVString)" with the proper type >-PASS FormData interface: calling getAll(USVString) on new FormData(form) with too few arguments must throw TypeError >-PASS FormData interface: new FormData(form) must inherit property "has(USVString)" with the proper type >-PASS FormData interface: calling has(USVString) on new FormData(form) with too few arguments must throw TypeError >-PASS FormData interface: new FormData(form) must inherit property "set(USVString, Blob, USVString)" with the proper type >-PASS FormData interface: calling set(USVString, Blob, USVString) on new FormData(form) with too few arguments must throw TypeError >-PASS FormData interface: new FormData(form) must inherit property "set(USVString, USVString)" with the proper type >-PASS FormData interface: calling set(USVString, USVString) on new FormData(form) with too few arguments must throw TypeError >-PASS ProgressEvent interface: existence and properties of interface object >-PASS ProgressEvent interface object length >-PASS ProgressEvent interface object name >-PASS ProgressEvent interface: existence and properties of interface prototype object >-PASS ProgressEvent interface: existence and properties of interface prototype object's "constructor" property >-PASS ProgressEvent interface: existence and properties of interface prototype object's @@unscopables property >-PASS ProgressEvent interface: attribute lengthComputable >-PASS Unscopable handled correctly for lengthComputable property on ProgressEvent >-PASS ProgressEvent interface: attribute loaded >-PASS Unscopable handled correctly for loaded property on ProgressEvent >-PASS ProgressEvent interface: attribute total >-PASS Unscopable handled correctly for total property on ProgressEvent >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/interfaces.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/interfaces.html >deleted file mode 100644 >index 56ba5523e318ba6419e3b7fbbf75313561a873f6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/interfaces.html >+++ /dev/null >@@ -1,136 +0,0 @@ >-<!doctype html> >-<meta charset=utf-8> >-<title>XMLHttpRequest IDL tests</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<script src=/resources/WebIDLParser.js></script> >-<script src=/resources/idlharness.js></script> >- >-<h1>XMLHttpRequest IDL tests</h1> >-<div id=log></div> >- >-<script type=text/plain class=untested> >-[TreatNonCallableAsNull] >-callback EventHandlerNonNull = any (Event event); >-typedef EventHandlerNonNull? EventHandler; >-</script> >-<script type=text/plain> >-/*[Exposed=(Window,Worker)]*/ >-interface XMLHttpRequestEventTarget : EventTarget { >- // event handlers >- attribute EventHandler onloadstart; >- attribute EventHandler onprogress; >- attribute EventHandler onabort; >- attribute EventHandler onerror; >- attribute EventHandler onload; >- attribute EventHandler ontimeout; >- attribute EventHandler onloadend; >-}; >- >-/*[Exposed=(Window,Worker)]*/ >-interface XMLHttpRequestUpload : XMLHttpRequestEventTarget { >-}; >- >-enum XMLHttpRequestResponseType { >- "", >- "arraybuffer", >- "blob", >- "document", >- "json", >- "text" >-}; >- >-[Constructor/*, >- Exposed=(Window,Worker)*/] >-interface XMLHttpRequest : XMLHttpRequestEventTarget { >- // event handler >- attribute EventHandler onreadystatechange; >- >- // states >- const unsigned short UNSENT = 0; >- const unsigned short OPENED = 1; >- const unsigned short HEADERS_RECEIVED = 2; >- const unsigned short LOADING = 3; >- const unsigned short DONE = 4; >- readonly attribute unsigned short readyState; >- >- // request >- void open(ByteString method, USVString url); >- void open(ByteString method, USVString url, boolean async, optional USVString? username = null, optional USVString? password = null); >- void setRequestHeader(ByteString name, ByteString value); >- attribute unsigned long timeout; >- attribute boolean withCredentials; >- readonly attribute XMLHttpRequestUpload upload; >- void send(optional (Document or BodyInit)? body = null); >- void abort(); >- >- // response >- readonly attribute USVString responseURL; >- readonly attribute unsigned short status; >- readonly attribute ByteString statusText; >- ByteString? getResponseHeader(ByteString name); >- ByteString getAllResponseHeaders(); >- void overrideMimeType(DOMString mime); >- attribute XMLHttpRequestResponseType responseType; >- readonly attribute any response; >- readonly attribute USVString responseText; >- [Exposed=Window] readonly attribute Document? responseXML; >-}; >- >-typedef (File or USVString) FormDataEntryValue; >- >-[Constructor(optional HTMLFormElement form)/*, >- Exposed=(Window,Worker)*/] >-interface FormData { >- void append(USVString name, Blob value, optional USVString filename); >- void append(USVString name, USVString value); >- void delete(USVString name); >- FormDataEntryValue? get(USVString name); >- sequence<FormDataEntryValue> getAll(USVString name); >- boolean has(USVString name); >- void set(USVString name, Blob value, optional USVString filename); >- void set(USVString name, USVString value); >- /*iterable<USVString, FormDataEntryValue>;*/ >-}; >- >-[Constructor(DOMString type, optional ProgressEventInit eventInitDict)/*, >- Exposed=(Window,Worker)*/] >-interface ProgressEvent : Event { >- readonly attribute boolean lengthComputable; >- readonly attribute unsigned long long loaded; >- readonly attribute unsigned long long total; >-}; >- >-dictionary ProgressEventInit : EventInit { >- boolean lengthComputable = false; >- unsigned long long loaded = 0; >- unsigned long long total = 0; >-}; >-</script> >-<script> >-"use strict"; >-var form = document.createElement("form"); >-var idlArray = new IdlArray(); >- >-function doTest(domIdl) { >- idlArray.add_untested_idls(domIdl); >- [].forEach.call(document.querySelectorAll("script[type=text\\/plain]"), function(node) { >- if (node.className == "untested") { >- idlArray.add_untested_idls(node.textContent); >- } else { >- idlArray.add_idls(node.textContent); >- } >- }); >- idlArray.add_objects({ >- XMLHttpRequest: ['new XMLHttpRequest()'], >- XMLHttpRequestUpload: ['(new XMLHttpRequest()).upload'], >- FormData: ['new FormData()', 'new FormData(form)'] >- }); >- idlArray.test(); >-} >- >-promise_test(function() { >- return fetch("/interfaces/dom.idl").then(response => response.text()) >- .then(doTest); >-}, "Test driver"); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/loadstart-and-state-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/loadstart-and-state-expected.txt >deleted file mode 100644 >index 7575d231f3ae7a9bf5dc4e3a0a54f9455657376b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/loadstart-and-state-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS open() during loadstart >-PASS abort() during loadstart >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/loadstart-and-state.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/loadstart-and-state.html >deleted file mode 100644 >index 460b2bfc99085b1d6b900860f3250f0f6ac70262..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/loadstart-and-state.html >+++ /dev/null >@@ -1,40 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: loadstart event corner cases</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<div id=log></div> >-<script> >-async_test(t => { >- const client = new XMLHttpRequest >- client.onloadstart = t.step_func(() => { >- assert_throws("InvalidStateError", () => client.setRequestHeader("General", "Organa")) >- assert_throws("InvalidStateError", () => client.withCredentials = true) >- assert_throws("InvalidStateError", () => client.send()) >- client.onloadstart = null >- client.open("GET", "data:,BB-8") >- client.send() >- }) >- client.onload = t.step_func_done(() => { >- assert_equals(client.responseText, "BB-8") >- }) >- client.open("GET", "data:,R2-D2") >- client.send() >-}, "open() during loadstart") >- >-async_test(t => { >- const client = new XMLHttpRequest >- let abortFired = false >- client.onloadstart = t.step_func_done(() => { >- assert_equals(client.readyState, 1) >- client.abort() >- assert_true(abortFired) >- assert_equals(client.readyState, 0) >- }) >- client.onabort = t.step_func(() => { >- abortFired = true >- assert_equals(client.readyState, 4) >- }) >- client.open("GET", "data:,K-2SO") >- client.send() >-}, "abort() during loadstart") >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-abort-expected.txt >deleted file mode 100644 >index d9897098c7ac58a0cb06e13d2bdf40d78a133189..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-abort-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() after abort() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-abort.htm >deleted file mode 100644 >index c9c6304422805fc3a137d0a05701af46e6884b5e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-abort.htm >+++ /dev/null >@@ -1,35 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: open() after abort()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[15] following::ol/li[15]/ol/li[1] following::ol/li[15]/ol/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest(), >- result = [], >- expected = [1, 4, 1] // open() -> 1, >- // abort() -> 4, open() -> 1 >- client.onreadystatechange = function() { >- test.step(function() { >- result.push(client.readyState) >- }) >- } >- client.open("GET", "resources/well-formed.xml") >- assert_equals(client.readyState, 1) >- client.send(null) >- client.abort() >- assert_equals(client.readyState, 0) >- client.open("GET", "resources/well-formed.xml") >- assert_equals(client.readyState, 1) >- assert_array_equals(result, expected) >- }) >- test.done() >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-setrequestheader-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-setrequestheader-expected.txt >deleted file mode 100644 >index c0f06f74349bf36e3eec962c29c0680cfd2c334c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-setrequestheader-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() after setRequestHeader() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-setrequestheader.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-setrequestheader.htm >deleted file mode 100644 >index ca1ae25946f0ef00074d7884cdbe28bf753bc2a2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-setrequestheader.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: open() after setRequestHeader()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method"> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState === 4){ >- assert_equals(client.responseText, '') >- test.done() >- } >- }) >- } >- client.open("GET", "resources/inspect-headers.py?filter_name=X-foo") >- assert_equals(client.readyState, 1) >- client.setRequestHeader('X-foo', 'bar') >- client.open("GET", "resources/inspect-headers.py?filter_name=X-foo") >- assert_equals(client.readyState, 1) >- client.send() >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-event-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-event-expected.txt >deleted file mode 100644 >index b977f03b9128f7738bf38dd5156c9b718566f136..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-event-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() during abort event - abort() called from upload.onloadstart >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-event.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-event.htm >deleted file mode 100644 >index 22c3be9bc44c59fb297581bee3cac390d9a68b3d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-event.htm >+++ /dev/null >@@ -1,56 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: open() during abort event - abort() called from upload.onloadstart</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<script> >-async_test(t => { >- let client = new XMLHttpRequest(), >- log = [], >- lastTest = false, >- expected = [ >- 'readyState before abort() 1', >- "upload.onabort - before open() 4", >- "readyState after open() 1", >- "client.onabort 1", >- "client.onloadend 1", >- "readyState after abort() 1", >- "client.onload 4", >- "client.onloadend 4" >- ] >- >- client.upload.onloadstart = t.step_func(() => { >- log.push('readyState before abort() '+client.readyState) >- client.abort() >- log.push('readyState after abort() '+client.readyState) >- }) >- >- client.upload.onabort = t.step_func(() => { >- log.push('upload.onabort - before open() ' + client.readyState) >- client.open("GET", "resources/content.py") >- log.push('readyState after open() ' + client.readyState) >- client.send(null) >- }) >- >- client.onabort = t.step_func(() => { >- // happens immediately after all of upload.onabort, so readyState is 1 >- log.push('client.onabort ' + client.readyState) >- }) >- >- client.onloadend = t.step_func(() => { >- log.push('client.onloadend ' + client.readyState) >- if(lastTest) { >- assert_array_equals(log, expected) >- t.done() >- } >- lastTest = true >- }) >- >- client.onload = t.step_func(() => { >- log.push('client.onload ' + client.readyState) >- }) >- >- client.open("POST", "resources/content.py") >- client.send("non-empty") >-}) >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-expected.txt >deleted file mode 100644 >index aff28d253a0c01dacb42bf5ee5cb7928fa440b24..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() during abort() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-processing-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-processing-expected.txt >deleted file mode 100644 >index 9192154ee9caa14344223d7c274bdece62af868f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-processing-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-FAIL XMLHttpRequest: open() during abort processing - abort() called from onloadstart assert_array_equals: lengths differ, expected 9 got 7 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-processing.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-processing.htm >deleted file mode 100644 >index 5d80babd9d015bd527a3e8a49b0f4165fd711c81..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-processing.htm >+++ /dev/null >@@ -1,64 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: open() during abort processing - abort() called from onloadstart</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<script> >-async_test(t => { >- let client = new XMLHttpRequest(), >- test_state = 1, >- log = [], >- expected = [ >- "onloadstart readyState before abort() 1", >- "onreadystatechange readyState before open() 4", >- "onreadystatechange readyState after open() 1", >- "onloadstart readyState 1", >- "upload.onabort 1", >- "upload.onloadend 1", >- "client.onabort 1", >- "readyState after abort() 1", >- "client.onload 4" >- ] >- >- client.onreadystatechange = t.step_func(() => { >- if(test_state === 2){ >- test_state = 3 >- log.push('onreadystatechange readyState before open() ' + client.readyState) >- client.open("GET", "resources/content.py") >- log.push('onreadystatechange readyState after open() ' + client.readyState) >- client.send(null) >- } >- }) >- >- client.onloadstart = t.step_func(() => { >- if(test_state === 1){ >- test_state = 2 >- log.push('onloadstart readyState before abort() ' + client.readyState) >- client.abort() >- log.push('readyState after abort() ' + client.readyState) >- }else{ >- log.push('onloadstart readyState ' + client.readyState) >- } >- }) >- >- client.upload.onabort = t.step_func(() => { >- log.push('upload.onabort ' + client.readyState) >- }) >- >- client.onabort = t.step_func(() => { >- log.push('client.onabort ' + client.readyState) >- }) >- >- client.upload.onloadend = t.step_func(() => { >- log.push('upload.onloadend ' + client.readyState) >- }) >- >- client.onload = t.step_func_done(() => { >- log.push('client.onload ' + client.readyState) >- assert_array_equals(log, expected) >- }) >- >- client.open("POST", "resources/content.py") >- client.send('abcd') >-}) >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort.htm >deleted file mode 100644 >index d03ca7afa6337c5952dcb4361d6f829cdf56c6a0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: open() during abort()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest(), >- abort_flag = false, >- result = [], >- expected = [1, 4, 1] // open() => 1, abort() => 4, open() => 1 >- >- client.onreadystatechange = this.step_func(function() { >- result.push(client.readyState) >- if (abort_flag) { >- abort_flag = false >- client.open("GET", "...") >- } >- }) >- client.open("GET", "resources/well-formed.xml") >- client.send(null) >- abort_flag = true >- client.abort() >- assert_array_equals(result, expected) >- assert_equals(client.readyState, 1) // abort() should only set state to UNSENT when DONE >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-bogus-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-bogus-expected.txt >deleted file mode 100644 >index 1d9ac8e591d4ed386929cac03ee860ea0f694d8d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-bogus-expected.txt >+++ /dev/null >@@ -1,11 +0,0 @@ >- >-PASS XMLHttpRequest: open() - bogus methods () >-PASS XMLHttpRequest: open() - bogus methods (>) >-PASS XMLHttpRequest: open() - bogus methods ( GET) >-PASS XMLHttpRequest: open() - bogus methods (G T) >-PASS XMLHttpRequest: open() - bogus methods (@GET) >-PASS XMLHttpRequest: open() - bogus methods (G:ET) >-PASS XMLHttpRequest: open() - bogus methods (GET?) >-PASS XMLHttpRequest: open() - bogus methods (GET >-) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-bogus.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-bogus.htm >deleted file mode 100644 >index 263e7b6db7eb1581028bad1c742627d597e90540..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-bogus.htm >+++ /dev/null >@@ -1,28 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - bogus methods</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function method(method) { >- test(function() { >- var client = new XMLHttpRequest() >- assert_throws("SyntaxError", function() { client.open(method, "...") }) >- }, document.title + " (" + method + ")") >- } >- method("") >- method(">") >- method(" GET") >- method("G T") >- method("@GET") >- method("G:ET") >- method("GET?") >- method("GET\n") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-insensitive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-insensitive-expected.txt >deleted file mode 100644 >index 35d901e75a66f36933a33fa273f4bdafc3f43bc0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-insensitive-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >- >-PASS XMLHttpRequest: open() - case-insensitive methods test (DELETE) >-PASS XMLHttpRequest: open() - case-insensitive methods test (GET) >-PASS XMLHttpRequest: open() - case-insensitive methods test (HEAD) >-PASS XMLHttpRequest: open() - case-insensitive methods test (OPTIONS) >-PASS XMLHttpRequest: open() - case-insensitive methods test (POST) >-PASS XMLHttpRequest: open() - case-insensitive methods test (PUT) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-insensitive.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-insensitive.htm >deleted file mode 100644 >index 103381745a7b84a042bbdcdff4d16c4b2ac6af2c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-insensitive.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - case-insensitive methods test</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[5]" /> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- function method(method) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open(method, "resources/content.py", false) >- client.send(null) >- assert_equals(client.getResponseHeader("x-request-method"), method.toUpperCase()) >- }, document.title + " (" + method.toUpperCase() + ")") >- } >- method("deLETE") >- method("get") >- method("heAd") >- method("OpTIOns") >- method("post") >- method("Put") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-sensitive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-sensitive-expected.txt >deleted file mode 100644 >index 75afa6db090808f0bddaa0743062ac7cddcfc1b7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-sensitive-expected.txt >+++ /dev/null >@@ -1,11 +0,0 @@ >- >-PASS XMLHttpRequest: open() - case-sensitive methods test (XUNICORN) >-PASS XMLHttpRequest: open() - case-sensitive methods test (xUNIcorn) >-PASS XMLHttpRequest: open() - case-sensitive methods test (chiCKEN) >-PASS XMLHttpRequest: open() - case-sensitive methods test (PATCH) >-PASS XMLHttpRequest: open() - case-sensitive methods test (patCH) >-PASS XMLHttpRequest: open() - case-sensitive methods test (copy) >-PASS XMLHttpRequest: open() - case-sensitive methods test (COpy) >-PASS XMLHttpRequest: open() - case-sensitive methods test (inDEX) >-PASS XMLHttpRequest: open() - case-sensitive methods test (movE) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-sensitive.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-sensitive.htm >deleted file mode 100644 >index 270e32d67a369af22f5ee5ebbf1c040e91eb0686..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-sensitive.htm >+++ /dev/null >@@ -1,31 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - case-sensitive methods test</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[5]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function method(method) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open(method, "resources/content.py", false) >- client.send(null) >- assert_equals(client.getResponseHeader("x-request-method"), method) >- }, document.title + " (" + method + ")") >- } >- method("XUNICORN") >- method("xUNIcorn") >- method("chiCKEN") >- method("PATCH") >- method("patCH") >- method("copy") >- method("COpy") >- method("inDEX") >- method("movE") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-insecure-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-insecure-expected.txt >deleted file mode 100644 >index 1e89555e15a3e2b59b7a2cc117473367da689da7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-insecure-expected.txt >+++ /dev/null >@@ -1,11 +0,0 @@ >- >-PASS XMLHttpRequest: open() - "insecure" methods (track) >-PASS XMLHttpRequest: open() - "insecure" methods (TRACK) >-PASS XMLHttpRequest: open() - "insecure" methods (trAck) >-PASS XMLHttpRequest: open() - "insecure" methods (TRACE) >-PASS XMLHttpRequest: open() - "insecure" methods (trace) >-PASS XMLHttpRequest: open() - "insecure" methods (traCE) >-PASS XMLHttpRequest: open() - "insecure" methods (connect) >-PASS XMLHttpRequest: open() - "insecure" methods (CONNECT) >-PASS XMLHttpRequest: open() - "insecure" methods (connECT) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-insecure.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-insecure.htm >deleted file mode 100644 >index 1a77ff3ec7973005982544d1781470a2cd7d0df1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-insecure.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - "insecure" methods</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[5] following::ol/li[6]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function method(method) { >- test(function() { >- var client = new XMLHttpRequest() >- assert_throws("SecurityError", function() { client.open(method, "...") }) >- }, document.title + " (" + method + ")") >- } >- method("track") >- method("TRACK") >- method("trAck") >- method("TRACE") >- method("trace") >- method("traCE") >- method("connect") >- method("CONNECT") >- method("connECT") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-responsetype-set-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-responsetype-set-sync-expected.txt >deleted file mode 100644 >index c326d18d65c8aff06fb1ffe90427148baefd67f1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-responsetype-set-sync-expected.txt >+++ /dev/null >@@ -1,12 +0,0 @@ >-CONSOLE MESSAGE: line 22: Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set. >-CONSOLE MESSAGE: line 22: Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set. >-CONSOLE MESSAGE: line 22: Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set. >-CONSOLE MESSAGE: line 22: Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set. >-CONSOLE MESSAGE: line 22: Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set. >- >-PASS XMLHttpRequest: open() sync request not allowed if responseType is set (arraybuffer) >-PASS XMLHttpRequest: open() sync request not allowed if responseType is set (blob) >-PASS XMLHttpRequest: open() sync request not allowed if responseType is set (json) >-PASS XMLHttpRequest: open() sync request not allowed if responseType is set (text) >-PASS XMLHttpRequest: open() sync request not allowed if responseType is set (document) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-responsetype-set-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-responsetype-set-sync.htm >deleted file mode 100644 >index 0b4d814041c525285999186a7b3d5074235e1f7b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-responsetype-set-sync.htm >+++ /dev/null >@@ -1,32 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() sync request not allowed if responseType is set</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[10]" /> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- // Note: the case of calling synchronous open() first, and then setting >- // responseType, is tested in responsetype.html. >- function request(type) { >- test(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = this.step_func(function(){ >- assert_unreached('No events should fire here') >- }) >- client.responseType = type >- assert_throws("InvalidAccessError", function() { client.open('GET', "...", false) }) >- }, document.title + " (" + type + ")") >- } >- request("arraybuffer") >- request("blob") >- request("json") >- request("text") >- request("document") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-send-expected.txt >deleted file mode 100644 >index 9fee613b41403d61b0522f10fd9f1c94ad2645cb..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-send-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() - open() - send() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-send.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-send.htm >deleted file mode 100644 >index ebc1801ab53031867a2084ddbca039131988e790..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-send.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - open() - send()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[14]/ul/li[1] following::ol/li[14]/ul/li[2] following::ol/li[15]/ol/li[1] following::ol/li[15]/ol/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest(), >- result = [], >- expected = [1,2,3,4] >- client.onreadystatechange = function() { >- test.step(function() { >- result.push(client.readyState) >- if(4 == client.readyState) { >- assert_array_equals(result, expected) >- assert_equals(client.responseText, 'top\n') >- test.done() >- } >- }) >- } >- client.open("GET", "resources/folder.txt") >- client.open("GET", "folder.txt") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-sync-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-sync-send-expected.txt >deleted file mode 100644 >index 59276eedeb8fd6186cd45e44f089853fc6c55cb0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-sync-send-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() - open() (sync) - send() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-sync-send.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-sync-send.htm >deleted file mode 100644 >index b0badfd8aa0776d53c1061f530a2e7a47802a39e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-sync-send.htm >+++ /dev/null >@@ -1,31 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - open() (sync) - send()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[14]/ul/li[1] following::ol/li[14]/ul/li[2] following::ol/li[14]/ul/li[3] following::ol/li[15]/ol/li[1] following::ol/li[15]/ol/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest(), >- result = [], >- expected = [1,4] >- client.onreadystatechange = function() { >- test.step(function() { >- result.push(client.readyState) >- }) >- } >- client.open("GET", "folder.txt") >- client.open("GET", "folder.txt", false) >- client.send(null) >- assert_equals(client.responseText, 'top\n') >- assert_array_equals(result, expected) >- test.done() >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-referer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-referer-expected.txt >deleted file mode 100644 >index e2343440c7bb1b032524348f2b247d0084b5d609..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-referer-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() - value of Referer header >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-referer.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-referer.htm >deleted file mode 100644 >index d7ed793ebe22991c1fed2c143f42b2a8ccbcdad2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-referer.htm >+++ /dev/null >@@ -1,20 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - value of Referer header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- client.open("POST", "resources/inspect-headers.py?filter_name=referer", false) >- client.send(null) >- assert_equals(client.responseText, "Referer: "+location.href+'\n') >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-during-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-during-abort-expected.txt >deleted file mode 100644 >index aff28d253a0c01dacb42bf5ee5cb7928fa440b24..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-during-abort-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() during abort() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-during-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-during-abort.htm >deleted file mode 100644 >index dc6f86bfc2c72e9ee3f9ac88f8859545b71ee2fe..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-during-abort.htm >+++ /dev/null >@@ -1,27 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: open() during abort()</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<script> >-async_test(t => { >- let result = [], >- client = new XMLHttpRequest(), >- expected = [1, 4, 1, 'hello'] >- client.open("GET", "data:text/plain,") >- result.push(client.readyState) >- client.send() >- client.onreadystatechange = t.step_func(() => { >- client.onreadystatechange = null >- result.push(client.readyState) >- client.open("GET", "data:text/plain,hello") >- client.onload = t.step_func_done(() => { >- result.push(client.responseText) >- assert_array_equals(result, expected) >- }) >- client.send() >- }) >- client.abort() >- result.push(client.readyState) // surprise! should not be "unsent" even though we called abort() >-}) >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-open-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-open-expected.txt >deleted file mode 100644 >index 3a0549cd8ab8954e7806aed55df83a66b5cdc808..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-open-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() - send() - open() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-open.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-open.htm >deleted file mode 100644 >index d57592c0ba30249f6ccf0db45a48ac2c6f50a334..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-open.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - send() - open()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[14]/ul/li[1] following::ol/li[14]/ul/li[2] following::ol/li[15]/ol/li[1] following::ol/li[15]/ol/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest(), >- result = [], >- expected = [1, 'a', 'b', 'c'] >- client.onreadystatechange = function() { >- test.step(function() { >- result.push(client.readyState) >- }) >- } >- client.open("GET", "folder.txt") >- result.push('a') >- client.send() >- result.push('b') >- client.open("GET", "folder.txt") >- result.push('c') >- assert_array_equals(result, expected) >- test.done() >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-sync-open-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-sync-open-send-expected.txt >deleted file mode 100644 >index 895833309d3fcc829adf94183185b24e9026152d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-sync-open-send-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() (sync) - send() - open() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-sync-open-send.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-sync-open-send.htm >deleted file mode 100644 >index cc81c52239485837dc8a23f1d685959e5ea9dea5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-sync-open-send.htm >+++ /dev/null >@@ -1,41 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() (sync) - send() - open()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[14]/ul/li[1] following::ol[1]/li[14]/ul/li[2] following::ol[1]/li[14]/ul/li[3] following::ol[1]/li[15]/ol/li[1] following::ol[1]/li[15]/ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol[1]/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method" data-tested-assertations="following::ol[1]/li[1]" /> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest(), >- result = [], >- expected = [1] >- client.onreadystatechange = function() { >- test.step(function() { >- result.push(client.readyState) >- }) >- } >- client.open("GET", "folder.txt") >- client.send(null) >- client.open("GET", "folder.txt", false) >- assert_array_equals(result, expected) >- assert_equals(client.responseXML, null) >- assert_equals(client.responseText, "") >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.getAllResponseHeaders(), "") >- test.done() >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-about-blank-window-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-about-blank-window-expected.txt >deleted file mode 100644 >index a07422437743fb79e480832388c13679f9f972b3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-about-blank-window-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() resolving URLs (about:blank iframe) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-about-blank-window.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-about-blank-window.htm >deleted file mode 100644 >index 5be3b77ddfebeb7fc76bda250bce159e3a2354a0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-about-blank-window.htm >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: open() resolving URLs (about:blank iframe)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[2]/ol/li[2] following::ol/li[7] following::ol/li[14]/ul/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#concept-xmlhttprequest-document" data-tested-assertations=".." /> >- </head> >- <body> >- <div id="log"></div> >- <iframe src="about:blank"></iframe> >- <script> >- test(function() { >- var client = new self[0].XMLHttpRequest() >- client.open("GET", "folder.txt", false) >- client.send("") >- assert_equals(client.responseText, "top\n") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-expected.txt >deleted file mode 100644 >index b27ffd1d6037dc5f9c59b7dbb39f1d5b1ddd17dd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() resolving URLs - <base> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted-after-open-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted-after-open-expected.txt >deleted file mode 100644 >index ea5fffd61a3e8c7230fc68a6bcc0722af01f1b4b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted-after-open-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() resolving URLs - insert <base> after open() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted-after-open.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted-after-open.htm >deleted file mode 100644 >index a4d641fafcf42c657b835177d5709138752d237e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted-after-open.htm >+++ /dev/null >@@ -1,24 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() resolving URLs - insert <base> after open()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[2]/ol/li[2] following::ol/li[7] following::ol/li[14]/ul/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest(), >- base = document.createElement("base") >- base.href = location.href.replace(/\/[^/]*$/, '') + "/resources/" >- client.open("GET", "folder.txt", false) >- document.getElementsByTagName("head")[0].appendChild(base) >- client.send(null) >- assert_equals(client.responseText, "top\n") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted-expected.txt >deleted file mode 100644 >index 30d3df21f09384a57eb81b771ede0b3bc251f628..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() resolving URLs - insert <base> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted.htm >deleted file mode 100644 >index 69ad6193d8e01469afe17a366b0e41fd0b142b8f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted.htm >+++ /dev/null >@@ -1,24 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() resolving URLs - insert <base></title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[2]/ol/li[2] following::ol/li[7] following::ol/li[14]/ul/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest(), >- base = document.createElement("base") >- base.href = location.href.replace(/\/[^/]*$/, '') + "/resources/" >- document.getElementsByTagName("head")[0].appendChild(base) >- client.open("GET", "folder.txt", false) >- client.send(null) >- assert_equals(client.responseText, "bottom\n") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base.htm >deleted file mode 100644 >index 3c0e8c99d51bb268d4eceea4d8136d82a7bc406d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base.htm >+++ /dev/null >@@ -1,22 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() resolving URLs - <base></title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <base href="./resources/"> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[2]/ol/li[2] following::ol/li[7] following::ol/li[14]/ul/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "folder.txt", false) >- client.send(null) >- assert_equals(client.responseText, "bottom\n") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-bogus-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-bogus-expected.txt >deleted file mode 100644 >index af528617df8ab95bc313847d90d2039c694dedc8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-bogus-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >- >-FAIL XMLHttpRequest: open() - bogus URLs (//[) assert_throws: function "function () { client.open("GET", url) }" did not throw >-FAIL XMLHttpRequest: open() - bogus URLs (ftp:) assert_throws: function "function () { client.open("GET", url) }" did not throw >-FAIL XMLHttpRequest: open() - bogus URLs (http://a a/) assert_throws: function "function () { client.open("GET", url) }" did not throw >-FAIL XMLHttpRequest: open() - bogus URLs (http:////////////) assert_throws: function "function () { client.open("GET", url) }" did not throw >-FAIL XMLHttpRequest: open() - bogus URLs (http://u:p@/) assert_throws: function "function () { client.open("GET", url) }" did not throw >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-bogus.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-bogus.htm >deleted file mode 100644 >index 117bd4958a531a0ab52cba2471e5997ae8a71991..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-bogus.htm >+++ /dev/null >@@ -1,25 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - bogus URLs</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[7] following::ol/li[8]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function url(url) { >- test(function() { >- var client = new XMLHttpRequest() >- assert_throws("SyntaxError", function() { client.open("GET", url) }) >- }, document.title + " (" + url + ")") >- } >- url("//[") >- url("ftp:") >- url("http://a a/") >- url("http:////////////") >- url("http://u:p@/") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-encoding-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-encoding-expected.txt >deleted file mode 100644 >index 34dc364db8acf726a1c24fd14c01703095d4f075..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-encoding-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-FAIL percent encode characters assert_equals: expected "%C3%9F" but got "%DF" >-FAIL lone surrogate should return U+FFFD assert_equals: expected "%EF%BF%BD" but got "%26%2355357%3B" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-encoding.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-encoding.htm >deleted file mode 100644 >index 7acdac86ad63366db640654c9ef45050915988a4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-encoding.htm >+++ /dev/null >@@ -1,27 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <meta charset=windows-1252> >- <title>XMLHttpRequest: open() - URL encoding</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[7] following::ol/li[14]/ul/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/content.py?\u00DF", false) // This is the German "eszett" character >- client.send() >- assert_equals(client.getResponseHeader("x-request-query"), "%C3%9F") >- }, "percent encode characters"); >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/content.py?\uD83D", false) >- client.send() >- assert_equals(client.getResponseHeader("x-request-query"), "%EF%BF%BD") >- }, "lone surrogate should return U+FFFD"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-fragment-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-fragment-expected.txt >deleted file mode 100644 >index 6363c388969c95a78111c39395cf5fe53a2e15ad..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-fragment-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS XMLHttpRequest: open() resolving URLs - fragment identifier >-PASS make sure fragment is removed from URL before request >-PASS make sure fragment is removed from URL before request (with query string) >-PASS make sure escaped # is not removed >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-fragment.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-fragment.htm >deleted file mode 100644 >index 6b3fdeb8ae85e218bd36217ccbf220bdede7df24..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-fragment.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() resolving URLs - fragment identifier</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[7]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "folder.txt#foobar", false) >- client.send(null) >- assert_equals(client.responseText, "top\n") >- }) >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/requri.py#foobar", false) >- client.send(null) >- assert_regexp_match(client.responseText, /XMLHttpRequest\/resources\/requri\.py$/) >- }, 'make sure fragment is removed from URL before request') >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/requri.py?help=#foobar", false) >- client.send(null) >- assert_regexp_match(client.responseText, /XMLHttpRequest\/resources\/requri\.py\?help=$/) >- }, 'make sure fragment is removed from URL before request (with query string)') >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/requri.py?" +encodeURIComponent("#foobar"), false) >- client.send(null) >- assert_regexp_match(client.responseText, /XMLHttpRequest\/resources\/requri\.py\?%23foobar$/) >- }, 'make sure escaped # is not removed') >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window-2-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window-2-expected.txt >deleted file mode 100644 >index 01a6a4d25eed8d9c0dfd6a9ee828b45c0ba956da..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window-2-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() - resolving URLs (javascript: <iframe>; 2) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window-2.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window-2.htm >deleted file mode 100644 >index f5ddd42497658d6569d5fee80d3efb8f53e29f70..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window-2.htm >+++ /dev/null >@@ -1,19 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - resolving URLs (javascript: <iframe>; 2)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[2] following::ol[1]/li[7] following::ol[1]/li[14]/ul/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var iframe = document.body.appendChild(document.createElement("iframe")) >- iframe.src = "javascript:parent.test.step(function() { var x = new XMLHttpRequest(); x.open('GET', 'folder.txt', false); x.send(null); parent.assert_equals(x.responseText, 'top\\n'); parent.test.done() })" >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window-expected.txt >deleted file mode 100644 >index c17f3752f29fa9b12de46142f8b6300bff616b90..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() - resolving URLs (javascript: <iframe>; 1) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window.htm >deleted file mode 100644 >index cd208d51ad34b7274b5c2193b708daac18ec534e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window.htm >+++ /dev/null >@@ -1,28 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - resolving URLs (javascript: <iframe>; 1)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[2] following::ol[1]/li[7] following::ol[1]/li[14]/ul/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- function request() { >- test.step(function() { >- var x = new XMLHttpRequest() >- x.open("GET", "folder.txt", false) >- x.send(null) >- assert_equals(x.responseText, "top\n") >- test.done() >- }) >- } >- test.step(function() { >- var iframe = document.body.appendChild(document.createElement("iframe")) >- iframe.src = "javascript:parent.request()" >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-2-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-2-expected.txt >deleted file mode 100644 >index e5256981afdf891bbcaa460652b573d612e838a3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-2-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-FAIL XMLHttpRequest: open() resolving URLs (multi-Window; 2; evil) assert_throws: open() when associated document's IFRAME is removed function "function () { >- client.open("GET", "folder.txt") >- }" did not throw >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-2.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-2.htm >deleted file mode 100644 >index ed4ba01576b59b1cf25a580c05b3a6383d5d16c1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-2.htm >+++ /dev/null >@@ -1,24 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: open() resolving URLs (multi-Window; 2; evil)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function init(){ // called from page inside IFRAME >- test(function() { >- var client = new self[0].XMLHttpRequest() >- document.body.removeChild(document.getElementsByTagName("iframe")[0]) >- assert_throws("InvalidStateError", function() { >- client.open("GET", "folder.txt") >- }, "open() when associated document's IFRAME is removed") >- }) >- } >- </script> >- <iframe src="resources/init.htm"></iframe> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-3-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-3-expected.txt >deleted file mode 100644 >index 281a295e5c3da638f83d81c5e24daa1b299d3341..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-3-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-FAIL XMLHttpRequest: open() resolving URLs (multi-Window; 3; evil) assert_throws: send() when associated document's IFRAME is removed function "function () { >- client.send(null) >- }" did not throw >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-3.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-3.htm >deleted file mode 100644 >index 344434b0e7c694ccb52bc9a63ab5e5bef3f21f24..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-3.htm >+++ /dev/null >@@ -1,24 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: open() resolving URLs (multi-Window; 3; evil)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function init() { >- test(function() { >- var client = new self[0].XMLHttpRequest() >- client.open("GET", "folder.txt") >- document.body.removeChild(document.getElementsByTagName("iframe")[0]) >- assert_throws("InvalidStateError", function() { >- client.send(null) >- }, "send() when associated document's IFRAME is removed") >- }) >- } >- </script> >- <iframe src="resources/init.htm"></iframe> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-4-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-4-expected.txt >deleted file mode 100644 >index 6ad8b6b4f6ce01c4327f54e55192427d1caab4f3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-4-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() resolving URLs (multi-Window; 4; evil) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-4.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-4.htm >deleted file mode 100644 >index 3804c9b3871a75622820167b52409ae0f8122114..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-4.htm >+++ /dev/null >@@ -1,50 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: open() resolving URLs (multi-Window; 4; evil)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- </head> >- <body> >- <div id="log"></div> >- <script> >- /* >- It's unclear what the pass condition should be for this test. >- Implementations: >- Firefox, Opera (Presto): terminate request with no further events when IFRAME is removed. >- Chrome: completes request to readyState=4 but responseText is "" so it's pretty much terminated with an extra event for "DONE" state >- Pass condition is now according to my suggested spec text in https://github.com/whatwg/xhr/pull/3 , if that's not accepted we'll have to amend this test >- */ >- var test = async_test() >- function init() { >- test.step(function() { >- var hasErrorEvent = false >- var client = new self[0].XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 4) { >- assert_equals(client.responseText, "", "responseText is empty on inactive document error condition") >- } >- }) >- } >- client.addEventListener('error', function(){ >- test.step(function() { >- hasErrorEvent = true >- assert_equals(client.readyState, 4, "readyState is 4 when error listener fires") >- }) >- }) >- client.addEventListener('loadend', function(){ >- test.step(function() { >- assert_true(hasErrorEvent, "should get an error event") >- test.done() >- }) >- }) >- client.open("GET", "folder.txt") >- client.send(null) >- document.body.removeChild(document.getElementsByTagName("iframe")[0]) >- }) >- } >- </script> >- <iframe src="resources/init.htm"></iframe> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-5-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-5-expected.txt >deleted file mode 100644 >index 6b36111155f282bf669c8bd028ff3132dbe429e6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-5-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-FAIL XMLHttpRequest: open() resolving URLs (multi-Window; 5) assert_throws: function "function () { client.open("GET", "...") }" did not throw >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-5.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-5.htm >deleted file mode 100644 >index a27d2b366c0680d2a30cbb107c3496abb0264908..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-5.htm >+++ /dev/null >@@ -1,30 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() resolving URLs (multi-Window; 5)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(), >- client, >- count = 0 >- function init() { >- test.step(function() { >- if(0 == count) { >- client = new self[0].XMLHttpRequest() >- count++ >- self[0].location.reload() >- } else if(1 == count) { >- assert_throws("InvalidStateError", function() { client.open("GET", "...") }) >- test.done() >- } >- }) >- } >- </script> >- <iframe src="resources/init.htm"></iframe> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-6-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-6-expected.txt >deleted file mode 100644 >index f6a1ba979dabb027184013097c4030b64a0917af..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-6-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-FAIL XMLHttpRequest: open() in document that is not fully active (but may be active) should throw assert_throws: function "function () { client.open("GET", "...") }" did not throw >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-6.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-6.htm >deleted file mode 100644 >index 99279639921d9a594c15014f5c429ee6ae7a215d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-6.htm >+++ /dev/null >@@ -1,41 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() in document that is not fully active (but may be active) should throw</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(), >- client, >- count = 0, >- win = window.open("resources/init.htm"); >- test.add_cleanup(function() { win.close(); }); >- function init() { >- test.step(function() { >- if(0 == count) { >- var doc = win.document; >- var ifr = document.createElement("iframe"); >- ifr.onload = function() { >- // Again, do things async so we're not doing loads from inside >- // load events. >- test.step_timeout(function() { >- client = new ifr.contentWindow.XMLHttpRequest(); >- count++; >- // Important to do a normal navigation, not a reload. >- win.location.href = "resources/init.htm?avoid-replace"; >- }, 0); >- } >- doc.body.appendChild(ifr); >- } else if(1 == count) { >- assert_throws("InvalidStateError", function() { client.open("GET", "...") }) >- test.done() >- } >- }) >- } >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-expected.txt >deleted file mode 100644 >index 031158a1e888577a783b535de3ae31fcf51afb31..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() resolving URLs (multi-Window; 1) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window.htm >deleted file mode 100644 >index 347f4b7e59ca555f2da23c3fd5affd89061edd98..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window.htm >+++ /dev/null >@@ -1,31 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: open() resolving URLs (multi-Window; 1)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[2] following::ol[1]/li[7] following::ol[1]/li[14]/ul/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- function init() { >- test.step(function() { >- var client = new self[0].XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 4) { >- assert_equals(client.responseText, "bottom\n") >- test.done() >- } >- }) >- } >- client.open("GET", "folder.txt") >- client.send("") >- }) >- } >- </script> >- <iframe src="resources/init.htm"></iframe> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin-expected.txt >deleted file mode 100644 >index c9488cd07ac06089190f215ab654544f04bc47e1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >-Blocked access to external URL http://www2.localhost:8800/XMLHttpRequest/resources/inspect-headers.py?filter_name=origin&cors >- >-FAIL Referer header assert_equals: expected "Referer: http://localhost:8800/XMLHttpRequest/resources/workerxhr-origin-referrer.js\n" but got "Referer: http://localhost:8800/XMLHttpRequest/resources/redirect.py?location=workerxhr-origin-referrer.js\n" >-FAIL Origin header assert_equals: expected "Origin: http://localhost:8800\n" but got "" >-PASS Request URL test >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin.htm >deleted file mode 100644 >index e5e5a4e8ecfa859ed07688baa5d5e725e6540537..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin.htm >+++ /dev/null >@@ -1,11 +0,0 @@ >-<!DOCTYPE html> >-<meta charset="utf-8"> >-<title>XMLHttpRequest: redirected worker scripts, origin and referrer</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<script> >-var finalWorkerURL = "workerxhr-origin-referrer.js"; >-var url = "resources/redirect.py?location=" + encodeURIComponent(finalWorkerURL); >-fetch_tests_from_worker(new Worker(url)); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-origin-expected.txt >deleted file mode 100644 >index 3723c68f812c13570b4ed793763e735dde36343e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-origin-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >-Blocked access to external URL http://www2.localhost:8800/XMLHttpRequest/resources/inspect-headers.py?filter_name=origin&cors >- >-PASS Referer header >-FAIL Origin header assert_equals: expected "Origin: http://localhost:8800\n" but got "" >-PASS Request URL test >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-origin.htm >deleted file mode 100644 >index 21cf1fcac0f9ba37429ae24dfdd996ab00ad8135..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-origin.htm >+++ /dev/null >@@ -1,9 +0,0 @@ >-<!DOCTYPE html> >-<meta charset="utf-8"> >-<title>XMLHttpRequest: worker scripts, origin and referrer</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<script> >-fetch_tests_from_worker(new Worker("resources/workerxhr-origin-referrer.js")); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-simple-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-simple-expected.txt >deleted file mode 100644 >index 800abfce2d7f4fd977d80ae7e1b1014898a491d7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-simple-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: relative URLs in worker scripts resolved by script URL >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-simple.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-simple.htm >deleted file mode 100644 >index a77ef6feedd5ad21153a17447382de0c48dab4d6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-simple.htm >+++ /dev/null >@@ -1,25 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XMLHttpRequest: relative URLs in worker scripts resolved by script URL</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::OL[1]/LI[3] following::OL[1]/LI[3]/ol[1]/li[1]" /> >-</head> >-<body> >- <div id="log"></div> >- <script type="text/javascript"> >- var test = async_test() >- var worker = new Worker("resources/workerxhr-simple.js") >- worker.onmessage = function (e) { >- test.step(function(){ >- assert_equals(e.data, 'PASSED') >- test.done() >- }) >- } >- worker.postMessage('start') >- </script> >-</body> >-</html> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-user-password-non-same-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-user-password-non-same-origin-expected.txt >deleted file mode 100644 >index 846d73e6cf84a2892f7e59dcfa5c8a3b39e06c24..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-user-password-non-same-origin-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: open() - user/pass argument and non same-origin URL doesn't throw >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-user-password-non-same-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-user-password-non-same-origin.htm >deleted file mode 100644 >index e49888cd493dec434e0b80239349e2cac50b3a6e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-user-password-non-same-origin.htm >+++ /dev/null >@@ -1,25 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: open() - user/pass argument and non same-origin URL doesn't throw</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[9]/ol/li[1] following::ol/li[9]/ol/li[2] following::ol/li[15]/ol/li[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var m = "GET", >- u = "http://test2.w3.org/", >- a = false >- test(function() { >- var client = new XMLHttpRequest() >- client.open(m, u, a, "x") >- assert_equals(client.readyState, 1, "open() was successful - 1") >- var client2 = new XMLHttpRequest() >- client2.open(m, u, a, "x", "x") >- assert_equals(client2.readyState, 1, "open() was successful - 2") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-blob-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-blob-expected.txt >deleted file mode 100644 >index 056742eabce8ed6608d99971ce6343eff85ec9a9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-blob-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >- >-FAIL Use text/xml as fallback MIME type assert_equals: expected "text/xml" but got "" >-PASS Use text/xml as fallback MIME type, 2 >-FAIL Bogus MIME type should end up as application/octet-stream assert_equals: expected "" but got "bogus" >-FAIL Bogus MIME type should end up as application/octet-stream, 2 assert_equals: expected "" but got "text/xml;charset=â " >-FAIL Valid MIME types need to be normalized assert_equals: expected "" but got "HI/x;test=test" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-blob.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-blob.html >deleted file mode 100644 >index 83378a89bd77df839e59a3a1b83446c17bf7f054..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-blob.html >+++ /dev/null >@@ -1,65 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: overrideMimeType() and responseType = "blob"</title> >-<meta charset="utf-8"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<script> >-async_test(t => { >- const client = new XMLHttpRequest() >- client.onload = t.step_func_done(() => { >- assert_equals(client.getResponseHeader("Content-Type"), "") >- assert_equals(client.response.type, "text/xml") >- }) >- client.open("GET", "resources/status.py") >- client.responseType = "blob" >- client.send() >-}, "Use text/xml as fallback MIME type") >- >-async_test(t => { >- const client = new XMLHttpRequest() >- client.onload = t.step_func_done(() => { >- assert_equals(client.getResponseHeader("Content-Type"), "") >- assert_equals(client.response.type, "text/xml") >- }) >- client.open("GET", "resources/status.py?content=thisshouldnotmakeadifferencebutdoes") >- client.responseType = "blob" >- client.send() >-}, "Use text/xml as fallback MIME type, 2") >- >-async_test(t => { >- const client = new XMLHttpRequest() >- client.onload = t.step_func_done(() => { >- assert_equals(client.getResponseHeader("Content-Type"), "") >- assert_equals(client.response.type, "application/octet-stream") >- }) >- client.open("GET", "resources/status.py") >- client.responseType = "blob" >- client.overrideMimeType("bogus") >- client.send() >-}, "Bogus MIME type should end up as application/octet-stream") >- >-async_test(t => { >- const client = new XMLHttpRequest() >- client.onload = t.step_func_done(() => { >- assert_equals(client.getResponseHeader("Content-Type"), "") >- assert_equals(client.response.type, "application/octet-stream") >- }) >- client.open("GET", "resources/status.py") >- client.responseType = "blob" >- client.overrideMimeType("text/xml;charset=â ") >- client.send() >-}, "Bogus MIME type should end up as application/octet-stream, 2") >- >-async_test(t => { >- const client = new XMLHttpRequest() >- client.onload = t.step_func_done(() => { >- assert_equals(client.getResponseHeader("Content-Type"), "") >- assert_equals(client.response.type, "hi/x") >- }) >- client.open("GET", "resources/status.py") >- client.responseType = "blob" >- client.overrideMimeType("HI/x;test=test") >- client.send() >-}, "Valid MIME types need to be normalized") >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-done-state-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-done-state-expected.txt >deleted file mode 100644 >index 86efa4d35ee1c58116c3c7a63320e20e50f2b018..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-done-state-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: overrideMimeType() in DONE state >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-done-state.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-done-state.htm >deleted file mode 100644 >index a1711e6096f3125c3dad1db53f3a62747e79b759..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-done-state.htm >+++ /dev/null >@@ -1,26 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: overrideMimeType() in DONE state</title> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- var client = new XMLHttpRequest(); >- client.onreadystatechange = test.step_func( function() { >- if (client.readyState !== 4) return; >- assert_throws("InvalidStateError", function() { client.overrideMimeType('application/xml;charset=Shift-JIS'); }); >- assert_equals(client.responseXML, null); >- test.done(); >- }); >- client.open("GET", "resources/status.py?type="+encodeURIComponent('text/plain;charset=iso-8859-1')+'&content=%3Cmsg%3E%83%65%83%58%83%67%3C%2Fmsg%3E'); >- client.send(); >- </script> >- >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-headers-received-state-force-shiftjis-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-headers-received-state-force-shiftjis-expected.txt >deleted file mode 100644 >index e22eb3c34730ee7d437d10915470ac22f4bddca7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-headers-received-state-force-shiftjis-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: overrideMimeType() in HEADERS RECEIVED state, enforcing Shift-JIS encoding >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-headers-received-state-force-shiftjis.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-headers-received-state-force-shiftjis.htm >deleted file mode 100644 >index 578e28cb2277b1c9bd5c7bf3bfd2731944d767bc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-headers-received-state-force-shiftjis.htm >+++ /dev/null >@@ -1,34 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: overrideMimeType() in HEADERS RECEIVED state, enforcing Shift-JIS encoding</title> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[1] /following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- var client = new XMLHttpRequest(); >- var readyState2Reached = false; >- client.onreadystatechange = test.step_func( function() { >- if(client.readyState===2){ >- readyState2Reached = true; >- try{ >- client.overrideMimeType('text/plain;charset=Shift-JIS'); >- }catch(e){ >- assert_unreached('overrideMimeType should not throw in state 2'); >- } >- } >- if (client.readyState !== 4) return; >- assert_equals( readyState2Reached, true, "readyState = 2 event fired" ); >- assert_equals( client.responseText, 'ãã¹ã', 'overrideMimeType() in HEADERS RECEIVED state set encoding' ); >- test.done(); >- }); >- client.open("GET", "resources/status.py?type="+encodeURIComponent('text/html;charset=UTF-8')+'&content=%83%65%83%58%83%67'); >- client.send( '' ); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-invalid-mime-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-invalid-mime-type-expected.txt >deleted file mode 100644 >index b043d7e2e7872fed579f5c108c170712737f5d9d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-invalid-mime-type-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-FAIL Bogus MIME type does not override encoding assert_equals: expected "text/html;charset=windows-1252" but got "bogus" >-FAIL Bogus MIME type does not override encoding, 2 assert_equals: expected "ÿ" but got "\x1a" >-FAIL Bogus MIME type does override MIME type assert_equals: expected "text/xml" but got "bogus" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-invalid-mime-type.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-invalid-mime-type.htm >deleted file mode 100644 >index 506aff841942c8a6bd0893cc276b5bacb00458b6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-invalid-mime-type.htm >+++ /dev/null >@@ -1,41 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: overrideMimeType() and invalid MIME types</title> >-<meta charset="utf-8"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method"> >-<div id="log"></div> >-<script> >-async_test(t => { >- const client = new XMLHttpRequest() >- client.onload = t.step_func_done(() => { >- assert_equals(client.responseText, "ÿ") >- assert_equals(client.getResponseHeader("Content-Type"), "text/html;charset=windows-1252") >- }) >- client.open("GET", "resources/status.py?type=" + encodeURIComponent("text/html;charset=windows-1252") + "&content=%FF") >- client.overrideMimeType("bogus") >- client.send() >-}, "Bogus MIME type does not override encoding") >- >-async_test(t => { >- const client = new XMLHttpRequest() >- client.onload = t.step_func_done(() => { >- assert_equals(client.responseText, "ÿ") >- assert_equals(client.getResponseHeader("Content-Type"), "text/html;charset=windows-1252") >- }) >- client.open("GET", "resources/status.py?type=" + encodeURIComponent("text/html;charset=windows-1252") + "&content=%FF") >- client.overrideMimeType("bogus;charset=Shift_JIS") >- client.send() >-}, "Bogus MIME type does not override encoding, 2") >- >-async_test(t => { >- const client = new XMLHttpRequest() >- client.onload = t.step_func_done(() => { >- assert_equals(client.responseXML, null) >- assert_equals(client.getResponseHeader("Content-Type"), "text/xml") >- }) >- client.open("GET", "resources/status.py?type=" + encodeURIComponent("text/xml") + "&content=" + encodeURIComponent("<x/>")) >- client.overrideMimeType("bogus") >- client.send() >-}, "Bogus MIME type does override MIME type") >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-loading-state-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-loading-state-expected.txt >deleted file mode 100644 >index 5566ae306bf9b2fd1f03bc6a763a09a5d9719220..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-loading-state-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: overrideMimeType() in LOADING state >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-loading-state.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-loading-state.htm >deleted file mode 100644 >index cce3fa49ef752c6e66ba10500b35053316de6c13..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-loading-state.htm >+++ /dev/null >@@ -1,32 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: overrideMimeType() in LOADING state</title> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.onreadystatechange = test.step_func(function() { >- if (client.readyState === 3){ >- assert_throws("InvalidStateError", function(){ >- client.overrideMimeType('application/xml;charset=Shift-JIS'); >- }); >- }else if(client.readyState===4){ >- assert_equals(client.responseXML, null); >- test.done(); >- } >- }); >- client.open("GET", "resources/status.py?type="+encodeURIComponent('text/plain;charset=iso-8859-1')+'&content=%3Cmsg%3E%83%65%83%58%83%67%3C%2Fmsg%3E'); >- client.send(); >- }); >- </script> >- >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-utf-8-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-utf-8-expected.txt >deleted file mode 100644 >index 845d4ec1bd3f051c22a556c75991f0b21ee032b2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-utf-8-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: overrideMimeType() in open state, enforcing UTF-8 encoding >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-utf-8.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-utf-8.htm >deleted file mode 100644 >index 5a261005d97bcada797d77c8570a152a9f678eb2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-utf-8.htm >+++ /dev/null >@@ -1,27 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: overrideMimeType() in open state, enforcing UTF-8 encoding</title> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[3] /following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.onreadystatechange = function() { >- if (client.readyState !== 4) return; >- assert_equals( client.responseText, 'ãã¹ã' ); >- test.done(); >- }; >- client.open("GET", "resources/status.py?type="+encodeURIComponent('text/html;charset=Shift-JIS')+'&content='+encodeURIComponent('ãã¹ã')); >- client.overrideMimeType('text/plain;charset=UTF-8'); >- client.send( '' ); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml-expected.txt >deleted file mode 100644 >index 7d63e6fcc9c50c88afb29418c671b96b82893355..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: overrideMimeType() in open state, XML MIME type with UTF-8 charset >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml.htm >deleted file mode 100644 >index 00a4c0dd43de1f618208818d56b812b34757fc40..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml.htm >+++ /dev/null >@@ -1,34 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: overrideMimeType() in open state, XML MIME type with UTF-8 charset</title> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[3] /following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.onreadystatechange = function() { >- if (client.readyState !== 4) return; >- try{ >- var str = client.responseXML.documentElement.tagName+client.responseXML.documentElement.firstChild.tagName+client.responseXML.documentElement.firstChild.textContent; >- }catch(e){ >- assert_unreached('Exception when reading responseXML'); >- } >- assert_equals( client.responseXML.documentElement.tagName, 'test' ); >- assert_equals( client.responseXML.documentElement.firstChild.tagName, 'message' ); >- assert_equals( client.responseXML.documentElement.firstChild.textContent, 'Hello Worldï¼' ); >- test.done(); >- }; >- client.open("GET", "resources/status.py?type="+encodeURIComponent('text/plain;charset=Shift-JIS')+'&content='+encodeURIComponent('<test><message>Hello Worldï¼</message></test>')); >- client.overrideMimeType('application/xml;charset=UTF-8'); >- client.send(); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis-expected.txt >deleted file mode 100644 >index 8ff1c8dd4be67ed8fbe4bf44610eda5ad9e80df9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: overrideMimeType() in unsent state, enforcing Shift-JIS encoding >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm >deleted file mode 100644 >index 98dfe1436d96cdb906aae44ae65f2f60abdb1fcd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm >+++ /dev/null >@@ -1,27 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: overrideMimeType() in unsent state, enforcing Shift-JIS encoding</title> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[3] /following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest(); >- client.overrideMimeType('text/plain;charset=Shift-JIS'); >- client.onreadystatechange = function() { >- if (client.readyState !== 4) return; >- assert_equals( client.responseText, 'ãã¹ã' ); >- test.done(); >- }; >- client.open("GET", "resources/status.py?type="+encodeURIComponent('text/html;charset=iso-8859-1')+'&content=%83%65%83%58%83%67'); >- client.send( '' ); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip-expected.txt >deleted file mode 100644 >index ee09cf31ebbef375d9b2c743665646365e7647da..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: progress events and GZIP encoding >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip.htm >deleted file mode 100644 >index 058064636d43ee08ca2d8cc2c463fcf6481f9d95..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip.htm >+++ /dev/null >@@ -1,83 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: progress events and GZIP encoding</title> >- <meta name="timeout" content="long"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#firing-events-using-the-progressevent-interface-for-http" data-tested-assertations="following::p[contains(text(),'content-encodings')]" /> >- <!-- TODO: find better spec reference when https://www.w3.org/Bugs/Public/show_bug.cgi?id=25587 is fixed --> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- /* >- >- Two behaviours are considered acceptable, so there are two ways to >- pass this test >- >- a) Set data for the compressed resource: >- * event.total reflects the Content-length of the gzipp'ed resource >- * event.loaded how many gzipped bytes have arrived over the wire so far >- * lengthComputable is true >- >- or >- >- b) If the implementation does not provide progress details for the compressed >- resource, set >- * lengthComputable to false >- * event.total to 0 >- * event.loaded to the number of bytes available so far after gzip decoding >- >- Implications of this are tested here as follows: >- >- * If lengthComputable is true: >- * Event.total must match Content-length header >- * event.loaded must only ever increase in progress events >- (and may never repeat its value). >- * event.loaded must never exceed the Content-length. >- >- * If lengthComputable is false: >- * event.total should be 0 >- * event.loaded must only ever increase in progress events >- (and may never repeat its value). >- * event.loaded should be the length of the decompressed content, i.e. >- bigger than Content-length header value when finished loading >- >- */ >- var lastTotal; >- var lastLoaded = -1; >- client.addEventListener('loadend', test.step_func(function(e){ >- var len = parseInt(client.getResponseHeader('content-length'), 10) >- if(e.lengthComputable){ >- assert_equals(e.total, len, 'event.total is content-length') >- assert_equals(e.loaded, len, 'event.loaded should be content-length at loadend') >- }else{ >- assert_equals(e.total, 0, 'if implementation can\'t compute event.total for gzipped content it is 0') >- assert_true(e.loaded >= len, 'event.loaded should be set even if total is not computable') >- } >- test.done(); >- }), false) >- client.addEventListener('progress', test.step_func(function(e){ >- if(lastTotal === undefined){ >- lastTotal = e.total; >- } >- if(e.lengthComputable && e.total && e.loaded){ >- assert_equals(e.total, lastTotal, 'event.total should remain invariant') >- assert_less_than_equal(e.loaded, lastTotal, 'event.loaded should not exceed content-length') >- }else{ >- assert_equals(e.total, 0, 'event.total should be 0') >- } >- assert_greater_than(e.loaded, lastLoaded, 'event.loaded should only ever increase') >- lastLoaded = e.loaded; >- }), false) >- // image.gif is 165375 bytes compressed. Sending 45000 bytes at a time with 1 second delay will load it in 4 seconds >- client.open("GET", "resources/image.gif?pipe=gzip|trickle(45000:d1:r2)", true) >- client.send() >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-constructor-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-constructor-expected.txt >deleted file mode 100644 >index 3b158054a6aff2724e6cc859cacc14cae564a29b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-constructor-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >- >-PASS Default event values. >-PASS There must not be a initProgressEvent(). >-PASS Basic test. >-PASS ECMAScript value conversion test. >-PASS ProgressEventInit members must be matched case-sensitively. >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-constructor.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-constructor.html >deleted file mode 100644 >index 0e771f4459fef7f6fe6cbee0e3d90319cc413e2f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-constructor.html >+++ /dev/null >@@ -1,47 +0,0 @@ >-<!doctype html> >-<title>ProgressEvent constructor</title> >-<link rel="help" href="https://xhr.spec.whatwg.org/#interface-progressevent"> >-<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-constructor"> >-<link rel="help" href="https://dom.spec.whatwg.org/#interface-event"> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<div id=log></div> >-<script> >-test(function() { >- var ev = new ProgressEvent("test") >- assert_equals(ev.type, "test") >- assert_equals(ev.target, null) >- assert_equals(ev.currentTarget, null) >- assert_equals(ev.eventPhase, Event.NONE) >- assert_equals(ev.bubbles, false) >- assert_equals(ev.cancelable, false) >- assert_equals(ev.defaultPrevented, false) >- assert_equals(ev.isTrusted, false) >- assert_true(ev.timeStamp > 0) >- assert_true("initEvent" in ev) >- assert_equals(ev.lengthComputable, false) >- assert_equals(ev.loaded, 0) >- assert_equals(ev.total, 0) >-}, "Default event values.") >-test(function() { >- var ev = new ProgressEvent("test") >- assert_equals(ev["initProgressEvent"], undefined) >-}, "There must not be a initProgressEvent().") >-test(function() { >- var ev = new ProgressEvent("I am an event", { type: "trololol", bubbles: true, cancelable: false}) >- assert_equals(ev.type, "I am an event") >- assert_equals(ev.bubbles, true) >- assert_equals(ev.cancelable, false) >-}, "Basic test.") >-test(function() { >- var ev = new ProgressEvent(null, { lengthComputable: "hah", loaded: "2" }) >- assert_equals(ev.type, "null") >- assert_equals(ev.lengthComputable, true) >- assert_equals(ev.loaded, 2) >-}, "ECMAScript value conversion test.") >-test(function() { >- var ev = new ProgressEvent("Xx", { lengthcomputable: true}) >- assert_equals(ev.type, "Xx") >- assert_equals(ev.lengthComputable, false) >-}, "ProgressEventInit members must be matched case-sensitively.") >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-interface-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-interface-expected.txt >deleted file mode 100644 >index 1f25991a6b9ddc7b055912f8e21f80d367b09b1e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-interface-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >- >-PASS The ProgressEvent interface >-PASS interface prototype object >-PASS The ProgressEvent interface 1 >-PASS The ProgressEvent interface 2 >-PASS The ProgressEvent interface 3 >-PASS Interface objects properties should not be Enumerable >-PASS Should be able to delete ProgressEvent. >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-interface.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-interface.html >deleted file mode 100644 >index 850d1b23dcfa2662b2ffce3c1968d1f92eaaf188..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-interface.html >+++ /dev/null >@@ -1,49 +0,0 @@ >-<!DOCTYPE html> >-<title>The ProgressEvent interface</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<script> >-test(function() { >- assert_equals(typeof ProgressEvent, "function") >- assert_equals(ProgressEvent.length, 1) >-}) >-test(function() { >- var desc = Object.getOwnPropertyDescriptor(ProgressEvent, "prototype") >- assert_equals(desc.value, ProgressEvent.prototype) >- assert_equals(desc.writable, false) >- assert_equals(desc.enumerable, false) >- assert_equals(desc.configurable, false) >- assert_throws(new TypeError(), function() { >- "use strict"; >- delete ProgressEvent.prototype; >- }) >- assert_equals(ProgressEvent.prototype.constructor, ProgressEvent) >- assert_equals(Object.getPrototypeOf(ProgressEvent.prototype), Event.prototype) >-}, "interface prototype object") >-var attributes = [ >- ["boolean", "lengthComputable"], >- ["unsigned long long", "loaded"], >- ["unsigned long long", "total"] >-]; >-attributes.forEach(function(a) { >- test(function() { >- var desc = Object.getOwnPropertyDescriptor(ProgressEvent.prototype, a[1]) >- assert_equals(desc.enumerable, true) >- assert_equals(desc.configurable, true) >- assert_throws(new TypeError(), function() { >- ProgressEvent.prototype[a[1]] >- }) >- }) >-}) >-test(function() { >- for (var p in window) { >- assert_not_equals(p, "ProgressEvent") >- } >-}, "Interface objects properties should not be Enumerable") >-test(function() { >- assert_true(!!window.ProgressEvent, "Interface should exist.") >- assert_true(delete window.ProgressEvent, "The delete operator should return true.") >- assert_equals(window.ProgressEvent, undefined, "Interface should be gone.") >-}, "Should be able to delete ProgressEvent.") >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/readme.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/readme.txt >deleted file mode 100644 >index 2e5f64cd5182c3c8988e850b19c94016f6b674d0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/readme.txt >+++ /dev/null >@@ -1,31 +0,0 @@ >-Currently this testsuite tries to provide tests for XMLHttpRequest level 1. >-This test suite is not stable and is still under development. Tests may >-contain bugs and may change over time as a result of those bugs being fixed. >- >-When more browsers implement XMLHttpRequest level 2 this testsuite will >-slowly evolve most likely. >- >- http://dev.w3.org/2006/webapi/XMLHttpRequest/ >- http://dev.w3.org/2006/webapi/XMLHttpRequest-2/ >- >-If the folders above give the status of the feature tested you can assume >-this is against level 1 unless explicitly stated otherwise. >- >-NOTE: readyState and onreadystatechange are tested throughout the various >-tests. statusText is tested together with status. >- >-NOTE: open-url-base* have absolute paths in them. They need to be adjusted >-on a per location basis. >- >-NOTE: open-url-base-inserted-after-open.htm, open-url-base-inserted.htm, >-send-authentication.htm and open-url-base.htm refer to localhost. >- >- >-TESTS THAT ARE UNSTABLE AND (PROBABLY) NEED CHANGES >- responsexml-basic (see email WHATWG) >- send-authentication (see "user:password" debacle) >- >- >-TESTS NOT STARTED ON YET >- >-<iframe> document.domain = w3.org create cross-origin xhr object >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/accept-language.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/accept-language.py >deleted file mode 100644 >index e0fd30c119535f313cf2a21a0ca9ba82f96e32d8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/accept-language.py >+++ /dev/null >@@ -1,4 +0,0 @@ >-def main(request, response): >- return [("Content-Type", "text/plain"), >- request.headers.get("Accept-Language", "NO")] >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/accept.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/accept.py >deleted file mode 100644 >index 2fdf210b6d6c0b34de188b0a8332d454ef1581a1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/accept.py >+++ /dev/null >@@ -1,3 +0,0 @@ >-def main(request, response): >- return [("Content-Type", "text/plain")], request.headers.get("accept", "NO") >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-allow-lists.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-allow-lists.py >deleted file mode 100644 >index 526d365b3111d46ce723e92f737673afaa300977..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-allow-lists.py >+++ /dev/null >@@ -1,20 +0,0 @@ >-import json >- >-def main(request, response): >- if "origin" in request.GET: >- response.headers.set("Access-Control-Allow-Origin", request.GET["origin"]) >- elif "origins" in request.GET: >- for origin in request.GET["origins"].split(','): >- response.headers.set("Access-Control-Allow-Origin", request.GET["origin"]) >- >- if "headers" in request.GET: >- response.headers.set("Access-Control-Allow-Headers", request.GET["headers"]) >- if "methods" in request.GET: >- response.headers.set("Access-Control-Allow-Methods", request.GET["methods"]) >- >- headers = dict(request.headers) >- >- for header in headers: >- headers[header] = headers[header][0] >- >- return json.dumps(headers) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-allow-with-body.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-allow-with-body.py >deleted file mode 100644 >index 2213435673540968e1b6fb3d341629a5979c3e14..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-allow-with-body.py >+++ /dev/null >@@ -1,15 +0,0 @@ >-def main(request, response): >- headers = { >- "Cache-Control": "no-store", >- "Access-Control-Allow-Headers": "X-Requested-With", >- "Access-Control-Max-Age": 0, >- "Access-Control-Allow-Origin": "*", >- "Access-Control-Allow-Methods": "*", >- "Vary": "Accept-Encoding", >- "Content-Type": "text/plain" >- } >- >- for (name, value) in headers.items(): >- response.headers.set(name, value) >- >- response.content = "PASS" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-auth-basic.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-auth-basic.py >deleted file mode 100644 >index af32aab97cd5ce664a1f1b6fee1b864afc44e351..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-auth-basic.py >+++ /dev/null >@@ -1,17 +0,0 @@ >-def main(request, response): >- response.headers.set("Cache-Control", "no-store") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- response.headers.set("Access-Control-Allow-Credentials", "true") >- uid = request.GET.first("uid", None) >- >- if request.method == "OPTIONS": >- response.headers.set("Access-Control-Allow-Methods", "PUT") >- else: >- username = request.auth.username >- password = request.auth.password >- if (not username) or (username != uid): >- response.headers.set("WWW-Authenticate", "Basic realm='Test Realm/Cross Origin'") >- response.status = 401 >- response.content = "Authentication cancelled" >- else: >- response.content = "User: " + username + ", Password: " + password >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py >deleted file mode 100644 >index 12f8660d1fc2636b010a8cd430c028c750f814ba..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py >+++ /dev/null >@@ -1,6 +0,0 @@ >-#!/usr/bin/env python >-def main(request, response): >- response.headers.set("Content-Type", "text/plain") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- >- response.content = "PASS: Cross-domain access allowed." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow-star.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow-star.py >deleted file mode 100644 >index 4557c06b0e3a5544b3f70c0c80df8c009b423188..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow-star.py >+++ /dev/null >@@ -1,6 +0,0 @@ >-#!/usr/bin/env python >-def main(request, response): >- response.headers.set("Content-Type", "text/plain") >- response.headers.set("Access-Control-Allow-Origin", "*") >- >- response.content = "PASS: Cross-domain access allowed." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow.py >deleted file mode 100644 >index 2325925157c1e5e26d36d77acfdc5f6155199f53..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow.py >+++ /dev/null >@@ -1,7 +0,0 @@ >-#!/usr/bin/env python >-def main(request, response): >- response.headers.set("Content-Type", "text/plain") >- response.headers.set("Access-Control-Allow-Credentials", "true") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- >- response.content = "PASS: Cross-domain access allowed." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py >deleted file mode 100644 >index eba0e7d4c5cafc8664c0643b8ad247137374bef2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py >+++ /dev/null >@@ -1,14 +0,0 @@ >-def main(request, response): >- response.headers.set("Cache-Control", "no-store") >- >- # This should be a simple request; deny preflight >- if request.method != "POST": >- response.status = 400 >- return >- >- response.headers.set("Access-Control-Allow-Credentials", "true") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- >- for header in ["Accept", "Accept-Language", "Content-Language", "Content-Type"]: >- value = request.headers.get(header) >- response.content += header + ": " + (value if value else "<None>") + '\n' >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-denied.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-denied.py >deleted file mode 100644 >index 9f8687854598c16a2b893cada9991dca2b02313d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-denied.py >+++ /dev/null >@@ -1,5 +0,0 @@ >-def main(request, response): >- response.headers.set("Cache-Control", "no-store") >- response.headers.set("Content-Type", "text/plain") >- >- response.text = "FAIL: Cross-domain access allowed." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-options-not-supported.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-options-not-supported.py >deleted file mode 100644 >index 0c69c76293eaeebc1e9c18fed7904c3bdcdc0d8e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-options-not-supported.py >+++ /dev/null >@@ -1,9 +0,0 @@ >-def main(request, response): >- response.headers.set("Cache-Control", "no-store") >- >- # Allow simple requests, but deny preflight >- if request.method != "OPTIONS": >- response.headers.set("Access-Control-Allow-Credentials", "true") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- else: >- response.status = 400 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py >deleted file mode 100644 >index 6dc8a2a150793b6244fd5fa711bd73c740d59a1e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py >+++ /dev/null >@@ -1,47 +0,0 @@ >-def main(request, response): >- def fail(message): >- response.content = "FAIL " + request.method + ": " + str(message) >- >- def getState(token): >- server_state = request.server.stash.take(token) >- if not server_state: >- return "Uninitialized" >- return server_state >- >- def setState(state, token): >- request.server.stash.put(token, state) >- >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- response.headers.set("Access-Control-Allow-Credentials", "true") >- token = request.GET.first("token", None) >- state = getState(token) >- >- if state == "Uninitialized": >- if request.method == "OPTIONS": >- response.headers.set("Access-Control-Allow-Methods", "PUT") >- response.headers.set("Access-Control-Max-Age", 10) >- setState("OPTIONSSent", token) >- else: >- fail(state) >- elif state == "OPTIONSSent": >- if request.method == "PUT": >- response.content = "PASS: First PUT request." >- setState("FirstPUTSent", token) >- else: >- fail(state) >- elif state == "FirstPUTSent": >- if request.method == "OPTIONS": >- response.headers.set("Access-Control-Allow-Methods", "PUT, XMETHOD") >- response.headers.set("Access-Control-Allow-Headers", "x-test") >- setState("SecondOPTIONSSent", token) >- elif request.method == "PUT": >- fail("Second PUT request sent without preflight") >- else: >- fail(state) >- elif state == "SecondOPTIONSSent": >- if request.method == "PUT" or request.method == "XMETHOD": >- response.content = "PASS: Second OPTIONS request was sent." >- else: >- fail(state) >- else: >- fail(state) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache-timeout.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache-timeout.py >deleted file mode 100644 >index a767d8a4a56d36e289f16981edba38054d90adb1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache-timeout.py >+++ /dev/null >@@ -1,48 +0,0 @@ >-def main(request, response): >- def fail(message): >- response.content = "FAIL " + request.method + ": " + str(message) >- >- def getState(token): >- server_state = request.server.stash.take(token) >- if not server_state: >- return "Uninitialized" >- return server_state >- >- def setState(state, token): >- request.server.stash.put(token, state) >- >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- response.headers.set("Access-Control-Allow-Credentials", "true") >- token = request.GET.first("token", None) >- state = getState(token) >- >- if state == "Uninitialized": >- if request.method == "OPTIONS": >- response.headers.set("Access-Control-Allow-Methods", "PUT") >- response.headers.set("Access-Control-Allow-Headers", "x-test") >- response.headers.set("Access-Control-Max-Age", 1) >- setState("OPTIONSSent", token) >- else: >- fail(state) >- elif state == "OPTIONSSent": >- if request.method == "PUT": >- response.content = "PASS: First PUT request." >- setState("FirstPUTSent", token) >- else: >- fail(state) >- elif state == "FirstPUTSent": >- if request.method == "OPTIONS": >- response.headers.set("Access-Control-Allow-Methods", "PUT") >- response.headers.set("Access-Control-Allow-Headers", "x-test") >- setState("SecondOPTIONSSent", token) >- elif request.method == "PUT": >- fail("Second PUT request sent without preflight") >- else: >- fail(state) >- elif state == "SecondOPTIONSSent": >- if request.method == "PUT": >- response.content = "PASS: Second OPTIONS request was sent." >- else: >- fail(state) >- else: >- fail(state) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache.py >deleted file mode 100644 >index 56892fb6b12c1c9b2f99c57939806f4a84b729d1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache.py >+++ /dev/null >@@ -1,47 +0,0 @@ >-def main(request, response): >- def fail(message): >- response.content = "FAIL " + request.method + ": " + str(message) >- response.status = 400 >- >- def getState(token): >- server_state = request.server.stash.take(token) >- if not server_state: >- return "Uninitialized" >- return server_state >- >- def setState(state, token): >- request.server.stash.put(token, state) >- >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- response.headers.set("Access-Control-Allow-Credentials", "true") >- token = request.GET.first("token", None) >- state = getState(token) >- >- if state == "Uninitialized": >- if request.method == "OPTIONS": >- response.headers.set("Access-Control-Allow-Methods", "PUT") >- response.headers.set("Access-Control-Max-Age", 10) >- setState("OPTIONSSent", token) >- else: >- fail(state) >- elif state == "OPTIONSSent": >- if request.method == "PUT": >- response.content = "PASS: First PUT request." >- setState("FirstPUTSent", token) >- else: >- fail(state) >- elif state == "FirstPUTSent": >- if request.method == "PUT": >- response.content = "PASS: Second PUT request. Preflight worked." >- elif request.method == "OPTIONS": >- response.headers.set("Access-Control-Allow-Methods", "PUT") >- setState("FAILSecondOPTIONSSent", token) >- else: >- fail(state) >- elif state == "FAILSecondOPTIONSSent": >- if request.method == "PUT": >- fail("Second OPTIONS request was sent. Preflight failed.") >- else: >- fail(state) >- else: >- fail(state) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-put-allow.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-put-allow.py >deleted file mode 100644 >index 65f6466f5972d28478687939f6eea9cb428d48c4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-put-allow.py >+++ /dev/null >@@ -1,20 +0,0 @@ >-def main(request, response): >- if request.method == "OPTIONS": >- response.headers.set("Content-Type", "text/plain") >- response.headers.set("Access-Control-Allow-Credentials", "true") >- response.headers.set("Access-Control-Allow-Methods", "PUT") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- >- elif request.method == "PUT": >- response.headers.set("Content-Type", "text/plain") >- response.headers.set("Access-Control-Allow-Credentials", "true") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- response.content = "PASS: Cross-domain access allowed." >- try: >- response.content += "\n" + request.body >- except: >- response.content += "Could not read in content." >- >- else: >- response.headers.set("Content-Type", "text/plain") >- response.content = "Wrong method: " + request.method >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-whitelist-response-headers.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-whitelist-response-headers.py >deleted file mode 100644 >index e7c15bb8b300d9ea192b0f37d0ffe8d23a0f823e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-whitelist-response-headers.py >+++ /dev/null >@@ -1,19 +0,0 @@ >-def main(request, response): >- headers = { >- # CORS-safelisted >- "content-type": "text/plain", >- "cache-control": "no cache", >- "content-language": "en", >- "expires": "Fri, 30 Oct 1998 14:19:41 GMT", >- "last-modified": "Tue, 15 Nov 1994 12:45:26 GMT", >- "pragma": "no-cache", >- >- # Non-CORS-safelisted >- "x-test": "foobar", >- >- "Access-Control-Allow-Origin": "*" >- } >- for header in headers: >- response.headers.set(header, headers[header]) >- >- response.content = "PASS: Cross-domain access allowed." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-cookie.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-cookie.py >deleted file mode 100644 >index 1e0d41d22eaa88521f1d21c92f658f0e8522b9b1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-cookie.py >+++ /dev/null >@@ -1,16 +0,0 @@ >-import datetime >- >-def main(request, response): >- cookie_name = request.GET.first("cookie_name", "") >- >- response.headers.set("Cache-Control", "no-store") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- response.headers.set("Access-Control-Allow-Credentials", "true") >- >- for cookie in request.cookies: >- # Set cookie to expire yesterday >- response.set_cookie(cookie, "deleted", expires=-datetime.timedelta(days=1)) >- >- if cookie_name: >- # Set cookie to expire tomorrow >- response.set_cookie(cookie_name, "COOKIE", expires=datetime.timedelta(days=1)) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-origin-header.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-origin-header.py >deleted file mode 100644 >index e7b95e95fd46e77392565673444a3c9233e4c7bc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-origin-header.py >+++ /dev/null >@@ -1,9 +0,0 @@ >-#!/usr/bin/env python >-def main(request, response): >- response.headers.set("Content-Type", "text/plain"); >- response.headers.set("Cache-Control", "no-cache, no-store"); >- response.headers.set("Access-Control-Allow-External", "true"); >- response.headers.set("Access-Control-Allow-Origin", "*"); >- >- response.content = "PASS: Cross-domain access allowed.\n" >- response.content += "HTTP_ORIGIN: " + request.headers.get("origin"); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-denied.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-denied.py >deleted file mode 100644 >index fd221a6248bcae85053b8dddae27cbf46deebeb7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-denied.py >+++ /dev/null >@@ -1,50 +0,0 @@ >-def main(request, response): >- def fail(message): >- response.content = "FAIL: " + str(message) >- response.status = 400 >- >- def getState(token): >- server_state = request.server.stash.take(token) >- if not server_state: >- return "Uninitialized" >- return server_state >- >- def setState(token, state): >- request.server.stash.put(token, state) >- >- def resetState(token): >- setState(token, "") >- >- response.headers.set("Cache-Control", "no-store") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- response.headers.set("Access-Control-Max-Age", 1) >- token = request.GET.first("token", None) >- state = getState(token) >- command = request.GET.first("command", None) >- >- if command == "reset": >- if request.method == "GET": >- resetState(token) >- response.content = "Server state reset" >- else: >- fail("Invalid Method.") >- elif state == "Uninitialized": >- if request.method == "OPTIONS": >- response.content = "This request should not be displayed." >- setState(token, "Denied") >- else: >- fail(state) >- elif state == "Denied": >- if request.method == "GET" and command == "complete": >- resetState(token) >- response.content = "Request successfully blocked." >- else: >- setState("Deny Ignored") >- fail("The request was not denied.") >- elif state == "Deny Ignored": >- resetState(token) >- fail(state) >- else: >- resetState(token) >- fail("Unknown Error.") >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-header-lowercase.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-header-lowercase.py >deleted file mode 100644 >index d35b89b9f98a669a3946661bd82a51992400c287..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-header-lowercase.py >+++ /dev/null >@@ -1,16 +0,0 @@ >-def main(request, response): >- response.headers.set("Cache-Control", "no-store") >- response.headers.set("Access-Control-Allow-Origin", "*") >- response.headers.set("Access-Control-Max-Age", 0) >- >- if request.method == "OPTIONS": >- if "x-test" in [header.strip(" ") for header in >- request.headers.get("Access-Control-Request-Headers").split(",")]: >- response.headers.set("Access-Control-Allow-Headers", "X-Test") >- else: >- response.status = 400 >- elif request.method == "GET": >- if request.headers.get("X-Test"): >- response.content = "PASS" >- else: >- response.status = 400 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-header-sorted.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-header-sorted.py >deleted file mode 100644 >index e40da43fe3dcf082c3985a8b71ed09217591df12..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-header-sorted.py >+++ /dev/null >@@ -1,18 +0,0 @@ >-def main(request, response): >- response.headers.set('Cache-Control', 'no-store') >- response.headers.set('Access-Control-Allow-Origin', >- request.headers.get('origin')) >- >- headers = 'x-custom-s,x-custom-test,x-custom-u,x-custom-ua,x-custom-v' >- if request.method == 'OPTIONS': >- response.headers.set('Access-Control-Max-Age', '0') >- response.headers.set('Access-Control-Allow-Headers', headers) >- # Access-Control-Request-Headers should be sorted. >- if headers != request.headers.get('Access-Control-Request-Headers'): >- response.status = 400 >- else: >- if request.headers.get('x-custom-s'): >- response.content = 'PASS' >- else: >- response.status = 400 >- response.content = 'FAIL' >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-headers-origin.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-headers-origin.py >deleted file mode 100644 >index 6fbb96e557b1852ad3740576f9aa5623798cb8f9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-headers-origin.py >+++ /dev/null >@@ -1,12 +0,0 @@ >-def main(request, response): >- response.headers.set("Cache-Control", "no-store") >- response.headers.set("Access-Control-Allow-Origin", "*") >- >- if request.method == "OPTIONS": >- if "origin" in request.headers.get("Access-Control-Request-Headers").lower(): >- response.status = 400 >- response.content = "Error: 'origin' included in Access-Control-Request-Headers" >- else: >- response.headers.set("Access-Control-Allow-Headers", "x-pass") >- else: >- response.content = request.headers.get("x-pass") >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py >deleted file mode 100644 >index e613229eed7a84ae8a4dd58724f4e2734908b2c6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py >+++ /dev/null >@@ -1,16 +0,0 @@ >-def main(request, response): >- try: >- code = int(request.GET.first("code", None)) >- except: >- code = None >- >- if request.method == "OPTIONS": >- if code: >- response.status = code >- response.headers.set("Access-Control-Max-Age", 1) >- response.headers.set("Access-Control-Allow-Headers", "x-pass") >- else: >- response.status = 200 >- >- response.headers.set("Cache-Control", "no-store") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-must-not-contain-cookie.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-must-not-contain-cookie.py >deleted file mode 100644 >index eb49bf562d1809d9dd66f4e23e083098a3e03c79..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-must-not-contain-cookie.py >+++ /dev/null >@@ -1,12 +0,0 @@ >-def main(request, response): >- if request.method == "OPTIONS" and request.cookies.get("foo"): >- response.status = 400 >- else: >- response.headers.set("Cache-Control", "no-store") >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- response.headers.set("Access-Control-Allow-Credentials", "true") >- response.headers.set("Access-Control-Allow-Headers", "X-Proprietary-Header") >- response.headers.set("Connection", "close") >- >- if request.cookies.get("foo"): >- response.content = request.cookies["foo"].value >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-sandboxed-iframe.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-sandboxed-iframe.html >deleted file mode 100644 >index 7e47275b6ce5204e304b30566667d9751f3dcfb0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-sandboxed-iframe.html >+++ /dev/null >@@ -1,24 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <body> >- <script type="text/javascript"> >-window.addEventListener("message", (evt) => { >- const url = evt.data; >- const xhr = new XMLHttpRequest; >- >- xhr.open("GET", url, false); >- >- try { >- xhr.send(); >- } catch(e) { >- parent.postMessage("Exception thrown. Sandboxed iframe XHR access was denied in 'send'.", "*"); >- return; >- } >- >- parent.postMessage(xhr.responseText, "*"); >-}, false); >- >-parent.postMessage("ready", "*"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth1/auth.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth1/auth.py >deleted file mode 100644 >index 8b6682686c8709994a19ae430ed2120a047f9398..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth1/auth.py >+++ /dev/null >@@ -1,10 +0,0 @@ >-import imp >-import os >- >-here = os.path.split(os.path.abspath(__file__))[0] >- >-def main(request, response): >- auth = imp.load_source("", os.path.join(here, >- "..", >- "authentication.py")) >- return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth1/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth1/w3c-import.log >deleted file mode 100644 >index f656b9222559873303fb17c14ae6e0a955572436..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth1/w3c-import.log >+++ /dev/null >@@ -1,17 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth1/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/auth.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/auth.py >deleted file mode 100644 >index 8b6682686c8709994a19ae430ed2120a047f9398..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/auth.py >+++ /dev/null >@@ -1,10 +0,0 @@ >-import imp >-import os >- >-here = os.path.split(os.path.abspath(__file__))[0] >- >-def main(request, response): >- auth = imp.load_source("", os.path.join(here, >- "..", >- "authentication.py")) >- return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/corsenabled.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/corsenabled.py >deleted file mode 100644 >index c8e230078f7eff5c9a442a9ede3165f998707ba7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/corsenabled.py >+++ /dev/null >@@ -1,14 +0,0 @@ >-import imp >-import os >- >-def main(request, response): >- response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin")); >- response.headers.set('Access-Control-Allow-Credentials', 'true'); >- response.headers.set('Access-Control-Allow-Methods', 'GET'); >- response.headers.set('Access-Control-Allow-Headers', 'authorization, x-user, x-pass'); >- response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user'); >- auth = imp.load_source("", os.path.abspath("XMLHttpRequest/resources/authentication.py")) >- if request.method == "OPTIONS": >- return "" >- else: >- return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/w3c-import.log >deleted file mode 100644 >index 2702e9dcae93fb79dd15156ea873612369c3bbd6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/w3c-import.log >+++ /dev/null >@@ -1,18 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/auth.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth2/corsenabled.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth3/auth.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth3/auth.py >deleted file mode 100644 >index 8b6682686c8709994a19ae430ed2120a047f9398..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth3/auth.py >+++ /dev/null >@@ -1,10 +0,0 @@ >-import imp >-import os >- >-here = os.path.split(os.path.abspath(__file__))[0] >- >-def main(request, response): >- auth = imp.load_source("", os.path.join(here, >- "..", >- "authentication.py")) >- return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth3/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth3/w3c-import.log >deleted file mode 100644 >index 5e60bde3ffc5bc7787a8e842afb58a271b477d0d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth3/w3c-import.log >+++ /dev/null >@@ -1,17 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth3/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth4/auth.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth4/auth.py >deleted file mode 100644 >index 8b6682686c8709994a19ae430ed2120a047f9398..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth4/auth.py >+++ /dev/null >@@ -1,10 +0,0 @@ >-import imp >-import os >- >-here = os.path.split(os.path.abspath(__file__))[0] >- >-def main(request, response): >- auth = imp.load_source("", os.path.join(here, >- "..", >- "authentication.py")) >- return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth4/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth4/w3c-import.log >deleted file mode 100644 >index 066ba50bcf17b769516319e446b8020eb2dcb070..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth4/w3c-import.log >+++ /dev/null >@@ -1,17 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth4/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth5/auth.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth5/auth.py >deleted file mode 100644 >index bc739f5eb597f831cd11a5776e8bcdfd248eec8c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth5/auth.py >+++ /dev/null >@@ -1,13 +0,0 @@ >-def main(request, response): >- if request.auth.username == 'usr' and request.auth.password == 'secret': >- response.headers.set('Content-type', 'text/plain') >- content = "" >- else: >- response.status = 401 >- response.headers.set('Status', '401 Authorization required') >- response.headers.set('WWW-Authenticate', 'Basic realm="test"') >- content = 'User name/password wrong or not given: ' >- >- content += "%s\n%s" % (request.auth.username, >- request.auth.password) >- return content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth5/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth5/w3c-import.log >deleted file mode 100644 >index f3776fbd3fc001af20d077d2f0ecd4384d182a1a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth5/w3c-import.log >+++ /dev/null >@@ -1,17 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth5/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth6/auth.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth6/auth.py >deleted file mode 100644 >index bc739f5eb597f831cd11a5776e8bcdfd248eec8c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth6/auth.py >+++ /dev/null >@@ -1,13 +0,0 @@ >-def main(request, response): >- if request.auth.username == 'usr' and request.auth.password == 'secret': >- response.headers.set('Content-type', 'text/plain') >- content = "" >- else: >- response.status = 401 >- response.headers.set('Status', '401 Authorization required') >- response.headers.set('WWW-Authenticate', 'Basic realm="test"') >- content = 'User name/password wrong or not given: ' >- >- content += "%s\n%s" % (request.auth.username, >- request.auth.password) >- return content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth6/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth6/w3c-import.log >deleted file mode 100644 >index 79704ce748d733b9d5b350464e21d864cc46e0ec..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth6/w3c-import.log >+++ /dev/null >@@ -1,17 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth6/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth7/corsenabled.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth7/corsenabled.py >deleted file mode 100644 >index ce22697390da911a75867d854e1b2fc87d3d091f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth7/corsenabled.py >+++ /dev/null >@@ -1,20 +0,0 @@ >-import imp >-import os >- >-def main(request, response): >- response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin")); >- response.headers.set('Access-Control-Allow-Credentials', 'true'); >- response.headers.set('Access-Control-Allow-Methods', 'GET'); >- response.headers.set('Access-Control-Allow-Headers', 'authorization, x-user, x-pass'); >- response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user'); >- auth = imp.load_source("", os.path.join(os.path.abspath(os.curdir), >- "XMLHttpRequest", >- "resources", >- "authentication.py")) >- if request.method == "OPTIONS": >- return "" >- else: >- return auth.main(request, response) >- >- >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth7/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth7/w3c-import.log >deleted file mode 100644 >index 48f6ad048d6234b9418441a59e0026f95d3df969..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth7/w3c-import.log >+++ /dev/null >@@ -1,17 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth7/corsenabled.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py >deleted file mode 100644 >index cb40efb081b4c0a080b6c3834c9dd82122b7ea20..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py >+++ /dev/null >@@ -1,20 +0,0 @@ >-import imp >-import os >- >-def main(request, response): >- response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin")); >- response.headers.set('Access-Control-Allow-Credentials', 'true'); >- response.headers.set('Access-Control-Allow-Methods', 'GET'); >- response.headers.set('Access-Control-Allow-Headers', 'x-user, x-pass'); >- response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user'); >- auth = imp.load_source("", os.path.join(os.path.abspath(os.curdir), >- "XMLHttpRequest", >- "resources", >- "authentication.py")) >- if request.method == "OPTIONS": >- return "" >- else: >- return auth.main(request, response) >- >- >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth8/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth8/w3c-import.log >deleted file mode 100644 >index a019d2120251794a51ed49f4e3c028244faf4681..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth8/w3c-import.log >+++ /dev/null >@@ -1,17 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth9/auth.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth9/auth.py >deleted file mode 100644 >index 8b6682686c8709994a19ae430ed2120a047f9398..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth9/auth.py >+++ /dev/null >@@ -1,10 +0,0 @@ >-import imp >-import os >- >-here = os.path.split(os.path.abspath(__file__))[0] >- >-def main(request, response): >- auth = imp.load_source("", os.path.join(here, >- "..", >- "authentication.py")) >- return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth9/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth9/w3c-import.log >deleted file mode 100644 >index 44b17c90c4509a2ee2389dc0fcdc06731994bab9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth9/w3c-import.log >+++ /dev/null >@@ -1,17 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/auth9/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/authentication.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/authentication.py >deleted file mode 100644 >index 4f65fa23d2c42481e6d610b8640bdcab84278420..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/authentication.py >+++ /dev/null >@@ -1,32 +0,0 @@ >-def main(request, response): >- if "logout" in request.GET: >- return ((401, "Unauthorized"), >- [("WWW-Authenticate", 'Basic realm="test"')], >- "Logged out, hopefully") >- >- session_user = request.auth.username >- session_pass = request.auth.password >- expected_user_name = request.headers.get("X-User", None) >- >- token = expected_user_name >- if session_user is None and session_pass is None: >- if token is not None and request.server.stash.take(token) is not None: >- return 'FAIL (did not authorize)' >- else: >- if token is not None: >- request.server.stash.put(token, "1") >- status = (401, 'Unauthorized') >- headers = [('WWW-Authenticate', 'Basic realm="test"'), >- ('XHR-USER', expected_user_name), >- ('SES-USER', session_user)] >- return status, headers, 'FAIL (should be transparent)' >- else: >- if request.server.stash.take(token) == "1": >- challenge = "DID" >- else: >- challenge = "DID-NOT" >- headers = [('XHR-USER', expected_user_name), >- ('SES-USER', session_user), >- ("X-challenge", challenge)] >- return headers, session_user + "\n" + session_pass; >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/base.xml b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/base.xml >deleted file mode 100644 >index ed01aeceb5a0adb58b15a75eca2c3345348c267a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/base.xml >+++ /dev/null >@@ -1 +0,0 @@ >-<base xmlns="http://www.w3.org/1999/xhtml" href="https://example.com/"/> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/chunked.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/chunked.py >deleted file mode 100644 >index 7e8433bd869d4bf727d6a3b169c5a2e646cb7c82..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/chunked.py >+++ /dev/null >@@ -1,18 +0,0 @@ >-def main(request, response): >- chunks = ["First chunk\r\n", >- "Second chunk\r\n", >- "Yet another (third) chunk\r\n", >- "Yet another (fourth) chunk\r\n", >- ] >- response.headers.set("Transfer-Encoding", "chunked"); >- response.headers.set("Trailer", "X-Test-Me"); >- response.headers.set("Content-Type", "text/plain"); >- response.write_status_headers() >- >- for value in chunks: >- response.writer.write("%x\r\n" % len(value)) >- response.writer.write(value) >- response.writer.write("\r\n") >- response.writer.write("0\r\n") >- response.writer.write("X-Test-Me: Trailer header value\r\n\r\n") >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/conditional.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/conditional.py >deleted file mode 100644 >index 90bedf995290b70cdc1c1e8156090b8562036407..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/conditional.py >+++ /dev/null >@@ -1,29 +0,0 @@ >-def main(request, response): >- tag = request.GET.first("tag", None) >- match = request.headers.get("If-None-Match", None) >- date = request.GET.first("date", "") >- modified = request.headers.get("If-Modified-Since", None) >- cors = request.GET.first("cors", None) >- >- if request.method == "OPTIONS": >- response.headers.set("Access-Control-Allow-Origin", "*") >- response.headers.set("Access-Control-Allow-Headers", "IF-NONE-MATCH") >- return "" >- >- if tag: >- response.headers.set("ETag", '"%s"' % tag) >- elif date: >- response.headers.set("Last-Modified", date) >- >- if cors: >- response.headers.set("Access-Control-Allow-Origin", "*") >- >- if ((match is not None and match == tag) or >- (modified is not None and modified == date)): >- response.status = (304, "SUPERCOOL") >- return "" >- else: >- if not cors: >- response.headers.set("Access-Control-Allow-Origin", "*") >- response.headers.set("Content-Type", "text/plain") >- return "MAYBE NOT" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/content.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/content.py >deleted file mode 100644 >index d7c62ab6d86cb5827ee30e87c751d72949e0ddc0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/content.py >+++ /dev/null >@@ -1,18 +0,0 @@ >-def main(request, response): >- response_ctype = '' >- >- if "response_charset_label" in request.GET: >- response_ctype = ";charset=" + request.GET.first("response_charset_label") >- >- headers = [("Content-type", "text/plain" + response_ctype), >- ("X-Request-Method", request.method), >- ("X-Request-Query", request.url_parts.query if request.url_parts.query else "NO"), >- ("X-Request-Content-Length", request.headers.get("Content-Length", "NO")), >- ("X-Request-Content-Type", request.headers.get("Content-Type", "NO"))] >- >- if "content" in request.GET: >- content = request.GET.first("content") >- else: >- content = request.body >- >- return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/corsenabled.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/corsenabled.py >deleted file mode 100644 >index 4a3e1270b65f41acea1c6f2df4d3f1ec9b95eca7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/corsenabled.py >+++ /dev/null >@@ -1,23 +0,0 @@ >-import time >- >-def main(request, response): >- headers = [("Access-Control-Allow-Origin", "*"), >- ("Access-Control-Allow-Credentials", "true"), >- ("Access-Control-Allow-Methods", "GET, POST, PUT, FOO"), >- ("Access-Control-Allow-Headers", "x-test, x-foo"), >- ("Access-Control-Expose-Headers", "x-request-method, x-request-content-type, x-request-query, x-request-content-length, x-request-data")] >- >- if "delay" in request.GET: >- delay = int(request.GET.first("delay")) >- time.sleep(delay) >- >- if "safelist_content_type" in request.GET: >- headers.append(("Access-Control-Allow-Headers", "content-type")) >- >- headers.append(("X-Request-Method", request.method)) >- headers.append(("X-Request-Query", request.url_parts.query if request.url_parts.query else "NO")) >- headers.append(("X-Request-Content-Length", request.headers.get("Content-Length", "NO"))) >- headers.append(("X-Request-Content-Type", request.headers.get("Content-Type", "NO"))) >- headers.append(("X-Request-Data", request.body)) >- >- return headers, "Test" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/delay.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/delay.py >deleted file mode 100644 >index 0fa1276f8788961a635e24ed423674c71ccc6599..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/delay.py >+++ /dev/null >@@ -1,7 +0,0 @@ >-import time >- >-def main(request, response): >- delay = float(request.GET.first("ms", 500)) >- time.sleep(delay / 1E3); >- >- return [("Access-Control-Allow-Origin", "*"), ("Access-Control-Allow-Methods", "YO"), ("Content-type", "text/plain")], "TEST_DELAY" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/echo-headers.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/echo-headers.py >deleted file mode 100644 >index 8f23d3db019e7cc311bb58cae7d6704ca9402121..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/echo-headers.py >+++ /dev/null >@@ -1,6 +0,0 @@ >-def main(request, response): >- response.writer.write_status(200) >- response.writer.write_header("Content-Type", "text/plain") >- response.writer.end_headers() >- response.writer.write(str(request.raw_headers)) >- response.close_connection = True >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/echo-method.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/echo-method.py >deleted file mode 100644 >index 5351d1961ac0254106c374e2b2ead84bbc6878d4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/echo-method.py >+++ /dev/null >@@ -1,6 +0,0 @@ >-def main(request, response): >- response.send_body_for_head_request = True >- headers = [("Content-type", "text/plain")] >- content = request.method >- >- return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/empty-div-utf8-html.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/empty-div-utf8-html.py >deleted file mode 100644 >index 26d54b9d1496af5fc72a1ba1d2a2ec83c1822f50..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/empty-div-utf8-html.py >+++ /dev/null >@@ -1,5 +0,0 @@ >-def main(request, response): >- headers = [("Content-type", "text/html;charset=utf-8")] >- content = "<!DOCTYPE html><div></div>" >- >- return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/folder.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/folder.txt >deleted file mode 100644 >index fef12e219683bda829d5b4f972eaed75fc8221da..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/folder.txt >+++ /dev/null >@@ -1 +0,0 @@ >-bottom >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/form.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/form.py >deleted file mode 100644 >index 6b1c49a993bfa25ba6c39303880e8860fb3e1489..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/form.py >+++ /dev/null >@@ -1,2 +0,0 @@ >-def main(request, response): >- return "id:%s;value:%s;" % (request.POST.first("id"), request.POST.first("value")) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/gzip.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/gzip.py >deleted file mode 100644 >index 87dd5bec097fbcf5eab4e03e07500734e4fa2dfc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/gzip.py >+++ /dev/null >@@ -1,23 +0,0 @@ >-import gzip as gzip_module >-from cStringIO import StringIO >- >-def main(request, response): >- if "content" in request.GET: >- output = request.GET["content"] >- else: >- output = request.body >- >- out = StringIO() >- with gzip_module.GzipFile(fileobj=out, mode="w") as f: >- f.write(output) >- output = out.getvalue() >- >- headers = [("Content-type", "text/plain"), >- ("Content-Encoding", "gzip"), >- ("X-Request-Method", request.method), >- ("X-Request-Query", request.url_parts.query if request.url_parts.query else "NO"), >- ("X-Request-Content-Length", request.headers.get("Content-Length", "NO")), >- ("X-Request-Content-Type", request.headers.get("Content-Type", "NO")), >- ("Content-Length", len(output))] >- >- return headers, output >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/header-content-length.asis b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/header-content-length.asis >deleted file mode 100644 >index ef7071d7428d9593d69ec10675cff30c46610e09..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/header-content-length.asis >+++ /dev/null >@@ -1,2 +0,0 @@ >-HTTP/1.0 200 NANANA >-CONTENT-LENGTH: 0 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers-basic.asis b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers-basic.asis >deleted file mode 100644 >index fe37b1b38e9f8698581affe8d74f176688c11d15..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers-basic.asis >+++ /dev/null >@@ -1,4 +0,0 @@ >-HTTP/1.1 280 HELLO >-foo-test: 1 >-foo-test: 2 >-foo-test: 3 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers.asis b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers.asis >deleted file mode 100644 >index d25fe52efeb5427b126c3b375b4bb00090836382..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers.asis >+++ /dev/null >@@ -1,5 +0,0 @@ >-HTTP/1.1 200 YAYAYAYA >-foo-TEST: 1 >-FOO-test: 2 >-ALSO-here: Mr. PB >-ewok: lego >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers.py >deleted file mode 100644 >index cefa8ee65f70d13d545780f1b06e70bbe871bd91..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers.py >+++ /dev/null >@@ -1,12 +0,0 @@ >- # -*- coding: utf-8 -*- >- >-def main(request, response): >- response.headers.set("Content-Type", "text/plain") >- response.headers.set("X-Custom-Header", "test") >- response.headers.set("Set-Cookie", "test") >- response.headers.set("Set-Cookie2", "test") >- response.headers.set("X-Custom-Header-Empty", "") >- response.headers.set("X-Custom-Header-Comma", "1") >- response.headers.append("X-Custom-Header-Comma", "2") >- response.headers.set("X-Custom-Header-Bytes", "â¦") >- return "TEST" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/image.gif b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/image.gif >deleted file mode 100644 >index 6d1174af119c28d3f3965c426f99239dc09c4a69..0000000000000000000000000000000000000000 >GIT binary patch >literal 0 >HcmV?d00001 > >literal 167145 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ℜ-GkdhU^zv1B@doGG >ze#|VFdET9=7jFN6f0M6y8{bgiyeA|U@ep3QbS5&T#5g~|J7KxlbDNr8k+)oCeXgZp >z^K!oLp6AQON~OV<3oTE<^acJZ|JLTw@4~M9{f9KJKNlnZH@1{49*Zutx%fi=Ea^vZ >zeQ}jHae-^B^?czB=|#Lzh10K%<<f1854v31sfyY>8*8<OilDfezU$i+jSU18kC8V5 >z$1QkfeE~rwWQp&P(ri#-r=|9;#G7RtTVOugRL3^5&x|crvVI;TaMpTWFWYM2Ra>x- >zcVW46`E26nu9Yhv^(*!Z$71f;bpv*|d>yCmaQ!jM-m&eMN$XAd&Gn^6z4lj7!V($z >zEQ512aO9dk)SzBMLE0@#`gfAhB?AOsw=cyW!RZPfY6%?*o|>8K3N+o^mMFA-KC!-p >zdXckpRC})J>!?%PY}=Uq98q`NYRtvvq20@@b^+0-cFNx+Ki7bV+yn;FDYEAEB{nL_ >z9kMiohK>@SQzPk9{@Z1bOz+&`cjU>ucV=9%o_I#D*yiAS{WCk%-!BLpZfC@n#%|qi >zjx93Tw{p2mtEg*{Z5TJQnCG&`F^(%dinqzvdb$#uV-*p$e0F;q6vqobsus<XSApKk >zrD=678#mQ$)b$xvI7j7~yv1KG@KNttED6|2TjX2FG%ptzjRs%ls@ba<<Rjo}dSwR< >zpGW6eDylV<JD-9^U(_7HeYg;cGu8u2?(!Fk;_@nE&rqB)V=E({LS-6Fou1>$4%{BO >zlCR9$z~#CgABn4QyN_AU(@}>-=4v}_)bI#(P`ygqxf#9EF#CmVrP!x<-Gaa$88O8R >z-c7nZ-RcZ6;RlLi@wZdBx8bHeN652IUyv`~aJR4fk{_0&r@pW<WQ?=oZMnJB0c?T? >z?d-p>90H?cttv$Hs7Yk4g1LMw>HOo0x3*1Qg$MWa?=?O}FEC4=PYgwAJRiRe?l?(F >zPM+bulz9s6%6ycPF{SbP#=JuxEJYz;g`#z(BHvq|oLZnkHB>19jRZ^_u9(8UbAdQb >zmQ18K?b56XgWNkj{uy=aUijyu&+fej9m*I)cxaS9>+!E>QhPN#q;e&w=VR=l6R-Z; >zw=ooS|69YMlb=rP-+UX?``?>Gr+@#qUkVc32QXwXV>c+;aYqXi=t7OjjUfkb<~@Ux >z1dg8B0&G_&Px&@OevAevvJGbY1+v|0F$4HTRE>E{t@1P4pzPurzt?>$N@@JXfV^TE >z-|1o`#BqZx7bo5J;8vYVv*58oO&ZUjU`gZj+DqAOjGR3&wd%+2xvQ}lY>Jy6W(hi^ >zzDK~eUe}TBiXW1#mgEK^b#0m>UMOD`aBZ<sDxn$k2vm9AuJIW8Uc9FR?+f3_woVoN >z+}#AHkgvNQscc*^p!kbkn7A4#TTApXl=_*U2#i*#45lcaRRD;eEU3O-aX08Y%nn(N >zlHW}e!EO+0z1MYs26*WQp9KYeVY;eQor4C43AuiZ_i7<Tvit;ts})nLPzxn%MJeQ> >zXKNHHhp8GCsfB5qi%8QIDk0B`uM51an$}4%SpS-@(;Wrh%7G4P>|siFb=N?WD+X}4 >z1^G5fb!v&h?uND-j?vp>Do10k*wh;P9o)uh8UMhsPZRkaV(q%9bIna}pH+TfU=*r6 >z+h4tO-ao^GQoY_`wC#cL5!Ges5)&J*c2vL%*H5pNJsIz2w0AN;t^-vvzvBB9RUnY7 >zuQzh#dxw13Sut96#eT5aKgh8lBrFQ%i8&Zhe15vY{(Eyk)d#F$<nES(<=6Ist_6>b >zHpJK5g2d8aDyv)Nbxz#6aqMBD!PSzYef849UQCigIyZQbB5W-#T#ZqV3K>6mw!IpZ >z%s!})?>$?m)_|v2RDUUmrM*$kkEh7yMbxFbEg=^F-J&S5Qo*c0QP5p{irUeV{E#wT >z2$R@vdAqeBDkfT^FrK1@|2AD49;M7}5&_Q(^Ik1Sst(S$oALxX=HWQR3&#PavqG-( >z`T~5{3I+3FEf-o<i>l-g_B)jn90ocmPyY+dmMh^?&2h4Kf~nfP$-?k)+1x>>So=x< >zA6K@3zE(lO{SoHwT#i&ZQXvERr<->(9H)4+*+ZQ-l|%GhfE~gNVD|;&xn9&&EW~sD >z;i<V4WR%iwIjT|HWZ~X)J%w=05yff&7t=it@uBq_hy{Gg=7Mr7#>1L7nZGx%SvF+2 >zUn!5kHH*<zYk(e;pOf%O1Cbgh<Haglip*xO3P+XP;eK4yWM1%ioyyIoFE)&pXs!P+ >z!xY1|l0hY&k(nbTL{6sc5#f!=e#fzwv>~e-t%aB>UD-m~D~0<JakkegADT04F23=7 >z=Q<PO%*~+m{UglT4mmF2ZcDFwEnM-~4t`vEC0*C7D&P0e-Kmg`^d`^n54#$VKe>MD >zNQ-JJ*H?1)esSNe8&px^e!x9B!^-hipAu+<&CBPKv-Y>Hzv9NDDKBSlCn-JE`RtCw >zp>Afl-+gv6f24!FZ3k^udA0B#pOp)*|A0IHS`dR{dT~K6XT!YODlc*KZ8m#&$ePs( >zw|HWJBsY<jKM0`Z1Cgk6GgOCC!4}H}y@YU_574<=wzgxoMx}>1=yX0H-?~Ky?%nen >zcNE2s-jun%y{TWzL&$RF)G6g;kW<c`V(lncME+fw;I@6q(O%V6IzXi0!h%43K+1d% >zDNey#HQy5%g^Z?g=`^<GFiVZbF`}{e4)eU`uQUX6Y4}dN45nEy$Di08l)<6Uxcf=P >zw)p&G7g%<9_GLaNj?WIJaouM)=JD(UFFEvh@Nz`Sz6y>l9(-w(ZOP}DZ7|Iw!ed0P >zVK6JUlWpC^wxu!26)ZwVt<)x)3e7nj-0RU)LnN}SGC09_j(G;lG-Dgek*g4K+jxbO >zxWQH*X3|!;TR|Ian+#6U3LDqS+S$Z)hjMlf^I|`8_dz++p*>GS+0XKOp6|+a?ChEK >zVJUY4UcZ#q`j@>B%ArSG-ACi5N94ZEXL+r#S1#QDaPR)=%ln`IyT6vmahL&q?Z1Ps >zV7UkP{y5RQaiRCuz3nk~#q<i(EdWV6?3@~rgQu}WX24(<u`ILCM?ivikOs#3cF&Wn >z{_8V?iWEBRl-$V5F`@(gXJYZ(ZBVXN4OwG=thr3qZs8rHfpqo7Rz$IWi;STez=%UJ >zPCsYTEjF7K8#S?vB5pfE`+e!+9R#XvAk{vdN-U!~bx>WV`@=TC4@Wrh@m2deK}w^X >zEgX$?JD6#a!NL$(P#Dn2k!Q3alkUU*M&qchHO0`l`b}KvE*{?N@-95bkJe=h<%D2( >zz8g&48J6wJdECYsY`io*@~n9<mjsoO9pT1za!K)=C{nvAhU>*=+e=!^h@jU#rjx^L >zpQeJ4;b!Y#mO&GXOk`VN<mJOaS4P--XMjcR!&WmKMkhB4%CREyf>*dZFdVN6u4M(w >zp2jxX;Lt0CbQ+JIQDo6q9ZoCXL*x2Za1A;++iC3Rnwz#OOd^!!k;M)q^6>FYV?4(m >zHEuk^Jh;NLT47^|JU<%n>juYog=s_tBv-PXIyw7-d7(7UmO(tzs;|H)xP99O(;d&- >zHp6m&a-)X1PEeLrFwYLpGRJUsLs_Ps+!O|lp9IRSr{xdO3YTfc>7`L9uTopDZzD`s >zy4TrsuZr1=fy9m&8u-G1SJkrDrA?_CUtq2NC~bxnNE)>sW`{<2H*!YR1>RRXM$P-Y >zuV)Fj53{{DMq`FKR+zCim$8ll&aGAE?JS>6ADOOtpL<xq{PVH<n`3?0ak0zzK-l=u >zILAJi8`#MSp|O0RoWHcm!_{&9jd2O~q4UmiJnbRrBU=p*o+<Nt(eW@WgEKq(FlOzc >zA){cyEZ3Ddu^cw>Hfv(#;>3sUiPc&EoPwOKgpF)?JSS<Gt-|LVz~meq<`JQ6+hL~W >z3fpR!X@qBL6J?BFvMq_6s0^OoFlYY^$1IpjrZ)tyjU~kM{4;prMDETEt|_#S%IDhP >z0bgir6+Aa)h8rR%p#^g=G<E=OT$ypk2~+Lc#LHN@MydEK5SD8bn{$uj!x!zx@GLv0 >z%=j!vBJbb~FO`@RxWQ5yW}^0Ti8D;}2A9|gKuni8#|zA7SQazvzpc14lx2hG#*x|$ >zR$AUxOwo-2)R=tvnQSK_FDQd;yTJ+l$X-#q5S{^aSY>I_fL%~dETLFGI8SpXTP1_3 >zif4_qNOP`p)>ocwA^1!uC`S&;^1^T(;+cD-#sc`+vcZ71CZ^8{XL|<gx+8aQJZ~Q{ >z#|z3@&gE|3;6yZW9GaMJv?)}?RAR;yv1-bxXUgT()VAMKq$4I2b6z}=RT(nvadMhg >zHSKNA-5Jj{nVI(gJ?#j65@7yhm*11!e!Ly=(hiku>I^WX;mLmC?yx7j_kDj7umXCm >z@zjX$v>cI>PUOa&e45CAs!3!<2=^qtX;1$2^pNZ`ZHZmlb?Nk1z$3|!qeq@OW(Q?9 >z1f3XsmONaydp_tiD41z5V?$%v3<Eg3XH<zYIo#k}S3usa;DRd7&iUYCzj5eFc1aaS >zt%-A{P-d$<Hsl;Pq_QF8!eB^M6}UPXC^TW&HSraPIo5sRJr$hbPL9n6YcHSoY=omr >zcy2qxM094W%&@#rvQn8WwfKQMUTibWow(u9Xcu1eMuFK3j~pyB=qP<5nCpaLp@vIv >zP!1hB?OKtIif7_z&n<#EyXPx*5y1`#cdVjD;_*5A@h)4WdpIKVOa_Y*&(-V9Hg4ht >z2IslpFPX-(X?)(E8K(UVFTIJQw<5h8%OuXfMq_x^6-?a>wtFzg8N+tqgEE}C4H|4^ >zJkxZTX-4FH9phO-nI^;Fo23^V=N%@;neOkoqz}@)NG@eKTT${5-^tr@VQ%49vfYGJ >z2l=dEBA3MHnl^FM`8+C-qtQ75ZIU^^yBUuGJkDSz_SGcD^D>56u;FYBhUp*A(OqG> >z#<QpuyuHD5Z%@vxRLy<pnOptM{PbxKJDd#<W`1#HZ;uB^QC=&$a=s_O{u$2R_+4PW >z!lQJ)HW_{$JM;R_@7GdV^D^7!f&M`7A8810o-@XR-H31=i1^^kJi}*^Ge9VnNX7dA >zr8o(C--61i1x)pVaZ}`<a3*$cLF>=of@#qOzvxd~)Ze#gsKqrZS~Q;En%rMh8D4as >zS+rkS3?W@1Jbh?{U&0cXZ1*kMpIRbTFFD;`A_aq7<CN0BMsNMfU?*Xg<1%un{>$zu >z%brEcUN@F4r0yEVvurki$q1HFJV!s6wY_Q1oey}q2^vcPyl>7{AMU_+0_?FY3k=JZ >ze$^lY@Hms@is4ui*>p@!D$%ETsgEGJy$e-fIg<^7as&B*bU6^ey+uEJX)lJiX9Zx` >z-4ig(aU|Hkui#v5V#}<zyU&v#=Ve}nu<W3mfDIml$h9Z3bSv0l;r(VaOmf6ay(X4s >zJkvUZy=y+mZLsJ=&4keg;FLMwoCZsqF-pOAdJv1^@3EX#I7B=^xbc*tAohv}cynY| >zUvfN&uWg~+P$<_E%E9xQ+Wc()c&;yzw?*c2{b_7`g|sv^<d-i1n#_%_0PS{W|E+%b >z=h@5gf9;3)z?*X<lWm1(QsP-!QtxXLWlq>7l<i44yA5!Tmr!{n;ldv_zKI>Q!mj%K >z{*v4WE6j(w+s_U|b8MyFH^l=RPsudhC~3a&;o3HC%MH%;&mV5eeRRQmY}@wH;zpk1 >zFiU*}0N><7{$(3)WFNYmcyH*VJx%8RkB>o8Ng@lN*gk1s&#Gs{s`&<If5z&tKYH|b >zlHthe!_S<FKdX}4dB)D1$J;&y(mrt`KdCX2XU-<SxSc%vG<ohv^1RAtBb^i-r_Z$a >z>^CXw){4j5`aU^UeD-QjS$&%FSqr%JPYO^J&(i74w-M%d-(_ocvI90Q>F`<9c%Ci4 >z$DvdD#Ri*HBZwllKmNp~Nd6&U*n0e4TMW~5hO=#kt<l8t;&T!^3yn$7M#CmtNlpG0 >ztdI(B=nO}X^l~>z<jE+8<+AsAanv!aYyNE8nqvESrV^fORP!0zG3=C~vF{`2XfQY7 >zIm;&FZ*Bu^7*~apDoja#myw)^3SM{<XU}}~&FTg>emQmJ>9_ogZW(f2J=}m9&b|yz >z_ItK-)5P`}c3cH_TYRClPPqd{#?T)$v?4Q5bfLOB*9_0Bc40g3Wm9OtyRa^ERJTL? >z#qAhQ{0zrng%v>LY}pU91L%V!Mv+n9(*6y$m7r%cglmxrv<>=Zkoe6$;~VkPH>cij >zF0a2iucVy<t``h5?+E8C@c_3SK=%Xbo;m4Wjp+uq!M+DB`TeuLL;gE8qA57oN5kX0 >z25d%$aU}R3V90i6fbd9j|968<Hi5|5PM6;g5k#B@eE;}&UVg;v{}FfkNBq0$h<NV7 >z-XBTDtmJ==<^qqU8vS%8$`pA2JaXvgvErZ9il2@vGLeUX-dfX|l4GZS9?MqU*uZbF >zcWn64Se8((o6f&`FUjb30rFK>3tn%yu54`E*zl&M9Xrn>$8#Vpf5Tfdu9IuhIbz(& >zGT2~w@VO3r=2qAzHlvC2`~)`w%KM7pm~{g5pH%4KS(X@3X9e3ko~fC^G{kfEHgQ|S >zuNg+%cIo7$V7UAFTxG&{Pa@ZPgA=vFaoG49AA%ArIXh=KF2gJwQRd|sD~QkAMw<zS >z0>(1gcEd6v06&CjUl`K*W~R<A`E5*Yneoo6p65~q^LCkzl@kNxj=WfJe%9`myX}bg >zIrE@8qvYdm#_8`LUo_n@ggtL}ZTebd`A~hPU7Tm7v-#1U^JRt}C5ETf&6@)gcQ^Wn >zo_A@UGV!c1^LmSYub@Y(afk#bpWpRnP(b9~Z8BTG;#=>$<7rr;UE^4_ZT`-aa2rG4 >z#*kg7ww9mUehj%4_CS2{f_>BERa&|IC-2?Md&)_yn`Zw$#y`D)@%yn33rg^>3lgz< >zUfANts_@S6@5G(UV@;IpZvzjuF1epMf2Z`M_nC%~21@3QBO2dLpXPZU(yB6<Y7TC6 >zIK4MX`0EY5*)Q`3+Dq}>_iOPd?YsHPZ->u0Bo^JwwG&3DauVkV>Cgb2yGmref~OW! >ze<$9cs_g$T(<xuOS7lTF2?N$1a{q^!dYL~7G{5flmorN1W|i*=%LJVbj;Z9H-J5hP >zfQCKbi&G6hy3nAy|CF>LCX%OnC78HCd^&8|wOKlDb1lZo!%VcPKry1C+a_#99VPBt >z*vwf8RW`bQ$`5mF6}M<|XqG-?-5#jWuWM|k=&hYlU+QT(h5kCMnY^yxt$8!%@dK0M >zvbIr+cbv9<Y;6ZY49s+~@ls-DeQ`6Pas)&8Bda?{G>bVlUP0l@sT7UaSph{UAgpv8 >z7rj|Bh|27cj2ie9D0t~bhefXFH>1z^7`6{s(-cn6U`CaCe69Lb3NJ2BDKDAXjOfG$ >z68fRkK*b5%_ACWYNbc$vFGEw?NwH#n*<%qpA!(AX956ol0Isnv@w9%kZv6m#%#AT< >z&^oYl7`gr8<dD`mm#-s^V=hW?o<ldv!+4~loraAap!+JPA=`Z%Ta#KTTPn|dl}0ow >z=bw+_67&_ktRAg@_0zwg-xYIahlgWqc~D$e?796s$G4ccx@N-*Dfbz}u(Y>F4pg6b >z+d6cKDYtjUm~S%LbXhM@=e_=p;1>fX=MR7Q+l-dpWj8ln9ld%@IO?6KW!bUQODS^g >zgXs~JZ0Kt1h{em*_DO$d59Oy(*UazCu}m$xa@U#vV@O|;mA^htw7mc8>&HWy((++z >zt#<1|hPE8l%xcgvxS(|idji=utbZX%Flx5{>)~;mXIW_z&f4F`4b3kqy2HuA<=z@V >z&q*)BNWnKhTtI!RkK*=OI#tQ2fZ>iSte^U#wF~>zSIa$S%8&49^{e}qqno*sAJSkI >zMRWdGKS@<pWR^OG)v1M(e00xR@tq2yRQA)z3LofvJM?9A;>=$nO`$Mw^MAOVhtVGb >z-)L1TdZ}Vay&82Xg%gcVg!apOE5NRXT~<HM7s;2c^Hgkg(aE%dsw=5n3~~XQk8v~n >z3q1a<YQPCJ4>h^gJhzKd)EwH7rgduW-mpdK*x>>7yQspjZe2uLh8z4WDu=XL>z9ZZ >zYn?6Os$Z;Cxw!(^mp93Txh2XypP^npZdDYtT&FRGVI}bhd8*h2r8g@cmcLLuU6*-S >zYVZL5cxs{dX02jXr=Q2uk|L`V9BQm{$jI<Zq0xG+%E(sezHim4JwCoSk3Som`%#MG >zsL$$TEt$UlcT{ly`>lUYez~y!_rBC#OhFA~^V@#;+YG+6%3AiGy&gK4l|D3*%tCkQ >zfbA;swq^W(7^&DnDB%*YgZgJtT=h92<le@h+=-2T9l2J%r|+V1oJ8g?Myjx@B}(o_ >z#i04oFZqAbGt5}VknP`2sXZea`!4u_bBeBf|4g*@7G{{N@>P%<7Ne)FHsWPp13QNu >zv}m)+CHXF%*$;h#PYW2`b>(pR^{iO*9y$+8WYiqu_nT5ua}#H4;gtzI`B&vRK`oK8 >zXRlHaj2U(?u>}>1r{JCnc$wo%s=YIR=YL4ZcP@)mC??4D{zW43q(rrmib4HRVcyR5 >zT4dUcNVZOp)AqhWo(df@v;LA}ht*T4T5&hrYsGiQMk$68#lOxf6nJGVKs=i`;}gPs >z?DV2aTHb)}kc49!ri-+riL?|adE^0BK?t!Q=TyQat>e_IBBB-Zt@0h~YY_(g0sJ=I >zD*FOmxK}5|Vy8l0K-r>t>IT)Yl)>KS7NyuYBi?t9&JL_!fE+aIm)j}f#*+Sl+6<FT >zWCHkm)1#GpSKM^>e95&&*CPIw$GAMJBBiIbkj1nocsZ+_=-FCC?21_D?V7~o;v$l} >z;ieFGICp2qf<l!0p@2hMjOludTg^KP4;rrpJ|U&o!c8S6LD~zug?Z&Iaqfv2l@iFU >z``_WIRf*xn0r|9xkvC8NPK@}6)GP)|x8}vRM4wi8KC<V>|Id#8=x7d4PCUe5%}m_B >z9XoJ6CG%tG{9GNTRp&-($+cMr!n3ZRrt$P0k>RTc&)u5?9Woy9+4t>e62x?aV)G&t >zurYe>{<Rf%Bd{*+&o9+J8ABn{GdlugGb7s1U*qgj7~Fv*_hWxB)Ja&LG8Tut*VHdp >zD$KPRs6+d_qN?az%%}M-Aag7F?SIYB7-4l0@~_CIGOa^y*hu((TEA{xYk~i?uAFB@ >zKlU$4zC{VEg@?5Cs|^vjn&VNblYVYmGv~SH1rf+($x)R$0pAB1i7IY#)4ea`pY@Bz >zglvelv`YB;#BVC)86Mh21dd%&EzptHuf>w^e3E4D6%+dv>(#i}z(~b>K1CUxnr9Lg >ziMq4mt|+GS{Vzsg%EEWr>WA?Vn+x)38~rAav%l!9M`A`R2k__r0^Jq2VbLr7I&*8B >z(dtN0dFO!ET_M+-Qwuw^;_mcEz#}1X=-T)}!W9L+M|~tx??QxbiWR449H&v)_fx%& >z&L){f$sK_XYK_u)PAH+`k-sJGsWrf;MT}xCZGd1g$=}oK1Zlf+>-tS*V)(bM7ti`W >zM;P&Yxb|7Pkkas@?Uyt^B?SHV;`!XsJMF`Jh7_L6Hk0n$)z}7ha=^{y4!iaIbCPeV >zzbJc-?_t%3;$_SKZJl>)h&BGK@poh?og5w*wAuCy8zx%PQFR>gD>_`>o`uPzxmlJf >ze6t(xe(Uh)U$s&Kr`i<K^{~?oPmfBkH?4Z_pL2J*IpzDli+ZR~c{hBP%uKH4^Kvp_ >zm7-fuesMkAWL#|5{R-$umPN`un3bM;ulc&iO*4!<FFU7;o?9@OTjY{0`d;A2MY=H} >z`2sSbAY6NzY|u?MsHd<VisU1>Cb43L-`SaE6nr2P^l;E*^`%yU2-LA9CSt|%F=IGe >zie8dfWq_o-E>c@(?tVpv0mViI6jOA+N<9fS3r?~VYojTOZe+azG1^w793$<tTdW^O >zu}UXnHbn-3;vjz5Bjo`FU)CNoH~2*nERcLNi{eJ`cf3ee9v{(Nmg<-#>ja8)S1EcC >zVaiCEfEF^gOl*zqH{9GS-x8^;PqE#2Xs}7f&XVsu5t-CeOuJdFD?3%{$(Uu4nq(A- >zg*PRU&0HuGW)!<5k^1@`{bh<pmdqUkkzA6<G?1e2A~s2)qVy@cK(TES+0qvPdDEws >zE>c|n`%sbEG}(NbdH5k&PoILy>Qm?z+jLWm>bEGivtr{8ig8U1{CpKcT!VaE!+I5g >zS)P~E5*c2t1=)$zkqa8=1qH)Mc{D{$U#w>)gZ7TBS`{f*XR92pRb|y;K1-`<iPh{W >z_?AeG`;pj*NX@xOt!lB>4U+bs1uSq;M`cmhz6fVsr<WqF?~OCqyQs4+vpYG;21_-} >zuEUqs8Q0aB?2$ITyJ$KfHXFv7zrb01Skzprvy7wY0i)H|pXy_xjj&>6RG5lww7#3z >zB&OeXPc$J;4|07ZkiKWG<g(*78K<jy&Uf`(M)h1@=pBp^eaI4l!bpnxGUHg0a=l0v >zNwEr~8jbhCW=R-*v9TM~TA!lQy+y{miL~p*N*prMgN(25|NA;L(@7@jR9q6-x<h0^ >zbJv(=+WN_4B~wk4L<l!BA5FoB^{Zy}L9rr4772wFTTb`kFH$rl3kcgjz%mIRL)B^_ >z;mZ0|TttS*e%V!#rLQk`os3>5K?*4;S(Eb9BrPEOz<sgc2vs$UYzm}eiBD8p$mYwz >z#^WTz7_yeW7kX7}-NK3@4xtMuXkW43rpTzH4`0@Ai6#SlMaZ*{65fztZe*nnvg7Js >zfslZlKAUN>YByO~pR8ISHq{s5ks=^kWM)P-HlxU;_vH_g5ZD*mE>CU7$<`QmyKb`e >zrWmKcCEokJ5429gXOZ{1^xFZ&^5Z1cRT9dDtb`=nCQ;0isOAGAMPITS>PjT;Ee>xO >z?PM6^Z5X@PFwR1(%(!yk3gvZ}SVM3nq3$i%EjrP#Ut{3y+sU}tS0s}p_L+`8G-p_M >zGmas5AXV#t<uu8d(3rNZ4=~%8{+W3ss`2RI#$&9;jM8_y6-I90>f?VXC+;7}nmBNB >zkLcvv#(Qgxr~in}f$`R;6)Oy$WrAlr;W^$bXkdQHzIa|re9ozOeo=gGb$s3sMX`*c >z;3ict8m~9K0`Hb8x<S%Rk)dti1@}c(KsF8g9<<t5YXAO>$NRE9@5|%fpFNsz?c$b5 >zH849ej;z7y!_Dq6$Hp_w#RMQA=(mWl{CAl^u^1;Q8A?>s$r|-!w42x*O~GWiDFiYV >zsztF6MULwf;<^ZFD^}GX4Llp6z!90DMW%aL41<?iF;rsrbM^5L3KibC;c5B6K6(9q >z^ZMOZSoZT-F?v&MXiG81QXS_92yWuDSn<JhF)m5^JC|Y$+^ZDB8kOz045T9eh)nC3 >zG^R!7VWOy$kIdF7cGDC&-+s*6J{4mRJeGVdhJyF)L->kx#wm8gk0wrum9t2y$bJVP >zbC(-M{bIk_fV<M#D%wS?=R#F4>r=92AN@6N@7AxAM3y(}lb_#uq1r;VTor4y^r3)a >zJF|Z6X_6X8gzk_&v;NU0so&Ub;IACeXdiQ6zuqjzWI`l6F4gnm<L`~6#&xOQUmuOZ >zt9>d-O8WxD7D@e2Wd^*>2KQwTrf_?ck{+BgTQFn}mnJE+P;B7OOgG8e!j`e86!iMD >zpCf_tGpkn1tckBlIvZvZxcQ{I`Qtd|V=!RKDOrUhwxO9nQDHrax_&e%`JYVlnH$WR >z&y?qLQZKG18w#(#oJg6SNPac<$pQ&TT}^)dCwX2jWnoUVu#LQEk)nRFZ^<JC@B3LN >zUG(NhpH`CS?a|Ngc%SWTsoE{Moz0(Zfc*p)szdi@z4WcQ)d|X{xfJ8&&z~QEgxHF$ >zJEX2vi}m7HOl+xEGts66WNa42c$`&oTWnqvuZSh%vP8&bvL#36P6OF!RczEE(s83G >zk1y)YKQjV~6*jYT8Yp(F6pSxmTdW9g3##{;Qa2+j*@~T$s9NbFdo;y_IBwU{|JQzU >z?~~2v!}SMJ&_FSskb+GT<9zAHE>yi1k<kVr9!=Kj{$e{I_Fg3^FO!Wivo^D0U0aHS >zTR+Z)jLIVGS5Kmo2K6$4$1{^nVkqWr$%rhmscpZRZ?s;A*lJa5zq(heBKp=tkxH1@ >z3{63eldJ}$7jIGYIfE)@A}u6E*>_81vA!2KAU4z#oxb}{H=Rq<5*vq6)Lo=K=13rY >zvTg?%Ga$wV4>|y;7SpUKO_t-XM|LaE^xY`N^<u>=DfDTPu`LB{MpoXRY8>-L<=7Y1 >zcPz}AR<+Bic!7b&JuB?k7c+aY5mK!A?u*vXFBqxAYO;q7&|gV<Z8)35sxbh4A8Uiq >z!`N<-S^U?sqhF00$@pDM>Sc%ZI>;vS{U&$5ss{qherB6ZwV5xqS$u1=1bjnJi_l7G >zMyt={blR<L+HI)cQvK7c2Ldf-hp|~=`(xi6a=sDIeRJ$3JKb#G)zf}+B+URT(sc1O >zpG}ir{<iIB+CHfclG3^<b}QXff1PrGqC-sACv~{(>Tr)vSB@Ch8z3pRhz&U+#4^cl >z{GB7RUuRuJsTUJkL|V&YLYYY6;$QonRAjuxe|x1>v7**3!nlx!XMm9|B4imo^%6@G >zu!MFALtP}hJCISUeaWk211!727vNMxF%P6#)r*Z5-Ayl2Vg{e8VMR~;nBBis)%5Uw >z|Gbn>2(=jan^MF<&%+?@YnDiWNl`y{y$?Cihb<r*`63g{#QLjbI9BvG7u*K*+jdhl >zuoTO6F)m$XS@RRuK{o4@$eEFy{*X1hMYysEWER;RI4cYj>4u4QGu|5@#ma%ZHPAk~ >z!4t<+x6HLvMMg<v+%(0kOaw)X6oF)gZjur0DK<>Tuw1MWD2bk5J@ksK=O)wn=I^0G >z#SBOtqz+;RvJ=_iNso>uzdoAs&(TAd`qZ#uUXhI5Q;{b6m@@X*VauOpwm;M4Uu)3* >zA5r%m*2EUJ3!jqS2%&{)LhpoXDAKziL3%X-r3%Cj3Q8)W8bA>dFrf)57(g_3sv@ES >ziXti|V8ObB72PUl_Iu9ve*eS8z_li<dFH-<>xZG?FfoLolC*Dc-jAHGUPgwj_DCNc >zH-&<*5nI6zqGZhC!xszj`a;(`g*NiBws(pi90#^r2M;k1ncTUn%PdyO*TJvi31VO( >zZ(r!W?(2}gulKr;e9o49ZeD)Lp?n@Rr$|gu66EW5lFP4<EAHf5Pl+p+#8qF!hZPI{ >z{AJ{@z14LJYLwpKP(!r=1?(tqt@r}l#^JflwE_bD(y^2B_2tgTPwh2{e6IVUax!Gd >z_Uw?6!!3=rVM1Z5H8s=*o3Hh95MJ2szk5grrO@l<1wZSlOr^{wd6~Z)Motc?xG_-w >z_^vaY)leNm>@LoToG>Z$g8Uv-Z}ieKJtgTF)(w#t3Z4><3>!Z5v_8Ar*pRh8&s)>i >zD>rw@*wRNg<0;|lpviV`ZNniI{#g7eg{u#wq-BY?jTJCCr0wRT4H{D3?xl8i$Ut?( >zdHV=y`*5Xip)Pyq-P9zoiLy!b0+y#b+si&gLEN>=@T`0xJy{c^P;$*%@3$ubH2fnx >zMms}lo;a*A$_(3G>`>{wSI65P<zrI3rW~U)WSy^jaL*9b@W9oVo(|W6Kh=m?#jp{Z >zp|nl@Mw_=$;t=v#UEyj_VbqYyGuI5q1lu;R8;6H)KnwLyh3me0BlQZ0TccD9y+%9= >zN5kBrMbfcbo;tCah5HLP?_rGB7OK>{O+bexF8(%6d}cQKJN;ek-LPS_PV1R3g_c`~ >z??eAgX%rdg6wTNaJ;?Kp^elQ<H1yEMdv;6Fqr45CI!`ulyW5)b<^uYuL)WHK)jh*s >z$tqoQ{i)Y_K=1mECi{Z-OgKET&%9f0lXLwDJo5D2Gj1LV;ECD{)jOUiqoaP|-p|%! >z5-^qTz8Z)3)0(WikMDXJ*h6V`(tY<?xOS_?EOTeu{P(Ooy%DX}mGE!I8&7WSGEXX~ >zel>Z*G3QqsBJ$Pkrs$(HSK;foMzk1&8ylIO&l)?jzG$M&^vmmef}p09YnN7D$JOg( >z?)-RsHtX$4J*$Nf<j%#ZZbIqhuU)g*(OoWK!=vWA4SmZz)8D-`!@azJOi9_r^74@b >zPn*pm4jvhgw4ABhT6wwfZGXz`Q#+QTKRVBL$6d)Ab07P;`(ylBFQe0imyZa;>r9Js >zU&RfiO<b^w_}rK^`zo+uqmYj<Zp!&QzEnX>nbSWK`W>jyZ)TdEI_6R*GB1njiA_Bc >zbh)#wHY6p}uta$;Y^iqB<ycw?*kxS5Hop1En&Dx-U8Zrpn>$%@*kxhWxGZt8z=-Ah >z9pAz>vHQ7P;a#>W<S6gwrPifHJGV7hD#V#I8JlO&%H8Uoq_Fjk3tEp-lQUnIMf_c^ >zwz(mvQb8KQMpX2AxmA4NlFhGJ_TP2+*Yf;yu(pEZZ0s(y)02#T^!n%d?^{?<<{dV9 >zsbkseQi|~tDSr9-Tr20@P57y!zr|mA>M5`B=dOO4xw4hz_w2pFF}Kaa`|kfmN<HLk >zl=+^D<@H`eA;0KYZ@AfctPk4xE7n&z$U)gpE$;tMlm32Pn!vnDt=2yr(pO~<abC1H >zZEx%2XZNh8HtiB`7nZvY>#X%p+CNC_zniz9({aRs$xEqnel*u!W5^`GEH&5CG(HmY >zNnph?)PJ&d)F!ygh@W%)Z5P`mEigrC?>}On8GH?|g{P(7wNw-RXqi@S)e^gO#N;om >zqk3c7+tgAA?+hXOPXqi_xy}B!`lVjhw}sX2Rm&2Vp}(17RrW9P%~pq+pJ|P$e*=jX >z5q8Ik4c4dUS}Wu0mWh=Cmo<&}fmxZ-Q4?>{XO78*z!bJ)hgra4!1X7_$L#cur`0Dc >zE~oN|RX<;r!i~oTBJvFW#|f%}W=oAnnpjX_R|Yd^P*%UwQlVvCF!EI^KHsKBZ6Uw? >zc#;#WwJxrsm|kP#p1&pp0u`49Y+Hp=eQs1%Y1<Ln1+lOyZ=qgVy1s#IgfAKCWDmri >zK2GG7g#|5@m@QK0Xgs5ixs(dWO^ekb?$)pBsy8}uYumSPV~w-!xX76GXeq?;O5DA@ >zkNQu7b29u~=V3?oB3?LKp>9Z&X3ugRyN!sdoca;Rzx0Z<5axC%IpKfn{TqD@K3}+a >z{f`yh2%o54hh;h$_F%)QjZ62imu^Q@1)Z5seB-_k^8aF_?-QY}eUm+Ved>MDkRK(_ >z$E0d^<eFt!%HS1U8^#@NKkY{7HItBY>b1p`?-w3l`-hWPc+~U-P)WW{J8whVm@#ay >z)<fY%7Sga+U^mT-mCH9Krf4kH`|4bmvGppbkf>E36QEk}ucMEt7W)|-<TLDcw`kPn >zdzpO3mTpQULX84_OeREJ``sxT46+|Sg~HT6o1%P(>`Uw@uBE(OggWDW^m-_z(GR7F >zlXG6^Poy%}#9>F*<sqYF+fx6?RIMv>lg0?;%J{ED<tFTHn_aZY$nz;WBg-T3k#L@I >zAyF+#{1R?QVF_Om(Kh)b>%LEwXn=(1L*w4Kjw#;OkXCdYY-C-Ea;0A*4H+8i?P}4> >z({H3HpU59o>ErW!DhQ|qv9~5-n&)($hPveH&Dx3OY849L!dNe(ohxey*0mOF9_)!> >z#}qpX)dI1tAJ%ZO<#{v?IUN`u(Qd)=G$X0d0-hJ7YKo)!EJdY#8GO%9ljFqRgXH?Y >zq~hNO1_syE)Qz?oJHHL0_@^khIT)Eo{e+iXv#UEPcm;n{yfNwX%&{%7|J&*BNjZME >zFwJ3$ZAsR5xfAm*({zCzbqKp(`2o-0`kpgvPv3*4dAN_8lI{Kd3tzN;K1=sl)0|?c >ze-*%!GJMWq?MpYYEN2Qh{&%LP5AW4)Gq8Fa6mfZ`?z%&VeRrm6?mSPoLI@$odYf*h >zlqQVo<J$@EfCr0*CYJwAIp0N|**|NFN;#8MBp*8#9NoXx@(rG~?M#A799um^2rC^Q >z)7DZh+om&OT|)M?npi1yJS)T`;e9bRB)EOgqUtf~b8Yo%Kv*E+hr~YcM<QNS+eKxc >zd~d_O)uqlMi|S2;_j-@8C61o`kkHuCw9y!r>24b8fawTPLD)3Y1jIdy-)iloC^~%< >zsy>GW1Rb_5bBTS46=x3P&4E0vP76*L>uYj4y}g!8Q@J!Zj9=ilSUjZRO7Pyec@f9p >zh)_Oza1LoKVml=+YHlR#GGgwi*nCwA+c@XD<vXcFqm773pYt)nRF{w@sqj7c(aS&< >zIKWLG6)?vr+c#B0!gr`fiN|crcklv!OV^YR!^ZG+J6Rz*21<@(FV#m;9O4H7n()(G >z*T1*Kp-|{y#2do;%gU3scVfMky;PgOmxev`8U#7Xw6|ZAKs?C9Dm^le{cl&y0WplA >zzC$~>uw=wBWo&Wxib0ASbR~E3rt`vz+Wy~5(V(C3BvV#(^|O))%S*SzfM?0zl@hne >zpA$`{+`3C2UfE);)Jp3|O>rxw4l${Ba}Mrmj3K>odEtEjz^7ftpXHW~t}>>A$iOZ5 >zd^tcR6JsSf-)`HTx#@t`!xrO#uJGq2Hlq32q0TR7vy0w4t9m^~^>`sVupfvo1#{b0 >zhjnVMeMs|g1<iC^80h^2&e?Tf5WIGMRMlU`@~TJ~t{xvV$)%T(AHK(5>Krvxx8)|D >zCn|N<kC_;UBM<x)Kv@}n>-46}zFX2Dr^I81dexPVzXhlP*i8arx-99cP-SHNGipJ^ >zhJ%P&XT&3#zbI@o9U|)1>aZ@tYiUa%4OPqY#oxqoEw@UQJ;dIo%;^d@ofNfF(-Gs8 >z-cqt55k<@Q*>4|S7GSy^!{Yf8CuD%O(5f1cKlJf{2!5oFrjT^-t*-YJ@6MH5ExVh& >z%nt4-^*G<6QA(e&b&@`4Ab=Mom<g(KpA;W_>%=>P@?U|HcNcbR4&oD4*(rslPgBcU >zR8J=2g7sT+i7GX6wQE@f7?-HlAptQhpve*_DO2gX1QAWs&Z4O~2~l=Z<bDDqMWC@D >zRO_HZQwYe{R3#h@ztamye1BTbMN>bhWD(T9TXTM6WT3+`)H#*av=yy?R`m0f=TCpm >zCF1m@TJyzUav8h5^E4I(UpLu&i$3=)+2(ti4XRA~{pvsJ`x!q9l~&n@SDAu_8XG0= >zf3VSS)tqQ%HzmlPJY1g*u7!YE9Q+qT{C)G>?|c7XX7c{b|AShv`TK5s!v)ElvGng} >z8|>=+wRkx>kB@NJl$<g}zN8zfC6hOxD_F=B-VhW|G8NYe4NZ+f0hCi*3FwsEhMHn< >z5-Bo;4q3}4soWz#_mLobrBD_fRxX3p%04dUVtb@&GlZ828t}{Cwp^;dOf71VYWa3p >zGNl^&!l*I{rdg_?M?+j7U|neHT2hPxQH4uTOBSNbB=}(h1|bA_OO;+zRhns_;9~tg >z0b>7K=<-K+yZ~e_!BuQU?xm3+G?cqgX@R;eg`jOL#nni)5K_p(61vRm*RbGCmH;wL >z&`zN#za}8}7u)p_RT?B(p9Ppt5=BVQNHYNzOi*+ez*>mPq|cx_>1?hLbs89lOHc|l >z9W5aiLIdd)Crt>T-#aum6Cq_Z&7L7v9|1N)P#>07XA#xvB#5eFg*AIAu8gX<iHgjn >zX}u;W9;B|SzEz$OV&4f=%V-$GF6?!oCXR@)G^o2yfW9W+?+M`ZRNO%+>KFlA$DrBK >z)T$(^@pkZNp^g&`2K%7YLV&sx(VqzF69#CEkewm{2h-H<t*FjSd(GKmpDF8&rRtp| >z;y>9UA+&Y>uB=nsNjN-6Fj)b46R}#Ki3WXm<34>GJA?Io1|B=RMq88?iv`INEpsoU >zxX+O0V#9KwieasBj-B?*R+9sLniq&F&7P(SH%-Ij&5qWXHQ~$?Jk7g4qfkre8Htj3 >z#$sq^(9J%}2r0OXru#!=^}^2jPl@$MoXxiyn?E?x8hF=g${mt&gzb{R_7dxe<q}3; >zXlG+@zrNr8ki^~x*s%iB-!BkKgkxMkEK$X2Tdh+nQO84y>?5k}6sl?s6;2SfFw%#Q >zs91NJ@~}|(wM02uir1ql8w=6iR7GZ*Qw;H^HxUz0#RT4Dn@iR7q~Q3iN>v2y8NnXZ >zOXxfSn@iP%(2#vp)McU2oCq#{jayuSf8LI+lXuEJr#V5;XrXC%3lYge3|F9*MnFaj >zH6{dju2eIH2I~{3xeI}xtHY(CH-FN;N5kb3z;y(iIq?TZs-iD!+DQPV4f+BDdH11* >za&3rU0<vYu;Iss!M*v4tA#0Z<kTL=6Bvl(R)RK~^mMg@y2(<RoRQ#n{xuz=WG^{sc >zeXB%EU8=DlkxwC{Hy3C99ke?~(`y;B@|NP`rD~4|;9M#QK~%*F59AWC#x#(-5S}|o >z!rEdlNWe@f_V*5qzeFwTjpm{NhFiwD3t|3pK}Wx;vRgHp9fCDz!Dqe(_wU|#<?F@( >z&yYhjr~6wqW4D1He$}3H2u-Fc_ED8;1{2DuC=@pA+mWz84yfy16!<qK)E<n(E~KiO >z)AzCPJmO}Pfz2gUwKPwN^K67yROA++N{Cui)HlR+qOQI)Ds@lv`^o4XQ85LxF`=QR >zr>P*`Y;3h7cy04wY@=FyKP`TQpmhFg{7I_TL88j#ZwVuN5=R7y_Z^cS4?yRm)+ABM >zZ)cNN9Kl(|TmF1Qrx2*n3sj{G`<%RJ2?RV&N;BA-V(~r2es5~6gT^K)<OBWJj706S >zP~)=%)*wLWF@kPLbR(q7?+Az<0kVS%52oSv0wsm?$tsDu#8TB<h(yp-^@T`l;Sm=i >zyrFns$Uhdw($h0T!e3Oi3)GwQOPDe`E?PKylknZ2id#p-n|EWaiAoOJl}<~vAw$LN >zJxW#b&gmvtASjt8AEquvY!)ad6V<;<<n1KLO*9RD%o;|hl26}tU!s*J9G1OS`A$Wx >zH4`vpH1+5XIJ5YxIZbsj9p^q|=|NQWrWIk&slFDdxOgdSp{af*Xx<kfFH2C52+E22 >zV0VfCUI}RDpiK{<2J*wAhl;`oTOc&(-u~ep3Ea&Zd`~blLB(Q-26i-rzYzDHs(y1g >z?4$tRAwZsALe&f#mlMCu2-LEE?A^6*pSEz{A?ZHWzWnkZ`L#cgbw98TKMGp+?LYHl >z|2FtOuT=cK#r&c5*dBpWys&W03^}#W@X<xY#9)!K9q#46pm#qGe%W{EizN03L6iRl >zmE~ESCsglz4UCN#+N%tMd}ifsW`PU>1ShWuSRQ0{fS4VIH;c@_8K1AVmb|LMlqkCl >zRlOVJ?uacZm@8q#^1etw6V^&q<kG{`(%Tj)jjQ9I&tg0C)!q>xz4??o1k6Nn(seS{ >ziHHam;{F+|cp+CgTVEMARQXu0D#8YZ^D;R_MN_+#nk6ut5N=FU-`R36D+OUb*wRDA >z{1Rwnh*0iQC4^9kD^by-sT%IdiI*zt1M5zLji;edCMYgZ7a`TCqN(pEYKy)q@29~H >zrw%?%+0sK)-YfUrj({=U_+UbkrAWm1)71YGP=Xfan(Y{CAud=dJ1BQ^awk+zs&bXA >ziV@n_5ulMSB_%0nJsG%60NqKo)uZ9ua`!dmA%DrGuFVtF)3yR@Mk86C7eI8_B~(WU >z(OCk-X}OIl1Z<iR$D}Hai_p;m_=Ul876EzQ3bl!#Q)8v{%X9YncGX`5^lJgig$hoQ >zA(N#@b@>{?DV!cnDdR2rrUY^RJk0Gaa<8<1-B5BZ0SzI7a6~0*q596Llwqo}IuQd~ >z6sYVMYX1_lT2u`iTHZ@qE)Er}zufBK(iRZ!5u()|)zH4)34f2+ahT@VBfpUra>_mj >zxBnOBV7&e>YG(vdwL+`wXhT=ieibbmRzK(T85h-_%Nl!$YUf=}=YBb(LOgpb-t^hx >z*$4Z(hwgUUo>OhKaa^A7xk5fS)QkRg8M8*Q5akt%zN~<;3B8)GI34XiqZ54|MAT-v >z{%&*OO+o*^)N;QQ=g$nD57(}_DN&BqKD1Bn!k+bN8CSaOmrz<>7Ym+VWF&}h45r+q >z3f@o=4y{nRf0SCJm<9=a^L7jd_`uJ^qzS6I0!70Wl(!H*n5mN0fyPK{76obzL`{Dp >z(pZT7F41^LfbLJn{VlHDNYkFDs?~X&D;KKah}dW%*1IhDpAO7?@lKdNI$of@m%$Aa >z1T_=Tp9jTDlDh~g>Mud#vJhX>j;{f(oOYE-gle_nT4;FlkEmp-y`m6XMng4cDkEq} >z6e)d|M0t}8v6X~-xLUuqbG;_+nsU5U%Y}xaztU=!sH%TNGO6%`1X%G~V1I(!DS@lg >zR53L8Fah^94ay}9K!q?SO*M;Vb-&o8R-)pzB2*}AuN`z$plN)^PKMDAl?l+p61W0U >z=aWFxO3-ogsxTMQ^@(b^o_U*Tn!|hWZu#na32ncqTIU<@?D>3Wq;PVdaPq#JY900b >zpxVrfMBJ;!dmkHbd~3Wv^7j56!31Q3ChCtGu4r0&gA-%@O!Wb@>GK)eqzBH=A9y7_ >z%#*rm8CpecfU~5K<RUHapQx0<M>~=pyIy;Is7MKjWk(AUW!K;>a!<~9K2h{yH0jPq >zc+GeHL7&|KU+XJ+dgag4k)mgJ{ycl|M|Hma`HMdqi`Sqv0+n|g;C58VO)C8J^9R6- >z?qRvf0UMQhG#mN%$n#Vk7h0b6kd&CbXm$`=)iNP}4zgdMsAH?#EYxnHA_l*zT|JLY >z7QB(LzW(?G9qvGu5wKN6<W4W91r6KThB_!$8X*CHmwWx;Q*@mfKJuq3PKxj*;7<!5 >zU#WXy;cWHg9K43Xs1-o4t;(BesPR7JPC-3(ez&m{hHBT&8c_O7(C%>k+(Sg|6`&Sv >zl{=^~rr=TbPNn5nSULR%o$0sBLgV{S&9u?Ft<O#zeY>$#tJQk!w!_=aqTMf;erKZ0 >z<68rcuVwk2P&S(pq;4xSe7p0_%xQbu3Ac%(rU50cMGK8_yE^Z;1;$(`oFlbuI+HSj >z+mjJ_I<(p)`{2NpZw9lcQdX{qB4*#-Kc07gucP_qj|m;dwpwjZc4q`0HYne}=iS%0 >zlNEZp#@m9wo=rGnmg9Xj-l1!%+}Y~av(wWC_l~YRRJF&f?{jcZa<w_y{KDzU!z#|v >zqjR-pVQq;QKeHzsE#pLyrKc-kPTf;=F-=+nSp)5JeOrz-=o}a@398(%O{-n&fdS>1 >zPWj)j1$MsDYGUbiH3ZQ7zu;1&H*i@Uh{^`;%2N8d(h^#!d7vlC*^n>rVk0zN*rv+= >zWlg7@rE9-&cP)vPk((WCQ3ErY)<cFWp-$2^l`wbtZ?`CZx<?;cjHxcEMrMaZ%|>}N >z_C>{17th{`-PUyUQM|nvd@OPI6V78z{<ovIQKefcfwre2s{;w)A4In-u3X(QqJ5~5 >z;%`}Sl{BX2T*wdBhyip<@-*nd9qXjC)qc1gZuX(;LJMmq?CzY!@zT>PY;W6-T&=mS >z7x7^w!0;(*W>jCu7KNBqx7kf91sN)jL~M-gy{U5l?93<z_FdUW<?Z%eckS<jRD5*W >zRUh1in|+`JIBb}-y`@G&P2W^8`5^K#nLR%<W{~GrJ*p9>vofslVz;fINmnD~mi0mP >z+FKf1)(rdZ(knmo-XWgc`gz>sjKj<*f@W#IiMakqwGVv9hne7Y32nXpN*ur-MJ8Rv >zZnQ|>tsJ771ll<QQh8<@O3MBq^F|mw+kDqJN_Axz-}-EGATFW8ZWH<1)?Fbc9JiWD >zyHl39@x=6uO97<rtE9U+EYug|DJ57?TXmrM?Y3G<a8Ucv*ep%&V=;!f*Y(?)kH2on >zxqhjvad-0O@uuqK+ow(zBZ51H{}VIi=gL{P*Y)(VJErMC%=EscPnJ%r&Vx|6*;mRf >z`*Sy4vb!(7j=yVh?XT7c(U{(e?dE2a(;M|7JT0sS?tGmITz4tsN|3<<^TaUzWkWd- >zI9>Z+wKVDXqRpU!%68JQiRCkyn$IZ7-}E9X#rEdX@13Ey)|CLLYe3tMF|^saX8>J# >zi}Z!4sbd$Sb<C}1+_?3t?YPb%htC1n6X)%UFmWGt1Yk|J3O6Gd4`n{u2UNcVnvO)) >z+%)Ok-3L3kt76B5_O;1A-lo6|h#&u%rLl5}<MJ7J)SS0+4+UW#nyOL6Q|z$bQECsc >zjtS&Z(+*0x+is!KsM!cIp2W)@T~xo@>4!6)E{}RCMZ3a$h%HkkPK`pegO0aeaCoW5 >z))b9Xz(mR)SC;%+A8j)}>=e&udxoT-{0d@>tG+Vz3W?afWp7RM-io!{QGMLG{G0fU >zJ!KI`wu29debpY-@-|fnF~{(}L?HL-2?SV=@*bnil}r6li|7ORVIoSMgWWBHZHt9m >z+Y3y{8l~7S*hsRLxHLv*5i<~|c=6E`*TIr`U<b^bXlGkO%zuSz2fERV6v*4~`}^k} >z=>50~y&k|jT=?4O1>xbX>rOA_4}QMltL42?7G~&uh_?J<O}!TmpA{5eB2yJK<_4ku >zBBaV$3D_o_Yi6jA)H^$D`JFV3YbJ4e$H(l`dO`RJ8F~Y3gwVks(fv+WYK1Kt^H$kG >zgz(ak-TJESWG*C)hK_0UMx7t`vtfo;9OjMLe~v~teqW=43+M(quL1*H7sC%1R>Yv? >z%*M$tg|L!DAAOA{;{pCVYmPp<quM7bjosc?dlL1^bPZcVY_#h<v;CDts`IsX&uJQ0 >z@_kKil1oetTkz+|BgPrE991_V_E`N04q{v8QAkB*uZ|EGi#PG3>{Yu=BaD-6%g*f{ >zVhMSpxE3tO9GD#K2=vBYz?K@kq$2l?j}W|9N-aUBU5a47CNtu)XhUXrQy?VIxSAJH >z0R#b8M}dh{Dd8^-e}y+{xIerkFtJ4;0Y8afAn`mOrr>i{{cQBAIRu^WssrOUEw4{; >zf<NdZw~)5$>g|AaPPSm2dESJUD9#24ebidvRW@(GGSBHD4SQ+XS2do_4R|QUo&bDH >zocwsdF%4amKcwxn!d2f&h1Z})^m3=!(kLk;tP{9DreXI#NL3zp`WYy!@CcCvv!qpT >zO@$q^L06^dqWTdHV4xmbm;$e?_fcw)@isc7plx`J8+G#!PxS?yjvO$L9+;SQb|7Ng >zSAC$D`CJb}h3;#?{*Ka@(c<Vum0h}iN&hrFzV`jwIfm|bn$n56v3L{g$>OtHBa|yP >z>6}ujpS4WifQ+B6d363-y<&#N6!`J*ccuPrtCz<8PZ$0=iAStH5vmUG0xD82-7Wg0 >z(c=32-StKMmGMt|uV`~LfI9t>)!IJ=@^L)pvlp-ZQ#pcg@_b>>CMvDY+8p|Wq{^$z >z4Z{8oG2c%~paJ>AYS(2JY15@fmct_ib=%TVluC!o0J_z5EGlA0$%fw&<jH*S<ffr# >zjvyiG)T*EH&gruCTP4U#fm8b5)k;DE+F{%B2x-{1V*8{Sk9uv)c>gTV71g5T+Bu|L >zh2<J-mEYQ(KdL)H0spw5&n}u9Aq3l2#YVQMoXhaDzr0fJl}N*Hiybjb7QUhU{_l0d >zO&fRR$}J*O<$Xmy_%bYKYodYX@%&*6rY%pajjGf|RbKs2Q06AMjCOwJcf4l0f^e3A >z?w#`^exE9(T<t~HX87B!1y7f42Ab;AWPd|;0oNnsgNn!avJP&JX?&IlHj4#(2@1o+ >zmj(;!95H6f7=}76;BvBGWAw^RpR+>k72ZuVTrUGTDO6{zdaD}SmOBp6P&U83*Tvgb >zgi#8WHZG4`)llXV+$0LFl7Vv()n#t56LU8o<@X(X{vkc!!2E2LpZ<)9vpw$sYT>WH >z_|5K8k0bv+tIY7#Qy9wKH<GaM^}_n=-|preI;pP%wY)H-+(YNO>MZ&<ubN=>%F;93 >zRCP>3uAUTCRBzEo@WOshJpa_qL+QWXwXAUWDfLT|B=L>g59cXPGNeUY_ib?ce%t1Q >zC7ofGs!<+evk&-ddlDY+*`l#G^%w}yF+KQuvmfux)7ZBwX5T3~Oq(x%AO?02`X5^= >zq~`NZ<qHS%tA4=vCIv^*3u5*_?Xj>fIvgNEyGfvRA_XrQ>ID{aO9WfOZVAJp-cZm( >zB)H`s)O|j(t5_vqN+E_02!pUC8S2;+^5hh>NrnV4wi6=s`V}~bgiN9a3bBfnBG_TT >z76e>RKFCrHbZpT099<r84Y!C;hrUB!?}V<ZK%(ey8g`@O6zVR?D~ArdEkdVm2A`rs >zW2Rh}NC=l7s3pGEEx?DGf|t@2YDu<#9$<P!&@j5Zl^}}sSfzx5D4YcW)?p=m4Rw)v >z03VLLD?&}}h2IdN&tVZ9Kq#bR09-Y4FNWF+J>dikkU^@aK&7%c|7m3Rf0h}{OOy;4 >zSD{$-jh<oVk3m=H=r<J16B5dc4n9DE29Z2UNYM3s^hpYMr#L3q#NrYKkXX?^D_J`z >z3Kk>?P{FdQ2a`-$4jC+RC(CM(^@fff!p4@6*nau!AThg=f|-`%NW3`FJkDVeQZE9T >zoDZX#a<^u1Gdj83$>>~INs<UvfQPZ@iu+&%`^QT%B_+jTBr}jVO+sOh@Mh_#S6GCP >zNa3&;UO*^4l2KZpkL;2`-eZxupG(aK<Ietow2iODZ2TX~v_MiOg5?~aLOz{B2<4)m >z@-g#Eu{Y*`@2m)tK@Q76y3X*4@rrve!2YUyxC(tVr#L4@&hjx!l1hnbRRE>xO?}mS >zG3p~37Kepg#2)@ahJVXH{Iip3iARr3p}J+Umt+b?gS7h;csB*Ug96i0fgPB_T){%^ >zB^%6S-nWYhTVoMEBme|NUz6-TjD`2g&`;=SnLSAJ2q<iDKZhB=hk|fWh1dep7Z(1H >zEwoxjUr$je5TTc_iYF<USrIH?YUe(FYAYa;PN6X86(dM+n<MZObhHsxL01NvmBFLQ >z&~`wu<fCTk=t^a)V^eFWOcMM#3AKbpcs^7xTLGz16e`v$W=>(2=-|;uFdsg0wg!El >z4mOg3AIrco{B&13>>>r4AVO{AgF<D{Z+uJ)N#UR4a38*66xED)0q!RPl~Q1wDWnx2 >z@fM3d%13RZgCb-gi=C(;8R{g!KgtjTv%nP~(@DtH^N0unJ)90YMM6ze5T!E2mMPH8 >zPsM9=<uf9MJu>xU$B&<Qa{Q!bLu*{aEqX)Or3NoPya(Ra8;9tRJ25Llw(}8}Z=bjx >zhe{_lj=nYC6Am5kYMgxAIAzv!&a>%J9L7e_^mwZ2g=X_oT(cj&`7J=1^5Gwy6=Y^7 >zzXJZ%f0n7H-WJJ8Idee;J_f1<hhG+K#42WsFaTt#nk57t$#mWc56iXa2e*Wh8qM}& >z;-*@FaI&pS>oF049k)8qBQ2&{J+#_<;@eKq+k!5)^-9_(@sNmlXcx8pXmNY|M0@ft >zuzw`NOVDtf+L3V?o^|@TY}kuI@Yx`+63V$3>;T`Hqc4Aj?h#RL6H?OoV8mnSkPLlE >z1V7A23_gIc0LYdC8<C-J$>22G784QNf{gT$Bp;<{Ytum=ZDC#{#9<PIlmIRu^`(oN >z^GKi^HB{?hwwoq$fUdY63reRTIs6Uj6o|o;;vqhAjE{UQLhd20fwCzc|Lg`A$>O&0 >zQQah4Gfj9CANV5Vo4txbB<?F)bUMH@Q(%C7Tq#4om!XeIx?)6-S`ny(+F?P0l}-s4 >zzbPh>l%9)HS%b|#kHT92LsOAsB-n>(7@(&{QIId_2wQ9c8W~Fbf*g_Us3xJ?W!5XT >zupj_dlqs5#;5k@D4U%G*2vIr(J}y$Et)foQ!)qz%!z5HD+@@3n{@nom`wK320Isl6 >z1e*p!Pl%9DMKS*(rE<!u+IC$c2#4RR{V)2qtQUF(Y{G{dX7}Y4_eBZ%EZ_H$EczW> >zVNS>`&QFo9Py27l`n_Dw56}T04;rYwrm*qp`HOt?CBi_YMP)yIAnwXQk~U<M+Jze; >zcmm}DVEGkI!7^PHw!gnXx45|bisIh#i~FxA6k1$~lEHRi#jFHz$pKL574a1kiX->` >z{8BH$r4xgfnt?MQ2HRU*5zh-QyZqSQ?W!0`h}+_M#a;%xc;X6xm)-^Pb_t*z*gXt_ >zAN`D-WEy7j0A3_h45yTw5af1GA>Z$XGNyQ?ShRc$IEDlj^3m-QZT)!g^qbyxI-GF? >zcGt6^l@B&>$aWOT5wVIkV)#WFoI&V*@&z0~joQOk(3UfAr$E!Os3i*W&v&Q~9o#zr >zd_qC1=@6%9h})tyh>+fpiB)8g;N^e|OafOQfIcL9JzKhPNCZ~qLo4Z53lb5`-N+!B >z`JQ&WYESAuPg=G5rUDt1C{x&~1~#H2gmg%lDEBBIagKjC2Mehsp({zSbE0aGMCd+3 >z(@}yhQ7$oaD)#Ze(9If=Nu=QQ6w4wR7*I8Bv5Na-ps838QKZ;U-7iy943fcYU*?_U >zpFSN_5mh*LgFmJ^IhKsN$sycidER8mpzrE#X6qnxbf9$0Tiu?w6sK+TbplIds2y_A >zhn_(hZsVLn4)5&viNWyz3gm>`ZC%NUBinD+pS|6f2s<RZEp(gslQGfCpRgtP^`P$b >zg{<946Q=ea1z-L!agwwlX(DOcmz&j;$y<$+yF`<B6UTE%U?V=_;r6>l#dqhQwb8Kf >zSvu9@DHs4t0nw5n0>7(B{pj{k<_7xw4CaVcG*E@C>L}XKq2XBIZ6nA)q^KFaA&&xp >zya;&H>8&nfQHhUfGWZ@D=oAHY3)@*r2UnAhgi}Bp=<^=Db!YMwo$1hSI>NvK+0Td2 >z=->!y|4AzS76}?ff#VXuKWAXR4^Vq35ZwY~KNjY}m-nM6T2KQ&ViDz(ZI|e}UNS{j >z!DAv-=c1euAd;V>KsNr1%BDaoMWAX*!4*C{s@T1H&_6*0ikJeolh#n*3sKG@Xn_c1 >zk%(&NQ>L-dU391h-TIUar5b_QCnzZ)!J6dU+c@{{kRFaX8SRq6wqWG}Wj%CC@g+K_ >ztX7dhM*vi1Ege=UPRyYI>qtJE56i(q0b+OuVbMwiZ<>NMT}_UogRe32wum4>d<8$r >zzKeA5hABw92t=d6TRj6?Wr#B*Wc8E+bV_l64=WIXhm%lO05lzoXhzSsgw8+QHQ#k@ >zzFQY{t_bPOR}7vuDxyEVbnWSk3gV0mb&H^Rl$tyC9C7PU*~Hyv_t4L0LZ6pVpU)K` >z=AYl+AbCEiwXl@5@a7Nn?FQ(Fj|<Dk;4!4U+QBvdIQom98&E@YFV=J=5q^>=s$>Tr >zknB9xg~OB%f+_Y=wdC5kV(B4))MQY)g(Od~UVPbvJV{+V#9y>nSWL$v_lY33&GO7u >z$a;5_%U?ynHTA4A_E~`W9ef$22MHT|xj_bL6@gMoucH2H_sd`j3$M0Z2ggw0Ksh_D >z>b2Zu@LV`3mFn?kPSKB!c!EXR^5sLAw>Fk}Em1)0NQ$1$U`H$%0D7eo>r%tOZW87( >z7COL3=7{7kQcwrz3Q8pC9csueg7#59*l`Md6kDN9LYwS_)bbHNbOivV*5xY(<zfeC >zKqfM%BVF;tL1dIY^f3t>L0^L(mnk;7K@#{-cnpYIC5oEj1;s)v2KA$4icOx9>H<&_ >zUtuE_wg(HXwFl*4QRfEzYWY5y6xbCkVgm`*FO&D8AkeI|!&A5>5&B{g`jreabRlk* >z4wJ2bhL8oyeE9%A8~|vY^xy~h@+SNILocF_lA!nb5T`51o4XY`&z90<@P3kFHx?tM >zqru-nW$GwblEONEWjRUFWU79I4;Mzl6Q)2u6i~A+QX%ZW4H?3wd!X1$Dw8>q0M~j& >z?a+$mItAueM2`owANyI?^E05CnxBMNu0#E&nXZF4<b5HZ`{FSL(iH*!aX?;&T72`q >z2A*5{`ef>B*gBAe{Oy1o_69`lNq_sMI&&fSym)ikSXWro!QJMLX`9a)ByG0*8IiuJ >z$J=iKbwF+TZkv0~j4ELL-4evEJJ{H8q09SNz_zmO@0_xu2X^Is`k?us4babRTDEIG >z%m`tl0_=>=d^Nt;x<NA;tZi>N-<xyvwcEyB#t(WnX6BC0^>sZs9@d|B^_Tjm`GNSb >z<i?)^t)nHzSJdy4m0w4TLd-34GVNaaR&1_pb~}DFBdF47U)7}P=Qs1csRyDTuGXFk >zY1(q<@7d<+_Q?jDu)Vq`YPUv~S?7E{($IfqGhgFSJb0qF<#Bs(D<<i9Z`<?*>VWmO >z<CHfO&1?RlmyecxGaIRmEV>?I@i;w9h}SgV9;dp^m+y3<#xcPmeX~f<%lg$X+*wM; >z<}%aPGS_71v^qP5xR<OA?#B(vH_ybSHKhH@*XJ1M!HxOhJD+T;bBex{b|N7yf9vri >z1-N0U`@tt$d4|`?t>u6!YFLBo$k(rmee~AoSm?|uv5fp~F15yG(KLk#j>o^`yV}9q >z>Vm3x!g{;-Ia+1f_hn&O?50>LZ$rb|*Hr;dX2kNChU4v3s;`$@%BbqjsU`a6w*@sx >zo5SrZ{H&iC){zh9TlU?~a&Ci9IxJ1vPx%_$J@3Md>ri@>$O?6u-#!w0F?|0OL!P>V >zW{-GnsV1T4(wmkOJ(u72J^iHi&!Eb=hMnJ+TlpGJorH3~4j7HM`ua>>4ecOIU*#`T >zb8D^K{rZ+c#ak4<7nFE}-muXoWU+e7U(+!kte@fZ=+^x|Q~3t*g)2Op8Nsx_&YqXk >z0R)a=UzHm_vgWo1!pv~O?95fWJ62bI+x;(R`i1R$UGU(ZUX^(3eRo$g`Ke&1<3?3_ >zo9bz*w;^zS-nyORXG<MjN{wo%!+8CwxIVJ}4J(%??S~07b4IoPIJ4Bp-V5ZG>fqCz >z!YV`e<IXkfa^tp@5&h#@%balu`Y59%p0py7c{{DrHU7!VdLK+&`_YKx()Q{#gIu`Z >zLg+kxsg|;^(X8ATb9;%uV`JQ_y722fgQK|(W~qmRvyQ*Q^sL3UmIn3&8aBj!7q^z% >zWtE!Lx@%>=tV&PM+*TUYTwq-5WnExYYhb>-B%-wxv{Y@&dh)8w-T$YQXYqHrty;Gx >z_B21+`_jvgl!n-r3XA5zwsPf~&ekfMcf2%wh{2QAI*Lm{dwqKFw8df5zZpwqp2LCq >z<=$Cl9d(=ZfYH6vBQkr6FiJocJ@wN6^q6Uzn4;`KoiL8PX?F}b*TnWj+}+%|{wA<6 >z-2*v4RkruMmtjt3=z;i$$-VH?aXAPtQ$H>7Ye$iq*Y>UU+Vc-@I$a#lUsKze?W_EO >zyZ+kB-Mk#RL?R?cJW|<$%mXr~-|40Cql=h`de*Bt{v|(pkJ3qGlAHBPNkF6Zo-^6c >z->0m<GXLBff2rJCw`NEAi*H2L5sQVD{er7jr27R^wR+zgM6eH;=P)#x-s)e1`{(0I >zMeh#C|N9K;@pJnA!PN)r)*exKv6DoznB@c|oNYxsL53@Zd8;=&^46h*Q0I(M!hRV; >z*+GbPj2$(%o)&lrdX%g(JkgeqAiah{WM#&f(Yq<GOPkOvhW|(@m(DW%DpkEG9)$y) >z`JnA7s*Ldw1Ak?f3Xlg4n;ThYzEYNWehGUBKV~++qs$F3BCo8?jcT99ax+1#%9&FM >z#xpg&;a7#=UHCDeBM)gfx~M!*;A@w>qr~p2Q1ztgUG2+!j?Gn~dJ=EM%)GjUjM|2M >zYP!*2QB)FOO2T9V^Gfd>yyyxb1{phq`$gipxt&oyIp=4&srv3_Uwx&VIdAn(e6FA2 >zVm%`}fp|KcV~T3Q_>o66sz{swUww33{;2%|_Nw#Q7Tl%S02j=TQcEKusxo6lsfJ$y >zP_=45#s1bQJ4&C8+p1+RkLV}>AzHQ&-4x65%p1H9SCy)EXZRA5HSfed`dp_vYh+Ut >z2c|wss~>Yqvpe==Qv0O@UKBWHWnRs6OH9Ev&84lazoB_=N8Ojkw~6VlFA7RLC;OYD >z@Q2-hIztY1$P04trV|+8OsRv}no5<+rlt+h@|3UW{@4^VcdZ$BP>OaonH3a%dUIXw >zV*5G1S!hn#gLEr>)ph1ziouSO^;?O^f<PbrBlD0Bz2Pp((Ra$H_p?p6I-+CpeI2fA >znfKPrp3TT%#6NLy6T2^}?H;g5eu}*sah|4huxZr5E;x2^feIW`_8}$Vl45L+P%S-h >zSa}#*>Ud;PDJ*tG^*grIw~Yo-BM)n(@fGU+3bEVjmvwGpIcB3Y+)=`WU+Yh9;N&7M >zqJEgLGrVHG<)Z2-(@{*YT16nLMRN@AXUSY!8LQ(O;C94j+Rjs0x({g@*D}Tozhg@h >ze$yaf_1<Ru%`Dg7Lby%r$nkR|w#O*oVeq{46@a%4g+kPcPH)Vx2!V|vA|u9kn&_`^ >zqY{Cz>)ep)Wr4x>-9!X+<GSu-&vAQ{5R_CuW{z0lxsU3r9u~YYI!$MqYZz$u;{CMV >zQMl_K612)Qd<>Fza4p!hGiw`tReMCGJ|X%l*~?><5284BqeG|T$iA98Dd3ZBuhpM4 >zK3Ce0ElqOM2QOBpXonmv_aCK#HJ69f_F^G7xx6uJZf`~A_Eeqs^|#z1I|=NNmzySq >zsK98u+FO#B?w)ZIk!htTfU~34Y@iC0DaQTBr=P(c`!AtK@^>}9Nqpn_rr>_jCf~mI >zgk`+yFI>rARv7-{vQ2QqjO(hmMancJbk~06X2?KiP!h)~QVLJV810HnDvQ~@IJ<}U >z?QHh*BZ(y~%3sfps%^q@y#Jec`d{cfevKE~C~eN1QyA#3%*omH^yxLZi{itcxx2Oy >zpWli7VLbomQ~tT)g@ARV=Cba8&|eQgQ(>#-kiT62NvTSAps(8H-U@OEZEU~m2r+t! >zVRlvsGUNF<WL1~77Nw}>EPIX3V5>3`Th)$|{hgbKUU{^oV5{dw)#Im_{+6xSM{h^0 >zTYAefcQ0u$#=X%Elv4V`wG{Z;2``<!G8Vb81-C8G*S>j$X*)?otgoN3wVq}Yb{oQd >zUyN!s)5~)#Ti}`bH+AOeFjg>U(=uYdoF#8t8eiV%y2{j>D~6I8s-_HL2HSF+p@Rq9 >zG_H%d6P;1~Q;Vgy$_}7bnbGTxxG?R=9G|%pw){rGILi~)Mw)Zd#VjJ>WDuS$J;U0( >z%=W|o=URSRWz*-_WXY+Ze5Oc?ZCuY$bLM!GnYrc+>2YR$Y3~OyBQ8*J8v<Y&`+~?U >z9Wi6wDsxjO%d=B)@`2mEFK$yR*X#)!9{6mSP2KR=mD396JUMeMe`v$=r426>-KFL1 >z5YlyxwZQ8>RQES5_qVO???>D}F1i1s=&@qp@x|u`na9+^v*XF!kbHSxR>PsE7fc6l >z_yR24@(m|bP}&z2g%9$IXB9xIXX0ZAA%(@bSOyNJfH*%$%wTSt8?;;=R6+qgK?Y8T >ztr9Y%_M1(jd*P1^5&y4ZS^?5~#`c%<CjJHi_JH9tU1>Jp4Gf!|_14T}jb|uWy&U#h >zW!faNNs|n%WqEsFA3#sI`;<u;XT`ucA#+@xKyEmmof60*jVriqRP=q%Hh^({xw5Ep >z++@0LV;Qp@#-gnP>J|It6Ncs-!+2cb<82m-%+|rPd;=MV`JA8()|NGL$-o3RY>vBL >z%m9Qk-Fzmgo{5p`cmiOdWOlGACzs3$$KU8#1$nr#mGU{+WDelVnZTF^oj|gR0XTYF >zE0}KBat}Orhbh+?AW~u6*m?z}x169@Mhc!AP|ws9GrU&W8&(-U8QefTD`p&UMmeE# >zY?VOHM#1HjIgTT*Kc<suRu70~tnf*829NDo&oT<+`tZAq>lscwmPb98mVYJ{#wK54 >zhb*%*$m~t4Y&E$7w`JzPLuZI&mi98}EuI|>*rfnmxT>(NfC;3&>^;o}E0}&TuJaru >zEYc_L3X4)a=*44M;lYPM<2ixsR8x-U8hM<ZIL<8`=QWO(6>`fb$16XKA4c7-w!Dot >zWgkhrT~~O!zVUX$)!U8FZa4ofc9hhn!Z@aZ>=w6)HcOz#hyg^?2r+9DPvK$%!*D9N >zXLS7BS(ZEY4y}`wuE{;0c;`al9dY9wZ_ynBnZ0f9|Km)zvqutHI-RU&>SS>K<ah-) >zXjSpfXvp1{A@@O{c4m;7M#Trdp|e{<AG1T>E;FA@%0ImddiF4M;p<(3+@?t1u829% >zlJBNhlkC*2dv8J*0BY(sHDE$%Ce10dU1evEw~@zz89UQ-ndvjfvVYEsrVO}tvdvc6 >z+gG_s8C+T*o1D+_UyJ3W#d7^&Obm=gnL;J?UYzM2Qd&OdYYMvco^`A1MhJfb9msS< >zGR*>+SK^t5e9VtHCV{Ld`pLQG#*)5gXW~mT#T?I7hEX8PwjSJ4!3myg(1Nq{1TD@I >zhd-O|ZqDE)%JK8aT&E0X>?$WAw%;j(MKNXJc`U7ECZvmdBp$dmrhH;MZFov6SzIEF >zVJbIR$75N;*uG*;Y#`f$$1oXei<LccA#+m19Ns)TOw2KsC~tc<{@jh7yvnvPWx(qd >z|1IETiJ2O)OzR8=Zk%BNQ;_UuS&%tifh@>zPEI|z48e4p11XiV1C{}T`9YM=gYY#< >zgwvh~^3e#F=L)V-0|%e{k7BC((0ju}-=v5BMzu%qZ1;RN0C@&Av4gKY3`t^zcC!G> >zl+twEh^!EiqZk=A>r9=sqt6BuM?Je^pD;EX2M`7IoaAdvt(DLo%}38IL8*Sx+qOlg >zbD}fbqqE1NbN+yGqXc=OOnP_y5boSI^5fk}>_ixN@1B_aqcQsj9uJ;oMb14w_~&tP >zC5Q2c&D=0&Nr`ncC@ra+EA5^$gfZ>LL6ugVsy}ml-6w9#zzXJIBI4>o$K7BI-Bs3x >zP6c^5xG+IJp^52G&rY&X%r9m8#{xzp(=Cvb9SB7@b3!`V?iozd+A?c%AlE|7aEk?B >zlg?Sd`q5{uJLa=U%S_fP%V+tFi<lD~$WrsHjG<3!;5i}GslW`5$2bF-@z@u}$;x0` >z0K_z&vwa!V@|&%Xz2}AJ#N~4$J2`3fOe+}Md+xZQnDq+HS&vuTHNo04&L%H|M@biU >zbe4q4by*7T*ua>9^-LXpXBZyxQHRx~&8Cn!0oaBQI&8af#U$Dp?^UK5o?|%2a;{W_ >zB{I*IDfTCFVtH&`p0TL(bnMi*lx5IDJO|)1^~Z}XmzfUuvYc^6XcHUF7ushqYC=b% >zV60G6P-7Q6EcV&D43^G^O8|)NJN{fplJsKDN>P#nk|rrEIxaK@F1*TFcvHFXwtM0I >z-30(L{RjQRiy-ov6IpdKzJ$I26jSH?7pqM#wsgMG5x@9dwEpk6EpqBq1%EG4G}Sei >z8pEN&JE)-}5`D1&CRtGlB0a1n#kose0;OuX5gHg~5TCZ^tW^7+RQHqg3H7-hzRV+o >zz20=uVAG;e?&7)m*P;9r^9ze1Y`E3yMH^WPNj=rBW6FN-RB-GPnaolXvqE8P*Fdmy >zN9w?}CFhwXujNZIvQ*DcEcdC))_6|j9Ls22p}Z4x?Dk>Tac+tjn2$1oc#yU2%)Dg| >z{5IQz+7#c(u*i_S8941)4{BVSW82QvM2MNI`K%Mf)1`M<;maUrZm+&6GrW_#H5O#^ >zo=v4^W?8XKGZZjEoNzqHBcEl`$=p=W86DM8tzh}C0vjAoa3DK^B#Fgy55%)+_1rL1 >zu2n26j8d(4km=>w<iE^L5Oe*e-l*iuJA|;Q%S>Z&hkGYCy13IXuoeI`Pa?Qm#V4W# >z<Jv)t^?|JKX3TZ@OuGz4SO`N?%*@v2CeE>p=NRTdeO+9pJ<#kXmZZZTo}FYn18}#g >zeAzFiJDCf20WOc3gybXucJDa2s+;qxiyLFgWQkjyi^4g%CMDcuqZ7-7&gJsItcr!@ >zs=wSVYk}NMY-Wv9=8;Wczyxt9c<ab}d%WkZ*2+ZV!du7X|2R_s_-@(zc71+VTk^Y( >zgYP<<-<_^vpSkz0yBRcWD~ZEqdz!u9<e5E?_THXnF0RYIe6L+KL;l%J_Vw@CfQ<n# >z4F4|QcgP3dtYWJGerfZEiR&LG?=eG6x&Qg43ykT5?3ur*52HV7NM=k3s4@g=Lm+ql >z`bP?nP3Z(LEO1_6K1q96R?Cc!PZeJtWN<cdyz3QCUuPx7mZa1(HH!Hmc;*LbX-Gbs >zUk{mD=J*S43nq#&Jo)4V*1}s3Wv(ADX2tUjc$Ewb9@mpJm%PmA+0Tuv=LQ1zzc_1& >zu*x)sakC^d(PFPbYxY(=>#8M(Bxc#iGObLx@3mO^86cl?TojV!DL#X@W*CSS@!j0; >zjOy$Rh~2q9YCdOchJxlVrV<(4?c|e^&B6{o49ka{&O8gC*82k4_VtRHrJw`N%!F8O >z<TyJupSufI0toYnSaxVVQ@OZTJO8lR@}#3EI^Tk03Sek_bHhAV5}ARhXGY4tnghxw >zj7jo5<;p8o!ZTN%02>x2fN6)~OCkYk70=RDzmrcc$<N?=iW%v1%;`@|tf<TM<Y)66 >zpDk@TR{wm?UHwd2_a#6K>1YIG(_N$6zpUSv<9zCi#u}F3_V~-X<u4veU%g5^d;)g+ >ztz*VbZ3rm&n#SK9eDQ1fJw=13UpK9NrQBc#b}DSX!4i4ziAw+G&oi&#eT!Qwjuh`X >ze*9XJ2MeIU0V3NE&vrKD(rmt`hJD|*1)N^8H*+2PKi6~%D+d~t2mO&`%E{K>x9f$% >z?wEah_wCC+wr~H%eTC;ZIm@7f=Sp{y!3-N#7#Ym+DA||6{hPB|a(FeVdgu8d1<o?d >z5zk7>=Ni>BykkqKs|p>GqdpmIz;dUNOR`BXJw(BmwV7VAEUSD@9E_zl2PEK``ljsg >z3}*JDn>vK+5&74&=ZftmR|%5QZ9MKqF=z7{nWewViR<JfirEO$2gatHb+Md07}o*D >z*f@1>V{A!G2CMVBoQ)f^{5h)&Q<*I0_%E}R>8A_uB`)G-15<Euz1oMUlZL4m*e)^K >zeU6)L<T~yoZyjm#t2KXq370n0>G<9$G=9J|pw?sG|KaJr<C5Cr|A9M@4T9ocptu*# >zTp8dt_b4+hP}59JG)*%r_ttQxr3Q|&w8BxDSqbh@p;=j(ftihKg=XFAdh>Vg_xt<( >z{_`&$=fUxF&f#-j@8`>BJ~nyPw<hqdUHIfTP4`B7v(>g2vn$VQedDTB?dMnAD)nzB >z8(;l)<V79j@_{nXKrN3evG+<Ip09d4fBR6j=hlgDhn`ho4_Vj7ZeE_Q^%y;!;E6Nv >zx@@(};OR&IDE@U^yM*>H%azCH&F(fEH~1e8=a_mU?%B+DJZh)Ezit(Z)tjia++TnU >z?S1#Oi)3isxSbx*#_!NM^d%~zMr-a;;LU*73ye#_E%@9c#-+zU?zv*&a{8fN=to{P >z(cAOiknhGJ=P~F090*nDd{}Luz$>#&CQdZ_^j3WS7`!{7i2C$XerNUJ>B@lK0<2|` >zXpvNaCV0+Mh~>`7lWM{7^RsS1)^yH8ziHNO_uI^Xd@suvdDT7+zd%6*Urg|*KcJh= >z2l{&hS<`(9PoHXNZDGe1Zd%giLrX!ty8VnvxdLB`;O6jwQ~$~>U`}-<jcZ<6Sszu1 >z$ut|6_uuq)Q7I>yyAmHnC662I_v&_$ciF6*&^+l}>8upjhMh3Jlb7T~w2$(4!=G7X >zjwmNMuWwHoUTK{3FbVeRo-nxKyfLAbAGR?@IFsV%tj<oE8}&|HOqxOZr*x0NRDkw+ >zIhU>tH$vxTl_&97U-yJ;?AENiZeDohsIuW;&$Mm`;l;RtkQnHWwHh=V)BlV3ZCLBV >zn*W6H?k&bRz^IzLsru((r!+i*x?NS<8v{o4)A}mMm4a)q9-7)KOc$lSYYZMirmk{W >ziSA5zrs18(88s^0VmfKMfdbr#Pl*Apiie`Qopmo8^%P~Cs#%}ZNGR)>LRY3#jiL%2 >z{N43iam#*6sb!V!=Cw23UOM~dNyBmpVLf9C+#u|Xk>{o4!v7aIooqixEAiOA)NuIf >z<fRLYDUZud>7OQJ49|e=4zmk&1`fBLb+wCaKet*rbE)aH@~4h=bk5bQT?6pWuD+K8 >zRKt6DyuXysY-N;jtVXb7`k#q+<9i>w+9%w69(_0A_L~Cxqj%n4x-bDtF<1RM=s$ll >z@&3WJS6?6OS|l;J5Zyt>u(X>)5^(AkCCB$>s&42Lec7vO`ZrX^&Cd;m<<>UzB>}MM >z4&I7F>f-u@MrBR%q;z;&(zxzf=VUjfQ}N%XwT`|PanZrfN#iOBdFR};3+E{d#%CR7 >zT?y4)-OdWyNUW<`^`gwQ_Q@3?X7^7X{s*Vrfk=SvR2-GzaSBnEz_@AsHV-Q^TVy*! >zkSpac$(<J!>>MPZ^4(o@9g|AqM&8QCeBh}rk@A6wa{1H{C)pfMfz>7(;a%@+X;)di >zcSI9NE;^}xVw76U5M*vojaUE!sk?!0^wh&6HV4)V4H^aDSDj9Z0}PPaDVkh+$Ou8F >zJKrj$MLyqM^4l#;4s0+2yR&GR5CKd<r?6#`4)c%^n8M(w2<+{jT<z%ZMYdjqaJC-T >z;D|U6D8<Hv_d979)fZ|RY04MY^W>KJ5c_sbc(9)He>1}_Q9{^-5LcB0qTF4LY}^aO >zQ8jBUY}M9O<}y?LdspGk&q<F@3S{5NO+5#1s!>j@9n;v_UUA#?PdN)Z{q~KK!EB*D >zl$ix~W=SZ07(!VxkpE+wPH=Vl*wTqMP6P?L64^_P{3Heec?ggs+vtgQD?(lKBr5{& >z9l8fC!|Ojd>v>j|>=|j1-}PeDG@4KrY4lcU7u(f(iCfO7(Ng<d<hIkA4K|&i=_van >zsK;BRJ3XU_^8Yty+T|f*-cY0;#jXCl+Xd$l>lx(8mhDQ>Hac{oFew{!?(qdDr2<Z2 >z@S3KaM-f*(biLxhrVz5rebf%9F!v8@MHzZHs}A_(sjlE*<%(lkJ<LLBkfw}x2iYWJ >zy-+uv4%u7pq}$S6>V>49w4ZpRR4}w%jUB|pt^VOD8d<jMdI^=ia)N;^pmStmtNhvi >z5u1!zxVcWN>cxp+2if%kts1&=xZVtIiQKB}l^xwsKcW-r58|(BDm>R4#y0!qpd2(6 >zZ!YB3e8Ep1A!^}b)42#LkOd$vBi!^P>~xcgs532aP~4b(-Fk^Ps0EJD8zKBSUlA=x >zK#c>D)BBiwt)OLv@eiX)8A+wK&TN_8KZnh%yYs`Ze}rF|7{!+`i+2!7h=cVbM&_~w >z#6AJ+W(QU6Ol4_A4LkcfY6NrMuauG*A#)O7c7dI7TikK!D@C7V4)CQqBZ51_z8i#$ >z{)Y6N7Iwvk$L)Wk{QS=Lv+vhWypB7#t-N54v_|IdjE_)wwXic@2zy-_uTJ}37Tvfk >zo$Eekq+VJ4Xk!(_R!fNWz3}p>4+-6y&O?U&<NWge@~zC-&x%!o{Q~%H+0mUxlh3_c >zd=J(fcyjGaYVY0GUrz5BL@7F-c+Xhcy#Czd>osRmMR)1%r5z9c`TX^aDOMn^@N>vR >zF(*eCi-0(V@B(c{j4~=qBg-hm8ec?(PK^+m3-wog<RaxV82Oe#LP=vEs`hnk9wG$~ >zzt-W3|EXLaQ=_H&L~l&y6C+>2{TKF<EfuxOEL6V9#@(23+3{O2wAVROF|Ok+euH0R >z+($!H7D=4ARGA;D8nKPwx*yWcs4P6H+FDa;GiqsWmTwc4+udn1ra!>XHOECNUW2;Y >z-0v=;H!fptbnw7ALxWKq3x!iQT+C^|{DOlmb2s}x{;;bp-nk+Gm)i^jhgKf3MN%w; >zj^Gx9imAl6O1JAp*nn^43Mn*r(}e4eB~eiVQVVQR?-X`RI24=$ykWoRq-AXeWX6}V >z-I*@h66=Ux4$D#x6kQBLlZs-*;$+hlgCIJX9EUZ5bbHYdsKpNy@jxIa{5h)W=wJLT >zWf?)Apvp^_l|^^aL9vI&@T?tD2QLfZywl>{<>m2*{;QEvAGa*<|7_TYhx_t>!23TZ >zFiI~hu5K?$4m^GMzd_Tb+<WWS5>Nl5B53y-(Z4G0^1nS&{UiEI<)ty1Z`GhYwJ%~D >z)RhQnqBIW|u%5qrBJJIWDWS{(^=}Q&w^nW6oOqnL{*5Iae%IA)VD853=4H22pMoD` >zJUiH2c<5C4LV5U$?-DPssJ*(Qwy5o-vjVt&l-H-kmZW%kqSvxTZrX!nL*xOW+L9S@ >zX*q$bfpfCx%U<zU-`ot9>zkDA8^UgKi8EYNqZ#c?p83cq;EzUsr&`Ak%g+PkDFD9> >ztItm<s1B=Ga^-(M($C|WIt(K>xw>Hz+ap2HHj17lPjS9T@Q^2;nT03_QJA4_8|6{0 >zQn(6H6h$Ic14n@eaZU4hfI+IcM!`E!)PtTNN4Uld&uq4+DkDRvO|geNdDuLvY!`44 >zPV$XpuouNTYPhwHYL-q@isup=hZI++=JQ;<ms8vp89}6S+lJK}DF$uB7K@a_3;Sf& >zsQOV9Il$IyqsXlAw1TLLgJf*HlffES!)w_x)5#cs=~5_|6pGOz+0emBZ<A|YGi<g= >zfje-2AgM}a*>Gbnwwz}cMumfTnmC?@5zjJ@0*NQ%KtMH4u!aLw)rc!&Njch1fdkGa >zAluCh8M+1l+p^k>5CsRxPNW1vovZFlRh^(I@mbp_9SQU&y!3B8<`LBr!_H9~R@WDr >zli0FUHZFio+((c<B7`#73OPbz5kcuZJ2I2oilo59#8op?)Ls(Q_vEN=(6K)Wc(^7( >zUR<)BVoH?MveW#JIX#}E?L&nf*3`|=)Vn^UCr{OHj<9ncHu&RwY%s#;QH1eQgvov2 >zlrEcsBX?k0%`{uh&08&~t(F0;R&|t7Kwzn(>^L21QxR#~9NBX%QhH?w-LEBM&6VvB >z-MJL$_~osh^BjCDl8la0SrCT&;07#_0kT#D$Fo`FDK7$`<FF>)UptkTx%rYH5~{CJ >z6;{Y{4pgfxsw$DfB{v+yakmwtxJt-jOOTUB8AX3hd~(54*NbYpMny*r$%~$$aqrEX >zhwZw6vqaI2=b@piMqND187@AEhh7{)i-I-gXVgZxutBcu8dt}Qi-;1Jx<@g^QFY^o >ztp~}9APR;Y5n@EuS>&nIa8;rx+ABHD>mF(jRQ)Zgc05<n=(UmqSEY<<x=6vTJ(LgP >z8XHmNGI_?${s6?PlSzTE4Ve*#iFz+=8i!4ziZOEHO-5WoCKazL-r3;-iQ*Z7sMx^( >zowY^%HHul;Zml-10f?utNVQ!7#jNnu8pX5bm?b-@%3)OPMPFhKMJ0%;<3Is6_$+65 >zKx^2xLJAoXMln0iQw)pNKfG!)pA(a_Iy1`EZllEJOiHU#jr*t?UD0v(qvIb%6Xv63 >z7o(4UiB7DbL>EvA@!UrF_enbMldaz$bB$5)yPWz%{P+>wv<%(!OY`Y<?@wHMpK<Fw >zc7$s(@*XH5JGB&Z`abvckM~L=Tsf#-wrh5_re5vu39GhjNNrADzz2;Gy@Dfph1atS >zb2^HuI*OYqHf<kD#wexMW%~b8u>8XsnPi<2YQ_CI?adEo!5^9OA1hZ!q*W;<K@HW` >z;x(REJnOP*BVu*tuVPNe)>p(f)VV1w4(ZhJ@Rn3{_b@eq(Ac5VzJRJ%#xnwFx=iji >zI-aaKA7Gk7H7yFBvf}BLQQ$@t+HtOYRMwmCWW_a}VgJSSOB7<}emMsxpk2)%ih^5t >z3PEy>@^}VYIcf=9)fMV|@Qh*qsJtab`R5+A&9sgKRW60Avi4LXkEgrvSi^EsesKA% >z8dWKtujEW6ti@>MQH(|?fZ~T#9VQM^RGH5KJr1wR({JOpqXP!Zspes^`hBsgNXY_t >zhp{$QJtRn<R=huqC)da|Bs!5Cs2EEx#O6?RFi*vqTVF$tv7~5*@ifzg2sBkqm1@|? >z)7qqHZ24<}s5@}OKxLd-*ATIftJQzdO(Zvx<*W?Kb_a#xqqy6ujZ_Qbu(>Kg<3-8z >zDLq)FkoqKs9_0*GO={uR^hS6}3&>#|s#-kH)OpR$e@!os3$x6|AB`WE=Z+VwO-x;x >zwC3WRbEkT`roV{IOc_0VY4qq*ydE&T0l20;(|q~QvpS#WtUo_l<>@1bEpQS~%|AYk >zPEefTsic2K=6znM`~2ckg7O+AIWIyXCGtPl)P(o?YU$E5s=foyNq+cEUA92xy3j;? >z`DopO^--*Y316LxPoO|TOjfV+R=-d*X1E4f*FRJpRqG=Y+m4zrMwI)$XbyhCOnlLc >z20Uq#;x9+P{yF-<a}m3h{h~G}<XW~coN67#Ex69x*6riUbxq3fpWiOy=><^@kxmBv >zh#9XTD3YQ*!o$r|Wa6{A=?`_+C`ug923M!;(^TTxG;qD$pGU!q#sI=l6`-UuDe7KS >ztsz(C#jGYruAE+i&SARGQ?B|J&v=C^<IE$rQFV~6`1z-@TM{f2p6c3=b{9`=i)^a; >zLAz$iOe_JvhK~bNP<~?uKYfvnWQ8y{oVt^73Po*(YB57qcjocS7nPAtb~R2GH5AkS >zDcm0(2`6E*lM4q?EJ9wY5&_PX3n?Sxh*Y^OAGMJorFb5pG228p=f3)9-9DbNswD9% >z&w#dj68+k+Yu2-m3Lu-rOv<)K9@WT;C)@wJ3N)qeCE*puMfNq<{mYZP;Q<(&@@YvX >zeG-bLNy<z!Y%Nu<hN>(rIo+JCGTg2Dq+9K+S?dQgjlv|Et#y6S24113STk8uFIlyZ >zYLS<1vAd^nkNE^GS?_SNETcy^w@0tKM;{_#@OO?uZ;#<Ys^KC<nxDM6m~8Sj8I9y3 >z{ag)ac-qi!@=+3u(>ycXZ{|C`Sv;p&`W~}28n%l0MvOnU!<4&2I@{)}gzbfIki0Cr >z-ftT7TtuVz*+&-EyJmL2|K{jR-L-8Ij@VRkcBg0nt2#v+sN`#-8f5Yi0evok>-etM >zuspKVJWnr-tE@`dHcA21=iC`fE@FlZ&sxyi;t~3Sq4Q+fHeTYnM;bvqd`i3lbg%JR >z&fFiW`e2SHa@cN0;ug`<a$$zpmlJ>M2Xb==x+tFbOw8MP!zhJ|@1rVgQcM?wI$=~z >z(QfIrB+Mci8%9>|qUs^3dLvwoiE!uyW9XWb{2E|WI?1ekfqGF~6L}hIWK-H}xx8T; >zn?=PnuIz%VM>|C^o+}+swn*V=EmG{BXLF-?&?u_L%n;U+s|S*Fe?T!``LJE*q_atu >zMlLCgWPK;8-ZA2$+Q_n9yxancT-aNEfH_aeF`3+3d68!ga#HLg8yGp60Z@A0s9YFz >zTUs?cTAK1G+R1$FlgbR$Y%AN~G@>yp*eZ&LCh}pKS#jrhH?%26@wo|aZymi%CS>L$ >zN~SqK9g@NQO_(QZ;?oF5X~%Y@$$IWc-M`}&Ky@GfJ0~?wCNnMlY#OO1O*M$BmBP*_ >zWS#5`$b6i3>P_0|uYcpqcq(G)>d<rzOh51%RR+gXs3GGvfd!wQ=bLVm=cKSUq`1kI >zok;MwmR*?p(>%<#__;wz=l|-aHsuOjlJju+`*a&i*Rv14>#qQJ)-|TWFBQNzH9b*% >zkyjnpUlVwzHu9G=h^hkmfX+NYFSczs$#2-ESTdjKaei6#+crY78=w5z{_aH~0T5^( >z595_{h`XlM$iu60Wg4kFfcKB6VbTQOvMA;Z%E>yb1A)q^+2j_z7}r|inFbA8&r|K% >zD9U|2(={%E<8QS_(Q@D-{6aOlo|4wGvM!3{$9y!&<H_OQ>V!GT5qb8mTtwTD;=~8F >zlvq6^#WadaNdIgc^jN=!YUV}NjEd#WQ1n2<vdmdRyweGrw>Znj2I*mS+!*ka6xI$r >zK9HpW-Sh@os%@Px0z8;{K*Pu>|B|IGxrU%&l`gV^s*C<k>JI)ROh>=xkq_viNu@4c >z>E*5(d8&~QPi>yN&zNc$MFFgLr7|9t2t43Yhjk;ijaH~uc|71bQIUVjsEcadwUzq7 >zAMlbj8ma%Tq+4_#c!pcLgH(*emcH}WhyoW-#&@(0TX{jo&;C80NS%n`&H7L#6S<QR >z>eP+Q=?9rJZ@eGA$$a!R^YL~jKW&I#=v23inoG-`v$*%f>E67C_*1vsr;^S$yz*ss >zUQJznbj5#ENBe3`>}-Q=Yk^CwGwD^c5Bs;5?NjYXUG!7W@?tGMKDic{=($;+V(_>G >zUK^@bQhnLC7Na0@>ep=RWG5|gPyCfy!=M)T*Vh-J=9*91OoAOhFZ8_gx~kLKJnDJu >zieH_6?Uxzbs!0D%qf-G*N~uJTmhfu@eIMlv_ikHNbo06zaB;!6!X89;!^{ZN?d0}n >zMjvNe_q91+RQHBi8}Y9ZZdl*j7kqeko1f{Ik&>H-eLCH`$HEPR^q+PHwKw<0K0U&3 >zv^ukA^yjg|kDAq;?w3uPMbWCY6C~880$2TS>>ic9RXqD{re*(Z&b9h)ZBF%xrRr*T >zpS}0I7}yl?J=C&&BHywyVCjfX>f>7VGp^pSzS#P`rw?n@?cUHkRAmL8B$lfj;T)+B >z*Sr!{y|d0%t2}h<<4R@V(aE-AUFBk8p6VAp?P}vMMG@tm2C%3)uSX$TEe6dUnhiT! >zK4>y`HM_Sm%`!Y%i*$MEQB``>dd+J0FNY(UE(Y6^?e*^0iz3H@ls(!?4Sn=iOD&Z3 >z-xk7i+}o-HsW4)>E&5|biRsi~VTH~8j;MxxCAQkRkP`RSay?#AE7QtH?_KXqiD0JJ >z=~jAFpF_ln_R9G^ai4DnMcB6E<PUPacPwS@CRR9R=(Y5}1!qLuS^bgaWB19Y8*Tr& >z{~Ow2eZpQxWph6A@y?$stzYH;(fp+;{qN6j(q!>h>Dtu}t{x1o#gTe(-T}=9V)f1{ >zE~5@*KlrXn$EajQQr17H(nWz@Q#oc4KjQDEe#$G7X?EJS6-ucLs`AifhecI|RdmZt >zTlKBX?Iw*9pLkh5jk2iN(aNmuvl$o)d>mx5T||SDTNQKtoUq2u{*O$qw3qr?d#u!w >zqTS!h+VB6RUF+3i8+kT*K&hQ+y;0v@W<2HITISKC7*RpboNg_t;(drHv(`y(t5CR9 >z-@**A_J}N{QX8U5t)us8S5j_GMAi6ZT%p%`w$#6E@Ha@ZJ?Hr&B(f~3xk0<qY(THA >zk_<0CRJW^#(_6Un_bciXw=a6jWv1stTA4e{U%adGh+e=K+4@{*tMv42(5dt|pdVGS >zuf_IKwH^3kTQT|B`4#Akuj&5peO@ZQJ4d-6(gJ<@O!TAHq%OU+datJb+fr}y6WUl6 >z*mmpL{L`_~=S&KGBg!ZpE%E0fuP?Mzy1d-3m%P05D(7R7(P}-R(0nOmx!QNhUF$qh >z9rha%4E0f5;-52Zq`@yLj!xYY^f>ovBCS{r4|9@Ayw|#7-auX01$+8h%PFy5h%w|J >zF{>;7508XAQGPynyns`FEk0)VtCuf--0FXL?P%?X5uN{Qo8}rW3Zt<_hNsv`?0Sin >z2!icYst^V*8P>LWe+RWiL$~9bK3=UHczW}w^7umD8k}PP>brQ_z}s-kOo)RJ`#60f >z@PMi{w)Fieg6sv>60U_*<hDsTIlgefWbigfRBU?YEGa~uf7$WJckv^lX{uTTGuL9# >z^vpkhy&*+Vbi}_15lK)dWuBkJ_SHO1+1?L4^hs=qS&Fw+U=c;$(ZAG4Z$rV%P9i(h >zzuY5_jyxMeRolSiE6i&mO*?o-S20C)@oaPx)LCKGuS~bY)FcgPd0b`WYay3$^bo3X >zvvAidhX~ZgBC5fW$|8%+7A3aLu&gJx)D8$>)<Q>(jsWx1GvZad`0usWYKrVJQE;~j >zCv`wa#n-T;T%b<GIZn}`%t$4tey)7~Ge8As@o4`rs^iINh+T`2J@?Z|QwCe$-zG#E >zDe=^-{fl?tucKVjM+~WyOXl-*e6F4=X@iqzu|+LBWiw2G??DuSgy>wsLkpf+xo;R7 >zONUZ170jFv)$K^RyY<e>%cSDq#TMlY9Xa%?jC{RKy7c~z51M1l5?W@2^pnG`#?kB7 >z%+@HDoj<8)0D0A00fMGRl15tC{C$^J>TXZG(>|_Ldf<<F{jkxhS@pjBkT9WiPwA>g >zN33_ea>|AFj$yefF`uNWCyir)y7sSOz9;6MH2<8}-Ssbw?*O&Lodu@lktKfl<|#O* >ztPW@0%BJW%EhU$Q4>&OQiHl_{4q#3VFA*@cJ@f6P+W&H<flV7VUXlI7+GxT&eUaPo >zpnpWCW@<isCPKCpN>y(gfL{%j>pZB)lOFi}lv8oD>sp74m3j9wOb{FHzu*-1oCzIx >zDR*N#<6WHjlwW~^mnQCt;{Qz9Hy{6uD^I7$1K@)Ot`)K0#>FO?G84F>33jR<(L2p7 >z3GM>+lx>{UHL=Au4lOX-2`cdqqYxN&it)DL%I2&i8g^#iyR7Go3FVaA1`!bYiWGxC >z9_PYFG|`FuPHK)x#i}WqDoy=V1v^sF&@~~{t)HjnXjZ6$jF68|8PngYF9aN3q(TuF >z($kxRcc8;hq`O+&XXNMP6Qr^ayTFbll}EPefm+jDRC4_CY!@Sx3PUJ3_<Et77eOAF >zfR}D&fP1N*5cd6hIy_X$b&x_-{^2+ohs^ssw&+NuBA&K-cTqS<h-v8GexnneROA@n >zihG*wj6A?Epl5!-X@$68wV#*R1I<RaRdWw5^NT{tTHv+|PFm(ksNPF`ibhLLYE#%U >z*Lb#+8gvXd#VB#<>L1-HRt;oM--Zv8#~plJ46}@)G*#|kJx&L~c8MR_=X+;r@1u>n >zy@Ere(uSEUO1y?AgR9mLY#$xF{;lcT;Csg%LPjBUl!a)5IUAmzEoE$$Z}7`vf_~5G >zD~=fW@IU&-5awIebFTQGDv}47Q%;@LwS;@{u)i|EgI{=-r`6W<Imai07kJ&(YWecI >znhN~;&Z>3fgt#=VSFgVOxNU*`k_2g4e2>l<xJ)WL{y<`B<I?SW+k1uIB0pSs^9S5N >z1Ut&eQ_zGZDu(F;&32KQ5tw&FUf3KFuoBsrr|Cy+;q*yYBQ3e=1y|)D^WvB_fs|Q2 >z7lX;G+D#Py-rEljF<CEm;_G0Z>Wx`E;^YL!(B%+|u6ESfBL6Z?$g#skHh+l<J&ao6 >zXOu=@0hoNvAfe)9h?~Q$?$X39`Vp7@|MI<gj*T>Q<TOts2V1sZRSRw|RJtUTYbGdP >zqRTJSlrq?;t1LNJyhLal$c|<`$3i0wpwTq6Izf4gAn$ntTrgy_hhFbVKXHIEtxQmT >z#8w74!uu?64-4f;(^;i~>IAq7g0c@ARz*i%-4-AV1d5qmxMhKg;G^Qykft>qWsa9n >zXDgm&%exYk_pq@!1X#h);j1*cm)CIDS&|)wGGO|&H47}m#+|3j^#DR43u7(*&GJT^ >z-Pdo_#7$3AB_94i=5&sQts?vwpreimahk#(2Wa5qH*mMwA7<Ua0N!bt^skz;zZy;9 >zEZ^T9kAHJa(FQ_H|Kop#e77bZZ(V08))CYeZYT_h{{bOqKP5_we7ApoeN{yeLvh5U >zIr7UaB}Kltn?U@TK*lvoVmDX9%umvmFG=wO9m@j!H3Uk~lG@9^+AKf-V&qa5*pQC) >z6oZt~mDBl<8+d3TL#{*wy|7Jy0Yl7Mc$pHm!Vv=QDhFFYK-^^^`}qj2A99ieoxz}< >zGEuKFXp2Nf-4R8<R<serE)<VYCcs)~*o_FnZo1n1I;M^W2OzsY0_p2Q6qSzsg9nH~ >znJStToS?ADke{P1=CI}6lV$e^amh6JVgvxrsyxGk0lBKAUG6Adl}Etv$p47xqMos^ >zM+nMC*s{+UIuIeOSpYuILWLbhy<{PBSchM-?i~<%y3(aLvb1)w(EwZtShVvk-aiDG >ztQ8q$y7VnNu9*dkpo5eJkO3MP+9G?DE#HindPbA8V=I{hG9q2dks$ZyFm@@9eUzn8 >zvdzZbf2&+aP_ko7&Cy_B%E%W0$P_?*@W@Yi8NW8^BLbv49r6bcKhA;<&}4h?vITS) >zRfzhH$L8Qc$6083iV>JCU!@C^5Tfskb@aTKKm84Q9FLS|!@meHU7sNZWUVg(lwcV- >zA3%7_LMxji<O!O(J<0|fnrDTWDw>x4hL%$@5i24FCTmLr^+9a;9ClF)T_<is$Bm$y >z)}wo7Lp~>2uXICCmX3Nhgl`tgH=83`=EAOS7~H0zEEAyv8-~L&RZ|;APm+y$S;o>r >zBse=|)g0G?*UMUm++u;ZWJs+v65<<4_L!MUue3biuL{r`c!<vSH{8~m^1Q!=?GuX! >zVwMlTg2rfQO*+n;V70f`>Y#;nOs{pK#g4RZlE-Q2tX_CtwM}_1;@NK7h9|b{K)WkX >z?CizuZ&usCANrg_F^b9S`^_^3Oxy!>G}8d_dsX>3{rr;P=lqIn2~GO<(4-GteuD*d >zh(~>*Ne>>AJ|L7kLX-JJ!=edLK&$-m32q>M=?e|fBg8rqfV0x*bqrl0L|qa{mk?A> >zQ%aFn<<$u&S2i?a$UTPkKt^aQAw<aw9k*%lm%zUs9!C|*B@>R<w+4__P|wIye}+89 >z@$x^xZNCNJ2t4c&ODSZ^ao$8$u!%LHht9ENFKrX#J`G*`-GbR*DG#t^PSXIb7FY<< >zIxGY@`+!S4<Psq6lD%&T_MN6lt|ejs{<eY!?@Pqm(Xq$zN^m;$C=FRc_K3tI&kHaa >z*?W%BvA1Y)I&2xHbAT=zbKS5>nShoMN|^{Cp6#e98f?kZC#@CnAq97fHL%K3FrfQZ >zvwgQM{ha82f3qeX#r?kt08v_6IrvJ^$3VTO0cOF0fN1*ED9G(*kgt_Yz)e)hO~v~{ >zg-b4bROqNG#NMy8zrSSdogUhoZKar3YkO4?Qk}X_lD&_91l246wcV5+6UcQv_2{*N >z&9U~&avkeBtlj8g)8E6Mq=uVqkB1AtLjtl6#L=Zi!3Wc_5B@7hqkP*3Sa!(c%_TIt >zE}O1l9ie+1S;0cCitRloz#JEEN+w`$vE($fUj)6E^O8Tbi*jh+vqSVf(Xq#+s|2o3 >zV~_@HG*2LVOQ>K+KrWhtHz#erWZn3b^>hxe&`gk9WkEM+(mXsuf=li&2ft+bNDu%$ >zPdX&<vEC-OnI=C#K`9(r9Aha<&}GgG<(F9Sr5#y`G&mJ74hb^q1es@KF%32{S|~NZ >zLXXj)hmXl8)0Iku162g2I^CQDLv#d5-j1%QOs7j{zj!GCQ^}zZmt~r1Xh$~EnvK|8 >zLv<O*U~2oVx7o6GYzRvm@q>m9ARIPWfy~jc`w8L)S<oeh>?4+V3GE_a+&a<#&QR_= >zTRlJstHR4AuYpU3(w103=HmO>uOZG0<&Lvu%>@hR+n{J6{0B|3MTlt@VoC%!b&B&F >zmXd)`@e&}h;?X{I)KP)-c^bS&fP_;njES94;Kom9ooGr^$zaRg&&s&=+_~pmT>sxn >zd&DzG&t*Q`A<f@=>a9Tf<=>~$$d7wyD9!BCpVQ<-Y4V#pFe0LYSV&fPtpVC5Th>`j >zi;l!A+UozL04?-8(v_;nHPK>u3Y0vLg*?Mm8BI#Q8!Nw>{4659Anqsp=ug??e);>` >z0*rNb;Tap*ob;m7bm`NAcr8ltTe0OOKi8J@lFpwcz3HWQf8vIILdW{c9*2CJuP=Wc >z5~?ADuGCk2Ry_N?{_HeaTznrB_JWDsSE=-(QboL~dWYXLJffK<b$;l1hESC!R6Zb( >zbQM50SiqGJQ-zl(VaYsVNdfXO%?j~FOzJsH%8{iYL3#d301jngK3$To(1uyl5zgOG >zJ#_i=ba@}4%2lD<EnT?`@fcTvLJuAQDy1p}U{3*R&vIiTch7$I8Fd2eDocLO0^LG` >z9=WXS$u*3NfY`CI8F(of0t`-2rV8Pky6_T$-ZxgxIWpq803I!#b#9v_8GuLr8M<Wq >zPN9H~-a~`tRW^7Mr0oO}i{pPDv1N{@L*`gg$pVye#8EgwDuaay5XxM~L#Ud{dy@7n >zvE=G#a$t7Vvv>mwHu|&x(cGnQfh`w+msDpfSFlkyOT`Ly_?hfO=kTcGUje@sP5gnD >zPrykCAxn4!Rj540hCjh;Qhvii0TcLlTVO`}{sF|C4s0vx&r!R}515xxzb@xybd>(? >zun)M>@bU^f^y-zDSGz+y1G77oU|sE{UAx8oEX4KY+Z*#HuL*y{as(xpx!0w|Z>Zf$ >z{#ThJb%AqM$dNq>9l)cM|LN8`*<*MYXL1tYsC!N6@|U)UdMW$+{t>8}5Rfu-S)aR7 >zM+GPY0ygxYn~^7P#l1>p+(o6_g#~bLCyMo7B=;BF<8H+OYxvH&yLT@BgDs#8e9Ia* >zI5g0`|L&bvce(oqCtnTj6~DKS*tTDQP$xislPw?6RX+)F@y7d7MGBW#@)_BBIxBJI >z=1M+*%1M*46CMwwA+sD1_t^+R6oN`u7!aZ}01cHq1YC2G#;Rc8Zbx7wvXE5Dqi=#o >z)$Eh2c=;cPB>U!d=5Ht~3n8k9u#R-e2t4>IJ|~*nnM#!C!6VDsv<|m`kOs)3shBxD >zd`^HHt1@h+!$WD(R3QXlk%!Vy(QNd~Z9K}8CZQ=*sA8)P(B*FlK-5^^D@2BJW%pVu >zp@oq1VyH-(%myCO)_QM@1uCE;Tm@j<CQQ9u7Wa?#0lbpP68;E}980*^EW`y}g%)Hr >z1CspW5sZ#d_tVgW9HFEm9$Z30B-21GG13D9|6%;`)vO-hp_GbV>_+C}f3_Y6kJDP{ >z{6xCK5=-jVI~3>;TK-?Ss@mLb@|^zbxw|ws%cdu1SPJA*L*(<PObDuQ;e6n!r~Cg! >z{2@Jy`4@TQwfC~v^VHY=%52%wI~NM?Ewl>6nc*+SBc3#>y?jiAcbt+|{-neSe|6{e >zD{lDW<m<)R@YgS1zZUL<&TVHcNefXDbR{_9&ENOlY&YH8I3z&)5xoD~-#S~k{Y&^d >zXxXZL+4PUJ`RTXzj_{v5R^0Bd_&Oqj95a5CtF;|hWA3jGtH0k%$ClvHrxO&$2oD0d >zCw&QkN-li>-*|%tniD{L@Nh@awcYydKUgpm7JON-#iNk0dUA`an3n>@`&qAUv2cpE >zvU}*#Q-{f|S*rfG-4qB&Rx9>53k`_&cH;CW_#YACc=UJ0%FcieSA=HfFWkqm8ziTy >zz9PoQg;uPgj`x(sk=Yv4)Hw$gOQ7h<eD5dZKu^nVwyhzrPr0@u_;UD7YA}!%-FJ&7 >ze3^2>qMcu(m!`S>ubz3de`nDCTWc?5{|cy5IaddIc{6sTjVNn^e6jK2S*N)gwXgX5 >zmB0&n`+h|2tBQHrVZ0l@Gqn5ARBL#yx|QAcxZv90$D!r0z!fjHMJZ49YLM1ko0Z4a >z!B6HLAy@s1t*?a!5q+u&cgGS!Yd*cW8hFL=`-!A?4{NcpryGls4Fj+F(_P~S`YuoA >z8zhwk!Tu(WetCQkebe@b_E@QL`>n>wz9YVD_uHW^cao#$T2$|8p2IF)essa2>5-8~ >z^^pLhY>;k#Mh%U3&JVRSD9;(E_QV~glmKK+Qya|!6iXXxT-35TD>7c@vzt@iwx8#p >z_)<{8^Zp+HlAHs#uXWA2C<NY%klPcQ^iD1$qVkY@sK(&B=l;Y|tG(gvDYJP8GF{f) >zO|nrxb{p*NyQCOd(T;r)Wf4-)5Z!nJd>*Kq+B2yf7+>Xzh;iO<Co}~eb5$)2OZHIq >zKeawea0<f=6RxNRPGU5oWTv%}*8E+uPJOc_Oj}Fr6d-BMy5t@Nt&iv@7|rcA_I|zY >zVSFrT&Yh52mb9A?3su^!8Mw$8H7hQ|x@kKt`Hw0;4>O-o!8&tB4MxM}rnUCX_)%4| >zYc|}ayot$UvKJfzM&;6Q$rB~{eREC<*(0;O)MH)#F4)epIuF%Zuj*;*(aowEi#s*R >zu3BuOS<#{GhWG%N+k3mZXEcht0zB;6`zl@JH7wWN)Y77{JW1m`vl**9QFCs%VC2S> >z>i!zDaV3|`Za1y7M1Lo_SZ850k-b$lmR1U!o?~e?Pj_p_4*I((T3IH$<IFNEr!aAA >z0iJr*Q5%QqBkSlo=a1Z<UA>U>Xy5y$6JK7uznF~<{lNBK5skE*wSix0yWB<pXpC9H >z!Y?=H7#Li+)RN&O2Lw*z2t9Kd9)tuhR-D0T)JB}V8FK%cmV#x{L{EdwewV(&Okvf{ >zg(Lq^6_T<}I2&9uN`~E8ZRs?*`-Nv{dhf@xSy#CPAbLs^LwIqxP>mMSFxshcQo}b0 >z>u$KM7&nuos8JX;jEi$fN}e)w>v7kN8*HS`T${-(cxdz2Oz&ed!n<#lR`S9Hd#r5E >z4GZA3Q^X|V1{HJAVa|&Xx9C4<G~Cxcg0(e@_=B}icMjGuE4N*vp)UR$R{g}uBeq3g >zPkf-FeHg|5HFW5S{~*CiAl#>kYJj?G`plN>8oG=*6yi*<BbE6N()V;Sf>eGmaw+l4 >zvXky(np6Bdg+&1{6E?P^U#8H&s0~Kf8<E?SRAi_sMAoJ|Db6tqiUvPvp8V;IFX7~x >zEf`@_50C1@vw4AQhvo0NyJ)+bl~cFaKylHqcEOM0;4XrrX~*ympvi@?qPeYDUOz(c >z;bbd%(UJ74PSOWR1wLC53isT{Z8X=x7d&*awTFF(%Kio9E;__kZ&<IOvV3ozrm9Q- >zu<CVYfd@_#rd9vgq@}VfGKGL}`M_29jVaJ^xQ?TA@HAKXb(FFjneTVM`TbHs^5^8) >z(?5nU{t@dh3fL0Qk{ASuql(B<O9a@3T$;jhzZ|a+67*#MF!-2%p<5S0_JJZD<_n}; >z!I8MmI49%-(y;OpsnC8+D4lCF;*DD`qK9}Go=?xSbWSRXg;Hgf8O5$;G->uvNrmv> >zLgyK_T)W-~eu_5c%knRePx)WvbW9hV`T?x*FVvkPGsi62Ud+=}`me$%S*EsYnD7kf >zJ9iL*E;tNpIKCM5bC{`l<NnS-Edv_zNLQh+4Q-M-x%=Rfcs-98ty|{d`0WrKaxFyS >z_|eMpgJluGk2oHR%E=2`#6t?}$1HQ$SHi>SFnzt;_@9^N17`@xD@9|f8=QP4OQGWE >zVP|C@i}J@!bi@h8VeRAVg}y~|b%`M^nmn;C>v&D9ZoL$-u(He#M3AtmA5n6yE@c=+ >z$e;N@k^8~eeRWe4RdCf6Qz0r0F?y@=BE(r<9Se=UMgX7d|7>Z8&2h@ql-}3R)msWG >z4y}p6-RN-9p7JZS9l^_bhftKRR+a)0Pt4c!v2AR$s9<+yR%v+u_>PkA<@>sX;5g`r >zq&cG?WK9!rP=}|cy31W0A{5{Bj~e8x_r|WUF`YI}k^`iIzgO8(hup_(1G>wiiLEOC >zW{ePc{!<Qp1e`yRT=eO#NOdMi`4>46tMYFpxL=pOc-Tej3*%Ye^_$lc%i~ZHv3mzU >z)!qPj1i30kj_Z$X&KZ(Xgxtx(F>8WSW%x79CI4cZp^xbEuU#}8?BV>9y1tu}pd-Pr >z5YH->Z(1;o6B0`IzuvGm>He9(DBQpJRwwPw!=28`tXD<*yxz)c**NPec7~r%{rj#^ >zE%C(T3rpW`{e5q}>8px)(i^pvv<IypzA7Kt#{5tG6n21-tD!0kMz-=49*GL<GmE6p >zQbvf@W+i*qi<~(><<ioV$`1Bcq%7Ku+xs{h^8{~A#P&@%yLN_}y(-?-p9I?#a#*3D >zyVw;7nBTP-BOw6}cZPnTw?oPUTv={C!aeK)9mY;2=R0gJ%cL^?itaTlbKazZ!#hSy >zDwuh0o6GXOO`}K?v%;2}0+|;@ZZ^lU#ZH4QN;eh9O?B#k-YeGBa6d(-%D;pJT9!|Q >zQuVL%i}qwjpm(`bG?%)|-JDycmHN5R>!LjQKCy=f`*|=sPT_$~O|+U`ZfA>szLq5& >z9vI@Rrs1F0JYoSW@1UsMnyuIlcP2msp;T-DGuIIaXm^LWm|vaEvzuR*+Yv(6Mq_j3 >zK+AID=`L~y7)9<Pj@)a#aZ-==iX&1>D)t1=lsa4B=^UxBAAk@%G5LEp>2NyKg(N}m >zLnDDd7M$!&{0r0?1<-Lt=U+WZg>soJ_)VK}TWfAY;<otWvQC=TP}7&xudLT!E1Zp2 >zc7iirsl55Unx+oq=<PQna19GmTvUa~V{;kmRx~oK<+xrFv%IYICVhO@fl@}91AITp >zb}IN$^10!#)nLKfhsT<Wj!$g9r|d{^NlS?oNd<FKy#G$|-;o-emb&kDYWO+if7a>V >z<1y!syKp2D{yx6l%YlzGP`<RZ^vh|P@6)n$)AM4|y|dCwc0iN(>1P#ARPQ};?lz#$ >zQJVff!QPS4o|bXtcE%y5q&@>Qi9gv&KB+Gf-^)CC_xZ`pYUm9ntlbaMz(5H7VEdTx >z1}6L<6Ex`uon%4`nGk<K5+lLe8BQ@6DK-<5$cHvC!Et`DGZ-l+2IK*0&$LMDCI)qb >z1HFJhnTUY^R;aBA`ht(}#em}eV=Cc*dUf|H;*|)oGzUr)b3G<dJI0Vy;)oyQKw~)Y >zYaCbu18$Fz^5uX>{lGUks7aQQ1xBiggX~HH<0~Q8L|`kCfiFfXmLXNL4tYH*wS9$z >z=;ffR1^T(&(ETJRo9|Ibf@PCH7c4zTMbL1888J!9n-3f=8oVhPE`kF{<<h$NF_E_m >z2X>4B?PS0zvlOmvO5FfVR9Wx|5}?dMt2yunMo6kia)$_XkZHS<A+etXKgp1C5`o@r >zK>bNl$Fkf{G0>NX%-lF&#s=6;(Sj|4AGd^>fb%cgAnu!?YdKP(6Zr?A1rhEA(Tecc >zpRl-vf<(o_V<ClU^@X{d!kZ%G<tkW@TTy;`QE`7!`Ol(Co8sE^VxK@rsz5EtPx7K- >zNoz>S<@%D&g_3R#YMkTL3tWkEOH)~;gYN#`Vr4uV@W{me?eY4u=>=#h0}jxpbMEEO >z7N83q<%>4pC1}NaKZrdBw4YY-Aq4tqqT&nm?1uZ<YTDUSKKL%{?AC{~V){%_EMT=s >z2o@l3Br2bXpdkv7Lrlka%t{wdC1VckRu3t~Q~^9A@da3?p<t*Mb`68Li9rtYA$u7x >zg+1VX7??c+enupD5(5x)`NbG$xnJcOK0wt$!^Lzjav&alkiT+0+WGzg{eX#!DCbDg >z`BG}+rgA27(h}auhhAYK3Yk#ccYqx&11Qj9KETUKMKUDmOvzM%$qgo=SA@X-+>4$o >zx<@|M#F6x1>O}GZb`ajmM7Hv!wgdeT>g!V3B<M{s<4z{z1_uf7tXKTNr^pf0e25hj >zd{cyL<wFxhAap9MmH~ix<o%V9V<PY=d|ELBMBq#GVvv{luscIxdHv9fJ&-db*foia >zmkl%kUF-xTR=<PgV&*6Dd-wTC9SVUbktl%-M6sA|I1}|=Ab-P8BT@v)=0n~rKssxr >zN=4bn_~3kUAvXouzyT+)E_5>xTnv)64>n6}94l^|x)XANb@2>e@2E%9v*M<glTA56 >zus03Rfc^_B4N~tLnlFqre|X#cA8mR9_M`aX@5zgQU@Qqw7Eto!%VIqqVm<IP-N^vS >zc(Ub7*udt)HtTOTAp@cn+M;{D#c%*Q&4HLIw_YK&T4l7_4zwQQw<d|TU1K7F*LyA* >z|Iwx|WFS7FP(OqAB4-B=ChZUjxo@Cd?p-_0;8HI6(hi11%=t_Hm8g##SOUJPn$?~S >zxWjy@;~7%vS1-r;LC=XGhtq)N-7)Y2?tzi27C}$>9c9gdQvorN={NZ?Ayv$@l;c`R >z%T1-J2V)TBB1sPhxYZB3PXxGbdQZ<meCOfgV(R4#sYI-VH{S3u2S%NP5NE;XXdOF6 >zpi>;s>=5NPAHX9dWvr0l7;uatv~3ePO@f{AlZq4}6FCr<TKE+vc<~pKR0r9<!-PK< >zK@E=~V@Tjg5{st<i(E0y&5D*|fJ!mQQReYim54VO#2FTQw+IXXl=kQS6ETRr&tTmc >z#0@^;1V+-93C;$LQxfW-m|iZRIP>HF!a|ObAZoVIceU_`Bu7<$khkDsf}c|pUbz=Q >znlT_#68r*3HbDe@2;6hP(Vrw?F9KPKq&D}(-(;d+VZhK0P!a=@M1sqgc31Kt<--H& >zCn2oyv%APWI&qld|L>Z{^(GD7OJnuM4D~u9`uy>I&T)O-S$&bLKCi#}{0wih8Ia(U >z|6`i|bCYg=D?9mC>~zyC|JEJA8N}bt=a+2L8MoV+w@>beow5g?QR&ZB0p*_rc6p>q >zU-h5;2U2<R&_xlvuJq3N={wDcftK9^mk@ea?hXW;fZx~;>bAf8Z`|Gf&bv<hyAKdM >zdAkSi&<3^mebXnQb~*`s6|gQxVm|KP!pUx>SCIWoL@_x<EfvzrhiQ`#-X!n?68bD= >z*Ek6=$v|~;VBJg!1*R150`fAc*D6c#ED2-GpkKKlZpMHBjI2J3(tv^LiX`+gpe8@$ >zLB51713c*mHhmfI&u|E2z{Gz`CWs{Vk)(EUq$WjRe+Kk51~#2V%;qCJ&cS9e(9jyl >zFavy-gQyk(yOllfl3>#`lkJ8SFt!rew+Z_bD4{`uaxq{zPC4nNcoLvk^QGQ!K+yMQ >z*J@z49QYk_QjQ(`DgMw+1~N&MVVX7l7Y3!VA998XvtSvN(oAA85b_UrR(|&z9Bh&a >z*7bwMa3ou2Ay1FpF2^8hMdCaCfLj;Ln4wzEggVibbxD$$y^^LPP$?hvP=tIz>fgx+ >zd|UX_tg2IdDVot(@euX`W6XUX5x+JDc&8UcaDAqDx+)@LX8bgAB1aXH7e7%H25BPK >zly6N`I!xAPPByH?H#Wj9Zh>38rY@CDU7eY_BXGUP2jFJdWAgN=lhbz`0FHC|r5WrT >z6ZwRL*d7l14?CS+oO!$@MH&#l(z)k(<HM7jhp)FDzFt26b}(<X?9r#0M`?mbBBRHv >z$>3v*$G--#!sm~-Rr!+P{Lh<k*uRp<&wPyWEG}U-fg@?gnpOQ5NwbwA?3~j!Hq*NY >z-RlQ_NLGGj8<on)((*$no`+To8uHemiGGjnVNjzY$z2@qZoY)4N`sc4#7-u-5+iZO >z4{Qd=rF_Y~97rNYqV+$Q96ZTq?H+*d!~g&!gr4Q|*bjY(0WM}h3zJY6L?B;35VaOI >z%yIl$hngjUHUEX3os~W5C*_R+>|zNOzGOZJ`HqC}e}=5)OZAclhcQwI0-@XYvSzBY >zPUUYPMj4&q7+^s{u^7P7nWZy9XGo}fgUJv4Q13D5hkkMw`N$h0@lrq~{sF$sfm~)H >z!bQkW)~Gie@Er#F8dIW)C7a@9dCqVC9;@*k2Px!BsffgFpTpmZWOwn!T{zGONvLT+ >z#%_T2`dOzjODg#zlg9uDbLlosInocF$d_7Ypr4Wgrpd~?{dxjoU-f&-)(*XTAb2%o >zyf~7uIC0JUAZPL6zl&!`;3uy^_Drdx9j_Pvm3s3pLb!A3-KnLM%%#6xFMU;e^DX?% >z-#cNy?!7T)g8mryPGSU-K(}YJ;JqKBiH|t=k5u=NV3aKMr3tqcuL~1~gzD(!Go)oH >zPloOv$Si+aZXNMNv^<S}YpE`=qxr4<(%W6?D^3Si+?rR;`8~12e#w!1_YmMrPruuz >zj@-o&&-&*b-EsBMfnA4}Mq)*v_%Ex8fa{8XpK|nly2-1YWMmTtR?CNcO#$y@K*g(t >zI~bCsLvpr$@HeE-N9CB}C!y{&&|E$!U-q;%2UbV|bNPtsp|c4biMw(T4-u+e%)HnS >zs<Q!c4}eelG0NZiJ7K)S$p_Aw!*2Vb!uik`kwl*P%UThTSPeQTlJq6PXpLe@9Ox+$ >zxSNks863~?KZmcED)&PWYoL&Q$aV}Y2_v<egxJ1KYE9*UPx4`%B-jf-NFW1z0t5ej >z2mCp=4}2Hg>xW`9B=SXwa|%s|_)_Diq}<HFX-o-UKXBqMP&Na&w}HGF-yibfs2<pD >znp4a{+6fNg3I~$SkW8XgJRExafLUqFkpd*vY?2i4taK5-k?ZGux;BM)Q<BgmS(#PV >zL=s8)7Q!BgP`lvL8tWGT%XC-s!tKj9SnKqmb@hW1c+(AH;)dQu3Bxm>5Wq6s1+qMI >zW5?Gkqt+1ngHk(9t;wdFfMx1LdRdJ@4-f4K=lA(tghDvtrL?8J2jOCsALl#V%9U%U >z<ljxT?z<eS{afa8$QAdb7NdsLxb2`;ySN`Io>sB@oAhHg$~<cidpA0tfqy>H6TRoA >zpFaHGjJnR*M)UBxzJ7D<sd{_;=9*tNM1GU5_xYKZKe~dOEG`^HO+~GHbvfJ(_zX+Y >zdej;7@JG$>)T>?<#?=8*=c{yPFMAhCs4b?xo36FEe0=k8rPf^6zNR0Iw$Jnf>I|k2 >zd_QsQ!}vMtn5n2EvR8wPNw+gTH&lMybA9i{>x&-qu`f8Jzzv5_-?S&I?UF!aQ@4!y >zE&D19y!5{vn!Ij(@VAj?b(?o*<b!~xQ?*z2Uh-*Oa)$LBdRXgOxzY8p+AXp{-TucG >zZ1bv5wP`-u`-J6Hzgin^v~hsiUx6*8?Y$B^U$)ile3stI+*49aEHOG=ymHpEqDXko >z^Vx)Ene}1&wxYnR?h)-~61J_y=2!dKMMTH?)?4-xlPi_v<&fL~a@_*0Oz*=#k;O*K >zKikf`C{MmEv;FfkvMw$H)>>-yrAYFAp!qM;TK6vtt$98@zb>73kcic82vL3!RZV%; >z(N^Z@c_*sE>{&hWoLaJCWK}?g-g3U&6qH!!p%}N?ZB1;QF`scgk#F&sEL(2*#4oVi >z>N%~t-1?Qz|Ab3BHT#7n_Fu|~OCjz5A2Pju_bX53#^5(_?7Ir>m-cNXKjC*YD-M1M >zyk`05`cJJYF^G|92&51%+U7!ayF@%Yv{J+{`Ylw8X<28J>kI@-lbE|TPneDQM0c$h >zhaFq&9@ofiY&}aZbM7g%tnd3isdu?+V~TO<MbGrUAzZbW#cWV-xyR9u;y$(?`(%B0 >zDjn-Ot8`znqfFOeQc&ndz0y+Ye6+Z|z^v+5JCm#_&ZzZ2(l2DvL-k#5S=$vyG96zQ >zMOM4*(O<3g&ryuJa0Bf@tkALZ0Q^$(*oY!4yI<`MPRb_^)$TF**xuk8s^3;&98s@b >zOA45vpF38yk63E72S^G3AD-^Toyo_KAAjU9%<OC!HpgMuoJq1d%`xPhY7W&1A)!*) >z(Hx5;m1;v$Nl20;n?nmpDydW>w8~qNO1<^=y+7aI_5J+;yRKck@9n<#ykD=!)1^Wp >zE!lf9dijJ`Q`(+$z@xzOdgv%)wt}P)olxrU_uHtH=<w)6F>=4mu-Nf@W8Heurav-4 >zv1TnMvCR4>rmi@6J~zI|@>=d(34XM3V4i#oRC_ixTV<B-J4#Ee@>Bg}Sh?Nik$3C1 >zWZ%ntl6Mlh-xBUzdwP%6E4=#2P~SPO|2eby%B`=X5~~w;9=crND3;6>Ir>qoOYIEI >z=1YjGzIlaCL;UMSwDIcB83JjdI^hJRnS!D1v8ha@?j|148cFoFJwF|=*Y&&BSVu<D >zW~2dZf3Ey^<zPF$ei{*SKITPp)$JPxQ`M|-?<R+`JKAsDNZnt&J^FJM==x@l{X%Gj >zk+~+z#<dpyzd2L*ozBg9Ldd~Rk)Bb`#-Zp%jk9lJKe}mlJw2VK7Rgxm(vEo9<yL|R >zC~@6?QgV16fENkKPhay*U1!ws;LEg~h>mpr{N{~^$Ln_fXm%_KOSyUEz1sWLp&YlB >znz*9_v_6zH=f>|BUyuFPQT%&sj33uD11)DzjIS+~GOz~fS0@KFLeq;9R^qX*Bm+kI >zXL!~MGl(;}RAujA-YyOfUS6%0XAa}L8{w6?onCsG<we2Z8Ib&MD$H+*g~$?so;lM9 >z&0__DYqhB8>OtaSI!B*KEr>fQas01^3CWVG6krAj=U`{T?8L0h!(KXNtwozT25Nx} >z3bL!5tI3&0-e-7N4#9@7mGQ8xt9>>dw+blj0!S)|idyd?mxT4uLC%<d)A+H%eN&6t >z?<c)X9Lh^_5)JE92_n<xQ0_Kh8U9kW7bd8sAT~g*HWJeZT4*bbRHy~1{7b<AvwD7O >zai)C|PYgPQ9pU)_^Ay;EKDJb-zh<DeBdQ;p*}@_=E~|_m@l^H0-%BOdAr5rLBlXfb >z{v!quGJ^td5Rlz=+MGIH!!xCr4Q)ey(7X~bXa3-%chpctRY(7B(<~r$mEQ&|y?eq= >zMsq?)&(4k!xpr4y6-T7t&%arickFW>&Ae!P;mcb6CPYYKX#atWM==ANzu#3q_6H%5 >zH*TcBu8mpD3WWe->bak+QXC&vhy6jIDf+C3o{BfQY?1oOKjART?fFVW96=PcYpK9+ >zgFX1k>VQ#+i*mjB>8nB9Yhhbp3jcSB{zAWTE$%+8Ns4?j>FqF5G-1(r`bHY}daP;m >zBN{+%euu{3FJ|=nBWvNOWc?OtOMH8UFY5am2kg&f6z}S<1^dtjoJPl(TEU&jH(*b6 >z*%*JH!Us@>%mZmI2zW3NuV`FN(MUVVhQta$7o5D%e}ao??z6BfG%;uow7?5It#k%6 >zXypfk46ekfv2))b<6#9M?eS1A0u|hq$=6&EYQD|&R?CL6@d5El2SNQfZ!(KaG|-?# >zQ8o6YbG+K)wXS0N4g5s680$dL_Y}mDTx+{-51xi>2Z;^Jo)$QFPb;@FsNj4A+dL7k >z@k-K%jVG4^<DM#~NuO{#TNI3WQs_OICp;pU342agKGis&bC|>rB^qiNGyL#Y<U-#p >zA^KExAGso!^+RzQdSBv2(0j@<3#$ckZSO2|@@KnQAu_{>GR#|2{j(tKop%3bt_o9E >z+T;X>T?B}UyS(jT34Qmg2eiu4Rbi(l`w0=`;^Rv*Zmyz-mobCZX|3|cfNiRU5u5sz >zbGKmMNUk`sD$Xt>68z5&g}2yL&2`OL9oM3Y13cA6O6Gf8UOi5)vc2$6$==Q1Up>i3 >zXPFm~)jfO?)}eB-D@5(TGTPRz@y*o(@I53hIsNssH=rMl{zpIWTZo5}qo{gq(&VV& >za}ynd2eF5t{GIDAlYLe{TTk6z*kdaHdc5JM5t{jrESB}=ozk7oN4m-fbTFcOlYOW? >z86`VB6HxxuVk{0>;6GZc?#mGCrnQ!AQ!vy%FHzby{*7--oPj3L<X6$K0;fv4;t?A6 >z4df{oGb>OzE9u8+m-8GYT_8%e80<pgSTso?1CoAi?<|g~t5A7|qz`TN4P<wJ25KqI >zgv{RJ80Q(NjlQQ6|08is7UCvFPJ_l}Cz*&@y6XNYinckKujPq@aB~ASvo};mV@+Up >z*Q2~`AWsWCk@3jTGEN9VUbm3#D`9G{GKma@BS*NKBuwvBmLZKr0I`EW+;FD??^RCZ >zDmRJ7b?#&V4q6<at*XURngkF$Hm#beOk)9b5>>`^=QB}GtR0OU(@C~h6vsir0wlJ8 >zPN3e1ha+%;85}uh-fjjrs&S)}UtJDC*?kk&bCPW*WACC}aqTSEuV%V$=(cE76x+Jq >zJ;x@UXAd6fHj%JnqIjV#-GP%z4Nh#Dtow=D{YcFH@lE%i-(!2MvH<4OIRE}V!RBZk >z*88#h28}HA>irI_9uq$6gMZK5Cazz)n@mUXlZC?PTW%k}u%cw^Y@Dn|S%>${LVo!T >z^ZP!z9|>E2u^;%H-16tvmNkDRi-ia4Islf)m79WX^mJED>~-yA`p``7Uh7pG=~Z9o >z1$1m8=}cViMuew`3}Vw7<uo}It$K=1KLuF3)dyPLV>x?B)TC`xlPoF$t7zuRr8bIz >zMMuj8u{F3)<j*6@8nzL*F{^BgE*5Sz-!{LT2IAV#Sgx3YNGI;LYL3GsXOo0w+l&8i >z6X3dWckmUGyIKtyEY0d7a}awofo02JZ?5Ksu3kVDvI2Wg|G3K}Iw_tmyrM|}KvQPK >zXBL_E$eF<=@R=kDTYr)pKBh{ZDm;+O(RW&x|GJ5@o6jXW<!i`JdSbX30z1sT%`v~l >zU&?osuwD5j?$C}13CBgo_H8K+Vzf|OZdn2>TIa?VFvpSBv2T(Ch>NZaw(BG(K*HVA >z$aR&m>66@;+=AU0t|x9J!%0z;(Q6`On$oyP8LNuMA~&*0(94*~0h4OhHbUtp3wDr< >zv$dK>l}P*~Y-0i^2zqq~s30nr?HI*LlyHNhxX2{-LI2B}tJ$vAEFz7YH}&w?8r!Oq >zmA{s6lV9%ZBmt1cOggQABiYo+vTKxhc1lX7B!M!?i4?9g^wDM~`BR>cLilByR@r9h >zkIeHQSyn#^=5rl#*O`VAW(}BQMPNq}xCMt<T2Q}QyCH(pM)JtD1AK*stf9neE|HcG >ziITtDIn*>Y)Vwy-f*o#i9o`Z=>`ou1rVq~+58s`F-*Z*!e(vA1;@^u55ZeXxhmCkJ >zM#4Hd0sN6iu8P9}95>0x<AsqY;KxtFtZ~=JNf^!!iQ+_7;N+CTtNOq<0lXa~9H5)} >zZU~w-3i=SsIUB2RJ_&d^=WWI%TRv-x6NfU%VSu__q8<iTvpvl@&W$H_uChp-3bI@t >zt+PZQdRd*oVh}i+I-lxIvRo$5(Lf^rI7tL?cjR&-q6!?-&qeXM@iYz|#DZa%oA|fG >z>FeiR2rRr4%MimdYUHKLI94YO&AzasXzga0XPc_I9%HTgQNX9pN#rx_7>aVfg@8C` >zE#nw&=cr3Kbm@t}^pjf&N~1^EPU+|GYH{sz<qKpS%$Izda~z}9jhL&P0|eey5HE5v >z->#7x!{?^cig%?dj>ae!fH@Y8tSt=1?dFPinpg%5;J}L9C2Xr|mU|R;J5AyJ_6OdR >zyciHSc$Gtq0&G>bXD27@FV~rtZ_K#1OU9vK6lDD+co}>5D%W0mJA8HA4fKqxt1w{3 >zwhdIUKg#R9$5tY80~<Fw-zbf1+2;CUo7-cBErD|G{}@ppD|mQ4j|^UazK8ytxT-)q >z%Jo%e*|$7TkUS6k=XsRB;;p8Q+bmyf3w#lt8ou)Bsy3hH+o%w8`-M(#_>Q^oU5XQ) >z(1>{Zh{W&-5<TM6p$S|5MAA`S^8JYj$pm3?B3d@F-x!f$9C^Si@}O=(_6=@MDmV86 >z=g<v#D^cXpxya*xPv+}R0<`HS+GJ`cmv?lMe_^udEw6aThEm0w0Bsr!dR1=u>Qvw> >zZ}*bz)oe;NHy%__BxCCz=BDHV-d!mP!$wSU{8kkX{$<(II1wP89)X2w;_aT~0h|tJ >zNn{29rI>=aNsfCXYh8^4mN8ug7i}0Ul;O2hK9^9<^qyR2+B&h#R#{{M%ZI^5GdM=M >zmo`Jo$xbY7J}=9O>xkR6S%swu;^6r5aS1PH0WK5JN}X7L;!jaY7mO!4bd1Q>{hf;J >zf;6gNr;O#@$$hrUw8U@|Rt50{rEE100GtAhqNx+h7*k=4VYvYGZsW#@A*L(zX#j@j >z|E<t`RsQ6c`xawweLI1-&a_%(`=<}OZ5VZ<aV=#}(xaHB5|$o_sggfzvC0dOu^gPZ >zz{8->Z&j~;bHW)MXcRXIR6uunw4;+3#$c*+<~xFT+b7jhoOv<%x8D8TfkEs9a8nES >zcL*8Bm$B2RT<z08Ov9F)3omvqJ_dgO6nE7d?E3Dt>qnsC&x7y%^50L@?fQ3j{NK6v >z=qQeHu#ueAMtKK10GwK$=P12%8@<a>31X@CNDXs2s7Wd0KPgmi8vY*(5j2hJVWX`S >zG5;xQHN@!*#_7&aV}DQM^kzaO%uP-+ag7|nICYcVH<xhbyLpL?GZsOLm^U+4|ILu} >zK0x{TRy29LQH~}3!;}-(=^fWOjRT``8Ilj17e8!)%u=ip``u@eb+<g7*w(pR8=1&j >zqF9mCYEIw<%Qzl<rjrxb8^d<sJhR1c%&H$~f>=l=mg6cX!D%CP?jgN%J|(K)zBAW@ >z##}o;^LMQq5ykXjtn-{f%<qLtZ=JbzAWlJ3zWz0qI)h2;<fT-10&%!KjU7p2A^6vw >z7`#m~d6Vr0`*V5Wt1N_!>5SoqV%T3gnPdVtwDWnwBoivhSLNr|)UZrw95QqOMq_Su >zQYZ$T4?(+|6Gt0pNG)cnq=&uF-RPIZwj^-2@L3ww%xzAMt~9nbAYBup<>mS^|Hm=2 >zzsE@^lS~U}abP2hc@&Uqc@8wDo9w+Of#(Kd1JY$kH8)nq-oDBi5>}`DGmQK;Ns3}? >zW4H%EJiLtMj0vi^z{6QE$t{eM3E7NHwrf>(Qty){pPg+`v>kxe>7NL>pQ<mee>&Hb >zMCA2dSo{>S`biMP6E3o9)8y(SK06S&dr4DQ%04?(=j+^Ofpg`WCO#9TpX~wrIf#jN >zVmUK-`4`w;w1V`gFCE9ebYA>IX#8?-^vnIlFAx4>_3AB%-4<#KSupxS_Mrud8~0K3 >z0={$M&+~;Xx$;kfxMM+V9l}4)j<G2+MZm*&sVCC~B5ldp*Z*luO{Bi7n){!6$}9Wu >zpTcr|^;Q|%IAf8LpZ2LC?aSaIaV%}|=b|lOP7_#mP8=VM!Vh&0eo`**K4(WGYsc6N >zx`bn14cMZboxLZb(tET38N88A$=x_v#M^)JR;-LmUsdYlv&^LH4W<%y^eWe-_mn@4 >zW!zh)$>;7_&D0xF)Bv++jF#7u7jrjQJg5Jm#s(YObwO+w8S9H12c^eCHnF!fasnpV >z4g{7BLBaJb$7WTIHN|q1ann25xF~+4gl!>V;t2|j0JZ~$MQP^xF<7x6wgI4WT5??p >z@}9b^2p5(mpXEm2zzA}uUetPFfODH|10AC^W(TL%1O)R>(>7iw+;#vJ#^mz+a^;*p >zaTrm*$e<c3fgj#k@ai`=7Q`V-I6@+8i=heo6Kk^*XZZ^!E|_T9Gh?)<_~_&Tmpcbs >zUmkG#b-?|S0>w1T<2~1N*NXS?6`DTR7wA9of08AvW*M!@=_>r#v<eM%{Gk-|V|LF$ >z4Xk|BSM8)9!@i9_c>M===yUXBKP>rt&ql5VCi`(oa$;omo}6sPne5~{*(t{rQa@(z >zSI*h3!HWgLLHC@4dvkIMat>X|Ir1>)s5QW_Z#-_z)?SroYA6TaXIr1VY2lvB-SvTY >zLWzGSw@8CU{)R6(&Iy}b-I4ELtMOZ(z)BQc43-X^+QNZLn5Xyu{+@5sRQ}uf&WpdY >z3$an0P2Z|0olMjuYi2=PwwX)YaAEi#-mUuzN0j}~CzY;Llcpdu3H)1j{7)Ly`EWk_ >zfQ0+hibb1b3S3T@?%r?j%-sc2ymoZmO#AO-g!G(Nw?c*Q#+P?a0$#pXONY+}zP4>! >zZ1nP6z@_k`kjK%sSD!c9QhNF&ZJ#Dvyu%y9V(!cZoHjr4C-E%YB;fq!n-P{*!!LW4 >zJD#z6dlr5<yf)x`b8OL}s}D<E4vgD%ec$u=Qt0u)nzLayUS4tE|2icXHaBvf;`6fd >z5y~vA*=t|L)LHxMTN?t7zH2(HkiG4)?<vR)v#cwRPHs73VCi=%ar~6^@oR~NE7zW$ >z3_TO$b-g2b+iBek@E>ybWTOIqZd&_fn|ZX*Wgq-PQTyJ2)9&wU1G?J31zw~a6$hxS >ze4eP=I($xj6Pgix4rk^TK!AOWZML&7@_fC%WEgO1%lXW?p|HIpS9b{~`mg=?6ujVj >zBL?*uB@1oal~i&0&-k9@TE7$8FB;1)`<-H|XgcI!GUB~7cejW5=yUBted9{X$Nent >z&msaHrt1+~-Q<kJw2Nmm!u0*fb79uPHFCJJwQIR|#P)+f!lM#SAB>1O(lQremHsH4 >zwj*cm_Cuq>Rg^ECjmnOSFSh>~m3S&VVt{ZDct~w~bphsWayu`>$M90tuPMFbvmp|+ >z&q~NBw6qfc%0>u`kD@4v*$?4`Q_KFA!Yq;x;Y3Y{rv`a${E^OPg(Vs-r>0`W`2Jd( >zuU2Z)vY$!aY@0vnN=Ym2V$N*HBlL;H^=JOrJKYr$<I@WnG_#wr6$7wcj2~W_M`lB5 >zwuJ#9pN#hfWca`fSH{6X(ZnTh3sem(MkgbnZ4kPPGuDSa)J=Mb-V{q7F;X5Nd!^m& >z4}C~J=ovb!y-%THP_uX~U7~-We|#8i;TbZ71L=l(sRk0s1NifaPrY=!Tr0e=#VHy7 >zF_*v<0d{@BNF|xO=FqR3kdiTgxSj~>L!NO30N71f@&ICM_Z_c-(%JNqs<$cMA8C1z >z?hfk<T@8&--_BxQuDYH6$+$Yc3gKzES8&zjeA+njW6i;LXZLF5{ZVNYa3bOewUstq >z-WE4gLWeBxD{LFOd}zKk>B_6Mb@*qCr5zQ@*KWkZ=QX+Qa)54X5;`z>wkhM_%?C=G >zQd%EQlrOY-Wi6$&TL$m5?0B8|Z{Zzjk$>}DnZq)>KVwAxX7|eL;+s8df7Dufw<Gh? >z#cGag-$-x`YU@CxoiGC&k_%pj_y#=nMDEXHWty4a!WIvchNluAGn=3iC^O)czeR!3 >zvJc{Mz>)~{09iTc;WIfE=y=f1#z*&U)2#rlz{F>M3w`g#28{ljKS{;E>|cIJxHMbt >zg)AH6IMu|%qa_}eJXl%Ua|8I9#sRCMr$yvmZs-9S1=#}(gLw*-_B(mo1Jh#E`Z$e9 >z0u^loJCR|O0NK$wXxy+q28?jVqo*03(8V#H7q%AGC-F8hAQvaDrov8jiWJ+%3Vlm( >z8_!pJ>1MV7|0VV+!E!ycKa<Lc-2#Oz&>`LCJDljSI?QRA*l>_^TEhshwh!Y0`$H-q >zRZc@RF;pF3FCH7Vpn4tTWBodvZORd<9?E}b)lkmYPZVmG^ZQK(gZY@;CDo@AF?0|R >z9!Ya*fsz63cVmVA3e&0?w0@I4!8{taR&5~vF)=iR1u4NpE%Ps~H0FS^?c=nz$=rYS >zXu6$Gt;;Lrd;FPr+4F1QtNQoryU>eg9^9%FAK!qKVpVf{6?h+XZs+!IJb<UDMzBH; >z0wq0movd}U+!hQz#q)juUmQ4+fE^Z~!Pi@Oe&AZP;~GUTJD2aZM&f$_Fykp;!92|X >zopaIvwT<pYOfE0psZfV`#PGJe)~f#hrb}l+PUJnG)!zv0gzII33S$!u4VU<|ptg!L >zL@K8F+n{YOyt1~*6AI$_g}05LZmBf3Of4KHt>ILUclHwwKP~m|p3%OG@i9C%#-Y06 >zH6P@9s9p>yikUJ{b);<!Pk<Gh_e)hT5Io7*PYX<mbuPO;0fkXdOYGNX(2x0E;2CIf >zK)(>WgF(@X&nR{Y*sXpPGpK9uv}Aif9esvR0r9>u)f1;NbE^YZ5l?yNb=M8Rma9~f >zc`GkI%K%IXo>H@dRcTM9X`PjbtTSQ!Et~|MeXC+azopU#*)y;Mjb0Y!8O6bCtjO~i >z3dRMfgSV3^CIKt*7ncgQ^w(<7F&-LLk@z|*28i$|PlR8v{M&)g(6jWd)<3^-<C_HP >zw+Mq~MNf;j5QS<PP7}C2C;8E9Gf)(Ps`L3IR|{MV3L*3xWCwFR!F6aZhJ9B%qc~wI >z9zDzuqtQ#nDV#Wj>dy(%%4CTNHctHjka(7nc;q#p)++y6m~F_5>u$A)|Cc%Si@4Q5 >zdDxn(xc#ka<lXTX&BEU6JAZ$E88zbGaweA@w~NGEe2#~#&;8k$XxLg36ZW(1?AsJ{ >z1-We33bj4N{GX(4_g+sZO@nsiQk)SPY?Jz0tviqZNjq|$N3x@K_S;)!o*s_<NR8|Y >zZ2bS3(+`$k4?Vm0&cFTF{j2=1d0&paUt7HMVBOL)9}!Z#6FVahiXgFzNnDC&E=b`v >ziI;SL8gksJ-_R;Uw>du^b!&2fR7EaL?XKS5eGo2W^qVc`x9x403$h1_#aPo9mRgb_ >zmp~$oif`Otg}B(Od{1%}tc2Pm)p@cZO#9+=2Oc{E&S3N#d~PX@1=p%_`F;93$)%(f >z0l1Lir_-FywVa#-T{$`c=^zzv4=~^-$<{?i5in4}O*)7xc!!g3<!^DNnA~<!^XnpU >z@Se5moU*|t>kt4O_Sj_mz{_BHtS}xD4>?u6h=V^>Ec_3retJ^jbkI^!a=#E+8IwV3 >zfEAk8$T=DR8Z}CMU6imORH*|EV8l_J%?rkeoG4Fh0jv-gHm#oFBvw8Ky`c6Sr<kbq >zRps0mf7k3ZT<Fw~P}u!(OOq@731(pO>loKLHUT@p_-*coKO>sQ!>-eR;?0*-81LnF >zKW+R8PySYrvi~0H?V>{GfUauQ%bBT9J9F;6FZDVUS!?>^*v6h8_lv2k|EkOB=ZZAk >z3OUx@&_hmQwVtse-NZQb?M6?Nb-h-eZerdCOIa>H4Oq)K(LFm<I*{^ijQg@<Z7w_) >z@i_IELd}<&k8a9cV})s1^?RwG0&)(M1Xc&HZU3tt_0r|#A>GMB-B(_$SC(Svis(b@ >zg*T$N8Y!A@FZaUegX*(y-~HG@KvI!wKpoP%p+K=MM?5(v0{)SHa4wn+lm{jV=EKEA >zBGpb|JAmvNg^7_P0NdHC-y}k~Qt@G1u`6OtPYMJ}F?t@Q74}ZeJrrLfCQQ9F=ZH)L >z#JDw)(VEz(q#u$8sHIV;MKLLns+H?Qz((s;Vq-bt<GV#FBi`sd5qgB8wnnjePQm9r >zHmaxKMgVZK7rLI+E1xGKOi|3TsODKz%|xmda_qGzF1cHb;!w<uJTOxtZ3PObiK635 >zHFl-6&oUbpL|CvmiWvo96kow&Gnub>zxc|WJG}Y{4)gAHw>z$ciX&1q!uoXcMB0fI >z2GD}qE&70>;`2lrO%&4=v1L6)rJG_?LRF~|>DP-8VHEumY(%U`H;+|#kb-d)lk=FP >zx?<HtIjVyEwkZ+blWN%Qu46|vP@p<2P))&NjO3{?*28v1F6J@Supj3*E>NElK$Zm> >z6+Tc1o~SpCFq-cBe~2k6UWm?|-o}l!;>2kYBMBp7i<)Vj`f2TsILvx?9JXh}{~*)P >zc>SNf`bsl|S&CW8|GYR&f`OsK@W7<EQP2#AuVj)8K&CUVI5UK*8FWp&dGm}``;5h) >zf$P(F?4*H}i3swo)>=M67i38GW|0BQbW#4U>jyH;&_2e{A^C$&EJc?icH||HPbQdF >zC!p&o`i&p7o>Mjf>-Q4F&94pJJ{xZN^TBvSy}Jn&oYjY|aR;neVwM>2VZj{Az2_p+ >zFyOPJpp2-{N)a+ZirA1~QcnSL0sRIswuzedgT<@fYMCfDt)$|ylrMqaXjl0Q0KOJ5 >z|B*<wSfJ=Ah)q|hSxBnJtUI!af(@g<r`+||Ys9EZs!0=-JViCKqW}yaB88&nDyMQx >z{*~o`-iWwufdYC?F(6W{`&qd^sitH8nzOx1vAqZ*vFVx!X(ZlZL{WAXo709g0z~>m >zF(x<O!p_6ej%qbUwYW&x@S_)E*Jt%@2vyBv?4&r(iZtsfZzvz(v6P@nsuDzGm?h2v >z0KF7SNK>!j>SF-%{Srt$Bn-D}i7^1nUwfW!`i_F>r`iU1n5T0xVDYM8sxekfn2gZj >zhia}2S$k4pl_Fy!F*wTuOA{o9HtbgA1#{&09yVbV%_}%ClWH517dPzd+GEwbM^9ps >z`g#w1b{@|^*|8g+E}l<c|DRuK%60g--GrhZu=n83z1i}<ISv#}Npbs8s(zL)W`RO% >ztUBCw<%oE%p2YO%Ytv(&O^^TCi`dYZ&+=mGF<7G_mV=B9RJ_c)+s?}0L=NhuFba+_ >z_$DHLm8`HqR@5OY9+YYK$5|qSty9E+#99`kaiWTKVw7S%Dn5x$GWL{jucB61C7s$M >zK4nl_8G7|}{MD+4UJQ|W$%}%hq1qEE(0Ynym`62|YThm~1@J;Jpz2W&&nZ@Uy(%m2 >zK);&G8l`tdWJv5I7*SpNJ#0Oxe#?9H!5Z6ZC?F1nK=;@7lt&+>k}Ji|xE(N}$Z}1j >zwLmdgukTf@>4kEr4w%R@H{|0|#CCRKNDu{{=b@Yb#PE5qTD!Y?m`JU6w_c41!5Gv7 >z_rYfKp?`agUHj})Sci>Y{%(!vb@M=x1})vUT6KGn!bGqvz%TW1sHE7q_L&3FEQhYU >zCUWd%=6dxR0k;^59-Buz>;VCAb;!QyF=(yVu!IW7Qi*nAbP5I8;-?WyQN=E5g^95y >zeGW}x{Rz>wtU*M-JB-+iDhY7ReX(bcyA@cZW#mByh-3wTDP(n=re-Jh5skzcBN3)u >ze)qY3CTnF~ZP)LKzrgJ9_W?;%feJ8#501I3uJrbRQ$%_xVyl!sw*}<7=K|VkNUNk5 >zQzGBdL>ay;_wb_lA&(*{ThN*n83>w&cw&23s&046$Y_ebZ0PX>Wt*oMyt42_DOGoh >z$%z2IY^mc`sn6U}pGSzFXH#G7Otnk=2bz-l@>uF*S?a5csjsgUCU>UddT&fk$i01S >z`R=pj`#+XaRjX-js~Pjf>6ojQRvwPDH09tlYd|zjUX<kZ)#Qm$vF@_6MN+lZ=WABq >zIu?P@XJMlGQXs{WBfXbLMF3KDl)q-|f~}ng2{3wz^69%%O=CUm+IzL?lL;J(UN_Y& >zjB=&X&lM+C?cY!rG@udYjtrncYebG=Vhor9_S~5BAH{mTrf-uGYqhD*EZoBm>+#0Y >z!v!ee3(Ekti;y)UgY<B-=M=;ml~fO08YqsQqN9QGa=ShBvw&01Bf}-kCZLF`PAwS} >z+lPtCMjPvpBFojSHnEM8JTU|rpqm)1l|r=+quO+PIAn>j91nu42pUE;#(bQda@PV= >zVElhvh*XV!itx`{Yfq6b>7~tz2wgI)zaYQG9w0B>p|kFgkxA4yn(v~!_Q;o(o;Y-3 >zuX=s2UHmKK5s~r;6)pAET<M(v9Nd~d0#@FwBR{W1)KPMA*J*qhF$1wngwXInYHUPp >zZ)GcqO&Da&I~o`BTQR4W46Di7*E2NNv0ge`<*;Wcjsfzk?=tkhX6UaknI&bA14KH+ >zJ{Me@fo+?iN1M^MW%CpYI)!brMNclZ&$M7!8!V<(wMEy)nBUB_c#ui_C?alo4x6;G >z`eI}KuMJ7fmh2;fw)1Sx$lGqRwez>Ne~&p3cgx|xEl0L(k2h7l@&Kg9(`Bm|NT+nV >zziak?2Qn)B)B(4z2M8<Qw<xc;1Bj?;mML-N9&!v|WQnfjzAK^!b0RWvV|<uMe@cW{ >z+i-;l{4|Q7M)ANcmt(UCRVmk1k&(0>39IZS^iz;4?kdPz57b$aGB2GlF)u)D-y5!1 >z->aW)85H4Ra`NPgk%+in*=JVSi(!l*O5}d%Qngd4Ti#N%+C9v$ea7wC`bK@G)*@00 >z#Q^D{7u$zV6gA3cUEkmj0Mrvz?sO%wuIte0Y^rV(RWCqf+8AS;m0*JO(!sL6bnUYq >zVclI&7`{(|v{TF)!^MLY`zHG#NGh>jWU0_c9uey$0{nGGtQ9LIBkDhgM=LKxX6^G+ >zu@q}hc};tf6_|?Un-~sIFtLiau}z1Z_Ucbj)axl)MigWi#juH$xa}t*T%<|Q#xflC >zYA~7e%NhY<G*OPKESG$}!?@$;KF8fyNp{+spBgpp1UpgMuWWa@UpgSi3?0YJD^&Xw >zd6mBu`*kA<(fv-=wmS!{ld|{c<eZStz4KG=<S%6+g)F#p_|}~xrgC}5nR(B0aFaQP >z(mThjS)_j*^VOV~I!>%7ELO3Lcf$BLuT{=ND))+*`%B0>&{@Fl<m(*JHEJ@b&Aste >zTy$sEygRq#Np9);Rpjhy*(J&e>%J2YDJL}!mFojw>2Dy-C8mhA6h0AJ_C{Q07?y}s >zQ$$(TA~3@-1^HOP+zZuI8*w^YtjoOdk0`uRmYKtBYG5AO4V?2Lor4tP#&8o?=6~j+ >z&P~8!6WcV2?pjLJ`>C7ysUWPJ;SCWSESFjv6HlaS)wAR;QZacVvnes2m|>J6GGD(z >zwG|9%1yC?C0Y*fL5e}#ZnbX2j)8Ebl0yvpN-G-%FgLhfRisAGFk4wZ@_YZbiOA;@6 >zm{%Tf390s>;1(#lVH71<JO)hF&BFW`5vi@MRh4=GLaS>xJI_c=sP{1J9mMy(_?9BF >zL3-e(-jv^_AWA5vVN|O;@o{?!bd7nel;XTsWHc*6B~r91vrS5TOh>3DVfU^j96>OS >zV6y(b^RRbwk4RVMdv{%g5*$G^{yX3C@4Xyx=5di_R6M?Z;P~9XJsMRHzCO~d@o)j> >z*<jX;h%^YnwQo~55HzJisCcl5P^~if;U$Jcd8kkAFIbZ}df?YD<PGK64&QSf8Fuwd >zq5gkzsm{vUllPP{jlX2%Q7!C!3yaOq-elueD9^VZ)d>6h;t6$P|6h+msuL}1GScGJ >z&AwNCrLQ&9-aOdsZddf<THq=21@pN-$d3W1aL0>&Xd{e#s(cSMCz>Hlf*K-jxD31w >zn}2yNm)%fV7}mU1=xyeA`Bi9x-^ERl$2{*=?whz4v9C7v>i17iTcQh<yi|WAJvm7( >zUhKbXpA_D<yEVoPY$tnq&dm34z@r2HGpCIcmRFpsQpeB7ALpmNYBhav!^e6j)@&uo >z|3c{L&m+DtS#Y&=0+svc``+z9^2%$!`+b&nHSxH?jcccf6LssG_nF74te8z!I7W6M >z)ock*&UyL7{2fX>wXY%UYEjA6mCHd_ybFsi``I=;sSg!>Y5MfjxR0mnQ5)u*nJ`*~ >zi{8mShx`&L(AxeQ855Bj*^+pB(Wq<N$BEX^ed4CB(^mq7J1;Lotxh$KU!b<0xqIyd >zG?P|W?%NESDX_A-YjlEY{-~}pJk!kVA~iJT>g6->=dL!K&wPEgDm-Gzk5J2UHotoL >z++p);SFd$_Msbz2>dWnVRQENtjrx75PBkyAt9ExeR9}ph4b3%o|NQ*rrn7?K2&v!g >zcio9Wz2cO%A*;INTcd7jsqN!I{;9Vo;J)#wSBxY54pUhl9y?0cIfkQ7vy};>&a!K? >z8J<&9U(lvS`Kxk(OZxBbv(d{=iT8iLE8gGp=diQ!1J9pdzHaeSG#YbPKqZb*K*sfB >zV#+mwN!k9Lzvs?Hj3?Ef3NKszP~@n0*03yausW{HDoDk+j2K^SRBoGn_;O`Tm+$=P >zfX@trO5=IVp6XP{Rl~~U&xIdrq5((Xv`0f!{0aTVV4HHs*Rt6fO3>B1;=Q$IhFl%^ >z)%jCanZ+|zI~;s3p9vI$W{ONZ#_Wrey7<$@(JZqMg;oudA1d9F3Bt1}MV}H&XJ1d& >zorGBt3{Gx~cdjk)y!dLvGt^IpL0NEi;qG!{?cZ}Hw0YX>NxgL?=lSZL=dMl{yLN$u >zJd(koxvG?gRVm+>8f{eOXmw~$iT)7i@~NbGt&f#=2PcKa?(?fD1$%lJaa^tBS4PE_ >z7n3}j;@Ykn@L<$V;pu%1zV$4VcLbx#o#!T{9CIaSd|7n1)@)I9$06gAq+^HXs~w{b >zq9US`Zr?7A&CxYfI<z&KAC*x4*eiO^1#U!4@{NJ)#(iCX9i}pdH#@%dnMnQhHuoN* >z;oT99r)S=i*A%1ZJJr3N%Hpp4p5Yd-wGw8EtVeS{#5?@XEj{UD^?SB5GEM6ldimtp >zJ?Aqf&hEX$M4w~SmFvZQ^4ZgE^4ZWl<hD~ge&6;luV0ECI$YN)|4BK>c>Mp6(wuv| >zcdPSvQUVfSh+MIb5?QtXpg<uK<Eg5rdG}HHVkR&=>J$@R8XHiDI)D+wM_aiRJ45Jk >z#(>o^atR7(fJp#7G(FeC4R)<lE@<r68T_WA>@}_AMWF0#NG}drG0-~T6l7@=Qpf-j >zyMe|*-OyIP^+Futp2XW$FXXn*^BJ8(t6t=^kWyM~Ep&S>McHks(6pUSFLd&9d^g6Y >zrzBv`6TGZ~mUst&h5XIc6vws}rp{EHW}TUr+Od|RNaT!0NV=bCTSlqdf>iBIHPuM< >zDbG7h3f|jD#T^Ug&^Dx@kLLDidVgbu*u}3an>qCnOkjmM3Ln6Qo&5?yBu;Q*9Xypb >zU>oz4jRY#^Z_|M0nAVb=Bhw0Z2tMW=!9`{@0?>&@iY}y;M;zIs66Z7sc}*(vUz36X >zn!pSm!m>+@hXY;hh((};$H)*{I7vadelLt#5Mpjz8$k7(<oE?7z#Th9h7#M-@JW)2 >z^HiM1aZEod_c{LpZ3dnr?RVr*iVg{CQLT+$R)<?Lbflry33BPCrg+#6nTO7;r4lEr >z__BlDA1s^6h5kS`Y`xkWssse#Cd-<y7_)|3VFkVsHcIa$vnHE<7jETcRx(L*l+e3F >z5j{3lx0>dV=~su71M1E^SO?FOiVuw>cCgQma^|7lBJ@7D1k~%<dCQ5A()6<L3U>() >z&AUiN<}J@I9OTcrehq$dWd6XVziWF9yjzr54by_0&OT~iE5E?o4t=OmW^HxuX=(OK >z9bWfpMZ;2o@vH#YfEOFYlMA#J@ah*B-bOtq*)}5|kh>fE3`R+uz@}Pgl2bnkh;wy} >zQst}}9w-Q`&<i=E%yb%4I?!6Rt0rDOf!}Z4Ln@4XUW+MMrRs++6-5W|GWPQajE6`C >z{@4%b^SJ}|GvD}(k$CWlPA@Byi~{o!N_SvOMMwM+2d;qE*ai|Ge+N`UrA({F5h!|@ >zA;oShtR2Uzsq5%H<!WIlJm|mJNJwpG;dZ(S+!jPd!pkps=i#BvZ>Y$e5Wdq0z9$gW >zhj)WDxf2tR(K4|`Zw+75RR}M|cv{w`7dR8+l($t6lVZp`D)y?naWz#(zO~Reuh#N} >ztdD3CQV^ZLgy8Z;7G*HL&YGa-5Wi1_)lwK-iB~XQrJ%*>T>Bb4;x6CQUY<NPqvv?n >z79-ZGQG1K6!RuXd>ceV>DE*W9@}3lBeduxV&L3?r@1L5aA88A@`sdvpwbQaa$Jce} >z-kXKJH{DxUS_^a#FmZW8GGO)R*0kGfZ{N`kt$g2<c;xl!0W084PMT8E`4IImT-v%t >zbNwk#7uSHe4e~T9%9}MRh<_A#%u93VTcPAWb7+7Bs@h5}vdlT8b_4XidN^<1)ah_% >z+PjT4a{+rdeTaUNHyEy;43kmz){c=GUbXw7oIlsJ#w!}yFOzR11s&0TuD8>}=ubLV >zryjS_8q-hmgK=T8c;s!#vi5j-S>QJls7I#<Ats}+muLXn=L9&i!37SnLZ>5>9>maK >z?q*^u>R_WMsp<#cmTn1H3w`=SAw@n}EVCP=anyVk-!s4fbwc7{+!Io0H7i72;;)2> >zgB7233pYm7X?QWY*rH|wLl;K}yw_640Q^!&{!~{`MxpzLWYtT2Pc&<+U>%2?R$FWq >zS?ZIE>;q~sCop1A2f+R|O+$`Odgw$1Tl|B$hq=5eGErUPhn5(?-$*=RvD=Dsz3}SM >zWnK=v4N{tG9L%{<Oo%7nAp*0>M`eAOpJSzdYw<9zMlt#rtkAx)PWv){FWdok3)w^m >zhQIr?&^S;JT{TUhm@HMSpsOb10GJK|q{-=vs+sv8^B^)#nXII&XVm>ubsA`S!{_=m >zNaN_|mY^@4Y4C2yLcbNVR=6;l7M)hFZi81Gq^nDV7G-G~3(ab6bi}a_Pzdv@-ZaDn >z|4r%UH^_cCeE*UIfPmuEmGH|ZH<zux!k}iVg9268{p*_UTUTgLR)V+w;Ng~d(jW5p >zpX2#IQ#5{Mo%offv6`%Smj7h+r1j70C%*;zVf8lwUroJjLDcpYX~O)sTVt*N#M+3) >z-{)U7;iA9Nt^W-QwY{gIuQ#l(oLK)Xg$&^~C<9t4NlvpxPM;)SELE+gGvfscq0)_? >z>6joPvIijf@UX586*gZr&f(PmNR^dDUur(7Vhun;I8@MdbcYo69}c35hi6JvO@wHw >zP=iNTEBOb>5<(6OAVD~}mjX14`JQG5X-L*UF8<?&M~)h+K&CY(de00AV0NG3-SMCa >z0RoO!G!d#ErbBw-Fv~cl5;J+5X*e!@9f3B4j?<BeeYXG?^mXsXCmTqI=^#J6TC!9* >zU;#Xi1AnF?l<>&rY3(w)(lP0SnEWRlIE^By^6L%Z%Tl-t#rPH;rW%L%ECv6$sg{ga >z_n3|nOHt>TJC^|gEe;J4BH;CE=s4JrK<%1T87Ko-r0eqHP@_1-Ae{1^X%zA*+GRR& >zQ5qX6P-+lp{-i_ULgfj%N+?}vnLaQi1@Dno{}CX!lEHg`DXdo1E;4#=D|)N&H}!_@ >zp{JVGau~Kdrtm4IJVfj4Q?1fwv&JP<6HMoJxz2qU_Eg5TW%ub664D#5tAWS7YgQkU >z!e(Fug9OAPjPkQ}U4Na7Q-;gi#*y`c@xtBKSh#_4g@NU=q}oC~x6hCgYUDd^^gHES >zM5cNy+~lhO)XX$Vg_|DVZE6^Y{`V@1wXC(ApA<h$IF)I3e%Y)p)BO4}I6|P1O-IKF >zfnY#QysZ4XO*MP^e>UlxWy`%(t54%rnvKd$O{(Vv$_@hMi*)iHfp)wc{()3(UaHxH >z*Y1+4*tC8O6)1?M+Ew0a{z3qaRUFN?j_6&o>W$nZ#5`v}M(G;Y@Fg~uqvAP4JRPw| >zD%XI+fWQ4srprU7VaKf0lW`i!)6n=hEhV8cq!z*xD9_;jO^ZWsuu`iKfLU=UD$^N4 >zUzZ=ksU8!+cG6MFBIBw!7-PP1LaLHR-{>dQ42{$1u~xq()hNSjbqHZGI3*cDn<vy7 >zqBpPvfIbXMliTn86{d<;m_49eB~@z1gR7(vB_YTgr!;{>l}Y6n1*lLu2vQF_9H$AG >zg<Uw<ya3!I1w-PrJEk?#1mJinREeN7Do`)ODK^s)JUo_#2gqZL8$gf>LA8b&wL*1( >zqoayK4X42u1zJ3zww_QqXhB`c&Rx0Pee;3_Jd478MqvweF2+%9Gd9LZskT`jbpnqq >zcAj_Wo*x9BAEln#vb?shz}vo|265hd+r9VO`P`xV99i*UXRXtUS7@iQe9vcT#1s9l >zwENw(+t`-nf1D2Mu?x__YiSDu`ji7-R0h7yLQ2DeK2^r=5}?JDt-qgdl?xA6u@^(+ >zLbkbw>=$ScN<$0}hCb{4zhEiqdv=^AfT{N2U^Bg8A>rZCFT&$)t0$h0*d|aeh{I;z >zjy!%F&be*UAc`8MBP&lwUqHoNz71_exg&0>SP7Mn388+|nnQH8_&DrPoR+jzO-Tse >z*@W;0fLAjO?KriI=^8uZboL13#Zsj9w9d~B(gwf>#j9rvB=G`xl@RPA)hJrRXycV% >zyW4)IquQp?F#=_CDM((ZmYh#>1FSy*m<wAUuf?hG+`mH`kjg?0c_Av>7!^;U6illh >zlOk#bYNG%XNe7Qh;pTA)6?8O^zs;;@nG3;1!rFzK$|J+Wyf|=KCKWDJe@%y9i$nd9 >zLj3U9i-L|SDW;i@RE<+E5}>t(Dkl@!enK$ITG>sYq&mIP1YnVq)I+5jJy$`&3^+@m >zJ%dxMqH8w@!ELSD69VLabmen&%sBIJ{MP8TChd!&n8PnC_ed3rggOAe8g(6#PX<^- >zgu^s66sJ+qD;bH0tf-{Es7if{PMdR3kxit1rz3jz@7EEjJll}2cqUz4GXr%dLsv7? >z_)MnduUYi8(nS7&&6?|3UT3lbH4i2T)p)&<1!GfsWcD2a@`$8hMu5mVbMx@89Cl7_ >z@vmG9p+eQ2Lzf&6Ux|!9Hh=gY?#La-(r(SX$T$tj%e<$NM_>JNPM(I%=4i-X9y_t& >z_>VKk|3>OXy60bE=6~qTzfK{cJGHT$5L^_?3|N-PMaE1c9VVj-gqU|yl_I*5ADwex >z8XDxpjqK#^$~98w#UwkW`cESOg1ae0vr39W%h`I*D3rNdZ4>^A5Mm$*Lqr_%qPyjG >z=F#{0R<nD49L5=2#G!e@i_7dKn>Zx+s<ONgz&9ZkIP_sW0v@MQL035kNU{Q?$+U*w >zwEJo*$dA4btp6b$rjh8l^<;r^5l$_88eAnfaAcaCGBdvikNzW58pj2Wo_&xV2Me8s >zHVf1*3L!mKnu0~x>kS0Jrk-*}{G_Wi;80e0m1a83oQXc;ZqAd!_2R$|UsWy&!1Y1O >z+ox6hgsMFNmrYm6nnCjhZrj|5%wnjqgz%qIJ8d%f<S&iG_=}oC9Rnfk^__(_sY?8Y >zXqRbZEgqdl`8<PDRZUg7=6-uN9yv3fdx4;?q*0jWTV3dk$)3J|pqw4fKYKyzTtVEq >zD*#H}to#~xexT}n$W2hs@2~x5Yu0;fp8iHYKYQV=*2THA7yr?^^yBQMzrSHdx8cOY >z>uR9a0$7Yts|!CbEwDLKYbdO>cBwl<uPYYTZE>mh>8juAa=DIvdHbKs2`&i6>xPV& >zD~DcRxw4^=d#--VjEbGb)iYgJ<#ul#l&aRdKs)G|VCeN?_v;qS>-V*r1`aDrx>Vw& >zxtoN@2^UQ(IX`I^bn$HSk>2Jf8*W-qZhr5*{O54>jSRH4P~AY-Q6vP1S)m;85TkD! >zuf?IQ@Mj~ZfrAFgyQ+k~f~3wAj?&k}0(InJD6U-#Kv^p?G@Nc|uzrDv`?TPI;O&0< >z%e=;@RL#2;I)Q`q2oQVls10?{G(5Tp*N12Zxd{}n3BVON1kP1`!cMimb{#Pz(1;Li >zX7wJqE>JIGinqpL9pc~}S@(}f)nCiB%_+NC)|l-=vtx9PG<+(W;#i9_*eHa`Ps5eO >z_LYCu;dm{;k)M}_7MUwGFMt4v+%HMKOzQFn2d}&a`%j>#N5K?)`lrP}y<r+Q?(X;E >z1Bgmj5a%zd;x&S%<C_Jl-n~yEx>VyS?{)$ZCm!4-Ky~263ML3QNiQr`q}3g&?<zL! >z79W+V=pF3awAS|?*Z=Tje{paB1G#~4*VM9?1NU$$Y17!mn!(hX@dJ4ekE}gpyN;;} >z(V_FgZE;8*{n2^s`V77KO83xB*J1y-;U~kxqF7)nLv;kZ{y2y7_|+O{s@sg^KKf~D >zbSd`9Z&!4zAuOf#tin++mH>rMk0I`dq@>8_64eZjj&F=pv^u(P|Ez|?{byS?tH6a2 >z&kN53-^PdHKSsTMQbkv9#!ckVC-(iFIPe#iegEYJ6;Vhn7|?CcH6R;4Kn58oCA`W` >z>3(d_g)aB)e*_8(zrkIGh@C<>wpJBORE>AX|F%%5l0t2S8g6*#=sx|WJs5=(mjIXh >z+%y`3*9gU{DhZ*y95sj#YK33y5&&@XnH~Y$8xPK;gW%KXl^(ziRSyC#ADb`@acbx2 >zu!?E)5WSYy`?5#~g9vrp@QAMbw0PX{Q-XC>lmA)hifsb<&Md`c9K1uIYO;b(mK&=Q >zjB4PKT>`|r42(A(5g|&?m_t-vhP3ti{o6}vaChG(NOoYpEMEan&=D7f(3C%F-uNG9 >z{hIX?)iS5ipL=8f(4p8aHLwx<HBQ-YLD}v3M<pSDSH9Uf0aZ{VcP0OLrVx04;0?7S >z0<+yQ#KM*2unL`nwSQym36F{+UdG=rTW%b_u=S`PF)7p}N)T|<++HPg_p|E+viIL> >z;l%z5kF$UBwA<(XPB`~<C|-X)_wa1!y>o9}Dow*HDcsT6SDB4tmk(U-a`k&rN2~U& >z6E9#YWD(E2kGuxf^Nj*plDD5DuKQ(Q4`|x#VZLM2glz22*0WtHhtMB9N{zxz6z_dE >z@aGb?M9dbp@Af-mawqxmx%R}T)gHpGEc0iK$;N=|LH5bdWZSNX9Bgh<eep5$qFMO4 >zCeUrdwg%J9Lp4dyKD`opp6($uwaK1Vm>*J2eRS~pXvOBEN*9vGjRWg^Q`1KND^D0G >zrm)8sl9tS#oQi#5Gf?<FX{avpPFbLi;YooApZW*sTkc6H93gociTdLrETX3}e2ohf >z+8&x7pDG_#tqaI}=x}G@Db4y;z%PID!GNca^pl>Ci$Mk0TMzXUM$SCcx?;4=AJ@0C >z<OvP2yA@<0m%TJ(lC&1`*m%E@&B!{7yO8nF>cJG;7oN0o@}b>Jy9%0C2(rx|<?Ctl >z7#>p77Uc9Ht8Gy4X_l=&jvIE$*Ss|SHx<HeZ}Y((ZIX*s+uYycX=y(~^3m7If(?^T >zOp*LhyItXfO8!$YAIO1`Z-drX5<|T-wwKsEae4E6+=nEbg?T})tN<eGoAeGJL{iPT >zuf?MkxDVVX5jLoEmQ(I&b!nku$nZQcc&Trf4fQ~O9cb-C94sOCX++k*2GtU#U^MfO >zS>!O2mrc+7&0e*`CCIhk%D6N#GMCO$bBL1Q4prtpw6x@~ggoqFP%Ym`DKoyvqGNT& >zf?SmuQ0h3}nQ&r@(pm3yoR{9&L|y-PPyMZf^~wh!;XBXHRqZ(D90*USiXJuDw*q_Y >zcxx>KRFgTLWP0)N@~gs2`Ko?0eNEgoLR}fv-0X7I#K}($7mjIvZoGW)+~?>A#9M** >zx_*~^rZ=(Q{hROo{Ijp64}B!1?cs<x1-*Yn?ne9bnDc{}*Yhxm*?ZomMQgw+O*`&W >zGd7^K6&up8^Qhzi&3JgkhN_-Gy6Xo!T4_6Ky>D%a20!C!J2Zd5v$YRwM*KElIqYdO >zj0&7ulIY)c-8PIr$_aU>x1~MZ$Lu`ksi*m!dbq#(C2ZSs+$|&`fK-@82~{(lB@e1^ >zZ5oppbFX}(s_w}9khpHRF9jZBE98VcCf@NxJht4~#|?w&5|;ukPvtES8{G}N_1Jb- >zY(<ej(m>%L-$QS-yugc73y-U&!VJobw2_9899cisCcQAyj=KL$?>M~WXYtPN1id>L >z4@6K#Nksp&`rD|7cHT<`)Vx|y0%5?kja-^k@<G?&w@4!>q%^2s<ggnv=rUejx*IEm >z+|Ttu#k3Yj12roTWPR%GaL~<wIPhlYLDK7xV!DI~KECQn{MOF@s0GO=N|-YKUo87p >zn0aP+YThNMkiluzsIz$cDfCWPbXc6qLH=7y#@<a+pUQH2HeUS3-|ISCzW31MBRf|@ >zTM9n!uy%a&W&PbRv15-HxGzt(P5<AiU$^TPD93yo-~U~{^WeX~*7+NWbiJYSUPXs* >zOjr$F(YjisezA^SxGHs^I*H*INnDGRX|;6{KNu|JIgU(2j;!|KAQ_5Yt}_mm60&Kt >zLD8_27ixbx#~M7NwrMh6^8v=&p;TnDcgjOs?H9*@UJrHb6azI<MMR*s{nRTFT4{;z >zo<0la_WG;WeiI}F)WX=4BK#nUXWdO#4q5H9xYk<sY_=J_ud(0yb8xYls}OpD;i=z~ >zK4$M3k9xrH26a?%qSxsE8*j7C4&l4l8KA-?Kv)~XvS_bGgjZ9vSkV8&)V+r@`S||> >z&kQ@!oQGj^ob#NQRNIW4n`6rPd`wd+MP)~GY$7I<Q=+I5QdBmFoO(AUsZ{8sQtu^| >zO8MRI&-b6-e{)^CX4kI!w%hA|z8+5odYz6py-YFRxbmfMN7#b$wb3E1hTPKd{spKt >zm#n|nkBgtgD%Y>M;2o^FY30#M7u;Pf|7J3@?G_cUyHhlSOAGLUF)Hf4gEJ{1`C(B> >z>cc?gJY%XL-Fp#vv3FSWERTW3pK@;G4_moavbWV_C`J=R=pI^rDr-sM=+dA{Pbn9Z >z69w*Da-BSo!Lb|C(;joDSa)_57_CRCmd=vkvKje1YZhc$*EsGsc|~DGdPpCXE6_1L >zJlMUUxW4)h?Te){9E5d{pd?+?r4~)+1tgQ;W}xFYRhW?3sQo9&{TXlTM8sm#b!saj >z92QVB+12d$+{O1~l*V~bH;>Y-;(ryn(bQbAAg4b{!nA0zy~6A-hkp97+xkJF17$%b >z;kfJG$4_Ujj~u#k=vFFX<rn1kFI54<ur1nlPr;C74@zIdEzUUf$wb28Ys{tP#6|(z >zxu~b>qR*$4(BDsI|LN)ZUtsk2vw2y1@753!*0g?3y=_rz5CYCT=m-0-SG})KY<c8& >zejjxj13#HGq#KNv{h*4KJ<g?QRq(l6`|A~V^Mxv!LcvaRJ)~>Pph3!1zJ8$Iu8t?J >z=1zXxA93}{fIne$LL$R&!UCB}pa4t}wr12If06I9c}5_$7EDj@8FO*`g=aZY^yGqi >zU9I)Lu#C&=x15|ML2R~i0yoSXH`}*}pjUFwlh>o=t573G6$2L?DKVZdvo81uzk=UB >zjnFfESG=f$GqW0XVDzIf3CNK;HZ2qvCy_A?Q~BFf^i;BEDLBii{0QE6#2E-#^JZ>K >zTHvDmJ`}|gfP)=}V$|FDlygQ?Ohbva+CGAdMmn_+zqEvSwB~BlX<cZ-s^7vEAMtUb >zatL;yD}C-Ir^fB`^rxeO+eiHk^{n$l>>Ar*TbMQP(-NKE)gxTyubr2&NFr-#PJQ+P >zH)_i#dj$Masu)>?$v72#`BMj<&^pw*tM&t_?dGGaF9vE7w9iDpbb37esXO~Tl5LB8 >zHd`gn?5sM@R*u7NJbifOu+drGr+q)_p1oA~VLTH4`QXJ+<K+@YpRLsXqYt0GSetRY >z^XGVetbD(c3n5FS{z8(s(^>6SOP0=JZbtEa`YRo|8>3$%R?04}!;j!76Ywu9e63WZ >z{mG$wUZr1a&o{h_Upp$!(_uI0{@J{1X;87mj%yB%hN@P($m=N<*tXSeW?ByGT%vJE >zX?kiGLxzo)`}4dF^ik2HuBLwnPTNj@P)g(r^%<qGc&eNWP4==FW+l$KNP}I#!;d4u >zJ0;Ls9%MgW#u^XFL&}EFo1K)%UJ%Hp(&UaHWn-xTWd+yxa#BxG&Wj4Zc>s2m2H7PB >zO`MVPLc)hPFy`lZ@O@M`n`+!~KswIYybmvbUIMnnx@Aicy-G4WX|mx+nQ#f1ijut! >zv>=tqgbU=W@Q^}@9QF$=Rsd!KekD>C&>AmLA;~=0Ellv%Bhc3GkUMx7EdVP2Rc5CE >z>_UUSa|C-KL!)WXl0)u*y9NM~+r&}<0yz>MT;%6nh*TJpz*pS1UBd%1oQanJs#69# >zE{0yCAsz{&Q<1WdjvUYD9p5o<oIZbi-uT4pyrgWrOd=9eJ8<Hv)X5cfL~PW_HFfD< >zk74V(rHcW15|ex3I_#<#1nh&#ujMN8AsJLUJC`0Qk*!7ok73CI*`pYS!A24TFg1%M >zZ~(hD=Yu^Y3~OM$k_z;Pz|Yq)fmQY`n^<ImxoZ~d-I~1TC<`zU{N35XT=suF>8R^f >zs%&fsCy_5ZGt5a}lcnME?jT_@nE+2JV=<a{0>UL>xU4k<hs)h2kt$l^^7!D>?)m#A >z#nHL>X9;pOOZj!Uf~KT`mMnvLf4N!!9HmJMZRNH~AbEJ$6c3TjL+qwP-mN5E6QA&~ >zMkECzTzRsvfZXCuL9RTRd>%BJC-;~K&!EcI<K<kUwnPJZm{=xSB2y-i-677%qawcL >z61R0A?$Z?Bi(%f5pbQ!`Um$x+0<V@p{}m`GZuCM-B#_HuxgaFuAr+GONait879eBk >z00l>r>#u+Ua#<`5bV@9@Pb_mUm{HA>uBO7zQ=ylUG5|exUM#JShgz*lnc?A&XeXaZ >zz&oh!kC5`b2I_JL1S^rL7b7NU(8f(^0TRR(T1uouMqePE!GqBD$ZAx=cZs(Ga$P<( >zWB;bIoiw>VHEAhz_~j^lfT~=OAUeN+vn5hKG-!dnTo8cC^1y&RsOO+C$b((v!Oln3 >z-Qy`t&=fu9%ZMiByLd41fpU)<<vu^lRTDKX2w+EeFk#dg%tM&<16VOJIs#e|vqwJW >zP(?;vMZ#=F=%&g89+in3QI%O$a(B8bkN>Q6L4pp_fX`3X_W|@ga&zGmXz@=-JF-eG >zpz4A^hM%0o6jvP)@7m;e_QDOh{k*e5g0t;E&vtB)=}NBdZLRKqUwv{@jp!$2D7of5 >z4GvNVMGw@B@u1?L;0GSH^-;C6t+li*vM-?LE@IBT-U5AlLw2e4-17T#gPYE;n1uTA >z<a8zApIe~6pPZ*F)dk?|E@ad}Z`R5Gsv|vtJ)+72My&}AQbv>6B7oSuGA*k+7>R_W >z=2A~l<+f3!&hucQNRT5EY%2lnph@Aoz*i;EvMIUyn~VUCZBU|c1P>|Wfi8;W`vBh+ >zZ)hu)tqOp5Y)JlNWzP&)bP%he#j=G+Xdx2*hzCy{I5bQ}Jf@Zi#o&EZh>uvhn+LH% >zf&%aWI*Yi7Y}uAejhvBty9%)o!1Kkx5d@`w133~6>LuV8Q_`9Q=v|()y+Aq$4+)(? >z6e6WesNf?Kdsm(`Rt$b7kqZ^e##5#0>-L?eNndg?HQ{Y?6oaxVcJKcR+E0Z%Dg)UL >zXhiiO-T|U5RX#{^=7tzfM><*Lp1CMMJeMf^5Z7vl$m~YKUh)uVYcL53s}>`Q{lU-i >z3fFmZc7bw^A##ZlS&~5d!m&#iX`stbFI{zlcQ{=pWL!Q{ce($jj4n-j2UU7-V{aRs >z);9JOd|ZsU_p5DcZ<R3*_DlfZ)Ybm{m(slHm9kt%-7~>09anDsyz<2fv6@o!V=u%@ >z5b)>M)kZN)TB~JiF17fp9Be|MPz_V8wonO`2h7q?q+BTt;W*!cG3zu)?ZjmxOeZ=m >z`(*Z0Wz{86`)uhO0>qZSYumieZk0G#V7hcGLH4w+VqTZmv#woQ-2tK9yQ{ks#nK5= >z-H}>7y>2}T&u}hvJ!v0%XlB<lQ?D1+Y44fOK8S?eMZ&sQU|z6}+Ng8;07y?FcT_AB >zk1wM0AhnO6JFfdi^AMF{**9W@9~E@3=RdN!o0u1l>E1&HGsW<G8$9?h588f4bml1R >z9#8(Hxazp%%6^`lBhRC5P0mLmBjFevyL-Z))RIlquB5ql^AM*5vivM?su-&N9b8J| >z7gM3f2f6^*%8cj~E`bhX&Lzyj_5+qF4P-3_Wgy{cp`hoTup3DDPP}a64U(@v3_y@2 >zkKm8+Mf(MyLf~7&9}dWX=Ys0W27G-akl6WvcL8$AcsZe1HW?{<gbJ5>06!^^iswP@ >zQh}3S;f?@;@TVQ8A*%4uJ{tV01TidtL>&g}k@rMWrK=?H8xmNnSS3*c@!bP~v<)DZ >z2Wl}Ch>cJ+M+kV;Ck4W5VrUtlTuWpy8|ET|b+B=b(m^Vun`&tZh~iW*8$WmhIYIFL >zr%W)otq9q9O_m%c?HZ=%o+A^v2a!mV^FInezC(UF?#EMy`F!xJ!QqI0=qW06CQLpq >zOfI2cI;m}>M^R?q`iLRsZf4ruthT#3&d_Md-CLNxYdk7DXEeWmG+R7c7?qxDIJSj2 >zR^jbg)jw9dK30#0HHM8}3{w~ujJMBWTsBQ~dQbEeO+*EQ@6rM<&QA=OPY&hCjucHM >zi(zZl;2k{ZJ0!F+YDX0nKA2-xxSZ61JP|2?57IPCk(&p_aHR)wKN3h!@ajkBQ<!48 >zdK#RGgwQ3jhw!jiiQJ(LG~~J%ks1KCrb!<ZK#$YpvgcFH9{aV@<jN#qOoxmuPmL{r >z?ZeArl6C=Bc)JA32pYVDm#-4YF?p~mV&c=MpnbXgLlVQM{fJPi%yFKaHd4+42`;7~ >z#;8zT6s$v>c{&618Z8&e0}(6bJgUH_9)PN;FhIR+#3S%)kWZ5PflooK_hy3<8Ftjf >zGXZp{Th?Ypu2qa!@5=H*9;`+}=}}5Y@z6tJ&`}4aAtm`+^A(4HcQ29g0`Bl4<p=AM >z_H5ED704arwdYC7?%?6s)E@i|SlFjWQ5G{m=U2jWc%ic#>H5sR<C<m2#|Qt&9r}YX >zDSDi}QTKR<z@VN7&$XD{6hF&tpDp?{%X=>OGYDa}Q+RnkX&3Qj?Vl%?1+uYX*|sx~ >z=HjQZ_=(8?`D!t`<G9T8)3V*ipY4=DZr*!#TYgUDGl!it9=kOcE}pBBeg44bd0ocy >zC%2wIKMr}R{h}2A;z!uN59Kead9YIPi+DclKIY}gke5GdU;cjn^1=8a_Fwq_Ii>Iy >z^P7PkmWT!Qh@OnPN6`bByYP=mQ6q%{?E7H3RvxS#4^uuO7f*u>5+@d~$uWCnk_8Cy >zlNYUc=)MCo#hA0Lc-S8_e2NOsj%p0$f$d!H0UUcQ5|*t2(~xWm5X*T8z*3b^j}3|J >z#x+Dc{;YWj*as=wh*x+<H0;#|OS7pRRGI0+@L+fCYTlLNgV5i5pzQ+4PAaI72S;Ml >z5(P4m5*XmR`U#-b5<)2+xY$wy=+G@R=pj5vmlk#?cVtW;n<0?1=IIn-44xtNE0LmD >z-bkbvyag#+h=;_AWtP$M;bPbz9vXxM&RCeymyTU{@E+ox3z+R{>v`5TvfBfpM!ImO >zSUM6QNX3kJBm|I4t*Fw`$o-FrmoM;QYopXWR%9A~g8L-UCLNjP+j1>eKD6n;ZxFY+ >z+k8xp`IyN2$gtGEr32Y5fe5!R?}@t7jnq%SvAo&(%YB_s_c!pL9-a8~<b{rhSeDU? >z7<$C}Mfv=;<nz(G&&z)ypB4VSE;$7N$1NR~Dv@$Qynlbc_;+JFL~4gb=A@*yPI7HP >zqOjrANRw8M{PHS#{yee{{qL6}n^qD9@}s^hl~F6hxhq>GGQ~(pykw;h`SmLCtHY_U >zPFMZ6ZG0uYlyNyJ>$)Mm^ZcCW{nbhu*aI)?zZDv||J(lDZ+>^ag`by++#wsi0d*08 >zT<Z2k(;(Mqz}0aAV94&?gv=1F^QT@-@NJG<T7OcG8>`at`L$Z59P4p0eM})JzjQIA >zT$RLW<3F-^dQHiqIZWfh@}nxW>)y#M<x9H?fs*>yXAgh!+u&&pr>JIs(|2!hvUO|n >zv^NjEy7LA|wN=@|t7@m;;`&<Ir@dD^&N#`#vJ=LeLxVsTTJ~=qc6w`nE>HGvo~cr{ >z5+Tkie(>Xa>^uwJvhvQe-N)}7dhFrSRBP%4$LCUMs}B#ezeoGVmx~W;;$B{g*HUg4 >z*QzAHT-OZNpK2%Trd;@Su!(%y^~mS6kM_+TXN=1}Q#`(!Pn}jbiCCZYZ=S3U=r|n? >zS4-Y?&Pp{R$J6fJ)61CSC6C538g^Yzuo{WeSTTCQcj-`)hfZI(TW<!+o(9G-SeHD^ >zv6zMe%W+((>FM7<(R#v@1kLimn|j=Yy>t(wvuP;{a<y5PHr`%Db8f`*8%jJ=TAR-m >zq+D`pzF~TKOYgXmmS9NlveGrNe_^}ni-OcEH$RW3UcLPnmL@RxMKJF$F6bTX2)I<* >zc3R6JIhKoAoNea*FK3GPcJZ;FNeFpeK_c@%oiZ>Q@Ns;RBkfCAEOPPP^0p?sQRV%m >z*7Q@`I-gzXOB+x=<@{9~aBABR5dka=c>rwxYhK!7kO#HoFO<8^xF-~<Izgh@o86wo >zvaK(fyvnm$35h-xk)E$#6$CWNEB$8h^$L(Mpq?K0AB3u>Hd<e(e|t2c+%qQGsM6=y >zjfCn%e~m@<mgfA}Gx5P5`e$(tqje19Ci(aR$_f6)Jk#KWdt6nLLu)+W??qO_naG|k >z@Ax5amljyx-$I(oB5#@`l$pEXnt40@O<u8d&&@8D5EvdqV<^idY{}X&jW=a+C%CVx >z!kSSH#byUkjTJ^uac_zU{w)pVyPfjiobiFZPdJ79hY-hxyucZiMUh*Na-2=`4T?4& >zXl=+dt5~W#9hq`8zL1hIX24B{{j4tt6}3bc;*>QEPKSt&zO9OJGI@0dcY5@7jpqpD >zLWPQD(kq@@+ilm|rh4H`Wu8{|G9UV$deR`{=V9N?4xGRzol=Q9^Nk<8k|h0DC$l() >zMe@`zD3If9i=k`tf-3eT)_=O7nG#^K$R>2X*_e5jDAK+@m->&-k>`h%fdj+)ZTpWG >zQLAqrN9Mjn_LfETXdEk4<V4R#a}BS&DvnavvRG2&xIL~Sf_&8Lbz-{pjbhWlgePxo >z-~M0X^yn$$9NAyR(cHgHs-DjmluFmgay7E{t$z1XLLO>9?hghKEDL!2*3hRj4v6bQ >zpY(Tp)^ka-<L#doYK44}`HX<O4bvi%igU$Ae1R;Z<B?ump=JY*iJPlO7ALu4M1p*R >z-Qvj`?t>`*sUiw%5zbt4wE)ymUtsz7(5$N+V=AA>x}si-BIyB@;0FR@l&<64^h?AX >z^OZK)XvmP#X$i|09E(Wgl41TEJPx*hQLQq|)z<S1+x)d2P`N@e*7M7cagJ32sx(!a >z#d#TNi}KstNoxKb`BtlS^7q__F~4~EA?w)9r+SBw=kQ$5oM>Prct|sbn&;kTiYQDP >zv5m>d*Pq0y_bri47=DGMumzOYC>dKJ;TnKrG_TJN8u?F+Q|z#tg%CHL0%U#!(1=va >zT~J&^=55W1fg5Itupekl$D(L>Wfn;*VX7!-vR=U@L}WcqWuA#|L`HI5bUUdm|0X@< >zyMPTD@uk3fI$HkfsGGrIDkm3+s~lPr={R(X)Oz%kj;t{dm3XGTw^W`}*pM0M3)>rP >zt#TO?qv1PMwBd>?&G%(3VwFT?kx?DU3;!F@j#yWGDPp3)_Y($2jQXuh{%L&$m9*^K >z{!5X^FlfRmwz|8yVPVH1c?KrQ9^NUZ%g%u>;5?E&123IElggJezZ=DKZTqBJ=}tx; >zelig~*?<HJqp+uQCy5k&^`lEewvUnboDr|ovr!_0&Z?qa%UA^K=UZ*^6kECcYt8$x >z#H}wi?jN1`dd{rR4J#7gH%CXS0E+3<-cm8!VYObdHtBL;FEB2`B94X(q7ym_T&JaK >z*hyrC1M^p~P4z0LxI?CYsca|n7}R56-@fZ`VSHeN{GO0Ooe#)@c;`lCuhAigMa7bk >zBB1}Zx`kp{LM@==U{!q9hK&F6xE9Wfioja><^pQ|-mqvR<{Cx5fyT02-G|7=xu`p3 >z6nIZ!<^MsuD4xyjCVR&y_goS}Zi<V%ofqM|lK#a5RrWS^jf#b+VSP76j%8qjW-Vb5 >zb0X-hU9K%6Wqt6TX9m|WFg+`;mx4>kC~$IKL}tu}S}R!RN3Jdc<x<1irzLq?!WvYw >zM_tkTI~YFe^p?>lF8Z2Z3QSoG3Z+TI+92V%ZE1CIz*p7zD=yfAUQj+WO4f={EGG90 >z)9eWoCZ1D>C7(vM)ZQUY@|U8Wm==ZNUXiUxKzW|>&-Kgh;Ni@WIrN+{WMe%3%E7D1 >z=kIm&ovH>t8$1=T?XuMS7Y(l-9kedAPGj8qtnHffF7zc4ttb5b>EDym&hsEEBVjkn >zMMrae9<qy|s+vw#?{A5IF;fTDRrtcSDlKdn#txe)xEe&DUuisE8;Kpw&=!gFaMN{n >z+jIBxe&Ap0>1tGXy?ADQZoM#4h4CVIq_g4%`tIH~jB?Dm1^D>npxxCQ_x9_MYu<&u >z+xqT?a?W?#I+<_?c}K6x1cu+Baf`Eyxc5PMk6rVlevbEYl=3iYXtKhZiw7pg8M8vg >z2fVyQg9Z5`CPv<!f?~;w2E^NmVQbGSu0#L4Od>JP{Iobf+TfLHk<Z4E#tB{?0cZ>J >zSrdWZo@G;sTTmU68D$;CA`kO=C=k|^*A$+~%+Z&R<UUjTK;t;nAx2q8g<6-yz;FJE >z*yTQGxwoSL=z&wd(Cg|@GR28U+o<HplU3Zl6bCIGetRfMr1Sz`VBNKVh(}QzKI8K! >zaaiynl&86`ZGKQ#45B^vn8PK%&;IB}#fxhc&AsC5H`(>-(`^*^1AHE}rU4qTHi#qp >z<!zf=*?a>Ph50PVLuJ+@`hHRD{S`Up)1oao{exPNqu}aCF{-s|6r+msc_CoNN;Fqy >z+x?!REd-ViZ_C+gM(Ng8huItFe&0w6VG#Ii+gSz~$J{{Af|^n}p(v)`5-ZG|b1_@G >zwee<*z^U!wO=lE?;?C5WWeT+V@c2HjUWOl+6&cdklilae+j{d_9|poYxW=(xW0<&u >z?npZeLm3#p_Ml5YbwF|Cpz~;%^Y{cOE`&L0X7kTiXCOrI#r@JlIKX8!%t-gmR^Qq? >zUr8F3o_o0MMJh9mFM9`ad%^7XtIO=yp|_)wZoeqF{T>ef_<Q@OSGV0I+kp;+727-b >zS<p8#ruQiN$20I+A$w1f%&%*AQpWH2kFxOq(B%%|By$MvEPnM3(kRQzolS8czJz1h >zd}Ic3nYcCPF-V>*pA|jIFi2wP@fn_LoDH{LmTxazjhpM#!tp0Cg5BA+fcKVDNg=Se >zEio|ebgDbke3YR*$~6DQwBZ#;&o?&g1?(tR8=>2o&nCDtiAk&kNna8qPp3{uMKQfY >zz_t@i*IriSQ@TnBGjf)V;?fmi%%ml@*DO2Cow1lYq)lM|)wrOyBn6#gDU9YCudy;9 >z9PLn+I-hgIJ#W`qZon+V%{^})ipiI>A6~l~p2Z@qF>MK_JgIj92h5&!$DJ=F#upvR >zt^WjL*sk&Im*`=m3}+l0H_Hs2Z+6ce^BSmggfO+T82gC*d)BHl6>s8kOx3e2(;Mu- >zESA$Kvu>FK0CF39dO4Ah0c}1rX<&d%00&Tp1N)_ksl$P}u6vq>J#ZYe(P4c)!%H&k >zwFZtZ%H4_|F>oJ=PaBEP8rjYpQN`W17;tm^+LT^X=@vH}h`M_K?UfmLcV~#~ooWtk >zR_bWe&g?XBPR{t=`JE@{*y_kpSByK8;?DMFx=qppAsp{q_k443L6>_GniHJNQg7j$ >zLX4H>ure{ld@eI2WGwuE2fy6oY!Rn=l2tP|X13&UZ;at*d)|JH-rzjmwA|^OG;W(U >z?#mr-Z5#LQ9akM4Z!u@8hA=%_=)Sx=Zm9pT(yp)xm!yg7EcqM#VBgTrF1!9MD3%eI >zwV?}_t~lKm*}{rX;!wHF9U(HkTj{rNFm?INT?7V+z;RvTIA<|El2{f5*6|N?fNFCc >zE$(k+`i$n<t$D>9V`uW^-22%2I97BBLmtIWByiICEQ`^*N;pnDs-)TMe8N%qQ>54S >z_u!Lz8MogvgZZ2Q6l-_X^}tz95-M*rjA`4;jOmpXCFfSWXQ=n)ZVh1vwy=CgnY&PI >zG*9T{F2#EazQdm)Co%Q2=#eOP?l@B?30$4Uz(ida6w0c@IZ01AQAzB?Q6_3rk%|`Q >z!%}V>pB1vkKJ=m9IfS!=z&W(WiOAyX5?HbBoSgusyT&%mVpI6^4ZSS3b}utHiB3&o >z>a9u1nXv&!GcE+AY1c{{We4C`>b*>SHnXdUY071iX?+0%FzlWTd{~^Y#v(w#n`^<y >zcD560N=Y8966B|L$Paa|Ny7)Mb!!v)(NxR(DP8#oSc?bxJ`W7{J@CwWfGcL0>=T6u >z9_$!+5F&nHKK}rKe|K*Rur>^^b$w__4RAR0P&4<T124d-J0R`Z!)Oh*6M?Szl(j1h >zOg_$Z@tJnrH@#CE<nagWsm+e;o%Vh{?OV&T;T1)5S(|~fw4ZEqaVOCoP)i@}W~268 >z2nrnrywXRzm*`HafLA)>OPq-ckxlp`lgJKEzA&?~Lokzy?{916c$hM*s8=Gg*wk6} >zZX6SXV(HK4M*y<w=y_rb)2o+72w?&kD<%t6;PjutXotG#Nnm^7=r(*-7?<ss#l)jK >z2HNQT`>rG`u|IuaMlZ=0r82jzv2lW#m|5ml6w{K+(8*%#g>bfi;J7a_EM}SJT;}vw >zz9EXa4bF;2af0V>|5@Z8M9Dl4VMUJ09QZ>w&k{R?&{fukJqetbe5U;<-IL2S4q;gF >z=~gJ2J^2i>q!Q`Qpz>j@$*iE!cA|T|9H2H&fcl>^^F!FSYasqlW;%qEfRp`nocV5o >zwcVYiI>Aanv39yQxn(tN#Ex<Zv*5~hmhK0p-GF^6oFy+fLvo)9O5#M$UUMU`9Qe%f >zYn@u7xiOx@d-xp3dEWJHGB<0V-MsZoZ<d`La@#%$IGm&hd`v|4VMCu7vAj0>B<ZcJ >zu(1na6T@@2LW@l1=fWgm;(MSe!|<)P&m*%K^`Xz5lJK)<!k_MweKs8aT$Ssv1~9kJ >zi~mQJ?jT0Ixy5u{VuvrW+PN=C{1+c?u|D2=@#)hG<0J;2Pmj3CcH}cil1fGDOJdzc >z1zO~qPyH^`4JS<V?|U!*6zgtib2jPBgSO9uBj#mKaOBiBL!0Nf3+8<W<{_Ouq}fgP >zpx_+ng5nj{hSK&06<>yG`a&ChL6;z%^B$zP%-DXGvzyB_y2N^1&Df1%%RTbf+{X05 >zu^r}z?OW)oEmAqhn2)zIcP6oX0M~PrNnK-yK&01Nq=)%*H1Tx;j%meb`7be0^Q}8^ >z#ZCY(oW(Zbf>$&+He7~93q$q5*iJ$oEs1%RWSCyS4DS^a2;;<F_K$l^>nzq*fS1l< >zJO7pDxHBC#EqcwrB(*RBJ(}3d2n=EUDqt!TJ9>|TZf|8}8{L)CWD%3PxUCEu%sZRZ >z4oVi=evN67#PG@j@JY~IEz56|iHFSXO=6R>7@Bo0xTpf6J9F#&2ZAY^Ix4-9^BNxh >z8w7^4UDue2Nx)NE6*j31Y|BGTFwK@2)?B99ENCj9xsAY7q#2BSrN+Gn#hs9iKL@;N >znFT)ZN8#<eswr0jb8O<R=j>ZG$y@6zrV~$)VfpT$@4G{sQ(O29BR*Z5_&UBWF?%HO >z_}j#j>1<PCbp(zBNSUmJD9+&})7&JrnkCP=zJT7Pq8CdgZf^mq^t5bPd2n*Y;bgwi >zV-@7}UhCHf#*_UEz~{cdH{O&|pAK$tNNEaAX+HeHl1FWAPPsgi(*8E(s_e%oWNK#w >z_}WNQSH#DjggH}g>c3~JZ{B7w#i_S-z;|TRguc?E?Tl6h*||^B8>!ly^+E;!b`Ph6 >zqn<O>kTd>CFC4RG&3oy#Ateu<owDIe(`=?ZmY6mnYycG9G4R2Bjp@6EVMt)ajOXj# >zmKI!MDAv^)BuRmeJfVzo@M}yWfoa{#BLBy*=EXy<n1oh`j<US@B@`~hbyJ<aJHwp6 >zwWNTd7s|40nN%h){b!l(5Qge9`{S*AyIyui-3^O1hE)hdrv-E{MH&>rc1yYvh0Cj~ >z0-^VnP?nf9&-Z)zbWZ}yJc;$gd(i~N4hvZ!W-<JiSY{z~RMdH+EcOej{yjWyP!ii? >zRz~+1=z|8!XWml-&GrVYQ$E9F3H15E5?Y6~VU8~_L(wgI!%mJ%|GZ4c_R@7iB(gw> >zCD8kJN1~QRr_M^kc>nmWNst@#2fyi>xG#jI#7=64nl1&knMIjhF~BjjbQ$QEUvy3} >zb#+;evsbZJEBd=u4EL`XUuEKU>6%7zQhQg-U$QLzUD-0AfZzSm`aZ*E$5*?^uMS7H >z6Dt1`N;9jN6Rwi&Kd3~<LXs7eykm8%d#2(3)t&bfJn|yFUb4Jju9_~b?mA-ZXM8B& >zPFG;$H?^d1yH9;Ht@}3ck&d=xg>BHo|NZ8;_AN^Hd(7jVbDw0c>}6RJ+6^JVw<aTe >zjiUx<htazBYBQ8u=x(UIBWoO!S^frvAhn~9?dHzfMquc0ue$WgOeTNCtkJbw=*U^- >zK0&#!I}^zVZlFttwXp-ZtZ$~$-;dG}S#%8RY{aNk@K&}|8r$MSV+y~5e1jE&;`pHQ >zBBQ1OJ=)ftZs^XAZ(-zXfR?-&d4TBe&Q=DH+1wX<AbH8|EMq>yl+WI=#yFhCG3U}P >z0Pi{Lz6qDTHH3-b(zk|ilKD(5j=cxPwrcs0g|-~H6CK61LD7|35H8sqEAC5^Ub-bj >zratS6N=q&_sUdcjy{nh06hg;ta=JA!pPEIt%DU*>0$g$5i5Sf-_~@OBD~;V*0{AP_ >zPcmCPDqZUJHi}I<jUMte_PBlfpq%bkiO;BDZCQzXeBJL9`ORMC4}KL`;}kp1AD^F< >z>tv|aCVl-7+(^kTS#<{nBkggQ&viprVs{pAK6*3UY}&+!3)O!c=i&b`u*tW2yz9n_ >z-e949<gvh?XY?Po2UH*K`tay|(6yAuJ@MIxOlAZ=uTFe=@2CH?O2y0H;_~S?|M1dc >z4;XkHNN}qQG(K(qvot=qH#z^DcdO0i`;~|9cMi>-Hubvb7!dP(kFvo?ZT!Qx2ow9% >z=}OJ;znNo$Kkh$PG)#$e3i|M*l9=5*H>-4Mwtah$e<13?<(ZD~^PkH@tPSp8+n@Yk >z^5*x&iME8JAG&@9ZnQt<V6*+dIa%X(R_@PMG7|AzkRFs$S5)%Q6k)jQfV)<ZU5AHi >zA&^3}e*`{FF?gY^Gy+Xs{x*&YZR_+p)?sIJ7jq})fxE?<ri1r1zgIbm)Gr$x7{Yc? >z4h-S~GD}CKeO60H&@a6^J+P_EU%V8zzV`D#4^P^-8(wS67`1&C<`2-Ntd)D(q)cm1 >zqwt;cq=og-QY=ls2~(P^iLAzH5`Zq|JUwuodi=hB_(`_uf!%mU_ssA#_TX)lZD >zRqD9I^P)~y#o?jokS)*BI>*e<Px`s)KO%m+XUgn4?TtRZzH-lrIVmA2XRIFZu_|5n >zA5{rJ`+L|t+h{sHWD#Hv<RZ5szKj@m&mC~py1stE6=6up@X|@0E*-Nw^IE*qf|Mp6 >z*4v+k9Mtbn@prK<?msZ8@o>3g%yDeFLxjGT<2QjiV?OJtmm1c=VyW!q{x5dAXx@%^ >z;F@o2*`QZwDa!KEbY1>(Pt&3Kw7b&Q?;)Nlkxhyu<&!lTai_h$Pfe5^4O6;{4+{48 >zst7&&GoBw?aWvs<s>7nuf6>!-vRjwNE}oCvWQwcj==~QxEtwiLd0yT%tT;SbN>;8u >z{42SovEo?DrOQ3PQrfP~980~@XSA5=AXIq9>KHYhXuBr%^lI;(O;D1*{(@m<dE@Or >zr$68Pv~f<+M|b5xs@3gZD--i~@|x_&b&r>y_R<dRw;r>*<=uH#uf6HOsItjxf9}QX >zwgY3vXS}}*sRL8*ohrp?N}hKAu9uFOJnN?sq47DL6wTPCj&alx0~>eEj`A;LmBDf) >zFVnL1(!0v3{SSO>uB)uL8L{0Cj9O*~`n&74qQ8#mA2lfTn0+=0NVa}y9c~&)`}9>@ >z2rh;rl7iI!7^SHYH)A*JLa)F@wY#}KD5H)7_q2u0W$qLmCB+htxoD;CUKgzsJXWN4 >z10tL2idXrTA8Vkm{)jN71k971*8%Z#;DJuWR6*kUqG~tFt-_|1Yt^=(_69ei;hP~- >zy3rOTt<5K!-2Q@4h%k|l<dc=o@$v(gV^EiqT=W3C)O;EU7(zrco>K+eDGN|PfDQeJ >zI82$2(Z09lqH0OH>a)6l%<C0d+1=f8pYEI4WUKul@a|1gT7#OP3}}>c1YT?b+7BPL >z%Qf!b*M*U~`*BEVX2AK~^Jv8fjpx1z918;}ddL^jFC9+%6_SS*a?ZHF{Ppz5?X`PX >zPyDDJRKJ90|NV0nCS?wilIId-Y{YbAIY!2UOOihzW@1#ZP#-Q?wNuQ-mt*BM*n`^w >z>(!EHUCd6PhOi0A%K1xVrHKVgW3pdCV3(d+Vm+`<uUHgg(5P{ZCT*{<umNh!ibcO8 >zu<hooPh~H^`X62TcR?Zf>9EnFm=lEjkpD1=visL{jwP_$TNOe^lS|ny{dYs6N68wC >zNRIX#ka<Oo*e)WuQRa>ECcOj7oKlw2Toe?2+yxt9UAUtw8VG1|mSc{v$&(9;7qW&3 >zYNZ?!cUi&U6UFE+p6d!;+<duZSl0m$g*xb?QnSFig*2u^(}KdKvo1P+)$>B;laPJf >z5R7GMUZ}IaMhAqfpYB(%wfCyRp(PjWG_KWTIT~4Zd{FBjUfynTrqV5l8#+O;U>ju- >zQ9Me~+Dn6#%~H?hLtM=Yc(Utg@<lpii0OTVyQ4n}Y`ejC*&@midUKZ$o#sM4&FH}p >z$v1^F*ahWa2_vj#5#g~kh-s#>3<1|x)qLcp%A-6JN`q>(c*%(H!H<_tYKpZt@eCS& >zKuxPhTHg|SryhG)^Ok-wV@;aM-b??eZQt6L<b#b-gtvH}xpZD&8myZEyK+pmEudvE >zWa8LN*Ol(}{oCBa-tB$d_x8}$Ba&2e%|Nd3pL#)_&vJ~`@7Yn`p3Wd%pi1x7yzR7^ >zYjqaPB#+d+)8`fx+xC%6dNiK_Hm&kilxSbJRKVwz9@ugBA?z>Y+=AMV-m&oXgZtJB >zmVB?vKRPb7?Cg8~`NR*%VlDWnR&>PbrOI1qZT1E$^I#roC>jC8GUffJ*xTb4<pNsh >z2_mYTsnsGhd2~>fL(L;iM#FZ5h~%4T>}S4u&<jETDhBh|K`bmR2>;T$0hyOzpf6Y2 >zGK5W;l2w(7L3GzG>tCW3SWiZ)UP}Vo23Qw(=3vhR^@<FA74x7&bjv~h5IRK>E+>z* >zoGuA8C_pmRSEFaO2BNau`P}fpMwOsm7X!<Te4i!B1zSLm_?vsdHBN8yHpp`g4lU0S >zoT5IwL^k4B-zJnVs+>d(T2_>DO(pi5o$gI31_u^xPs2i7a4w2Yeg!`3izMqTk$uS& >z*RxAcIn|w9-c03^+OWvS1XtAdjhjW2%?l7OVE_LqlD%cQK`|Tm0Kt*4x3xLIfBz=t >zM+o0(-(S3cuw_fVJaGHPc5nYFUzaB1@b_Mc#~#++7HRq_ejrRUrkj0TFI@&kqAIVT >z`$OE?62m__4AmpyFArgl)xx5#>ZzT={Z|;pjd%S0WGa26>+<nWj&aqQ2j_dP17=#r >z{`$E%%JrL1KBZ?xM#J;?M{Xrf$>w~le)(56O9$*rW4_c=Xe7AmqCV5O??{W;b-lyZ >zS29YDh%AK2En_|<2hLopIc#<6=Va>bg7{S|G7(2s&iZ_?&MIap8TV_d?DlH&j&Mgr >zju7Rvo2xN|g>U7$D3#DS8`}(y!b5@bx9ProU+)I3N)%Z!LO2(?PLj#Vg}Rb7a!ByH >z$JoizOJ|6<Ns=jR(6~)1p<QH>GebbTD7_}CnY%d-kyYw;TdfW#sxZ1$T~wzBwCx6= >zO#=$EKKcl<-kcBy7Ip$`Wz&Fm4cTgR48JNumlLrR7pHYHs%Su`h^$>iv}y8^%ORP+ >zrr*6qG;=1aqlNn^B6JhUkQb$~KA;^&)}xT*(gt+H$Xd%p#c9yC;b9pd6~89NP(p1G >zjHF?aQ?D1&S%gFg)eJ-yXrUee2$l=+fn=psqA_|9*Cf>B1;e{YW<^4|rUeba){Jv; >zYTIyeu3;*x3Nhsa@^d63!FluyQLadcVUev~lhtaZQpyLa>cZrUr2j37{MoJWYoG8} >z_sieIFV`PMUd$vLEa`6C5<$&Dn_w8J5)!J5s7fJY34yA1^U@p_oHu5<Mx@;jl1;(L >zy%0L)L_tcTptnW9|KhNodH6__ws^i14N~|JWrcRZu3?ZctfD4XX@&&BFPLnPR;duF >z1TU!mC8?!jq348~;|f8i>opqcH9MoNdKYX4u!BRSOViO-bJ04Vqjmo-C=SVEHTCpP >zkgf3z`Xf>Xo_dBh4-FF*jSerW<}?tC7PSoMCJhayoegH92J;?}#nTvL-bSPea@J-@ >zhyV)>`bm+hq(5C`eZYHMCK@jb;d29+q#z5{F2iz?Qqus~PJ~+(q5-xm%*A{?_h635 >z0^)C#2{4Q#ORxynFH%x*ap-b0igVG)5!o~eVKpLKUI=Ddge?~WpE`7TK#d}_G7xD1 >zZX#g9nY&nZ?b4VO+Ou5rSBDhJMYy6dxf-I;I>pc%sKyd0z9v}>?A6aCnwFCk)`{vW >zBwUk7BXa<1z6%*RXEP*H&m<zcNQMKj*jk}1i)c|U(n(uzDko2Vi`NLd7rZLmJhW-K >z<td6fvN>)*CXEOSlS(%d;vv51Gk~*8Hl^L&ov<O)qzo!f5+me=NvlNDwn4r5Dg5-H >zZr1=LQ)nJX61a+NoF8d6iR^}i@`3bu;ZyCn0ex>W##`i2<nj?6?{66&P$CRSAP4%! >z2SvmOr^lOTGIujBgq*&xr{PV^p<SUmq8r0+!e-ut>kQg2$4CBsqX|i{Q+XS0lz?g? >zZYCJTc^bv<eQPCtsxd9J&kWKx2PG9GAeWnyb)-@*8Kr&}rH;H!n|ZtM?c4P4Z}-c- >zqg|nA%xpSfYJAWs(U5pC^ZO%7i1Fc+L{(ZMCd)Xh!1$=bpq)49*d^m^9cFe9$xcO> >zW5YSVc=3dS-^ss;xe-Ei7n#02NUMgyu-Rx~8cDM}f&MWZ2NdK#Bhqsgq0LF(o(~u~ >zKV9f1n+J-FiiEh?J=$oYNexhD1~Rb_>K2hzSt7$4y4nS@-H=Gt4sd<xcERL=Wg+s7 >zR7aQ)=Pd%@Uo6YTHixX+f7h1fg3lBgH;M3vMe?tSsB)5g)F`H(j6*GAmc+_6A{`3J >z+<>X}d04ARhy*XnqJ;ngiZ>_e4!PmlK&6Msa%p5mico84KqgaU6DX1|lKTCI=yphC >z8c5de0&HcXAY5pcBSK}8)WXPC&Mr6ONy<1+L+5zyW%{1lon~McZQ^FBVv(k~kXuf| >zw7qr!52Bo<j>>G1)mBN4<sxhvNvY;N;54g6O&aA0mCXkoUjxdZXzGibJcX<Z=({Yk >z=31bB6WO8M1(in9HYXWPiu6?iG@68l-Y(8@g9e$RmWmIp3gk;RvX^g~wvAtEeDtCH >z?FXghl&gPJ1Sf<7wU5e}%XYqG{ob}~<c}SGm%C#w_sj@w*N3lP5g8dkZ=C&zX!>}w >z=VRZ<$Nrg*RU@F=A5!%tm+#099+pottC4!1PW&HRnl|LyCcD>s<b}{QX|EtiYP7(7 >z?5z3trDZKan$nWWWHWv8L0Vj}=-%69wdJ(?f78TjgSyD}DZNjMxsZoW`}!%Lrh`8{ >z(u>}owgEV$A`RB3*@{mwO`o3je0nzWX>P`%^=yh+ub*L)P<8(GmQT^<IXgd6$hb@q >zrcD#uEHp!t)t7|?^lR*-P-l{4={<-8lQ#Ennkpe_7YP-dNtSaYO~9;02OClSbpu8C >z&!bl(mThxDlx2|or)4!~a-S<1?fxV%CwJ~b(Y<Ms#&V(QxBIp^n?hJZeGFy#uux-i >zT(4XzHC(7FCp2k#rhpci&ih+n9viBV%`#n-CUYwcCNx<jOg~X)Rl#T>NTXbcTOClr >zOO(3kncFDW!bJd0Y|>9sC?{bdix_h$89AVmZ;+7Xt_mL1Ehn3bAF0iUYO8DrjnQNP >zBX%H+>Kl;dFg|K%p)NPZyj-M29BpwP)E%NPvxM41Bpq*&$)r%Ri)5@qZm1jIXr@2g >zvR}bfghWZg)W{$!n)G>KSDB1;$ID#2FOw*-D<>nDiHJC%4od=rMWGjII=LC}JG5Uz >zWLzBCxCtb0ERk3D!Ytu8|CX3-`qDOVwO#cK${VC~RcM<@)M)8Yek`Tp^+gLHl|!u6 >zQZr0w9qNtYs8bml=QHe@zGz<mqV+EceLq86j;uQ0p>zG2$?6wfxfP813U-5}XLUe- >z#{q+#B3<eMqYxXTR2$>#bYtd<7T3n)CEdh|G+-yPYg<A0ZrGSl*jPLR*wW689?+(* >zhG%lc?YE{ac`>*UiN)wca|3DG>s-<I0UTO-GTa57CPW49!>y0wiUyEL;YNYNz4~)- >zXCWFb(nme3K!cz=L9QwP{C)!(bs!sO4sJ~&si%?kn@AR@y@*MY%_`Z*m8MlBvZBz* >zbt?c7Ep0!joJKYoA}Q98wF8C7<pkv{wZLML);jUWD!>Sn)tp5(D$?*zBHNk;Tse93 >z`T({cbmJT`J&c6P6si;n^@=7mi^!IlBrO%P|D#Z2bCFt&2p9@chlp~oKbW<NVBPd3 >zSLR3!adY5;zRI9AAO-`}_&WXPItewm;idW-kky5VHj*Nkq>A#;vJ>f>ldyn&J54so >z9MG90e|8qa%b^JhB&9$SWR<uX8RpP`*zmPbYnr5HK(?fO3*7xJ=m;rzr!e@)A<a1H >zkitXyyl)PC`@JVg<hE~@<X?y0?e4I5ah(39JonA?^*5d6L&mG$9EMz?_KWmugcj(- >zF;?G|(IBO5hvOcKRjG%KSt8r0!@$wo&VePJ2dG`mKsF<}u_xtPPwHS#+U~a|vkvL+ >z00)<dEGO^ZI857oBt!QH7WYGUDN9XYoTb9Z4EPZicEmjH2R7}8X66x9HxXWCFst&% >z(aJN&?t`-X9CIcdkKd;sf3<P_#MdAC1lQc`T?mydLv$7c=wGt^W}W7uN%OZY_XT$E >zEm(t=O+o|KAb};)TP8bZilE$O`AH&lnWkGLQivnUvxKj@MAkKAgn`f?lZ2cks~1U) >zhJ#39Wc#@&)S4LT4M6s81iK|8l|%@IY??;4DH>Go7n;V2il0u(^^*yiWG(O@9zAH0 >zBQlsI+u`2p;N)8Gk}cPT3bsp%MGcB21DXb8n8AQa6WRK?(7K7N%M#(l6%lQVO>g(X >zCy6SP_jT<^D&~VGnL^bXlE$P+rDy>7QBIpAn=@cE{n>W3*+5q)KPfVA2~!9YVO0Ku >z(&Z;N$mW=EvwkvaXwx5Wk}id;fe@l8LZvQH;`<Tx9LAGBzqcaDN@+raUa!q6Ley(A >zfjZ=0BfMI&NkMjNt=1QfWg>Q!sL4B~StPQn`z3BacKOb+w)@B0Umm;i?@g8-Rshe| >zogB6<CnM1GPTTAdm%grm-^h?`v#7ovmndduuwia?@9Dl9jeR$-k|15b`{Z2kli4_L >zvN;97v>CT6L9O>en>>>Sb|s+7i9+2Rk=6RmEzUz;{o+XS@LhlTsQ!_6Bwc6vG^2mC >ztbeSrfBahi#4gZeC4KT?|GleH|9o`5|Jzx-gCSP_qhmlibzufMB&ELXj~3<6^udi? >z1|i!3tU!Zy>oM~Wa-F!jT<XaN5mxiZxarT+>wlgdR0`Zg5$wp0>E3$%;?Bz0!Ylo2 >z{^>hU6YKT<q^Q1|Xg0bGy0<p<*7aQE$-Nf}t{M6lcr#DL{d|}jbk0WqbKqW;_fKlA >zBh!~X55Aibr0uVGZ8BpxQA^oZQUf`F+arj)tW=!ekrY^Gc@Y%9r_5|ut#>I0{86=) >zD%c&mGO79P-Mx#+69>M*R+~c#b{)0MTnk8^EHbRt`<DN(`EJ9u)R^ukT_1NpPv}@d >zK)>pb)yG)*8}3!qpDyn`WOQ$=GyYz=ZLOP6Re9?~{!r=dnkQ;+A2b+fYqp!(T^Mgp >z*?1Pw{{GNM?}`H#VL`vT5@*Vk^n>lPyW++gHO(Aq2oIZr&gnI}xn4f}!TZdf3rdEe >z-<Lc~&9t2M{XXo25gvYnJh5k1QqMKIwA5f_^Q5Km6j`&isq8<=bVu`eEaGh1F@uY> >z$9|c#)K|>DYH3o49ye)WKoicmw23^;uJnVv%sZRNA1k{*)8LjjmO4Kc$F4qYym|+u >z)g~BJ3SCycd*Ek$WyIO4Hzj(O6KVgyWExSpujgs{#J=k<PQb66O^@(stPC5UZK&}- >zn{9dX{iQz3zE3xQTlVXbp~KFr(`NCCKjzC$ZT~I#*m%k>0s1;$w*h5PyRl~+_lmE_ >z7_HBDE#StT!ZwE(Rg=<ZV|YO`vr#O2%RTXDd>4Bc3!P=5<bURW2~zX${<v2>?}+zJ >zg@o-to63o>pRWp1KZGpiWBk`%opL^G@+RK|bku<7tYBhTNpXWF@O@^ono8Y|?O7}! >zt>EgRdzdZyTs@<)gsRX^zCJ&pnb1&h@IFMpP{(QZRpH54LR>!H7uuX}ruN?OZ1k0U >zqe`mm*y~eHzV8>gPBA~<ltsK<ias5;*b=K;?bd2m5poU}Q=lEA!MULSYxZ@4@i?@p >z%$CECtB6y8>Q}g(uud+rrfvm4HxMEBpZ1Tynibla9&0Ys1R|vs8<vNm7mCQ9PvWbB >zJ5jF`LIX77OUO>|V~c}ls^6T#odE7Cd09Uy57<RgJrfvk9Y+ZY4rd3=n5Nvaf9!Ku >zJ}%GdguH`VOtEV);FpFsK$Ba$zn9~hQLNDYLe<K!gHu73;YSue#g*tTb^kb<^FuzN >z3b!e}vD6OYfC32B!>C1bqbr2!q;!pVp4Tr4Dz4PSK_mVQV5TNiCHH8&)6IPQB(aWd >z^b`PMx5t;@Ya*mSxHUCDO=;`?%TB#2RI5(AmhI838X8sojI4P5#-mT^yk8^}AV|4w >zaseJhaKq_za0x1f={si!EkILDi*-_v{wzs*dj}V9w;;c93g>F<{*dck)1c@W0;JZ2 >z*X-Ns70&buF?t#K(U}V}u33XRps7ylv?ztVB{HD?^t-&4GBaN%W4C|dI=zloy+N2V >zSNp<nuhCN~Z6WFWqH-K2F{)*#L8BfTcTdY3B`?5ogq3nI;046RQCEYv_&jH4tU@9I >zq|6kvwudz+X5hejjTt2o&J9XFSt7K*VzI4rbjooE`1e^}{`Tbsh4dURg98~wDX+0| >zChj7un9}^rKUifTeQFyVz%j7X*SgDhQ2}C*0X$<B`z)a<D1+;Z){_UEN+n;#;@I-V >z&7+<Gs#@Q=WqJX66i3m8b#R<9%d#FVfF}I`&)FN-pmG5+s79VD^zRqa4=yplCVVb@ >z1k2P~o|g+!WoS<>C>O7RU_qlIPrDf9|7NZGW;t7y@W`^3q0LOfkY2DJ!aYz=xt1@N >zG4&ZfQZ%G`t@nQ@Y^?b!jfVt|ZyHu{e~v5qUC3R`I_A`kEQ;<1YLwJd&&%_UTUDDH >z4X4B??c&FoCgpqBq#sbIU5~?MP&@+~{Li#y#v1@Tv3n1TDtf2is3c4kM3(5OIHD4) >zPgPCEJAAF0G9R|Ptiei6I9UCB(nUu!->nrEtq|KQ<Me3E_sH#N?!hcq#T7w*#P<a? >zW)j7)hgRS#$$(@p4e4$y^71wN>jC&#g!(JsdIVY{TOm;<jMAd;um*TL*Ue0XXX!3S >zqwcSfEj|6@W?w{sb#YQq^$wP_ca-wpqa&tz3*$Ivkhu?#!}b5d!G*=B4MK)BO9XTh >zFmD5DwoGKL*}J_L)Q7q3vwF$}t^)_5_G==&@lB&~&W)<4xD->yHMyUG3lI+iSzgon >z)|Q$D#aq1;O}9W65zS=!v<NqgfC8{NEPUV6fXeqx-Q?vu$l3NG%sBxAhkm7)AL459 >z0H4nfUxXj;6>YXD?KyB_QN0Q^Y|}i&vKoqxX>1uW9-(nHY8I5*vxZGX0c>&;D0<hd >zaB~4|qjxx+B(iTI$z2KqT{qC%oa!#pFZfcR{~D`&Yu)94>;3;=uT_6qMi9-O+N?$^ >z{<Bb#a(&=w+-p!zd)A0q$}{P?4;9xB=E~F9p?Orh2IyU%&*~Mw&$@ZnD^As>AG%uo >z{L|qdeGA(AkB0iOBhaz8t|pabKSSmjPDb7SRy=5(a5?gCy6DdCO@iE10eAb{!oaCD >zSHlN9u04UEp?HqQwyFW5oNJ1@C11JKQU9lymdF&vd%ueBZ>Xsq{Zi7n@M;VA=&0*C >zl4eBrYoi@o#sjXbU?z*=EgnZnhyOjmzZ>?}cI)@e$+=Mmr~Qi3(i&i~?mO+j3z(P< >z@S^lCOtkF@ah_s#y;4w!(51k-_&}PzvRBBU@qC4R&~-i8_^ct5V;#l5nXxK6vV^!z >z*BA)%7{%BulC&@K{}FZX@k~AN|G>jGyJ2IP`{sT(a=+j2m$_fl=2BELl61GL5gL^{ >zZFHf~Nad1pzjZ?;q}rs?O{2?4w~ycXe1G4^@Atn4yPR`&y!U!PU#B84nu=E^y^KCw >zFEHGe1KyqIp;5Db#o;~<9MtS#(kjQi5cEOn#C~s6-CFO1I~t|yR|jSDm)IT@TiKw^ >zQJqC16OR!>$Y~xBe*&o4vkA1jDpI9$o$X}VxF@99P0@R%G_Z~=b<%ebvPLW#eZ+;u >zSGhyurs>KT1WJ{*!>2PvY==(*DDUtf%pS!K$Z3=x$9ih!zj&UMldSSu-@~K`T@*6M >zg=bC-$b|7}Di|Sfwx#L-YOM{XaZ5FwBGmkVVk$3@?n$({VcQ4WQelqBGF#T5Lz#$a >z^GAq2pEv6Bja7V$i+E$p8h10zE`K(-LMRlY1ptL)w;kV_U`KU^rfEoR&3C!&?@mbD >zIRn<7Q10g7Dku1T)kC0F_Cxa;y0sn6Z^y8N*c!5;?njKF@Z-?_PcOM>WueUv+~>LW >z&o52a-nIiQmQv%O!^;7qn?m%)HW5En1pgue{8HsF>zbKxX93vw3#d^jJB33obH6&9 >zeY-^Z<}8p2Hv1lRP5J}(7EA0$%IP2bGG!<s|KvUTCqHDfl)70g^Yd(`T+E}N*|=ZY >z#lO_aC<q?V8e!#l)vaDL$W5FYU_^Eb6qf~34*{ET@O}liDi|+MBdgSqWxa*cH%anC >zJQ+i>$|bxK(WjW-tO!(;18!8!W$98p`p7o(Y@v#`5ORlv{DG6H;40~+q2OeNcARW4 >z;7$o;ehJW5T=ziSPG4eM0eIyyNj6c4Fy)~dO<=iXgf|JcONbuJPxU6N4hdj$TtpI2 >z5kiJt;-Zr95~s;BH6%!qKynWb6O5O6$#v}HsoWvM0I6<@BvpZfzU0c0j1|(7(WN|_ >zA+qU@Z5oy2yHhw&4Hwf$0t3$K6@i>MUTT+6ZjA(u!olM3iYy+c9Vb64knG)-xdkv} >z%Oq(F5^5JuVGkZY-6-YE0|R_k(q440Kr)UC`sJ$W%~Ku6$!EWl3d5_^@X!;<=sQ^| >z{z9}a5A7|Gx<Z0g2&FHRAe|)OUwIh`VC8ik6;8$~bf7<S5t>=DM(eWQuR_*H^49B8 >zHwWad<MoQjm{(lM{dm>cspBy-@_NmvCALBaTJbkd_7azT%v>>lCY05IJ#DUpAS>0H >z!}j2nzmR%|gp4@>BBI3nvH&%(E<fI(`p8`ES%>4zL1)k>IO>u5dZ@<F84WD}G~Gal >z4dMV7OlcO657RW5)ik%j22-`1WVKKE;oc4O5yNz1XLZP7x?Ab9x>**e91BR^tlrU1 >zC4Lg7$U>pi!l1JAbImrxzDzVLTj~fGOwo~s;1#mTn4B!LFfy{2B%}LQ8kGqz7hF1m >zlWf4jG|9?*k<BF%5>A$h;wc4_72k5vmxQX&4!|sfCUO;S0(co23Kz<Ukx|Py#L#}s >z@>kjql1x!1Mpg*_)UI@dC%IoBQz2AJc;l%%2-}N0*Q$%E5J;w_%6JREOH-qi$=Eom >zt_B{uMw00zA&Z34fYB%#yA_8=7jcmr0=X%&RMDy&oQHNNkBH+TNe4Uunrx2{^8+{7 >zh{vkqVGtfkSBNU-!j`?gdR^Tkb|JUk4rs*#C!|p3Yzy)OPL@U1KZ!?Y3o!eIGUeOu >zjp3xSaS(g5+`l9RYauk3i+DSra&63EKUukvr*K3d-%FOLBx6n8e*f#*P%ePMc~WaQ >zM<22jV1Lp`n1|b)o_$3xesy|%U2!d6{o~`Cxj4y2lFRSwD*tZ(&o7nfLSG@f?c})? >z2*CT@+zrmYjKX`|B1v20F^(8#k8jf6Pd-Zv|JN@~wDjKnO@7Ze@4Gmk(>#^DoI6GM >z{1Z6Y6ZyU+7{7C8{my*yYs&F|JmB9E5g<to=<kvmhzOiKn?!Rv@dT5KeH--8hSNJs >z=?|7tN4ACZ6oq^gptrUi#DKm-zO54F4u-0H|Bo;=`W~i*54X7y?qU@|r$(F}jOg1I >z8F?=9dXD3*i&89rm@C~qgagQ5)D;}+Nee=mEL}>18{*~WaFW4XfILMMabey#X>}pm >zR#*1hy|^<Xw7pQpURWDwBo%OVv?^DsU7(PJM{D9yAGqjwQ*<d_4y4ak=PCT)%CghY >zb2vzvW@iIeYDE{jApk{fi_FE#C73{#Nm3AD=2Z&HfAB^wURw0Mra4t+QB3z`5>lMH >zBI_3X`lkF#xgv2MaSvJ69xr8jOM$x&V=<_8l#98UAy@tyQp)YEGLylsLpr$%mv}OK >zdg_*MW2t_!>{N^V7+$e~tm+JKvqFVs0n}eFUKfWp<jDq;mG)4l%DW1pgtC_e7)xDL >z9N=^cW%q&aCPoh~3-pc!<^L-{za&9vu4&iu(@GT5&sC(?|FF7Hv8U|^v@>^a-w&BP >z*0Mvndnf1i{ewg6;xiP5NKI<SbwS2!YZU6q{`IKLQ~8;C=>MEjzfTkge3s&^ER91j >z%|qEnc$qb>^!;5v%UsC~?g2^hoM^WkzeAoO|DeNeA);;_+-Z{=K+ZkzB=_XDL%R*r >zI=PTilKkSfJZ5EHiDFLYcbPPOsYJX?%^_qIS#`hLkz4nUyu!g`vyb-ub9DI7v8~tK >zf-t;XBTn8KFCBgX^YRdC`Ig+<TPJ=CPJC5NJ4r&#aUqMVQksA)O9B_+$i9b=6(sbU >z0OHJ*VF~3l^}(OI5%cr95glL!vV0g`(U9!CzOED|l(~X~s9V6tNJ{Fd@S9CYd$O!* >z8V2C00g3bk8JkF!eTWl((o_>gmfPUMvt8TXk}zZWciIKgG@ksTK#yl59jGT|%K~L= >zAor79!te@kA*>zvkP^w)2-RNVu^)hRD-M&$lX-}f&*dqo0}kemqk250uoVSOA<7xA >zv~*a}8Gq$Se%vpv0t7GVEP$$8IF50Z=JQZjc&em>z;#4%tC1%MEL%U+(mNu+M3I#Y >zFUgO%N2-t&J4tYUma+v;mc~;~B1=ten^(=1izB0~c}Sr49hwcx70CSBlndj@X7i+E >zg-Y#ssRjWAWe2#+2w7g4hF!T{^@Op~8LR3ua=XB;v1b*jXM>c^MaF)y7b*n{&+T@t >zNMES9HGDDG&gXbF`2-%DM3$W*iF10OXRE90e}cKOHTUvs+LUU;-D-OlY7v9F_gw29 >z2{BW4@afq4g@yW$Tu{>gaHcQzo^Rrw-};FXKf*=WW2NnRiboV6WJz4yX}#XY$CxIo >znkJ_s?=RuyYw$8haPon@Nl`*+3tp`{@8Z_ZUPRK7OM8D^I`b{?Q19iFHT5-kSyr!% >z|DYWwuBCdhg%@{4@h1=^M&;(?vPm%g*W$rA^ru~(sc#Yga$$RbE%jzOcal8d#s+gU >z=DPqcHd*qhN-iGT%TtaM!j56IZwV-}gKuVWcXIP}cL@<UNfi=!xpJ`vbs^FkCnZf0 >z0i?Pwaq6K!E>{TLaR6v=d;>YXR0z+B_0MdS73aY_1(-`@6_%KFFIU=k84)Fb5AjrA >z;uXfWMb5mJiXthT&91pAls4t5&XH9CG5SabEasBp9iG}OPqjfP7sr#`C6sBgmh9xF >z%;Mn7Ty#Z#VLVyo0|~mNUd$T8$=wkuZC;dJO9Q)$Jxk)ja6NFA5b7+DYUHWzryeRL >zE4W^eo!e&W!c*AAL%DNHEC$c5;Up8e=ubV^>13%euJjeRnR_^hDGnq{mi#4<zwe;1 >zCJ^^0_20eUFO0wQ{`sBt_`Bnqs9(SDzQYa3cPK{*2MUCUU2cQ_WCI?j)Cg=SGiAu= >z_E?+=a9&6Z^~gIrjyyOl>AN%%nlNg9VRYv)*^PmIP4d{@KbR|cm7G6_yrpsKG1V!a >zTGC)e!?ww2u7ahleCgmMFJY=>X{saPUeD5h%<1d=`wwm_PA5EAxUI0H`tZ#k6msO@ >z`X9*)sTl3?M_Xb$reQCp(Z`iA^)t_0G58&`22N;G;q22rkE3~y(K1iGUWEDoeKJ{_ >z(N2OF*QT2}L)CHR$pYwVKY9#@91<#a3P2S&`5`WL5wCbjfH=aFSEjx)!ec7PO1XHY >zE98zb9HvwlI8FisO7I<_;uy|Uc}L0+Pce!FP9(u;>2iT-s0$Zxo&SLca?(7RUYw!= >z8SIRM{t)aw%~i_T1n&R9!OPI34giOhNy6(qUX?D^Qe1r_b4dW{)Kapvkn-j#Op)bx >zwdQ(|fp5z(HTFB*b)^BLe3=Asy?|a6O5MTTKO?Mx@L)$=lL;5G&SLkM1(+eB+?L?6 >zsutNo6R)v_LtfFB4O~T+k`?2G$_;ph+&xIvK+}ex<uy)m4zFS=R2XQJY!@4j&zCwy >zlDx@Pa^Adj_S4AYY{iEBpmIDkm@Ibz{Z5N4Ve?PvF?C$gh^_3^`;8XlvA<K<Ns}#v >z(Zx448yBOmdXL|Xgx}b=(4O)%QC>;z!~8Yx<fuTu@1LWqY<Pw@TI7tDuE`rE1;Qe= >z!kf(KMU285`=4KqJ}>?Kefi#*A{n<Ifc<+Rwoct9>2}`ZixXV;)ZTA}kyoRx_#K}6 >z(`)r^{Jeopg`>Z9>yv8qjj^`g+2n{z#OwQ+M{+Y3+O!TXgACBS#~PAK7W;p0g{4Pz >z+8u;gy+`jMRws`->rBbLi|7v7@nd8Y-4fgCTWj$b_Vs<}1uwF?{PU+D7O%&gep{?m >zzB{KzFDtw4Uhez3tM(3^YDXVy`jluo^jiK7*PA#U)po}!{^{OlXDs{6!FD&&1M7{# >z)h`-;+xx7^;ml%PRha%H+juV~EKuId7(FUqqFU~Sy^E>x$%q~KHiqYQl?NCd^(^-{ >zrXQOgR;XvpdKhLfIwtLTPeK>8PcvqH@UI=$J!M@mWlYx9+p@me=RIe~wwI-Jc;o^Z >zN`Gx$>&&P|&$lWs^qD1#NjZn54iAM`?T!)oHqY<?)l;`ay=08)I>%8aDd?>L<@AWo >zDYFh+#R>iG2REjy>QxU;C{!1BPT(pXEhcbhv}cE9&jp72EBU3EPnh!VXL%|3XlLKk >z-|@uaz79DdD@r{cGjmTZwz$I^eNIYtNTwjc!hd@PX2VBm=e`+l-TH)%3ANh5#}85~ >zE`<f)l8=>*DHPsEduv(M5dk;7HT#}<A7<7|TH~$xxN7zN=vP_?S8naZ2mHA;hLcby >z<7h`Mn%C%V{=PgWcFzPEs<B^FvrxBvyMOl${-&P>o$=LEF5nNrQ{l{o^4FzK?P3== >zp2~$6$^-4~MznhZW8a*MHJ(YUym7z7R|SZazC}d0F1)SnSdqO~ckpHP);pu4KYs4! >z(t|sJ5wPjvYExNo-202w`xoC|=9TseT3XtV_@3ua`Co18{xEg*+Q3Uq<Bl;+hjGQz >z_lZN-XM*ED-&olH+~oL={_HW$f(spEMuplPUid>@S(6$&pO||o91#8W(k%HiGp-zW >zF*E?Pqjh~uIbdI?w>mGdd<;irh}@(P8kdg}PVdV~R^w@Zy{~sJA<P$7pMf4z3R<!D >zH<Wo(=BIn;Z096CGofP)d$?}nzFGJm%D74ISk{P2%l+(e`N}2p=Bn_ebw9nB+!=4> >zAj{4%MbOPoPr3ef^C`n$&S74d<8>Rp8Ye9`CREP-IWbOPVxIXVlViNL3}k_p9%G^V >zIsIYTF%ARBzoD}>J#>__SonR7GU>J+-H=eGo^g_7vaP3DBA*_()My;vEncN*&LjY( >zEne7B?2*d5#=so(9M(&9kx-zwkBmOIEfE$hVz{+x%2wtHRDN*S=BkDWn|b=u>Monx >zYCHt9nf_{<O@UzwUYg~Rph1}L9{1XxeXcLzt+gUs<`_wm_gwsapd#$ENt4p~D#k~W >z4I4bOKlawW7i%AgMS<Hw@<z6+Z=4;!?PY5wtx}Wty*-*~_=J4)#qXE0!E;PQ)xl${ >zr@U1fFJAM#ZFb`8RlqYn#C8NFqXL&alE-ka;>sv0JcTQP-_m!3$D!!TbtAZTfg7rb >z!+7AvgDVcYD*`h&%O!?XH2H$s4^e^Jv0+#kaU=>CS{RtKEX&m&?RnZJcgWTq&Ce?e >zTp`OG-v%$BP19Y@CdJ*Wa$nsbF#RKVV4v<0`90H2=SzZ;<Gy1WHH2Z!+qmrXDv9nI >z4qZ=`r#QnN)dOOr0k@NovjHA>bu`2N+h?>#l{@ZER8j2hWy~R84^`!?BHRxA_V`T? >z%^?cS8EBy?==QPzV91~+c%<Lvkn;X%s<q>?Ogwi+O?I=;?vqfiI&V-5uqR#g(_$~K >zx~Z(*D)dsdf`?BqkJ<y<=_3NEre=3#@3MleM}dv<RH%pU2MXKvSQZpx@2LbSW9VZV >zW!+Xi)MklAb}J<KQC|-w|E%$t6(KZrVnlmty1?-m4|Z+SUC}Y1&t^$av7y8r@q@^Y >z=xRhp+IrxeLr*!@k>lgLN3DG081iRvQs=upWakzZgO<b^$WTvXxLe54<?!>TCOqT~ >zvzYR#csU7^GzIBiI>R)F<&#GJN7H_$DABS><>|-0$yo&l%Dzd*?ep~C;un!`e7k5~ >zpB{9b^4M)9=dzR9s5Y&)*w?dB?%<|-SmolAk%M@cPQRzp{E?@v`)^z==oZHvnr6BD >z;kE8Ap~Zb1h`Kct*`8zKVGd-eZ?A3LxOP(N6A5v2e#A5vQ`#mD`Crhq{_nmtpWn<` >z>t*TYzqCF7P@vC-ZX&O@c?G^h6_~D8+`0p9rxZ*x!-`*{3g$<&+eIwTKg$@I)d7w9 >z>wvVYrTSviQ|(_0^J5Vo5rB19Y3Hzg8QZc|VV=_BGc27yLg}?7H^?5!MTaFGL~O6S >zYVb7G@kuUrbYd7wL({dFaFPX_Dfx%QQ>TjY(hq>?ym!{AEaxP}TToAeW@u5!ACh8f >zmBd<D8N+ae4AsLOP>dteO;mXxgXRI)OMX%0^aYjv?jiYabp;B7Jj@Gypx0@d9Slms >z?zMG8Sk`mhikHD#2Hoz;Nfde%NXz<-?>NDF2HO8aC~00bXmB&MB&oOwW{!0Ssq<-W >ze;R=WcXt(QG}~#P5dD<x4IItg>VR!}G|wG>vkVq#)`)i7bT_1Rlvpyjpk&{1GunEQ >zenO*MLXW3PBL6K02<oP<4l0iMO_*sk%9Y`+SBK2x%gkSI-OsuX*rxA5W_ak)wXf&< >zP^)f=zou_LAB60hUiI-gGJEb$&LtZsj%t3KVMp7j(Fdo3h-<x1WAhFIInyE{2(Q>P >z_QLQ;eF5%5t<lKZ5TGbgQ*HXBujk+FYI#8$tI&M@JdtthR0m7;cK%WU!KU}=gS9AC >zN4fQetwa6Wv%Vbr()VghdUF7ALKGfB7E)J-hqav7i*`D`R{63i<EG9ktNgQKu=DV} >zor$T{(~j~6zMzK(A09BH_sE@tjw97OX0-3)5QQArL+jAuxF;mpN4{RDqO6keVlwRB >z#F$zI3OUNu#DvZds4ns$&sLI@YOA*O-r^K!B+xi*)8YrFVK+F4dWx91EmXoB*^h$1 >z=S#_iimP!TwbO9(>#!LVRA*XZc~qB5kc@YA*5ZpFofDJdi>G~u^l-qt2?q5f70n1p >zylYa=>^3ceM0GYafUx5cK^#VryeG;&M_>Tz<qeAC4We}Ox<mj9mPxSbr@+&RTaq1R >zpf-Z^FcET^f^?gOmQmmbrX@T$V)Y!UR~#w#We+D5IF$mwijqhLEGsmq!b0jbMY?ZV >zBAJMMN`O}L!A2;_4g!Kq1l=P7NEQ4dN5X(F<~I#{F9Lo8VlP4bC<TIlEWVqAxGQjQ >z0dOo4=q?9-O$0qBl6o9{+$#UL#SGl#+3{D3CtgRNc=rssK$Hw1Ak}}IShqR(U2*&7 >z<&y@};6o_TRy179HXodq|9?@_77<uB4<c`i=;6R-2vC)IYPyJuj{$4N&=Aw&X-^@2 >z9N>|IapLrYIC?}3U56mClY+310apUoX)I&f2Ikha1p)ZCyBtQqJR_tV8fwdo%mWs# >zU<p;=L?|l>*e7PQ9Js7~t1N&vWk(hqswy}-UvLu3reh&K9OMlmtc?Kw&o$LAJeyWn >z)eSPEK>9?8CO+&uwx}tl=yFw2DiJ{z!OsvSdx)S~3XE1MiHLw^aNy?vp_DIPzYe>_ >z$6Sy=hfG5Yr@<j8a2o}_mjZq&l6p=+#G)Jv1V!hF01*b?PJr*+=6-ovY_|yBPlVbL >zVJAhPlSEBGKxK*~Qc;qHB4m>YahM{$ohXqO0m=|Ty2>Gc*1<;8Ah$?F2N8Kx5XU4y >z&TVscp-9A)Loaev+5}tnEd%+dfJ?zw$VCF!VH%pnkqDXw_X+l~t-+-~VNI?&Srp`q >z2tubI?-AhVh{#C}Bp3@xCP1o1D(9vV2RX<$B4iIi@*)9V$w9oc4cE%{OcqtN@!^;G >zQ0YkU83G~zRS`=;L=yHC@)7-fWIqS$CXyVT@vKB44pKlTQSd?ztEmi}PC@7p#G(nX >zLqy13ek_2RdZxSi9tIuefRYE!2E)#U*+C=TQ-)D66xum{;oMH8isaae-G{;HhoO5H >zDl(NSlR5C5^vb-J%46><^9`yP3&?`Ql0}nMXJ1!w(v8o=R##S69~Kbme^!T7N;JjR >zoX+3!XuF|uHCFOJ$W%$vfmo}U6jsfx%^0Y?1FIYIs~d|&-s9F~4%9t_)dPy@Tw(p< >zWc|)3&{s;ZWRye`q2bNphW9-UXO<g82IudI5QPGTpLP&{Fx^t(%G+`O&HKNE=@~az >z3ZfEP$dL*G^jH))DBmqv1UbY<B<JsU;6VIDl9L={2}(Df12H1Ncoc|}Yj{p1=qUlo >z;~c(T27Qx-ctlV?%16{MM{7|)S$x>IpnxjyD-cO0a}t*4BzB-+dtF_q+{#QM)MW;G >z>`g{E0U98zel9}RitMkWkZ1C-4UwQ2H{V%H=u-~-<TT<u9|}Bwh21F7ZWL^M1DZ+{ >zH=%@6QIesqhI=Wn<}y%MVM)jhv_>Rsm=qSuhxB#An>b!y4<Hx#h_rQwQ~Y?Qt4sa# >ziFg!9iw_I7g`^Y3Y`E^!X%L+c@k2?vpnx18`7j^0&kEEuE%|GR4A{IbuFUyfFr5R1 >z$V#Fkpw-dP11JRSiDY$eOZ_5@+nao0&z0sYS6V+@;rBwW$6dX31m4qowcj3kH%{GW >z6M2;**(U-Uo&`_#wmztVJvsuKv2UXi+n&|5o#eNjoNjxi+)gF5zlnprt7)h5+ds!i >z9wxGR2G^opuU(~F``LT#raWj$i7(M7Zu4Cd8n9(};xS)FMGCC~my7Q>MCnlK>o_>w >zp`p@QK<GS8>^w>7Bwp+^{tYojT(=0gZhh+dJ}h+YEX-RT<mS+oLG1D|+O?P4RX7a_ >z6+sS&G(#P3oS{HYJ%-ivO44T~%Q(oL1b6`ooI!x8ztt5}1{-ui7LLGQ@THH+TIiAV >zjuRj~(@-jfZ~GMjID5$=(7|c=BMQ6yDWW#ttBfyZM+Di#BeTlkhforIu7v;{XvP=c >z_7r%1At$Hd?}+ePI_WYWOm#h-OmsO+>G_*0>4iId4khWuzg`Y=?ja&FNm_S_UC)Wo >zcyr|CZCCbEfWr_WdlN(^O2(qLc9q(}PRu|Q`QQMG1f&un9uML1K|4jTT0ZE&fL2R> >zmgNTcFa=SNr@`w4&*qe55D+{9$O8q&6QOBt&T0g3unOb=5thl3@Zd|H=1Zm$A?cma >zlOpj3b7&a>M4qlTCrTXVLyz(yhq!0gcvoL>fG;<c>G>ne0qt*ogC#E9IpgZ0|MSke >z!`<&k?*?%0UgO{W`}=MdYCs}kK(cON*9;sWOqEcBatVWqb%T5PgK9`(CIw^?IHaoz >zg<i@yIWT0393I6D+e8oB{E@U<0y!)}d??^SlF18heg+YFt*61abp(!qT#()6A%c_% >z6f=pV(RHKoj$3d)W@J*}*seeSnWZ-d#=Hb$vD?P81IKfV#~UKSN0-J=s!q@oCJO2% >zPEL#0zn|b3PudVCE9)i|7SAWYpX3@(y?zdxB$6^v&{2L@G+*MdNYZOsa)$Dthl8vg >z;0lQ*!wX2CIfMtNC!QkpCtPytxnw9GIzvF%Q91ysyJZ>_yMPGbi&=3T_Y&1B1-{o& >zh`lKBA7`N%1n3Tw<nTenf{*j?H2CikvA9SH6F%fJ5gGE-<Jv5;df<fkcX2l&%z+^0 >zz=0M3usC1LhEp+KHV{I&!$V0P_yGwaO4%wx-xC#PI0z34SXsppPmzRQV$Tqe-RLdk >z?rjAxP!esVYqxq}y9tm<3ZkEg9OlE%pulc~gi0c!gaX1(57!<5ofaV$2yppnF>Ie? >zG69}S0qx}@o>7q3_>v~mVyOf~6Gbc(1qGPXtQYW1k=S+)g!xB8Mg)nUmhhv%t^*&6 >zD1#utQ_i0?d@yS&_1Gflv31E~`+h{VPn}=`;id-l*zv@t{z<@#CwoOtLY<yQ9)Ie> >zdD_Q+nl=4&r`lZdj=A0SbCLYHjK6axKs)S?XQ3$ggZyVlc7V+UCmo1lRHu37@%c8+ >z{5}4B)AamlwS_Y~7Oqnks{0qBrx(uefb&XJ?ouGzDUi$cizoSuZGX2GJDi>agsB(j >zdEblYUZUrNPD`W5mjJ@_!QZ88#Ed5yFXr1`EcHWPO1<1ocqv7Cx!U&f)905WlUL52 >zki-0pvT1lN0da5|y!K}ood6ytN?&x1prgS38*m+pMAOsZ7D4cF4m_Cx+*3gcDN=v{ >zULxvDCW2i!&{w$BfLX-YO^^l=a%RA$Oe7vjlx^Zm^`Ine_!19tVaF?gHx^t^fV&Yu >z4n&Di0y3O**oz-}1_c1G@njA-2qoRaKWD`O_RzrP?~LR5l719157arQ0mW24Ao5C} >zBP4%+v|rx=o8(CK6aItmGb!+r8Od{e+cO+ww)GagZ=2#FlvIs+mjl5F(BU(3!N*Z> >zBav;k)Aec&G*mEZLlBQgNk1hZ4rPg{iFVUP(AN~W{&t9!12~!gp%(YTjv#JSCN(HR >z-r~4CB0Odi!HOKQf@y@#zo1MMVrCi+h^e)tcX{paX0;p+ZCj-Uud+&4A9GiW8zh|q >zgASwKpGkaQ+3>zLQLO&o_q-F50UL;mCqA^Cki7cx!?@@}hx5l9CqDMv`Pl#ON18fV >z3q=_#{d9}agMa<$)HK*ia3q`qtrZxzl!4^=pG~GeJBdCEo!8zxJX=qJy}z^e`QNp5 >z=P!GSU;b(MVnvjEH2vkc=u4NT=#i@ka(YX2nJYqm5uwc1F)rc?r`MGqtw##h_lkaL >zhHU7bhwES4`1u%V>H=26eYJdr{0}dE^woJM#5ZRogaf@Q0`7SsdMNNck@V+i;Ozy9 >z0w6e5Fqu&0QYQK7sKjnc$VE<-A|Hf}kqY(<v5Am0AWB>#`J1D_uP6_;bHu|%@F$Uw >z=`09T0WP5(yKQ~<<9fV@`VPPA@54?T9rsrIedB##sa)ikV=LxUP?g8kJ1^|JbbPA) >zTax<yH=0ALh!>T2#90{z7u#IhV6=4UJ>&=Vl)sqz)*O7!_L1~Ozwmb<l|HA|Jom`A >zJich8|NMT@H@yd1+}#^Fi;-8S8n$9v_G6YT(qkJUPB(ti|JpcSV^{g`NsR2(kP_{z >zJI1~8`=Tx@>y#TS|40e0)zq=>I{a;8f$y@@)Cwlo64e@#<!o{<C+z_*`sys^Xm0wq >zGoCFC#wrIir#cS}{(IIh=i<FuYrjT@f!yVpO2;$*KCun|5Y^(SXKK8FX<MvPcRR8Y >z8>u&15`Fs0{k)B~`FbUTOSiA&TnwyN+im|ey;?s=i3*a^jF^}vcd+G*5*>A$tZg?| >zE8IQplV#5kkEF;{B+&ljOo#mR8jkh8DffBX-Pqhz9(SeXa%0VhqNwt2!>euk%T}-Q >z#|%HV;%DQow%uB;x!T^hv3M1TnQj3&Q*BwleH~-!r#_WW8uqOe-nahv>H4&{(dVuw >zQ32ZJzDe(wPi=Q+YZn>8d$h|Vyk|ruG}*3?Y%?Hn%5kjF7oLs`UPvzZvDTbY<NdN* >zs~Ei}{bH%n4`?dK_Q(86UC>n3a-ouD^-8hDOZLz`ytu(i88NJ<>9k?oDi26&3chgy >zln-C1aNhqjnE{PTdwniZx#jKIV0*g@6+v_S)^hg`RZXXH_CGJ2_Ek2}ITtKz@VeAZ >z-EDiB`Ahb$(>|S3$rWZac2jkzw1L(s+apASqO>pU)M^*jd+jqJA2u7yf_EK$TNp@7 >ze_L&w)RJ0?O-xHF^|PP+#MwT#1x+cmaz1=P?#s>QT_uL)Rm&~udwN!?Y!~M}20i`l >zQrJ?Lfb^@4^nz}gW<|I5Df|cQ+xm3xt2&&Rq50&h)H(eN<rzKSEI_x$T1NscH9`+S >ztshb3g6%48g{LD#Prf3Z|AHcj?siMB&$zvvXqxfSs_&W&*zT14IM_w%;FGYBpo34N >zc1oo%U{TF2l|EMtQlEK3ByN`bOSfoACznN5EJRpSqvH0MbtuGV^nCwOK=HsoOUU_6 >z{6{+X1vC1k!@s>Yua5uzYa^f{oNa|nl@qqhg+>iYh5D9n=aV@P0#g#sTyEAZK6gEK >zCH2a#_MdMP558S^H={dKzUuA0m9A4p$b|}vtgT@e3(ZX@Q#j5RcCSzQG}`StW1f3j >zv&`Yx-nVmvnr8QVezc$Xl2F5HH{&0!=R=q9Qk4^94ntWigHJ+~5u09N7|L|}#6zS* >zy>v|13xhrl=I`LdO4o>3-Yen}WZw}LcQgx<f|H=KCv|%}PDL0e!3xrb6=i2iDGV|+ >znRFiyXplpxK)Y(%sLmSyls|zY-NPQl+$1n<ziA@VQF8_x9Hvn*4|F(hScXQRJKRoE >zn#7J8+Rv~9jq&n5>`|MCoWihuBFyy|#)V!A)6r5BZm>!Rf8-Pxw&LYqxIVz`2iUGU >zGP0iSX|^n)M{O-7DTFEw8}8{~>#yK2p|<WS3hO2IKp)SrzNf-lLQ%p}QhcrLh}Im3 >zoy2I84Vo9f(Rr(1ChwXYFK-BI7<$Kf-s||M0~&u;-qohg%bfi6`ux^5{r^8;{oncO >z3Rm*+wjn&5!_Y-Wz@z7f6x%g17E7as``8|88zKa-t&A#&8PU=OcAo2o<eF?p?LI9R >z4f&5M^lgq3N;`^o2fkJ|6OJX^cQ4K9(o+9E;o~A6#$i}$Yo6y#xD#f}IA^tWOq9-9 >zTu3@oj~vCg_pm8vEf9mgZwwC!r+f#(D!RJf$o5kDckEe_x#u^GeoHA1IVRkadEM=S >zFcnc%yEIjYH>dLKDKzb3O{IJ6F`I^tqR5<Ns8RRu_L>gbzhF(7lfLfQ<!LG`hl_fZ >z=53WdQ($|$5phO;)aXiRK~zd3`W1BCcE33b>M4}%PaB=0QRsF^Ep*7l8$xeK0cIZw >zrh$8<d1VFxDaG5Gr+I82$||)?Nm75DH(~^Ydfk_X0w1k{k5Bwlpy`Q69NHX#^@<9~ >zOG(mx-NX1@q9QA8A^Z?_STW~7yXzlevjNskwWy=SOM6-I<Gi==O9~Tzfuxkd9@ZQp >zvbFB7!Zp~QYO9Mh`4Iu)26oJ>G@KR!YLva6=Lt>86~FwiTeR7hZv){UQL$eN&#aFU >ztynr!9Q9;b&JP$dMrE<RZ<A!Z{(4#TQlL$mku8A-KiF>Ip2~b0xDxZ35!LhIX(}-0 >zOg8x#`?z=R<{hi{18pC7eC>U9=U*#6-Q*Klu5TV@tI%0~u{G8FH}paF+;z2X&`P`8 >zqCr)zZp)60y|2aM7iQ;fwhXlG-#!@sN<6xIL<*ZNgO+$}uh={LS^QwzQN*V`m3@V) >z;JjpXf#KPIZol7=dGwa(<>u@`@b`YRlcfh}!N}#iV(JvCOr5~bxO-40(OaXJgM>d? >zmh+hqu^j#g-5Gg^Lj5d*D+I8g^e5!C?h%t-bL7{cWlRgSU~6Xxk*;xHAl08YW@`KW >zuEIW&)Fjl$q)1edn8QPO*^+cO2z1k&M$`eQIHiwYlH{q0h%E8MCvFrNX=}=v+j<x; >z?(TH_1E{_egK`g1g$IhYs%|uo+BTRMD0-6R-{g54s7Er5nIy1|Eg%4wl{VzOmK&e& >zq8o9jez%w9U)YXX$YwEY5(HvKw!<c+Gl-*yUPCJ9JuoNwAvX1mbcgN%8T*a`=Lk(q >z$L6SJ-QuZike0OGysP@0h)$@}Q|+H0(otAvnby1Q*pcUo+CUXr*Wskw7u^9bpQe)r >zF0E|#QaMuA@K~o&z9h!Y=+ZRH_ZtazD&{N3dyB~MX>CN}u|tZzC}xQ9vizW}r<MKo >zkBPU*5Ho!b<Lr`&#I0W{L%KIR%Gy4;Kj~O_RQlt;?fre3egCg8%E#+PCFxe5(Bw-H >z5-;(+!P|7B|I3Lj2Z4lHp3xXuidjh&mQid+bb{9ta<nkx-OMq&we^e(?kn0hc2kiL >zH`4dLeq(;Vrxw#7S+_-!JHGn!5#9M)qlVM_fXrV;4eH-pqW^wCPuoB1cRuC9I4+xP >z)@Nzk*A?IQ?$@d4{Jto*c<*oO@I1q%iiWbK-TB=&pmKZ2;r0ju?A~;vdX?%t5BZx; >zGh;Ji_1ksk={u@e(bMJjn^dW-dHT2abW#=T;c7WSU;O3--7Jl6o<`FlT{DegI8V^E >zs>D`m7yzpljHTK^A)5ZB7t)xioHj4qHG_QB-ae`ourG#X80Ar&R+%1oG{DNV6q)A6 >z)1z$}{%j_(n-+^L@%N?br_oGf=q79su8x(6W%+J0h|M%88^GJ>nQ0Pj>{}~6G-5Mr >zxd-?tU^z6?RMJkX*ito69-q<}I;&zFTgG%6!(v{XGs)P2Wrf<(ZP;|z7>2#AgyCMM >z$|@r$jp4?<=!d0iZ~iAqMaIyP6I6F!hP5x<C=K{Ano)Q6S{_4V6`V>hGMks^ehvtu >zOt&p4)v1bZHbJva0|^F3weqgo+5$kTxI`^&$0|*JmFfZ=^r>Pv9Am^lS@Eue3016^ >zv_Zw<L9<mlxp~l*Z>{>oP5ql2&QTn%?XKnNt^+K0GKRu9?uNx+BUN!@<1yc6v2Pph >z1dNA;rHAE{Yeq4{*2loMtza(C!(qh3X~n|@<Y}wz>G6kUvr4y&8PQA|@j=pk|A5^) >zN45`m1|g>+(?E%q9FKWMu#$wMv93#mS5%Hy%vrCvF0TY*$c`1Sogi<rF-X;ZEG4IX >z*D;3ADm4wsNN*jJ$6ndDG-kJrXG6SZ0nnt5<2jDZgP&-ad9l1F<(ADfuPwl7#j>pP >z#I7l`lJcmAP)2AK({Nk0b+h=JJi1{w(~Zq^^QBo~yBu-D*1k;pG^%oyc+~C7#S3(M >zC~!Ej_BAs#^g*BAGn}u`0}KiS*y6Wt)58F67O)~W#Rm}#&t_WC1k15G-vG++s{;8W >zX?ops9e$<LCT$;<VGgCMv%9O<XXLABp;)FLyDbg?9tBm~p-e^gsCPF#xr*UG&rAXE >z%@~FgVC&^k)qLqT%~XBP{rF}^q(0L*uiZY4L97DNjA&NfG}ldrZyqB7VBQF~eS8_g >zdG2|&3~yV|L?F|1m4^3a?2c)bv89@<(sXbQmRnf5$?DZ)DASHjw;<l~i(%HT-u8^4 >z1ye2-<0~AopnF$n#+wYsW`@fI%>XcHv6s=S_wcB|A<Mv#i2KQD_uZh(iMsn!x0&}^ >z!4Fmf9~DbX9}}O^4tnhQp!hcZ>AnZ#{Gf#kLC;4XL`(<0{1!9>tji9Mz7Bl&X5Yhi >zt+ds;;G^&9AMZc>{OMun=0lO{qxl-9ooh(nCTQYR@ju0nezrdPegDzlK)UT_$Yd*1 >z%w!rEQ2R|k!c&M)U^3n>p)*31aso?#C!*v-Wvyl`<_+aD#LcrpvB$xe8behw7=CHY >zS}Y^nmZ7uBh))CI)GoN=W{sg>?MNX1dvMk?e-^`;HR8@j`qEUJ87WYX29%ki&q~75 >z4CiU~n@o!dx)+-PXu^rzbYolA)INr(FC&8^H}aktAHy)OqQRQ!0QRTFrrI?#NimGz >zG*$|mVYJE&&AV*RE(T~fz3D=AeX0?b;gLr-Z>DQvX*O(zSNBBxCM%+wX5Y=+v&zt$ >zpy3ETO0ISKSVkt6X~hO!Zdyb$WV!Z?IhJA7JQjdupg%AZ*uYVcZym$*nV{~*MjlmS >zMa|Q-0BUXrU<fju^qKB4!%6zg$V~=dWdaoBhdm6<dGTBXNJ5#B3>cDF(1s&}IKd>6 >zX52VujJGBk{&{p2XxA=Zh5?jru20jLpga509y&6d1;q|fP=_zgd6S`>CV!%k=Di7$ >zc|lumVIH4kSnTL?Vbcv(^YKay<9Vud4Asq-snbo(GGPS}o+azE$T81yk3VyqkUjF3 >zdGx`v&@@K$*JmqN==o~%G^csSj(OG&MhJV}x0#lx&kV^sUHoFc^zS@JZK2#m{A^_G >zK-xlO$wGBo?3q*4x)%!#;AyT}+}jxOCa=ZHn8oA+i%#r(n>41+yx7$?Q0vpU_7^n$ >z7`opksKaTI<n+8NgJ!)daf|ufHILYP<GBmJ%V+-ioxjfqN*IGCOT$4+qZtVer<P{6 >zxJx1Yg!`W*hE|t$vuQs0RUF)lAV4L~qdUg*Iaf){9o+GsQ+ne?)(d8AH!Y@_wUZ!S >ztOmUNotw9rfM48toZ+8F*K4Nl$1+`-B_#JiS^}79F$E)q%!G-2g*^Io6PoTZriHJ# >zjz1L%Wo9=sH1Zmq=V>PTbkhl@50<9aOhfC_16QdAzSM$AaYujVUfZUyW@bE_Ztn}A >zyuf#)G!<W}*1)-)6U@*wiRwsBQ2rp<mZ`z6*1^(Xn^f24XlJbj%LzI;kD-lgBC~1Q >zt2Bi)dd%jTIFW}{=dI*!R(NxMh7w(+in<%Byn2<PGC@zVWhib<&|lTjf3DKq(%M{B >z>DHUnI9#RvCUtjO!C`E{=kmfYV&{WZ=&%84u2BI2Dqj7I79RuQPEg^$Xs%E?cAmZ` >zkJTT?%we;fis^pr_@99+K`YIBo*5Ifymyo74+ZI0B>7%p7~Wal*3PgJENAM22`}lM >zF%S#uWXq^z>)d49ie&pc`3?_XJFUHTkzR2#UGZ3>>f2JSRvESl44={!zxI`Yhbd*Y >zVj=sNiRy2H_1}aCzll_*LG#|k1XE)l(n;NK5?;Q^JtjdqL66724bgv_9Q@WtUt-sO >zmNny!ALnhVK4|aQE`SiR`u&!o{x17OL7wls3@meWYn~BEoOa54m-jF802EN4Y1-ZI >zj=f|YzZrZIvbrY?0vtxZSUeNJSaZ|ZQAxW0Qnz>Cf=d@9Z##9+w}7%K&UF&Ia*q+} >zOHKGmcfvAM(m>3K#g-S0+-)Of1Z3>td@OFr8VX3tw4H#szR5sLFw$aJeldVPUS-Rs >z@7bi=V3~Vx!|uMU=qmAycq($0rn~Kd66#r6H&b^499|8ax2#zACgpjW)ha#C7NTKK >z_rlWTeCPW6`oi<Xn<fhfKF}<>8DV+!04OWjmYJZ>IRAj5=g+Vcd<^D1bBkdmRk6aL >z)Ln3}#sg+Dma*NIl?EN(-p#Py!itZZ6eLd2&AF#kHtAy3;1FpBPM?ZhW#;hTgy_>X >zVyNi6bNlC6ArsWzDrQzQ%g^=+Twm<Zr#4;GIc+vm3rY)O7aZ(n&b(N((5J$%H1Rvk >z2Z1!5W~w6e^NciuqR$G3c0Eb_Y?k)f6!mG|ndyQGd)`n))-Umy0KMFQ<yC3EKz(i5 >zd2J<eEijMuu5|5v``X8cYoFKFzC5Ih)W2*vfBBa9MKA5kKfw%E12yauJ=PcUXD;(! >zXYf`cBaAIBrWk)$voPFO1kMymo~H%mFL<))c~D8jX@;BYGpR44M8V5==(?LeT~<RH >z6MY6S?G;Y0W6!S>wwl+yHvwf6c&uIOTk8cX8=5W~0lphLw;sasHf-1%2G=%>9&MOt >z&>eln&93DWG8yLY0=N4dn7PAruA&BXvz*fy%D=Vi{pfMNG#h<Z6miXU+eFkR`0-0I >z-7ml!#lUX{$Qd$1gJ|f@^Pb&|=om&qH!FIAs>N-via8C4p)s}${j_HetF!<@)q_Ch >z{XqK8KXjjoTDxBl{L`4x^UNLk%w64djc%Sx4~-zQDx9Z6T4(HiSrjLFlMzkNmP_I` >z2D-*qFNov&nT`{T41gDfvO)-R`rXXXW_k#l)^e4qqA$*JV)>x1k{2NAQI&Cd%<wd3 >z>{bkbT{Fw83L>|`fxnGYrw8&^JbW3dZ1Ebk%(_iR)2f7>5+ib6d~nw}r!<=K{D0!8 >zd}Oa08#qR&#?3ShZbCx3_@3hr<?`|kx-;#MNXR%aG*|!GyGi%<W$ngp#sKhs$R;y$ >z6ZMh7_POiXym=~wS$vIA@@4b1%+E5j!ynS=+pFj?`Vi~0nw^C|t1s`U4Pi!1{H%9* >zp)WejRXoyYb3|Ijtd8HaeV&S2J!MfvPl=(GRncXef6Wd3vfaiGyy~2)G@JT}8-Lg$ >z17Tw_f7$Qqr6<afdJ$*6GWRU$hh2{9@OjlB-+LzGajkypo__zQhI3b<FB)Fls=4(c >z>XKVW*n?^d-SB$LLg~-!4efwRU9#bE`?Hrqc#ia_j7iLunI@;8J)bsZ_XJcr?#&&^ >zo6!n5r*S;Vs`p1qK(pT=f6uDyPrF-e%yiWZEnd&wa4tE~^=oeR(dCeE>%bNaJELt+ >zll{S7IlZU~ugmHg?=gEexb`lxf8pUDrY{EXE<d=ZYc=?CV41?-*zBv3^$tP35z3LN >zo~48Xi^a+}u0%FDo>P9|hiQvw@in?MvQU08qATsHJ^0jFy?Yh@)l=Bk$n?h-y{XbS >z{BK-Yyy#P}8`RVJW}@7CR8h+C>FyBC4<+0EG%D*Xd`(?<%z9}ZE$$cxg?}Tu$!r~P >zwD32bJT^O}9;-b&MPwFt_-U71un4kzoKQY)HtxCMqxX2kVp6B2Ik$jX@}$FEDjZWb >zqEc|IoRmiIlJ&tCwq|)qJGYtpsGC@#CzMN&>+aH4pR&g2O@Y@Z_4>|+y;8_PS`5o) >z-d`Wn&RRivlDl+n#w4G%l3hqSAH%BNRd;a1Prn|cshoa^cS(6~`=G8$#!X@FxZIAw >zu&K;JspzFFsi;n0^@nc%_#&Rf7S!i19hPj!TRBKh)P3LfY${7MY2zpVLwHE2|L5F> >z&t-AhG#m|Xu}acF2geARJ;v9`1sdvMY<8{V#zdh(`~31L^M^67OYGL>U!%4HKns&5 >zl}L+%vP|uslrv<<>TyI6vV2U-V}$djV#f)kw+7!2c8pc0w*#qBrrMmRX@5lLnDTi? >zb9eccl*f}miFo;#!NFtb3FFWNw2zjZ+JSr8mr2&+c#|iy<N89RT!3b#<GQ=qN!8F% >z!%W9)f4$7sP!F~03)Ak1&~IozgYkK6kb013XMpPXKDjB3&L4``0qROvart%2bx--j >z+H&`l!cRONRc+D!8sOOfXExB}0rG2rv2>~V2t4-enIKiK`?CT1*KW`H7*Z3^UaHAm >zofERje`b8tP6md#OZ%nFjGNs}$o8{|ZAFhOMyF)^n_Z4T7acmeBpYD1Mc=pX=Wy_T >zS%7s(#D+gD+BkbcBSmj!L_WP8A7NgG(F`>@3B*p7<UnNr4~yLJfbIBGHey}bmF2BW >zy^!Ul{@C$rkY&do^pH}=#j+8&$4b_eyhH2sh)I9K5Jg|c$1!VEard85jXh|l;e8&u >zQs2`eJGAr6#eJzJM`Q2rin^|qfZy%#ap4iIf+l|(2S3UlF(~S&Pjmf%CZ1W;zmj{S >zHKT3sPQ>&1DFt@sF}!q3%$V6r;muw5mz4&gV@9f;4e|-(%;UAArrzsCF{p<WcDU;6 >zAyM~4P<wXey#yWGcXrc-r8zC#?g?vL`?((J+|H)@&y-5oi}i<xwg&DEsm!`MzK&eB >zol0)_%8fqdPP~RV9^?Mw=Cl4UZ+Oa&R>v$8*9*{fWVu>fiQh|-E<a};o!Hy$Zq1@F >z?T#g>4njRNQ9TT$VgaONbwn|YPY;iHjV$yXGqA`ib_S|>qBjR5{Rvdhl-FvXp*{vN >z+nHJ^P0B}sDBK=Cm2hlXW(GT=vumAYjS(WMt43x0%?sUIlhu=BJk94QjZU5du~6uk >z&91V7&~HLXpXSj_Qxr2<I|&uO>TY9dUSO3%mVA&mtdSVXCPp-(ZW|6OO;HNsk0oQt >zSa(y|EJ&fJPz(WeQ`~P}nlX|jh41z>zLZr;Lh%(}rEPiPtk(<N7_Sj-&F*;rP?}+& >zczp-kd%HTCZmO*b43fR=8rDyd9D#-C?m_g>_5%D964I*5L)L=BOsadWIB7tW^jI$p >z*k*t>A?#5rT0ccROO~zIcQYC4C`pS*hT`=lTJM<8xdaM9Mo>@dA@fs)#z2XYubaH( >z;S$XV{QqqFUpAi#Yp^(Xb>ADKkgUSkxs8gRrBt(%O80}2*Q>@qxl7p(1nzbZuX)m? >zYkgxfDARNqyEkUka$+I>z@-EApN|2(=&_HEzCCb0eqzvNYr4q2m}Yj8LUdPLoF;(q >zjj21lyv%B5N^)~RIC%rVccj^sgGm=nj;9B11yGnZxvwuhVviv5K7@1O=bF8}u7p*8 >zh-ls=fJfZeqt5Rw7@>TZN(5hxaS5Hfe(9jf<0^0TOXX)hQ9_Ub)YId~;<LMuA8@+K >zK2_-~hSLQel+@#4d}X~z+LPOIyxU#r1c4Es(}YqzI;LFFQ5u><0xN9};k*f;S>q=8 >zCZO_XC6c|nxG5PJ=_#m}v9Kx2D*era$V3ADsWD#hIP9^JuQfeFH5u(N?+Tmav)xC? >z;FFu~3X7pdo`Ff|=$J9XP6{LTY?DeM+YPQ>R+#un6WNwFM!jBE<ok&%eZ0y|_XmfD >z*=Hbia?=CZC@Q4Xy~g%b4I_{6w~8c!8x{K}JPi%k1$GR)^u<k*S=bCsN|lFsh6T!O >zISi8#o>GCnmu=^INw)EjR#2LUwzN63ZcsP6z}FoV#$gApXv*7Q2c_2tg_e$5s57WV >zg`1*5`#+7SbeOwV;!JU>aidgQ_ZVTBP_XkG8JtS|rf6!;G<otLT{>zV)lq=Vw3YIc >zx@QDD9l55MQRCb!nPkV;GV|DR`?npZsm3XqDoT?jF%rOJKh+?7VajWu^YG1tVy|!8 >z?kDM9ubye$W!<OrF#FQ=dZ4S@X-iY_1mv4#dl}Hm^lKUrOySCZSA9czXDb0k(s~Em >z|I@M}SK)h)|M3sLTNjQz^}&u_O?LVi_safR-`YX76KbExcX{)D9ydFyKkrKmI4bq@ >zPA<Ij@1R4@@8_pBxA#0KS+g6#V~?f{(!)?+4nO<-^5@H2EW6u<wh2iH7k_tS3)Lda >z3!s!#AX1+wV#Iafp$C1z)#2u+oQrYjzCI86SqjuSGte|>b5OI@o@se@8Jf%<1xl%k >z(vLMtX08s0SD=B4x<+`t?V?FAZ}M-TCWMLIFEzzyr$5kCZnGUVv^M{#pCXjzkq%+h >zJAfjJYlzcTUi!-@X21v!8QtxsTa$Il$&m*oH`AVntg}M?EF&)hbz^njx?O`JV>c_+ >zVf8-)(kla7GN2(NEYT##T^;pMlQF2E>i(num1@Eu=9s%(%ud674~;=XvZ_NS_XkyT >z1~u=yYmT^SM+|}(`97XQ$GTj#kN`S3L~sn&x(|SbF9AJFzS!OD7@!imnWPMx)(xs$ >zaNn*vte-!rbYVbBpYiUG8(_%cjCbH1#rEBHd#yHzc1>iJh`+%HYb7MU%}9KAJaP5G >zkUAs(y_)!k7WI#@wfhGeKFu_I9(4y$)3xs}zkpwf<X^3Oxo?>4Y`1*%Ro?wu(5s)Z >z8b8u^DpSt?)A3x6t?}~)5ER<^%gaqy`{C~$;!D%#{|aAi2e8tg8vjY9?T@T59^yX+ >zq$~wn5{d4hV3J{k0K7OM?-;3&BapmV00ma08@cdKE@Fs_1cJ7~G%0C!>?%%XY>=>T >zsHR&9PzzMFg|c@B4IRn)zWCECLx)<$fc<&JBjiU6q1nD6bB^RcqeEIx+;AY0e%+8Z >zpmMbi$iz&jKN-aD8`5SB-pLqLG#)Yq%*F^e;{;mZ%7E_Kq5s3vz4$ZT$A1G4JD<(W >z9NV07iaATFZ4M!64k4#DId+_5PL<7^PjkpAX+x+~tAr%kP%71uN>bNIQb}|^xN?85 >z-|xQfKY)kLXWxDI-s}B*=>aliryM)Gri#GO<4es)B?c}GQXeq1an<50vewhFvvdV* >zsfH6B7RfN2k{FND$$;fIL?_Kk^j)N%j!5-}#z_Djca=^-DK153zaN*bb&{+#yRDW< >zTgkc)>XQKQS2c=ZXd^Z37~C)`U9Fe+8_!CO{o$S<2_D5*KSW2jNFWPqXyMZJ`oJH@ >zOKp%~Lg~g0aspq<@nV>dO37cjJI$R*wa;xk6%n}%a}-09FXgoisG}79k{C#WOmD#x >zAl2{-&j3<zR)J;I!B8D#INlgG^m4PPV)%_p);35@XaDo$P~#Gv1-eNj9VrW2Hw6v| >zQ`qE&+5BE_%Wpl}Q@Sp0);nM;!#vV?bEJ!Rq-%JjR%E31ES=)SF#4+KUa0R;ukZQ! >ziD%dBwxes(Wi8uhTD(8E?D($0L>TzI;?{u}z7U+>X8KxM6l`b*!Ak-n-=Rdl2}pSp >zm>cC)etK8G!fLP~D5TdQG&(1A>~vVPV)*+v>&NMYV(D(k9E&)|{!5QAkKVI6I?_8j >zDtxZ9ia{>krD4X6(P6~qN@Kmbakm(R{oL=#jCVG!+Fup+-!(iiX?XCx;i2ErmZ-sX >z4Zt}BRJ~b^ae5ir*<^*Ty<dT)D%G5oTDLG(UP{zfXgH8myMtjkA8iI=7<NiER(NH$ >zQUK+|eqH1Emv+Zrx{T&+bERV&xD7dykhuYLm4v)sx(&j>=rhPwPs~^7`k+B`5S@hL >zeRh&)^1XFI5>;ljAoI3%hqJZ+paW`<)G5(TV(4nop_yxpY$dRv0m3L<KQsGh<knSl >z{-A{xLpzkNU(BFTN9@M8Q980V%}EUXxyea%a)Z<u7cBZ1q1;Dv0RiV(YCwK#xS;SW >zOoC04KHJaOu-{p$WjucNwb6<Mw=`<n$<T0;s7yt!jg%zV&=p$-))gy4N&y5|^71r& >zt06;Wc0hY6&XB+`BLo8ZJ+u9ab8l#58-{KRLt|<{ODnFzJWe$e;N0S>yyK25KBYv) >zS-S^VryAE58rRhu*Pk^$QOY|ZJ=4(Tck)$S<6_*Yzi~p$UeVkD1;uN!I@`=R+Y+vD >zI@qKY!#JU(*w!`JmhP)Q|G}_fFEpR{y7T?HTkkvEoX@}7dtq_!MLX&0MGT$NlC^!2 >zZs<=}BfDNU|8U@e#Mn%#O#7hkZhAG?v@4v~mGD6&)wHK@pQ+&7wWf2un<Z60w-Sf) >z`Wk6BE<^ioNp$-ZZ{|uVD<8C5=tR_lDdE|A7sh&{1w6H5kkK*Z+fmWQFy;?nP>ShM >z17LzgYn*F$o~{l;)Ss7VPBHAh0;uPp?GPQ#AJAyvl{!hlfG3KQT6+zeCGq65bWO2` >znf@&`eJM4Rp{^gS@s&Yrk?K^@08&`r=#FlvBE5^@#Am1xq~;CM%b^V8{fen8^Z>0v >z{Oo<Q3*7`X2()Ld2RRodNzFo?9SMU3FX<a113XS!HAsyjhDvm14?5@%TH6e+8>JcV >zcczZhAwx9H4nR$0SPRDut7wf!oUO*aH9}oBB=O?===KeRx*Y=;7iUdap!Na{@|A9G >zBe5-Z)*Gi`BBkbpL7V*maPwf()Sw}X4j)?V>{4uSl9C9(sitSS(V-}*4T=GPm>RXW >zs4Wt6lms$GQ*EK4J7@?Sx=IUU_kM|)i_~C6YQv|ag`ci#19<g?cTJ1PcJmLti~0i> >z7Sg>nC(IX*4lY&?z*Y_}VGb?p9Qtg2=!>`XOH;*H-;3WOE`CqA_=9)xr?=v-Qt7Wn >zDf+<9KmCVR9vmW$e==TSse^E<#O&48Xy-N9r8gKUm@HPb76Tbpke?U`wm}ksf_E{j >z$OUdMh37F47diGV*?}JiY(}XEXK9cXI_47xyUM{~<CRw>%IlW#c?=b(M5&rfaCX&k >zlBmWk6Wb(eRZ_LQWzudsVsxPCOuPvou=QAK-Luqwv8)4_rJn#gQA+6>Fd5}#K44HA >z=*s%e*2Q%6Cc3SevvG$6HRW#`w9BD$4Cg;+;>A!I9iU_ar$z$l7%=S_)o!6d{26wc >zAJ*9n+AS;@tT4&rG|PO8Kvy>{JG%X>bgdb0`#A5XK7){X8$Cp~6QXyW95fYwuw9^o >z1L&rs1IjD3RiwT|!F$j#DSIv4&2m3YWr}V*G-#V7Rf!yc>oauBr11p08OYgWffuaB >z(CVXOha_u<{J|YGt*?xYTF#bzyq|7^>!@WraYM)<I`DhM-?;ak=#&+yX$PGYDS>3t >zi24%cPzJf<3sII}4r1VGUI-V3rf9|-hyfa<X)a7b%?8b?=&Dmd_LyPAmy+G1^)m-d >zy(Fltc;(JDm*&=-XmQaFrJ+I<4!mMmJ2_hrcns^W8VeRK+iYBKb6xi&Y3{cPxqsTZ >zf$m<G<Z&v=^J3CA?BKTBU%d_uu5%i+iyU;AO`<L&?P%VLUy}@j+4^W+oj3UA8$)09 >z+wx5dAWXN=ckWI$9S63<29!ewEnS>9?$2JUn!M}B6XSN<kn6Ug_mWLzSHoW0s(wn| >zy_#$sN<*T)JCf`o4)G$ay8@yl$Ub`Hj;{MQlBk&P(TBgs<b995ne#tpsa<`4%KnEb >z2K=l8ue%QZGeC9$xL`#N(muY8ZmxAW;kHDd+MVcp80BuC9P)!vMpqk8=8Z}mCO+tS >zz1XkMu;}>jdsS_Jno53AK7moUnQo&mC1h<yQA0_65)|K?U?U+^Nv#&7ChqrbZ5Uc+ >zgRDbJ1m6!X5AIRFO5lBT2fnir^Xu(gsdXp=p2RTYK%d(%Of$JRj}NROGU=Ek-fyro >zt_szpF`<{VN3Vg7@t2s{GETcmiJ1?pMj4higA=hKCwEIRUJ5^4rSPmVgOv#*|37y7 >z85;Y6JDfq)Oa*s4XKm)3PKR&NktrQ5DRDfjvFWu=CtYXF0hP!X<Q8doKn$vH-1He8 >z4U!p-{6;59)L{oK7P!4m+YHT|9bK06NDp@t=!j5mqZhpmMc30G)UT45prl4CQfjA^ >z>=08A9jx#EMd?e^7}~HHF{~xO)>x)+Du#PXsaL4dE7I$2vhHnOH@JP9<LMu~(`AaS >zHN4iu-nQ)C_L~Z4c1wZfg0rU-&RzelJkZ<mIGwN}J%5U^dSS=lg=Y+n&3`OcxZ-09 >zmozut*8g+)6aC63nrdH8XBl1BKjX%Cw=N)dax9~#EW<#{&t$(dMT@?!<xg+-pLogj >zzQ@;ZeE5!?%}`y)K+k_NOi~b<8%tE8Ddaw>b>HA_#i8BwDCWxP@XT9>GH)Nt9I>7q >zc`HSufL9=6y}ygT;7H9I_1%%qRHH}6NxM}t6#^@Esh}j<9TL1gAoNO-Kn#Q0eaiA( >zL>p%dkk!@mQjJWB(QG`mK^lASt=4`9aG5k-P>9Inkn%qQ@1p=04>5XR>*cJ2qO0rk >zgx~KggBb4$+^<pERKl~f?oZaep(%5qw9eiuhC5e<W`W;3-dmdlo^^7?pPnQb$r=ot >zAtmZpjK)RLFC5Xq-`gM6njTL`GQQI4Tk9jSLwl&4+j-h=&v&nD<%UDe9_$NAX%%h$ >zO{5I(`**Ll-YR#@`^^uon)4R1kC%cxeA~BIZ%>qt$92v>>^S(?>d2&@v2USURBqBP >z+jfrzx1HYF)<53^^-z^2s>X?@-O2;5?0ur4`fgjxo+96$PF3qC+Jo9IPsQO|AGI=w >zMX1mU{n3-Eeu_JPTer9u6L!^qtM4?te`V*s{;J@|CKG39X^Wk8SI&%G^vn30x%a7w >zSK)>d-;<7sY_D_s9)Cs|SGJD|9kv#NG|Jm$wJwKN-<x?pS(t3I^5|OmmGF9`m8JNs >z!z%T386y`%smRwY0<v6srA~?-`W0Rb4}<FdRO42g=(wng6A6=N+D`E_&i=o!X>er8 >z*}}Tn{I%8cyQbnsy?Y&T=5T|uZIkKy@-61hez?&0{r!iF0}#^%ad1klsK`|#E%G>l >z=g?9Ua&}&?%vR%0RBaqj9msrY{A#J)HP+KqNa0;?Dq-ImX)dLur@a=Kr{urJRm{ZB >zRMTIPS}NVG;Bkd!GY-uqLH%j1^|3l05tSbOwKK)6#%r?$YSA$L`l#x5a*pZe*tr_V >z2dRby7Qfr~6zwRT7nMZ>*EQuE1Us~>o}+%BHz>E5afq&`{e?wUm|t*+#Q!wU?5y`} >za?mXgG3354T5tdEb+vs8Tt9zPp?h=j`bqZ-$K6}oUzY_m)x9aOn{02cG7mO>Q)1Sb >zzo&e=Tbe@e&iXjr+%0z7BWqk9%tw_55IuAYHu~<06hyx-ZZ2|K_!w2Yv6rM*!7vYs >ztg`EhjVjifB%Lk~)_p!xSn7LiPoAEq!*s5G&Hm4KjM_Rr-!;oCh$dM`2-elMXC18X >z+rG%Oez4&~-<5KQ#)&Hrw<u{x${5(~NsqQxr*;;Z7@q$+=4Jo!>tp7zy4S_Ar32qe >zca}}Cu|ZL%pFCa9{1{bkK4a9X!OAgsx*8O@!>4*zOkx4(ta<xKy&8whFTdwoKN!)S >zVg{$R6mED>(psJT;)wmLv=29coau&t?dv0n>OJyomGGYFyu^IHQj5>2d&<LklAdCB >z$h)7f&0GxAs$7`?bx}3!%_2yBU9m2o(Djqe*SB+MF5Yk}F1n0bJ;KU&iAbBxb*-o~ >zD0e?vpjYOt5oa*!|2=g!pYl2NP0g-M$GIGby_O}>HhXZ1Ktp+Ye7?JE7Taxf%d)q; >zXkU_Em_g7GX|JHbrcYPncIq>~0Oe9Gf0mN7!;p!$Pp)ByuJX2tskKMr^9+EFq;0hl >zM1mkEUMm8fH{zldK;^1womHPUa$D6pxXgD!y++;1XP};ni}nL`MTz-tc2CRml~HW< >z%nh!Fo7Y@62kLG7Muw~lEsM!cY>Z{T8>v-Ra42b7<;FE<ivY{wgkmNAlMX|$yGwjG >z!fSj6U?=v+mskxosqC9@M%J?o*KF3smcwqTZnn%rd&#k3u`V|CkMed4Ta*%uoZ(~4 >zY@>x~)fe-w_(o<y;0lFwa)fuYT9#u}EVrc_DSYp|z3CHoN9L^cZr!o&{_i(FDS!S0 >z`gb93%fHKq@PCzrYv8dokcohc0XC0~9g3D&%xtZ%EH#=D17DBJF^Lo*H>eG&KV8b* >zFvZ3mBMp%{r&V2@BJee<6GK41mgYVZL+e8A@OtxRRgn>xH0<tX-Q-iUKS@t(qjKra >z=gMX2vwPO9z})Hh%h-J|S6#K|BU{}*BPu&)4Xm%-@jg11(L5@Fey0}uHPQjE)W9st >zV_V3~XXIG(E9~W^Y{dQ!2xZ<GXT{8>&yo=*+;17AQ?sqdDd0y&Tg^95OM*rti04M6 >z#LKw+M5ku8*wL4$bY_mOO_Rr&ky|fbE#+B8cI-T4<ZPN!Ug*_9Ry{>>CL2B~-snY! >zK4IRqzpTvL;nakAm+Ge8OB)Wt=)$+8x*DAoWP5^|J&vuJHM1(`EAM}e+!E_z&&jW< >zA?T^j77Q7fE9bA80NU*~fQ<F37vl*t1ho~0ML)BKHbq8C5N;G;;>0%7g8+jnc#0s` >zqmPaG;C@>tMV39E+oblm$BlaS5<;H!5pnH~RC9BA!P=E+{O%E{4P-fQ{Q}D-Fi5I# >z`BH)JS6#xk9=Ek;nYoOP2&B3uT_=IcB?5NAj#?L!a4O_y=QP|tUxI6*@^$#SDjql1 >z_-$DlZ}+xEoOE|HNXKPckBZLiM&|_W`=0^q`2*{3g}ior)*G&LG5yUx><S`Cf(PcJ >z2i$Z>A0|RG_h|l4<n-Kg&;JUe?n?~Z|G<`u6|Q=~=yv@$zUzP;G{b1v=xBWLByn}7 >z>)Oi$hmL7Z88l?|s4XZa9KRR(mJ!%He$_nX>b<Z}yudy!<4<XiufMYH>?V9F`Goz= >zDWFc(=!T5YkF9FT74n+k&we`d)TZQ?#d3`DL4}}t&NS*!&){0ja=u0R_-SGUyyoWt >zfS0+vBeO}ROwQ5#{254fvqArENT!7Q6uY=gqyGzbeqSo`xZ13FCUp?j&&fx&L}Eoh >zT?t*8xqe?2?Ya3N^a<Hn;FCp&EzG&FRgmxCuZvqWVQ4Nc<(N><bZ)Da5{@o$%~4JG >zn%E(7AqOaN&{sK3lERM0^HHN@I2JZ!<`#e2b!r;DdtqoDL%C3=PYzzScb94`bmsT( >ze2u4*_iO0@LrSx0=ysTk6%hW88sbfEYo{aKma=uevd}MkZi}mN{Eby??1`U4=7sS^ >z+kghTlkKkzzcX_^P<q6?_Cf9UxV+GbZnV!&iRLR=UTo$b<pZgML;y1ON@7FW=A{%n >zORk}Q1j0CW5Vg0aFfeuhha?jTnxmE<Jj;e3PvwTjkoOBTGQ#eJr@;OS1twa$laDWa >zzk21y$AiZ<PQ6}aTzhzO(O>)rxtQAx<bfd>uS5P>`EEY|_Fme$B9X%a9R^L8Ir&~I >zqGVReE&Er?Wo1%90r}b;p9=}q*R|&I1ZkERd<rNnWYxrx)n5-X{(cc+Z_IDq@q6r< >zxFpl13F&hx{mI3~Z|4vH`+;2sdX7~1ICk)(+3k;V@5T8Ci%Z_0`pJ+L%o4B=hr%w; >z(3VNqJqhw<-A_cLho3J9VXb8Kqhxr*z?ITz<%A1r--XJGBCI!?^qu_5a}REjjOl37 >z45nZSvC710m7~)L!)djYY31K6VB(}&Pe!H-;Sh?N)ifzVq>Py+G6nwxBlDiJa6B^N >zFAF<%7CU+f2k3$Iv<qFjgfTMq=vy_CG3=-iC1t^$3JDR@7~N^eZ#ij^jFplBc@lC< >z4k{&MyVeK*%}>!B3t{6Erb%{e6>|~FarHl>3lc4dhG!wU28hFCa5M#DH=SR~0v}|d >zBc`z!5y6lGvtpyVSSTJDd5es=%Tj;J9eB@z=(15#IW9q@ah9#-CYt!oLX^tUlX8UB >zG@x>+$T`S^Lck`&#Vla@E@B%+SlL-v@4yP4f;3^n`{iguG9-Ya(nUr^4{V5-#_LFS >z*iqnic~ZAelvX*(4Ol{*2KiC3K{D{VgYd~#41^nTP^|hr>p`jv%4GuE^00CyyiNwM >zq#%$AQ92UDu{B6QQTV|^2IJmtUc}uM<RTQ%PXtFMm;MtA_E4}o6zFFT_O%$i#s~LB >zh-A<faI4CP0jG4WC4Su{yu~uORgMi7sQ8hIG#`S;BZ7~Q>aItsY#(CWBVxRdTG}Hu >zt`BK75<81fKVGhGKaJ{Nqw$QT@kOX{(NeQJ9@(d?HGBze$btZ<-({Ni^GDj#J~|(= >zbd+$Q<#JG)Q1z}5(+{w%Y_&o;<S$u$l0^&`;S5C@bNZ;iS$jR%DhJs_?`cBy4D35u >zT}lBoFubD(XElw)Q`C$iV0(qAXpz?CY0bS9=+PMbqR{ib9Nr~YOQ0LLvDG4%(NBSK >zb+ZZpzt*#mzSCMj>CR@h24;S-l>?Iw7<zw(^~#l_%c*ukXn-7Q$JS)5PD2<%q!k4Z >zkq!s5RcEro4w4mpS<nhHGMx1q^8rL;<1dh*r4q<)irQ`#^nqLzGQB+^0;ed#K`7`k >zIUWFH(?uj6n}}e;tQ6GOiPX-rHA_Vt6AD@?M>a%6&9MRC4RtW<nwwmyT8LrccM{n! >zz|B)+BO`=vJ7xek6M!kbctRBhckqE6e6$VL8Ltw-1~0ORhTQNuIV_lk2w-R66D>8r >zSiTSvgXvr|>pfN~%-m(-UJ(JHRwrpT9*=E&{A_nUwpCKFi%Qf2l-z??P?-_-e#7=$ >zKZnE9h+6{=56P<4(}48|ZX_cE6dX@iIwr1491kgMylPG8dAzYXi|R;oI!0FUw}HCR >zHa$;7hwfJmrfhz}+Wg_m<}ZoB3kmBh+;WixRU}Np#%ap_^tLRzHi2PK#aK^pwykpB >zL~wDfa@pRAIZGzIr@Ow@%lpqP?Zg6RX<`y2wG*F7aKAST%^!C!|N64phUiNMI5*E` >zmgl*zo{||zJxgsbMYUr++8gkD<+wRHpD$KN#9$AyR7r&%ugG9S796klxbMA2io%;l >zHo!a*ODQ{z-=c<ENJrWDgDh~9usv6Z_MOJf2-Tw5sKzCvuUyrUjkrt3xN*%Jg}BR+ >zfabXEGMnJbf`tRD>#9)An~c<%R!yg1XtwYG3ZZXNX)i0gkgb{!uXKS$2%w;k3h@`% >z*v)bU6CpfU1mbn#`=_yYmv8_VZ1o>%3u&a_6)A)O5u|Am^+1G3pyVDT!w4~`nKif# >zR|qXji?`&Mv9tI_GJw&l2eYC5Y$7fmUdXlX7m>WzLz>8>CNe@Ag#p0f@QZ=B*o0Ox >zY-arhvx^XOk@f{{Vm}L#OAhdrLt2GcE4CVA8cKKzP?+k5oro#b@HgMo=AVQwf5Z7w >zND0&G{jt~tmTCq4sKzwfTd0WYBI3HV0E|zY7~yA&?re*&u-jvAH{?W&bghmoTcw}^ >z)<o@0!7$jkMtRhpl;}25^dY;L!(B1Q>|*n}V#`t>Rn>7Z1974hbnEwl3wHauyY}7e >zLaDI#TT|2?*d2J*b>JVMjiw8eAcr;?pgyOd9KH~Ke^*tow}o_bu=apuO0t{L%%yi* >z#gj~aBv>C#EE6Seu}?b3O4{}#Ns0T3)3p@ZjkTkwMR%thvOj#-J{%}z(qUs9DH@LK >zuK>sV{VqL_r54V`#7yJ**Ypr65IZ6KI~hG0i^~-O3gySWEKs5FesMGMsXQie8oQT` >zsUQ<4<+%QQYj3uyxd>yz#t^xCa^-~1OC-Zjuv;t=FBb7i4h~;slMocx&^{<$L>k4v >zdCx)}6roaBm{%07%)?5XS$MMAv7~iKo*Z8-$Ck3yJq=;GEaii2&?_N$Hyb-)r0T{- >z&kSz7IIXTTjhkd^F4Fq?MHr9+Jb?`nMxm-HAoFS9$RTn?ntxeP4T}2Z*XSC9<Sjzt >zq!6{pLYc53j%46{i&!s2S5Pzp$cmxK%H9->1d8$`3yLwpe<rJ>%K>2-^j!#1oL0O0 >z=BDE`-rNo|CkH@C(=H0Jg1q?$OJm_ZKrq6qY73gDRfIu>*Ru-GlZvjAdWs{Is>#K- >zdx{@AAjVQluH66hsz-GumH1v*`pKb8bCq58=V#g4MMcQ2o2AnNm9%orU*&pf6-w`s >z)LoUgh0qzf_AN@))@xN?gaC7j;E}b~s#tARsE(?uKA>LnmR56p2Aio~n^RX?qF%R^ >zQ+MK5ohe1L^;-SK4JW#<p?cFG{TmwEF5n~N4UdJyzozPq^iy4Ws*P;c;)YW{(%${u >zAcXb`U&w(87RJOJ=_t}92R9izYMN;@*Zf2m3e`C0luHu;_#5s>w$-61>(CiL$e8Lc >z@UucpsYvxV88s=#_sUmiS}^!;PaG!SdQT%B>_LTdUma}Guu~`<BMUw>5g&X+JP;mL >zoL0{N`hM>cp<jW%MMP+l<1ep@0sa+PA;gAHD|>z|2JGM72<&DGmSqWNu!(0ys(3ar >zWtueg8XhrCN*Cc4KI2}o)+Y>DZWO_r1`K%dHUI8|nkXdPV`=BMV#24js;3<`zQ#U~ >z%g2PE1R+j`4b~Oym_MYp#vX2yf;R_jQkuthTjen!5_bV|mW>DyBC=w^?kTF_pAoNE >zM4qrKam@3w9I}^%_l{N#m!sA+tJF`E0@y?zTXpduA)NwqlyCo=RX#SbSjtkfqWtpS >zcs1}kKKRd7B&Dl)O~nNk=HMS}(uwXPnwxkTn9XcNqZ~`k9yq6m7+b>EzPKjR%zAJh >zF*eYvNxAN`>V)Zeaa|J9_iszz!#}FJ>>H=JssH>@xwXsm{U42R%FQ3wZ?0|}fc6de >zC<4Vwl0<gRIU$@JDm8BCHg_7l#~R!i>g&mZLfAvwGI8Ec!-0LnyZg5EC*9i84Y{Cj >zJ7h07)k!7O37Zu<QZQAlsc}b-edmN0)lQ^dokBb+xqF@EaJAvy4Xsg+6Cx;Eml=<P >zh*a&^=nFzO#cA9H(W`ZAEKi8RPj7D$X%<>yFYHyZ0xtFE&^$7<U#L7s3+Nx%#-L!1 >zu0#9=uH_U|FBxFEF*+jXdsZ@rjq9INA;zmEuy0jx)<;kXDcoeEGNZe+#F8tBz4Gw9 >z)oCq%G1g>ye~28^N+xyms=8ELTZj-xg(O{yGG2sqy3=^y0;@QUwi~Fdrf5Y_)IHfK >zn{H(u1?#&3xZgk<PHPdH@rD#^Z$Iqlnw`<YkVYX2Q0eX1(5FJURV#Q=t~{oz5<%8w >zunFEG!e=tPo~*9RhVB)vr(VH$8p1crkzFDfCIVJJ;Q3t$9Cf0h2smX>(wx)gE}T{; >zR(jw_pj@Glg&Em{09aH)yvk?O*?%^@db^46{@+(6uK)b{cYCWyGl3zupnuYxmIF7{ >zn*A`Hej<a7G29&JtMJ;k@%1L1S=WBVX0Fv?cI8|08&me1kfX}stNnzC%~zhXfF}cv >zp_e86#i#az+SAa0eiy@?KPQ9=!r#^PD>pP&G#!1fDSEG<8*tfoPkK@u!EA?MTinym >zx}<~tEuNL1_02xN-gZjEb<D>2OY7rS?S1u0>W^n0G<%)08g{QT8E^MH{aJrkg_&=e >zdbuzEmtWiccKx;e`%Np}+!d@l^7-p?mA0oXj6(^t9?A3Qr;HrPzwZ)^{6(tR!ch<Z >z*t>b;G{^ys@pX^R*&Uf&dH%h9;wtNu&XZpiF}07~3#9)0y55hS*%x-!fAY!ud)16K >z$A9mr#CTM?rWH=b`kxCBlCDbo&iF?$>NadI9PJ&8c`lAW*EQ>&xZ3V>+CA~8|MM|} >z`;8k*!rx3<N6SPy_MZup_=sB#ZYL6K_t~5YI7{^4`QJ%y9y#UT{Jl8cPjB?1WsKW! >zef&C~7l9`sVaAqm0i97Lo(CrVZfRuu<8R~WRm$#w%ULmGa$Vml*Cp&L)y*c#%jdTC >z&W6kP^mpmUGw_G{;<uaDRQcY+A098iW%zvd^DX6L3l(=sY!|;_ooxQ2A>%`#%eSdp >zwU%87JNwFq^lqD7_R`#_HUE!Bh|A@znmf$Ow-WNS#&Wo({>$zLek~k+XwvhXn()kD >z;9AxZTr?@-xY^T*J?Hrf0Z}zkUAtmV<=6$s#S8z7neJ46vHwicYWbl0wU2grhr>Yj >zq4Bp3x~I??PWDn%JTpccNFIJ>9RBAeSubr))TWcMC|UOp`Rnt%Q%CPP&8*G(e>qb! >z9}j%|&G8v8zn!anlr)oX&{#WD7#CS_-~7Ocdvl4y`;q1{8p0!z5J>*zZspZg?u?76 >zswk-P4?fdW9hwert&O~U)h+D!>?5h^nU&?c<TfY28Fg#@ayR0EDVekCuA#B*4i}3p >zx36U%Uv}}lGwSO`I_XsDsd}PnY(!^EXZbKT29Q?O>@#sv!pSPDA^Q-QM|W(#fbgy= >zehUe=U>;tTx6LIj_<Op6xQ$+><sD;pknB$U{q@+WRjX~L2b`QAnLo67bhlsipK@2V >zOCZ1E?KMeXJSml4DkGdqf0beQ;g$qfi>nR3cchdd%R3;SDe5g9`|%17BHe7o!}64u >za-!DmKG{9WMKhJ#FC||udm3%161Z7CY<cXZyH(%ERb{JI(rx@!r!lWRm0$5*(^ncU >zds%0kTy{ls7x1@`>j??lG%hABJCm9Ti5}Wqg7pI<?tZK7ge}F(x3JwE<t}SKHTd1u >z`t$wIp@Gx5sX__NbW}Wu+ZMX8R?S{yd0Qvj%<7I|bBEPE^FcG~`XkLqhsWv<GrNjx >zs#vjyCx$Hqtv0QIP3{{qY~5j3uzfT_HRQvjbv16a%c=PM{wuT-lM{1xJ$FhDrVO5V >z<!xDDJ0(BF)eN1+)btF$6vmeoP0gA-D~#%+CpLW1ns?di_*mqf+~F6d7ZI5A{K-M= >ze==$MkLz;uCt^%2__Gv;nA?C&AA13Md7<XU$K+2L)0(Gl9u?$mG}9%B+=td1F4wH> >zAj6aM2cago++8b8nC_8b3%g~dZW~=pT#zdfV_Cd)Dgx_MEA_+p6l`snR-SwA<^W_h >zH+&W0564PyM9ZR&$q{OPJ-76D9KN5+j9PiVl<2w4*G91+Ct!m~hN}70FkMhi{;-Lb >ze~zZtJ9HGx)vT169n@!pzi$K-W5pNJR#$X2uf{4tO?~>@ob;6A9JXpGS{8*9n$Xu_ >zpy@@yanm<5_-6NEjSEXT??Jk1Z9#)77@s1OOg3S#*5GZzrIKLO9%5K~?!sbiVF0KJ >z5)bn*umi@N`ZMUb+7Ug+OT~URY*<v!pk1$wr=EER=su!B2f7OE^&=pAdR#1}kN6L^ >zPlMPK!|{=BvVBuuHOhls?F}!19PXBv=Jo8+`7v>O3j~;5JI!JdmkL~|msQJ(XZ20f >z?sy%%T=~zu%UTx?Pd~#Z;@K%z!sSQ#l%a&`s|!-2gbjSs*UvR!uxNwaU84bHzq;~# >zXY1Vx+v8qcs()sdV|VS{eY-5{RrHL0+lEJHyi<A;QHPCOv}Qg2M<!kQx{e0+WM*Fg >z^!2EA=Vq8sf$w+|2|c9yU+sNiRg0nP8Bf1wV>Mm6Dpse@Y>z+d*Z4aL>o?)T%nKfG >zHnhbi*Xmt3N~t&L*oSl;VQ4#A7P&i7l(ys#=}86rEgjQnw!1`qjC|7uD1kZ!8`f<S >z<XHOufR(tr8Ul4ZURru;hhqngH!nlV@5`08#VNHC6AEY@-O88dT}bJi;;@b;+=X9K >zJZQYoCP{<_>gz4sF6BBBMBq*B&ZY_C+&zGCzqARE32;SBFE(ToZbA<jsJj=>;C4(f >zjCA86y=H9u{Z-OXT(6kVa^Vg5Fdv%+TNYV=6{0WpxT-dBj<Z`LaNOA8jio-tLHlP^ >zuKv8I{#1}d>J$-A!x(FcJ^*M+_c;HP1|lvOc@n1a57m_-4pVcMry^k6NJBaSf*k6? >zXM&{NnOOg*AjGCQq1njt?$JjTTR?2JG9$KH^`$}!8xf%<|7-Fg<$RN>X~NVu^VH!C >zF4<}3e>VN^aUM7~u=~H=ICS*Ki+@%jsRQ869L)>j0urAE+s?Y^mc11Ct)DBsF(l4K >zTJm?Ll7@5*FBSNN=265wm~&Z|STU%7e1{?sS5iaK>6wLVp+HO2=7fqr;{R=lf-J3C >zeouH~cIeu@-Iy=6_cG^fE?&F8J2kQ4ZRp#LZ_^&$j&+6pohtIw;>tp(UzKs^W8F4t >zj8!yBjB|bROr7)|pV;iuR@ne%#xTZP>}=2OyuUZFW=2iipA%?dndcE20o`uoq6_f> >z{9_7YBg{oTmnpPb5MhrPxoWrj<wVtfL+=`q>Ow5@Ts!1w(fpA1A}-(EW(HL-;%ZJ5 >zHM#+u>qgF!Za{gyMJJcKE@NnIHIpX>^KKnBVxY!07U-kc=v})&S?88`HlvhxYlB>@ >za(xikb=;FjI2pKVX5N;CX>5s+vu=cTwyDD}$hw~{M1;?V6M;?2-Sfky4_31d^p7s! >zTF(p`T;^7LEktN;o@8j?FBL>4MF5>sgSZrCZV*Tpmi%+rID*w|Z>EPl@9w7Oi_38> >z*3CU!JE+t6J<r~YjeZ1k#dT2&HZ<rXLr5;~3aj8n<ml;2<S`j!9~0coL5KwK95Kq& >z3Ti+_ttJ!wI7<6iNfrDg&)Z2MW2(Mt;0;t*;17uY)#R`r$tS4bJ7V||T1s?Y%HG>4 >z2cd@(-lnHKgYCwlia4NkGNpa;^m7~-Z)<Ay;nadacu@_c<VWf;Tv}ydTJjR8wk<6Y >z2VX0L#o8g*Vo-B8^7LV7TTS}8XXzIM!I$hat{%>~W{<f3EMxVi8mN+-*~}!xvoc=@ >zGVeXhe5iH=P)VQF9C`8oNz$65AG-OA&|{ys9{Zkm?6*B+<?XS8HCc+a2vBTR90!aT >z$;w{Jn%3hIYGK5DZn-}apfH;`N{Uyq%4Hz709Kx$Xh2O{O9gLdf^Do}<zn~?F|tGq >z(>#s@B+WE2`1Ux&X9>1(3A_#u6A2(OIKTu%)KL*kYxGMQOxyBE0Tp$f0|hj=_$9?X >z;?zJKXdhKc4|r^sK+8dpWGWc2ze;3V*&Hxi3~i$xPL?TMqoQweP{sl!>m{W!vc_&P >z<jfMPTmY>gAQG2AZR^%<VJfWJi{Stw*^>afBt~^JVb?kE3>?JD3Q{D1hdhOq2;hK0 >zd2UVe6CA>o3EIsBZKuL5KSQr20Zt(jJCaerA+yPh-EzNbA|j;+-nIlzq#|E%Y%;{) >zBTHy52XZI{AZ)?aNyuRi^rsE<P*&s)T5M_nbRQ0Jj)NdygCAZ3yCopb<B)X@N=ugt >z&!-~V$jX--is;Ou?g{HanzdwB_XdEYazchvi|>rkN9T)WMkV78uru<|b4&0Sq`<f( >zcpN!vrU#segRajiwd{7VWGa3lDJ}Paz66#1nAo~UT$VwzidiF2^Z*Pt0YV*ydMCjB >zf?cDQuc}@H6^Nmm1m&8~%TF(r1N>bcts;$_d`wVLCp*0USA~RJnM13zE2!LogFC&e >z1XR*)T9tNUl}8=8`F~Z?I)s1R@t`xuL*E@|8COT9L85oTVxL0*k~9KZli*R4Qc%-D >zf}L4HnnuTzaX@p)6?>Qv3qaeXDq0B4cgx^qS%(kdFn(01&l2b{69H9516o^{Sb;7; >z91y@x2@vP9G(}=KAi4s)*a<-Alc7BPU=kd3&p`UyCHM~U);g*(;ID2JC|YM3ZKNuv >z{6wDSAc}BG-5his4wAiuHmrkYP~k5*T1S|QDom42V(@kj^a>Td`WOd4B}T-HQ5gcI >z9aPj~0mPaK0{pt1a_~J4m@9*ylEFd-^j#{IwhCf42@twt$kPJg-9&La6_v;Yl?l*i >zaA0kw;%)(=h6?dxf_I96<85y(OFAb5u-Dd$!pti&r9>urSRUIZMnB;w=`mq%aA;TI >zk!?$eV^k2AgF1;rK3wDZn28Eo+R@EP*oQ;@!$cpGL9Z>Lv~jQ+CZPL5?#M9r1n})L >zr5dqty-Zm18@7iDilT}PmK4=`mDDeZw10~zj!g!WuyyrKrjtz;8qL<h&Gz-p8z-Af >zn6R6;7U$rWt&YmbkrwYsDASYta_i}UbmZz2;pxyxs2jXBqBl7zy)~}4^}z4e_<Gb4 >zz`<prQqQ(!zHiGiX+Ozq&#Q+PytgZU-!AyAv>1e{E<96z_e>+=Y?J5N)^tRBFzoEz >zvsdJ2udg|mNcO*)e(pcE^!GW5W5;lM$A4PsZ(wKh{FC(a&wJ0m{C$4f@dEO<BH-Xk >zsE9i_NXZg%pTP6x66$p2&K+Wf6@TzHG17IZd=Q5|ErVEcl<KJ9bDY#X87M;#c?SpO >z+C$zkEBxXW{W!>b0tD_7B!&sk5GbDJpl=A^fJ9xn1b--oHl#Y9JPx*90v#V{jKZP1 >zap;Fjhyp4C{uTdD&VCpGUcG}uz2B*Xy@a?b0N);iMHzY~UW09*oy`^?4{(5|4UxtH >zyNZ=8H~>Zsy}tyvWE!6MucrxopMbQam8J>c*MM(om<W*=9503*=b)dFnQa1O_nJUJ >z?hUyH-$8{9Gtt7QC^Kc?iio*Ui~fYeoOyc|R*s10K#s^Z?#3&MPr&{W1D62A*CZHs >z2^9DZVlMz!QvLMAkZU-k8rh*4hkj8HPsCx)F(I(!uJ}L5IA-@lF{(fY2jta^3`C#| >zbYo4=6><-MUr+wIo^1m?r7s`?(`!}8)*Q~Yy6e~8G9ylD_BMy~ww>rbmjOP%5f%b? >zisb97xjV0SpSXVgI^@O&_7;5K;B|<t7;>D`cjr&?=nH7#bC~Qp?2pThr$sj=@7>TA >zLu(EDWr6)~KX|?02u%|fdMtsVb~l^-(LXcp{CRQn`qIr4|HGD^;tZS;3?Q}O=#_yr >zm2kY5gczzs>X2wHNXTYV{r%EP4(wwO<ho31p*8r3I%u0Yco5lLB7<+op$o`c_5cL4 >z7`}T6TEs+^F~M8`{1Vg3f(Xgs=%yToRj4YRX}KQ40UciByrAKgBZI%T^5IfZF9G9G >ztP$@A*@c5<GodA|HzjLqVwP+Gk#-jo?7XC~RRCd&r9pM@?v2Pa8RUQuWHnE4&{78Y >z-KZLlk~+CQnS)v{R@lXXw`Cx1XNh--p}WOOK1@W6DtuUm6ajdK_+g#^X}JVOr79g0 >zdjljfg`;?cgRB$azNaEB1z?dFb)AV!A62`8+n1mU+9hm0vjl&HL)K8yMKU#U9im$X >z&)^^vnXofVwWur5Q!MjGKM`$ekli)#!&$pe3NIXB9<2c!TmhmW4V=cTv6U%oJPFSh >zGSA>(+6~B)OQ1($*k?b;qp59Av^;iFVK1icZ&(7$LlJ*Ys2*oNnA?Du?|4u-@Ssfo >zU@24S^A!5o67t7F&+pNPe;bf%P9EQp9SJFsxr!mEI^-$_{U}WgAsm5K7d|pbf^U#N >zN+FHug^g8m#*9xw%{GB84&(q%X%y=*H|wzlZDP~EkLjDnud&861Yj5K43Plk9R@$Y >zX0PuN*;eM0z>`lxUOw4fQpVo&H0sFHxR>C42h6i^h(k9(@gFOaPJ&Nyo~8W@N)#Z< >z1h7C3^p^ev|G-2<^~8Dc#EvCYkqo-}4RM+Z-ARQWpuO_oD8*B~U1{VJnWR7f^ZWsm >zrJ)LZ5Sx}@%~Zs*CHO`hq?`i^5rZsWs_q;E8Pjg$$>6E(=Q{$Cd&r)~OmMsaaa9b7 >z$AK%Es3TN(ybKaA2H#(X#!#WBXrvQN<f=#v$q~+NkwM4PAUl_!%>sBW@UNf(KUrz~ >z3vq}Fzb!+CWF6fmRtj4}UKC#{<Dm06W&31`&q$Cw0rU_RaYH~!+!PZf1D#}|L&l)j >zf`b0`)(k&Fa>b}@8JNDbX1zSU8PG$;mLc|#962uo2P#^E#W5i>wOS`-O6$apkEzHL >zOjzC$+=mMCp`~%f;4Lx`SD;)lK)ED<BOH-AGH~cCuz?J$aTU6a2}fRqYN^A?;fQ$J >z%t8`;t6;`793J;$reG=1x*utKRM+9cYp2E6H1k=P#n=O!S&vunmjYPm+gau-sIT{% >zfYLX?58lL!!_6z9t4{*wVjAc6l|~%Iye+Upn534*t3$WSK$(kgv&`pxX#Y{A8C~-w >zf9Hcu-c|J@M-t%plTq6S-ZgFpZ(D+uBb%FFA^y`!``@4c`~K1^=#}sf-HjivAB6&1 >zsbup)s4`;Y!otO83lAHW^8^U9(2qB9$eblGtM}u}gAH=?#aYZu8||i_4`Tc|{Gu3c >zP;mPc4q~5me{b5>mz;<)8T8!1y^~bb+kGXEWq=a=Y!?-_9S7a{yEu)iL}7w`?XP{n >zAyocFF0V<>&j9UXBF=NbF&yx>6Spa-mzxC8JSJot6Ftq*Ikp6UeH50N1c{=;&I$V~ >zaR|sr{pv;>)annkji#mE0|Mgjm6XSoS>ZLDtU61jW)9p(rj*A@xwnLfUxHy$kjIvw >zA{m0c3j%Pn)nDY#>yh!(l<PP|2^G4Ls_5;oHEIc7!-1@ghp^W;OoEpe2+&P3P}v%s >zUUX*N*ALrU8F56gqxIZ_77LHYmS0z9d{5igR1crE-TzcTEtvC4eH1e$+!%=1Uf3Bo >zR%w)BsA}@9&8scog!#uam*)IxHA^mZz?1j+c853XeA{LFj@iZzybE%)J^!p?UGinr >zUi{nfCX1TSqcESS(Q?aoPjmKGz76c7125nWms|bMnZ{gLI5R#sCZbjPe(OnWAFbHC >zI_-Aj*O$15B4>}ehPrwah-3%%sm-pj$gK_DC4U=wAJ0D(yKjqLm<aB8)<X3#zq(6h >zokxjJUDJX?Rg}+_z<8aj>WLp7o?@Q&Ej?rPMt07>Ofl^4lXZ_;%&s$R>#yt?I^|Ks >zIQ}c?omZt*jC82Z|BY9J?Y{KkcgwToG~O2r)!@qc9U6J$3ZoL5nbcjcw6NfGz6JhF >zwtgkkx4@u=RZ-Bo#VvKZh~aA-UAN~#>g%d4CIxJ+ZbF)Fsh#4l))SlidtP58A2rg~ >zys>%LTp9iH#7sp>|24fl)r8unV!H?VO#(m$jciD2I-^$@abef#602bN>H58;9&>ry >zSLfPiY6+#WuLbVjKZW_$bMDc#;oi^n>KSK$igH=MfoAy~bEMhh0SkyGz7a;f<#?d( >z^X8hER(M<ELGg!($}N*Y`W3nw9E(CNxAxb?YL2nO9NVPHh%%G2M$tJolM_v4R$Z}r >zRk4dfdKLZ{kJc*3>Yn{&zPz|Mc^<qCtu?-_4(y^s5aZ^2tNvfjWj^N5DFT!9d{MS~ >zrnaci!qX$Ve(%_|=-N~1^P+-H2?f)Y{oe4H;m|oFc4gpXKBau!94Sf=hxiq7;~){v >zaK>x`Eh8=toS<;^{3Dmk)b=!75@;M6jlZpP43#jVTjrH;$M95f!d;V#qY3xSS8t;H >zo>)C>XyM}~iucs9W*V+M*!X4YOQj<s&OqjSlswLKQH@HfKlJ{WVa59Y4VK=g@OL<e >zWsPq)*<kx*XUGxTr@QurIg4FNjo*|S*nt9qB1&8Xc154e`A;pqqwt?vN(_x}yLM}e >zH5S(W@^DOLO?bv~*q(omuA)=r4v5XEgP075)1|Hfbp{o&(h0re)>e0>vrW_0+e&Z| >zwJmj9|4z*n8O%A%7J2QBo15~o+F)F26MiPTK3K<iPoAOohUVI>;S+!I3^mTYDcaIF >zFDyJjRFAAlKI+k0qWU*hAELMWXJnztSS%%9-|o(v!UJE=>emHYslU!8uj1=k%kkdx >z`V|bV8T|CTl*|LdqqAh_zF0SVJLRH?DPYNY-r0!9;W37QdU_)U){V;jc02;>_jB0t >zV0`huzIXV7k-;bC<;B~_g`nNLobASBg|7Z=Z1PW66WvF}2D75=(?AR@cPals<_z@k >zh?@g(8Az{DFrrunEQOgLs?`JwSQ)aI5qCdFnITG2hqc1VgKh+KSaK?3ZLm-Nx>;QU >z7q->BiIZ)a)I|KTkq)~hC@_yLO>E3?ng2|4e4I>1p4}6MGEum`CF(UY>{{4jihc2` >zf6Y?|O<yfnbob4@kz-|*I^R0-HhqkLm?2kL`>U0;`RkdoBdd$qr&fS=BrCav@+0~G >zr%N|X&^0xF4zOq0fJq>yL|DQxf5{*+iU&K#l&Z9HNT&PQuyE3#y16deZb*bln|CH7 >z;xR5Zy7=QGF6$URh5lL+)hj*2+DXer$3})Uq)RzQPEEy@wRHH{&jQ=7<&t>RF!_Dz >zZKuU$$dQ#jWcz2=OvfXLSKZxg(jS$&+5r7a?L(Mw4#;kO1ZIbkGc{l$f77TOv14Ak >z9<N;JV$-DI<34N~z06m3Vk@_$x)``!0%pTAm}BiyRIjYaaCDk<-bm?%u0Ub!{j*wJ >zccn@<%i@hKY)qKDD``@kM=p-Q3~gAY8{NX?n3{={&jbzY7&+v7RJCDOR)#dX#JPSp >z%_^4egPL>9qJu+C*dw*BsIvpL&Nd?4_0(Gyy2=G6plQ4-Y!H8R;E8AFtmdGR8#TqU >z$ZE7n^K|<FC?T2esWlDVT|1~Y#wi4L(n)O&yRn|ixw=Da<uG?={aoeZ4IOOEs+S9n >z$9!V3KZ0~K)kSroBA+_T#+-K;A}Yq`2LsEpnzd5RekR|3R1PbjcSS?W3*90qg#B91 >z>%El=ws@^mE*N3B**jhc%j#^`|0wau<3NtPiBLCF-vyneJr16-Y1{bm-HvR>@g|*Q >z%=MtXey8e>p9x5Y2j1UnwAwZK#3$3X<NqqAmYv_u$DiC6X553n@%hQcEY<y}2ds(U >zOy^6*M<jbzanC>QtTynInZ;~E20yBJ+S$Hy{l2ga*u>rHuCC$p2h%o!|3@*kHBUJH >zXGiwGYkJ2{Ur64@4f~kz?0QbEtKqGXS6^BW-?+}P$b1t5{W>bm`xQnx_V2w%R-uZ4 >z_hWCZyKGrhnQsj8%bHPsV%L@3AfaF2}P_)e+MJWkGME1bBLgV--pE;kw^8D4rC >z#b;v<PdFQL91&n`HZI194gs3%-9jVOYEqraR`K}<JDc!F92kLtj{GeyGiKcRVbyd& >zj>G5-zOB}kJV#wE@JyOfyVS#vzAVeL&(tLq%qvyT2?~Nno3MfI&d_=Q?Df}09!MQB >zY<!IT+YteFb&%rUQ~9@@n$#{i@RQ0eA@aBCA`S=LGMi!MS~UnEyJ{J_!OF$2XBJTZ >z^tvo=Ugmv#s;hFSopJ61uF!Z~!6&9?c)jnV0uR0}G3A1vg}G1ePI4RJbh|4;KFPN! >z=A8+2A5uL!UTEGSLJs{qxISPRan54Sy#_aG1-g!Q$2MVh!sxWO0={E0-RgR(b=xNN >zd-Ke0-2WTE4hBE%><4)}mwyQR@%x!XC*@Mv$pxSf3itoz(v8Gdki+YE^n;13%^@!r >zZux5II23I`y;0gB$nXF4@l(Lc3~nFpr*dgl3V$tQ8g<xVD3B6g7^3xB;~xeAzg)<w >z3iuzoG(?n8-JOo1-W(j=cl1lcr#|ea)ijy2PodwGbUu*QJ9cg$scm<Y>al+npPVoK >zwlj9qqp-DuI{ZIHtWJfW*|E-+DLAg#Yy|1p4F=JBxzM+k?*QXj8s)gB^3;s7Jx2IW >z`MhnZieYd*x<?iIi)Rhv8Q12Tr1C%iEbK7NUGI>?pcPSrasps{yAi(cNVcI->CO?p >zV=Y%Lh+mw+qo(prC%6G4IqQEG?}g<$Q%hoNvm;XV9{2JC-}5;0tJ#3X#|X-$|KwS< >zXK#tk@eazSIB*S&c<XBUy7{~fL1)4yz{|neP!i9emPfDUZ6W3OwgZA7Z_9j6U@Zil >z!H-ET59!I?;m%VI5^m|?Z#Ak83CeYv&m#8lclG4B)++Glvps`y*4Jh`r55+d?H<?i >zErYVd9Ds5qKvm5l$F^I#=Wc}wohOv4ikj?$a@g(JD)U?`03Rjm2zs)ugLw1pe6ODD >z;EC+@u{Z65_^kY!WzO_JMOo`*TmF8z83Y@!C)1Q%Xy8a1ls^zDpdmVxkV6A;J&Kr7 >z{>Ap3fPt$xEs3R(M8!*@x?d8SDj_vUH2Nf3Q>zl4;_S63X$VQGYX(rDUHYL?!%V4> >zS@wo@sp+V6{epB8d~hAfd3kR(gv2vs4jRGuOb4(-m9t}~bBok@(`feQ6=%gWd^#$Z >z;WXqDI^>o)<lZo}N$gTzo8x7cZ8M(}@pFi&HB2`e_T!^=HYojHytE-V1jYky#r1=7 >zn%)oZM%~&(y2YC3Iky-1!E!f|&IYOHF&wyfqim*wVy1GVM=IYZHphk2LC<Q6>dAHP >z;jWG4l46zCpUJ|GaII2vLf0HO8maWH&0gD{y)PBK{3|!wJr_VmBi*z8m!vQU?oJY4 >zr#AbuX9eXs&tT+K{6w~D?P?ajhf5=6o2No<t`Yhh@dM}E_e^lLYq=z&?1Sz(mH<y{ >zlpAl9W17!%*2rO|<^l|<2MMqVx#lZ5yHayk?_^^~?r9qFlz;O>-N7HP@x$A5qw;fo >zjrfieN(n1DQSCWOd%1=|V6+F9lA7Z=l9OJfSYX6c3*rLgp^Z^)q|xym?%9BGs2<eh >zo62h}=J^-_Hep`uL=Lf*Z=cVLY0t5b<>|n<*dV@Z{<&|yr}Ri%+<f+-o?Jpfj$LZD >zEsUq*z%y~r^-ongr(e!`?)m19;zcK}GAaAg0zZhlt<!&77r!Yo>z-Eaz23fieN*@P >zf$hhI?16<<1*y%b8_jDt((5+g>rRW;y-cOiQHB2?Q_%MR6jT3BjL-I`Q(T?@tC((o >zIeXuK>3$4}??!qMQp+_o%AcL$yZ2<zjdI_*9QU5cxkv(i81nu&>;1{=Mxo}z&rT1& >zhCckB`S54M!{2=mxBui@|I9Ma=K{{=DoXahoGJJ~Zb+&Oc2b52;~@`lQ7>hfe`PrB >zNBB*T2w{)580GlKLXeYLlzhIq@VvJ}E}2|F|CtNjo(;}a`sk=+_KWK_pJNf5OA|Eu >z{^aMAc&f2k=0@3+39i1l^plC=x)rWEiEj|37*Wh6z_^&D^Yox>v)EIS?W;MPVLVi- >zX;>(C`#j$XmJ^klZ6NHnp6A>DEVggYad6;T=I8t$p6)X&$@h&LxC>;7Ac!~vCvMy$ >zGXV$Y$dy@+z)|jSWZE!gD6Vprl@++srsl}XN^oRlrDkbm1!iT-tjx?TpZoWJj^}yD >z;lT?yxUb9mKCkcjInB%O6Q*Q3r#Jz9t)_Smi(a@nn@z0cT1;{Ldw2=-LZ)LuVtm04 >z63=f~p%lUiKwU@(xZk>(XAkIhqobJGXQ{(%-FWV1Qob*Qt;{-?#5lRpu`qC$t;6S} >z)GBQ7mYrXpZ`;Gwn`4iw^GJMl{S*frpBFU8-B4Q)z-OyCvYFnzkSVs3V_q<+z_W#u >z!slK6$TgZ0uJ7U5lFw6HxLV{MI)tkY{43)ZFaYT^3}kvu*5lq5_{ThgB#iO55|*7G >zz2PZ6>{^_`VM07N62jSuU*meT@Dgu6O@8?__3u-6$Yh%N)&oA1dr~HYvL~}&a&s<D >z?k{5>csZH-cQVh9lW#ud=s3kSmoL~er9@&cot$d!n96{F$}Vyb?>Up;SQt$zsQk+d >zrf&l^1s;p!dGG<k^qF$cGv@HKQ(vB)QF?BPf38n@-r)DVDdqXuvgfTApPzs5{Nk7A >zPEKdggcs}RykNKRt_=mA4BehGxob_~HwMFRz74+(iVzt@^hbgQ9>@(Uv60JVabX~t >zZQx5(V}})47iSKZf7g{>po=1{o#GsKzOa=K1+^Bnp5#D!%xg5+C3uc8U|-kr+-uo> >zb8O}a`{%QK+}tBe)LKjEGR9*Y$X_(>+tz0>%t;R8SwYwaMQl4qHY$uAl+9a@=U9K7 >zf@$Zwlkdj-Cr)!Wk-NkAT+1GIID|)f&fYl1)^B0E^zb&*pSd~m>5klxY+l$D*MTl4 >zbAszuo9{Kp-d$F3_%D~zlBYw@hs!+h4P#p^XhBlg>$7<qmXAG1W;?g=5*&GEjLQ){ >z9F=8GWIPv|%?=}Ri9MW10MpGoijC)qKXYtRozC%`)L{-D&)(FMZ=TIIAaU`M61U+u >z+vx3#VL&RpyqgYO>KsZB=Fy;JivWT2msgGgq5O|vTLx5InR8QhCNllovU%4IN;mS? >zr0T9bjayQ!r!6!-dmVCyXfgAQ8g1}O-Y`^Po;_p3pE15PWBPE$e1677=1u$ad#3n& >z4|0s{LqL`#I6Q0#XdAJZlV5+D?SkaJ`tZg#n@j7tPRZr`G~wRbGHVgWcFiuZMBSyI >zo`v&AeEMeJyqNX>7n`9Z7ibt4>>0OZXWZ6;w^Wkc_U^cdTwZcEDC#gTWclrG)XwNj >z`4(<F<95E=(8JrFw=<!6=YNE0^XSfDiOn2mvm;1pU!y7ilir*x;WOLJk)w+`;)~~* >z(7Axo9oxg9Lb#hCg<iG!Hu!?rWu9%{JMyyZr|TT&g-?EN&uyo85qO1}b88CKe>pfl >z$1*Hmjn47I^ENqhiIT0d+8p69H)`&J731=DJXgP#9o~0Ujh|1?22-Or9^@)d5_g9- >zcb3HSUFL@I-_)-Fv@tv5H^+d^R&RTw-oke48S^Lca>H-hF)oCKaUFVio5ET(Y6~J6 >zU*cL)V$O4nA?LN`@?5g>Z5)qkw&aspm1d-?glynraH9#QP5FR&sj%qHi|+w01dh`R >zn=%L7)yPNLSNTDB>laShF6R@L0cSFgRLj$Mdt*kJQgz<hc8PcQ058^=O~W6xoa0*a >z^S8t#UA?5xb2RC?tHO<;q?<at!+$>YxpGykk_SSQhqBg^hoj{0HYeYo=S86AZ6(Q@ >zet#a-`7-YMWg@jNknzQil`?fS<#~6?^wX4A&1J7sIi7uKV9WV8{_~sp+}_0bBvQdf >zy4;86)K9m@x?j!P(dEB_cYiz0A(6iRxW!%!rQwsm+B%+EKK(VS<?9~{?kbY|cmC_z >zC7#T>1yYNg{39;3w%(1w5)^S<!#KL}9O&f*@1BKqqb%evRt@Z1DP2M3bqi+mH`O!d >zfF(gMPg6?d+QxsTEOP^U^7SCxcPF@KlGrW*PXm^@CXAvdy&&lcUTnZQ)i8GOa)H?y >z`7NK>nvi_89=0#NU^D-N24Dy;vjN9E2+#B6uN9cnL9N>Pfnfy!b8KBY`%5j`3h=I% >zx!dP>+C6M~eDSUxo;8HCn=ZF}fW3=U7?8~|9?mCBan`~(n|e6GQ_~UgpxJ)~+p^`| >zEV$6!FC6*#R6N%NGPRvl5RqL#8|G}9QW&3}{FKdgVbvHe7bMnlbceZm@obMNp1&h- >z<M=@DbiP>+FM8p;16@H&8Q`_^@u<l}ORg#TqSbQVM#wBBJKtR9s-&|h{3X{@@Z3^| >zx1P>cnaX>yjqM;IWA+KR(0Lp1Y_;r#j*)zSQh`fYK544JE}la*<D8A>+VGDs)-6SE >zT#DVXl)GoiyOtXoRuB}akoa|tcl%CO$~yVfL$bRS_of-`&G6d0XV>1ng?n=zjqbbs >z>wq#(>)xe9%F8;0<<MI0|AkBoC!LG0F7J4>T&B#4Tv!f+6ozGUkm?HInhYBguCuqC >zV^)r27XIgWwSUj=y2%k%ZGn>`+b8U01Zkx~t+qdErTI1c?2(n$%PW44xC@VtTS4;O >z7WTC%IynC2*pU8oY~*zA*q`UvE*(8)usiFeQ`V>PD<Q2bh@8M({!Ly^&Z_r2bnkWB >zrKFmhX0!x1*d#qgnAFUA7whkzAAw?wC+i*kvO4EbZ+%W$Se?^O>Pi?rX_)WoXB^z% >zems##^>|*<;8m={Io%bu_9VgQl-&)Dnr(Y#{cDT{3-*|*eH0(_ueg`IZRum^IpcO~ >z&~}VLe_il->Yf|jq(@iRIprpA+hXyoUY~f~<(#eYlg9A77G3nLxM5+;&3VN2n)9?W >zyCWJGe`Dr+kB~U~4w^pI^S!k9!C@Eg@!5w*HTU9N|JcOcDe!&q>ZZn+kWTCzJYn|i >z$F7McTV|BsN{FFnP1u`vpcm@N)8`0V5-)^RzIU(p-4Tjdu{#%VIr(w)p5iW(u@i<) >zw<4?V5f8dt8L<&5{O~YsIDqcQdHa6zz#qRb?xB1Q2$HI8;dc1jJ*c}91RE3SWBlx; >zjhM}@vIf||&04CwAYUg?&00vvHeO9=<j9z(#gS4XZre^_6D~YeWS|xq+*^5f-M(*I >z?(N7|TJlp~zgRxySn32m9$Wq73S#F8tGy$Zf|pm|fLe;96XI6MgGn!kaYN=`T{7G; >z*Po2N(C&)(?z?Ww?5N1#&S1S(#zTsc_MWHAv)X%K<*Rw9iMYY9a?D%qyfXYc=x~qt >z^X0MExqsiH{PW~-*$gt%Y)ZoUpI@q;IwdV6Ug>n#aB%t7ue__#nyO_VS21kT(1@m* >zr_ZYl83kei;`4D`&?ZCgkp*|PNMH1T;iCiJDX5~U2`^HN!j(-#kIe5rhQSDox9-8! >z08jE`Gi$M7f97}hHOQGot2^rsHZHiUuCE^L({FMQ8d>k=hk2-CH9;Pt?&xikJ$u`% >z!^buU8|;Hun+>383T=bD3=AemDVk@J)9H4c&t!M~@DQ}SN}>CAPs8K*{T>D~OW(bW >z2Nlu>EA^6tA5z;J)9(?BLTol+Q}k8(J@=bk8NyVVRgEEq2dX5RkGNGnx@V?^@AaL{ >zt&&kSAvO=K?~aW7S}`xkrfD~XWDJv@Av(M*d5vklT8z!(!}toiD-GI_oPNjN2~cI# >zcp)mD>bJq`liTmuSA4$mz;!*n^NdTH`?{O%RbRSa=4#IOyghw#{`#R#Ye?_+@g&Pz >zE8jm^_Q_$AS!?Sw&8JxgC?DT6N59_kZ`8=%QPG_TvnmgC2B*{0@9l2$4YcZ*XrpMJ >zN)8&f%U=}yz)1}&hV`hsgBHgo^)F)Y;JJ@K%GtF>vJ*r5Pdx2;*G0<nOOCxyM~*gk >z$9H~7NlOyz+b?hpr<8W@dvo%&jFF>Q9hp`fGi~)s=9-7^B{Z{E1SOw!dYFUEtk*l$ >zR!;^E^vxOq!7*c4U}02aJ=`YVll-roOW;bCYVe-6<K;XD-)L2vVUczey2MlA4VJS! >zpcYzDNHo($1VaY&a#6fUTaNYdl76l0tO6h~s^o>IqSIMi$^j{6cdgjGo6+NafC<(} >z7Oxq*O%zf_q|mf5cQtn29rI2J^4Q#fX?J@`ntODzUJpgNl2z!PNyOX)B+L48E^$$! >zyl0q-xxT=&aY;p|^w87~w{g~+)no7D?*KK>LTC4Sg;TYI+D8}o)CgVGGCEMGsz6xn >z0jf5&w60XEGG?z(>Aa&SF&bTM*GNFzp7J0SS3u4*<%coj#hSWl9E;Lu)!=w=h@q9h >zBsoLnCaGU9J+L5nKo^~WA29T^DhY^XA`2nzI{#P&8(gAsZ)-h_p0aow6qw2x3&iM; >z0fh#i8T|jX_y5=3pH{qOgsN#G^sv~6E{)c2Q0I*DmD<P3Sk-T|=houATs~GD$yI11 >zoDG1}4$D<og~jS^{x)23ONg#1?O%7L{H|YjwB|LLCX)AYu8Y7LbDPm*$~5-bo@=VK >zdyc02yu2`KNv8HJekZY%KcaGgef%M}*|s&oFFCR5<iQ0)$3buZjBdG8AEyUN)6mU1 >z_ClqlfwQi^)uD%wCIb0`0~W{=qdfaXA=+HQ!~8^HX=-P~I;9WvL&G)ts}f|{vJbYK >z#U-27V-n~C21_iipL@6BL@$-pTv6nuP_ML~K8WdV;|IIc<EobXbraKy{kWn^ABek| >zMFm?uFBLOLqT%EMfxn8+WI)8Qd!vOutM%Z*IV$=@TG3j#dyHDzTt7)=jEnZ2K_Bdk >zH*O{u(ibI=hGBQ?cA3WXR9)2vfS7Qpo#$9B1>zw0iSunkItK`s0isLo$|#SvD(wp7 >z(^QMwAcu5jP@L=m-FMEV8|k(xIdq!NrnF*<5Fz3?eTa-hmpCAZ*rX|Ui*&2v&}1p1 >zVQSF0GOfhkT>=6+^3ArRc@7cv=q+;|#`B{EUUdZL{mZgCpB7GRm}bCodc;~!S%vG} >z-eC=2^&1Tzdk2J~;R&RE^-H6LVXHH^vgLlFj+LDDI)K~ER@i+I9wAkk>=};aq~GcL >zUrYb_miav$H(t)?I`kSDT+SH_hyJ{>HhFWQ#`55ok{y3jg^)+fUv1O#@5rrl6v1-` >zNZn8-G<X@Lc6iV*w7ry4E$S!WtcpIdX0Y-d{P1D18pG_3!$dZ^!qJ_m(*8#0m-G%m >z8&n*rn>A4EzZ-DWy5?eOoOy<m`nC9e`DpUHZ5L)n5>CsVe2LiQ^!S?c9)a@dpCj+> >zCWy-6*#pMkWkgwW=g<{&PQBMw-v1qYzeupY`C*H)6nA-U(0oP9`&}#%!IK%+c?g7s >zSEX=+9-76gg)-)UQ|F$BYF~QHHL{&iy-la7-5cdPhP>Ed&?DA_wHG^N3eh*S2W<+z >z6<Ia9-92CHVR@^KZ?-DItqm^t8jhn%LkEZuf9(Nn=QM%wflSzg5B-So(J}84xd&C* >zG_9TO1-_Xx=rcX;<^=0$JHRQ9b{;Zv|5fNcOGG5ZQ+uwrmHICVQTyps6IZL7jLZgP >zB!0kH7fAh9>%ww?M_vnbK~U!fwX2&4*S%tuQEf%@_f|X%wvXoNXGW_nuJ^FeMe{vJ >zbkTAA0np9^g|5kcL1_@r%zh`HnQc8PjXt2If-W!!saL&Ndw{e;F0daV0y)!u-6*S) >zKr^x7fSBYW(i#w9uoUx=hzA!%4^*iSzf9v7ryqe{j=mIYj(Y2mBK63p9#c+D1V*Zx >z$v*93e@%&;Tss&!RTlZ|ROItO$ct-{IEDP_u~RRlr(Qjgd;L2yTj7;N^_A4%l>tDT >zPEa-6PR|BLt;34c7rg$XN^3;xAkWkm?_d%6AB3+6_^qFAMtyz|_2p&M{Ff-h#VC9! >zbwO#zH|-tYLH*zDUjOiTz4(&-lX+$-?aZ(I9lOhR08Z)erq?T7um41{S9xLs)X3i_ >zK!K8?zW90#B$2^MWDO-F-W9f6fa0V`eOj#NLcw7vx?$LkgQBY!+z{1$Sbg#R5vqC! >z#oCwV5OT-JSBwnl!*%v+f9}(rrK)sNH5dEvzVd6rC{+Y!=^{n9mug%}f%dwQ5fp{b >zZu)DbG#4{5Qi19`Le)PgvR@V9=z$IgXeJS2+i5C=OVOI9n)MAjaqpV@QVrZ`Y6y`y >zq)#V=Y7|S;ix6QJMOJlU`&jXwMK_~NG2WeG^_ikGErJ577<txqkz$0PS%pw_JE{0* >zcTEq7(6eH@kZ}7UA5x<To!n;>(r+s>=rAEShow1bQQ-$DjuF)TBY;y$(KVxr1}NA% >zileO`u5=SPLPQ98iX3o5kPFFAL}-P6lRS5=FQP{vs(wg64hsmTeK0K5!nWVajA}4I >zwK+g@vh6nk48b}vR*Pa_FE-dYW0*B#RG`Z#uQ#rbHqh!f>7FrN8=5hD3OwAq>3*Iu >zU5-|F=aB!&T50H6o9Nj%>)CG7v)is`?-``VYH;wUI%M{ngvdFa&~rZb23Jip&wjRk >zC<Z;+uwkab)m5aktmg*Pr)cO?---6w#zHeiwyUDs*nZz`F}aTFnHuYrJF7Kt->5X! >z`*iH4OSAWT^nLH?`#sn9FP@+`i5yo&sxonw5Q9J*Cs5Y_ZQdVb|2EiF!PGC#E*3B< >zsi4Nb|H-9q!;Ze)*8FyRDBHlWpVa6ETkTVtm_dD}nA=Y3W2r{fR3w(7mrP|KsVb#? >z7=4=6XR7%HvEC>;X*mjur8;#2{w$R=L2=-+Q`Zg#8<dK)V`&<TZYYG<>3}%#0)@Xc >zhR04g0e&x*w!uY=opyuO#S*6bke&HQ-%>TOfcMr1ucLf@A|}U*NdscNWRZ%QSXE&X >z^jS7}mWr8h)3JT217Na%S=KmUL4S_#bVDitmq|Y`9n7kfLyr=vhKTgdM8r&*rI|=e >zi=uF$4^b^L8lV!x?mNcPNZd$meUYk}D7%+h(=667>qCUlOlH{`58Qkfw&LpY#$Sqz >zml0>X`V5oVT?hJAre#mH1gavaju9fW5h~!xnH>-V)T|;`q^%zW^A)Q;q1x+HaZ?|Z >z&E)h7sH*%Bl0J>J`2Nru7&xbx%Qu{3+qc}H%wYi0aFNZ6p3{nt$Fo`r*)9CsexnJI >zZU~JmXeqwZQX+0C9gjy&#al>P4u5YsBKN@-Vq9^WLi#LMX<}UEoItjnsCMO_i2HCf >zmv$^SL7OhAJ^JBz^M?~)D)9YBu{6g~V>b^fAeUm6jRi0hp~go`!nyix-v-x@j_w~- >zd=s0Z5}S95n++*yTKQ*zCy{B2N$E$E>W{7Bq13jI*x|bl10OFuO(eA)zx4fMbEsTf >zYJVH<Q@aKAibYa~YtlMy{_M9YlMxYo(M>*zV$v)Ac(6|wLdSyg9V{pgGQNh>RNWAY >zrj{5$gH6_EsRo%8quKnbFJhBL5hf?X_%j7xN+bJ<^#`a{heeveRJT~!%$FjI(l|?f >zaY3>OMTk=!CRAim)wyE(5VnJ-2;nX=p$iV{^pgnBp%bDA(N-OZR9nH{8bL)K5Lvp= >ztYWEG90v$^cR(n$;?i`qs0I;oxkcF5O=9iX30<xmKwHXB_vtLkZdTxAPDferU!hBf >zF$3ZcQZqzkA51W-U-w4E_p2sWq{rHBbfNFbAVtlcq8CBaMTqofUmIlaMsk7E915{i >zgjqd*u9RwgfU0^y=6aKxYO>tG0kMOABl|(0HX_b!RisCHF?)cjXC^mQZ2oNRg!%Jx >zUx;lN9qeVNv)I$)7hld?eD(d}YeTVF?63q(k?N$*Sfsu&6u<GDp9NFjMy0+B6}`)v >ze}5}Kt2Fh)EzyVOOA1S3^5^%qHEy4mM4z9|e|eXxws7fd6h&9z>jF}2RVx48!t%$% >z{2#YM&FGdtw_7eHTK;+^HZK*?3%)LAQGXv6{circ(*5<1E7f%PGG*fH-%!rK@4Io! >zyYVs$TC=jUnk-VwCQ>z(<V%4IUclS{qjVt&tpiqO157D9r)@S%Jk~`us~&NACsHcy >z(@CakPrIog<Ol{L^hn>6xF?29RPv%Y$skFMD>jiCH|g;<M$kOk*2%AJrT+7v8BGLR >zyZ7tyTZy>?W)Xh2rD8%SMP;H7J3(2OOaYnQS@&6NJ&}+l@oXFD({NAMLr}l^0Suv= >zLD);R&lI%G1HJaA+OzpH2<r7Lp!h=pdTq5DDf*C02e*g`u@tM?Kn*Qw&66#}5I2<p >zil$3G<rUy;ib?KbJ;GMPz>zbmlqXLfV?IyQ$44~u0XKDk$Q4KUi3^+iz|$fl$Zkzv >znlYEMVeMIa&wx6X0&MA;ixh&d*myO6Emck}lA=_qPF@q+bE&fzMd+|I8|JCRQmRfY >z#YCB-)|IZ>n{M_f-Td`;wb}0$cPN&7#g>Xc^bi?VYwJ2r*2&$tbke@b&0r+Rc5{Z^ >zjvq#`KkWDZa47uYc<hJMd$#iqiv9uW`nA6GcYe6Qg&W>vVCHN#da*Yur@2`^)KZwl >zYh_X`7fn`0_(c(Im&odZSSKLUV&n_3#uQ2kUi%l(?g{LgOhc^ProEy!1wlURME}{O >zlbP$L7xgdX`Tyvo#QNF&-WE7W30${Fg{~I7-Y(?5n{Ln^<1o9TM7ynu?5&)xu&SS? >ziy|j3=lUu3^Lka;P>}|91fU%?$|E4$K9v3-v5ul%O3iDc$>g#RotCWxQO(`ir(Viw >zUZk2Tu<zB0@TGDQW>lMMnt_6tctC7;=@EVH6!qUhih7T?!2z+(tQ*2N)qIhvT-}G$ >zr}DH#c&rE&5xcIgPg6mxH8EvaDnd=W9V*N;P<Ri|q?jf56YBcpZ7JrT-J~gEg8_=R >z?{=w&r;Zs#58#}!A_Iw^A!Hdj006T6gwaWO%SYgac_-CmMC|-TY@WR5Dp#yNno3%H >zqB6Br1=~+LAU-faIr{9<xl3})EWpPU8{VxHGwv8Bd!ZNI%m&072-(e<Vyj;2kzlFG >zfZStGj^0NP)m|}ef?|q#F6y~@y@`!~bX7cc^~}3pxxaoLQq0cyLe1YT&Q~sB+bnBr >zbUX`E=7l>JBsmuDcjWJi!LF4$Uh`lQ1U<!%`cz{lOYUUrx`<#C%VqDEp#zj7YuV+> >zzfsuV6-K}96{uAkWvhLD8}y2r|56Z*l%u<Ij#d3}q^^+4uN`m5F}{@3cr&MNE9umy >z@0jVF(_eGWtmO#Kzt+XAXlw1;Omc3R%x~CCozs1b47lDT?=MW*r<J*K_LtbkC1lE7 >zw)Ld*xkK!8xAy{^w^g!OiJY!^Aa6ulY*#IQl|{jXxSJ$XVIjcpOf~8h*<5&Uo4gIf >zm0k9e@lWnUbH&71kvc+N4oT7S?YFo}(F_4VYntt<*vfHClf=?0uj=(0!c`Ah<0sH= >zBO0rH5Ns4cir-k9bVFYd9r6&9xxfPJvl0X=yHM47!f}ZFSN}xXoixj2k@AGdN?)Wn >zk~j7=Pg*9n_>f{4B0}|2^<(o>4vRDfsHj=0!zw#(fNI)Hb#|fR^+g)VyDgGwc8Gp! >zvnlfnG-rf-y`O*C6A^htjKn?zeU_`S2hQKA=mUMK0dt1#RAMj1HbOT_OQal|Z?-OS >z54XD7U99FpF<^!0B-3yM6q{t4@#+_Yo}Vag{%7;ynYVrP5{Hrds|KUJ58m`X{IROH >z>@o`9FeX3HVa99bJ%6G<at4XX>YQTfht!+xD%fCbt?%Ed?)SX2wX$`4C*#gPvxH!i >zkh--PUUXwlNP<t9-GlTRry!H@6YKO68$YBOK0c}8@igL`T|!t-5b^Lu@3A+5$J{wr >z5Zh`#Jvx<jvwO9rD*0|9KDc>t)%M(jQ|FJLLnNpg-#?9EiZ2}h8MF0jR4Z~Y@u$hl >z2C~mng-=yU;a$x8E1$1*%}2C*?HY1F7u5K$ZQJ_q)z{lTjU6>iidOwy9yfK#zXEo% >z$Ub4Ld81eEz{|yyux1;|QuV$+Z|^p3JGqp6U*+tx?w}l8B&;fyUh5ROz3jxIp;x0< >zlV|F6tF-M^m@O7fD?iMhHYV-RXnMZq%i~s`lF*dmj<W$rE#ts7&RcYO_A9lFeAjz` >z44Ud%v^HBsn`wzV9yApHrbshtSy*AqrZ?1WEKq-2VjJcCwnX*x9HYpjeoD8*{8CtS >zA?%9d3|qOr#h^+*dP?tz*{i;bWyZJSV@@z}*K~_QaNFwnAyMkhWv2I-)_fxz^zD(2 >za>t_!RNnO%RO;(`>lb179oMg7)<c_)@0h1ED<g_?nhxVM)Zd**zqHM;!phaVsnmQa >zzOl$?e6F$Im-;NW%Jww=O0mhn_IjS_Ym#2A^+S5x$?(vyxY`Y&J&pJWQR<E5uIG9r >zeDch&E;rWMd$uZk1=4)nE0^9>6Qq;SP_^ZBf?>HcyY+2l=s3Q)5>IuUt)<=Ld%Aod >zp{;G+ur$rt?7H%~fAhwFtLuq<vTDmQrEryqHjx9Nx||BPnkc6!Q?M28n7|OAJO0=l >zWk}BiA|3KQTuVHn^Lh@viCAQ-;%#s|Q)QEJ>j7P~S=a2i4|!1kv9B#>TgGw5yd&{p >zbad;Fhc3T9|9E6QqdPI`|L`|0&{LZiGL9#8VT1jgeqtwFJU0x5glviXS+dou+^)hu >z{llAMJ9R&Zym#cQb|0sd{{Kknoj-3*y4<VfOe7c@0~z9-j!nn6nrwSp+T)+I^B5!g >z_?z-bxo6QeMp-Q}6{<S;*fOK-MQ<jpLcQg??Z>BP4x66q`*?(A|17R@)6<?cAwTk+ >z8>vD~qsX9|_PkcF#9+Rsp+qgcMV}W0{y<=_`;ONujZ8;G9}c<HcDXoAJT+TEJ$L-w >zap%Lev3y!+QCy8)C6E$!SJ@U<6CC;~rc1M1Il9<2_4oQB%cEfiRc-~_-jq%H9Di5l >zVyzxi=C?DU5wxzBM%whP$Xh`dxhLKon>)(U{!CChw%o5tZ3n;8k5<~i7h{*mWtOYa >zxEy{z+7*~|6I-t;tQ{l=Rq%b>b(PE=X*xlHr9lI_>Mv@COqLe-u3rcmM`{NwbH_N2 >z+!;&`-gDh|7T@ZC6u#}h?*353Rgqt6W{2jh#UY2=vi_{_c%Bq>Y>hqGC4?T?KcFcV >zT(}o$k#X`5ZJo>25<35IW;5;7$FRM8yFUM{&JOMQ%scB}*ATP8dZ)kHTNN6Uj^sS# >zoL+3%wc)dY6ynh$CgLiJ7s@Ulc%eyMdFoK8j{xU>Z#eUJ;q1nLdu9%qq6o4|d^eEw >zXg;c%05b1^AQH<tPnN~)?sO_9wO;j17!$q&NR&Qp!(I+6KyDo?^jvIJq-aH>fp2AC >z|E(ynZsz&+u~G|Q4!AIEh;&+T)bX=G?d~!SoB6oFyR=>lXdgC)0aN5ViOScq-T6o~ >zf4xFIJcaJ1HIL#Er`rR)vT17{%Rx}}SZv0Wf<{#v$a$@ch!KTR2>VolDk&2hm<`Yb >zvOS5jQd}WPtmePKcQzBM6gpCsZn26T+bmSZAT;%ljE?A7UBrpcRAa17frh{eTm<oS >zc>3XHutEcNV-H2WU^L$l`vwz;@KC-!%5%wlqjnOgHp0+FYGy+J9i%}^m2Y`AtN$g0 >zX<pw)6=g3n6&=DN%{ntmT_>1It3EW$IdUOYL097#iDq%Vt$SlgG<HvRKhYIk>T^Mg >z$mdhAp6IfWh#Aba;X%R-tJp)oQ6r<J-(skOub0e3acT#Y_OS}7WP9a{VM9(Eg+O;d >z=JfZ*_v)XEHXr={_>7Dyi6UQ7DC%OaX(RTK+#eIh>@uT~;f@~a2o+da`b5JXnO3@Y >zab>6=q{(cLv2Wa_$6kU(6&_t~^Fa-`{QsL0<%~FcO9%}-mAD0y_9Re&d7if1w{_zf >z&#bfyzGJxGK6k9hLW^?MJf5l@y1)w@{VAKUOw(DsxApdtY#X}_#9YS=8!!QeLh(Ku >z47HWq8zQ1=p8(;~7X>zm8Bk-{kV(M#=agP4wk+>raz-HX#Z2hc-k;_yp3iipw&htL >zK!(psE7TEmAj9MPHRjv+02_da$sQp5BlD~VKH$>g`}JJMiroRQ^BLoVYC5?fnDGJ5 >z<PVs_Do{7bNwBIlI*mVGS#)rz9=vsmrtcY8Lb7F|&bADh0mIZ{8g(!3?-@|rH^$dT >z04d~bk<xcoX{?qW{yaWjJ1Vd&xOdoN_j14aPUbD|2_|HA!=TZMZDH`VE+&#rtv*98 >z*s2Avzb%7WscjtlOndwhJWV4yo2@m?P^t)X*Qg&YcJY-$ZLU+-$)R~n?2Mvcyr=EQ >z(ZWF6dSuZY`ztt*=cpeIO`v-K2N`89`km<dKNKZ)0BB?Q0>-$7YLJyS4)&S>m(+S1 >z+#{E49wD+n(C?_EwiO1)N)?SsRHGB+{D=cNm>Rmf)lvY@tNQndkpAPui`93IkFGu3 >z`_N<U^snjnuAu9<3PPt4eQ_@7kW@L#*wa9F!w1`tmGR@RGS4<Fa08B9pE&FP^IZ5% >zg{Swfza8xPX_@&K6!k}AYAedVeK&bStm(;TF|{<~bo3X!fE$R*bocJ7FTd<oe4{oK >zMMD6+?wRLLzWkq8nzH-Ar<1S$fqVL(sVuH(ofKKPte;8!W=wj;J~f(ckS_feoEHIv >zOLMe}D-UPb3c(hI*G3XjGwQZRpSX%2P|jtQ!~+AjDyFE4sS5=mh?p6p9uZ*$#j78Z >zLXY>*RH<l0Yi~4UeUG~lEU-9zBt~V!vRL)j-y(yN8Enf(57TVB;ydr8%I^e<){-@o >ze+1+^nNbTN`m{h{iJ>*a)P6@mz=Ws*LJUAPRZ2BIi2x`HEg&c+GGM2PfCj3vLcrZ3 >z>RiuXyCi|B<jZGBkOe|aB>@H&s?-a>M;YKOf=c!Rf=a|#OE8s8T#yuTU4Y&$L?sGQ >zv3_spaoC*<%%)gHq!bZq4rLQj?+EC5f&4>;VlE*_%!K+2;JQL=Is+Lh1#ilucp52Q >zV!*C5Fxw@Hj&rzT!DB27RLpq%Tms)N)QplU9AIHpC_d4$7rGg^Vj{X*pxi7#-x5IU >znHqpv>U+**hJYw0LKB&ro#TF=`1-qk_sY4iD_3^^x&C$Sk9ha$y{|wkuEONyzxRYX >zGrRwNybN8~ytaJV`JbhXVw;RISyru0b{$#Hs7=n2EPq?nt0U5-l3{d~ilHoMOF5|Q >zJq*Xhw&^Leh2Y&}#l3BchuXlyrWgwW<lALLbvg9Z0(3h8bSW=nQ$Fkl1C&KT>(0Tu >zQBQHZ<p;_U=lc+2<&U!jO0UVt-3;WX1>}!Wt7VjzhE!QT4Ruw7+ABGYwL<B9!)T#Z >zKs*(5G{&w1qc)GBrD1C>E9L^`8Us6Gsyy!|Nf#h)F)&D`a+GM-D~3v?9umd=Rry8r >z7E>d$5uw3^1qoFwi5dhwwQdIJbPRaZa1FVWpb#oi=YLc?%xrLv0o5}e1rc%o1Zr-n >za@GX622czYDvlGd+4?F=5+z-!GA`fagzUqe?Wn^PORx|Q1lj<4>t6mus8BUsh;?S7 >zo<DfsELBdG04AhTu~g}m1o>Qo2$n#f_RSYF(c2l|c>(f2m{tN&G*QU*@9-DkQ;7(w >z1hm9}!HD>GLFYe8G=>u48bYO8L|ZWfZ6exh&y@8Ppl%Tq?WITyA{Hiu%?r?>M5pV0 >zp#=ooJtF3#1W`#qJ?#6Be?3e9=Sol~1c+J_4Noa9h}Z=axr!y&odk0osb($%S1D^4 >zH{QE*7y7!)n$ez0ql4+tydYAMwNm9pRWVT`a~6REU^*fCIssEJ`qg~Jq)K9PgNdx; >znch?}d*Nnw_d9w-#r#R7`O9=oNsz^daf@$3mK}MP{S2J45PwUkhAJj2VXV9;R_c$f >zh(FN!Ro3Pic<Ud?R|1=jKj8Cjw&4V@FUD?*jcR?po$`4l#t+<(L_YC{eMW|IR)@oW >z1{^0<5;Gl3emGWTIGz0A)R5u4PUL)53QrU&7cg)=9msnOs2no|m+x{!0%A*`lQ#O( >z7}pGn>xOpMuQnThb!^;at!yEME(vg1!i;eNa)|-;WGLQZpe&fWrv)&7Av~&H`ITf% >zB}#~XB|%#YsU;HSP0Yt3NovhZ%}OFRQK)V~gr+jof}~20B+WTp)M1Hod5e-K1O8Be >zsot%mlZ4nOP?$?mPG_R)3D8@n>I!?Xl|myEDX>9sZxK*zDM|%UhNXxZ2C(wgRs{G< >zOq{h)?Vc19F}fv*09_#<Eu^RR5mW%w(_eU9iyM+lRCy;UdP>0L5|vXM)&2=!`xs!I >z!U#<UROS*$N8-Ihsvb}eyC=aE5Y<ze%1>pu^9=Yu1Jz=N;#~AVHv{G@D<e7!JIqi$ >zC)H?XD!CE?mlKis5wwp1(-k7^iRy{Otl~V~3!ju>QWe1e&DEiNJI#RYqg+%Ws{1n) >z{t3|E1u7>1XtYatr9F6~U5Hm#$Y#4OrXq{*E;PXiL#1u=Vk*z*tEKPRy1z@^ga}P% >zgq7HhmT%d1{K+=qmhG)iwzqEyzxE_tv?bzkUc>`C<<XyNPrD*t+eN+aiu!7|<JV7E >zv=F_j3hV@m5ZsQ<vX`+-c>Gglzd*@Cs<xCDy`>4j@l;<iV%B&2yDcHzkH-4p;<j`v >zxse_)LU$(EKS;ITwUxPR|I)78De;d4s1Zy;jXfr4Dd8AMMqXC&;!<iyR?>~7r2eer >z`%B3sCeI9ss?J2!adWkgeXgd$rYqdwB%vZ|S6r}k4U4l?e#ZbbLGbfDBXuiepF1Bc >zRn0YkdJ51BCTK&Z@^b>}yB;ztzX>UXAMJZ5M{IZe0(TamOeiQt;DTf*!kFqG`>2nl >z%9nt5Di;*?Z8BkEqKLSNvlBQXoJ~|uXKvgjRk3c>Kr}<<W#}7wkpB6hD``kw;p#1+ >zhL}+R_}I4u_{FD*U?$>{L|K=am1?4JuL0?N?tujp8_mQx%kmD1j5iXsLYeSoJ>)(i >zCiDWTnE}U}bbchLq+Uh=Q1VDRLf1kmv@dv9C~p%J0B!L@7f?81_qYHy-e$E#Kp6sR >zt;7QTMmdP636?@<9vu97Va+v&sH7{*{pxUNjdAGD)_@lT)vz20xF>HHLkYJzUp-qz >z3(xjppyim#Cd)t#$<Z-e#RbpJ5Lw@MQ@SCLN2uGvh48Q`9@7yMTU(IQ184Q1EtrM- >zdz5k=`Gr0FBR!Bx$Ew<F)jE8!UbK>PTk+-Wf_Ef@Ypn7uM*t=@e1I=|(&O}ex$I5$ >z;ZHqR!hDYWo;o6XEew3z4zcZk%5N3iwTj!4|4>p*VWp*0)n=Bm<FhKtvzn_+pc+-( >zL8vhjW_{^E1Ay#YaVU<73KC*h7;w3OhAYC$D~v1+A{@Y;H%Sqf7#>dv2v4cHr&J+| >zSa+6CwOM9OIU~=8<8vE7*%cC_@|36)B|+|#?R>?+W)YE_WI|udY`7{=%muJ)sgv~^ >z>`@8)9W7(0Kt7j&*?9%KiHS}XVv@(V>PS`CIm!S@32?K9GpZ+~FG)t&O9E)I0Mac$ >zQl+?Jrn;DbjW9)dx?M#I_XZ15;{-Ll0pc`472t&zEE`<vq5lYKl|(#_sJKLcf0wAH >zQm9YrRicP$Y@r%es5DN-OzcL<5kvP2p&^Ob3#|Z@tvD}Jp&`^{GyM&P=y?KOCmWYO >z1M7A>bcq2O7hvy6pt-5<anf@u3`{Jp@$@;gHL>UBdrY#%**z!DI*88xky&eLwSfl_ >zAfD2es(q~|S6UnPojZSBsgj@^N;%uP58d+|5Ik^(M=m_jxHuVq@x{u;H~aAKu3yUU >zG5fynGIaQ|Y<Szc{5B=ccGZ*Z+BaZ?@GHhQ;PWyaYP5!i&mFY=oj!j$9f*KX+O?V3 >zP}~KTlj7oEbf<-1&Djr|h*rr9?<soGQxSgcTi3N#N6RGQ`IhyF3z|2+?7VT~5Bk=A >zCGq}VhuPl8`_-P_xcU0U3u|esiV-MRf-V-S;{*3?6u>0O;7SRySpf2vz)uMA0Ej!a >zWt|TLae@g?Bx=_SotlLj7DUDRFY&)5kSqqY{JP$~-D7Sk8r!967QJhTb3$agOp;z7 >z^|hhOJp!<EBBF_^Lo%a70%c(S<wFT{zV7fo0sEvtE>UKApF}@Vikx9!uMna8Bnr9& >z5H(+RSD(&)Q;k%n;)%Qf9|qW(AfKD(HJz+lPt<a5!gvZ5g9M-}d7Zy!A=X0tJ}C;Y >z>4yZcO9Ip-BIY0A<Yo!*O9F&>P*@K{ECHo<AWbBQT!C^oQ~NLzJ<|X{=4Ei9Er*~S >zzh9I5spa`iB#emdOi@Eh!6$^OCQ@X9M0MaBOh-n%GjCOrjQCD~kY<&vMKzxYkWk6P >zq~u41Ow~&Q`F}15xr3wdzoVFgV^0!6TH52gh-=!-q6hU-4RYk;{dtc!XivOwo7j;* >z;ivs%%c&<jL{Ds_DTYkM&YOs2?a5zmlQ}OZ^EaTE(^U8`r;;Q9aEh%y_3V`Pb3KW| >z)ZG`C|01uve0<~Yi~dty@Aj)UOQ(~Bm`%)=FaEwv@p<*(pt8j5^{<<+W9k)NWk}$; >zibz+fB5*%LP}0(wF*rSAe)_L<?i-HqjgPb?G_T16h>Q!t0a0(aMQL>iWKrSoX!-9_ >zbl&f|mAn7n`>itym68+n5(Nz=aH}I7j#0l()R-Ya>IJA=sRmfI#X_pyOi;3>h`$rO >z8i<;?(g!vY9Gd_&kzx<DTstd7*b6m=h->)ReW>R$gmVTTE8Yc`>u#ambhb8sQKx&; >zg12Hb7tx-0`RR0RP@GRCEb@|jQIO%Y1`}i53FDgNEl1R}{kaKUv-fJ<Ut~p^g?@NZ >zMY{M9l%(3SsmjC3nd@Y4G<jt+b46j(4}(WM1&{BI-jB^r-PaB_jNFbk9xgN6Tilgk >z`_ZGq|4C3B9?jfz)|Z(&oju<Cv`Q<5dhzbW`@6NY+gaM%uO!?PrhT~*w|?@I_l0N? >zGG(gr+*mob{j@D~5g1psrPbB8RW-r)d_>bL-<%)9u~uph?ypAZoO`8b;psZk%SNAW >zlVeBsl;Di$)zsUUlwg?m;~k_V3#H#}XV<2##!spk-D8>3D>t3hF-TM~*nZsa@et@m >zXHvk)Bzd@wZ%>=FKl1niYJ~?rVW7f`5czEY6KD2g7;EfHzGHl+N1@91qHW+HzGSvD >zc=N`tAb;{@?4Aj@W@(_Wwm-!{bxWuLnHw6B^Q0dc$oF`PvP(|8Lr&_lQ;0|(i&Kko >znC+W1^OG^eGYg2#_?W{K!);EtZPE9wj_(;AG(LS1^*p}m)Y0dO7jNQTBzL_$`Xcq_ >z->hM6?LAgrdR3)YeAcD(cKB%Shz)vVTU7VW%i>^ig@?{rvr3xQsowG-)%@P^yXxB} >z(8Ivd?sqTj`rbBo<!$;uJP9|FfB2Z6T<aa%YG^r7?x}Oe4}AyIP?|o7tS}p+liC}r >zhSxDaxAmJRaK8<y-pI7-&j?1O-%*XLw)WNch#hrPbn>kjBxoR2?pt2Fpfap19NBi) >zHp92l6S=KAa9YD>f;FIb(<R-Dz(H7h6O5+=?ilv31_6@ks?`(qGuX6G5Rb;I_w5d4 >zvWAU2<E-4(PxV&bCnc4p`510fX!o>?n+WvMstQpVCgyx*-7y}^wDEO#VQX_wEiEMI >zjw(l?(nC42^LvC*VQkv4UP^@UgS99#{T?aD%!;N=w6&(IpK-7BHP1{P^UyAHx87vA >zzgPNRV@I;Jvamq+9I4?j)#QWfp|!9Rp3Nt-RuWnob^__rmej}h%`e{4_;jJ`)rn7+ >zDps3Eo%?b7lds&j50~#858A(pT%jfW0(RWlo}fBYnPhSO;}uPBjr9>}L%lz7`Im1| >z{`|QE1A?VwG3;!br;%6hH+P5^-M4)Ze@O5@ru4g^!I`@6_snl={TQ)(UH9YRhDWlQ >zgm6^KB9U(Tp!4w|H*>oup)nWjCZjl!yR^f(-{{W@8_{=dZ#WJ*JBvDP>Sll@aSxO9 >zF^)ks5xEENjuNBzh70ECns_ntIhn7WOhgh(Xy{jhEA(k8JY(41bg8X?WF}P#2S&sU >zl^2qdCD0oB00EiCr}VA~<@eCt^@@R%9?+|8neCzV3ROgJF@kNL8dQRfwUA5eF(veV >zrD7IWtCIn~Jk_t`X@yvwkRl^{XvQX1g|4+JaP4IgYG$->{RJl20q<^e0zE_?A*x<( >zd5()pD?4GQr@SX@P;1|4;p1s0WKUhco^^YTeOS<e4Pi9>SLOWZ&KY#aoV%`WZHdJ! >z5taJcgE+LnvvOymn|fvpzLysT`Z6mI;c4o)v_i8*qSl6Z4=W2`c2wOAJbZaj_1$RE >z7GGV&R{o@RW(J>xh=vzV(f%#{;{V$qmv@$~DEorp_Wwsi^>E=kSsd+E2IR;nxaI?# >zw{{#713xxefPdIl;4mUZ?qBXFxU%`4?)55fBm;E)8KWC56k<?2pA6KLOC0-gH<ky( >zJ`<H=vBT<*dxq@&b+N2!J?*dM1sbyg)Ppcjd|+*H7^JeiV5C3c-2!KWqe|u8@>xTZ >zoV%v6=~bszXU*)}AwefpYAON@Oe3K_+s3W2S4Z3}oF?wOmc}TG^_#6Ko|Tx9A0HpB >zHnh7~<d^dCGTP`a)p(z906D-^z1HJlF&|Lke?f}eHRoX+lvYHjmMSOkMMjqvIA#Mx >z7}u{~=N=FkEtSgFC-m#vTk%7y#f7`wW-$L)Y;6P);u9v;$5<Kd>lQcgAZt8EC5pdc >zK#F}y;+|)-JYSURLW>|YZ0@&vVJ<*S)R9Is%&*(9Y5;2*9xzC3Kb)ulz>tpaYT$2t >zyH&T%akYK01K0Tet24^Jh#`k_-wI8*`GrEqe&iCXh-n*xM$d^1G}3q$jnP=v-$6|P >z5Y=<f&-Mn!lu`E-(6oe#N0tZlbOZUGA@$hXVKi;9R#Al643xsB!4m^`2cM9UycV%d >zK_HwnK<Pf2%}Xk%DE6AAZm)s(sRD^o-vbNi2EK>WLv#^Qiz)x@96REJMxoNQ-Q{b; >zv>j_2QzG0_TS6_x2>&T;IEs3uy31_m$<cyMvGpBSb7=8vJIK#5vyx7qcyVI*i-O5{ >zVt2>IFDV%}UcB;G>Jb}Q9654wni^7n?NQl$=K1wC8}*}ay!>l%Z@?$&$5MV#f7tH* >z{pI|rd&h1q4PMSw8+#p69gPmuX62vBV}NX?M5v>HhiW@{yPHy_18(PgC(n=s{|&ge >zD%}xS5IQ<F<an4@kp20Mqs+EpcYEu~`-0hPw`P=LdT8sY6-C-ES+s<?A%j;eeq^!~ >zn?Ia?*^_ctrMez&zD!Bp^^I>3D}Z@9QWPx6oGsJ8<da$k*4gG1;5!A14s&kc?tmhS >z{u{N+kfHUV(n(T_QNqSKnq>jHBxodB<9^tn!7Z0He$c?oaf>pl+EEmLy*^QKf2~+K >zw~f1<wI169p=pi>@Ka)Ea7BEoDx1u4jFmHJb#(8w{8^Mzs;gNtOf#BWDasrafKwp- >zFdUf!EFq{~w(Q4!fro8Z3CcI(2TAGZLOnBkP<W3!@#q52ZdRzWqc(p^F_5#aEnfQ= >zNesVLUSbwPgjy~4$>LZ%8qm|9M9&}UK$iwxsE6gxd6*y0I~!4_3-Y3i2#IKJbmkik >z<&EH-{(*%|{RY&=77<9!3YwgB^5ur*CA@gUeEOO7FF&RJy76Yi*L|<ozy5QYVtS&2 >zk7^VJD>yg;g;1Wi<EmPF`Lc;?MM3zQjxKsDggxXmpH^N{H*4sXgA93?eyl&@-9|e5 >zflYqKsUN+XCtC(}x&E0AdN)yuzo5HNuxDi03)G(AN!S@OtdO;5+tvTfQs!0=ZxsF> >zz!CHQXO`{-v5fX+?%JDuc5h3tJY^L71(nS?2H(ocF1nfxXr<3kIT}}$YWC(F-wO9` >zgH%a!1V;NB_aa{B?Yk}5C+gdGNpb%bul?PViVdS+?@`2<3f!pA{<SqwA%w=DOq$4G >z1D1mFUTE;BJj@<iF$%3A%cW;Qlon(Tx|uq$WG@H6s|X(LRbbio-eqmD`z%1}Lyj## >zHZFiJw;^`3z#9V;KCU&HT9qrbwkZKZTL%hxtxYke4SI1w!E4m`U^z6B3`CFQV+1~D >zP>>=rcxwQ3FA5>K0+$AW6UgxU0nn5H%=rNL-BG0`mTU|QHirWnq4w4+$TRoK?+!rT >zM}fC6yc<RpHjK)vvOt_Ps0~WKDFAjV0J*CjO#J4Z!GZ)<!TQNckINAk8O&$pnSerC >zwg7up4%spa-;<YfmaM4WmuJk9gR(&3WO=<d#GM7OI!kuT0{pJT_}M6|bu`+cO}=eP >z?tB0QRSkLD20M;|?kZO}6ac?XAlyMAp9R3xQP9>laA3S&NIZ{|$J;*4i-Hu~CKSZZ >z`R-cFh9*w=r7RcFP=y&`g-SV~?64j0dti#c3&%zw?!o-sdHEg-a48D5Z9(oZq^Oc! >zbd+CoVz}ruq`1Dt=M<wjCIED9xY(}^{+b0&Xggf90QP2quGW^^m@2s)CMU)#0Bq?4 >zGPt81+_0dqUZ!lE6!|2(>{+&a_$c`0GUPS>@SCv1@57)UvLT<Q4u8!C-6Siv1Rqfk >zfEAV>DV;pBhA)@j1`@Fla>ta;x4{;V$|H}1QN|T}SrFBn3iWFh+P@XosaNW4t2A<g >z92$k<@t~J#usAXe5cZCg!)~+zo@xY>1>WjbS=gp=q+BtkeE-P+{MONsmQIB;Ybf|3 >z7Ravy6o>-XEGU!_Tu-u)fbsQs0T#)U|Iz^vo)Etu3XZ{wswla=3y6+|jc?i%fg#!P >zTVaXs(Ub)_ClsWe3<*Yoivj@?1s==-5Kslq0^IgDblZYrFiUPT3LM7*bYIyRGF(m# >zK_PE!?2_lS!MgwfSB7Xh3Od;ajaiV*2-wD9ftv#0$0T-zTftQ<xSg$HiQC?lDrj&y >z{0@2Vu5#EE&iX|;u;}3J1h4P~P~-&k#t+$i7W@bbL?h=NB4=;{l<oo!CJG{2fPfnd >z&XfZm7;&~7_O0d=!VYn)jabOgc)SSfAC<rI^Q6eB?$Vkqm~^!6{<FHb&{N~yr*Z<o >zua2JD+;-~3xZ*45>6yDnl%1h-PDehqqQ+#-e1C>mOgN+4uJn?us7jXm`}@o{qCnv~ >z9PA8(oD(2E3Q({H%yyxgGelGlt0F^7o<tc0oYvc3Z)C#iUyuhF(!#epIf9%UZ4leU >z2FG&^E*~2Jw&X6kv4YVUnAf<;+1qcW(FfHO><oV4meyY0L~Cn`Tv0TaX}*er#wIq$ >zZ&x}v)qGp#>{-Iu%;yN$z`=bQ(Ei!8dDkI8H#A1JZUYLmmkhT=fugHHWuuCR1b!85 >z@JD2&n=D9DK%HfP@njo30}DIfrf7+RpOVQ6UmN|81HBjkUc08acN82$R=l?iwj?X& >zFDSOM;CsuVyPf6z%Aq$#U0d@!lL8PAP!Pa}43=r|-5=w;2L$66q@W<Q06D)=7=xX7 >zW&zP9=y*(q9zlU$jssf`3>cxFL{@ZN4{(n1cIBWXvc8Z7y<0B7t6VWNL@}@&B4R<~ >zSl|?Q)01tm3^_tsCs^%=<?+6wX)^RZ3!p<X`yE(vJ^_k{R1r4Yq5TVBmnv}UC@lFp >z_~8CMeq_al09eMT9J3A9uuzcD25}m&JRSghlcgZ}P#@>EAAn_FlD$>7gPDM*dBZ!g >zTOn|-V$CQ#W4)s43pxA^#jR@#5Uo$`*HB8jK35D&u9*CZZf#SvlIgJa>98;9s1S6x >zeCoK5@61O*6f--$Z*=Y-N1T=E3i9dtRnT=q&^7b8s}s^4eZQ`Z(H;LMFzE#(+!4ew >zy}G2Xn6UuLK7aMVr>l7<<r7$ny!|~^PT*2gPufCHg%3W%?b=z!wOTmc^~JS~3)h6} >zuQ%<#-g@JDa&aL|=Ejxvu&(_#uANuyJqfu5?@d;R9~_k*Us0?AT+)-!g!SMDe|i&_ >zz~d(sCz5WK<lXEL+}zKC#8`owP_RIm!QdY!AC$w7wL$liq0gVl3m4&{1%<S&F)0C+ >z8&L`=WW{3(u#*9RIqP<6Edb`{M%|HjC#P*&4GNkW5~wx`>Yv%sItmUHP**BJrep;j >z4795Y`hnSyy{u^Z4WttSi(@IaUIX0@hh!{3`w7j=a?t<b>E7d+{{R2+XJ&@6gV}~* >zo70@<EF_yV%PBd9Hl!6vDoH9kF~^WZN#;<J3aM0*%^{>hl1jZcBuXWz)Jyq3U+>T5 >z_xpDjm&=|mm**byyu016w;QjaClJiMNCm%V;2k4YJ5m&`6rZoT2gzDia?AJFT#R^w >zfO(}ryNTh_C8dd<vipkV69N8}LTL@$p5JY_KM-WN1iIZW+b{|Fgn%6y0eDJ!>T6je >zgu-Tu?6wrh%@EjiimWCAazestKtTB|X*nrXC%ZcjZg+;3K@*ptGfU9Zfk)z6<i;mt >z0uXUWQ$Us75r>zcS4$!BouKEOZO5{->$>}sVGmQM<PJ_Lh?bPns}yY4Z$UB_A7+^j >z@R9}u%>zL#az|3KPvQreltJ&L!MzkY<8kQyagf`R#(JB4?HaVcAo^0((5~*GE0UoL >zw(>#*?9Rxou#`t9Mxc?C*7w&QrJqsgp-1{KhIeEQvulR8Q4}9Xfk!f-WAw*d#^cH6 >z$5V@sGnXNTlqc^ppDc6&ODgiWWuBg*JpG>ev=t$%-u?71Yy@<ysxSq@Oc~i*420TL >z3R4swjPOy>a_GIIxT~Z1`(--OW`OQ{`g_o>kuVufS<VKx>lB4YEy_2uDlJCj8%AUw >zrpPr}Dn+Eo9cfW~*a9+3GR41=-P@w%l!7Z9f!;<`f5R)?qd-*Gmt>RzrvgUY&oDZ2 >zH05@T_ytJ%eY%kc0wHn53TtxlM#aG20&?s?g<ai*#3he&6vc=XnJZ|;=M)9YpK`XZ >z6%Pa7_DkE!Uf=$w`1(!+XcGncBv}4&3e3+Is&xa_(*mIqZikI1+?x82r`<j>xT6?+ >zbVTVT1(v%c$3+}3M1cI3WVM!LY$a8L#gKh1@>;hP%(WFZwm|d|kcEGtM^pOs17$5K >zU?nRUK!-*LQtkoBq@Ci<5xEnA3J;2vM_tW}aVl?86t9*5PjxbX(v;6Ff%XL|BqC(3 >zyKlFSyz)RmbhbeNcJ>T`=@j^y%X@wI@$0TXvVFyJTI(a=8!dAEg;PWKA;X(&o@%`r >zp}&!;gFl{o^ZLyjfED&fztwF$aj|USPN2d<wA{xxZ@+9({JQC%@0*-<7XM@2^3R_? >z|H!<R-|8xXWJs8SDo!mDw-HInlEi;X&N4;*aUjfZ8&q8zws%Bop)y@ZnAS_4CSRL2 >z{X9)EpRq}v`Hw2CR&sHH{->38$$J*f`aYQrkjw^}zYF;b3H>W~Y{RP;6y@1A{69;| >z4ND(s@pD(Q=Jq_91H95y|M!oIAw8yZwk-<J2^WPFXx&n{%Pq*&6y?h)vQH)g&n*p{ >zTavwQ>AQSdc5|`pjX+pypu#5yrOP8JrwI>tw}5BXmy}P`EZ8r}G*`(z%X)J=5RwoC >z9Yw&FTOlUJvSnuhp%`Yn1inzL=thB33d_tY<g|~?NBjj1R4P7JIPf4)#qJw4{+ZI+ >zJ;jp<C65vL%f+Bm0LdJv{Cq@yH$w3tAW@^WL=>gU7O+<f%+mGkp(Uk%MwCvEc-vEy >z?zPC1_k+^6%Ad}%)ei*aACn(!Q3xwmdbV_RV@t%*7U<JrIRN_~@iBgY0v$mpl^`gE >z#R`C2d?rQt{gTqI7SJ&Std9b9L%_~d=54KcM_p1ZLc;cCh5h{(^kkDlev90l6v(+2 >zSYpaj$<ha<b*S?CQe~$cD&Q+-GxMZmVAuM<*E^E0P8*g<0m}yKisb9drWe2#I^Rkt >z-wux`Mg%H50FN5`p-&~>hO}4QcC2_^Sn>O3Wz*71&;z**UoVa2(@KKRD<04dXi0s; >z+0^u`G3*rmUa&`=ZT-_G^r`Zd%V~R`o(+6xwdwB4$5$;8XUg#r7~P>Wjt{!NH;wOl >zQW$aXM~Kh<>7ff7Pi64PL9t^eod)fq2W>x1G~iF!eTqPvJ<8SI*|yR##tIQQw~`t< >zM#)>N?M^o}d_0}tabZUvL`~sG;*-<9TaEuHF7Fu<GWLbO+mrUe<D}gw%-+F63D4SW >zuh^Y$QoAyCHK8GIHseRq%j<sEF}9b3^d2?tA6@Tiul&~F(_+1GXidXP-?uXQPQvLy >z<oxjUy^r#CzMg3GskABlLEnfnc-BO-Hn54X{pe90-IsP#qttMu+AqSq!EvR2u-xg` >zHTo~Bi%%|X+5H4Pgue3lod4j^AqCyj5sts=3&|=z@kKO@&rG@PZ`{Rm(SHYO3qNyK >z<Id9Z$TMZ3kbiYgZ5?Wg%d<pT?khBi%&0GPYKn*}3;ZpJ%QJk7i!TcEeK}L$tzopY >z#7^-}eKFPUmsx>-+rq{2WYhw!N3VK-l#M+ePAc>hd)F6lj>+9w5ud%#Q0_dz(#?0S >z2GWV9ZQd8rW=GTON?fNWFP{94Qn*;=V;-SjzV5ypu2&u!Td9BJv7<@snGsKuPwnHO >ziJxw66sL1;;j@)!x2-e&HS3V(Iho&iclPLKfyD;1`s|NwiEO7Y-Kr;@zXcn)Z~E~g >z-J<K)2d5eDKday1-HT8gglHpVw_ahCc0r0*(PB8IM<uM1RI=I5NdIJnFFvls#3~3# >zlQPRnJT><>*PTW_TWu|KPcdB{_+RP0d96|WkTEtfw$Kc#u2&ougFH37eHkc|GMjLY >z%`=gdeM32Z>fQR(9BQJEa+TBnPbqzuRF<gXv-=FSEyAE;TT4@1A%)W@%yUHL&Yp6B >z+=)M#T<T3c8QV2L%(VqY)Wd0;?+DA+WBem7RYnel6Z3q3NRE_ffsE$PT+L|IJ&6pR >z)GhN@IU+3eTy>J33VI@l>?vn912>wXsg%9(kuO&n8$QKHoh<;oUV$TJF0NYClf* >zbl})3DPJ9Rgj5)Dt5UDTajYZmwD;er8NMmzWv?Vm+eq*94h?2<sq0u(Y@rqH&TPp} >zpfO8r>^4hwa0_jBLfK{)^|~`YV`PJhh~-sMsp;_n@zulryJK^AekR9#LqjS_1<pe$ >zYbV{rM(<B;))?G*&Y=i5QxdNDayr+f**v~zt0y@%&;Q!5x@<gYq0a<Z68DO)gL`y< >z5>QC!Dd8gaKD5_1@<*FTZ&HHo`n`xJ<<D<ixGGU`d(9sGTio7Y`)PO3xya|&%5PrP >z>Pa+QrE2}4+-f^-wm0#$`|DZsZI6nl$?4BD|7mK0bSo64a2Yz&q}Go9P3EvtCwH`I >z&c?_4pB$)BeKSSRxx20T+M(-@Xp0G9_g=qCK79Y2hk<8nLGTI@-RBguT>hf-y~lNp >zFWw&CuNhvjNxH81R(1!u*URObFyPqY0iCt#K)xY*@c60;?{C}agQm4<HL;OIMm0QN >z&W@sgXSH9wx;U3rP^)&o!$W_fIG3a+4K|q<tH!4AeuHbVgAV<wU5JY|WkO_b1r?Xt >zk`rG~Qn<<L)4ldJ-$&5q#-9YQo99^NGm@s|-6m;3#}k{hMnrC8i40<ba=nw7YHTP? >z{c~|XYl?&@Y<Z-7jgsfnD^xx?C^pLOKW()}gr5m_*H2)UTA4Bxw&8l!?*``hbtkG7 >z&QrDbv?|bVrozraADS&%WycQJVlUu&^%B1FjoOLI0rS1&UQ}K@Z(8NlJk6r5HGfOH >zQ0?+SuW5No?&f+a&eX>ZK8@fZx`=8I1vI6LfdadVgNja#p4k4892`DQHJAL@@Zt#9 >zu!@K+sgQL$+FGz3ND7+a+z5~$`Ni?Q$iDd=%v(fW>};(H6(_qhuZ2%-CP5=M>{Rzu >zFAT1-I(;SSok`sK#z&EF+i-Vh8!S|VWSOXE6$2p#*5{8XvJ7<9!+^^4?2_EXgahZ^ >ztR*-+jPUPnu!i4ey?2_~_%!31%!S`;pv|Wtfo#-x4RqT)UPB`{$MayV+7_{gb!35S >z%6J_?&B$j<UhwIm#s-VR1-kWU_O|+I)D3U3K1jN?28faRP>h35XFzSP5)}jG0(BAs >z3$7#_x)S}kPgk6gyS@CTf*F(>`SMlXrnL>#M<rU(2Q1|~Kb*dPTyD`Gd@eVgJ|nBf >za<^L^;dnd8;Xe&{;>E?;_{AD{+<-{ccZsXJlmOr1;BHyHpGRMdRgDPmBLMaF;evx2 >zkLP=>)Ar}B2X{^@7CE__J_&?O)(hnty!*`)MtSCIWXNuuhhJDquFJR(alXUdc5Z*s >z4ty<!9WK@u-xBymk<uUF`mvr>d@>--J_iPwPfGHpfClpy;U4(36b_?Ts&bz78S`Nz >zcWV+;DSEQU`~xM=d2Pd^$E@cly#u*h3TCvfufA=IvCM%d)u=p7@6#Mx%Jp_8Yeo<B >z7^i)Og3_4sxg8<}P;0@KGNMA&YY`-JiGxK`FImrvAjU!24kN!omW^%%M+DEOU|QLX >z)#vJkWGgpI(We?k`i@_73|Az$irt<TPb_l@U@5v47eg^d=4j}Vv`3*b+1Fd8Dks(* >zdUege=5Fnr#{3KJ?-TSRgHvblUpgM%SlwTo6E&-wLmKo;UOrXl{BF){dMM(ryHba9 >zj$0B*HP+xp<!JL9Q0S(btSwjdV2N)t^72Xgg!P30$u3u=vm@D_D>(FHmX}-PSVIT5 >z!H>P5!OBpr`eD=fh_EO4oW}E}gzwy2GKmq-ej{)7-@JC@Shijj5iZjHp;T1!OapxM >z<zttg8+DsL`IJq+dYQZ%>?qlrl7DV$uD_u8#hcHEA0B=Cz3Xt7Ch;_>nTfqgrWy>5 >zbcNDMm@^JN*geR?`dzWmY5yJ-^At8FiHZ7SGoqS+5L@DF=c4v_I*jelwZ+fi){o7L >zFt>sP+)ybP$VwXnvMVBK8twsgCzl3hZ=w^xW@Or(do6-(rti=O3*1Uf2|v!W4*!4< >zZX68!2LLSvUt;yDDvsvqMllqhd&|9FUSexR36)C({U&Kk*-67L3Y!GykOHoBJDcgi >zRmX7vztf|GYnjds@8CFl%l*Z1)yQm<0k)|F`1WA71(a<(0BP)yt8F<|Kg6bl^MGNU >z-MmbRBA+&pg<>?4JF@pVvJL06JP@sW1e|aOzH3%@q<0R>0g%_&U3po?xaxcX$FhRw >zpUzE$<|KCj&S;KlMHWoJM$Q9jBS(9ZYv2Ix_v2cr%d8L9IX~)g26l*amYhc(v0;r_ >zYLxrdt6aNu(DS%WFCKv=Pi=a2W7E`YPO{{_(b6V~s>`&s%d8R~li2k>ze{_b<KEb% >z)6qpAaG?!ybSFE%=vI6tJs>(fSlRyI$I%C?_qe~VJoxv~gFhc1_^m$JfbS-fyRBUR >zN0k=H*;aP@H+CxxcPr!hDr?<{VLq~oi%MeupHmt^uKLd@9cHTvI4a&etwj+al@d+G >zno!<0Z?VfN*x(=y*a|gnr<sn^%vWd>w42o;-+bV-0Sibf@r)EWhAf_5IA?RWv({qM >z4hN1oi)$XvR%~R;=W?77HN<(&I&qR)70$6I^DNUr%?p4p%TI;o*wj2kNAWBwQ1Ht< >zi^(iGC_hBNb#~wf;x6@hg9y!hCJS&QxlV-ApaI^-r4n<N$Qo)gxc{U__<8eHfOeBH >z_2Igb`TL+bAuO&Qj<b=)*#xaIon%v2`O23$_;eY0XZ~7n$M<>O4sWh*I>)8rrj-NN >z2FlS%zeHO-<>|l=3M@4VZ+9Teo)@%7Iq*JI^6cjM3YlC&1$Rq2__-f9umj*od9DHu >z4$6T}@<IoAaX4Q1JkLhJQ70>=_MEnv<e0MftO~ik8@ZO@TsLpNX9aijJTFwh)x;IJ >zr`Ot(x$DRQH6J|qJBzdJnb+|ZuPkR-Hol1CJiv<@*eu{Urt@90ymRZl^LxFUe}Rft >zyo*hF?&0St<iSvf!Lq2q^31`CMRsKY|7_=A)zo11+MrJOEnzdec8!1CZwN8Z)^|7? >zlr^-qVyLNesCjDWnknZx?2)|#KccSHaFP?S%3nUp+01%$yWr6`;Um8mzs^PQ{Y7xs >z%A>c?VSU`NIFoBHAoi`%OVfu3s)lt0Sucl&A1@9+g*`UJJvQs$JflCBiQV#ox8-FL >z|9r>esj0_r7dij5KlDUAHGp!QY6@+=J+KRGCmf%c&LKDyCwOzu9+BmDa5qDFj%5CN >zY)#RPk6hY@K?;tm>%ejM<|_5}x^%FOSE~}|<vx$vRF_`a<XYfg!2$Tls7W4)e8*M& >zfqf%)b0gPbfEUtzlfW9Z$vWfD;$j@wfZzH$zB;stOK||#&hyg3`L-1tGY2l<y4}b< >z892$eACQGju{S7X@1ErQrt>XuJjP^+mp9MHf$x@XBN_tjICeS6wIOJd7XwI&ES^gT >z_x^A0CRTRDJlA}_fj-F-4gnX*531mrlV#;P<#N#%P02Dzn`D1Paz77q(wv@WjXplE >z!DCJG^yfK24m`U7Zjj)d>m<)9ouj+P-;9$zcZ9booL_&0XK-w6oqT@Gsd3EY@tE1C >zG2_)SXXrE679DFdp7Q{EGnqI1FUKlntHbGME;Y}LD|p`BTQ_ZzbvY)xS+33XJb(Kn >zPuF35>Im3lXNVVnT(dYN`||jRk<6BN;}%Qf6Llp)(Q>lXZQK6v{8`V#3ZJ9up0hfh >zhmJgFu=qv4o->ZwbQn#zJ50n!Pb3_haB|?7RZRTPBIViRK+0<qDOxW8os^W`s^$73 >zDe{FaD-6B+HhB_s#7s8h<_o=5Q2qgAz1*ZDZj!djpQDBIcZTO^<?O3~Bz&y`%)NXv >zXL}=Oq_jeRmE$Sk+Y8uN7P%>nyp7(xFeoJE4Uam&S$9gmPMepp|HKKFL`(OuwOBHi >z&HTvl>;MO@35!D-<R;E%2hZ~(!r7QyUND&(K!%XlxEPA<H8WoDBrn_yIP)q^)A_7< >zS!O<;LLRUOWLaoM1QfiZz9%-EXA9ts1E7;fcwg`FhAX(+2RJ4IF4>#6Ws(;#&rb;F >zxlzs?9LSEUsj{DBlL@7Mllg|MO;ocsW+Ttin;VAXY6V`xO!C7jcq1D*2J>7`!f0eT >z-+!Lha||@!$+qkO@KLVrJR1w;xTXX5UFpU~4i?98AoIdCP;Uyr>}YNxF4)_T>*380 >zU~JW|<QuKBo#z3yGJ8)4e?4w;>d9W-Q{^`yxHn^OrcGR<pYM!*!H<5~5dFF@`pp}e >zx0^VmRZbA}tsm~~^d{c9Es%FRW8U-MR^;<P9OHUB@E6~_wV!|c<qu~`>mL(Vg98-2 >zaz1<0WEPh7&(Fete#uQLE^^`q{`vFiA36nEhG2l~7~oI_<aoAw_;deahT?G$rdQ%8 >zcw-`wP^<ZH6{(Ft4(%jGyHw-I90P|7`i<cD54<fc%z0<(=X0_;7wJTU=`EC4z0m3K >zJ&)~|N}Qk-i8$NvE7K+_T&t1ktIM$zOq|tRRKhQQ)G9wdJ$u^#2S9uot6ao9k4WYn >zs>oIw=9G7`wHw*%mfktZIIh!bk$*Vf!i>AKf^RHfyLq!cDoP#<azjUoy*jvdDZ2B$ >zz1z}x!NoTZK>1n~+&~r^*$CjB*}g1}>naGZ?_zp|yZt`b3!3BOz|orLIC-;e9k@}C >zdH{6N11GDf08cuQYq^TlidpdS=HFG6gyVQbT#XNuZ#d64s$iS8JPIXqjd3|UD|l2g >zSFr-Xn>oI?9FKXnMFm&co409|M-OMOM{+#Ke3c5&*y2CNjW=Av*(wyv^?Clr3XYQ? >z%S6)pvy!djz_lZs^n&saglF$cuful$w}vb^QC`cGiz8<nS8$n={8Yd+4hPK1?DgFO >zo_%<JC`%6F!|^U|jakk1p5z@>fgGFLbppa-8?d;ZEPetjC!3X<ESGnSRWQLS`Z4c9 >zs4doBD0Nu~^IkZeyl|#yp|X0zxoTcjdEvJCg`m|1U+4#+`G-3H4-H+Spo|ZVPdJy8 >z$0!{iOwxH<DT2F0M%N)9tr3ZBb|1}J{7?yrx3d%PXtPNbynBDy76REMJ+E#|lKAt6 >z2S$&*0~a?=a{E8CU9uKY!lXw<a>Elzr>>n3*syohvlWm^<GuHG#qWKQ{b_&2r?GpV >zrn-2=pFi1nb9~6z2`viKcFD)y@-Pm3vNxN+I-}6ONS^1-yq$6{u8sBvt)IQaHgI4g >zJ2>tv-a*Nu_YS;W16&fLl!0ioAm^ZCvRMK)YVz!%@Ekx~^{HoM@5wfIou-9nTWax3 >zeA%R>Hd}Iba5z_MKxWcc?yI^yVe1vcis!+&oZaEF(HY!iXiiXZrOteXK{_X~F?%xr >zUw6MxOymTyWcR({?(X0Kkgp!lBRjy`?#)+cu{D=2Th;WsJIJ8@c=3%~`T#Gokta`< >zO?`PLDxGUu!S(WH>yONC?w()Py=dCVwjL-*e8Y{M&r(QP+BlHCNw5&JVL56(n>A3V >zh2sPT-V0y}V!8*3=~;#Xu7~SHVk4M64|cJW9KwmCaJScYHf9G_@b;z5<(8%z-(Ehq >zhim%Ja{T<V1^k-^?wi%-Z#Fx=iBb+Y92RWU$%z*5<GT-Rg7ebm5BSh|u7|B@hVwfI >zO5E2u9@k}m7(;^39Q3_?kiPzS%a@gabxxqp_u!wW^lL=hPO`Np`8%?{2UdI!Y5czZ >z>G$X_-?wf^V+KHCcgV%*a5WuxfZ2QI3g0g)E%g_NRg;zoxTJ7!@=3XUJ0L08pYyz% >zOoyKbcl=D#$qCE)xf{p%+4S@1)1NM@93m^rVD<2V+Nx_hjeAm-m-Fu!Gd(9~b#w8m >zQGkr3f=>x&<Fg7wS9yLN*<D6&5?V6ED!WC>Jo84*x*F@dc8Bx$0_c7O*QO%p$SQxw >zB;NswU5wy)jTorOzkNEz+3B4f;c$N&tM2k^wkB)9r?IMD9rSLHx4H4YyTc<oi%%UH >z^qB;mS1V*x@GKauzOKswgY3u-xsydaHyl^e$)Pl|(UaU`W?-?rz&>J3??ah>;PqV> >z{;mxkyfWFmardn<fz5|!b@qGv=^IP+!<qu?e53Q9Q3eZLN(|1wYHJEPqj~uWI0AKv >zUWAS=Z`gAn-m@r#t@!-It){R`v@0%!Mq~QVN<I4e3(tjKdYFq0GB0$rc|UpHeCJ)* >z*&B0yr?>7>JZ8KcPj3j`t9{jHYr?~3ib-l`?zeU0@rK01O(6>7rXlA%8kXB5Zx{rg >zF*b=^n@4^etD{Bd=`}g+dwYGyz3GC8gO`SDy>_*&_=J84EK}cJu75>sVYq4QiJ{?_ >z`*nxT`vi=ceo&2{Y^I->z?-a^Y`sD~thnV>>g>pkog#x{zxLM$pVixy_O9YkVo;-Z >zPQQ)M0sY}Z)uX7JMk~f=TsaV=ar}HsxGCz8rC1MZi+ZSmKho|8Y~u%y`50XtAM>+( >z9P(_-#^xmt>r0(qw+6bY9SSkzwvYL!`|licCvDw!Xj|y^!r%e?;P_~tdVD26)OaU; >zc@VL$&o(Uj@VlF0B6BhLp^8sZs;6lK_?8zY{vB$45WP#!>Y?2U{MewXSJG%dcB4Di >zi;#;B>cj40yr3H%>fPUqKhQqvO$-a!?`3efN`#ELmsRGieQ76k6sKWZ>VeLUvg#$A >z3<(~<=63G)vFV9N_G_OsEp>;pr-BEqkKrwQHPG*h`?aa<`v(n_FW>6Lw7d)S(9d@c >z>LXqX*)JFLKo99jJXdc;*UnulrQ1NuOQ<^R;ja&k)69_WIz8x8FZSaol&^Wdjisj! >zxASW+@pM@$P5;c|XdmWu%TG^>g|!k-0+)vxGVXI%_0~<3yWvMnM5jJN<W^bv*;Pgb >zduwbRM+}e-j3bA%ca{ZtX`P7*_QF)IA=cfsayl&^>IwC%hV={eDwR(8#Df~jUIgye >zFON)J(65Ls-91NOH4R=o_q5w+7xGXA|5A14@4=uW_ohk}g_ok)jkN^^r9Oxf|Hy@g >z%H&rImxM*HhIKs9mZJ*x%_R>J*OSM*3~o$lc&LQU-c7vze@v;tYo!|rn>0V+*&*9K >zQEu_~u6n%XoE!K*ru0*n=9kXzZ#BIM|K741w%PF77A8uBaazPMr>GRPYFOreow%f_ >zuMfin^tM6rmEpEW%<j$}@&P=Mh>ZiwF6kViFMH}=K6q%G3X{IP#ULLx9gS}&2=*{a >zv}x@(&Idxw>ezPF6XIqVXFXE4FsaQ0wrx@LA?|P)V!*JjJ$M-7pTZ$#66KDvcxQ?b >ze9wYd#Vw6uOmz#F5)z9#L-xdqM~Z!V2~fU+$F2SrjxL>~<iqO02d8AKh6s^ytM10y >zmf6N-Gq7#00i;yIIY%%j>>jIEy*!XlU7S`+oR6_CYRxtKRHI0vyW5Bnxqd4^k<G|f >zt<aLZ&`uJj)tiQZpt7BtFG8)!ea0>m{4i${>Rh<HEznC8<F1PW7QYQu_Ve`?2};)+ >z-SxCv^Y((7NIujZf7G&Y+X_*BV<b&mr8UQTT#7l+J%HC}6%aBB3fEcvCXOX}tf^`A >zRdOF5#a{2Ugvm0FHM;4)Lfl{YUX$_S(c2$IBljWM`!e4-?f5<MqU)y_>G-#N5&C!5 >z16QC8YfZDyB(H>zE~|mcIWs`m$!>Yi6rd%F0kNMH!Lw6%`pz`X55Oz8fDmhy)FDaW >zrj^XjaRJvNa#_HY>Z)%4z?QwTq0f@u3g6!mtJc=hXZ{2P$fR+YVS%S@+kY~tuGS~P >zLudBT$*h82g3^%zck^X<(IQAs-)Ar~Y8hEM6>qp%eJH4Wx$LrgjJi0Gt)xdpUS+u> >zuN7x&!fJ8P=X+tkDO?NFY4oUfKk3?1c963aewjtXnSaeD^GI6HIy|)PTJn<DO=Fb? >zSv}^CqkP*bqEb$Ud*I#CJhM)M;!TzZkycV@agYJ_Vu|FBrwDe8*Pt)4+#oxavgD@- >z=+^^1im0F>XmTvhezM0xMK#C8T_}Idf%j7}2q>*5z(tK8Op=}z!fugp`zk=^CIa&* >zHnxy+9W?FZ`}4_*B=swk9+nq_1V#lU#Z&3MI*y~9;Hnv{2df)hdj`7YqM^LLfTsE? >zu*kVU3V}nZ)^j6#dmt$ojq@-qqT~_jHP9R3G$V}?u5z<P&XOfkw3*E1Wy(1}XSrE% >zN(3Gi7v-^&BEv2O&)#`PgS{$(-EHCO*hnLvPP&`k4a#@0A+9U#S{3`BN)cRu9BTB~ >zv?ut?tMN;ohnlwC-xGTK)${AwhnjOKA2rABPTcC+X7HNjfr+H>@68>$e(X=8JSRmE >zGu7Q9Q0B&}1L;!V^0xB6MQd8?OQXeZKcSWxZ%cmU>&!SMChJpToYU)9Z|!d1Nf(=^ >zgZ?Lzo}A~V`UL?)Rhhe|YBbnaj=ot;zJ2c><uB=vj=r@huZ1FkmMClqS7rQXm!_}z >ziIdVD8`fiyvRzy@a*a=<{1+}=f>)352=1~y8gnfG<NM6Coe0hk_q5qVow{NgixYJW >z>tvTGeVdJi^f~uh0T_c_Gf}am(Ss;%$-NcAgkjemxQFIaieh+maBEgCHf?`VwzwI} >ztnff~gewTzNr<CBUmK`B`;E3xX>h1tFC&nxgV)8@8}(aO6Pk>GnQ|ey&vGazFAS!O >z+MAL{;f&_C&6%M`vwT#osLjl^T8-0_izXV(%f2zvn2n7h(~O|P$XSL)TqF8I>i&X2 >zyi_4zpqFg0#4&=!VxFh>n`f641Vl+?qjCNAoIr)w^~|Y~4mVYh3*XCmT75Ur;dAyY >zZ%Y{o{YKDFxI4m?TVcSruZkTrTJ!Cj8BlgdztwM`C@uxu{S?<vsU0oc+PkFWBoG@U >z1m!aTEf@%u<C7_}k*_sg+@3tN4$t`W(GPrd@;3QL>#48&otH!}N6PJPUM>8jH!Q?Y >z{jlrk+w$45Li5d)RbBU(uQ@L9ad>3OUi61!UoyYk`)6HcwOi@<63?Pj3g7JBYuLrd >z1Kng#yF2=okY9IacEX7|zs!8QvNdZmu_h1LkC@d8mCrhR98PvCWzQd|Q93{G>2-Ik >z^7BC;OZXvlGj-zj+wXg`q8H;Yp<Z3qdVS}Otqpgokcy+T-~2lJ_UjwnG9Pq2M}n-D >z604^z-(J1xs>Y)lIfK%!(yY-vMmNQ{UXfv$*p&VP;1ZAM%k0V&!KOqOvn7Ft#O9ft >z5AHNISg)>LpCMR`T-y*`zfQAVq~Yj27SLX@DOI1~akW{5vZ3mB_QV|$*`aC1jDFkZ >z9xFW>wpXM%4C;61@I0u50?zY3k)|5m$k|P|S!4+Aq4bJ1(Nt{-!?qU?M_pClQH{pM >z`p#}<c$#kJ`D<V*b|p|Nov^S;-2TQxzky~jF19HXD`tufAB*AiFcZBV^LRINI!$|A >zWH>O0PZH@5(}-XZ4DE(*rkl9a2%RE~sYn|JV$RakI($r{-1PBmSihK{O@-q*g7aei >zdXeg)=*QO(5szwWO2Zs;qs-FG;%S6}a6ng}MD+yIX?nn@)KnzTl3=T7y6z%WRt>a# >z9i(uUpr{gV(!#*%iI93A*c{b@$I)(JD^E)Z^AcAZu^~(hhe#0^DUKjSSqW7!G);FY >zI@v8eiivR%W74G9Y$>iB*tU|QT7{aosQ4#Lt+!H*S*i99sZqg@^%MwL%u)r5uwXIT >zG!|_WYnTbr^M9-t8mq*Zwi@P?+R_Y<$CBTQ^eaimO(c`MB-0_1*(;KHsK`9thqN+n >z0hys-W-JY6tW>ti>B+d$>TGU-{&Pw9=-Ow@7-rQul-6ymjf3Gu#s@)V?_6!$CpN-* >z2rDv*T8}gqsUw9{RF$hjhmUF}m5dA4ni6RjzfkWK;TDJR!|NP_IT4^Qf<5MpY~1wq >z#3@&O5mju5Yp+zopJ|7PEx}?e-OZqoW)|XRSuZxg)3A#o6T*zi@I!UH%zZkw&b4n7 >z<_y)G<2mA`J4-Xor0FM7k!zxMJjZQ~W^$kXiBE+OyTXR4xPvsCOq$M$h~!QKNI7Hy >zaKHFa=x!$MR8nKK?m>}76-RWHT2?PoF=Y?fKGie@4fl3q$7z?)Zst)UVw9NJD?&wy >z2~q60cB({;Mp}_cG@jDIQ;|Fx;MJM+($ouFkx_ogPFF+shxib&=!myv6{vgM(-7zq >zcc*DpQMC&I=!^>Mbwy3R!}Vsx6s`O3_`8##(!-b&Q_4h0XmRW<5m_)7=Q(E{d~s*& >z9GqpaD|JXSb52iBOr(pH>#4h|6A<-t*ye=9u7so~347lrB!8aMUr8XXC8W5BNUn0b >zcw$xjuGF^*2OJF#+CAM>c;V1rD!#zYv_O=W_8xbTLo3*I<Ofx;{(Xk;g`?t2nPZps >zb}>y0#2PCbP8e`bfLK~kGTVj2CN*-b8o9K2jdnITxRH<2L109N<3nbhG=a7V1*7Ix >zvm&Czq=H_}_WAs`w1T&yf{FRUx%r|WEW?mFt#(klo(PTa(TJki7l^U-VuEY1c{5c9 >ze17n}t48x1)l3l{woWsT7ps;5cCJVzBtSKaYCJ1e8fHH}f4(z(2RW09Y<89Jbyc;I >zS<j?G*19oORE_a&vO7(qUaUoDZ!@C-%&QSytSmtuGUx%^U4t?zdiXgoy097-orj5) >z0A&!6Bo`M97H8?5kFYTA=3`WReUCp!YTZsn=!q~PB8{348<Tn{K+)s;Q^j$1S~XP< >z)?<x#vxpMyNC>p1(+Xe3>NSgynKG4SRKh@?$*c&T<=<A|uDKMTag1u(DaIYl+FmF& >z=%kWtdMF3Q`asP(UW8l}cj<XxGdDE)Q#HVScAa7jzQ?FQtPjkWIz?*jp2i_!wa#@{ >z4E<u<8aqD}=!P>%$BWQtHw~7_?F^HSyhIDr0O{F}uRPdy+pgRbU+EmXa(|8n>t#0` >z5@A<9?nuh+Mm38J!o}uEJuXQaRpQ>z#lD2a{<$E7bkl)y5xQB7NfLdlP10>NeRS7! >zIE_Po$%4FGBuSDS>96sWil=$GBdDvRq`g{Yu8Nesa0jz-U$f^ws1P$Z{c)<gjYyjg >zdXe!7n{{=v^y*6k(5t4s`Yl&qr@3A&pc#(*Pb$R#q%z05<FdqDMmpC`09pje<}*d2 >znKn-=dh)xN&zkX{=hDn?UZiSf_8?44KwCf&*Tjl+5uj(P*So5Bu8Xu_fB*~9db@$k >z7d1_ZwTEdYi=T8>T$MUSHeitgUTg+tV}DT1Ryfk<B30KoBAyDZcO?V{Yon=%H4!$` >z6@0Lplu6f4>d~f)&?~MAfbmNgtKfSwt9L7ziVO?f9NKBxRWy4WH>XTD%S?_!Opk4^ >zm{8`bmMPYc@2(9|3vUo>(5ZF@spv(v(IFACo~q9S>8}HrAVyu83QMArlf*K%Zbo44 >z!ebFCWodvmPo~qbu>A(ToXo;*@G(y0)ovBj4O9Npd|^PpEpYgY<ndW2j`yfe(VRQQ >za;9Q!n9RgZ@!xA6$Te4`0#|si$Q0dUj9wSpMo|gPJsWMPa_w37&3Z6``ETu^13THt >zoov{%mi=#1RKBFZ*HaK-Vng(Pyt6Fo64l&vzp9Q%)oZ^^V5^!T9m}%Bp5b7*t+-SB >zHO58SHLV&qS~YuG@y}YdW?HqswSN9A(ve?wXa<pWQb|}ha#X3V+p+>(Mt^%MhLNgW >zPwP$U!O*G1+Z^)AWU^#0r9M@=7>M?#8mv%topsE9a?ECyjpwZ_G!Gg>zEQB>EDaBs >znI2eA;8?reuz4Y~IqaM5u5Wg6=N}FO2qeg|=)lGc-;D7zTRhLH=Z5n?GMiq1)0BLx >zT|BV)_JEOKH+p<fW09txHA-Au_tk{~5V8+4(-ope)r+U86m(<D#AYzDT_*Q+xvSQ& >zD~euvkk{93Kt-de%HA{jHlFa1eduP9QOGum4bAw62vtvow!3Opj4?As*fkCrF4muQ >z)vfTAKNw6N8L(~7{(F&XmD%Hf@6oAu#Z}P^hFxvk`?cEvu$l_57wIM?66iEDuzm$^ >zgZ;y9)g&saz!mUbH`0ITX7<?4($t;BHn1MEq);MSG`vX!rgzKDrr^mlW`S`87*&5w >z1dGb*uh?!=&<)>3RUgj^4N6yTcLmzM6j%GK7R3-A)oh%Gt`eu2Qsp~c724TRQLYLF >zRDwGd*1S$Lql-=ViIm5w4xRr&#+o)V1#Wh7-#OTAJut9LQ#mNk$u8c{Zs&Hpghabt >z`#6XAKg__i-51jKTu;-0(S!#@1wB6yQyccawoATFHCnp0?<pun$$tL@vEiRY9Qh{_ >zE!JP`KA<Cl@Uk-0X!xie9emI8*uxG<hYuf+7z}q?yL;*kgsLvOYM`gd?LUvIep4Md >ztT1vIV@ie29^Qzip;vyMxWLYW_hf&k5@90X6T}H{g*bFrO^EH=QU7tKm%MRF={YCT >z1z}>rnRLCXRg?NvprHuROgC0%72cL9`namP(y_NpOo1NJ%H)>l-YJFC^=*Eg@>>5@ >zW}Sw10kzbNv4|i_l~^yTUw={TK&Rm|sk;hY|LBEfbkOncVlx{tJl<73lV(BZ<j#rg >zV%Ud%#i=)o)F&B)Do&B{wqNOkDaXXdS&!heSs5R;n2d|mGHLMfZmj~bRusqcOSekA >z*o02grT5stwwol;h_kP>0l9zmdf$7_nWRw%aF6z|$d>0uG!<<OmFYU;3K`GZ_nxZJ >z>8iO#)m{-PbqwiLjG%33R`i}8KKr{z4~elIZ6G$7^+i_6Jl!l-JvdJ+aK$Bw)XJzt >z8=7VkI9Ep`!_HLBbXDbn?#+UF%<%5!!+La)YO|OyzQO7kmHKyGq+a}0dsY;xEQW=+ >zs?1Vh@viq9y3JCeEjr%=04chiicF$j-Yj!3PI~VPt@G)<hm%fSACJP9j;gKRyJXtf >zt=cKlUDIoKHKaI?zUx+KmdW#W?%SRTE6b9{J|re(K722Jn3JjBDaMzr4PIIsx&S)W >znK^7vvmJL<-6tl@M(Ut>Pn81fE{cuI+$bTVwwZ238_}5kpJ!fw#vh1u7G)+9H@Qan >zpmqke?cUdx`AgO0Rju{*v!*`dm&a;JyD*3LtmygGy6K9O?gU>9th3wO-!4dv52({( >z?%}ae#vTpZTREpQwlzM!98q%7Ibs{jv%qMFi}Ht41|Bs)TkTtS1)Dlrk+X#rexY=F >z;$raq$eX{G^?c8fwzrucS)TV5lFTlmeab#=sSA8m^k(;=`M|5G7bco3pY04R(mQqb >zQ{<th;7Zay%scgEgURbo`V*#+wu!-Y!~oK#A)8%eSN)@Z*5}?ZczRl63+C~jL&o8S >z<mmoIqXPpAmtEbSR7HBEZYk1i_&aO#+-$0L%R|rSN777#DjfsFQD;vZkJbm}x;)P- >zW4)>)GacW3KpFU-!GwLFJKE?Co-^|qvI#%6@FZWs?^VZarM}AL`cg*C(HVih)l0pS >zO>->jP3s@?v&GKh3TCb&<nl~GxWSS75=!1A^@i5()!00H-}TGW<&4>*vnMxeE9@-T >znAbr()w#!;s0hD;i_Nk7K%U9p=;`w*UvG>o<r6(ucb*9{FwzrfJ^46&D&TXv$u*Dp >zCZxsv)nz4$2x^^Fx)bg64)u_5s=(?IB{BZS6PKgz?HiL`)n9QAiF<528DIC<Zt6Eq >zw`BA0rM&_xf1jNN)VwRwGM69W*Y5b|<zB0dQ`uNoWY9nIx$JY7(!S2+Cw}|x|9G3f >zuS@UM<g{Sz$Gr~^?7{TfZrPJY9wL3a{Ro=E3_0#(fcbw3)6KB`y{G`Xr6MMp_Z6YO >zdu_H~H@RcB!Z~BjvXF3qFgD;=N{<^fh{KV<Mwi=Bk0|Zyvty4)m^<}($P8S3SvP6$ >z-6@UW+?l-1MS~5cJ{Wb~Gj^ZT^~(cDcXn2|9A70Chy6~kKka!dJT`l4vV!F~+vDUq >z0DLp5KOOycKE8snD?Kh(fs>wa+Ud!BoxrFFI#XfsnOxr<(}jyG^%et`sA*fep1_2r >zaIw-k{@S%uVRn@>0?V#+?hU$cu3nzQG)}LSI>Z8Y>wSFy0`cf1ug=N<dNa@JGgMeo >zc0)kQr%ay{mhCWCs6QQp`X%JY*)6o>qUSp53Ow32&fV6^Xp9?mp&dE;+URq5{YkUA >zM%~hFo<{G=!$=V`0%OQiy<CT`4x)e=Tv-cdr>>_<<=_5XozB~K>+;Ui^d}v&`P#7p >z;hDpcm9aUvwu-ou?%9L-m=iLX3Q4qzf4VeVrzk!4e!@b0X{6m>q9l~2eP{O6*5mQ- >z%6Film7ho|c0H9((&wye6be~PGGq+W+J149*`BReUOjKSb<?d`oY)F|JvkJb?^9!j >z3aIG8PlXCP9$!s9e9!IekBQsX1+ywTEFM(pHs4}ghyq%obhNQ|2Dc@LR6N7K&qE4O >z{N#fTn!O9bx9?8eH%Hf1ywOd{xwn1ZT!o@8rubX(Re=c^kl_5<RowZ`cAwfgvYWxh >zu=~-BfTL62v{!q*y0W&-sO@%eCks%r(t>rOyvV@=%NY?Qgw$c!12i3D)m(?nTIgY* >z;$7R4Zw9MXZDsXpfl6|T_0wv%Odv-UgE)a}OqFx#o={&(ZfulP@eZ^Xjv37}Y?px5 >z8r_k;Bm8J|tQr^BWB3~(@7gEPINjlHbuCDs=`MutBljCjr_^D`YanqQo~9Vf9H53q >z`RPEv{#ihHoDyc=@afa9M(|YQC9)pro}}s}j;iSl=0QiFdec(2eH9Tg6As?zxs+wy >zeN~<<aJL9Xa$`;FG#;$dFr4D-a9&UGP47O`wG{C9&S{j#e7C~gl>FVpMA^*)wC(<1 >z1*zy-l?HM@K4yO|EwfI2J$F7<<ufAJVv(Wpz`;%R6(x5^yHwr}+G{m8lD!4U%QldC >z%;2D+EwHQ569SqFur%!0S*y|N?MB)VaX+{jcu)6wlKO(T_g@m~z`VQu1!Ms|x$V>i >z*gNtLW_eu8E`%Y}gAn<v0NI;bezS9@`Qew3c0dkP^f@P3{Y-%*II5l<tDn=%9?i99 >zojS)H=r_?I`ls6IYF4Im9ACbaIV|2<z0z*z@_jJi1Sq6t_bQi)Yzpi+vM9V%Ja2VP >zWK*!m2H#Ws#>>rdthCyu!DR1(9~}9ta-to#e_%K9?r4GA+KS4lRhmj(Mz&!y^)mgC >zamddbc}*Atg@`xnd!jlOLt9IqH?#iG?1D@3gKcVo#w{-!6=tn13?L7nUVC&}^WvOi >zk*8R0P`jlZ#uO2AWh9b3J;K?TG^5FvJTuY$%2A1D!o3DOHS!SI&Q((Rz0h9ea!Y7? >zflzbrs+)fB5^r-<?X`f$=Njc~t$N!!*d0N?IW34E2B@J|E2x;z(R?d(9PX*0579P~ >z7hprezr*!wgr@NKRmGv~y+tTekV1nNC{A^d3Qa&{2Xw}1UvLns&_;8O%Lq!N;hy?U >zDIEEFVC8;ZtehvgZ<thv$a&QBF*zug98!lphwHN)8xhb=V-dn|4_s|Zp~u>^GF%|i >zSkGAEQKP2e^Y{CmYrkgO@}_ZD$vYL3DI6M)gxpslQU+P(A~S0h?8A|hpjJK>JcFpI >z>Vc+4K5?j6kvmf}3;nAp*}C$m8yZUCYQccQs7bNzK+De9(L9E!F8V;YNZ^+_?b*qY >zHT4HI=2IY#pRe|B^z_4ZN#h7gl>-M{KVXUr&YMrM2XCjRmR)k@Z5w7BiJWUYBU)1| >z1iaGSe?1*Z(gcS`5iW;5_X6wa?_Ji9pgG!9A^iNj$0Y`2dsch>jiBA?UJlO!D*7#~ >zzApU#T<M<=;ZN^Q9OyW7?eLqAJ6^a>_8xbG6<<wCaQaty<Sk8!Q?d?CjQbb$YVOwU >z{0+$)-cO_LQyBP)mAvE?65NYLQ`5GTScDj;oosYNUmM{YnF`UTCi`R)ThF`UrI@&M >zH?r|4pH@IZMR&O4fx0I>8>U>%rhcPF@acnV(vmBT=v{3o@?W;Zs+nnUM?6Pvd4Y9R >zc9DDams>7w3Xy7ZaqilX`#Ev*H(|D`lV%B)g1jiATw%+kwstYwqAC_!bm=?MF=$iE >z1*yi3MmMbXXkox26BZzFvrH&?X#f@`oW^<Jy}v04jsq&P_pG6T5WU!>swhRoFwx63 >z1y5>}?n+=21Y`^m9xRdN5aDSOa4G>=BvCXVVv1G1uU})pRD{ZH3`82^>XR>u)iqAR >z5?ID{SoORjZMUMQO!5Z?h9+`plPH{J00t@CpO`UG1HpUm8mm$JaqY`r^Cb=D(sALE >zip5vV^{?7rlt>n82G{>9{II+J&BbD6?V6mciF&Z`YlsEnS`9o>`dx$gBjNgwzmT8P >zH3$+LXc%4Pom?$||MF+ROR3kNbpMKxV)ig6FznyW7MPZRe><N3`**`y?-$6x)3uR+ >zKa)@YNCN)OUk6~tzsuLLq3m@RB2=4t+*hdL$ljogkWnj^(L#W}Nx*Y`Aj?46jR-?4 >z8Svq{P(>*?OsG<}OOD+PE8Qtnp+fA5itD~I$)7jKA1anV25eOpL-VP-!~~>xx8j5Z >zYb=CUOQ0yBf&mi~DrKq=(=OJ4RNgDj)xa}^M*xHIZw=x%1L`70ddds|zGkEpNg}G= >zl^`OSu+j~B*+eZxDWHmCGKiXlW^8%Q2JRQwTgLP?A~KD@vLdJe&vTS|n1eY2@Wc|N >za4`dICq!1os+bE=zQAZzDo>NGO_Lx?r%$Sgs8$4d@bU(aL}lDNxx5;AKsp7~N&}%2 >z=(;1|y{^_N#}eU;CAH&HHGB%X#u&SYZMdgKv5BArB0@k+j4=`VgMcCll|yS3>=qCl >zg3>KLm_Gr(UaANGT>}?qg?KWJ=4xP$47sxRN-<IZ;6xh;VcJ5JHWP3S<vl+tlA57S >z5_lH_TRx4<DD;64!6+i!T!@jda5N$yh9akH6mPX^KCr|;Y{kEm)p~9Tlk{la7B0`0 >zXn#WLd@s@YgCxk65=3UWCq&{&Atpnr5o}^ZTBaGWNoH2a3|HM5f||1x%rzL|)utC< >zr7tf-i(J-sqZ%A#VuOVSPSRW&(NL9Xc(iTqpcy%*jeOF|$gLjTRHsz6tWpzfEYCLn >zw^6yJO(m6yNuP#vrYeD?a{X<lPp!;ew3+>5Wxh4b{6Z`o<zew}x7;5T<%%n1UEvw! >zA;A)RLotofzQICG@0s2K;tdU=^)rUG(>H6kXPzzlRW35%2|{_o9K2Sla+YylJh(x5 >zw@L!=kzqm|v-UnApl2aT7$LyCA`IAjBZcavOmtffuucSUla@P}sK1hZzD&(m47GBh >zalTLuMMQ)W5yl+RSohK^z<xWRJXRyOhlvF*f%7Et)dc0`8k-r0QhyENi3FZ1)XWpY >zHH5fQA}m;Hz#+;<)}m^exQs8b7{X<6Bd(tT1KmX2ay<}kDz7b*&f2X;63WAch`;9Q >z6Ya=IsfHs{WtpIMO{(Be4eugA%O&z00xVVna}lCaB?{|++^fP=5ED?IMBoU3Djq=O >z5pbSD%r#MCTaA3FL^Xk|R7#M&YoyTBqyl1ME9TT-3jmi2eMJE9LWEeV(q*M6W&)7i >zlh3-SU@4^9R;`>pp3VG|z?3(xg<lkTu@9>7R?vcR?~)K7H#RkfIbIXudwJZq^&sl* >zDZl$@dSCm)P@?+CirPf`mVa!TXUqJ9zWIMU81U~(fb4S{h3A3m5=@s67a3bi*p|tW >zLW~b-EC$|ixQTF93&B!Dd=A0swzyECV)?FZbv4^|*oN+4hwfDiJ9IjXOHjz#7M}Y& >zyyXAWNduUOqVE3zr8iZ(Y@^n9F<|92QSwA=1`#%X6FvFe@>M`g$@P?ep(_3Z>c`C; >z>$VJeVtY!67gh+#sFC#~Bddj)wG2h`MK$AQL=1uUTY@2kF#)izNT`%YKok*`QicB- >zGZA@AhvOS$w*sy&LDk$0n@WV!0LxJd4|u0YBjB2-As+srFH&l8mlR5=$Wt|t-!(7| >zYOqF=QYr(9d#8{sVHPof(?@f@8NN)={6IKyjR;Evlm%ntMFy0^*m`F-{F+ozg}6{n >zRL^6gCKzz-1YD#P6iUQO8o_%QXcr4r1Hh#uYIPBDwL*+9QA2|rok-M3*kC3v#o=`o >z3_hdQL#a0q)>sr#-ch2`G$;cH&b&FrTM}722J}OXT8Ampu?FcYGX22Nd@aQsC#bmy >zann*w1LDYE39L)1o+d=*)o64PRnHP28U$rKrb~tdiV<RiN4M`Hq#E8%wXi>6fBV38 >z$pN>YipR5<^q-u>%h>7RLrkn}7y+{9XWBmM;R8(E-(sh~`nZeiblY0BqM!891zZdh >zem2a$_Au<??TqX8M-7=rRfWAYnasX3nUAr@-V>0VS^25M5Xo)Dxx?rWKaYPqeB$4q >zCuGyJlvcC&*7)PV?<r;LI;a{rK&t0BPivqyt11qYTpbynM+HxQkFtss9-Pi!-=5x_ >zC&U4A>5Cd@@+vlURo-8ibHV`yGIPsc6`V@XJ;#7lJLKgs@~*7r$p+<HGa(btSOG%C >z2^-+ZfXA>Ck|oN2CEy`~@eYQf#y8nuq0%)5at{$-3jnM)lqNPr%}CTQ3gKrZsvFYO >z1JeMcd3QAvXPgF4w%Ku;iD2lWX$<u-1GQ|a{D3VaAzdNxn?mMAg|wQ}{}Lc)30k+L >z8r4E|4iPfleetdo9L$jaK+wpL@U9VH*)_`55^x$r)={VtDf8#8M4?ntTO>*DqJ9Ou >zTmKrBG?}`5BD_nYgkowwX-EEGVCPL$lTy_**eha&dO!8-`Vc|hmjL|SiCY9^##ICW >zKgZN4#Sq?ND7fUAegg*Rvn%TbLq3Ke=PSW9F;$ytpfL<sb0eaZq2$TLi-p9K><v0Z >z^>XGEh?%!b5X=>-#V{H$Kd~{tWkxp2j#r+S6`hwxR4=@&{u*)NOY?>61SBY<M(KCW >zVK1TjZ`EORtt|DDfg{TJcdfM}%I<F6X2*K3yY=>rt6N{~Dz9m%lQzU<T)e<kPtMRg >zDb(}@%+2@eoD7xhyNxFuFQ56XR;AI@aJK2HqZ%dW%f*^24;-7%2(cPMcq;oz@L0zS >zN4fs)tJ2783$Lzyy(_<R_WB=<mU|K`<X?#5zb)%rV(a(ItvdfIW)mR&1avYJVeWL} >zp%i;fctc4F_@zkCf1zU%#jGFgTQ&LF?3;1jH{nEC6((*>g3=};ov*_GUsLzu&txC} >z4;(umXpRkYKFxW~bBfI{LUYRbtjwXBQW46I=GaI@B!?6oG)hfW&Ml$QNmRE(b?bOf >zsoP!de6Ra=cs#!U!M5w#=X&hD*ZcW`CMf`D@^4+ZW3wv94Ho%H;f*Qk^##+6rm-JQ >z*o;)HnI6C}tGO&T`J|wO7Uhos2=vmav?e&X!ER@(YUL&5%_ewflggoH)P+G?=a9XC >z7=2*@b8`WAu}ST#jEDL~bbJ#8x>&!r8Nizn$Sl>SB_kyB%-jNcZb7~!+}Uh#%YT5h >zti3)_<;ddJnFUC9qGmK;*Y81xt#=;i0<I_w;Hb^I(Pl}2lBuS@sM?r>F8!%e&<fk! >znYd*GQfQKl{;;5wd;yR}F}quo68AvO^pvQd<$ol?6_SQqb-{9X;N!Z97i9{cEua<j >zRBg}0-V`XuH_v70$xDvN&*{pmksd7T!jVb#JQ==qvr2p$npGe!+Yp~9cu>FbptWH9 >zvKyweU;eA-L$4&Pm7Y9#QFYs(flrFgByQ4a@l<BfBrM1Oxy;n&-l>lpQ{UX`b}}D5 >zOhhW_p{BZ!OOGUf7*20>SKGg+zB>t_uVr>b7Y$89{#=-`bC3QzQN^WD+4En7ORJCn >zzfVF7pT@*ZT~G8F!b9n=p7qH*Kj^Net*6$=Y@csZ;T1yMzU>=pRR-YF^bapKTeY5L >zG|l-1)|DpCKX019=l=5VGcPB#UR}>cb|)$)558K|DtmY5^`@=@PxlYibASAM)?FrE >zT(Y5XC~2#I)$>1fkxI?jEBi0SZxbKgr*O(M@%I8q_lx3k;ueXuI@DezB+1QgQHD*_ >z^=-~MrHgFQZE}(Qi<OAdUxe>Z4ExsfWSbu9>(e8@bTKZZ*$7gg_ig2B(wpk9Dq~HE >z*NNMW2R(PEVh`yl88>f@{Zq*-5oPuKD^w4&a#8+h^Hy!yR{zf`8G4$#7g4vHln&|X >z@$M;TFJkDk8~Z)YWb_}MHp|!GBEsL#Tu#0t*VAE#kGP1poN~K#fd2R#p~TGFWmCoE >z!I^E=ud|Lk)*r5RNE`ap`}7U<jG0qon1<t};5JhJwz$hr@e*K@llSEP*S3JBzz*X( >zd5_bkPWyEw7e>#}gN_>?w{nR7rtec@b@<TdBTr0so_7vbQq4ceOK-6-ZB)5!f6=cg >z<d{p2-#3%s2KP8^qlXS3Lodbm+1}9ze;<0<tCj2>tz_hX(&;Q2`a<bFwbJtNS2Xgw >z>BDo>vfpcnwf9dt!mlc|A)mdUy&QBx>8!@%H<K54oG=Uj`7Ld>lX~LFq-lKf_8QZa >z*XW<2nUVDgcQoSu$^IF3HS7A_oQ@mj54S!(sI7IxK4a%uT(BI%kdA2{O6kLqYp|oJ >z%`^(D$_JMhCdTPkrH0_lvxFhr^9Br+105I7EAQAQYxHD`x7NugA%X6yPs6TF%sfyk >zqmQ19NG$O_6-Do{@iz@<+kao%qhR%c`S8a6@q$cn@R;en)avc#`%<OeR?`#RV)eL@ >zE<eKcn(6z5Mf8bD+sim7G5%IoNTk7G^vrz)2V6D<>zkSsX@2}=u#c({pzCNCezKvO >zE{}xxnOwUu6X0|Yy?>Oj>q_>xxs?0$zUsNGZx2nTW&ZKguf3z_qZn*>AkenXZPlN^ >zej*ss?r8YxXMUPvBR0*$J@wJq^Jys3b`so0*68{aBGx|33Gr5s3z!M8ZMzXNuDh8+ >zIS^pD=S}vQPV&*OUZxi(6z^+T+IRUNO|R_tQ&4qN9L4xO>GH$q7-myZWewG(r$@EB >zeVkS)2mJLlV+p>N>;lD6!|Nlf0h%ckrSYwWH*6<Ns=stmbQo4jKA0`BLQsX{g=&9o >zm#-@Z0<u!NVYR>Q`&5gP^IedWJ1eW+I>jEzd!Un4`NG?v;*BEpOy<phb~hY&mY3F; >zKc+Edabk_y-pn@}Z*M*6{j;RG*$tG6KNB>~tKVUv{J|*LvmoQr+R<)*<Ajkj_i=Gg >zj%0TB{rH(F{C{ZauPmFH*TGk7n^XJt;L-~;zx<al-K%sU=j(9a>Qu~MW}AP%>-)>J >zI7>hp;9~w$OYJ@pMwE)lU8BbnuK-}F-NE~4=K1}8nlU$QM_}gQ)d{CX+;uS#@2)uE >z{1j~Gr&x^p7GTx!rdq6M8JkT;Rg{05FuGGP<7;v+_3^mzyj%4{6Yj*!D5jXB<OOI9 >zA^sK#<yD+-q}Z<$_Sa&iJez_fb<jUvdV3kgL5Ww8*UY>$G9=}@15&o`AyRB_Dpn+h >zEvg(A4LMZWR0c~ws4t5t+LfzZVvfF|NiC-~Xq9(pBzemYktgayi*Q^2BBpI6Ksj2% >z_Q5Tyc|063%$P3UW%yp{-t3q;IhY@uwTwHs4$7KREDidkhrY1s3{=ifb10ZJl+KE` >z`BwqY2TU?Nm+PYp><=6DH^bU9hO9cXEBB|SU`e7O?GFM@QrHsafQaO{Eto62|3Xv* >z+{+3mUEdR+uVhl{h1f~p&AqZZ9JO%vuObs5uyze1cD?VwQatmg_r4=f`{I9S1Xt2? >ztyLB^6aJaHRTiYuqV_pIVdGuIy<czt!u<O9$EMsYcNeD_$;5)?R7DfeZ3LDw5N~X? >zDL1caVLv7MIFoHSsse_xNx&j927e)}KS`@=#Y;J>mbD<sDt0d)Rw}|%^xqBgsbR_H >zw$o*MZs@Bd&H1>zOB@YK>{8BKSkkSQ@_gME3s2~_ZmLhW`#9cKtlWP-#qDr#MNWCj >z@xqN|MX(<*;0&ocOW&zB#6VH~_bZ+3Pc`0C+(%bwRlf=pP3>Q0DJ8yDKS}pCTB7l@ >za0Zxs`hBY<0$VprAL7?eu|29N|MO%re0asj;RxxPFGXMN5Am2o=_+3@b_wm5D>r#Y >z$d7;0tk9M_tT2ROI|D-`uk}G-h}5oGqq}7u>x<qNT$y391iyS6l<1?#!`r8zyk`eh >zjDw#BWG!hJ!AY=2TEz~*K83d0G280kip(2LTjY8vb~A*Mz33ENGal#{2P|8+Bsrs| >zS)k3lGCP*(TY)88-RvsQa$80ktq(ce-DGh8{<MI()jq6ts*7W2zqsW)^}edl!ixa3 >z9xOa}$nJJ`iN1xNA{S4wjuw>WP=+t<A`YoEO4*@64br3a5#x;2($Ds-8n=kU78fMN >z;Q_L=U?RXHC{~0RE~zHa<r0rc%804Ss^;xp8jj7OjXzb|$$P-T6{TTqwof}~@?_)o >zjPNTNCojjp@-_|8+u41l2U~$3ik|=ZOf=Qgd3f?;{I8$S2NVuzzRi_QzScE6w#~8o >z#MMu`?CKFyl?&IKwLaqm%A%ik|3GzeuV#4>OZ^srmZ-K!^fRHtqSAAbINa*MSybHn >zkmt7_(#bKs`IQz$w?Ioq*Yc+GIh)^a-r8!;|Eu6c@E^b49lrPPzxyn}0SmS`(Uy)# >zhLOg`0({3hY6qWU%91{jKfFGy_a$B98G~;LPFBrZ83Zc1kP(GT=m^4c3;bKLOKOt* >z1L?SWcTxK`@Umv_?1(`~Rr#)l7I`+n)*@}n_u-b688^Nl9JBkP(9MQGEt9GvgX3(N >zj3Hr14aTHj%-+bpOp|=l<OypN%UM3J%DpZ3GT6Ee&1zii2yTkTQ(Rlv(u?=8>g+0W >zK_|(l)0ZteC9tI$J@u=Y6SfA^CHCb_TT^e7l-@lr_6=A@>k-L%&tCBpt}JVwZvUkE >zj8I~PV-1^QDf&(MRXRDFN!qV46S|I?Cn)8~s%L>fGPLWIPfoIYc>AbRkRrQWFJG~q >z|HGO$-9Zg#Rf(Yv8}y&zSfm2&QneJ#WCl~+ElIUxg=~BXb1yAxNj<5S;-GDV=G}Es >z?7q-*HT!C2{I4VO18R<46%|?KoBFt3@yPYov!xCyLvypgeQZTqpDY`6l^3=D)*LVV >zl5?%^)nAo=_rrq!I<e5V_2;|4Z8qc?%;!rOCNWo?ER^#8(AVr05JxR5vnvj~Tu$;V >z6CVR|^tA<wRV!WwJGaUGCzsmaa-KRkb>Q6LX5{f&wxncl&Uqcu`+z@22}s579TES2 >zh}tsrtnY65wLVj&O+_o$0=3JB`t>atPM|=VW&-1|ofLlL{^6srTox>|dnY)XW(n|j >zCol&F3AAVTGtWw39vBGp1|n?+d8f$uFb1w)1D}?fgfk!q02!5rtdJm|hC^bm?`dNo >zu2jJ%i^5t3kT?m<JOqTo$k_;8>lrA(69srW=-&`u%+`YfIZdJba~kp>13E}h=n<M6 >zBY-0aaHbF*g@IKupg*1?9|)n%17YbH5F1bx1&DhDNXTK>K6_FH2K&4Vq9}j?MA|ta >zyG;mxdJ60=!>(##RxKzWmQh87KtlzvV;DJWAtVz6F=8N_8PFX?#wP{HYlPAyJ7E4L >zfwQH^etTpY4R%;2@+1Zxhmm_%1-;gsC$>Rm6Topocm)Gwy+BBiK%+1q0QK4-^zp{X >zxe`!T2b2Ik^|%CedBEhHbk~lz-m1AwbrG{d!qmaCxC9oP#sVb8v=){H7G;Hn*$~+d >zkubo7d&EFn_OQzs@JAR}k`l*@2=mV6_=z}y>zt5m@Gc=DY*u#nNnpX4n}FqUrLbMO >zz{0d&77@7*3))I8KEy9RB0?32_A&*KB5E;*>hbXuYP%3rHp@SbEjd6aIY|@%cAb#` >z2{5IFx~1o_iAfm5Q;f>*XOOGwrBxCYrV!GzzEwosta>(7c6S!;fB})Q&`~VNngI*O >zfPHCT10g893O-G&0JPGCQ%TB^OkZ{AIT~yS13Ah-6Hmb-Fo-uQ5N`=6x7V#$fbhxz >zIWu5a8Avh_bzK19b&ycnzN<6n`vh1x4KcYB(j`Gw2;kH(*e>a|TLctS3R0(m9fWdU >z9xF5p;aydz!lrT$At*pyE|5UkM^o;TB6kTHkA%>J68LruLhCUW=-TS-k;@lCwi6(6 >zG(ho$B{0y=LRg*<{4oLzfVklp`D_C0FhkafX84GK;tB)NIdHZF(b<9<6`@sL7#w5B >z9gxBkFtRZiXrKhNBXLvhoB$Ro05KWJIw^pT!jqcP4+1o}5UwtSmPnx44D=`lw*Eq{ >zUV_-8%hRud0G3?^%_Knx^%KZ>dlGIjAnp=qn-H8tL$pev`2^%OA@Vu~Vabqjr=dy& >zuo%y}Q6cKE1kx-$mF;}`;6L!gb*J-$rwg5H24!l!YCz63*i`|N-%(rc3`u7onuW+8 >zSQtR<rtGh)>#duV)SXj5(;9W=VjjGs_l(EeGb9P9%and24|TKSTyJkZz-!)9Z@5*B >zh>$Tk!DxtTYM5|F$Ecir9Cdat^X!~DEPLUs69IY=BM-h67{Ne5PB)$wHbzMrk4YO> >zoj1=ZC!SmHIQRbXIcF(M)};w@1lq-bWi~ab(@6VdnuiI^9<=7IXPPsG&00U3^;}w# >zq+sJY&^`ikI{|9>v!zvnyh=bFPyCNFjgh&4u7Z(V&I@}WI|yKJ0`wdP#eD+uW*}c+ >zP&NWtS0T)0J>fJ1u}lN&5I~Fe5C;q-OI4vz2>7#d#k0s|hI}>+)hmH&GEk#Jn2A*8 >zfDnCJ0KG3j57H1(G|(#=BIbtdV<FU=0X+erbPPEUAy`WQGKfZ>kb>t9${nMDoTRX& >ze~@)T*a3!oC;@U>fbhWZ02wlmf%g`+4*47>G2C|v<*tN4JS3YTDW0JKaA+z7Gik7F >z0jih)-iJY7!@xlq=IJze9|j4ChS#OCBpULm5HY<9-$etT70Q?7$-k9Co#k*(833p( >zw?j7*t1PR|0M`l7C#6kQLYO+uEQJ7;bjzP4z#a*p-*2Ln@<CL3bD9)!odCLuQCMWi >zd#r-xl+dmOIh{n`G6Kj%CUjVU*dqY$K1d*@b6-@a6QlF}?at3XJA)!oUo{lIM}xcs >za{t`E<|nzfsUf@szkPs!g3rsM=7n1{yOd+Pw$^uPYC^Ssb?Lcw8_k2YgdkG_*nGY_ >zP}*(ddi@sdx>LQp%fss=iLYlL%&V-y2elalpr-scH)j1*0n~KR5%zp1cpm{BkGd&z >zy}8R3-X)d&$3cEi43^P{cqOQP%1}7m2g~cb1rW0_1b77j%5)WR%Pt=mh|1<g_W|0} >zwYQGeo6hKs5%ku(g0AVhHOHV@^P%^IAfuw&eNDHo<O3M#?Jn0oLrsv~I(P>GbtVL~ >zodNSDfV`zJog8$&P|iUL%cDU7DDYts?ic|SCB&b<iK?yxw+iGAoPf0vV0|<MAP*mt >zAejP?xdib0TZ$PFyCT(j4EkO@M41LV`UD;*k^lY;p)Lh?NE;s06!JshpQ3@X9(XW8 >zjwFG`Jx80{A_gU!pkF6Y2^ch2fM}zE5AKIuW1u6*JROPh0Rf~<pzx3&Ke=$mlmR}D >zL7UbBWF~5l5cymvf2*nJp+tu%02j&>e)tLr>4xlDP&8sBWMfbtC8)_$P+ctSpb!9C >zd%Ov<D2W`K0YB_{q=$g;#eha>P)i{wQ-aQyfKKPhnKJ+`5r0?;ucygHNs*JfI;Of# >z;TUvqH^`fYP%qN%kdY(_;XznbwiIL{9I23u^gRa$yN!kyjNTWF#=IO&z@Z;XVB+Ah >zv@7Q_CdT%<A+rk*R89EdhWq(1?;pd7*#!u0ff&*(Zj&M_HpGvj<lhQmg*3Rea1;2u >z5K=~f=n=qYub4Nvp*<Fo+p^5+o5s@!kgFTxDVT@XV;|niitcl(xF?0RVJ3!SC+=S< >zdLTi$8~{)CBfJ>k1OYUTF!{7#@<sn-y<{?2I+>?CmF+o&lFEH<n_>=3eL+9^8t~{x >z`J<l`k6tZ2lChM4<6x`K7(^k|odG_*An6kTCb*nZ9HO2<aA(Nb36z`g_W-am1Z|aG >zg&4#@y)dxr0*EhRJVugJhykZduxCn)K7WV$HYtbGKt+_!Isl4gppcH>R?mY6q_@pW >zXR|S&Gy!T*AfHLAt!JQ%g$H>5AiE@RUk0jK_`JS}AiDYBX7whdgaOYR@am-@FEdcB >z0&<5$ev$^wry+U>sKYb}ya%dw2x3n3@{ES|V7AmH7Vh4kb6o-)euzg>bR7YXtU~zG >zWD98{m>=MSLNtI{W1Wy53~+=Lrga<SCmrN6<N@;dh9WXh2;Rkj?4TVs5LyAW@xh`% >z(+W|Kz#Fv+Ji2cC|Ab*R;7Ni*ePQSx3F6BlM!0jDgaJiikjd}WdL(iw3`Cg}q`Sen >z9ykA_7b?0s-~V}j;9vFOxR>|O!Xs?~6Zhrhzc2kH2K9tjPu(FIuF7+-pfBB-e`vj4 >zj(h#*+1IV&*WS|CfL)rR4gN71|8w%$zyEIj5hsPp1uf(=5Iwq=LkAWH@*rgx`Ok)n >zDvfr>ix#ikS=9Qys26`7U`q#Ol7eZl2Mm<uYgn=JvfXRAd*X6T(Xz|b@-~GxjHeLF >zwuq#nH&eYD`2%lQA?O|2Z}q5ecQ!&IJKx5>hMtM&EXaqXyatsJ(7P+&l_VbXb%Jl3 >z2RRE$-KDYy5-^trD)Y2*ud1Za$jQ?{pemra&90Nxq^&j-vGCMGh7l}*U1Xq6Gvt2R >zBkF}!c``aS47oHRe1{MQP_WkosLu@ev;D}=y5`5E$UcTrI0pI{gRT%jktYyJ=5tna >zaz}dLDyQe$Xh$E{qOW<H?4xZW&q+r2Ngy9qp<M){i!?-@Zbw14{E2xuds?+jV#y>} >z6ic!JJJy_L!%ozwm%z^nQC$qAW&*NG0K0txQrQD9DQa4;c+I8BhhrdY8cbJ{8>+iA >zUB={*jH=DQMgY41o&i6NdE|$IR!E>80&t!HaB7kNFywnNsM7?e(Z;;s>58Zqh|5Jv >zPJ(aBMV)o(@SjtE{Z^2k)|IBsz#zw@;R30jP<mP-O_xd)J!*Fhq~D?;Oa-vh1jJd% >zs*cWAgM_ap=f0YIAT1w}n3!*Nn-It2-&`Jj^A+y%IHye3K~t{j9v7mi3DEKJwY-Hj >z+M{j$3E!)KZfeXAD8<}^#ch7C#~_QP*wif;^HXc;HEEIy-pz+5%^cE0JE(_Wr#`4Q >z32dPpoHKNJ(naer3x+;*-v91l75=z>Tklu=T>ZAzcULaeWX9e0Iz4`as&pZ^UdQ*V >z;gL17KYC)jtPZ9te+#R3KOh%)WbJL>#qd4RFC!oCCRc@C)sUZCO&U3~Gp!njP)-l* >z@YwMz;Dxej@ELX0$}4qM$$?EC-0_;9_Gtk%rrE~fb9NWDpTZZurkpvLK3+rWExi+! >z^C1k_wUmRD*|$e^1$VLHek!+zim2I3S4^K>7^`&YJJNIJhRM`b54*+y(}OF%6|Tq5 >z^haL*IWF+%+Pzs=QiZ3rc_fTyU8**ixD>VLQfl2$Z|Hfa%bn#fuBZ5)Hr;X4;)9Y= >zKtozveBlwr3sZG^{wv9+!jXCBk4KX8Qcnk3bu57=O8tya1<$m%mM^zNov-kTcU~?f >z%!ro+kxC^?rGW}S>Ak~|4)ePBOL&9I6FwFO#b&$f-k#pIH+$t|z|j@G>Nst`q!YA^ >zlC}!Z=m%|8*q!30V)H|AuPcr_gUc*$EmW6T^+{*StnbMvU#SUthX>h=Vh^BgAK<TN >zm68v2T)qB?ta<gu<B*uEJ<pTNS}T&Wh69~m7l49@OG?h23U8C?U#kE7Eva((82Pxe >zPwOsy*MrsZm^YjKYtJ&Tm0DgBTvJ^C^6;;dK|g<456DKSpH~EXrE>=TJBfOwWW)0k >zGCETttnf~DZY{;!(w(NLgr`oAQWI;c#tgD17Li(cYuU=WT*I$bs)DfY3ewIz+j05! >zmq}=gp4g8SKJV7gpQKz`*<DAxK)qaHGeu10DqM(c<)|c=TsRdrzOsBGcy1-B(s~AN >zawapn<4x`U#(zE?4}+GZp0JFjH&^XKb}W}}J5;j!WcuxYj06@L^p<KyMigsAeQ9>F >zn7FOud^zPz-aD?%JN^>SGsF2^wHj-^wbIb#RceLF-WR*8jAwFpS2`+0rB;NwsHeb7 >zmhr8np09O<o7K@@)?13@wTXIMB_7?d47VS<RI>X+ZWbGArqNowL%TPbXUbB4Q?<Pk >zuxh==)>F%)cdNgx-#4|M#}8@jP2oqA>rydQA3YCL1)mZbp4zbuk#>SOLr<wT*{yND >zBudV2sm7CY<UFV8Li_qvpEIJQQ}#1h!*Uy9{hM;!-u1<@pbzl#3P(PVMkE~l*Bz9| >zL^xuTxS7tQi!}X4(NdY+Ytiy?FCc1No#6S8;AG5E=XZ5aKkas&kFq%O<9d_)Rl2XH >z7p{fICJ`-_t&0?%UKwe@(=8PPiNnw5Xngs$WaYH&^K)}QZvK}uHHsu5Si)O(<(m-? >zF|lf!@HFCxX=QdLyWtH!t(TCx_rTd-u`50iw;#84s?^gdALF<7y?FZN(2jO5aqge4 >z3y9;nzJ%B7{#E~_OEC%j*ZLPuvw_XE{JG`$J70RZv^R^Y&EgS9g{tykU=ckX?xlA0 >z1au{53EnK4Q)hKm#Jer4LrTahH!-}Vf@I~AS<=(pLbh?L9^#<b3#w4XwlM?-h`FPN >zbJDT{>xP==X2&%5(%5>R77$6bWY`?7Bn}uNg%T-7{?iq9<;nE4UzBWxRc1u&vdY1g >z5oH#Gqk&t5Fe4$$ErMeIiN!6$SYMlWG=3o1KrK|v-D}*%N=7d$h633>=;~&P`^Exh >zl0SltuVQ-xdp#!9QKOp@e)6Yec~PFX>IFhceE%Y=j_+eAXH#rsxQuBPc`NUh@Q52p >z8pBkwcBLX;WnxjOZiQm6FkQ0aimrR!3fU&3t46P35qdWFy>4_D*9o@-O;{&k8W|ju >zhNLaWBa>Cs6w871B(`oLzUT|4v`=1NAqLCEy%$wbaIGrL*%X~kteB(*lwZZBYHR!> >zrUrFayNXhco$89^Rpe?~4BJeDJN$RvRyx&v{w?fT(ZdvuKC(n=MBqk2lPg;c#K8Wa >ziy~LYFbV2cyW2stWYT4gSwGx9Oyb#0?f<dV@IE%p6(##fcN3Sa{=GkKn^V`LqrdH% >zGQ}jV=p>21VNUaO?TC)9S#W8zN~?y}nBor_T2NYZ-q^dtKVmTC^ia(a`#YS#>`TBv >za}AEeeK2)Q3OjFhvSSa!EG$$v{L(u;(he%C@Fr$rdw_x30lt^oO#&C6vxv!u53Bu< >zl>U6#tQ5LValG4Awi|7rn4RlwuoIZn+v~%%;9mGIi7&SiI<{0`U%|c-N+>GixI+A} >zcIT;*U3+yAU5Fu->ZTea!^O5^^kF3ygZFErr7;Z?Wpcr$G9935JtD~(V}!E!u@<FF >z&v5l23EOlcN#U(CMK372boU#5<+k-Pn>h(5a${*ztt;J2lN`*$jx<97q}1e+Y_B&b >zsk=BAJUS<xquHmx_4usWLyD!u96d~l$h)Ky!!}U?gbMxvt)SrYn3_fT`gMx;GN$al >zx9!E^l~I#U8VfPetTvkK?a(P@8RaxXjKqVAECMf}e-U{ROVOBfE88=%q<joc)^-e@ >zqPn$gtxCL>zi6KDb8hRspKq@nlP#F^!_5BgL@CxMLPtBeST7elqCW*G3G9ceJSPD) >zQrQ-^T^xf6(U_CMFfJz+s_ij!e=A6#s=}>|9G0xM{qB(3_`qW`YTfwGFW^%>6T7V0 >zQ4^_-c4wYW>~<QCn)2Ihx_;J`d4AWY-bZC(NE0NG?qv`?-9_gd3z1Ft3!R&(J<7S@ >zI`iJ5=%>>#{(DF0oewxeJ@_vEcUAx3k1>B9d4A^$#cDt4WYX5Y<9YBwh2O$rGnHm^ >zbM6e1@5Z$cAd`T3`BwdDz5}HhnMVb3xHc8L8}yY=0)JTyNs2=Zmyu3lubpF_AI)ow >z%^YHeHHRczm(;~A#Vf<O4~(*%=aV1@*GJ9izgWSka@|$*QJwt^=857KjSA5aP&8MX >zmD6(i9G*;r*_1~0>#O$A$AF`SPX>y`{6wHRuT`GSMzd1hy0`I?q%1LYh`ii>-{dPT >z;qXyCcvUTVQ{lB|ZBo`j^jCEX9*BqAzxfJ)PQ%)c8-vyXNh*G`!$+4Hw~Pi16&7N> >zE%dwC;+MXLUG4jAT!OjQkz59mt1m9HSYg?V*zU7Dx7sUyvqk!RwjEtIVZJdO&JM(L >zh*;4Me6Nn^EJ;`siRVz7ZsSC^ugu@>{B>KX2~>Ub-H7SCncpX>@4MaC*FWEP7la+i >z=aBfNmhH?T*Zz^1{;~Xiaee=IU;jiIOYeREBh;N~^E<Yl?oTg+pB-@j4=B~#^3t63 >z>f;@U^*alicb8o6zKOZ}F8{6t|E@0oCXNpJ^myBsZ`-8G_ecPmxWV?xWs|A*zGr&; >zv03C%D;*AO2ZT}&m<ISa>eMD`K-OXabVIN$ap1uvFuZ0!Rm2X2b6lwq^b=2oHBZcq >znh0Hz@+bB-{z)q=H*A(|1o(21<+w<eHXu%ldC4nRZE~4@eCS{XYu^fYS1m7KoegaF >zMYl7}>FzgOOI&L?R=FI-Ie>`cnv1SGVOb;_QKkkrXu$Ipo~4iFW&mg$ydntBQ?$KK >z=Ch39;0PQyc%AK(%Q9QxL}A;F`QQg7Y|1*94Cne&0aEQwBo?|mij!2!+kxj<MzVLn >zIi522Ot2hR(a9hYH!~8v!;QIB(nx{xtmyyop4-}aJ4I~U%}8)Y0|!w2{NTJ)IM<#I >zp<LonsZ1v-8^6xhUuT-&*^Z)mm0G5`XH}Az>rQ8BwX<wynMQoJ@5)sZ{NQ{(6msH1 >zKrP$kKPauodWD@5$;!lW^=JY>C=I}~W1D)S@xYtsMc`Q@^LPHeWVsW^4K4DHI`17b >z;vM(KI|1yIyTMDKLQ^O{yHb790wDAnpN#VH%!#qU*|EK`C){LwvtvQ~?R|45m}-&t >z6_2oKL~w4+{jetA{1M;6H@?Rjs)}%8KO!fDa3_i;CM1f}SHS!lYH0z-4pUN|#i{rt >z_7JgE=zs%iUv2MK6Xtg+=RshRU)?5}H{j2X5I>+2nE+negd1-OV7B(NEX17TME{E% >z|Bmzimq*4uCF7KZahF_{I*}QNV!KnJ*WDmD&|E6D`sPcBsAl`^8xJj4m}g&r?i4V0 >z25`x>tipbFTx4-_Eo-Zo6(R<(Kc?X<XRny!3-B|wyc8lYp3Vtp@zE<q*hqmxBrke} >zOT$!RMeOJm;O+HbMJzfT9Q2W^oeTE%=K@UMHr-MLnq^IACALE^WI$$uACRd$o7#&Z >z07Oe<8_lwkv3H4BwmzL>e3f?*&i14sKbSKOM4<Ugyx<jf0^k5sgD2p;2rAE*KVZFH >z6pEpK+H4j$!ey0yankr4VDF~bg?E_Bv8!d<)v~BWwrVXaCXyEh$g;V-1MuQ_I0qTY >z39Mx)GRicuOts;52TwbFQ?9ERTthkS($2P|v*U<NWGyR<@Yrk}xCvQ=TyCt04PP(P >zn`KAO@^;L!0@`_j*y6BSZVVRm*Ybs2VsS2==P6>Q&9XW^u`pOZ{Hz3dM}mGOQTSJa >z(VA9rp9Uz@O#B5u`t(*+yn0)(=4i0i+i8pSY2ANi^$Vc}-XTU6X8_9-uf>WI*P7j# >z*)9H0GmV=74PzhMx<3XU)YNu4$2;u0qEP3y$119b#>b)C{w)fVc@ngV2_w6+gK~L( >zaF#cg<BaF|6h5Jzed2%TNw_2|==&2A{AsY|QwQSHu(R?zUvWc-4<fY?(LLd@Ps8KC >zhbOA;Om^6r`id8n_$+;vv!4h_w`A`iLNeWp57VKKK0ezg|9l(vxr2yp2<PgpupO}M >zxLlr5Et4EsoVd=i#B#{FOn`ZH5pj};#hG-D>OzkJm2C-}2$5{dTy7MctvXwzoXgV3 >zbAst|?x`&}Y+Yz#t>!GS|8rWG-?WR*+b#lL74TK%MzsT<H3yk^%^1(si3IRro;{qo >zefHA!$l?e(sGwhF#aS+59#rVYb6?@c44hP4=jUx=i(RN3D<UhT7UK39po&36m*V8v >zBHLP)5tipe_(N~D$dAzKF9KoeIKh$ZgY8q{ksKVI^~R0qvd{z&!J*jVAONz?W$N<T >zu6(956%_E3Yrf8Lpt4ek9OHEWb(EWn;{cNIuJ!rQfqwgTrXil2zQRqe<$iGG?u+Dk >z;$`zUSW%HI#o0<*I>%#$WnRlkUg!EDxr7yt!#dNyovn>$k!HCnvzH9l!7J_aeUtNd >zKF{Bie>rIRayam%Dx8zHKURD)cDyHc;%V&E_m>fc9LX!rbRc)e{S}4!DmwDjv%*)i >zXJ5s(b5H|uuinP}0f}FXD>mA6e*Gry^}E8?(ZWT{I{yf~_~R?N&y$l8(s-#n_W&09 >z)gfUm{0{|UA63M0O;r1*E#cQ_!oPPwzuz`(lUc}K=k(b9AI@~I9E_KUu;Q2q7tF*9 >z@?RE6>kCN5Bqhfrl_^=(c%BEA>CsdbO=qdU=A1%<anF*pgTOkx1zqft)_<01vhjs^ >z*GNv7m~Fi-ccPYU$uBos5KypeD*mo(B=^@G%L30bjN`cTS%!GF1C{M5;>N<+nxcCa >zl12{^({QB}p9^{6%DrIM?j6aEfZtTS!)f@*R=~5|-~bmZ2RRBH6FhbCH6x-d{1fX+ >z40j-s8^1~AQf2DBb6NHa!$Iq82f`zVNM^(=x3~dv`!h&30IGCVcEOc<kP0n&#c{`T >zVj@{OB6dVAkKAPa3(obRvdkjcL_9>!jq6HhyG5R|6{2=N1l*2l<-~rxND)`Ya$1*r >z3ujt-cI$|l|BT$Bw(}^AZd)<SXoV9R$?;y{;#6ZaG`ZokOzH~9(Tzhf=LYj7MtHUh >zye(CHVb{Pp4bO2$5pW{_Cm$=Zmb*6y(yREVwQkx0pR|L!(+=OfliT>`k-L8uy#Dj( >z??1KR^Z{KudoPz0zhX*XDL%^KH?EZ4T`7OP;zs2i|HAqYF8$5U@q2&LNA2_`FTL)< >zdsR9_!#(NtzaUvR-nmKu(d8b}&B$>3a6bOSg`*j;OTv!M50|GtT>X-v-c_dD{<;4( >zvwPdF8w#MF-5-q^nWDSQUMtS+yB`VSk9WR&yr=LfE)z7QT`hZ8cGL>ISuV-H3wqGW >zAx1)vU1Dkw{|ummrha5e_Hy?9X1R#izU#n6=5Ak?1^2T@O5nvWcnR&}$s*>K+;O}B >zUZhy+zo1ihm+PC$+HwZ?TJ`j=9{0oF*ggx0<Q#xD)=Bkj{>Xeb{YYNu8tnpb?5CZn >zT<^pO0AK7h%Wkybba&jy<QD^=u~jYGsg|WrWJk5L9q26GNVdb~3cGq^G)T;eVBDH3 >zVc*XWyA{a{$mJ!7zz^G5E_6<IF4rShpvkCpA@&;-{kbKQ8xjdtEde5eU{o*L63#^A >zasi~4s9P0`!O7ohxBvLUTg257acVoSo34ML;hEv>5PJ{6P3Bl(g!cb2>a0{}j;Tnl >zR?-+o>thCRc0_V4a#?|qJjYz7&N|z!i0{gH8p!9UB&^mJtYXh)pSm)l`8-MM52pFb >zs;wqSck5RN-TemEV8b0fig-DdeP5X$*{*{9W(fmsqOTTzu;nA=R_f%eVFzqXz8TX? >zoroahU!0z-Z%%))h_&Bb?tOF9VcAErHTSX-Ha9o{l0D0=KfKPdDG6&n$JVIl*8Dw~ >z+y7z*Jc<wcJBN0T!{6YDEWU^C_#VFRAd>l=NM~u}G6|13KJDC?zc||>-^XpCCBS}^ >z>ikH)#z`rjPxa%Nidku}I@5Mm`n4aKe}VV>d1xQ(@YT+#{b|__&d<VUxnWcmc9yj> >zw>W-<t+UPyi!9#GFUh2{0eK(tk)^*<Z%79pyu{xE=TPY^B+%H&FS9KA+Zo>xCkB^W >zumReYAcKKvGq>{PCXHKr%>P^jY5|U>x4yXKN##WsHDu4q({}LoGwxRI;5Z2y(pOlw >zEsv*mGEK#w0vP<AcscPa;9&vn-ppqy%@+B>dC{}r{dYmh9=`PjfEUapB`#8kCHl4N >za~7Pac9sF0vpctVS1vc`3JW6aHm_ypv_GarvQyUCgmo64C|A_J_A&CB-JQLYB_Zh# >z&ZX4fY`7h^d-7yhFI4rxnz5h2BEfhv<A#1fwc3u1aA%c|5uM4qPI2-=%_Rck9%$j2 >z8)>u)E_>cJsCSz@?F`!<pOgN*Gvb_%N66K_CuvW59MgUqmVRraR^t3L<nwEc9u<35 >zHHL|wetdMo(zSEqy~>`53#7y2pRh{CE7!~o;wim1-aV`}%fIQC7xFgxl3V(3x6DHy >z9yO(2*WRV^{Bn4U*MsrGapgZZ16!PY#{)ig8&A{_uQyKAetkF7=2suDs%}e<=* >zb~Ei-3>HS8eV5f6+P=LfwRxsLS20=A?OAdcXF79!^1K&!cet}s`-{F^*Bl|2W)dZO >zqW5RMBYWP>p0iG9!F8y7nzdrXRc+s3C`!Spiar`fHXPp*Bl=2y#!qcW^{%f~KeS01 >zFnp}*@Tw+M+wC8FUv=`;5Pwzo*eV}Y9o$KZ(Q|M%2^M@KBv3co`&)qXVnFDG(!tnO >za`JIb*N~#aM3t|y!HwW?^WL1tzS#VJrAb0&yFFFAB5Qg`t%{;JqWw5E_@Q15_{6C4 >z$+c=<r~900vHrz?6MmU5Fq=2WZ7$|ad#R72ANvy)3$BX^7ja+xRW-rE_q8501XHaF >z8wev?!lii+j`kSZdaD=abWx1+-!Qxk(qi`q+K;Aw^(PdAZM}7Gg@sUU0W5b$(Zp?a >z5~UR|?dSNae^u-_JVF@8)f;wC)?Ch6Ee$(t-~9la4ir792klf6TOTz1Dn{Kaul6@D >zc2f?rt$$gyT~#XpL)LcP2=)gnQ-V2V*8NIT)@21D4=nEIeD%ggr7DUElUHoW8k1-x >zKhw~r+A&p&y9@f|wlj2tN|#EzNrDH|Ikn0cpMPH|zy;A(6Bb>v%i{lQrp9M7y5Ac& >zlo;;!cR2lWv+mEv!r$sEO|P(}?JZj1?E9@%@49{4NC8#jTTi1$(pAs#TrxT?Ubvlc >z`P!IE=G9y8G_<eXm79OyFrra*rF+7q4|d~P`I-9$&yp`&-eRuFb&B4cDeJsl_a^(H >zs`MyfpKj~RUn7eD+>w;tlR*Ut2cxo9eQhRhECMmpbCKQ}Ot<MF#lisF`_@S{*$+$} >z5?mh`Jpim*$N8*aU&8W)?WA@@Zq9^eV3y*2+l!p95AE#MR{i$eD(H@dr*me+*zG@D >zAFAo}H->J#KBDCB5LZy;jV)OVrXa&Nl*Vy~4ZC3<^Cm(bptE1LsCr}XThC$GnrkxQ >z$BAV886j^o!NLG#A|6obuB!0b&{G}Nja0u$C{Zrg+xnm#sJ65zHQs1~l)x!^GXN%f >zUSI2xXju1|OoQR47L}-WvR!Ev&+yHX;z{^0s#I7J_DPRDT07>H(ZzAk(SyhFN9Che >z%V}##>TiiYI=~k64*3>z$~xenGRo}Am$0X)Bwe*&zK2D!M$*avv;|Y{u+d~*m`lN( >z5^{{C#`31^B<<v`67@HPd{g?M5q*Z6Hqk84roU4Bfhi$QbRN3(@YR<ifA=lO?^By5 >zHvX!4&aohFIWp7Q_}!T4{yF<m{sO9aT^w=8ufe+T<F6sLyG4U~=NFLQw}<@x@%-K< >zWRp?!pJHmg%GWPXMx+Cc@`h9rDw)Q{ttBGJ#37|dDa<@F36+2yrb{He9Rtk@c`IJJ >z$SS@sF<HrhSh1I=SQ>J^MYXHl+v<p7`7S(2eKL|~-`Q2MuY4JomUCbGO(HBmHeR`r >zrbkkm5%6)|KXwjKeaYSOSMmoxx&-qybCOjG@gu~&T>xFGhb<!x<IJjfL59gF6Bmli >z-@-DhH%-Xn?PJzU0<fC4F(ME@gzaYVk^&5{g;+1sAB0je5Ia0uOR+vw#YSf}qkU&( >zBaSOp9K51$e0Fw3!O*2FJRn7Z-9DnQSI8EvkqC$R!-&^Xj(b)za?@Hoq*5v6#jCU^ >z&(DsbhA<r6Na>b+krd;-t32C&J=96@X!ab2>*5B~)3=YPjp<&ob6b>eT^ZGC5%N4% >z*3`<{hfG)^t^;LRt$v-1Jj5tZ4M?_LCf>JJvf%}cG{arRLrMy(C7w9F>WXzQn5|8j >zr^+Jim>7H|sH-@+ffbz|>8*R0QMUhl5{yJ7TYX{hCOVrDUU?J^tKbr=8eOGbbT1>@ >zRgTLOeU0nu6#Q)oQ!RF}<SZ8CzrAZF`^i$9je9uGD*JIm&?2n3-P`=9u*@3VqeyYc >z&{e1^w!$TK1Quq5UA#0yQ%OcSy}cAMXtuNa$IunJ{HB-Yv$<#6`W-qCT>Tj5TJ_xF >zQ_r<y@}Ck>n#FO3hcsW&KcyJBz8Jr|h|U%b0ej;wB$YQ&N$VrPK0U{&hSk%_-J_bi >zJ!XCh$eez+Wc;n9u%xlIcYN1g{cWqo`qW!nbi@=3;pJD`bN=pI+%xi@ZMycm=uRc` >zT0to3kGX}2dmED@X=P3eayrDpe8PKq$KX<uz5W*FCD7*Hs+aCOeZaUFRiBY^wX$>- >z56@DpU8Yf&>6a8+v0lhim}#plJ<vZNNZ3QG$mq8Y@>R4D)kej#m@E3IV8%ljk5ERt >zvb41eJF50hfJ#+dQ$2wnQ#&KzExc*M+%BZ3Zr+wcMH_l5=OW2le+yvo?-)tN_+kB* >znk8h~O~oX>H%>{h1n3)6+Q;|OQ?TJ$*Q~3g%Y3yA5pjbJQ|`6#891Ka{N!GJr4sS5 >zNk(v~k74qw)1o2u_^R?mw-$r#bkY{>q(7V}dMI!FpyEUWf4fC;fl!m8r7&F@>ejNQ >zkUwmup~&B>vaFETK8!S;=J`r8R5JMwP1U+e{LbsaFGq3?%2jcl8(P#KM2_j*m6<Rc >zfj-TH`<O?%qawD-KI^U=Rfn=aQl2C!-;*9Z#da?xoNq$FKascECiZIC|9Wwf|KmnI >zflH5dou7YAx^++MOZMqsFKzH%_;|%l#GyXT*I!?Q?|iP<SNLuIkN$~KQ{HMh8S`=h >z{)jV_Mmj^C&|Ol#wmxdt$a9})Q8WES*6<G6f5KYstyx;{LmkC$$rJr($NRlgd0!5c >zzzSEqj}7VBR;?*m+<AYw=%@BiLh+>p_m46ANQQSCf!aB(7j;^5@`H0dT4tlK_C0+C >z{1&|g8CTq3-l}1RUm*>|k{we?d#(<d+!$017*SH8;A)2O<z%B9Lxl5WwH%s!zyKUj >zzea{so{*HXNP3hZ0~OZiPb76p2+JGvS0UMOgQQ$A0F5OvAaZF9B$bgtbGPBGZw3wR >zhqO}38ZV1@?t`jtVvGxRsP&UJfl?*wmt<`Vl3@VZEOiJ&X^M6mv{o4cY%1KR0i!EJ >zS{t6$oM%Qg12+Adi>V+Qge3n&R%>j?Xk-A9GiXGdHNkmV=8&`|$aWKCZ3?-QHm-s8 >za;fpMt07ri3@JYuvqpRAWeq5~4I;rLJL!F#Apn^U!pc2W49ThmgE~)0=!QXK+>kmZ >zNWb>XokFtt%OM-eqSY0$3Ws^)?YOxLStHil9I!PhLtEEK_>mz)x4~WuvRMP!<kO&G >z&X8*CAR3F<wJ`(^qTs`ZAiEQ-ZpguoBx)2TYVZ^BH7taJ*UhtoYEL}DH3O)-Ec8s1 >z{8E#`*F>1{;O3S_GDaauQ9B81n51u!gu6ku<H#BXHFM(@^->rAmu{K_EWv5s*29f2 >z0+&K-O-B0^OZ)4h^12>Peh`gLHlJYWH4dnylEZCU49G2pAuUFYGR7H8wmC~Cye0gp >zB~t~a*%vwU+e<J`k;P1l<=p{w##ZYi$tKbVn&AHnoTeB(le23aR9};|_cw5ePBBVd >z1|To9^Ft;BLBz@wX9c<522XgHr)Bw&DgZ)`key<^2onRU_JgPiPvpV~eq%_F?+t(A >zseFDY^|hz|2FVD`>TV-vKN+%mGjIK7(A<77^y;vM?y|hkaAE-29ILvSIOVyed_ap5 >zE)OQ*sEZakgSt1!z{hMYoHC9j>)VsyYXb_<L3x!y$eTek&X6vLjN6dy<H&3bK5$7L >zQ~;9+hNM>&11b&6#v6kQYjQVYNyKumbLE5DZiA*z<W}2A07<qb%hN7r$lxW(;u%wZ >z_YgdltTW+RT0tg=mNgAQhyICoP9<+yE4o)eLcf$X;6-R!49Zhpo1Nc@4I^RC4w>hW >zO(;XAXmD}kkR#X&d&ASr!pkPh3qyUT8cW`S8;n*M?A_&MTl+$Df^6eC7Jrg##gPpU >z^D_P<<J&L*1MfCHPgNQjax{FG?D#H4ZODXbyleL$?8(5GQtCUsCo*Zz{I$5dE!Tno >z-84gCI75Hg&}}I5C@0HUcF&ygUMPF-7|F<<wJwvkg85S!YqH<W<Uifi|4-fWA<ft{ >z?bI}#thB>N)09+(w$^y6tdUJ?O^#ej11j0Jej3284Jw!8R<Di~?j5i#kURF%qzH*; >zYT#KnSu9(+JrU30c@cmXi7$TI{miaC^x~s*b<PU^)Jn<N#nSHfvZ0kNV6rCtnZipt >eZ3Tb4@x}4qBzyiC9@9~!-%)Mb@el%*as40jBDXLA > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/img-utf8-html.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/img-utf8-html.py >deleted file mode 100644 >index 085867f9510e48fc926650b3e6fbbe62547afbc6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/img-utf8-html.py >+++ /dev/null >@@ -1,5 +0,0 @@ >-def main(request, response): >- headers = [("Content-type", "text/html;charset=utf-8")] >- content = "<img>foo" >- >- return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/img.jpg b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/img.jpg >deleted file mode 100644 >index 7aa9362529c72504cd081a71a41c3765c62328a5..0000000000000000000000000000000000000000 >GIT binary patch >literal 0 >HcmV?d00001 > >literal 108761 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 >zVU>{kYhbbHyyI_mPn$#%n(aS&zw%0D2yIj+<N~fJGGsFu2#;IrxHSfeltKH{mQ#~y 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 >zSst>OVGtk-hdPd|I49ZdH2J�MKqAXz$5$&n9L+9VxJ!ksfKF%Z=%0WEU?W12W| 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 >XCSsDE!>o$|rN1c#C(vO6i?jdPg(s2J > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/infinite-redirects.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/infinite-redirects.py >deleted file mode 100644 >index 1ec0ae27dcf540197a5609c5f69110861428fd30..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/infinite-redirects.py >+++ /dev/null >@@ -1,22 +0,0 @@ >-def main(request, response): >- location = "%s://%s%s" % (request.url_parts.scheme, >- request.url_parts.netloc, >- request.url_parts.path) >- page = "alternate"; >- type = 302; >- mix = 0; >- if request.GET.first("page", None) == "alternate": >- page = "default" >- >- if request.GET.first("type", None) == "301": >- type = 301 >- >- if request.GET.first("mix", None) == "1": >- mix = 1 >- type = 302 if type == 301 else 301 >- >- new_location = "%s?page=%s&type=%s&mix=%s" % (location, page, type, mix) >- headers = [("Cache-Control", "no-cache"), >- ("Pragma", "no-cache"), >- ("Location", new_location)] >- return 301, headers, "Hello guest. You have been redirected to " + new_location >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/init.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/init.htm >deleted file mode 100644 >index 6f936c4fb286a1fd50a138d32be420e19652c10f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/init.htm >+++ /dev/null >@@ -1,20 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>support init file</title> >- </head> >- <body> >- <script> >- onload = function() { >- // Run async, because navigations from inside onload can be a bit weird. >- setTimeout(function() { >- if (parent != window) { >- parent.init() >- } else { >- opener.init(); >- } >- }, 0); >- } >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/inspect-headers.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/inspect-headers.py >deleted file mode 100644 >index a8f1258fa2586a3a3db3c0e3cfe1a55bf9311ebf..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/inspect-headers.py >+++ /dev/null >@@ -1,35 +0,0 @@ >-def get_response(raw_headers, filter_value, filter_name): >- result = "" >- for line in raw_headers.headers: >- if line[-2:] != '\r\n': >- return "Syntax error: missing CRLF: " + line >- line = line[:-2] >- >- if ':' not in line: >- return "Syntax error: no colon found: " + line >- name, value = line.split(':', 1) >- if len(value) > 1 and value[0] == ' ': >- value = value[1:] >- >- if filter_value: >- if value == filter_value: >- result += name + "," >- elif name.lower() == filter_name: >- result += name + ": " + value + "\n"; >- return result >- >-def main(request, response): >- headers = [] >- if "cors" in request.GET: >- headers.append(("Access-Control-Allow-Origin", "*")) >- headers.append(("Access-Control-Allow-Credentials", "true")) >- headers.append(("Access-Control-Allow-Methods", "GET, POST, PUT, FOO")) >- headers.append(("Access-Control-Allow-Headers", "x-test, x-foo")) >- headers.append(("Access-Control-Expose-Headers", "x-request-method, x-request-content-type, x-request-query, x-request-content-length")) >- headers.append(("content-type", "text/plain")) >- >- filter_value = request.GET.first("filter_value", "") >- filter_name = request.GET.first("filter_name", "").lower() >- result = get_response(request.raw_headers, filter_value, filter_name) >- >- return headers, result >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/invalid-utf8-html.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/invalid-utf8-html.py >deleted file mode 100644 >index 72be41a45e86c3e45aabd081d2047f1de9344faf..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/invalid-utf8-html.py >+++ /dev/null >@@ -1,5 +0,0 @@ >-def main(request, response): >- headers = [("Content-type", "text/html;charset=utf-8")] >- content = chr(0xff) >- >- return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/last-modified.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/last-modified.py >deleted file mode 100644 >index ef05a6343c16a53eaad0e0e17daf65acdd7f6487..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/last-modified.py >+++ /dev/null >@@ -1,7 +0,0 @@ >-def main(request, response): >- import datetime, os >- srcpath = os.path.join(os.path.dirname(__file__), "well-formed.xml") >- srcmoddt = datetime.datetime.fromtimestamp(os.path.getmtime(srcpath)) >- response.headers.set("Last-Modified", srcmoddt.strftime("%a, %d %b %Y %H:%M:%S GMT")) >- response.headers.set("Content-Type", "application/xml") >- return open(srcpath, "r").read() >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/no-custom-header-on-preflight.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/no-custom-header-on-preflight.py >deleted file mode 100644 >index f49f9f311fb72a7565b5bbf4a9049c0ae45458aa..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/no-custom-header-on-preflight.py >+++ /dev/null >@@ -1,27 +0,0 @@ >-def main(request, response): >- def getState(token): >- server_state = request.server.stash.take(token) >- if not server_state: >- return "Uninitialized" >- return server_state >- >- def setState(state, token): >- request.server.stash.put(token, state) >- >- response.headers.set("Access-Control-Allow-Origin", "*") >- response.headers.set("Access-Control-Allow-Headers", "x-test") >- response.headers.set("Access-Control-Max-Age", 0) >- token = request.GET.first("token", None) >- >- if request.method == "OPTIONS": >- if request.headers.get("x-test"): >- response.content = "FAIL: Invalid header in preflight request." >- response.status = 400 >- else: >- setState("PASS", token) >- else: >- if request.headers.get("x-test"): >- response.content = getState(token) >- else: >- response.content = "FAIL: X-Test header missing in request" >- response.status = 400 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/nocors/folder.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/nocors/folder.txt >deleted file mode 100644 >index 5257b481d173dc5155069aff029c64ae543a7bcf..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/nocors/folder.txt >+++ /dev/null >@@ -1 +0,0 @@ >-not CORS-enabled >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/nocors/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/nocors/w3c-import.log >deleted file mode 100644 >index 751acb347142291fc8f85407809892bb565bb767..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/nocors/w3c-import.log >+++ /dev/null >@@ -1,17 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/nocors/folder.txt >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/parse-headers.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/parse-headers.py >deleted file mode 100644 >index fdc626539e842f6660f533a3684da72e719cef09..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/parse-headers.py >+++ /dev/null >@@ -1,10 +0,0 @@ >-import json >- >-def main(request, response): >- >- content = "" >- if "my-custom-header" in request.GET: >- val = request.GET.first("my-custom-header") >- response.headers.set("My-Custom-Header", val) >- >- return content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/pass.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/pass.txt >deleted file mode 100644 >index 7ef22e9a431ad0272713b71fdc8794016c8ef12f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/pass.txt >+++ /dev/null >@@ -1 +0,0 @@ >-PASS >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/redirect-cors.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/redirect-cors.py >deleted file mode 100644 >index 27609b8bdb20828346f978d6d354ca0cf36ad3bc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/redirect-cors.py >+++ /dev/null >@@ -1,20 +0,0 @@ >-def main(request, response): >- location = request.GET.first("location") >- >- if request.method == "OPTIONS": >- if "redirect_preflight" in request.GET: >- response.status = 302 >- response.headers.set("Location", location) >- else: >- response.status = 200 >- response.headers.set("Access-Control-Allow-Methods", "GET") >- response.headers.set("Access-Control-Max-Age", 1) >- elif request.method == "GET": >- response.status = 302 >- response.headers.set("Location", location) >- >- if "allow_origin" in request.GET: >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- >- if "allow_header" in request.GET: >- response.headers.set("Access-Control-Allow-Headers", request.GET.first("allow_header")) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/redirect.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/redirect.py >deleted file mode 100644 >index 3e0cd529a51d57255658d5825f3c277230156ec5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/redirect.py >+++ /dev/null >@@ -1,14 +0,0 @@ >-import time >- >-def main(request, response): >- code = int(request.GET.first("code", 302)) >- location = request.GET.first("location", request.url_parts.path +"?followed") >- >- if "delay" in request.GET: >- delay = float(request.GET.first("delay")) >- time.sleep(delay / 1E3); >- >- if "followed" in request.GET: >- return [("Content:Type", "text/plain")], "MAGIC HAPPENED" >- else: >- return (code, "WEBSRT MARKETING"), [("Location", location)], "TEST" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/requri.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/requri.py >deleted file mode 100644 >index eaa562dff247dffd841ac1403263d9ff9fd95bdc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/requri.py >+++ /dev/null >@@ -1,6 +0,0 @@ >-def main(request, response): >- if "full" in request.GET: >- return request.url >- else: >- return request.request_path >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/reset-token.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/reset-token.py >deleted file mode 100644 >index 5c9a577b44ce22cacc6fd9ad41cd441538f0373d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/reset-token.py >+++ /dev/null >@@ -1,5 +0,0 @@ >-def main(request, response): >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >- token = request.GET["token"] >- request.server.stash.put(token, "") >- response.content = "PASS" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/responseType-document-in-worker.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/responseType-document-in-worker.js >deleted file mode 100644 >index 37ba9bd13ee28a020091b8671905185bb124f486..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/responseType-document-in-worker.js >+++ /dev/null >@@ -1,9 +0,0 @@ >-self.importScripts('/resources/testharness.js'); >- >-test(function() { >- let xhr = new XMLHttpRequest(); >- xhr.responseType = "document"; >- assert_not_equals(xhr.responseType, "document"); >-}, "Setting XMLHttpRequest responseType to 'document' in a worker should have no effect."); >- >-done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/responseXML-unavailable-in-worker.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/responseXML-unavailable-in-worker.js >deleted file mode 100644 >index 2f3fdf25c3382fd2f34c8235c69f3f0f39f71635..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/responseXML-unavailable-in-worker.js >+++ /dev/null >@@ -1,9 +0,0 @@ >-self.importScripts('/resources/testharness.js'); >- >-test(function() { >- let xhr = new XMLHttpRequest(); >- assert_not_exists(xhr, "responseXML", "responseXML should not be available on instances."); >- assert_not_exists(XMLHttpRequest.prototype, "responseXML", "responseXML should not be on the prototype."); >-}, "XMLHttpRequest's responseXML property should not be exposed in workers."); >- >-done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-1.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-1.htm >deleted file mode 100644 >index 4e4c3faff9057ec1f42e795ab38da66c30cb6ef5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-1.htm >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() with document.domain set: loading documents from original origin after setting document.domain</title> >- <script src="send-after-setting-document-domain-window-helper.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[3]" /> >- </head> >- <body> >- <script> >- run_test(function() { >- document.domain = document.domain; // this is not a noop, it does actually change the security context >- var client = new XMLHttpRequest(); >- client.open("GET", "status.py?content=hello", false); >- client.send(null); >- assert_equals(client.responseText, "hello"); >- document.domain = document.domain.replace(/^\w+\./, ""); >- client.open("GET", "status.py?content=hello2", false); >- client.send(null); >- assert_equals(client.responseText, "hello2"); >- }, "loading documents from original origin after setting document.domain"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-2.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-2.htm >deleted file mode 100644 >index 073268c21c7e84fbcbe539a6a45476dc757d0564..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-2.htm >+++ /dev/null >@@ -1,20 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() with document.domain set: loading documents from the origin document.domain was set to should throw</title> >- <script src="send-after-setting-document-domain-window-helper.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[3]" /> >- </head> >- <body> >- <script> >- run_test(function() { >- document.domain = document.domain.replace(/^\w+\./, ""); >- var client = new XMLHttpRequest(); >- client.open("GET", location.protocol + "//" + document.domain + location.pathname.replace(/[^\/]*$/, "") + "status.py?content=hello3", false); >- assert_throws("NetworkError", function() { >- client.send(null); >- }); >- }, "loading documents from the origin document.domain was set to should throw"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-helper.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-helper.js >deleted file mode 100644 >index f5c762b042b70a27734157e0ca7d4d868f25147b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-helper.js >+++ /dev/null >@@ -1,29 +0,0 @@ >-function assert_equals(value, expected) { >- if (value != expected) { >- throw "Got wrong value.\nExpected '" + expected + "',\ngot '" + value + "'"; >- } >-} >- >-function assert_throws(expected_exc, func) { >- try { >- func.call(this); >- } catch(e) { >- var actual = e.name || e.type; >- if (actual != expected_exc) { >- throw "Got wrong exception.\nExpected '" + expected_exc + "',\ngot '" + actual + "'."; >- } >- return; >- } >- throw "Expected exception, but none was thrown"; >-} >- >-function run_test(test, name) { >- var result = {passed: true, message: null, name: name}; >- try { >- test(); >- } catch(e) { >- result.passed = false; >- result.message = e + ""; >- } >- opener.postMessage(result, "*"); >-} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/shift-jis-html.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/shift-jis-html.py >deleted file mode 100644 >index 92d06ca78c4166453aab94fc3bfe5663b950cc53..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/shift-jis-html.py >+++ /dev/null >@@ -1,6 +0,0 @@ >-def main(request, response): >- headers = [("Content-type", "text/html;charset=shift-jis")] >- # Shift-JIS bytes for katakana TE SU TO ('test') >- content = chr(0x83) + chr(0x65) + chr(0x83) + chr(0x58) + chr(0x83) + chr(0x67); >- >- return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/status.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/status.py >deleted file mode 100644 >index 5d72e10b24bfd5a36d719940388bb55d44433546..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/status.py >+++ /dev/null >@@ -1,9 +0,0 @@ >-def main(request, response): >- code = int(request.GET.first("code", 200)) >- text = request.GET.first("text", "OMG") >- content = request.GET.first("content", "") >- type = request.GET.first("type", "") >- status = (code, text) >- headers = [("Content-Type", type), >- ("X-Request-Method", request.method)] >- return status, headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/trickle.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/trickle.py >deleted file mode 100644 >index 5a46c5e82e6a47297f7bece818795e3a3db64471..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/trickle.py >+++ /dev/null >@@ -1,15 +0,0 @@ >-import time >- >-def main(request, response): >- chunk = "TEST_TRICKLE\n" >- delay = float(request.GET.first("ms", 500)) / 1E3 >- count = int(request.GET.first("count", 50)) >- if "specifylength" in request.GET: >- response.headers.set("Content-Length", count * len(chunk)) >- time.sleep(delay) >- response.headers.set("Content-type", "text/plain") >- response.write_status_headers() >- time.sleep(delay); >- for i in xrange(count): >- response.writer.write_content(chunk) >- time.sleep(delay) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/upload.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/upload.py >deleted file mode 100644 >index 27cee598b71050928ced5182f8fe801aa4d8a1c8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/upload.py >+++ /dev/null >@@ -1,15 +0,0 @@ >-def main(request, response): >- content = [] >- >- for key, values in sorted(item for item in request.POST.items() if not hasattr(item[1][0], "filename")): >- content.append("%s=%s," % (key, values[0])) >- content.append("\n") >- >- for key, values in sorted(item for item in request.POST.items() if hasattr(item[1][0], "filename")): >- value = values[0] >- content.append("%s=%s:%s:%s," % (key, >- value.filename, >- value.headers["Content-Type"], >- len(value.file.read()))) >- >- return "".join(content) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/utf16.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/utf16.txt >deleted file mode 100644 >index 0085dfaee8dc157a5b8e289d9bb42b06e24145f0..0000000000000000000000000000000000000000 >GIT binary patch >literal 0 >HcmV?d00001 > >literal 18 >acmezW?-|1nhNlc%495(18k{iTVgLYIcn7Qi > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/w3c-import.log >deleted file mode 100644 >index 9aad34622f28bb70255fb864189289835f20f219..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/w3c-import.log >+++ /dev/null >@@ -1,100 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/accept-language.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/accept.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-allow-lists.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-allow-with-body.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-auth-basic.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow-star.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-allow.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-denied.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-options-not-supported.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache-timeout.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-preflight-cache.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-put-allow.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-basic-whitelist-response-headers.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-cookie.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-origin-header.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-denied.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-header-lowercase.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-header-sorted.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-headers-origin.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-preflight-request-must-not-contain-cookie.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/access-control-sandboxed-iframe.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/authentication.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/base.xml >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/chunked.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/conditional.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/content.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/corsenabled.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/delay.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/echo-headers.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/echo-method.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/empty-div-utf8-html.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/folder.txt >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/form.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/gzip.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/header-content-length.asis >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers-basic.asis >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers.asis >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/headers.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/image.gif >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/img-utf8-html.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/img.jpg >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/infinite-redirects.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/init.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/inspect-headers.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/invalid-utf8-html.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/last-modified.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/no-custom-header-on-preflight.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/parse-headers.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/pass.txt >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/redirect-cors.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/redirect.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/requri.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/reset-token.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/responseType-document-in-worker.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/responseXML-unavailable-in-worker.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-1.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-2.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-helper.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/shift-jis-html.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/status.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/trickle.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/upload.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/utf16.txt >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/well-formed.xml >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/win-1252-html.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/win-1252-xml.py >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/workerxhr-origin-referrer.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/workerxhr-simple.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-aborted.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-abortedonmain.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-overrides.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-overridesexpires.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-runner.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-simple.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconmain.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconworker.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-twice.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/zlib.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/well-formed.xml b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/well-formed.xml >deleted file mode 100644 >index 2f4f1269880d670d57c1624e17934ac2d5b486e6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/well-formed.xml >+++ /dev/null >@@ -1,4 +0,0 @@ >-<html xmlns="http://www.w3.org/1999/xhtml"> >- <p id="n1">1</p> >- <p xmlns="namespacesarejuststrings" id="n2">2</p> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/win-1252-html.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/win-1252-html.py >deleted file mode 100644 >index a4d72d5e2754ce2178cf1f3c4ed9d39c8f68bb15..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/win-1252-html.py >+++ /dev/null >@@ -1,5 +0,0 @@ >-def main(request, response): >- headers = [("Content-type", "text/html;charset=windows-1252")] >- content = chr(0xff) >- >- return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/win-1252-xml.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/win-1252-xml.py >deleted file mode 100644 >index 09c32e4574b889974153abecb2b99eeb79c131fa..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/win-1252-xml.py >+++ /dev/null >@@ -1,5 +0,0 @@ >-def main(request, response): >- headers = [("Content-type", "application/xml;charset=windows-1252")] >- content = '<' + chr(0xff) + '/>' >- >- return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/workerxhr-origin-referrer.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/workerxhr-origin-referrer.js >deleted file mode 100644 >index e378de289046dbd9a034e0c47a32f40492daf35e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/workerxhr-origin-referrer.js >+++ /dev/null >@@ -1,63 +0,0 @@ >-importScripts("/resources/testharness.js") >- >-async_test(function() { >- var expected = 'Referer: ' + >- location.href.replace(/[^/]*$/, '') + >- "workerxhr-origin-referrer.js\n" >- >- var xhr = new XMLHttpRequest() >- xhr.onreadystatechange = this.step_func(function() { >- if (xhr.readyState == 4) { >- assert_equals(xhr.responseText, expected) >- this.done() >- } >- }) >- xhr.open('GET', 'inspect-headers.py?filter_name=referer', true) >- xhr.send() >-}, 'Referer header') >- >-async_test(function() { >- var expected = 'Origin: ' + >- location.protocol + >- '//' + >- location.hostname + >- (location.port === "" ? "" : ":" + location.port) + >- '\n' >- >- var xhr = new XMLHttpRequest() >- xhr.onreadystatechange = this.step_func(function() { >- if (xhr.readyState == 4) { >- assert_equals(xhr.responseText, expected) >- this.done() >- } >- }) >- var url = location.protocol + >- '//www2.' + >- location.hostname + >- (location.port === "" ? "" : ":" + location.port) + >- location.pathname.replace(/[^/]*$/, '') + >- 'inspect-headers.py?filter_name=origin&cors' >- xhr.open('GET', url, true) >- xhr.send() >-}, 'Origin header') >- >-async_test(function() { >- // If "origin" / base URL is the origin of this JS file, we can load files >- // from the server it originates from.. and requri.py will be able to tell us >- // what the requested URL was >- >- var expected = location.href.replace(/[^/]*$/, '') + >- 'requri.py?full' >- >- var xhr = new XMLHttpRequest() >- xhr.onreadystatechange = this.step_func(function() { >- if (xhr.readyState == 4) { >- assert_equals(xhr.responseText, expected) >- this.done() >- } >- }) >- xhr.open('GET', 'requri.py?full', true) >- xhr.send() >-}, 'Request URL test') >- >-done() >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/workerxhr-simple.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/workerxhr-simple.js >deleted file mode 100644 >index 9bae5a5cabd34c9e038fe8365f9496508079f84b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/workerxhr-simple.js >+++ /dev/null >@@ -1,9 +0,0 @@ >-var xhr=new XMLHttpRequest() >-xhr.onreadystatechange = function(){ >- if(xhr.readyState == 4){ >- var status = xhr.responseText === 'bottom\n' ? 'PASSED' : 'FAILED' >- self.postMessage(status) >- } >-} >-xhr.open('GET', 'folder.txt', true) >-xhr.send() >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js >deleted file mode 100644 >index b6bb6cdf3c3e03c2794865dc625ac50757b6cede..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js >+++ /dev/null >@@ -1,83 +0,0 @@ >-(function(global) { >- var recorded_xhr_events = []; >- >- function record_xhr_event(e) { >- var prefix = e.target instanceof XMLHttpRequestUpload ? "upload." : ""; >- recorded_xhr_events.push((prefix || "") + e.type + "(" + e.loaded + "," + e.total + "," + e.lengthComputable + ")"); >- } >- >- global.prepare_xhr_for_event_order_test = function(xhr) { >- xhr.addEventListener("readystatechange", function(e) { >- recorded_xhr_events.push(xhr.readyState); >- }); >- var events = ["loadstart", "progress", "abort", "timeout", "error", "load", "loadend"]; >- for(var i=0; i<events.length; ++i) { >- xhr.addEventListener(events[i], record_xhr_event); >- } >- if ("upload" in xhr) { >- for(var i=0; i<events.length; ++i) { >- xhr.upload.addEventListener(events[i], record_xhr_event); >- } >- } >- } >- >- function getNextEvent(arr) { >- var event = { str: arr.shift() }; >- >- // we can only handle strings, numbers (readystates) and undefined >- if (event.str === undefined) { >- return event; >- } >- >- if (typeof event.str !== "string") { >- if (Number.isInteger(event.str)) { >- event.state = event.str; >- event.str = "readystatechange(" + event.str + ")"; >- } else { >- throw "Test error: unexpected event type " + event.str; >- } >- } >- >- // parse out the general type, loaded and total values >- var type = event.type = event.str.split("(")[0].split(".").pop(); >- var loadedAndTotal = event.str.match(/.*\((\d+),(\d+),(true|false)\)/); >- if (loadedAndTotal) { >- event.loaded = parseInt(loadedAndTotal[1]); >- event.total = parseInt(loadedAndTotal[2]); >- event.lengthComputable = loadedAndTotal[3] == "true"; >- } >- >- return event; >- } >- >- global.assert_xhr_event_order_matches = function(expected) { >- var recorded = recorded_xhr_events; >- var lastRecordedLoaded = -1; >- while(expected.length && recorded.length) { >- var currentExpected = getNextEvent(expected), >- currentRecorded = getNextEvent(recorded); >- >- // skip to the last progress event if we've hit one (note the next >- // event after a progress event should be a LOADING readystatechange, >- // if there are multiple progress events in a row). >- while (recorded.length && currentRecorded.type == "progress" && >- parseInt(recorded) === 3) { >- assert_greater_than(currentRecorded.loaded, lastRecordedLoaded, >- "progress event 'loaded' values must only increase"); >- lastRecordedLoaded = currentRecorded.loaded; >- } >- if (currentRecorded.type == "loadend") { >- recordedProgressCount = 0; >- lastRecordedLoaded = -1; >- } >- >- assert_equals(currentRecorded.str, currentExpected.str); >- } >- if (recorded.length) { >- throw "\nUnexpected extra events: " + recorded.join(", "); >- } >- if (expected.length) { >- throw "\nExpected more events: " + expected.join(", "); >- } >- } >-}(this)); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-aborted.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-aborted.js >deleted file mode 100644 >index 056d77c0136079f7f4a851c9dceedbdce4180e05..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-aborted.js >+++ /dev/null >@@ -1,15 +0,0 @@ >-if (this.document === undefined) >- importScripts("xmlhttprequest-timeout.js"); >-/* >-This sets up three requests: >-The first request will only be open()ed, not aborted, timeout will be TIME_REGULAR_TIMEOUT but will never triggered because send() isn't called. >-After TIME_NORMAL_LOAD, the test asserts that no load/error/timeout/abort events fired >- >-Second request will be aborted immediately after send(), test asserts that abort fired >- >-Third request is set up to call abort() after TIME_NORMAL_LOAD, but it also has a TIME_REGULAR_TIMEOUT timeout. Asserts that timeout fired. >-(abort() is called later and should not fire an abort event per spec. This is untested!) >-*/ >-runTestRequests([ new AbortedRequest(false), >- new AbortedRequest(true, -1), >- new AbortedRequest(true, TIME_NORMAL_LOAD) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-abortedonmain.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-abortedonmain.js >deleted file mode 100644 >index 8dde8ef573e6edae12bacfa4abe504864e6ec396..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-abortedonmain.js >+++ /dev/null >@@ -1,8 +0,0 @@ >-/* >-This test sets up two requests: >-one that gets abort()ed from a 0ms timeout (0ms will obviously be clamped to whatever the implementation's minimal value is), asserts abort event fires >-one that will be aborted after TIME_DELAY, (with a timeout at TIME_REGULAR_TIMEOUT) asserts abort event fires. Does not assert that the timeout event does *not* fire. >-*/ >- >-runTestRequests([ new AbortedRequest(true, 0), >- new AbortedRequest(true, TIME_DELAY) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-overrides.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-overrides.js >deleted file mode 100644 >index 6dc2173b2e6fbb6d086d2132545a2c77467eb4bb..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-overrides.js >+++ /dev/null >@@ -1,11 +0,0 @@ >-if (this.document === undefined) >- importScripts("xmlhttprequest-timeout.js"); >-/* >-Sets up three requests to a resource that will take 0.6 seconds to load: >-1) timeout first set to TIME_NORMAL_LOAD, after TIME_REGULAR_TIMEOUT timeout is set to 0, asserts load fires >-2) timeout first set to TIME_NORMAL_LOAD, after TIME_DELAY timeout is set to TIME_REGULAR_TIMEOUT, asserts load fires (race condition..?!?) >-3) timeout first set to 0, after TIME_REGULAR_TIMEOUT it is set to TIME_REGULAR_TIMEOUT * 10, asserts load fires >-*/ >-runTestRequests([ new RequestTracker(true, "timeout disabled after initially set", TIME_NORMAL_LOAD, TIME_REGULAR_TIMEOUT, 0), >- new RequestTracker(true, "timeout overrides load after a delay", TIME_NORMAL_LOAD, TIME_DELAY, TIME_REGULAR_TIMEOUT), >- new RequestTracker(true, "timeout enabled after initially disabled", 0, TIME_REGULAR_TIMEOUT, TIME_NORMAL_LOAD * 10) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-overridesexpires.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-overridesexpires.js >deleted file mode 100644 >index bf251fa80535f3d6d1eef0be3da6e5360e70ef1f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-overridesexpires.js >+++ /dev/null >@@ -1,12 +0,0 @@ >-if (this.document === undefined) >- importScripts("xmlhttprequest-timeout.js"); >-/* >- Starts three requests: >- 1) XHR to resource which will take a least TIME_XHR_LOAD ms with timeout initially set to TIME_NORMAL_LOAD ms. After TIME_LATE_TIMEOUT ms timeout is supposedly reset to TIME_DELAY ms, >- but the resource should have finished loading already. Asserts "load" fires. >- 2) XHR with initial timeout set to TIME_NORMAL_LOAD, after TIME_REGULAR_TIMEOUT sets timeout to TIME_DELAY+100. Asserts "timeout" fires. >- 3) XHR with initial timeout set to TIME_DELAY, after TIME_REGULAR_TIMEOUT sets timeout to 500ms. Asserts "timeout" fires (the change happens when timeout already fired and the request is done). >-*/ >-runTestRequests([ new RequestTracker(true, "timeout set to expiring value after load fires", TIME_NORMAL_LOAD, TIME_LATE_TIMEOUT, TIME_DELAY), >- new RequestTracker(true, "timeout set to expired value before load fires", TIME_NORMAL_LOAD, TIME_REGULAR_TIMEOUT, TIME_DELAY+100), >- new RequestTracker(true, "timeout set to non-expiring value after timeout fires", TIME_DELAY, TIME_REGULAR_TIMEOUT, 500) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-runner.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-runner.js >deleted file mode 100644 >index 151226a94fb2687821ab96c58c15997ba80c2ffc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-runner.js >+++ /dev/null >@@ -1,21 +0,0 @@ >- >-function testResultCallbackHandler(event) { >- if (event.data == "done") { >- done(); >- return; >- } >- if (event.data.type == "is") { >- test(function() { assert_equals(event.data.got, event.data.expected); }, "Timeout test: " + event.data.msg); >- return; >- } >- if (event.data.type == "ok") { >- test(function() { assert_true(event.data.bool); }, "Timeout test: " + event.data.msg); >- return; >- } >-} >- >-window.addEventListener("message", testResultCallbackHandler); >- >-// Setting up testharness.js >-setup({ explicit_done: true }); >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-simple.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-simple.js >deleted file mode 100644 >index 989a8d4bae85fc1c252331aab6e5912eeaecf242..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-simple.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-if (this.document === undefined) >- importScripts("xmlhttprequest-timeout.js"); >- >-runTestRequests([ new RequestTracker(true, "no time out scheduled, load fires normally", 0), >- new RequestTracker(true, "load fires normally", TIME_NORMAL_LOAD), >- new RequestTracker(true, "timeout hit before load", TIME_REGULAR_TIMEOUT) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconmain.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconmain.js >deleted file mode 100644 >index 7ca3caf93677a7dabf075b8f6d5b2129e5d935b0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconmain.js >+++ /dev/null >@@ -1,2 +0,0 @@ >-runTestRequests([ SyncRequestSettingTimeoutAfterOpen, >- SyncRequestSettingTimeoutBeforeOpen ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconworker.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconworker.js >deleted file mode 100644 >index 09244668e184200057ef92e0af1c019a9b352495..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconworker.js >+++ /dev/null >@@ -1,11 +0,0 @@ >-if (this.document === undefined){ >- importScripts("xmlhttprequest-timeout.js"); >-}else{ >- throw "This test expects to be run as a Worker"; >-} >- >-/* NOT TESTED: setting timeout before calling open( ... , false) in a worker context. The test code always calls open() first. */ >- >-runTestRequests([ new RequestTracker(false, "no time out scheduled, load fires normally", 0), >- new RequestTracker(false, "load fires normally", TIME_NORMAL_LOAD), >- new RequestTracker(false, "timeout hit before load", TIME_REGULAR_TIMEOUT) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-twice.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-twice.js >deleted file mode 100644 >index 92b7157b9db91903f938030e8d387c7d1bb4d43d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout-twice.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-if (this.document === undefined) >- importScripts("xmlhttprequest-timeout.js"); >- >-runTestRequests([ new RequestTracker(true, "load fires normally with no timeout set, twice", 0, TIME_REGULAR_TIMEOUT, 0), >- new RequestTracker(true, "load fires normally with same timeout set twice", TIME_NORMAL_LOAD, TIME_REGULAR_TIMEOUT, TIME_NORMAL_LOAD), >- new RequestTracker(true, "timeout fires normally with same timeout set twice", TIME_REGULAR_TIMEOUT, TIME_DELAY, TIME_REGULAR_TIMEOUT) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout.js >deleted file mode 100644 >index ac35f48d5ab08e393f932b22d037e0a582756c05..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-timeout.js >+++ /dev/null >@@ -1,325 +0,0 @@ >-/* Test adapted from Alex Vincent's XHR2 timeout tests, written for Mozilla. >- https://hg.mozilla.org/mozilla-central/file/tip/content/base/test/ >- Released into the public domain or under BSD, according to >- https://bugzilla.mozilla.org/show_bug.cgi?id=525816#c86 >-*/ >- >-/* Notes: >- - All times are expressed in milliseconds in this test suite. >- - Test harness code is at the end of this file. >- - We generate only one request at a time, to avoid overloading the HTTP >- request handlers. >- */ >- >-var TIME_NORMAL_LOAD = 5000; >-var TIME_LATE_TIMEOUT = 4000; >-var TIME_XHR_LOAD = 3000; >-var TIME_REGULAR_TIMEOUT = 2000; >-var TIME_SYNC_TIMEOUT = 1000; >-var TIME_DELAY = 1000; >- >-/* >- * This should point to a resource that responds with a text/plain resource after a delay of TIME_XHR_LOAD milliseconds. >- */ >-var STALLED_REQUEST_URL = "delay.py?ms=" + (TIME_XHR_LOAD); >- >-var inWorker = false; >-try { >- inWorker = !(self instanceof Window); >-} catch (e) { >- inWorker = true; >-} >- >-if (!inWorker) >- STALLED_REQUEST_URL = "resources/" + STALLED_REQUEST_URL; >- >-function message(obj) { >- if (inWorker) >- self.postMessage(obj); >- else >- self.postMessage(obj, "*"); >-} >- >-function is(got, expected, msg) { >- var obj = {}; >- obj.type = "is"; >- obj.got = got; >- obj.expected = expected; >- obj.msg = msg; >- >- message(obj); >-} >- >-function ok(bool, msg) { >- var obj = {}; >- obj.type = "ok"; >- obj.bool = bool; >- obj.msg = msg; >- >- message(obj); >-} >- >-/** >- * Generate and track results from a XMLHttpRequest with regards to timeouts. >- * >- * @param {String} id The test description. >- * @param {Number} timeLimit The initial setting for the request timeout. >- * @param {Number} resetAfter (Optional) The time after sending the request, to >- * reset the timeout. >- * @param {Number} resetTo (Optional) The delay to reset the timeout to. >- * >- * @note The actual testing takes place in handleEvent(event). >- * The requests are generated in startXHR(). >- * >- * @note If resetAfter and resetTo are omitted, only the initial timeout setting >- * applies. >- * >- * @constructor >- * @implements DOMEventListener >- */ >-function RequestTracker(async, id, timeLimit /*[, resetAfter, resetTo]*/) { >- this.async = async; >- this.id = id; >- this.timeLimit = timeLimit; >- >- if (arguments.length > 3) { >- this.mustReset = true; >- this.resetAfter = arguments[3]; >- this.resetTo = arguments[4]; >- } >- >- this.hasFired = false; >-} >-RequestTracker.prototype = { >- /** >- * Start the XMLHttpRequest! >- */ >- startXHR: function() { >- var req = new XMLHttpRequest(); >- this.request = req; >- req.open("GET", STALLED_REQUEST_URL, this.async); >- var me = this; >- function handleEvent(e) { return me.handleEvent(e); }; >- req.onerror = handleEvent; >- req.onload = handleEvent; >- req.onabort = handleEvent; >- req.ontimeout = handleEvent; >- >- req.timeout = this.timeLimit; >- >- if (this.mustReset) { >- var resetTo = this.resetTo; >- self.setTimeout(function() { >- req.timeout = resetTo; >- }, this.resetAfter); >- } >- >- try { >- req.send(null); >- } >- catch (e) { >- // Synchronous case in workers. >- ok(!this.async && this.timeLimit < TIME_XHR_LOAD && e.name == "TimeoutError", "Unexpected error: " + e); >- TestCounter.testComplete(); >- } >- }, >- >- /** >- * Get a message describing this test. >- * >- * @returns {String} The test description. >- */ >- getMessage: function() { >- var rv = this.id + ", "; >- if (this.mustReset) { >- rv += "original timeout at " + this.timeLimit + ", "; >- rv += "reset at " + this.resetAfter + " to " + this.resetTo; >- } >- else { >- rv += "timeout scheduled at " + this.timeLimit; >- } >- return rv; >- }, >- >- /** >- * Check the event received, and if it's the right (and only) one we get. >- * >- * @param {DOMProgressEvent} evt An event of type "load" or "timeout". >- */ >- handleEvent: function(evt) { >- if (this.hasFired) { >- ok(false, "Only one event should fire: " + this.getMessage()); >- return; >- } >- this.hasFired = true; >- >- var type = evt.type, expectedType; >- // The XHR responds after TIME_XHR_LOAD milliseconds with a load event. >- var timeLimit = this.mustReset && (this.resetAfter < Math.min(TIME_XHR_LOAD, this.timeLimit)) ? >- this.resetTo : >- this.timeLimit; >- if ((timeLimit == 0) || (timeLimit >= TIME_XHR_LOAD)) { >- expectedType = "load"; >- } >- else { >- expectedType = "timeout"; >- } >- is(type, expectedType, this.getMessage()); >- TestCounter.testComplete(); >- } >-}; >- >-/** >- * Generate and track XMLHttpRequests which will have abort() called on. >- * >- * @param shouldAbort {Boolean} True if we should call abort at all. >- * @param abortDelay {Number} The time in ms to wait before calling abort(). >- */ >-function AbortedRequest(shouldAbort, abortDelay) { >- this.shouldAbort = shouldAbort; >- this.abortDelay = abortDelay; >- this.hasFired = false; >-} >-AbortedRequest.prototype = { >- /** >- * Start the XMLHttpRequest! >- */ >- startXHR: function() { >- var req = new XMLHttpRequest(); >- this.request = req; >- req.open("GET", STALLED_REQUEST_URL); >- var _this = this; >- function handleEvent(e) { return _this.handleEvent(e); }; >- req.onerror = handleEvent; >- req.onload = handleEvent; >- req.onabort = handleEvent; >- req.ontimeout = handleEvent; >- >- req.timeout = TIME_REGULAR_TIMEOUT; >- >- function abortReq() { >- req.abort(); >- } >- >- if (!this.shouldAbort) { >- self.setTimeout(function() { >- try { >- _this.noEventsFired(); >- } >- catch (e) { >- ok(false, "Unexpected error: " + e); >- TestCounter.testComplete(); >- } >- }, TIME_NORMAL_LOAD); >- } >- else { >- // Abort events can only be triggered on sent requests. >- req.send(); >- if (this.abortDelay == -1) { >- abortReq(); >- } >- else { >- self.setTimeout(abortReq, this.abortDelay); >- } >- } >- }, >- >- /** >- * Ensure that no events fired at all, especially not our timeout event. >- */ >- noEventsFired: function() { >- ok(!this.hasFired, "No events should fire for an unsent, unaborted request"); >- // We're done; if timeout hasn't fired by now, it never will. >- TestCounter.testComplete(); >- }, >- >- /** >- * Get a message describing this test. >- * >- * @returns {String} The test description. >- */ >- getMessage: function() { >- return "time to abort is " + this.abortDelay + ", timeout set at " + TIME_REGULAR_TIMEOUT; >- }, >- >- /** >- * Check the event received, and if it's the right (and only) one we get. >- * >- * WebKit fires abort events even for DONE and UNSENT states, which is >- * discussed in http://webkit.org/b/98404 >- * That's why we chose to accept secondary "abort" events in this test. >- * >- * @param {DOMProgressEvent} evt An event of type "load" or "timeout". >- */ >- handleEvent: function(evt) { >- if (this.hasFired && evt.type != "abort") { >- ok(false, "Only abort event should fire: " + this.getMessage()); >- return; >- } >- >- var expectedEvent = (this.abortDelay >= TIME_REGULAR_TIMEOUT && !this.hasFired) ? "timeout" : "abort"; >- this.hasFired = true; >- is(evt.type, expectedEvent, this.getMessage()); >- TestCounter.testComplete(); >- } >-}; >- >-var SyncRequestSettingTimeoutAfterOpen = { >- startXHR: function() { >- var pass = false; >- var req = new XMLHttpRequest(); >- req.open("GET", STALLED_REQUEST_URL, false); >- try { >- req.timeout = TIME_SYNC_TIMEOUT; >- } >- catch (e) { >- pass = true; >- } >- ok(pass, "Synchronous XHR must not allow a timeout to be set - setting timeout must throw"); >- TestCounter.testComplete(); >- } >-}; >- >-var SyncRequestSettingTimeoutBeforeOpen = { >- startXHR: function() { >- var pass = false; >- var req = new XMLHttpRequest(); >- req.timeout = TIME_SYNC_TIMEOUT; >- try { >- req.open("GET", STALLED_REQUEST_URL, false); >- } >- catch (e) { >- pass = true; >- } >- ok(pass, "Synchronous XHR must not allow a timeout to be set - calling open() after timeout is set must throw"); >- TestCounter.testComplete(); >- } >-}; >- >-var TestRequests = []; >- >-// This code controls moving from one test to another. >-var TestCounter = { >- testComplete: function() { >- // Allow for the possibility there are other events coming. >- self.setTimeout(function() { >- TestCounter.next(); >- }, TIME_NORMAL_LOAD); >- }, >- >- next: function() { >- var test = TestRequests.shift(); >- >- if (test) { >- test.startXHR(); >- } >- else { >- message("done"); >- } >- } >-}; >- >-function runTestRequests(testRequests) { >- TestRequests = testRequests; >- TestCounter.next(); >-} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/zlib.py b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/zlib.py >deleted file mode 100644 >index 49ed69de79398828af12837e8d87ed8d1a3a7a3e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/resources/zlib.py >+++ /dev/null >@@ -1,19 +0,0 @@ >-import zlib >- >-def main(request, response): >- if "content" in request.GET: >- output = request.GET["content"] >- else: >- output = request.body >- >- output = zlib.compress(output, 9) >- >- headers = [("Content-type", "text/plain"), >- ("Content-Encoding", "deflate"), >- ("X-Request-Method", request.method), >- ("X-Request-Query", request.url_parts.query if request.url_parts.query else "NO"), >- ("X-Request-Content-Length", request.headers.get("Content-Length", "NO")), >- ("X-Request-Content-Type", request.headers.get("Content-Type", "NO")), >- ("Content-Length", len(output))] >- >- return headers, output >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-arraybuffer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-arraybuffer-expected.txt >deleted file mode 100644 >index 471c2506c716228c5a94734110959baa1eeb683f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-arraybuffer-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The response attribute: ArrayBuffer data >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-arraybuffer.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-arraybuffer.htm >deleted file mode 100644 >index 7eaf7198ae274d85a76528bca9028d3d08844642..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-arraybuffer.htm >+++ /dev/null >@@ -1,54 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::a[contains(@href,'#arraybuffer-response-entity-body')]/.." /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The response attribute: ArrayBuffer data</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.onreadystatechange = function() >- { >- if (xhr.readyState == 4) >- { >- test.step(function() >- { >- assert_equals(xhr.status, 200); >- >- var buf = xhr.response; >- assert_true(buf instanceof ArrayBuffer); >- >- var arr = new Uint8Array(buf); >- assert_equals(arr.length, 5); >- assert_equals(arr[0], 0x48, "Expect 'H'"); >- assert_equals(arr[1], 0x65, "Expect 'e'"); >- assert_equals(arr[2], 0x6c, "Expect 'l'"); >- assert_equals(arr[3], 0x6c, "Expect 'l'"); >- assert_equals(arr[4], 0x6f, "Expect 'o'"); >- >- assert_equals(xhr.response, xhr.response, >- "Response should be cached"); >- >- test.done(); >- }); >- } >- }; >- >- xhr.open("GET", "./resources/content.py?content=Hello", true); >- xhr.responseType = "arraybuffer"; >- xhr.send(); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-blob-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-blob-expected.txt >deleted file mode 100644 >index 94a1399b23738d1d71e730e95132b4ed74de6a6f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-blob-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The response attribute: Blob data >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-blob.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-blob.htm >deleted file mode 100644 >index 19731d3dc1e5bc6c13102e386d87fd68c8e91ef8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-blob.htm >+++ /dev/null >@@ -1,55 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::a[contains(@href,'#blob-response-entity-body')]/.." /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The response attribute: Blob data</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- var content = "Hello"; >- var blob; >- >- xhr.onreadystatechange = function() >- { >- if (xhr.readyState == 4) >- { >- test.step(function() >- { >- blob = xhr.response; >- assert_equals(xhr.response, xhr.response, >- "Response should be cached"); >- assert_true(blob instanceof Blob, 'blob is a Blob'); >- >- var reader = new FileReader(); >- reader.onload = function() >- { >- test.step(function() >- { >- assert_equals(reader.result, content); >- test.done(); >- }); >- }; >- reader.readAsText(blob); >- }); >- } >- } >- >- xhr.open("GET", "./resources/content.py?content=" + content, true); >- xhr.responseType = "blob"; >- xhr.send(); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-deflate-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-deflate-expected.txt >deleted file mode 100644 >index efb336b4d6eb2fc139ef683560b9f5d07379acdf..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-deflate-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: content-encoding:deflate response was correctly inflated >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-deflate.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-deflate.htm >deleted file mode 100644 >index bce2745f4f7a4debe7f314cec10d61bd7b781d33..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-deflate.htm >+++ /dev/null >@@ -1,42 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: content-encoding:deflate response was correctly inflated</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-send()-method" data-tested-assertations="following::p[contains(text(),'content-encodings')]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(input) { >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest() >- >- client.open("POST", "resources/zlib.py", false); >- >- client.onreadystatechange = test.step_func(function () { >- if (client.readyState === 4) { >- var len = parseInt(client.getResponseHeader('content-length'), 10); >- >- assert_equals(client.getResponseHeader('content-encoding'), 'deflate'); >- assert_true(len < input.length); >- assert_equals(client.responseText, input); >- test.done(); >- } >- }); >- >- client.send(input); >- }); >- } >- >- var wellCompressableData = ''; >- for (var i = 0; i < 500; i++) { >- wellCompressableData += 'foofoofoofoofoofoofoo'; >- } >- >- request(wellCompressableData); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-gzip-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-gzip-expected.txt >deleted file mode 100644 >index 4ec2cc97ad0302dc234798735ca424345f6ca11c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-gzip-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: GZIP response was correctly inflated >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-gzip.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-gzip.htm >deleted file mode 100644 >index a3d2713d0f419aaeb29098731ebad3da33de2d3d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-gzip.htm >+++ /dev/null >@@ -1,42 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: GZIP response was correctly inflated</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-send()-method" data-tested-assertations="following::p[contains(text(),'content-encodings')]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(input) { >- var test = async_test(); >- test.step(function() { >- var client = new XMLHttpRequest() >- >- client.open("POST", "resources/gzip.py", false); >- >- client.onreadystatechange = test.step_func(function () { >- if (client.readyState === 4) { >- var len = parseInt(client.getResponseHeader('content-length'), 10); >- >- assert_equals(client.getResponseHeader('content-encoding'), 'gzip'); >- assert_true(len < input.length); >- assert_equals(client.responseText, input); >- test.done(); >- } >- }); >- >- client.send(input); >- }, document.title); >- } >- >- var wellCompressableData = ''; >- for (var i = 0; i < 500; i++) { >- wellCompressableData += 'foofoofoofoofoofoofoo'; >- } >- >- request(wellCompressableData); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-progress-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-progress-expected.txt >deleted file mode 100644 >index 770b07770b0b60fe746e890c8d4aca59f802e0a6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-progress-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: progress events grow response body size, unknown content-length >-PASS XMLHttpRequest: progress events grow response body size, known content-length >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-progress.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-progress.htm >deleted file mode 100644 >index 94c662c5c4fd8ca53f632d00de4815295e49df74..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-progress.htm >+++ /dev/null >@@ -1,51 +0,0 @@ >-<!doctype html> >-<html lang="en"> >-<head> >- <meta charset="utf-8"> >- <title>XMLHttpRequest: progress events grow response body size</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::a[contains(@href,'#make-progress-notifications')]/.. following::a[contains(@href,'#make-progress-notifications')]/../following:p[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#make-progress-notifications" data-tested-assertations=".." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="/../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="/../.." /> >-</head> >- >-<div id="log"></div> >- >-<script> >- >-function doTest(test, expectedLengthComputable, expectedTotal, url) { >- var client = new XMLHttpRequest(); >- var lastSize = 0; >- >- client.onprogress = test.step_func(function(e) { >- assert_equals(e.total, expectedTotal); >- assert_equals(e.lengthComputable, expectedLengthComputable); >- >- var currentSize = client.responseText.length; >- >- if (lastSize > 0 && currentSize > lastSize) { >- // growth from a positive size to bigger! >- test.done(); >- } >- >- lastSize = currentSize; >- }); >- >- client.onreadystatechange = test.step_func(function() { >- if (client.readyState === 4) { >- assert_unreached("onprogress not called multiple times, or response body did not grow."); >- } >- }); >- >- client.open("GET", url); >- client.send(null); >- return client; >-} >- >-async_test(function () { doTest(this, false, 0, "resources/trickle.py?count=6&delay=150"); }, >- document.title + ', unknown content-length'); >-async_test(function () { doTest(this, true, 78, "resources/trickle.py?count=6&delay=150&specifylength=1"); }, >- document.title + ', known content-length'); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-invalid-responsetype-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-invalid-responsetype-expected.txt >deleted file mode 100644 >index 6d36fea74eb6ee44ee8d210c4c5f58b0c21add97..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-invalid-responsetype-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >- >-PASS XMLHttpRequest: response is plain text if responseType is set to an invalid string (arrayBuffer) >-PASS XMLHttpRequest: response is plain text if responseType is set to an invalid string (JSON) >-PASS XMLHttpRequest: response is plain text if responseType is set to an invalid string (glob) >-PASS XMLHttpRequest: response is plain text if responseType is set to an invalid string (txt) >-PASS XMLHttpRequest: response is plain text if responseType is set to an invalid string (text/html) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-invalid-responsetype.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-invalid-responsetype.htm >deleted file mode 100644 >index 603c4cd0ed77f41172a1f80a731ba4584fa6456a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-invalid-responsetype.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: response is plain text if responseType is set to an invalid string</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::dd[2]/ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]" /><!-- Not quite - but this is handled in WebIDL, not the XHR spec --> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(type) { >- var test = async_test(document.title+' ('+type+')') >- test.step(function() { >- var client = new XMLHttpRequest() >- client.responseType = type >- assert_equals(client.responseType, '') >- client.open("GET", "resources/folder.txt", true) >- client.onload = function(){ >- test.step(function(){ >- assert_equals(client.responseType, '') >- assert_equals(client.response, 'bottom\n') >- assert_equals(typeof client.response, 'string') >- test.done() >- }) >- } >- client.send(null) >- }) >- } >- request("arrayBuffer") // case sensitive >- request("JSON") // case sensitive >- request("glob") >- request("txt") >- request("text/html") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-json-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-json-expected.txt >deleted file mode 100644 >index 18f49157b91325add69e0d06ced95da80fb1ed30..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-json-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS json response with no data: response property is null >-PASS json response with malformed data: response property is null >-PASS JSON object roundtrip >-PASS JSON roundtrip with Japanese text >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-json.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-json.htm >deleted file mode 100644 >index a694d7fc6157989c57b2a304a6264626900beb94..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-json.htm >+++ /dev/null >@@ -1,61 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: responseType json</title> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::OL[1]/LI[4]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::dt[2]/dt[4] following::dt[2]/dt[4]/following::dd[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#json-response-entity-body" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2] following::ol[1]/li[3]" /> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- function setupXHR () { >- var client = new XMLHttpRequest() >- client.open('POST', "resources/content.py", true) >- client.responseType = 'json' >- return client >- } >- function makeTest(data, expectedResponse, description){ >- var test = async_test(description) >- var xhr = setupXHR() >- assert_equals(xhr.responseType, 'json') >- xhr.onreadystatechange = function(){ >- if(xhr.readyState === 4){ >- test.step(function(){ >- assert_equals(xhr.status, 200) >- assert_equals(xhr.responseType, 'json') >- assert_equals(typeof xhr.response, 'object') >- if(expectedResponse){ // if the expectedResponse is not null, we iterate over properties to do a deeper comparison.. >- for(var prop in expectedResponse){ >- if (expectedResponse[prop] instanceof Array) { >- assert_array_equals(expectedResponse[prop], xhr.response[prop]) >- }else{ >- assert_equals(expectedResponse[prop], xhr.response[prop]) >- } >- } >- }else{ >- assert_equals(xhr.response, expectedResponse) // null comparison, basically >- } >- assert_equals(xhr.response, xhr.response, >- "Response should be cached") >- test.done() >- }) >- } >- } >- xhr.send(data) >- } >- // no data >- makeTest("", null, 'json response with no data: response property is null') >- // malformed >- makeTest('{"test":"foo"', null, 'json response with malformed data: response property is null') >- // real object >- var obj = {alpha:'a-z', integer:15003, negated:-20, b1:true, b2:false, myAr:['a', 'b', 'c', 1, 2, 3]} >- makeTest(JSON.stringify(obj), obj, 'JSON object roundtrip') >- makeTest('{"æ¥æ¬èª":"ã«ã»ãã"}', {"æ¥æ¬èª":"ã«ã»ãã"}, 'JSON roundtrip with Japanese text') >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-method-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-method-expected.txt >deleted file mode 100644 >index d986f0f43882229a18fe0196039b233486c1affc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-method-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS GET >-PASS HEAD >-PASS POST >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-method.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-method.htm >deleted file mode 100644 >index 1bf26bac79c8ebbb3e31c50cbb6cfce35b67ea6d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-method.htm >+++ /dev/null >@@ -1,21 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: influence of HTTP method on response</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- </head> >- <body> >- <div id="log"></div> >- <script> >- ["GET", "HEAD", "POST"].forEach(function(method) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open(method, "resources/echo-method.py", false) >- client.send() >- assert_equals(client.responseText, (method === "HEAD" ? "" : method)) >- }, method) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseText-status-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseText-status-expected.txt >deleted file mode 100644 >index 689a556f34e4a39a2e628876da1627ffd0576ceb..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseText-status-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest Test: responseText - status >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseText-status.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseText-status.html >deleted file mode 100644 >index 7d575902ddcdf18ac736f4cb97682572722c7320..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseText-status.html >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!DOCTYPE html> >-<meta charset="utf-8"> >-<title>XMLHttpRequest Test: responseText - status</title> >-<link rel="author" title="Intel" href="http://www.intel.com"> >-<meta name="assert" content="Check if XMLHttpRequest.responseText return empty string if state is not LOADING or DONE"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<div id="log"></div> >- >-<script> >- >-async_test(function (t) { >- var client = new XMLHttpRequest(); >- t.step(function () { >- assert_equals(client.responseText, ""); >- }); >- >- client.onreadystatechange = t.step_func(function () { >- if (client.readyState == 1 || client.readyState == 2) { >- assert_equals(client.responseText, ""); >- } >- >- if (client.readyState == 3) { >- t.done(); >- } >- }); >- >- client.open("GET", "resources/headers.py") >- client.send(null) >-}, document.title); >- >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseType-document-in-worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseType-document-in-worker-expected.txt >deleted file mode 100644 >index d0ffe672fb4b8bac1749c953f808dd2fec7cb890..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseType-document-in-worker-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Setting XMLHttpRequest responseType to 'document' in a worker should have no effect. >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseType-document-in-worker.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseType-document-in-worker.html >deleted file mode 100644 >index 9a04320df92578e5d9c4ddea21bf70b6ee187f8b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseType-document-in-worker.html >+++ /dev/null >@@ -1,13 +0,0 @@ >-<!doctype html> >-<html> >-<head> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >-</head> >-<body> >-<script> >- fetch_tests_from_worker(new Worker("resources/responseType-document-in-worker.js")); >-</script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseXML-unavailable-in-worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseXML-unavailable-in-worker-expected.txt >deleted file mode 100644 >index 3cbf317cea83356cf351be9dacbcdf836029af90..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseXML-unavailable-in-worker-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest's responseXML property should not be exposed in workers. >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseXML-unavailable-in-worker.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseXML-unavailable-in-worker.html >deleted file mode 100644 >index dcb4cb04973f6a4f06a43860200e4d04f9ec65ad..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseXML-unavailable-in-worker.html >+++ /dev/null >@@ -1,13 +0,0 @@ >-<!doctype html> >-<html> >-<head> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >-</head> >-<body> >-<script> >- fetch_tests_from_worker(new Worker("resources/responseXML-unavailable-in-worker.js")); >-</script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsedocument-decoding-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsedocument-decoding-expected.txt >deleted file mode 100644 >index dce320fbd22ede0f56d09b592150fe654838eed0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsedocument-decoding-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >- >-PASS XMLHttpRequest: response document decoding (application/xml %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >-PASS XMLHttpRequest: response document decoding (application/xml;charset=utf-8 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >-PASS XMLHttpRequest: response document decoding (application/xml;charset=windows-1252 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >-PASS XMLHttpRequest: response document decoding (text/html %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >-PASS XMLHttpRequest: response document decoding (text/html;charset=utf-8 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >-PASS XMLHttpRequest: response document decoding (text/html;charset=windows-1252 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsedocument-decoding.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsedocument-decoding.htm >deleted file mode 100644 >index 7fb4b2d1fd851483371d57d22b2e8519e730d6b0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsedocument-decoding.htm >+++ /dev/null >@@ -1,39 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <meta charset="utf-8"> >- <title>XMLHttpRequest: response document decoding</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- </head> >- <body> >- <script> >- function request(type, input, expected) { >- async_test((test) => { >- const client = new XMLHttpRequest(); >- client.responseType = 'document'; >- client.open("GET", "resources/status.py?content=" + input + "&type=" + encodeURIComponent(type), true); >- client.onload = test.step_func_done(() => { >- assert_equals(client.responseXML.querySelector("x").textContent, expected); >- }) >- client.send(null); >- }, document.title + " (" + type + " " + input + ")"); >- } >- >- const encoded_content = "%e6%a9%9f"; >- const encoded_xml = >- encodeURIComponent("<?xml version='1.0' encoding='windows-1252'?><x>") + encoded_content + encodeURIComponent("<\/x>"); >- const encoded_html = >- encodeURIComponent("<!doctype html><meta charset=windows-1252><x>") + encoded_content + encodeURIComponent("<\/x>"); >- const decoded_as_windows_1252 = "\u00e6\u00a9\u0178"; >- const decoded_as_utf_8 = "\u6a5f"; >- >- request("application/xml", encoded_xml, decoded_as_windows_1252); >- request("application/xml;charset=utf-8", encoded_xml, decoded_as_utf_8); >- request("application/xml;charset=windows-1252", encoded_xml, decoded_as_windows_1252); >- request("text/html", encoded_html, decoded_as_windows_1252); >- request("text/html;charset=utf-8", encoded_html, decoded_as_utf_8); >- request("text/html;charset=windows-1252", encoded_html, decoded_as_windows_1252); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetext-decoding-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetext-decoding-expected.txt >deleted file mode 100644 >index 0aa2b94e05f06bfcbdb49703b7716a946e7e9a13..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetext-decoding-expected.txt >+++ /dev/null >@@ -1,38 +0,0 @@ >- >-PASS XMLHttpRequest: responseText decoding (application/xml %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >-PASS XMLHttpRequest: responseText decoding (text/html %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >-PASS XMLHttpRequest: responseText decoding (application/xml;charset=utf-8 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >-PASS XMLHttpRequest: responseText decoding (application/xml;charset=windows-1252 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >-PASS XMLHttpRequest: responseText decoding (text/html;charset=utf-8 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >-PASS XMLHttpRequest: responseText decoding (text/html;charset=windows-1252 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >-PASS XMLHttpRequest: responseText decoding (text/plain;charset=windows-1252 %FF empty) >-PASS XMLHttpRequest: responseText decoding (text/plain %FF empty) >-PASS XMLHttpRequest: responseText decoding (text/plain %FE%FF empty) >-PASS XMLHttpRequest: responseText decoding (text/plain %FE%FF%FE%FF empty) >-PASS XMLHttpRequest: responseText decoding (text/plain %EF%BB%BF empty) >-PASS XMLHttpRequest: responseText decoding (text/plain %EF%BB%BF%EF%BB%BF empty) >-PASS XMLHttpRequest: responseText decoding (text/plain %C2 empty) >-PASS XMLHttpRequest: responseText decoding (text/xml %FE%FF empty) >-PASS XMLHttpRequest: responseText decoding (text/xml %FE%FF%FE%FF empty) >-PASS XMLHttpRequest: responseText decoding (text/xml %EF%BB%BF empty) >-PASS XMLHttpRequest: responseText decoding (text/xml %EF%BB%BF%EF%BB%BF empty) >-PASS XMLHttpRequest: responseText decoding (text/plain %E3%81%B2 empty) >-PASS XMLHttpRequest: responseText decoding (application/xml %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >-PASS XMLHttpRequest: responseText decoding (text/html %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >-PASS XMLHttpRequest: responseText decoding (application/xml;charset=utf-8 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >-PASS XMLHttpRequest: responseText decoding (application/xml;charset=windows-1252 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >-PASS XMLHttpRequest: responseText decoding (text/html;charset=utf-8 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >-PASS XMLHttpRequest: responseText decoding (text/html;charset=windows-1252 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >-PASS XMLHttpRequest: responseText decoding (text/plain;charset=windows-1252 %FF text) >-PASS XMLHttpRequest: responseText decoding (text/plain %FF text) >-PASS XMLHttpRequest: responseText decoding (text/plain %FE%FF text) >-PASS XMLHttpRequest: responseText decoding (text/plain %FE%FF%FE%FF text) >-PASS XMLHttpRequest: responseText decoding (text/plain %EF%BB%BF text) >-PASS XMLHttpRequest: responseText decoding (text/plain %EF%BB%BF%EF%BB%BF text) >-PASS XMLHttpRequest: responseText decoding (text/plain %C2 text) >-PASS XMLHttpRequest: responseText decoding (text/xml %FE%FF text) >-PASS XMLHttpRequest: responseText decoding (text/xml %FE%FF%FE%FF text) >-PASS XMLHttpRequest: responseText decoding (text/xml %EF%BB%BF text) >-PASS XMLHttpRequest: responseText decoding (text/xml %EF%BB%BF%EF%BB%BF text) >-PASS XMLHttpRequest: responseText decoding (text/plain %E3%81%B2 text) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetext-decoding.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetext-decoding.htm >deleted file mode 100644 >index c7e37832c3425a852357444f756818f84ac21690..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetext-decoding.htm >+++ /dev/null >@@ -1,92 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <meta charset="utf-8"> >- <title>XMLHttpRequest: responseText decoding</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- </head> >- <body> >- <script> >- function create_html(content) { >- return "<!doctype html><meta charset=windows-1252><x>" + content + "</x>"; >- } >- function create_encoded_html(encoded_content) { >- return encodeURIComponent("<!doctype html><meta charset=windows-1252><x>") + encoded_content + encodeURIComponent("<\/x>"); >- } >- function create_xml(content) { >- return "<?xml version='1.0' encoding='windows-1252'?><x>" + content + "</x>"; >- } >- function create_encoded_xml(encoded_content) { >- return encodeURIComponent("<?xml version='1.0' encoding='windows-1252'?><x>") + encoded_content + encodeURIComponent("<\/x>"); >- } >- function request(type, input, output, responseType) { >- async_test((test) => { >- const client = new XMLHttpRequest(); >- if (responseType !== undefined) { >- client.responseType = responseType; >- } >- client.open("GET", "resources/status.py?content=" + input + "&type=" + encodeURIComponent(type), true); >- client.onload = test.step_func_done(() => { >- assert_equals(client.responseText, output); >- }) >- client.send(null); >- }, document.title + " (" + type + " " + input + " " + (responseType ? " " + responseType : "empty") + ")"); >- } >- >- const encoded_content = "%e6%a9%9f"; >- const decoded_as_windows_1252 = "\u00e6\u00a9\u0178"; >- const decoded_as_utf_8 = "\u6a5f"; >- const encoded_xml = create_encoded_xml(encoded_content); >- const encoded_html = create_encoded_html(encoded_content); >- const xml_decoded_as_windows_1252 = create_xml(decoded_as_windows_1252); >- const xml_decoded_as_utf_8 = create_xml(decoded_as_utf_8); >- const html_decoded_as_windows_1252 = create_html(decoded_as_windows_1252); >- const html_decoded_as_utf_8 = create_html(decoded_as_utf_8); >- >- // "default" response type >- // An XML-ish response is sniffed. >- request("application/xml", encoded_xml, xml_decoded_as_windows_1252); >- // An HTML-ish response isn't sniffed. >- request("text/html", encoded_html, html_decoded_as_utf_8); >- request("application/xml;charset=utf-8", encoded_xml, xml_decoded_as_utf_8); >- request("application/xml;charset=windows-1252", encoded_xml, xml_decoded_as_windows_1252); >- request("text/html;charset=utf-8", encoded_html, html_decoded_as_utf_8); >- request("text/html;charset=windows-1252", encoded_html, html_decoded_as_windows_1252); >- request("text/plain;charset=windows-1252", "%FF", "\u00FF"); >- request("text/plain", "%FF", "\uFFFD"); >- request("text/plain", "%FE%FF", ""); >- request("text/plain", "%FE%FF%FE%FF", "\uFEFF"); >- request("text/plain", "%EF%BB%BF", ""); >- request("text/plain", "%EF%BB%BF%EF%BB%BF", "\uFEFF"); >- request("text/plain", "%C2", "\uFFFD"); >- request("text/xml", "%FE%FF", ""); >- request("text/xml", "%FE%FF%FE%FF", "\uFEFF"); >- request("text/xml", "%EF%BB%BF", ""); >- request("text/xml", "%EF%BB%BF%EF%BB%BF", "\uFEFF"); >- request("text/plain", "%E3%81%B2", "\u3072"); >- >- // "text" response type >- // An XML-ish response isn't sniffed. >- request("application/xml", encoded_xml, xml_decoded_as_utf_8, "text"); >- // An HTML-ish response isn't sniffed. >- request("text/html", encoded_html, html_decoded_as_utf_8, "text"); >- request("application/xml;charset=utf-8", encoded_xml, xml_decoded_as_utf_8, "text"); >- request("application/xml;charset=windows-1252", encoded_xml, xml_decoded_as_windows_1252, "text"); >- request("text/html;charset=utf-8", encoded_html, html_decoded_as_utf_8, "text"); >- request("text/html;charset=windows-1252", encoded_html, html_decoded_as_windows_1252, "text"); >- request("text/plain;charset=windows-1252", "%FF", "\u00FF", "text"); >- request("text/plain", "%FF", "\uFFFD", "text"); >- request("text/plain", "%FE%FF", "", "text"); >- request("text/plain", "%FE%FF%FE%FF", "\uFEFF", "text"); >- request("text/plain", "%EF%BB%BF", "", "text"); >- request("text/plain", "%EF%BB%BF%EF%BB%BF", "\uFEFF", "text"); >- request("text/plain", "%C2", "\uFFFD", "text"); >- request("text/xml", "%FE%FF", "", "text"); >- request("text/xml", "%FE%FF%FE%FF", "\uFEFF", "text"); >- request("text/xml", "%EF%BB%BF", "", "text"); >- request("text/xml", "%EF%BB%BF%EF%BB%BF", "\uFEFF", "text"); >- request("text/plain", "%E3%81%B2", "\u3072", "text"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetype-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetype-expected.txt >deleted file mode 100644 >index 4d2ec559557306391ffad1eceea780e748a859a0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetype-expected.txt >+++ /dev/null >@@ -1,51 +0,0 @@ >-CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >-CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >-CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >-CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >-CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >-CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >- >-PASS Initial value of responseType >-PASS Set responseType to "" when readyState is UNSENT. >-PASS Set responseType to "" when readyState is OPENED. >-PASS Set responseType to "" when readyState is HEADERS_RECEIVED. >-PASS Set responseType to "" when readyState is LOADING. >-PASS Set responseType to "" when readyState is DONE. >-PASS Set responseType to "" when readyState is OPENED and the sync flag is set. >-PASS Set responseType to "" when readyState is DONE and the sync flag is set. >-PASS Set responseType to "json" when readyState is UNSENT. >-PASS Set responseType to "json" when readyState is OPENED. >-PASS Set responseType to "json" when readyState is HEADERS_RECEIVED. >-PASS Set responseType to "json" when readyState is LOADING. >-PASS Set responseType to "json" when readyState is DONE. >-PASS Set responseType to "json" when readyState is OPENED and the sync flag is set. >-PASS Set responseType to "json" when readyState is DONE and the sync flag is set. >-PASS Set responseType to "document" when readyState is UNSENT. >-PASS Set responseType to "document" when readyState is OPENED. >-PASS Set responseType to "document" when readyState is HEADERS_RECEIVED. >-PASS Set responseType to "document" when readyState is LOADING. >-PASS Set responseType to "document" when readyState is DONE. >-PASS Set responseType to "document" when readyState is OPENED and the sync flag is set. >-PASS Set responseType to "document" when readyState is DONE and the sync flag is set. >-PASS Set responseType to "arraybuffer" when readyState is UNSENT. >-PASS Set responseType to "arraybuffer" when readyState is OPENED. >-PASS Set responseType to "arraybuffer" when readyState is HEADERS_RECEIVED. >-PASS Set responseType to "arraybuffer" when readyState is LOADING. >-PASS Set responseType to "arraybuffer" when readyState is DONE. >-PASS Set responseType to "arraybuffer" when readyState is OPENED and the sync flag is set. >-PASS Set responseType to "arraybuffer" when readyState is DONE and the sync flag is set. >-PASS Set responseType to "blob" when readyState is UNSENT. >-PASS Set responseType to "blob" when readyState is OPENED. >-PASS Set responseType to "blob" when readyState is HEADERS_RECEIVED. >-PASS Set responseType to "blob" when readyState is LOADING. >-PASS Set responseType to "blob" when readyState is DONE. >-PASS Set responseType to "blob" when readyState is OPENED and the sync flag is set. >-PASS Set responseType to "blob" when readyState is DONE and the sync flag is set. >-PASS Set responseType to "text" when readyState is UNSENT. >-PASS Set responseType to "text" when readyState is OPENED. >-PASS Set responseType to "text" when readyState is HEADERS_RECEIVED. >-PASS Set responseType to "text" when readyState is LOADING. >-PASS Set responseType to "text" when readyState is DONE. >-PASS Set responseType to "text" when readyState is OPENED and the sync flag is set. >-PASS Set responseType to "text" when readyState is DONE and the sync flag is set. >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetype.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetype.html >deleted file mode 100644 >index ade604417a92e4781e533e97d8b013e52fe654f6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetype.html >+++ /dev/null >@@ -1,96 +0,0 @@ >-<!DOCTYPE html> >-<meta charset="utf-8"> >-<title>XMLHttpRequest.responseType</title> >-<link rel="author" title="Mathias Bynens" href="http://mathiasbynens.be/"> >-<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> >-<link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<script> >-test(function() { >- var xhr = new XMLHttpRequest(); >- assert_equals(xhr.responseType, ''); >-}, 'Initial value of responseType'); >- >-var types = ['', 'json', 'document', 'arraybuffer', 'blob', 'text']; >-types.forEach(function(type) { >- test(function() { >- var xhr = new XMLHttpRequest(); >- xhr.responseType = type; >- assert_equals(xhr.responseType, type); >- }, 'Set responseType to ' + format_value(type) + ' when readyState is UNSENT.'); >- >- test(function() { >- var xhr = new XMLHttpRequest(); >- xhr.open('get', '/'); >- xhr.responseType = type; >- assert_equals(xhr.responseType, type); >- }, 'Set responseType to ' + format_value(type) + ' when readyState is OPENED.'); >- >- async_test(function() { >- var xhr = new XMLHttpRequest(); >- xhr.open('get', '/'); >- xhr.onreadystatechange = this.step_func(function() { >- if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) { >- xhr.responseType = type; >- assert_equals(xhr.responseType, type); >- this.done(); >- } >- }); >- xhr.send(); >- }, 'Set responseType to ' + format_value(type) + ' when readyState is HEADERS_RECEIVED.'); >- >- async_test(function() { >- var xhr = new XMLHttpRequest(); >- xhr.open('get', '/'); >- xhr.onreadystatechange = this.step_func(function() { >- if (xhr.readyState === XMLHttpRequest.LOADING) { >- assert_throws("InvalidStateError", function() { >- xhr.responseType = type; >- }); >- assert_equals(xhr.responseType, ""); >- this.done(); >- } >- }); >- xhr.send(); >- }, 'Set responseType to ' + format_value(type) + ' when readyState is LOADING.'); >- >- async_test(function() { >- var xhr = new XMLHttpRequest(); >- xhr.open('get', '/'); >- xhr.onreadystatechange = this.step_func(function() { >- if (xhr.readyState === XMLHttpRequest.DONE) { >- assert_throws("InvalidStateError", function() { >- xhr.responseType = type; >- }); >- assert_equals(xhr.responseType, ""); >- this.done(); >- } >- }); >- xhr.send(); >- }, 'Set responseType to ' + format_value(type) + ' when readyState is DONE.'); >- >- // Note: the case of setting responseType first, and then calling synchronous >- // open(), is tested in open-method-responsetype-set-sync.htm. >- test(function() { >- var xhr = new XMLHttpRequest(); >- xhr.open('get', '/', false); >- assert_throws("InvalidAccessError", function() { >- xhr.responseType = type; >- }); >- assert_equals(xhr.responseType, ""); >- }, 'Set responseType to ' + format_value(type) + ' when readyState is OPENED and the sync flag is set.'); >- >- test(function() { >- var xhr = new XMLHttpRequest(); >- xhr.open('get', '/', false); >- xhr.send(); >- assert_equals(xhr.readyState, XMLHttpRequest.DONE); >- assert_throws("InvalidStateError", function() { >- xhr.responseType = type; >- }); >- assert_equals(xhr.responseType, ""); >- }, 'Set responseType to ' + format_value(type) + ' when readyState is DONE and the sync flag is set.'); >-}); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseurl-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseurl-expected.txt >deleted file mode 100644 >index 6e9a051df5042d32dbfd8ec34a6976835e3e3e9d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseurl-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS 404 response has proper responseURL >-PASS Redirected response has proper responseURL >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseurl.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseurl.html >deleted file mode 100644 >index b730e045d8d5cf8799d023521cea99f3e18e0809..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseurl.html >+++ /dev/null >@@ -1,37 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: responseURL test</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responseurl-attribute"/> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- assert_equals(client.responseURL, "") >- >- client.open("GET", "foo.html", false) >- client.send() >- >- expected = location.href.replace(/[^/]*$/, 'foo.html') >- assert_equals(client.status, 404) >- assert_equals(client.responseURL, expected) >- }, "404 response has proper responseURL") >- test(function() { >- var client = new XMLHttpRequest() >- assert_equals(client.responseURL, "") >- >- target = "image.gif" >- client.open("GET", "resources/redirect.py?location=" + target, false) >- client.send() >- >- expected = location.href.replace(/[^/]*$/, "resources/" + target) >- assert_equals(client.status, 200) >- assert_equals(client.responseURL, expected) >- }, "Redirected response has proper responseURL") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-basic-expected.txt >deleted file mode 100644 >index faec357ed6fe75c5a2b53a3715b9a0941d18bc7b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-basic-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: responseXML basic test >-PASS responseXML on empty response documents >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-basic.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-basic.htm >deleted file mode 100644 >index a3ce7b5b544296944d8721e80fd17139bb7bbc40..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-basic.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: responseXML basic test</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[4]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#document-response-entity-body" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[6] following::ol[1]/li[10]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- assert_equals(client.responseXML, null) >- client.open("GET", "resources/well-formed.xml", false) >- assert_equals(client.responseXML, null) >- client.send(null) >- assert_equals(client.responseXML.documentElement.localName, "html", 'localName is html') >- assert_equals(client.responseXML.documentElement.childNodes.length, 5, 'childNodes is 5') >- assert_equals(client.responseXML.getElementById("n1").localName, client.responseXML.documentElement.childNodes[1].localName) >- assert_equals(client.responseXML.getElementById("n2"), client.responseXML.documentElement.childNodes[3], 'getElementById("n2")') >- assert_equals(client.responseXML.getElementsByTagName("p")[1].namespaceURI, "namespacesarejuststrings", 'namespaceURI') >- }) >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/status.py?type=application/xml", false) >- client.send(null) >- assert_equals(client.responseXML, null) >- }, 'responseXML on empty response documents') >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-document-properties-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-document-properties-expected.txt >deleted file mode 100644 >index fec030df5bccc9a1fc2e28cd4a901e0467a5573f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-document-properties-expected.txt >+++ /dev/null >@@ -1,26 +0,0 @@ >- >-FAIL domain assert_equals: expected (undefined) undefined but got (string) "localhost" >-PASS URL >-PASS documentURI >-PASS baseURI >-PASS referrer >-PASS title >-PASS contentType >-FAIL readyState assert_equals: expected "complete" but got "interactive" >-PASS location >-PASS defaultView >-FAIL body assert_equals: expected (undefined) undefined but got (object) null >-FAIL images assert_equals: expected (undefined) undefined but got (object) object "[object HTMLCollection]" >-PASS doctype >-FAIL forms assert_equals: expected (undefined) undefined but got (object) object "[object HTMLCollection]" >-FAIL all assert_equals: expected undefined but got [object HTMLAllCollection] >-FAIL links assert_equals: expected (undefined) undefined but got (object) object "[object HTMLCollection]" >-PASS cookie >-FAIL Test document URL properties after redirect assert_equals: expected "http://localhost:8800/XMLHttpRequest/resources/well-formed.xml" but got "http://localhost:8800/XMLHttpRequest/resources/redirect.py?location=well-formed.xml" >-FAIL Test document URL properties of document with <base> after redirect assert_equals: expected "http://localhost:8800/XMLHttpRequest/resources/base.xml" but got "http://localhost:8800/XMLHttpRequest/resources/redirect.py?location=base.xml" >-PASS lastModified set to time of response if no HTTP header provided >-FAIL lastModified set to related HTTP header if provided assert_equals: expected 1505770096000 but got 1505744052000 >-PASS cookie (after setting it) >-PASS styleSheets >-PASS implementation >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm >deleted file mode 100644 >index 30bf7d0374125b14061c4ed1946732b90df99133..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm >+++ /dev/null >@@ -1,106 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: responseXML document properties</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var timePreXHR = Math.floor(new Date().getTime(new Date().getTime() - 3000) / 1000); // three seconds ago, in case there's clock drift >- var client = new XMLHttpRequest() >- client.open("GET", "resources/well-formed.xml", false) >- client.send(null) >- var responseURL = new URL('resources/well-formed.xml', location.href).href >- var expected = { >- domain:undefined, >- URL:responseURL, >- documentURI:responseURL, >- baseURI:responseURL, >- referrer:'', >- title:'', >- contentType:'application/xml', >- readyState:'complete', >- location:null, >- defaultView:null, >- body:undefined, >- images: undefined, >- doctype:null, >- forms:undefined, >- all:undefined, >- links: undefined, >- cookie:'' >- } >- >- for (var name in expected) { >- runTest(name, expected[name]) >- } >- >- function runTest(name, value){ >- test(function(){ >- assert_equals(client.responseXML[name], value) >- }, name) >- } >- >- async_test(t => { >- const client = new XMLHttpRequest(); >- client.open("GET", "resources/redirect.py?location=well-formed.xml"); >- client.send(); >- client.onload = t.step_func_done(() => { >- assert_equals(client.responseXML.URL, responseURL); >- assert_equals(client.responseXML.baseURI, responseURL); >- }); >- }, "Test document URL properties after redirect"); >- >- async_test(t => { >- const client = new XMLHttpRequest(); >- client.open("GET", "resources/redirect.py?location=base.xml"); >- client.send(); >- client.onload = t.step_func_done(() => { >- const localResponseURL = new URL('resources/base.xml', location.href).href; >- assert_equals(client.responseXML.URL, localResponseURL); >- assert_equals(client.responseXML.baseURI, 'https://example.com/'); >- client.responseXML.documentElement.remove(); >- assert_equals(client.responseXML.baseURI, localResponseURL); >- const newBase = document.createElement("base"), >- newBaseURL = "https://elsewhere.example/"; >- newBase.href = "https://elsewhere.example/"; >- client.responseXML.appendChild(newBase); >- assert_equals(client.responseXML.baseURI, newBaseURL); >- newBase.remove(); >- document.head.appendChild(newBase); >- assert_equals(client.responseXML.baseURI, localResponseURL); >- newBase.remove(); >- }); >- }, "Test document URL properties of document with <base> after redirect"); >- >- test(function() { >- var lastModified = Math.floor(new Date(client.responseXML.lastModified).getTime() / 1000); >- var now = Math.floor(new Date().getTime(new Date().getTime() + 3000) / 1000); // three seconds from now, in case there's clock drift >- assert_greater_than_equal(lastModified, timePreXHR); >- assert_less_than_equal(lastModified, now); >- }, 'lastModified set to time of response if no HTTP header provided') >- >- test(function() { >- var client2 = new XMLHttpRequest() >- client2.open("GET", "resources/last-modified.py", false) >- client2.send(null) >- assert_equals((new Date(client2.getResponseHeader('Last-Modified'))).getTime(), (new Date(client2.responseXML.lastModified)).getTime()) >- }, 'lastModified set to related HTTP header if provided') >- >- test(function() { >- client.responseXML.cookie = "thisshouldbeignored" >- assert_equals(client.responseXML.cookie, "") >- }, 'cookie (after setting it)') >- >- test(function() { >- assert_equals(typeof(client.responseXML.styleSheets), "object") >- }, 'styleSheets') >- >- test(function() { >- assert_equals(typeof(client.responseXML.implementation), "object") >- }, 'implementation') >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-get-twice-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-get-twice-expected.txt >deleted file mode 100644 >index fe9a581705d14caf3b6b7825958951fa39975eb2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-get-twice-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS Getting response, then response >-PASS Getting responseXML, then responseXML >-PASS Getting responseXML, then response >-PASS Getting response, then responseXML >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-get-twice.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-get-twice.htm >deleted file mode 100644 >index e86a6d59e51ecef0ba0a07e7c53e586ac48a62ae..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-get-twice.htm >+++ /dev/null >@@ -1,66 +0,0 @@ >-<!doctype html> >-<meta charset="utf-8"> >-<title></title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<script> >- async_test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/well-formed.xml") >- client.responseType = "document" >- assert_equals(client.responseType, "document") >- client.send() >- client.onload = this.step_func_done(function() { >- var first = client.response >- var second = client.response >- assert_not_equals(first, null) >- assert_not_equals(second, null) >- assert_equals(first, second) >- }) >- }, "Getting response, then response") >- >- async_test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/well-formed.xml") >- client.responseType = "document" >- assert_equals(client.responseType, "document") >- client.send() >- client.onload = this.step_func_done(function() { >- var first = client.responseXML >- var second = client.responseXML >- assert_not_equals(first, null) >- assert_not_equals(second, null) >- assert_equals(first, second) >- }) >- }, "Getting responseXML, then responseXML") >- >- async_test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/well-formed.xml") >- client.responseType = "document" >- assert_equals(client.responseType, "document") >- client.send() >- client.onload = this.step_func_done(function() { >- var first = client.responseXML >- var second = client.response >- assert_not_equals(first, null) >- assert_not_equals(second, null) >- assert_equals(first, second) >- }) >- }, "Getting responseXML, then response") >- >- async_test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/well-formed.xml") >- client.responseType = "document" >- assert_equals(client.responseType, "document") >- client.send() >- client.onload = this.step_func_done(function() { >- var first = client.response >- var second = client.responseXML >- assert_not_equals(first, null) >- assert_not_equals(second, null) >- assert_equals(first, second) >- }) >- }, "Getting response, then responseXML") >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-media-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-media-type-expected.txt >deleted file mode 100644 >index 7b2a881b9717a51e1b93c6ef8d2a3f507fe878e3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-media-type-expected.txt >+++ /dev/null >@@ -1,17 +0,0 @@ >- >-PASS XMLHttpRequest: responseXML MIME type tests ('', should parse) >-PASS XMLHttpRequest: responseXML MIME type tests ('text/html', should not parse) >-FAIL XMLHttpRequest: responseXML MIME type tests ('bogus', should parse) null is not an object (evaluating 'client.responseXML.documentElement') >-FAIL XMLHttpRequest: responseXML MIME type tests ('bogus+xml', should parse) null is not an object (evaluating 'client.responseXML.documentElement') >-PASS XMLHttpRequest: responseXML MIME type tests ('text/plain;+xml', should not parse) >-PASS XMLHttpRequest: responseXML MIME type tests ('text/plainxml', should not parse) >-PASS XMLHttpRequest: responseXML MIME type tests ('video/x-awesome+xml', should parse) >-PASS XMLHttpRequest: responseXML MIME type tests ('video/x-awesome', should not parse) >-PASS XMLHttpRequest: responseXML MIME type tests ('text/xml', should parse) >-FAIL XMLHttpRequest: responseXML MIME type tests ('application', should parse) null is not an object (evaluating 'client.responseXML.documentElement') >-FAIL XMLHttpRequest: responseXML MIME type tests ('text/xsl', should not parse) assert_equals: expected null but got Document node with 1 child >-PASS XMLHttpRequest: responseXML MIME type tests ('text/plain', should not parse) >-PASS XMLHttpRequest: responseXML MIME type tests ('application/rdf', should not parse) >-PASS XMLHttpRequest: responseXML MIME type tests ('application/xhtml+xml', should parse) >-PASS XMLHttpRequest: responseXML MIME type tests ('image/svg+xml', should parse) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-media-type.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-media-type.htm >deleted file mode 100644 >index ece413d51b89e83681f50ced7a35f9d65899ddcf..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-media-type.htm >+++ /dev/null >@@ -1,41 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: responseXML MIME type tests</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[4]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#document-response-entity-body" data-tested-assertations="following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[10]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(type, succeed) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/status.py?content=<x><\/x>&type=" + encodeURIComponent(type), false) >- client.send(null) >- if(!succeed) >- assert_equals(client.responseXML, null) >- else >- assert_equals(client.responseXML.documentElement.localName, "x") >- }, document.title + " ('" + type + "', should "+(succeed?'':'not')+" parse)") >- } >- request("", true) >- request("text/html", false) >- request("bogus", true) >- request("bogus+xml", true) >- request("text/plain;+xml", false) >- request("text/plainxml", false) >- request("video/x-awesome+xml", true) >- request("video/x-awesome", false) >- request("text/xml", true) >- request("application", true) >- request("text/xsl", false) >- request("text/plain", false) >- request("application/rdf", false) >- request("application/xhtml+xml", true) >- request("image/svg+xml", true) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-document-types-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-document-types-expected.txt >deleted file mode 100644 >index 7b0e10ef5c9b0563fb2f9d75fd9c7c6f1c764726..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-document-types-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >- >-PASS XMLHttpRequest: responseXML/responseText on other responseType (arraybuffer) >-PASS XMLHttpRequest: responseXML/responseText on other responseType (blob) >-PASS XMLHttpRequest: responseXML/responseText on other responseType (json) >-PASS XMLHttpRequest: responseXML/responseText on other responseType (text) >-PASS XMLHttpRequest: responseXML/responseText on other responseType (document) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-document-types.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-document-types.htm >deleted file mode 100644 >index 84d90a8d35ae1d3da3494cd2681ed1ef8b7debc6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-document-types.htm >+++ /dev/null >@@ -1,45 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: responseXML/responseText on other responseType</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(type) { >- var test = async_test(document.title+' ('+type+')') >- test.step(function() { >- var client = new XMLHttpRequest() >- client.responseType = type >- client.open("GET", "resources/well-formed.xml", true) >- client.onload = function(){ >- test.step(function(){ >- if(type !== 'document'){ >- assert_throws("InvalidStateError", function() { >- var x = client.responseXML; >- }, 'responseXML throw for '+type) >- } >- if(type !== 'text'){ >- assert_throws("InvalidStateError", function() { >- var x = client.responseText; >- }, 'responseText throws for '+type) >- } >- test.done() >- }) >- } >- client.send(null) >- }) >- } >- request("arraybuffer") >- request("blob") >- request("json") >- request("text") >- request("document") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-well-formed-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-well-formed-expected.txt >deleted file mode 100644 >index 84426bb254b3be2f54d91a727bda9181d01f22fe..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-well-formed-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >- >-PASS XMLHttpRequest: responseXML non well-formed tests >-PASS XMLHttpRequest: responseXML non well-formed tests 1 >-PASS XMLHttpRequest: responseXML non well-formed tests 2 >-PASS XMLHttpRequest: responseXML non well-formed tests 3 >-PASS XMLHttpRequest: responseXML non well-formed tests 4 >-PASS XMLHttpRequest: responseXML non well-formed tests 5 >-PASS XMLHttpRequest: responseXML non well-formed tests 6 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-well-formed.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-well-formed.htm >deleted file mode 100644 >index 216da81706d4fcd166c31cb3366dd697fe4b52ae..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-well-formed.htm >+++ /dev/null >@@ -1,30 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: responseXML non well-formed tests</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[4]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#document-response-entity-body" data-tested-assertations="following::ol[1]/li[6] following::ol[1]/li[10]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(content) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/status.py?type=text/xml&content=" + encodeURIComponent(content), false) >- client.send(null) >- assert_equals(client.responseXML, null) >- }) >- } >- request("<x") >- request("<x></x") >- request("<x>&</x>") >- request("<x><y></x></y>") // misnested tags >- request("<x></x><y></y>") // two root elements is not allowed >- request("<x> <![CDATA[ foobar ]></x>") // CDATA should end with ]]> >- request("<x> <!CDATA[ foobar ]]></x>") // CDATA should start with <![ >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/security-consideration.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/security-consideration.sub-expected.txt >deleted file mode 100644 >index cae2145bced1868716261beff520ae0627eddf1d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/security-consideration.sub-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8801/XMLHttpRequest/resources/img.jpg due to access control checks. >- >-PASS ProgressEvent: security consideration >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/security-consideration.sub.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/security-consideration.sub.html >deleted file mode 100644 >index 5eb7110d41a874f77bfd9eb6070b47360d03c5e6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/security-consideration.sub.html >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>ProgressEvent: security consideration</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#security-considerations" data-tested-assertations="/following-sibling::p" /> >- <link rel="help" href="https://fetch.spec.whatwg.org/#http-fetch" data-tested-assertations="/following-sibling::ol[1]/li[3]/ol[1]/li[6]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- async_test(function() { >- var xhr = new XMLHttpRequest(); >- >- xhr.onprogress = this.unreached_func("MUST NOT dispatch progress event."); >- xhr.onload = this.unreached_func("MUST NOT dispatch load event."); >- xhr.onerror = this.step_func(function(pe) { >- assert_equals(pe.type, "error"); >- assert_equals(pe.loaded, 0, "loaded is zero."); >- assert_false(pe.lengthComputable, "lengthComputable is false."); >- assert_equals(pe.total, 0, "total is zero."); >- }); >- xhr.onloadend = this.step_func(function(pe) { >- assert_equals(pe.type, "loadend"); >- assert_equals(pe.loaded, 0, "loaded is zero."); >- assert_false(pe.lengthComputable, "lengthComputable is false."); >- assert_equals(pe.total, 0, "total is zero."); >- this.done(); >- }); >- xhr.open("GET", "http://{{host}}:{{ports[http][1]}}/XMLHttpRequest/resources/img.jpg", true); >- xhr.send(null); >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-expected.txt >deleted file mode 100644 >index e0fcb732667377270a2e578e23b913e97a45822d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Accept >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-language-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-language-expected.txt >deleted file mode 100644 >index aa3f9ba1d4b6ef3ca3b91e222fe5501fb07c67c1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-language-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS Send "sensible" default value, whatever that means >-PASS XMLHttpRequest: send() - Accept-Language >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-language.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-language.htm >deleted file mode 100644 >index 737b5c2a0ed71a89a4bea8623f05f3bb7d500548..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-language.htm >+++ /dev/null >@@ -1,27 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Accept-Language</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- client.open('GET', 'resources/inspect-headers.py?filter_name=accept-language', false) >- client.send(null) >- assert_regexp_match(client.responseText, /Accept-Language:\s.+/) >- }, 'Send "sensible" default value, whatever that means') >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/inspect-headers.py?filter_name=accept-language", false) >- client.setRequestHeader("Accept-Language", "x-GameSpeak") >- client.send(null) >- assert_equals(client.responseText, "Accept-Language: x-GameSpeak\n") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept.htm >deleted file mode 100644 >index 2731eb6be18d0d7ff5dff0c69d4bf902528407ff..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept.htm >+++ /dev/null >@@ -1,24 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Accept</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(text(),'*/*')]/.. following::code[contains(text(),'Accept')]/.. following::code[contains(text(),'Accept')]/../following::ul[1]/li[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/accept.py", false) >- client.send(null) >- assert_equals(client.responseText, "*/*") >- client.open("GET", "resources/accept.py", false) >- client.setRequestHeader("Accept", "x-something/vague, text/html5") >- client.send(null) >- assert_equals(client.responseText, "x-something/vague, text/html5") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt >deleted file mode 100644 >index 50328c60d08c8c46207f4b4b610515e74f4cd9da..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-Blocked access to external URL http://www1.localhost:8800/XMLHttpRequest/resources/auth1/corsenabled.py >-CONSOLE MESSAGE: line 31: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/auth1/corsenabled.py due to access control checks. >- >-PASS XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors.htm >deleted file mode 100644 >index fcacdd5fec4d991e0dee7ab1fe1957c2725f5982..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors.htm >+++ /dev/null >@@ -1,35 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[9]/ol[1]/li[1] following::ol[1]/li[9]/ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest(), >- urlstart = 'www1.'+location.host + location.pathname.replace(/\/[^\/]*$/, '/') >- client.withCredentials = true >- client.open("GET", location.protocol+'//'+urlstart + "resources/auth1/corsenabled.py", true, 'user', 'pass') >- client.setRequestHeader("x-user", 'user') >- client.setRequestHeader("x-pass", 'pass') >- client.onreadystatechange = function(){ >- if (client.readyState === 4) { >- test.step(function(){ >- assert_equals(client.responseText, '') >- assert_equals(client.status, 0) >- assert_equals(client.getResponseHeader('x-challenge'), null) >- test.done() >- }) >- } >- } >- client.send(null) >- }, document.title) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-expected.txt >deleted file mode 100644 >index 9af3489299509641f0afaf4025c98cad034201bd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: send() - "Basic" authenticated requests with user name and password passed to open() >-Note: this test will only work as expected once per browsing session. Restart browser to re-test. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-repeat-no-args-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-repeat-no-args-expected.txt >deleted file mode 100644 >index d84cd538f670a468c7310d715197fde960e40ed9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-repeat-no-args-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: send() - "Basic" authenticated requests with user name and password passed to open() in first request, without in second >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-repeat-no-args.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-repeat-no-args.htm >deleted file mode 100644 >index 464d69cf789ecff6309c0866929e566e1c2703a7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-repeat-no-args.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - "Basic" authenticated requests with user name and password passed to open() in first request, without in second</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/utils.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[9]/ol[1]/li[1] following::ol[1]/li[9]/ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest(), >- urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >- user = token() >- client.open("GET", location.protocol+'//'+urlstart + "resources/auth1/auth.py", false, user, 'pass') >- client.setRequestHeader("x-user", user) >- client.send(null) >- // Repeat request but *without* credentials in the open() call. >- // Is the UA supposed to cache credentials from above request and use them? Yes. >- client.open("GET", location.protocol+'//'+urlstart + "resources/auth1/auth.py", false) >- client.setRequestHeader("x-user", user) >- client.send(null) >- >- assert_equals(client.responseText, user + "\n" + 'pass') >- //assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT') >- >- }, document.title) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments-expected.txt >deleted file mode 100644 >index 58d5d277570d2ec5620930c59c86392fa938e9e8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader() and open() arguments (asserts header wins) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments.htm >deleted file mode 100644 >index 9915e8821c9a81f834de1e64d90aefb163fe6104..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader() and open() arguments (asserts header wins)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/utils.js"></script> >- <!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. --> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest(), >- urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >- user = token() >- client.open("GET", location.protocol+'//'+urlstart + "resources/auth9/auth.py", false, 'open-' + user, 'open-pass') >- client.setRequestHeader("x-user", user) >- client.setRequestHeader('Authorization', 'Basic ' + btoa(user + ":pass")) >- client.onreadystatechange = function () { >- if (client.readyState < 4) {return} >- test.step( function () { >- assert_equals(client.responseText, user + '\npass') >- assert_equals(client.status, 200) >- assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT') >- test.done() >- }) >- } >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader-expected.txt >deleted file mode 100644 >index 728a8dfeac25e04850e8b5240ecd476c3765b33d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader.htm >deleted file mode 100644 >index 84d0dd6b2cd4cf8ee502be30b73e6d128c77a106..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/utils.js"></script> >- <!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. --> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest(), >- urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >- user = token() >- client.open("GET", location.protocol+'//'+urlstart + "resources/auth2/auth.py", false) >- client.setRequestHeader("x-user", user) >- client.setRequestHeader('Authorization', 'Basic ' + btoa(user + ":pass")) >- client.onreadystatechange = function () { >- if (client.readyState < 4) {return} >- test.step( function () { >- assert_equals(client.responseText, user + '\npass') >- assert_equals(client.status, 200) >- assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT') >- test.done() >- } ) >- } >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic.htm >deleted file mode 100644 >index ae3ee571141172bc4b0432fe32811359a371740e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic.htm >+++ /dev/null >@@ -1,27 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - "Basic" authenticated requests with user name and password passed to open()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/utils.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[9]/ol[1]/li[1] following::ol[1]/li[9]/ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest(), >- urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >- user = token(); >- client.open("GET", location.protocol+'//'+urlstart + "resources/auth1/auth.py", false, user, 'pass') >- client.setRequestHeader("x-user", user) >- client.send(null) >- assert_equals(client.responseText, user + "\n" + 'pass') >- assert_equals(client.getResponseHeader('x-challenge'), 'DID') >- }, document.title) >- </script> >- <p>Note: this test will only work as expected once per browsing session. Restart browser to re-test.</p> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords-expected.txt >deleted file mode 100644 >index dbd8ed85889b4024f5e798f720808ae48b54a509..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >- >-PASS XMLHttpRequest: send() - "Basic" authenticated requests with competing user name/password options user/pass in open() call >-PASS XMLHttpRequest: send() - "Basic" authenticated requests with competing user name/password options another user/pass in open() call - must override cached credentials from previous test >-PASS XMLHttpRequest: send() - "Basic" authenticated requests with competing user name/password options user/pass both in URL userinfo AND open() call - expexted that open() wins >-PASS XMLHttpRequest: send() - "Basic" authenticated requests with competing user name/password options user/pass *only* in URL userinfo >-PASS XMLHttpRequest: send() - "Basic" authenticated requests with competing user name/password options user name in URL userinfo, password in open() call: user name wins and password is thrown away >-FAIL XMLHttpRequest: send() - "Basic" authenticated requests with competing user name/password options user name and password in URL userinfo, only user name in open() call: user name in open() wins assert_true: responseText should contain the right user and password expected true got false >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords.htm >deleted file mode 100644 >index d58d9e002d7f99b6b6ea373c18264b3587806e0d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords.htm >+++ /dev/null >@@ -1,54 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - "Basic" authenticated requests with competing user name/password options</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/utils.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[9]/ol[1]/li[1] following::ol[1]/li[9]/ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> </head> >- <body> >- <div id="log"></div> >- <script> >- function request(user1, pass1, user2, pass2, name) { >- // user1, pass1 will if given become userinfo part of URL >- // user2, pass2 will if given be passed to open() call >- test(function() { >- var client = new XMLHttpRequest(), >- urlstart = "", userwin, passwin >- // if user2 is set, winning user name and password is 2 >- if(user2) >- userwin = user2, passwin = pass2 >- // if user1 is set, and user2 is not set, user1 and pass1 win >- if(user1 && ! user2) >- userwin = user1, passwin = pass1 >- // if neither user name is set, pass 2 wins (there will be no userinfo in URL) >- if (!(user1 || user2)) >- passwin = pass2 >- if(user1) { // should add userinfo to URL (there is no way to create userinfo part of URL with only password in) >- urlstart = "http://" + user1 >- if(pass1) >- urlstart += ":" + pass1 >- urlstart += "@" + location.host + location.pathname.replace(/\/[^\/]*$/, '/') >- } >- client.open("GET", urlstart + "resources/authentication.py", false, user2, pass2) >- client.setRequestHeader("x-user", userwin) >- client.send(null) >- assert_true(client.responseText == ((userwin||'') + "\n" + (passwin||'')), 'responseText should contain the right user and password') >- >- // We want to send multiple requests to the same realm here, so we try to make the UA forget its (cached) credentials between each test.. >- // forcing a 401 response to (hopefully) "log out" >- // NOTE: This is commented out because it causes authentication prompts while running the test >- //client.open('GET', "resources/authentication.py?logout=1", false) >- //client.send() >- }, document.title+' '+name) >- } >- request(null, null, token(), token(), 'user/pass in open() call') >- request(null, null, token(), token(), 'another user/pass in open() call - must override cached credentials from previous test') >- request("userinfo-user", "userinfo-pass", token(), token(), 'user/pass both in URL userinfo AND open() call - expexted that open() wins') >- request(token(), token(), null, null, 'user/pass *only* in URL userinfo') >- request(token(), null, null, token(), 'user name in URL userinfo, password in open() call: user name wins and password is thrown away') >- request("1", token(), token(), null, 'user name and password in URL userinfo, only user name in open() call: user name in open() wins') >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-basic-setrequestheader-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-basic-setrequestheader-expected.txt >deleted file mode 100644 >index d5a62981ea16496036a01237362bb43749c28d3b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-basic-setrequestheader-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >-Blocked access to external URL http://www1.localhost:8800/XMLHttpRequest/resources/auth2/corsenabled.py >- >-FAIL XMLHttpRequest: send() - "Basic" authenticated CORS request using setRequestHeader() (expects to succeed) A network error occurred. >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm >deleted file mode 100644 >index de9c5e543038c3527e3fb55b0e8e75728ce0f0a5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm >+++ /dev/null >@@ -1,30 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - "Basic" authenticated CORS request using setRequestHeader() (expects to succeed)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/utils.js"></script> >- </head> >- <body> >- <div id="log"></div> >- <script> >- async_test(test => { >- var client = new XMLHttpRequest(), >- urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >- user = token() >- client.open("GET", location.protocol+'//www1.'+urlstart + "resources/auth2/corsenabled.py", false) >- client.withCredentials = true >- client.setRequestHeader("x-user", user) >- client.setRequestHeader("x-pass", 'pass') >- client.setRequestHeader('Authorization', 'Basic ' + btoa(user + ":pass")) >- client.onload = test.step_func_done(() => { >- assert_equals(client.responseText, user + '\npass', 'responseText should contain the right user and password') >- assert_equals(client.status, 200) >- assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT') >- }) >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred-expected.txt >deleted file mode 100644 >index 783b53c5ea6a774226aa1cb4742233ea45049ee5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >-Blocked access to external URL http://www1.localhost:8800/XMLHttpRequest/resources/auth7/corsenabled.py >-Blocked access to external URL http://www1.localhost:8800/XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py >- >-FAIL CORS request with setRequestHeader auth to URL accepting Authorization header assert_true: responseText should contain the right user and password expected true got false >-PASS CORS request with setRequestHeader auth to URL NOT accepting Authorization header >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm >deleted file mode 100644 >index 14edf5bd778ef49eba175be9dd8d657a86426e9c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm >+++ /dev/null >@@ -1,61 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - "Basic" authenticated CORS request using setRequestHeader() but not setting withCredentials (expects to succeed)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="/common/utils.js"></script> >- <!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. --> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function doTest(desc, pathsuffix, conditionsFunc, errorFunc, endFunc) { >- var test = async_test(desc) >- test.step(function() { >- var client = new XMLHttpRequest(), >- urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >- user = token() >- client.open("GET", location.protocol + "//www1." + urlstart + "resources/" + pathsuffix, false) >- client.setRequestHeader("x-user", user) >- client.setRequestHeader("x-pass", 'pass') >- client.setRequestHeader("Authorization", "Basic " + btoa(user + ":pass")) >- client.onerror = test.step_func(errorFunc) >- client.onreadystatechange = test.step_func(function () { >- if(client.readyState < 4) {return} >- conditionsFunc(client, test, user) >- }) >- if(endFunc) { >- client.onloadend = test.step_func(endFunc) >- } >- client.send(null) >- }) >- } >- >- doTest("CORS request with setRequestHeader auth to URL accepting Authorization header", "auth7/corsenabled.py", function (client, test, user) { >- assert_true(client.responseText == (user + "\npass"), "responseText should contain the right user and password") >- assert_equals(client.status, 200) >- assert_equals(client.getResponseHeader("x-challenge"), "DID-NOT") >- test.done() >- }, function(){ >- assert_unreached("Cross-domain request is permitted and should not cause an error") >- this.done() >- }) >- >- var errorFired = false; >- doTest("CORS request with setRequestHeader auth to URL NOT accepting Authorization header", "auth8/corsenabled-no-authorize.py", function (client, test, user) { >- assert_equals(client.responseText, '') >- assert_equals(client.status, 0) >- }, function(e){ >- errorFired = true >- assert_equals(e.type, 'error', 'Error event fires when Authorize is a user-set header but not allowed by the CORS endpoint') >- }, function() { >- assert_true(errorFired, 'The error event should fire') >- this.done() >- }) >- >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt >deleted file mode 100644 >index 94e991784c3255e9ca014e6b211476b466955227..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt >+++ /dev/null >@@ -1,10 +0,0 @@ >- >-FAIL Synchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Synchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >-FAIL Synchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Synchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type.html >deleted file mode 100644 >index e7ab989fdc663ae31537581bef60ebe9efe63084..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type.html >+++ /dev/null >@@ -1,61 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[2]/p[3]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::a[contains(@href,'#blob-response-entity-body')]/.."/> >- >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Blob data with no mime type</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var blobTests = [ >- ["no mime type", new Blob(["data"])], >- ["invalid mime type", new Blob(["data"], {type: "Invalid \r\n mime \r\n type"})] >- ]; >- >- function doSyncTest(testItem, method) { >- test(function() { >- var xhr = new XMLHttpRequest(); >- xhr.open(method, "./resources/content.py", false); >- xhr.send(testItem[1]); >- >- assert_equals(xhr.getResponseHeader("X-Request-Content-Length"), "4"); >- assert_equals(xhr.getResponseHeader("X-Request-Content-Type"), "NO"); >- }, "Synchronous blob loading with " + testItem[0] + " [" + method + "]"); >- } >- >- function doAsyncTest(testItem, method) { >- var atest = async_test("Asynchronous blob loading with " + testItem[0] + " [" + method + "]"); >- atest.step(function() { >- var xhr = new XMLHttpRequest(); >- xhr.onreadystatechange = function() { >- if (xhr.readyState == 4) { >- atest.step(function() { >- assert_equals(xhr.getResponseHeader("X-Request-Content-Length"), "4"); >- assert_equals(xhr.getResponseHeader("X-Request-Content-Type"), "NO"); >- }); >- atest.done(); >- } >- } >- xhr.open(method, "./resources/content.py", true); >- xhr.send(testItem[1]); >- }); >- } >- >- blobTests.forEach(function(item){ >- doSyncTest(item, "POST"); >- doAsyncTest(item, "POST"); >- >- doSyncTest(item, "PUT"); >- doAsyncTest(item, "PUT"); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-cors-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-cors-expected.txt >deleted file mode 100644 >index dae382b4a27c8edd7fc0bd4bf5eb45418384bbf8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-cors-expected.txt >+++ /dev/null >@@ -1,10 +0,0 @@ >-Blocked access to external URL http://www1.localhost:8800/XMLHttpRequest/resources/conditional.py?tag=0.45864598185251126 >-CONSOLE MESSAGE: line 37: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/conditional.py?tag=0.45864598185251126 due to access control checks. >-Blocked access to external URL http://www1.localhost:8800/XMLHttpRequest/resources/conditional.py?tag=0.3336103787755589&cors=yes >-CONSOLE MESSAGE: line 37: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/conditional.py?tag=0.3336103787755589&cors=yes due to access control checks. >- >-Harness Error (TIMEOUT), message = null >- >-TIMEOUT 304 without appropriate CORS header Test timed out >-TIMEOUT 304 with appropriate CORS header Test timed out >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-cors.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-cors.htm >deleted file mode 100644 >index f46f18a1db4f01b13eadb9d4cdb54d83d5160243..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-cors.htm >+++ /dev/null >@@ -1,42 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: send() - conditional cross-origin requests</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<script src=/cors/support.js?pipe=sub></script> >-<div id=log></div> >-<script> >-function request(withCORS, desc) { >- async_test(t => { >- const client = new XMLHttpRequest, >- identifier = Math.random(), >- cors = withCORS ? "&cors=yes" : "", >- url = CROSSDOMAIN + "resources/conditional.py?tag=" + identifier + cors >- client.onload = t.step_func(() => { >- assert_equals(client.status, 200) >- assert_equals(client.statusText, "OK") >- assert_equals(client.responseText, "MAYBE NOT") >- >- if(withCORS) { >- client.onload = t.step_func_done(() => { >- assert_equals(client.status, 304) >- assert_equals(client.statusText, "SUPERCOOL") >- assert_equals(client.responseText, "") >- }) >- } else { >- client.onload = null >- client.onerror = t.step_func_done(() => { >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- }) >- } >- client.open("GET", url) >- client.setRequestHeader("If-None-Match", identifier) >- client.send() >- }) >- client.open("GET", url) >- client.send() >- }, desc) >-} >-request(false, "304 without appropriate CORS header") >-request(true, "304 with appropriate CORS header") >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-expected.txt >deleted file mode 100644 >index 62a105cc45501985cd6fd0d1f0063a8661b28898..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: send() - conditional requests (tag) >-PASS XMLHttpRequest: send() - conditional requests (date) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional.htm >deleted file mode 100644 >index cbe3e94a4250ae6b0150af10d68dc6ad95606ee6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional.htm >+++ /dev/null >@@ -1,34 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - conditional requests</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(text(),'Modified')]/.." /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(type) { >- test(function() { >- var client = new XMLHttpRequest, >- identifier = type == "tag" ? Math.random() : new Date().toGMTString(), >- url = "resources/conditional.py?" + type + "=" + identifier >- client.open("GET", url, false) >- client.send(null) >- assert_equals(client.status, 200) >- assert_equals(client.statusText, "OK") >- assert_equals(client.responseText, "MAYBE NOT") >- client.open("GET", url, false) >- client.setRequestHeader(type == "tag" ? "If-None-Match" : "If-Modified-Since", identifier) >- client.send(null) >- assert_equals(client.status, 304) >- assert_equals(client.statusText, "SUPERCOOL") >- assert_equals(client.responseText, "") >- }, document.title + " (" + type + ")") >- } >- request("tag") >- request("date") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-charset-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-charset-expected.txt >deleted file mode 100644 >index dbba02d27fdb57eb8ad9cfada4b6d9fa79e2fee4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-charset-expected.txt >+++ /dev/null >@@ -1,13 +0,0 @@ >- >-FAIL header with invalid MIME type is not changed assert_equals: expected "text; charset=ascii" but got "text; charset=UTF-8" >-PASS known charset but bogus header - missing MIME type >-PASS bogus charset and bogus header - missing MIME type >-FAIL Correct text/plain MIME with charset assert_equals: expected "text/plain;charset=utf-8" but got "text/plain;charset=UTF-8" >-PASS If no charset= param is given, implementation should not add one - unknown MIME >-PASS If no charset= param is given, implementation should not add one - known MIME >-FAIL charset given but wrong, fix it (unknown MIME, bogus charset) assert_equals: expected "text/x-thepiano;charset=UTF-8" but got "text/x-thepiano;charset= UTF-8" >-FAIL charset given but wrong, fix it (known MIME, bogus charset) assert_equals: expected "text/plain;charset=utf-8;charset=UTF-8" but got "text/plain;charset=UTF-8;charset=UTF-8" >-PASS charset given but wrong, fix it (known MIME, actual charset) >-PASS If multiple charset parameters are given, all should be rewritten >-PASS No content type set, give MIME and charset >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-charset.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-charset.htm >deleted file mode 100644 >index 9e93279d6ba15f196bbd4d864aebdce55a0a7f62..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-charset.htm >+++ /dev/null >@@ -1,83 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - charset parameter of Content-Type</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4]/p/code[contains(text(),'Content-Type')]/.. following::ol[1]/li[4]/p/code[contains(text(),'Content-Type')]/../following-sibling::p" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-a-string" data-tested-assertations="following::p[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(input, output, title) { >- title = title || document.title + ' - ' + input; >- test(function() { >- var client = new XMLHttpRequest() >- client.open("POST", "resources/content.py", false) >- if(input) >- client.setRequestHeader("Content-Type", input) >- client.send("TEST") >- assert_equals(client.responseText, "TEST") >- assert_equals(client.getResponseHeader("x-request-content-type"), output) >- }, title) >- } >- >- request( >- "text; charset=ascii", >- "text; charset=ascii", >- "header with invalid MIME type is not changed" >- ) >- request( >- "charset=ascii", >- "charset=ascii", >- "known charset but bogus header - missing MIME type" >- ) >- request( >- "charset=bogus", >- "charset=bogus", >- "bogus charset and bogus header - missing MIME type" >- ) >- request( >- "text/plain;charset=utf-8", >- "text/plain;charset=utf-8", >- "Correct text/plain MIME with charset" >- ) >- request( >- "text/x-pink-unicorn", >- "text/x-pink-unicorn", >- "If no charset= param is given, implementation should not add one - unknown MIME" >- ) >- request( >- "text/plain", >- "text/plain", >- "If no charset= param is given, implementation should not add one - known MIME" >- ) >- request( >- "text/x-thepiano;charset= waddup", >- "text/x-thepiano;charset=UTF-8", >- "charset given but wrong, fix it (unknown MIME, bogus charset)" >- ) >- request( >- "text/plain;charset=utf-8;charset=waddup", >- "text/plain;charset=utf-8;charset=UTF-8", >- "charset given but wrong, fix it (known MIME, bogus charset)" >- ) >- request( >- "text/plain;charset=shift-jis", >- "text/plain;charset=UTF-8", >- "charset given but wrong, fix it (known MIME, actual charset)" >- ) >- request( >- "text/x-pink-unicorn; charset=windows-1252; charset=bogus; notrelated; charset=ascii", >- "text/x-pink-unicorn; charset=UTF-8; charset=UTF-8; notrelated; charset=UTF-8", >- "If multiple charset parameters are given, all should be rewritten" >- ) >- request( >- null, >- "text/plain;charset=UTF-8", >- "No content type set, give MIME and charset" >- ) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-string-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-string-expected.txt >deleted file mode 100644 >index 9be8889d1785bce12009307ca61f440fac550a1b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-string-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Content-Type >-PASS XMLHttpRequest: send() - Content-Type 1 >-PASS XMLHttpRequest: send() - Content-Type 2 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-string.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-string.htm >deleted file mode 100644 >index 6c2c00823c6aab1e22ff15e5eca23d78f2407d02..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-string.htm >+++ /dev/null >@@ -1,26 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Content-Type</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-document" data-tested-assertations="following::p[1] following::p[2] following::p[3]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(data, expected_type) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("POST", "resources/content.py", false) >- client.send(data) >- assert_equals(client.getResponseHeader("x-request-content-type"), expected_type) >- }) >- } >- request("TEST", "text/plain;charset=UTF-8") >- function init(fr) { request(fr.contentDocument, fr.getAttribute("data-t")) } >- </script> >- <iframe src="resources/win-1252-xml.py" onload="init(this)" data-t="application/xml;charset=UTF-8"></iframe> >- <iframe src="resources/win-1252-html.py" onload="init(this)" data-t="text/html;charset=UTF-8"></iframe> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybuffer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybuffer-expected.txt >deleted file mode 100644 >index a2b24fd49cea58a0644024ccd62c1969fe5fc256..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybuffer-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >-CONSOLE MESSAGE: line 44: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >- >-PASS XMLHttpRequest: The send() method: ArrayBuffer data >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybuffer.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybuffer.htm >deleted file mode 100644 >index 25c5d24072788b32e4bcf136c7eb5a37b9d39148..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybuffer.htm >+++ /dev/null >@@ -1,48 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[1]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: ArrayBuffer data</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- var buf = new ArrayBuffer(5); >- var arr = new Uint8Array(buf); >- arr[0] = 0x48; >- arr[1] = 0x65; >- arr[2] = 0x6c; >- arr[3] = 0x6c; >- arr[4] = 0x6f; >- >- xhr.onreadystatechange = function() >- { >- if (xhr.readyState == 4) >- { >- test.step(function() >- { >- assert_equals(xhr.status, 200); >- assert_equals(xhr.response, "Hello"); >- >- test.done(); >- }); >- } >- }; >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send(buf); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybufferview-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybufferview-expected.txt >deleted file mode 100644 >index 9a2d0d1cf6ab8155e85931383bebd9fb57eeec9a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybufferview-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: ArrayBufferView data >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybufferview.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybufferview.htm >deleted file mode 100644 >index 4de7e9e8920b4e38d8a336065415b9998c08cc0f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybufferview.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[1]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: ArrayBufferView data</title> >- <link rel="author" title="Ondrej Zara" href="mailto:ondrej.zara@gmail.com"> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var str = "Hello"; >- var bytes = str.split("").map(function(ch) { return ch.charCodeAt(0); }); >- var xhr = new XMLHttpRequest(); >- var arr = new Uint8Array(bytes); >- >- xhr.onload = test.step_func_done(function() { >- assert_equals(xhr.status, 200); >- assert_equals(xhr.response, str); >- }); >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send(arr); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-blob-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-blob-expected.txt >deleted file mode 100644 >index b94f11caac180199f4f2676d85b30fac70ab8e50..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-blob-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: Blob data >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-blob.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-blob.htm >deleted file mode 100644 >index 5285fc180cc979e33c567f537e8575abf285db50..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-blob.htm >+++ /dev/null >@@ -1,62 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[2]/p[3]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::a[contains(@href,'#blob-response-entity-body')]/.."/> >- >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Blob data</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- var xhr2 = new XMLHttpRequest(); >- >- var content = "Hello"; >- var blob; >- >- xhr.onreadystatechange = function() >- { >- if (xhr.readyState == 4) >- { >- test.step(function() >- { >- blob = xhr.response; >- assert_true(blob instanceof Blob, "Blob from XHR Response"); >- >- xhr2.open("POST", "./resources/content.py", true); >- xhr2.send(blob); >- }); >- } >- } >- >- xhr2.onreadystatechange = function() >- { >- if (xhr2.readyState == 4) >- { >- test.step(function() >- { >- assert_equals(xhr2.status, 200); >- assert_equals(xhr2.response, content); >- test.done(); >- }); >- } >- }; >- >- xhr.open("GET", "./resources/content.py?content=" + content, true); >- xhr.responseType = "blob"; >- xhr.send(); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-es-object-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-es-object-expected.txt >deleted file mode 100644 >index 3a2fc33f656bb5afd90b99f0cfc0e6db72f6ed2d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-es-object-expected.txt >+++ /dev/null >@@ -1,12 +0,0 @@ >- >-PASS sending a plain empty object >-PASS sending the ES Math object >-PASS sending a new XHR instance >-PASS sending object that stringifies to undefined >-PASS sending object that stringifies to null >-PASS object that stringifies to query string >-PASS object that stringifies to JSON string >-PASS object whose valueOf() returns a document - ignore valueOf(), stringify >-PASS object whose toString() returns a document, expected to throw >-PASS object whose toString() throws, expected to throw >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-es-object.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-es-object.htm >deleted file mode 100644 >index 6f7743286ecdd06a52ce545d56dfb1589242996e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-es-object.htm >+++ /dev/null >@@ -1,61 +0,0 @@ >-<!doctype html> >-<meta charset=utf-8> >-<title>XMLHttpRequest: passing objects to send()</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol/li[4]" /> >-<link rel="help" href="https://heycam.github.io/webidl/#es-union" data-tested-assertations="following::ol/li[16]" /> >- >-<div id="log"></div> >- >-<script> >- function do_test(obj, expected, name) { >- var test = async_test(name) >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onload = test.step_func(function () { >- assert_equals(client.responseText, expected) >- test.done() >- }); >- client.open('POST', 'resources/content.py') >- if (expected.exception) { >- assert_throws(expected.exception, function(){client.send(obj)}) >- test.done() >- } else { >- client.send(obj) >- } >- }); >- } >- >- do_test({}, '[object Object]', 'sending a plain empty object') >- do_test(Math, '[object Math]', 'sending the ES Math object') >- do_test(new XMLHttpRequest, '[object XMLHttpRequest]', 'sending a new XHR instance') >- do_test({toString:function(){}}, 'undefined', 'sending object that stringifies to undefined') >- do_test({toString:function(){return null}}, 'null', 'sending object that stringifies to null') >- var ancestor = {toString: function(){ >- var ar=[] >- for (var prop in this) { >- if (this.hasOwnProperty(prop)) { >- ar.push(prop+'='+this[prop]) >- } >- }; >- return ar.join('&') >- }}; >- >- var myObj = Object.create(ancestor, {foo:{value:1, enumerable: true}, bar:{value:'foo', enumerable:true}}) >- do_test(myObj, 'foo=1&bar=foo', 'object that stringifies to query string') >- >- var myFakeJSON = {a:'a', b:'b', toString:function(){ return JSON.stringify(this, function(key, val){ return key ==='toString'?undefined:val; }) }} >- do_test(myFakeJSON, '{"a":"a","b":"b"}', 'object that stringifies to JSON string') >- >- var myFakeDoc1 = {valueOf:function(){return document}} >- do_test(myFakeDoc1, '[object Object]', 'object whose valueOf() returns a document - ignore valueOf(), stringify') >- >- var myFakeDoc2 = {toString:function(){return document}} >- do_test(myFakeDoc2, {exception:new TypeError()}, 'object whose toString() returns a document, expected to throw') >- >- var myThrower = {toString:function(){throw {name:'FooError', message:'bar'}}} >- do_test(myThrower, {exception:{name:'FooError'}}, 'object whose toString() throws, expected to throw') >- >- >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-formdata-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-formdata-expected.txt >deleted file mode 100644 >index e08e7572c60eeb345dfb94e34a7926350fd4ae1e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-formdata-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: FormData data >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-formdata.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-formdata.htm >deleted file mode 100644 >index 9456aa77c53585f0c13bac628770521428e6022a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-formdata.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[5]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#interface-formdata" data-tested-assertations="following::*[contains(@id,'dom-formdata')]/following::ol[1]/li[1] following::*[contains(@id,'dom-formdata')]/following::ol[1]/li[3] following::*[contains(@id,'dom-formdata-append')]/following::ul[1]/li[1] following::*[contains(@id,'dom-formdata-append')]/following::ul[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: FormData data</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- var form = new FormData(); >- form.append("id", "0"); >- form.append("value", "zero"); >- >- xhr.onreadystatechange = test.step_func(() => { >- if (xhr.readyState == 4) { >- assert_equals(xhr.status, 200); >- assert_equals(xhr.response, "id:0;value:zero;"); >- test.done(); >- } >- }); >- >- xhr.open("POST", "./resources/form.py", true); >- xhr.send(form); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring-expected.txt >deleted file mode 100644 >index 563198b4525b98b65f06a4eb684bde3d7b0cf8e7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS abort() called from data stringification >-PASS open() called from data stringification >-PASS send() called from data stringification >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring.htm >deleted file mode 100644 >index b8a3b4ae6902357cfe392c484e8413bff1729061..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring.htm >+++ /dev/null >@@ -1,56 +0,0 @@ >-<!doctype html> >-<meta charset=utf-8> >-<title>XMLHttpRequest: passing objects that interfere with the XHR instance to send()</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol/li[4]" /> >-<link rel="help" href="https://heycam.github.io/webidl/#es-union" data-tested-assertations="following::ol/li[16]" /> >- >- >-<div id="log"></div> >- >-<script> >- var test1 = async_test('abort() called from data stringification') >- test1.step(function() { >- var client = new XMLHttpRequest() >- var objAbortsOnStringification = {toString:function(){ >- client.abort(); >- }} >- client.open('POST', 'resources/content.py') >- client.send(objAbortsOnStringification) >- assert_equals(client.readyState, 1) >- test1.done() >- }); >- >- var test2 = async_test('open() called from data stringification') >- test2.step(function() { >- var client = new XMLHttpRequest() >- var objOpensOnStringification = {toString:function(){ >- client.open('POST', 'resources/status.py?text=second_open_wins'); >- }} >- client.onloadend = test2.step_func(function(){ >- assert_equals(client.statusText, 'second_open_wins') >- test2.done() >- }) >- client.open('POST', 'resources/status.py?text=first_open_wins') >- client.send(objOpensOnStringification) >- }); >- >- var test3 = async_test('send() called from data stringification') >- test3.step(function() { >- var client = new XMLHttpRequest() >- var objSendsOnStringification = {toString:function(){ >- client.send('bomb!'); >- }} >- client.onload = test3.step_func(function(){ >- assert_equals(client.responseText, 'bomb!') >- test3.done() >- }) >- client.open('POST', 'resources/content.py') >- assert_throws('InvalidStateError', function(){ >- client.send(objSendsOnStringification) >- }) >- }); >- >- >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-basic-expected.txt >deleted file mode 100644 >index d48bce0ef570befa0a6d4bbf6c4e1497dc3cf440..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-basic-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >- >-PASS XMLHttpRequest: send() - data argument (1) >-PASS XMLHttpRequest: send() - data argument (10000000) >-PASS XMLHttpRequest: send() - data argument (2,2) >-PASS XMLHttpRequest: send() - data argument (false) >-PASS XMLHttpRequest: send() - data argument (A\0A) >-PASS XMLHttpRequest: send() - data argument (1=2&3=4) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-basic.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-basic.htm >deleted file mode 100644 >index 526a1fb349e54dc69a69bbd62d75e6fbc86928dc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-basic.htm >+++ /dev/null >@@ -1,28 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - data argument</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="/following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(input, output) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("POST", "resources/content.py", false) >- client.send(input) >- assert_equals(client.responseText, output) >- }, document.title + " (" + output + ")") >- } >- request(1, "1") >- request(10000000, "10000000") >- request([2,2], "2,2") >- request(false, "false") >- request("A\0A", "A\0A") >- request(new URLSearchParams([[1, 2], [3, 4]]), "1=2&3=4") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document-bogus-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document-bogus-expected.txt >deleted file mode 100644 >index e3e1b6bc820b6a63a3e722f8420b0b6a469af5c9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document-bogus-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS Serializing documents through XMLHttpRequest: '' >-PASS Serializing documents through XMLHttpRequest: '<test:test/>' >-PASS Serializing documents through XMLHttpRequest: '<test:test test:test="gee"/>' >-FAIL Serializing documents through XMLHttpRequest: '<test:test test:test="gee" x="�"/>' assert_equals: expected "<test:test test:test=\"gee\" x=\"\ufffd\"/>" but got "<test:test test:test=\"gee\" x=\"\ufffd\ufffd\ufffd\"/>" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document-bogus.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document-bogus.htm >deleted file mode 100644 >index c10e70aa38d30a008fb4f5016bd6054991149ccf..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document-bogus.htm >+++ /dev/null >@@ -1,26 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: send() - Document with serialization errors</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<div id="log"></div> >-<script> >-function serialize(input, output) { >- async_test(t => { >- const client = new XMLHttpRequest >- client.open("POST", "resources/content.py") >- client.send(input) >- client.onload = t.step_func_done(() => { >- assert_equals(client.responseText, output) >- }) >- }, "Serializing documents through XMLHttpRequest: '" + output + "'") >-} >- >-var doc = document.implementation.createDocument(null, null, null) >-serialize(doc, "") >-doc.appendChild(doc.createElement("test:test")) >-serialize(doc, "<test:test/>") >-doc.childNodes[0].setAttribute("test:test", "gee") >-serialize(doc, "<test:test test:test=\"gee\"/>") >-doc.childNodes[0].setAttribute("x", "\uD800") >-serialize(doc, "<test:test test:test=\"gee\" x=\"\uFFFD\"/>") >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document-expected.txt >deleted file mode 100644 >index f2762e072f48fb78e7f21e295abbbc466cedd207..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >- >-PASS XML document, windows-1252 >-PASS HTML document, invalid UTF-8 >-PASS HTML document, shift-jis >-PASS plain text file >-PASS image file >-PASS img tag >-PASS empty div >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document.htm >deleted file mode 100644 >index e3a1070826b559d15d0089d35f1d9d6589aaef3d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document.htm >+++ /dev/null >@@ -1,92 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Document</title> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="/following::ol/li[4]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-document" data-tested-assertations="/following::dd" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var tests = [ >- { >- title: 'XML document, windows-1252', >- url: 'resources/win-1252-xml.py', >- contentType: 'application/xml;charset=UTF-8', >- responseText: '<\u00FF\/>' >- }, >- // Invalid character code in document turns into U+FFFD. >- { >- title: 'HTML document, invalid UTF-8', >- url: 'resources/invalid-utf8-html.py', >- contentType: 'text/html;charset=UTF-8', >- responseText: '<body>\uFFFD<\/body>' >- }, >- // Correctly serialized Shift-JIS. >- { >- title: 'HTML document, shift-jis', >- url: 'resources/shift-jis-html.py', >- contentType: 'text/html;charset=UTF-8', >- responseText: '<body>\u30C6\u30b9\u30c8<\/body>' >- }, >- // There's some markup included, but it's not really relevant for this >- // test suite, so we do an indexOf() test. >- { >- title: 'plain text file', >- url: 'folder.txt', >- contentType: 'text/html;charset=UTF-8', >- responseText: 'top' >- }, >- // This test does not want to assert anything about what markup a >- // standalone image should be wrapped in. Hence this test lacks a >- // responseText expectation. >- { >- title: 'image file', >- url: 'resources/image.gif', >- contentType: 'text/html;charset=UTF-8' >- }, >- { >- title: 'img tag', >- url: 'resources/img-utf8-html.py', >- contentType: 'text/html;charset=UTF-8', >- responseText: '<img>foo' >- }, >- { >- title: 'empty div', >- url: 'resources/empty-div-utf8-html.py', >- contentType: 'text/html;charset=UTF-8', >- responseText: '<!DOCTYPE html><html><head></head><body><div></div></body></html>' >- } >- ]; >- >- tests.forEach(function(t) { >- async_test(function() { >- var iframe = document.createElement("iframe"); >- iframe.onload = this.step_func_done(function() { >- var client = new XMLHttpRequest() >- client.open("POST", "resources/content.py?response_charset_label=UTF-8", false) >- client.send(iframe.contentDocument) >- assert_equals(client.getResponseHeader('X-Request-Content-Type'), >- t.contentType, >- 'document should be serialized and sent as ' + t.contentType) >- // The indexOf() assertion will overlook some stuff, e.g. XML >- // prologues that shouldn't be there (looking at you, Presto). >- // However, arguably these things have little to do with the XHR >- // functionality we're testing. >- if (t.responseText) { >- assert_true(client.responseText.indexOf(t.responseText) != -1, >- JSON.stringify(t.responseText) + " not in " + >- JSON.stringify(client.responseText)); >- } >- assert_equals(client.responseXML, null) >- }); >- iframe.src = t.url; >- document.body.appendChild(iframe); >- }, t.title); >- }); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt >deleted file mode 100644 >index 8fae72185146db871ada747091aaef434bc1d9fb..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS XMLHttpRequest: send("") - empty entity body (POST) >-PASS XMLHttpRequest: send("") - empty entity body (PUT) >-PASS XMLHttpRequest: send("") - empty entity body (HEAD) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty.htm >deleted file mode 100644 >index f307e778091edf13a268e92d9137429c64305a02..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty.htm >+++ /dev/null >@@ -1,26 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send("") - empty entity body</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[7]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-a-string" data-tested-assertations="following::p[1] following::p[2] following::p[3]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(method) { >- var client = new XMLHttpRequest() >- client.open(method, "resources/content.py", false) >- client.upload.onloadstart = function(){assert_unreached('this event should not fire for empty strings')} >- client.send("") >- var expectedLength = method == "HEAD" ? "NO" : "0"; >- assert_equals(client.getResponseHeader("x-request-content-length"), expectedLength) >- } >- test(function() { request("POST"); }, document.title + " (POST)"); >- test(function() { request("PUT"); }, document.title + " (PUT)"); >- test(function() { request("HEAD"); }, document.title + " (HEAD)"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt >deleted file mode 100644 >index 63b783d0155192276c0a28fd3187b38ecf8a7927..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (GET) >-FAIL XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (HEAD) assert_equals: expected "NO" but got "0" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async.htm >deleted file mode 100644 >index 4a7deec034a3fb8ec036fa56a8861c15594c1b7f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async.htm >+++ /dev/null >@@ -1,39 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::OL[1]/LI[3] following::OL[1]/LI[7] following::OL[1]/LI[8]" /> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(method) { >- var test = async_test( document.title + " (" + method + ")") >- var events=[] >- var logEvt = function (e) { >- events.push(e.type) >- } >- var client = new XMLHttpRequest() >- client.open(method, "resources/content.py") >- client.upload.addEventListener('progress', logEvt) >- client.upload.addEventListener('loadend', logEvt) >- client.upload.addEventListener('loadstart', logEvt) >- client.addEventListener('loadend', function(){ >- test.step(function(){ >- assert_equals(client.getResponseHeader("x-request-content-length"), "NO") >- assert_equals(client.getResponseHeader("x-request-method"), method) >- assert_equals(client.responseText, "") >- assert_array_equals(events, []) >- test.done() >- }) >- }) >- client.send("TEST") >- } >- request("GET") >- request("HEAD") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt >deleted file mode 100644 >index 60b03670e1073b43b982a27bf07ac6a3716997b6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD (GET) >-FAIL XMLHttpRequest: send() - non-empty data argument and GET/HEAD (HEAD) assert_equals: expected "NO" but got "0" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head.htm >deleted file mode 100644 >index 95ff711b858d966cf53a897534c64bb0d0356d33..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - non-empty data argument and GET/HEAD</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::OL[1]/LI[3] following::OL[1]/LI[7]" /> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(method) { >- test(function() { >- var events=[] >- var logEvt = function (e) { >- events.push(e.type) >- } >- var client = new XMLHttpRequest() >- client.open(method, "resources/content.py", false) >- client.send("TEST") >- client.upload.addEventListener('progress', logEvt) >- client.upload.addEventListener('loadend', logEvt) >- client.upload.addEventListener('loadstart', logEvt) >- >- assert_equals(client.getResponseHeader("x-request-content-length"), "NO") >- assert_equals(client.getResponseHeader("x-request-method"), method) >- assert_equals(client.responseText, "") >- assert_array_equals(events, []) >- }, document.title + " (" + method + ")") >- } >- request("GET") >- request("HEAD") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt >deleted file mode 100644 >index f626d206f979272f4c83eb7f50d30e1ac001551e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >- >-PASS No content type (POST) >-PASS No content type (PUT) >-PASS No content type (HEAD) >-PASS Explicit content type (POST) >-PASS Explicit content type (PUT) >-FAIL Explicit content type (HEAD) assert_equals: expected "NO" but got "0" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none.htm >deleted file mode 100644 >index d757cb30a9fa36fb7bfd3c34fe44097d768909b5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none.htm >+++ /dev/null >@@ -1,40 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send(null) - no entity body</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[7]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function noContentTypeTest(method) { >- var client = new XMLHttpRequest() >- client.open(method, "resources/content.py", false) >- client.upload.onloadstart = function(){assert_unreached('this event should not fire for null')} >- client.send(null) >- var expectedLength = method == "HEAD" ? "NO" : "0"; >- assert_equals(client.getResponseHeader("x-request-content-length"), expectedLength) >- assert_equals(client.getResponseHeader("x-request-content-type"), "NO") >- } >- test(function() { noContentTypeTest("POST"); }, "No content type (POST)"); >- test(function() { noContentTypeTest("PUT"); }, "No content type (PUT)"); >- test(function() { noContentTypeTest("HEAD"); }, "No content type (HEAD)"); >- >- function explicitContentTypeTest(method) { >- var client = new XMLHttpRequest() >- client.open(method, "resources/content.py", false) >- var content_type = 'application/x-foo' >- client.setRequestHeader('Content-Type', content_type) >- client.send(null) >- var expectedLength = method == "HEAD" ? "NO" : "0"; >- assert_equals(client.getResponseHeader("x-request-content-length"), expectedLength) >- assert_equals(client.getResponseHeader("x-request-content-type"), content_type) >- } >- test(function() { explicitContentTypeTest("POST"); }, "Explicit content type (POST)"); >- test(function() { explicitContentTypeTest("PUT"); }, "Explicit content type (PUT)"); >- test(function() { explicitContentTypeTest("HEAD"); }, "Explicit content type (HEAD)"); >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt >deleted file mode 100644 >index 2f459f587478eae2dd51c9dde619374d795b9057..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-Blocked access to external URL http://nonexistent-origin.localhost:8800/ >-CONSOLE MESSAGE: line 43: XMLHttpRequest cannot load http://nonexistent-origin.localhost:8800/ due to access control checks. >- >-PASS XMLHttpRequest: The send() method: Fire a progress event named error when Network error happens (synchronous flag is unset) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub.htm >deleted file mode 100644 >index c803efa7d0e43443dd9d51d6d51113e3c684675d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub.htm >+++ /dev/null >@@ -1,47 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onerror" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[9]/ol/li[2] following::ol[1]/li[9]/ol/li[3]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[4] following::dd[4]/p" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[7] following::ol[1]/li[7]/ol/li[3] following::ol[1]/li[7]/ol/li[4] following::ol[1]/li[9] following::ol[1]/li[10]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Fire a progress event named error when Network error happens (synchronous flag is unset)</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function(){ >- var xhr = new XMLHttpRequest(); >- var expect = ["loadstart", "upload.loadstart", 4, "upload.error", "upload.loadend", "error", "loadend"]; >- var actual = []; >- >- xhr.onreadystatechange = test.step_func(() => { >- if (xhr.readyState == 4) { >- actual.push(xhr.readyState); >- } >- }); >- >- xhr.onloadstart = test.step_func(e => { actual.push(e.type); }) >- xhr.onloadend = test.step_func_done(e => { >- actual.push(e.type); >- assert_array_equals(actual, expect); >- }) >- xhr.onerror = test.step_func(e => { actual.push(e.type); }) >- >- xhr.upload.onloadstart = test.step_func(e => { actual.push("upload." + e.type); }) >- xhr.upload.onloadend = test.step_func(e => { actual.push("upload." + e.type); }) >- xhr.upload.onerror = test.step_func(e => { actual.push("upload." + e.type); }) >- >- xhr.open("POST", "http://nonexistent-origin.{{host}}:{{ports[http][0]}}", true); >- xhr.send("Test Message"); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt >deleted file mode 100644 >index 6a078341a78b6f96bebd1f9ae3c4f846b9624578..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-Blocked access to external URL http://nonexistent-origin.localhost:8800/ >- >-PASS http URL >-PASS data URL >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub.htm >deleted file mode 100644 >index b89958060f359716864fe0dd4e24dc084c6d29fd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub.htm >+++ /dev/null >@@ -1,45 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[4] following::dd[4]/p" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[5]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Throw a "throw an "NetworkError" exception when Network error happens (synchronous flag is set)</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- test(function() >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.open("POST", "http://nonexistent-origin.{{host}}:{{ports[http][0]}}", false); >- >- assert_throws("NetworkError", function() >- { >- xhr.send("Test Message"); >- }); >- assert_equals(xhr.readyState, 4) >- >- }, "http URL"); >- >- test(function() >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.open("GET", "data:text/html;charset=utf-8;base64,PT0NUWVBFIGh0bWw%2BDQo8", false); >- >- assert_throws("NetworkError", function() >- { >- xhr.send("Test Message"); >- }); >- assert_equals(xhr.readyState, 4) >- >- }, "data URL"); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadend-expected.txt >deleted file mode 100644 >index 7f4f0a0fd2b9f658c12f3fb8b9e972acc9a92ca8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadend-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: Fire a progress event named loadend (no response entity body) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadend.htm >deleted file mode 100644 >index 0a1eda53734694fb03e5b8c94fd460a1f5354876..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadend.htm >+++ /dev/null >@@ -1,48 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Fire a progress event named loadend (no response entity body)</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="/../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="/../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[10] /following-sibling::ol/li[10]" /> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function () >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.onreadystatechange = function() >- { >- test.step(function() >- { >- if (xhr.readyState == 4) >- { >- assert_equals(xhr.response, ""); >- } >- }); >- }; >- >- xhr.onloadend = function(e) >- { >- test.step(function() >- { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "loadend"); >- test.step(function() { test.done(); }); >- }); >- }; >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send(); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadstart-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadstart-expected.txt >deleted file mode 100644 >index 033a7d10d21be65adfbfb98bae032b0889850339..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadstart-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: Fire a progress event named loadstart (no response entity body and the state is LOADING) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadstart.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadstart.htm >deleted file mode 100644 >index cd4a0683ed0698d0a64c3aa114f4bdc923f62ac4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadstart.htm >+++ /dev/null >@@ -1,48 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="/../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="/../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="/following-sibling::ol/li[9]/ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="/following-sibling::ol/li[1]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Fire a progress event named loadstart (no response entity body and the state is LOADING)</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.onreadystatechange = function() >- { >- test.step(function() >- { >- if (xhr.readyState == 3) >- { >- assert_equals(xhr.response, ""); >- } >- else if (xhr.readyState == 4) >- { >- assert_unreached("loadstart event did not fire in LOADING state!"); >- } >- }); >- }; >- >- xhr.onloadstart = function() >- { >- test.step(function() { test.done("Test done!"); }); >- }; >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send(); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-order-expected.txt >deleted file mode 100644 >index 55d15f278bb45077919b4a0638a2feba132a1362..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-order-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-FAIL XMLHttpRequest: The send() method: event order when there is no response entity body assert_equals: expected "progress(0,0,false)" but got "readystatechange(4)" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-order.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-order.htm >deleted file mode 100644 >index 44c1d779786a5f7f99e27623620bee58dbee9b48..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-order.htm >+++ /dev/null >@@ -1,45 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[9]/ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[10] following::a[contains(@href,'#switch-done')]/.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[7]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following-sibling::ol/li[1]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-event-order.js"></script> >- <title>XMLHttpRequest: The send() method: event order when there is no response entity body</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- prepare_xhr_for_event_order_test(xhr); >- >- xhr.addEventListener("readystatechange", test.step_func(function() { >- if (xhr.readyState == 3) { >- assert_equals(xhr.response, ""); >- } >- })); >- >- xhr.addEventListener("loadend", test.step_func(function(e) { >- assert_xhr_event_order_matches([1, "loadstart(0,0,false)", 2, "progress(0,0,false)", 4,"load(0,0,false)", "loadend(0,0,false)"]); >- test.done(); >- })); >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send(); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin-expected.txt >deleted file mode 100644 >index 155f5a44c167db2c65b9fefef322c3fe13a29704..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin-expected.txt >+++ /dev/null >@@ -1,23 +0,0 @@ >-CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load mailto:test@example.org due to access control checks. >-CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load tel:+31600000000 due to access control checks. >-CONSOLE MESSAGE: line 21: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load http://127.0.0.1:8800/ due to access control checks. >-CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load javascript:alert('FAIL') due to access control checks. >-CONSOLE MESSAGE: line 21: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load http://127.0.0.1:8800/folder.txt due to access control checks. >-CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load about:blank due to access control checks. >-CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load blob:bogusidentifier due to access control checks. >- >-PASS XMLHttpRequest: send() - non same-origin (mailto:test@example.org) >-PASS XMLHttpRequest: send() - non same-origin (tel:+31600000000) >-PASS XMLHttpRequest: send() - non same-origin (http://127.0.0.1:8800) >-PASS XMLHttpRequest: send() - non same-origin (javascript:alert('FAIL')) >-PASS XMLHttpRequest: send() - non same-origin (folder.txt) >-PASS XMLHttpRequest: send() - non same-origin (about:blank) >-PASS XMLHttpRequest: send() - non same-origin (blob:bogusidentifier) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.htm >deleted file mode 100644 >index 6dbbca7477d2fa0ebd1132e23bd1a2565d550ea2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - non same-origin</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <base> >- </head> >- <body> >- <div id="log"></div> >- <script src="/common/get-host-info.sub.js"></script> >- <script> >- // Setting base URL before running the tests >- var host_info = get_host_info(); >- document.getElementsByTagName("base")[0].setAttribute("href", host_info.HTTP_REMOTE_ORIGIN); >- >- function url(url) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", url, false) >- assert_throws("NetworkError", function() { client.send() }) >- }, document.title + " (" + url + ")") >- } >- url("mailto:test@example.org") >- url("tel:+31600000000") >- url(host_info.HTTP_REMOTE_ORIGIN) >- url("javascript:alert('FAIL')") >- url("folder.txt") >- url("about:blank") >- url("blob:bogusidentifier") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub-expected.txt >deleted file mode 100644 >index ee88c8520b383ed7c0fb88703ecb328233e02d2c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub-expected.txt >+++ /dev/null >@@ -1,17 +0,0 @@ >-CONSOLE MESSAGE: line 23: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load mailto:test@example.org due to access control checks. >-CONSOLE MESSAGE: line 23: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load tel:+31600000000 due to access control checks. >-CONSOLE MESSAGE: line 23: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load http://127.0.0.1:8800/ due to access control checks. >-CONSOLE MESSAGE: line 23: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load javascript:alert('FAIL') due to access control checks. >-CONSOLE MESSAGE: line 23: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load http://127.0.0.1:8800/folder.txt due to access control checks. >- >-PASS XMLHttpRequest: send() - non same-origin (mailto:test@example.org) >-PASS XMLHttpRequest: send() - non same-origin (tel:+31600000000) >-PASS XMLHttpRequest: send() - non same-origin (http://127.0.0.1:8800) >-PASS XMLHttpRequest: send() - non same-origin (javascript:alert('FAIL')) >-PASS XMLHttpRequest: send() - non same-origin (folder.txt) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub.htm >deleted file mode 100644 >index 91c3845617fbd2d38af04bd7e4006ebce296613b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - non same-origin</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <base> >- <link rel="help" href="https://xhr.spec.whatwg.org/#cross-origin-request-steps" data-tested-assertations="/following::DL[2]/DT[1] /following::DL[2]/DD[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#cross-origin-request-event-rules" data-tested-assertations="/following::DL[1]/DT[2] /following::DL[1]/DD[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script src="/common/get-host-info.sub.js"></script> >- <script> >- // Setting base URL before running the tests >- var host_info = get_host_info(); >- document.getElementsByTagName("base")[0].setAttribute("href", host_info.HTTP_REMOTE_ORIGIN); >- >- function url(url) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", url, false) >- assert_throws("NetworkError", function() { client.send() }) >- }, document.title + " (" + url + ")") >- } >- url("mailto:test@example.org") >- url("tel:+31600000000") >- url(host_info.HTTP_REMOTE_ORIGIN) >- url("javascript:alert('FAIL')") >- url("folder.txt") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-receive-utf16-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-receive-utf16-expected.txt >deleted file mode 100644 >index 53d131eb2a9bba89a815830c7616d6facb577f54..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-receive-utf16-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS UTF-16 with BOM, no encoding in content-type >-PASS UTF-16 without BOM, with charset label in content-type >-PASS UTF-16 without BOM, mislabelled as UTF-8 in content-type >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-receive-utf16.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-receive-utf16.htm >deleted file mode 100644 >index 6d6fb90a173daaa19c05f99a63fa361258f4266a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-receive-utf16.htm >+++ /dev/null >@@ -1,37 +0,0 @@ >-<!doctype html> >-<meta charset=utf-8> >-<title>XMLHttpRequest: The send() method: receive data which is UTF-16 encoded</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#text-response" data-tested-assertations="following::ol/li[9]" /> >-<div id="log"></div> >- >-<script> >- async_test(function() { >- var client = new XMLHttpRequest(); >- client.onload = this.step_func_done(function(e) { >- assert_equals(client.responseText, 'æøå\nãã¹ã\n') >- }); >- client.open("GET", "resources/utf16.txt"); >- client.send(null); >- }, 'UTF-16 with BOM, no encoding in content-type'); >- >- async_test(function() { >- var client = new XMLHttpRequest(); >- client.onload = this.step_func_done(function(e) { >- assert_equals(client.responseText, 'æøå\nãã¹ã\n') >- }); >- client.open("GET", "resources/status.py?code=200&type=text%2Fplain%3Bcharset%3DUTF-16&content=%E6%00%F8%00%E5%00%0A%00%C6%30%B9%30%C8%30%0A%00"); >- client.send(null); >- }, 'UTF-16 without BOM, with charset label in content-type'); >- >- async_test(function() { >- var client = new XMLHttpRequest(); >- client.onload = this.step_func_done(function(e) { >- // plenty of EF BF BD Replacement Character in this invalid input.. >- assert_equals(client.responseText, "\ufffd\u0000\ufffd\u0000\ufffd\u0000\u000a\u0000\ufffd\u0030\ufffd\u0030\ufffd\u0030\u000a\u0000") >- }); >- client.open("GET", "resources/status.py?code=200&type=text%2Fplain%3Bcharset%3DUTF-8&content=%E6%00%F8%00%E5%00%0A%00%C6%30%B9%30%C8%30%0A%00"); >- client.send(null); >- }, 'UTF-16 without BOM, mislabelled as UTF-8 in content-type'); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-expected.txt >deleted file mode 100644 >index 0e84b6e87cba62ffaadd5fff59305d6f4b378e7b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Redirects (bogus Location header) (302: http://example.not) >-PASS XMLHttpRequest: send() - Redirects (bogus Location header) (302: mailto:someone@example.org) >-PASS XMLHttpRequest: send() - Redirects (bogus Location header) (303: http://example.not) >-PASS XMLHttpRequest: send() - Redirects (bogus Location header) (303: foobar:someone@example.org) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-sync-expected.txt >deleted file mode 100644 >index 2aa86b92a16392af2c4dda50e13c15d09eb608c9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-sync-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Redirects (bogus Location header; sync) (301: foobar://abcd) >-PASS XMLHttpRequest: send() - Redirects (bogus Location header; sync) (302: http://z) >-PASS XMLHttpRequest: send() - Redirects (bogus Location header; sync) (302: mailto:someone@example.org) >-PASS XMLHttpRequest: send() - Redirects (bogus Location header; sync) (303: http://z) >-PASS XMLHttpRequest: send() - Redirects (bogus Location header; sync) (303: tel:1234567890) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-sync.htm >deleted file mode 100644 >index 89e6ff0ebdf5706d9d6d0aa2be3c189f6f913b1f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-sync.htm >+++ /dev/null >@@ -1,26 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Redirects (bogus Location header; sync)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/ol/li[1] following::dl[1]/dd[2]/ol/li[3]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function redirect(code, location) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/redirect.py?location=" + location + "&code=" + code, false) >- assert_throws("NetworkError", function() { client.send(null) }) >- }, document.title + " (" + code + ": " + location + ")") >- } >- redirect("301", "foobar://abcd") >- redirect("302", "http://z") >- redirect("302", "mailto:someone@example.org") >- redirect("303", "http://z") >- redirect("303", "tel:1234567890") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus.htm >deleted file mode 100644 >index a46fc1d339e485fb03d4a2d866a61d71a3f9e0bd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Redirects (bogus Location header)</title> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/ol/li[1] following::dl[1]/dd[2]/ol/li[3]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function redirect(code, location) { >- var test = async_test(document.title + " (" + code + ": " + location + ")", {timeout: 20000}) >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 4) { >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- test.done() >- } >- }) >- } >- client.open("GET", "resources/redirect.py?location=" + location + "&code=" + code) >- client.send(null) >- }) >- } >- redirect("302", "http://example.not") >- redirect("302", "mailto:someone@example.org") >- redirect("303", "http://example.not") >- redirect("303", "foobar:someone@example.org") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt >deleted file mode 100644 >index f0176b89d3b063f7b3d43716527000bae747be43..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Redirects (basics) (301) >-PASS XMLHttpRequest: send() - Redirects (basics) (302) >-FAIL XMLHttpRequest: send() - Redirects (basics) (303) assert_equals: expected "application/x-pony" but got "NO" >-PASS XMLHttpRequest: send() - Redirects (basics) (307) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-expected.txt >deleted file mode 100644 >index 5d84b4ffcd68ca888b22e47906684779d180de88..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Redirects (infinite loop) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync-expected.txt >deleted file mode 100644 >index 29fb9049fa5c7bf008607ea8e29c340a39439cdc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Redirects (infinite loop; sync) (301) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync.htm >deleted file mode 100644 >index 6e9e47e55fc9f84d480623ff75fe0dc3b51eaea0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync.htm >+++ /dev/null >@@ -1,24 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Redirects (infinite loop; sync)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/p[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[5]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function redirect(code) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/infinite-redirects.py?type="+code, false) >- assert_throws("NetworkError", function() { client.send(null) }) >- }, document.title + " (" + code + ")") >- } >- redirect("301") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite.htm >deleted file mode 100644 >index 54e2ea8948508b32e1da57c3dddac2ad06f2f9bc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite.htm >+++ /dev/null >@@ -1,35 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Redirects (infinite loop)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onerror" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/p[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[9] following::ol[1]/li[10]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[3]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- var client = new XMLHttpRequest(), >- errorEventFired = false, >- code = 301 >- client.open("GET", "resources/infinite-redirects.py?type="+code) >- client.onerror = function(){ >- errorEventFired = true >- } >- client.onloadend = function(){ >- test.step(function() { >- assert_equals(errorEventFired, true) >- assert_equals(client.responseText, '') >- assert_equals(client.readyState, 4) >- test.done() >- }) >- } >- client.send(null) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-no-location-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-no-location-expected.txt >deleted file mode 100644 >index f58eaf74618d12ba14e9b192be509a0da4d28934..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-no-location-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Redirects (no Location header) (301) >-PASS XMLHttpRequest: send() - Redirects (no Location header) (302) >-PASS XMLHttpRequest: send() - Redirects (no Location header) (303) >-PASS XMLHttpRequest: send() - Redirects (no Location header) (307) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-no-location.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-no-location.htm >deleted file mode 100644 >index 3a80348fd73cab12220b5d52f51085d4e811bab4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-no-location.htm >+++ /dev/null >@@ -1,40 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Redirects (no Location header)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2]" /> >- <!-- >- NOTE: the XHR spec does not really handle this scenario. It's handled in the Fetch spec: >- "If response's headers do not contain a header whose name is Location, return response." >- --> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function redirect(code) { >- var test = async_test(document.title + " (" + code + ")") >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 4) { >- assert_equals(client.status + "", code) >- assert_equals(client.statusText, "ABE ODDYSSEE") >- assert_equals(client.responseXML.documentElement.localName, "x") >- test.done() >- } >- }) >- } >- client.open("GET", "resources/status.py?content=<x>x<\/x>&type=text/xml&text=ABE ODDYSSEE&code=" + code) >- client.send(null) >- }) >- } >- redirect("301") >- redirect("302") >- redirect("303") >- redirect("307") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload-expected.txt >deleted file mode 100644 >index 2dd47d13f49f1480a8eee87b7769b3cfec478415..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: POSTing to URL that redirects (301) >-PASS XMLHttpRequest: The send() method: POSTing to URL that redirects (302) >-PASS XMLHttpRequest: The send() method: POSTing to URL that redirects (303) >-FAIL XMLHttpRequest: The send() method: POSTing to URL that redirects (307) assert_array_equals: events firing in expected order and states lengths differ, expected 9 got 10 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm >deleted file mode 100644 >index 37a90d42cbd508954c42814a31a3af3d06f06711..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm >+++ /dev/null >@@ -1,124 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::dt[@id="dom-xmlhttprequest-send-bodyinit"]/following::dd[1]/p[2] following::ol[1]/li[9]//li[1] following::ol[1]/li[9]//li[2]" /> >- <link rel="help" href="https://fetch.spec.whatwg.org/#http-fetch" data-tested-assertations="following::ol[1]/li[6]/dl/dd[1]//dd[3]" /> >- <link rel="help" href="https://fetch.spec.whatwg.org/#concept-http-redirect-fetch" data-tested-assertations="following::li[16]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: POSTing to URL that redirects</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- function testRedirectPost(code, shouldResendPost) { >- var test = async_test(document.title + " (" + code + ")"); >- var actual = []; >- // We check upload.onprogress with a boolean because it *might* fire more than once >- var progressFiredReadyState1 = false; >- >- var expectedHeaders, expectedEvents; >- >- // 307 redirects should resend the POST data, and events and headers will be a little different.. >- if(shouldResendPost) { >- expectedHeaders = { >- "X-Request-Content-Length": "11988", >- "X-Request-Content-Type": "text/plain;charset=UTF-8", >- "X-Request-Method": "POST", >- "X-Request-Query": "NO", >- "Content-Length": "11988" >- } >- expectedEvents = [ >- "xhr onreadystatechange 1", >- "xhr loadstart 1", >- "upload loadstart 1", >- "upload loadend 1", >- "xhr onreadystatechange 2", >- "xhr onreadystatechange 3", >- "xhr onreadystatechange 4", >- "xhr load 4", >- "xhr loadend 4" >- ]; >- } else { >- // setting the right expectations for POST resent as GET without request body >- expectedHeaders = { >- "X-Request-Content-Length": "NO", >- "X-Request-Content-Type": "NO", >- "X-Request-Method": "GET", >- "X-Request-Query": "NO" >- } >- expectedEvents = [ >- "xhr onreadystatechange 1", >- "xhr loadstart 1", >- "upload loadstart 1", >- "upload loadend 1", >- "xhr onreadystatechange 2", >- /* we expect no onreadystatechange readyState=3 event because there is no loading content */ >- "xhr onreadystatechange 4", >- "xhr load 4", >- "xhr loadend 4" >- ]; >- } >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.upload.onloadstart = test.step_func(function(e) { >- actual.push("upload loadstart " + xhr.readyState); >- }); >- xhr.upload.onprogress = test.step_func(function(e) { >- // events every 50ms, one final when uploading is done >- if(xhr.readyState >= xhr.HEADERS_RECEIVED) { >- assert_equals(xhr.status, 200, "JS never gets to see the 30x status code"); >- } >- progressFiredReadyState1 = xhr.readyState === xhr.OPENED; >- }); >- xhr.upload.onloadend = test.step_func(function() { >- actual.push("upload loadend " + xhr.readyState); >- }); >- xhr.onloadstart = test.step_func(function() { >- actual.push("xhr loadstart " + xhr.readyState); >- }); >- xhr.onreadystatechange = test.step_func(function() { >- if(xhr.readyState >= xhr.HEADERS_RECEIVED) { >- assert_equals(xhr.status, 200, "JS never gets to see the 30x status code"); >- } >- actual.push("xhr onreadystatechange " + xhr.readyState); >- }); >- xhr.onload = test.step_func(function(e) >- { >- actual.push("xhr load " + xhr.readyState); >- }); >- xhr.onloadend = test.step_func(function(e) >- { >- actual.push("xhr loadend " + xhr.readyState); >- >- assert_true(progressFiredReadyState1, "One progress event should fire on xhr.upload when readyState is 1"); >- >- // Headers will tell us if data was sent when expected >- for(var header in expectedHeaders) { >- assert_equals(xhr.getResponseHeader(header), expectedHeaders[header], header); >- } >- >- assert_array_equals(actual, expectedEvents, "events firing in expected order and states"); >- test.done(); >- }); >- >- xhr.open("POST", "./resources/redirect.py?location=content.py&code=" + code, true); >- xhr.send((new Array(1000)).join("Test Message")); >- }); >- } >- >- >- testRedirectPost(301, false); >- testRedirectPost(302, false); >- testRedirectPost(303, false); >- testRedirectPost(307, true); >- >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-cors-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-cors-expected.txt >deleted file mode 100644 >index ffc5949057ad30b7afffac5c75c974b73ff16abd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-cors-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Redirect to CORS-enabled resource (301) >-PASS XMLHttpRequest: send() - Redirect to CORS-enabled resource (302) >-PASS XMLHttpRequest: send() - Redirect to CORS-enabled resource (303) >-PASS XMLHttpRequest: send() - Redirect to CORS-enabled resource (307) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-cors.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-cors.htm >deleted file mode 100644 >index 04a2a1ffe87d28e4433be6b4aded9215acafd40f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-cors.htm >+++ /dev/null >@@ -1,87 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Redirect to CORS-enabled resource</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function extractBody(body) { >- if (body === null) { >- return { body: "", type: "NO" }; >- } >- if (typeof body == "string") { >- return { body: body, type: "text/plain;charset=UTF-8" }; >- } >- if (body instanceof Uint8Array) { >- var arr = Array.prototype.slice.call(body); >- return { body: String.fromCharCode.apply(null, arr), type: "NO" } >- } >- return { body: "EXTRACT NOT IMPLEMENTED", type: "EXTRACT NOT IMPLEMENTED" } >- } >- >- function redirect(code, name = code, method = "GET", body = null, explicitType = null, safelistContentType = false) { >- async_test(t => { >- var client = new XMLHttpRequest() >- client.onreadystatechange = t.step_func(() => { >- if (client.readyState == 4) { >- if (explicitType !== "application/x-pony" || safelistContentType) { >- var { body: expectedBody, type: expectedType } = extractBody(body); >- if (explicitType !== null) { >- expectedType = explicitType >- } >- if (((code === "301" || code === "302") && method === "POST") || code === "303") { >- method = "GET" >- expectedBody = "" >- } >- assert_equals(client.status, 200); >- assert_equals(client.getResponseHeader("x-request-method"), method); >- assert_equals(client.getResponseHeader("x-request-content-type"), expectedType); >- assert_equals(client.getResponseHeader("x-request-data"), expectedBody); >- } else { >- // "application/x-pony" is not safelisted by corsenabled.py -> network error >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- assert_equals(client.responseText, "") >- assert_equals(client.responseXML, null) >- } >- t.done(); >- } >- }) >- let safelist = "" >- if (safelistContentType) { >- safelist = "?safelist_content_type" >- } >- client.open(method, "resources/redirect.py?location="+encodeURIComponent("http://www2."+location.host+(location.pathname.replace(/[^\/]+$/, ''))+'resources/corsenabled.py')+safelist+"&code=" + code) >- if (explicitType !== null) { >- client.setRequestHeader("Content-Type", explicitType) >- } >- client.send(body) >- }, document.title + " (" + name + ")") >- } >- redirect("301") >- redirect("301", "301 GET with explicit Content-Type", "GET", null, "application/x-pony") >- redirect("301", "301 GET with explicit Content-Type safelisted", "GET", null, "application/x-pony", true) >- redirect("302") >- redirect("303") >- redirect("303", "303 LALA with string and explicit Content-Type safelisted", "LALA", "test", "application/x-pony", true) >- redirect("307") >- redirect("307", "307 post with null", "POST", null) >- redirect("307", "307 post with string", "POST", "hello") >- redirect("307", "307 post with typed array", "POST", new Uint8Array([65, 66, 67])) >- redirect("301", "301 POST with string and explicit Content-Type", "POST", "yoyo", "application/x-pony") >- redirect("301", "301 POST with string and explicit Content-Type safelisted", "POST", "yoyo", "application/x-pony", true) >- redirect("302", "302 POST with string and explicit Content-Type", "POST", "yoyo", "application/x-pony") >- redirect("307", "307 POST with string and explicit Content-Type", "POST", "yoyo", "application/x-pony") >- redirect("307", "307 FOO with string and explicit Content-Type", "FOO", "yoyo", "application/x-pony") >- redirect("308", "308 POST with string and explicit Content-Type", "POST", "yoyo", "application/x-pony") >- redirect("308", "308 FOO with string and explicit Content-Type", "FOO", "yoyo", "application/x-pony") >- redirect("308", "308 FOO with string and explicit Content-Type text/plain", "FOO", "yoyo", "text/plain") >- redirect("308", "308 FOO with string and explicit Content-Type multipart/form-data", "FOO", "yoyo", "multipart/form-data") >- redirect("308", "308 FOO with string and explicit Content-Type safelisted", "FOO", "yoyo", "application/thunderstorm", true) >- redirect("307", "307 POST with string and explicit Content-Type safelisted", "POST", "yoyo", "application/thunderstorm", true) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-non-cors-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-non-cors-expected.txt >deleted file mode 100644 >index e8f9934b346675006bf782629ca8f34b775afaf2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-non-cors-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (301) >-PASS XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (302) >-PASS XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (303) >-PASS XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (307) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-non-cors.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-non-cors.htm >deleted file mode 100644 >index c6886a57b59361c09ffaea9016050c1a183dbff0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-non-cors.htm >+++ /dev/null >@@ -1,37 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/ol/li[1] following::dl[1]/dd[2]/ol/li[3]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function redirect(code) { >- var test = async_test(document.title + " (" + code + ")") >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 4) { >- assert_equals(client.getResponseHeader("x-request-method"), null) >- assert_equals(client.getResponseHeader("x-request-content-type"), null) >- assert_equals(client.responseText, '') >- test.done() >- } >- }) >- } >- client.open("GET", "resources/redirect.py?location="+encodeURIComponent("http://www2."+location.host+(location.pathname.replace(/[^\/]+$/, ''))+'resources/content.py')+"&code=" + code) >- client.setRequestHeader("Content-Type", "application/x-pony") >- client.send(null) >- }) >- } >- redirect("301") >- redirect("302") >- redirect("303") >- redirect("307") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect.htm >deleted file mode 100644 >index 16b3231e25b4d78712f2f29df6ca5221c1964356..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - Redirects (basics)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/ol/li[1] following::dl[1]/dd[2]/ol/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function redirect(code) { >- var test = async_test(document.title + " (" + code + ")") >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- if(client.readyState == 4) { >- assert_equals(client.getResponseHeader("x-request-method"), "GET") >- assert_equals(client.getResponseHeader("x-request-content-type"), "application/x-pony") >- test.done() >- } >- }) >- } >- client.open("GET", "resources/redirect.py?location=content.py&code=" + code) >- client.setRequestHeader("Content-Type", "application/x-pony") >- client.send(null) >- }) >- } >- redirect("301") >- redirect("302") >- redirect("303") >- redirect("307") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-event-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-event-order-expected.txt >deleted file mode 100644 >index aa24d3009aa51e9a34afaf5c28dfdf4f6fc9799f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-event-order-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-FAIL XMLHttpRequest: The send() method: event order when synchronous flag is unset assert_equals: expected "upload.loadstart(0,12,true)" but got "upload.loadstart(0,0,false)" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-event-order.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-event-order.htm >deleted file mode 100644 >index 041cb23c6ea891c0e0dc4f0bc165bff71249a5bc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-event-order.htm >+++ /dev/null >@@ -1,40 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[9]/ol/li[2] following-sibling::ol/li[9]/ol/li[3] following::a[contains(@href,'#make-upload-progress-notifications')]/.. following::a[contains(@href,'#make-progress-notifications')]/.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#make-upload-progress-notifications" data-tested-assertations="following::ul[1]/li[1] following::ul[1]/li[2]/ol[1]/li[2] following::ul[1]/li[2]/ol[1]/li[3] following::ul[1]/li[2]/ol[1]/li[4]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#make-progress-notifications" data-tested-assertations=".." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::a[contains(@href,'#switch-done')]/.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[5] following::ol[1]/li[6] following::ol[1]/li[7]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-event-order.js"></script> >- <title>XMLHttpRequest: The send() method: event order when synchronous flag is unset</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- prepare_xhr_for_event_order_test(xhr); >- >- xhr.addEventListener("loadend", test.step_func(function() { >- assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,12,true)", "upload.progress(12,12,true)", "upload.load(12,12,true)", "upload.loadend(12,12,true)", 2, 3, "progress(12,12,true)", 4, "load(12,12,true)", "loadend(12,12,true)"]); >- test.done(); >- })); >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send("Test Message"); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadend-expected.txt >deleted file mode 100644 >index e7d6e6e1e6ac0cbb54aa6dc6581bd715a0ce0413..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadend-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: Fire a progress event named loadend on the XMLHttpRequestUpload (synchronous flag is unset) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadend.htm >deleted file mode 100644 >index 99a239ab135d78e2a3568e6894e63939fb29f5a1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadend.htm >+++ /dev/null >@@ -1,40 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::a[contains(@href,'#make-upload-progress-notifications')]/.. following::ol[1]/li[8]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#make-upload-progress-notifications" data-tested-assertations="following::ul[1]/li[2]/ol[1]/li[4]" /> >- >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Fire a progress event named loadend on the XMLHttpRequestUpload (synchronous flag is unset)</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.upload.onloadend = function(e) >- { >- test.step(function() >- { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "loadend"); >- assert_equals(e.target, xhr.upload); >- test.done(); >- }); >- }; >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send("Test Message"); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadstart-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadstart-expected.txt >deleted file mode 100644 >index d1cbab6b5e3894ae25a460e9fc1057d3234f607a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadstart-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: Fire a progress event named loadstart on the XMLHttpRequestUpload (synchronous flag is unset) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadstart.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadstart.htm >deleted file mode 100644 >index 7a9be9f8ca4714f18d26eb7e350c177a60421e15..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadstart.htm >+++ /dev/null >@@ -1,39 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[8] following-sibling::ol/li[9]/ol/li[3]" /> >- >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Fire a progress event named loadstart on the XMLHttpRequestUpload (synchronous flag is unset)</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.upload.onloadstart = function(e) >- { >- test.step(function() >- { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "loadstart"); >- assert_equals(e.target, xhr.upload); >- test.done(); >- }); >- }; >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send("Test Message"); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-progress-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-progress-expected.txt >deleted file mode 100644 >index ce4cc9b7846a6b634c3e6d4455905b8be9ab997c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-progress-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: Fire a progress event named progress on the XMLHttpRequestUpload (synchronous flag is unset) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-progress.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-progress.htm >deleted file mode 100644 >index 914aed7255a76e690aba34d5512cecebb716c02b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-progress.htm >+++ /dev/null >@@ -1,39 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::a[contains(@href,'#make-upload-progress-notifications')]/.. following::ol[1]/li[8]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#make-upload-progress-notifications" data-tested-assertations="following::ul[1]/li[2]/ol[1]/li[2]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Fire a progress event named progress on the XMLHttpRequestUpload (synchronous flag is unset)</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- >- xhr.upload.onprogress = function(e) >- { >- test.step(function() >- { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "progress"); >- assert_equals(e.target, xhr.upload); >- test.done(); >- }); >- }; >- >- xhr.open("POST", "./resources/content.py", true); >- xhr.send("Test Message"); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send-expected.txt >deleted file mode 100644 >index 2a6b6c95dc9e91a04f5acdfee142493744e76309..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: send() - send() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.htm >deleted file mode 100644 >index cbcbdb44e00cf57f694222c5405a9516c933f9e8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.htm >+++ /dev/null >@@ -1,13 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: send() - send()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script src="send-send.js"></script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.js >deleted file mode 100644 >index 2e7fe865f3b21c56c4eb91bc468b4d3907455911..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/well-formed.xml") >- client.send(null) >- assert_throws("InvalidStateError", function() { client.send(null) }) >- client.abort() >-}) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.worker-expected.txt >deleted file mode 100644 >index c2c15e0b8a0e54a623bcb4fdca1f4cef72eeb240..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.worker-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Untitled >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.worker.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.worker.html >deleted file mode 100644 >index 2382913528e693b3a5d56c660a45060980b548c3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.worker.html >+++ /dev/null >@@ -1 +0,0 @@ >-<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.worker.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.worker.js >deleted file mode 100644 >index 9d34ce63df22ddf6e057b04cc98adfae3a1a307f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.worker.js >+++ /dev/null >@@ -1,3 +0,0 @@ >-importScripts("/resources/testharness.js"); >-importScripts("send-send.js"); >-done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-blocks-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-blocks-async-expected.txt >deleted file mode 100644 >index 5fe56a14f6e3db12500feac4d8fcdc09d7cb0b7f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-blocks-async-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: sync requests should block events on pending async requests >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-blocks-async.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-blocks-async.htm >deleted file mode 100644 >index 74f08a59d60daab0e1d6b55e44ad7e1e373b83f5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-blocks-async.htm >+++ /dev/null >@@ -1,53 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: sync requests should block events on pending async requests</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- var expect = ['sync 4', 'async 2', 'async 3', 'async 4'] >- var actual = [] >- >- test.step(function() >- { >- var xhr_async = new XMLHttpRequest() >- xhr_async.open('GET', 'resources/delay.py?ms=1000', true) // first launch an async request, completes in 1 second >- xhr_async.onreadystatechange = test.step_func(() => { >- actual.push('async ' + xhr_async.readyState) >- if(xhr_async.readyState === 4 && actual.indexOf('sync 4')>-1){ >- VerifyResult() >- } >- }); >- xhr_async.send() >- >- test.step_timeout(() => { >- var xhr_sync = new XMLHttpRequest(); >- xhr_sync.open('GET', 'resources/delay.py?ms=2000', false) // here's a sync request that will take 2 seconds to finish >- xhr_sync.onreadystatechange = test.step_func(() => { >- actual.push('sync ' + xhr_sync.readyState) >- if(xhr_sync.readyState === 4 && actual.indexOf('async 4')>-1){ >- VerifyResult() >- } >- }); >- xhr_sync.send() >- }, 10); >- >- function VerifyResult() >- { >- test.step(function() >- { >- assert_array_equals(actual, expect); >- test.done(); >- }); >- }; >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-load-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-load-expected.txt >deleted file mode 100644 >index a5e3ddbece8637862baffe4c7eeeb746154e3158..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-load-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: Fire an event named load (no response entity body and the synchronous flag is set) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-load.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-load.htm >deleted file mode 100644 >index a2a5516586d8757552e026db5c4a8cd193994fb9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-load.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onload" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-load" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[11] following::a[contains(@href,'#switch-done')]/.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol/li[1] following::ol/li[6]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="/following::ol/li[3]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Fire an event named load (no response entity body and the synchronous flag is set)</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- test(function() >- { >- var xhr = new XMLHttpRequest(); >- var pass = false; >- >- xhr.onload = function(e) >- { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "load"); >- pass = true; >- }; >- >- xhr.open("POST", "./resources/content.py", false); >- xhr.send(); >- >- assert_equals(xhr.response, ""); >- assert_true(pass); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-loadend-expected.txt >deleted file mode 100644 >index 9775ec12733b70498b59f3ce57c118ba98534609..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-loadend-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: Fire an event named loadend (no response entity body and the synchronous flag is set) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-loadend.htm >deleted file mode 100644 >index 7da2a311827edc062d90d14431ebf35f89bad5da..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-loadend.htm >+++ /dev/null >@@ -1,38 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[11] following::a[contains(@href,'#switch-done')]/.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol/li[1] following::ol/li[7]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="/following::ol/li[3]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: Fire an event named loadend (no response entity body and the synchronous flag is set)</title> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- test(function() >- { >- var xhr = new XMLHttpRequest(); >- var pass = false; >- >- xhr.onloadend = function(e) >- { >- assert_true(e instanceof ProgressEvent); >- assert_equals(e.type, "loadend"); >- pass = true; >- }; >- >- xhr.open("POST", "./resources/content.py", false); >- xhr.send(); >- >- assert_equals(xhr.response, ""); >- assert_true(pass); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-order-expected.txt >deleted file mode 100644 >index b88e40324413a8c64630ad0f7b5f5d5bd3f60dd3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-order-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: event order when synchronous flag is set and there is no response entity body >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-order.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-order.htm >deleted file mode 100644 >index c7e3172cb00e8d97adbcf21b783eb88b769c454e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-order.htm >+++ /dev/null >@@ -1,51 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <title>XMLHttpRequest: The send() method: event order when synchronous flag is set and there is no response entity body</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol[1]/li[9]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#same-origin-request-steps" data-tested-assertations="following::DL[1]/DT[1]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[11] following::a[contains(@href,'#switch-done')]/.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[7]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::ol/li[3]" /> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- test(function () { >- var xhr = new XMLHttpRequest(); >- var expect = [4, "load", "loadend"]; >- var actual = []; >- >- xhr.onreadystatechange = function() >- { >- if (xhr.readyState == 4) >- { >- actual.push(xhr.readyState); >- } >- }; >- >- xhr.onloadstart = function(e){ actual.push(e.type); }; >- xhr.onload = function(e){ actual.push(e.type); }; >- xhr.onloadend = function(e){ actual.push(e.type); }; >- >- xhr.upload.onload = function(e){ actual.push("upload." + e.type); }; >- xhr.upload.onloadstart = function(e){ actual.push("upload." + e.type); }; >- xhr.upload.onloadend = function(e){ actual.push("upload." + e.type);}; >- >- xhr.open("POST", "./resources/content.py", false); >- xhr.send(); >- >- assert_equals(xhr.response, ""); >- assert_array_equals(actual, expect); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-response-event-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-response-event-order-expected.txt >deleted file mode 100644 >index 40fd233d29ce269400819bb62a7c45ec6c0754a9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-response-event-order-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-FAIL XMLHttpRequest: The send() method: event order when synchronous flag is set assert_equals: expected "load(12,12,true)" but got "load(0,0,false)" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-response-event-order.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-response-event-order.htm >deleted file mode 100644 >index f7e4b0b216ed83f11b7f839629577525726ff95a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-response-event-order.htm >+++ /dev/null >@@ -1,35 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-event-order.js"></script> >- <title>XMLHttpRequest: The send() method: event order when synchronous flag is set</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[9]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#same-origin-request-steps" data-tested-assertations="following::DL[1]/DT[1]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[11] following::a[contains(@href,'#switch-done')]/.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[7]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::ol/li[3]" /> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- test(function () { >- var xhr = new XMLHttpRequest(); >- prepare_xhr_for_event_order_test(xhr); >- >- xhr.open("POST", "./resources/content.py", false); >- xhr.send("Test Message"); >- >- assert_equals(xhr.response, "Test Message"); >- assert_xhr_event_order_matches([1, 4, "load(12,12,true)", "loadend(12,12,true)"]); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-timeout-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-timeout-expected.txt >deleted file mode 100644 >index b31c90208917898ae9b1fae3c991b4828d43cbd1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-timeout-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: timeout during sync send() should not run >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-timeout.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-timeout.htm >deleted file mode 100644 >index 46d8686bc08374e1bad20dd514f8c12ea7afabb2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-timeout.htm >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: timeout during sync send() should not run</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method"/> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(), >- hasrun = false >- test.step(function() { >- client = new XMLHttpRequest() >- client.open("GET", "folder.txt", false) >- test.step_timeout(() => { hasrun = true }, 0) >- client.onreadystatechange = function() { >- test.step(function() { >- assert_equals(client.readyState, 4) >- assert_false(hasrun) >- }) >- } >- client.send(null) >- test.done() >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-timeout-events-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-timeout-events-expected.txt >deleted file mode 100644 >index 853136e9f04cf7b4487e07b8e13f81155691f8b0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-timeout-events-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: The send() method: timeout is not 0 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-timeout-events.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-timeout-events.htm >deleted file mode 100644 >index 6aea627d661de6ff3b639ee0ef77830dc5065f36..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-timeout-events.htm >+++ /dev/null >@@ -1,76 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <title>XMLHttpRequest: The send() method: timeout is not 0 </title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[5] following::a[contains(@href,'#timeout-error')]/.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[7]/ol/li[3] following::ol[1]/li[7]/ol/li[4] following::ol[1]/li[9] following::ol[1]/li[10]" /> >-</head> >- >-<body> >- <div id="log"></div> >- >- <script type="text/javascript"> >- var test = async_test(); >- >- test.step(function() >- { >- var xhr = new XMLHttpRequest(); >- var expect = [4, "", "upload.timeout", "upload.loadend", "timeout", "loadend"]; >- var actual = []; >- >- xhr.onreadystatechange = test.step_func(function() >- { >- if (xhr.readyState == 4) >- { >- actual.push(xhr.readyState, xhr.response); >- } >- }); >- >- xhr.onloadend = test.step_func_done(function(e) >- { >- assert_equals(e.loaded, 0); >- assert_equals(e.total, 0); >- actual.push(e.type); >- assert_array_equals(actual, expect); >- }); >- >- xhr.ontimeout = test.step_func(function(e) >- { >- assert_equals(e.loaded, 0); >- assert_equals(e.total, 0); >- actual.push(e.type); >- }); >- >- >- xhr.upload.onloadend = test.step_func(function(e) >- { >- assert_equals(e.loaded, 0); >- assert_equals(e.total, 0); >- actual.push("upload." + e.type); >- }); >- >- xhr.upload.ontimeout = test.step_func(function(e) >- { >- assert_equals(e.loaded, 0); >- assert_equals(e.total, 0); >- actual.push("upload." + e.type); >- }); >- >- >- var content = ""; >- for (var i = 0; i < 121026; i++) >- { >- content += "[" + i + "]"; >- } >- >- xhr.open("POST", "./resources/trickle.py", true); >- xhr.timeout = 1; >- xhr.send(content); >- }); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp-expected.txt >deleted file mode 100644 >index b9c1099b79da7954891579851da8473fc1936cea..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp-expected.txt >+++ /dev/null >@@ -1,131 +0,0 @@ >- >-PASS Overall fetch with URLSearchParams >-PASS XMLHttpRequest.send(URLSearchParams) (0) >-PASS XMLHttpRequest.send(URLSearchParams) (1) >-PASS XMLHttpRequest.send(URLSearchParams) (2) >-PASS XMLHttpRequest.send(URLSearchParams) (3) >-PASS XMLHttpRequest.send(URLSearchParams) (4) >-PASS XMLHttpRequest.send(URLSearchParams) (5) >-PASS XMLHttpRequest.send(URLSearchParams) (6) >-PASS XMLHttpRequest.send(URLSearchParams) (7) >-PASS XMLHttpRequest.send(URLSearchParams) (8) >-PASS XMLHttpRequest.send(URLSearchParams) (9) >-PASS XMLHttpRequest.send(URLSearchParams) (10) >-PASS XMLHttpRequest.send(URLSearchParams) (11) >-PASS XMLHttpRequest.send(URLSearchParams) (12) >-PASS XMLHttpRequest.send(URLSearchParams) (13) >-PASS XMLHttpRequest.send(URLSearchParams) (14) >-PASS XMLHttpRequest.send(URLSearchParams) (15) >-PASS XMLHttpRequest.send(URLSearchParams) (16) >-PASS XMLHttpRequest.send(URLSearchParams) (17) >-PASS XMLHttpRequest.send(URLSearchParams) (18) >-PASS XMLHttpRequest.send(URLSearchParams) (19) >-PASS XMLHttpRequest.send(URLSearchParams) (20) >-PASS XMLHttpRequest.send(URLSearchParams) (21) >-PASS XMLHttpRequest.send(URLSearchParams) (22) >-PASS XMLHttpRequest.send(URLSearchParams) (23) >-PASS XMLHttpRequest.send(URLSearchParams) (24) >-PASS XMLHttpRequest.send(URLSearchParams) (25) >-PASS XMLHttpRequest.send(URLSearchParams) (26) >-PASS XMLHttpRequest.send(URLSearchParams) (27) >-PASS XMLHttpRequest.send(URLSearchParams) (28) >-PASS XMLHttpRequest.send(URLSearchParams) (29) >-PASS XMLHttpRequest.send(URLSearchParams) (30) >-PASS XMLHttpRequest.send(URLSearchParams) (31) >-PASS XMLHttpRequest.send(URLSearchParams) (32) >-PASS XMLHttpRequest.send(URLSearchParams) (33) >-PASS XMLHttpRequest.send(URLSearchParams) (34) >-PASS XMLHttpRequest.send(URLSearchParams) (35) >-PASS XMLHttpRequest.send(URLSearchParams) (36) >-PASS XMLHttpRequest.send(URLSearchParams) (37) >-PASS XMLHttpRequest.send(URLSearchParams) (38) >-PASS XMLHttpRequest.send(URLSearchParams) (39) >-PASS XMLHttpRequest.send(URLSearchParams) (40) >-PASS XMLHttpRequest.send(URLSearchParams) (41) >-PASS XMLHttpRequest.send(URLSearchParams) (42) >-PASS XMLHttpRequest.send(URLSearchParams) (43) >-PASS XMLHttpRequest.send(URLSearchParams) (44) >-PASS XMLHttpRequest.send(URLSearchParams) (45) >-PASS XMLHttpRequest.send(URLSearchParams) (46) >-PASS XMLHttpRequest.send(URLSearchParams) (47) >-PASS XMLHttpRequest.send(URLSearchParams) (48) >-PASS XMLHttpRequest.send(URLSearchParams) (49) >-PASS XMLHttpRequest.send(URLSearchParams) (50) >-PASS XMLHttpRequest.send(URLSearchParams) (51) >-PASS XMLHttpRequest.send(URLSearchParams) (52) >-PASS XMLHttpRequest.send(URLSearchParams) (53) >-PASS XMLHttpRequest.send(URLSearchParams) (54) >-PASS XMLHttpRequest.send(URLSearchParams) (55) >-PASS XMLHttpRequest.send(URLSearchParams) (56) >-PASS XMLHttpRequest.send(URLSearchParams) (57) >-PASS XMLHttpRequest.send(URLSearchParams) (58) >-PASS XMLHttpRequest.send(URLSearchParams) (59) >-PASS XMLHttpRequest.send(URLSearchParams) (60) >-PASS XMLHttpRequest.send(URLSearchParams) (61) >-PASS XMLHttpRequest.send(URLSearchParams) (62) >-PASS XMLHttpRequest.send(URLSearchParams) (63) >-PASS XMLHttpRequest.send(URLSearchParams) (64) >-PASS XMLHttpRequest.send(URLSearchParams) (65) >-PASS XMLHttpRequest.send(URLSearchParams) (66) >-PASS XMLHttpRequest.send(URLSearchParams) (67) >-PASS XMLHttpRequest.send(URLSearchParams) (68) >-PASS XMLHttpRequest.send(URLSearchParams) (69) >-PASS XMLHttpRequest.send(URLSearchParams) (70) >-PASS XMLHttpRequest.send(URLSearchParams) (71) >-PASS XMLHttpRequest.send(URLSearchParams) (72) >-PASS XMLHttpRequest.send(URLSearchParams) (73) >-PASS XMLHttpRequest.send(URLSearchParams) (74) >-PASS XMLHttpRequest.send(URLSearchParams) (75) >-PASS XMLHttpRequest.send(URLSearchParams) (76) >-PASS XMLHttpRequest.send(URLSearchParams) (77) >-PASS XMLHttpRequest.send(URLSearchParams) (78) >-PASS XMLHttpRequest.send(URLSearchParams) (79) >-PASS XMLHttpRequest.send(URLSearchParams) (80) >-PASS XMLHttpRequest.send(URLSearchParams) (81) >-PASS XMLHttpRequest.send(URLSearchParams) (82) >-PASS XMLHttpRequest.send(URLSearchParams) (83) >-PASS XMLHttpRequest.send(URLSearchParams) (84) >-PASS XMLHttpRequest.send(URLSearchParams) (85) >-PASS XMLHttpRequest.send(URLSearchParams) (86) >-PASS XMLHttpRequest.send(URLSearchParams) (87) >-PASS XMLHttpRequest.send(URLSearchParams) (88) >-PASS XMLHttpRequest.send(URLSearchParams) (89) >-PASS XMLHttpRequest.send(URLSearchParams) (90) >-PASS XMLHttpRequest.send(URLSearchParams) (91) >-PASS XMLHttpRequest.send(URLSearchParams) (92) >-PASS XMLHttpRequest.send(URLSearchParams) (93) >-PASS XMLHttpRequest.send(URLSearchParams) (94) >-PASS XMLHttpRequest.send(URLSearchParams) (95) >-PASS XMLHttpRequest.send(URLSearchParams) (96) >-PASS XMLHttpRequest.send(URLSearchParams) (97) >-PASS XMLHttpRequest.send(URLSearchParams) (98) >-PASS XMLHttpRequest.send(URLSearchParams) (99) >-PASS XMLHttpRequest.send(URLSearchParams) (100) >-PASS XMLHttpRequest.send(URLSearchParams) (101) >-PASS XMLHttpRequest.send(URLSearchParams) (102) >-PASS XMLHttpRequest.send(URLSearchParams) (103) >-PASS XMLHttpRequest.send(URLSearchParams) (104) >-PASS XMLHttpRequest.send(URLSearchParams) (105) >-PASS XMLHttpRequest.send(URLSearchParams) (106) >-PASS XMLHttpRequest.send(URLSearchParams) (107) >-PASS XMLHttpRequest.send(URLSearchParams) (108) >-PASS XMLHttpRequest.send(URLSearchParams) (109) >-PASS XMLHttpRequest.send(URLSearchParams) (110) >-PASS XMLHttpRequest.send(URLSearchParams) (111) >-PASS XMLHttpRequest.send(URLSearchParams) (112) >-PASS XMLHttpRequest.send(URLSearchParams) (113) >-PASS XMLHttpRequest.send(URLSearchParams) (114) >-PASS XMLHttpRequest.send(URLSearchParams) (115) >-PASS XMLHttpRequest.send(URLSearchParams) (116) >-PASS XMLHttpRequest.send(URLSearchParams) (117) >-PASS XMLHttpRequest.send(URLSearchParams) (118) >-PASS XMLHttpRequest.send(URLSearchParams) (119) >-PASS XMLHttpRequest.send(URLSearchParams) (120) >-PASS XMLHttpRequest.send(URLSearchParams) (121) >-PASS XMLHttpRequest.send(URLSearchParams) (122) >-PASS XMLHttpRequest.send(URLSearchParams) (123) >-PASS XMLHttpRequest.send(URLSearchParams) (124) >-PASS XMLHttpRequest.send(URLSearchParams) (125) >-PASS XMLHttpRequest.send(URLSearchParams) (126) >-PASS XMLHttpRequest.send(URLSearchParams) (127) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any-expected.txt >deleted file mode 100644 >index b9c1099b79da7954891579851da8473fc1936cea..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any-expected.txt >+++ /dev/null >@@ -1,131 +0,0 @@ >- >-PASS Overall fetch with URLSearchParams >-PASS XMLHttpRequest.send(URLSearchParams) (0) >-PASS XMLHttpRequest.send(URLSearchParams) (1) >-PASS XMLHttpRequest.send(URLSearchParams) (2) >-PASS XMLHttpRequest.send(URLSearchParams) (3) >-PASS XMLHttpRequest.send(URLSearchParams) (4) >-PASS XMLHttpRequest.send(URLSearchParams) (5) >-PASS XMLHttpRequest.send(URLSearchParams) (6) >-PASS XMLHttpRequest.send(URLSearchParams) (7) >-PASS XMLHttpRequest.send(URLSearchParams) (8) >-PASS XMLHttpRequest.send(URLSearchParams) (9) >-PASS XMLHttpRequest.send(URLSearchParams) (10) >-PASS XMLHttpRequest.send(URLSearchParams) (11) >-PASS XMLHttpRequest.send(URLSearchParams) (12) >-PASS XMLHttpRequest.send(URLSearchParams) (13) >-PASS XMLHttpRequest.send(URLSearchParams) (14) >-PASS XMLHttpRequest.send(URLSearchParams) (15) >-PASS XMLHttpRequest.send(URLSearchParams) (16) >-PASS XMLHttpRequest.send(URLSearchParams) (17) >-PASS XMLHttpRequest.send(URLSearchParams) (18) >-PASS XMLHttpRequest.send(URLSearchParams) (19) >-PASS XMLHttpRequest.send(URLSearchParams) (20) >-PASS XMLHttpRequest.send(URLSearchParams) (21) >-PASS XMLHttpRequest.send(URLSearchParams) (22) >-PASS XMLHttpRequest.send(URLSearchParams) (23) >-PASS XMLHttpRequest.send(URLSearchParams) (24) >-PASS XMLHttpRequest.send(URLSearchParams) (25) >-PASS XMLHttpRequest.send(URLSearchParams) (26) >-PASS XMLHttpRequest.send(URLSearchParams) (27) >-PASS XMLHttpRequest.send(URLSearchParams) (28) >-PASS XMLHttpRequest.send(URLSearchParams) (29) >-PASS XMLHttpRequest.send(URLSearchParams) (30) >-PASS XMLHttpRequest.send(URLSearchParams) (31) >-PASS XMLHttpRequest.send(URLSearchParams) (32) >-PASS XMLHttpRequest.send(URLSearchParams) (33) >-PASS XMLHttpRequest.send(URLSearchParams) (34) >-PASS XMLHttpRequest.send(URLSearchParams) (35) >-PASS XMLHttpRequest.send(URLSearchParams) (36) >-PASS XMLHttpRequest.send(URLSearchParams) (37) >-PASS XMLHttpRequest.send(URLSearchParams) (38) >-PASS XMLHttpRequest.send(URLSearchParams) (39) >-PASS XMLHttpRequest.send(URLSearchParams) (40) >-PASS XMLHttpRequest.send(URLSearchParams) (41) >-PASS XMLHttpRequest.send(URLSearchParams) (42) >-PASS XMLHttpRequest.send(URLSearchParams) (43) >-PASS XMLHttpRequest.send(URLSearchParams) (44) >-PASS XMLHttpRequest.send(URLSearchParams) (45) >-PASS XMLHttpRequest.send(URLSearchParams) (46) >-PASS XMLHttpRequest.send(URLSearchParams) (47) >-PASS XMLHttpRequest.send(URLSearchParams) (48) >-PASS XMLHttpRequest.send(URLSearchParams) (49) >-PASS XMLHttpRequest.send(URLSearchParams) (50) >-PASS XMLHttpRequest.send(URLSearchParams) (51) >-PASS XMLHttpRequest.send(URLSearchParams) (52) >-PASS XMLHttpRequest.send(URLSearchParams) (53) >-PASS XMLHttpRequest.send(URLSearchParams) (54) >-PASS XMLHttpRequest.send(URLSearchParams) (55) >-PASS XMLHttpRequest.send(URLSearchParams) (56) >-PASS XMLHttpRequest.send(URLSearchParams) (57) >-PASS XMLHttpRequest.send(URLSearchParams) (58) >-PASS XMLHttpRequest.send(URLSearchParams) (59) >-PASS XMLHttpRequest.send(URLSearchParams) (60) >-PASS XMLHttpRequest.send(URLSearchParams) (61) >-PASS XMLHttpRequest.send(URLSearchParams) (62) >-PASS XMLHttpRequest.send(URLSearchParams) (63) >-PASS XMLHttpRequest.send(URLSearchParams) (64) >-PASS XMLHttpRequest.send(URLSearchParams) (65) >-PASS XMLHttpRequest.send(URLSearchParams) (66) >-PASS XMLHttpRequest.send(URLSearchParams) (67) >-PASS XMLHttpRequest.send(URLSearchParams) (68) >-PASS XMLHttpRequest.send(URLSearchParams) (69) >-PASS XMLHttpRequest.send(URLSearchParams) (70) >-PASS XMLHttpRequest.send(URLSearchParams) (71) >-PASS XMLHttpRequest.send(URLSearchParams) (72) >-PASS XMLHttpRequest.send(URLSearchParams) (73) >-PASS XMLHttpRequest.send(URLSearchParams) (74) >-PASS XMLHttpRequest.send(URLSearchParams) (75) >-PASS XMLHttpRequest.send(URLSearchParams) (76) >-PASS XMLHttpRequest.send(URLSearchParams) (77) >-PASS XMLHttpRequest.send(URLSearchParams) (78) >-PASS XMLHttpRequest.send(URLSearchParams) (79) >-PASS XMLHttpRequest.send(URLSearchParams) (80) >-PASS XMLHttpRequest.send(URLSearchParams) (81) >-PASS XMLHttpRequest.send(URLSearchParams) (82) >-PASS XMLHttpRequest.send(URLSearchParams) (83) >-PASS XMLHttpRequest.send(URLSearchParams) (84) >-PASS XMLHttpRequest.send(URLSearchParams) (85) >-PASS XMLHttpRequest.send(URLSearchParams) (86) >-PASS XMLHttpRequest.send(URLSearchParams) (87) >-PASS XMLHttpRequest.send(URLSearchParams) (88) >-PASS XMLHttpRequest.send(URLSearchParams) (89) >-PASS XMLHttpRequest.send(URLSearchParams) (90) >-PASS XMLHttpRequest.send(URLSearchParams) (91) >-PASS XMLHttpRequest.send(URLSearchParams) (92) >-PASS XMLHttpRequest.send(URLSearchParams) (93) >-PASS XMLHttpRequest.send(URLSearchParams) (94) >-PASS XMLHttpRequest.send(URLSearchParams) (95) >-PASS XMLHttpRequest.send(URLSearchParams) (96) >-PASS XMLHttpRequest.send(URLSearchParams) (97) >-PASS XMLHttpRequest.send(URLSearchParams) (98) >-PASS XMLHttpRequest.send(URLSearchParams) (99) >-PASS XMLHttpRequest.send(URLSearchParams) (100) >-PASS XMLHttpRequest.send(URLSearchParams) (101) >-PASS XMLHttpRequest.send(URLSearchParams) (102) >-PASS XMLHttpRequest.send(URLSearchParams) (103) >-PASS XMLHttpRequest.send(URLSearchParams) (104) >-PASS XMLHttpRequest.send(URLSearchParams) (105) >-PASS XMLHttpRequest.send(URLSearchParams) (106) >-PASS XMLHttpRequest.send(URLSearchParams) (107) >-PASS XMLHttpRequest.send(URLSearchParams) (108) >-PASS XMLHttpRequest.send(URLSearchParams) (109) >-PASS XMLHttpRequest.send(URLSearchParams) (110) >-PASS XMLHttpRequest.send(URLSearchParams) (111) >-PASS XMLHttpRequest.send(URLSearchParams) (112) >-PASS XMLHttpRequest.send(URLSearchParams) (113) >-PASS XMLHttpRequest.send(URLSearchParams) (114) >-PASS XMLHttpRequest.send(URLSearchParams) (115) >-PASS XMLHttpRequest.send(URLSearchParams) (116) >-PASS XMLHttpRequest.send(URLSearchParams) (117) >-PASS XMLHttpRequest.send(URLSearchParams) (118) >-PASS XMLHttpRequest.send(URLSearchParams) (119) >-PASS XMLHttpRequest.send(URLSearchParams) (120) >-PASS XMLHttpRequest.send(URLSearchParams) (121) >-PASS XMLHttpRequest.send(URLSearchParams) (122) >-PASS XMLHttpRequest.send(URLSearchParams) (123) >-PASS XMLHttpRequest.send(URLSearchParams) (124) >-PASS XMLHttpRequest.send(URLSearchParams) (125) >-PASS XMLHttpRequest.send(URLSearchParams) (126) >-PASS XMLHttpRequest.send(URLSearchParams) (127) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.html >deleted file mode 100644 >index 2382913528e693b3a5d56c660a45060980b548c3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.html >+++ /dev/null >@@ -1 +0,0 @@ >-<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.js >deleted file mode 100644 >index b0baf4a525ad20185d15a2e2659b9202285ce178..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.js >+++ /dev/null >@@ -1,46 +0,0 @@ >-const NUM_TESTS = 128; >- >-function encode(n) { >- if (n === 0x20) { >- return "\x2B"; >- } >- >- if (n === 0x2A || n === 0x2D || n === 0x2E || >- (0x30 <= n && n <= 0x39) || (0x41 <= n && n <= 0x5A) || >- n === 0x5F || (0x61 <= n && n <= 0x7A)) { >- return String.fromCharCode(n); >- } >- >- var s = n.toString(16).toUpperCase(); >- return "%" + (s.length === 2 ? s : '0' + s); >-} >- >- var tests = []; >- var overall_test = async_test("Overall fetch with URLSearchParams"); >- for (var i = 0; i < NUM_TESTS; i++) { >- // Multiple subtests so that failures can be fine-grained >- tests[i] = async_test("XMLHttpRequest.send(URLSearchParams) (" + i + ")"); >- } >- >- // We use a single XHR since this test tends to time out >- // with 128 consecutive fetches when run in parallel >- // with many other WPT tests. >- var x = new XMLHttpRequest(); >- x.onload = overall_test.step_func(function() { >- var response_split = x.response.split("&"); >- overall_test.done(); >- for (var i = 0; i < NUM_TESTS; i++) { >- tests[i].step(function() { >- assert_equals(response_split[i], "a" + i + "="+encode(i)); >- tests[i].done(); >- }); >- } >- }); >- x.onerror = overall_test.unreached_func(); >- >- x.open("POST", "resources/content.py"); >- var usp = new URLSearchParams(); >- for (var i = 0; i < NUM_TESTS; i++) { >- usp.append("a" + i, String.fromCharCode(i)); >- } >- x.send(usp) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.worker-expected.txt >deleted file mode 100644 >index b9c1099b79da7954891579851da8473fc1936cea..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.worker-expected.txt >+++ /dev/null >@@ -1,131 +0,0 @@ >- >-PASS Overall fetch with URLSearchParams >-PASS XMLHttpRequest.send(URLSearchParams) (0) >-PASS XMLHttpRequest.send(URLSearchParams) (1) >-PASS XMLHttpRequest.send(URLSearchParams) (2) >-PASS XMLHttpRequest.send(URLSearchParams) (3) >-PASS XMLHttpRequest.send(URLSearchParams) (4) >-PASS XMLHttpRequest.send(URLSearchParams) (5) >-PASS XMLHttpRequest.send(URLSearchParams) (6) >-PASS XMLHttpRequest.send(URLSearchParams) (7) >-PASS XMLHttpRequest.send(URLSearchParams) (8) >-PASS XMLHttpRequest.send(URLSearchParams) (9) >-PASS XMLHttpRequest.send(URLSearchParams) (10) >-PASS XMLHttpRequest.send(URLSearchParams) (11) >-PASS XMLHttpRequest.send(URLSearchParams) (12) >-PASS XMLHttpRequest.send(URLSearchParams) (13) >-PASS XMLHttpRequest.send(URLSearchParams) (14) >-PASS XMLHttpRequest.send(URLSearchParams) (15) >-PASS XMLHttpRequest.send(URLSearchParams) (16) >-PASS XMLHttpRequest.send(URLSearchParams) (17) >-PASS XMLHttpRequest.send(URLSearchParams) (18) >-PASS XMLHttpRequest.send(URLSearchParams) (19) >-PASS XMLHttpRequest.send(URLSearchParams) (20) >-PASS XMLHttpRequest.send(URLSearchParams) (21) >-PASS XMLHttpRequest.send(URLSearchParams) (22) >-PASS XMLHttpRequest.send(URLSearchParams) (23) >-PASS XMLHttpRequest.send(URLSearchParams) (24) >-PASS XMLHttpRequest.send(URLSearchParams) (25) >-PASS XMLHttpRequest.send(URLSearchParams) (26) >-PASS XMLHttpRequest.send(URLSearchParams) (27) >-PASS XMLHttpRequest.send(URLSearchParams) (28) >-PASS XMLHttpRequest.send(URLSearchParams) (29) >-PASS XMLHttpRequest.send(URLSearchParams) (30) >-PASS XMLHttpRequest.send(URLSearchParams) (31) >-PASS XMLHttpRequest.send(URLSearchParams) (32) >-PASS XMLHttpRequest.send(URLSearchParams) (33) >-PASS XMLHttpRequest.send(URLSearchParams) (34) >-PASS XMLHttpRequest.send(URLSearchParams) (35) >-PASS XMLHttpRequest.send(URLSearchParams) (36) >-PASS XMLHttpRequest.send(URLSearchParams) (37) >-PASS XMLHttpRequest.send(URLSearchParams) (38) >-PASS XMLHttpRequest.send(URLSearchParams) (39) >-PASS XMLHttpRequest.send(URLSearchParams) (40) >-PASS XMLHttpRequest.send(URLSearchParams) (41) >-PASS XMLHttpRequest.send(URLSearchParams) (42) >-PASS XMLHttpRequest.send(URLSearchParams) (43) >-PASS XMLHttpRequest.send(URLSearchParams) (44) >-PASS XMLHttpRequest.send(URLSearchParams) (45) >-PASS XMLHttpRequest.send(URLSearchParams) (46) >-PASS XMLHttpRequest.send(URLSearchParams) (47) >-PASS XMLHttpRequest.send(URLSearchParams) (48) >-PASS XMLHttpRequest.send(URLSearchParams) (49) >-PASS XMLHttpRequest.send(URLSearchParams) (50) >-PASS XMLHttpRequest.send(URLSearchParams) (51) >-PASS XMLHttpRequest.send(URLSearchParams) (52) >-PASS XMLHttpRequest.send(URLSearchParams) (53) >-PASS XMLHttpRequest.send(URLSearchParams) (54) >-PASS XMLHttpRequest.send(URLSearchParams) (55) >-PASS XMLHttpRequest.send(URLSearchParams) (56) >-PASS XMLHttpRequest.send(URLSearchParams) (57) >-PASS XMLHttpRequest.send(URLSearchParams) (58) >-PASS XMLHttpRequest.send(URLSearchParams) (59) >-PASS XMLHttpRequest.send(URLSearchParams) (60) >-PASS XMLHttpRequest.send(URLSearchParams) (61) >-PASS XMLHttpRequest.send(URLSearchParams) (62) >-PASS XMLHttpRequest.send(URLSearchParams) (63) >-PASS XMLHttpRequest.send(URLSearchParams) (64) >-PASS XMLHttpRequest.send(URLSearchParams) (65) >-PASS XMLHttpRequest.send(URLSearchParams) (66) >-PASS XMLHttpRequest.send(URLSearchParams) (67) >-PASS XMLHttpRequest.send(URLSearchParams) (68) >-PASS XMLHttpRequest.send(URLSearchParams) (69) >-PASS XMLHttpRequest.send(URLSearchParams) (70) >-PASS XMLHttpRequest.send(URLSearchParams) (71) >-PASS XMLHttpRequest.send(URLSearchParams) (72) >-PASS XMLHttpRequest.send(URLSearchParams) (73) >-PASS XMLHttpRequest.send(URLSearchParams) (74) >-PASS XMLHttpRequest.send(URLSearchParams) (75) >-PASS XMLHttpRequest.send(URLSearchParams) (76) >-PASS XMLHttpRequest.send(URLSearchParams) (77) >-PASS XMLHttpRequest.send(URLSearchParams) (78) >-PASS XMLHttpRequest.send(URLSearchParams) (79) >-PASS XMLHttpRequest.send(URLSearchParams) (80) >-PASS XMLHttpRequest.send(URLSearchParams) (81) >-PASS XMLHttpRequest.send(URLSearchParams) (82) >-PASS XMLHttpRequest.send(URLSearchParams) (83) >-PASS XMLHttpRequest.send(URLSearchParams) (84) >-PASS XMLHttpRequest.send(URLSearchParams) (85) >-PASS XMLHttpRequest.send(URLSearchParams) (86) >-PASS XMLHttpRequest.send(URLSearchParams) (87) >-PASS XMLHttpRequest.send(URLSearchParams) (88) >-PASS XMLHttpRequest.send(URLSearchParams) (89) >-PASS XMLHttpRequest.send(URLSearchParams) (90) >-PASS XMLHttpRequest.send(URLSearchParams) (91) >-PASS XMLHttpRequest.send(URLSearchParams) (92) >-PASS XMLHttpRequest.send(URLSearchParams) (93) >-PASS XMLHttpRequest.send(URLSearchParams) (94) >-PASS XMLHttpRequest.send(URLSearchParams) (95) >-PASS XMLHttpRequest.send(URLSearchParams) (96) >-PASS XMLHttpRequest.send(URLSearchParams) (97) >-PASS XMLHttpRequest.send(URLSearchParams) (98) >-PASS XMLHttpRequest.send(URLSearchParams) (99) >-PASS XMLHttpRequest.send(URLSearchParams) (100) >-PASS XMLHttpRequest.send(URLSearchParams) (101) >-PASS XMLHttpRequest.send(URLSearchParams) (102) >-PASS XMLHttpRequest.send(URLSearchParams) (103) >-PASS XMLHttpRequest.send(URLSearchParams) (104) >-PASS XMLHttpRequest.send(URLSearchParams) (105) >-PASS XMLHttpRequest.send(URLSearchParams) (106) >-PASS XMLHttpRequest.send(URLSearchParams) (107) >-PASS XMLHttpRequest.send(URLSearchParams) (108) >-PASS XMLHttpRequest.send(URLSearchParams) (109) >-PASS XMLHttpRequest.send(URLSearchParams) (110) >-PASS XMLHttpRequest.send(URLSearchParams) (111) >-PASS XMLHttpRequest.send(URLSearchParams) (112) >-PASS XMLHttpRequest.send(URLSearchParams) (113) >-PASS XMLHttpRequest.send(URLSearchParams) (114) >-PASS XMLHttpRequest.send(URLSearchParams) (115) >-PASS XMLHttpRequest.send(URLSearchParams) (116) >-PASS XMLHttpRequest.send(URLSearchParams) (117) >-PASS XMLHttpRequest.send(URLSearchParams) (118) >-PASS XMLHttpRequest.send(URLSearchParams) (119) >-PASS XMLHttpRequest.send(URLSearchParams) (120) >-PASS XMLHttpRequest.send(URLSearchParams) (121) >-PASS XMLHttpRequest.send(URLSearchParams) (122) >-PASS XMLHttpRequest.send(URLSearchParams) (123) >-PASS XMLHttpRequest.send(URLSearchParams) (124) >-PASS XMLHttpRequest.send(URLSearchParams) (125) >-PASS XMLHttpRequest.send(URLSearchParams) (126) >-PASS XMLHttpRequest.send(URLSearchParams) (127) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.worker.html >deleted file mode 100644 >index 2382913528e693b3a5d56c660a45060980b548c3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.worker.html >+++ /dev/null >@@ -1 +0,0 @@ >-<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.html >deleted file mode 100644 >index 1753e5f3a5bd08b04d1956215ab5905c7552ceb2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.html >+++ /dev/null >@@ -1,10 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<title>XMLHttpRequest.send(URLSearchParams)</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<script src="send-usp.js"></script> >-<div id="log"></div> >-<script> >-run_test(); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.js b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.js >deleted file mode 100644 >index c00b2e0e0ca82a10a629fb4a9f5c940edf02074c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.js >+++ /dev/null >@@ -1,48 +0,0 @@ >-const NUM_TESTS = 128; >- >-function encode(n) { >- if (n === 0x20) { >- return "\x2B"; >- } >- >- if (n === 0x2A || n === 0x2D || n === 0x2E || >- (0x30 <= n && n <= 0x39) || (0x41 <= n && n <= 0x5A) || >- n === 0x5F || (0x61 <= n && n <= 0x7A)) { >- return String.fromCharCode(n); >- } >- >- var s = n.toString(16).toUpperCase(); >- return "%" + (s.length === 2 ? s : '0' + s); >-} >- >-function run_test() { >- var tests = []; >- var overall_test = async_test("Overall fetch with URLSearchParams"); >- for (var i = 0; i < NUM_TESTS; i++) { >- // Multiple subtests so that failures can be fine-grained >- tests[i] = async_test("XMLHttpRequest.send(URLSearchParams) (" + i + ")"); >- } >- >- // We use a single XHR since this test tends to time out >- // with 128 consecutive fetches when run in parallel >- // with many other WPT tests. >- var x = new XMLHttpRequest(); >- x.onload = overall_test.step_func(function() { >- var response_split = x.response.split("&"); >- overall_test.done(); >- for (var i = 0; i < NUM_TESTS; i++) { >- tests[i].step(function() { >- assert_equals(response_split[i], "a" + i + "="+encode(i)); >- tests[i].done(); >- }); >- } >- }); >- x.onerror = overall_test.unreached_func(); >- >- x.open("POST", "resources/content.py"); >- var usp = new URLSearchParams(); >- for (var i = 0; i < NUM_TESTS; i++) { >- usp.append("a" + i, String.fromCharCode(i)); >- } >- x.send(usp) >-} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-after-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-after-send-expected.txt >deleted file mode 100644 >index 2ef02caf92cd73d9e0e9b89e54e25b16ab64f1ae..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-after-send-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: setRequestHeader() after send() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-after-send.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-after-send.htm >deleted file mode 100644 >index 7ccdb3e4c3109091286c02bbea7a5892215714f0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-after-send.htm >+++ /dev/null >@@ -1,27 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: setRequestHeader() after send()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="/following::ol/li[2]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/delay.py?ms=0") >- client.onreadystatechange = function() { >- test.step(function() { >- assert_throws("InvalidStateError", function() { client.setRequestHeader("x-test", "test") }) >- if(client.readyState == 4) >- test.done() >- }) >- } >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-empty-value-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-empty-value-expected.txt >deleted file mode 100644 >index 5e7163f0045ee6ae4f228d50fdd4cfc7eb084420..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-empty-value-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-FAIL XMLHttpRequest: setRequestHeader() - empty header () assert_equals: expected "X-Empty: \n" but got "X-Empty: \n" >-PASS XMLHttpRequest: setRequestHeader() - empty header (null) >-PASS XMLHttpRequest: setRequestHeader() - empty header (undefined) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-empty-value.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-empty-value.htm >deleted file mode 100644 >index 4479504c2a62d7fa0ec9388252e38b50ae011131..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-empty-value.htm >+++ /dev/null >@@ -1,26 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: setRequestHeader() - empty header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(value) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("POST", "resources/inspect-headers.py?filter_name=X-Empty", false) >- client.setRequestHeader('X-Empty', value) >- client.send(null) >- assert_equals(client.responseText, 'X-Empty: ' + value + '\n' ) >- }, document.title + " (" + value + ")") >- } >- request("") >- request(null) >- request(undefined) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-whitespace-in-value-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-whitespace-in-value-expected.txt >deleted file mode 100644 >index 88f720abcac83e477df5cd6e5b7d8da9cb389bf1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-whitespace-in-value-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-FAIL XMLHttpRequest: setRequestHeader() - header value with whitespace ( ) assert_equals: expected "X-Empty: \n" but got "X-Empty: \n" >-PASS XMLHttpRequest: setRequestHeader() - header value with whitespace ( t) >-PASS XMLHttpRequest: setRequestHeader() - header value with whitespace (t ) >-PASS XMLHttpRequest: setRequestHeader() - header value with whitespace ( t ) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-whitespace-in-value.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-whitespace-in-value.htm >deleted file mode 100644 >index f2e0a370e665639aed5a6d747e5567bb6e38d7cc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-whitespace-in-value.htm >+++ /dev/null >@@ -1,27 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: setRequestHeader() - header value with whitespace</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(value) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("POST", "resources/inspect-headers.py?filter_name=X-Empty", false) >- client.setRequestHeader('X-Empty', value) >- client.send(null) >- assert_equals(client.responseText, 'X-Empty: ' + value.trim() + '\n' ) >- }, document.title + " (" + value + ")") >- } >- request(" ") >- request(" t") >- request("t ") >- request(" t ") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-before-open-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-before-open-expected.txt >deleted file mode 100644 >index 5d98ed8cca3b49d3c9c0505ee92e96fd125f58ba..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-before-open-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS setRequestHeader invoked before open() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-before-open.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-before-open.htm >deleted file mode 100644 >index cbe4b299c9dac18154340493073e7419b0773cb8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-before-open.htm >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: setRequestHeader() before open()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol/li[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- assert_throws("InvalidStateError", function() { client.setRequestHeader("x-test", "test") }) >- }, 'setRequestHeader invoked before open()') >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-name-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-name-expected.txt >deleted file mode 100644 >index 606f6c9ba7a60d5628e194c81c6cb9dcc54d4c1d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-name-expected.txt >+++ /dev/null >@@ -1,73 +0,0 @@ >- >-PASS setRequestHeader should throw with header name "(". >-PASS setRequestHeader should throw with header name ")". >-PASS setRequestHeader should throw with header name "<". >-PASS setRequestHeader should throw with header name ">". >-PASS setRequestHeader should throw with header name "@". >-PASS setRequestHeader should throw with header name ",". >-PASS setRequestHeader should throw with header name ";". >-PASS setRequestHeader should throw with header name ":". >-PASS setRequestHeader should throw with header name "\\". >-PASS setRequestHeader should throw with header name "\"". >-PASS setRequestHeader should throw with header name "/". >-PASS setRequestHeader should throw with header name "[". >-PASS setRequestHeader should throw with header name "]". >-PASS setRequestHeader should throw with header name "?". >-PASS setRequestHeader should throw with header name "=". >-PASS setRequestHeader should throw with header name "{". >-PASS setRequestHeader should throw with header name "}". >-PASS setRequestHeader should throw with header name " ". >-PASS setRequestHeader should throw with header name "". >-PASS setRequestHeader should throw with header name "". >-PASS setRequestHeader should throw with header name "t\rt". >-PASS setRequestHeader should throw with header name "t\nt". >-PASS setRequestHeader should throw with header name "t: t". >-PASS setRequestHeader should throw with header name "t:t". >-PASS setRequestHeader should throw with header name "t<t". >-PASS setRequestHeader should throw with header name "t t". >-PASS setRequestHeader should throw with header name " tt". >-PASS setRequestHeader should throw with header name ":tt". >-PASS setRequestHeader should throw with header name "\ttt". >-PASS setRequestHeader should throw with header name "\vtt". >-PASS setRequestHeader should throw with header name "t\0t". >-PASS setRequestHeader should throw with header name "t\"t". >-PASS setRequestHeader should throw with header name "t,t". >-PASS setRequestHeader should throw with header name "t;t". >-PASS setRequestHeader should throw with header name "()[]{}". >-PASS setRequestHeader should throw with header name "a?B". >-PASS setRequestHeader should throw with header name "a=B". >-PASS setRequestHeader should throw with header name "\0". >-PASS setRequestHeader should throw with header name "\x01". >-PASS setRequestHeader should throw with header name "\x02". >-PASS setRequestHeader should throw with header name "\x03". >-PASS setRequestHeader should throw with header name "\x04". >-PASS setRequestHeader should throw with header name "\x05". >-PASS setRequestHeader should throw with header name "\x06". >-PASS setRequestHeader should throw with header name "\x07". >-PASS setRequestHeader should throw with header name "\b". >-PASS setRequestHeader should throw with header name "\t". >-PASS setRequestHeader should throw with header name "\n". >-PASS setRequestHeader should throw with header name "\v". >-PASS setRequestHeader should throw with header name "\f". >-PASS setRequestHeader should throw with header name "\r". >-PASS setRequestHeader should throw with header name "\x0e". >-PASS setRequestHeader should throw with header name "\x0f". >-PASS setRequestHeader should throw with header name "\x10". >-PASS setRequestHeader should throw with header name "\x11". >-PASS setRequestHeader should throw with header name "\x12". >-PASS setRequestHeader should throw with header name "\x13". >-PASS setRequestHeader should throw with header name "\x14". >-PASS setRequestHeader should throw with header name "\x15". >-PASS setRequestHeader should throw with header name "\x16". >-PASS setRequestHeader should throw with header name "\x17". >-PASS setRequestHeader should throw with header name "\x18". >-PASS setRequestHeader should throw with header name "\x19". >-PASS setRequestHeader should throw with header name "\x1a". >-PASS setRequestHeader should throw with header name "\x1b". >-PASS setRequestHeader should throw with header name "\x1c". >-PASS setRequestHeader should throw with header name "\x1d". >-PASS setRequestHeader should throw with header name "\x1e". >-PASS setRequestHeader should throw with header name "\x1f". >-PASS setRequestHeader should throw with header name "ï¾ï½½ï¾". >-PASS setRequestHeader should throw with header name "X-ï¾ï½½ï¾". >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-name.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-name.htm >deleted file mode 100644 >index 86e55f33a00649cf25c05b04914fb7756ef6bcb9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-name.htm >+++ /dev/null >@@ -1,59 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: setRequestHeader() name argument checks</title> >- <meta charset="utf-8"> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="/following::ol/li[3]" /> >- </head> >- <body> >- <div id="log"></div> >-<!-- >- CHAR = <any US-ASCII character (octets 0 - 127)> >- CTL = <any US-ASCII control character >- (octets 0 - 31) and DEL (127)> >- SP = <US-ASCII SP, space (32)> >- HT = <US-ASCII HT, horizontal-tab (9)> >- token = 1*<any CHAR except CTLs or separators> >- separators = "(" | ")" | "<" | ">" | "@" >- | "," | ";" | ":" | "\" | <"> >- | "/" | "[" | "]" | "?" | "=" >- | "{" | "}" | SP | HT >- field-name = token >---> >- <script> >- function try_name(name) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "...") >- assert_throws("SyntaxError", function() { client.setRequestHeader(name, 'x-value') }) >- }, "setRequestHeader should throw with header name " + format_value(invalid_headers[i]) + ".") >- } >- function try_byte_string(name) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "...") >- assert_throws(new TypeError(), function() { client.setRequestHeader(name, 'x-value') }) >- }, "setRequestHeader should throw with header name " + format_value(invalid_byte_strings[i]) + ".") >- } >- var invalid_headers = ["(", ")", "<", ">", "@", ",", ";", ":", "\\", >- "\"", "/", "[", "]", "?", "=", "{", "}", " ", >- /* HT already tested in the loop below */ >- "\u007f", "", "t\rt", "t\nt", "t: t", "t:t", >- "t<t", "t t", " tt", ":tt", "\ttt", "\vtt", "t\0t", >- "t\"t", "t,t", "t;t", "()[]{}", "a?B", "a=B"] >- var invalid_byte_strings = ["ï¾ï½½ï¾", "X-ï¾ï½½ï¾"] >- for (var i = 0; i < 32; ++i) { >- invalid_headers.push(String.fromCharCode(i)) >- } >- for (var i = 0; i < invalid_headers.length; ++i) { >- try_name(invalid_headers[i]) >- } >- for (var i = 0; i < invalid_byte_strings.length; ++i) { >- try_byte_string(invalid_byte_strings[i]) >- } >- >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-value-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-value-expected.txt >deleted file mode 100644 >index b78997f2a60a3bfcdff931a6f34c0d212bdba014..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-value-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >- >-PASS XMLHttpRequest: setRequestHeader() value argument checks >-PASS XMLHttpRequest: setRequestHeader() value argument checks 1 >-PASS XMLHttpRequest: setRequestHeader() value argument checks 2 >-PASS XMLHttpRequest: setRequestHeader() value argument checks 3 >-PASS Omitted value argument >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-value.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-value.htm >deleted file mode 100644 >index 15fbb39052526df052af8940cb8db7149302afc4..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-value.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <meta charset="utf-8"> >- <title>XMLHttpRequest: setRequestHeader() value argument checks</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="/following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function try_value(value) { >- test(function() { >- var client = new XMLHttpRequest(); >- client.open("GET", "..."); >- assert_throws("SyntaxError", function() { client.setRequestHeader("x-test", value) }, ' given value ' + value+', '); >- }); >- } >- try_value("t\x00t"); >- try_value("t\rt"); >- try_value("t\nt"); >- test(function() { >- var client = new XMLHttpRequest(); >- client.open("GET", "..."); >- assert_throws(new TypeError(), function() { client.setRequestHeader("x-test", "ï¾ï½½ï¾") }, ' given value ï¾ï½½ï¾,'); >- }); >- >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "...") >- assert_throws(new TypeError(), function() { client.setRequestHeader("x-test") }) >- }, 'Omitted value argument') >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive-expected.txt >deleted file mode 100644 >index 7eac3a6315c30c804f4cfba9da4a401eca4c27d0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: setRequestHeader() - headers that differ in case >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive.htm >deleted file mode 100644 >index 65f7d29170cfd3aafdd203a1d8c5c4e80151dc36..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive.htm >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: setRequestHeader() - headers that differ in case</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- client.open("POST", "resources/inspect-headers.py?filter_value=t1, t2, t3", false) >- client.setRequestHeader("x-test", "t1") >- client.setRequestHeader("X-TEST", "t2") >- client.setRequestHeader("X-teST", "t3") >- client.send(null) >- assert_equals(client.responseText, "x-test,") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt >deleted file mode 100644 >index c97aa8773c4c9b1042a59f441a9a0e3ed989e7ac..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt >+++ /dev/null >@@ -1,38 +0,0 @@ >-CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >-CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >-CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >- >-FAIL setRequestHeader("") sends a blank string assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL setRequestHeader(" ") sends the string " " assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS setRequestHeader(null) sends the string "null" >-PASS setRequestHeader(undefined) sends the string "undefined" >-PASS String request has correct default Content-Type of "text/plain;charset=UTF-8" >-PASS String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >-FAIL XML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS XML Document request has correct default Content-Type of "application/xml;charset=UTF-8" >-FAIL XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: application/xhtml+xml;charset=UTF-8\n" but got "Content-Type: application/xhtml+xml;charset=ASCII\n" >-FAIL HTML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS HTML Document request has correct default Content-Type of "text/html;charset=UTF-8" >-FAIL HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: text/html+junk;charset=UTF-8\n" but got "Content-Type: text/html+junk;charset=ASCII\n" >-FAIL Blob request respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL Blob request with unset type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: \n" >-PASS Blob request with unset type keeps setRequestHeader() Content-Type and charset >-FAIL Blob request with set type respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS Blob request with set type uses that it for Content-Type unless setRequestHeader() >-PASS Blob request with set type keeps setRequestHeader() Content-Type and charset >-FAIL ArrayBuffer request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL ArrayBuffer request sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: application/x-www-form-urlencoded\n" >-PASS ArrayBuffer request keeps setRequestHeader() Content-Type and charset >-FAIL ArrayBufferView request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL ArrayBufferView request sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: application/x-www-form-urlencoded\n" >-PASS ArrayBufferView request keeps setRequestHeader() Content-Type and charset >-FAIL FormData request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS FormData request has correct default Content-Type of "multipart/form-data; boundary=_" >-PASS FormData request keeps setRequestHeader() Content-Type and charset >-FAIL URLSearchParams respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8" assert_equals: expected "Content-Type: application/x-www-form-urlencoded;charset=UTF-8\n" but got "Content-Type: text/plain;charset=UTF-8\n" >-PASS URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >-FAIL ReadableStream request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL ReadableStream request with under type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: text/plain;charset=UTF-8\n" >-FAIL ReadableStream request keeps setRequestHeader() Content-Type and charset assert_equals: expected "Content-Type: application/xml;charset=ASCII\n" but got "Content-Type: application/xml;charset=UTF-8\n" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type.htm >deleted file mode 100644 >index 55196d835d8830a64a213ea656ae2dc64dc74484..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type.htm >+++ /dev/null >@@ -1,237 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: setRequestHeader() - Content-Type header</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(inputGenerator, headersToSend, expectedType, title) { >- test(function() { >- const toSend = inputGenerator(), >- client = new XMLHttpRequest() >- client.open("POST", "resources/inspect-headers.py?filter_name=Content-Type", false) >- for(header in headersToSend) { >- if (headersToSend.hasOwnProperty(header)) { >- client.setRequestHeader(header, headersToSend[header]); >- } >- } >- client.send(toSend) >- >- const actual = client.responseText >- if (expectedType === undefined || expectedType === null) { >- assert_equals(actual, ""); >- } else if (expectedType instanceof RegExp) { >- assert_regexp_match(actual, expectedType); >- } else { >- assert_equals(actual, "Content-Type: " + expectedType + "\n"); >- } >- }, title) >- } >- request( >- function _String() { return ""; }, >- {"Content-Type": ""}, >- "", >- 'setRequestHeader("") sends a blank string' >- ) >- request( >- function _String() { return ""; }, >- {"Content-Type": " "}, >- "", >- 'setRequestHeader(" ") sends the string " "' >- ) >- request( >- function _String() { return ""; }, >- {"Content-Type": null}, >- "null", >- 'setRequestHeader(null) sends the string "null"' >- ) >- request( >- function _String() { return ""; }, >- {"Content-Type": undefined}, >- "undefined", >- 'setRequestHeader(undefined) sends the string "undefined"' >- ) >- request( >- function _String() { return "test"; }, >- {}, >- "text/plain;charset=UTF-8", >- 'String request has correct default Content-Type of "text/plain;charset=UTF-8"' >- ) >- request( >- function _String() { return "test()"; }, >- {"Content-Type": "text/javascript;charset=ASCII"}, >- "text/javascript;charset=UTF-8", >- "String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" >- ) >- request( >- function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, >- {"Content-Type": ""}, >- "", >- 'XML Document request respects setRequestHeader("")' >- ) >- request( >- function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, >- {}, >- "application/xml;charset=UTF-8", >- 'XML Document request has correct default Content-Type of "application/xml;charset=UTF-8"' >- ) >- request( >- function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, >- {"Content-Type": "application/xhtml+xml;charset=ASCII"}, >- "application/xhtml+xml;charset=UTF-8", >- "XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" >- ) >- request( >- function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, >- {"Content-Type": ""}, >- "", >- 'HTML Document request respects setRequestHeader("")' >- ) >- request( >- function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, >- {}, >- "text/html;charset=UTF-8", >- 'HTML Document request has correct default Content-Type of "text/html;charset=UTF-8"' >- ) >- request( >- function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, >- {"Content-Type": "text/html+junk;charset=ASCII"}, >- "text/html+junk;charset=UTF-8", >- "HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" >- ) >- request( >- function _Blob() { return new Blob(["test"]); }, >- {"Content-Type": ""}, >- "", >- 'Blob request respects setRequestHeader("") to be specified' >- ) >- request( >- function _Blob() { return new Blob(["test"]); }, >- {}, >- undefined, >- "Blob request with unset type sends no Content-Type without setRequestHeader() call" >- ) >- request( >- function _Blob() { return new Blob(["test"]); }, >- {"Content-Type": "application/xml;charset=ASCII"}, >- "application/xml;charset=ASCII", >- "Blob request with unset type keeps setRequestHeader() Content-Type and charset" >- ) >- request( >- function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=ASCII"}); }, >- {"Content-Type": ""}, >- "", >- 'Blob request with set type respects setRequestHeader("") to be specified' >- ) >- request( >- function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=ASCII"}); }, >- {}, >- "application/xml;charset=ascii", // new Blob lowercases the type argument >- "Blob request with set type uses that it for Content-Type unless setRequestHeader()" >- ) >- request( >- function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=UTF8"}); }, >- {"Content-Type": "application/xml+junk;charset=ASCII"}, >- "application/xml+junk;charset=ASCII", >- "Blob request with set type keeps setRequestHeader() Content-Type and charset" >- ) >- request( >- function _ArrayBuffer() { return new ArrayBuffer(10); }, >- {"Content-Type": ""}, >- "", >- 'ArrayBuffer request respects setRequestHeader("")' >- ) >- request( >- function _ArrayBuffer() { return new ArrayBuffer(10); }, >- {}, >- undefined, >- "ArrayBuffer request sends no Content-Type without setRequestHeader() call" >- ) >- request( >- function _ArrayBuffer() { return new ArrayBuffer(10); }, >- {"Content-Type": "application/xml;charset=ASCII"}, >- "application/xml;charset=ASCII", >- "ArrayBuffer request keeps setRequestHeader() Content-Type and charset" >- ) >- request( >- function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, >- {"Content-Type": ""}, >- "", >- 'ArrayBufferView request respects setRequestHeader("")' >- ) >- request( >- function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, >- {}, >- undefined, >- "ArrayBufferView request sends no Content-Type without setRequestHeader() call" >- ) >- request( >- function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, >- {"Content-Type": "application/xml;charset=ASCII"}, >- "application/xml;charset=ASCII", >- "ArrayBufferView request keeps setRequestHeader() Content-Type and charset" >- ) >- request( >- function _FormData() { return new FormData(); }, >- {"Content-Type": ""}, >- "", >- 'FormData request respects setRequestHeader("")' >- ) >- request( >- function _FormData() { return new FormData(); }, >- {}, >- /multipart\/form-data; boundary=(.*)/, >- 'FormData request has correct default Content-Type of "multipart\/form-data; boundary=_"' >- ) >- request( >- function _FormData() { return new FormData(); }, >- {"Content-Type": "application/xml;charset=ASCII"}, >- "application/xml;charset=ASCII", >- "FormData request keeps setRequestHeader() Content-Type and charset" >- ) >- request( >- function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, >- {"Content-Type": ""}, >- "", >- 'URLSearchParams respects setRequestHeader("")' >- ) >- request( >- function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, >- {}, >- "application/x-www-form-urlencoded;charset=UTF-8", >- 'URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8"' >- ) >- request( >- function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, >- {"Content-Type": "application/xml;charset=ASCII"}, >- "application/xml;charset=UTF-8", >- "URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" >- // the default Content-Type for URLSearchParams has a charset specified (utf-8) in >- // https://fetch.spec.whatwg.org/#bodyinit, so the user's must be changed to match it >- // as per https://xhr.spec.whatwg.org/#the-send%28%29-method step 4. >- ) >- request( >- function _ReadableStream() { return new ReadableStream() }, >- {"Content-Type": ""}, >- "", >- 'ReadableStream request respects setRequestHeader("")' >- ) >- request( >- function _ReadableStream() { return new ReadableStream() }, >- {}, >- undefined, >- "ReadableStream request with under type sends no Content-Type without setRequestHeader() call" >- ) >- request( >- function _ReadableStream() { return new ReadableStream() }, >- {"Content-Type": "application/xml;charset=ASCII"}, >- "application/xml;charset=ASCII", >- "ReadableStream request keeps setRequestHeader() Content-Type and charset" >- ) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed-expected.txt >deleted file mode 100644 >index e2dd50dafa594c17116d4e25ee4bfb4ccf35bc0c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed-expected.txt >+++ /dev/null >@@ -1,11 +0,0 @@ >- >-PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Authorization) >-PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Pragma) >-PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (User-Agent) >-PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Content-Transfer-Encoding) >-PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Content-Type) >-PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Overwrite) >-PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (If) >-PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Status-URI) >-PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (X-Pink-Unicorn) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed.htm >deleted file mode 100644 >index cd11e334a0f36d2b1deafbc892613d8a3e93a7b9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed.htm >+++ /dev/null >@@ -1,33 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: setRequestHeader() - headers that are allowed</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >- </head> >- <body> >- <div id="log"></div> >- <script> >- function request(header) { >- test(function() { >- var client = new XMLHttpRequest() >- client.open("POST", "resources/inspect-headers.py?filter_value=t1, t2", false) >- client.setRequestHeader(header, "t1") >- client.setRequestHeader(header, "t2") >- client.send(null) >- assert_equals(client.responseText, header + ",") >- }, document.title + " (" + header + ")") >- } >- request("Authorization") >- request("Pragma") >- request("User-Agent") >- request("Content-Transfer-Encoding") >- request("Content-Type") >- request("Overwrite") >- request("If") >- request("Status-URI") >- request("X-Pink-Unicorn") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-forbidden-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-forbidden-expected.txt >deleted file mode 100644 >index 569f478af2103209b619311dd4499c10ade9c11d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-forbidden-expected.txt >+++ /dev/null >@@ -1,25 +0,0 @@ >-CONSOLE MESSAGE: line 16: Refused to set unsafe header "Accept-Charset" >-CONSOLE MESSAGE: line 17: Refused to set unsafe header "Accept-Encoding" >-CONSOLE MESSAGE: line 18: Refused to set unsafe header "Connection" >-CONSOLE MESSAGE: line 19: Refused to set unsafe header "Content-Length" >-CONSOLE MESSAGE: line 20: Refused to set unsafe header "Cookie" >-CONSOLE MESSAGE: line 21: Refused to set unsafe header "Cookie2" >-CONSOLE MESSAGE: line 22: Refused to set unsafe header "Date" >-CONSOLE MESSAGE: line 23: Refused to set unsafe header "DNT" >-CONSOLE MESSAGE: line 24: Refused to set unsafe header "Expect" >-CONSOLE MESSAGE: line 25: Refused to set unsafe header "Host" >-CONSOLE MESSAGE: line 26: Refused to set unsafe header "Keep-Alive" >-CONSOLE MESSAGE: line 27: Refused to set unsafe header "Referer" >-CONSOLE MESSAGE: line 28: Refused to set unsafe header "TE" >-CONSOLE MESSAGE: line 29: Refused to set unsafe header "Trailer" >-CONSOLE MESSAGE: line 30: Refused to set unsafe header "Transfer-Encoding" >-CONSOLE MESSAGE: line 31: Refused to set unsafe header "Upgrade" >-CONSOLE MESSAGE: line 32: Refused to set unsafe header "Via" >-CONSOLE MESSAGE: line 33: Refused to set unsafe header "Proxy-" >-CONSOLE MESSAGE: line 34: Refused to set unsafe header "Proxy-LIES" >-CONSOLE MESSAGE: line 35: Refused to set unsafe header "Proxy-Authorization" >-CONSOLE MESSAGE: line 36: Refused to set unsafe header "Sec-" >-CONSOLE MESSAGE: line 37: Refused to set unsafe header "Sec-X" >- >-PASS XMLHttpRequest: setRequestHeader() - headers that are forbidden >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-forbidden.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-forbidden.htm >deleted file mode 100644 >index cc24d94499cc80f4a906822e0d3db4774858cf20..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-forbidden.htm >+++ /dev/null >@@ -1,43 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: setRequestHeader() - headers that are forbidden</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- client.open("POST", "resources/inspect-headers.py?filter_value=TEST", false) >- client.setRequestHeader("Accept-Charset", "TEST") >- client.setRequestHeader("Accept-Encoding", "TEST") >- client.setRequestHeader("Connection", "TEST") >- client.setRequestHeader("Content-Length", "TEST") >- client.setRequestHeader("Cookie", "TEST") >- client.setRequestHeader("Cookie2", "TEST") >- client.setRequestHeader("Date", "TEST") >- client.setRequestHeader("DNT", "TEST") >- client.setRequestHeader("Expect", "TEST") >- client.setRequestHeader("Host", "TEST") >- client.setRequestHeader("Keep-Alive", "TEST") >- client.setRequestHeader("Referer", "TEST") >- client.setRequestHeader("TE", "TEST") >- client.setRequestHeader("Trailer", "TEST") >- client.setRequestHeader("Transfer-Encoding", "TEST") >- client.setRequestHeader("Upgrade", "TEST") >- client.setRequestHeader("Via", "TEST") >- client.setRequestHeader("Proxy-", "TEST") >- client.setRequestHeader("Proxy-LIES", "TEST") >- client.setRequestHeader("Proxy-Authorization", "TEST") >- client.setRequestHeader("Sec-", "TEST") >- client.setRequestHeader("Sec-X", "TEST") >- client.send(null) >- assert_equals(client.responseText, "") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-open-setrequestheader-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-open-setrequestheader-expected.txt >deleted file mode 100644 >index 4c577bd1422dcbab5a8b025a12421a072149b847..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-open-setrequestheader-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: setRequestHeader() and open() >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-open-setrequestheader.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-open-setrequestheader.htm >deleted file mode 100644 >index d77d34ffb8351ffb7ca249b90999393dd5a959a8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-open-setrequestheader.htm >+++ /dev/null >@@ -1,53 +0,0 @@ >-<!DOCTYPE html> >-<!-- >-Test from https://bugzilla.mozilla.org/show_bug.cgi?id=819051 >---> >-<head> >- <title>XMLHttpRequest: setRequestHeader() and open()</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method"> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >-</head> >-<body> >- <p id="log"></p> >-<script type="text/javascript"> >-async_test(test => { >- >-var url = "resources/inspect-headers.py"; >- >-var xhr = new XMLHttpRequest(); >-xhr.open("GET", url + "?filter_name=x-appended-to-this"); >-xhr.setRequestHeader("X-appended-to-this", "False"); >-xhr.open("GET", url + "?filter_name=x-appended-to-this"); >-xhr.setRequestHeader("X-appended-to-this", "True"); >- >-xhr.onreadystatechange = test.step_func(() => { >- if (xhr.readyState == 4) { >- assert_equals(xhr.responseText, "X-appended-to-this: True\n", "Set headers record should have been cleared by open."); >- test_standard_header(); >- } >-}) >- >-xhr.send(); >- >-function test_standard_header () { >- var header_tested = "Accept"; >- var xhr = new XMLHttpRequest(); >- xhr.open("GET", url + "?filter_name=accept"); >- xhr.setRequestHeader("Accept", "foo/bar"); >- xhr.open("GET", url + "?filter_name=accept"); >- xhr.setRequestHeader("Accept", "bar/foo"); >- >- xhr.onreadystatechange = test.step_func(() => { >- if (xhr.readyState == 4) { >- assert_equals(xhr.responseText, "Accept: bar/foo\n", "Set headers record should have been cleared by open."); >- test.done(); >- } >- }) >- >- xhr.send(); >-} >- >-}) >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-async-expected.txt >deleted file mode 100644 >index ee77bfa870f5746ba98183836510cf4c954df288..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-async-expected.txt >+++ /dev/null >@@ -1,29 +0,0 @@ >- >-PASS XMLHttpRequest: status/statusText - various responses 1 (GET 204) >-PASS XMLHttpRequest: status/statusText - various responses 2 (HEAD 204) >-PASS XMLHttpRequest: status/statusText - various responses 3 (CHICKEN 204) >-PASS XMLHttpRequest: status/statusText - various responses 4 (GET 401) >-PASS XMLHttpRequest: status/statusText - various responses 5 (HEAD 401) >-PASS XMLHttpRequest: status/statusText - various responses 6 (CHICKEN 401) >-PASS XMLHttpRequest: status/statusText - various responses 7 (GET 402) >-PASS XMLHttpRequest: status/statusText - various responses 8 (HEAD 402) >-PASS XMLHttpRequest: status/statusText - various responses 9 (CHICKEN 402) >-PASS XMLHttpRequest: status/statusText - various responses 10 (GET 402) >-PASS XMLHttpRequest: status/statusText - various responses 11 (HEAD 402) >-PASS XMLHttpRequest: status/statusText - various responses 12 (CHICKEN 402) >-PASS XMLHttpRequest: status/statusText - various responses 13 (GET 402) >-PASS XMLHttpRequest: status/statusText - various responses 14 (HEAD 402) >-PASS XMLHttpRequest: status/statusText - various responses 15 (CHICKEN 402) >-PASS XMLHttpRequest: status/statusText - various responses 16 (GET 502) >-PASS XMLHttpRequest: status/statusText - various responses 17 (HEAD 502) >-PASS XMLHttpRequest: status/statusText - various responses 18 (CHICKEN 502) >-PASS XMLHttpRequest: status/statusText - various responses 19 (GET 502) >-PASS XMLHttpRequest: status/statusText - various responses 20 (HEAD 502) >-PASS XMLHttpRequest: status/statusText - various responses 21 (CHICKEN 502) >-PASS XMLHttpRequest: status/statusText - various responses 22 (GET 503) >-PASS XMLHttpRequest: status/statusText - various responses 23 (HEAD 503) >-PASS XMLHttpRequest: status/statusText - various responses 24 (CHICKEN 503) >-PASS XMLHttpRequest: status/statusText - various responses 25 (GET 699) >-PASS XMLHttpRequest: status/statusText - various responses 26 (HEAD 699) >-PASS XMLHttpRequest: status/statusText - various responses 27 (CHICKEN 699) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-async.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-async.htm >deleted file mode 100644 >index dcf7d62467adcb9a90b60a2ed18f3bb6654354a9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-async.htm >+++ /dev/null >@@ -1,62 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: status/statusText - various responses</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol/li[1] following::ol/li[3]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol/li[1] following::ol/li[3]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-getresponseheader()-method" data-tested-assertations="following::ol/li[5]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var counter=0 >- function statusRequest(method, code, text, content, type) { >- counter++ >- var test = async_test(document.title +' '+ counter+" (" + method + " " + code + ")") >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function(e) { >- test.step(function() { >- if(client.readyState > 1) { >- assert_equals(client.status, code) >- assert_equals(client.statusText, text) >- assert_equals(client.getResponseHeader("X-Request-Method"), method) >- if(client.readyState == 4) { >- if(method != "HEAD") { >- if(type == "text/xml") { >- assert_equals(client.responseXML.documentElement.localName, "x") >- } >- assert_equals(client.responseText, content) >- } >- test.done() >- } >- }else{ >- assert_equals(client.status, 0) >- assert_equals(client.statusText, "") >- } >- }, this) >- } >- client.open(method, "resources/status.py?code=" + encodeURIComponent(code) + "&text=" + text + "&content=" + encodeURIComponent(content) + "&type=" + encodeURIComponent(type)) >- client.send(null) >- }) >- } >- function status(code, text, content, type) { >- statusRequest("GET", code, text, content, type) >- statusRequest("HEAD", code, text, content, type) >- statusRequest("CHICKEN", code, text, content, type) >- } >- status(204, "UNICORNSWIN", "", "") >- status(401, "OH HELLO", "Not today.", "") >- status(402, "FIVE BUCKS", "<x>402<\/x>", "text/xml") >- status(402, "FREE", "Nice!", "text/doesnotmatter") >- status(402, "402 TEH AWESOME", "", "") >- status(502, "YO", "", "") >- status(502, "lowercase", "SWEET POTATO", "text/plain") >- status(503, "HOUSTON WE HAVE A", "503", "text/plain") >- status(699, "WAY OUTTA RANGE", "699", "text/plain") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-basic-expected.txt >deleted file mode 100644 >index ee77bfa870f5746ba98183836510cf4c954df288..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-basic-expected.txt >+++ /dev/null >@@ -1,29 +0,0 @@ >- >-PASS XMLHttpRequest: status/statusText - various responses 1 (GET 204) >-PASS XMLHttpRequest: status/statusText - various responses 2 (HEAD 204) >-PASS XMLHttpRequest: status/statusText - various responses 3 (CHICKEN 204) >-PASS XMLHttpRequest: status/statusText - various responses 4 (GET 401) >-PASS XMLHttpRequest: status/statusText - various responses 5 (HEAD 401) >-PASS XMLHttpRequest: status/statusText - various responses 6 (CHICKEN 401) >-PASS XMLHttpRequest: status/statusText - various responses 7 (GET 402) >-PASS XMLHttpRequest: status/statusText - various responses 8 (HEAD 402) >-PASS XMLHttpRequest: status/statusText - various responses 9 (CHICKEN 402) >-PASS XMLHttpRequest: status/statusText - various responses 10 (GET 402) >-PASS XMLHttpRequest: status/statusText - various responses 11 (HEAD 402) >-PASS XMLHttpRequest: status/statusText - various responses 12 (CHICKEN 402) >-PASS XMLHttpRequest: status/statusText - various responses 13 (GET 402) >-PASS XMLHttpRequest: status/statusText - various responses 14 (HEAD 402) >-PASS XMLHttpRequest: status/statusText - various responses 15 (CHICKEN 402) >-PASS XMLHttpRequest: status/statusText - various responses 16 (GET 502) >-PASS XMLHttpRequest: status/statusText - various responses 17 (HEAD 502) >-PASS XMLHttpRequest: status/statusText - various responses 18 (CHICKEN 502) >-PASS XMLHttpRequest: status/statusText - various responses 19 (GET 502) >-PASS XMLHttpRequest: status/statusText - various responses 20 (HEAD 502) >-PASS XMLHttpRequest: status/statusText - various responses 21 (CHICKEN 502) >-PASS XMLHttpRequest: status/statusText - various responses 22 (GET 503) >-PASS XMLHttpRequest: status/statusText - various responses 23 (HEAD 503) >-PASS XMLHttpRequest: status/statusText - various responses 24 (CHICKEN 503) >-PASS XMLHttpRequest: status/statusText - various responses 25 (GET 699) >-PASS XMLHttpRequest: status/statusText - various responses 26 (HEAD 699) >-PASS XMLHttpRequest: status/statusText - various responses 27 (CHICKEN 699) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-basic.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-basic.htm >deleted file mode 100644 >index fed7cabec475527b3a73c84236609411ced8537f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-basic.htm >+++ /dev/null >@@ -1,51 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: status/statusText - various responses</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol/li[3]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol/li[3]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-getresponseheader()-method" data-tested-assertations="following::ol/li[5]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var counter = 0 >- function statusRequest(method, code, text, content, type) { >- counter++ >- test(function() { >- var client = new XMLHttpRequest() >- assert_equals(client.status, 0); >- client.open(method, "resources/status.py?code=" + code + "&text=" + encodeURIComponent(text) + "&content=" + encodeURIComponent(content) + "&type=" + encodeURIComponent(type), false) >- assert_equals(client.status, 0); >- client.send(null) >- assert_equals(client.status, code) >- assert_equals(client.statusText, text) >- assert_equals(client.getResponseHeader("X-Request-Method"), method) >- if(method != "HEAD") { >- if(type == "text/xml") { >- assert_equals(client.responseXML.documentElement.localName, "x") >- } >- assert_equals(client.responseText, content) >- } >- }, document.title + " " + counter + " (" + method + " " + code + ")") >- } >- function status(code, text, content, type) { >- statusRequest("GET", code, text, content, type) >- statusRequest("HEAD", code, text, content, type) >- statusRequest("CHICKEN", code, text, content, type) >- } >- status(204, "UNICORNSWIN", "", "") >- status(401, "OH HELLO", "Not today.", "") >- status(402, "FIVE BUCKS", "<x>402<\/x>", "text/xml") >- status(402, "FREE", "Nice!", "text/doesnotmatter") >- status(402, "402 TEH AWESOME", "", "") >- status(502, "YO", "", "") >- status(502, "lowercase", "SWEET POTATO", "text/plain") >- status(503, "HOUSTON WE HAVE A", "503", "text/plain") >- status(699, "WAY OUTTA RANGE", "699", "text/plain") >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-error-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-error-expected.txt >deleted file mode 100644 >index e58222d9d85d9c01393c8ab99213dabd37ee6a82..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-error-expected.txt >+++ /dev/null >@@ -1,23 +0,0 @@ >-This shouldn't be tested inside a tunnel. >- >- >-PASS XMLHttpRequest: status error handling GET 200 >-PASS XMLHttpRequest: status error handling GET 400 >-PASS XMLHttpRequest: status error handling GET 401 >-PASS XMLHttpRequest: status error handling GET 404 >-PASS XMLHttpRequest: status error handling GET 410 >-PASS XMLHttpRequest: status error handling GET 500 >-PASS XMLHttpRequest: status error handling GET 699 >-PASS XMLHttpRequest: status error handling HEAD 200 >-PASS XMLHttpRequest: status error handling HEAD 404 >-PASS XMLHttpRequest: status error handling HEAD 500 >-PASS XMLHttpRequest: status error handling HEAD 699 >-PASS XMLHttpRequest: status error handling POST 200 >-PASS XMLHttpRequest: status error handling POST 404 >-PASS XMLHttpRequest: status error handling POST 500 >-PASS XMLHttpRequest: status error handling POST 699 >-PASS XMLHttpRequest: status error handling PUT 200 >-PASS XMLHttpRequest: status error handling PUT 404 >-PASS XMLHttpRequest: status error handling PUT 500 >-PASS XMLHttpRequest: status error handling PUT 699 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-error.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-error.htm >deleted file mode 100644 >index a9c15c4c51b3a8693ccae0d71acf1ffc4d0b50be..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-error.htm >+++ /dev/null >@@ -1,60 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: status error handling</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onerror" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="/following::ol/li[3]" /> >- </head> >- <body> >- <p>This shouldn't be tested inside a tunnel.</p> >- <div id="log"></div> >- <script> >- function noError(method, code) { >- var test = async_test(document.title + " " + method + " " + code) >- >- test.step(function() { >- var client = new XMLHttpRequest() >- client.open(method, "resources/status.py?code=" + code, true) >- >- client.onreadystatechange = test.step_func(function() { >- assert_equals(client.response, "", "response data") >- assert_equals(client.status, code, "response status") >- >- if (client.readyState == client.DONE) >- /* Give extra time for a bogus error event to pop up */ >- test.step_timeout(() => { test.done() }, 100) >- }) >- client.onerror = test.step_func(function() { >- assert_unreached("HTTP error should not throw error event") >- }) >- client.send() >- }) >- } >- >- noError('GET', 200) >- noError('GET', 400) >- noError('GET', 401) >- noError('GET', 404) >- noError('GET', 410) >- noError('GET', 500) >- noError('GET', 699) >- >- noError('HEAD', 200) >- noError('HEAD', 404) >- noError('HEAD', 500) >- noError('HEAD', 699) >- >- noError('POST', 200) >- noError('POST', 404) >- noError('POST', 500) >- noError('POST', 699) >- >- noError('PUT', 200) >- noError('PUT', 404) >- noError('PUT', 500) >- noError('PUT', 699) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/template-element-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/template-element-expected.txt >deleted file mode 100644 >index 7d8f7b936b8c0fe8eaaf5e773a9fe4d476d291ea..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/template-element-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS XMLHttpRequest: template element parsing >-PASS XMLHttpRequest: template element parsing 1 >-PASS XMLHttpRequest: template element parsing 2 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/template-element.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/template-element.html >deleted file mode 100644 >index c23c99788e46dae24009b3c5092efeb5f93b8e1f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/template-element.html >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: template element parsing</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<div id=log></div> >-<script> >-async_test(t => { >- const client = new XMLHttpRequest >- client.open("GET", "data:text/xml,<template xmlns='http://www.w3.org/1999/xhtml'><test/></template>") >- client.send() >- client.onload = t.step_func_done(() => { >- assert_equals(client.responseXML.documentElement.childElementCount, 0) >- assert_equals(client.responseXML.documentElement.content.firstChild.localName, "test") >- }) >-}) >- >-async_test(t => { >- const client = new XMLHttpRequest >- client.open("GET", "data:text/xml,<template><test/></template>") >- client.send() >- client.onload = t.step_func_done(() => { >- assert_equals(client.responseXML.documentElement.childElementCount, 1) >- assert_equals(client.responseXML.documentElement.firstChild.localName, "test") >- }) >-}) >- >-async_test(t => { >- const client = new XMLHttpRequest >- client.open("GET", "data:text/xml,<template xmlns='http://www.w3.org/2000/svg'><test/></template>") >- client.send() >- client.onload = t.step_func_done(() => { >- assert_equals(client.responseXML.documentElement.childElementCount, 1) >- assert_equals(client.responseXML.documentElement.firstChild.localName, "test") >- }) >-}) >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-cors-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-cors-async-expected.txt >deleted file mode 100644 >index 3d4a8cd755c23b530a51119ce04995cf706ffd5a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-cors-async-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-Blocked access to external URL http://www2.localhost:8800/XMLHttpRequest/resources/corsenabled.py?delay=2&code=200 >-CONSOLE MESSAGE: line 40: XMLHttpRequest cannot load http://www2.localhost:8800/XMLHttpRequest/resources/corsenabled.py?delay=2&code=200 due to access control checks. >- >-FAIL XMLHttpRequest: timeout event and cross-origin request assert_true: timeout event should fire expected true got false >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-cors-async.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-cors-async.htm >deleted file mode 100644 >index 35e2a30ba2f51aaa6b3ba21603869db156decd5b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-cors-async.htm >+++ /dev/null >@@ -1,43 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: timeout event and cross-origin request</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#cross-origin-request-event-rules" data-tested-assertations="following::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(document.title) >- var client = new XMLHttpRequest() >- var gotTimeout = false >- client.open("GET", "http://www2." + location.hostname + (location.port ? ":" + location.port : "") +(location.pathname.replace(/[^\/]+$/, '')+'resources/corsenabled.py')+"?delay=2&code=200") >- client.timeout = 100 >- client.addEventListener('timeout', function (e) { >- test.step(function() { >- assert_equals(e.type, 'timeout') >- assert_equals(client.status, 0) >- gotTimeout = true >- }) >- }) >- client.addEventListener('load', function (e) { >- test.step(function() { >- assert_unreached('load event should not fire') >- }) >- }) >- client.addEventListener('loadend', function (e) { >- test.step(function() { >- assert_true(gotTimeout, "timeout event should fire") >- test.done() >- }) >- }) >- >- client.send(null) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-multiple-fetches-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-multiple-fetches-expected.txt >deleted file mode 100644 >index 420aa506c0ae8d2be8d09ef27063d92960c92800..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-multiple-fetches-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS Redirects should not reset the timer >-PASS CORS preflights should not reset the timer >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-multiple-fetches.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-multiple-fetches.html >deleted file mode 100644 >index d2ab4d2c1d305f1d79b952a7fc6da83dd580fdab..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-multiple-fetches.html >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!doctype html> >-<title>XMLHttpRequest: timeout, redirects, and CORS preflights</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<script src=/common/get-host-info.sub.js></script> >-<div id=log></div> >-<script> >-async_test(t => { >- const client = new XMLHttpRequest >- client.open("GET", "resources/redirect.py?delay=500&location=delay.py") // 500 + 500 = 1000 >- client.timeout = 1000 >- client.send() >- client.ontimeout = t.step_func_done(() => { >- assert_equals(client.readyState, 4) >- }) >- client.onload = t.unreached_func("load event fired") >-}, "Redirects should not reset the timer") >- >-async_test(t => { >- const client = new XMLHttpRequest >- client.open("YO", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/delay.py") >- client.timeout = 1000 >- client.send() >- client.ontimeout = t.step_func_done(() => { >- assert_equals(client.readyState, 4) >- }) >- client.onload = t.unreached_func("load event fired") >-}, "CORS preflights should not reset the timer") >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-sync-expected.txt >deleted file mode 100644 >index d94252489361795356121977edbe152dc894c1dd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-sync-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >-CONSOLE MESSAGE: line 1253: XMLHttpRequest.timeout cannot be set for synchronous HTTP(S) requests made from the window context. >-CONSOLE MESSAGE: line 21: Synchronous XMLHttpRequests must not have a timeout value set. >- >-PASS setting timeout attribute on sync request >-PASS open() with async false when timeout is set >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-sync.htm >deleted file mode 100644 >index 9815532c70ff347199a998f02bf4b11f15c7bcee..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-sync.htm >+++ /dev/null >@@ -1,25 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: timeout not allowed for sync requests</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[10]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- client.open('GET', 'folder.txt', false) >- assert_throws("InvalidAccessError", function() { client.timeout = 1000 }) >- }, 'setting timeout attribute on sync request') >- test(function() { >- var client = new XMLHttpRequest() >- client.timeout = 1000 >- assert_throws("InvalidAccessError", function() { client.open('GET', 'folder.txt', false) }) >- }, 'open() with async false when timeout is set') >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/w3c-import.log >deleted file mode 100644 >index 79837a1bb373692eab77fae5cf37d1a7ba9c92cb..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/w3c-import.log >+++ /dev/null >@@ -1,293 +0,0 @@ >-The tests in this directory were imported from the W3C repository. >-Do NOT modify these tests directly in WebKit. >-Instead, create a pull request on the WPT github: >- https://github.com/w3c/web-platform-tests >- >-Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >- >-Do NOT modify or remove this file. >- >------------------------------------------------------------------------- >-Properties requiring vendor prefixes: >-None >-Property values requiring vendor prefixes: >-None >------------------------------------------------------------------------- >-List of files: >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/FormData-append.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/OWNERS >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/README.md >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-receive.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-send.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-after-timeout.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-done.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-headers-received.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-loading.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-open.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-unsent.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-during-upload.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-abort.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-listeners.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-loadend.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-event-order.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-abort.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/abort-upload-event-loadend.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-same-origin.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header-data-url.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-access-control-origin-header.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-async.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method-async.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-non-cors-safelisted-method.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-header.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-invalidation-by-method.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache-timeout.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-preflight-cache.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow-star.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-allow.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-response-headers.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-success-no-content-type.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-header-denied.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-method-denied.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-not-supported.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-async.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-credential-sync.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-async.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-headers-sync.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-lowercase.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-header-sorted.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-headers-origin.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-must-not-contain-cookie.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-header-denied.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-method-denied.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-not-supported.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-recursive-failed-request.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body-sync.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-body.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-response-with-exposed-headers.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow-origin-null.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-allow.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/allow-lists-starting-with-comma.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/anonymous-mode-unsupported.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/data-uri.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-abort.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-error.sub.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-load.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadend.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart-upload.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-loadstart.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-progress.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystate-sync-open.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-readystatechange-loaded.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-timeout.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-content-length.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-no-content-length.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/folder.txt >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-blob.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-delete.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-foreach.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-get.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-has.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata-set.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/formdata.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cookies.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-status.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-chunked-trailer.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-cookies-and-more.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-error-state.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-server-date.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-special-characters.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-unsent-opened-state.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/headers-normalize-response.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/historical.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/interfaces.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/loadstart-and-state.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-abort.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-after-setrequestheader.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-event.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort-processing.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-during-abort.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-bogus.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-insensitive.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-case-sensitive.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-insecure.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-method-responsetype-set-sync.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-send.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-open-sync-send.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-referer.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-during-abort.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-send-open.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-sync-open-send.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-about-blank-window.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted-after-open.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base-inserted.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-base.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-encoding.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-fragment.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window-2.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-javascript-window.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-2.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-3.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-4.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-5.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-6.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-redirected-worker-origin.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-origin.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-url-worker-simple.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/open-user-password-non-same-origin.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-blob.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-done-state.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-headers-received-state-force-shiftjis.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-invalid-mime-type.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-loading-state.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-utf-8.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-open-state-force-xml.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progress-events-response-data-gzip.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-constructor.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/progressevent-interface.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-arraybuffer.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-blob.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-deflate.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-gzip.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-data-progress.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-invalid-responsetype.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-json.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/response-method.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseText-status.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseType-document-in-worker.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseXML-unavailable-in-worker.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsedocument-decoding.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetext-decoding.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsetype.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responseurl.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-basic.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-get-twice.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-media-type.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-document-types.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-non-well-formed.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/security-consideration.sub.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept-language.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-accept.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-repeat-no-args.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-setrequestheader.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-cors.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-charset.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-content-type-string.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybuffer.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-arraybufferview.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-blob.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-es-object.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-formdata.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-data-unexpected-tostring.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-basic.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document-bogus.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadend.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-loadstart.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-no-response-event-order.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-receive-utf16.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-sync.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-no-location.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-cors.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-non-cors.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-event-order.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadend.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-loadstart.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-response-upload-event-progress.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-send.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-blocks-async.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-load.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-loadend.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-no-response-event-order.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-response-event-order.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-sync-timeout.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-timeout-events.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-usp.any.js >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-after-send.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-empty-value.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-allow-whitespace-in-value.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-before-open.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-name.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-bogus-value.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-case-insensitive.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-forbidden.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-open-setrequestheader.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-async.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-basic.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/status-error.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/template-element.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-cors-async.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-multiple-fetches.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/timeout-sync.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-basic.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-eventtarget.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error.htm >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts-subframe.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-scripts.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader-subframe.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-aborted.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-abortedonmain.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overrides.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overridesexpires.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-simple.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-synconmain.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-twice.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-aborted.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overrides.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overridesexpires.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-simple.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-synconworker.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-twice.html >-/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent.htm >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-basic-expected.txt >deleted file mode 100644 >index 7da83b4a203333734d5a4dce7609ebd18c0795c3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-basic-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: prototype and members >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-basic.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-basic.htm >deleted file mode 100644 >index c48b610ff6627af704810740a2dcab23d085764b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-basic.htm >+++ /dev/null >@@ -1,45 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: prototype and members</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest" data-tested-assertations="following::ol/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#xmlhttprequest" data-tested-assertations="." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#states" data-tested-assertations="following::dfn[2] following::dfn[3] following::dfn[4] following::dfn[5] following::dfn[6]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- XMLHttpRequest.prototype.test = function() { return "TEH" } >- var client = new XMLHttpRequest() >- assert_equals(client.test(), "TEH") >- var members = ["onreadystatechange", >- "open", >- "setRequestHeader", >- "send", >- "abort", >- "status", >- "statusText", >- "getResponseHeader", >- "getAllResponseHeaders", >- "responseText", >- "responseXML"] >- for(var x in members) >- assert_true(members[x] in client, members[x]) >- var constants = ["UNSENT", >- "OPENED", >- "HEADERS_RECEIVED", >- "LOADING", >- "DONE"], >- i = 0 >- for(var x in constants) { >- assert_equals(client[constants[x]], i, constants[x]) >- assert_equals(XMLHttpRequest[constants[x]], i, "XHR " + constants[x]) >- i++ >- } >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-eventtarget-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-eventtarget-expected.txt >deleted file mode 100644 >index 2eef69e4a9f6e719d8c4cbee0e1c598fe06e2753..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-eventtarget-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: implements EventTarget >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-eventtarget.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-eventtarget.htm >deleted file mode 100644 >index ea58fd4dc3e8f1f1d89515b410f2c9357b5d5e60..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-eventtarget.htm >+++ /dev/null >@@ -1,48 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: implements EventTarget</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#xmlhttprequesteventtarget" data-tested-assertations=".." /> >- <!-- Obviously, most of the stuff actually being tested here is covered in the DOM events spec, not in the XHR spec --> >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test(), >- x = null, >- expected = ["a1", "b1", "c1", "a2", "b2", "c2", "a3", "c3", "a4", "c4"], >- result = [] >- function callback(e) { >- result.push("b" + x.readyState) >- test.step(function() { >- if(x.readyState == 3) >- assert_unreached() >- }) >- } >- test.step(function() { >- x = new XMLHttpRequest() >- x.onreadystatechange = function() { >- test.step(function() { >- result.push("a" + x.readyState) >- }) >- } >- x.addEventListener("readystatechange", callback, false) >- x.addEventListener("readystatechange", function() { >- test.step(function() { >- result.push("c" + x.readyState) >- if(x.readyState == 2) >- x.removeEventListener("readystatechange", callback, false) >- if(x.readyState == 4) { >- assert_array_equals(result, expected) >- test.done() >- } >- }) >- }, false) >- x.open("GET", "folder.txt") >- x.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-expected.txt >deleted file mode 100644 >index 3751341d7fb002150b17c2abdaf0ba1ca79d63a0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: members during network errors >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync-expected.txt >deleted file mode 100644 >index 3b0f3c14560cf9d57ce22bb69533287db6476456..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: members during network errors (sync) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync.htm >deleted file mode 100644 >index c4a887a1ebee76390dea928f8c56a2c8f34d6ad2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync.htm >+++ /dev/null >@@ -1,34 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: members during network errors (sync)</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/p[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[5]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-getresponseheader()-method" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[3]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[3]" /> >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- client.open("GET", "resources/infinite-redirects.py", false) >- assert_throws("NetworkError", function() { client.send(null) }, "send") >- assert_equals(client.status, 0, "status") >- assert_equals(client.statusText, "", "statusText") >- assert_equals(client.getAllResponseHeaders(), "", "getAllResponseHeaders") >- assert_equals(client.getResponseHeader("content-type"), null, "getResponseHeader") >- assert_equals(client.responseText, "", "responseText") >- assert_equals(client.responseXML, null, "responseXML") >- assert_equals(client.readyState, client.DONE, "readyState") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error.htm >deleted file mode 100644 >index c8e32008095f817f150af872d9551cbeae899b0e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error.htm >+++ /dev/null >@@ -1,39 +0,0 @@ >-<!DOCTYPE html> >-<html> >- <head> >- <title>XMLHttpRequest: members during network errors</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/ol/li[1] following::dl[1]/dd[2]/ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-getresponseheader()-method" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[3]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[3]" /> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- var test = async_test() >- test.step(function() { >- var client = new XMLHttpRequest() >- client.onreadystatechange = function() { >- test.step(function() { >- assert_equals(client.status, 0, "status") >- assert_equals(client.statusText, "", "statusText") >- assert_equals(client.getAllResponseHeaders(), "", "getAllResponseHeaders") >- assert_equals(client.getResponseHeader("content-type"), null, "getResponseHeader") >- assert_equals(client.responseText, "", "responseText") >- assert_equals(client.responseXML, null, "responseXML") >- if(client.readyState == 4) >- test.done() >- }) >- } >- client.open("GET", "resources/infinite-redirects.py") >- client.send(null) >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts-expected.txt >deleted file mode 100644 >index 34b1e5289e95cb30c7a3ea0b8ffb383a0cef39de..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >- >-PASS Check that a sync XHR in a defer script blocks later defer scripts from running >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts-subframe.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts-subframe.html >deleted file mode 100644 >index be46a12b6f716f659e702e34cef36d8f2bd8b495..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts-subframe.html >+++ /dev/null >@@ -1,17 +0,0 @@ >-<!DOCTYPE html> >-<script> >- var x = 0; >-</script> >-<!-- This script's URI is: >- var xhr = new XMLHttpRequest(); >- xhr.open('GET', 'data:text/plain,aaa', false); >- xhr.send(); >- x=1; >- --> >-<script defer src="data:application/javascript,var%20x%20=%200;%20var%20xhr%20=%20new%20XMLHttpRequest();%20xhr.open('GET',%20'data:text/plain,aaa',%20false);%20xhr.send();%20x=1"></script> >- >-<!-- This script's URI is: >- parent.postMessage(x, '*'); >---> >-<script defer src="data:application/javascript,parent.postMessage(x, '*');"></script> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts.html >deleted file mode 100644 >index 0aabdd4b3463dcf0e0321444d93cb3cea4aa5d4f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts.html >+++ /dev/null >@@ -1,15 +0,0 @@ >-<!doctype html> >-<meta charset=utf-8> >-<title>Check that a sync XHR in a defer script blocks later defer scripts from running</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<!-- >- We run the test in a subframe, because something in the testharness stuff >- interferes with defer scripts --> >-<script> >- var t = async_test(); >- onmessage = t.step_func_done(function(e) { >- assert_equals(e.data, 1); >- }); >-</script> >-<iframe src="xmlhttprequest-sync-block-defer-scripts-subframe.html"></iframe> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-scripts-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-scripts-expected.txt >deleted file mode 100644 >index b06d11231b76186aee345dd8bb356e173cbd95b1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-scripts-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS Check that while a sync XHR is in flight async script loads don't complete and run script >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-scripts.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-scripts.html >deleted file mode 100644 >index d6714ac754e83bdfb5c40b53450684ec003c8cc9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-block-scripts.html >+++ /dev/null >@@ -1,22 +0,0 @@ >-<!doctype html> >-<meta charset=utf-8> >-<title>Check that while a sync XHR is in flight async script loads don't complete and run script</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<body> >-<script> >-var scriptRan = false; >-var onloadFired = false; >-test(function() { >- var s = document.createElement("script"); >- s.src = "data:application/javascript,scriptRan = true;"; >- s.onload = function() { onloadFired = true; } >- document.body.appendChild(s); >- var xhr = new XMLHttpRequest(); >- xhr.open("GET", "data:,", false); >- xhr.send(); >- assert_false(scriptRan, "Script should not have run"); >- assert_false(onloadFired, "load event for <script> should not have fired"); >-}); >-</script> >-</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub-expected.txt >deleted file mode 100644 >index 6e6e7e367b2d55f086e7a950783d7d6f8447b9f9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub-expected.txt >+++ /dev/null >@@ -1,11 +0,0 @@ >-Blocked access to external URL http://www.localhost:8800/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html#iframe#sync-xhr >-Blocked access to external URL http://www.localhost:8800/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html#iframe#sync-xhr >- >- >-Harness Error (TIMEOUT), message = null >- >-PASS Default "sync-xhr" feature policy ["*"] allows the top-level document. >-PASS Default "sync-xhr" feature policy ["*"] allows same-origin iframes. >-TIMEOUT Default "sync-xhr" feature policy ["*"] allows cross-origin iframes. Test timed out >-TIMEOUT Feature policy "sync-xhr" can be disabled in cross-origin iframes using "allow" attribute. Test timed out >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html >deleted file mode 100644 >index ade343716b1501fb919ce088f513f97f28b0c241..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html >+++ /dev/null >@@ -1,29 +0,0 @@ >-<!DOCTYPE html> >-<body> >- <meta charset="utf-8"> >- <title>Synchronous XMLHttpRequest Feature Policy Test</title> >- <script src=/resources/testharness.js></script> >- <script src=/resources/testharnessreport.js></script> >- <script src=/feature-policy/resources/featurepolicy.js></script> >- <script src=util/utils.js></script> >- <script> >- 'use strict'; >- run_all_fp_tests_allow_all( >- 'http://{{domains[www]}}:{{ports[http][0]}}', >- 'sync-xhr', >- 'InvalidAccessError: Failed to execute \'open\' on \'XMLHttpRequest\': ' + >- 'Synchronous requests are disabled by Feature Policy.', >- () => { >- return new Promise((resolve, reject) => { >- try { >- var xhr = new XMLHttpRequest(); >- xhr.open("GET", "data:,", false); >- xhr.send(); >- resolve(); >- } catch(e) { >- reject(e); >- } >- }); >- }); >- </script> >-</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader-expected.txt >deleted file mode 100644 >index 5ac9ab2911c6ae39c0da14ebc9ed814d5a33b310..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >- >-PASS Ensure that an async script added during a defer script that then does a >- sync XHR still runs >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader-subframe.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader-subframe.html >deleted file mode 100644 >index aeff2af97c8a3d415c95115c728d0464c4ca04c7..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader-subframe.html >+++ /dev/null >@@ -1,17 +0,0 @@ >-<!DOCTYPE html> >-<script> >- function secondScriptRan() { >- parent.postMessage("done", "*"); >- } >- >- function createSecondScript() { >- var script = document.createElement("script"); >- script.src = "data:application/javascript,secondScriptRan()"; >- document.head.appendChild(script); >- >- var xhr = new XMLHttpRequest(); >- xhr.open("GET", "data:,", false); >- xhr.send(); >- } >-</script> >-<script src="data:application/javascript,createSecondScript()" defer></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader.html >deleted file mode 100644 >index bbec1eddcd8be2a6f4988ca17f2e1ee8ac27954b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader.html >+++ /dev/null >@@ -1,16 +0,0 @@ >-<!doctype html> >-<meta charset=utf-8> >-<title>Ensure that an async script added during a defer script that then does a >- sync XHR still runs</title> >-<script src=/resources/testharness.js></script> >-<script src=/resources/testharnessreport.js></script> >-<!-- >- We run the test in a subframe, because something in the testharness stuff >- interferes with defer scripts --> >-<script> >- var t = async_test(); >- onmessage = t.step_func_done(function(e) { >- assert_equals(e.data, "done"); >- }); >-</script> >-<iframe src="xmlhttprequest-sync-not-hang-scriptloader-subframe.html"></iframe> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-aborted-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-aborted-expected.txt >deleted file mode 100644 >index 656cefc0f4e5b5eaeca556ca526f698dfc0f25f9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-aborted-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >- >- >-PASS Timeout test: No events should fire for an unsent, unaborted request >-PASS Timeout test: time to abort is -1, timeout set at 2000 >-PASS Timeout test: time to abort is 5000, timeout set at 2000 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-aborted.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-aborted.html >deleted file mode 100644 >index 0af6d9cf6991d6888997c4037c0f97c53578751c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-aborted.html >+++ /dev/null >@@ -1,26 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[4]/ol/li[5]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following-sibling::ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#abort-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-abort" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-timeout" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >- <div id="log"></div> >- <script src="resources/xmlhttprequest-timeout-aborted.js" type="text/javascript"></script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-abortedonmain-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-abortedonmain-expected.txt >deleted file mode 100644 >index 87e7d5c764c940cc866f489e20303beb3a411ad1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-abortedonmain-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >- >- >-PASS Timeout test: time to abort is 0, timeout set at 2000 >-PASS Timeout test: time to abort is 1000, timeout set at 2000 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-abortedonmain.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-abortedonmain.html >deleted file mode 100644 >index 70cba4980fdf7a6bbdd9cb178779a88ebb516f67..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-abortedonmain.html >+++ /dev/null >@@ -1,23 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[4]/ol/li[5]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#abort-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-abort" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol/li[9]"/> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >- <div id="log"></div> >- <script src="resources/xmlhttprequest-timeout-abortedonmain.js" type="text/javascript"></script> >-</body> >-</html> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overrides-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overrides-expected.txt >deleted file mode 100644 >index 25a47fc6b815b28b9ab23cb09e5ebb7ec93f3d0b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overrides-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >- >- >-PASS Timeout test: timeout disabled after initially set, original timeout at 5000, reset at 2000 to 0 >-PASS Timeout test: timeout overrides load after a delay, original timeout at 5000, reset at 1000 to 2000 >-PASS Timeout test: timeout enabled after initially disabled, original timeout at 0, reset at 2000 to 50000 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overrides.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overrides.html >deleted file mode 100644 >index 61a32bb1af09fe04cf067b43e333fb1aa08eb756..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overrides.html >+++ /dev/null >@@ -1,23 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >- <div id="log"></div> >- <script src="resources/xmlhttprequest-timeout-overrides.js"></script> >-</body> >-</html> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overridesexpires-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overridesexpires-expected.txt >deleted file mode 100644 >index 5ef2d8d0d80171487cbca3ef52d6dc7cbdd53b62..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overridesexpires-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >- >- >-PASS Timeout test: timeout set to expiring value after load fires, original timeout at 5000, reset at 4000 to 1000 >-PASS Timeout test: timeout set to expired value before load fires, original timeout at 5000, reset at 2000 to 1100 >-PASS Timeout test: timeout set to non-expiring value after timeout fires, original timeout at 1000, reset at 2000 to 500 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overridesexpires.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overridesexpires.html >deleted file mode 100644 >index d29cbbbff532258e29ecd448f07dc171729b4bd9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-overridesexpires.html >+++ /dev/null >@@ -1,23 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >- <div id="log"></div> >- <script src="resources/xmlhttprequest-timeout-overridesexpires.js" type="text/javascript"></script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused-expected.txt >deleted file mode 100644 >index b11872d1456ab3a6581bea47140e10c313dd499a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XHR2 Timeout Property Tests >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused.html >deleted file mode 100644 >index 48a98932ca33a0d2108425da8052e655e7564131..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-reused.html >+++ /dev/null >@@ -1,49 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >-</head> >-<body> >- <div id="log"></div> >- <script type="text/javascript"> >- >-var test = async_test(); >- >-function startRequest() { >- xhr.open("GET", "./resources/content.py?content=Hi", true); >- xhr.timeout = 2000; >- test.step_timeout(function () { >- xhr.send(); >- }, 1000); >-} >- >-test.step(function() >-{ >- var count = 0; >- xhr = new XMLHttpRequest(); >- xhr.onload = function () { >- assert_equals(xhr.response, "Hi"); >- if (++count == 2) { >- test.done(); >- } >- } >- xhr.ontimeout = function () { >- assert_unreached("HTTP error should not timeout"); >- } >- startRequest(); >- test.step_timeout(startRequest, 3500); >-}); >- >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-simple-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-simple-expected.txt >deleted file mode 100644 >index fec8fbc319f7530f721e26991e972e9aa12ecfcb..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-simple-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >- >- >-PASS Timeout test: no time out scheduled, load fires normally, timeout scheduled at 0 >-PASS Timeout test: load fires normally, timeout scheduled at 5000 >-PASS Timeout test: timeout hit before load, timeout scheduled at 2000 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-simple.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-simple.html >deleted file mode 100644 >index 982cf552945a08ae796d76cac726cfecb271f68f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-simple.html >+++ /dev/null >@@ -1,24 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >- <div id="log"></div> >- <script src="resources/xmlhttprequest-timeout-simple.js"></script> >-</body> >-</html> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-synconmain-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-synconmain-expected.txt >deleted file mode 100644 >index 86146eebc0c95d0306f420880e59815bf4bd8de6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-synconmain-expected.txt >+++ /dev/null >@@ -1,10 +0,0 @@ >-CONSOLE MESSAGE: line 314: XMLHttpRequest.timeout cannot be set for synchronous HTTP(S) requests made from the window context. >-CONSOLE MESSAGE: line 289: Synchronous XMLHttpRequests must not have a timeout value set. >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >- >- >-PASS Timeout test: Synchronous XHR must not allow a timeout to be set - setting timeout must throw >-PASS Timeout test: Synchronous XHR must not allow a timeout to be set - calling open() after timeout is set must throw >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-synconmain.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-synconmain.html >deleted file mode 100644 >index 79430a9d32797032c56093af2f18fc6cecb85d79..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-synconmain.html >+++ /dev/null >@@ -1,21 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[10]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >- <div id="log"></div> >- <script src="resources/xmlhttprequest-timeout-synconmain.js" type="text/javascript"></script> >-</body> >-</html> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-twice-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-twice-expected.txt >deleted file mode 100644 >index 0882429be6e2d558f66ec07e680dba6f45792271..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-twice-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >- >- >-PASS Timeout test: load fires normally with no timeout set, twice, original timeout at 0, reset at 2000 to 0 >-PASS Timeout test: load fires normally with same timeout set twice, original timeout at 5000, reset at 2000 to 5000 >-PASS Timeout test: timeout fires normally with same timeout set twice, original timeout at 2000, reset at 1000 to 2000 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-twice.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-twice.html >deleted file mode 100644 >index 1423fd5dbd48b7772ab4a572b8d02c5bbc1b739e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-twice.html >+++ /dev/null >@@ -1,25 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >- <div id="log"></div> >- <script src="resources/xmlhttprequest-timeout-twice.js" type="text/javascript"></script> >-</body> >-</html> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-aborted-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-aborted-expected.txt >deleted file mode 100644 >index d6f548f91928785e6124291abc25d7aff30c8742..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-aborted-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in in a worker context. >- >- >-PASS Timeout test: No events should fire for an unsent, unaborted request >-PASS Timeout test: time to abort is -1, timeout set at 2000 >-PASS Timeout test: time to abort is 5000, timeout set at 2000 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-aborted.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-aborted.html >deleted file mode 100644 >index c3a4581f7569504e2cdf3ff90a953c4d9be48c13..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-aborted.html >+++ /dev/null >@@ -1,28 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests in Worker</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[4]/ol/li[5]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following-sibling::ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#abort-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-abort" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-timeout" data-tested-assertations="../.." /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >- <div id="log"></div> >- <script type="text/javascript"> >- var worker = new Worker("resources/xmlhttprequest-timeout-aborted.js"); >- worker.addEventListener("message", testResultCallbackHandler); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overrides-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overrides-expected.txt >deleted file mode 100644 >index 5714f6d36baeeed9b84c0a01d7229950933011b0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overrides-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in in a worker context. >- >- >-PASS Timeout test: timeout disabled after initially set, original timeout at 5000, reset at 2000 to 0 >-PASS Timeout test: timeout overrides load after a delay, original timeout at 5000, reset at 1000 to 2000 >-PASS Timeout test: timeout enabled after initially disabled, original timeout at 0, reset at 2000 to 50000 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overrides.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overrides.html >deleted file mode 100644 >index bf77d859c7f170cdeca8311c5c6b52910dc1e5e1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overrides.html >+++ /dev/null >@@ -1,24 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests in Worker</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >- <div id="log"></div> >- <script type="text/javascript"> >- var worker = new Worker("resources/xmlhttprequest-timeout-overrides.js"); >- worker.addEventListener("message", testResultCallbackHandler); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overridesexpires-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overridesexpires-expected.txt >deleted file mode 100644 >index ed56f97243f0d5c875632233a3d86b5880ff091d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overridesexpires-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in in a worker context. >- >- >-PASS Timeout test: timeout set to expiring value after load fires, original timeout at 5000, reset at 4000 to 1000 >-PASS Timeout test: timeout set to expired value before load fires, original timeout at 5000, reset at 2000 to 1100 >-PASS Timeout test: timeout set to non-expiring value after timeout fires, original timeout at 1000, reset at 2000 to 500 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overridesexpires.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overridesexpires.html >deleted file mode 100644 >index 180db52eacc8880d00af3f77cf4c99ed93ca5745..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overridesexpires.html >+++ /dev/null >@@ -1,25 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests in Worker</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >- <div id="log"></div> >- <script type="text/javascript"> >- var worker = new Worker("resources/xmlhttprequest-timeout-overridesexpires.js"); >- worker.addEventListener("message", testResultCallbackHandler); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-simple-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-simple-expected.txt >deleted file mode 100644 >index 149b1cc2c3dbeff32aba04e407f34d482b74ff0b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-simple-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in in a worker context. >- >- >-PASS Timeout test: no time out scheduled, load fires normally, timeout scheduled at 0 >-PASS Timeout test: load fires normally, timeout scheduled at 5000 >-PASS Timeout test: timeout hit before load, timeout scheduled at 2000 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-simple.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-simple.html >deleted file mode 100644 >index 135691fbd9cf64653df29daf6815deb185fc529e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-simple.html >+++ /dev/null >@@ -1,26 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests in Worker</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >- <div id="log"></div> >- <script type="text/javascript"> >- var worker = new Worker("resources/xmlhttprequest-timeout-simple.js"); >- worker.onmessage = testResultCallbackHandler; >- </script> >-</body> >-</html> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-synconworker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-synconworker-expected.txt >deleted file mode 100644 >index 25509d3834f9aa55121968bc495d3c2ee688071b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-synconworker-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in in a worker context. >- >- >-PASS Timeout test: no time out scheduled, load fires normally, timeout scheduled at 0 >-PASS Timeout test: load fires normally, timeout scheduled at 5000 >-PASS Timeout test: Unexpected error: TimeoutError: The operation timed out. >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-synconworker.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-synconworker.html >deleted file mode 100644 >index 423dcc93cc4ac823688c35648ffdafa72aa02b2a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-synconworker.html >+++ /dev/null >@@ -1,25 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests in Worker</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >- <div id="log"></div> >- <script type="text/javascript"> >- var worker = new Worker("resources/xmlhttprequest-timeout-synconworker.js"); >- worker.addEventListener("message", testResultCallbackHandler); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-twice-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-twice-expected.txt >deleted file mode 100644 >index 860f92ed2d615f959d6513e8765cd912339a9d6e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-twice-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-Description >- >-This test validates that the XHR2 timeout property behaves as expected in in a worker context. >- >- >-PASS Timeout test: load fires normally with no timeout set, twice, original timeout at 0, reset at 2000 to 0 >-PASS Timeout test: load fires normally with same timeout set twice, original timeout at 5000, reset at 2000 to 5000 >-PASS Timeout test: timeout fires normally with same timeout set twice, original timeout at 2000, reset at 1000 to 2000 >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-twice.html b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-twice.html >deleted file mode 100644 >index 7e7107d4b6f1439f940d81c29eb67103ac717fc5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-timeout-worker-twice.html >+++ /dev/null >@@ -1,26 +0,0 @@ >- <!DOCTYPE html> >-<html> >-<head> >- <meta charset="utf-8" /> >- <title>XHR2 Timeout Property Tests in Worker</title> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >- <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >- <meta name=timeout content=long> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <script src="resources/xmlhttprequest-timeout-runner.js"></script> >-</head> >-<body> >- <h1>Description</h1> >- <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >- <div id="log"></div> >- <script type="text/javascript"> >- var worker = new Worker("resources/xmlhttprequest-timeout-twice.js"); >- worker.addEventListener("message", testResultCallbackHandler); >- </script> >-</body> >-</html> >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent-expected.txt >deleted file mode 100644 >index 763911c49bdc73c45804ec4f336e20a291492012..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: members during UNSENT >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent.htm b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent.htm >deleted file mode 100644 >index eb52d63eef971895f69f1b0151baa457250dd452..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-unsent.htm >+++ /dev/null >@@ -1,36 +0,0 @@ >-<!doctype html> >-<html> >- <head> >- <title>XMLHttpRequest: members during UNSENT</title> >- <script src="/resources/testharness.js"></script> >- <script src="/resources/testharnessreport.js"></script> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-unsent" data-tested-assertations=".. following::dd" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-setrequestheader" data-tested-assertations="following::ol/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-getresponseheader()-method" data-tested-assertations="following::ol/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method" data-tested-assertations="following::ol/li[1]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[2]" /> >- <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol/li[2]" /> >- >- </head> >- <body> >- <div id="log"></div> >- <script> >- test(function() { >- var client = new XMLHttpRequest() >- assert_throws("InvalidStateError", function() { client.setRequestHeader("x-test", "test") }, "setRequestHeader") >- assert_throws("InvalidStateError", function() { client.send(null) }, "send") >- assert_equals(client.status, 0, "status") >- assert_equals(client.statusText, "", "statusText") >- assert_equals(client.getAllResponseHeaders(), "", "getAllResponseHeaders") >- assert_equals(client.getResponseHeader("x-test"), null, "getResponseHeader") >- assert_equals(client.responseText, "", "responseText") >- assert_equals(client.responseXML, null, "responseXML") >- >- assert_equals(client.readyState, client.UNSENT, "readyState") >- }) >- </script> >- </body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-trailer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-trailer-expected.txt >index 5a34aed1fd4caf079fb0562a1d70f9af6b36c617..7daee24b209a2099cba2c1fc97e5f1dea3ef348d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-trailer-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/response/response-trailer-expected.txt >@@ -1,3 +1,3 @@ > >-FAIL trailer() test assert_equals: expected (string) "X-Test-Me" but got (object) null >+FAIL trailer() test promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'res.trailer.then')" > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/FormData-append-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/FormData-append-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ca2ce71646bf2be7cbbc18c907eb02315dcc4f3f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/FormData-append-expected.txt >@@ -0,0 +1,16 @@ >+ >+PASS Passing a String object to FormData.append should work. >+PASS testFormDataAppend1 >+PASS testFormDataAppend2 >+PASS testFormDataAppendUndefined1 >+PASS testFormDataAppendUndefined2 >+PASS testFormDataAppendNull1 >+PASS testFormDataAppendNull2 >+PASS testFormDataAppendToForm1 >+PASS testFormDataAppendToForm2 >+PASS testFormDataAppendToFormUndefined1 >+PASS testFormDataAppendToFormUndefined2 >+PASS testFormDataAppendToFormNull1 >+PASS testFormDataAppendToFormNull2 >+PASS testFormDataAppendEmptyBlob >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/FormData-append.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/FormData-append.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bf6c66d0f665df8cfb30b97063cca33442900250 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/FormData-append.html >@@ -0,0 +1,99 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>FormData.append</title> >+<link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-append"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<form id="form" /> >+<script> >+ function test_formdata(creator, verifier, description) { >+ async_test(description).step(function() { >+ var fd = creator(); >+ var xhr = new XMLHttpRequest(); >+ xhr.onload = this.step_func(function() { >+ verifier(xhr.responseText); >+ this.done(); >+ }); >+ xhr.open("POST", "resources/upload.py"); >+ xhr.send(fd); >+ }); >+ } >+ >+ test_formdata(function() { >+ var fd = new FormData(); >+ fd.append("name", new String("value")); >+ return fd; >+ }, function(data) { >+ assert_equals(data, "name=value,\n"); >+ }, "Passing a String object to FormData.append should work."); >+ >+ test(function() { >+ assert_equals(create_formdata(['key', 'value1']).get('key'), "value1"); >+ }, 'testFormDataAppend1'); >+ test(function() { >+ assert_equals(create_formdata(['key', 'value2'], ['key', 'value1']).get('key'), "value2"); >+ }, 'testFormDataAppend2'); >+ test(function() { >+ assert_equals(create_formdata(['key', undefined]).get('key'), "undefined"); >+ }, 'testFormDataAppendUndefined1'); >+ test(function() { >+ assert_equals(create_formdata(['key', undefined], ['key', 'value1']).get('key'), "undefined"); >+ }, 'testFormDataAppendUndefined2'); >+ test(function() { >+ assert_equals(create_formdata(['key', null]).get('key'), "null"); >+ }, 'testFormDataAppendNull1'); >+ test(function() { >+ assert_equals(create_formdata(['key', null], ['key', 'value1']).get('key'), "null"); >+ }, 'testFormDataAppendNull2'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.append('key', 'value1'); >+ assert_equals(fd.get('key'), "value1"); >+ }, 'testFormDataAppendToForm1'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.append('key', 'value2'); >+ fd.append('key', 'value1'); >+ assert_equals(fd.get('key'), "value2"); >+ }, 'testFormDataAppendToForm2'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.append('key', undefined); >+ assert_equals(fd.get('key'), "undefined"); >+ }, 'testFormDataAppendToFormUndefined1'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.append('key', undefined); >+ fd.append('key', 'value1'); >+ assert_equals(fd.get('key'), "undefined"); >+ }, 'testFormDataAppendToFormUndefined2'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.append('key', null); >+ assert_equals(fd.get('key'), "null"); >+ }, 'testFormDataAppendToFormNull1'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.append('key', null); >+ fd.append('key', 'value1'); >+ assert_equals(fd.get('key'), "null"); >+ }, 'testFormDataAppendToFormNull2'); >+ test(function() { >+ var before = new Date(new Date().getTime() - 2000); // two seconds ago, in case there's clock drift >+ var fd = create_formdata(['key', new Blob(), 'blank.txt']).get('key'); >+ assert_equals(fd.name, "blank.txt"); >+ assert_equals(fd.type, ""); >+ assert_equals(fd.size, 0); >+ assert_greater_than_equal(fd.lastModified, before); >+ assert_less_than_equal(fd.lastModified, new Date()); >+ }, 'testFormDataAppendEmptyBlob'); >+ >+ function create_formdata() { >+ var fd = new FormData(); >+ for (var i = 0; i < arguments.length; i++) { >+ fd.append.apply(fd, arguments[i]); >+ }; >+ return fd; >+ } >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/META.yml b/LayoutTests/imported/w3c/web-platform-tests/xhr/META.yml >new file mode 100644 >index 0000000000000000000000000000000000000000..4b2ecf39bf3a07188d587f0a7ac3d22cad55f923 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/META.yml >@@ -0,0 +1,10 @@ >+spec: https://xhr.spec.whatwg.org/ >+suggested_reviewers: >+ - caitp >+ - Manishearth >+ - jungkees >+ - ibelem >+ - mathiasbynens >+ - jdm >+ - annevk >+ - wisniewskit >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/xhr/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..5256cf3d602b0757464fb2131b15396d344b3e79 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/OWNERS >@@ -0,0 +1,12 @@ >+@emilio >+@hallvors >+@kangxu >+@caitp >+@Manishearth >+@jungkees >+@ibelem >+@mathiasbynens >+@ronkorving >+@jdm >+@annevk >+@wisniewskit >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/README.md b/LayoutTests/imported/w3c/web-platform-tests/xhr/README.md >new file mode 100644 >index 0000000000000000000000000000000000000000..8fbe615bf648fa185224d67fd1e74c33c882a980 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/README.md >@@ -0,0 +1,7 @@ >+Tests for the [XMLHttpRequest Standard](https://xhr.spec.whatwg.org/). >+ >+More XMLHttpRequest-related tests can be found in >+ >+* /cors >+* /fetch >+* /url (failure.html in particular) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..81912302fe621fb827dcadc94514f8a55b734e1f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS default value is false, set value is true >+PASS can also be set in OPEN state >+PASS setting on synchronous XHR >+PASS setting withCredentials when not in UNSENT, OPENED state (asynchronous) >+PASS setting withCredentials when in DONE state (synchronous) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..81912302fe621fb827dcadc94514f8a55b734e1f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS default value is false, set value is true >+PASS can also be set in OPEN state >+PASS setting on synchronous XHR >+PASS setting withCredentials when not in UNSENT, OPENED state (asynchronous) >+PASS setting withCredentials when in DONE state (synchronous) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..96e95c90faf0645dfad09c24a80ed4b8cd5a4880 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.js >@@ -0,0 +1,40 @@ >+test(function() { >+ var client = new XMLHttpRequest() >+ assert_false(client.withCredentials, "withCredentials defaults to false") >+ client.withCredentials = true >+ assert_true(client.withCredentials, "is true after setting") >+}, "default value is false, set value is true") >+ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/delay.py?ms=1000", true) >+ client.withCredentials = true >+ assert_true(client.withCredentials, "set in OPEN state") >+}, "can also be set in OPEN state") >+ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/delay.py?ms=1000", false) >+ client.withCredentials = true >+ assert_true(client.withCredentials, "set in OPEN state") >+}, "setting on synchronous XHR") >+ >+async_test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/delay.py?ms=1000") >+ client.send() >+ assert_throws("InvalidStateError", function() { client.withCredentials = true }) >+ client.onreadystatechange = this.step_func(function() { >+ assert_throws("InvalidStateError", function() { client.withCredentials = true }) >+ if (client.readyState === 4) { >+ this.done() >+ } >+ }) >+}, "setting withCredentials when not in UNSENT, OPENED state (asynchronous)") >+ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/delay.py?ms=1000", false) >+ client.send(); >+ assert_throws("InvalidStateError", function() { client.withCredentials = true }) >+}, "setting withCredentials when in DONE state (synchronous)") >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..81912302fe621fb827dcadc94514f8a55b734e1f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.worker-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS default value is false, set value is true >+PASS can also be set in OPEN state >+PASS setting on synchronous XHR >+PASS setting withCredentials when not in UNSENT, OPENED state (asynchronous) >+PASS setting withCredentials when in DONE state (synchronous) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-receive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-receive-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..606c860d32343ccfe236db50676976e74fff6a93 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-receive-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort() after successful receive should not fire "abort" event >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-receive.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-receive.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..1c460c898c3c2c57857cb100b13e9cf73dc427cc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-receive.htm >@@ -0,0 +1,42 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort() after successful receive should not fire "abort" event</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[5]"/> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ >+ client.onreadystatechange = test.step_func(function() { >+ if (client.readyState == 4) { >+ // abort should not cause the "abort" event to fire >+ >+ client.abort(); >+ >+ assert_equals(client.readyState, 0); >+ >+ test.step_timeout(function(){ // use a timeout to catch any implementation that might queue an abort event for later - just in case >+ test.done() >+ }, 200); >+ } >+ }); >+ >+ client.onabort = test.step_func(function () { >+ // this should not fire! >+ >+ assert_unreached("abort() should not cause the abort event to fire"); >+ }); >+ >+ client.open("GET", "resources/well-formed.xml", true); >+ client.send(null); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-send-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..db5d8c5a9e0ce9448899d498048865cb0f3381f7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-send-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort() after send() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-send.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-send.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..523a0d616b64bd356a51408ac3045e5e6da87561 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-send.htm >@@ -0,0 +1,46 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort() after send()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-event-order.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[1] following-sibling::ol/li[3] following-sibling::ol/li[4] following-sibling::ol/li[4]/ol/li[1] following-sibling::ol/li[4]/ol/li[3] following-sibling::ol/li[4]/ol/li[4] following-sibling::ol/li[4]/ol/li[5] following-sibling::ol/li[4]/ol/li[6] following-sibling::ol/li[5]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[3]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol/li[3]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getallresponseheaders" data-tested-assertations="following::ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="following::ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[1] following::dd[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ control_flag = false; >+ prepare_xhr_for_event_order_test(client); >+ client.addEventListener("readystatechange", test.step_func(function() { >+ if(client.readyState == 4) { >+ control_flag = true >+ assert_equals(client.responseXML, null) >+ assert_equals(client.responseText, "") >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.getAllResponseHeaders(), "") >+ assert_equals(client.getResponseHeader('Content-Type'), null) >+ } >+ })) >+ client.open("GET", "resources/well-formed.xml", true) >+ client.send(null) >+ client.abort() >+ assert_true(control_flag) >+ assert_equals(client.readyState, 0) >+ assert_xhr_event_order_matches([1, "loadstart(0,0,false)", 4, "abort(0,0,false)", "loadend(0,0,false)"]) >+ test.done() >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-stop-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-stop-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1ebb2c0c8f005af2f99cc857bef6c48302103aaf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-stop-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: abort event should fire when stop() method is used assert_equals: expected true but got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-stop.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-stop.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..7c5060fa4c60978d6ef850b99153b78176e002b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-stop.htm >@@ -0,0 +1,30 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort event should fire when stop() method is used</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[3] following::dt[3]/following::dd[1]/p"/> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ window.onload = test.step_func(function() { >+ var client = new XMLHttpRequest(); >+ var abortFired = false; >+ client.onabort = test.step_func(function (e) { >+ assert_equals(e.type, 'abort'); >+ abortFired = true; >+ }); >+ client.open("GET", "resources/delay.py?ms=3000", true); >+ client.send(null); >+ test.step_timeout(() => { >+ assert_equals(abortFired, true); >+ test.done(); >+ }, 200); >+ window.stop(); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-timeout-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-timeout-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..04106e6cce74b79fd4ab51501b8793b6bedb843a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-timeout-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort() after a timeout should not fire "abort" event >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-timeout.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-timeout.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..924bc424d50eac23bb6d765c5a8d0a9b155b68b9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-timeout.htm >@@ -0,0 +1,56 @@ >+<!doctype html> >+<html> >+<head> >+ <title>XMLHttpRequest: abort() after a timeout should not fire "abort" event</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[5]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]"/> >+</head> >+<body> >+<div id="log"></div> >+<script> >+ var test = async_test(); >+ >+ test.step(function() { >+ // timeout is 100ms >+ // the download would otherwise take 1000ms >+ // we check after 300ms to make sure abort does not fire an "abort" event >+ >+ var timeoutFired = false; >+ >+ var client = new XMLHttpRequest(); >+ >+ assert_true('timeout' in client, 'xhr.timeout is not supported in this user agent'); >+ >+ client.timeout = 100; >+ >+ test.step_timeout(() => { >+ assert_true(timeoutFired); >+ >+ // abort should not cause the "abort" event to fire >+ client.abort(); >+ >+ test.step_timeout(() => { // use a timeout to catch any implementation that might queue an abort event for later - just in case >+ test.done() >+ }, 200); >+ >+ assert_equals(client.readyState, 0); >+ }, 300); >+ >+ client.ontimeout = function () { >+ timeoutFired = true; >+ }; >+ >+ client.onabort = test.step_func(function () { >+ // this should not fire! >+ >+ assert_unreached("abort() should not cause the abort event to fire"); >+ }); >+ >+ client.open("GET", "/common/blank.html?pipe=trickle(d1)", true); >+ client.send(null); >+ }); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-done-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-done-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..bec1fa2e7c3535bda66dd91beb619ac7d7ebbdf3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-done-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS XMLHttpRequest: abort() during DONE (sync) >+PASS XMLHttpRequest: abort() during DONE (sync aborted in readystatechange) >+PASS XMLHttpRequest: abort() during DONE (async) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-done.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-done.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..89301729abd3c32dfc9c67c3dac63d98116e83c4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-done.htm >@@ -0,0 +1,90 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort() during DONE</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ async_test(test => { >+ var client = new XMLHttpRequest(), >+ result = [], >+ expected = [1, 4] // open() -> 1, send() -> 4 >+ client.onreadystatechange = test.step_func(function() { >+ result.push(client.readyState) >+ }) >+ client.open("GET", "resources/well-formed.xml", false) >+ client.send(null) >+ assert_equals(client.readyState, 4) >+ assert_equals(client.status, 200) >+ assert_equals(client.statusText, "OK") >+ assert_equals(client.responseXML.documentElement.localName, "html") >+ client.abort() >+ assert_equals(client.readyState, 0) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.responseXML, null) >+ assert_equals(client.getAllResponseHeaders(), "") >+ assert_array_equals(result, expected) >+ test.done() >+ }, document.title + " (sync)") >+ >+ async_test(test => { >+ var client = new XMLHttpRequest(), >+ result = [], >+ expected = [1, 4] // open() -> 1, send() -> 4 >+ client.onreadystatechange = test.step_func(function() { >+ result.push(client.readyState); >+ if (client.readyState === 4) { >+ assert_equals(client.readyState, 4) >+ assert_equals(client.status, 200) >+ assert_equals(client.statusText, "OK") >+ assert_equals(client.responseXML.documentElement.localName, "html") >+ client.abort(); >+ assert_equals(client.readyState, 0) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.responseXML, null) >+ assert_equals(client.getAllResponseHeaders(), "") >+ test.done() >+ } >+ }) >+ client.open("GET", "resources/well-formed.xml", false) >+ client.send(null) >+ assert_equals(client.readyState, 0) >+ assert_equals(client.status, 200) >+ assert_equals(client.statusText, "OK") >+ assert_equals(client.responseXML.documentElement.localName, "html") >+ }, document.title + " (sync aborted in readystatechange)") >+ >+ async_test(test => { >+ var client = new XMLHttpRequest(), >+ result = [], >+ expected = [1, 2, 3, 4] >+ client.onreadystatechange = test.step_func(function() { >+ result.push(client.readyState); >+ if (client.readyState === 4) { >+ assert_equals(client.readyState, 4) >+ assert_equals(client.status, 200) >+ assert_equals(client.responseXML.documentElement.localName, "html") >+ client.abort(); >+ assert_equals(client.readyState, 0) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.responseXML, null) >+ assert_equals(client.getAllResponseHeaders(), "") >+ test.step_timeout(function() { >+ assert_array_equals(result, expected) >+ test.done(); >+ }, 100); // wait a bit in case XHR timeout causes spurious event >+ } >+ }) >+ client.open("GET", "resources/well-formed.xml") >+ client.send(null) >+ }, document.title + " (async)") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-headers-received-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-headers-received-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5c5a1890018fc0a04e8c375cee9946e257ffc1b9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-headers-received-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort() during HEADERS_RECEIVED >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-headers-received.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-headers-received.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a837347f8df26061f3aa9a3b99cd0657c9607f08 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-headers-received.htm >@@ -0,0 +1,53 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort() during HEADERS_RECEIVED</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ async_test(test => { >+ var client = new XMLHttpRequest(), >+ result = [], >+ expected = [1, 2, 4] >+ client.onreadystatechange = test.step_func(function() { >+ result.push(client.readyState); >+ if (client.readyState === 2) { >+ assert_equals(client.status, 200) >+ assert_equals(client.statusText, "OK") >+ assert_equals(client.responseXML, null) >+ client.abort(); >+ assert_equals(client.readyState, 0) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.responseXML, null) >+ assert_equals(client.getAllResponseHeaders(), "") >+ } >+ if (client.readyState === 4) { >+ assert_equals(client.readyState, 4) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.responseXML, null) >+ assert_equals(client.getAllResponseHeaders(), "") >+ } >+ }) >+ client.onloadend = test.step_func(function() { >+ assert_equals(client.readyState, 4) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.responseXML, null) >+ assert_equals(client.getAllResponseHeaders(), "") >+ test.step_timeout(function() { >+ assert_array_equals(result, expected) >+ test.done(); >+ }, 100); // wait a bit in case XHR timeout causes spurious event >+ }) >+ client.open("GET", "resources/well-formed.xml") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-loading-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-loading-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b073af634b7a0d8a93a0fbe2ad809d69cc1fbe42 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-loading-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort() during LOADING >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-loading.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-loading.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..501de90552de2e2e70a9b93a6350c67684cd1a0c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-loading.htm >@@ -0,0 +1,53 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort() during LOADING</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ async_test(test => { >+ var client = new XMLHttpRequest(), >+ result = [], >+ expected = [1, 2, 3, 4] >+ client.onreadystatechange = test.step_func(function() { >+ result.push(client.readyState); >+ if (client.readyState === 3) { >+ assert_equals(client.status, 200) >+ assert_equals(client.statusText, "OK") >+ assert_equals(client.responseXML, null) >+ client.abort(); >+ assert_equals(client.readyState, 0) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.responseXML, null) >+ assert_equals(client.getAllResponseHeaders(), "") >+ } >+ if (client.readyState === 4) { >+ assert_equals(client.readyState, 4) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.responseXML, null) >+ assert_equals(client.getAllResponseHeaders(), "") >+ } >+ }) >+ client.onloadend = test.step_func(function() { >+ assert_equals(client.readyState, 4) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.responseXML, null) >+ assert_equals(client.getAllResponseHeaders(), "") >+ test.step_timeout(function() { >+ assert_array_equals(result, expected) >+ test.done(); >+ }, 100); // wait a bit in case XHR timeout causes spurious event >+ }) >+ client.open("GET", "resources/well-formed.xml") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d9df1a32ddfe62ad0f98411520944e20f841cd5d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort() during OPEN >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d9df1a32ddfe62ad0f98411520944e20f841cd5d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort() during OPEN >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..42a1bce0ef2cbc4578d15fde846010af2092cbdf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.js >@@ -0,0 +1,18 @@ >+var test = async_test("XMLHttpRequest: abort() during OPEN"); >+test.step(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "...") >+ client.onreadystatechange = function() { >+ test.step(function() { >+ assert_unreached() >+ }) >+ } >+ assert_equals(client.readyState, 1, "before abort()") >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ client.abort() >+ assert_equals(client.readyState, 1, "after abort()") >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+}) >+test.done() >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d9df1a32ddfe62ad0f98411520944e20f841cd5d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort() during OPEN >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..dde94f2398689a3c96096d7e91e6e1a97ca3ed85 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.htm >@@ -0,0 +1,14 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort() during OPEN</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script src="abort-during-open.js"></script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.js >new file mode 100644 >index 0000000000000000000000000000000000000000..26d3f57e44aadf66ca1d750f9e30bcbafc588ec4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.js >@@ -0,0 +1,18 @@ >+var test = async_test() >+test.step(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "...") >+ client.onreadystatechange = function() { >+ test.step(function() { >+ assert_unreached() >+ }) >+ } >+ assert_equals(client.readyState, 1, "before abort()") >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ client.abort() >+ assert_equals(client.readyState, 1, "after abort()") >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+}) >+test.done() >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c2c15e0b8a0e54a623bcb4fdca1f4cef72eeb240 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Untitled >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.worker.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..ffb687d0c87e86fb1b07a42b4c3d6e589a0e8e1a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.worker.js >@@ -0,0 +1,3 @@ >+importScripts("/resources/testharness.js"); >+importScripts("abort-during-open.js"); >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-unsent-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-unsent-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ea7d26485f0505a670a2be7567c96561f60c9a80 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-unsent-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort() during UNSENT >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-unsent.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-unsent.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a5bc7c27364a43a867700b7e1c27d01f8b8e662b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-unsent.htm >@@ -0,0 +1,31 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort() during UNSENT</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[5]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ assert_unreached() >+ }) >+ } >+ assert_equals(client.readyState, 0) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ client.abort() >+ assert_equals(client.readyState, 0) >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ }) >+ test.done() >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-upload-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-upload-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c5ee05fb83badc9892c9711e50d2619e8e20e421 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-upload-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: abort() while sending data assert_equals: expected "upload.loadstart(0,9999,true)" but got "upload.loadstart(0,0,false)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-upload.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-upload.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..9fbc8b9bbb473fa3b605759516e8e0493ce5e098 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-upload.htm >@@ -0,0 +1,30 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort() while sending data</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-event-order.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[7] following-sibling::ol/li[4]/ol/li[7]/ol/li[2] following-sibling::ol/li[4]/ol/li[7]/ol/li[3] following-sibling::ol/li[4]/ol/li[7]/ol/li[4]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#make-upload-progress-notifications" data-tested-assertations="following::ul[1]/li[1] following::ul[1]/li[2]/ol[1]/li[2] following::ul[1]/li[2]/ol[1]/li[3] following::ul[1]/li[2]/ol[1]/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(document.title, {timeout:1100}) >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ prepare_xhr_for_event_order_test(client); >+ client.open("POST", "resources/delay.py?ms=1000") >+ client.addEventListener("loadend", function(e) { >+ test.step(function() { >+ assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,9999,true)", 4, "upload.abort(0,0,false)", "upload.loadend(0,0,false)", "abort(0,0,false)", "loadend(0,0,false)"]); >+ test.done() >+ }) >+ }); >+ client.send((new Array(10000)).join('a')) >+ client.abort() >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-abort-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7a4c1a57b9a775c518d32b2cf36856e0bf2bbde5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-abort-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The abort() method: do not fire abort event in OPENED state when send() flag is unset. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-abort.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..eb2b2b743e6c36e536e156063ec105b8596d1ca7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-abort.htm >@@ -0,0 +1,46 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[5]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The abort() method: do not fire abort event in OPENED state when send() flag is unset.</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test() >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest() >+ >+ xhr.onreadystatechange = function() >+ { >+ test.step(function() >+ { >+ if (xhr.readyState == 1) >+ { >+ xhr.abort(); >+ assert_equals(xhr.readyState, 1, "abort() cannot change readyState when readyState is 1 and send() flag is unset") >+ } >+ }); >+ }; >+ >+ xhr.onabort = function(e) >+ { >+ test.step(function() >+ { >+ assert_unreached('when abort() is called, state is OPENED with the send() flag being unset, must not fire abort event per spec') >+ }); >+ }; >+ >+ xhr.open("GET", "./resources/content.py", true); // This should cause a readystatechange event that calls abort() >+ xhr.send() // should not throw since abort() was a no-op >+ test.done() >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-listeners-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-listeners-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7522e1443567333c41d3294304d15ae41578bcb7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-listeners-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort() should not reset event listeners >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-listeners.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-listeners.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..1c50ed394dce5b1953762ce84011a5984fbc99b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-listeners.htm >@@ -0,0 +1,25 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort() should not reset event listeners</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[6] following-sibling::ol/li[7]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ test = function() {} >+ client.onreadystatechange = test >+ client.open("GET", "resources/well-formed.xml") >+ client.send(null) >+ client.abort() >+ assert_equals(client.onreadystatechange, test) >+ }) >+ test.done() >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-loadend-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7f327fdeb0db6b102b375f26401ae11444fa133c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-loadend-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The abort() method: Fire a progress event named loadend >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-loadend.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..8b8dfdaa422cc96cd5d00cefc86393891113f557 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-loadend.htm >@@ -0,0 +1,44 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[6]"/> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The abort() method: Fire a progress event named loadend</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(function(test) >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.onloadstart = function() >+ { >+ test.step(function() >+ { >+ if (xhr.readyState == 1) >+ { >+ xhr.abort(); >+ } >+ }); >+ }; >+ >+ xhr.onloadend = function(e) >+ { >+ test.step(function() >+ { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "loadend"); >+ test.done(); >+ }); >+ }; >+ >+ xhr.open("GET", "resources/content.py", true); >+ xhr.send(); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-order-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a01c33f93ba1021bb457222c40621f68f52a6192 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-order-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The abort() method: abort and loadend events >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-order.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-order.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..f05c20628c4ae88347e0ba059561203cf08cb689 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-order.htm >@@ -0,0 +1,52 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[3] following-sibling::ol/li[4]/ol/li[5] following-sibling::ol/li[4]/ol/li[6] following-sibling::ol/li[4]/ol/li[7]/ol/li[3] following-sibling::ol/li[4]/ol/li[7]/ol/li[4] following-sibling::ol/li[5]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-event-order.js"></script> >+ <title>XMLHttpRequest: The abort() method: abort and loadend events</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ prepare_xhr_for_event_order_test(xhr); >+ >+ xhr.addEventListener("loadstart", function() { >+ test.step(function() >+ { >+ var readyState = xhr.readyState; >+ if (readyState == 1) >+ { >+ xhr.abort(); >+ VerifyResult(); >+ } else { >+ assert_unreached('Loadstart event should not fire in readyState '+readyState); >+ } >+ }); >+ }); >+ >+ function VerifyResult() >+ { >+ test.step(function() >+ { >+ assert_xhr_event_order_matches([1, "loadstart(0,0,false)", 4, "upload.abort(0,0,false)", "upload.loadend(0,0,false)", "abort(0,0,false)", "loadend(0,0,false)"]); >+ >+ assert_equals(xhr.readyState, 0, 'state should be UNSENT'); >+ test.done(); >+ }); >+ }; >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send("Test Message"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-abort-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5d40e11a4bcdcd3502be52f89361f0355108990c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-abort-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The abort() method: Fire a progress event named abort on the XMLHttpRequestUpload object >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-abort.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..1d045448b5fdf2927b75b8b68e4cec85d0c261d5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-abort.htm >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[7]/ol/li[3]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The abort() method: Fire a progress event named abort on the XMLHttpRequestUpload object</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.onloadstart = function() >+ { >+ test.step(function() >+ { >+ if (xhr.readyState == 1) >+ { >+ xhr.abort(); >+ } >+ }); >+ }; >+ >+ xhr.upload.onabort = function(e) >+ { >+ test.step(function() >+ { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "abort"); >+ assert_equals(e.target, xhr.upload); >+ test.done(); >+ }); >+ }; >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send("Test Message"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-loadend-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..983788d4578016e804a5d65f42ae7cd7da432b39 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-loadend-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The abort() method: Fire a progress event named loadend on the XMLHttpRequestUpload object >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-loadend.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..5b10b6530fd218ef8828fda16b16189085b7033c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-loadend.htm >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[7]/ol/li[4]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The abort() method: Fire a progress event named loadend on the XMLHttpRequestUpload object</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.onloadstart = function() >+ { >+ test.step(function () >+ { >+ if (xhr.readyState == 1) >+ { >+ xhr.abort(); >+ } >+ }); >+ }; >+ >+ xhr.upload.onloadend = function(e) >+ { >+ test.step(function() >+ { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "loadend"); >+ assert_equals(e.target, xhr.upload); >+ test.done(); >+ }); >+ }; >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send("Test Message"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ecc2db33970d7287d1e01050e01cc20d08dc9ee2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-expected.txt >@@ -0,0 +1,15 @@ >+CONSOLE MESSAGE: Cross-origin redirection to http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-star.py denied by Cross-Origin Resource Sharing policy: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/redirect-cors.py?location=http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-star.py& due to access control checks. >+CONSOLE MESSAGE: Cross-origin redirection to foo://bar.cgi denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/redirect-cors.py?location=foo://bar.cgi&allow_origin=true due to access control checks. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/redirect-cors.py?location=http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-star.py&allow_origin=true&redirect_preflight=true. Preflight response is not successful >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/redirect-cors.py?location=http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-star.py&allow_origin=true&allow_header=x-test&redirect_preflight=true. Preflight response is not successful >+ >+PASS Request is redirected without CORS headers to a response with Access-Control-Allow-Origin=* >+PASS Request is redirected to a response with Access-Control-Allow-Origin=* >+FAIL Request with user info is redirected to a response with Access-Control-Allow-Origin=* assert_true: expected true got false >+PASS Request is redirect to a bad URL >+PASS Preflighted request is redirected to a response with Access-Control-Allow-Origin=* >+PASS Preflighted request is redirected to a response with Access-Control-Allow-Origin=* and header allowed >+PASS Request is redirected to a same-origin resource file >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-same-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-same-origin-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c894f02d919876a989b3379aaa86a4a72adeef3a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-same-origin-expected.txt >@@ -0,0 +1,14 @@ >+CONSOLE MESSAGE: Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-star.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py due to access control checks. >+ >+PASS Request without credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star) >+PASS Request with credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star) >+PASS Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin >+FAIL Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin assert_false: expected false got true >+PASS Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials) >+PASS Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-same-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-same-origin.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..14e999c0844511dd20568974978dbc3aea01fbdf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-same-origin.htm >@@ -0,0 +1,71 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that asynchronous XMLHttpRequests handle redirects according to the CORS standard.</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script> >+ function runTest(test, path, credentials, expectSuccess) { >+ const xhr = new XMLHttpRequest(); >+ xhr.withCredentials = credentials; >+ xhr.open("GET", "resources/redirect.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN + path, true); >+ >+ xhr.onload = test.step_func_done(function() { >+ assert_true(expectSuccess); >+ assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >+ }); >+ xhr.onerror = test.step_func_done(function() { >+ assert_false(expectSuccess); >+ assert_equals(xhr.status, 0); >+ }); >+ xhr.send(null); >+ } >+ >+ const withoutCredentials = false; >+ const withCredentials = true; >+ const succeeds = true; >+ const fails = false; >+ >+ // Test simple same origin requests that receive cross origin redirects. >+ >+ // The redirect response passes the access check. >+ async_test(t => { >+ runTest(t, "/xhr/resources/access-control-basic-allow-star.py", >+ withoutCredentials, succeeds) >+ }, "Request without credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star)"); >+ >+ // The redirect response fails the access check because credentials were sent. >+ async_test(t => { >+ runTest(t, "/xhr/resources/access-control-basic-allow-star.py", >+ withCredentials, fails) >+ }, "Request with credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star)"); >+ >+ // The redirect response passes the access check. >+ async_test(t => { >+ runTest(t, "/xhr/resources/access-control-basic-allow.py", >+ withoutCredentials, succeeds) >+ }, "Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin"); >+ >+ // The redirect response passes the access check. >+ async_test(t => { >+ runTest(t, "/xhr/resources/access-control-basic-allow.py", >+ withCredentials, succeeds) >+ }, "Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin"); >+ >+ // forbidding credentials. The redirect response passes the access check. >+ async_test(t => { >+ runTest(t, "/xhr/resources/access-control-basic-allow-no-credentials.py", >+ withoutCredentials, succeeds) >+ }, "Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials)"); >+ >+ // forbidding credentials. The redirect response fails the access check. >+ async_test(t => { >+ runTest(t, "/xhr/resources/access-control-basic-allow-no-credentials.py", >+ withCredentials, fails) >+ }, "Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials)"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a77846f4f5f05c6e0a1fe4fe4aa52d14e50c3d1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async.htm >@@ -0,0 +1,89 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that asynchronous XMLHttpRequests handle redirects according to the CORS standard.</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script> >+ function runTest(test, destination, parameters, customHeader, local, expectSuccess) { >+ const xhr = new XMLHttpRequest(); >+ const url = (local ? get_host_info().HTTP_ORIGIN : get_host_info().HTTP_REMOTE_ORIGIN) + >+ "/xhr/resources/redirect-cors.py?location=" + destination + "&" + parameters; >+ >+ xhr.open("GET", url, true); >+ >+ if (customHeader) >+ xhr.setRequestHeader("x-test", "test"); >+ >+ xhr.onload = test.step_func_done(function() { >+ assert_true(expectSuccess); >+ assert_true(xhr.responseText.startsWith("PASS")); >+ }); >+ xhr.onerror = test.step_func_done(function() { >+ assert_false(expectSuccess); >+ assert_equals(xhr.status, 0); >+ }); >+ xhr.send(); >+ } >+ >+ const withCustomHeader = true; >+ const withoutCustomHeader = false; >+ const local = true; >+ const remote = false; >+ const succeeds = true; >+ const fails = false; >+ >+ // Test simple cross origin requests that receive redirects. >+ >+ // The redirect response fails the access check because the redirect lacks a CORS header. >+ async_test(t => { >+ runTest(t, get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-allow-star.py", "", >+ withoutCustomHeader, remote, fails) >+ }, "Request is redirected without CORS headers to a response with Access-Control-Allow-Origin=*"); >+ >+ // The redirect response passes the access check. >+ async_test(t => { >+ runTest(t, get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-allow-star.py", "allow_origin=true", >+ withoutCustomHeader, remote, succeeds) >+ }, "Request is redirected to a response with Access-Control-Allow-Origin=*"); >+ >+ // The redirect response fails the access check because user info was sent. >+ async_test(t => { >+ runTest(t, get_host_info().HTTP_REMOTE_ORIGIN.replace("http://", "http://username:password@") + >+ "/xhr/resources/access-control-basic-allow-star.py", "allow_origin=true", >+ withoutCustomHeader, remote, fails) >+ }, "Request with user info is redirected to a response with Access-Control-Allow-Origin=*"); >+ >+ // The redirect response fails the access check because the URL scheme is unsupported. >+ async_test(t => { >+ runTest(t, "foo://bar.cgi", "allow_origin=true", withoutCustomHeader, remote, fails) >+ }, "Request is redirect to a bad URL"); >+ >+ // The preflighted redirect response fails the access check because of preflighting. >+ async_test(t => { >+ runTest(t, get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-allow-star.py", >+ "allow_origin=true&redirect_preflight=true", withCustomHeader, remote, fails) >+ }, "Preflighted request is redirected to a response with Access-Control-Allow-Origin=*"); >+ >+ // The preflighted redirect response fails the access check after successful preflighting. >+ async_test(t => { >+ runTest(t, get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-allow-star.py", >+ "allow_origin=true&allow_header=x-test&redirect_preflight=true", >+ withCustomHeader, remote, fails) >+ }, "Preflighted request is redirected to a response with Access-Control-Allow-Origin=* and header allowed"); >+ >+ // The same-origin redirect response passes the access check. >+ async_test(t => { >+ runTest(t, get_host_info().HTTP_ORIGIN + "/xhr/resources/pass.txt", >+ "", withCustomHeader, local, succeeds) >+ }, "Request is redirected to a same-origin resource file"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..be57c53e95749cb68fd4957ccd551fd5fe47f3e1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS Local sync redirect to remote origin >+PASS Local async redirect to remote origin >+PASS Remote sync redirect to local origin >+PASS Remote async redirect to local origin >+PASS Remote sync redirect to same remote origin >+PASS Remote async redirect to same remote origin >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a10bc1f5446355367dbaa728e417a152bb51c189 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects.htm >@@ -0,0 +1,60 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that redirects between origins are allowed when access control is involved.</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script> >+ function runSync(test, url) >+ { >+ const xhr = new XMLHttpRequest(); >+ xhr.open("GET", url, false); >+ xhr.send(); >+ assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >+ test.done(); >+ } >+ function runAsync(test, url) >+ { >+ const xhr = new XMLHttpRequest(); >+ xhr.open("GET", url, true); >+ xhr.onload = test.step_func_done(function() { >+ assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >+ }); >+ xhr.onerror = test.unreached_func("Network error"); >+ xhr.send(); >+ test.done(); >+ } >+ test(t => { >+ runSync(t, "resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-allow.py") >+ }, "Local sync redirect to remote origin"); >+ async_test(t => { >+ runAsync(t, "resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-allow.py") >+ }, "Local async redirect to remote origin"); >+ test(t => { >+ runSync(t, get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/redirect-cors.py?location=" + get_host_info().HTTP_ORIGIN + >+ "/xhr/resources/access-control-basic-allow.py&allow_origin=true") >+ }, "Remote sync redirect to local origin"); >+ async_test(t => { >+ runAsync(t, get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/redirect-cors.py?location=" + get_host_info().HTTP_ORIGIN + >+ "/xhr/resources/access-control-basic-allow.py&allow_origin=true") >+ }, "Remote async redirect to local origin"); >+ test(t => { >+ runSync(t, get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-allow.py&allow_origin=true") >+ }, "Remote sync redirect to same remote origin"); >+ async_test(t => { >+ runAsync(t, get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-allow.py&allow_origin=true") >+ }, "Remote async redirect to same remote origin"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header-data-url-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header-data-url-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..73c5e3618523f49c4f25ae3654ce5e62b120411f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header-data-url-expected.txt >@@ -0,0 +1,4 @@ >+ >+ >+PASS Access granted to null-origin iframe >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header-data-url.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header-data-url.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..0d66ad787afbbfd0b1126a2739a660cb1002d38d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header-data-url.htm >@@ -0,0 +1,43 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that cross-origin access is granted to null-origin embedded iframe</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+const url = get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-origin-header.py"; >+async_test(function(test) { >+ window.addEventListener("message", test.step_func(function(evt) { >+ if (evt.data == "ready") { >+ document.getElementById("frame").contentWindow.postMessage(url, "*"); >+ } else { >+ assert_equals(evt.data, "PASS: Cross-domain access allowed.\nHTTP_ORIGIN: null"); >+ test.done(); >+ } >+ }), false); >+}, "Access granted to null-origin iframe"); >+ </script> >+ <iframe id="frame" src='data:text/html, >+ <script> >+(function() { >+ parent.postMessage("ready", "*"); >+ window.addEventListener("message", function(evt) { >+ try { >+ const url = evt.data; >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", url, false); >+ xhr.send(); >+ >+ parent.postMessage(xhr.responseText, "*"); >+ } catch(e) { >+ parent.postMessage(e.message, "*"); >+ } >+ }); >+})(); >+ </script>'> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c97ef653febcd8d6f78a72dcd992942e3f9ee0b1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Access control test with origin header >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..aedd20740eee2c70034d01923b2d0bddd921b944 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header.htm >@@ -0,0 +1,22 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test(function(test) { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-origin-header.py", false); >+ xhr.send(); >+ >+ assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\n" + >+ "HTTP_ORIGIN: " + get_host_info().HTTP_ORIGIN); >+ test.done(); >+ }, "Access control test with origin header"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2e0a49457093487ef69170b5949a73575ad0f8c9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-async-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Basic async cross-origin XHR request >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-async.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-async.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..142181e9ac04723f5d0c83361db081754b10a4a8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-async.htm >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Testing a basic asynchronous CORS XHR request</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test(function(test) { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.onreadystatechange = test.step_func(function() { >+ if (xhr.readyState == xhr.DONE) { >+ assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >+ test.done(); >+ } >+ }); >+ >+ xhr.onerror = test.unreached_func("FAIL: Network error."); >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-allow.py", true); >+ xhr.send(); >+ }, "Basic async cross-origin XHR request"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a088d01b93f07e48ec258c670e7a93cc0dab6d22 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Allow basic >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ebd7eb7db50a73a0e5491f6005d0edfde847446e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method-async-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Allow async PUT request >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method-async.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method-async.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..e468c82ccab15e8195cd94563347230ace2ec7a9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method-async.htm >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests cross-origin async request with non-CORS-safelisted method</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.onload = test.step_func_done(() => { >+ assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\nPASS: PUT data received"); >+ }); >+ >+ xhr.onerror = test.unreached_func("Unexpected error."); >+ >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-put-allow.py"); >+ xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8"); >+ xhr.send("PASS: PUT data received"); >+ }, "Allow async PUT request"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9128a60e1cc7cc8202c2c17a8a9e95639d4fef37 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Allow PUT request >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..2612265173eee101a5fedc5657a28f269fc8fcf7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method.htm >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests cross-origin request with non-CORS-safelisted method</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ test(function() { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-put-allow.py", false); >+ >+ xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8"); >+ >+ xhr.send("PASS: PUT data received"); >+ >+ assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\nPASS: PUT data received"); >+ }, "Allow PUT request"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e98c15979c4a9fb354a87e44df8064e97f02c634 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Preflight cache should allow second request >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-header-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-header-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c5b9c8dd881724d09dbdab18cb6eed5b6ca61533 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-header-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Preflight cache should be invalidated in presence of custom header >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-header.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-header.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..306eb02b3eb55e385a03023757f08560278e9adc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-header.htm >@@ -0,0 +1,48 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Preflight cache should be invalidated in presence of custom header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ const uuid = token(); >+ const xhr = new XMLHttpRequest; >+ >+ async_test(function(test) { >+ xhr.onerror = test.unreached_func("FAIL: Network error."); >+ xhr.onload = test.step_func(function() { >+ // Token reset. We can start the test now. >+ assert_equals(xhr.responseText, "PASS"); >+ firstRequest(); >+ }); >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/reset-token.py?token=" + uuid, true); >+ xhr.send(); >+ >+ function firstRequest() { >+ xhr.onload = test.step_func(function() { >+ assert_equals(xhr.responseText, "PASS: First PUT request."); >+ secondRequest(); >+ }); >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true); >+ xhr.send(); >+ } >+ >+ function secondRequest() { >+ xhr.onload = test.step_func(function() { >+ assert_equals(xhr.responseText, "PASS: Second OPTIONS request was sent."); >+ test.done(); >+ }); >+ // Send a header not included in the inital cache. >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true); >+ xhr.setRequestHeader("x-test", "headerValue"); >+ xhr.send(); >+ } >+ }, "Preflight cache should be invalidated in presence of custom header"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-method-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-method-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..54627b157793877b3d291720478bc7398a22f772 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-method-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Preflight cache should be invalidated by changed method >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-method.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-method.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..f8a99a25560c410a941a4b09501fac5c4d03a2b2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-method.htm >@@ -0,0 +1,48 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Preflight cache should be invalidated by changed method</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ const uuid = token(); >+ const xhr = new XMLHttpRequest; >+ >+ async_test(function(test) { >+ xhr.onerror = test.unreached_func("FAIL: Network error."); >+ xhr.onload = test.step_func(function() { >+ // Token reset. We can start the test now. >+ assert_equals(xhr.responseText, "PASS"); >+ firstRequest(); >+ }); >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/reset-token.py?token=" + uuid, true); >+ xhr.send(); >+ >+ function firstRequest() { >+ xhr.onload = test.step_func(function() { >+ assert_equals(xhr.responseText, "PASS: First PUT request."); >+ secondRequest(); >+ }); >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true); >+ xhr.send(); >+ } >+ >+ function secondRequest() { >+ xhr.onload = test.step_func(function() { >+ assert_equals(xhr.responseText, "PASS: Second OPTIONS request was sent."); >+ test.done(); >+ }); >+ // Send a header not included in the inital cache. >+ xhr.open("XMETHOD", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true); >+ xhr.send(); >+ } >+ }, "Preflight cache should be invalidated by changed method"); >+ >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-timeout-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-timeout-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b5566db7458e094760e000549d6472b3e2c17043 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-timeout-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Preflight cache should be invalidated on timeout >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-timeout.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-timeout.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ccd961f210834a801b85b117b9ff6f2b03706614 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-timeout.htm >@@ -0,0 +1,46 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Preflight cache should be invalidated on timeout</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ const uuid = token(); >+ let xhr = new XMLHttpRequest; >+ >+ async_test(function(test) { >+ xhr.onerror = test.unreached_func("FAIL: Network error."); >+ xhr.onload = test.step_func(function() { >+ // Token reset. We can start the test now. >+ assert_equals(xhr.responseText, "PASS"); >+ firstRequest(); >+ }); >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/reset-token.py?token=" + uuid, true); >+ xhr.send(); >+ >+ function firstRequest() { >+ xhr.onload = test.step_func(function() { >+ assert_equals(xhr.responseText, "PASS: First PUT request."); >+ step_timeout(secondRequest, 3000); // 3 seconds >+ }); >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-timeout.py?token=" + uuid, true); >+ xhr.send(); >+ } >+ >+ function secondRequest() { >+ xhr.onload = test.step_func(function() { >+ assert_equals(xhr.responseText, "PASS: Second OPTIONS request was sent."); >+ test.done(); >+ }); >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-timeout.py?token=" + uuid, true); >+ xhr.send(); >+ } >+ }, "Preflight cache should be invalidated on timeout"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..b8deda4349e08039f4ada65825bbf61b3dc20581 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache.htm >@@ -0,0 +1,45 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Preflight cache should allow second request without preflight OPTIONS request</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ const uuid = token(); >+ >+ async_test(function(test) { >+ const xhr = new XMLHttpRequest; >+ xhr.onerror = test.unreached_func("FAIL: Network error."); >+ xhr.onload = test.step_func(function() { >+ // Token reset. We can start the test now. >+ assert_equals(xhr.responseText, "PASS"); >+ firstRequest(); >+ }); >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/reset-token.py?token=" + uuid, true); >+ xhr.send(); >+ >+ function firstRequest() { >+ xhr.onload = test.step_func(function() { >+ assert_equals(xhr.responseText, "PASS: First PUT request."); >+ secondRequest(); >+ }); >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache.py?token=" + uuid, true); >+ xhr.send(); >+ } >+ >+ function secondRequest() { >+ xhr.onload = test.step_func_done(function() { >+ assert_equals(xhr.responseText, "PASS: Second PUT request. Preflight worked."); >+ }); >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache.py?token=" + uuid, true); >+ xhr.send(); >+ } >+ }, "Preflight cache should allow second request"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-star-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-star-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1f4b437ddcfb4768dd5edd9585a05b423b171cf7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-star-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Allow star >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-star.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-star.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..d05222f2002f227a79dd4bb96413ed96b10ae84e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-star.htm >@@ -0,0 +1,22 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests "*" setting for Access-Control-Allow-Origin header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ const xhr = new XMLHttpRequest; >+ >+ test(function(test) { >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-allow-star.py", false); >+ >+ xhr.send(); >+ >+ assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >+ }, "Allow star"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..61c02ed5428cc5e83b0ac666ca6b44a4a6ec638a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow.htm >@@ -0,0 +1,22 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests CORS with Access-Control-Allow-Origin header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ test(function() { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-allow.py", false); >+ >+ xhr.send(); >+ >+ assert_equals(xhr.responseText, "PASS: Cross-domain access allowed."); >+ }, "Allow basic"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..75eefb54c5f41ebaadb76b48e294e7a48cc24602 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Request with CORS-safelisted headers A network error occurred. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..20b875b9bddc3c15520eb2e462a4011334fba332 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers.htm >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that CORS-safelisted request headers are permitted in cross-origin request</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ test(function() { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-cors-safelisted-request-headers.py", false); >+ >+ xhr.setRequestHeader("Accept", "*"); >+ xhr.setRequestHeader("Accept-Language", "ru"); >+ xhr.setRequestHeader("Content-Language", "ru"); >+ xhr.setRequestHeader("Content-Type", "text/plain"); >+ xhr.setRequestHeader("Save-Data", "on"); >+ >+ xhr.send(); >+ >+ assert_equals(xhr.responseText, >+ "Accept: *\n" + >+ "Accept-Language: ru\n" + >+ "Content-Language: ru\n" + >+ "Content-Type: text/plain\n"); >+ }, "Request with CORS-safelisted headers"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-response-headers-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-response-headers-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d6b38baa0f0812f6ac650769818ea02bc6a6ac94 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-response-headers-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Response with CORS-safelisted headers >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-response-headers.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-response-headers.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a5c470b74f51d6c577d335159427d3c804bce5ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-response-headers.htm >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that CORS-safelisted response headers are permitted in cross-origin request</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ test(function() { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-whitelist-response-headers.py", false); >+ xhr.send(); >+ >+ assert_not_equals(xhr.getResponseHeader("cache-control"), null); >+ assert_not_equals(xhr.getResponseHeader("content-language"), null); >+ assert_not_equals(xhr.getResponseHeader("content-type"), null); >+ assert_not_equals(xhr.getResponseHeader("expires"), null); >+ assert_not_equals(xhr.getResponseHeader("last-modified"), null); >+ assert_not_equals(xhr.getResponseHeader("pragma"), null); >+ assert_equals(xhr.getResponseHeader("x-webkit"), null); >+ >+ assert_not_equals(xhr.getAllResponseHeaders().match("en"), null); >+ assert_equals(xhr.getAllResponseHeaders().match("foobar"), null); >+ }, "Response with CORS-safelisted headers"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-denied-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9431f15055293b647fbc34beca2678272a50d43f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-denied-expected.txt >@@ -0,0 +1,6 @@ >+CONSOLE MESSAGE: line 25: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: line 25: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+ >+PASS Same-origin request accepted >+PASS Cross-origin request denied >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-denied.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..535762d0edafe1d58510f43f1296d1d9662c8b24 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-denied.htm >@@ -0,0 +1,30 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests CORS denying resource without Access-Control-Allow-Origin header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ const path = "/xhr/resources/access-control-basic-denied.py"; >+ >+ test(function() { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_ORIGIN + path, false); >+ xhr.send(); >+ assert_equals(xhr.status, 200); >+ }, "Same-origin request accepted"); >+ >+ test(function() { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + path, false); >+ assert_throws("NetworkError", () => xhr.send()); >+ assert_equals(xhr.status, 0); >+ }, "Cross-origin request denied"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e0c8ccbf9225465a82b2be29450fb245bd325106 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Preflighted cross-origin request denied >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a4fe23460d12d7d3cd907464257df98edd29aa9f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple.htm >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests CORS denying preflighted request to resource without CORS headers for OPTIONS</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ test(function() { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-options-not-supported.py", false); >+ >+ // Non-CORS-safelisted header >+ xhr.setRequestHeader("x-test", "foobar"); >+ >+ // This fails because the server-side script is not prepared for an OPTIONS request >+ assert_throws("NetworkError", () => xhr.send()); >+ assert_equals(xhr.status, 0); >+ }, "Preflighted cross-origin request denied"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-non-cors-safelisted-content-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-non-cors-safelisted-content-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d5715079397e0c0e68f390f5e17a4a3a329c5286 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-non-cors-safelisted-content-type-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: line 25: Request header field Content-Type is not allowed by Access-Control-Allow-Headers. >+CONSOLE MESSAGE: line 25: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-put-allow.py due to access control checks. >+ >+PASS Deny cross-origin request with non-CORS-safelisted content type >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-non-cors-safelisted-content-type.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-non-cors-safelisted-content-type.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..062f8b0bb5b466c264b80f8f983c94d49cc1b9aa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-non-cors-safelisted-content-type.htm >@@ -0,0 +1,30 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests cross-origin request with non-CORS-safelisted content type</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ test(() => { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-put-allow.py", false); >+ xhr.setRequestHeader("Content-Type", "text/plain"); >+ xhr.send("PASS: PUT data received"); >+ >+ assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\nPASS: PUT data received"); >+ >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-put-allow.py", false); >+ xhr.setRequestHeader("Content-Type", "application/xml"); >+ >+ assert_throws("NetworkError", () => xhr.send("FAIL: PUT data received")); >+ assert_equals(xhr.status, 0, "Cross-domain access was denied in 'send'."); >+ }, "Deny cross-origin request with non-CORS-safelisted content type"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-success-no-content-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-success-no-content-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b5cf9b1f0b2571eca20c917c672c5a0348282744 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-success-no-content-type-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS POST request with text content and no Content-Type header >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-success-no-content-type.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-success-no-content-type.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..7e7a7d3a3e8191946e6fdb5f2a8c5738071af305 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-success-no-content-type.htm >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that POST requests with text content and no content-type set explicitly don't generate a preflight request.</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test(function(test) { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-options-not-supported.py"); >+ >+ xhr.onerror = test.unreached_func("Network error."); >+ >+ xhr.onload = test.step_func_done(function() { >+ assert_equals(xhr.status, 200); >+ }); >+ >+ xhr.send("Test"); >+ }, "POST request with text content and no Content-Type header"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..678c53a5e7306ad069cfeeaf0b6f01c7373dcf18 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS Same-origin request with non-safelisted content type succeeds >+PASS CORS request with non-safelisted content type sends preflight and fails >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..0a6df932aa44e64b6025b4055137f212d111fe32 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type.htm >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Non-CORS-safelisted value in the Content-Type header results in a request preflight</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ test(function() { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("POST", get_host_info().HTTP_ORIGIN + >+ "/xhr/resources/access-control-basic-options-not-supported.py", false); >+ >+ xhr.setRequestHeader("Content-Type", "application/xml"); >+ >+ xhr.send(); >+ >+ assert_equals(xhr.status, 200, "Same-origin access doesn't issue preflight; not denied."); >+ }, "Same-origin request with non-safelisted content type succeeds"); >+ >+ test(function() { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-options-not-supported.py", false); >+ >+ xhr.setRequestHeader("Content-Type", "application/xml"); >+ >+ assert_throws("NetworkError", () => xhr.send()); >+ assert_equals(xhr.status, 0, "Cross-domain access was denied in 'send'."); >+ }, "CORS request with non-safelisted content type sends preflight and fails"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-preflight-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-preflight-denied-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2ccf38b85350a9c995794071836b333ddc76c653 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-preflight-denied-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+ >+PASS Tests async XHR preflight denial due to lack of CORS headers >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-preflight-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-preflight-denied.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..6475186a068c2c6bd0fb061920a34aadac94a89c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-preflight-denied.htm >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests async XHR preflight denial due to lack of CORS headers</title> >+ <!--The original test addressed a more specific issue involving caching, >+ but that issue has since been resolved. >+ We maintain this test as a basic test of invalid preflight denial. >+ Please refer to the comment in the following link for more information: >+ https://chromium-review.googlesource.com/c/chromium/src/+/630338#message-0280542b95c9b0f82b121dc373320c04fcaece31 >+ --> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ xhr.onerror = test.step_func_done(() => { >+ assert_equals(xhr.status, 0); >+ }); >+ >+ xhr.onload = test.unreached_func("Request succeeded unexpectedly"); >+ >+ xhr.open("FOO", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-denied.py"); >+ xhr.send(); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-header-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-header-denied-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1547f35691bc034bdd00d086f9a2a4ee24d9ec93 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-header-denied-expected.txt >@@ -0,0 +1,4 @@ >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=e3414997-b8d9-44c5-ac25-b008d36bee33&command=header. Request header field x-test is not allowed by Access-Control-Allow-Headers. >+ >+PASS Async request denied at preflight >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-header-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-header-denied.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a00cc588981c372ea19b132583bbf3f6deca0e17 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-header-denied.htm >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Async request denied at preflight because of non-CORS-safelisted header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ const uuid = token(); >+ const url = get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-preflight-denied.py?token=" + uuid; >+ >+ async_test((test) => { >+ let xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=reset", false); >+ xhr.send(); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=header", true); >+ xhr.setRequestHeader("x-test", "foo"); >+ >+ xhr.onload = test.unreached_func( >+ "Cross-domain access with custom header allowed without throwing exception"); >+ >+ xhr.onerror = test.step_func_done(() => { >+ xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=complete", false); >+ xhr.send(); >+ assert_equals(xhr.responseText, "Request successfully blocked."); >+ }); >+ >+ xhr.send(); >+ }, "Async request denied at preflight"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-method-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-method-denied-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f06137b3afb90aa6b7c4bb558035d8a79fd6c81c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-method-denied-expected.txt >@@ -0,0 +1,4 @@ >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=1962aedd-a0e5-4366-a927-abb4eb2273ff&command=method. Method DELETE is not allowed by Access-Control-Allow-Methods. >+ >+PASS Async request denied at preflight >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-method-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-method-denied.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a0425a4bb1698ea2c4e51eddd6b18187adb249ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-method-denied.htm >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Async request denied at preflight because of non-CORS-safelisted method</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ const uuid = token(); >+ const url = get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-preflight-denied.py?token=" + uuid; >+ >+ async_test((test) => { >+ let xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=reset", false); >+ xhr.send(); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("DELETE", url + "&command=method", true); >+ >+ xhr.onload = test.unreached_func( >+ "Cross-domain access with non-CORS-safelisted method allowed without throwing exception"); >+ >+ xhr.onerror = test.step_func_done(() => { >+ xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=complete", false); >+ xhr.send(); >+ assert_equals(xhr.responseText, "Request successfully blocked."); >+ }); >+ >+ xhr.send(); >+ }, "Async request denied at preflight"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-not-supported-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-not-supported-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..02b7c9ccf92954bcb0fd63e54ea2e009f93b18bc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-not-supported-expected.txt >@@ -0,0 +1,4 @@ >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=9eb4bbeb-4ea2-4594-a908-491a02378bd9. Method PUT is not allowed by Access-Control-Allow-Methods. >+ >+PASS Async PUT request denied at preflight >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-not-supported.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-not-supported.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a4dc06d5515efe6612df04f999d5702c678473eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-not-supported.htm >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Async PUT request denied at preflight</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+const uuid = token(); >+const url = get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-preflight-denied.py?token=" + uuid; >+ >+async_test((test) => { >+ let xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=reset", false); >+ xhr.send(); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("PUT", url, true); >+ >+ xhr.onload = test.unreached_func("Cross-domain access allowed unexpectedly."); >+ >+ xhr.onerror = test.step_func_done(() => { >+ xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=complete", false); >+ xhr.send(); >+ assert_equals(xhr.responseText, "Request successfully blocked."); >+ }); >+ >+ xhr.send(); >+}); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..05dfd478d2c641aefe8db20d64991c5dc5a61b33 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-async-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS CORS async request with URL credentials >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-async.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-async.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ad7117fdf98b8f13794bbf65dba356609215262b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-async.htm >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests proper handling of cross-origin async request with credentials</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-auth-basic.py?uid=fooUser", >+ true, "fooUser", "barPass"); >+ xhr.withCredentials = true; >+ >+ xhr.onerror = test.unreached_func("Unexpected error."); >+ >+ xhr.onload = test.step_func_done(() => { >+ assert_equals(xhr.status, 401, "Request raises HTTP 401: Unauthorized error."); >+ }); >+ >+ xhr.send(); >+ }, "CORS async request with URL credentials"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d61e4eb2e79ac9676b0d8aabee5e23561a2487c9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-sync-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS CORS sync request with URL credentials >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-sync.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..3844d023d9f56710c25a5d70b52ad5f99ef4db74 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-sync.htm >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests proper handling of cross-origin sync request with credentials</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ test(() => { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-auth-basic.py?uid=fooUser", false, "fooUser", "barPass"); >+ >+ xhr.withCredentials = true; >+ >+ xhr.send(); >+ >+ assert_equals(xhr.status, 401, "Request raises HTTP 401: Unauthorized error."); >+ }, "CORS sync request with URL credentials"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..185c56afe5065ad68cf85bcd6fe5b8d7812c0165 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-async-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Preflighted async request with custom header >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-async.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-async.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ffea72ac3b2db71d9e80de2f5f69cf6f012e6cd0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-async.htm >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Test that async CORS requests with custom headers are sent with OPTIONS preflight</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+async_test((test) => { >+ let xhr = new XMLHttpRequest; >+ const uuid = token(); >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/reset-token.py?token=" + uuid, false); >+ xhr.send(); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/no-custom-header-on-preflight.py?token=" + uuid); >+ xhr.setRequestHeader("x-test", "foobar"); >+ >+ xhr.onerror = test.unreached_func("Unexpected error"); >+ >+ xhr.onload = test.step_func_done(() => { >+ assert_equals(xhr.responseText, "PASS"); >+ }); >+ >+ xhr.send(); >+}, "Preflighted async request with custom header"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..cbac64da75cbb8339aa3fc135a4ad65f2aa0d9df >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-sync-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Preflighted sync request with custom header >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-sync.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..2ae9fe8002298d64881915323d1f1bb430da329b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-sync.htm >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Test that sync CORS requests with custom headers are not sent with OPTIONS preflight</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ test(function() { >+ let xhr = new XMLHttpRequest; >+ const uuid = token(); >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/reset-token.py?token=" + uuid, false); >+ xhr.send(); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/no-custom-header-on-preflight.py?token=" + uuid, false); >+ xhr.setRequestHeader("x-test", "foobar"); >+ xhr.send(); >+ assert_equals(xhr.responseText, "PASS"); >+ }, "Preflighted sync request with custom header"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-lowercase-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-lowercase-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6bf6de610a2ceb07097efc244ca6490959127045 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-lowercase-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Request with uppercase header set >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-lowercase.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-lowercase.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..7dc4608f57eb1169cf19d5d1874747689c8e53ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-lowercase.htm >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Access-Control-Request-Headers values should be lowercase</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test(function(test) { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-preflight-request-header-lowercase.py"); >+ >+ xhr.setRequestHeader("X-Test", "foobar"); >+ >+ xhr.onerror = test.unreached_func("Error occurred."); >+ >+ xhr.onload = test.step_func_done(function() { >+ assert_equals(xhr.status, 200); >+ assert_equals(xhr.responseText, "PASS"); >+ }); >+ >+ xhr.send(); >+ }, "Request with uppercase header set"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-sorted-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-sorted-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..bddfb84ddc53d9a88af1fd4ac17d0aa26b63b944 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-sorted-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Tests that Access-Control-Request-Headers are sorted. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-sorted.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-sorted.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..830e0fbc4f496e136005ca5a24685969c93875f3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-sorted.htm >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<title>Tests that Access-Control-Request-Headers are sorted.</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/get-host-info.sub.js"></script> >+</head> >+<body> >+<script> >+async_test((test) => { >+ const xhr = new XMLHttpRequest(); >+ const url = get_host_info().HTTP_REMOTE_ORIGIN + '/xhr/resources/access-control-preflight-request-header-sorted.py'; >+ xhr.open('GET', url); >+ xhr.setRequestHeader("X-Custom-Test", "foobar"); >+ xhr.setRequestHeader("X-Custom-ua", "foobar"); >+ xhr.setRequestHeader("X-Custom-V", "foobar"); >+ xhr.setRequestHeader("X-Custom-s", "foobar"); >+ xhr.setRequestHeader("X-Custom-U", "foobar"); >+ xhr.onerror = test.unreached_func('xhr failure'); >+ xhr.onload = test.step_func_done(() => { >+ assert_equals(xhr.responseText, 'PASS'); >+ }); >+ xhr.send(); >+}); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-headers-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-headers-origin-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..de28034fa0d878159d72fa75e7cdffd041bf2e9b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-headers-origin-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS 'Origin' should not be included in CORS Request-Headers >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-headers-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-headers-origin.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..fc11abc04fb000971fcb5d49dc78bce2e6f5ce74 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-headers-origin.htm >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Test that 'Origin' is not included in Access-Control-Request-Headers in a preflight request</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ const url = get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-preflight-request-headers-origin.py"; >+ >+ xhr.open("GET", url); >+ xhr.setRequestHeader("x-pass", "PASS"); >+ >+ xhr.onerror = test.unreached_func("Unexpected error"); >+ >+ xhr.onload = test.step_func_done(() => { >+ assert_equals(xhr.responseText, "PASS"); >+ }); >+ >+ xhr.send(); >+}, "'Origin' should not be included in CORS Request-Headers"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-301-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-301-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e4816b99ce18ce59f2346700ffc16fc580cb6ed8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-301-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: Preflight response is not successful >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-preflight-request-invalid-status.py?code=301 due to access control checks. >+ >+PASS Request with 301 preflight response >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-301.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-301.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..62fc4803b4321d643e8105f2473e262ff742812c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-301.htm >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that preflight requests returning invalid 301 status code result in error.</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-preflight-request-invalid-status.py?code=301"); >+ >+ xhr.setRequestHeader("x-pass", "pass"); >+ >+ xhr.onerror = test.step_func_done(function() { >+ assert_equals(xhr.status, 0); >+ }); >+ >+ xhr.onload = test.unreached_func("Invalid 301 response to preflight should result in error."); >+ >+ xhr.send(); >+ }, "Request with 301 preflight response"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-400-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-400-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4d5c60cd4843de0d702340a35dd4345062e7564a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-400-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: Preflight response is not successful >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-preflight-request-invalid-status.py?code=400 due to access control checks. >+ >+PASS Request with 400 preflight response >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-400.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-400.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..9e76d9e13081656cc29390b9e716d92bae69a14e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-400.htm >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that preflight requests returning invalid 400 status code result in error.</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-preflight-request-invalid-status.py?code=400"); >+ >+ xhr.setRequestHeader("x-pass", "pass"); >+ >+ xhr.onerror = test.step_func_done(function() { >+ assert_equals(xhr.status, 0); >+ }); >+ >+ xhr.onload = test.unreached_func("Invalid 400 response to preflight should result in error."); >+ >+ xhr.send(); >+ }, "Request with 400 preflight response"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-501-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-501-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7045eca7272459e54efbda735adec3528e561b58 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-501-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: Preflight response is not successful >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-preflight-request-invalid-status.py?code=501 due to access control checks. >+ >+PASS Request with 501 preflight response >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-501.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-501.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..f2ed85bc17e4e1fd02a768606e0f567462c2bbba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-501.htm >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that preflight requests returning invalid 501 status code result in error.</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-preflight-request-invalid-status.py?code=501"); >+ >+ xhr.setRequestHeader("x-pass", "pass"); >+ >+ xhr.onerror = test.step_func_done(function() { >+ assert_equals(xhr.status, 0); >+ }); >+ >+ xhr.onload = test.unreached_func("Invalid 501 response to preflight should result in error."); >+ >+ xhr.send(); >+ }, "Request with 501 preflight response"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-must-not-contain-cookie-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-must-not-contain-cookie-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8cd8c38427bc82d8246fcbdc12fdf39fe29dd5f4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-must-not-contain-cookie-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Preflight request must not contain any cookie header assert_equals: expected "COOKIE" but got "" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-must-not-contain-cookie.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-must-not-contain-cookie.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..6dd8e6db888c1a2ab74a2832abecd9b2793c3bf6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-must-not-contain-cookie.htm >@@ -0,0 +1,57 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Preflight request must not contain any cookie header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test((test) => { >+ function setupCookie() { >+ const xhr = new XMLHttpRequest; >+ // Delete all preexisting cookies and set a cookie named "foo" >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-cookie.py?cookie_name=foo"); >+ xhr.withCredentials = true; >+ xhr.send(); >+ xhr.onerror = test.unreached_func("Unexpected error."); >+ xhr.onload = test.step_func(() => { >+ assert_equals(xhr.status, 200); >+ sendPreflightedRequest(); >+ }); >+ } >+ >+ function sendPreflightedRequest() { >+ const xhr = new XMLHttpRequest; >+ // Request to server-side file fails if cookie is included in preflight >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-preflight-request-must-not-contain-cookie.py"); >+ xhr.withCredentials = true; >+ xhr.setRequestHeader("X-Proprietary-Header", "foo"); >+ xhr.onerror = test.unreached_func("Unexpected error."); >+ xhr.onload = test.step_func(() => { >+ assert_equals(xhr.status, 200); >+ assert_equals(xhr.responseText, "COOKIE"); >+ cleanupCookies(); >+ }); >+ xhr.send(); >+ } >+ >+ function cleanupCookies() { >+ const xhr = new XMLHttpRequest; >+ // Delete all cookies >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-cookie.py"); >+ xhr.withCredentials = true; >+ xhr.send(); >+ xhr.onerror = test.unreached_func("Unexpected error."); >+ xhr.onload = test.step_func_done(() => {}); >+ } >+ >+ setupCookie(); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-header-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-header-denied-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8efcbeb3d6550f3173afa73a4349e972433e269d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-header-denied-expected.txt >@@ -0,0 +1,4 @@ >+CONSOLE MESSAGE: line 26: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=aaa7efac-176b-4187-a85f-9d06157bf792&command=header. Request header field x-test is not allowed by Access-Control-Allow-Headers. >+ >+PASS Sync request denied at preflight >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-header-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-header-denied.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..7948c18a2efcc6c02d76f683a3dbb5fa2558c8ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-header-denied.htm >@@ -0,0 +1,34 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Sync request denied at preflight because of non-CORS-safelisted header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+const uuid = token(); >+const url = get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-preflight-denied.py?token=" + uuid; >+ >+test(() => { >+ let xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=reset", false); >+ xhr.send(); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=header", false); >+ xhr.setRequestHeader("x-test", "foo"); >+ >+ assert_throws("NetworkError", () => xhr.send()); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=complete", false); >+ xhr.send(); >+ assert_equals(xhr.responseText, "Request successfully blocked."); >+}, "Sync request denied at preflight"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-method-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-method-denied-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..052b20978f04f8e76b3db9512a0a74836a91a590 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-method-denied-expected.txt >@@ -0,0 +1,4 @@ >+CONSOLE MESSAGE: line 25: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=b70429f0-0dd0-44b0-a5e8-dc0b7d355e72&command=method. Method DELETE is not allowed by Access-Control-Allow-Methods. >+ >+PASS Sync request denied at preflight because of non-CORS-safelisted method >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-method-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-method-denied.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a54c308d9f1190ea23a0df460f78fe76964c018e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-method-denied.htm >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Sync request denied at preflight because of non-CORS-safelisted method</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+const uuid = token(); >+const url = get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-preflight-denied.py?token=" + uuid; >+ >+test(() => { >+ let xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=reset", false); >+ xhr.send(); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("DELETE", url + "&command=method", false); >+ >+ assert_throws("NetworkError", () => xhr.send()); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=complete", false); >+ xhr.send(); >+ assert_equals(xhr.responseText, "Request successfully blocked."); >+}); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-not-supported-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-not-supported-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..762f698728501cbc78a951687e885f19d5e3d686 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-not-supported-expected.txt >@@ -0,0 +1,4 @@ >+CONSOLE MESSAGE: line 25: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-denied.py?token=84ccb17b-d065-4a34-b161-0855f4d57d96. Method PUT is not allowed by Access-Control-Allow-Methods. >+ >+PASS Sync PUT request denied at preflight >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-not-supported.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-not-supported.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..bb08296304f9ef619ef4b581fdf116953f1f3166 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-not-supported.htm >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Sync PUT request denied at preflight</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+const uuid = token(); >+const url = get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-preflight-denied.py?token=" + uuid; >+ >+test(() => { >+ let xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=reset", false); >+ xhr.send(); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("PUT", url, false); >+ >+ assert_throws("NetworkError", () => xhr.send("")); >+ >+ xhr = new XMLHttpRequest; >+ xhr.open("GET", url + "&command=complete", false); >+ xhr.send(); >+ assert_equals(xhr.responseText, "Request successfully blocked."); >+}); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-recursive-failed-request-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-recursive-failed-request-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..41d736eeda1c116cc746183ffffeb275cb61c311 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-recursive-failed-request-expected.txt >@@ -0,0 +1,23 @@ >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/access-control-basic-denied.py due to access control checks. >+ >+PASS Recursively repeated CORS requests with failed preflights should never result in unexpected behavior >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-recursive-failed-request.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-recursive-failed-request.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..2c2bcef48b9d3b593af421ac66db396f211d254f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-recursive-failed-request.htm >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Recursively repeated CORS requests with failed preflights should never result in unexpected behavior</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+let requestCount = 0; >+const requestMax = 10; >+ >+async_test((test) => { >+ function preflightRequest() { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.onload = test.unreached_func("Request succeeded unexpectedly."); >+ >+ xhr.onerror = test.step_func(() => { >+ assert_equals(xhr.status, 0); >+ if (++requestCount >= requestMax) { >+ test.done(); >+ return; >+ } >+ preflightRequest(); >+ }); >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-basic-denied.py"); >+ xhr.send(); >+ } >+ >+ preflightRequest(); >+}); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..974e0b5850b07504aac111e8568f2ae6d56d6017 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Tests that XHR doesn't prepend the body from CORS preflight response to the actual response >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ae42908489fd303bbe37a894872262e0f71dadf0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body-sync-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Tests body from CORS preflight response and actual response with sync request >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body-sync.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..d4c90aece062e5acc33dcf7582223331f35c2e74 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body-sync.htm >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests body from CORS preflight response and actual response with sync request</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+test(() => { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN+ >+ "/xhr/resources/access-control-allow-with-body.py", false); >+ xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); >+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); >+ xhr.send(); >+ >+ assert_equals(xhr.status, 200); >+ assert_equals(xhr.responseText, "PASS"); >+}); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..3ab0521106bd331c5111c456305fcf59c2646a98 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body.htm >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that XHR doesn't prepend the body from CORS preflight response to the actual response</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.onerror = test.unreached_func("Unexpected error."); >+ >+ xhr.onload = test.step_func_done(() => { >+ assert_equals(xhr.status, 200); >+ assert_equals(xhr.responseText, "PASS"); >+ }); >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/access-control-allow-with-body.py"); >+ xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); >+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); >+ xhr.send(); >+}); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-exposed-headers-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-exposed-headers-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5a0379a0e419e9a7aa0ce52e88518c58e6bb60e2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-exposed-headers-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Test CORS response with 'Access-Control-Expose-Headers' header >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-exposed-headers.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-exposed-headers.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c6f7bf5c6a680bc8cd68e49fa598cefd4c76d38c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-exposed-headers.htm >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Test CORS response with 'Access-Control-Expose-Headers' header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + >+ "/xhr/resources/pass.txt?pipe=" + >+ "header(Cache-Control,no-cache)|" + >+ "header(Access-Control-Max-Age,0)|" + >+ "header(Access-Control-Allow-Origin,*)|" + >+ "header(X-foo,BAR)|" + >+ "header(x-test,TEST)|" + >+ "header(Access-Control-Expose-Headers,x-Foo)|", >+ "header(Content-Type,text/html)"); >+ >+ xhr.onerror = test.unreached_func("Unexpected error"); >+ >+ xhr.onload = test.step_func_done(() => { >+ assert_equals(xhr.status, 200); >+ assert_equals(xhr.getResponseHeader("X-FOO"), "BAR"); >+ assert_equals(xhr.getResponseHeader("x-foo"), "BAR"); >+ assert_equals(xhr.getResponseHeader("x-test"), null); >+ assert_equals(xhr.responseText, "PASS\n"); >+ }); >+ >+ xhr.send(); >+}); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4c277a0a34cc83353ba4a85ce55a6f81008a85b1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow-expected.txt >@@ -0,0 +1,4 @@ >+ >+ >+PASS Tests that sandboxed iframe has CORS XHR access to a server that accepts all domains >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow-origin-null-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow-origin-null-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..05845932e93eda4e07968be8c80ef7d8eace631f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow-origin-null-expected.txt >@@ -0,0 +1,4 @@ >+ >+ >+PASS Tests that sandboxed iframe has CORS XHR access to a server that accepts null domain >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow-origin-null.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow-origin-null.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ae966683233ef3e47e7cfeb15bde4fa9d2b96563 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow-origin-null.htm >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that sandboxed iframe has CORS XHR access to a server that accepts null domain</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+async_test((test) => { >+ window.addEventListener("message", test.step_func((evt) => { >+ if (evt.data === "ready") { >+ document.getElementById("frame").contentWindow.postMessage( >+ get_host_info().HTTP_ORIGIN + >+ "/xhr/resources/pass.txt?pipe=" + >+ "header(Cache-Control,no-store)|" + >+ "header(Content-Type,text/plain)|" + >+ "header(Access-Control-Allow-Credentials,true)|" + >+ "header(Access-Control-Allow-External,true)|" + >+ "header(Access-Control-Allow-Origin,null)", "*"); >+ } else { >+ assert_equals(evt.data.trim(), "PASS"); >+ test.done(); >+ } >+ }), false); >+}); >+ </script> >+ <iframe id="frame" sandbox="allow-scripts" src="/xhr/resources/access-control-sandboxed-iframe.html"> >+ </iframe> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a3dbed420feaf62ad6b7b5cd8e8fc745efd94bc2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow.htm >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that sandboxed iframe has CORS XHR access to a server that accepts all domains</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+async_test((test) => { >+ window.addEventListener("message", test.step_func((evt) => { >+ if (evt.data === "ready") { >+ document.getElementById("frame").contentWindow.postMessage( >+ get_host_info().HTTP_ORIGIN + >+ "/xhr/resources/pass.txt?pipe=" + >+ "header(Cache-Control,no-store)|" + >+ "header(Content-Type,text/plain)|" + >+ "header(Access-Control-Allow-Credentials,true)|" + >+ "header(Access-Control-Allow-External,true)|" + >+ "header(Access-Control-Allow-Origin,*)", "*"); >+ } else { >+ assert_equals(evt.data.trim(), "PASS"); >+ test.done(); >+ } >+ }), false); >+}); >+ </script> >+ <iframe id="frame" sandbox="allow-scripts" src="/xhr/resources/access-control-sandboxed-iframe.html"> >+ </iframe> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5c3915f0e5ecc6faa43235f8df0f8449aeae592f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 12: Origin null is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: line 12: XMLHttpRequest cannot load http://localhost:8800/xhr/resources/pass.txt?pipe=header(Cache-Control,no-store)|header(Content-Type,text/plain) due to access control checks. >+ >+ >+PASS Check that path exists and is accessible via local XHR request >+PASS Sandboxed iframe is denied access to path >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ce4b5e234e2937c542217b8a546cc3bc2acb6713 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 12: Origin null is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: line 12: XMLHttpRequest cannot load http://127.0.0.1:8800/xhr/resources/pass.txt?pipe=header(Cache-Control,no-store)|header(Content-Type,text/plain)header(Access-Control-Allow-Credentials,true)|header(Access-Control-Allow-Origin,http://localhost:8800) due to access control checks. >+ >+ >+PASS Check that path exists and is accessible via CORS XHR request >+PASS Sandboxed iframe is denied CORS access to server that allows parent origin >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied-without-wildcard.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied-without-wildcard.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a703a922e273447a19efd4fd72f606e35fcd62ff >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied-without-wildcard.htm >@@ -0,0 +1,43 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that sandboxed iframe does not have CORS XHR access to server with "Access-Control-Allow-Origin" set to the original origin</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+const path = "/xhr/resources/pass.txt?pipe=" + >+ "header(Cache-Control,no-store)|" + >+ "header(Content-Type,text/plain)" + >+ "header(Access-Control-Allow-Credentials,true)|" + >+ "header(Access-Control-Allow-Origin," + get_host_info().HTTP_ORIGIN + ")"; >+ >+async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + path); >+ xhr.send(); >+ xhr.onerror = test.unreached_func("Unexpected error"); >+ xhr.onload = test.step_func_done(() => { >+ assert_equals(xhr.status, 200); >+ assert_equals(xhr.responseText.trim(), "PASS"); >+ }); >+}, "Check that path exists and is accessible via CORS XHR request"); >+ >+async_test((test) => { >+ window.addEventListener("message", test.step_func((evt) => { >+ if (evt.data === "ready") { >+ document.getElementById("frame").contentWindow.postMessage( >+ get_host_info().HTTP_REMOTE_ORIGIN + path, "*"); >+ } else { >+ assert_equals(evt.data, "Exception thrown. Sandboxed iframe XHR access was denied in 'send'."); >+ test.done(); >+ } >+ }), false); >+}, "Sandboxed iframe is denied CORS access to server that allows parent origin"); >+ </script> >+ <iframe id="frame" sandbox="allow-scripts" src="/xhr/resources/access-control-sandboxed-iframe.html"> >+ </iframe> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..5b629917041f5fb59d2b2b3457f10d6f8ecc2964 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied.htm >@@ -0,0 +1,41 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Tests that sandboxed iframe does not have CORS XHR access to its server</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+const path = "/xhr/resources/pass.txt?pipe=" + >+ "header(Cache-Control,no-store)|" + >+ "header(Content-Type,text/plain)"; >+ >+async_test((test) => { >+ const xhr = new XMLHttpRequest; >+ xhr.open("GET", get_host_info().HTTP_ORIGIN + path); >+ xhr.send(); >+ xhr.onerror = test.unreached_func("Unexpected error"); >+ xhr.onload = test.step_func_done(() => { >+ assert_equals(xhr.status, 200); >+ assert_equals(xhr.responseText.trim(), "PASS"); >+ }); >+}, "Check that path exists and is accessible via local XHR request"); >+ >+async_test((test) => { >+ window.addEventListener("message", test.step_func((evt) => { >+ if (evt.data === "ready") { >+ document.getElementById("frame").contentWindow.postMessage( >+ get_host_info().HTTP_ORIGIN + path, "*"); >+ } else { >+ assert_equals(evt.data, "Exception thrown. Sandboxed iframe XHR access was denied in 'send'."); >+ test.done(); >+ } >+ }), false); >+}, "Sandboxed iframe is denied access to path"); >+ </script> >+ <iframe id="frame" sandbox="allow-scripts" src="/xhr/resources/access-control-sandboxed-iframe.html"> >+ </iframe> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/allow-lists-starting-with-comma-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/allow-lists-starting-with-comma-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c40430150447b2064e11ae458d8ade993778a5ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/allow-lists-starting-with-comma-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Allow lists starting with a comma should be parsed correctly >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/allow-lists-starting-with-comma.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/allow-lists-starting-with-comma.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ece699bf5d75f1a69304edb330857bd1ea0e99e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/allow-lists-starting-with-comma.htm >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>Allow lists starting with a comma should be parsed correctly</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+ </head> >+ <body> >+ <script type="text/javascript"> >+ async_test(function(test) { >+ const client = new XMLHttpRequest(); >+ let url = "xhr/resources/access-control-allow-lists.py?headers=,y-lol,x-print,%20,,,y-print&origin=" + >+ get_host_info().HTTP_ORIGIN; >+ client.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + '/' + url, false); >+ client.setRequestHeader('x-print', 'unicorn') >+ client.setRequestHeader('y-print', 'narwhal') >+ // Sending GET request with custom headers >+ assert_equals(client.send(null), undefined); >+ const response = JSON.parse(client.response); >+ assert_equals(response['x-print'], "unicorn"); >+ assert_equals(response['y-print'], "narwhal"); >+ >+ url = "xhr/resources/access-control-allow-lists.py?methods=,,PUT,GET&origin=" + >+ get_host_info().HTTP_ORIGIN; >+ client.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + '/' + url, false); >+ // Sending PUT request >+ assert_equals(client.send(null), undefined); >+ test.done(); >+ }, "Allow lists starting with a comma should be parsed correctly"); >+ </script> >+ </body> >+ </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/anonymous-mode-unsupported-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/anonymous-mode-unsupported-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f68d75ba40862eaecb319dbc92bf3b09c7f99cfd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/anonymous-mode-unsupported-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: anonymous mode unsupported >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/anonymous-mode-unsupported.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/anonymous-mode-unsupported.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..f995ec2a94e2206c06312eed2cd7ee11fa245dac >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/anonymous-mode-unsupported.htm >@@ -0,0 +1,40 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: anonymous mode unsupported</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ /* >+ Older versions of the XMLHttpRequest spec had an 'anonymous' mode >+ The point of this mode was to handle same-origin requests like other-origin requests, >+ i.e. require preflight, drop authentication data (cookies and HTTP auth) >+ Also the Origin: and Referer: headers would not be sent >+ >+ This mode was dropped due to lack of implementations and interest, >+ and this test is here just to assert failure if any implementation >+ supports this based on an older spec version. >+ */ >+ document.cookie = 'test=anonymous-mode-unsupported' >+ test = async_test(); >+ test.add_cleanup(function(){ >+ // make sure we clean up the cookie again to avoid confusing other tests.. >+ document.cookie = 'test=;expires=Fri, 28 Feb 2014 07:25:59 GMT'; >+ }) >+ test.step(function() { >+ var client = new XMLHttpRequest({anonymous:true}) >+ client.open("GET", "resources/inspect-headers.py?filter_name=cookie") >+ client.onreadystatechange = test.step_func(function(){ >+ if(client.readyState === 4){ >+ assert_equals(client.responseText, 'Cookie: test=anonymous-mode-unsupported\n', 'The deprecated anonymous:true should be ignored, cookie sent anyway') >+ test.done(); >+ } >+ }); >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/close-worker-with-xhr-in-progress-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/close-worker-with-xhr-in-progress-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..130db81db86bac38ee85e00add0287f899767bdf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/close-worker-with-xhr-in-progress-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Terminating a worker with a XHR in progress doesn't crash >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/close-worker-with-xhr-in-progress.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/close-worker-with-xhr-in-progress.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4d03bea028fbc629b3a8f285478b845dbce432fb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/close-worker-with-xhr-in-progress.html >@@ -0,0 +1,26 @@ >+<!doctype html> >+<html> >+<head> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+async_test(t => { >+ function workerCode(origin) { >+ const xhr = new XMLHttpRequest(); >+ xhr.open('GET', origin + '/xhr/resources/image.gif?pipe=trickle(100:d2)', true); >+ xhr.responseType = 'blob'; >+ xhr.send(); >+ postMessage('sent'); >+ } >+ >+ const workerBlob = new Blob([workerCode.toString() + ";workerCode('" + location.origin + "');"], {type:"application/javascript"}); >+ const w = new Worker(URL.createObjectURL(workerBlob)); >+ w.onmessage = t.step_func(e => { >+ assert_equals(e.data, 'sent'); >+ t.step_timeout(t.step_func(() => { >+ w.terminate(); >+ t.step_timeout(t.step_func_done(() => {}), 500); >+ }, 100)); >+ }); >+}, 'Terminating a worker with a XHR in progress doesn\'t crash'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/data-uri-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/data-uri-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d53f48327be9b6abd4ada141b7c00063aec2bd62 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/data-uri-expected.txt >@@ -0,0 +1,12 @@ >+ >+PASS XHR method GET with MIME type text/plain >+PASS XHR method GET with MIME type text/plain (base64) >+PASS XHR method GET with MIME type text/html >+PASS XHR method GET with MIME type text/html;charset=UTF-8 >+PASS XHR method GET with MIME type image/png >+PASS XHR method POST with MIME type text/plain >+PASS XHR method PUT with MIME type text/plain >+PASS XHR method DELETE with MIME type text/plain >+FAIL XHR method HEAD with MIME type text/plain assert_equals: expected "" but got "Hello, World!" >+PASS XHR method UNICORN with MIME type text/plain >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/data-uri.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/data-uri.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..88a7d78fc5953bc89b45503f1792f3a1d1dfe789 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/data-uri.htm >@@ -0,0 +1,41 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>XMLHttpRequest: data URLs</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+ >+<script> >+ function do_test(method, url, mimeType, testNamePostfix) { >+ if (typeof mimeType === 'undefined' || mimeType === null) mimeType = 'text/plain'; >+ var test = async_test("XHR method " + method + " with MIME type " + mimeType + (testNamePostfix||'')); >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ body = method === "HEAD" ? "" : "Hello, World!"; >+ client.onreadystatechange = test.step_func(function () { >+ if (client.readyState !== 4) { >+ return; >+ } >+ assert_equals(client.responseText, body); >+ assert_equals(client.status, 200); >+ assert_equals(client.getResponseHeader('Content-Type'), mimeType); >+ var allHeaders = client.getAllResponseHeaders(); >+ assert_regexp_match(allHeaders, /content\-type\:/i, 'getAllResponseHeaders() includes Content-Type'); >+ assert_false(/content\-length\:/i.test(allHeaders), 'getAllResponseHeaders() must not include Content-Length'); >+ test.done(); >+ }); >+ client.open(method, url); >+ client.send(null); >+ }); >+ } >+ do_test('GET', "data:text/plain,Hello, World!"); >+ do_test('GET', "data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==", undefined, " (base64)"); >+ do_test('GET', "data:text/html,Hello, World!", 'text/html'); >+ do_test('GET', "data:text/html;charset=UTF-8,Hello, World!", 'text/html;charset=UTF-8'); >+ do_test('GET', "data:image/png,Hello, World!", 'image/png'); >+ do_test('POST', "data:text/plain,Hello, World!"); >+ do_test('PUT', "data:text/plain,Hello, World!"); >+ do_test('DELETE', "data:text/plain,Hello, World!"); >+ do_test('HEAD', "data:text/plain,Hello, World!"); >+ do_test('UNICORN', "data:text/plain,Hello, World!"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-abort-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a89c58e14160dd87d87f4b99dda3042c9e319b0a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-abort-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: abort event >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-abort.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..2f80d1b60780a4c274a4ade882555e6e7a1b8845 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-abort.htm >@@ -0,0 +1,29 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: abort event</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onabort" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-abort" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-abort" data-tested-assertations="following::ol//ol//ol/li[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.onabort = test.step_func(function() { >+ test.done(); >+ }); >+ client.open("GET", "resources/well-formed.xml"); >+ client.send(null); >+ client.abort(); >+ test.step_timeout(() => { >+ assert_unreached("onabort not called after 4 ms"); >+ }, 4); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error-order.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error-order.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..47de75f3a4460f201dc6e8a728718868ccd39e66 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error-order.sub-expected.txt >@@ -0,0 +1,4 @@ >+Blocked access to external URL http://nonexistent.localhost:8800/ >+ >+FAIL XMLHttpRequest: event - error (order of events) assert_equals: expected "upload.loadstart(0,12,true)" but got "upload.loadstart(0,0,false)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error-order.sub.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error-order.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..252a90bb6214bc20b69e4200be6cdfd54a8ff291 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error-order.sub.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <meta name="assert" content="Check the order of events fired when the request has failed."> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-event-order.js"></script> >+ <title>XMLHttpRequest: event - error (order of events)</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ prepare_xhr_for_event_order_test(xhr); >+ >+ xhr.addEventListener("loadend", function() { >+ test.step(function() { >+ // no progress events due to CORS failure >+ assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,12,true)", 2, 4, "upload.error(0,0,false)", "upload.loadend(0,0,false)", "error(0,0,false)", "loadend(0,0,false)"]); >+ test.done(); >+ }); >+ }); >+ >+ xhr.open("POST", "http://nonexistent.{{host}}:{{ports[http][0]}}", true); >+ xhr.send("Test Message"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7b75973cfaf8412902e89fbeb3dc569083f9b846 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error.sub-expected.txt >@@ -0,0 +1,5 @@ >+Blocked access to external URL http://nonexistent-origin.localhost:8800/ >+CONSOLE MESSAGE: line 22: XMLHttpRequest cannot load http://nonexistent-origin.localhost:8800/ due to access control checks. >+ >+PASS XMLHttpRequest Test: event - error >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error.sub.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5f275600006360c3d61377507be9ecda3f3ee002 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error.sub.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>XMLHttpRequest Test: event - error</title> >+<link rel="author" title="Intel" href="http://www.intel.com"> >+<meta name="assert" content="Check if event onerror is fired When the request has failed."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<div id="log"></div> >+ >+<script> >+ >+async_test(function (t) { >+ var client = new XMLHttpRequest(); >+ client.onerror = t.step_func(function(e) { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "error"); >+ t.done(); >+ }); >+ >+ client.open("GET", "http://nonexistent.{{host}}:{{ports[http][0]}}"); >+ client.send("null"); >+}, document.title); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-load-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-load-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d044be7b9b86af9b4a60e2bc6ef7167046586f4b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-load-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: Fire an event named load (synchronous flag is unset) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-load.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-load.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..cdd0c5bb8ad1876a3a96797f5f64a7437eecae5d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-load.htm >@@ -0,0 +1,30 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>XMLHttpRequest: The send() method: Fire an event named load (synchronous flag is unset)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onload" data-tested-assertations="../.." /> >+<link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-load" data-tested-assertations="../.." /> >+<div id="log"></div> >+ >+<script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.onload = test.step_func(function(e) { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "load"); >+ assert_equals(client.readyState, 4); >+ test.done(); >+ }); >+ client.onreadystatechange = test.step_func(function() { >+ if (client.readyState !== 4) return; >+ >+ test.step_timeout(() => { >+ assert_unreached("Didn't get load event within 4ms of readystatechange==4"); >+ }, 4); >+ }); >+ client.open("GET", "resources/well-formed.xml"); >+ client.send(null); >+ }); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadend-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4cc92e81e110a1b9c60ed8c7b31168b2cab76f2f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadend-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: loadend event >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadend.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..b17d9b9134ea8669fd440433c0d0d9ffc1a729db >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadend.htm >@@ -0,0 +1,32 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: loadend event</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="/../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="/../.." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.onloadend = test.step_func(function(e) { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "loadend"); >+ test.done(); >+ }); >+ client.onreadystatechange = function() { >+ if (client.readyState !== 4) return; >+ test.step_timeout(() => { >+ assert_unreached("onloadend not called after 100 ms"); >+ }, 100); >+ }; >+ client.open("GET", "resources/well-formed.xml"); >+ client.send(null); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..bbed51861314c3ce1f195c080814acef860852d3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: loadstart event >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart-upload-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart-upload-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8dac4591b05d84088779580982ded3fc43b1b883 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart-upload-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: The send() method: Fire a progress event named loadstart on upload object (synchronous flag is unset) assert_equals: upload.onloadstart: event.total expected 7 but got 0 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart-upload.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart-upload.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..275d418a7e090e11e20a60acac31e87978fe64c5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart-upload.htm >@@ -0,0 +1,28 @@ >+<!doctype html> >+<html lang=en> >+<meta charset=utf-8> >+<title>XMLHttpRequest: The send() method: Fire a progress event named loadstart on upload object (synchronous flag is unset)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="../.." /> >+<link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="../.." /> >+<div id="log"></div> >+<script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.upload.onloadstart = test.step_func(function(e) { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.total, 7, 'upload.onloadstart: event.total'); >+ assert_equals(e.loaded, 0, 'upload.onloadstart: event.loaded'); >+ assert_equals(e.type, "loadstart"); >+ test.done(); >+ }); >+ client.onreadystatechange = test.step_func(function() { >+ if (client.readyState === 4) >+ assert_unreached("onloadstart not called."); >+ }); >+ client.open("POST", "resources/trickle.py?ms=5&count=8"); >+ client.send('foo=bar'); >+ }); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..442be938dc7f95760da4e7df345cac1b1d1497b3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart.htm >@@ -0,0 +1,31 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: loadstart event</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[9]/ol/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.onloadstart = test.step_func(function(e) { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "loadstart"); >+ assert_equals(client.readyState, 1); >+ test.done(); >+ }); >+ test.step_timeout(function () { >+ assert_unreached("onloadstart not called after 500 ms"); >+ }, 500); >+ client.open("GET", "resources/well-formed.xml"); >+ client.send(null); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-progress-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-progress-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..22ade068047b08cde6d08523fe03c1b16fd55c35 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-progress-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: Fire a progress event named progress (synchronous flag is unset) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-progress.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-progress.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..65d3f289810fc997264a3d082360f21640817b4b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-progress.htm >@@ -0,0 +1,26 @@ >+<!doctype html> >+<html lang=en> >+<meta charset=utf-8> >+<title>XMLHttpRequest: The send() method: Fire a progress event named progress (synchronous flag is unset)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="../.." /> >+<link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="../.." /> >+<div id="log"></div> >+<script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.onprogress = test.step_func(function(e) { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "progress"); >+ test.done(); >+ }); >+ client.onreadystatechange = test.step_func(function() { >+ if (client.readyState === 4) >+ assert_unreached("onprogress not called."); >+ }); >+ client.open("GET", "resources/trickle.py?count=4&delay=150"); >+ client.send(null); >+ }); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystate-sync-open-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystate-sync-open-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..765c952e98093ee08cea13f0d6f28ba3920e049c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystate-sync-open-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: open() call fires sync readystate event (sync) >+PASS XMLHttpRequest: open() call fires sync readystate event (async) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystate-sync-open.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystate-sync-open.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ae9697ea13a94fb230a31b61e11cf76593f7bf61 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystate-sync-open.htm >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() call fires sync readystate event</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[13]/ol[1]/li[2]" /> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ var eventsFired = [] >+ client.onreadystatechange = function(){ >+ eventsFired.push(client.readyState) >+ } >+ client.open('GET', "...", false) >+ assert_array_equals(eventsFired, [1]) >+ }, document.title + ' (sync)') >+ test(function() { >+ var client = new XMLHttpRequest() >+ var eventsFired = [] >+ client.onreadystatechange = function(){ >+ eventsFired.push(client.readyState) >+ } >+ client.open('GET', "...", true) >+ assert_array_equals(eventsFired, [1]) >+ }, document.title + ' (async)') >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystatechange-loaded-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystatechange-loaded-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c110e02bf99acd40858c2d9ddb421c67089c5b19 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystatechange-loaded-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: the LOADING state change may be emitted multiple times >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystatechange-loaded.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystatechange-loaded.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..452efafae9f733b1e78ca6a73c65e017be2655fc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystatechange-loaded.htm >@@ -0,0 +1,36 @@ >+<!doctype html> >+<html lang="en"> >+<head> >+ <meta charset="utf-8"> >+ <title>XMLHttpRequest: the LOADING state change may be emitted multiple times</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[10]/dt[1]"> >+</head> >+ >+<div id="log"></div> >+ >+<script> >+ >+var test = async_test(); >+ >+test.step(function() { >+ var client = new XMLHttpRequest(); >+ var countedLoading = 0; >+ >+ client.onreadystatechange = test.step_func(function() { >+ if (client.readyState === 3) { >+ countedLoading += 1; >+ } >+ >+ if (client.readyState === 4) { >+ assert_greater_than(countedLoading, 1, "LOADING state change may be emitted multiple times"); >+ >+ test.done(); >+ } >+ }); >+ >+ client.open("GET", "resources/trickle.py?count=10"); // default timeout in trickle.py is 1/2 sec, so this request will take 5 seconds to complete >+ client.send(null); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a054dd787af600d157994f0c4a2704c323e015fd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: timeout event >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout-order-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..bc30c4e2582bb4ded7dd8bf3462a43c08bb48128 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout-order-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: event - timeout (order of events) assert_equals: expected "upload.loadstart(0,12,true)" but got "upload.loadstart(0,0,false)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout-order.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout-order.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..d4dc78010a74df528fae081beb270a51b25e94d3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout-order.htm >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <meta name="assert" content="Check the order of events fired when the request has failed."> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-event-order.js"></script> >+ <title>XMLHttpRequest: event - timeout (order of events)</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ prepare_xhr_for_event_order_test(xhr); >+ xhr.addEventListener("loadend", function() { >+ test.step(function() { >+ assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,12,true)", 4, "upload.timeout(0,0,false)", "upload.loadend(0,0,false)", "timeout(0,0,false)", "loadend(0,0,false)"]); >+ test.done(); >+ }); >+ }); >+ >+ xhr.timeout = 5; >+ xhr.open("POST", "resources/delay.py?ms=20000"); >+ xhr.send("Test Message"); >+ test.step_timeout(() => { >+ assert_unreached("ontimeout not called."); >+ }, 10); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c40213562b57ad56f8bf06a7a89f0453d53a1fd1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout.htm >@@ -0,0 +1,34 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: timeout event</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-timeout" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following-sibling::ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.ontimeout = function() { >+ test.step(function() { >+ assert_equals(client.readyState, 4); >+ test.done(); >+ }); >+ }; >+ client.timeout = 5; >+ client.open("GET", "resources/delay.py?ms=20000"); >+ client.send(null); >+ test.step_timeout(() => { >+ assert_unreached("ontimeout not called."); >+ }, 10); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress-crossorigin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress-crossorigin-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4fdf53bb5974e79b936ee5c24179abe6f1d599eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress-crossorigin-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS Upload events registered on time (http://127.0.0.1:8800/xhr/resources/corsenabled.py) >+PASS Upload events registered on time (resources/redirect.py?code=307&location=http://127.0.0.1:8800/xhr/resources/corsenabled.py) >+PASS Upload events registered too late (http://127.0.0.1:8800/xhr/resources/corsenabled.py) >+PASS Upload events registered too late (resources/redirect.py?code=307&location=http://127.0.0.1:8800/xhr/resources/corsenabled.py) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress-crossorigin.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress-crossorigin.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..5e558a27b78b1879e0ad3e352037db3434b9fb6a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress-crossorigin.htm >@@ -0,0 +1,33 @@ >+<!doctype html> >+<html lang=en> >+<meta charset=utf-8> >+<title>XMLHttpRequest: upload progress event for cross-origin requests</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/get-host-info.sub.js"></script> >+<div id="log"></div> >+<script> >+const remote = get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/corsenabled.py", >+ redirect = "resources/redirect.py?code=307&location=" + remote; >+ >+[remote, redirect].forEach(url => { >+ async_test(test => { >+ const client = new XMLHttpRequest(); >+ client.upload.onprogress = test.step_func_done() >+ client.onload = test.unreached_func() >+ client.open("POST", url) >+ client.send("On time: " + url) >+ }, "Upload events registered on time (" + url + ")"); >+}); >+ >+[remote, redirect].forEach(url => { >+ async_test(test => { >+ const client = new XMLHttpRequest(); >+ client.onload = test.step_func_done(); >+ client.open("POST", url); >+ client.send("Too late: " + url); >+ client.upload.onloadstart = test.unreached_func(); // registered too late >+ client.upload.onprogress = test.unreached_func(); // registered too late >+ }, "Upload events registered too late (" + url + ")"); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4fdf53bb5974e79b936ee5c24179abe6f1d599eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS Upload events registered on time (http://127.0.0.1:8800/xhr/resources/corsenabled.py) >+PASS Upload events registered on time (resources/redirect.py?code=307&location=http://127.0.0.1:8800/xhr/resources/corsenabled.py) >+PASS Upload events registered too late (http://127.0.0.1:8800/xhr/resources/corsenabled.py) >+PASS Upload events registered too late (resources/redirect.py?code=307&location=http://127.0.0.1:8800/xhr/resources/corsenabled.py) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..697d4cbd3f61cd223ea7b295306474c77b1de2dd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress.htm >@@ -0,0 +1,33 @@ >+<!doctype html> >+<html lang=en> >+<meta charset=utf-8> >+<title>XMLHttpRequest: upload progress event</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/common/get-host-info.sub.js"></script> >+<div id="log"></div> >+<script> >+const remote = get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/corsenabled.py", >+ redirect = "resources/redirect.py?code=307&location=" + remote; >+ >+[remote, redirect].forEach(url => { >+ async_test(test => { >+ const client = new XMLHttpRequest(); >+ client.upload.onprogress = test.step_func_done(); >+ client.onload = test.unreached_func(); >+ client.open("POST", url); >+ client.send("On time: " + url); >+ }, "Upload events registered on time (" + url + ")"); >+}); >+ >+[remote, redirect].forEach(url => { >+ async_test(test => { >+ const client = new XMLHttpRequest(); >+ client.onload = test.step_func_done(); >+ client.open("POST", url); >+ client.send("Too late: " + url); >+ client.upload.onloadstart = test.unreached_func(); // registered too late >+ client.upload.onprogress = test.unreached_func(); // registered too late >+ }, "Upload events registered too late (" + url + ")"); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-content-length-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-content-length-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..fd661490bd83eb5a9d8f43a0108945f447715268 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-content-length-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS ProgressEvent: firing events for HTTP with Content-Length >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-content-length.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-content-length.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4748ce390fc928e79e82cb1b3c3966f56729f34e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-content-length.html >@@ -0,0 +1,32 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>ProgressEvent: firing events for HTTP with Content-Length</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ async_test(t => { >+ const xhr = new XMLHttpRequest(); >+ let progressHappened = false; >+ >+ xhr.onprogress = t.step_func(pe => { >+ assert_equals(pe.type, "progress"); >+ assert_greater_than_equal(pe.loaded, 0, "loaded"); >+ assert_true(pe.lengthComputable, "lengthComputable"); >+ assert_equals(pe.total, 1300, "total"); >+ progressHappened = true; >+ }); >+ >+ xhr.onloadend = t.step_func_done(() => { >+ assert_true(progressHappened); >+ }); >+ >+ xhr.open("GET", "resources/trickle.py?ms=0&count=100&specifylength=1", true); >+ xhr.send(null); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-no-content-length-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-no-content-length-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..35f5ea3a68dbd2bdbad787b77dc67c0bcf85548a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-no-content-length-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS ProgressEvent: firing events for HTTP with no Content-Length >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-no-content-length.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-no-content-length.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ddf7dd800a2165a7f0541731f4e49772b72f4a59 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-no-content-length.html >@@ -0,0 +1,35 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>ProgressEvent: firing events for HTTP with no Content-Length</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ async_test(t => { >+ const xhr = new XMLHttpRequest(); >+ let progressHappened = false; >+ >+ xhr.onprogress = t.step_func(pe => { >+ assert_equals(pe.type, "progress"); >+ assert_greater_than_equal(pe.loaded, 0, "loaded"); >+ assert_false(pe.lengthComputable, "lengthComputable"); >+ assert_equals(pe.total, 0, "total"); >+ progressHappened = true; >+ }); >+ >+ // "loadstart", "error", "abort", "load" tests are out of scope. >+ // They SHOULD be tested in each spec that implement ProgressEvent. >+ >+ xhr.onloadend = t.step_func_done(() => { >+ assert_true(progressHappened); >+ }); >+ >+ xhr.open("GET", "resources/trickle.py?ms=0&count=100", true); >+ xhr.send(null); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/folder.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/folder.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..bf1a1fdefa3c7f4b0180a75a951e9574662a8bc8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/folder.txt >@@ -0,0 +1 @@ >+top >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-blob-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-blob-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4550be6fc87abb8e215eea35eb99790ea3394251 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-blob-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS formdata with blob >+PASS formdata with named blob >+PASS formdata.append() should throw if value is string and file name is given >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-blob.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-blob.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..5efef7b615bbfa7dc54891fe40405c0f62eb98e2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-blob.htm >@@ -0,0 +1,46 @@ >+<!doctype html> >+<html lang=en> >+<meta charset=utf-8> >+<title>XMLHttpRequest: upload formdata with blob</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#interface-formdata" data-tested-assertations="following::P[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata" data-tested-assertations="following::P[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-append" data-tested-assertations=".. following::P[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-append" data-tested-assertations="following::P[2] following::UL[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-FormData" data-tested-assertations="following::DD[1]" /> >+<div id="log"></div> >+<script> >+ function do_test (name, fd, expected) { >+ var test = async_test(name); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.onreadystatechange = test.step_func(function () { >+ if (client.readyState !== 4) return; >+ assert_equals(client.responseText, expected); >+ test.done(); >+ }); >+ client.open("POST", "resources/upload.py"); >+ client.send(fd); >+ }); >+ } >+ >+ function create_formdata () { >+ var fd = new FormData(); >+ for (var i = 0; i < arguments.length; i++) { >+ fd.append.apply(fd, arguments[i]); >+ } >+ 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 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 >+ test.step(function(){ >+ assert_throws(new TypeError(), function(){ >+ create_formdata('a', 'b', 'c'); >+ }); >+ }); >+ test.done(); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-delete-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-delete-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..66b9e3a9c9eb8517c43ec142cbe988a1f2cebc94 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-delete-expected.txt >@@ -0,0 +1,9 @@ >+ >+PASS testFormDataDelete >+PASS testFormDataDeleteFromForm >+PASS testFormDataDeleteFromFormNonExistentKey >+PASS testFormDataDeleteFromFormOtherKey >+PASS testFormDataDeleteFromEmptyForm >+PASS testFormDataDeleteNonExistentKey >+PASS testFormDataDeleteOtherKey >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-delete.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-delete.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..283b44b5ab01d1aaa51ba8751547d0f5670d6fcb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-delete.htm >@@ -0,0 +1,65 @@ >+<!doctype html> >+<html lang=en> >+<meta charset=utf-8> >+<title>FormData: delete</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-get" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-getall" /> >+<div id="log"></div> >+<form id="form1"> >+ <input type="hidden" name="key" value="value1"> >+ <input type="hidden" name="key" value="value2"> >+</form> >+<form id="form2"> >+ <input type="hidden" name="key1" value="value1"> >+ <input type="hidden" name="key2" value="value2"> >+</form> >+<form id="empty-form" /> >+<script> >+ test(function() { >+ var fd = create_formdata(['key', 'value1'], ['key', 'value2']); >+ fd.delete('key'); >+ assert_equals(fd.get('key'), null); >+ }, 'testFormDataDelete'); >+ test(function() { >+ var fd = new FormData(document.getElementById('form1')); >+ fd.delete('key'); >+ assert_equals(fd.get('key'), null); >+ }, 'testFormDataDeleteFromForm'); >+ test(function() { >+ var fd = new FormData(document.getElementById('form1')); >+ fd.delete('nil'); >+ assert_equals(fd.get('key'), 'value1'); >+ }, 'testFormDataDeleteFromFormNonExistentKey'); >+ test(function() { >+ var fd = new FormData(document.getElementById('form2')); >+ fd.delete('key1'); >+ assert_equals(fd.get('key1'), null); >+ assert_equals(fd.get('key2'), 'value2'); >+ }, 'testFormDataDeleteFromFormOtherKey'); >+ test(function() { >+ var fd = new FormData(document.getElementById('empty-form')); >+ fd.delete('key'); >+ assert_equals(fd.get('key'), null); >+ }, 'testFormDataDeleteFromEmptyForm'); >+ test(function() { >+ var fd = create_formdata(['key', 'value1'], ['key', 'value2']); >+ fd.delete('nil'); >+ assert_equals(fd.get('key'), 'value1'); >+ }, 'testFormDataDeleteNonExistentKey'); >+ test(function() { >+ var fd = create_formdata(['key1', 'value1'], ['key2', 'value2']); >+ fd.delete('key1'); >+ assert_equals(fd.get('key1'), null); >+ assert_equals(fd.get('key2'), 'value2'); >+ }, 'testFormDataDeleteOtherKey'); >+ >+ function create_formdata() { >+ var fd = new FormData(); >+ for (var i = 0; i < arguments.length; i++) { >+ fd.append.apply(fd, arguments[i]); >+ }; >+ return fd; >+ } >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..31c026a93137cfe42ba8a2189344b22f36a17532 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS empty formdata >+PASS formdata with string >+PASS formdata with named string >+PASS formdata from form >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-foreach-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-foreach-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..aaf6f6472ad195418056804719681d539b1a1cc4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-foreach-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS Iterator should return duplicate keys and non-deleted values >+PASS Entries iterator should return duplicate keys and non-deleted values >+PASS Keys iterator should return duplicates >+PASS Values iterator should return non-deleted values >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-foreach.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-foreach.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3ad184c4d55789a2d2f23db61d41b7ad9c650b0b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-foreach.html >@@ -0,0 +1,63 @@ >+<!doctype html> >+<html lang=en> >+<meta charset=utf-8> >+<title>FormData: foreach</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#interface-formdata" /> >+<script> >+ var fd = new FormData(); >+ fd.append('n1', 'v1'); >+ fd.append('n2', 'v2'); >+ fd.append('n3', 'v3'); >+ fd.append('n1', 'v4'); >+ fd.append('n2', 'v5'); >+ fd.append('n3', 'v6'); >+ fd.delete('n2'); >+ >+ var file = new File(['hello'], "hello.txt"); >+ fd.append('f1', file); >+ >+ var expected_keys = ['n1', 'n3', 'n1', 'n3', 'f1']; >+ var expected_values = ['v1', 'v3', 'v4', 'v6', file]; >+ test(function() { >+ var mykeys = [], myvalues = []; >+ for(var entry of fd) { >+ assert_equals(entry.length, 2, >+ 'Default iterator should yield key/value pairs'); >+ mykeys.push(entry[0]); >+ myvalues.push(entry[1]); >+ } >+ assert_array_equals(mykeys, expected_keys, >+ 'Default iterator should see duplicate keys'); >+ assert_array_equals(myvalues, expected_values, >+ 'Default iterator should see non-deleted values'); >+ }, 'Iterator should return duplicate keys and non-deleted values'); >+ test(function() { >+ var mykeys = [], myvalues = []; >+ for(var entry of fd.entries()) { >+ assert_equals(entry.length, 2, >+ 'entries() iterator should yield key/value pairs'); >+ mykeys.push(entry[0]); >+ myvalues.push(entry[1]); >+ } >+ assert_array_equals(mykeys, expected_keys, >+ 'entries() iterator should see duplicate keys'); >+ assert_array_equals(myvalues, expected_values, >+ 'entries() iterator should see non-deleted values'); >+ }, 'Entries iterator should return duplicate keys and non-deleted values'); >+ test(function() { >+ var mykeys = []; >+ for(var entry of fd.keys()) >+ mykeys.push(entry); >+ assert_array_equals(mykeys, expected_keys, >+ 'keys() iterator should see duplicate keys'); >+ }, 'Keys iterator should return duplicates'); >+ test(function() { >+ var myvalues = []; >+ for(var entry of fd.values()) >+ myvalues.push(entry); >+ assert_array_equals(myvalues, expected_values, >+ 'values() iterator should see non-deleted values'); >+ }, 'Values iterator should return non-deleted values'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-get-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-get-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ab512c0726c2a56b06c342530657866c88220f53 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-get-expected.txt >@@ -0,0 +1,14 @@ >+ >+PASS testFormDataGet >+PASS testFormDataGetFromForm >+PASS testFormDataGetFromFormNull >+PASS testFormDataGetFromEmptyForm >+PASS testFormDataGetNull1 >+PASS testFormDataGetNull2 >+PASS testFormDataGetAll >+PASS testFormDataGetAllEmpty1 >+PASS testFormDataGetAllEmpty2 >+PASS testFormDataGetAllFromForm >+PASS testFormDataGetAllFromFormNull >+PASS testFormDataGetAllFromEmptyForm >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-get.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-get.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..b71a72fa9bcc0a4981424fe94f17dc1b7688cfd2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-get.htm >@@ -0,0 +1,60 @@ >+<!doctype html> >+<html lang=en> >+<meta charset=utf-8> >+<title>FormData: get and getAll</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-get" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-getall" /> >+<div id="log"></div> >+<form id="form"> >+ <input type="hidden" name="key" value="value1"> >+ <input type="hidden" name="key" value="value2"> >+</form> >+<form id="empty-form" /> >+<script> >+ test(function() { >+ assert_equals(create_formdata(['key', 'value1'], ['key', 'value2']).get('key'), "value1"); >+ }, 'testFormDataGet'); >+ test(function() { >+ assert_equals(new FormData(document.getElementById('form')).get('key'), "value1"); >+ }, 'testFormDataGetFromForm'); >+ test(function() { >+ assert_equals(new FormData(document.getElementById('form')).get('nil'), null); >+ }, 'testFormDataGetFromFormNull'); >+ test(function() { >+ assert_equals(new FormData(document.getElementById('empty-form')).get('key'), null); >+ }, 'testFormDataGetFromEmptyForm'); >+ test(function() { >+ assert_equals(create_formdata(['key', 'value1'], ['key', 'value2']).get('nil'), null); >+ }, 'testFormDataGetNull1'); >+ test(function() { >+ assert_equals(create_formdata().get('key'), null); >+ }, 'testFormDataGetNull2'); >+ test(function() { >+ assert_array_equals(create_formdata(['key', 'value1'], ['key', 'value2']).getAll('key'), ["value1", "value2"]); >+ }, 'testFormDataGetAll'); >+ test(function() { >+ assert_array_equals(create_formdata(['key', 'value1'], ['key', 'value2']).getAll('nil'), []); >+ }, 'testFormDataGetAllEmpty1'); >+ test(function() { >+ assert_array_equals(create_formdata().getAll('key'), []); >+ }, 'testFormDataGetAllEmpty2'); >+ test(function() { >+ assert_array_equals(new FormData(document.getElementById('form')).getAll('key'), ["value1", "value2"]); >+ }, 'testFormDataGetAllFromForm'); >+ test(function() { >+ assert_array_equals(new FormData(document.getElementById('form')).getAll('nil'), []); >+ }, 'testFormDataGetAllFromFormNull'); >+ test(function() { >+ assert_array_equals(new FormData(document.getElementById('empty-form')).getAll('key'), []); >+ }, 'testFormDataGetAllFromEmptyForm'); >+ >+ function create_formdata() { >+ var fd = new FormData(); >+ for (var i = 0; i < arguments.length; i++) { >+ fd.append.apply(fd, arguments[i]); >+ }; >+ return fd; >+ } >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-has-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-has-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..fafb511c5370f738171fd06c7f7f5b2411dd36c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-has-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS testFormDataHas >+PASS testFormDataHasFromForm >+PASS testFormDataHasFromFormNull >+PASS testFormDataHasFromEmptyForm >+PASS testFormDataHasEmpty1 >+PASS testFormDataHasEmpty2 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-has.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-has.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ecd22b4e30b98508b10e54a4d2b356b97f3d1f5e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-has.htm >@@ -0,0 +1,42 @@ >+<!doctype html> >+<html lang=en> >+<meta charset=utf-8> >+<title>FormData: has</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-get" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-getall" /> >+<div id="log"></div> >+<form id="form"> >+ <input type="hidden" name="key" value="value1"> >+ <input type="hidden" name="key" value="value2"> >+</form> >+<form id="empty-form" /> >+<script> >+ test(function() { >+ assert_equals(create_formdata(['key', 'value1'], ['key', 'value2']).has('key'), true); >+ }, 'testFormDataHas'); >+ test(function() { >+ assert_equals(new FormData(document.getElementById('form')).has('key'), true); >+ }, 'testFormDataHasFromForm'); >+ test(function() { >+ assert_equals(new FormData(document.getElementById('form')).has('nil'), false); >+ }, 'testFormDataHasFromFormNull'); >+ test(function() { >+ assert_equals(new FormData(document.getElementById('empty-form')).has('key'), false); >+ }, 'testFormDataHasFromEmptyForm'); >+ test(function() { >+ assert_equals(create_formdata(['key', 'value1'], ['key', 'value2']).has('nil'), false); >+ }, 'testFormDataHasEmpty1'); >+ test(function() { >+ assert_equals(create_formdata().has('key'), false); >+ }, 'testFormDataHasEmpty2'); >+ >+ function create_formdata() { >+ var fd = new FormData(); >+ for (var i = 0; i < arguments.length; i++) { >+ fd.append.apply(fd, arguments[i]); >+ }; >+ return fd; >+ } >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-set-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-set-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f04616c983816ef63e26669fcf6e7ac28bc6adc7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-set-expected.txt >@@ -0,0 +1,16 @@ >+ >+PASS Passing a String object to FormData.set should work >+PASS testFormDataSet1 >+PASS testFormDataSet2 >+PASS testFormDataSetUndefined1 >+PASS testFormDataSetUndefined2 >+PASS testFormDataSetNull1 >+PASS testFormDataSetNull2 >+PASS testFormDataSetToForm1 >+PASS testFormDataSetToForm2 >+PASS testFormDataSetToFormUndefined1 >+PASS testFormDataSetToFormUndefined2 >+PASS testFormDataSetToFormNull1 >+PASS testFormDataSetToFormNull2 >+PASS testFormDataSetEmptyBlob >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-set.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-set.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..f030caa78f95309e223ece150c30261dbf85d937 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-set.htm >@@ -0,0 +1,98 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>FormData: set</title> >+<link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-set"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<form id="form" /> >+<script> >+ function test_formdata(creator, verifier, description) { >+ async_test(description).step(function() { >+ var fd = creator(); >+ var xhr = new XMLHttpRequest(); >+ xhr.onload = this.step_func(function() { >+ verifier(xhr.responseText); >+ this.done(); >+ }); >+ xhr.open("POST", "resources/upload.py"); >+ xhr.send(fd); >+ }); >+ } >+ >+ test_formdata(function() { >+ var fd = new FormData(); >+ fd.set("name", new String("value")); >+ return fd; >+ }, function(data) { >+ assert_equals(data, "name=value,\n"); >+ }, "Passing a String object to FormData.set should work"); >+ >+ test(function() { >+ assert_equals(create_formdata(['key', 'value1']).get('key'), "value1"); >+ }, 'testFormDataSet1'); >+ test(function() { >+ assert_equals(create_formdata(['key', 'value2'], ['key', 'value1']).get('key'), "value1"); >+ }, 'testFormDataSet2'); >+ test(function() { >+ assert_equals(create_formdata(['key', undefined]).get('key'), "undefined"); >+ }, 'testFormDataSetUndefined1'); >+ test(function() { >+ assert_equals(create_formdata(['key', undefined], ['key', 'value1']).get('key'), "value1"); >+ }, 'testFormDataSetUndefined2'); >+ test(function() { >+ assert_equals(create_formdata(['key', null]).get('key'), "null"); >+ }, 'testFormDataSetNull1'); >+ test(function() { >+ assert_equals(create_formdata(['key', null], ['key', 'value1']).get('key'), "value1"); >+ }, 'testFormDataSetNull2'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.set('key', 'value1'); >+ assert_equals(fd.get('key'), "value1"); >+ }, 'testFormDataSetToForm1'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.set('key', 'value2'); >+ fd.set('key', 'value1'); >+ assert_equals(fd.get('key'), "value1"); >+ }, 'testFormDataSetToForm2'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.set('key', undefined); >+ assert_equals(fd.get('key'), "undefined"); >+ }, 'testFormDataSetToFormUndefined1'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.set('key', undefined); >+ fd.set('key', 'value1'); >+ assert_equals(fd.get('key'), "value1"); >+ }, 'testFormDataSetToFormUndefined2'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.set('key', null); >+ assert_equals(fd.get('key'), "null"); >+ }, 'testFormDataSetToFormNull1'); >+ test(function() { >+ var fd = new FormData(document.getElementById("form")); >+ fd.set('key', null); >+ fd.set('key', 'value1'); >+ assert_equals(fd.get('key'), "value1"); >+ }, 'testFormDataSetToFormNull2'); >+ test(function() { >+ var fd = new FormData(); >+ fd.set('key', new Blob([]), 'blank.txt'); >+ var file = fd.get('key'); >+ >+ assert_true(file instanceof File); >+ assert_equals(file.name, 'blank.txt'); >+ }, 'testFormDataSetEmptyBlob'); >+ >+ function create_formdata() { >+ var fd = new FormData(); >+ for (var i = 0; i < arguments.length; i++) { >+ fd.set.apply(fd, arguments[i]); >+ }; >+ return fd; >+ } >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..e0d0a4e1d4b75420ee5e1592fc8902e1bdfce7a0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata.htm >@@ -0,0 +1,43 @@ >+<!doctype html> >+<html lang=en> >+<meta charset=utf-8> >+<title>XMLHttpRequest: upload formdata</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#interface-formdata" data-tested-assertations="following::P[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata" data-tested-assertations=".. following::P[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata-append" data-tested-assertations=".. following::UL[1]/LI[1] following::UL[1]/LI[2] following::UL[1]/LI[3]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-FormData" data-tested-assertations="following::DD[1]" /> >+<div id="log"></div> >+<form id="form"> >+ <input type="hidden" name="key" value="value"> >+</form> >+<script> >+ function do_test (name, fd, expected) { >+ var test = async_test(name); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.onreadystatechange = test.step_func(function () { >+ if (client.readyState !== 4) return; >+ assert_equals(client.responseText, expected); >+ test.done(); >+ }); >+ client.open("POST", "resources/upload.py"); >+ client.send(fd); >+ }); >+ } >+ >+ function create_formdata () { >+ var fd = new FormData(); >+ for (var i = 0; i < arguments.length; i++) { >+ fd.append.apply(fd, arguments[i]); >+ }; >+ return fd; >+ } >+ >+ do_test("empty formdata", new FormData(), '\n'); >+ do_test("formdata with string", create_formdata(['key', 'value']), 'key=value,\n'); >+ do_test("formdata with named string", create_formdata(['key', new Blob(['value'], {type: 'text/plain'}), 'kv.txt']), '\nkey=kv.txt:text/plain:5,'); >+ do_test("formdata from form", new FormData(document.getElementById('form')), 'key=value,\n'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cl-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cl-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..15860ed0b681a3a9c70831ef2a6321683cac16ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cl-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS Casing of known headers >+FAIL Casing of known headers 1 assert_regexp_match: expected object "/content-TYPE/" but got "Host: localhost:8800\r\nContent-Type: x/x\r\nConnection: keep-alive\r\nTHIS-IS-A-TEST: 1, 2\r\nAccept: */*\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/605.1.7+ (KHTML, like Gecko)\r\nReferer: http://localhost:8800/XMLHttpRequest/getallresponseheaders-cl.htm\r\nAccept-Language: en-us\r\nAccept-Encoding: gzip, deflate\r\n" >+PASS Casing of known headers 2 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cl.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cl.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a6f7272e987f04f963e28c23d477e506bf3e0e21 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cl.htm >@@ -0,0 +1,27 @@ >+<!doctype html> >+<title>Casing of known headers</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script> >+test(() => { >+ const client = new XMLHttpRequest >+ client.open("GET", "resources/header-content-length.asis", false) >+ client.send() >+ assert_equals(client.getAllResponseHeaders(), "content-length: 0\r\n") >+}) >+test(() => { >+ const client = new XMLHttpRequest >+ client.open("GET", "resources/echo-headers.py", false) >+ client.setRequestHeader("THIS-IS-A-TEST", "1") >+ client.setRequestHeader("THIS-is-A-test", "2") >+ client.setRequestHeader("content-TYPE", "x/x") >+ client.send() >+ assert_regexp_match(client.responseText, /content-TYPE/) >+ assert_regexp_match(client.responseText, /THIS-IS-A-TEST: 1, 2/) >+}) >+promise_test(() => { >+ return fetch("resources/echo-headers.py", {headers: [["THIS-is-A-test", 1], ["THIS-IS-A-TEST", 2]] }).then(res => res.text()).then(body => { >+ assert_regexp_match(body, /THIS-is-A-test: 1, 2/) >+ }) >+}) >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cookies-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cookies-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2d3f81fb271da55f33afcbf6b3317c8dbe1bcbfe >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cookies-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: getAllResponseHeaders() excludes cookies >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cookies.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cookies.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..2cd8098185963658171889ecfe226b44c02bbb9d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cookies.htm >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: getAllResponseHeaders() excludes cookies</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getallresponseheaders" data-tested-assertations="/following::OL[1]/LI[1] /following::OL[1]/LI[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ assert_equals(client.getAllResponseHeaders(), "") >+ client.onreadystatechange = function() { >+ test.step(function() { >+ var headers = client.getAllResponseHeaders().toLowerCase() >+ if(client.readyState == 1) { >+ assert_equals(headers, "") >+ } >+ if(client.readyState > 1) { >+ assert_true(headers.indexOf("\r\n") != -1, "carriage return") >+ assert_true(headers.indexOf("content-type") != -1, "content-type") >+ assert_true(headers.indexOf("x-custom-header") != -1, "x-custom-header") >+ assert_false(headers.indexOf("set-cookie") != -1, "set-cookie") >+ assert_false(headers.indexOf("set-cookie2") != -1, "set-cookie2") >+ } >+ if(client.readyState == 4) >+ test.done() >+ }) >+ } >+ client.open("GET", "resources/headers.py") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3c705c31c43385d30030c396ad354ac095b40c70 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS XMLHttpRequest: getAllResponseHeaders() >+PASS XMLHttpRequest: getAllResponseHeaders() 1 >+PASS XMLHttpRequest: getAllResponseHeaders() 2 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-status-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-status-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d22f3f00d4def118a7a4f1e6a2de3b457fccd6e0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-status-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: getAllResponseHeaders() excludes status >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-status.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-status.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a02ab457452262eb8c846904ad65c84671486d5d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-status.htm >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: getAllResponseHeaders() excludes status</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getallresponseheaders" data-tested-assertations="/following::OL[1]/LI[1] /following::OL[1]/LI[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ async_test(function() { >+ var client = new XMLHttpRequest() >+ assert_equals(client.getAllResponseHeaders(), "") >+ >+ client.onreadystatechange = this.step_func(function() { >+ var headers = client.getAllResponseHeaders().toLowerCase() >+ if(client.readyState == 1) { >+ assert_equals(headers, "") >+ } >+ if(client.readyState > 1) { >+ assert_false(headers.indexOf("200 ok") != -1) >+ assert_false(headers.indexOf("http/1.") != -1) >+ } >+ if(client.readyState == 4) >+ this.done() >+ }) >+ client.open("GET", "resources/headers.py") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..7b54e9e16f84b00b25e6ce04bfb86b2160e4d11a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders.htm >@@ -0,0 +1,33 @@ >+<!doctype html> >+<title>XMLHttpRequest: getAllResponseHeaders()</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<div id="log"></div> >+<script> >+async_test((t) => { >+ const client = new XMLHttpRequest() >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.getAllResponseHeaders(), "foo-test: 1, 2, 3\r\n") >+ }) >+ client.onerror = t.unreached_func("unexpected error") >+ client.open("GET", "resources/headers-basic.asis") >+ client.send(null) >+}) >+ >+async_test((t) => { >+ const client = new XMLHttpRequest() >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.getAllResponseHeaders(), "also-here: Mr. PB\r\newok: lego\r\nfoo-test: 1, 2\r\n") >+ }) >+ client.onerror = t.unreached_func("unexpected error") >+ client.open("GET", "resources/headers.asis") >+ client.send(null) >+}) >+ >+test(() => { >+ const client = new XMLHttpRequest >+ client.open("GET", "resources/header-content-length.asis", false) >+ client.send() >+ assert_equals(client.getAllResponseHeaders(), "content-length: 0\r\n") >+}) >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b9f6d781b67d3287c29a0f3bd82dfe8261154929 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: getResponseHeader() case-insensitive matching >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..6a961493574eed3d84e9a5b62fabdbd478a81da9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive.htm >@@ -0,0 +1,34 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: getResponseHeader() case-insensitive matching</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader"> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.getResponseHeader("x-custom-header"), "test") >+ assert_equals(client.getResponseHeader("X-Custom-Header"), "test") >+ assert_equals(client.getResponseHeader("X-CUSTOM-HEADER"), "test") >+ assert_equals(client.getResponseHeader("X-custom-HEADER"), "test") >+ assert_equals(client.getResponseHeader("X-CUSTOM-header-COMMA"), "1, 2") >+ assert_equals(client.getResponseHeader("X-CUSTOM-no-such-header-in-response"), null) >+ assert_equals(client.getResponseHeader("CONTENT-TYPE"), "text/plain") >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/headers.py") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-chunked-trailer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-chunked-trailer-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c9046bbf7adb608347af047622dce6b012ca23d2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-chunked-trailer-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: getResponseHeader() and HTTP trailer >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-chunked-trailer.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-chunked-trailer.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..0659a3a05e25ff1581387a72fd66477dde3ff868 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-chunked-trailer.htm >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: getResponseHeader() and HTTP trailer</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="/following::OL[1]/LI[4] /following::OL[1]/LI[5] /following::OL[1]/LI[6]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.getResponseHeader('Trailer'), 'X-Test-Me') >+ assert_equals(client.getResponseHeader('X-Test-Me'), null) >+ assert_equals(client.getAllResponseHeaders().indexOf('Trailer header value'), -1) >+ assert_regexp_match(client.getAllResponseHeaders(), /trailer:\sX-Test-Me/) >+ assert_equals(client.responseText, "First chunk\r\nSecond chunk\r\nYet another (third) chunk\r\nYet another (fourth) chunk\r\n") >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/chunked.py") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-cookies-and-more-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-cookies-and-more-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6cd62c17114205bf817a19445adf66f5c3e9f47e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-cookies-and-more-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: getResponseHeader() custom/non-existent headers and cookies >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-cookies-and-more.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-cookies-and-more.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..053fe441faf230908d5257ae363a4ccafa47a814 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-cookies-and-more.htm >@@ -0,0 +1,36 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: getResponseHeader() custom/non-existent headers and cookies</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="following::OL[1]/LI[3] following::OL[1]/LI[5] following::OL[1]/LI[6]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 1) { >+ assert_equals(client.getResponseHeader("x-custom-header"), null) >+ } >+ if(client.readyState > 1) { >+ assert_equals(client.getResponseHeader("x-custom-header"), "test") >+ assert_equals(client.getResponseHeader("x-custom-header-empty"), "") >+ assert_equals(client.getResponseHeader("set-cookie"), null) >+ assert_equals(client.getResponseHeader("set-cookie2"), null) >+ assert_equals(client.getResponseHeader("x-non-existent-header"), null) >+ } >+ if(client.readyState == 4) >+ test.done() >+ }) >+ } >+ client.open("GET", "resources/headers.py") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-error-state-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-error-state-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4f1ae6946ed419b3e17782a3fcc26812e6a8483a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-error-state-expected.txt >@@ -0,0 +1,5 @@ >+Blocked access to external URL http://www1.localhost:8800/xhr/resources/nocors/folder.txt >+CONSOLE MESSAGE: line 32: XMLHttpRequest cannot load http://www1.localhost:8800/xhr/resources/nocors/folder.txt due to access control checks. >+ >+PASS XMLHttpRequest: getResponseHeader() in error state (failing cross-origin test) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-error-state.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-error-state.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c9695fdee0fe4a2e7229e4f4401009c657192de2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-error-state.htm >@@ -0,0 +1,36 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: getResponseHeader() in error state (failing cross-origin test)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="following::OL[1]/LI[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 1) { >+ assert_equals(client.getResponseHeader("x-custom-header"), null) >+ } >+ if(client.readyState > 1) { >+ assert_equals(client.getResponseHeader("x-custom-header"), null) >+ } >+ if(client.readyState == 4){ >+ assert_equals(client.getResponseHeader("x-custom-header"), null) >+ test.done() >+ } >+ }) >+ } >+ var url = location.protocol + "//" + 'www1.' + location.host + (location.pathname.replace(/getresponseheader-error-state\.htm/, 'resources/nocors/folder.txt')) >+ client.open("GET", url) >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-server-date-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-server-date-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b7389ff8007231d1005622a4cd71c242d4c53059 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-server-date-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: getResponseHeader() server and date >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-server-date.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-server-date.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..409bc3503903c5c5726daa73f1cc4f59d3c35bd9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-server-date.htm >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: getResponseHeader() server and date</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="/following::OL[1]/LI[4] /following::OL[1]/LI[5] /following::OL[1]/LI[6]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_true(client.getResponseHeader("Server") != null) >+ assert_true(client.getResponseHeader("Date") != null) >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/headers.py") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-special-characters-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-special-characters-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1a407a0218a72eb4aafe4e33c2c1a2ce692f46f9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-special-characters-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: getResponseHeader() funny characters >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-special-characters.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-special-characters.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..980f8481c7e888a4f0c8f2d842d4eccca48490b4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-special-characters.htm >@@ -0,0 +1,34 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: getResponseHeader() funny characters</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="/following::OL[1]/LI[5] /following::OL[1]/LI[6]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.getResponseHeader("x-custom-header "), null) >+ assert_equals(client.getResponseHeader(" x-custom-header"), null) >+ assert_equals(client.getResponseHeader("x-custom-header-bytes"), "\xE2\x80\xA6") >+ assert_equals(client.getResponseHeader("x¾"), null) >+ assert_equals(client.getResponseHeader("x-custom-header\n"), null) >+ assert_equals(client.getResponseHeader("\nx-custom-header"), null) >+ assert_equals(client.getResponseHeader("x-custom-header:"), null) >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/headers.py") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-unsent-opened-state-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-unsent-opened-state-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ec098f3fc354443df63d775045d4437e430639aa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-unsent-opened-state-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: getResponseHeader() in unsent, opened states >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-unsent-opened-state.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-unsent-opened-state.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..e3bc2720f12d9e5a6128bc84fbec4ea290a81d1d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-unsent-opened-state.htm >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: getResponseHeader() in unsent, opened states</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getresponseheader" data-tested-assertations="/following::OL[1]/LI[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ assert_equals(client.getResponseHeader("x-custom-header"), null) >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState < 2) { >+ assert_equals(client.getResponseHeader("x-custom-header"), null) >+ assert_equals(client.getResponseHeader("CONTENT-TYPE"), null) >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/headers.py") >+ assert_equals(client.getResponseHeader("x-custom-header"), null) >+ assert_equals(client.getResponseHeader("Date"), null) >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8260a8692c81e69ca9c2d60458da2d3b4ffa9907 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-async-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Async request has User-Agent header >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-async.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-async.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..8c1d0b663f4bcc35e24619e1f16dca7ec1bccf6a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-async.htm >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>Test that async requests (both OPTIONS preflight and regular) are sent with the User-Agent header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+</head> >+<body> >+<script type="text/javascript"> >+ async_test((test) => { >+ let xhr = new XMLHttpRequest; >+ xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/header-user-agent.py"); >+ xhr.setRequestHeader("x-test", "foobar"); >+ >+ xhr.onerror = test.unreached_func("Unexpected error"); >+ >+ xhr.onload = test.step_func_done(() => { >+ assert_equals(xhr.responseText, "PASS"); >+ }); >+ >+ xhr.send(); >+ }, "Async request has User-Agent header"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..db68d213fe09a2bbdcf4b2a9431fb2ef99ffd2d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-sync-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Sync request has User-Agent header >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-sync.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..d88aac2805d7aa800b0e927b31310cc33d5f142f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-sync.htm >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>Test that sync requests (both OPTIONS preflight and regular) are sent with the User-Agent header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/get-host-info.sub.js"></script> >+</head> >+<body> >+<script type="text/javascript"> >+ test(function() { >+ let xhr = new XMLHttpRequest; >+ xhr.open("post", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/header-user-agent.py", false); >+ xhr.setRequestHeader("x-test", "foobar"); >+ xhr.send(); >+ assert_equals(xhr.responseText, "PASS"); >+ }, "Sync request has User-Agent header"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/headers-normalize-response-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/headers-normalize-response-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..85cd9dff2db2bca839289fc42fafbb6697185056 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/headers-normalize-response-expected.txt >@@ -0,0 +1,19 @@ >+Whitespace and null in response header values >+ >+ >+PASS Header value: hello_world\0 >+PASS Header value: \0hello_world >+PASS Header value: hello\0world >+PASS Header value: __hello_world >+PASS Header value: hello_world__ >+PASS Header value: __hello_world__ >+PASS Header value: [tab]hello_world >+PASS Header value: hello_world[tab] >+PASS Header value: [tab]hello_world[tab] >+PASS Header value: hello______world >+PASS Header value: hello[tab]world >+PASS Header value: \0 >+PASS Header value: ___ >+PASS Header value: [tab] >+PASS Header value: >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/headers-normalize-response.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/headers-normalize-response.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..466b0d977cc6cdba12190a27dfe42e6452ea98d8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/headers-normalize-response.htm >@@ -0,0 +1,42 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>Whitespace and null in header values</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script src=support.js?pipe=sub></script> >+ >+<h1>Whitespace and null in response header values</h1> >+ >+<div id=log></div> >+ >+<script> >+ >+function matchHeaderValue(val) { >+ test(function () { >+ var client = new XMLHttpRequest(); >+ var trimmed = val.trim(); >+ client.open("GET", "resources/parse-headers.py?my-custom-header="+encodeURIComponent(val), false); >+ client.send(); >+ var r = client.getResponseHeader("My-Custom-Header"); >+ >+ assert_equals(r, trimmed); >+ }, "Header value: " + val.replace(/\t/g, "[tab]").replace(/ /g, "_").replace("\0", "\\0")); >+} >+ >+matchHeaderValue("hello world\0"); >+matchHeaderValue("\0hello world"); >+matchHeaderValue("hello\0world"); >+matchHeaderValue(" hello world"); >+matchHeaderValue("hello world "); >+matchHeaderValue(" hello world "); >+matchHeaderValue("\thello world"); >+matchHeaderValue("hello world\t"); >+matchHeaderValue("\thello world\t"); >+matchHeaderValue("hello world"); >+matchHeaderValue("hello\tworld"); >+matchHeaderValue("\0"); >+matchHeaderValue(" "); >+matchHeaderValue("\t"); >+matchHeaderValue(""); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/historical-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/historical-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..426d650a5f489d442efc0d02030f062cf0f2aae6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/historical-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS Support for responseType = moz-blob >+PASS Support for responseType = moz-chunked-text >+PASS Support for responseType = moz-chunked-arraybuffer >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/historical.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/historical.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4af3da9f54ce50752568bb0fb340961b771ce1f8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/historical.html >@@ -0,0 +1,15 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Historical features</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+["moz-blob", "moz-chunked-text", "moz-chunked-arraybuffer"].forEach(function(rt) { >+ test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.responseType = rt; >+ assert_equals(xhr.responseType, ""); >+ }, "Support for responseType = " + rt); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6ba2927cb7be7433f623b4e18a6a597c6fd1c619 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any-expected.txt >@@ -0,0 +1,4 @@ >+CONSOLE MESSAGE: line 5: ReferenceError: Can't find variable: idl_test >+ >+FAIL Untitled ReferenceError: Can't find variable: idl_test >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..f36f0ce02967ec873bc8231669da22177fa39f75 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.js >@@ -0,0 +1,20 @@ >+// META: global=sharedworker >+// META: script=/resources/WebIDLParser.js >+// META: script=/resources/idlharness.js >+ >+idl_test( >+ ['xhr'], >+ ['dom', 'html'], >+ idl_array => { >+ idl_array.add_objects({ >+ XMLHttpRequest: ['new XMLHttpRequest()'], >+ XMLHttpRequestUpload: ['(new XMLHttpRequest()).upload'], >+ FormData: ['new FormData()'], >+ ProgressEvent: ['new ProgressEvent("type")'], >+ }); >+ if (self.Window) { >+ self.form = document.createElement('form'); >+ idl_array.add_objects({ FormData: ['new FormData(form)'] }); >+ } >+ } >+); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e0e16cc7057ad305bfc41391487da6f6474e65e4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.worker-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: line 1774: TypeError: null is not an object (evaluating 'this.message_target.removeEventListener') >+CONSOLE MESSAGE: line 5: ReferenceError: Can't find variable: idl_test >+ >+FAIL Untitled ReferenceError: Can't find variable: idl_test >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/interfaces-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/interfaces-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ce1d969b95d44c4ed5e8aebce3432d1d59dc8970 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/interfaces-expected.txt >@@ -0,0 +1,208 @@ >+CONSOLE MESSAGE: line 331: callback not yet supported >+CONSOLE MESSAGE: line 331: callback not yet supported >+XMLHttpRequest IDL tests >+ >+ >+PASS Test driver >+PASS XMLHttpRequestEventTarget interface: existence and properties of interface object >+PASS XMLHttpRequestEventTarget interface object length >+PASS XMLHttpRequestEventTarget interface object name >+PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object >+PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object's "constructor" property >+PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object's @@unscopables property >+PASS XMLHttpRequestEventTarget interface: attribute onloadstart >+PASS Unscopable handled correctly for onloadstart property on XMLHttpRequestEventTarget >+PASS XMLHttpRequestEventTarget interface: attribute onprogress >+PASS Unscopable handled correctly for onprogress property on XMLHttpRequestEventTarget >+PASS XMLHttpRequestEventTarget interface: attribute onabort >+PASS Unscopable handled correctly for onabort property on XMLHttpRequestEventTarget >+PASS XMLHttpRequestEventTarget interface: attribute onerror >+PASS Unscopable handled correctly for onerror property on XMLHttpRequestEventTarget >+PASS XMLHttpRequestEventTarget interface: attribute onload >+PASS Unscopable handled correctly for onload property on XMLHttpRequestEventTarget >+PASS XMLHttpRequestEventTarget interface: attribute ontimeout >+PASS Unscopable handled correctly for ontimeout property on XMLHttpRequestEventTarget >+PASS XMLHttpRequestEventTarget interface: attribute onloadend >+PASS Unscopable handled correctly for onloadend property on XMLHttpRequestEventTarget >+PASS XMLHttpRequestUpload interface: existence and properties of interface object >+PASS XMLHttpRequestUpload interface object length >+PASS XMLHttpRequestUpload interface object name >+PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object >+PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object's "constructor" property >+PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object's @@unscopables property >+PASS XMLHttpRequestUpload must be primary interface of (new XMLHttpRequest()).upload >+PASS Stringification of (new XMLHttpRequest()).upload >+PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onloadstart" with the proper type >+PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onprogress" with the proper type >+PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onabort" with the proper type >+PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onerror" with the proper type >+PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onload" with the proper type >+PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "ontimeout" with the proper type >+PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onloadend" with the proper type >+PASS XMLHttpRequest interface: existence and properties of interface object >+PASS XMLHttpRequest interface object length >+PASS XMLHttpRequest interface object name >+PASS XMLHttpRequest interface: existence and properties of interface prototype object >+PASS XMLHttpRequest interface: existence and properties of interface prototype object's "constructor" property >+PASS XMLHttpRequest interface: existence and properties of interface prototype object's @@unscopables property >+PASS XMLHttpRequest interface: attribute onreadystatechange >+PASS Unscopable handled correctly for onreadystatechange property on XMLHttpRequest >+PASS XMLHttpRequest interface: constant UNSENT on interface object >+PASS XMLHttpRequest interface: constant UNSENT on interface prototype object >+PASS XMLHttpRequest interface: constant OPENED on interface object >+PASS XMLHttpRequest interface: constant OPENED on interface prototype object >+PASS XMLHttpRequest interface: constant HEADERS_RECEIVED on interface object >+PASS XMLHttpRequest interface: constant HEADERS_RECEIVED on interface prototype object >+PASS XMLHttpRequest interface: constant LOADING on interface object >+PASS XMLHttpRequest interface: constant LOADING on interface prototype object >+PASS XMLHttpRequest interface: constant DONE on interface object >+PASS XMLHttpRequest interface: constant DONE on interface prototype object >+PASS XMLHttpRequest interface: attribute readyState >+PASS Unscopable handled correctly for readyState property on XMLHttpRequest >+PASS XMLHttpRequest interface: operation open(ByteString, USVString) >+PASS Unscopable handled correctly for open(ByteString, USVString) on XMLHttpRequest >+PASS XMLHttpRequest interface: operation open(ByteString, USVString, boolean, USVString, USVString) >+PASS Unscopable handled correctly for open(ByteString, USVString, boolean, USVString, USVString) on XMLHttpRequest >+PASS XMLHttpRequest interface: operation setRequestHeader(ByteString, ByteString) >+PASS Unscopable handled correctly for setRequestHeader(ByteString, ByteString) on XMLHttpRequest >+PASS XMLHttpRequest interface: attribute timeout >+PASS Unscopable handled correctly for timeout property on XMLHttpRequest >+PASS XMLHttpRequest interface: attribute withCredentials >+PASS Unscopable handled correctly for withCredentials property on XMLHttpRequest >+PASS XMLHttpRequest interface: attribute upload >+PASS Unscopable handled correctly for upload property on XMLHttpRequest >+PASS XMLHttpRequest interface: operation send([object Object],[object Object]) >+PASS Unscopable handled correctly for send([object Object],[object Object]) on XMLHttpRequest >+PASS XMLHttpRequest interface: operation abort() >+PASS Unscopable handled correctly for abort() on XMLHttpRequest >+PASS XMLHttpRequest interface: attribute responseURL >+PASS Unscopable handled correctly for responseURL property on XMLHttpRequest >+PASS XMLHttpRequest interface: attribute status >+PASS Unscopable handled correctly for status property on XMLHttpRequest >+PASS XMLHttpRequest interface: attribute statusText >+PASS Unscopable handled correctly for statusText property on XMLHttpRequest >+PASS XMLHttpRequest interface: operation getResponseHeader(ByteString) >+PASS Unscopable handled correctly for getResponseHeader(ByteString) on XMLHttpRequest >+PASS XMLHttpRequest interface: operation getAllResponseHeaders() >+PASS Unscopable handled correctly for getAllResponseHeaders() on XMLHttpRequest >+PASS XMLHttpRequest interface: operation overrideMimeType(DOMString) >+PASS Unscopable handled correctly for overrideMimeType(DOMString) on XMLHttpRequest >+PASS XMLHttpRequest interface: attribute responseType >+PASS Unscopable handled correctly for responseType property on XMLHttpRequest >+PASS XMLHttpRequest interface: attribute response >+PASS Unscopable handled correctly for response property on XMLHttpRequest >+PASS XMLHttpRequest interface: attribute responseText >+PASS Unscopable handled correctly for responseText property on XMLHttpRequest >+PASS XMLHttpRequest interface: attribute responseXML >+PASS Unscopable handled correctly for responseXML property on XMLHttpRequest >+PASS XMLHttpRequest must be primary interface of new XMLHttpRequest() >+PASS Stringification of new XMLHttpRequest() >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "onreadystatechange" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "UNSENT" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "OPENED" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "HEADERS_RECEIVED" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "LOADING" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "DONE" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "readyState" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "open(ByteString, USVString)" with the proper type >+PASS XMLHttpRequest interface: calling open(ByteString, USVString) on new XMLHttpRequest() with too few arguments must throw TypeError >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "open(ByteString, USVString, boolean, USVString, USVString)" with the proper type >+PASS XMLHttpRequest interface: calling open(ByteString, USVString, boolean, USVString, USVString) on new XMLHttpRequest() with too few arguments must throw TypeError >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "setRequestHeader(ByteString, ByteString)" with the proper type >+PASS XMLHttpRequest interface: calling setRequestHeader(ByteString, ByteString) on new XMLHttpRequest() with too few arguments must throw TypeError >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "timeout" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "withCredentials" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "upload" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "send([object Object],[object Object])" with the proper type >+PASS XMLHttpRequest interface: calling send([object Object],[object Object]) on new XMLHttpRequest() with too few arguments must throw TypeError >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "abort()" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseURL" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "status" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "statusText" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "getResponseHeader(ByteString)" with the proper type >+PASS XMLHttpRequest interface: calling getResponseHeader(ByteString) on new XMLHttpRequest() with too few arguments must throw TypeError >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "getAllResponseHeaders()" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "overrideMimeType(DOMString)" with the proper type >+PASS XMLHttpRequest interface: calling overrideMimeType(DOMString) on new XMLHttpRequest() with too few arguments must throw TypeError >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseType" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "response" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseText" with the proper type >+PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseXML" with the proper type >+PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onloadstart" with the proper type >+PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onprogress" with the proper type >+PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onabort" with the proper type >+PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onerror" with the proper type >+PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onload" with the proper type >+PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "ontimeout" with the proper type >+PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onloadend" with the proper type >+PASS FormData interface: existence and properties of interface object >+PASS FormData interface object length >+PASS FormData interface object name >+PASS FormData interface: existence and properties of interface prototype object >+PASS FormData interface: existence and properties of interface prototype object's "constructor" property >+PASS FormData interface: existence and properties of interface prototype object's @@unscopables property >+PASS FormData interface: operation append(USVString, Blob, USVString) >+PASS Unscopable handled correctly for append(USVString, Blob, USVString) on FormData >+PASS FormData interface: operation append(USVString, USVString) >+PASS Unscopable handled correctly for append(USVString, USVString) on FormData >+PASS FormData interface: operation delete(USVString) >+PASS Unscopable handled correctly for delete(USVString) on FormData >+PASS FormData interface: operation get(USVString) >+PASS Unscopable handled correctly for get(USVString) on FormData >+PASS FormData interface: operation getAll(USVString) >+PASS Unscopable handled correctly for getAll(USVString) on FormData >+PASS FormData interface: operation has(USVString) >+PASS Unscopable handled correctly for has(USVString) on FormData >+PASS FormData interface: operation set(USVString, Blob, USVString) >+PASS Unscopable handled correctly for set(USVString, Blob, USVString) on FormData >+PASS FormData interface: operation set(USVString, USVString) >+PASS Unscopable handled correctly for set(USVString, USVString) on FormData >+PASS FormData must be primary interface of new FormData() >+PASS Stringification of new FormData() >+PASS FormData interface: new FormData() must inherit property "append(USVString, Blob, USVString)" with the proper type >+PASS FormData interface: calling append(USVString, Blob, USVString) on new FormData() with too few arguments must throw TypeError >+PASS FormData interface: new FormData() must inherit property "append(USVString, USVString)" with the proper type >+PASS FormData interface: calling append(USVString, USVString) on new FormData() with too few arguments must throw TypeError >+PASS FormData interface: new FormData() must inherit property "delete(USVString)" with the proper type >+PASS FormData interface: calling delete(USVString) on new FormData() with too few arguments must throw TypeError >+PASS FormData interface: new FormData() must inherit property "get(USVString)" with the proper type >+PASS FormData interface: calling get(USVString) on new FormData() with too few arguments must throw TypeError >+PASS FormData interface: new FormData() must inherit property "getAll(USVString)" with the proper type >+PASS FormData interface: calling getAll(USVString) on new FormData() with too few arguments must throw TypeError >+PASS FormData interface: new FormData() must inherit property "has(USVString)" with the proper type >+PASS FormData interface: calling has(USVString) on new FormData() with too few arguments must throw TypeError >+PASS FormData interface: new FormData() must inherit property "set(USVString, Blob, USVString)" with the proper type >+PASS FormData interface: calling set(USVString, Blob, USVString) on new FormData() with too few arguments must throw TypeError >+PASS FormData interface: new FormData() must inherit property "set(USVString, USVString)" with the proper type >+PASS FormData interface: calling set(USVString, USVString) on new FormData() with too few arguments must throw TypeError >+PASS FormData must be primary interface of new FormData(form) >+PASS Stringification of new FormData(form) >+PASS FormData interface: new FormData(form) must inherit property "append(USVString, Blob, USVString)" with the proper type >+PASS FormData interface: calling append(USVString, Blob, USVString) on new FormData(form) with too few arguments must throw TypeError >+PASS FormData interface: new FormData(form) must inherit property "append(USVString, USVString)" with the proper type >+PASS FormData interface: calling append(USVString, USVString) on new FormData(form) with too few arguments must throw TypeError >+PASS FormData interface: new FormData(form) must inherit property "delete(USVString)" with the proper type >+PASS FormData interface: calling delete(USVString) on new FormData(form) with too few arguments must throw TypeError >+PASS FormData interface: new FormData(form) must inherit property "get(USVString)" with the proper type >+PASS FormData interface: calling get(USVString) on new FormData(form) with too few arguments must throw TypeError >+PASS FormData interface: new FormData(form) must inherit property "getAll(USVString)" with the proper type >+PASS FormData interface: calling getAll(USVString) on new FormData(form) with too few arguments must throw TypeError >+PASS FormData interface: new FormData(form) must inherit property "has(USVString)" with the proper type >+PASS FormData interface: calling has(USVString) on new FormData(form) with too few arguments must throw TypeError >+PASS FormData interface: new FormData(form) must inherit property "set(USVString, Blob, USVString)" with the proper type >+PASS FormData interface: calling set(USVString, Blob, USVString) on new FormData(form) with too few arguments must throw TypeError >+PASS FormData interface: new FormData(form) must inherit property "set(USVString, USVString)" with the proper type >+PASS FormData interface: calling set(USVString, USVString) on new FormData(form) with too few arguments must throw TypeError >+PASS ProgressEvent interface: existence and properties of interface object >+PASS ProgressEvent interface object length >+PASS ProgressEvent interface object name >+PASS ProgressEvent interface: existence and properties of interface prototype object >+PASS ProgressEvent interface: existence and properties of interface prototype object's "constructor" property >+PASS ProgressEvent interface: existence and properties of interface prototype object's @@unscopables property >+PASS ProgressEvent interface: attribute lengthComputable >+PASS Unscopable handled correctly for lengthComputable property on ProgressEvent >+PASS ProgressEvent interface: attribute loaded >+PASS Unscopable handled correctly for loaded property on ProgressEvent >+PASS ProgressEvent interface: attribute total >+PASS Unscopable handled correctly for total property on ProgressEvent >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/interfaces.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/interfaces.html >new file mode 100644 >index 0000000000000000000000000000000000000000..56ba5523e318ba6419e3b7fbbf75313561a873f6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/interfaces.html >@@ -0,0 +1,136 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>XMLHttpRequest IDL tests</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script src=/resources/WebIDLParser.js></script> >+<script src=/resources/idlharness.js></script> >+ >+<h1>XMLHttpRequest IDL tests</h1> >+<div id=log></div> >+ >+<script type=text/plain class=untested> >+[TreatNonCallableAsNull] >+callback EventHandlerNonNull = any (Event event); >+typedef EventHandlerNonNull? EventHandler; >+</script> >+<script type=text/plain> >+/*[Exposed=(Window,Worker)]*/ >+interface XMLHttpRequestEventTarget : EventTarget { >+ // event handlers >+ attribute EventHandler onloadstart; >+ attribute EventHandler onprogress; >+ attribute EventHandler onabort; >+ attribute EventHandler onerror; >+ attribute EventHandler onload; >+ attribute EventHandler ontimeout; >+ attribute EventHandler onloadend; >+}; >+ >+/*[Exposed=(Window,Worker)]*/ >+interface XMLHttpRequestUpload : XMLHttpRequestEventTarget { >+}; >+ >+enum XMLHttpRequestResponseType { >+ "", >+ "arraybuffer", >+ "blob", >+ "document", >+ "json", >+ "text" >+}; >+ >+[Constructor/*, >+ Exposed=(Window,Worker)*/] >+interface XMLHttpRequest : XMLHttpRequestEventTarget { >+ // event handler >+ attribute EventHandler onreadystatechange; >+ >+ // states >+ const unsigned short UNSENT = 0; >+ const unsigned short OPENED = 1; >+ const unsigned short HEADERS_RECEIVED = 2; >+ const unsigned short LOADING = 3; >+ const unsigned short DONE = 4; >+ readonly attribute unsigned short readyState; >+ >+ // request >+ void open(ByteString method, USVString url); >+ void open(ByteString method, USVString url, boolean async, optional USVString? username = null, optional USVString? password = null); >+ void setRequestHeader(ByteString name, ByteString value); >+ attribute unsigned long timeout; >+ attribute boolean withCredentials; >+ readonly attribute XMLHttpRequestUpload upload; >+ void send(optional (Document or BodyInit)? body = null); >+ void abort(); >+ >+ // response >+ readonly attribute USVString responseURL; >+ readonly attribute unsigned short status; >+ readonly attribute ByteString statusText; >+ ByteString? getResponseHeader(ByteString name); >+ ByteString getAllResponseHeaders(); >+ void overrideMimeType(DOMString mime); >+ attribute XMLHttpRequestResponseType responseType; >+ readonly attribute any response; >+ readonly attribute USVString responseText; >+ [Exposed=Window] readonly attribute Document? responseXML; >+}; >+ >+typedef (File or USVString) FormDataEntryValue; >+ >+[Constructor(optional HTMLFormElement form)/*, >+ Exposed=(Window,Worker)*/] >+interface FormData { >+ void append(USVString name, Blob value, optional USVString filename); >+ void append(USVString name, USVString value); >+ void delete(USVString name); >+ FormDataEntryValue? get(USVString name); >+ sequence<FormDataEntryValue> getAll(USVString name); >+ boolean has(USVString name); >+ void set(USVString name, Blob value, optional USVString filename); >+ void set(USVString name, USVString value); >+ /*iterable<USVString, FormDataEntryValue>;*/ >+}; >+ >+[Constructor(DOMString type, optional ProgressEventInit eventInitDict)/*, >+ Exposed=(Window,Worker)*/] >+interface ProgressEvent : Event { >+ readonly attribute boolean lengthComputable; >+ readonly attribute unsigned long long loaded; >+ readonly attribute unsigned long long total; >+}; >+ >+dictionary ProgressEventInit : EventInit { >+ boolean lengthComputable = false; >+ unsigned long long loaded = 0; >+ unsigned long long total = 0; >+}; >+</script> >+<script> >+"use strict"; >+var form = document.createElement("form"); >+var idlArray = new IdlArray(); >+ >+function doTest(domIdl) { >+ idlArray.add_untested_idls(domIdl); >+ [].forEach.call(document.querySelectorAll("script[type=text\\/plain]"), function(node) { >+ if (node.className == "untested") { >+ idlArray.add_untested_idls(node.textContent); >+ } else { >+ idlArray.add_idls(node.textContent); >+ } >+ }); >+ idlArray.add_objects({ >+ XMLHttpRequest: ['new XMLHttpRequest()'], >+ XMLHttpRequestUpload: ['(new XMLHttpRequest()).upload'], >+ FormData: ['new FormData()', 'new FormData(form)'] >+ }); >+ idlArray.test(); >+} >+ >+promise_test(function() { >+ return fetch("/interfaces/dom.idl").then(response => response.text()) >+ .then(doTest); >+}, "Test driver"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/loadstart-and-state-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/loadstart-and-state-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7575d231f3ae7a9bf5dc4e3a0a54f9455657376b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/loadstart-and-state-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS open() during loadstart >+PASS abort() during loadstart >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/loadstart-and-state.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/loadstart-and-state.html >new file mode 100644 >index 0000000000000000000000000000000000000000..460b2bfc99085b1d6b900860f3250f0f6ac70262 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/loadstart-and-state.html >@@ -0,0 +1,40 @@ >+<!doctype html> >+<title>XMLHttpRequest: loadstart event corner cases</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<div id=log></div> >+<script> >+async_test(t => { >+ const client = new XMLHttpRequest >+ client.onloadstart = t.step_func(() => { >+ assert_throws("InvalidStateError", () => client.setRequestHeader("General", "Organa")) >+ assert_throws("InvalidStateError", () => client.withCredentials = true) >+ assert_throws("InvalidStateError", () => client.send()) >+ client.onloadstart = null >+ client.open("GET", "data:,BB-8") >+ client.send() >+ }) >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseText, "BB-8") >+ }) >+ client.open("GET", "data:,R2-D2") >+ client.send() >+}, "open() during loadstart") >+ >+async_test(t => { >+ const client = new XMLHttpRequest >+ let abortFired = false >+ client.onloadstart = t.step_func_done(() => { >+ assert_equals(client.readyState, 1) >+ client.abort() >+ assert_true(abortFired) >+ assert_equals(client.readyState, 0) >+ }) >+ client.onabort = t.step_func(() => { >+ abortFired = true >+ assert_equals(client.readyState, 4) >+ }) >+ client.open("GET", "data:,K-2SO") >+ client.send() >+}, "abort() during loadstart") >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/no-utf16-json-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/no-utf16-json-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..bc0274d913a3e422b100b6cb40fd1cfa883d224e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/no-utf16-json-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL JSON asa UTF-16 with BOM should decode as UTF-8 (and, therefore, fail) assert_equals: expected null but got object "[object Object]" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/no-utf16-json.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/no-utf16-json.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..03bbc10804785a1f2219539fcdbe4a024ab395e7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/no-utf16-json.htm >@@ -0,0 +1,19 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>XMLHttpRequest: responseType "json" should be decoded as UTF-8 even when there's a UTF-16 BOM</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://infra.spec.whatwg.org/#parse-json-from-bytes" data-tested-assertations="following::ol/li[1]" /> >+<div id="log"></div> >+ >+<script> >+ async_test(function() { >+ var client = new XMLHttpRequest(); >+ client.responseType = 'json'; >+ client.onload = this.step_func_done(function(e) { >+ assert_equals(client.response, null); >+ }); >+ client.open("GET", "resources/utf16-bom.json"); >+ client.send(null); >+ }, 'JSON asa UTF-16 with BOM should decode as UTF-8 (and, therefore, fail)'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-abort-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d9897098c7ac58a0cb06e13d2bdf40d78a133189 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-abort-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() after abort() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-abort.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c9c6304422805fc3a137d0a05701af46e6884b5e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-abort.htm >@@ -0,0 +1,35 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() after abort()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[15] following::ol/li[15]/ol/li[1] following::ol/li[15]/ol/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ result = [], >+ expected = [1, 4, 1] // open() -> 1, >+ // abort() -> 4, open() -> 1 >+ client.onreadystatechange = function() { >+ test.step(function() { >+ result.push(client.readyState) >+ }) >+ } >+ client.open("GET", "resources/well-formed.xml") >+ assert_equals(client.readyState, 1) >+ client.send(null) >+ client.abort() >+ assert_equals(client.readyState, 0) >+ client.open("GET", "resources/well-formed.xml") >+ assert_equals(client.readyState, 1) >+ assert_array_equals(result, expected) >+ }) >+ test.done() >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-setrequestheader-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-setrequestheader-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c0f06f74349bf36e3eec962c29c0680cfd2c334c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-setrequestheader-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() after setRequestHeader() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-setrequestheader.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-setrequestheader.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ca1ae25946f0ef00074d7884cdbe28bf753bc2a2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-setrequestheader.htm >@@ -0,0 +1,33 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() after setRequestHeader()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method"> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState === 4){ >+ assert_equals(client.responseText, '') >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/inspect-headers.py?filter_name=X-foo") >+ assert_equals(client.readyState, 1) >+ client.setRequestHeader('X-foo', 'bar') >+ client.open("GET", "resources/inspect-headers.py?filter_name=X-foo") >+ assert_equals(client.readyState, 1) >+ client.send() >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-event-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-event-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b977f03b9128f7738bf38dd5156c9b718566f136 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-event-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() during abort event - abort() called from upload.onloadstart >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-event.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-event.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..22c3be9bc44c59fb297581bee3cac390d9a68b3d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-event.htm >@@ -0,0 +1,56 @@ >+<!doctype html> >+<title>XMLHttpRequest: open() during abort event - abort() called from upload.onloadstart</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+async_test(t => { >+ let client = new XMLHttpRequest(), >+ log = [], >+ lastTest = false, >+ expected = [ >+ 'readyState before abort() 1', >+ "upload.onabort - before open() 4", >+ "readyState after open() 1", >+ "client.onabort 1", >+ "client.onloadend 1", >+ "readyState after abort() 1", >+ "client.onload 4", >+ "client.onloadend 4" >+ ] >+ >+ client.upload.onloadstart = t.step_func(() => { >+ log.push('readyState before abort() '+client.readyState) >+ client.abort() >+ log.push('readyState after abort() '+client.readyState) >+ }) >+ >+ client.upload.onabort = t.step_func(() => { >+ log.push('upload.onabort - before open() ' + client.readyState) >+ client.open("GET", "resources/content.py") >+ log.push('readyState after open() ' + client.readyState) >+ client.send(null) >+ }) >+ >+ client.onabort = t.step_func(() => { >+ // happens immediately after all of upload.onabort, so readyState is 1 >+ log.push('client.onabort ' + client.readyState) >+ }) >+ >+ client.onloadend = t.step_func(() => { >+ log.push('client.onloadend ' + client.readyState) >+ if(lastTest) { >+ assert_array_equals(log, expected) >+ t.done() >+ } >+ lastTest = true >+ }) >+ >+ client.onload = t.step_func(() => { >+ log.push('client.onload ' + client.readyState) >+ }) >+ >+ client.open("POST", "resources/content.py") >+ client.send("non-empty") >+}) >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..aff28d253a0c01dacb42bf5ee5cb7928fa440b24 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() during abort() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-processing-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-processing-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9192154ee9caa14344223d7c274bdece62af868f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-processing-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: open() during abort processing - abort() called from onloadstart assert_array_equals: lengths differ, expected 9 got 7 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-processing.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-processing.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..5d80babd9d015bd527a3e8a49b0f4165fd711c81 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-processing.htm >@@ -0,0 +1,64 @@ >+<!doctype html> >+<title>XMLHttpRequest: open() during abort processing - abort() called from onloadstart</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+async_test(t => { >+ let client = new XMLHttpRequest(), >+ test_state = 1, >+ log = [], >+ expected = [ >+ "onloadstart readyState before abort() 1", >+ "onreadystatechange readyState before open() 4", >+ "onreadystatechange readyState after open() 1", >+ "onloadstart readyState 1", >+ "upload.onabort 1", >+ "upload.onloadend 1", >+ "client.onabort 1", >+ "readyState after abort() 1", >+ "client.onload 4" >+ ] >+ >+ client.onreadystatechange = t.step_func(() => { >+ if(test_state === 2){ >+ test_state = 3 >+ log.push('onreadystatechange readyState before open() ' + client.readyState) >+ client.open("GET", "resources/content.py") >+ log.push('onreadystatechange readyState after open() ' + client.readyState) >+ client.send(null) >+ } >+ }) >+ >+ client.onloadstart = t.step_func(() => { >+ if(test_state === 1){ >+ test_state = 2 >+ log.push('onloadstart readyState before abort() ' + client.readyState) >+ client.abort() >+ log.push('readyState after abort() ' + client.readyState) >+ }else{ >+ log.push('onloadstart readyState ' + client.readyState) >+ } >+ }) >+ >+ client.upload.onabort = t.step_func(() => { >+ log.push('upload.onabort ' + client.readyState) >+ }) >+ >+ client.onabort = t.step_func(() => { >+ log.push('client.onabort ' + client.readyState) >+ }) >+ >+ client.upload.onloadend = t.step_func(() => { >+ log.push('upload.onloadend ' + client.readyState) >+ }) >+ >+ client.onload = t.step_func_done(() => { >+ log.push('client.onload ' + client.readyState) >+ assert_array_equals(log, expected) >+ }) >+ >+ client.open("POST", "resources/content.py") >+ client.send('abcd') >+}) >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..d03ca7afa6337c5952dcb4361d6f829cdf56c6a0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort.htm >@@ -0,0 +1,33 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() during abort()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest(), >+ abort_flag = false, >+ result = [], >+ expected = [1, 4, 1] // open() => 1, abort() => 4, open() => 1 >+ >+ client.onreadystatechange = this.step_func(function() { >+ result.push(client.readyState) >+ if (abort_flag) { >+ abort_flag = false >+ client.open("GET", "...") >+ } >+ }) >+ client.open("GET", "resources/well-formed.xml") >+ client.send(null) >+ abort_flag = true >+ client.abort() >+ assert_array_equals(result, expected) >+ assert_equals(client.readyState, 1) // abort() should only set state to UNSENT when DONE >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-bogus-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-bogus-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1d9ac8e591d4ed386929cac03ee860ea0f694d8d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-bogus-expected.txt >@@ -0,0 +1,11 @@ >+ >+PASS XMLHttpRequest: open() - bogus methods () >+PASS XMLHttpRequest: open() - bogus methods (>) >+PASS XMLHttpRequest: open() - bogus methods ( GET) >+PASS XMLHttpRequest: open() - bogus methods (G T) >+PASS XMLHttpRequest: open() - bogus methods (@GET) >+PASS XMLHttpRequest: open() - bogus methods (G:ET) >+PASS XMLHttpRequest: open() - bogus methods (GET?) >+PASS XMLHttpRequest: open() - bogus methods (GET >+) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-bogus.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-bogus.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..263e7b6db7eb1581028bad1c742627d597e90540 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-bogus.htm >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - bogus methods</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function method(method) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ assert_throws("SyntaxError", function() { client.open(method, "...") }) >+ }, document.title + " (" + method + ")") >+ } >+ method("") >+ method(">") >+ method(" GET") >+ method("G T") >+ method("@GET") >+ method("G:ET") >+ method("GET?") >+ method("GET\n") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-insensitive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-insensitive-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..35d901e75a66f36933a33fa273f4bdafc3f43bc0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-insensitive-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS XMLHttpRequest: open() - case-insensitive methods test (DELETE) >+PASS XMLHttpRequest: open() - case-insensitive methods test (GET) >+PASS XMLHttpRequest: open() - case-insensitive methods test (HEAD) >+PASS XMLHttpRequest: open() - case-insensitive methods test (OPTIONS) >+PASS XMLHttpRequest: open() - case-insensitive methods test (POST) >+PASS XMLHttpRequest: open() - case-insensitive methods test (PUT) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-insensitive.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-insensitive.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..103381745a7b84a042bbdcdff4d16c4b2ac6af2c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-insensitive.htm >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - case-insensitive methods test</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[5]" /> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function method(method) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open(method, "resources/content.py", false) >+ client.send(null) >+ assert_equals(client.getResponseHeader("x-request-method"), method.toUpperCase()) >+ }, document.title + " (" + method.toUpperCase() + ")") >+ } >+ method("deLETE") >+ method("get") >+ method("heAd") >+ method("OpTIOns") >+ method("post") >+ method("Put") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-sensitive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-sensitive-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..75afa6db090808f0bddaa0743062ac7cddcfc1b7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-sensitive-expected.txt >@@ -0,0 +1,11 @@ >+ >+PASS XMLHttpRequest: open() - case-sensitive methods test (XUNICORN) >+PASS XMLHttpRequest: open() - case-sensitive methods test (xUNIcorn) >+PASS XMLHttpRequest: open() - case-sensitive methods test (chiCKEN) >+PASS XMLHttpRequest: open() - case-sensitive methods test (PATCH) >+PASS XMLHttpRequest: open() - case-sensitive methods test (patCH) >+PASS XMLHttpRequest: open() - case-sensitive methods test (copy) >+PASS XMLHttpRequest: open() - case-sensitive methods test (COpy) >+PASS XMLHttpRequest: open() - case-sensitive methods test (inDEX) >+PASS XMLHttpRequest: open() - case-sensitive methods test (movE) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-sensitive.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-sensitive.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..270e32d67a369af22f5ee5ebbf1c040e91eb0686 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-sensitive.htm >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - case-sensitive methods test</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[5]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function method(method) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open(method, "resources/content.py", false) >+ client.send(null) >+ assert_equals(client.getResponseHeader("x-request-method"), method) >+ }, document.title + " (" + method + ")") >+ } >+ method("XUNICORN") >+ method("xUNIcorn") >+ method("chiCKEN") >+ method("PATCH") >+ method("patCH") >+ method("copy") >+ method("COpy") >+ method("inDEX") >+ method("movE") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-insecure-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-insecure-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1e89555e15a3e2b59b7a2cc117473367da689da7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-insecure-expected.txt >@@ -0,0 +1,11 @@ >+ >+PASS XMLHttpRequest: open() - "insecure" methods (track) >+PASS XMLHttpRequest: open() - "insecure" methods (TRACK) >+PASS XMLHttpRequest: open() - "insecure" methods (trAck) >+PASS XMLHttpRequest: open() - "insecure" methods (TRACE) >+PASS XMLHttpRequest: open() - "insecure" methods (trace) >+PASS XMLHttpRequest: open() - "insecure" methods (traCE) >+PASS XMLHttpRequest: open() - "insecure" methods (connect) >+PASS XMLHttpRequest: open() - "insecure" methods (CONNECT) >+PASS XMLHttpRequest: open() - "insecure" methods (connECT) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-insecure.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-insecure.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..1a77ff3ec7973005982544d1781470a2cd7d0df1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-insecure.htm >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - "insecure" methods</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[5] following::ol/li[6]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function method(method) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ assert_throws("SecurityError", function() { client.open(method, "...") }) >+ }, document.title + " (" + method + ")") >+ } >+ method("track") >+ method("TRACK") >+ method("trAck") >+ method("TRACE") >+ method("trace") >+ method("traCE") >+ method("connect") >+ method("CONNECT") >+ method("connECT") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-responsetype-set-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-responsetype-set-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c326d18d65c8aff06fb1ffe90427148baefd67f1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-responsetype-set-sync-expected.txt >@@ -0,0 +1,12 @@ >+CONSOLE MESSAGE: line 22: Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set. >+CONSOLE MESSAGE: line 22: Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set. >+CONSOLE MESSAGE: line 22: Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set. >+CONSOLE MESSAGE: line 22: Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set. >+CONSOLE MESSAGE: line 22: Synchronous HTTP(S) requests made from the window context cannot have XMLHttpRequest.responseType set. >+ >+PASS XMLHttpRequest: open() sync request not allowed if responseType is set (arraybuffer) >+PASS XMLHttpRequest: open() sync request not allowed if responseType is set (blob) >+PASS XMLHttpRequest: open() sync request not allowed if responseType is set (json) >+PASS XMLHttpRequest: open() sync request not allowed if responseType is set (text) >+PASS XMLHttpRequest: open() sync request not allowed if responseType is set (document) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-responsetype-set-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-responsetype-set-sync.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..0b4d814041c525285999186a7b3d5074235e1f7b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-responsetype-set-sync.htm >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() sync request not allowed if responseType is set</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[10]" /> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ // Note: the case of calling synchronous open() first, and then setting >+ // responseType, is tested in responsetype.html. >+ function request(type) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = this.step_func(function(){ >+ assert_unreached('No events should fire here') >+ }) >+ client.responseType = type >+ assert_throws("InvalidAccessError", function() { client.open('GET', "...", false) }) >+ }, document.title + " (" + type + ")") >+ } >+ request("arraybuffer") >+ request("blob") >+ request("json") >+ request("text") >+ request("document") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-send-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9fee613b41403d61b0522f10fd9f1c94ad2645cb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-send-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() - open() - send() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-send.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-send.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ebc1801ab53031867a2084ddbca039131988e790 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-send.htm >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - open() - send()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[14]/ul/li[1] following::ol/li[14]/ul/li[2] following::ol/li[15]/ol/li[1] following::ol/li[15]/ol/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ result = [], >+ expected = [1,2,3,4] >+ client.onreadystatechange = function() { >+ test.step(function() { >+ result.push(client.readyState) >+ if(4 == client.readyState) { >+ assert_array_equals(result, expected) >+ assert_equals(client.responseText, 'top\n') >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/folder.txt") >+ client.open("GET", "folder.txt") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-sync-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-sync-send-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..59276eedeb8fd6186cd45e44f089853fc6c55cb0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-sync-send-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() - open() (sync) - send() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-sync-send.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-sync-send.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..b0badfd8aa0776d53c1061f530a2e7a47802a39e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-sync-send.htm >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - open() (sync) - send()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[14]/ul/li[1] following::ol/li[14]/ul/li[2] following::ol/li[14]/ul/li[3] following::ol/li[15]/ol/li[1] following::ol/li[15]/ol/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ result = [], >+ expected = [1,4] >+ client.onreadystatechange = function() { >+ test.step(function() { >+ result.push(client.readyState) >+ }) >+ } >+ client.open("GET", "folder.txt") >+ client.open("GET", "folder.txt", false) >+ client.send(null) >+ assert_equals(client.responseText, 'top\n') >+ assert_array_equals(result, expected) >+ test.done() >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-parameters-toString-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-parameters-toString-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4fe3f85d1c53eb1b5840a61fef7f57ce924cfe69 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-parameters-toString-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() attempts to toString its string parameters >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-parameters-toString.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-parameters-toString.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c059482cbf66cf656839bac4718612c1e634487e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-parameters-toString.htm >@@ -0,0 +1,54 @@ >+<!doctype html> >+<title>XMLHttpRequest: open() attempts to toString its string parameters</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+test(() => { >+ let log = []; >+ let expected = [ >+ 'method', >+ 'url', >+ // NOTE: 'async' intentionally missing >+ 'username', >+ 'password', >+ ]; >+ >+ let xhr = new XMLHttpRequest; >+ xhr.open( >+ { >+ toString() { >+ log.push('method'); >+ return 'get'; >+ }, >+ }, >+ { >+ toString() { >+ log.push('url'); >+ return location.href; >+ }, >+ }, >+ // NOTE: ToBoolean should not invoke valueOf >+ { >+ valueOf() { >+ log.push('async'); >+ return true; >+ }, >+ }, >+ { >+ toString() { >+ log.push('username'); >+ return 'username'; >+ }, >+ }, >+ { >+ toString() { >+ log.push('password'); >+ return 'password'; >+ }, >+ } >+ ); >+ >+ assert_array_equals(log, expected); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-referer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-referer-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e2343440c7bb1b032524348f2b247d0084b5d609 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-referer-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() - value of Referer header >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-referer.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-referer.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..d7ed793ebe22991c1fed2c143f42b2a8ccbcdad2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-referer.htm >@@ -0,0 +1,20 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - value of Referer header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method"> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("POST", "resources/inspect-headers.py?filter_name=referer", false) >+ client.send(null) >+ assert_equals(client.responseText, "Referer: "+location.href+'\n') >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-during-abort-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-during-abort-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..aff28d253a0c01dacb42bf5ee5cb7928fa440b24 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-during-abort-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() during abort() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-during-abort.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-during-abort.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..dc6f86bfc2c72e9ee3f9ac88f8859545b71ee2fe >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-during-abort.htm >@@ -0,0 +1,27 @@ >+<!doctype html> >+<title>XMLHttpRequest: open() during abort()</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+async_test(t => { >+ let result = [], >+ client = new XMLHttpRequest(), >+ expected = [1, 4, 1, 'hello'] >+ client.open("GET", "data:text/plain,") >+ result.push(client.readyState) >+ client.send() >+ client.onreadystatechange = t.step_func(() => { >+ client.onreadystatechange = null >+ result.push(client.readyState) >+ client.open("GET", "data:text/plain,hello") >+ client.onload = t.step_func_done(() => { >+ result.push(client.responseText) >+ assert_array_equals(result, expected) >+ }) >+ client.send() >+ }) >+ client.abort() >+ result.push(client.readyState) // surprise! should not be "unsent" even though we called abort() >+}) >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-open-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-open-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3a0549cd8ab8954e7806aed55df83a66b5cdc808 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-open-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() - send() - open() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-open.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-open.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..d57592c0ba30249f6ccf0db45a48ac2c6f50a334 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-open.htm >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - send() - open()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[14]/ul/li[1] following::ol/li[14]/ul/li[2] following::ol/li[15]/ol/li[1] following::ol/li[15]/ol/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ result = [], >+ expected = [1, 'a', 'b', 'c'] >+ client.onreadystatechange = function() { >+ test.step(function() { >+ result.push(client.readyState) >+ }) >+ } >+ client.open("GET", "folder.txt") >+ result.push('a') >+ client.send() >+ result.push('b') >+ client.open("GET", "folder.txt") >+ result.push('c') >+ assert_array_equals(result, expected) >+ test.done() >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-sync-open-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-sync-open-send-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..895833309d3fcc829adf94183185b24e9026152d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-sync-open-send-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() (sync) - send() - open() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-sync-open-send.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-sync-open-send.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..cc81c52239485837dc8a23f1d685959e5ea9dea5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-sync-open-send.htm >@@ -0,0 +1,41 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() (sync) - send() - open()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[14]/ul/li[1] following::ol[1]/li[14]/ul/li[2] following::ol[1]/li[14]/ul/li[3] following::ol[1]/li[15]/ol/li[1] following::ol[1]/li[15]/ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol[1]/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method" data-tested-assertations="following::ol[1]/li[1]" /> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ result = [], >+ expected = [1] >+ client.onreadystatechange = function() { >+ test.step(function() { >+ result.push(client.readyState) >+ }) >+ } >+ client.open("GET", "folder.txt") >+ client.send(null) >+ client.open("GET", "folder.txt", false) >+ assert_array_equals(result, expected) >+ assert_equals(client.responseXML, null) >+ assert_equals(client.responseText, "") >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.getAllResponseHeaders(), "") >+ test.done() >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-about-blank-window-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-about-blank-window-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a07422437743fb79e480832388c13679f9f972b3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-about-blank-window-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() resolving URLs (about:blank iframe) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-about-blank-window.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-about-blank-window.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..5be3b77ddfebeb7fc76bda250bce159e3a2354a0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-about-blank-window.htm >@@ -0,0 +1,23 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() resolving URLs (about:blank iframe)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[2]/ol/li[2] following::ol/li[7] following::ol/li[14]/ul/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#concept-xmlhttprequest-document" data-tested-assertations=".." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <iframe src="about:blank"></iframe> >+ <script> >+ test(function() { >+ var client = new self[0].XMLHttpRequest() >+ client.open("GET", "folder.txt", false) >+ client.send("") >+ assert_equals(client.responseText, "top\n") >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b27ffd1d6037dc5f9c59b7dbb39f1d5b1ddd17dd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() resolving URLs - <base> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted-after-open-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted-after-open-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ea5fffd61a3e8c7230fc68a6bcc0722af01f1b4b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted-after-open-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() resolving URLs - insert <base> after open() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted-after-open.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted-after-open.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a4d641fafcf42c657b835177d5709138752d237e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted-after-open.htm >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() resolving URLs - insert <base> after open()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[2]/ol/li[2] following::ol/li[7] following::ol/li[14]/ul/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest(), >+ base = document.createElement("base") >+ base.href = location.href.replace(/\/[^/]*$/, '') + "/resources/" >+ client.open("GET", "folder.txt", false) >+ document.getElementsByTagName("head")[0].appendChild(base) >+ client.send(null) >+ assert_equals(client.responseText, "top\n") >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..30d3df21f09384a57eb81b771ede0b3bc251f628 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() resolving URLs - insert <base> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..69ad6193d8e01469afe17a366b0e41fd0b142b8f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted.htm >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() resolving URLs - insert <base></title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[2]/ol/li[2] following::ol/li[7] following::ol/li[14]/ul/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest(), >+ base = document.createElement("base") >+ base.href = location.href.replace(/\/[^/]*$/, '') + "/resources/" >+ document.getElementsByTagName("head")[0].appendChild(base) >+ client.open("GET", "folder.txt", false) >+ client.send(null) >+ assert_equals(client.responseText, "bottom\n") >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..3c0e8c99d51bb268d4eceea4d8136d82a7bc406d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base.htm >@@ -0,0 +1,22 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() resolving URLs - <base></title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <base href="./resources/"> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[2]/ol/li[2] following::ol/li[7] following::ol/li[14]/ul/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "folder.txt", false) >+ client.send(null) >+ assert_equals(client.responseText, "bottom\n") >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-bogus-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-bogus-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..af528617df8ab95bc313847d90d2039c694dedc8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-bogus-expected.txt >@@ -0,0 +1,7 @@ >+ >+FAIL XMLHttpRequest: open() - bogus URLs (//[) assert_throws: function "function () { client.open("GET", url) }" did not throw >+FAIL XMLHttpRequest: open() - bogus URLs (ftp:) assert_throws: function "function () { client.open("GET", url) }" did not throw >+FAIL XMLHttpRequest: open() - bogus URLs (http://a a/) assert_throws: function "function () { client.open("GET", url) }" did not throw >+FAIL XMLHttpRequest: open() - bogus URLs (http:////////////) assert_throws: function "function () { client.open("GET", url) }" did not throw >+FAIL XMLHttpRequest: open() - bogus URLs (http://u:p@/) assert_throws: function "function () { client.open("GET", url) }" did not throw >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-bogus.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-bogus.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..117bd4958a531a0ab52cba2471e5997ae8a71991 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-bogus.htm >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - bogus URLs</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[7] following::ol/li[8]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function url(url) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ assert_throws("SyntaxError", function() { client.open("GET", url) }) >+ }, document.title + " (" + url + ")") >+ } >+ url("//[") >+ url("ftp:") >+ url("http://a a/") >+ url("http:////////////") >+ url("http://u:p@/") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-encoding-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-encoding-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..faee0dc473fa7f0c7f0f821571f96e762dee6944 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-encoding-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS percent encode characters >+FAIL lone surrogate assert_equals: expected "%26%2365533%3B" but got "%26%2355357%3B" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-encoding.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-encoding.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..5155a57d65a4a4b0573ea5e08391be43cda80ea2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-encoding.htm >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset=windows-1252> >+ <title>XMLHttpRequest: open() - URL encoding</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/content.py?\u00DF", false) // This is the German "eszett" character >+ client.send() >+ assert_equals(client.getResponseHeader("x-request-query"), "%DF") >+ }, "percent encode characters"); >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/content.py?\uD83D", false) >+ client.send() >+ assert_equals(client.getResponseHeader("x-request-query"), "%26%2365533%3B"); >+ }, "lone surrogate"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-fragment-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-fragment-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6363c388969c95a78111c39395cf5fe53a2e15ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-fragment-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS XMLHttpRequest: open() resolving URLs - fragment identifier >+PASS make sure fragment is removed from URL before request >+PASS make sure fragment is removed from URL before request (with query string) >+PASS make sure escaped # is not removed >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-fragment.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-fragment.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..03f4016797cdfc9d12ddde869616eed0f38f0f8c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-fragment.htm >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() resolving URLs - fragment identifier</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[7]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "folder.txt#foobar", false) >+ client.send(null) >+ assert_equals(client.responseText, "top\n") >+ }) >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/requri.py#foobar", false) >+ client.send(null) >+ assert_regexp_match(client.responseText, /xhr\/resources\/requri\.py$/) >+ }, 'make sure fragment is removed from URL before request') >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/requri.py?help=#foobar", false) >+ client.send(null) >+ assert_regexp_match(client.responseText, /xhr\/resources\/requri\.py\?help=$/) >+ }, 'make sure fragment is removed from URL before request (with query string)') >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/requri.py?" +encodeURIComponent("#foobar"), false) >+ client.send(null) >+ assert_regexp_match(client.responseText, /xhr\/resources\/requri\.py\?%23foobar$/) >+ }, 'make sure escaped # is not removed') >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window-2-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window-2-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..01a6a4d25eed8d9c0dfd6a9ee828b45c0ba956da >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window-2-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() - resolving URLs (javascript: <iframe>; 2) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window-2.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window-2.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..f5ddd42497658d6569d5fee80d3efb8f53e29f70 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window-2.htm >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - resolving URLs (javascript: <iframe>; 2)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[2] following::ol[1]/li[7] following::ol[1]/li[14]/ul/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var iframe = document.body.appendChild(document.createElement("iframe")) >+ iframe.src = "javascript:parent.test.step(function() { var x = new XMLHttpRequest(); x.open('GET', 'folder.txt', false); x.send(null); parent.assert_equals(x.responseText, 'top\\n'); parent.test.done() })" >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c17f3752f29fa9b12de46142f8b6300bff616b90 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() - resolving URLs (javascript: <iframe>; 1) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..cd208d51ad34b7274b5c2193b708daac18ec534e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window.htm >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - resolving URLs (javascript: <iframe>; 1)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[2] following::ol[1]/li[7] following::ol[1]/li[14]/ul/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ function request() { >+ test.step(function() { >+ var x = new XMLHttpRequest() >+ x.open("GET", "folder.txt", false) >+ x.send(null) >+ assert_equals(x.responseText, "top\n") >+ test.done() >+ }) >+ } >+ test.step(function() { >+ var iframe = document.body.appendChild(document.createElement("iframe")) >+ iframe.src = "javascript:parent.request()" >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-2-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-2-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e5256981afdf891bbcaa460652b573d612e838a3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-2-expected.txt >@@ -0,0 +1,5 @@ >+ >+FAIL XMLHttpRequest: open() resolving URLs (multi-Window; 2; evil) assert_throws: open() when associated document's IFRAME is removed function "function () { >+ client.open("GET", "folder.txt") >+ }" did not throw >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-2.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-2.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ed4ba01576b59b1cf25a580c05b3a6383d5d16c1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-2.htm >@@ -0,0 +1,24 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() resolving URLs (multi-Window; 2; evil)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function init(){ // called from page inside IFRAME >+ test(function() { >+ var client = new self[0].XMLHttpRequest() >+ document.body.removeChild(document.getElementsByTagName("iframe")[0]) >+ assert_throws("InvalidStateError", function() { >+ client.open("GET", "folder.txt") >+ }, "open() when associated document's IFRAME is removed") >+ }) >+ } >+ </script> >+ <iframe src="resources/init.htm"></iframe> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-3-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-3-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..281a295e5c3da638f83d81c5e24daa1b299d3341 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-3-expected.txt >@@ -0,0 +1,5 @@ >+ >+FAIL XMLHttpRequest: open() resolving URLs (multi-Window; 3; evil) assert_throws: send() when associated document's IFRAME is removed function "function () { >+ client.send(null) >+ }" did not throw >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-3.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-3.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..344434b0e7c694ccb52bc9a63ab5e5bef3f21f24 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-3.htm >@@ -0,0 +1,24 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() resolving URLs (multi-Window; 3; evil)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function init() { >+ test(function() { >+ var client = new self[0].XMLHttpRequest() >+ client.open("GET", "folder.txt") >+ document.body.removeChild(document.getElementsByTagName("iframe")[0]) >+ assert_throws("InvalidStateError", function() { >+ client.send(null) >+ }, "send() when associated document's IFRAME is removed") >+ }) >+ } >+ </script> >+ <iframe src="resources/init.htm"></iframe> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-4-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-4-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6ad8b6b4f6ce01c4327f54e55192427d1caab4f3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-4-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() resolving URLs (multi-Window; 4; evil) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-4.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-4.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..3804c9b3871a75622820167b52409ae0f8122114 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-4.htm >@@ -0,0 +1,50 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() resolving URLs (multi-Window; 4; evil)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ /* >+ It's unclear what the pass condition should be for this test. >+ Implementations: >+ Firefox, Opera (Presto): terminate request with no further events when IFRAME is removed. >+ Chrome: completes request to readyState=4 but responseText is "" so it's pretty much terminated with an extra event for "DONE" state >+ Pass condition is now according to my suggested spec text in https://github.com/whatwg/xhr/pull/3 , if that's not accepted we'll have to amend this test >+ */ >+ var test = async_test() >+ function init() { >+ test.step(function() { >+ var hasErrorEvent = false >+ var client = new self[0].XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.responseText, "", "responseText is empty on inactive document error condition") >+ } >+ }) >+ } >+ client.addEventListener('error', function(){ >+ test.step(function() { >+ hasErrorEvent = true >+ assert_equals(client.readyState, 4, "readyState is 4 when error listener fires") >+ }) >+ }) >+ client.addEventListener('loadend', function(){ >+ test.step(function() { >+ assert_true(hasErrorEvent, "should get an error event") >+ test.done() >+ }) >+ }) >+ client.open("GET", "folder.txt") >+ client.send(null) >+ document.body.removeChild(document.getElementsByTagName("iframe")[0]) >+ }) >+ } >+ </script> >+ <iframe src="resources/init.htm"></iframe> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-5-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-5-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6b36111155f282bf669c8bd028ff3132dbe429e6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-5-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: open() resolving URLs (multi-Window; 5) assert_throws: function "function () { client.open("GET", "...") }" did not throw >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-5.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-5.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a27d2b366c0680d2a30cbb107c3496abb0264908 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-5.htm >@@ -0,0 +1,30 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() resolving URLs (multi-Window; 5)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(), >+ client, >+ count = 0 >+ function init() { >+ test.step(function() { >+ if(0 == count) { >+ client = new self[0].XMLHttpRequest() >+ count++ >+ self[0].location.reload() >+ } else if(1 == count) { >+ assert_throws("InvalidStateError", function() { client.open("GET", "...") }) >+ test.done() >+ } >+ }) >+ } >+ </script> >+ <iframe src="resources/init.htm"></iframe> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-6-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-6-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f6a1ba979dabb027184013097c4030b64a0917af >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-6-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: open() in document that is not fully active (but may be active) should throw assert_throws: function "function () { client.open("GET", "...") }" did not throw >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-6.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-6.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..99279639921d9a594c15014f5c429ee6ae7a215d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-6.htm >@@ -0,0 +1,41 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() in document that is not fully active (but may be active) should throw</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method"> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(), >+ client, >+ count = 0, >+ win = window.open("resources/init.htm"); >+ test.add_cleanup(function() { win.close(); }); >+ function init() { >+ test.step(function() { >+ if(0 == count) { >+ var doc = win.document; >+ var ifr = document.createElement("iframe"); >+ ifr.onload = function() { >+ // Again, do things async so we're not doing loads from inside >+ // load events. >+ test.step_timeout(function() { >+ client = new ifr.contentWindow.XMLHttpRequest(); >+ count++; >+ // Important to do a normal navigation, not a reload. >+ win.location.href = "resources/init.htm?avoid-replace"; >+ }, 0); >+ } >+ doc.body.appendChild(ifr); >+ } else if(1 == count) { >+ assert_throws("InvalidStateError", function() { client.open("GET", "...") }) >+ test.done() >+ } >+ }) >+ } >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..031158a1e888577a783b535de3ae31fcf51afb31 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() resolving URLs (multi-Window; 1) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..347f4b7e59ca555f2da23c3fd5affd89061edd98 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window.htm >@@ -0,0 +1,31 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() resolving URLs (multi-Window; 1)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[2] following::ol[1]/li[7] following::ol[1]/li[14]/ul/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ function init() { >+ test.step(function() { >+ var client = new self[0].XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.responseText, "bottom\n") >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "folder.txt") >+ client.send("") >+ }) >+ } >+ </script> >+ <iframe src="resources/init.htm"></iframe> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a74debc6ab6aa87da487b08f60e5c869411a8e3c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt >@@ -0,0 +1,4 @@ >+CONSOLE MESSAGE: line 10: ReferenceError: Can't find variable: SharedWorker >+ >+FAIL XMLHttpRequest: redirected classic shared worker scripts, origin and referrer ReferenceError: Can't find variable: SharedWorker >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..02699919585645c898fdcc8beddc1ba59571c875 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin.htm >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>XMLHttpRequest: redirected classic shared worker scripts, origin and referrer</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+var finalWorkerURL = "workerxhr-origin-referrer.js"; >+var url = "resources/redirect.py?location=" + encodeURIComponent(finalWorkerURL); >+fetch_tests_from_worker(new SharedWorker(url)); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-worker-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-worker-origin-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c5d8fb1fa0de04b0005ecbe19f8288280d66e6a3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-worker-origin-expected.txt >@@ -0,0 +1,6 @@ >+Blocked access to external URL http://www2.localhost:8800/xhr/resources/inspect-headers.py?filter_name=origin&cors >+ >+FAIL Referer header assert_equals: expected "Referer: http://localhost:8800/xhr/resources/workerxhr-origin-referrer.js\n" but got "Referer: http://localhost:8800/xhr/resources/redirect.py?location=workerxhr-origin-referrer.js\n" >+FAIL Origin header assert_equals: expected "Origin: http://localhost:8800\n" but got "" >+PASS Request URL test >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-worker-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-worker-origin.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a0e064840f4ca21ce6490828a8fb91e4d8d777eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-worker-origin.htm >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>XMLHttpRequest: redirected classic dedicated worker scripts, origin and referrer</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+var finalWorkerURL = "workerxhr-origin-referrer.js"; >+var url = "resources/redirect.py?location=" + encodeURIComponent(finalWorkerURL); >+fetch_tests_from_worker(new Worker(url)); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-origin-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0f4b78e40d8457ffca9187fa4b30b4dab01260d9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-origin-expected.txt >@@ -0,0 +1,6 @@ >+Blocked access to external URL http://www2.localhost:8800/xhr/resources/inspect-headers.py?filter_name=origin&cors >+ >+PASS Referer header >+FAIL Origin header assert_equals: expected "Origin: http://localhost:8800\n" but got "" >+PASS Request URL test >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-origin.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..21cf1fcac0f9ba37429ae24dfdd996ab00ad8135 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-origin.htm >@@ -0,0 +1,9 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>XMLHttpRequest: worker scripts, origin and referrer</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+fetch_tests_from_worker(new Worker("resources/workerxhr-origin-referrer.js")); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-simple-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-simple-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..800abfce2d7f4fd977d80ae7e1b1014898a491d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-simple-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: relative URLs in worker scripts resolved by script URL >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-simple.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-simple.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a77ef6feedd5ad21153a17447382de0c48dab4d6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-simple.htm >@@ -0,0 +1,25 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XMLHttpRequest: relative URLs in worker scripts resolved by script URL</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::OL[1]/LI[3] following::OL[1]/LI[3]/ol[1]/li[1]" /> >+</head> >+<body> >+ <div id="log"></div> >+ <script type="text/javascript"> >+ var test = async_test() >+ var worker = new Worker("resources/workerxhr-simple.js") >+ worker.onmessage = function (e) { >+ test.step(function(){ >+ assert_equals(e.data, 'PASSED') >+ test.done() >+ }) >+ } >+ worker.postMessage('start') >+ </script> >+</body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-user-password-non-same-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-user-password-non-same-origin-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..846d73e6cf84a2892f7e59dcfa5c8a3b39e06c24 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-user-password-non-same-origin-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: open() - user/pass argument and non same-origin URL doesn't throw >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/open-user-password-non-same-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-user-password-non-same-origin.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..e49888cd493dec434e0b80239349e2cac50b3a6e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/open-user-password-non-same-origin.htm >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: open() - user/pass argument and non same-origin URL doesn't throw</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[9]/ol/li[1] following::ol/li[9]/ol/li[2] following::ol/li[15]/ol/li[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var m = "GET", >+ u = "http://test2.w3.org/", >+ a = false >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open(m, u, a, "x") >+ assert_equals(client.readyState, 1, "open() was successful - 1") >+ var client2 = new XMLHttpRequest() >+ client2.open(m, u, a, "x", "x") >+ assert_equals(client2.readyState, 1, "open() was successful - 2") >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-blob-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-blob-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4be74486caadb42834dd4a073ad46e2d36cc54c9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-blob-expected.txt >@@ -0,0 +1,5 @@ >+ >+FAIL Use text/xml as fallback MIME type assert_equals: expected "text/xml" but got "" >+PASS Use text/xml as fallback MIME type, 2 >+FAIL Loading data⦠promise_test: Unhandled rejection with value: object "TypeError: undefined is not a function (near '...tests.forEach...')" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-blob.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-blob.html >new file mode 100644 >index 0000000000000000000000000000000000000000..db4b880d1ac883ad5b6d688b59824f8baed4ecf3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-blob.html >@@ -0,0 +1,56 @@ >+<!doctype html> >+<title>XMLHttpRequest: overrideMimeType() and responseType = "blob"</title> >+<meta charset="utf-8"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+async_test(t => { >+ const client = new XMLHttpRequest(); >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.getResponseHeader("Content-Type"), ""); >+ assert_equals(client.response.type, "text/xml"); >+ }); >+ client.open("GET", "resources/status.py"); >+ client.responseType = "blob"; >+ client.send(); >+}, "Use text/xml as fallback MIME type"); >+ >+async_test(t => { >+ const client = new XMLHttpRequest(); >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.getResponseHeader("Content-Type"), ""); >+ assert_equals(client.response.type, "text/xml"); >+ }) >+ client.open("GET", "resources/status.py?content=thisshouldnotmakeadifferencebutdoes"); >+ client.responseType = "blob"; >+ client.send(); >+}, "Use text/xml as fallback MIME type, 2"); >+ >+promise_test(() => { >+ // Don't load generated-mime-types.json as sending them all over the network would be prohibitive >+ return fetch("../mimesniff/mime-types/resources/mime-types.json").then(res => res.json()).then(runTests); >+}, "Loading dataâ¦"); >+ >+function runTests(tests) { >+ let index = 0; >+ tests.forEach((val) => { >+ if(typeof val === "string") { >+ return; >+ } >+ index++; >+ async_test(t => { >+ const client = new XMLHttpRequest(), >+ expectedOutput = val.output !== null ? val.output : "application/octet-stream"; >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.getResponseHeader("Content-Type"), ""); >+ assert_equals(client.response.type, expectedOutput); >+ }); >+ client.open("GET", "resources/status.py"); >+ client.responseType = "blob"; >+ client.overrideMimeType(val.input); >+ client.send(); >+ }, index + ") MIME types need to be parsed and serialized: " + val.input); >+ }); >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..86efa4d35ee1c58116c3c7a63320e20e50f2b018 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: overrideMimeType() in DONE state >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c2c15e0b8a0e54a623bcb4fdca1f4cef72eeb240 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Untitled >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..bdf49e1ca52e76eff6b07c12e10a0320417236a0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.js >@@ -0,0 +1,20 @@ >+// META title= XMLHttpRequest: overrideMimeType() in DONE state</title> >+ >+/** >+ * Spec: <https://xhr.spec.whatwg.org/#the-overridemimetype()-method>; data-tested-assertations="/following::ol/li[1]" >+ */ >+var test = async_test(); >+var client = new XMLHttpRequest(); >+client.onreadystatechange = test.step_func( function() { >+ if (client.readyState !== 4) return; >+ var text = client.responseText; >+ assert_not_equals(text, ""); >+ assert_throws("InvalidStateError", function() { client.overrideMimeType('application/xml;charset=Shift-JIS'); }); >+ if (GLOBAL.isWindow()) { >+ assert_equals(client.responseXML, null); >+ } >+ assert_equals(client.responseText, text); >+ test.done(); >+}); >+client.open("GET", "resources/status.py?type="+encodeURIComponent('text/plain;charset=iso-8859-1')+'&content=%3Cmsg%3E%83%65%83%58%83%67%3C%2Fmsg%3E'); >+client.send(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c2c15e0b8a0e54a623bcb4fdca1f4cef72eeb240 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Untitled >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a1711e6096f3125c3dad1db53f3a62747e79b759 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.htm >@@ -0,0 +1,26 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: overrideMimeType() in DONE state</title> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ var client = new XMLHttpRequest(); >+ client.onreadystatechange = test.step_func( function() { >+ if (client.readyState !== 4) return; >+ assert_throws("InvalidStateError", function() { client.overrideMimeType('application/xml;charset=Shift-JIS'); }); >+ assert_equals(client.responseXML, null); >+ test.done(); >+ }); >+ client.open("GET", "resources/status.py?type="+encodeURIComponent('text/plain;charset=iso-8859-1')+'&content=%3Cmsg%3E%83%65%83%58%83%67%3C%2Fmsg%3E'); >+ client.send(); >+ </script> >+ >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-edge-cases.window-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-edge-cases.window-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ee09a112a6aa76632eb0ee117c058ade1402bf17 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-edge-cases.window-expected.txt >@@ -0,0 +1,5 @@ >+ >+FAIL overrideMimeType() state needs to be reset across requests assert_equals: expected "Ãð" but got "\ufffd\ufffd" >+PASS If charset is not overridden by overrideMimeType() the original continues to be used >+FAIL Charset can be overridden by overrideMimeType() with a bogus charset assert_equals: expected "\ufffd\ufffd" but got "Ãð" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-edge-cases.window.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-edge-cases.window.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-edge-cases.window.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-edge-cases.window.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-edge-cases.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..192a696759c4b82852eee753f417fb8a4cf2718d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-edge-cases.window.js >@@ -0,0 +1,40 @@ >+const testURL = "resources/status.py?type=" + encodeURIComponent("text/plain;charset=windows-1252") + "&content=%C2%F0"; >+ >+async_test(t => { >+ const client = new XMLHttpRequest(); >+ let secondTime = false; >+ client.onload = t.step_func(() => { >+ if(!secondTime) { >+ assert_equals(client.responseText, "\uFFFD\uFFFD"); >+ secondTime = true; >+ client.open("GET", testURL); >+ client.send(); >+ } else { >+ assert_equals(client.responseText, "Ãð"); >+ t.done(); >+ } >+ }); >+ client.open("GET", testURL); >+ client.overrideMimeType("text/plain;charset=UTF-8") >+ client.send(); >+}, "overrideMimeType() state needs to be reset across requests"); >+ >+async_test(t => { >+ const client = new XMLHttpRequest(); >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseText, "Ãð") >+ }); >+ client.open("GET", testURL); >+ client.overrideMimeType("text/xml"); >+ client.send(); >+}, "If charset is not overridden by overrideMimeType() the original continues to be used"); >+ >+async_test(t => { >+ const client = new XMLHttpRequest(); >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseText, "\uFFFD\uFFFD") >+ }); >+ client.open("GET", testURL); >+ client.overrideMimeType("text/plain;charset=342"); >+ client.send(); >+}, "Charset can be overridden by overrideMimeType() with a bogus charset"); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-headers-received-state-force-shiftjis-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-headers-received-state-force-shiftjis-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e22eb3c34730ee7d437d10915470ac22f4bddca7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-headers-received-state-force-shiftjis-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: overrideMimeType() in HEADERS RECEIVED state, enforcing Shift-JIS encoding >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-headers-received-state-force-shiftjis.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-headers-received-state-force-shiftjis.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..578e28cb2277b1c9bd5c7bf3bfd2731944d767bc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-headers-received-state-force-shiftjis.htm >@@ -0,0 +1,34 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: overrideMimeType() in HEADERS RECEIVED state, enforcing Shift-JIS encoding</title> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[1] /following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ var client = new XMLHttpRequest(); >+ var readyState2Reached = false; >+ client.onreadystatechange = test.step_func( function() { >+ if(client.readyState===2){ >+ readyState2Reached = true; >+ try{ >+ client.overrideMimeType('text/plain;charset=Shift-JIS'); >+ }catch(e){ >+ assert_unreached('overrideMimeType should not throw in state 2'); >+ } >+ } >+ if (client.readyState !== 4) return; >+ assert_equals( readyState2Reached, true, "readyState = 2 event fired" ); >+ assert_equals( client.responseText, 'ãã¹ã', 'overrideMimeType() in HEADERS RECEIVED state set encoding' ); >+ test.done(); >+ }); >+ client.open("GET", "resources/status.py?type="+encodeURIComponent('text/html;charset=UTF-8')+'&content=%83%65%83%58%83%67'); >+ client.send( '' ); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-invalid-mime-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-invalid-mime-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b043d7e2e7872fed579f5c108c170712737f5d9d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-invalid-mime-type-expected.txt >@@ -0,0 +1,5 @@ >+ >+FAIL Bogus MIME type does not override encoding assert_equals: expected "text/html;charset=windows-1252" but got "bogus" >+FAIL Bogus MIME type does not override encoding, 2 assert_equals: expected "ÿ" but got "\x1a" >+FAIL Bogus MIME type does override MIME type assert_equals: expected "text/xml" but got "bogus" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-invalid-mime-type.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-invalid-mime-type.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..506aff841942c8a6bd0893cc276b5bacb00458b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-invalid-mime-type.htm >@@ -0,0 +1,41 @@ >+<!doctype html> >+<title>XMLHttpRequest: overrideMimeType() and invalid MIME types</title> >+<meta charset="utf-8"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method"> >+<div id="log"></div> >+<script> >+async_test(t => { >+ const client = new XMLHttpRequest() >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseText, "ÿ") >+ assert_equals(client.getResponseHeader("Content-Type"), "text/html;charset=windows-1252") >+ }) >+ client.open("GET", "resources/status.py?type=" + encodeURIComponent("text/html;charset=windows-1252") + "&content=%FF") >+ client.overrideMimeType("bogus") >+ client.send() >+}, "Bogus MIME type does not override encoding") >+ >+async_test(t => { >+ const client = new XMLHttpRequest() >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseText, "ÿ") >+ assert_equals(client.getResponseHeader("Content-Type"), "text/html;charset=windows-1252") >+ }) >+ client.open("GET", "resources/status.py?type=" + encodeURIComponent("text/html;charset=windows-1252") + "&content=%FF") >+ client.overrideMimeType("bogus;charset=Shift_JIS") >+ client.send() >+}, "Bogus MIME type does not override encoding, 2") >+ >+async_test(t => { >+ const client = new XMLHttpRequest() >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseXML, null) >+ assert_equals(client.getResponseHeader("Content-Type"), "text/xml") >+ }) >+ client.open("GET", "resources/status.py?type=" + encodeURIComponent("text/xml") + "&content=" + encodeURIComponent("<x/>")) >+ client.overrideMimeType("bogus") >+ client.send() >+}, "Bogus MIME type does override MIME type") >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-loading-state-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-loading-state-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5566ae306bf9b2fd1f03bc6a763a09a5d9719220 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-loading-state-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: overrideMimeType() in LOADING state >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-loading-state.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-loading-state.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..cce3fa49ef752c6e66ba10500b35053316de6c13 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-loading-state.htm >@@ -0,0 +1,32 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: overrideMimeType() in LOADING state</title> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.onreadystatechange = test.step_func(function() { >+ if (client.readyState === 3){ >+ assert_throws("InvalidStateError", function(){ >+ client.overrideMimeType('application/xml;charset=Shift-JIS'); >+ }); >+ }else if(client.readyState===4){ >+ assert_equals(client.responseXML, null); >+ test.done(); >+ } >+ }); >+ client.open("GET", "resources/status.py?type="+encodeURIComponent('text/plain;charset=iso-8859-1')+'&content=%3Cmsg%3E%83%65%83%58%83%67%3C%2Fmsg%3E'); >+ client.send(); >+ }); >+ </script> >+ >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-utf-8-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-utf-8-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..845d4ec1bd3f051c22a556c75991f0b21ee032b2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-utf-8-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: overrideMimeType() in open state, enforcing UTF-8 encoding >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-utf-8.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-utf-8.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..5a261005d97bcada797d77c8570a152a9f678eb2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-utf-8.htm >@@ -0,0 +1,27 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: overrideMimeType() in open state, enforcing UTF-8 encoding</title> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[3] /following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.onreadystatechange = function() { >+ if (client.readyState !== 4) return; >+ assert_equals( client.responseText, 'ãã¹ã' ); >+ test.done(); >+ }; >+ client.open("GET", "resources/status.py?type="+encodeURIComponent('text/html;charset=Shift-JIS')+'&content='+encodeURIComponent('ãã¹ã')); >+ client.overrideMimeType('text/plain;charset=UTF-8'); >+ client.send( '' ); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-xml-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-xml-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7d63e6fcc9c50c88afb29418c671b96b82893355 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-xml-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: overrideMimeType() in open state, XML MIME type with UTF-8 charset >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-xml.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-xml.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..00a4c0dd43de1f618208818d56b812b34757fc40 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-xml.htm >@@ -0,0 +1,34 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: overrideMimeType() in open state, XML MIME type with UTF-8 charset</title> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[3] /following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.onreadystatechange = function() { >+ if (client.readyState !== 4) return; >+ try{ >+ var str = client.responseXML.documentElement.tagName+client.responseXML.documentElement.firstChild.tagName+client.responseXML.documentElement.firstChild.textContent; >+ }catch(e){ >+ assert_unreached('Exception when reading responseXML'); >+ } >+ assert_equals( client.responseXML.documentElement.tagName, 'test' ); >+ assert_equals( client.responseXML.documentElement.firstChild.tagName, 'message' ); >+ assert_equals( client.responseXML.documentElement.firstChild.textContent, 'Hello Worldï¼' ); >+ test.done(); >+ }; >+ client.open("GET", "resources/status.py?type="+encodeURIComponent('text/plain;charset=Shift-JIS')+'&content='+encodeURIComponent('<test><message>Hello Worldï¼</message></test>')); >+ client.overrideMimeType('application/xml;charset=UTF-8'); >+ client.send(); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8ff1c8dd4be67ed8fbe4bf44610eda5ad9e80df9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: overrideMimeType() in unsent state, enforcing Shift-JIS encoding >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..98dfe1436d96cdb906aae44ae65f2f60abdb1fcd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.htm >@@ -0,0 +1,27 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: overrideMimeType() in unsent state, enforcing Shift-JIS encoding</title> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-overridemimetype()-method" data-tested-assertations="/following::ol/li[3] /following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest(); >+ client.overrideMimeType('text/plain;charset=Shift-JIS'); >+ client.onreadystatechange = function() { >+ if (client.readyState !== 4) return; >+ assert_equals( client.responseText, 'ãã¹ã' ); >+ test.done(); >+ }; >+ client.open("GET", "resources/status.py?type="+encodeURIComponent('text/html;charset=iso-8859-1')+'&content=%83%65%83%58%83%67'); >+ client.send( '' ); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/preserve-ua-header-on-redirect-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/preserve-ua-header-on-redirect-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4072e4b37782699a3d6a6bd467a4c911aa07eaef >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/preserve-ua-header-on-redirect-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: User-Agent header is preserved on redirect >+FAIL XMLHttpRequest: User-Agent header is preserved on redirect 1 assert_equals: expected "User-Agent: TEST\n" but got "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko)\n" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/preserve-ua-header-on-redirect.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/preserve-ua-header-on-redirect.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..fad883c1ef015b807d0098dee8aa62f5fc49d0c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/preserve-ua-header-on-redirect.htm >@@ -0,0 +1,43 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: User-Agent header is preserved on redirect</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.responseText, 'User-Agent: '+navigator.userAgent+'\n') >+ test.done() >+ } >+ }) >+ } >+ client.open("POST", "resources/redirect.py?location="+encodeURIComponent("inspect-headers.py?filter_name=user-agent")) >+ client.send(null) >+ }) >+ >+ var test2 = async_test() >+ test2.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test2.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.responseText, 'User-Agent: TEST\n') >+ test2.done() >+ } >+ }) >+ } >+ client.open("POST", "resources/redirect.py?location="+encodeURIComponent("inspect-headers.py?filter_name=user-agent")) >+ client.setRequestHeader("User-Agent", "TEST") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/progress-events-response-data-gzip-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/progress-events-response-data-gzip-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ee09cf31ebbef375d9b2c743665646365e7647da >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/progress-events-response-data-gzip-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: progress events and GZIP encoding >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/progress-events-response-data-gzip.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/progress-events-response-data-gzip.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..058064636d43ee08ca2d8cc2c463fcf6481f9d95 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/progress-events-response-data-gzip.htm >@@ -0,0 +1,83 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: progress events and GZIP encoding</title> >+ <meta name="timeout" content="long"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#firing-events-using-the-progressevent-interface-for-http" data-tested-assertations="following::p[contains(text(),'content-encodings')]" /> >+ <!-- TODO: find better spec reference when https://www.w3.org/Bugs/Public/show_bug.cgi?id=25587 is fixed --> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ /* >+ >+ Two behaviours are considered acceptable, so there are two ways to >+ pass this test >+ >+ a) Set data for the compressed resource: >+ * event.total reflects the Content-length of the gzipp'ed resource >+ * event.loaded how many gzipped bytes have arrived over the wire so far >+ * lengthComputable is true >+ >+ or >+ >+ b) If the implementation does not provide progress details for the compressed >+ resource, set >+ * lengthComputable to false >+ * event.total to 0 >+ * event.loaded to the number of bytes available so far after gzip decoding >+ >+ Implications of this are tested here as follows: >+ >+ * If lengthComputable is true: >+ * Event.total must match Content-length header >+ * event.loaded must only ever increase in progress events >+ (and may never repeat its value). >+ * event.loaded must never exceed the Content-length. >+ >+ * If lengthComputable is false: >+ * event.total should be 0 >+ * event.loaded must only ever increase in progress events >+ (and may never repeat its value). >+ * event.loaded should be the length of the decompressed content, i.e. >+ bigger than Content-length header value when finished loading >+ >+ */ >+ var lastTotal; >+ var lastLoaded = -1; >+ client.addEventListener('loadend', test.step_func(function(e){ >+ var len = parseInt(client.getResponseHeader('content-length'), 10) >+ if(e.lengthComputable){ >+ assert_equals(e.total, len, 'event.total is content-length') >+ assert_equals(e.loaded, len, 'event.loaded should be content-length at loadend') >+ }else{ >+ assert_equals(e.total, 0, 'if implementation can\'t compute event.total for gzipped content it is 0') >+ assert_true(e.loaded >= len, 'event.loaded should be set even if total is not computable') >+ } >+ test.done(); >+ }), false) >+ client.addEventListener('progress', test.step_func(function(e){ >+ if(lastTotal === undefined){ >+ lastTotal = e.total; >+ } >+ if(e.lengthComputable && e.total && e.loaded){ >+ assert_equals(e.total, lastTotal, 'event.total should remain invariant') >+ assert_less_than_equal(e.loaded, lastTotal, 'event.loaded should not exceed content-length') >+ }else{ >+ assert_equals(e.total, 0, 'event.total should be 0') >+ } >+ assert_greater_than(e.loaded, lastLoaded, 'event.loaded should only ever increase') >+ lastLoaded = e.loaded; >+ }), false) >+ // image.gif is 165375 bytes compressed. Sending 45000 bytes at a time with 1 second delay will load it in 4 seconds >+ client.open("GET", "resources/image.gif?pipe=gzip|trickle(45000:d1:r2)", true) >+ client.send() >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-constructor-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-constructor-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3b158054a6aff2724e6cc859cacc14cae564a29b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-constructor-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS Default event values. >+PASS There must not be a initProgressEvent(). >+PASS Basic test. >+PASS ECMAScript value conversion test. >+PASS ProgressEventInit members must be matched case-sensitively. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-constructor.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-constructor.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0e771f4459fef7f6fe6cbee0e3d90319cc413e2f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-constructor.html >@@ -0,0 +1,47 @@ >+<!doctype html> >+<title>ProgressEvent constructor</title> >+<link rel="help" href="https://xhr.spec.whatwg.org/#interface-progressevent"> >+<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-constructor"> >+<link rel="help" href="https://dom.spec.whatwg.org/#interface-event"> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<div id=log></div> >+<script> >+test(function() { >+ var ev = new ProgressEvent("test") >+ assert_equals(ev.type, "test") >+ assert_equals(ev.target, null) >+ assert_equals(ev.currentTarget, null) >+ assert_equals(ev.eventPhase, Event.NONE) >+ assert_equals(ev.bubbles, false) >+ assert_equals(ev.cancelable, false) >+ assert_equals(ev.defaultPrevented, false) >+ assert_equals(ev.isTrusted, false) >+ assert_true(ev.timeStamp > 0) >+ assert_true("initEvent" in ev) >+ assert_equals(ev.lengthComputable, false) >+ assert_equals(ev.loaded, 0) >+ assert_equals(ev.total, 0) >+}, "Default event values.") >+test(function() { >+ var ev = new ProgressEvent("test") >+ assert_equals(ev["initProgressEvent"], undefined) >+}, "There must not be a initProgressEvent().") >+test(function() { >+ var ev = new ProgressEvent("I am an event", { type: "trololol", bubbles: true, cancelable: false}) >+ assert_equals(ev.type, "I am an event") >+ assert_equals(ev.bubbles, true) >+ assert_equals(ev.cancelable, false) >+}, "Basic test.") >+test(function() { >+ var ev = new ProgressEvent(null, { lengthComputable: "hah", loaded: "2" }) >+ assert_equals(ev.type, "null") >+ assert_equals(ev.lengthComputable, true) >+ assert_equals(ev.loaded, 2) >+}, "ECMAScript value conversion test.") >+test(function() { >+ var ev = new ProgressEvent("Xx", { lengthcomputable: true}) >+ assert_equals(ev.type, "Xx") >+ assert_equals(ev.lengthComputable, false) >+}, "ProgressEventInit members must be matched case-sensitively.") >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-interface-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-interface-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1f25991a6b9ddc7b055912f8e21f80d367b09b1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-interface-expected.txt >@@ -0,0 +1,9 @@ >+ >+PASS The ProgressEvent interface >+PASS interface prototype object >+PASS The ProgressEvent interface 1 >+PASS The ProgressEvent interface 2 >+PASS The ProgressEvent interface 3 >+PASS Interface objects properties should not be Enumerable >+PASS Should be able to delete ProgressEvent. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-interface.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-interface.html >new file mode 100644 >index 0000000000000000000000000000000000000000..850d1b23dcfa2662b2ffce3c1968d1f92eaaf188 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-interface.html >@@ -0,0 +1,49 @@ >+<!DOCTYPE html> >+<title>The ProgressEvent interface</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+test(function() { >+ assert_equals(typeof ProgressEvent, "function") >+ assert_equals(ProgressEvent.length, 1) >+}) >+test(function() { >+ var desc = Object.getOwnPropertyDescriptor(ProgressEvent, "prototype") >+ assert_equals(desc.value, ProgressEvent.prototype) >+ assert_equals(desc.writable, false) >+ assert_equals(desc.enumerable, false) >+ assert_equals(desc.configurable, false) >+ assert_throws(new TypeError(), function() { >+ "use strict"; >+ delete ProgressEvent.prototype; >+ }) >+ assert_equals(ProgressEvent.prototype.constructor, ProgressEvent) >+ assert_equals(Object.getPrototypeOf(ProgressEvent.prototype), Event.prototype) >+}, "interface prototype object") >+var attributes = [ >+ ["boolean", "lengthComputable"], >+ ["unsigned long long", "loaded"], >+ ["unsigned long long", "total"] >+]; >+attributes.forEach(function(a) { >+ test(function() { >+ var desc = Object.getOwnPropertyDescriptor(ProgressEvent.prototype, a[1]) >+ assert_equals(desc.enumerable, true) >+ assert_equals(desc.configurable, true) >+ assert_throws(new TypeError(), function() { >+ ProgressEvent.prototype[a[1]] >+ }) >+ }) >+}) >+test(function() { >+ for (var p in window) { >+ assert_not_equals(p, "ProgressEvent") >+ } >+}, "Interface objects properties should not be Enumerable") >+test(function() { >+ assert_true(!!window.ProgressEvent, "Interface should exist.") >+ assert_true(delete window.ProgressEvent, "The delete operator should return true.") >+ assert_equals(window.ProgressEvent, undefined, "Interface should be gone.") >+}, "Should be able to delete ProgressEvent.") >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/readme.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/readme.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2e5f64cd5182c3c8988e850b19c94016f6b674d0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/readme.txt >@@ -0,0 +1,31 @@ >+Currently this testsuite tries to provide tests for XMLHttpRequest level 1. >+This test suite is not stable and is still under development. Tests may >+contain bugs and may change over time as a result of those bugs being fixed. >+ >+When more browsers implement XMLHttpRequest level 2 this testsuite will >+slowly evolve most likely. >+ >+ http://dev.w3.org/2006/webapi/XMLHttpRequest/ >+ http://dev.w3.org/2006/webapi/XMLHttpRequest-2/ >+ >+If the folders above give the status of the feature tested you can assume >+this is against level 1 unless explicitly stated otherwise. >+ >+NOTE: readyState and onreadystatechange are tested throughout the various >+tests. statusText is tested together with status. >+ >+NOTE: open-url-base* have absolute paths in them. They need to be adjusted >+on a per location basis. >+ >+NOTE: open-url-base-inserted-after-open.htm, open-url-base-inserted.htm, >+send-authentication.htm and open-url-base.htm refer to localhost. >+ >+ >+TESTS THAT ARE UNSTABLE AND (PROBABLY) NEED CHANGES >+ responsexml-basic (see email WHATWG) >+ send-authentication (see "user:password" debacle) >+ >+ >+TESTS NOT STARTED ON YET >+ >+<iframe> document.domain = w3.org create cross-origin xhr object >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/accept-language.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/accept-language.py >new file mode 100644 >index 0000000000000000000000000000000000000000..dd00f4b2ee73d74cc60de49f8199c4ea69ffe593 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/accept-language.py >@@ -0,0 +1,3 @@ >+def main(request, response): >+ return [("Content-Type", "text/plain"), >+ request.headers.get("Accept-Language", "NO")] >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/accept.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/accept.py >new file mode 100644 >index 0000000000000000000000000000000000000000..a033ebec6467747744a3236ad38886fb9b2dd8e5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/accept.py >@@ -0,0 +1,2 @@ >+def main(request, response): >+ return [("Content-Type", "text/plain")], request.headers.get("accept", "NO") >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-allow-lists.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-allow-lists.py >new file mode 100644 >index 0000000000000000000000000000000000000000..526d365b3111d46ce723e92f737673afaa300977 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-allow-lists.py >@@ -0,0 +1,20 @@ >+import json >+ >+def main(request, response): >+ if "origin" in request.GET: >+ response.headers.set("Access-Control-Allow-Origin", request.GET["origin"]) >+ elif "origins" in request.GET: >+ for origin in request.GET["origins"].split(','): >+ response.headers.set("Access-Control-Allow-Origin", request.GET["origin"]) >+ >+ if "headers" in request.GET: >+ response.headers.set("Access-Control-Allow-Headers", request.GET["headers"]) >+ if "methods" in request.GET: >+ response.headers.set("Access-Control-Allow-Methods", request.GET["methods"]) >+ >+ headers = dict(request.headers) >+ >+ for header in headers: >+ headers[header] = headers[header][0] >+ >+ return json.dumps(headers) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-allow-with-body.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-allow-with-body.py >new file mode 100644 >index 0000000000000000000000000000000000000000..7c7f45c69013b90d8db0fdeebe9e14964c0e24fe >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-allow-with-body.py >@@ -0,0 +1,15 @@ >+def main(request, response): >+ headers = { >+ "Cache-Control": "no-store", >+ "Access-Control-Allow-Headers": "X-Requested-With", >+ "Access-Control-Max-Age": 0, >+ "Access-Control-Allow-Origin": "*", >+ "Access-Control-Allow-Methods": "*", >+ "Vary": "Accept-Encoding", >+ "Content-Type": "text/plain" >+ } >+ >+ for (name, value) in headers.items(): >+ response.headers.set(name, value) >+ >+ response.content = "PASS" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-auth-basic.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-auth-basic.py >new file mode 100644 >index 0000000000000000000000000000000000000000..af32aab97cd5ce664a1f1b6fee1b864afc44e351 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-auth-basic.py >@@ -0,0 +1,17 @@ >+def main(request, response): >+ response.headers.set("Cache-Control", "no-store") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ uid = request.GET.first("uid", None) >+ >+ if request.method == "OPTIONS": >+ response.headers.set("Access-Control-Allow-Methods", "PUT") >+ else: >+ username = request.auth.username >+ password = request.auth.password >+ if (not username) or (username != uid): >+ response.headers.set("WWW-Authenticate", "Basic realm='Test Realm/Cross Origin'") >+ response.status = 401 >+ response.content = "Authentication cancelled" >+ else: >+ response.content = "User: " + username + ", Password: " + password >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow-no-credentials.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow-no-credentials.py >new file mode 100644 >index 0000000000000000000000000000000000000000..12f8660d1fc2636b010a8cd430c028c750f814ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow-no-credentials.py >@@ -0,0 +1,6 @@ >+#!/usr/bin/env python >+def main(request, response): >+ response.headers.set("Content-Type", "text/plain") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ >+ response.content = "PASS: Cross-domain access allowed." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow-star.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow-star.py >new file mode 100644 >index 0000000000000000000000000000000000000000..4557c06b0e3a5544b3f70c0c80df8c009b423188 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow-star.py >@@ -0,0 +1,6 @@ >+#!/usr/bin/env python >+def main(request, response): >+ response.headers.set("Content-Type", "text/plain") >+ response.headers.set("Access-Control-Allow-Origin", "*") >+ >+ response.content = "PASS: Cross-domain access allowed." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow.py >new file mode 100644 >index 0000000000000000000000000000000000000000..2325925157c1e5e26d36d77acfdc5f6155199f53 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow.py >@@ -0,0 +1,7 @@ >+#!/usr/bin/env python >+def main(request, response): >+ response.headers.set("Content-Type", "text/plain") >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ >+ response.content = "PASS: Cross-domain access allowed." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-cors-safelisted-request-headers.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-cors-safelisted-request-headers.py >new file mode 100644 >index 0000000000000000000000000000000000000000..eba0e7d4c5cafc8664c0643b8ad247137374bef2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-cors-safelisted-request-headers.py >@@ -0,0 +1,14 @@ >+def main(request, response): >+ response.headers.set("Cache-Control", "no-store") >+ >+ # This should be a simple request; deny preflight >+ if request.method != "POST": >+ response.status = 400 >+ return >+ >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ >+ for header in ["Accept", "Accept-Language", "Content-Language", "Content-Type"]: >+ value = request.headers.get(header) >+ response.content += header + ": " + (value if value else "<None>") + '\n' >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-denied.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-denied.py >new file mode 100644 >index 0000000000000000000000000000000000000000..9f8687854598c16a2b893cada9991dca2b02313d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-denied.py >@@ -0,0 +1,5 @@ >+def main(request, response): >+ response.headers.set("Cache-Control", "no-store") >+ response.headers.set("Content-Type", "text/plain") >+ >+ response.text = "FAIL: Cross-domain access allowed." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-options-not-supported.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-options-not-supported.py >new file mode 100644 >index 0000000000000000000000000000000000000000..0c69c76293eaeebc1e9c18fed7904c3bdcdc0d8e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-options-not-supported.py >@@ -0,0 +1,9 @@ >+def main(request, response): >+ response.headers.set("Cache-Control", "no-store") >+ >+ # Allow simple requests, but deny preflight >+ if request.method != "OPTIONS": >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ else: >+ response.status = 400 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache-invalidation.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache-invalidation.py >new file mode 100644 >index 0000000000000000000000000000000000000000..6dc8a2a150793b6244fd5fa711bd73c740d59a1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache-invalidation.py >@@ -0,0 +1,47 @@ >+def main(request, response): >+ def fail(message): >+ response.content = "FAIL " + request.method + ": " + str(message) >+ >+ def getState(token): >+ server_state = request.server.stash.take(token) >+ if not server_state: >+ return "Uninitialized" >+ return server_state >+ >+ def setState(state, token): >+ request.server.stash.put(token, state) >+ >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ token = request.GET.first("token", None) >+ state = getState(token) >+ >+ if state == "Uninitialized": >+ if request.method == "OPTIONS": >+ response.headers.set("Access-Control-Allow-Methods", "PUT") >+ response.headers.set("Access-Control-Max-Age", 10) >+ setState("OPTIONSSent", token) >+ else: >+ fail(state) >+ elif state == "OPTIONSSent": >+ if request.method == "PUT": >+ response.content = "PASS: First PUT request." >+ setState("FirstPUTSent", token) >+ else: >+ fail(state) >+ elif state == "FirstPUTSent": >+ if request.method == "OPTIONS": >+ response.headers.set("Access-Control-Allow-Methods", "PUT, XMETHOD") >+ response.headers.set("Access-Control-Allow-Headers", "x-test") >+ setState("SecondOPTIONSSent", token) >+ elif request.method == "PUT": >+ fail("Second PUT request sent without preflight") >+ else: >+ fail(state) >+ elif state == "SecondOPTIONSSent": >+ if request.method == "PUT" or request.method == "XMETHOD": >+ response.content = "PASS: Second OPTIONS request was sent." >+ else: >+ fail(state) >+ else: >+ fail(state) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache-timeout.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache-timeout.py >new file mode 100644 >index 0000000000000000000000000000000000000000..a767d8a4a56d36e289f16981edba38054d90adb1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache-timeout.py >@@ -0,0 +1,48 @@ >+def main(request, response): >+ def fail(message): >+ response.content = "FAIL " + request.method + ": " + str(message) >+ >+ def getState(token): >+ server_state = request.server.stash.take(token) >+ if not server_state: >+ return "Uninitialized" >+ return server_state >+ >+ def setState(state, token): >+ request.server.stash.put(token, state) >+ >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ token = request.GET.first("token", None) >+ state = getState(token) >+ >+ if state == "Uninitialized": >+ if request.method == "OPTIONS": >+ response.headers.set("Access-Control-Allow-Methods", "PUT") >+ response.headers.set("Access-Control-Allow-Headers", "x-test") >+ response.headers.set("Access-Control-Max-Age", 1) >+ setState("OPTIONSSent", token) >+ else: >+ fail(state) >+ elif state == "OPTIONSSent": >+ if request.method == "PUT": >+ response.content = "PASS: First PUT request." >+ setState("FirstPUTSent", token) >+ else: >+ fail(state) >+ elif state == "FirstPUTSent": >+ if request.method == "OPTIONS": >+ response.headers.set("Access-Control-Allow-Methods", "PUT") >+ response.headers.set("Access-Control-Allow-Headers", "x-test") >+ setState("SecondOPTIONSSent", token) >+ elif request.method == "PUT": >+ fail("Second PUT request sent without preflight") >+ else: >+ fail(state) >+ elif state == "SecondOPTIONSSent": >+ if request.method == "PUT": >+ response.content = "PASS: Second OPTIONS request was sent." >+ else: >+ fail(state) >+ else: >+ fail(state) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache.py >new file mode 100644 >index 0000000000000000000000000000000000000000..56892fb6b12c1c9b2f99c57939806f4a84b729d1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache.py >@@ -0,0 +1,47 @@ >+def main(request, response): >+ def fail(message): >+ response.content = "FAIL " + request.method + ": " + str(message) >+ response.status = 400 >+ >+ def getState(token): >+ server_state = request.server.stash.take(token) >+ if not server_state: >+ return "Uninitialized" >+ return server_state >+ >+ def setState(state, token): >+ request.server.stash.put(token, state) >+ >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ token = request.GET.first("token", None) >+ state = getState(token) >+ >+ if state == "Uninitialized": >+ if request.method == "OPTIONS": >+ response.headers.set("Access-Control-Allow-Methods", "PUT") >+ response.headers.set("Access-Control-Max-Age", 10) >+ setState("OPTIONSSent", token) >+ else: >+ fail(state) >+ elif state == "OPTIONSSent": >+ if request.method == "PUT": >+ response.content = "PASS: First PUT request." >+ setState("FirstPUTSent", token) >+ else: >+ fail(state) >+ elif state == "FirstPUTSent": >+ if request.method == "PUT": >+ response.content = "PASS: Second PUT request. Preflight worked." >+ elif request.method == "OPTIONS": >+ response.headers.set("Access-Control-Allow-Methods", "PUT") >+ setState("FAILSecondOPTIONSSent", token) >+ else: >+ fail(state) >+ elif state == "FAILSecondOPTIONSSent": >+ if request.method == "PUT": >+ fail("Second OPTIONS request was sent. Preflight failed.") >+ else: >+ fail(state) >+ else: >+ fail(state) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-put-allow.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-put-allow.py >new file mode 100644 >index 0000000000000000000000000000000000000000..65f6466f5972d28478687939f6eea9cb428d48c4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-put-allow.py >@@ -0,0 +1,20 @@ >+def main(request, response): >+ if request.method == "OPTIONS": >+ response.headers.set("Content-Type", "text/plain") >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ response.headers.set("Access-Control-Allow-Methods", "PUT") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ >+ elif request.method == "PUT": >+ response.headers.set("Content-Type", "text/plain") >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ response.content = "PASS: Cross-domain access allowed." >+ try: >+ response.content += "\n" + request.body >+ except: >+ response.content += "Could not read in content." >+ >+ else: >+ response.headers.set("Content-Type", "text/plain") >+ response.content = "Wrong method: " + request.method >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-whitelist-response-headers.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-whitelist-response-headers.py >new file mode 100644 >index 0000000000000000000000000000000000000000..4dac75331976ed83432859bbeaceb2a5a648d481 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-whitelist-response-headers.py >@@ -0,0 +1,19 @@ >+def main(request, response): >+ headers = { >+ # CORS-safelisted >+ "content-type": "text/plain", >+ "cache-control": "no cache", >+ "content-language": "en", >+ "expires": "Fri, 30 Oct 1998 14:19:41 GMT", >+ "last-modified": "Tue, 15 Nov 1994 12:45:26 GMT", >+ "pragma": "no-cache", >+ >+ # Non-CORS-safelisted >+ "x-test": "foobar", >+ >+ "Access-Control-Allow-Origin": "*" >+ } >+ for header in headers: >+ response.headers.set(header, headers[header]) >+ >+ response.content = "PASS: Cross-domain access allowed." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-cookie.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-cookie.py >new file mode 100644 >index 0000000000000000000000000000000000000000..1e0d41d22eaa88521f1d21c92f658f0e8522b9b1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-cookie.py >@@ -0,0 +1,16 @@ >+import datetime >+ >+def main(request, response): >+ cookie_name = request.GET.first("cookie_name", "") >+ >+ response.headers.set("Cache-Control", "no-store") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ >+ for cookie in request.cookies: >+ # Set cookie to expire yesterday >+ response.set_cookie(cookie, "deleted", expires=-datetime.timedelta(days=1)) >+ >+ if cookie_name: >+ # Set cookie to expire tomorrow >+ response.set_cookie(cookie_name, "COOKIE", expires=datetime.timedelta(days=1)) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-origin-header.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-origin-header.py >new file mode 100644 >index 0000000000000000000000000000000000000000..f5128776d2b60c7d83907253c6305bf47ed2117f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-origin-header.py >@@ -0,0 +1,9 @@ >+#!/usr/bin/env python >+def main(request, response): >+ response.headers.set("Content-Type", "text/plain") >+ response.headers.set("Cache-Control", "no-cache, no-store") >+ response.headers.set("Access-Control-Allow-External", "true") >+ response.headers.set("Access-Control-Allow-Origin", "*") >+ >+ response.content = "PASS: Cross-domain access allowed.\n" >+ response.content += "HTTP_ORIGIN: " + request.headers.get("origin") >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-denied.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-denied.py >new file mode 100644 >index 0000000000000000000000000000000000000000..889ee6b0eca6ca68e7b8345fa2a1031103a8886c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-denied.py >@@ -0,0 +1,49 @@ >+def main(request, response): >+ def fail(message): >+ response.content = "FAIL: " + str(message) >+ response.status = 400 >+ >+ def getState(token): >+ server_state = request.server.stash.take(token) >+ if not server_state: >+ return "Uninitialized" >+ return server_state >+ >+ def setState(token, state): >+ request.server.stash.put(token, state) >+ >+ def resetState(token): >+ setState(token, "") >+ >+ response.headers.set("Cache-Control", "no-store") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ response.headers.set("Access-Control-Max-Age", 1) >+ token = request.GET.first("token", None) >+ state = getState(token) >+ command = request.GET.first("command", None) >+ >+ if command == "reset": >+ if request.method == "GET": >+ resetState(token) >+ response.content = "Server state reset" >+ else: >+ fail("Invalid Method.") >+ elif state == "Uninitialized": >+ if request.method == "OPTIONS": >+ response.content = "This request should not be displayed." >+ setState(token, "Denied") >+ else: >+ fail(state) >+ elif state == "Denied": >+ if request.method == "GET" and command == "complete": >+ resetState(token) >+ response.content = "Request successfully blocked." >+ else: >+ setState("Deny Ignored") >+ fail("The request was not denied.") >+ elif state == "Deny Ignored": >+ resetState(token) >+ fail(state) >+ else: >+ resetState(token) >+ fail("Unknown Error.") >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-header-lowercase.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-header-lowercase.py >new file mode 100644 >index 0000000000000000000000000000000000000000..d35b89b9f98a669a3946661bd82a51992400c287 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-header-lowercase.py >@@ -0,0 +1,16 @@ >+def main(request, response): >+ response.headers.set("Cache-Control", "no-store") >+ response.headers.set("Access-Control-Allow-Origin", "*") >+ response.headers.set("Access-Control-Max-Age", 0) >+ >+ if request.method == "OPTIONS": >+ if "x-test" in [header.strip(" ") for header in >+ request.headers.get("Access-Control-Request-Headers").split(",")]: >+ response.headers.set("Access-Control-Allow-Headers", "X-Test") >+ else: >+ response.status = 400 >+ elif request.method == "GET": >+ if request.headers.get("X-Test"): >+ response.content = "PASS" >+ else: >+ response.status = 400 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-header-sorted.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-header-sorted.py >new file mode 100644 >index 0000000000000000000000000000000000000000..e40da43fe3dcf082c3985a8b71ed09217591df12 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-header-sorted.py >@@ -0,0 +1,18 @@ >+def main(request, response): >+ response.headers.set('Cache-Control', 'no-store') >+ response.headers.set('Access-Control-Allow-Origin', >+ request.headers.get('origin')) >+ >+ headers = 'x-custom-s,x-custom-test,x-custom-u,x-custom-ua,x-custom-v' >+ if request.method == 'OPTIONS': >+ response.headers.set('Access-Control-Max-Age', '0') >+ response.headers.set('Access-Control-Allow-Headers', headers) >+ # Access-Control-Request-Headers should be sorted. >+ if headers != request.headers.get('Access-Control-Request-Headers'): >+ response.status = 400 >+ else: >+ if request.headers.get('x-custom-s'): >+ response.content = 'PASS' >+ else: >+ response.status = 400 >+ response.content = 'FAIL' >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-headers-origin.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-headers-origin.py >new file mode 100644 >index 0000000000000000000000000000000000000000..6fbb96e557b1852ad3740576f9aa5623798cb8f9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-headers-origin.py >@@ -0,0 +1,12 @@ >+def main(request, response): >+ response.headers.set("Cache-Control", "no-store") >+ response.headers.set("Access-Control-Allow-Origin", "*") >+ >+ if request.method == "OPTIONS": >+ if "origin" in request.headers.get("Access-Control-Request-Headers").lower(): >+ response.status = 400 >+ response.content = "Error: 'origin' included in Access-Control-Request-Headers" >+ else: >+ response.headers.set("Access-Control-Allow-Headers", "x-pass") >+ else: >+ response.content = request.headers.get("x-pass") >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-invalid-status.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-invalid-status.py >new file mode 100644 >index 0000000000000000000000000000000000000000..e613229eed7a84ae8a4dd58724f4e2734908b2c6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-invalid-status.py >@@ -0,0 +1,16 @@ >+def main(request, response): >+ try: >+ code = int(request.GET.first("code", None)) >+ except: >+ code = None >+ >+ if request.method == "OPTIONS": >+ if code: >+ response.status = code >+ response.headers.set("Access-Control-Max-Age", 1) >+ response.headers.set("Access-Control-Allow-Headers", "x-pass") >+ else: >+ response.status = 200 >+ >+ response.headers.set("Cache-Control", "no-store") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-must-not-contain-cookie.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-must-not-contain-cookie.py >new file mode 100644 >index 0000000000000000000000000000000000000000..eb49bf562d1809d9dd66f4e23e083098a3e03c79 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-must-not-contain-cookie.py >@@ -0,0 +1,12 @@ >+def main(request, response): >+ if request.method == "OPTIONS" and request.cookies.get("foo"): >+ response.status = 400 >+ else: >+ response.headers.set("Cache-Control", "no-store") >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ response.headers.set("Access-Control-Allow-Credentials", "true") >+ response.headers.set("Access-Control-Allow-Headers", "X-Proprietary-Header") >+ response.headers.set("Connection", "close") >+ >+ if request.cookies.get("foo"): >+ response.content = request.cookies["foo"].value >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-sandboxed-iframe.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-sandboxed-iframe.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7e47275b6ce5204e304b30566667d9751f3dcfb0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-sandboxed-iframe.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<html> >+ <body> >+ <script type="text/javascript"> >+window.addEventListener("message", (evt) => { >+ const url = evt.data; >+ const xhr = new XMLHttpRequest; >+ >+ xhr.open("GET", url, false); >+ >+ try { >+ xhr.send(); >+ } catch(e) { >+ parent.postMessage("Exception thrown. Sandboxed iframe XHR access was denied in 'send'.", "*"); >+ return; >+ } >+ >+ parent.postMessage(xhr.responseText, "*"); >+}, false); >+ >+parent.postMessage("ready", "*"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth1/auth.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth1/auth.py >new file mode 100644 >index 0000000000000000000000000000000000000000..8b6682686c8709994a19ae430ed2120a047f9398 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth1/auth.py >@@ -0,0 +1,10 @@ >+import imp >+import os >+ >+here = os.path.split(os.path.abspath(__file__))[0] >+ >+def main(request, response): >+ auth = imp.load_source("", os.path.join(here, >+ "..", >+ "authentication.py")) >+ return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth1/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth1/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..6c16c4d760a6ebc7901dc735d4e81c4b3288adfb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth1/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth1/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/auth.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/auth.py >new file mode 100644 >index 0000000000000000000000000000000000000000..8b6682686c8709994a19ae430ed2120a047f9398 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/auth.py >@@ -0,0 +1,10 @@ >+import imp >+import os >+ >+here = os.path.split(os.path.abspath(__file__))[0] >+ >+def main(request, response): >+ auth = imp.load_source("", os.path.join(here, >+ "..", >+ "authentication.py")) >+ return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/corsenabled.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/corsenabled.py >new file mode 100644 >index 0000000000000000000000000000000000000000..b06bd3d9aacfbe334620b3e6445e126e89c6396c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/corsenabled.py >@@ -0,0 +1,17 @@ >+import imp >+import os >+ >+here = os.path.dirname(__file__) >+ >+ >+def main(request, response): >+ response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin")) >+ response.headers.set('Access-Control-Allow-Credentials', 'true') >+ response.headers.set('Access-Control-Allow-Methods', 'GET') >+ response.headers.set('Access-Control-Allow-Headers', 'authorization, x-user, x-pass') >+ response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user') >+ auth = imp.load_source("", os.path.abspath(os.path.join(here, os.pardir, "authentication.py"))) >+ if request.method == "OPTIONS": >+ return "" >+ else: >+ return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..a964fe7bf4ab700fd671f9d991b458fab2bd42ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/w3c-import.log >@@ -0,0 +1,18 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/auth.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth2/corsenabled.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth3/auth.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth3/auth.py >new file mode 100644 >index 0000000000000000000000000000000000000000..8b6682686c8709994a19ae430ed2120a047f9398 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth3/auth.py >@@ -0,0 +1,10 @@ >+import imp >+import os >+ >+here = os.path.split(os.path.abspath(__file__))[0] >+ >+def main(request, response): >+ auth = imp.load_source("", os.path.join(here, >+ "..", >+ "authentication.py")) >+ return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth3/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth3/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..471f848224b6393aa573693ed5d064a6be45a07c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth3/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth3/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth4/auth.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth4/auth.py >new file mode 100644 >index 0000000000000000000000000000000000000000..8b6682686c8709994a19ae430ed2120a047f9398 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth4/auth.py >@@ -0,0 +1,10 @@ >+import imp >+import os >+ >+here = os.path.split(os.path.abspath(__file__))[0] >+ >+def main(request, response): >+ auth = imp.load_source("", os.path.join(here, >+ "..", >+ "authentication.py")) >+ return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth4/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth4/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..44290bcf56c6a0325753d4d1b04bbd6f6d465106 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth4/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth4/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth5/auth.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth5/auth.py >new file mode 100644 >index 0000000000000000000000000000000000000000..bc739f5eb597f831cd11a5776e8bcdfd248eec8c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth5/auth.py >@@ -0,0 +1,13 @@ >+def main(request, response): >+ if request.auth.username == 'usr' and request.auth.password == 'secret': >+ response.headers.set('Content-type', 'text/plain') >+ content = "" >+ else: >+ response.status = 401 >+ response.headers.set('Status', '401 Authorization required') >+ response.headers.set('WWW-Authenticate', 'Basic realm="test"') >+ content = 'User name/password wrong or not given: ' >+ >+ content += "%s\n%s" % (request.auth.username, >+ request.auth.password) >+ return content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth5/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth5/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..7d0ea474ae0b0078c4a6689761d6750fcfa19bd6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth5/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth5/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth6/auth.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth6/auth.py >new file mode 100644 >index 0000000000000000000000000000000000000000..bc739f5eb597f831cd11a5776e8bcdfd248eec8c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth6/auth.py >@@ -0,0 +1,13 @@ >+def main(request, response): >+ if request.auth.username == 'usr' and request.auth.password == 'secret': >+ response.headers.set('Content-type', 'text/plain') >+ content = "" >+ else: >+ response.status = 401 >+ response.headers.set('Status', '401 Authorization required') >+ response.headers.set('WWW-Authenticate', 'Basic realm="test"') >+ content = 'User name/password wrong or not given: ' >+ >+ content += "%s\n%s" % (request.auth.username, >+ request.auth.password) >+ return content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth6/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth6/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..3c8f3866374c51772b2d693bdabe64fcff641d36 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth6/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth6/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth7/corsenabled.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth7/corsenabled.py >new file mode 100644 >index 0000000000000000000000000000000000000000..998922d0760e0ff231c1814367291f2e19d01e36 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth7/corsenabled.py >@@ -0,0 +1,18 @@ >+import imp >+import os >+ >+here = os.path.dirname(__file__) >+ >+def main(request, response): >+ response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin")) >+ response.headers.set('Access-Control-Allow-Credentials', 'true') >+ response.headers.set('Access-Control-Allow-Methods', 'GET') >+ response.headers.set('Access-Control-Allow-Headers', 'authorization, x-user, x-pass') >+ response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user') >+ auth = imp.load_source("", os.path.join(here, >+ os.pardir, >+ "authentication.py")) >+ if request.method == "OPTIONS": >+ return "" >+ else: >+ return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth7/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth7/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..4f3943130fc5410957358fe5d28063ec532af7db >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth7/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth7/corsenabled.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth8/corsenabled-no-authorize.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth8/corsenabled-no-authorize.py >new file mode 100644 >index 0000000000000000000000000000000000000000..947422fbfc5b9e024c1782430338e2883877aa3d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth8/corsenabled-no-authorize.py >@@ -0,0 +1,19 @@ >+import imp >+import os >+ >+here = os.path.dirname(__file__) >+ >+ >+def main(request, response): >+ response.headers.set('Access-Control-Allow-Origin', request.headers.get("origin")) >+ response.headers.set('Access-Control-Allow-Credentials', 'true') >+ response.headers.set('Access-Control-Allow-Methods', 'GET') >+ response.headers.set('Access-Control-Allow-Headers', 'x-user, x-pass') >+ response.headers.set('Access-Control-Expose-Headers', 'x-challenge, xhr-user, ses-user') >+ auth = imp.load_source("", os.path.join(here, >+ os.pardir, >+ "authentication.py")) >+ if request.method == "OPTIONS": >+ return "" >+ else: >+ return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth8/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth8/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..cc6cea2dc38d6e2560aca0e618e44dadf205fab0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth8/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth8/corsenabled-no-authorize.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth9/auth.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth9/auth.py >new file mode 100644 >index 0000000000000000000000000000000000000000..8b6682686c8709994a19ae430ed2120a047f9398 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth9/auth.py >@@ -0,0 +1,10 @@ >+import imp >+import os >+ >+here = os.path.split(os.path.abspath(__file__))[0] >+ >+def main(request, response): >+ auth = imp.load_source("", os.path.join(here, >+ "..", >+ "authentication.py")) >+ return auth.main(request, response) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth9/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth9/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..d5126bf1675b1d19ba7628ca9918f90dd573563e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth9/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/auth9/auth.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/authentication.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/authentication.py >new file mode 100644 >index 0000000000000000000000000000000000000000..f5bef5ba8262fbd51c4d907a9805a271cc19baa9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/authentication.py >@@ -0,0 +1,26 @@ >+def main(request, response): >+ session_user = request.auth.username >+ session_pass = request.auth.password >+ expected_user_name = request.headers.get("X-User", None) >+ >+ token = expected_user_name >+ if session_user is None and session_pass is None: >+ if token is not None and request.server.stash.take(token) is not None: >+ return 'FAIL (did not authorize)' >+ else: >+ if token is not None: >+ request.server.stash.put(token, "1") >+ status = (401, 'Unauthorized') >+ headers = [('WWW-Authenticate', 'Basic realm="test"'), >+ ('XHR-USER', expected_user_name), >+ ('SES-USER', session_user)] >+ return status, headers, 'FAIL (should be transparent)' >+ else: >+ if request.server.stash.take(token) == "1": >+ challenge = "DID" >+ else: >+ challenge = "DID-NOT" >+ headers = [('XHR-USER', expected_user_name), >+ ('SES-USER', session_user), >+ ("X-challenge", challenge)] >+ return headers, session_user + "\n" + session_pass >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/base.xml b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/base.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ed01aeceb5a0adb58b15a75eca2c3345348c267a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/base.xml >@@ -0,0 +1 @@ >+<base xmlns="http://www.w3.org/1999/xhtml" href="https://example.com/"/> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/chunked.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/chunked.py >new file mode 100644 >index 0000000000000000000000000000000000000000..1e87c1ca561cf68aa13c7a4efd70cd728c225e57 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/chunked.py >@@ -0,0 +1,17 @@ >+def main(request, response): >+ chunks = ["First chunk\r\n", >+ "Second chunk\r\n", >+ "Yet another (third) chunk\r\n", >+ "Yet another (fourth) chunk\r\n", >+ ] >+ response.headers.set("Transfer-Encoding", "chunked") >+ response.headers.set("Trailer", "X-Test-Me") >+ response.headers.set("Content-Type", "text/plain") >+ response.write_status_headers() >+ >+ for value in chunks: >+ response.writer.write("%x\r\n" % len(value)) >+ response.writer.write(value) >+ response.writer.write("\r\n") >+ response.writer.write("0\r\n") >+ response.writer.write("X-Test-Me: Trailer header value\r\n\r\n") >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/conditional.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/conditional.py >new file mode 100644 >index 0000000000000000000000000000000000000000..5a11a31a4d67f51ce28481f0ac7b366fe9531272 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/conditional.py >@@ -0,0 +1,29 @@ >+def main(request, response): >+ tag = request.GET.first("tag", None) >+ match = request.headers.get("If-None-Match", None) >+ date = request.GET.first("date", "") >+ modified = request.headers.get("If-Modified-Since", None) >+ cors = request.GET.first("cors", None) >+ >+ if request.method == "OPTIONS": >+ response.headers.set("Access-Control-Allow-Origin", "*") >+ response.headers.set("Access-Control-Allow-Headers", "IF-NONE-MATCH") >+ return "" >+ >+ if tag: >+ response.headers.set("ETag", '"%s"' % tag) >+ elif date: >+ response.headers.set("Last-Modified", date) >+ >+ if cors: >+ response.headers.set("Access-Control-Allow-Origin", "*") >+ >+ if ((match is not None and match == tag) or >+ (modified is not None and modified == date)): >+ response.status = (304, "SUPERCOOL") >+ return "" >+ else: >+ if not cors: >+ response.headers.set("Access-Control-Allow-Origin", "*") >+ response.headers.set("Content-Type", "text/plain") >+ return "MAYBE NOT" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/content.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/content.py >new file mode 100644 >index 0000000000000000000000000000000000000000..3786f3aa075fd2e8a869d59b2395ef277a37cd40 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/content.py >@@ -0,0 +1,18 @@ >+def main(request, response): >+ response_ctype = '' >+ >+ if "response_charset_label" in request.GET: >+ response_ctype = ";charset=" + request.GET.first("response_charset_label") >+ >+ headers = [("Content-type", "text/plain" + response_ctype), >+ ("X-Request-Method", request.method), >+ ("X-Request-Query", request.url_parts.query if request.url_parts.query else "NO"), >+ ("X-Request-Content-Length", request.headers.get("Content-Length", "NO")), >+ ("X-Request-Content-Type", request.headers.get("Content-Type", "NO"))] >+ >+ if "content" in request.GET: >+ content = request.GET.first("content") >+ else: >+ content = request.body >+ >+ return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/corsenabled.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/corsenabled.py >new file mode 100644 >index 0000000000000000000000000000000000000000..4a3e1270b65f41acea1c6f2df4d3f1ec9b95eca7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/corsenabled.py >@@ -0,0 +1,23 @@ >+import time >+ >+def main(request, response): >+ headers = [("Access-Control-Allow-Origin", "*"), >+ ("Access-Control-Allow-Credentials", "true"), >+ ("Access-Control-Allow-Methods", "GET, POST, PUT, FOO"), >+ ("Access-Control-Allow-Headers", "x-test, x-foo"), >+ ("Access-Control-Expose-Headers", "x-request-method, x-request-content-type, x-request-query, x-request-content-length, x-request-data")] >+ >+ if "delay" in request.GET: >+ delay = int(request.GET.first("delay")) >+ time.sleep(delay) >+ >+ if "safelist_content_type" in request.GET: >+ headers.append(("Access-Control-Allow-Headers", "content-type")) >+ >+ headers.append(("X-Request-Method", request.method)) >+ headers.append(("X-Request-Query", request.url_parts.query if request.url_parts.query else "NO")) >+ headers.append(("X-Request-Content-Length", request.headers.get("Content-Length", "NO"))) >+ headers.append(("X-Request-Content-Type", request.headers.get("Content-Type", "NO"))) >+ headers.append(("X-Request-Data", request.body)) >+ >+ return headers, "Test" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/delay.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/delay.py >new file mode 100644 >index 0000000000000000000000000000000000000000..8f97db6f4fc990c654e2e26d2e52d7190dd2af7b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/delay.py >@@ -0,0 +1,7 @@ >+import time >+ >+def main(request, response): >+ delay = float(request.GET.first("ms", 500)) >+ time.sleep(delay / 1E3) >+ >+ return [("Access-Control-Allow-Origin", "*"), ("Access-Control-Allow-Methods", "YO"), ("Content-type", "text/plain")], "TEST_DELAY" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/echo-headers.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/echo-headers.py >new file mode 100644 >index 0000000000000000000000000000000000000000..8f23d3db019e7cc311bb58cae7d6704ca9402121 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/echo-headers.py >@@ -0,0 +1,6 @@ >+def main(request, response): >+ response.writer.write_status(200) >+ response.writer.write_header("Content-Type", "text/plain") >+ response.writer.end_headers() >+ response.writer.write(str(request.raw_headers)) >+ response.close_connection = True >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/echo-method.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/echo-method.py >new file mode 100644 >index 0000000000000000000000000000000000000000..5351d1961ac0254106c374e2b2ead84bbc6878d4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/echo-method.py >@@ -0,0 +1,6 @@ >+def main(request, response): >+ response.send_body_for_head_request = True >+ headers = [("Content-type", "text/plain")] >+ content = request.method >+ >+ return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/empty-div-utf8-html.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/empty-div-utf8-html.py >new file mode 100644 >index 0000000000000000000000000000000000000000..26d54b9d1496af5fc72a1ba1d2a2ec83c1822f50 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/empty-div-utf8-html.py >@@ -0,0 +1,5 @@ >+def main(request, response): >+ headers = [("Content-type", "text/html;charset=utf-8")] >+ content = "<!DOCTYPE html><div></div>" >+ >+ return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/folder.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/folder.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..fef12e219683bda829d5b4f972eaed75fc8221da >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/folder.txt >@@ -0,0 +1 @@ >+bottom >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/form.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/form.py >new file mode 100644 >index 0000000000000000000000000000000000000000..6b1c49a993bfa25ba6c39303880e8860fb3e1489 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/form.py >@@ -0,0 +1,2 @@ >+def main(request, response): >+ return "id:%s;value:%s;" % (request.POST.first("id"), request.POST.first("value")) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/gzip.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/gzip.py >new file mode 100644 >index 0000000000000000000000000000000000000000..f17f92e4cc17792d7b558d1cd4e1e1d76350dd27 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/gzip.py >@@ -0,0 +1,23 @@ >+import gzip as gzip_module >+from cStringIO import StringIO >+ >+def main(request, response): >+ if "content" in request.GET: >+ output = request.GET["content"] >+ else: >+ output = request.body >+ >+ out = StringIO() >+ with gzip_module.GzipFile(fileobj=out, mode="w") as f: >+ f.write(output) >+ output = out.getvalue() >+ >+ headers = [("Content-type", "text/plain"), >+ ("Content-Encoding", "gzip"), >+ ("X-Request-Method", request.method), >+ ("X-Request-Query", request.url_parts.query if request.url_parts.query else "NO"), >+ ("X-Request-Content-Length", request.headers.get("Content-Length", "NO")), >+ ("X-Request-Content-Type", request.headers.get("Content-Type", "NO")), >+ ("Content-Length", len(output))] >+ >+ return headers, output >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/header-content-length.asis b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/header-content-length.asis >new file mode 100644 >index 0000000000000000000000000000000000000000..ef7071d7428d9593d69ec10675cff30c46610e09 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/header-content-length.asis >@@ -0,0 +1,2 @@ >+HTTP/1.0 200 NANANA >+CONTENT-LENGTH: 0 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/header-user-agent.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/header-user-agent.py >new file mode 100644 >index 0000000000000000000000000000000000000000..4778de40268bd3ca004195fc52fb69af64926c3e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/header-user-agent.py >@@ -0,0 +1,15 @@ >+def main(request, response): >+ response.headers.set("Access-Control-Allow-Origin", "*") >+ response.headers.set("Access-Control-Max-Age", 0) >+ response.headers.set('Access-Control-Allow-Headers', "x-test") >+ >+ if request.method == "OPTIONS": >+ if not request.headers.get("User-Agent"): >+ response.content = "FAIL: User-Agent header missing in preflight request." >+ response.status = 400 >+ else: >+ if request.headers.get("User-Agent"): >+ response.content = "PASS" >+ else: >+ response.content = "FAIL: User-Agent header missing in request" >+ response.status = 400 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers-basic.asis b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers-basic.asis >new file mode 100644 >index 0000000000000000000000000000000000000000..fe37b1b38e9f8698581affe8d74f176688c11d15 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers-basic.asis >@@ -0,0 +1,4 @@ >+HTTP/1.1 280 HELLO >+foo-test: 1 >+foo-test: 2 >+foo-test: 3 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers.asis b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers.asis >new file mode 100644 >index 0000000000000000000000000000000000000000..d25fe52efeb5427b126c3b375b4bb00090836382 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers.asis >@@ -0,0 +1,5 @@ >+HTTP/1.1 200 YAYAYAYA >+foo-TEST: 1 >+FOO-test: 2 >+ALSO-here: Mr. PB >+ewok: lego >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers.py >new file mode 100644 >index 0000000000000000000000000000000000000000..602db35a3cb1e6294a1c8052d84c90a8642d8fda >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers.py >@@ -0,0 +1,12 @@ >+# -*- coding: utf-8 -*- >+ >+def main(request, response): >+ response.headers.set("Content-Type", "text/plain") >+ response.headers.set("X-Custom-Header", "test") >+ response.headers.set("Set-Cookie", "test") >+ response.headers.set("Set-Cookie2", "test") >+ response.headers.set("X-Custom-Header-Empty", "") >+ response.headers.set("X-Custom-Header-Comma", "1") >+ response.headers.append("X-Custom-Header-Comma", "2") >+ response.headers.set("X-Custom-Header-Bytes", "â¦") >+ return "TEST" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/image.gif b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/image.gif >new file mode 100644 >index 0000000000000000000000000000000000000000..6d1174af119c28d3f3965c426f99239dc09c4a69 >GIT binary patch >literal 167145 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ℜ-GkdhU^zv1B@doGG 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%0D7eo>r%tOZW87( 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 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/img-utf8-html.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/img-utf8-html.py >new file mode 100644 >index 0000000000000000000000000000000000000000..085867f9510e48fc926650b3e6fbbe62547afbc6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/img-utf8-html.py >@@ -0,0 +1,5 @@ >+def main(request, response): >+ headers = [("Content-type", "text/html;charset=utf-8")] >+ content = "<img>foo" >+ >+ return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/img.jpg b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/img.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..7aa9362529c72504cd081a71a41c3765c62328a5 >GIT binary patch >literal 108761 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 >zVU>{kYhbbHyyI_mPn$#%n(aS&zw%0D2yIj+<N~fJGGsFu2#;IrxHSfeltKH{mQ#~y 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 >zSst>OVGtk-hdPd|I49ZdH2J�MKqAXz$5$&n9L+9VxJ!ksfKF%Z=%0WEU?W12W| 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 >XCSsDE!>o$|rN1c#C(vO6i?jdPg(s2J > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/infinite-redirects.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/infinite-redirects.py >new file mode 100644 >index 0000000000000000000000000000000000000000..a85c410218ef3c9ccf7625942f1bc4ac9b57d85c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/infinite-redirects.py >@@ -0,0 +1,22 @@ >+def main(request, response): >+ location = "%s://%s%s" % (request.url_parts.scheme, >+ request.url_parts.netloc, >+ request.url_parts.path) >+ page = "alternate" >+ type = 302 >+ mix = 0 >+ if request.GET.first("page", None) == "alternate": >+ page = "default" >+ >+ if request.GET.first("type", None) == "301": >+ type = 301 >+ >+ if request.GET.first("mix", None) == "1": >+ mix = 1 >+ type = 302 if type == 301 else 301 >+ >+ new_location = "%s?page=%s&type=%s&mix=%s" % (location, page, type, mix) >+ headers = [("Cache-Control", "no-cache"), >+ ("Pragma", "no-cache"), >+ ("Location", new_location)] >+ return 301, headers, "Hello guest. You have been redirected to " + new_location >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/init.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/init.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..6f936c4fb286a1fd50a138d32be420e19652c10f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/init.htm >@@ -0,0 +1,20 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>support init file</title> >+ </head> >+ <body> >+ <script> >+ onload = function() { >+ // Run async, because navigations from inside onload can be a bit weird. >+ setTimeout(function() { >+ if (parent != window) { >+ parent.init() >+ } else { >+ opener.init(); >+ } >+ }, 0); >+ } >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/inspect-headers.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/inspect-headers.py >index a8f1258fa2586a3a3db3c0e3cfe1a55bf9311ebf..12dd33595f07c632cbe58780714e66fac15e4a6c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/inspect-headers.py >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/inspect-headers.py >@@ -15,7 +15,7 @@ def get_response(raw_headers, filter_value, filter_name): > if value == filter_value: > result += name + "," > elif name.lower() == filter_name: >- result += name + ": " + value + "\n"; >+ result += name + ": " + value + "\n" > return result > > def main(request, response): >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/invalid-utf8-html.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/invalid-utf8-html.py >new file mode 100644 >index 0000000000000000000000000000000000000000..72be41a45e86c3e45aabd081d2047f1de9344faf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/invalid-utf8-html.py >@@ -0,0 +1,5 @@ >+def main(request, response): >+ headers = [("Content-type", "text/html;charset=utf-8")] >+ content = chr(0xff) >+ >+ return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/last-modified.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/last-modified.py >new file mode 100644 >index 0000000000000000000000000000000000000000..ef05a6343c16a53eaad0e0e17daf65acdd7f6487 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/last-modified.py >@@ -0,0 +1,7 @@ >+def main(request, response): >+ import datetime, os >+ srcpath = os.path.join(os.path.dirname(__file__), "well-formed.xml") >+ srcmoddt = datetime.datetime.fromtimestamp(os.path.getmtime(srcpath)) >+ response.headers.set("Last-Modified", srcmoddt.strftime("%a, %d %b %Y %H:%M:%S GMT")) >+ response.headers.set("Content-Type", "application/xml") >+ return open(srcpath, "r").read() >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/no-custom-header-on-preflight.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/no-custom-header-on-preflight.py >new file mode 100644 >index 0000000000000000000000000000000000000000..f49f9f311fb72a7565b5bbf4a9049c0ae45458aa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/no-custom-header-on-preflight.py >@@ -0,0 +1,27 @@ >+def main(request, response): >+ def getState(token): >+ server_state = request.server.stash.take(token) >+ if not server_state: >+ return "Uninitialized" >+ return server_state >+ >+ def setState(state, token): >+ request.server.stash.put(token, state) >+ >+ response.headers.set("Access-Control-Allow-Origin", "*") >+ response.headers.set("Access-Control-Allow-Headers", "x-test") >+ response.headers.set("Access-Control-Max-Age", 0) >+ token = request.GET.first("token", None) >+ >+ if request.method == "OPTIONS": >+ if request.headers.get("x-test"): >+ response.content = "FAIL: Invalid header in preflight request." >+ response.status = 400 >+ else: >+ setState("PASS", token) >+ else: >+ if request.headers.get("x-test"): >+ response.content = getState(token) >+ else: >+ response.content = "FAIL: X-Test header missing in request" >+ response.status = 400 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/nocors/folder.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/nocors/folder.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5257b481d173dc5155069aff029c64ae543a7bcf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/nocors/folder.txt >@@ -0,0 +1 @@ >+not CORS-enabled >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/nocors/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/nocors/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..072e9a00d609dc70a0ab0cba6db8da19788d25f7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/nocors/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/nocors/folder.txt >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/parse-headers.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/parse-headers.py >new file mode 100644 >index 0000000000000000000000000000000000000000..fdc626539e842f6660f533a3684da72e719cef09 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/parse-headers.py >@@ -0,0 +1,10 @@ >+import json >+ >+def main(request, response): >+ >+ content = "" >+ if "my-custom-header" in request.GET: >+ val = request.GET.first("my-custom-header") >+ response.headers.set("My-Custom-Header", val) >+ >+ return content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/pass.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/pass.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7ef22e9a431ad0272713b71fdc8794016c8ef12f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/pass.txt >@@ -0,0 +1 @@ >+PASS >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/redirect-cors.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/redirect-cors.py >new file mode 100644 >index 0000000000000000000000000000000000000000..27609b8bdb20828346f978d6d354ca0cf36ad3bc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/redirect-cors.py >@@ -0,0 +1,20 @@ >+def main(request, response): >+ location = request.GET.first("location") >+ >+ if request.method == "OPTIONS": >+ if "redirect_preflight" in request.GET: >+ response.status = 302 >+ response.headers.set("Location", location) >+ else: >+ response.status = 200 >+ response.headers.set("Access-Control-Allow-Methods", "GET") >+ response.headers.set("Access-Control-Max-Age", 1) >+ elif request.method == "GET": >+ response.status = 302 >+ response.headers.set("Location", location) >+ >+ if "allow_origin" in request.GET: >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ >+ if "allow_header" in request.GET: >+ response.headers.set("Access-Control-Allow-Headers", request.GET.first("allow_header")) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/redirect.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/redirect.py >new file mode 100644 >index 0000000000000000000000000000000000000000..2af9f2ee8a94c4aa108416cded7c93b08a7bf8a2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/redirect.py >@@ -0,0 +1,14 @@ >+import time >+ >+def main(request, response): >+ code = int(request.GET.first("code", 302)) >+ location = request.GET.first("location", request.url_parts.path + "?followed") >+ >+ if "delay" in request.GET: >+ delay = float(request.GET.first("delay")) >+ time.sleep(delay / 1E3) >+ >+ if "followed" in request.GET: >+ return [("Content:Type", "text/plain")], "MAGIC HAPPENED" >+ else: >+ return (code, "WEBSRT MARKETING"), [("Location", location)], "TEST" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/requri.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/requri.py >new file mode 100644 >index 0000000000000000000000000000000000000000..a3f7bfda351782e4941f3955c1c7b5f32be07ba4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/requri.py >@@ -0,0 +1,5 @@ >+def main(request, response): >+ if "full" in request.GET: >+ return request.url >+ else: >+ return request.request_path >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/reset-token.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/reset-token.py >new file mode 100644 >index 0000000000000000000000000000000000000000..5c9a577b44ce22cacc6fd9ad41cd441538f0373d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/reset-token.py >@@ -0,0 +1,5 @@ >+def main(request, response): >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) >+ token = request.GET["token"] >+ request.server.stash.put(token, "") >+ response.content = "PASS" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/responseType-document-in-worker.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/responseType-document-in-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..37ba9bd13ee28a020091b8671905185bb124f486 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/responseType-document-in-worker.js >@@ -0,0 +1,9 @@ >+self.importScripts('/resources/testharness.js'); >+ >+test(function() { >+ let xhr = new XMLHttpRequest(); >+ xhr.responseType = "document"; >+ assert_not_equals(xhr.responseType, "document"); >+}, "Setting XMLHttpRequest responseType to 'document' in a worker should have no effect."); >+ >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/responseXML-unavailable-in-worker.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/responseXML-unavailable-in-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..2f3fdf25c3382fd2f34c8235c69f3f0f39f71635 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/responseXML-unavailable-in-worker.js >@@ -0,0 +1,9 @@ >+self.importScripts('/resources/testharness.js'); >+ >+test(function() { >+ let xhr = new XMLHttpRequest(); >+ assert_not_exists(xhr, "responseXML", "responseXML should not be available on instances."); >+ assert_not_exists(XMLHttpRequest.prototype, "responseXML", "responseXML should not be on the prototype."); >+}, "XMLHttpRequest's responseXML property should not be exposed in workers."); >+ >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-1.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-1.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..4e4c3faff9057ec1f42e795ab38da66c30cb6ef5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-1.htm >@@ -0,0 +1,23 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() with document.domain set: loading documents from original origin after setting document.domain</title> >+ <script src="send-after-setting-document-domain-window-helper.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[3]" /> >+ </head> >+ <body> >+ <script> >+ run_test(function() { >+ document.domain = document.domain; // this is not a noop, it does actually change the security context >+ var client = new XMLHttpRequest(); >+ client.open("GET", "status.py?content=hello", false); >+ client.send(null); >+ assert_equals(client.responseText, "hello"); >+ document.domain = document.domain.replace(/^\w+\./, ""); >+ client.open("GET", "status.py?content=hello2", false); >+ client.send(null); >+ assert_equals(client.responseText, "hello2"); >+ }, "loading documents from original origin after setting document.domain"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-2.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-2.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..073268c21c7e84fbcbe539a6a45476dc757d0564 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-2.htm >@@ -0,0 +1,20 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() with document.domain set: loading documents from the origin document.domain was set to should throw</title> >+ <script src="send-after-setting-document-domain-window-helper.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[3]" /> >+ </head> >+ <body> >+ <script> >+ run_test(function() { >+ document.domain = document.domain.replace(/^\w+\./, ""); >+ var client = new XMLHttpRequest(); >+ client.open("GET", location.protocol + "//" + document.domain + location.pathname.replace(/[^\/]*$/, "") + "status.py?content=hello3", false); >+ assert_throws("NetworkError", function() { >+ client.send(null); >+ }); >+ }, "loading documents from the origin document.domain was set to should throw"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-helper.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-helper.js >new file mode 100644 >index 0000000000000000000000000000000000000000..f5c762b042b70a27734157e0ca7d4d868f25147b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-helper.js >@@ -0,0 +1,29 @@ >+function assert_equals(value, expected) { >+ if (value != expected) { >+ throw "Got wrong value.\nExpected '" + expected + "',\ngot '" + value + "'"; >+ } >+} >+ >+function assert_throws(expected_exc, func) { >+ try { >+ func.call(this); >+ } catch(e) { >+ var actual = e.name || e.type; >+ if (actual != expected_exc) { >+ throw "Got wrong exception.\nExpected '" + expected_exc + "',\ngot '" + actual + "'."; >+ } >+ return; >+ } >+ throw "Expected exception, but none was thrown"; >+} >+ >+function run_test(test, name) { >+ var result = {passed: true, message: null, name: name}; >+ try { >+ test(); >+ } catch(e) { >+ result.passed = false; >+ result.message = e + ""; >+ } >+ opener.postMessage(result, "*"); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/shift-jis-html.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/shift-jis-html.py >new file mode 100644 >index 0000000000000000000000000000000000000000..fab78c0b3ac8315c65df3824cfcbefd70f76dcbf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/shift-jis-html.py >@@ -0,0 +1,6 @@ >+def main(request, response): >+ headers = [("Content-type", "text/html;charset=shift-jis")] >+ # Shift-JIS bytes for katakana TE SU TO ('test') >+ content = chr(0x83) + chr(0x65) + chr(0x83) + chr(0x58) + chr(0x83) + chr(0x67) >+ >+ return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/status.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/status.py >new file mode 100644 >index 0000000000000000000000000000000000000000..5d72e10b24bfd5a36d719940388bb55d44433546 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/status.py >@@ -0,0 +1,9 @@ >+def main(request, response): >+ code = int(request.GET.first("code", 200)) >+ text = request.GET.first("text", "OMG") >+ content = request.GET.first("content", "") >+ type = request.GET.first("type", "") >+ status = (code, text) >+ headers = [("Content-Type", type), >+ ("X-Request-Method", request.method)] >+ return status, headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/trickle.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/trickle.py >new file mode 100644 >index 0000000000000000000000000000000000000000..418e2459921743b769fab32041e95b00e7c091bb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/trickle.py >@@ -0,0 +1,15 @@ >+import time >+ >+def main(request, response): >+ chunk = "TEST_TRICKLE\n" >+ delay = float(request.GET.first("ms", 500)) / 1E3 >+ count = int(request.GET.first("count", 50)) >+ if "specifylength" in request.GET: >+ response.headers.set("Content-Length", count * len(chunk)) >+ time.sleep(delay) >+ response.headers.set("Content-type", "text/plain") >+ response.write_status_headers() >+ time.sleep(delay) >+ for i in xrange(count): >+ response.writer.write_content(chunk) >+ time.sleep(delay) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/upload.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/upload.py >new file mode 100644 >index 0000000000000000000000000000000000000000..304bea9e5ef906ee2874c2779978da76a632150d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/upload.py >@@ -0,0 +1,15 @@ >+def main(request, response): >+ content = [] >+ >+ for key, values in sorted(item for item in request.POST.items() if not hasattr(item[1][0], "filename")): >+ content.append("%s=%s," % (key, values[0])) >+ content.append("\n") >+ >+ for key, values in sorted(item for item in request.POST.items() if hasattr(item[1][0], "filename")): >+ value = values[0] >+ content.append("%s=%s:%s:%s," % (key, >+ value.filename, >+ value.headers["Content-Type"], >+ len(value.file.read()))) >+ >+ return "".join(content) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/utf16-bom.json b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/utf16-bom.json >new file mode 100644 >index 0000000000000000000000000000000000000000..5fd0a585a30dc9c7ac0bc7d3ee76eb26c4177a84 >GIT binary patch >literal 30 >hcmezWubM%LA&ns)2$dMDfH;XEk)a4k*D`Q1004d(20H)% > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/utf16.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/utf16.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0085dfaee8dc157a5b8e289d9bb42b06e24145f0 >GIT binary patch >literal 18 >acmezW?-|1nhNlc%495(18k{iTVgLYIcn7Qi > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..cd3cd90bc9616d7dcbaa9d07af0acdd2758ec470 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/w3c-import.log >@@ -0,0 +1,102 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/accept-language.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/accept.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-allow-lists.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-allow-with-body.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-auth-basic.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow-no-credentials.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow-star.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-allow.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-cors-safelisted-request-headers.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-denied.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-options-not-supported.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache-invalidation.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache-timeout.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-preflight-cache.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-put-allow.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-basic-whitelist-response-headers.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-cookie.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-origin-header.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-denied.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-header-lowercase.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-header-sorted.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-headers-origin.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-invalid-status.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-preflight-request-must-not-contain-cookie.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/access-control-sandboxed-iframe.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/authentication.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/base.xml >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/chunked.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/conditional.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/content.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/corsenabled.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/delay.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/echo-headers.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/echo-method.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/empty-div-utf8-html.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/folder.txt >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/form.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/gzip.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/header-content-length.asis >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/header-user-agent.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers-basic.asis >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers.asis >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/headers.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/image.gif >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/img-utf8-html.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/img.jpg >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/infinite-redirects.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/init.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/inspect-headers.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/invalid-utf8-html.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/last-modified.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/no-custom-header-on-preflight.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/parse-headers.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/pass.txt >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/redirect-cors.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/redirect.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/requri.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/reset-token.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/responseType-document-in-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/responseXML-unavailable-in-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-1.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-2.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/send-after-setting-document-domain-window-helper.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/shift-jis-html.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/status.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/trickle.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/upload.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/utf16-bom.json >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/utf16.txt >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/well-formed.xml >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/win-1252-html.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/win-1252-xml.py >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/workerxhr-origin-referrer.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/workerxhr-simple.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-event-order.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-aborted.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-abortedonmain.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-overrides.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-overridesexpires.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-runner.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-simple.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-synconmain.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-synconworker.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-twice.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/zlib.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/well-formed.xml b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/well-formed.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..2f4f1269880d670d57c1624e17934ac2d5b486e6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/well-formed.xml >@@ -0,0 +1,4 @@ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <p id="n1">1</p> >+ <p xmlns="namespacesarejuststrings" id="n2">2</p> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/win-1252-html.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/win-1252-html.py >new file mode 100644 >index 0000000000000000000000000000000000000000..a4d72d5e2754ce2178cf1f3c4ed9d39c8f68bb15 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/win-1252-html.py >@@ -0,0 +1,5 @@ >+def main(request, response): >+ headers = [("Content-type", "text/html;charset=windows-1252")] >+ content = chr(0xff) >+ >+ return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/win-1252-xml.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/win-1252-xml.py >new file mode 100644 >index 0000000000000000000000000000000000000000..09c32e4574b889974153abecb2b99eeb79c131fa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/win-1252-xml.py >@@ -0,0 +1,5 @@ >+def main(request, response): >+ headers = [("Content-type", "application/xml;charset=windows-1252")] >+ content = '<' + chr(0xff) + '/>' >+ >+ return headers, content >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/workerxhr-origin-referrer.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/workerxhr-origin-referrer.js >new file mode 100644 >index 0000000000000000000000000000000000000000..e378de289046dbd9a034e0c47a32f40492daf35e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/workerxhr-origin-referrer.js >@@ -0,0 +1,63 @@ >+importScripts("/resources/testharness.js") >+ >+async_test(function() { >+ var expected = 'Referer: ' + >+ location.href.replace(/[^/]*$/, '') + >+ "workerxhr-origin-referrer.js\n" >+ >+ var xhr = new XMLHttpRequest() >+ xhr.onreadystatechange = this.step_func(function() { >+ if (xhr.readyState == 4) { >+ assert_equals(xhr.responseText, expected) >+ this.done() >+ } >+ }) >+ xhr.open('GET', 'inspect-headers.py?filter_name=referer', true) >+ xhr.send() >+}, 'Referer header') >+ >+async_test(function() { >+ var expected = 'Origin: ' + >+ location.protocol + >+ '//' + >+ location.hostname + >+ (location.port === "" ? "" : ":" + location.port) + >+ '\n' >+ >+ var xhr = new XMLHttpRequest() >+ xhr.onreadystatechange = this.step_func(function() { >+ if (xhr.readyState == 4) { >+ assert_equals(xhr.responseText, expected) >+ this.done() >+ } >+ }) >+ var url = location.protocol + >+ '//www2.' + >+ location.hostname + >+ (location.port === "" ? "" : ":" + location.port) + >+ location.pathname.replace(/[^/]*$/, '') + >+ 'inspect-headers.py?filter_name=origin&cors' >+ xhr.open('GET', url, true) >+ xhr.send() >+}, 'Origin header') >+ >+async_test(function() { >+ // If "origin" / base URL is the origin of this JS file, we can load files >+ // from the server it originates from.. and requri.py will be able to tell us >+ // what the requested URL was >+ >+ var expected = location.href.replace(/[^/]*$/, '') + >+ 'requri.py?full' >+ >+ var xhr = new XMLHttpRequest() >+ xhr.onreadystatechange = this.step_func(function() { >+ if (xhr.readyState == 4) { >+ assert_equals(xhr.responseText, expected) >+ this.done() >+ } >+ }) >+ xhr.open('GET', 'requri.py?full', true) >+ xhr.send() >+}, 'Request URL test') >+ >+done() >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/workerxhr-simple.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/workerxhr-simple.js >new file mode 100644 >index 0000000000000000000000000000000000000000..9bae5a5cabd34c9e038fe8365f9496508079f84b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/workerxhr-simple.js >@@ -0,0 +1,9 @@ >+var xhr=new XMLHttpRequest() >+xhr.onreadystatechange = function(){ >+ if(xhr.readyState == 4){ >+ var status = xhr.responseText === 'bottom\n' ? 'PASSED' : 'FAILED' >+ self.postMessage(status) >+ } >+} >+xhr.open('GET', 'folder.txt', true) >+xhr.send() >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-event-order.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-event-order.js >new file mode 100644 >index 0000000000000000000000000000000000000000..b6bb6cdf3c3e03c2794865dc625ac50757b6cede >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-event-order.js >@@ -0,0 +1,83 @@ >+(function(global) { >+ var recorded_xhr_events = []; >+ >+ function record_xhr_event(e) { >+ var prefix = e.target instanceof XMLHttpRequestUpload ? "upload." : ""; >+ recorded_xhr_events.push((prefix || "") + e.type + "(" + e.loaded + "," + e.total + "," + e.lengthComputable + ")"); >+ } >+ >+ global.prepare_xhr_for_event_order_test = function(xhr) { >+ xhr.addEventListener("readystatechange", function(e) { >+ recorded_xhr_events.push(xhr.readyState); >+ }); >+ var events = ["loadstart", "progress", "abort", "timeout", "error", "load", "loadend"]; >+ for(var i=0; i<events.length; ++i) { >+ xhr.addEventListener(events[i], record_xhr_event); >+ } >+ if ("upload" in xhr) { >+ for(var i=0; i<events.length; ++i) { >+ xhr.upload.addEventListener(events[i], record_xhr_event); >+ } >+ } >+ } >+ >+ function getNextEvent(arr) { >+ var event = { str: arr.shift() }; >+ >+ // we can only handle strings, numbers (readystates) and undefined >+ if (event.str === undefined) { >+ return event; >+ } >+ >+ if (typeof event.str !== "string") { >+ if (Number.isInteger(event.str)) { >+ event.state = event.str; >+ event.str = "readystatechange(" + event.str + ")"; >+ } else { >+ throw "Test error: unexpected event type " + event.str; >+ } >+ } >+ >+ // parse out the general type, loaded and total values >+ var type = event.type = event.str.split("(")[0].split(".").pop(); >+ var loadedAndTotal = event.str.match(/.*\((\d+),(\d+),(true|false)\)/); >+ if (loadedAndTotal) { >+ event.loaded = parseInt(loadedAndTotal[1]); >+ event.total = parseInt(loadedAndTotal[2]); >+ event.lengthComputable = loadedAndTotal[3] == "true"; >+ } >+ >+ return event; >+ } >+ >+ global.assert_xhr_event_order_matches = function(expected) { >+ var recorded = recorded_xhr_events; >+ var lastRecordedLoaded = -1; >+ while(expected.length && recorded.length) { >+ var currentExpected = getNextEvent(expected), >+ currentRecorded = getNextEvent(recorded); >+ >+ // skip to the last progress event if we've hit one (note the next >+ // event after a progress event should be a LOADING readystatechange, >+ // if there are multiple progress events in a row). >+ while (recorded.length && currentRecorded.type == "progress" && >+ parseInt(recorded) === 3) { >+ assert_greater_than(currentRecorded.loaded, lastRecordedLoaded, >+ "progress event 'loaded' values must only increase"); >+ lastRecordedLoaded = currentRecorded.loaded; >+ } >+ if (currentRecorded.type == "loadend") { >+ recordedProgressCount = 0; >+ lastRecordedLoaded = -1; >+ } >+ >+ assert_equals(currentRecorded.str, currentExpected.str); >+ } >+ if (recorded.length) { >+ throw "\nUnexpected extra events: " + recorded.join(", "); >+ } >+ if (expected.length) { >+ throw "\nExpected more events: " + expected.join(", "); >+ } >+ } >+}(this)); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-aborted.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-aborted.js >new file mode 100644 >index 0000000000000000000000000000000000000000..056d77c0136079f7f4a851c9dceedbdce4180e05 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-aborted.js >@@ -0,0 +1,15 @@ >+if (this.document === undefined) >+ importScripts("xmlhttprequest-timeout.js"); >+/* >+This sets up three requests: >+The first request will only be open()ed, not aborted, timeout will be TIME_REGULAR_TIMEOUT but will never triggered because send() isn't called. >+After TIME_NORMAL_LOAD, the test asserts that no load/error/timeout/abort events fired >+ >+Second request will be aborted immediately after send(), test asserts that abort fired >+ >+Third request is set up to call abort() after TIME_NORMAL_LOAD, but it also has a TIME_REGULAR_TIMEOUT timeout. Asserts that timeout fired. >+(abort() is called later and should not fire an abort event per spec. This is untested!) >+*/ >+runTestRequests([ new AbortedRequest(false), >+ new AbortedRequest(true, -1), >+ new AbortedRequest(true, TIME_NORMAL_LOAD) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-abortedonmain.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-abortedonmain.js >new file mode 100644 >index 0000000000000000000000000000000000000000..8dde8ef573e6edae12bacfa4abe504864e6ec396 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-abortedonmain.js >@@ -0,0 +1,8 @@ >+/* >+This test sets up two requests: >+one that gets abort()ed from a 0ms timeout (0ms will obviously be clamped to whatever the implementation's minimal value is), asserts abort event fires >+one that will be aborted after TIME_DELAY, (with a timeout at TIME_REGULAR_TIMEOUT) asserts abort event fires. Does not assert that the timeout event does *not* fire. >+*/ >+ >+runTestRequests([ new AbortedRequest(true, 0), >+ new AbortedRequest(true, TIME_DELAY) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-overrides.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-overrides.js >new file mode 100644 >index 0000000000000000000000000000000000000000..6dc2173b2e6fbb6d086d2132545a2c77467eb4bb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-overrides.js >@@ -0,0 +1,11 @@ >+if (this.document === undefined) >+ importScripts("xmlhttprequest-timeout.js"); >+/* >+Sets up three requests to a resource that will take 0.6 seconds to load: >+1) timeout first set to TIME_NORMAL_LOAD, after TIME_REGULAR_TIMEOUT timeout is set to 0, asserts load fires >+2) timeout first set to TIME_NORMAL_LOAD, after TIME_DELAY timeout is set to TIME_REGULAR_TIMEOUT, asserts load fires (race condition..?!?) >+3) timeout first set to 0, after TIME_REGULAR_TIMEOUT it is set to TIME_REGULAR_TIMEOUT * 10, asserts load fires >+*/ >+runTestRequests([ new RequestTracker(true, "timeout disabled after initially set", TIME_NORMAL_LOAD, TIME_REGULAR_TIMEOUT, 0), >+ new RequestTracker(true, "timeout overrides load after a delay", TIME_NORMAL_LOAD, TIME_DELAY, TIME_REGULAR_TIMEOUT), >+ new RequestTracker(true, "timeout enabled after initially disabled", 0, TIME_REGULAR_TIMEOUT, TIME_NORMAL_LOAD * 10) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-overridesexpires.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-overridesexpires.js >new file mode 100644 >index 0000000000000000000000000000000000000000..bf251fa80535f3d6d1eef0be3da6e5360e70ef1f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-overridesexpires.js >@@ -0,0 +1,12 @@ >+if (this.document === undefined) >+ importScripts("xmlhttprequest-timeout.js"); >+/* >+ Starts three requests: >+ 1) XHR to resource which will take a least TIME_XHR_LOAD ms with timeout initially set to TIME_NORMAL_LOAD ms. After TIME_LATE_TIMEOUT ms timeout is supposedly reset to TIME_DELAY ms, >+ but the resource should have finished loading already. Asserts "load" fires. >+ 2) XHR with initial timeout set to TIME_NORMAL_LOAD, after TIME_REGULAR_TIMEOUT sets timeout to TIME_DELAY+100. Asserts "timeout" fires. >+ 3) XHR with initial timeout set to TIME_DELAY, after TIME_REGULAR_TIMEOUT sets timeout to 500ms. Asserts "timeout" fires (the change happens when timeout already fired and the request is done). >+*/ >+runTestRequests([ new RequestTracker(true, "timeout set to expiring value after load fires", TIME_NORMAL_LOAD, TIME_LATE_TIMEOUT, TIME_DELAY), >+ new RequestTracker(true, "timeout set to expired value before load fires", TIME_NORMAL_LOAD, TIME_REGULAR_TIMEOUT, TIME_DELAY+100), >+ new RequestTracker(true, "timeout set to non-expiring value after timeout fires", TIME_DELAY, TIME_REGULAR_TIMEOUT, 500) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-runner.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-runner.js >new file mode 100644 >index 0000000000000000000000000000000000000000..151226a94fb2687821ab96c58c15997ba80c2ffc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-runner.js >@@ -0,0 +1,21 @@ >+ >+function testResultCallbackHandler(event) { >+ if (event.data == "done") { >+ done(); >+ return; >+ } >+ if (event.data.type == "is") { >+ test(function() { assert_equals(event.data.got, event.data.expected); }, "Timeout test: " + event.data.msg); >+ return; >+ } >+ if (event.data.type == "ok") { >+ test(function() { assert_true(event.data.bool); }, "Timeout test: " + event.data.msg); >+ return; >+ } >+} >+ >+window.addEventListener("message", testResultCallbackHandler); >+ >+// Setting up testharness.js >+setup({ explicit_done: true }); >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-simple.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-simple.js >new file mode 100644 >index 0000000000000000000000000000000000000000..989a8d4bae85fc1c252331aab6e5912eeaecf242 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-simple.js >@@ -0,0 +1,6 @@ >+if (this.document === undefined) >+ importScripts("xmlhttprequest-timeout.js"); >+ >+runTestRequests([ new RequestTracker(true, "no time out scheduled, load fires normally", 0), >+ new RequestTracker(true, "load fires normally", TIME_NORMAL_LOAD), >+ new RequestTracker(true, "timeout hit before load", TIME_REGULAR_TIMEOUT) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-synconmain.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-synconmain.js >new file mode 100644 >index 0000000000000000000000000000000000000000..7ca3caf93677a7dabf075b8f6d5b2129e5d935b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-synconmain.js >@@ -0,0 +1,2 @@ >+runTestRequests([ SyncRequestSettingTimeoutAfterOpen, >+ SyncRequestSettingTimeoutBeforeOpen ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-synconworker.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-synconworker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..09244668e184200057ef92e0af1c019a9b352495 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-synconworker.js >@@ -0,0 +1,11 @@ >+if (this.document === undefined){ >+ importScripts("xmlhttprequest-timeout.js"); >+}else{ >+ throw "This test expects to be run as a Worker"; >+} >+ >+/* NOT TESTED: setting timeout before calling open( ... , false) in a worker context. The test code always calls open() first. */ >+ >+runTestRequests([ new RequestTracker(false, "no time out scheduled, load fires normally", 0), >+ new RequestTracker(false, "load fires normally", TIME_NORMAL_LOAD), >+ new RequestTracker(false, "timeout hit before load", TIME_REGULAR_TIMEOUT) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-twice.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-twice.js >new file mode 100644 >index 0000000000000000000000000000000000000000..92b7157b9db91903f938030e8d387c7d1bb4d43d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout-twice.js >@@ -0,0 +1,6 @@ >+if (this.document === undefined) >+ importScripts("xmlhttprequest-timeout.js"); >+ >+runTestRequests([ new RequestTracker(true, "load fires normally with no timeout set, twice", 0, TIME_REGULAR_TIMEOUT, 0), >+ new RequestTracker(true, "load fires normally with same timeout set twice", TIME_NORMAL_LOAD, TIME_REGULAR_TIMEOUT, TIME_NORMAL_LOAD), >+ new RequestTracker(true, "timeout fires normally with same timeout set twice", TIME_REGULAR_TIMEOUT, TIME_DELAY, TIME_REGULAR_TIMEOUT) ]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout.js >new file mode 100644 >index 0000000000000000000000000000000000000000..ac35f48d5ab08e393f932b22d037e0a582756c05 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/xmlhttprequest-timeout.js >@@ -0,0 +1,325 @@ >+/* Test adapted from Alex Vincent's XHR2 timeout tests, written for Mozilla. >+ https://hg.mozilla.org/mozilla-central/file/tip/content/base/test/ >+ Released into the public domain or under BSD, according to >+ https://bugzilla.mozilla.org/show_bug.cgi?id=525816#c86 >+*/ >+ >+/* Notes: >+ - All times are expressed in milliseconds in this test suite. >+ - Test harness code is at the end of this file. >+ - We generate only one request at a time, to avoid overloading the HTTP >+ request handlers. >+ */ >+ >+var TIME_NORMAL_LOAD = 5000; >+var TIME_LATE_TIMEOUT = 4000; >+var TIME_XHR_LOAD = 3000; >+var TIME_REGULAR_TIMEOUT = 2000; >+var TIME_SYNC_TIMEOUT = 1000; >+var TIME_DELAY = 1000; >+ >+/* >+ * This should point to a resource that responds with a text/plain resource after a delay of TIME_XHR_LOAD milliseconds. >+ */ >+var STALLED_REQUEST_URL = "delay.py?ms=" + (TIME_XHR_LOAD); >+ >+var inWorker = false; >+try { >+ inWorker = !(self instanceof Window); >+} catch (e) { >+ inWorker = true; >+} >+ >+if (!inWorker) >+ STALLED_REQUEST_URL = "resources/" + STALLED_REQUEST_URL; >+ >+function message(obj) { >+ if (inWorker) >+ self.postMessage(obj); >+ else >+ self.postMessage(obj, "*"); >+} >+ >+function is(got, expected, msg) { >+ var obj = {}; >+ obj.type = "is"; >+ obj.got = got; >+ obj.expected = expected; >+ obj.msg = msg; >+ >+ message(obj); >+} >+ >+function ok(bool, msg) { >+ var obj = {}; >+ obj.type = "ok"; >+ obj.bool = bool; >+ obj.msg = msg; >+ >+ message(obj); >+} >+ >+/** >+ * Generate and track results from a XMLHttpRequest with regards to timeouts. >+ * >+ * @param {String} id The test description. >+ * @param {Number} timeLimit The initial setting for the request timeout. >+ * @param {Number} resetAfter (Optional) The time after sending the request, to >+ * reset the timeout. >+ * @param {Number} resetTo (Optional) The delay to reset the timeout to. >+ * >+ * @note The actual testing takes place in handleEvent(event). >+ * The requests are generated in startXHR(). >+ * >+ * @note If resetAfter and resetTo are omitted, only the initial timeout setting >+ * applies. >+ * >+ * @constructor >+ * @implements DOMEventListener >+ */ >+function RequestTracker(async, id, timeLimit /*[, resetAfter, resetTo]*/) { >+ this.async = async; >+ this.id = id; >+ this.timeLimit = timeLimit; >+ >+ if (arguments.length > 3) { >+ this.mustReset = true; >+ this.resetAfter = arguments[3]; >+ this.resetTo = arguments[4]; >+ } >+ >+ this.hasFired = false; >+} >+RequestTracker.prototype = { >+ /** >+ * Start the XMLHttpRequest! >+ */ >+ startXHR: function() { >+ var req = new XMLHttpRequest(); >+ this.request = req; >+ req.open("GET", STALLED_REQUEST_URL, this.async); >+ var me = this; >+ function handleEvent(e) { return me.handleEvent(e); }; >+ req.onerror = handleEvent; >+ req.onload = handleEvent; >+ req.onabort = handleEvent; >+ req.ontimeout = handleEvent; >+ >+ req.timeout = this.timeLimit; >+ >+ if (this.mustReset) { >+ var resetTo = this.resetTo; >+ self.setTimeout(function() { >+ req.timeout = resetTo; >+ }, this.resetAfter); >+ } >+ >+ try { >+ req.send(null); >+ } >+ catch (e) { >+ // Synchronous case in workers. >+ ok(!this.async && this.timeLimit < TIME_XHR_LOAD && e.name == "TimeoutError", "Unexpected error: " + e); >+ TestCounter.testComplete(); >+ } >+ }, >+ >+ /** >+ * Get a message describing this test. >+ * >+ * @returns {String} The test description. >+ */ >+ getMessage: function() { >+ var rv = this.id + ", "; >+ if (this.mustReset) { >+ rv += "original timeout at " + this.timeLimit + ", "; >+ rv += "reset at " + this.resetAfter + " to " + this.resetTo; >+ } >+ else { >+ rv += "timeout scheduled at " + this.timeLimit; >+ } >+ return rv; >+ }, >+ >+ /** >+ * Check the event received, and if it's the right (and only) one we get. >+ * >+ * @param {DOMProgressEvent} evt An event of type "load" or "timeout". >+ */ >+ handleEvent: function(evt) { >+ if (this.hasFired) { >+ ok(false, "Only one event should fire: " + this.getMessage()); >+ return; >+ } >+ this.hasFired = true; >+ >+ var type = evt.type, expectedType; >+ // The XHR responds after TIME_XHR_LOAD milliseconds with a load event. >+ var timeLimit = this.mustReset && (this.resetAfter < Math.min(TIME_XHR_LOAD, this.timeLimit)) ? >+ this.resetTo : >+ this.timeLimit; >+ if ((timeLimit == 0) || (timeLimit >= TIME_XHR_LOAD)) { >+ expectedType = "load"; >+ } >+ else { >+ expectedType = "timeout"; >+ } >+ is(type, expectedType, this.getMessage()); >+ TestCounter.testComplete(); >+ } >+}; >+ >+/** >+ * Generate and track XMLHttpRequests which will have abort() called on. >+ * >+ * @param shouldAbort {Boolean} True if we should call abort at all. >+ * @param abortDelay {Number} The time in ms to wait before calling abort(). >+ */ >+function AbortedRequest(shouldAbort, abortDelay) { >+ this.shouldAbort = shouldAbort; >+ this.abortDelay = abortDelay; >+ this.hasFired = false; >+} >+AbortedRequest.prototype = { >+ /** >+ * Start the XMLHttpRequest! >+ */ >+ startXHR: function() { >+ var req = new XMLHttpRequest(); >+ this.request = req; >+ req.open("GET", STALLED_REQUEST_URL); >+ var _this = this; >+ function handleEvent(e) { return _this.handleEvent(e); }; >+ req.onerror = handleEvent; >+ req.onload = handleEvent; >+ req.onabort = handleEvent; >+ req.ontimeout = handleEvent; >+ >+ req.timeout = TIME_REGULAR_TIMEOUT; >+ >+ function abortReq() { >+ req.abort(); >+ } >+ >+ if (!this.shouldAbort) { >+ self.setTimeout(function() { >+ try { >+ _this.noEventsFired(); >+ } >+ catch (e) { >+ ok(false, "Unexpected error: " + e); >+ TestCounter.testComplete(); >+ } >+ }, TIME_NORMAL_LOAD); >+ } >+ else { >+ // Abort events can only be triggered on sent requests. >+ req.send(); >+ if (this.abortDelay == -1) { >+ abortReq(); >+ } >+ else { >+ self.setTimeout(abortReq, this.abortDelay); >+ } >+ } >+ }, >+ >+ /** >+ * Ensure that no events fired at all, especially not our timeout event. >+ */ >+ noEventsFired: function() { >+ ok(!this.hasFired, "No events should fire for an unsent, unaborted request"); >+ // We're done; if timeout hasn't fired by now, it never will. >+ TestCounter.testComplete(); >+ }, >+ >+ /** >+ * Get a message describing this test. >+ * >+ * @returns {String} The test description. >+ */ >+ getMessage: function() { >+ return "time to abort is " + this.abortDelay + ", timeout set at " + TIME_REGULAR_TIMEOUT; >+ }, >+ >+ /** >+ * Check the event received, and if it's the right (and only) one we get. >+ * >+ * WebKit fires abort events even for DONE and UNSENT states, which is >+ * discussed in http://webkit.org/b/98404 >+ * That's why we chose to accept secondary "abort" events in this test. >+ * >+ * @param {DOMProgressEvent} evt An event of type "load" or "timeout". >+ */ >+ handleEvent: function(evt) { >+ if (this.hasFired && evt.type != "abort") { >+ ok(false, "Only abort event should fire: " + this.getMessage()); >+ return; >+ } >+ >+ var expectedEvent = (this.abortDelay >= TIME_REGULAR_TIMEOUT && !this.hasFired) ? "timeout" : "abort"; >+ this.hasFired = true; >+ is(evt.type, expectedEvent, this.getMessage()); >+ TestCounter.testComplete(); >+ } >+}; >+ >+var SyncRequestSettingTimeoutAfterOpen = { >+ startXHR: function() { >+ var pass = false; >+ var req = new XMLHttpRequest(); >+ req.open("GET", STALLED_REQUEST_URL, false); >+ try { >+ req.timeout = TIME_SYNC_TIMEOUT; >+ } >+ catch (e) { >+ pass = true; >+ } >+ ok(pass, "Synchronous XHR must not allow a timeout to be set - setting timeout must throw"); >+ TestCounter.testComplete(); >+ } >+}; >+ >+var SyncRequestSettingTimeoutBeforeOpen = { >+ startXHR: function() { >+ var pass = false; >+ var req = new XMLHttpRequest(); >+ req.timeout = TIME_SYNC_TIMEOUT; >+ try { >+ req.open("GET", STALLED_REQUEST_URL, false); >+ } >+ catch (e) { >+ pass = true; >+ } >+ ok(pass, "Synchronous XHR must not allow a timeout to be set - calling open() after timeout is set must throw"); >+ TestCounter.testComplete(); >+ } >+}; >+ >+var TestRequests = []; >+ >+// This code controls moving from one test to another. >+var TestCounter = { >+ testComplete: function() { >+ // Allow for the possibility there are other events coming. >+ self.setTimeout(function() { >+ TestCounter.next(); >+ }, TIME_NORMAL_LOAD); >+ }, >+ >+ next: function() { >+ var test = TestRequests.shift(); >+ >+ if (test) { >+ test.startXHR(); >+ } >+ else { >+ message("done"); >+ } >+ } >+}; >+ >+function runTestRequests(testRequests) { >+ TestRequests = testRequests; >+ TestCounter.next(); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/zlib.py b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/zlib.py >new file mode 100644 >index 0000000000000000000000000000000000000000..49ed69de79398828af12837e8d87ed8d1a3a7a3e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/resources/zlib.py >@@ -0,0 +1,19 @@ >+import zlib >+ >+def main(request, response): >+ if "content" in request.GET: >+ output = request.GET["content"] >+ else: >+ output = request.body >+ >+ output = zlib.compress(output, 9) >+ >+ headers = [("Content-type", "text/plain"), >+ ("Content-Encoding", "deflate"), >+ ("X-Request-Method", request.method), >+ ("X-Request-Query", request.url_parts.query if request.url_parts.query else "NO"), >+ ("X-Request-Content-Length", request.headers.get("Content-Length", "NO")), >+ ("X-Request-Content-Type", request.headers.get("Content-Type", "NO")), >+ ("Content-Length", len(output))] >+ >+ return headers, output >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-arraybuffer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-arraybuffer-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..471c2506c716228c5a94734110959baa1eeb683f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-arraybuffer-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The response attribute: ArrayBuffer data >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-arraybuffer.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-arraybuffer.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..7eaf7198ae274d85a76528bca9028d3d08844642 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-arraybuffer.htm >@@ -0,0 +1,54 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::a[contains(@href,'#arraybuffer-response-entity-body')]/.." /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The response attribute: ArrayBuffer data</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.onreadystatechange = function() >+ { >+ if (xhr.readyState == 4) >+ { >+ test.step(function() >+ { >+ assert_equals(xhr.status, 200); >+ >+ var buf = xhr.response; >+ assert_true(buf instanceof ArrayBuffer); >+ >+ var arr = new Uint8Array(buf); >+ assert_equals(arr.length, 5); >+ assert_equals(arr[0], 0x48, "Expect 'H'"); >+ assert_equals(arr[1], 0x65, "Expect 'e'"); >+ assert_equals(arr[2], 0x6c, "Expect 'l'"); >+ assert_equals(arr[3], 0x6c, "Expect 'l'"); >+ assert_equals(arr[4], 0x6f, "Expect 'o'"); >+ >+ assert_equals(xhr.response, xhr.response, >+ "Response should be cached"); >+ >+ test.done(); >+ }); >+ } >+ }; >+ >+ xhr.open("GET", "./resources/content.py?content=Hello", true); >+ xhr.responseType = "arraybuffer"; >+ xhr.send(); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-blob-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-blob-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..94a1399b23738d1d71e730e95132b4ed74de6a6f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-blob-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The response attribute: Blob data >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-blob.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-blob.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..19731d3dc1e5bc6c13102e386d87fd68c8e91ef8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-blob.htm >@@ -0,0 +1,55 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::a[contains(@href,'#blob-response-entity-body')]/.." /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The response attribute: Blob data</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ var content = "Hello"; >+ var blob; >+ >+ xhr.onreadystatechange = function() >+ { >+ if (xhr.readyState == 4) >+ { >+ test.step(function() >+ { >+ blob = xhr.response; >+ assert_equals(xhr.response, xhr.response, >+ "Response should be cached"); >+ assert_true(blob instanceof Blob, 'blob is a Blob'); >+ >+ var reader = new FileReader(); >+ reader.onload = function() >+ { >+ test.step(function() >+ { >+ assert_equals(reader.result, content); >+ test.done(); >+ }); >+ }; >+ reader.readAsText(blob); >+ }); >+ } >+ } >+ >+ xhr.open("GET", "./resources/content.py?content=" + content, true); >+ xhr.responseType = "blob"; >+ xhr.send(); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-deflate-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-deflate-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..efb336b4d6eb2fc139ef683560b9f5d07379acdf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-deflate-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: content-encoding:deflate response was correctly inflated >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-deflate.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-deflate.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..bce2745f4f7a4debe7f314cec10d61bd7b781d33 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-deflate.htm >@@ -0,0 +1,42 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: content-encoding:deflate response was correctly inflated</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-send()-method" data-tested-assertations="following::p[contains(text(),'content-encodings')]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(input) { >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ >+ client.open("POST", "resources/zlib.py", false); >+ >+ client.onreadystatechange = test.step_func(function () { >+ if (client.readyState === 4) { >+ var len = parseInt(client.getResponseHeader('content-length'), 10); >+ >+ assert_equals(client.getResponseHeader('content-encoding'), 'deflate'); >+ assert_true(len < input.length); >+ assert_equals(client.responseText, input); >+ test.done(); >+ } >+ }); >+ >+ client.send(input); >+ }); >+ } >+ >+ var wellCompressableData = ''; >+ for (var i = 0; i < 500; i++) { >+ wellCompressableData += 'foofoofoofoofoofoofoo'; >+ } >+ >+ request(wellCompressableData); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-gzip-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-gzip-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4ec2cc97ad0302dc234798735ca424345f6ca11c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-gzip-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: GZIP response was correctly inflated >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-gzip.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-gzip.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a3d2713d0f419aaeb29098731ebad3da33de2d3d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-gzip.htm >@@ -0,0 +1,42 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: GZIP response was correctly inflated</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-send()-method" data-tested-assertations="following::p[contains(text(),'content-encodings')]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(input) { >+ var test = async_test(); >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ >+ client.open("POST", "resources/gzip.py", false); >+ >+ client.onreadystatechange = test.step_func(function () { >+ if (client.readyState === 4) { >+ var len = parseInt(client.getResponseHeader('content-length'), 10); >+ >+ assert_equals(client.getResponseHeader('content-encoding'), 'gzip'); >+ assert_true(len < input.length); >+ assert_equals(client.responseText, input); >+ test.done(); >+ } >+ }); >+ >+ client.send(input); >+ }, document.title); >+ } >+ >+ var wellCompressableData = ''; >+ for (var i = 0; i < 500; i++) { >+ wellCompressableData += 'foofoofoofoofoofoofoo'; >+ } >+ >+ request(wellCompressableData); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-progress-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-progress-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..770b07770b0b60fe746e890c8d4aca59f802e0a6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-progress-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: progress events grow response body size, unknown content-length >+PASS XMLHttpRequest: progress events grow response body size, known content-length >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-progress.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-progress.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..94c662c5c4fd8ca53f632d00de4815295e49df74 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-progress.htm >@@ -0,0 +1,51 @@ >+<!doctype html> >+<html lang="en"> >+<head> >+ <meta charset="utf-8"> >+ <title>XMLHttpRequest: progress events grow response body size</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::a[contains(@href,'#make-progress-notifications')]/.. following::a[contains(@href,'#make-progress-notifications')]/../following:p[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#make-progress-notifications" data-tested-assertations=".." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="/../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="/../.." /> >+</head> >+ >+<div id="log"></div> >+ >+<script> >+ >+function doTest(test, expectedLengthComputable, expectedTotal, url) { >+ var client = new XMLHttpRequest(); >+ var lastSize = 0; >+ >+ client.onprogress = test.step_func(function(e) { >+ assert_equals(e.total, expectedTotal); >+ assert_equals(e.lengthComputable, expectedLengthComputable); >+ >+ var currentSize = client.responseText.length; >+ >+ if (lastSize > 0 && currentSize > lastSize) { >+ // growth from a positive size to bigger! >+ test.done(); >+ } >+ >+ lastSize = currentSize; >+ }); >+ >+ client.onreadystatechange = test.step_func(function() { >+ if (client.readyState === 4) { >+ assert_unreached("onprogress not called multiple times, or response body did not grow."); >+ } >+ }); >+ >+ client.open("GET", url); >+ client.send(null); >+ return client; >+} >+ >+async_test(function () { doTest(this, false, 0, "resources/trickle.py?count=6&delay=150"); }, >+ document.title + ', unknown content-length'); >+async_test(function () { doTest(this, true, 78, "resources/trickle.py?count=6&delay=150&specifylength=1"); }, >+ document.title + ', known content-length'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-invalid-responsetype-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-invalid-responsetype-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6d36fea74eb6ee44ee8d210c4c5f58b0c21add97 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-invalid-responsetype-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS XMLHttpRequest: response is plain text if responseType is set to an invalid string (arrayBuffer) >+PASS XMLHttpRequest: response is plain text if responseType is set to an invalid string (JSON) >+PASS XMLHttpRequest: response is plain text if responseType is set to an invalid string (glob) >+PASS XMLHttpRequest: response is plain text if responseType is set to an invalid string (txt) >+PASS XMLHttpRequest: response is plain text if responseType is set to an invalid string (text/html) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-invalid-responsetype.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-invalid-responsetype.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..603c4cd0ed77f41172a1f80a731ba4584fa6456a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-invalid-responsetype.htm >@@ -0,0 +1,38 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: response is plain text if responseType is set to an invalid string</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::dd[2]/ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]" /><!-- Not quite - but this is handled in WebIDL, not the XHR spec --> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(type) { >+ var test = async_test(document.title+' ('+type+')') >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.responseType = type >+ assert_equals(client.responseType, '') >+ client.open("GET", "resources/folder.txt", true) >+ client.onload = function(){ >+ test.step(function(){ >+ assert_equals(client.responseType, '') >+ assert_equals(client.response, 'bottom\n') >+ assert_equals(typeof client.response, 'string') >+ test.done() >+ }) >+ } >+ client.send(null) >+ }) >+ } >+ request("arrayBuffer") // case sensitive >+ request("JSON") // case sensitive >+ request("glob") >+ request("txt") >+ request("text/html") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-json-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-json-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..18f49157b91325add69e0d06ced95da80fb1ed30 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-json-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS json response with no data: response property is null >+PASS json response with malformed data: response property is null >+PASS JSON object roundtrip >+PASS JSON roundtrip with Japanese text >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-json.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-json.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a694d7fc6157989c57b2a304a6264626900beb94 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-json.htm >@@ -0,0 +1,61 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: responseType json</title> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::OL[1]/LI[4]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::dt[2]/dt[4] following::dt[2]/dt[4]/following::dd[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#json-response-entity-body" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2] following::ol[1]/li[3]" /> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function setupXHR () { >+ var client = new XMLHttpRequest() >+ client.open('POST', "resources/content.py", true) >+ client.responseType = 'json' >+ return client >+ } >+ function makeTest(data, expectedResponse, description){ >+ var test = async_test(description) >+ var xhr = setupXHR() >+ assert_equals(xhr.responseType, 'json') >+ xhr.onreadystatechange = function(){ >+ if(xhr.readyState === 4){ >+ test.step(function(){ >+ assert_equals(xhr.status, 200) >+ assert_equals(xhr.responseType, 'json') >+ assert_equals(typeof xhr.response, 'object') >+ if(expectedResponse){ // if the expectedResponse is not null, we iterate over properties to do a deeper comparison.. >+ for(var prop in expectedResponse){ >+ if (expectedResponse[prop] instanceof Array) { >+ assert_array_equals(expectedResponse[prop], xhr.response[prop]) >+ }else{ >+ assert_equals(expectedResponse[prop], xhr.response[prop]) >+ } >+ } >+ }else{ >+ assert_equals(xhr.response, expectedResponse) // null comparison, basically >+ } >+ assert_equals(xhr.response, xhr.response, >+ "Response should be cached") >+ test.done() >+ }) >+ } >+ } >+ xhr.send(data) >+ } >+ // no data >+ makeTest("", null, 'json response with no data: response property is null') >+ // malformed >+ makeTest('{"test":"foo"', null, 'json response with malformed data: response property is null') >+ // real object >+ var obj = {alpha:'a-z', integer:15003, negated:-20, b1:true, b2:false, myAr:['a', 'b', 'c', 1, 2, 3]} >+ makeTest(JSON.stringify(obj), obj, 'JSON object roundtrip') >+ makeTest('{"æ¥æ¬èª":"ã«ã»ãã"}', {"æ¥æ¬èª":"ã«ã»ãã"}, 'JSON roundtrip with Japanese text') >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-method-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-method-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d986f0f43882229a18fe0196039b233486c1affc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-method-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS GET >+PASS HEAD >+PASS POST >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/response-method.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-method.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..1bf26bac79c8ebbb3e31c50cbb6cfce35b67ea6d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/response-method.htm >@@ -0,0 +1,21 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: influence of HTTP method on response</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ ["GET", "HEAD", "POST"].forEach(function(method) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open(method, "resources/echo-method.py", false) >+ client.send() >+ assert_equals(client.responseText, (method === "HEAD" ? "" : method)) >+ }, method) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responseText-status-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseText-status-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..689a556f34e4a39a2e628876da1627ffd0576ceb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseText-status-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest Test: responseText - status >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responseText-status.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseText-status.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7d575902ddcdf18ac736f4cb97682572722c7320 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseText-status.html >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>XMLHttpRequest Test: responseText - status</title> >+<link rel="author" title="Intel" href="http://www.intel.com"> >+<meta name="assert" content="Check if XMLHttpRequest.responseText return empty string if state is not LOADING or DONE"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<div id="log"></div> >+ >+<script> >+ >+async_test(function (t) { >+ var client = new XMLHttpRequest(); >+ t.step(function () { >+ assert_equals(client.responseText, ""); >+ }); >+ >+ client.onreadystatechange = t.step_func(function () { >+ if (client.readyState == 1 || client.readyState == 2) { >+ assert_equals(client.responseText, ""); >+ } >+ >+ if (client.readyState == 3) { >+ t.done(); >+ } >+ }); >+ >+ client.open("GET", "resources/headers.py") >+ client.send(null) >+}, document.title); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responseType-document-in-worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseType-document-in-worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d0ffe672fb4b8bac1749c953f808dd2fec7cb890 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseType-document-in-worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Setting XMLHttpRequest responseType to 'document' in a worker should have no effect. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responseType-document-in-worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseType-document-in-worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9a04320df92578e5d9c4ddea21bf70b6ee187f8b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseType-document-in-worker.html >@@ -0,0 +1,13 @@ >+<!doctype html> >+<html> >+<head> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+<script> >+ fetch_tests_from_worker(new Worker("resources/responseType-document-in-worker.js")); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responseXML-unavailable-in-worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseXML-unavailable-in-worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3cbf317cea83356cf351be9dacbcdf836029af90 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseXML-unavailable-in-worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest's responseXML property should not be exposed in workers. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responseXML-unavailable-in-worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseXML-unavailable-in-worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..dcb4cb04973f6a4f06a43860200e4d04f9ec65ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseXML-unavailable-in-worker.html >@@ -0,0 +1,13 @@ >+<!doctype html> >+<html> >+<head> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+<script> >+ fetch_tests_from_worker(new Worker("resources/responseXML-unavailable-in-worker.js")); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsedocument-decoding-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsedocument-decoding-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..dce320fbd22ede0f56d09b592150fe654838eed0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsedocument-decoding-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS XMLHttpRequest: response document decoding (application/xml %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >+PASS XMLHttpRequest: response document decoding (application/xml;charset=utf-8 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >+PASS XMLHttpRequest: response document decoding (application/xml;charset=windows-1252 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >+PASS XMLHttpRequest: response document decoding (text/html %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >+PASS XMLHttpRequest: response document decoding (text/html;charset=utf-8 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >+PASS XMLHttpRequest: response document decoding (text/html;charset=windows-1252 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsedocument-decoding.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsedocument-decoding.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..7fb4b2d1fd851483371d57d22b2e8519e730d6b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsedocument-decoding.htm >@@ -0,0 +1,39 @@ >+<!doctype html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>XMLHttpRequest: response document decoding</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <script> >+ function request(type, input, expected) { >+ async_test((test) => { >+ const client = new XMLHttpRequest(); >+ client.responseType = 'document'; >+ client.open("GET", "resources/status.py?content=" + input + "&type=" + encodeURIComponent(type), true); >+ client.onload = test.step_func_done(() => { >+ assert_equals(client.responseXML.querySelector("x").textContent, expected); >+ }) >+ client.send(null); >+ }, document.title + " (" + type + " " + input + ")"); >+ } >+ >+ const encoded_content = "%e6%a9%9f"; >+ const encoded_xml = >+ encodeURIComponent("<?xml version='1.0' encoding='windows-1252'?><x>") + encoded_content + encodeURIComponent("<\/x>"); >+ const encoded_html = >+ encodeURIComponent("<!doctype html><meta charset=windows-1252><x>") + encoded_content + encodeURIComponent("<\/x>"); >+ const decoded_as_windows_1252 = "\u00e6\u00a9\u0178"; >+ const decoded_as_utf_8 = "\u6a5f"; >+ >+ request("application/xml", encoded_xml, decoded_as_windows_1252); >+ request("application/xml;charset=utf-8", encoded_xml, decoded_as_utf_8); >+ request("application/xml;charset=windows-1252", encoded_xml, decoded_as_windows_1252); >+ request("text/html", encoded_html, decoded_as_windows_1252); >+ request("text/html;charset=utf-8", encoded_html, decoded_as_utf_8); >+ request("text/html;charset=windows-1252", encoded_html, decoded_as_windows_1252); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetext-decoding-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetext-decoding-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e1fe16a97852c819ec4f3065957cdf8b50fa0c72 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetext-decoding-expected.txt >@@ -0,0 +1,39 @@ >+ >+PASS XMLHttpRequest: responseText decoding (application/xml %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >+PASS XMLHttpRequest: responseText decoding (text/html %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >+PASS XMLHttpRequest: responseText decoding (application/xml;charset=utf-8 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >+PASS XMLHttpRequest: responseText decoding (application/xml;charset=windows-1252 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >+PASS XMLHttpRequest: responseText decoding (text/html;charset=utf-8 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >+PASS XMLHttpRequest: responseText decoding (text/html;charset=windows-1252 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E empty) >+PASS XMLHttpRequest: responseText decoding (text/plain;charset=windows-1252 %FF empty) >+PASS XMLHttpRequest: responseText decoding (text/plain %FF empty) >+PASS XMLHttpRequest: responseText decoding (text/plain %FE%FF empty) >+PASS XMLHttpRequest: responseText decoding (text/plain %FE%FF%FE%FF empty) >+PASS XMLHttpRequest: responseText decoding (text/plain %EF%BB%BF empty) >+PASS XMLHttpRequest: responseText decoding (text/plain %EF%BB%BF%EF%BB%BF empty) >+PASS XMLHttpRequest: responseText decoding (text/plain %C2 empty) >+PASS XMLHttpRequest: responseText decoding (text/xml %FE%FF empty) >+PASS XMLHttpRequest: responseText decoding (text/xml %FE%FF%FE%FF empty) >+PASS XMLHttpRequest: responseText decoding (text/xml %EF%BB%BF empty) >+PASS XMLHttpRequest: responseText decoding (text/xml %EF%BB%BF%EF%BB%BF empty) >+PASS XMLHttpRequest: responseText decoding (text/plain %E3%81%B2 empty) >+PASS XMLHttpRequest: responseText decoding (application/xml %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >+PASS XMLHttpRequest: responseText decoding (text/html %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >+PASS XMLHttpRequest: responseText decoding (application/xml;charset=utf-8 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >+PASS XMLHttpRequest: responseText decoding (application/xml;charset=windows-1252 %3C%3Fxml%20version%3D'1.0'%20encoding%3D'windows-1252'%3F%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >+PASS XMLHttpRequest: responseText decoding (text/html;charset=utf-8 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >+PASS XMLHttpRequest: responseText decoding (text/html;charset=windows-1252 %3C!doctype%20html%3E%3Cmeta%20charset%3Dwindows-1252%3E%3Cx%3E%e6%a9%9f%3C%2Fx%3E text) >+PASS XMLHttpRequest: responseText decoding (text/plain;charset=windows-1252 %FF text) >+PASS XMLHttpRequest: responseText decoding (text/plain %FF text) >+PASS XMLHttpRequest: responseText decoding (text/plain %FE%FF text) >+PASS XMLHttpRequest: responseText decoding (text/plain %FE%FF%FE%FF text) >+PASS XMLHttpRequest: responseText decoding (text/plain %EF%BB%BF text) >+PASS XMLHttpRequest: responseText decoding (text/plain %EF%BB%BF%EF%BB%BF text) >+PASS XMLHttpRequest: responseText decoding (text/plain %C2 text) >+FAIL XMLHttpRequest: responseText decoding (text/plain;charset=bogus %C2 text) assert_equals: expected "\ufffd" but got "Ã" >+PASS XMLHttpRequest: responseText decoding (text/xml %FE%FF text) >+PASS XMLHttpRequest: responseText decoding (text/xml %FE%FF%FE%FF text) >+PASS XMLHttpRequest: responseText decoding (text/xml %EF%BB%BF text) >+PASS XMLHttpRequest: responseText decoding (text/xml %EF%BB%BF%EF%BB%BF text) >+PASS XMLHttpRequest: responseText decoding (text/plain %E3%81%B2 text) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetext-decoding.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetext-decoding.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..fae01048ba3feab8f70cb5f22546e8692b2625ca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetext-decoding.htm >@@ -0,0 +1,93 @@ >+<!doctype html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>XMLHttpRequest: responseText decoding</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <script> >+ function create_html(content) { >+ return "<!doctype html><meta charset=windows-1252><x>" + content + "</x>"; >+ } >+ function create_encoded_html(encoded_content) { >+ return encodeURIComponent("<!doctype html><meta charset=windows-1252><x>") + encoded_content + encodeURIComponent("<\/x>"); >+ } >+ function create_xml(content) { >+ return "<?xml version='1.0' encoding='windows-1252'?><x>" + content + "</x>"; >+ } >+ function create_encoded_xml(encoded_content) { >+ return encodeURIComponent("<?xml version='1.0' encoding='windows-1252'?><x>") + encoded_content + encodeURIComponent("<\/x>"); >+ } >+ function request(type, input, output, responseType) { >+ async_test((test) => { >+ const client = new XMLHttpRequest(); >+ if (responseType !== undefined) { >+ client.responseType = responseType; >+ } >+ client.open("GET", "resources/status.py?content=" + input + "&type=" + encodeURIComponent(type), true); >+ client.onload = test.step_func_done(() => { >+ assert_equals(client.responseText, output); >+ }) >+ client.send(null); >+ }, document.title + " (" + type + " " + input + " " + (responseType ? " " + responseType : "empty") + ")"); >+ } >+ >+ const encoded_content = "%e6%a9%9f"; >+ const decoded_as_windows_1252 = "\u00e6\u00a9\u0178"; >+ const decoded_as_utf_8 = "\u6a5f"; >+ const encoded_xml = create_encoded_xml(encoded_content); >+ const encoded_html = create_encoded_html(encoded_content); >+ const xml_decoded_as_windows_1252 = create_xml(decoded_as_windows_1252); >+ const xml_decoded_as_utf_8 = create_xml(decoded_as_utf_8); >+ const html_decoded_as_windows_1252 = create_html(decoded_as_windows_1252); >+ const html_decoded_as_utf_8 = create_html(decoded_as_utf_8); >+ >+ // "default" response type >+ // An XML-ish response is sniffed. >+ request("application/xml", encoded_xml, xml_decoded_as_windows_1252); >+ // An HTML-ish response isn't sniffed. >+ request("text/html", encoded_html, html_decoded_as_utf_8); >+ request("application/xml;charset=utf-8", encoded_xml, xml_decoded_as_utf_8); >+ request("application/xml;charset=windows-1252", encoded_xml, xml_decoded_as_windows_1252); >+ request("text/html;charset=utf-8", encoded_html, html_decoded_as_utf_8); >+ request("text/html;charset=windows-1252", encoded_html, html_decoded_as_windows_1252); >+ request("text/plain;charset=windows-1252", "%FF", "\u00FF"); >+ request("text/plain", "%FF", "\uFFFD"); >+ request("text/plain", "%FE%FF", ""); >+ request("text/plain", "%FE%FF%FE%FF", "\uFEFF"); >+ request("text/plain", "%EF%BB%BF", ""); >+ request("text/plain", "%EF%BB%BF%EF%BB%BF", "\uFEFF"); >+ request("text/plain", "%C2", "\uFFFD"); >+ request("text/xml", "%FE%FF", ""); >+ request("text/xml", "%FE%FF%FE%FF", "\uFEFF"); >+ request("text/xml", "%EF%BB%BF", ""); >+ request("text/xml", "%EF%BB%BF%EF%BB%BF", "\uFEFF"); >+ request("text/plain", "%E3%81%B2", "\u3072"); >+ >+ // "text" response type >+ // An XML-ish response isn't sniffed. >+ request("application/xml", encoded_xml, xml_decoded_as_utf_8, "text"); >+ // An HTML-ish response isn't sniffed. >+ request("text/html", encoded_html, html_decoded_as_utf_8, "text"); >+ request("application/xml;charset=utf-8", encoded_xml, xml_decoded_as_utf_8, "text"); >+ request("application/xml;charset=windows-1252", encoded_xml, xml_decoded_as_windows_1252, "text"); >+ request("text/html;charset=utf-8", encoded_html, html_decoded_as_utf_8, "text"); >+ request("text/html;charset=windows-1252", encoded_html, html_decoded_as_windows_1252, "text"); >+ request("text/plain;charset=windows-1252", "%FF", "\u00FF", "text"); >+ request("text/plain", "%FF", "\uFFFD", "text"); >+ request("text/plain", "%FE%FF", "", "text"); >+ request("text/plain", "%FE%FF%FE%FF", "\uFEFF", "text"); >+ request("text/plain", "%EF%BB%BF", "", "text"); >+ request("text/plain", "%EF%BB%BF%EF%BB%BF", "\uFEFF", "text"); >+ request("text/plain", "%C2", "\uFFFD", "text"); >+ request("text/plain;charset=bogus", "%C2", "\uFFFD", "text"); >+ request("text/xml", "%FE%FF", "", "text"); >+ request("text/xml", "%FE%FF%FE%FF", "\uFEFF", "text"); >+ request("text/xml", "%EF%BB%BF", "", "text"); >+ request("text/xml", "%EF%BB%BF%EF%BB%BF", "\uFEFF", "text"); >+ request("text/plain", "%E3%81%B2", "\u3072", "text"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4d2ec559557306391ffad1eceea780e748a859a0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype-expected.txt >@@ -0,0 +1,51 @@ >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+ >+PASS Initial value of responseType >+PASS Set responseType to "" when readyState is UNSENT. >+PASS Set responseType to "" when readyState is OPENED. >+PASS Set responseType to "" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "" when readyState is LOADING. >+PASS Set responseType to "" when readyState is DONE. >+PASS Set responseType to "" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "json" when readyState is UNSENT. >+PASS Set responseType to "json" when readyState is OPENED. >+PASS Set responseType to "json" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "json" when readyState is LOADING. >+PASS Set responseType to "json" when readyState is DONE. >+PASS Set responseType to "json" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "json" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "document" when readyState is UNSENT. >+PASS Set responseType to "document" when readyState is OPENED. >+PASS Set responseType to "document" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "document" when readyState is LOADING. >+PASS Set responseType to "document" when readyState is DONE. >+PASS Set responseType to "document" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "document" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "arraybuffer" when readyState is UNSENT. >+PASS Set responseType to "arraybuffer" when readyState is OPENED. >+PASS Set responseType to "arraybuffer" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "arraybuffer" when readyState is LOADING. >+PASS Set responseType to "arraybuffer" when readyState is DONE. >+PASS Set responseType to "arraybuffer" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "arraybuffer" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "blob" when readyState is UNSENT. >+PASS Set responseType to "blob" when readyState is OPENED. >+PASS Set responseType to "blob" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "blob" when readyState is LOADING. >+PASS Set responseType to "blob" when readyState is DONE. >+PASS Set responseType to "blob" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "blob" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "text" when readyState is UNSENT. >+PASS Set responseType to "text" when readyState is OPENED. >+PASS Set responseType to "text" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "text" when readyState is LOADING. >+PASS Set responseType to "text" when readyState is DONE. >+PASS Set responseType to "text" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "text" when readyState is DONE and the sync flag is set. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4a4342945e648fbe594e4083b531e9157d71bfe9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any-expected.txt >@@ -0,0 +1,58 @@ >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.responseType cannot be changed for synchronous HTTP(S) requests made from the window context. >+ >+PASS Initial value of responseType >+PASS Set responseType to "" when readyState is UNSENT. >+PASS Set responseType to "" when readyState is OPENED. >+PASS Set responseType to "" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "" when readyState is LOADING. >+PASS Set responseType to "" when readyState is DONE. >+PASS Set responseType to "" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "json" when readyState is UNSENT. >+PASS Set responseType to "json" when readyState is OPENED. >+PASS Set responseType to "json" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "json" when readyState is LOADING. >+PASS Set responseType to "json" when readyState is DONE. >+PASS Set responseType to "json" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "json" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "document" when readyState is UNSENT. >+PASS Set responseType to "document" when readyState is OPENED. >+PASS Set responseType to "document" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "document" when readyState is LOADING. >+PASS Set responseType to "document" when readyState is DONE. >+PASS Set responseType to "document" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "document" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "arraybuffer" when readyState is UNSENT. >+PASS Set responseType to "arraybuffer" when readyState is OPENED. >+PASS Set responseType to "arraybuffer" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "arraybuffer" when readyState is LOADING. >+PASS Set responseType to "arraybuffer" when readyState is DONE. >+PASS Set responseType to "arraybuffer" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "arraybuffer" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "blob" when readyState is UNSENT. >+PASS Set responseType to "blob" when readyState is OPENED. >+PASS Set responseType to "blob" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "blob" when readyState is LOADING. >+PASS Set responseType to "blob" when readyState is DONE. >+PASS Set responseType to "blob" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "blob" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "text" when readyState is UNSENT. >+PASS Set responseType to "text" when readyState is OPENED. >+PASS Set responseType to "text" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "text" when readyState is LOADING. >+PASS Set responseType to "text" when readyState is DONE. >+PASS Set responseType to "text" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "text" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "nosuchtype" when readyState is UNSENT. >+PASS Set responseType to "nosuchtype" when readyState is OPENED. >+PASS Set responseType to "nosuchtype" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "nosuchtype" when readyState is LOADING. >+PASS Set responseType to "nosuchtype" when readyState is DONE. >+PASS Set responseType to "nosuchtype" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "nosuchtype" when readyState is DONE and the sync flag is set. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..88bd9189ebed0317904fad4240888a23cca272ce >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.js >@@ -0,0 +1,135 @@ >+// META: title=XMLHttpRequest.responseType >+ >+/** >+ * Author: Mathias Bynens <http://mathiasbynens.be/> >+ * Author: Ms2ger <mailto:Ms2ger@gmail.com> >+ * >+ * Spec: <https://xhr.spec.whatwg.org/#the-responsetype-attribute> >+ */ >+test(function() { >+ var xhr = new XMLHttpRequest(); >+ assert_equals(xhr.responseType, ''); >+}, 'Initial value of responseType'); >+ >+var types = ['', 'json', 'document', 'arraybuffer', 'blob', 'text', "nosuchtype"]; >+ >+function isIgnoredType(type) { >+ if (type == "nosuchtype") { >+ return true; >+ } >+ >+ if (type != "document") { >+ return false; >+ } >+ >+ // "document" is ignored only on workers. >+ return GLOBAL.isWorker(); >+} >+ >+function expectedType(type) { >+ if (!isIgnoredType(type)) { >+ return type; >+ } >+ >+ return ""; >+} >+ >+types.forEach(function(type) { >+ test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.responseType = type; >+ assert_equals(xhr.responseType, expectedType(type)); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is UNSENT.'); >+ >+ test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/'); >+ xhr.responseType = type; >+ assert_equals(xhr.responseType, expectedType(type)); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is OPENED.'); >+ >+ async_test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/'); >+ xhr.onreadystatechange = this.step_func(function() { >+ if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) { >+ xhr.responseType = type; >+ assert_equals(xhr.responseType, expectedType(type)); >+ this.done(); >+ } >+ }); >+ xhr.send(); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is HEADERS_RECEIVED.'); >+ >+ async_test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/'); >+ xhr.onreadystatechange = this.step_func(function() { >+ if (xhr.readyState === XMLHttpRequest.LOADING) { >+ if (isIgnoredType(type)) { >+ xhr.responseType = type; >+ } else { >+ assert_throws("InvalidStateError", function() { >+ xhr.responseType = type; >+ }); >+ } >+ assert_equals(xhr.responseType, ""); >+ this.done(); >+ } >+ }); >+ xhr.send(); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is LOADING.'); >+ >+ async_test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/'); >+ xhr.onreadystatechange = this.step_func(function() { >+ if (xhr.readyState === XMLHttpRequest.DONE) { >+ var text = xhr.responseText; >+ assert_not_equals(text, ""); >+ if (isIgnoredType(type)) { >+ xhr.responseType = type; >+ } else { >+ assert_throws("InvalidStateError", function() { >+ xhr.responseType = type; >+ }); >+ } >+ assert_equals(xhr.responseType, ""); >+ assert_equals(xhr.responseText, text); >+ this.done(); >+ } >+ }); >+ xhr.send(); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is DONE.'); >+ >+ // Note: the case of setting responseType first, and then calling synchronous >+ // open(), is tested in open-method-responsetype-set-sync.htm. >+ test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/', false); >+ if (GLOBAL.isWorker() || isIgnoredType(type)) { >+ // Setting responseType on workers is valid even for a sync XHR. >+ xhr.responseType = type; >+ assert_equals(xhr.responseType, expectedType(type)); >+ } else { >+ assert_throws("InvalidAccessError", function() { >+ xhr.responseType = type; >+ }); >+ } >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is OPENED and the sync flag is set.'); >+ >+ test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/', false); >+ xhr.send(); >+ assert_equals(xhr.readyState, XMLHttpRequest.DONE); >+ if (isIgnoredType(type)) { >+ xhr.responseType = type; >+ } else { >+ assert_throws("InvalidStateError", function() { >+ xhr.responseType = type; >+ }); >+ } >+ assert_equals(xhr.responseType, ""); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is DONE and the sync flag is set.'); >+}); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6fa0c7e38c84c493025d5a2758aadc4609a63e65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.worker-expected.txt >@@ -0,0 +1,52 @@ >+ >+PASS Initial value of responseType >+PASS Set responseType to "" when readyState is UNSENT. >+PASS Set responseType to "" when readyState is OPENED. >+PASS Set responseType to "" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "" when readyState is LOADING. >+PASS Set responseType to "" when readyState is DONE. >+PASS Set responseType to "" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "json" when readyState is UNSENT. >+PASS Set responseType to "json" when readyState is OPENED. >+PASS Set responseType to "json" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "json" when readyState is LOADING. >+PASS Set responseType to "json" when readyState is DONE. >+PASS Set responseType to "json" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "json" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "document" when readyState is UNSENT. >+PASS Set responseType to "document" when readyState is OPENED. >+PASS Set responseType to "document" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "document" when readyState is LOADING. >+PASS Set responseType to "document" when readyState is DONE. >+PASS Set responseType to "document" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "document" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "arraybuffer" when readyState is UNSENT. >+PASS Set responseType to "arraybuffer" when readyState is OPENED. >+PASS Set responseType to "arraybuffer" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "arraybuffer" when readyState is LOADING. >+PASS Set responseType to "arraybuffer" when readyState is DONE. >+PASS Set responseType to "arraybuffer" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "arraybuffer" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "blob" when readyState is UNSENT. >+PASS Set responseType to "blob" when readyState is OPENED. >+PASS Set responseType to "blob" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "blob" when readyState is LOADING. >+PASS Set responseType to "blob" when readyState is DONE. >+PASS Set responseType to "blob" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "blob" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "text" when readyState is UNSENT. >+PASS Set responseType to "text" when readyState is OPENED. >+PASS Set responseType to "text" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "text" when readyState is LOADING. >+PASS Set responseType to "text" when readyState is DONE. >+PASS Set responseType to "text" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "text" when readyState is DONE and the sync flag is set. >+PASS Set responseType to "nosuchtype" when readyState is UNSENT. >+PASS Set responseType to "nosuchtype" when readyState is OPENED. >+PASS Set responseType to "nosuchtype" when readyState is HEADERS_RECEIVED. >+PASS Set responseType to "nosuchtype" when readyState is LOADING. >+PASS Set responseType to "nosuchtype" when readyState is DONE. >+PASS Set responseType to "nosuchtype" when readyState is OPENED and the sync flag is set. >+PASS Set responseType to "nosuchtype" when readyState is DONE and the sync flag is set. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ade604417a92e4781e533e97d8b013e52fe654f6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.html >@@ -0,0 +1,96 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>XMLHttpRequest.responseType</title> >+<link rel="author" title="Mathias Bynens" href="http://mathiasbynens.be/"> >+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> >+<link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+test(function() { >+ var xhr = new XMLHttpRequest(); >+ assert_equals(xhr.responseType, ''); >+}, 'Initial value of responseType'); >+ >+var types = ['', 'json', 'document', 'arraybuffer', 'blob', 'text']; >+types.forEach(function(type) { >+ test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.responseType = type; >+ assert_equals(xhr.responseType, type); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is UNSENT.'); >+ >+ test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/'); >+ xhr.responseType = type; >+ assert_equals(xhr.responseType, type); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is OPENED.'); >+ >+ async_test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/'); >+ xhr.onreadystatechange = this.step_func(function() { >+ if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) { >+ xhr.responseType = type; >+ assert_equals(xhr.responseType, type); >+ this.done(); >+ } >+ }); >+ xhr.send(); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is HEADERS_RECEIVED.'); >+ >+ async_test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/'); >+ xhr.onreadystatechange = this.step_func(function() { >+ if (xhr.readyState === XMLHttpRequest.LOADING) { >+ assert_throws("InvalidStateError", function() { >+ xhr.responseType = type; >+ }); >+ assert_equals(xhr.responseType, ""); >+ this.done(); >+ } >+ }); >+ xhr.send(); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is LOADING.'); >+ >+ async_test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/'); >+ xhr.onreadystatechange = this.step_func(function() { >+ if (xhr.readyState === XMLHttpRequest.DONE) { >+ assert_throws("InvalidStateError", function() { >+ xhr.responseType = type; >+ }); >+ assert_equals(xhr.responseType, ""); >+ this.done(); >+ } >+ }); >+ xhr.send(); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is DONE.'); >+ >+ // Note: the case of setting responseType first, and then calling synchronous >+ // open(), is tested in open-method-responsetype-set-sync.htm. >+ test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/', false); >+ assert_throws("InvalidAccessError", function() { >+ xhr.responseType = type; >+ }); >+ assert_equals(xhr.responseType, ""); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is OPENED and the sync flag is set.'); >+ >+ test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open('get', '/', false); >+ xhr.send(); >+ assert_equals(xhr.readyState, XMLHttpRequest.DONE); >+ assert_throws("InvalidStateError", function() { >+ xhr.responseType = type; >+ }); >+ assert_equals(xhr.responseType, ""); >+ }, 'Set responseType to ' + format_value(type) + ' when readyState is DONE and the sync flag is set.'); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responseurl-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseurl-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6e9a051df5042d32dbfd8ec34a6976835e3e3e9d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseurl-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS 404 response has proper responseURL >+PASS Redirected response has proper responseURL >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responseurl.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseurl.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b730e045d8d5cf8799d023521cea99f3e18e0809 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responseurl.html >@@ -0,0 +1,37 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: responseURL test</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responseurl-attribute"/> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ assert_equals(client.responseURL, "") >+ >+ client.open("GET", "foo.html", false) >+ client.send() >+ >+ expected = location.href.replace(/[^/]*$/, 'foo.html') >+ assert_equals(client.status, 404) >+ assert_equals(client.responseURL, expected) >+ }, "404 response has proper responseURL") >+ test(function() { >+ var client = new XMLHttpRequest() >+ assert_equals(client.responseURL, "") >+ >+ target = "image.gif" >+ client.open("GET", "resources/redirect.py?location=" + target, false) >+ client.send() >+ >+ expected = location.href.replace(/[^/]*$/, "resources/" + target) >+ assert_equals(client.status, 200) >+ assert_equals(client.responseURL, expected) >+ }, "Redirected response has proper responseURL") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-basic-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..faec357ed6fe75c5a2b53a3715b9a0941d18bc7b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-basic-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: responseXML basic test >+PASS responseXML on empty response documents >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-basic.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-basic.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a3ce7b5b544296944d8721e80fd17139bb7bbc40 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-basic.htm >@@ -0,0 +1,33 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: responseXML basic test</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[4]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#document-response-entity-body" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[6] following::ol[1]/li[10]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ assert_equals(client.responseXML, null) >+ client.open("GET", "resources/well-formed.xml", false) >+ assert_equals(client.responseXML, null) >+ client.send(null) >+ assert_equals(client.responseXML.documentElement.localName, "html", 'localName is html') >+ assert_equals(client.responseXML.documentElement.childNodes.length, 5, 'childNodes is 5') >+ assert_equals(client.responseXML.getElementById("n1").localName, client.responseXML.documentElement.childNodes[1].localName) >+ assert_equals(client.responseXML.getElementById("n2"), client.responseXML.documentElement.childNodes[3], 'getElementById("n2")') >+ assert_equals(client.responseXML.getElementsByTagName("p")[1].namespaceURI, "namespacesarejuststrings", 'namespaceURI') >+ }) >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/status.py?type=application/xml", false) >+ client.send(null) >+ assert_equals(client.responseXML, null) >+ }, 'responseXML on empty response documents') >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-document-properties-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-document-properties-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..fec030df5bccc9a1fc2e28cd4a901e0467a5573f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-document-properties-expected.txt >@@ -0,0 +1,26 @@ >+ >+FAIL domain assert_equals: expected (undefined) undefined but got (string) "localhost" >+PASS URL >+PASS documentURI >+PASS baseURI >+PASS referrer >+PASS title >+PASS contentType >+FAIL readyState assert_equals: expected "complete" but got "interactive" >+PASS location >+PASS defaultView >+FAIL body assert_equals: expected (undefined) undefined but got (object) null >+FAIL images assert_equals: expected (undefined) undefined but got (object) object "[object HTMLCollection]" >+PASS doctype >+FAIL forms assert_equals: expected (undefined) undefined but got (object) object "[object HTMLCollection]" >+FAIL all assert_equals: expected undefined but got [object HTMLAllCollection] >+FAIL links assert_equals: expected (undefined) undefined but got (object) object "[object HTMLCollection]" >+PASS cookie >+FAIL Test document URL properties after redirect assert_equals: expected "http://localhost:8800/XMLHttpRequest/resources/well-formed.xml" but got "http://localhost:8800/XMLHttpRequest/resources/redirect.py?location=well-formed.xml" >+FAIL Test document URL properties of document with <base> after redirect assert_equals: expected "http://localhost:8800/XMLHttpRequest/resources/base.xml" but got "http://localhost:8800/XMLHttpRequest/resources/redirect.py?location=base.xml" >+PASS lastModified set to time of response if no HTTP header provided >+FAIL lastModified set to related HTTP header if provided assert_equals: expected 1505770096000 but got 1505744052000 >+PASS cookie (after setting it) >+PASS styleSheets >+PASS implementation >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-document-properties.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-document-properties.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..b008348e58f0f8751d9d1b83531e843af8239a6d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-document-properties.htm >@@ -0,0 +1,109 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: responseXML document properties</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var timePreXHR = Math.floor(new Date().getTime(new Date().getTime() - 3000) / 1000); // three seconds ago, in case there's clock drift >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/well-formed.xml", false) >+ client.send(null) >+ var responseURL = new URL('resources/well-formed.xml', location.href).href >+ var expected = { >+ domain:undefined, >+ URL:responseURL, >+ documentURI:responseURL, >+ baseURI:responseURL, >+ referrer:'', >+ title:'', >+ contentType:'application/xml', >+ readyState:'complete', >+ location:null, >+ defaultView:null, >+ body:null, >+ doctype:null, >+ all:undefined, >+ cookie:'' >+ } >+ >+ for (var name in expected) { >+ runTest(name, expected[name]) >+ } >+ >+ function runTest(name, value){ >+ test(function(){ >+ assert_equals(client.responseXML[name], value) >+ }, name) >+ } >+ >+ async_test(t => { >+ const client = new XMLHttpRequest(); >+ client.open("GET", "resources/redirect.py?location=well-formed.xml"); >+ client.send(); >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseXML.URL, responseURL); >+ assert_equals(client.responseXML.baseURI, responseURL); >+ }); >+ }, "Test document URL properties after redirect"); >+ >+ async_test(t => { >+ const client = new XMLHttpRequest(); >+ client.open("GET", "resources/redirect.py?location=base.xml"); >+ client.send(); >+ client.onload = t.step_func_done(() => { >+ const localResponseURL = new URL('resources/base.xml', location.href).href; >+ assert_equals(client.responseXML.URL, localResponseURL); >+ assert_equals(client.responseXML.baseURI, 'https://example.com/'); >+ client.responseXML.documentElement.remove(); >+ assert_equals(client.responseXML.baseURI, localResponseURL); >+ const newBase = document.createElement("base"), >+ newBaseURL = "https://elsewhere.example/"; >+ newBase.href = "https://elsewhere.example/"; >+ client.responseXML.appendChild(newBase); >+ assert_equals(client.responseXML.baseURI, newBaseURL); >+ newBase.remove(); >+ document.head.appendChild(newBase); >+ assert_equals(client.responseXML.baseURI, localResponseURL); >+ newBase.remove(); >+ }); >+ }, "Test document URL properties of document with <base> after redirect"); >+ >+ test(function() { >+ var lastModified = Math.floor(new Date(client.responseXML.lastModified).getTime() / 1000); >+ var now = Math.floor(new Date().getTime(new Date().getTime() + 3000) / 1000); // three seconds from now, in case there's clock drift >+ assert_greater_than_equal(lastModified, timePreXHR); >+ assert_less_than_equal(lastModified, now); >+ }, 'lastModified set to time of response if no HTTP header provided') >+ >+ test(function() { >+ var client2 = new XMLHttpRequest() >+ client2.open("GET", "resources/last-modified.py", false) >+ client2.send(null) >+ assert_equals((new Date(client2.getResponseHeader('Last-Modified'))).getTime(), (new Date(client2.responseXML.lastModified)).getTime()) >+ }, 'lastModified set to related HTTP header if provided') >+ >+ test(function() { >+ client.responseXML.cookie = "thisshouldbeignored" >+ assert_equals(client.responseXML.cookie, "") >+ }, 'cookie (after setting it)') >+ >+ var objectProps = [ >+ "styleSheets", >+ "implementation", >+ "images", >+ "forms", >+ "links", >+ ]; >+ >+ for (let prop of objectProps) { >+ test(function() { >+ assert_equals(typeof(client.responseXML[prop]), "object") >+ }, prop + " should be an object") >+ } >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-get-twice-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-get-twice-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..fe9a581705d14caf3b6b7825958951fa39975eb2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-get-twice-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS Getting response, then response >+PASS Getting responseXML, then responseXML >+PASS Getting responseXML, then response >+PASS Getting response, then responseXML >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-get-twice.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-get-twice.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..e86a6d59e51ecef0ba0a07e7c53e586ac48a62ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-get-twice.htm >@@ -0,0 +1,66 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title></title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ async_test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/well-formed.xml") >+ client.responseType = "document" >+ assert_equals(client.responseType, "document") >+ client.send() >+ client.onload = this.step_func_done(function() { >+ var first = client.response >+ var second = client.response >+ assert_not_equals(first, null) >+ assert_not_equals(second, null) >+ assert_equals(first, second) >+ }) >+ }, "Getting response, then response") >+ >+ async_test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/well-formed.xml") >+ client.responseType = "document" >+ assert_equals(client.responseType, "document") >+ client.send() >+ client.onload = this.step_func_done(function() { >+ var first = client.responseXML >+ var second = client.responseXML >+ assert_not_equals(first, null) >+ assert_not_equals(second, null) >+ assert_equals(first, second) >+ }) >+ }, "Getting responseXML, then responseXML") >+ >+ async_test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/well-formed.xml") >+ client.responseType = "document" >+ assert_equals(client.responseType, "document") >+ client.send() >+ client.onload = this.step_func_done(function() { >+ var first = client.responseXML >+ var second = client.response >+ assert_not_equals(first, null) >+ assert_not_equals(second, null) >+ assert_equals(first, second) >+ }) >+ }, "Getting responseXML, then response") >+ >+ async_test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/well-formed.xml") >+ client.responseType = "document" >+ assert_equals(client.responseType, "document") >+ client.send() >+ client.onload = this.step_func_done(function() { >+ var first = client.response >+ var second = client.responseXML >+ assert_not_equals(first, null) >+ assert_not_equals(second, null) >+ assert_equals(first, second) >+ }) >+ }, "Getting response, then responseXML") >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-media-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-media-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7b2a881b9717a51e1b93c6ef8d2a3f507fe878e3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-media-type-expected.txt >@@ -0,0 +1,17 @@ >+ >+PASS XMLHttpRequest: responseXML MIME type tests ('', should parse) >+PASS XMLHttpRequest: responseXML MIME type tests ('text/html', should not parse) >+FAIL XMLHttpRequest: responseXML MIME type tests ('bogus', should parse) null is not an object (evaluating 'client.responseXML.documentElement') >+FAIL XMLHttpRequest: responseXML MIME type tests ('bogus+xml', should parse) null is not an object (evaluating 'client.responseXML.documentElement') >+PASS XMLHttpRequest: responseXML MIME type tests ('text/plain;+xml', should not parse) >+PASS XMLHttpRequest: responseXML MIME type tests ('text/plainxml', should not parse) >+PASS XMLHttpRequest: responseXML MIME type tests ('video/x-awesome+xml', should parse) >+PASS XMLHttpRequest: responseXML MIME type tests ('video/x-awesome', should not parse) >+PASS XMLHttpRequest: responseXML MIME type tests ('text/xml', should parse) >+FAIL XMLHttpRequest: responseXML MIME type tests ('application', should parse) null is not an object (evaluating 'client.responseXML.documentElement') >+FAIL XMLHttpRequest: responseXML MIME type tests ('text/xsl', should not parse) assert_equals: expected null but got Document node with 1 child >+PASS XMLHttpRequest: responseXML MIME type tests ('text/plain', should not parse) >+PASS XMLHttpRequest: responseXML MIME type tests ('application/rdf', should not parse) >+PASS XMLHttpRequest: responseXML MIME type tests ('application/xhtml+xml', should parse) >+PASS XMLHttpRequest: responseXML MIME type tests ('image/svg+xml', should parse) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-media-type.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-media-type.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ece413d51b89e83681f50ced7a35f9d65899ddcf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-media-type.htm >@@ -0,0 +1,41 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: responseXML MIME type tests</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[4]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#document-response-entity-body" data-tested-assertations="following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[10]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(type, succeed) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/status.py?content=<x><\/x>&type=" + encodeURIComponent(type), false) >+ client.send(null) >+ if(!succeed) >+ assert_equals(client.responseXML, null) >+ else >+ assert_equals(client.responseXML.documentElement.localName, "x") >+ }, document.title + " ('" + type + "', should "+(succeed?'':'not')+" parse)") >+ } >+ request("", true) >+ request("text/html", false) >+ request("bogus", true) >+ request("bogus+xml", true) >+ request("text/plain;+xml", false) >+ request("text/plainxml", false) >+ request("video/x-awesome+xml", true) >+ request("video/x-awesome", false) >+ request("text/xml", true) >+ request("application", true) >+ request("text/xsl", false) >+ request("text/plain", false) >+ request("application/rdf", false) >+ request("application/xhtml+xml", true) >+ request("image/svg+xml", true) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-document-types-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-document-types-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7b0e10ef5c9b0563fb2f9d75fd9c7c6f1c764726 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-document-types-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS XMLHttpRequest: responseXML/responseText on other responseType (arraybuffer) >+PASS XMLHttpRequest: responseXML/responseText on other responseType (blob) >+PASS XMLHttpRequest: responseXML/responseText on other responseType (json) >+PASS XMLHttpRequest: responseXML/responseText on other responseType (text) >+PASS XMLHttpRequest: responseXML/responseText on other responseType (document) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-document-types.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-document-types.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..84d90a8d35ae1d3da3494cd2681ed1ef8b7debc6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-document-types.htm >@@ -0,0 +1,45 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: responseXML/responseText on other responseType</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(type) { >+ var test = async_test(document.title+' ('+type+')') >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.responseType = type >+ client.open("GET", "resources/well-formed.xml", true) >+ client.onload = function(){ >+ test.step(function(){ >+ if(type !== 'document'){ >+ assert_throws("InvalidStateError", function() { >+ var x = client.responseXML; >+ }, 'responseXML throw for '+type) >+ } >+ if(type !== 'text'){ >+ assert_throws("InvalidStateError", function() { >+ var x = client.responseText; >+ }, 'responseText throws for '+type) >+ } >+ test.done() >+ }) >+ } >+ client.send(null) >+ }) >+ } >+ request("arraybuffer") >+ request("blob") >+ request("json") >+ request("text") >+ request("document") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-well-formed-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-well-formed-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..84426bb254b3be2f54d91a727bda9181d01f22fe >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-well-formed-expected.txt >@@ -0,0 +1,9 @@ >+ >+PASS XMLHttpRequest: responseXML non well-formed tests >+PASS XMLHttpRequest: responseXML non well-formed tests 1 >+PASS XMLHttpRequest: responseXML non well-formed tests 2 >+PASS XMLHttpRequest: responseXML non well-formed tests 3 >+PASS XMLHttpRequest: responseXML non well-formed tests 4 >+PASS XMLHttpRequest: responseXML non well-formed tests 5 >+PASS XMLHttpRequest: responseXML non well-formed tests 6 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-well-formed.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-well-formed.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..216da81706d4fcd166c31cb3366dd697fe4b52ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-well-formed.htm >@@ -0,0 +1,30 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: responseXML non well-formed tests</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[4]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#document-response-entity-body" data-tested-assertations="following::ol[1]/li[6] following::ol[1]/li[10]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(content) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/status.py?type=text/xml&content=" + encodeURIComponent(content), false) >+ client.send(null) >+ assert_equals(client.responseXML, null) >+ }) >+ } >+ request("<x") >+ request("<x></x") >+ request("<x>&</x>") >+ request("<x><y></x></y>") // misnested tags >+ request("<x></x><y></y>") // two root elements is not allowed >+ request("<x> <![CDATA[ foobar ]></x>") // CDATA should end with ]]> >+ request("<x> <!CDATA[ foobar ]]></x>") // CDATA should start with <![ >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/security-consideration.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/security-consideration.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1012aa259196c60c47cca09f2ca86eeebb544c13 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/security-consideration.sub-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8801/xhr/resources/img.jpg due to access control checks. >+ >+PASS ProgressEvent: security consideration >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/security-consideration.sub.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/security-consideration.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a364e2cb8da47a698763de161410286ac6bcbfd4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/security-consideration.sub.html >@@ -0,0 +1,36 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>ProgressEvent: security consideration</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#security-considerations" data-tested-assertations="/following-sibling::p" /> >+ <link rel="help" href="https://fetch.spec.whatwg.org/#http-fetch" data-tested-assertations="/following-sibling::ol[1]/li[3]/ol[1]/li[6]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ async_test(function() { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.onprogress = this.unreached_func("MUST NOT dispatch progress event."); >+ xhr.onload = this.unreached_func("MUST NOT dispatch load event."); >+ xhr.onerror = this.step_func(function(pe) { >+ assert_equals(pe.type, "error"); >+ assert_equals(pe.loaded, 0, "loaded is zero."); >+ assert_false(pe.lengthComputable, "lengthComputable is false."); >+ assert_equals(pe.total, 0, "total is zero."); >+ }); >+ xhr.onloadend = this.step_func(function(pe) { >+ assert_equals(pe.type, "loadend"); >+ assert_equals(pe.loaded, 0, "loaded is zero."); >+ assert_false(pe.lengthComputable, "lengthComputable is false."); >+ assert_equals(pe.total, 0, "total is zero."); >+ this.done(); >+ }); >+ xhr.open("GET", "http://{{host}}:{{ports[http][1]}}/xhr/resources/img.jpg", true); >+ xhr.send(null); >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e0fcb732667377270a2e578e23b913e97a45822d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: send() - Accept >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept-language-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept-language-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..aa3f9ba1d4b6ef3ca3b91e222fe5501fb07c67c1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept-language-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS Send "sensible" default value, whatever that means >+PASS XMLHttpRequest: send() - Accept-Language >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept-language.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept-language.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..737b5c2a0ed71a89a4bea8623f05f3bb7d500548 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept-language.htm >@@ -0,0 +1,27 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Accept-Language</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method"> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open('GET', 'resources/inspect-headers.py?filter_name=accept-language', false) >+ client.send(null) >+ assert_regexp_match(client.responseText, /Accept-Language:\s.+/) >+ }, 'Send "sensible" default value, whatever that means') >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/inspect-headers.py?filter_name=accept-language", false) >+ client.setRequestHeader("Accept-Language", "x-GameSpeak") >+ client.send(null) >+ assert_equals(client.responseText, "Accept-Language: x-GameSpeak\n") >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..2731eb6be18d0d7ff5dff0c69d4bf902528407ff >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept.htm >@@ -0,0 +1,24 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Accept</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(text(),'*/*')]/.. following::code[contains(text(),'Accept')]/.. following::code[contains(text(),'Accept')]/../following::ul[1]/li[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/accept.py", false) >+ client.send(null) >+ assert_equals(client.responseText, "*/*") >+ client.open("GET", "resources/accept.py", false) >+ client.setRequestHeader("Accept", "x-something/vague, text/html5") >+ client.send(null) >+ assert_equals(client.responseText, "x-something/vague, text/html5") >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-after-setting-document-domain-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-after-setting-document-domain-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a9e305883979b5a4d61a8ee05527f8ba17becc81 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-after-setting-document-domain-expected.txt >@@ -0,0 +1,7 @@ >+Blocked access to external URL http://www2.localhost:8800/xhr/resources/send-after-setting-document-domain-window-1.htm >+Blocked access to external URL http://www2.localhost:8800/xhr/resources/send-after-setting-document-domain-window-2.htm >+ >+Harness Error (TIMEOUT), message = null >+ >+TIMEOUT All tests ran Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-after-setting-document-domain.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-after-setting-document-domain.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..49eeb955533c0e5132b3cc2ab3b6263f594896ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-after-setting-document-domain.htm >@@ -0,0 +1,39 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() with document.domain set</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[2]/ol[1]/li[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test_base_url = location.protocol+'//www2.'+location.host+"/xhr/resources/", >+ test_windows = [ >+ window.open(test_base_url + "send-after-setting-document-domain-window-1.htm"), >+ window.open(test_base_url + "send-after-setting-document-domain-window-2.htm"), >+ ], >+ num_tests_left = test_windows.length; >+ >+ async_test(function(wrapper_test) { >+ window.addEventListener("message", function(evt) { >+ // run a shadow test that just forwards the results >+ async_test(function(test) { >+ assert_true(evt.data.passed, evt.data.message); >+ test.done(); >+ }, evt.data.name); >+ >+ // after last result comes in, close all test >+ // windows and complete the wrapper test. >+ if (--num_tests_left == 0) { >+ for (var i=0; i<test_windows.length; ++i) { >+ test_windows[i].close(); >+ } >+ wrapper_test.done(); >+ } >+ }, false); >+ }, "All tests ran"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..fd752b80e7119e20ff5bdf09270d6b0f0570a946 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt >@@ -0,0 +1,5 @@ >+Blocked access to external URL http://www1.localhost:8800/xhr/resources/auth1/corsenabled.py >+CONSOLE MESSAGE: line 31: XMLHttpRequest cannot load http://www1.localhost:8800/xhr/resources/auth1/corsenabled.py due to access control checks. >+ >+PASS XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-not-enabled-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-not-enabled-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0daea78b38c1169a4e97a1aaf7187a5476f9a23a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-not-enabled-expected.txt >@@ -0,0 +1,4 @@ >+Blocked access to external URL http://www1.localhost:8800/xhr/resources/auth1/auth.py >+ >+PASS XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-not-enabled.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-not-enabled.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..070b2ba321256b6bd772436a5addfd09c0b3ff5d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-not-enabled.htm >@@ -0,0 +1,28 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/utils.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[9]/ol[1]/li[1] following::ol[1]/li[9]/ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest(), >+ urlstart = 'www1.'+location.host + location.pathname.replace(/\/[^\/]*$/, '/') >+ client.withCredentials = true >+ user = token() >+ client.open("GET", location.protocol+'//'+urlstart + "resources/auth1/auth.py", false, user, 'pass') >+ client.setRequestHeader("x-user", user) >+ assert_throws("NetworkError", function(){ client.send(null) }) >+ assert_equals(client.responseText, '') >+ assert_equals(client.status, 0) >+ assert_equals(client.getResponseHeader('x-challenge'), null) >+ }, document.title) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..fcacdd5fec4d991e0dee7ab1fe1957c2725f5982 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors.htm >@@ -0,0 +1,35 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[9]/ol[1]/li[1] following::ol[1]/li[9]/ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ urlstart = 'www1.'+location.host + location.pathname.replace(/\/[^\/]*$/, '/') >+ client.withCredentials = true >+ client.open("GET", location.protocol+'//'+urlstart + "resources/auth1/corsenabled.py", true, 'user', 'pass') >+ client.setRequestHeader("x-user", 'user') >+ client.setRequestHeader("x-pass", 'pass') >+ client.onreadystatechange = function(){ >+ if (client.readyState === 4) { >+ test.step(function(){ >+ assert_equals(client.responseText, '') >+ assert_equals(client.status, 0) >+ assert_equals(client.getResponseHeader('x-challenge'), null) >+ test.done() >+ }) >+ } >+ } >+ client.send(null) >+ }, document.title) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9af3489299509641f0afaf4025c98cad034201bd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: send() - "Basic" authenticated requests with user name and password passed to open() >+Note: this test will only work as expected once per browsing session. Restart browser to re-test. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-repeat-no-args-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-repeat-no-args-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d84cd538f670a468c7310d715197fde960e40ed9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-repeat-no-args-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: send() - "Basic" authenticated requests with user name and password passed to open() in first request, without in second >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-repeat-no-args.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-repeat-no-args.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..464d69cf789ecff6309c0866929e566e1c2703a7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-repeat-no-args.htm >@@ -0,0 +1,33 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - "Basic" authenticated requests with user name and password passed to open() in first request, without in second</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/utils.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[9]/ol[1]/li[1] following::ol[1]/li[9]/ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest(), >+ urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >+ user = token() >+ client.open("GET", location.protocol+'//'+urlstart + "resources/auth1/auth.py", false, user, 'pass') >+ client.setRequestHeader("x-user", user) >+ client.send(null) >+ // Repeat request but *without* credentials in the open() call. >+ // Is the UA supposed to cache credentials from above request and use them? Yes. >+ client.open("GET", location.protocol+'//'+urlstart + "resources/auth1/auth.py", false) >+ client.setRequestHeader("x-user", user) >+ client.send(null) >+ >+ assert_equals(client.responseText, user + "\n" + 'pass') >+ //assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT') >+ >+ }, document.title) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-and-arguments-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-and-arguments-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..58d5d277570d2ec5620930c59c86392fa938e9e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-and-arguments-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader() and open() arguments (asserts header wins) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-and-arguments.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-and-arguments.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..9915e8821c9a81f834de1e64d90aefb163fe6104 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-and-arguments.htm >@@ -0,0 +1,36 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader() and open() arguments (asserts header wins)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/utils.js"></script> >+ <!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. --> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >+ user = token() >+ client.open("GET", location.protocol+'//'+urlstart + "resources/auth9/auth.py", false, 'open-' + user, 'open-pass') >+ client.setRequestHeader("x-user", user) >+ client.setRequestHeader('Authorization', 'Basic ' + btoa(user + ":pass")) >+ client.onreadystatechange = function () { >+ if (client.readyState < 4) {return} >+ test.step( function () { >+ assert_equals(client.responseText, user + '\npass') >+ assert_equals(client.status, 200) >+ assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT') >+ test.done() >+ }) >+ } >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-existing-session-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-existing-session-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..565f5e497032880e6c478403ea2679e03438e4b7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-existing-session-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader() when there is an existing session assert_equals: expected "e6d87d1d-ef01-44fa-a52f-cb1c1942f5cc\npass" but got "78f6adf0-a739-4e17-90dc-028058541ba5\nopen-pass" >+Note: this test will only work as expected once per browsing session. Restart browser to re-test. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-existing-session.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-existing-session.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..6e68f098cf514587d1beda5291cf9836298cefc7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-existing-session.htm >@@ -0,0 +1,53 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader() when there is an existing session</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/utils.js"></script> >+ <!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. --> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/') >+ // Initial request: no information is known to the UA about whether resources/auth4/auth.py requires authentication, >+ // hence it first sends a normal request, gets a 401 response that will not be passed on to the JS, and sends a new >+ // request with an Authorization header before returning >+ // (Note: this test will only work as expected if run once per browsing session) >+ var open_user = token() >+ client.open("GET", location.protocol+'//'+urlstart + "resources/auth4/auth.py", false, open_user, 'open-pass') >+ client.setRequestHeader('X-User', open_user) >+ // initial request - this will get a 401 response and re-try with HTTP auth >+ client.send(null) >+ assert_true(client.responseText == (open_user + '\nopen-pass'), 'responseText should contain the right user and password') >+ assert_equals(client.status, 200) >+ assert_equals(client.getResponseHeader('x-challenge'), 'DID') >+ // Another request, this time user,pass is omitted and an Authorization header set explicitly >+ // Here the URL is known to require authentication (from the request above), and the UA has cached open-user:open-pass credentials >+ // However, these session credentials should now be overridden by the setRequestHeader() call so the UA should immediately >+ // send basic Authorization header with credentials user:pass. (This part is perhaps not well specified anywhere) >+ var user = token(); >+ client.open("GET", location.protocol+'//'+urlstart + "resources/auth4/auth.py", true) >+ client.setRequestHeader("x-user", user) >+ client.setRequestHeader('Authorization', 'Basic ' + btoa(user + ":pass")) >+ client.onreadystatechange = function () { >+ if (client.readyState < 4) {return} >+ test.step( function () { >+ assert_equals(client.responseText, user + '\npass') >+ assert_equals(client.status, 200) >+ assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT') >+ test.done() >+ } ) >+ } >+ client.send(null) >+ }) >+ </script> >+ <p>Note: this test will only work as expected once per browsing session. Restart browser to re-test.</p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..728a8dfeac25e04850e8b5240ecd476c3765b33d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..84d0dd6b2cd4cf8ee502be30b73e6d128c77a106 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader.htm >@@ -0,0 +1,36 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/utils.js"></script> >+ <!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. --> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >+ user = token() >+ client.open("GET", location.protocol+'//'+urlstart + "resources/auth2/auth.py", false) >+ client.setRequestHeader("x-user", user) >+ client.setRequestHeader('Authorization', 'Basic ' + btoa(user + ":pass")) >+ client.onreadystatechange = function () { >+ if (client.readyState < 4) {return} >+ test.step( function () { >+ assert_equals(client.responseText, user + '\npass') >+ assert_equals(client.status, 200) >+ assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT') >+ test.done() >+ } ) >+ } >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ae3ee571141172bc4b0432fe32811359a371740e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic.htm >@@ -0,0 +1,27 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - "Basic" authenticated requests with user name and password passed to open()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/utils.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[9]/ol[1]/li[1] following::ol[1]/li[9]/ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest(), >+ urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >+ user = token(); >+ client.open("GET", location.protocol+'//'+urlstart + "resources/auth1/auth.py", false, user, 'pass') >+ client.setRequestHeader("x-user", user) >+ client.send(null) >+ assert_equals(client.responseText, user + "\n" + 'pass') >+ assert_equals(client.getResponseHeader('x-challenge'), 'DID') >+ }, document.title) >+ </script> >+ <p>Note: this test will only work as expected once per browsing session. Restart browser to re-test.</p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-competing-names-passwords-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-competing-names-passwords-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c503dd5fee4df0fcdaa42b279af9e26082908c1f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-competing-names-passwords-expected.txt >@@ -0,0 +1,15 @@ >+ >+FAIL XMLHttpRequest user/pass options: user in open() assert_equals: responseText should contain the right user and password expected "b1a2c1c7-4611-4121-8876-320c6d462f58\n" but got "FAIL (did not authorize)" >+PASS XMLHttpRequest user/pass options: user/pass in open() >+PASS XMLHttpRequest user/pass options: another user/pass in open(); must override cached credentials from previous test >+PASS XMLHttpRequest user/pass options: pass in URL, user in open() >+PASS XMLHttpRequest user/pass options: pass in URL, user/pass in open() >+PASS XMLHttpRequest user/pass options: user in URL >+FAIL XMLHttpRequest user/pass options: user in URL, pass in open() assert_equals: responseText should contain the right user and password expected "a89b5bdc-8844-4e0c-8b67-bccb90cc5006\n8ae16e77-30e0-4758-8c85-ddbac8ff9923" but got "a89b5bdc-8844-4e0c-8b67-bccb90cc5006\n" >+PASS XMLHttpRequest user/pass options: user/pass in URL >+PASS XMLHttpRequest user/pass options: user in URL and open() >+PASS XMLHttpRequest user/pass options: user in URL; user/pass in open() >+PASS XMLHttpRequest user/pass options: user/pass in URL; user in open() >+FAIL XMLHttpRequest user/pass options: user/pass in URL; pass in open() assert_equals: responseText should contain the right user and password expected "7add18d7-4945-4a7c-b1d3-e50eff2f65c8\nbce2a8d7-ce76-48be-8c8f-ff29647b78ff" but got "7add18d7-4945-4a7c-b1d3-e50eff2f65c8\nbcf673a4-b893-48cd-95ec-3bd4c0d72a84" >+PASS XMLHttpRequest user/pass options: user/pass in URL and open() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-competing-names-passwords.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-competing-names-passwords.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..bc6755c7d6d92860ee3111329472255edf96aab0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-competing-names-passwords.htm >@@ -0,0 +1,50 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - "Basic" authenticated requests with competing user name/password options</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(user1, pass1, user2, pass2, name) { >+ test(function() { >+ const client = new XMLHttpRequest(), >+ userwin = user2 || user1, >+ passwin = pass2 || pass1; >+ let urlstart = ""; >+ if (user1 || pass1) { >+ urlstart = "http://"; >+ if (user1) { >+ urlstart += user1; >+ } >+ if (pass1) { >+ urlstart += ":" + pass1; >+ } >+ urlstart += "@" + location.host + location.pathname.replace(/\/[^\/]*$/, '/'); >+ } >+ client.open("GET", urlstart + "resources/authentication.py", false, user2, pass2); >+ client.setRequestHeader("x-user", userwin); >+ client.send(null); >+ assert_equals(client.responseText, ((userwin||'') + "\n" + (passwin||'')), 'responseText should contain the right user and password'); >+ }, "XMLHttpRequest user/pass options: " + name); >+ } >+ // Cannot have just a password >+ request(null, null, token(), null, "user in open()"); >+ request(null, null, token(), token(), "user/pass in open()"); >+ request(null, null, token(), token(), "another user/pass in open(); must override cached credentials from previous test"); >+ request(null, token(), token(), null, "pass in URL, user in open()"); >+ request(null, token(), token(), token(), "pass in URL, user/pass in open()"); >+ request(token(), null, null, null, "user in URL"); >+ request(token(), null, null, token(), "user in URL, pass in open()"); >+ request(token(), token(), null, null, "user/pass in URL"); >+ request(token(), null, token(), null, "user in URL and open()"); >+ request(token(), null, token(), token(), "user in URL; user/pass in open()"); >+ request(token(), token(), token(), null, "user/pass in URL; user in open()"); >+ request(token(), token(), null, token(), "user/pass in URL; pass in open()"); >+ request(token(), token(), token(), token(), "user/pass in URL and open()"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-basic-setrequestheader-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-basic-setrequestheader-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b74e48cc8a869d00f1f23b3c249c99e38c848db9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-basic-setrequestheader-expected.txt >@@ -0,0 +1,4 @@ >+Blocked access to external URL http://www1.localhost:8800/xhr/resources/auth2/corsenabled.py >+ >+FAIL XMLHttpRequest: send() - "Basic" authenticated CORS request using setRequestHeader() (expects to succeed) A network error occurred. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-basic-setrequestheader.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-basic-setrequestheader.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..de9c5e543038c3527e3fb55b0e8e75728ce0f0a5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-basic-setrequestheader.htm >@@ -0,0 +1,30 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - "Basic" authenticated CORS request using setRequestHeader() (expects to succeed)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/utils.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ async_test(test => { >+ var client = new XMLHttpRequest(), >+ urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >+ user = token() >+ client.open("GET", location.protocol+'//www1.'+urlstart + "resources/auth2/corsenabled.py", false) >+ client.withCredentials = true >+ client.setRequestHeader("x-user", user) >+ client.setRequestHeader("x-pass", 'pass') >+ client.setRequestHeader('Authorization', 'Basic ' + btoa(user + ":pass")) >+ client.onload = test.step_func_done(() => { >+ assert_equals(client.responseText, user + '\npass', 'responseText should contain the right user and password') >+ assert_equals(client.status, 200) >+ assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT') >+ }) >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-setrequestheader-no-cred-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-setrequestheader-no-cred-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..97a6ab5236a83b57650e5e245ca5d8e52a182af0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-setrequestheader-no-cred-expected.txt >@@ -0,0 +1,6 @@ >+Blocked access to external URL http://www1.localhost:8800/xhr/resources/auth7/corsenabled.py >+Blocked access to external URL http://www1.localhost:8800/xhr/resources/auth8/corsenabled-no-authorize.py >+ >+FAIL CORS request with setRequestHeader auth to URL accepting Authorization header assert_true: responseText should contain the right user and password expected true got false >+PASS CORS request with setRequestHeader auth to URL NOT accepting Authorization header >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-setrequestheader-no-cred.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-setrequestheader-no-cred.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..14edf5bd778ef49eba175be9dd8d657a86426e9c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-setrequestheader-no-cred.htm >@@ -0,0 +1,61 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - "Basic" authenticated CORS request using setRequestHeader() but not setting withCredentials (expects to succeed)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/common/utils.js"></script> >+ <!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. --> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function doTest(desc, pathsuffix, conditionsFunc, errorFunc, endFunc) { >+ var test = async_test(desc) >+ test.step(function() { >+ var client = new XMLHttpRequest(), >+ urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/'), >+ user = token() >+ client.open("GET", location.protocol + "//www1." + urlstart + "resources/" + pathsuffix, false) >+ client.setRequestHeader("x-user", user) >+ client.setRequestHeader("x-pass", 'pass') >+ client.setRequestHeader("Authorization", "Basic " + btoa(user + ":pass")) >+ client.onerror = test.step_func(errorFunc) >+ client.onreadystatechange = test.step_func(function () { >+ if(client.readyState < 4) {return} >+ conditionsFunc(client, test, user) >+ }) >+ if(endFunc) { >+ client.onloadend = test.step_func(endFunc) >+ } >+ client.send(null) >+ }) >+ } >+ >+ doTest("CORS request with setRequestHeader auth to URL accepting Authorization header", "auth7/corsenabled.py", function (client, test, user) { >+ assert_true(client.responseText == (user + "\npass"), "responseText should contain the right user and password") >+ assert_equals(client.status, 200) >+ assert_equals(client.getResponseHeader("x-challenge"), "DID-NOT") >+ test.done() >+ }, function(){ >+ assert_unreached("Cross-domain request is permitted and should not cause an error") >+ this.done() >+ }) >+ >+ var errorFired = false; >+ doTest("CORS request with setRequestHeader auth to URL NOT accepting Authorization header", "auth8/corsenabled-no-authorize.py", function (client, test, user) { >+ assert_equals(client.responseText, '') >+ assert_equals(client.status, 0) >+ }, function(e){ >+ errorFired = true >+ assert_equals(e.type, 'error', 'Error event fires when Authorize is a user-set header but not allowed by the CORS endpoint') >+ }, function() { >+ assert_true(errorFired, 'The error event should fire') >+ this.done() >+ }) >+ >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..94e991784c3255e9ca014e6b211476b466955227 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt >@@ -0,0 +1,10 @@ >+ >+FAIL Synchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Synchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >+FAIL Synchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Synchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e7ab989fdc663ae31537581bef60ebe9efe63084 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type.html >@@ -0,0 +1,61 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[2]/p[3]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::a[contains(@href,'#blob-response-entity-body')]/.."/> >+ >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Blob data with no mime type</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var blobTests = [ >+ ["no mime type", new Blob(["data"])], >+ ["invalid mime type", new Blob(["data"], {type: "Invalid \r\n mime \r\n type"})] >+ ]; >+ >+ function doSyncTest(testItem, method) { >+ test(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.open(method, "./resources/content.py", false); >+ xhr.send(testItem[1]); >+ >+ assert_equals(xhr.getResponseHeader("X-Request-Content-Length"), "4"); >+ assert_equals(xhr.getResponseHeader("X-Request-Content-Type"), "NO"); >+ }, "Synchronous blob loading with " + testItem[0] + " [" + method + "]"); >+ } >+ >+ function doAsyncTest(testItem, method) { >+ var atest = async_test("Asynchronous blob loading with " + testItem[0] + " [" + method + "]"); >+ atest.step(function() { >+ var xhr = new XMLHttpRequest(); >+ xhr.onreadystatechange = function() { >+ if (xhr.readyState == 4) { >+ atest.step(function() { >+ assert_equals(xhr.getResponseHeader("X-Request-Content-Length"), "4"); >+ assert_equals(xhr.getResponseHeader("X-Request-Content-Type"), "NO"); >+ }); >+ atest.done(); >+ } >+ } >+ xhr.open(method, "./resources/content.py", true); >+ xhr.send(testItem[1]); >+ }); >+ } >+ >+ blobTests.forEach(function(item){ >+ doSyncTest(item, "POST"); >+ doAsyncTest(item, "POST"); >+ >+ doSyncTest(item, "PUT"); >+ doAsyncTest(item, "PUT"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional-cors-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional-cors-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..dae382b4a27c8edd7fc0bd4bf5eb45418384bbf8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional-cors-expected.txt >@@ -0,0 +1,10 @@ >+Blocked access to external URL http://www1.localhost:8800/XMLHttpRequest/resources/conditional.py?tag=0.45864598185251126 >+CONSOLE MESSAGE: line 37: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/conditional.py?tag=0.45864598185251126 due to access control checks. >+Blocked access to external URL http://www1.localhost:8800/XMLHttpRequest/resources/conditional.py?tag=0.3336103787755589&cors=yes >+CONSOLE MESSAGE: line 37: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/conditional.py?tag=0.3336103787755589&cors=yes due to access control checks. >+ >+Harness Error (TIMEOUT), message = null >+ >+TIMEOUT 304 without appropriate CORS header Test timed out >+TIMEOUT 304 with appropriate CORS header Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional-cors.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional-cors.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..f46f18a1db4f01b13eadb9d4cdb54d83d5160243 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional-cors.htm >@@ -0,0 +1,42 @@ >+<!doctype html> >+<title>XMLHttpRequest: send() - conditional cross-origin requests</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script src=/cors/support.js?pipe=sub></script> >+<div id=log></div> >+<script> >+function request(withCORS, desc) { >+ async_test(t => { >+ const client = new XMLHttpRequest, >+ identifier = Math.random(), >+ cors = withCORS ? "&cors=yes" : "", >+ url = CROSSDOMAIN + "resources/conditional.py?tag=" + identifier + cors >+ client.onload = t.step_func(() => { >+ assert_equals(client.status, 200) >+ assert_equals(client.statusText, "OK") >+ assert_equals(client.responseText, "MAYBE NOT") >+ >+ if(withCORS) { >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.status, 304) >+ assert_equals(client.statusText, "SUPERCOOL") >+ assert_equals(client.responseText, "") >+ }) >+ } else { >+ client.onload = null >+ client.onerror = t.step_func_done(() => { >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ }) >+ } >+ client.open("GET", url) >+ client.setRequestHeader("If-None-Match", identifier) >+ client.send() >+ }) >+ client.open("GET", url) >+ client.send() >+ }, desc) >+} >+request(false, "304 without appropriate CORS header") >+request(true, "304 with appropriate CORS header") >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..62a105cc45501985cd6fd0d1f0063a8661b28898 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: send() - conditional requests (tag) >+PASS XMLHttpRequest: send() - conditional requests (date) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..cbe3e94a4250ae6b0150af10d68dc6ad95606ee6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional.htm >@@ -0,0 +1,34 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - conditional requests</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(text(),'Modified')]/.." /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(type) { >+ test(function() { >+ var client = new XMLHttpRequest, >+ identifier = type == "tag" ? Math.random() : new Date().toGMTString(), >+ url = "resources/conditional.py?" + type + "=" + identifier >+ client.open("GET", url, false) >+ client.send(null) >+ assert_equals(client.status, 200) >+ assert_equals(client.statusText, "OK") >+ assert_equals(client.responseText, "MAYBE NOT") >+ client.open("GET", url, false) >+ client.setRequestHeader(type == "tag" ? "If-None-Match" : "If-Modified-Since", identifier) >+ client.send(null) >+ assert_equals(client.status, 304) >+ assert_equals(client.statusText, "SUPERCOOL") >+ assert_equals(client.responseText, "") >+ }, document.title + " (" + type + ")") >+ } >+ request("tag") >+ request("date") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-charset-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-charset-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3d11d19c5805a47e0184f421de0ba751485dc7fd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-charset-expected.txt >@@ -0,0 +1,20 @@ >+ >+FAIL header with invalid MIME type is not changed assert_equals: expected "text; charset=ascii" but got "text; charset=UTF-8" >+PASS header with invalid MIME type (empty string) is not changed >+PASS known charset but bogus header - missing MIME type >+PASS bogus charset and bogus header - missing MIME type >+PASS Correct text/plain MIME with charset >+PASS If no charset= param is given, implementation should not add one - unknown MIME >+PASS If no charset= param is given, implementation should not add one - known MIME >+PASS If no charset= param is given, implementation should not add one - known MIME, unknown param, two spaces >+FAIL charset given but wrong, fix it (unknown MIME, bogus charset) assert_equals: expected "text/x-thepiano;charset=UTF-8" but got "text/x-thepiano;charset= UTF-8" >+FAIL charset given but wrong, fix it (known MIME, bogus charset) assert_equals: expected "text/plain;charset=UTF-8" but got "text/plain;charset=UTF-8;charset=UTF-8" >+PASS charset given but wrong, fix it (known MIME, actual charset) >+FAIL Multiple charset parameters deduplicate, bogus parameter dropped assert_equals: expected "text/x-pink-unicorn;charset=UTF-8" but got "text/x-pink-unicorn; charset=UTF-8; charset=UTF-8; notrelated; charset=UTF-8" >+PASS No content type set, give MIME and charset >+FAIL charset with space assert_equals: expected "text/plain;charset=UTF-8" but got "text/plain;charset= UTF-8" >+FAIL charset in double quotes assert_equals: expected "text/plain;charset=UTF-8" but got "text/plain;charset=\"UTF-8\"" >+FAIL charset in double quotes with space assert_equals: expected "text/plain;charset=UTF-8" but got "text/plain;charset=\" UTF-8\"" >+FAIL charset in double quotes with backslashes assert_equals: expected "text/plain;charset=UTF-8" but got "text/plain;charset=\"UTF-8\"" >+FAIL unknown parameters need to be preserved assert_equals: expected "yo/yo;charset=UTF-8;yo=YO;x=y" but got "YO/yo;charset=UTF-8;yo=YO; X=y" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-charset.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-charset.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..4e75df234682c91b7effa0de52f5f95a3ac438a4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-charset.htm >@@ -0,0 +1,113 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - charset parameter of Content-Type</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4]/p/code[contains(text(),'Content-Type')]/.. following::ol[1]/li[4]/p/code[contains(text(),'Content-Type')]/../following-sibling::p" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-a-string" data-tested-assertations="following::p[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(input, output, title) { >+ title = title || document.title + ' - ' + input; >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("POST", "resources/content.py", false) >+ if(input !== null) >+ client.setRequestHeader("Content-Type", input) >+ client.send("TEST") >+ assert_equals(client.responseText, "TEST") >+ assert_equals(client.getResponseHeader("x-request-content-type"), output) >+ }, title) >+ } >+ >+ request( >+ "text; charset=ascii", >+ "text; charset=ascii", >+ "header with invalid MIME type is not changed" >+ ) >+ request( >+ "", >+ "", >+ "header with invalid MIME type (empty string) is not changed" >+ ) >+ request( >+ "charset=ascii", >+ "charset=ascii", >+ "known charset but bogus header - missing MIME type" >+ ) >+ request( >+ "charset=bogus", >+ "charset=bogus", >+ "bogus charset and bogus header - missing MIME type" >+ ) >+ request( >+ "text/plain;charset=utf-8", >+ "text/plain;charset=UTF-8", >+ "Correct text/plain MIME with charset" >+ ) >+ request( >+ "text/x-pink-unicorn", >+ "text/x-pink-unicorn", >+ "If no charset= param is given, implementation should not add one - unknown MIME" >+ ) >+ request( >+ "text/plain", >+ "text/plain", >+ "If no charset= param is given, implementation should not add one - known MIME" >+ ) >+ request( >+ "text/plain; hi=bye", >+ "text/plain; hi=bye", >+ "If no charset= param is given, implementation should not add one - known MIME, unknown param, two spaces" >+ ) >+ request( >+ "text/x-thepiano;charset= waddup", >+ "text/x-thepiano;charset=UTF-8", >+ "charset given but wrong, fix it (unknown MIME, bogus charset)" >+ ) >+ request( >+ "text/plain;charset=utf-8;charset=waddup", >+ "text/plain;charset=UTF-8", >+ "charset given but wrong, fix it (known MIME, bogus charset)" >+ ) >+ request( >+ "text/plain;charset=shift-jis", >+ "text/plain;charset=UTF-8", >+ "charset given but wrong, fix it (known MIME, actual charset)" >+ ) >+ request( >+ "text/x-pink-unicorn; charset=windows-1252; charset=bogus; notrelated; charset=ascii", >+ "text/x-pink-unicorn;charset=UTF-8", >+ "Multiple charset parameters deduplicate, bogus parameter dropped" >+ ) >+ request( >+ null, >+ "text/plain;charset=UTF-8", >+ "No content type set, give MIME and charset" >+ ) >+ request( >+ "text/plain;charset= utf-8", >+ "text/plain;charset=UTF-8", >+ "charset with space") >+ request( >+ "text/plain;charset=\"utf-8\"", >+ "text/plain;charset=UTF-8", >+ "charset in double quotes") >+ request( >+ "text/plain;charset=\" utf-8\"", >+ "text/plain;charset=UTF-8", >+ "charset in double quotes with space") >+ request( >+ "text/plain;charset=\"u\\t\\f-8\"", >+ "text/plain;charset=UTF-8", >+ "charset in double quotes with backslashes") >+ request( >+ "YO/yo;charset=x;yo=YO; X=y", >+ "yo/yo;charset=UTF-8;yo=YO;x=y", >+ "unknown parameters need to be preserved") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-string-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-string-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9be8889d1785bce12009307ca61f440fac550a1b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-string-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS XMLHttpRequest: send() - Content-Type >+PASS XMLHttpRequest: send() - Content-Type 1 >+PASS XMLHttpRequest: send() - Content-Type 2 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-string.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-string.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..6c2c00823c6aab1e22ff15e5eca23d78f2407d02 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-string.htm >@@ -0,0 +1,26 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Content-Type</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-document" data-tested-assertations="following::p[1] following::p[2] following::p[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(data, expected_type) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("POST", "resources/content.py", false) >+ client.send(data) >+ assert_equals(client.getResponseHeader("x-request-content-type"), expected_type) >+ }) >+ } >+ request("TEST", "text/plain;charset=UTF-8") >+ function init(fr) { request(fr.contentDocument, fr.getAttribute("data-t")) } >+ </script> >+ <iframe src="resources/win-1252-xml.py" onload="init(this)" data-t="application/xml;charset=UTF-8"></iframe> >+ <iframe src="resources/win-1252-html.py" onload="init(this)" data-t="text/html;charset=UTF-8"></iframe> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybuffer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybuffer-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a2b24fd49cea58a0644024ccd62c1969fe5fc256 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybuffer-expected.txt >@@ -0,0 +1,4 @@ >+CONSOLE MESSAGE: line 44: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+ >+PASS XMLHttpRequest: The send() method: ArrayBuffer data >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybuffer.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybuffer.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..25c5d24072788b32e4bcf136c7eb5a37b9d39148 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybuffer.htm >@@ -0,0 +1,48 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[1]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: ArrayBuffer data</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ var buf = new ArrayBuffer(5); >+ var arr = new Uint8Array(buf); >+ arr[0] = 0x48; >+ arr[1] = 0x65; >+ arr[2] = 0x6c; >+ arr[3] = 0x6c; >+ arr[4] = 0x6f; >+ >+ xhr.onreadystatechange = function() >+ { >+ if (xhr.readyState == 4) >+ { >+ test.step(function() >+ { >+ assert_equals(xhr.status, 200); >+ assert_equals(xhr.response, "Hello"); >+ >+ test.done(); >+ }); >+ } >+ }; >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send(buf); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybufferview-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybufferview-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9a2d0d1cf6ab8155e85931383bebd9fb57eeec9a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybufferview-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: ArrayBufferView data >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybufferview.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybufferview.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..4de7e9e8920b4e38d8a336065415b9998c08cc0f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybufferview.htm >@@ -0,0 +1,36 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[1]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: ArrayBufferView data</title> >+ <link rel="author" title="Ondrej Zara" href="mailto:ondrej.zara@gmail.com"> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var str = "Hello"; >+ var bytes = str.split("").map(function(ch) { return ch.charCodeAt(0); }); >+ var xhr = new XMLHttpRequest(); >+ var arr = new Uint8Array(bytes); >+ >+ xhr.onload = test.step_func_done(function() { >+ assert_equals(xhr.status, 200); >+ assert_equals(xhr.response, str); >+ }); >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send(arr); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-blob-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-blob-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b94f11caac180199f4f2676d85b30fac70ab8e50 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-blob-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: Blob data >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-blob.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-blob.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..5285fc180cc979e33c567f537e8575abf285db50 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-blob.htm >@@ -0,0 +1,62 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[2]/p[3]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetype-attribute" data-tested-assertations="following::ol[1]/li[4]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::a[contains(@href,'#blob-response-entity-body')]/.."/> >+ >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Blob data</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ var xhr2 = new XMLHttpRequest(); >+ >+ var content = "Hello"; >+ var blob; >+ >+ xhr.onreadystatechange = function() >+ { >+ if (xhr.readyState == 4) >+ { >+ test.step(function() >+ { >+ blob = xhr.response; >+ assert_true(blob instanceof Blob, "Blob from XHR Response"); >+ >+ xhr2.open("POST", "./resources/content.py", true); >+ xhr2.send(blob); >+ }); >+ } >+ } >+ >+ xhr2.onreadystatechange = function() >+ { >+ if (xhr2.readyState == 4) >+ { >+ test.step(function() >+ { >+ assert_equals(xhr2.status, 200); >+ assert_equals(xhr2.response, content); >+ test.done(); >+ }); >+ } >+ }; >+ >+ xhr.open("GET", "./resources/content.py?content=" + content, true); >+ xhr.responseType = "blob"; >+ xhr.send(); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-es-object-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-es-object-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3a2fc33f656bb5afd90b99f0cfc0e6db72f6ed2d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-es-object-expected.txt >@@ -0,0 +1,12 @@ >+ >+PASS sending a plain empty object >+PASS sending the ES Math object >+PASS sending a new XHR instance >+PASS sending object that stringifies to undefined >+PASS sending object that stringifies to null >+PASS object that stringifies to query string >+PASS object that stringifies to JSON string >+PASS object whose valueOf() returns a document - ignore valueOf(), stringify >+PASS object whose toString() returns a document, expected to throw >+PASS object whose toString() throws, expected to throw >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-es-object.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-es-object.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..6f7743286ecdd06a52ce545d56dfb1589242996e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-es-object.htm >@@ -0,0 +1,61 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>XMLHttpRequest: passing objects to send()</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol/li[4]" /> >+<link rel="help" href="https://heycam.github.io/webidl/#es-union" data-tested-assertations="following::ol/li[16]" /> >+ >+<div id="log"></div> >+ >+<script> >+ function do_test(obj, expected, name) { >+ var test = async_test(name) >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onload = test.step_func(function () { >+ assert_equals(client.responseText, expected) >+ test.done() >+ }); >+ client.open('POST', 'resources/content.py') >+ if (expected.exception) { >+ assert_throws(expected.exception, function(){client.send(obj)}) >+ test.done() >+ } else { >+ client.send(obj) >+ } >+ }); >+ } >+ >+ do_test({}, '[object Object]', 'sending a plain empty object') >+ do_test(Math, '[object Math]', 'sending the ES Math object') >+ do_test(new XMLHttpRequest, '[object XMLHttpRequest]', 'sending a new XHR instance') >+ do_test({toString:function(){}}, 'undefined', 'sending object that stringifies to undefined') >+ do_test({toString:function(){return null}}, 'null', 'sending object that stringifies to null') >+ var ancestor = {toString: function(){ >+ var ar=[] >+ for (var prop in this) { >+ if (this.hasOwnProperty(prop)) { >+ ar.push(prop+'='+this[prop]) >+ } >+ }; >+ return ar.join('&') >+ }}; >+ >+ var myObj = Object.create(ancestor, {foo:{value:1, enumerable: true}, bar:{value:'foo', enumerable:true}}) >+ do_test(myObj, 'foo=1&bar=foo', 'object that stringifies to query string') >+ >+ var myFakeJSON = {a:'a', b:'b', toString:function(){ return JSON.stringify(this, function(key, val){ return key ==='toString'?undefined:val; }) }} >+ do_test(myFakeJSON, '{"a":"a","b":"b"}', 'object that stringifies to JSON string') >+ >+ var myFakeDoc1 = {valueOf:function(){return document}} >+ do_test(myFakeDoc1, '[object Object]', 'object whose valueOf() returns a document - ignore valueOf(), stringify') >+ >+ var myFakeDoc2 = {toString:function(){return document}} >+ do_test(myFakeDoc2, {exception:new TypeError()}, 'object whose toString() returns a document, expected to throw') >+ >+ var myThrower = {toString:function(){throw {name:'FooError', message:'bar'}}} >+ do_test(myThrower, {exception:{name:'FooError'}}, 'object whose toString() throws, expected to throw') >+ >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-formdata-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-formdata-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e08e7572c60eeb345dfb94e34a7926350fd4ae1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-formdata-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: FormData data >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-formdata.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-formdata.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..9456aa77c53585f0c13bac628770521428e6022a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-formdata.htm >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[4]/dl[1]/dd[5]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#interface-formdata" data-tested-assertations="following::*[contains(@id,'dom-formdata')]/following::ol[1]/li[1] following::*[contains(@id,'dom-formdata')]/following::ol[1]/li[3] following::*[contains(@id,'dom-formdata-append')]/following::ul[1]/li[1] following::*[contains(@id,'dom-formdata-append')]/following::ul[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::ol[1]/li[3]"/> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: FormData data</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ var form = new FormData(); >+ form.append("id", "0"); >+ form.append("value", "zero"); >+ >+ xhr.onreadystatechange = test.step_func(() => { >+ if (xhr.readyState == 4) { >+ assert_equals(xhr.status, 200); >+ assert_equals(xhr.response, "id:0;value:zero;"); >+ test.done(); >+ } >+ }); >+ >+ xhr.open("POST", "./resources/form.py", true); >+ xhr.send(form); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-unexpected-tostring-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-unexpected-tostring-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..563198b4525b98b65f06a4eb684bde3d7b0cf8e7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-unexpected-tostring-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS abort() called from data stringification >+PASS open() called from data stringification >+PASS send() called from data stringification >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-unexpected-tostring.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-unexpected-tostring.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..b8a3b4ae6902357cfe392c484e8413bff1729061 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-unexpected-tostring.htm >@@ -0,0 +1,56 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>XMLHttpRequest: passing objects that interfere with the XHR instance to send()</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol/li[4]" /> >+<link rel="help" href="https://heycam.github.io/webidl/#es-union" data-tested-assertations="following::ol/li[16]" /> >+ >+ >+<div id="log"></div> >+ >+<script> >+ var test1 = async_test('abort() called from data stringification') >+ test1.step(function() { >+ var client = new XMLHttpRequest() >+ var objAbortsOnStringification = {toString:function(){ >+ client.abort(); >+ }} >+ client.open('POST', 'resources/content.py') >+ client.send(objAbortsOnStringification) >+ assert_equals(client.readyState, 1) >+ test1.done() >+ }); >+ >+ var test2 = async_test('open() called from data stringification') >+ test2.step(function() { >+ var client = new XMLHttpRequest() >+ var objOpensOnStringification = {toString:function(){ >+ client.open('POST', 'resources/status.py?text=second_open_wins'); >+ }} >+ client.onloadend = test2.step_func(function(){ >+ assert_equals(client.statusText, 'second_open_wins') >+ test2.done() >+ }) >+ client.open('POST', 'resources/status.py?text=first_open_wins') >+ client.send(objOpensOnStringification) >+ }); >+ >+ var test3 = async_test('send() called from data stringification') >+ test3.step(function() { >+ var client = new XMLHttpRequest() >+ var objSendsOnStringification = {toString:function(){ >+ client.send('bomb!'); >+ }} >+ client.onload = test3.step_func(function(){ >+ assert_equals(client.responseText, 'bomb!') >+ test3.done() >+ }) >+ client.open('POST', 'resources/content.py') >+ assert_throws('InvalidStateError', function(){ >+ client.send(objSendsOnStringification) >+ }) >+ }); >+ >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-basic-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d48bce0ef570befa0a6d4bbf6c4e1497dc3cf440 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-basic-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS XMLHttpRequest: send() - data argument (1) >+PASS XMLHttpRequest: send() - data argument (10000000) >+PASS XMLHttpRequest: send() - data argument (2,2) >+PASS XMLHttpRequest: send() - data argument (false) >+PASS XMLHttpRequest: send() - data argument (A\0A) >+PASS XMLHttpRequest: send() - data argument (1=2&3=4) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-basic.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-basic.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..526a1fb349e54dc69a69bbd62d75e6fbc86928dc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-basic.htm >@@ -0,0 +1,28 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - data argument</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="/following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(input, output) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("POST", "resources/content.py", false) >+ client.send(input) >+ assert_equals(client.responseText, output) >+ }, document.title + " (" + output + ")") >+ } >+ request(1, "1") >+ request(10000000, "10000000") >+ request([2,2], "2,2") >+ request(false, "false") >+ request("A\0A", "A\0A") >+ request(new URLSearchParams([[1, 2], [3, 4]]), "1=2&3=4") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document-bogus-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document-bogus-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e3e1b6bc820b6a63a3e722f8420b0b6a469af5c9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document-bogus-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS Serializing documents through XMLHttpRequest: '' >+PASS Serializing documents through XMLHttpRequest: '<test:test/>' >+PASS Serializing documents through XMLHttpRequest: '<test:test test:test="gee"/>' >+FAIL Serializing documents through XMLHttpRequest: '<test:test test:test="gee" x="�"/>' assert_equals: expected "<test:test test:test=\"gee\" x=\"\ufffd\"/>" but got "<test:test test:test=\"gee\" x=\"\ufffd\ufffd\ufffd\"/>" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document-bogus.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document-bogus.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c10e70aa38d30a008fb4f5016bd6054991149ccf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document-bogus.htm >@@ -0,0 +1,26 @@ >+<!doctype html> >+<title>XMLHttpRequest: send() - Document with serialization errors</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+function serialize(input, output) { >+ async_test(t => { >+ const client = new XMLHttpRequest >+ client.open("POST", "resources/content.py") >+ client.send(input) >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseText, output) >+ }) >+ }, "Serializing documents through XMLHttpRequest: '" + output + "'") >+} >+ >+var doc = document.implementation.createDocument(null, null, null) >+serialize(doc, "") >+doc.appendChild(doc.createElement("test:test")) >+serialize(doc, "<test:test/>") >+doc.childNodes[0].setAttribute("test:test", "gee") >+serialize(doc, "<test:test test:test=\"gee\"/>") >+doc.childNodes[0].setAttribute("x", "\uD800") >+serialize(doc, "<test:test test:test=\"gee\" x=\"\uFFFD\"/>") >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f2762e072f48fb78e7f21e295abbbc466cedd207 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document-expected.txt >@@ -0,0 +1,9 @@ >+ >+PASS XML document, windows-1252 >+PASS HTML document, invalid UTF-8 >+PASS HTML document, shift-jis >+PASS plain text file >+PASS image file >+PASS img tag >+PASS empty div >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..e3a1070826b559d15d0089d35f1d9d6589aaef3d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document.htm >@@ -0,0 +1,92 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Document</title> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="/following::ol/li[4]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-document" data-tested-assertations="/following::dd" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var tests = [ >+ { >+ title: 'XML document, windows-1252', >+ url: 'resources/win-1252-xml.py', >+ contentType: 'application/xml;charset=UTF-8', >+ responseText: '<\u00FF\/>' >+ }, >+ // Invalid character code in document turns into U+FFFD. >+ { >+ title: 'HTML document, invalid UTF-8', >+ url: 'resources/invalid-utf8-html.py', >+ contentType: 'text/html;charset=UTF-8', >+ responseText: '<body>\uFFFD<\/body>' >+ }, >+ // Correctly serialized Shift-JIS. >+ { >+ title: 'HTML document, shift-jis', >+ url: 'resources/shift-jis-html.py', >+ contentType: 'text/html;charset=UTF-8', >+ responseText: '<body>\u30C6\u30b9\u30c8<\/body>' >+ }, >+ // There's some markup included, but it's not really relevant for this >+ // test suite, so we do an indexOf() test. >+ { >+ title: 'plain text file', >+ url: 'folder.txt', >+ contentType: 'text/html;charset=UTF-8', >+ responseText: 'top' >+ }, >+ // This test does not want to assert anything about what markup a >+ // standalone image should be wrapped in. Hence this test lacks a >+ // responseText expectation. >+ { >+ title: 'image file', >+ url: 'resources/image.gif', >+ contentType: 'text/html;charset=UTF-8' >+ }, >+ { >+ title: 'img tag', >+ url: 'resources/img-utf8-html.py', >+ contentType: 'text/html;charset=UTF-8', >+ responseText: '<img>foo' >+ }, >+ { >+ title: 'empty div', >+ url: 'resources/empty-div-utf8-html.py', >+ contentType: 'text/html;charset=UTF-8', >+ responseText: '<!DOCTYPE html><html><head></head><body><div></div></body></html>' >+ } >+ ]; >+ >+ tests.forEach(function(t) { >+ async_test(function() { >+ var iframe = document.createElement("iframe"); >+ iframe.onload = this.step_func_done(function() { >+ var client = new XMLHttpRequest() >+ client.open("POST", "resources/content.py?response_charset_label=UTF-8", false) >+ client.send(iframe.contentDocument) >+ assert_equals(client.getResponseHeader('X-Request-Content-Type'), >+ t.contentType, >+ 'document should be serialized and sent as ' + t.contentType) >+ // The indexOf() assertion will overlook some stuff, e.g. XML >+ // prologues that shouldn't be there (looking at you, Presto). >+ // However, arguably these things have little to do with the XHR >+ // functionality we're testing. >+ if (t.responseText) { >+ assert_true(client.responseText.indexOf(t.responseText) != -1, >+ JSON.stringify(t.responseText) + " not in " + >+ JSON.stringify(client.responseText)); >+ } >+ assert_equals(client.responseXML, null) >+ }); >+ iframe.src = t.url; >+ document.body.appendChild(iframe); >+ }, t.title); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8fae72185146db871ada747091aaef434bc1d9fb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS XMLHttpRequest: send("") - empty entity body (POST) >+PASS XMLHttpRequest: send("") - empty entity body (PUT) >+PASS XMLHttpRequest: send("") - empty entity body (HEAD) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-empty.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-empty.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..f307e778091edf13a268e92d9137429c64305a02 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-empty.htm >@@ -0,0 +1,26 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send("") - empty entity body</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[7]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-XMLHttpRequest-send-a-string" data-tested-assertations="following::p[1] following::p[2] following::p[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(method) { >+ var client = new XMLHttpRequest() >+ client.open(method, "resources/content.py", false) >+ client.upload.onloadstart = function(){assert_unreached('this event should not fire for empty strings')} >+ client.send("") >+ var expectedLength = method == "HEAD" ? "NO" : "0"; >+ assert_equals(client.getResponseHeader("x-request-content-length"), expectedLength) >+ } >+ test(function() { request("POST"); }, document.title + " (POST)"); >+ test(function() { request("PUT"); }, document.title + " (PUT)"); >+ test(function() { request("HEAD"); }, document.title + " (HEAD)"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..63b783d0155192276c0a28fd3187b38ecf8a7927 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (GET) >+FAIL XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (HEAD) assert_equals: expected "NO" but got "0" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..4a7deec034a3fb8ec036fa56a8861c15594c1b7f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async.htm >@@ -0,0 +1,39 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::OL[1]/LI[3] following::OL[1]/LI[7] following::OL[1]/LI[8]" /> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(method) { >+ var test = async_test( document.title + " (" + method + ")") >+ var events=[] >+ var logEvt = function (e) { >+ events.push(e.type) >+ } >+ var client = new XMLHttpRequest() >+ client.open(method, "resources/content.py") >+ client.upload.addEventListener('progress', logEvt) >+ client.upload.addEventListener('loadend', logEvt) >+ client.upload.addEventListener('loadstart', logEvt) >+ client.addEventListener('loadend', function(){ >+ test.step(function(){ >+ assert_equals(client.getResponseHeader("x-request-content-length"), "NO") >+ assert_equals(client.getResponseHeader("x-request-method"), method) >+ assert_equals(client.responseText, "") >+ assert_array_equals(events, []) >+ test.done() >+ }) >+ }) >+ client.send("TEST") >+ } >+ request("GET") >+ request("HEAD") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..60b03670e1073b43b982a27bf07ac6a3716997b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD (GET) >+FAIL XMLHttpRequest: send() - non-empty data argument and GET/HEAD (HEAD) assert_equals: expected "NO" but got "0" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..95ff711b858d966cf53a897534c64bb0d0356d33 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head.htm >@@ -0,0 +1,36 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - non-empty data argument and GET/HEAD</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::OL[1]/LI[3] following::OL[1]/LI[7]" /> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(method) { >+ test(function() { >+ var events=[] >+ var logEvt = function (e) { >+ events.push(e.type) >+ } >+ var client = new XMLHttpRequest() >+ client.open(method, "resources/content.py", false) >+ client.send("TEST") >+ client.upload.addEventListener('progress', logEvt) >+ client.upload.addEventListener('loadend', logEvt) >+ client.upload.addEventListener('loadstart', logEvt) >+ >+ assert_equals(client.getResponseHeader("x-request-content-length"), "NO") >+ assert_equals(client.getResponseHeader("x-request-method"), method) >+ assert_equals(client.responseText, "") >+ assert_array_equals(events, []) >+ }, document.title + " (" + method + ")") >+ } >+ request("GET") >+ request("HEAD") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f626d206f979272f4c83eb7f50d30e1ac001551e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS No content type (POST) >+PASS No content type (PUT) >+PASS No content type (HEAD) >+PASS Explicit content type (POST) >+PASS Explicit content type (PUT) >+FAIL Explicit content type (HEAD) assert_equals: expected "NO" but got "0" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-none.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-none.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..d757cb30a9fa36fb7bfd3c34fe44097d768909b5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-none.htm >@@ -0,0 +1,40 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send(null) - no entity body</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[7]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function noContentTypeTest(method) { >+ var client = new XMLHttpRequest() >+ client.open(method, "resources/content.py", false) >+ client.upload.onloadstart = function(){assert_unreached('this event should not fire for null')} >+ client.send(null) >+ var expectedLength = method == "HEAD" ? "NO" : "0"; >+ assert_equals(client.getResponseHeader("x-request-content-length"), expectedLength) >+ assert_equals(client.getResponseHeader("x-request-content-type"), "NO") >+ } >+ test(function() { noContentTypeTest("POST"); }, "No content type (POST)"); >+ test(function() { noContentTypeTest("PUT"); }, "No content type (PUT)"); >+ test(function() { noContentTypeTest("HEAD"); }, "No content type (HEAD)"); >+ >+ function explicitContentTypeTest(method) { >+ var client = new XMLHttpRequest() >+ client.open(method, "resources/content.py", false) >+ var content_type = 'application/x-foo' >+ client.setRequestHeader('Content-Type', content_type) >+ client.send(null) >+ var expectedLength = method == "HEAD" ? "NO" : "0"; >+ assert_equals(client.getResponseHeader("x-request-content-length"), expectedLength) >+ assert_equals(client.getResponseHeader("x-request-content-type"), content_type) >+ } >+ test(function() { explicitContentTypeTest("POST"); }, "Explicit content type (POST)"); >+ test(function() { explicitContentTypeTest("PUT"); }, "Explicit content type (PUT)"); >+ test(function() { explicitContentTypeTest("HEAD"); }, "Explicit content type (HEAD)"); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..31c41c41fb82e7370bd9bbb3feb8586f9a9081ee >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt >@@ -0,0 +1,5 @@ >+Blocked access to external URL http://nonexistent.localhost:8800/ >+CONSOLE MESSAGE: line 43: XMLHttpRequest cannot load http://nonexistent.localhost:8800/ due to access control checks. >+ >+PASS XMLHttpRequest: The send() method: Fire a progress event named error when Network error happens (synchronous flag is unset) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c51a05cd201006ed7032eb7cf193df2149203d66 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub.htm >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onerror" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[9]/ol/li[2] following::ol[1]/li[9]/ol/li[3]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[4] following::dd[4]/p" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[7] following::ol[1]/li[7]/ol/li[3] following::ol[1]/li[7]/ol/li[4] following::ol[1]/li[9] following::ol[1]/li[10]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Fire a progress event named error when Network error happens (synchronous flag is unset)</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function(){ >+ var xhr = new XMLHttpRequest(); >+ var expect = ["loadstart", "upload.loadstart", 4, "upload.error", "upload.loadend", "error", "loadend"]; >+ var actual = []; >+ >+ xhr.onreadystatechange = test.step_func(() => { >+ if (xhr.readyState == 4) { >+ actual.push(xhr.readyState); >+ } >+ }); >+ >+ xhr.onloadstart = test.step_func(e => { actual.push(e.type); }) >+ xhr.onloadend = test.step_func_done(e => { >+ actual.push(e.type); >+ assert_array_equals(actual, expect); >+ }) >+ xhr.onerror = test.step_func(e => { actual.push(e.type); }) >+ >+ xhr.upload.onloadstart = test.step_func(e => { actual.push("upload." + e.type); }) >+ xhr.upload.onloadend = test.step_func(e => { actual.push("upload." + e.type); }) >+ xhr.upload.onerror = test.step_func(e => { actual.push("upload." + e.type); }) >+ >+ xhr.open("POST", "http://nonexistent.{{host}}:{{ports[http][0]}}", true); >+ xhr.send("Test Message"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c5dd3695f915ac78f97072c18f1b7f4272f55aba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt >@@ -0,0 +1,5 @@ >+Blocked access to external URL http://nonexistent.localhost:8800/ >+ >+PASS http URL >+PASS data URL >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..b9f4fdf99de7cb6b9e5da86e1b513d8da1eb8a6d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub.htm >@@ -0,0 +1,45 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[4] following::dd[4]/p" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[5]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Throw a "throw an "NetworkError" exception when Network error happens (synchronous flag is set)</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ test(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.open("POST", "http://nonexistent.{{host}}:{{ports[http][0]}}", false); >+ >+ assert_throws("NetworkError", function() >+ { >+ xhr.send("Test Message"); >+ }); >+ assert_equals(xhr.readyState, 4) >+ >+ }, "http URL"); >+ >+ test(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.open("GET", "data:text/html;charset=utf-8;base64,PT0NUWVBFIGh0bWw%2BDQo8", false); >+ >+ assert_throws("NetworkError", function() >+ { >+ xhr.send("Test Message"); >+ }); >+ assert_equals(xhr.readyState, 4) >+ >+ }, "data URL"); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadend-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7f4f0a0fd2b9f658c12f3fb8b9e972acc9a92ca8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadend-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: Fire a progress event named loadend (no response entity body) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadend.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..0a1eda53734694fb03e5b8c94fd460a1f5354876 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadend.htm >@@ -0,0 +1,48 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Fire a progress event named loadend (no response entity body)</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="/../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="/../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[10] /following-sibling::ol/li[10]" /> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function () >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.onreadystatechange = function() >+ { >+ test.step(function() >+ { >+ if (xhr.readyState == 4) >+ { >+ assert_equals(xhr.response, ""); >+ } >+ }); >+ }; >+ >+ xhr.onloadend = function(e) >+ { >+ test.step(function() >+ { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "loadend"); >+ test.step(function() { test.done(); }); >+ }); >+ }; >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send(); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadstart-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadstart-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..033a7d10d21be65adfbfb98bae032b0889850339 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadstart-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: Fire a progress event named loadstart (no response entity body and the state is LOADING) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadstart.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadstart.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..cd4a0683ed0698d0a64c3aa114f4bdc923f62ac4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadstart.htm >@@ -0,0 +1,48 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="/../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="/../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="/following-sibling::ol/li[9]/ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="/following-sibling::ol/li[1]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Fire a progress event named loadstart (no response entity body and the state is LOADING)</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.onreadystatechange = function() >+ { >+ test.step(function() >+ { >+ if (xhr.readyState == 3) >+ { >+ assert_equals(xhr.response, ""); >+ } >+ else if (xhr.readyState == 4) >+ { >+ assert_unreached("loadstart event did not fire in LOADING state!"); >+ } >+ }); >+ }; >+ >+ xhr.onloadstart = function() >+ { >+ test.step(function() { test.done("Test done!"); }); >+ }; >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send(); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-order-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..55d15f278bb45077919b4a0638a2feba132a1362 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-order-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: The send() method: event order when there is no response entity body assert_equals: expected "progress(0,0,false)" but got "readystatechange(4)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-order.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-order.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..44c1d779786a5f7f99e27623620bee58dbee9b48 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-order.htm >@@ -0,0 +1,45 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[9]/ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[10] following::a[contains(@href,'#switch-done')]/.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[7]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following-sibling::ol/li[1]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-event-order.js"></script> >+ <title>XMLHttpRequest: The send() method: event order when there is no response entity body</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ prepare_xhr_for_event_order_test(xhr); >+ >+ xhr.addEventListener("readystatechange", test.step_func(function() { >+ if (xhr.readyState == 3) { >+ assert_equals(xhr.response, ""); >+ } >+ })); >+ >+ xhr.addEventListener("loadend", test.step_func(function(e) { >+ assert_xhr_event_order_matches([1, "loadstart(0,0,false)", 2, "progress(0,0,false)", 4,"load(0,0,false)", "loadend(0,0,false)"]); >+ test.done(); >+ })); >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send(); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..155f5a44c167db2c65b9fefef322c3fe13a29704 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin-expected.txt >@@ -0,0 +1,23 @@ >+CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load mailto:test@example.org due to access control checks. >+CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load tel:+31600000000 due to access control checks. >+CONSOLE MESSAGE: line 21: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load http://127.0.0.1:8800/ due to access control checks. >+CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load javascript:alert('FAIL') due to access control checks. >+CONSOLE MESSAGE: line 21: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load http://127.0.0.1:8800/folder.txt due to access control checks. >+CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load about:blank due to access control checks. >+CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load blob:bogusidentifier due to access control checks. >+ >+PASS XMLHttpRequest: send() - non same-origin (mailto:test@example.org) >+PASS XMLHttpRequest: send() - non same-origin (tel:+31600000000) >+PASS XMLHttpRequest: send() - non same-origin (http://127.0.0.1:8800) >+PASS XMLHttpRequest: send() - non same-origin (javascript:alert('FAIL')) >+PASS XMLHttpRequest: send() - non same-origin (folder.txt) >+PASS XMLHttpRequest: send() - non same-origin (about:blank) >+PASS XMLHttpRequest: send() - non same-origin (blob:bogusidentifier) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..6dbbca7477d2fa0ebd1132e23bd1a2565d550ea2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin.htm >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - non same-origin</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <base> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script> >+ // Setting base URL before running the tests >+ var host_info = get_host_info(); >+ document.getElementsByTagName("base")[0].setAttribute("href", host_info.HTTP_REMOTE_ORIGIN); >+ >+ function url(url) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", url, false) >+ assert_throws("NetworkError", function() { client.send() }) >+ }, document.title + " (" + url + ")") >+ } >+ url("mailto:test@example.org") >+ url("tel:+31600000000") >+ url(host_info.HTTP_REMOTE_ORIGIN) >+ url("javascript:alert('FAIL')") >+ url("folder.txt") >+ url("about:blank") >+ url("blob:bogusidentifier") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ee88c8520b383ed7c0fb88703ecb328233e02d2c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin.sub-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 23: Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load mailto:test@example.org due to access control checks. >+CONSOLE MESSAGE: line 23: Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load tel:+31600000000 due to access control checks. >+CONSOLE MESSAGE: line 23: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load http://127.0.0.1:8800/ due to access control checks. >+CONSOLE MESSAGE: line 23: Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load javascript:alert('FAIL') due to access control checks. >+CONSOLE MESSAGE: line 23: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load http://127.0.0.1:8800/folder.txt due to access control checks. >+ >+PASS XMLHttpRequest: send() - non same-origin (mailto:test@example.org) >+PASS XMLHttpRequest: send() - non same-origin (tel:+31600000000) >+PASS XMLHttpRequest: send() - non same-origin (http://127.0.0.1:8800) >+PASS XMLHttpRequest: send() - non same-origin (javascript:alert('FAIL')) >+PASS XMLHttpRequest: send() - non same-origin (folder.txt) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin.sub.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin.sub.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..91c3845617fbd2d38af04bd7e4006ebce296613b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin.sub.htm >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - non same-origin</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <base> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#cross-origin-request-steps" data-tested-assertations="/following::DL[2]/DT[1] /following::DL[2]/DD[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#cross-origin-request-event-rules" data-tested-assertations="/following::DL[1]/DT[2] /following::DL[1]/DD[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script src="/common/get-host-info.sub.js"></script> >+ <script> >+ // Setting base URL before running the tests >+ var host_info = get_host_info(); >+ document.getElementsByTagName("base")[0].setAttribute("href", host_info.HTTP_REMOTE_ORIGIN); >+ >+ function url(url) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", url, false) >+ assert_throws("NetworkError", function() { client.send() }) >+ }, document.title + " (" + url + ")") >+ } >+ url("mailto:test@example.org") >+ url("tel:+31600000000") >+ url(host_info.HTTP_REMOTE_ORIGIN) >+ url("javascript:alert('FAIL')") >+ url("folder.txt") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-receive-utf16-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-receive-utf16-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..53d131eb2a9bba89a815830c7616d6facb577f54 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-receive-utf16-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS UTF-16 with BOM, no encoding in content-type >+PASS UTF-16 without BOM, with charset label in content-type >+PASS UTF-16 without BOM, mislabelled as UTF-8 in content-type >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-receive-utf16.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-receive-utf16.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..6d6fb90a173daaa19c05f99a63fa361258f4266a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-receive-utf16.htm >@@ -0,0 +1,37 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>XMLHttpRequest: The send() method: receive data which is UTF-16 encoded</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#text-response" data-tested-assertations="following::ol/li[9]" /> >+<div id="log"></div> >+ >+<script> >+ async_test(function() { >+ var client = new XMLHttpRequest(); >+ client.onload = this.step_func_done(function(e) { >+ assert_equals(client.responseText, 'æøå\nãã¹ã\n') >+ }); >+ client.open("GET", "resources/utf16.txt"); >+ client.send(null); >+ }, 'UTF-16 with BOM, no encoding in content-type'); >+ >+ async_test(function() { >+ var client = new XMLHttpRequest(); >+ client.onload = this.step_func_done(function(e) { >+ assert_equals(client.responseText, 'æøå\nãã¹ã\n') >+ }); >+ client.open("GET", "resources/status.py?code=200&type=text%2Fplain%3Bcharset%3DUTF-16&content=%E6%00%F8%00%E5%00%0A%00%C6%30%B9%30%C8%30%0A%00"); >+ client.send(null); >+ }, 'UTF-16 without BOM, with charset label in content-type'); >+ >+ async_test(function() { >+ var client = new XMLHttpRequest(); >+ client.onload = this.step_func_done(function(e) { >+ // plenty of EF BF BD Replacement Character in this invalid input.. >+ assert_equals(client.responseText, "\ufffd\u0000\ufffd\u0000\ufffd\u0000\u000a\u0000\ufffd\u0030\ufffd\u0030\ufffd\u0030\u000a\u0000") >+ }); >+ client.open("GET", "resources/status.py?code=200&type=text%2Fplain%3Bcharset%3DUTF-8&content=%E6%00%F8%00%E5%00%0A%00%C6%30%B9%30%C8%30%0A%00"); >+ client.send(null); >+ }, 'UTF-16 without BOM, mislabelled as UTF-8 in content-type'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0e84b6e87cba62ffaadd5fff59305d6f4b378e7b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS XMLHttpRequest: send() - Redirects (bogus Location header) (302: http://example.not) >+PASS XMLHttpRequest: send() - Redirects (bogus Location header) (302: mailto:someone@example.org) >+PASS XMLHttpRequest: send() - Redirects (bogus Location header) (303: http://example.not) >+PASS XMLHttpRequest: send() - Redirects (bogus Location header) (303: foobar:someone@example.org) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2aa86b92a16392af2c4dda50e13c15d09eb608c9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus-sync-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS XMLHttpRequest: send() - Redirects (bogus Location header; sync) (301: foobar://abcd) >+PASS XMLHttpRequest: send() - Redirects (bogus Location header; sync) (302: http://z) >+PASS XMLHttpRequest: send() - Redirects (bogus Location header; sync) (302: mailto:someone@example.org) >+PASS XMLHttpRequest: send() - Redirects (bogus Location header; sync) (303: http://z) >+PASS XMLHttpRequest: send() - Redirects (bogus Location header; sync) (303: tel:1234567890) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus-sync.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..89e6ff0ebdf5706d9d6d0aa2be3c189f6f913b1f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus-sync.htm >@@ -0,0 +1,26 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Redirects (bogus Location header; sync)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/ol/li[1] following::dl[1]/dd[2]/ol/li[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function redirect(code, location) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/redirect.py?location=" + location + "&code=" + code, false) >+ assert_throws("NetworkError", function() { client.send(null) }) >+ }, document.title + " (" + code + ": " + location + ")") >+ } >+ redirect("301", "foobar://abcd") >+ redirect("302", "http://z") >+ redirect("302", "mailto:someone@example.org") >+ redirect("303", "http://z") >+ redirect("303", "tel:1234567890") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a46fc1d339e485fb03d4a2d866a61d71a3f9e0bd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus.htm >@@ -0,0 +1,36 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Redirects (bogus Location header)</title> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/ol/li[1] following::dl[1]/dd[2]/ol/li[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function redirect(code, location) { >+ var test = async_test(document.title + " (" + code + ": " + location + ")", {timeout: 20000}) >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/redirect.py?location=" + location + "&code=" + code) >+ client.send(null) >+ }) >+ } >+ redirect("302", "http://example.not") >+ redirect("302", "mailto:someone@example.org") >+ redirect("303", "http://example.not") >+ redirect("303", "foobar:someone@example.org") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f0176b89d3b063f7b3d43716527000bae747be43 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS XMLHttpRequest: send() - Redirects (basics) (301) >+PASS XMLHttpRequest: send() - Redirects (basics) (302) >+FAIL XMLHttpRequest: send() - Redirects (basics) (303) assert_equals: expected "application/x-pony" but got "NO" >+PASS XMLHttpRequest: send() - Redirects (basics) (307) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5d84b4ffcd68ca888b22e47906684779d180de88 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: send() - Redirects (infinite loop) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..29fb9049fa5c7bf008607ea8e29c340a39439cdc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: send() - Redirects (infinite loop; sync) (301) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..6e9e47e55fc9f84d480623ff75fe0dc3b51eaea0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync.htm >@@ -0,0 +1,24 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Redirects (infinite loop; sync)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/p[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[5]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function redirect(code) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/infinite-redirects.py?type="+code, false) >+ assert_throws("NetworkError", function() { client.send(null) }) >+ }, document.title + " (" + code + ")") >+ } >+ redirect("301") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..54e2ea8948508b32e1da57c3dddac2ad06f2f9bc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite.htm >@@ -0,0 +1,35 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Redirects (infinite loop)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onerror" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/p[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[9] following::ol[1]/li[10]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ var client = new XMLHttpRequest(), >+ errorEventFired = false, >+ code = 301 >+ client.open("GET", "resources/infinite-redirects.py?type="+code) >+ client.onerror = function(){ >+ errorEventFired = true >+ } >+ client.onloadend = function(){ >+ test.step(function() { >+ assert_equals(errorEventFired, true) >+ assert_equals(client.responseText, '') >+ assert_equals(client.readyState, 4) >+ test.done() >+ }) >+ } >+ client.send(null) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-no-location-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-no-location-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f58eaf74618d12ba14e9b192be509a0da4d28934 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-no-location-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS XMLHttpRequest: send() - Redirects (no Location header) (301) >+PASS XMLHttpRequest: send() - Redirects (no Location header) (302) >+PASS XMLHttpRequest: send() - Redirects (no Location header) (303) >+PASS XMLHttpRequest: send() - Redirects (no Location header) (307) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-no-location.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-no-location.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..3a80348fd73cab12220b5d52f51085d4e811bab4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-no-location.htm >@@ -0,0 +1,40 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Redirects (no Location header)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2]" /> >+ <!-- >+ NOTE: the XHR spec does not really handle this scenario. It's handled in the Fetch spec: >+ "If response's headers do not contain a header whose name is Location, return response." >+ --> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function redirect(code) { >+ var test = async_test(document.title + " (" + code + ")") >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.status + "", code) >+ assert_equals(client.statusText, "ABE ODDYSSEE") >+ assert_equals(client.responseXML.documentElement.localName, "x") >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/status.py?content=<x>x<\/x>&type=text/xml&text=ABE ODDYSSEE&code=" + code) >+ client.send(null) >+ }) >+ } >+ redirect("301") >+ redirect("302") >+ redirect("303") >+ redirect("307") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-post-upload-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-post-upload-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2dd47d13f49f1480a8eee87b7769b3cfec478415 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-post-upload-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS XMLHttpRequest: The send() method: POSTing to URL that redirects (301) >+PASS XMLHttpRequest: The send() method: POSTing to URL that redirects (302) >+PASS XMLHttpRequest: The send() method: POSTing to URL that redirects (303) >+FAIL XMLHttpRequest: The send() method: POSTing to URL that redirects (307) assert_array_equals: events firing in expected order and states lengths differ, expected 9 got 10 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..5c1c6387adb78a363fb7225ca39b93b71af79b17 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm >@@ -0,0 +1,132 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::dt[@id="dom-xmlhttprequest-send-bodyinit"]/following::dd[1]/p[2] following::ol[1]/li[9]//li[1] following::ol[1]/li[9]//li[2]" /> >+ <link rel="help" href="https://fetch.spec.whatwg.org/#http-fetch" data-tested-assertations="following::ol[1]/li[6]/dl/dd[1]//dd[3]" /> >+ <link rel="help" href="https://fetch.spec.whatwg.org/#concept-http-redirect-fetch" data-tested-assertations="following::li[16]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: POSTing to URL that redirects</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ function testRedirectPost(params) { >+ var test = async_test(document.title + " (" + params.name + ")"); >+ var actual = []; >+ // We check upload.onprogress with a boolean because it *might* fire more than once >+ var progressFiredReadyState1 = false; >+ >+ var expectedHeaders, expectedEvents; >+ >+ // 307 redirects should resend the POST data, and events and headers will be a little different.. >+ if(params.expectResendPost) { >+ expectedHeaders = { >+ "X-Request-Content-Length": "12000", >+ "X-Request-Content-Type": "text/plain;charset=UTF-8", >+ "X-Request-Method": "POST", >+ "X-Request-Query": "NO", >+ "Content-Length": "12000" >+ } >+ expectedEvents = [ >+ "xhr onreadystatechange 1", >+ "xhr loadstart 1", >+ "upload loadstart 1", >+ "upload loadend 1", >+ "xhr onreadystatechange 2", >+ "xhr onreadystatechange 3", >+ "xhr onreadystatechange 4", >+ "xhr load 4", >+ "xhr loadend 4" >+ ]; >+ } else { >+ // setting the right expectations for POST resent as GET without request body >+ expectedHeaders = { >+ "X-Request-Content-Length": "NO", >+ "X-Request-Content-Type": "NO", >+ "X-Request-Method": "GET", >+ "X-Request-Query": "NO" >+ } >+ expectedEvents = [ >+ "xhr onreadystatechange 1", >+ "xhr loadstart 1", >+ "upload loadstart 1", >+ "upload loadend 1", >+ "xhr onreadystatechange 2", >+ /* we expect no onreadystatechange readyState=3 event because there is no loading content */ >+ "xhr onreadystatechange 4", >+ "xhr load 4", >+ "xhr loadend 4" >+ ]; >+ } >+ // Override expectations if provided. >+ if(params.expectedContentType) >+ expectedHeaders["X-Request-Content-Type"] = params.expectedContentType; >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.upload.onloadstart = test.step_func(function(e) { >+ actual.push("upload loadstart " + xhr.readyState); >+ }); >+ xhr.upload.onprogress = test.step_func(function(e) { >+ // events every 50ms, one final when uploading is done >+ if(xhr.readyState >= xhr.HEADERS_RECEIVED) { >+ assert_equals(xhr.status, 200, "JS never gets to see the 30x status code"); >+ } >+ progressFiredReadyState1 = xhr.readyState === xhr.OPENED; >+ }); >+ xhr.upload.onloadend = test.step_func(function() { >+ actual.push("upload loadend " + xhr.readyState); >+ }); >+ xhr.onloadstart = test.step_func(function() { >+ actual.push("xhr loadstart " + xhr.readyState); >+ }); >+ xhr.onreadystatechange = test.step_func(function() { >+ if(xhr.readyState >= xhr.HEADERS_RECEIVED) { >+ assert_equals(xhr.status, 200, "JS never gets to see the 30x status code"); >+ } >+ actual.push("xhr onreadystatechange " + xhr.readyState); >+ }); >+ xhr.onload = test.step_func(function(e) >+ { >+ actual.push("xhr load " + xhr.readyState); >+ }); >+ xhr.onloadend = test.step_func(function(e) >+ { >+ actual.push("xhr loadend " + xhr.readyState); >+ >+ assert_true(progressFiredReadyState1, "One progress event should fire on xhr.upload when readyState is 1"); >+ >+ // Headers will tell us if data was sent when expected >+ for(var header in expectedHeaders) { >+ assert_equals(xhr.getResponseHeader(header), expectedHeaders[header], header); >+ } >+ >+ assert_array_equals(actual, expectedEvents, "events firing in expected order and states"); >+ if (params.expectedBody) >+ assert_equals(xhr.response, params.expectedBody, 'request body was resent'); >+ test.done(); >+ }); >+ >+ xhr.open("POST", "./resources/redirect.py?location=content.py&code=" + params.code, true); >+ xhr.send(params.body); >+ }); >+ } >+ >+ const stringBody = "Test Message".repeat(1000); >+ const blobBody = new Blob(new Array(1000).fill("Test Message")); >+ >+ testRedirectPost({name: "301", code: 301, expectResendPost: false, body: stringBody}); >+ testRedirectPost({name: "302", code: 302, expectResendPost: false, body: stringBody}); >+ testRedirectPost({name: "303", code: 303, expectResendPost: false, body: stringBody}); >+ testRedirectPost({name: "307 (string)", code: 307, expectResendPost: true, body: stringBody, expectedBody: stringBody }); >+ testRedirectPost({name: "307 (blob)", code: 307, expectResendPost: true, body: blobBody, expectedBody: stringBody, expectedContentType: "NO" }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-cors-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-cors-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ffc5949057ad30b7afffac5c75c974b73ff16abd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-cors-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS XMLHttpRequest: send() - Redirect to CORS-enabled resource (301) >+PASS XMLHttpRequest: send() - Redirect to CORS-enabled resource (302) >+PASS XMLHttpRequest: send() - Redirect to CORS-enabled resource (303) >+PASS XMLHttpRequest: send() - Redirect to CORS-enabled resource (307) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-cors.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-cors.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..04a2a1ffe87d28e4433be6b4aded9215acafd40f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-cors.htm >@@ -0,0 +1,87 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Redirect to CORS-enabled resource</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function extractBody(body) { >+ if (body === null) { >+ return { body: "", type: "NO" }; >+ } >+ if (typeof body == "string") { >+ return { body: body, type: "text/plain;charset=UTF-8" }; >+ } >+ if (body instanceof Uint8Array) { >+ var arr = Array.prototype.slice.call(body); >+ return { body: String.fromCharCode.apply(null, arr), type: "NO" } >+ } >+ return { body: "EXTRACT NOT IMPLEMENTED", type: "EXTRACT NOT IMPLEMENTED" } >+ } >+ >+ function redirect(code, name = code, method = "GET", body = null, explicitType = null, safelistContentType = false) { >+ async_test(t => { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = t.step_func(() => { >+ if (client.readyState == 4) { >+ if (explicitType !== "application/x-pony" || safelistContentType) { >+ var { body: expectedBody, type: expectedType } = extractBody(body); >+ if (explicitType !== null) { >+ expectedType = explicitType >+ } >+ if (((code === "301" || code === "302") && method === "POST") || code === "303") { >+ method = "GET" >+ expectedBody = "" >+ } >+ assert_equals(client.status, 200); >+ assert_equals(client.getResponseHeader("x-request-method"), method); >+ assert_equals(client.getResponseHeader("x-request-content-type"), expectedType); >+ assert_equals(client.getResponseHeader("x-request-data"), expectedBody); >+ } else { >+ // "application/x-pony" is not safelisted by corsenabled.py -> network error >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ assert_equals(client.responseText, "") >+ assert_equals(client.responseXML, null) >+ } >+ t.done(); >+ } >+ }) >+ let safelist = "" >+ if (safelistContentType) { >+ safelist = "?safelist_content_type" >+ } >+ client.open(method, "resources/redirect.py?location="+encodeURIComponent("http://www2."+location.host+(location.pathname.replace(/[^\/]+$/, ''))+'resources/corsenabled.py')+safelist+"&code=" + code) >+ if (explicitType !== null) { >+ client.setRequestHeader("Content-Type", explicitType) >+ } >+ client.send(body) >+ }, document.title + " (" + name + ")") >+ } >+ redirect("301") >+ redirect("301", "301 GET with explicit Content-Type", "GET", null, "application/x-pony") >+ redirect("301", "301 GET with explicit Content-Type safelisted", "GET", null, "application/x-pony", true) >+ redirect("302") >+ redirect("303") >+ redirect("303", "303 LALA with string and explicit Content-Type safelisted", "LALA", "test", "application/x-pony", true) >+ redirect("307") >+ redirect("307", "307 post with null", "POST", null) >+ redirect("307", "307 post with string", "POST", "hello") >+ redirect("307", "307 post with typed array", "POST", new Uint8Array([65, 66, 67])) >+ redirect("301", "301 POST with string and explicit Content-Type", "POST", "yoyo", "application/x-pony") >+ redirect("301", "301 POST with string and explicit Content-Type safelisted", "POST", "yoyo", "application/x-pony", true) >+ redirect("302", "302 POST with string and explicit Content-Type", "POST", "yoyo", "application/x-pony") >+ redirect("307", "307 POST with string and explicit Content-Type", "POST", "yoyo", "application/x-pony") >+ redirect("307", "307 FOO with string and explicit Content-Type", "FOO", "yoyo", "application/x-pony") >+ redirect("308", "308 POST with string and explicit Content-Type", "POST", "yoyo", "application/x-pony") >+ redirect("308", "308 FOO with string and explicit Content-Type", "FOO", "yoyo", "application/x-pony") >+ redirect("308", "308 FOO with string and explicit Content-Type text/plain", "FOO", "yoyo", "text/plain") >+ redirect("308", "308 FOO with string and explicit Content-Type multipart/form-data", "FOO", "yoyo", "multipart/form-data") >+ redirect("308", "308 FOO with string and explicit Content-Type safelisted", "FOO", "yoyo", "application/thunderstorm", true) >+ redirect("307", "307 POST with string and explicit Content-Type safelisted", "POST", "yoyo", "application/thunderstorm", true) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-non-cors-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-non-cors-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e8f9934b346675006bf782629ca8f34b775afaf2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-non-cors-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (301) >+PASS XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (302) >+PASS XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (303) >+PASS XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (307) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-non-cors.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-non-cors.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c6886a57b59361c09ffaea9016050c1a183dbff0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-non-cors.htm >@@ -0,0 +1,37 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/ol/li[1] following::dl[1]/dd[2]/ol/li[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function redirect(code) { >+ var test = async_test(document.title + " (" + code + ")") >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.getResponseHeader("x-request-method"), null) >+ assert_equals(client.getResponseHeader("x-request-content-type"), null) >+ assert_equals(client.responseText, '') >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/redirect.py?location="+encodeURIComponent("http://www2."+location.host+(location.pathname.replace(/[^\/]+$/, ''))+'resources/content.py')+"&code=" + code) >+ client.setRequestHeader("Content-Type", "application/x-pony") >+ client.send(null) >+ }) >+ } >+ redirect("301") >+ redirect("302") >+ redirect("303") >+ redirect("307") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..16b3231e25b4d78712f2f29df6ca5221c1964356 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect.htm >@@ -0,0 +1,36 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - Redirects (basics)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/ol/li[1] following::dl[1]/dd[2]/ol/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function redirect(code) { >+ var test = async_test(document.title + " (" + code + ")") >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ if(client.readyState == 4) { >+ assert_equals(client.getResponseHeader("x-request-method"), "GET") >+ assert_equals(client.getResponseHeader("x-request-content-type"), "application/x-pony") >+ test.done() >+ } >+ }) >+ } >+ client.open("GET", "resources/redirect.py?location=content.py&code=" + code) >+ client.setRequestHeader("Content-Type", "application/x-pony") >+ client.send(null) >+ }) >+ } >+ redirect("301") >+ redirect("302") >+ redirect("303") >+ redirect("307") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-event-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-event-order-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..aa24d3009aa51e9a34afaf5c28dfdf4f6fc9799f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-event-order-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: The send() method: event order when synchronous flag is unset assert_equals: expected "upload.loadstart(0,12,true)" but got "upload.loadstart(0,0,false)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-event-order.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-event-order.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..041cb23c6ea891c0e0dc4f0bc165bff71249a5bc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-event-order.htm >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[9]/ol/li[2] following-sibling::ol/li[9]/ol/li[3] following::a[contains(@href,'#make-upload-progress-notifications')]/.. following::a[contains(@href,'#make-progress-notifications')]/.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#make-upload-progress-notifications" data-tested-assertations="following::ul[1]/li[1] following::ul[1]/li[2]/ol[1]/li[2] following::ul[1]/li[2]/ol[1]/li[3] following::ul[1]/li[2]/ol[1]/li[4]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#make-progress-notifications" data-tested-assertations=".." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::a[contains(@href,'#switch-done')]/.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[5] following::ol[1]/li[6] following::ol[1]/li[7]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-event-order.js"></script> >+ <title>XMLHttpRequest: The send() method: event order when synchronous flag is unset</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ prepare_xhr_for_event_order_test(xhr); >+ >+ xhr.addEventListener("loadend", test.step_func(function() { >+ assert_xhr_event_order_matches([1, "loadstart(0,0,false)", "upload.loadstart(0,12,true)", "upload.progress(12,12,true)", "upload.load(12,12,true)", "upload.loadend(12,12,true)", 2, 3, "progress(12,12,true)", 4, "load(12,12,true)", "loadend(12,12,true)"]); >+ test.done(); >+ })); >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send("Test Message"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadend-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e7d6e6e1e6ac0cbb54aa6dc6581bd715a0ce0413 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadend-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: Fire a progress event named loadend on the XMLHttpRequestUpload (synchronous flag is unset) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadend.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..99a239ab135d78e2a3568e6894e63939fb29f5a1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadend.htm >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::a[contains(@href,'#make-upload-progress-notifications')]/.. following::ol[1]/li[8]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#make-upload-progress-notifications" data-tested-assertations="following::ul[1]/li[2]/ol[1]/li[4]" /> >+ >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Fire a progress event named loadend on the XMLHttpRequestUpload (synchronous flag is unset)</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.upload.onloadend = function(e) >+ { >+ test.step(function() >+ { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "loadend"); >+ assert_equals(e.target, xhr.upload); >+ test.done(); >+ }); >+ }; >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send("Test Message"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadstart-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadstart-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d1cbab6b5e3894ae25a460e9fc1057d3234f607a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadstart-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: Fire a progress event named loadstart on the XMLHttpRequestUpload (synchronous flag is unset) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadstart.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadstart.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..7a9be9f8ca4714f18d26eb7e350c177a60421e15 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadstart.htm >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[8] following-sibling::ol/li[9]/ol/li[3]" /> >+ >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Fire a progress event named loadstart on the XMLHttpRequestUpload (synchronous flag is unset)</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.upload.onloadstart = function(e) >+ { >+ test.step(function() >+ { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "loadstart"); >+ assert_equals(e.target, xhr.upload); >+ test.done(); >+ }); >+ }; >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send("Test Message"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-progress-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-progress-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ce4cc9b7846a6b634c3e6d4455905b8be9ab997c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-progress-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: Fire a progress event named progress on the XMLHttpRequestUpload (synchronous flag is unset) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-progress.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-progress.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..914aed7255a76e690aba34d5512cecebb716c02b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-progress.htm >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onprogress" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-progress" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::a[contains(@href,'#make-upload-progress-notifications')]/.. following::ol[1]/li[8]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#make-upload-progress-notifications" data-tested-assertations="following::ul[1]/li[2]/ol[1]/li[2]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Fire a progress event named progress on the XMLHttpRequestUpload (synchronous flag is unset)</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ test.step(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ >+ xhr.upload.onprogress = function(e) >+ { >+ test.step(function() >+ { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "progress"); >+ assert_equals(e.target, xhr.upload); >+ test.done(); >+ }); >+ }; >+ >+ xhr.open("POST", "./resources/content.py", true); >+ xhr.send("Test Message"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2a6b6c95dc9e91a04f5acdfee142493744e76309 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: send() - send() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2a6b6c95dc9e91a04f5acdfee142493744e76309 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: send() - send() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..2bfe40436f4a6ba8c3adc152c186a7b6d272b114 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.js >@@ -0,0 +1,7 @@ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/well-formed.xml") >+ client.send(null) >+ assert_throws("InvalidStateError", function() { client.send(null) }) >+ client.abort() >+}, "XMLHttpRequest: send() - send()"); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2a6b6c95dc9e91a04f5acdfee142493744e76309 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: send() - send() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..cbcbdb44e00cf57f694222c5405a9516c933f9e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.htm >@@ -0,0 +1,13 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: send() - send()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script src="send-send.js"></script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.js >new file mode 100644 >index 0000000000000000000000000000000000000000..2e7fe865f3b21c56c4eb91bc468b4d3907455911 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.js >@@ -0,0 +1,7 @@ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/well-formed.xml") >+ client.send(null) >+ assert_throws("InvalidStateError", function() { client.send(null) }) >+ client.abort() >+}) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c2c15e0b8a0e54a623bcb4fdca1f4cef72eeb240 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Untitled >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.worker.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..9d34ce63df22ddf6e057b04cc98adfae3a1a307f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.worker.js >@@ -0,0 +1,3 @@ >+importScripts("/resources/testharness.js"); >+importScripts("send-send.js"); >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-blocks-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-blocks-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5fe56a14f6e3db12500feac4d8fcdc09d7cb0b7f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-blocks-async-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: sync requests should block events on pending async requests >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-blocks-async.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-blocks-async.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..74f08a59d60daab0e1d6b55e44ad7e1e373b83f5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-blocks-async.htm >@@ -0,0 +1,53 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: sync requests should block events on pending async requests</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ var test = async_test(); >+ >+ var expect = ['sync 4', 'async 2', 'async 3', 'async 4'] >+ var actual = [] >+ >+ test.step(function() >+ { >+ var xhr_async = new XMLHttpRequest() >+ xhr_async.open('GET', 'resources/delay.py?ms=1000', true) // first launch an async request, completes in 1 second >+ xhr_async.onreadystatechange = test.step_func(() => { >+ actual.push('async ' + xhr_async.readyState) >+ if(xhr_async.readyState === 4 && actual.indexOf('sync 4')>-1){ >+ VerifyResult() >+ } >+ }); >+ xhr_async.send() >+ >+ test.step_timeout(() => { >+ var xhr_sync = new XMLHttpRequest(); >+ xhr_sync.open('GET', 'resources/delay.py?ms=2000', false) // here's a sync request that will take 2 seconds to finish >+ xhr_sync.onreadystatechange = test.step_func(() => { >+ actual.push('sync ' + xhr_sync.readyState) >+ if(xhr_sync.readyState === 4 && actual.indexOf('async 4')>-1){ >+ VerifyResult() >+ } >+ }); >+ xhr_sync.send() >+ }, 10); >+ >+ function VerifyResult() >+ { >+ test.step(function() >+ { >+ assert_array_equals(actual, expect); >+ test.done(); >+ }); >+ }; >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-load-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-load-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a5e3ddbece8637862baffe4c7eeeb746154e3158 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-load-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: Fire an event named load (no response entity body and the synchronous flag is set) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-load.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-load.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a2a5516586d8757552e026db5c4a8cd193994fb9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-load.htm >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onload" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-load" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[11] following::a[contains(@href,'#switch-done')]/.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol/li[1] following::ol/li[6]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="/following::ol/li[3]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Fire an event named load (no response entity body and the synchronous flag is set)</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ test(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ var pass = false; >+ >+ xhr.onload = function(e) >+ { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "load"); >+ pass = true; >+ }; >+ >+ xhr.open("POST", "./resources/content.py", false); >+ xhr.send(); >+ >+ assert_equals(xhr.response, ""); >+ assert_true(pass); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-loadend-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-loadend-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9775ec12733b70498b59f3ce57c118ba98534609 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-loadend-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: Fire an event named loadend (no response entity body and the synchronous flag is set) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-loadend.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-loadend.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..7da2a311827edc062d90d14431ebf35f89bad5da >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-loadend.htm >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[11] following::a[contains(@href,'#switch-done')]/.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol/li[1] following::ol/li[7]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="/following::ol/li[3]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: Fire an event named loadend (no response entity body and the synchronous flag is set)</title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ test(function() >+ { >+ var xhr = new XMLHttpRequest(); >+ var pass = false; >+ >+ xhr.onloadend = function(e) >+ { >+ assert_true(e instanceof ProgressEvent); >+ assert_equals(e.type, "loadend"); >+ pass = true; >+ }; >+ >+ xhr.open("POST", "./resources/content.py", false); >+ xhr.send(); >+ >+ assert_equals(xhr.response, ""); >+ assert_true(pass); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-order-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b88e40324413a8c64630ad0f7b5f5d5bd3f60dd3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-order-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: event order when synchronous flag is set and there is no response entity body >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-order.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-order.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c7e3172cb00e8d97adbcf21b783eb88b769c454e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-order.htm >@@ -0,0 +1,51 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>XMLHttpRequest: The send() method: event order when synchronous flag is set and there is no response entity body</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol[1]/li[9]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#same-origin-request-steps" data-tested-assertations="following::DL[1]/DT[1]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[11] following::a[contains(@href,'#switch-done')]/.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[7]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::ol/li[3]" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ test(function () { >+ var xhr = new XMLHttpRequest(); >+ var expect = [4, "load", "loadend"]; >+ var actual = []; >+ >+ xhr.onreadystatechange = function() >+ { >+ if (xhr.readyState == 4) >+ { >+ actual.push(xhr.readyState); >+ } >+ }; >+ >+ xhr.onloadstart = function(e){ actual.push(e.type); }; >+ xhr.onload = function(e){ actual.push(e.type); }; >+ xhr.onloadend = function(e){ actual.push(e.type); }; >+ >+ xhr.upload.onload = function(e){ actual.push("upload." + e.type); }; >+ xhr.upload.onloadstart = function(e){ actual.push("upload." + e.type); }; >+ xhr.upload.onloadend = function(e){ actual.push("upload." + e.type);}; >+ >+ xhr.open("POST", "./resources/content.py", false); >+ xhr.send(); >+ >+ assert_equals(xhr.response, ""); >+ assert_array_equals(actual, expect); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-response-event-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-response-event-order-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..40fd233d29ce269400819bb62a7c45ec6c0754a9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-response-event-order-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: The send() method: event order when synchronous flag is set assert_equals: expected "load(12,12,true)" but got "load(0,0,false)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-response-event-order.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-response-event-order.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..f7e4b0b216ed83f11b7f839629577525726ff95a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-response-event-order.htm >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-event-order.js"></script> >+ <title>XMLHttpRequest: The send() method: event order when synchronous flag is set</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onloadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadstart" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-loadend" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[9]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#same-origin-request-steps" data-tested-assertations="following::DL[1]/DT[1]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[11] following::a[contains(@href,'#switch-done')]/.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#switch-done" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[3] following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[7]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-response-attribute" data-tested-assertations="following::ol/li[3]" /> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ test(function () { >+ var xhr = new XMLHttpRequest(); >+ prepare_xhr_for_event_order_test(xhr); >+ >+ xhr.open("POST", "./resources/content.py", false); >+ xhr.send("Test Message"); >+ >+ assert_equals(xhr.response, "Test Message"); >+ assert_xhr_event_order_matches([1, 4, "load(12,12,true)", "loadend(12,12,true)"]); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-timeout-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-timeout-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b31c90208917898ae9b1fae3c991b4828d43cbd1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-timeout-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: timeout during sync send() should not run >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-timeout.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-timeout.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..46d8686bc08374e1bad20dd514f8c12ea7afabb2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-timeout.htm >@@ -0,0 +1,29 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: timeout during sync send() should not run</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method"/> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(), >+ hasrun = false >+ test.step(function() { >+ client = new XMLHttpRequest() >+ client.open("GET", "folder.txt", false) >+ test.step_timeout(() => { hasrun = true }, 0) >+ client.onreadystatechange = function() { >+ test.step(function() { >+ assert_equals(client.readyState, 4) >+ assert_false(hasrun) >+ }) >+ } >+ client.send(null) >+ test.done() >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-timeout-events-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-timeout-events-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..853136e9f04cf7b4487e07b8e13f81155691f8b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-timeout-events-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: The send() method: timeout is not 0 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-timeout-events.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-timeout-events.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..eae25681077edeffe8671ef56f4c61ca8ed0b18b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-timeout-events.htm >@@ -0,0 +1,62 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <title>XMLHttpRequest: The send() method: timeout is not 0 </title> >+</head> >+ >+<body> >+ <div id="log"></div> >+ >+ <script type="text/javascript"> >+ async_test(t => { >+ const xhr = new XMLHttpRequest(), >+ expect = [4, "", "upload.timeout", "upload.loadend", "timeout", "loadend"]; >+ let actual = []; >+ >+ xhr.onreadystatechange = t.step_func(() => { >+ if (xhr.readyState == 4) { >+ actual.push(xhr.readyState, xhr.response); >+ } >+ }); >+ >+ xhr.onloadend = t.step_func_done(e => { >+ assert_equals(e.loaded, 0); >+ assert_equals(e.total, 0); >+ actual.push(e.type); >+ assert_array_equals(actual, expect); >+ }); >+ >+ xhr.ontimeout = t.step_func(e => { >+ assert_equals(e.loaded, 0); >+ assert_equals(e.total, 0); >+ actual.push(e.type); >+ }); >+ >+ >+ xhr.upload.onloadend = t.step_func(e => { >+ assert_equals(e.loaded, 0); >+ assert_equals(e.total, 0); >+ actual.push("upload." + e.type); >+ }); >+ >+ xhr.upload.ontimeout = t.step_func(e => { >+ assert_equals(e.loaded, 0); >+ assert_equals(e.total, 0); >+ actual.push("upload." + e.type); >+ }); >+ >+ >+ let content = ""; >+ for (var i = 0; i < 121026; i++) { >+ content += "[" + i + "]"; >+ } >+ >+ xhr.open("POST", "./resources/trickle.py", true); >+ xhr.timeout = 1; >+ xhr.send(content); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b9c1099b79da7954891579851da8473fc1936cea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp-expected.txt >@@ -0,0 +1,131 @@ >+ >+PASS Overall fetch with URLSearchParams >+PASS XMLHttpRequest.send(URLSearchParams) (0) >+PASS XMLHttpRequest.send(URLSearchParams) (1) >+PASS XMLHttpRequest.send(URLSearchParams) (2) >+PASS XMLHttpRequest.send(URLSearchParams) (3) >+PASS XMLHttpRequest.send(URLSearchParams) (4) >+PASS XMLHttpRequest.send(URLSearchParams) (5) >+PASS XMLHttpRequest.send(URLSearchParams) (6) >+PASS XMLHttpRequest.send(URLSearchParams) (7) >+PASS XMLHttpRequest.send(URLSearchParams) (8) >+PASS XMLHttpRequest.send(URLSearchParams) (9) >+PASS XMLHttpRequest.send(URLSearchParams) (10) >+PASS XMLHttpRequest.send(URLSearchParams) (11) >+PASS XMLHttpRequest.send(URLSearchParams) (12) >+PASS XMLHttpRequest.send(URLSearchParams) (13) >+PASS XMLHttpRequest.send(URLSearchParams) (14) >+PASS XMLHttpRequest.send(URLSearchParams) (15) >+PASS XMLHttpRequest.send(URLSearchParams) (16) >+PASS XMLHttpRequest.send(URLSearchParams) (17) >+PASS XMLHttpRequest.send(URLSearchParams) (18) >+PASS XMLHttpRequest.send(URLSearchParams) (19) >+PASS XMLHttpRequest.send(URLSearchParams) (20) >+PASS XMLHttpRequest.send(URLSearchParams) (21) >+PASS XMLHttpRequest.send(URLSearchParams) (22) >+PASS XMLHttpRequest.send(URLSearchParams) (23) >+PASS XMLHttpRequest.send(URLSearchParams) (24) >+PASS XMLHttpRequest.send(URLSearchParams) (25) >+PASS XMLHttpRequest.send(URLSearchParams) (26) >+PASS XMLHttpRequest.send(URLSearchParams) (27) >+PASS XMLHttpRequest.send(URLSearchParams) (28) >+PASS XMLHttpRequest.send(URLSearchParams) (29) >+PASS XMLHttpRequest.send(URLSearchParams) (30) >+PASS XMLHttpRequest.send(URLSearchParams) (31) >+PASS XMLHttpRequest.send(URLSearchParams) (32) >+PASS XMLHttpRequest.send(URLSearchParams) (33) >+PASS XMLHttpRequest.send(URLSearchParams) (34) >+PASS XMLHttpRequest.send(URLSearchParams) (35) >+PASS XMLHttpRequest.send(URLSearchParams) (36) >+PASS XMLHttpRequest.send(URLSearchParams) (37) >+PASS XMLHttpRequest.send(URLSearchParams) (38) >+PASS XMLHttpRequest.send(URLSearchParams) (39) >+PASS XMLHttpRequest.send(URLSearchParams) (40) >+PASS XMLHttpRequest.send(URLSearchParams) (41) >+PASS XMLHttpRequest.send(URLSearchParams) (42) >+PASS XMLHttpRequest.send(URLSearchParams) (43) >+PASS XMLHttpRequest.send(URLSearchParams) (44) >+PASS XMLHttpRequest.send(URLSearchParams) (45) >+PASS XMLHttpRequest.send(URLSearchParams) (46) >+PASS XMLHttpRequest.send(URLSearchParams) (47) >+PASS XMLHttpRequest.send(URLSearchParams) (48) >+PASS XMLHttpRequest.send(URLSearchParams) (49) >+PASS XMLHttpRequest.send(URLSearchParams) (50) >+PASS XMLHttpRequest.send(URLSearchParams) (51) >+PASS XMLHttpRequest.send(URLSearchParams) (52) >+PASS XMLHttpRequest.send(URLSearchParams) (53) >+PASS XMLHttpRequest.send(URLSearchParams) (54) >+PASS XMLHttpRequest.send(URLSearchParams) (55) >+PASS XMLHttpRequest.send(URLSearchParams) (56) >+PASS XMLHttpRequest.send(URLSearchParams) (57) >+PASS XMLHttpRequest.send(URLSearchParams) (58) >+PASS XMLHttpRequest.send(URLSearchParams) (59) >+PASS XMLHttpRequest.send(URLSearchParams) (60) >+PASS XMLHttpRequest.send(URLSearchParams) (61) >+PASS XMLHttpRequest.send(URLSearchParams) (62) >+PASS XMLHttpRequest.send(URLSearchParams) (63) >+PASS XMLHttpRequest.send(URLSearchParams) (64) >+PASS XMLHttpRequest.send(URLSearchParams) (65) >+PASS XMLHttpRequest.send(URLSearchParams) (66) >+PASS XMLHttpRequest.send(URLSearchParams) (67) >+PASS XMLHttpRequest.send(URLSearchParams) (68) >+PASS XMLHttpRequest.send(URLSearchParams) (69) >+PASS XMLHttpRequest.send(URLSearchParams) (70) >+PASS XMLHttpRequest.send(URLSearchParams) (71) >+PASS XMLHttpRequest.send(URLSearchParams) (72) >+PASS XMLHttpRequest.send(URLSearchParams) (73) >+PASS XMLHttpRequest.send(URLSearchParams) (74) >+PASS XMLHttpRequest.send(URLSearchParams) (75) >+PASS XMLHttpRequest.send(URLSearchParams) (76) >+PASS XMLHttpRequest.send(URLSearchParams) (77) >+PASS XMLHttpRequest.send(URLSearchParams) (78) >+PASS XMLHttpRequest.send(URLSearchParams) (79) >+PASS XMLHttpRequest.send(URLSearchParams) (80) >+PASS XMLHttpRequest.send(URLSearchParams) (81) >+PASS XMLHttpRequest.send(URLSearchParams) (82) >+PASS XMLHttpRequest.send(URLSearchParams) (83) >+PASS XMLHttpRequest.send(URLSearchParams) (84) >+PASS XMLHttpRequest.send(URLSearchParams) (85) >+PASS XMLHttpRequest.send(URLSearchParams) (86) >+PASS XMLHttpRequest.send(URLSearchParams) (87) >+PASS XMLHttpRequest.send(URLSearchParams) (88) >+PASS XMLHttpRequest.send(URLSearchParams) (89) >+PASS XMLHttpRequest.send(URLSearchParams) (90) >+PASS XMLHttpRequest.send(URLSearchParams) (91) >+PASS XMLHttpRequest.send(URLSearchParams) (92) >+PASS XMLHttpRequest.send(URLSearchParams) (93) >+PASS XMLHttpRequest.send(URLSearchParams) (94) >+PASS XMLHttpRequest.send(URLSearchParams) (95) >+PASS XMLHttpRequest.send(URLSearchParams) (96) >+PASS XMLHttpRequest.send(URLSearchParams) (97) >+PASS XMLHttpRequest.send(URLSearchParams) (98) >+PASS XMLHttpRequest.send(URLSearchParams) (99) >+PASS XMLHttpRequest.send(URLSearchParams) (100) >+PASS XMLHttpRequest.send(URLSearchParams) (101) >+PASS XMLHttpRequest.send(URLSearchParams) (102) >+PASS XMLHttpRequest.send(URLSearchParams) (103) >+PASS XMLHttpRequest.send(URLSearchParams) (104) >+PASS XMLHttpRequest.send(URLSearchParams) (105) >+PASS XMLHttpRequest.send(URLSearchParams) (106) >+PASS XMLHttpRequest.send(URLSearchParams) (107) >+PASS XMLHttpRequest.send(URLSearchParams) (108) >+PASS XMLHttpRequest.send(URLSearchParams) (109) >+PASS XMLHttpRequest.send(URLSearchParams) (110) >+PASS XMLHttpRequest.send(URLSearchParams) (111) >+PASS XMLHttpRequest.send(URLSearchParams) (112) >+PASS XMLHttpRequest.send(URLSearchParams) (113) >+PASS XMLHttpRequest.send(URLSearchParams) (114) >+PASS XMLHttpRequest.send(URLSearchParams) (115) >+PASS XMLHttpRequest.send(URLSearchParams) (116) >+PASS XMLHttpRequest.send(URLSearchParams) (117) >+PASS XMLHttpRequest.send(URLSearchParams) (118) >+PASS XMLHttpRequest.send(URLSearchParams) (119) >+PASS XMLHttpRequest.send(URLSearchParams) (120) >+PASS XMLHttpRequest.send(URLSearchParams) (121) >+PASS XMLHttpRequest.send(URLSearchParams) (122) >+PASS XMLHttpRequest.send(URLSearchParams) (123) >+PASS XMLHttpRequest.send(URLSearchParams) (124) >+PASS XMLHttpRequest.send(URLSearchParams) (125) >+PASS XMLHttpRequest.send(URLSearchParams) (126) >+PASS XMLHttpRequest.send(URLSearchParams) (127) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b9c1099b79da7954891579851da8473fc1936cea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any-expected.txt >@@ -0,0 +1,131 @@ >+ >+PASS Overall fetch with URLSearchParams >+PASS XMLHttpRequest.send(URLSearchParams) (0) >+PASS XMLHttpRequest.send(URLSearchParams) (1) >+PASS XMLHttpRequest.send(URLSearchParams) (2) >+PASS XMLHttpRequest.send(URLSearchParams) (3) >+PASS XMLHttpRequest.send(URLSearchParams) (4) >+PASS XMLHttpRequest.send(URLSearchParams) (5) >+PASS XMLHttpRequest.send(URLSearchParams) (6) >+PASS XMLHttpRequest.send(URLSearchParams) (7) >+PASS XMLHttpRequest.send(URLSearchParams) (8) >+PASS XMLHttpRequest.send(URLSearchParams) (9) >+PASS XMLHttpRequest.send(URLSearchParams) (10) >+PASS XMLHttpRequest.send(URLSearchParams) (11) >+PASS XMLHttpRequest.send(URLSearchParams) (12) >+PASS XMLHttpRequest.send(URLSearchParams) (13) >+PASS XMLHttpRequest.send(URLSearchParams) (14) >+PASS XMLHttpRequest.send(URLSearchParams) (15) >+PASS XMLHttpRequest.send(URLSearchParams) (16) >+PASS XMLHttpRequest.send(URLSearchParams) (17) >+PASS XMLHttpRequest.send(URLSearchParams) (18) >+PASS XMLHttpRequest.send(URLSearchParams) (19) >+PASS XMLHttpRequest.send(URLSearchParams) (20) >+PASS XMLHttpRequest.send(URLSearchParams) (21) >+PASS XMLHttpRequest.send(URLSearchParams) (22) >+PASS XMLHttpRequest.send(URLSearchParams) (23) >+PASS XMLHttpRequest.send(URLSearchParams) (24) >+PASS XMLHttpRequest.send(URLSearchParams) (25) >+PASS XMLHttpRequest.send(URLSearchParams) (26) >+PASS XMLHttpRequest.send(URLSearchParams) (27) >+PASS XMLHttpRequest.send(URLSearchParams) (28) >+PASS XMLHttpRequest.send(URLSearchParams) (29) >+PASS XMLHttpRequest.send(URLSearchParams) (30) >+PASS XMLHttpRequest.send(URLSearchParams) (31) >+PASS XMLHttpRequest.send(URLSearchParams) (32) >+PASS XMLHttpRequest.send(URLSearchParams) (33) >+PASS XMLHttpRequest.send(URLSearchParams) (34) >+PASS XMLHttpRequest.send(URLSearchParams) (35) >+PASS XMLHttpRequest.send(URLSearchParams) (36) >+PASS XMLHttpRequest.send(URLSearchParams) (37) >+PASS XMLHttpRequest.send(URLSearchParams) (38) >+PASS XMLHttpRequest.send(URLSearchParams) (39) >+PASS XMLHttpRequest.send(URLSearchParams) (40) >+PASS XMLHttpRequest.send(URLSearchParams) (41) >+PASS XMLHttpRequest.send(URLSearchParams) (42) >+PASS XMLHttpRequest.send(URLSearchParams) (43) >+PASS XMLHttpRequest.send(URLSearchParams) (44) >+PASS XMLHttpRequest.send(URLSearchParams) (45) >+PASS XMLHttpRequest.send(URLSearchParams) (46) >+PASS XMLHttpRequest.send(URLSearchParams) (47) >+PASS XMLHttpRequest.send(URLSearchParams) (48) >+PASS XMLHttpRequest.send(URLSearchParams) (49) >+PASS XMLHttpRequest.send(URLSearchParams) (50) >+PASS XMLHttpRequest.send(URLSearchParams) (51) >+PASS XMLHttpRequest.send(URLSearchParams) (52) >+PASS XMLHttpRequest.send(URLSearchParams) (53) >+PASS XMLHttpRequest.send(URLSearchParams) (54) >+PASS XMLHttpRequest.send(URLSearchParams) (55) >+PASS XMLHttpRequest.send(URLSearchParams) (56) >+PASS XMLHttpRequest.send(URLSearchParams) (57) >+PASS XMLHttpRequest.send(URLSearchParams) (58) >+PASS XMLHttpRequest.send(URLSearchParams) (59) >+PASS XMLHttpRequest.send(URLSearchParams) (60) >+PASS XMLHttpRequest.send(URLSearchParams) (61) >+PASS XMLHttpRequest.send(URLSearchParams) (62) >+PASS XMLHttpRequest.send(URLSearchParams) (63) >+PASS XMLHttpRequest.send(URLSearchParams) (64) >+PASS XMLHttpRequest.send(URLSearchParams) (65) >+PASS XMLHttpRequest.send(URLSearchParams) (66) >+PASS XMLHttpRequest.send(URLSearchParams) (67) >+PASS XMLHttpRequest.send(URLSearchParams) (68) >+PASS XMLHttpRequest.send(URLSearchParams) (69) >+PASS XMLHttpRequest.send(URLSearchParams) (70) >+PASS XMLHttpRequest.send(URLSearchParams) (71) >+PASS XMLHttpRequest.send(URLSearchParams) (72) >+PASS XMLHttpRequest.send(URLSearchParams) (73) >+PASS XMLHttpRequest.send(URLSearchParams) (74) >+PASS XMLHttpRequest.send(URLSearchParams) (75) >+PASS XMLHttpRequest.send(URLSearchParams) (76) >+PASS XMLHttpRequest.send(URLSearchParams) (77) >+PASS XMLHttpRequest.send(URLSearchParams) (78) >+PASS XMLHttpRequest.send(URLSearchParams) (79) >+PASS XMLHttpRequest.send(URLSearchParams) (80) >+PASS XMLHttpRequest.send(URLSearchParams) (81) >+PASS XMLHttpRequest.send(URLSearchParams) (82) >+PASS XMLHttpRequest.send(URLSearchParams) (83) >+PASS XMLHttpRequest.send(URLSearchParams) (84) >+PASS XMLHttpRequest.send(URLSearchParams) (85) >+PASS XMLHttpRequest.send(URLSearchParams) (86) >+PASS XMLHttpRequest.send(URLSearchParams) (87) >+PASS XMLHttpRequest.send(URLSearchParams) (88) >+PASS XMLHttpRequest.send(URLSearchParams) (89) >+PASS XMLHttpRequest.send(URLSearchParams) (90) >+PASS XMLHttpRequest.send(URLSearchParams) (91) >+PASS XMLHttpRequest.send(URLSearchParams) (92) >+PASS XMLHttpRequest.send(URLSearchParams) (93) >+PASS XMLHttpRequest.send(URLSearchParams) (94) >+PASS XMLHttpRequest.send(URLSearchParams) (95) >+PASS XMLHttpRequest.send(URLSearchParams) (96) >+PASS XMLHttpRequest.send(URLSearchParams) (97) >+PASS XMLHttpRequest.send(URLSearchParams) (98) >+PASS XMLHttpRequest.send(URLSearchParams) (99) >+PASS XMLHttpRequest.send(URLSearchParams) (100) >+PASS XMLHttpRequest.send(URLSearchParams) (101) >+PASS XMLHttpRequest.send(URLSearchParams) (102) >+PASS XMLHttpRequest.send(URLSearchParams) (103) >+PASS XMLHttpRequest.send(URLSearchParams) (104) >+PASS XMLHttpRequest.send(URLSearchParams) (105) >+PASS XMLHttpRequest.send(URLSearchParams) (106) >+PASS XMLHttpRequest.send(URLSearchParams) (107) >+PASS XMLHttpRequest.send(URLSearchParams) (108) >+PASS XMLHttpRequest.send(URLSearchParams) (109) >+PASS XMLHttpRequest.send(URLSearchParams) (110) >+PASS XMLHttpRequest.send(URLSearchParams) (111) >+PASS XMLHttpRequest.send(URLSearchParams) (112) >+PASS XMLHttpRequest.send(URLSearchParams) (113) >+PASS XMLHttpRequest.send(URLSearchParams) (114) >+PASS XMLHttpRequest.send(URLSearchParams) (115) >+PASS XMLHttpRequest.send(URLSearchParams) (116) >+PASS XMLHttpRequest.send(URLSearchParams) (117) >+PASS XMLHttpRequest.send(URLSearchParams) (118) >+PASS XMLHttpRequest.send(URLSearchParams) (119) >+PASS XMLHttpRequest.send(URLSearchParams) (120) >+PASS XMLHttpRequest.send(URLSearchParams) (121) >+PASS XMLHttpRequest.send(URLSearchParams) (122) >+PASS XMLHttpRequest.send(URLSearchParams) (123) >+PASS XMLHttpRequest.send(URLSearchParams) (124) >+PASS XMLHttpRequest.send(URLSearchParams) (125) >+PASS XMLHttpRequest.send(URLSearchParams) (126) >+PASS XMLHttpRequest.send(URLSearchParams) (127) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..b0baf4a525ad20185d15a2e2659b9202285ce178 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.js >@@ -0,0 +1,46 @@ >+const NUM_TESTS = 128; >+ >+function encode(n) { >+ if (n === 0x20) { >+ return "\x2B"; >+ } >+ >+ if (n === 0x2A || n === 0x2D || n === 0x2E || >+ (0x30 <= n && n <= 0x39) || (0x41 <= n && n <= 0x5A) || >+ n === 0x5F || (0x61 <= n && n <= 0x7A)) { >+ return String.fromCharCode(n); >+ } >+ >+ var s = n.toString(16).toUpperCase(); >+ return "%" + (s.length === 2 ? s : '0' + s); >+} >+ >+ var tests = []; >+ var overall_test = async_test("Overall fetch with URLSearchParams"); >+ for (var i = 0; i < NUM_TESTS; i++) { >+ // Multiple subtests so that failures can be fine-grained >+ tests[i] = async_test("XMLHttpRequest.send(URLSearchParams) (" + i + ")"); >+ } >+ >+ // We use a single XHR since this test tends to time out >+ // with 128 consecutive fetches when run in parallel >+ // with many other WPT tests. >+ var x = new XMLHttpRequest(); >+ x.onload = overall_test.step_func(function() { >+ var response_split = x.response.split("&"); >+ overall_test.done(); >+ for (var i = 0; i < NUM_TESTS; i++) { >+ tests[i].step(function() { >+ assert_equals(response_split[i], "a" + i + "="+encode(i)); >+ tests[i].done(); >+ }); >+ } >+ }); >+ x.onerror = overall_test.unreached_func(); >+ >+ x.open("POST", "resources/content.py"); >+ var usp = new URLSearchParams(); >+ for (var i = 0; i < NUM_TESTS; i++) { >+ usp.append("a" + i, String.fromCharCode(i)); >+ } >+ x.send(usp) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b9c1099b79da7954891579851da8473fc1936cea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.worker-expected.txt >@@ -0,0 +1,131 @@ >+ >+PASS Overall fetch with URLSearchParams >+PASS XMLHttpRequest.send(URLSearchParams) (0) >+PASS XMLHttpRequest.send(URLSearchParams) (1) >+PASS XMLHttpRequest.send(URLSearchParams) (2) >+PASS XMLHttpRequest.send(URLSearchParams) (3) >+PASS XMLHttpRequest.send(URLSearchParams) (4) >+PASS XMLHttpRequest.send(URLSearchParams) (5) >+PASS XMLHttpRequest.send(URLSearchParams) (6) >+PASS XMLHttpRequest.send(URLSearchParams) (7) >+PASS XMLHttpRequest.send(URLSearchParams) (8) >+PASS XMLHttpRequest.send(URLSearchParams) (9) >+PASS XMLHttpRequest.send(URLSearchParams) (10) >+PASS XMLHttpRequest.send(URLSearchParams) (11) >+PASS XMLHttpRequest.send(URLSearchParams) (12) >+PASS XMLHttpRequest.send(URLSearchParams) (13) >+PASS XMLHttpRequest.send(URLSearchParams) (14) >+PASS XMLHttpRequest.send(URLSearchParams) (15) >+PASS XMLHttpRequest.send(URLSearchParams) (16) >+PASS XMLHttpRequest.send(URLSearchParams) (17) >+PASS XMLHttpRequest.send(URLSearchParams) (18) >+PASS XMLHttpRequest.send(URLSearchParams) (19) >+PASS XMLHttpRequest.send(URLSearchParams) (20) >+PASS XMLHttpRequest.send(URLSearchParams) (21) >+PASS XMLHttpRequest.send(URLSearchParams) (22) >+PASS XMLHttpRequest.send(URLSearchParams) (23) >+PASS XMLHttpRequest.send(URLSearchParams) (24) >+PASS XMLHttpRequest.send(URLSearchParams) (25) >+PASS XMLHttpRequest.send(URLSearchParams) (26) >+PASS XMLHttpRequest.send(URLSearchParams) (27) >+PASS XMLHttpRequest.send(URLSearchParams) (28) >+PASS XMLHttpRequest.send(URLSearchParams) (29) >+PASS XMLHttpRequest.send(URLSearchParams) (30) >+PASS XMLHttpRequest.send(URLSearchParams) (31) >+PASS XMLHttpRequest.send(URLSearchParams) (32) >+PASS XMLHttpRequest.send(URLSearchParams) (33) >+PASS XMLHttpRequest.send(URLSearchParams) (34) >+PASS XMLHttpRequest.send(URLSearchParams) (35) >+PASS XMLHttpRequest.send(URLSearchParams) (36) >+PASS XMLHttpRequest.send(URLSearchParams) (37) >+PASS XMLHttpRequest.send(URLSearchParams) (38) >+PASS XMLHttpRequest.send(URLSearchParams) (39) >+PASS XMLHttpRequest.send(URLSearchParams) (40) >+PASS XMLHttpRequest.send(URLSearchParams) (41) >+PASS XMLHttpRequest.send(URLSearchParams) (42) >+PASS XMLHttpRequest.send(URLSearchParams) (43) >+PASS XMLHttpRequest.send(URLSearchParams) (44) >+PASS XMLHttpRequest.send(URLSearchParams) (45) >+PASS XMLHttpRequest.send(URLSearchParams) (46) >+PASS XMLHttpRequest.send(URLSearchParams) (47) >+PASS XMLHttpRequest.send(URLSearchParams) (48) >+PASS XMLHttpRequest.send(URLSearchParams) (49) >+PASS XMLHttpRequest.send(URLSearchParams) (50) >+PASS XMLHttpRequest.send(URLSearchParams) (51) >+PASS XMLHttpRequest.send(URLSearchParams) (52) >+PASS XMLHttpRequest.send(URLSearchParams) (53) >+PASS XMLHttpRequest.send(URLSearchParams) (54) >+PASS XMLHttpRequest.send(URLSearchParams) (55) >+PASS XMLHttpRequest.send(URLSearchParams) (56) >+PASS XMLHttpRequest.send(URLSearchParams) (57) >+PASS XMLHttpRequest.send(URLSearchParams) (58) >+PASS XMLHttpRequest.send(URLSearchParams) (59) >+PASS XMLHttpRequest.send(URLSearchParams) (60) >+PASS XMLHttpRequest.send(URLSearchParams) (61) >+PASS XMLHttpRequest.send(URLSearchParams) (62) >+PASS XMLHttpRequest.send(URLSearchParams) (63) >+PASS XMLHttpRequest.send(URLSearchParams) (64) >+PASS XMLHttpRequest.send(URLSearchParams) (65) >+PASS XMLHttpRequest.send(URLSearchParams) (66) >+PASS XMLHttpRequest.send(URLSearchParams) (67) >+PASS XMLHttpRequest.send(URLSearchParams) (68) >+PASS XMLHttpRequest.send(URLSearchParams) (69) >+PASS XMLHttpRequest.send(URLSearchParams) (70) >+PASS XMLHttpRequest.send(URLSearchParams) (71) >+PASS XMLHttpRequest.send(URLSearchParams) (72) >+PASS XMLHttpRequest.send(URLSearchParams) (73) >+PASS XMLHttpRequest.send(URLSearchParams) (74) >+PASS XMLHttpRequest.send(URLSearchParams) (75) >+PASS XMLHttpRequest.send(URLSearchParams) (76) >+PASS XMLHttpRequest.send(URLSearchParams) (77) >+PASS XMLHttpRequest.send(URLSearchParams) (78) >+PASS XMLHttpRequest.send(URLSearchParams) (79) >+PASS XMLHttpRequest.send(URLSearchParams) (80) >+PASS XMLHttpRequest.send(URLSearchParams) (81) >+PASS XMLHttpRequest.send(URLSearchParams) (82) >+PASS XMLHttpRequest.send(URLSearchParams) (83) >+PASS XMLHttpRequest.send(URLSearchParams) (84) >+PASS XMLHttpRequest.send(URLSearchParams) (85) >+PASS XMLHttpRequest.send(URLSearchParams) (86) >+PASS XMLHttpRequest.send(URLSearchParams) (87) >+PASS XMLHttpRequest.send(URLSearchParams) (88) >+PASS XMLHttpRequest.send(URLSearchParams) (89) >+PASS XMLHttpRequest.send(URLSearchParams) (90) >+PASS XMLHttpRequest.send(URLSearchParams) (91) >+PASS XMLHttpRequest.send(URLSearchParams) (92) >+PASS XMLHttpRequest.send(URLSearchParams) (93) >+PASS XMLHttpRequest.send(URLSearchParams) (94) >+PASS XMLHttpRequest.send(URLSearchParams) (95) >+PASS XMLHttpRequest.send(URLSearchParams) (96) >+PASS XMLHttpRequest.send(URLSearchParams) (97) >+PASS XMLHttpRequest.send(URLSearchParams) (98) >+PASS XMLHttpRequest.send(URLSearchParams) (99) >+PASS XMLHttpRequest.send(URLSearchParams) (100) >+PASS XMLHttpRequest.send(URLSearchParams) (101) >+PASS XMLHttpRequest.send(URLSearchParams) (102) >+PASS XMLHttpRequest.send(URLSearchParams) (103) >+PASS XMLHttpRequest.send(URLSearchParams) (104) >+PASS XMLHttpRequest.send(URLSearchParams) (105) >+PASS XMLHttpRequest.send(URLSearchParams) (106) >+PASS XMLHttpRequest.send(URLSearchParams) (107) >+PASS XMLHttpRequest.send(URLSearchParams) (108) >+PASS XMLHttpRequest.send(URLSearchParams) (109) >+PASS XMLHttpRequest.send(URLSearchParams) (110) >+PASS XMLHttpRequest.send(URLSearchParams) (111) >+PASS XMLHttpRequest.send(URLSearchParams) (112) >+PASS XMLHttpRequest.send(URLSearchParams) (113) >+PASS XMLHttpRequest.send(URLSearchParams) (114) >+PASS XMLHttpRequest.send(URLSearchParams) (115) >+PASS XMLHttpRequest.send(URLSearchParams) (116) >+PASS XMLHttpRequest.send(URLSearchParams) (117) >+PASS XMLHttpRequest.send(URLSearchParams) (118) >+PASS XMLHttpRequest.send(URLSearchParams) (119) >+PASS XMLHttpRequest.send(URLSearchParams) (120) >+PASS XMLHttpRequest.send(URLSearchParams) (121) >+PASS XMLHttpRequest.send(URLSearchParams) (122) >+PASS XMLHttpRequest.send(URLSearchParams) (123) >+PASS XMLHttpRequest.send(URLSearchParams) (124) >+PASS XMLHttpRequest.send(URLSearchParams) (125) >+PASS XMLHttpRequest.send(URLSearchParams) (126) >+PASS XMLHttpRequest.send(URLSearchParams) (127) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1753e5f3a5bd08b04d1956215ab5905c7552ceb2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>XMLHttpRequest.send(URLSearchParams)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="send-usp.js"></script> >+<div id="log"></div> >+<script> >+run_test(); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.js >new file mode 100644 >index 0000000000000000000000000000000000000000..c00b2e0e0ca82a10a629fb4a9f5c940edf02074c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.js >@@ -0,0 +1,48 @@ >+const NUM_TESTS = 128; >+ >+function encode(n) { >+ if (n === 0x20) { >+ return "\x2B"; >+ } >+ >+ if (n === 0x2A || n === 0x2D || n === 0x2E || >+ (0x30 <= n && n <= 0x39) || (0x41 <= n && n <= 0x5A) || >+ n === 0x5F || (0x61 <= n && n <= 0x7A)) { >+ return String.fromCharCode(n); >+ } >+ >+ var s = n.toString(16).toUpperCase(); >+ return "%" + (s.length === 2 ? s : '0' + s); >+} >+ >+function run_test() { >+ var tests = []; >+ var overall_test = async_test("Overall fetch with URLSearchParams"); >+ for (var i = 0; i < NUM_TESTS; i++) { >+ // Multiple subtests so that failures can be fine-grained >+ tests[i] = async_test("XMLHttpRequest.send(URLSearchParams) (" + i + ")"); >+ } >+ >+ // We use a single XHR since this test tends to time out >+ // with 128 consecutive fetches when run in parallel >+ // with many other WPT tests. >+ var x = new XMLHttpRequest(); >+ x.onload = overall_test.step_func(function() { >+ var response_split = x.response.split("&"); >+ overall_test.done(); >+ for (var i = 0; i < NUM_TESTS; i++) { >+ tests[i].step(function() { >+ assert_equals(response_split[i], "a" + i + "="+encode(i)); >+ tests[i].done(); >+ }); >+ } >+ }); >+ x.onerror = overall_test.unreached_func(); >+ >+ x.open("POST", "resources/content.py"); >+ var usp = new URLSearchParams(); >+ for (var i = 0; i < NUM_TESTS; i++) { >+ usp.append("a" + i, String.fromCharCode(i)); >+ } >+ x.send(usp) >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-after-send-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-after-send-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2ef02caf92cd73d9e0e9b89e54e25b16ab64f1ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-after-send-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: setRequestHeader() after send() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-after-send.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-after-send.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..7ccdb3e4c3109091286c02bbea7a5892215714f0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-after-send.htm >@@ -0,0 +1,27 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: setRequestHeader() after send()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="/following::ol/li[2]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/delay.py?ms=0") >+ client.onreadystatechange = function() { >+ test.step(function() { >+ assert_throws("InvalidStateError", function() { client.setRequestHeader("x-test", "test") }) >+ if(client.readyState == 4) >+ test.done() >+ }) >+ } >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-empty-value-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-empty-value-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5e7163f0045ee6ae4f228d50fdd4cfc7eb084420 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-empty-value-expected.txt >@@ -0,0 +1,5 @@ >+ >+FAIL XMLHttpRequest: setRequestHeader() - empty header () assert_equals: expected "X-Empty: \n" but got "X-Empty: \n" >+PASS XMLHttpRequest: setRequestHeader() - empty header (null) >+PASS XMLHttpRequest: setRequestHeader() - empty header (undefined) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-empty-value.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-empty-value.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..4479504c2a62d7fa0ec9388252e38b50ae011131 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-empty-value.htm >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: setRequestHeader() - empty header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(value) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("POST", "resources/inspect-headers.py?filter_name=X-Empty", false) >+ client.setRequestHeader('X-Empty', value) >+ client.send(null) >+ assert_equals(client.responseText, 'X-Empty: ' + value + '\n' ) >+ }, document.title + " (" + value + ")") >+ } >+ request("") >+ request(null) >+ request(undefined) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-whitespace-in-value-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-whitespace-in-value-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..88f720abcac83e477df5cd6e5b7d8da9cb389bf1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-whitespace-in-value-expected.txt >@@ -0,0 +1,6 @@ >+ >+FAIL XMLHttpRequest: setRequestHeader() - header value with whitespace ( ) assert_equals: expected "X-Empty: \n" but got "X-Empty: \n" >+PASS XMLHttpRequest: setRequestHeader() - header value with whitespace ( t) >+PASS XMLHttpRequest: setRequestHeader() - header value with whitespace (t ) >+PASS XMLHttpRequest: setRequestHeader() - header value with whitespace ( t ) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-whitespace-in-value.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-whitespace-in-value.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..f2e0a370e665639aed5a6d747e5567bb6e38d7cc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-whitespace-in-value.htm >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: setRequestHeader() - header value with whitespace</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(value) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("POST", "resources/inspect-headers.py?filter_name=X-Empty", false) >+ client.setRequestHeader('X-Empty', value) >+ client.send(null) >+ assert_equals(client.responseText, 'X-Empty: ' + value.trim() + '\n' ) >+ }, document.title + " (" + value + ")") >+ } >+ request(" ") >+ request(" t") >+ request("t ") >+ request(" t ") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-before-open-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-before-open-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5d98ed8cca3b49d3c9c0505ee92e96fd125f58ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-before-open-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS setRequestHeader invoked before open() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-before-open.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-before-open.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..cbe4b299c9dac18154340493073e7419b0773cb8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-before-open.htm >@@ -0,0 +1,18 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: setRequestHeader() before open()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol/li[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ assert_throws("InvalidStateError", function() { client.setRequestHeader("x-test", "test") }) >+ }, 'setRequestHeader invoked before open()') >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-name-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-name-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..606f6c9ba7a60d5628e194c81c6cb9dcc54d4c1d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-name-expected.txt >@@ -0,0 +1,73 @@ >+ >+PASS setRequestHeader should throw with header name "(". >+PASS setRequestHeader should throw with header name ")". >+PASS setRequestHeader should throw with header name "<". >+PASS setRequestHeader should throw with header name ">". >+PASS setRequestHeader should throw with header name "@". >+PASS setRequestHeader should throw with header name ",". >+PASS setRequestHeader should throw with header name ";". >+PASS setRequestHeader should throw with header name ":". >+PASS setRequestHeader should throw with header name "\\". >+PASS setRequestHeader should throw with header name "\"". >+PASS setRequestHeader should throw with header name "/". >+PASS setRequestHeader should throw with header name "[". >+PASS setRequestHeader should throw with header name "]". >+PASS setRequestHeader should throw with header name "?". >+PASS setRequestHeader should throw with header name "=". >+PASS setRequestHeader should throw with header name "{". >+PASS setRequestHeader should throw with header name "}". >+PASS setRequestHeader should throw with header name " ". >+PASS setRequestHeader should throw with header name "". >+PASS setRequestHeader should throw with header name "". >+PASS setRequestHeader should throw with header name "t\rt". >+PASS setRequestHeader should throw with header name "t\nt". >+PASS setRequestHeader should throw with header name "t: t". >+PASS setRequestHeader should throw with header name "t:t". >+PASS setRequestHeader should throw with header name "t<t". >+PASS setRequestHeader should throw with header name "t t". >+PASS setRequestHeader should throw with header name " tt". >+PASS setRequestHeader should throw with header name ":tt". >+PASS setRequestHeader should throw with header name "\ttt". >+PASS setRequestHeader should throw with header name "\vtt". >+PASS setRequestHeader should throw with header name "t\0t". >+PASS setRequestHeader should throw with header name "t\"t". >+PASS setRequestHeader should throw with header name "t,t". >+PASS setRequestHeader should throw with header name "t;t". >+PASS setRequestHeader should throw with header name "()[]{}". >+PASS setRequestHeader should throw with header name "a?B". >+PASS setRequestHeader should throw with header name "a=B". >+PASS setRequestHeader should throw with header name "\0". >+PASS setRequestHeader should throw with header name "\x01". >+PASS setRequestHeader should throw with header name "\x02". >+PASS setRequestHeader should throw with header name "\x03". >+PASS setRequestHeader should throw with header name "\x04". >+PASS setRequestHeader should throw with header name "\x05". >+PASS setRequestHeader should throw with header name "\x06". >+PASS setRequestHeader should throw with header name "\x07". >+PASS setRequestHeader should throw with header name "\b". >+PASS setRequestHeader should throw with header name "\t". >+PASS setRequestHeader should throw with header name "\n". >+PASS setRequestHeader should throw with header name "\v". >+PASS setRequestHeader should throw with header name "\f". >+PASS setRequestHeader should throw with header name "\r". >+PASS setRequestHeader should throw with header name "\x0e". >+PASS setRequestHeader should throw with header name "\x0f". >+PASS setRequestHeader should throw with header name "\x10". >+PASS setRequestHeader should throw with header name "\x11". >+PASS setRequestHeader should throw with header name "\x12". >+PASS setRequestHeader should throw with header name "\x13". >+PASS setRequestHeader should throw with header name "\x14". >+PASS setRequestHeader should throw with header name "\x15". >+PASS setRequestHeader should throw with header name "\x16". >+PASS setRequestHeader should throw with header name "\x17". >+PASS setRequestHeader should throw with header name "\x18". >+PASS setRequestHeader should throw with header name "\x19". >+PASS setRequestHeader should throw with header name "\x1a". >+PASS setRequestHeader should throw with header name "\x1b". >+PASS setRequestHeader should throw with header name "\x1c". >+PASS setRequestHeader should throw with header name "\x1d". >+PASS setRequestHeader should throw with header name "\x1e". >+PASS setRequestHeader should throw with header name "\x1f". >+PASS setRequestHeader should throw with header name "ï¾ï½½ï¾". >+PASS setRequestHeader should throw with header name "X-ï¾ï½½ï¾". >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-name.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-name.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..86e55f33a00649cf25c05b04914fb7756ef6bcb9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-name.htm >@@ -0,0 +1,59 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: setRequestHeader() name argument checks</title> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="/following::ol/li[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+<!-- >+ CHAR = <any US-ASCII character (octets 0 - 127)> >+ CTL = <any US-ASCII control character >+ (octets 0 - 31) and DEL (127)> >+ SP = <US-ASCII SP, space (32)> >+ HT = <US-ASCII HT, horizontal-tab (9)> >+ token = 1*<any CHAR except CTLs or separators> >+ separators = "(" | ")" | "<" | ">" | "@" >+ | "," | ";" | ":" | "\" | <"> >+ | "/" | "[" | "]" | "?" | "=" >+ | "{" | "}" | SP | HT >+ field-name = token >+--> >+ <script> >+ function try_name(name) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "...") >+ assert_throws("SyntaxError", function() { client.setRequestHeader(name, 'x-value') }) >+ }, "setRequestHeader should throw with header name " + format_value(invalid_headers[i]) + ".") >+ } >+ function try_byte_string(name) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "...") >+ assert_throws(new TypeError(), function() { client.setRequestHeader(name, 'x-value') }) >+ }, "setRequestHeader should throw with header name " + format_value(invalid_byte_strings[i]) + ".") >+ } >+ var invalid_headers = ["(", ")", "<", ">", "@", ",", ";", ":", "\\", >+ "\"", "/", "[", "]", "?", "=", "{", "}", " ", >+ /* HT already tested in the loop below */ >+ "\u007f", "", "t\rt", "t\nt", "t: t", "t:t", >+ "t<t", "t t", " tt", ":tt", "\ttt", "\vtt", "t\0t", >+ "t\"t", "t,t", "t;t", "()[]{}", "a?B", "a=B"] >+ var invalid_byte_strings = ["ï¾ï½½ï¾", "X-ï¾ï½½ï¾"] >+ for (var i = 0; i < 32; ++i) { >+ invalid_headers.push(String.fromCharCode(i)) >+ } >+ for (var i = 0; i < invalid_headers.length; ++i) { >+ try_name(invalid_headers[i]) >+ } >+ for (var i = 0; i < invalid_byte_strings.length; ++i) { >+ try_byte_string(invalid_byte_strings[i]) >+ } >+ >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-value-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-value-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b78997f2a60a3bfcdff931a6f34c0d212bdba014 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-value-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS XMLHttpRequest: setRequestHeader() value argument checks >+PASS XMLHttpRequest: setRequestHeader() value argument checks 1 >+PASS XMLHttpRequest: setRequestHeader() value argument checks 2 >+PASS XMLHttpRequest: setRequestHeader() value argument checks 3 >+PASS Omitted value argument >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-value.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-value.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..15fbb39052526df052af8940cb8db7149302afc4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-value.htm >@@ -0,0 +1,36 @@ >+<!doctype html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>XMLHttpRequest: setRequestHeader() value argument checks</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="/following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function try_value(value) { >+ test(function() { >+ var client = new XMLHttpRequest(); >+ client.open("GET", "..."); >+ assert_throws("SyntaxError", function() { client.setRequestHeader("x-test", value) }, ' given value ' + value+', '); >+ }); >+ } >+ try_value("t\x00t"); >+ try_value("t\rt"); >+ try_value("t\nt"); >+ test(function() { >+ var client = new XMLHttpRequest(); >+ client.open("GET", "..."); >+ assert_throws(new TypeError(), function() { client.setRequestHeader("x-test", "ï¾ï½½ï¾") }, ' given value ï¾ï½½ï¾,'); >+ }); >+ >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "...") >+ assert_throws(new TypeError(), function() { client.setRequestHeader("x-test") }) >+ }, 'Omitted value argument') >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-case-insensitive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-case-insensitive-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9bf2beaafada376d3934a75cba7390dc33f20f02 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-case-insensitive-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: setRequestHeader() - headers that differ in case >+FAIL XMLHttpRequest: setRequestHeader() - headers that differ in case 1 assert_regexp_match: expected object "/content-TYPE/" but got "Host: localhost:8800\r\nContent-Type: x/x\r\nConnection: keep-alive\r\nTHIS-IS-A-TEST: 1, 2\r\nAccept: */*\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko)\r\nReferer: http://localhost:8800/xhr/setrequestheader-case-insensitive.htm\r\nAccept-Language: en-us\r\nAccept-Encoding: gzip, deflate\r\n" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-case-insensitive.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-case-insensitive.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..1aed30d1c2a13fcb35e90a31e599a6cc963c6491 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-case-insensitive.htm >@@ -0,0 +1,34 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: setRequestHeader() - headers that differ in case</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("POST", "resources/inspect-headers.py?filter_value=t1, t2, t3", false) >+ client.setRequestHeader("x-test", "t1") >+ client.setRequestHeader("X-TEST", "t2") >+ client.setRequestHeader("X-teST", "t3") >+ client.send(null) >+ assert_equals(client.responseText, "x-test,") >+ }) >+ >+ test(() => { >+ const client = new XMLHttpRequest >+ client.open("GET", "resources/echo-headers.py", false) >+ client.setRequestHeader("THIS-IS-A-TEST", "1") >+ client.setRequestHeader("THIS-is-A-test", "2") >+ client.setRequestHeader("content-TYPE", "x/x") >+ client.send() >+ assert_regexp_match(client.responseText, /content-TYPE/) >+ assert_regexp_match(client.responseText, /THIS-IS-A-TEST: 1, 2/) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c97aa8773c4c9b1042a59f441a9a0e3ed989e7ac >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt >@@ -0,0 +1,38 @@ >+CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+ >+FAIL setRequestHeader("") sends a blank string assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL setRequestHeader(" ") sends the string " " assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS setRequestHeader(null) sends the string "null" >+PASS setRequestHeader(undefined) sends the string "undefined" >+PASS String request has correct default Content-Type of "text/plain;charset=UTF-8" >+PASS String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >+FAIL XML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS XML Document request has correct default Content-Type of "application/xml;charset=UTF-8" >+FAIL XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: application/xhtml+xml;charset=UTF-8\n" but got "Content-Type: application/xhtml+xml;charset=ASCII\n" >+FAIL HTML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS HTML Document request has correct default Content-Type of "text/html;charset=UTF-8" >+FAIL HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: text/html+junk;charset=UTF-8\n" but got "Content-Type: text/html+junk;charset=ASCII\n" >+FAIL Blob request respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL Blob request with unset type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: \n" >+PASS Blob request with unset type keeps setRequestHeader() Content-Type and charset >+FAIL Blob request with set type respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS Blob request with set type uses that it for Content-Type unless setRequestHeader() >+PASS Blob request with set type keeps setRequestHeader() Content-Type and charset >+FAIL ArrayBuffer request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL ArrayBuffer request sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: application/x-www-form-urlencoded\n" >+PASS ArrayBuffer request keeps setRequestHeader() Content-Type and charset >+FAIL ArrayBufferView request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL ArrayBufferView request sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: application/x-www-form-urlencoded\n" >+PASS ArrayBufferView request keeps setRequestHeader() Content-Type and charset >+FAIL FormData request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS FormData request has correct default Content-Type of "multipart/form-data; boundary=_" >+PASS FormData request keeps setRequestHeader() Content-Type and charset >+FAIL URLSearchParams respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8" assert_equals: expected "Content-Type: application/x-www-form-urlencoded;charset=UTF-8\n" but got "Content-Type: text/plain;charset=UTF-8\n" >+PASS URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >+FAIL ReadableStream request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL ReadableStream request with under type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: text/plain;charset=UTF-8\n" >+FAIL ReadableStream request keeps setRequestHeader() Content-Type and charset assert_equals: expected "Content-Type: application/xml;charset=ASCII\n" but got "Content-Type: application/xml;charset=UTF-8\n" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..55196d835d8830a64a213ea656ae2dc64dc74484 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type.htm >@@ -0,0 +1,237 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: setRequestHeader() - Content-Type header</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(inputGenerator, headersToSend, expectedType, title) { >+ test(function() { >+ const toSend = inputGenerator(), >+ client = new XMLHttpRequest() >+ client.open("POST", "resources/inspect-headers.py?filter_name=Content-Type", false) >+ for(header in headersToSend) { >+ if (headersToSend.hasOwnProperty(header)) { >+ client.setRequestHeader(header, headersToSend[header]); >+ } >+ } >+ client.send(toSend) >+ >+ const actual = client.responseText >+ if (expectedType === undefined || expectedType === null) { >+ assert_equals(actual, ""); >+ } else if (expectedType instanceof RegExp) { >+ assert_regexp_match(actual, expectedType); >+ } else { >+ assert_equals(actual, "Content-Type: " + expectedType + "\n"); >+ } >+ }, title) >+ } >+ request( >+ function _String() { return ""; }, >+ {"Content-Type": ""}, >+ "", >+ 'setRequestHeader("") sends a blank string' >+ ) >+ request( >+ function _String() { return ""; }, >+ {"Content-Type": " "}, >+ "", >+ 'setRequestHeader(" ") sends the string " "' >+ ) >+ request( >+ function _String() { return ""; }, >+ {"Content-Type": null}, >+ "null", >+ 'setRequestHeader(null) sends the string "null"' >+ ) >+ request( >+ function _String() { return ""; }, >+ {"Content-Type": undefined}, >+ "undefined", >+ 'setRequestHeader(undefined) sends the string "undefined"' >+ ) >+ request( >+ function _String() { return "test"; }, >+ {}, >+ "text/plain;charset=UTF-8", >+ 'String request has correct default Content-Type of "text/plain;charset=UTF-8"' >+ ) >+ request( >+ function _String() { return "test()"; }, >+ {"Content-Type": "text/javascript;charset=ASCII"}, >+ "text/javascript;charset=UTF-8", >+ "String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" >+ ) >+ request( >+ function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, >+ {"Content-Type": ""}, >+ "", >+ 'XML Document request respects setRequestHeader("")' >+ ) >+ request( >+ function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, >+ {}, >+ "application/xml;charset=UTF-8", >+ 'XML Document request has correct default Content-Type of "application/xml;charset=UTF-8"' >+ ) >+ request( >+ function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, >+ {"Content-Type": "application/xhtml+xml;charset=ASCII"}, >+ "application/xhtml+xml;charset=UTF-8", >+ "XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" >+ ) >+ request( >+ function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, >+ {"Content-Type": ""}, >+ "", >+ 'HTML Document request respects setRequestHeader("")' >+ ) >+ request( >+ function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, >+ {}, >+ "text/html;charset=UTF-8", >+ 'HTML Document request has correct default Content-Type of "text/html;charset=UTF-8"' >+ ) >+ request( >+ function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, >+ {"Content-Type": "text/html+junk;charset=ASCII"}, >+ "text/html+junk;charset=UTF-8", >+ "HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" >+ ) >+ request( >+ function _Blob() { return new Blob(["test"]); }, >+ {"Content-Type": ""}, >+ "", >+ 'Blob request respects setRequestHeader("") to be specified' >+ ) >+ request( >+ function _Blob() { return new Blob(["test"]); }, >+ {}, >+ undefined, >+ "Blob request with unset type sends no Content-Type without setRequestHeader() call" >+ ) >+ request( >+ function _Blob() { return new Blob(["test"]); }, >+ {"Content-Type": "application/xml;charset=ASCII"}, >+ "application/xml;charset=ASCII", >+ "Blob request with unset type keeps setRequestHeader() Content-Type and charset" >+ ) >+ request( >+ function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=ASCII"}); }, >+ {"Content-Type": ""}, >+ "", >+ 'Blob request with set type respects setRequestHeader("") to be specified' >+ ) >+ request( >+ function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=ASCII"}); }, >+ {}, >+ "application/xml;charset=ascii", // new Blob lowercases the type argument >+ "Blob request with set type uses that it for Content-Type unless setRequestHeader()" >+ ) >+ request( >+ function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=UTF8"}); }, >+ {"Content-Type": "application/xml+junk;charset=ASCII"}, >+ "application/xml+junk;charset=ASCII", >+ "Blob request with set type keeps setRequestHeader() Content-Type and charset" >+ ) >+ request( >+ function _ArrayBuffer() { return new ArrayBuffer(10); }, >+ {"Content-Type": ""}, >+ "", >+ 'ArrayBuffer request respects setRequestHeader("")' >+ ) >+ request( >+ function _ArrayBuffer() { return new ArrayBuffer(10); }, >+ {}, >+ undefined, >+ "ArrayBuffer request sends no Content-Type without setRequestHeader() call" >+ ) >+ request( >+ function _ArrayBuffer() { return new ArrayBuffer(10); }, >+ {"Content-Type": "application/xml;charset=ASCII"}, >+ "application/xml;charset=ASCII", >+ "ArrayBuffer request keeps setRequestHeader() Content-Type and charset" >+ ) >+ request( >+ function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, >+ {"Content-Type": ""}, >+ "", >+ 'ArrayBufferView request respects setRequestHeader("")' >+ ) >+ request( >+ function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, >+ {}, >+ undefined, >+ "ArrayBufferView request sends no Content-Type without setRequestHeader() call" >+ ) >+ request( >+ function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, >+ {"Content-Type": "application/xml;charset=ASCII"}, >+ "application/xml;charset=ASCII", >+ "ArrayBufferView request keeps setRequestHeader() Content-Type and charset" >+ ) >+ request( >+ function _FormData() { return new FormData(); }, >+ {"Content-Type": ""}, >+ "", >+ 'FormData request respects setRequestHeader("")' >+ ) >+ request( >+ function _FormData() { return new FormData(); }, >+ {}, >+ /multipart\/form-data; boundary=(.*)/, >+ 'FormData request has correct default Content-Type of "multipart\/form-data; boundary=_"' >+ ) >+ request( >+ function _FormData() { return new FormData(); }, >+ {"Content-Type": "application/xml;charset=ASCII"}, >+ "application/xml;charset=ASCII", >+ "FormData request keeps setRequestHeader() Content-Type and charset" >+ ) >+ request( >+ function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, >+ {"Content-Type": ""}, >+ "", >+ 'URLSearchParams respects setRequestHeader("")' >+ ) >+ request( >+ function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, >+ {}, >+ "application/x-www-form-urlencoded;charset=UTF-8", >+ 'URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8"' >+ ) >+ request( >+ function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, >+ {"Content-Type": "application/xml;charset=ASCII"}, >+ "application/xml;charset=UTF-8", >+ "URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" >+ // the default Content-Type for URLSearchParams has a charset specified (utf-8) in >+ // https://fetch.spec.whatwg.org/#bodyinit, so the user's must be changed to match it >+ // as per https://xhr.spec.whatwg.org/#the-send%28%29-method step 4. >+ ) >+ request( >+ function _ReadableStream() { return new ReadableStream() }, >+ {"Content-Type": ""}, >+ "", >+ 'ReadableStream request respects setRequestHeader("")' >+ ) >+ request( >+ function _ReadableStream() { return new ReadableStream() }, >+ {}, >+ undefined, >+ "ReadableStream request with under type sends no Content-Type without setRequestHeader() call" >+ ) >+ request( >+ function _ReadableStream() { return new ReadableStream() }, >+ {"Content-Type": "application/xml;charset=ASCII"}, >+ "application/xml;charset=ASCII", >+ "ReadableStream request keeps setRequestHeader() Content-Type and charset" >+ ) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-allowed-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-allowed-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e2dd50dafa594c17116d4e25ee4bfb4ccf35bc0c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-allowed-expected.txt >@@ -0,0 +1,11 @@ >+ >+PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Authorization) >+PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Pragma) >+PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (User-Agent) >+PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Content-Transfer-Encoding) >+PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Content-Type) >+PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Overwrite) >+PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (If) >+PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (Status-URI) >+PASS XMLHttpRequest: setRequestHeader() - headers that are allowed (X-Pink-Unicorn) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-allowed.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-allowed.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..cd11e334a0f36d2b1deafbc892613d8a3e93a7b9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-allowed.htm >@@ -0,0 +1,33 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: setRequestHeader() - headers that are allowed</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ function request(header) { >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("POST", "resources/inspect-headers.py?filter_value=t1, t2", false) >+ client.setRequestHeader(header, "t1") >+ client.setRequestHeader(header, "t2") >+ client.send(null) >+ assert_equals(client.responseText, header + ",") >+ }, document.title + " (" + header + ")") >+ } >+ request("Authorization") >+ request("Pragma") >+ request("User-Agent") >+ request("Content-Transfer-Encoding") >+ request("Content-Type") >+ request("Overwrite") >+ request("If") >+ request("Status-URI") >+ request("X-Pink-Unicorn") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-forbidden-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-forbidden-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..569f478af2103209b619311dd4499c10ade9c11d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-forbidden-expected.txt >@@ -0,0 +1,25 @@ >+CONSOLE MESSAGE: line 16: Refused to set unsafe header "Accept-Charset" >+CONSOLE MESSAGE: line 17: Refused to set unsafe header "Accept-Encoding" >+CONSOLE MESSAGE: line 18: Refused to set unsafe header "Connection" >+CONSOLE MESSAGE: line 19: Refused to set unsafe header "Content-Length" >+CONSOLE MESSAGE: line 20: Refused to set unsafe header "Cookie" >+CONSOLE MESSAGE: line 21: Refused to set unsafe header "Cookie2" >+CONSOLE MESSAGE: line 22: Refused to set unsafe header "Date" >+CONSOLE MESSAGE: line 23: Refused to set unsafe header "DNT" >+CONSOLE MESSAGE: line 24: Refused to set unsafe header "Expect" >+CONSOLE MESSAGE: line 25: Refused to set unsafe header "Host" >+CONSOLE MESSAGE: line 26: Refused to set unsafe header "Keep-Alive" >+CONSOLE MESSAGE: line 27: Refused to set unsafe header "Referer" >+CONSOLE MESSAGE: line 28: Refused to set unsafe header "TE" >+CONSOLE MESSAGE: line 29: Refused to set unsafe header "Trailer" >+CONSOLE MESSAGE: line 30: Refused to set unsafe header "Transfer-Encoding" >+CONSOLE MESSAGE: line 31: Refused to set unsafe header "Upgrade" >+CONSOLE MESSAGE: line 32: Refused to set unsafe header "Via" >+CONSOLE MESSAGE: line 33: Refused to set unsafe header "Proxy-" >+CONSOLE MESSAGE: line 34: Refused to set unsafe header "Proxy-LIES" >+CONSOLE MESSAGE: line 35: Refused to set unsafe header "Proxy-Authorization" >+CONSOLE MESSAGE: line 36: Refused to set unsafe header "Sec-" >+CONSOLE MESSAGE: line 37: Refused to set unsafe header "Sec-X" >+ >+PASS XMLHttpRequest: setRequestHeader() - headers that are forbidden >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-forbidden.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-forbidden.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..cc24d94499cc80f4a906822e0d3db4774858cf20 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-forbidden.htm >@@ -0,0 +1,43 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: setRequestHeader() - headers that are forbidden</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("POST", "resources/inspect-headers.py?filter_value=TEST", false) >+ client.setRequestHeader("Accept-Charset", "TEST") >+ client.setRequestHeader("Accept-Encoding", "TEST") >+ client.setRequestHeader("Connection", "TEST") >+ client.setRequestHeader("Content-Length", "TEST") >+ client.setRequestHeader("Cookie", "TEST") >+ client.setRequestHeader("Cookie2", "TEST") >+ client.setRequestHeader("Date", "TEST") >+ client.setRequestHeader("DNT", "TEST") >+ client.setRequestHeader("Expect", "TEST") >+ client.setRequestHeader("Host", "TEST") >+ client.setRequestHeader("Keep-Alive", "TEST") >+ client.setRequestHeader("Referer", "TEST") >+ client.setRequestHeader("TE", "TEST") >+ client.setRequestHeader("Trailer", "TEST") >+ client.setRequestHeader("Transfer-Encoding", "TEST") >+ client.setRequestHeader("Upgrade", "TEST") >+ client.setRequestHeader("Via", "TEST") >+ client.setRequestHeader("Proxy-", "TEST") >+ client.setRequestHeader("Proxy-LIES", "TEST") >+ client.setRequestHeader("Proxy-Authorization", "TEST") >+ client.setRequestHeader("Sec-", "TEST") >+ client.setRequestHeader("Sec-X", "TEST") >+ client.send(null) >+ assert_equals(client.responseText, "") >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-open-setrequestheader-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-open-setrequestheader-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4c577bd1422dcbab5a8b025a12421a072149b847 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-open-setrequestheader-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: setRequestHeader() and open() >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-open-setrequestheader.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-open-setrequestheader.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..d77d34ffb8351ffb7ca249b90999393dd5a959a8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-open-setrequestheader.htm >@@ -0,0 +1,53 @@ >+<!DOCTYPE html> >+<!-- >+Test from https://bugzilla.mozilla.org/show_bug.cgi?id=819051 >+--> >+<head> >+ <title>XMLHttpRequest: setRequestHeader() and open()</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method"> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> >+</head> >+<body> >+ <p id="log"></p> >+<script type="text/javascript"> >+async_test(test => { >+ >+var url = "resources/inspect-headers.py"; >+ >+var xhr = new XMLHttpRequest(); >+xhr.open("GET", url + "?filter_name=x-appended-to-this"); >+xhr.setRequestHeader("X-appended-to-this", "False"); >+xhr.open("GET", url + "?filter_name=x-appended-to-this"); >+xhr.setRequestHeader("X-appended-to-this", "True"); >+ >+xhr.onreadystatechange = test.step_func(() => { >+ if (xhr.readyState == 4) { >+ assert_equals(xhr.responseText, "X-appended-to-this: True\n", "Set headers record should have been cleared by open."); >+ test_standard_header(); >+ } >+}) >+ >+xhr.send(); >+ >+function test_standard_header () { >+ var header_tested = "Accept"; >+ var xhr = new XMLHttpRequest(); >+ xhr.open("GET", url + "?filter_name=accept"); >+ xhr.setRequestHeader("Accept", "foo/bar"); >+ xhr.open("GET", url + "?filter_name=accept"); >+ xhr.setRequestHeader("Accept", "bar/foo"); >+ >+ xhr.onreadystatechange = test.step_func(() => { >+ if (xhr.readyState == 4) { >+ assert_equals(xhr.responseText, "Accept: bar/foo\n", "Set headers record should have been cleared by open."); >+ test.done(); >+ } >+ }) >+ >+ xhr.send(); >+} >+ >+}) >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/status-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ee77bfa870f5746ba98183836510cf4c954df288 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-async-expected.txt >@@ -0,0 +1,29 @@ >+ >+PASS XMLHttpRequest: status/statusText - various responses 1 (GET 204) >+PASS XMLHttpRequest: status/statusText - various responses 2 (HEAD 204) >+PASS XMLHttpRequest: status/statusText - various responses 3 (CHICKEN 204) >+PASS XMLHttpRequest: status/statusText - various responses 4 (GET 401) >+PASS XMLHttpRequest: status/statusText - various responses 5 (HEAD 401) >+PASS XMLHttpRequest: status/statusText - various responses 6 (CHICKEN 401) >+PASS XMLHttpRequest: status/statusText - various responses 7 (GET 402) >+PASS XMLHttpRequest: status/statusText - various responses 8 (HEAD 402) >+PASS XMLHttpRequest: status/statusText - various responses 9 (CHICKEN 402) >+PASS XMLHttpRequest: status/statusText - various responses 10 (GET 402) >+PASS XMLHttpRequest: status/statusText - various responses 11 (HEAD 402) >+PASS XMLHttpRequest: status/statusText - various responses 12 (CHICKEN 402) >+PASS XMLHttpRequest: status/statusText - various responses 13 (GET 402) >+PASS XMLHttpRequest: status/statusText - various responses 14 (HEAD 402) >+PASS XMLHttpRequest: status/statusText - various responses 15 (CHICKEN 402) >+PASS XMLHttpRequest: status/statusText - various responses 16 (GET 502) >+PASS XMLHttpRequest: status/statusText - various responses 17 (HEAD 502) >+PASS XMLHttpRequest: status/statusText - various responses 18 (CHICKEN 502) >+PASS XMLHttpRequest: status/statusText - various responses 19 (GET 502) >+PASS XMLHttpRequest: status/statusText - various responses 20 (HEAD 502) >+PASS XMLHttpRequest: status/statusText - various responses 21 (CHICKEN 502) >+PASS XMLHttpRequest: status/statusText - various responses 22 (GET 503) >+PASS XMLHttpRequest: status/statusText - various responses 23 (HEAD 503) >+PASS XMLHttpRequest: status/statusText - various responses 24 (CHICKEN 503) >+PASS XMLHttpRequest: status/statusText - various responses 25 (GET 699) >+PASS XMLHttpRequest: status/statusText - various responses 26 (HEAD 699) >+PASS XMLHttpRequest: status/statusText - various responses 27 (CHICKEN 699) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/status-async.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-async.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..dcf7d62467adcb9a90b60a2ed18f3bb6654354a9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-async.htm >@@ -0,0 +1,62 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: status/statusText - various responses</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol/li[1] following::ol/li[3]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol/li[1] following::ol/li[3]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-getresponseheader()-method" data-tested-assertations="following::ol/li[5]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var counter=0 >+ function statusRequest(method, code, text, content, type) { >+ counter++ >+ var test = async_test(document.title +' '+ counter+" (" + method + " " + code + ")") >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function(e) { >+ test.step(function() { >+ if(client.readyState > 1) { >+ assert_equals(client.status, code) >+ assert_equals(client.statusText, text) >+ assert_equals(client.getResponseHeader("X-Request-Method"), method) >+ if(client.readyState == 4) { >+ if(method != "HEAD") { >+ if(type == "text/xml") { >+ assert_equals(client.responseXML.documentElement.localName, "x") >+ } >+ assert_equals(client.responseText, content) >+ } >+ test.done() >+ } >+ }else{ >+ assert_equals(client.status, 0) >+ assert_equals(client.statusText, "") >+ } >+ }, this) >+ } >+ client.open(method, "resources/status.py?code=" + encodeURIComponent(code) + "&text=" + text + "&content=" + encodeURIComponent(content) + "&type=" + encodeURIComponent(type)) >+ client.send(null) >+ }) >+ } >+ function status(code, text, content, type) { >+ statusRequest("GET", code, text, content, type) >+ statusRequest("HEAD", code, text, content, type) >+ statusRequest("CHICKEN", code, text, content, type) >+ } >+ status(204, "UNICORNSWIN", "", "") >+ status(401, "OH HELLO", "Not today.", "") >+ status(402, "FIVE BUCKS", "<x>402<\/x>", "text/xml") >+ status(402, "FREE", "Nice!", "text/doesnotmatter") >+ status(402, "402 TEH AWESOME", "", "") >+ status(502, "YO", "", "") >+ status(502, "lowercase", "SWEET POTATO", "text/plain") >+ status(503, "HOUSTON WE HAVE A", "503", "text/plain") >+ status(699, "WAY OUTTA RANGE", "699", "text/plain") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/status-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-basic-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ee77bfa870f5746ba98183836510cf4c954df288 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-basic-expected.txt >@@ -0,0 +1,29 @@ >+ >+PASS XMLHttpRequest: status/statusText - various responses 1 (GET 204) >+PASS XMLHttpRequest: status/statusText - various responses 2 (HEAD 204) >+PASS XMLHttpRequest: status/statusText - various responses 3 (CHICKEN 204) >+PASS XMLHttpRequest: status/statusText - various responses 4 (GET 401) >+PASS XMLHttpRequest: status/statusText - various responses 5 (HEAD 401) >+PASS XMLHttpRequest: status/statusText - various responses 6 (CHICKEN 401) >+PASS XMLHttpRequest: status/statusText - various responses 7 (GET 402) >+PASS XMLHttpRequest: status/statusText - various responses 8 (HEAD 402) >+PASS XMLHttpRequest: status/statusText - various responses 9 (CHICKEN 402) >+PASS XMLHttpRequest: status/statusText - various responses 10 (GET 402) >+PASS XMLHttpRequest: status/statusText - various responses 11 (HEAD 402) >+PASS XMLHttpRequest: status/statusText - various responses 12 (CHICKEN 402) >+PASS XMLHttpRequest: status/statusText - various responses 13 (GET 402) >+PASS XMLHttpRequest: status/statusText - various responses 14 (HEAD 402) >+PASS XMLHttpRequest: status/statusText - various responses 15 (CHICKEN 402) >+PASS XMLHttpRequest: status/statusText - various responses 16 (GET 502) >+PASS XMLHttpRequest: status/statusText - various responses 17 (HEAD 502) >+PASS XMLHttpRequest: status/statusText - various responses 18 (CHICKEN 502) >+PASS XMLHttpRequest: status/statusText - various responses 19 (GET 502) >+PASS XMLHttpRequest: status/statusText - various responses 20 (HEAD 502) >+PASS XMLHttpRequest: status/statusText - various responses 21 (CHICKEN 502) >+PASS XMLHttpRequest: status/statusText - various responses 22 (GET 503) >+PASS XMLHttpRequest: status/statusText - various responses 23 (HEAD 503) >+PASS XMLHttpRequest: status/statusText - various responses 24 (CHICKEN 503) >+PASS XMLHttpRequest: status/statusText - various responses 25 (GET 699) >+PASS XMLHttpRequest: status/statusText - various responses 26 (HEAD 699) >+PASS XMLHttpRequest: status/statusText - various responses 27 (CHICKEN 699) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/status-basic.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-basic.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..fed7cabec475527b3a73c84236609411ced8537f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-basic.htm >@@ -0,0 +1,51 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: status/statusText - various responses</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol/li[3]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol/li[3]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-getresponseheader()-method" data-tested-assertations="following::ol/li[5]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[4]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var counter = 0 >+ function statusRequest(method, code, text, content, type) { >+ counter++ >+ test(function() { >+ var client = new XMLHttpRequest() >+ assert_equals(client.status, 0); >+ client.open(method, "resources/status.py?code=" + code + "&text=" + encodeURIComponent(text) + "&content=" + encodeURIComponent(content) + "&type=" + encodeURIComponent(type), false) >+ assert_equals(client.status, 0); >+ client.send(null) >+ assert_equals(client.status, code) >+ assert_equals(client.statusText, text) >+ assert_equals(client.getResponseHeader("X-Request-Method"), method) >+ if(method != "HEAD") { >+ if(type == "text/xml") { >+ assert_equals(client.responseXML.documentElement.localName, "x") >+ } >+ assert_equals(client.responseText, content) >+ } >+ }, document.title + " " + counter + " (" + method + " " + code + ")") >+ } >+ function status(code, text, content, type) { >+ statusRequest("GET", code, text, content, type) >+ statusRequest("HEAD", code, text, content, type) >+ statusRequest("CHICKEN", code, text, content, type) >+ } >+ status(204, "UNICORNSWIN", "", "") >+ status(401, "OH HELLO", "Not today.", "") >+ status(402, "FIVE BUCKS", "<x>402<\/x>", "text/xml") >+ status(402, "FREE", "Nice!", "text/doesnotmatter") >+ status(402, "402 TEH AWESOME", "", "") >+ status(502, "YO", "", "") >+ status(502, "lowercase", "SWEET POTATO", "text/plain") >+ status(503, "HOUSTON WE HAVE A", "503", "text/plain") >+ status(699, "WAY OUTTA RANGE", "699", "text/plain") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/status-error-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-error-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e58222d9d85d9c01393c8ab99213dabd37ee6a82 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-error-expected.txt >@@ -0,0 +1,23 @@ >+This shouldn't be tested inside a tunnel. >+ >+ >+PASS XMLHttpRequest: status error handling GET 200 >+PASS XMLHttpRequest: status error handling GET 400 >+PASS XMLHttpRequest: status error handling GET 401 >+PASS XMLHttpRequest: status error handling GET 404 >+PASS XMLHttpRequest: status error handling GET 410 >+PASS XMLHttpRequest: status error handling GET 500 >+PASS XMLHttpRequest: status error handling GET 699 >+PASS XMLHttpRequest: status error handling HEAD 200 >+PASS XMLHttpRequest: status error handling HEAD 404 >+PASS XMLHttpRequest: status error handling HEAD 500 >+PASS XMLHttpRequest: status error handling HEAD 699 >+PASS XMLHttpRequest: status error handling POST 200 >+PASS XMLHttpRequest: status error handling POST 404 >+PASS XMLHttpRequest: status error handling POST 500 >+PASS XMLHttpRequest: status error handling POST 699 >+PASS XMLHttpRequest: status error handling PUT 200 >+PASS XMLHttpRequest: status error handling PUT 404 >+PASS XMLHttpRequest: status error handling PUT 500 >+PASS XMLHttpRequest: status error handling PUT 699 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/status-error.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-error.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..a9c15c4c51b3a8693ccae0d71acf1ffc4d0b50be >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/status-error.htm >@@ -0,0 +1,60 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: status error handling</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onerror" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="/following::ol/li[3]" /> >+ </head> >+ <body> >+ <p>This shouldn't be tested inside a tunnel.</p> >+ <div id="log"></div> >+ <script> >+ function noError(method, code) { >+ var test = async_test(document.title + " " + method + " " + code) >+ >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.open(method, "resources/status.py?code=" + code, true) >+ >+ client.onreadystatechange = test.step_func(function() { >+ assert_equals(client.response, "", "response data") >+ assert_equals(client.status, code, "response status") >+ >+ if (client.readyState == client.DONE) >+ /* Give extra time for a bogus error event to pop up */ >+ test.step_timeout(() => { test.done() }, 100) >+ }) >+ client.onerror = test.step_func(function() { >+ assert_unreached("HTTP error should not throw error event") >+ }) >+ client.send() >+ }) >+ } >+ >+ noError('GET', 200) >+ noError('GET', 400) >+ noError('GET', 401) >+ noError('GET', 404) >+ noError('GET', 410) >+ noError('GET', 500) >+ noError('GET', 699) >+ >+ noError('HEAD', 200) >+ noError('HEAD', 404) >+ noError('HEAD', 500) >+ noError('HEAD', 699) >+ >+ noError('POST', 200) >+ noError('POST', 404) >+ noError('POST', 500) >+ noError('POST', 699) >+ >+ noError('PUT', 200) >+ noError('PUT', 404) >+ noError('PUT', 500) >+ noError('PUT', 699) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..98ecb6e2e8ce14d36fca98d26d3ae6b55ae00bf1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS progress event should not be fired by sync XHR >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..a915e4d4129f68baf9a2d5690b4fb75edee0f931 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.js >@@ -0,0 +1,12 @@ >+test(t => { >+ let xhr = new XMLHttpRequest(); >+ let loadEventFired = false; >+ xhr.onprogress = t.unreached_func('progress event should not be fired'); >+ xhr.onload = () => { >+ loadEventFired = true; >+ }; >+ xhr.open('GET', 'resources/trickle.py?count=4&delay=150', false); >+ xhr.send(); >+ // Check the load event as a sanity check that the test is working. >+ assert_true(loadEventFired, 'load event should have fired'); >+}, 'progress event should not be fired by sync XHR'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..98ecb6e2e8ce14d36fca98d26d3ae6b55ae00bf1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS progress event should not be fired by sync XHR >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7f93c3944847b4b188b992ade7168ad95cdb9937 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Sync XHR should not have a timeout >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.js b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..d23fbb8c66def47e31ad01aa7a311064ba8fddbd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.js >@@ -0,0 +1,16 @@ >+// META: global=sharedworker >+// META: timeout=long >+ >+// This is a regression test for https://crbug.com/844268, when a timeout of 10 >+// seconds was applied to XHR in Chrome. There should be no timeout unless the >+// "timeout" parameter is set on the object. >+test(t => { >+ let xhr = new XMLHttpRequest(); >+ >+ // For practical reasons, we can't wait forever. 12 seconds is long enough to >+ // reliably reproduce the bug in Chrome. >+ xhr.open('GET', 'resources/trickle.py?ms=1000&count=12', false); >+ >+ // The test will fail if this throws. >+ xhr.send(); >+}, 'Sync XHR should not have a timeout'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7f93c3944847b4b188b992ade7168ad95cdb9937 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Sync XHR should not have a timeout >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/template-element-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/template-element-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7d8f7b936b8c0fe8eaaf5e773a9fe4d476d291ea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/template-element-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS XMLHttpRequest: template element parsing >+PASS XMLHttpRequest: template element parsing 1 >+PASS XMLHttpRequest: template element parsing 2 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/template-element.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/template-element.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c23c99788e46dae24009b3c5092efeb5f93b8e1f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/template-element.html >@@ -0,0 +1,36 @@ >+<!doctype html> >+<title>XMLHttpRequest: template element parsing</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<div id=log></div> >+<script> >+async_test(t => { >+ const client = new XMLHttpRequest >+ client.open("GET", "data:text/xml,<template xmlns='http://www.w3.org/1999/xhtml'><test/></template>") >+ client.send() >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseXML.documentElement.childElementCount, 0) >+ assert_equals(client.responseXML.documentElement.content.firstChild.localName, "test") >+ }) >+}) >+ >+async_test(t => { >+ const client = new XMLHttpRequest >+ client.open("GET", "data:text/xml,<template><test/></template>") >+ client.send() >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseXML.documentElement.childElementCount, 1) >+ assert_equals(client.responseXML.documentElement.firstChild.localName, "test") >+ }) >+}) >+ >+async_test(t => { >+ const client = new XMLHttpRequest >+ client.open("GET", "data:text/xml,<template xmlns='http://www.w3.org/2000/svg'><test/></template>") >+ client.send() >+ client.onload = t.step_func_done(() => { >+ assert_equals(client.responseXML.documentElement.childElementCount, 1) >+ assert_equals(client.responseXML.documentElement.firstChild.localName, "test") >+ }) >+}) >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-cors-async-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-cors-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d52cdb814a66d9b4a44044600f39a548caeff921 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-cors-async-expected.txt >@@ -0,0 +1,5 @@ >+Blocked access to external URL http://www2.localhost:8800/xhr/resources/corsenabled.py?delay=2&code=200 >+CONSOLE MESSAGE: line 40: XMLHttpRequest cannot load http://www2.localhost:8800/xhr/resources/corsenabled.py?delay=2&code=200 due to access control checks. >+ >+FAIL XMLHttpRequest: timeout event and cross-origin request assert_true: timeout event should fire expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-cors-async.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-cors-async.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..35e2a30ba2f51aaa6b3ba21603869db156decd5b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-cors-async.htm >@@ -0,0 +1,43 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: timeout event and cross-origin request</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#cross-origin-request-event-rules" data-tested-assertations="following::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(document.title) >+ var client = new XMLHttpRequest() >+ var gotTimeout = false >+ client.open("GET", "http://www2." + location.hostname + (location.port ? ":" + location.port : "") +(location.pathname.replace(/[^\/]+$/, '')+'resources/corsenabled.py')+"?delay=2&code=200") >+ client.timeout = 100 >+ client.addEventListener('timeout', function (e) { >+ test.step(function() { >+ assert_equals(e.type, 'timeout') >+ assert_equals(client.status, 0) >+ gotTimeout = true >+ }) >+ }) >+ client.addEventListener('load', function (e) { >+ test.step(function() { >+ assert_unreached('load event should not fire') >+ }) >+ }) >+ client.addEventListener('loadend', function (e) { >+ test.step(function() { >+ assert_true(gotTimeout, "timeout event should fire") >+ test.done() >+ }) >+ }) >+ >+ client.send(null) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-multiple-fetches-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-multiple-fetches-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..420aa506c0ae8d2be8d09ef27063d92960c92800 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-multiple-fetches-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS Redirects should not reset the timer >+PASS CORS preflights should not reset the timer >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-multiple-fetches.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-multiple-fetches.html >new file mode 100644 >index 0000000000000000000000000000000000000000..30d6b736c56d5576483c12a7413dd809d27d89e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-multiple-fetches.html >@@ -0,0 +1,29 @@ >+<!doctype html> >+<title>XMLHttpRequest: timeout, redirects, and CORS preflights</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script src=/common/get-host-info.sub.js></script> >+<div id=log></div> >+<script> >+async_test(t => { >+ const client = new XMLHttpRequest >+ client.open("GET", "resources/redirect.py?delay=500&location=delay.py") // 500 + 500 = 1000 >+ client.timeout = 1000 >+ client.send() >+ client.ontimeout = t.step_func_done(() => { >+ assert_equals(client.readyState, 4) >+ }) >+ client.onload = t.unreached_func("load event fired") >+}, "Redirects should not reset the timer") >+ >+async_test(t => { >+ const client = new XMLHttpRequest >+ client.open("YO", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/delay.py") >+ client.timeout = 1000 >+ client.send() >+ client.ontimeout = t.step_func_done(() => { >+ assert_equals(client.readyState, 4) >+ }) >+ client.onload = t.unreached_func("load event fired") >+}, "CORS preflights should not reset the timer") >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d94252489361795356121977edbe152dc894c1dd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-sync-expected.txt >@@ -0,0 +1,6 @@ >+CONSOLE MESSAGE: line 1253: XMLHttpRequest.timeout cannot be set for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 21: Synchronous XMLHttpRequests must not have a timeout value set. >+ >+PASS setting timeout attribute on sync request >+PASS open() with async false when timeout is set >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-sync.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..9815532c70ff347199a998f02bf4b11f15c7bcee >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-sync.htm >@@ -0,0 +1,25 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: timeout not allowed for sync requests</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol/li[10]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open('GET', 'folder.txt', false) >+ assert_throws("InvalidAccessError", function() { client.timeout = 1000 }) >+ }, 'setting timeout attribute on sync request') >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.timeout = 1000 >+ assert_throws("InvalidAccessError", function() { client.open('GET', 'folder.txt', false) }) >+ }, 'open() with async false when timeout is set') >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/xhr/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..0e371336afe4ebfcc00585d4a9343825a31a994d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/w3c-import.log >@@ -0,0 +1,304 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/web-platform-tests/wpt >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/xhr/FormData-append.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/META.yml >+/LayoutTests/imported/w3c/web-platform-tests/xhr/README.md >+/LayoutTests/imported/w3c/web-platform-tests/xhr/XMLHttpRequest-withCredentials.any.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-receive.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-send.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-stop.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-after-timeout.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-done.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-headers-received.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-loading.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-open.any.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-unsent.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-during-upload.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-abort.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-listeners.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-loadend.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-event-order.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-abort.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/abort-upload-event-loadend.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-same-origin.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-and-redirects.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header-data-url.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-access-control-origin-header.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-async.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method-async.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-non-cors-safelisted-method.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-header.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-invalidation-by-method.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache-timeout.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-preflight-cache.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow-star.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-allow.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-response-headers.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-denied.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-non-cors-safelisted-content-type.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-success-no-content-type.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-basic-preflight-denied.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-header-denied.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-method-denied.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-async-not-supported.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-async.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-credential-sync.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-async.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-headers-sync.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-lowercase.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-header-sorted.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-headers-origin.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-301.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-400.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-invalid-status-501.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-request-must-not-contain-cookie.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-header-denied.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-method-denied.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-not-supported.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-recursive-failed-request.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body-sync.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-body.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-response-with-exposed-headers.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow-origin-null.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-allow.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied-without-wildcard.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/access-control-sandboxed-iframe-denied.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/allow-lists-starting-with-comma.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/anonymous-mode-unsupported.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/close-worker-with-xhr-in-progress.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/data-uri.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-abort.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error-order.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-error.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-load.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadend.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart-upload.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-loadstart.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-progress.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystate-sync-open.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-readystatechange-loaded.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout-order.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-timeout.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress-crossorigin.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/event-upload-progress.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-content-length.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/firing-events-http-no-content-length.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/folder.txt >+/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-blob.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-delete.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-foreach.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-get.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-has.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata-set.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/formdata.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-cookies.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders-status.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/getallresponseheaders.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-chunked-trailer.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-cookies-and-more.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-error-state.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-server-date.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-special-characters.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/getresponseheader-unsent-opened-state.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-async.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/header-user-agent-sync.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/headers-normalize-response.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/historical.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/idlharness.any.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/loadstart-and-state.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/no-utf16-json.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-abort.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-after-setrequestheader.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-event.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort-processing.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-during-abort.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-bogus.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-insensitive.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-case-sensitive.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-insecure.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-method-responsetype-set-sync.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-send.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-open-sync-send.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-parameters-toString.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-referer.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-during-abort.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-send-open.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-sync-open-send.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-about-blank-window.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted-after-open.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base-inserted.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-base.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-encoding.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-fragment.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window-2.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-javascript-window.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-2.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-3.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-4.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-5.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window-6.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-multi-window.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-worker-origin.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-origin.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-worker-simple.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/open-user-password-non-same-origin.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-blob.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-done-state.any.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-edge-cases.window.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-headers-received-state-force-shiftjis.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-invalid-mime-type.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-loading-state.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-utf-8.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-open-state-force-xml.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-unsent-state-force-shiftjis.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/preserve-ua-header-on-redirect.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/progress-events-response-data-gzip.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-constructor.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/progressevent-interface.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-arraybuffer.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-blob.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-deflate.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-gzip.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/response-data-progress.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/response-invalid-responsetype.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/response-json.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/response-method.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responseText-status.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responseType-document-in-worker.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responseXML-unavailable-in-worker.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responsedocument-decoding.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetext-decoding.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responsetype.any.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responseurl.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-basic.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-document-properties.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-get-twice.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-media-type.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-document-types.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/responsexml-non-well-formed.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/security-consideration.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept-language.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-accept.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-after-setting-document-domain.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-not-enabled.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-repeat-no-args.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-and-arguments.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader-existing-session.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic-setrequestheader.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-basic.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-competing-names-passwords.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-basic-setrequestheader.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-authentication-cors-setrequestheader-no-cred.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional-cors.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-conditional.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-charset.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-content-type-string.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybuffer.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-arraybufferview.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-blob.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-es-object.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-formdata.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-data-unexpected-tostring.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-basic.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document-bogus.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-document.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-empty.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-entity-body-none.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadend.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-loadstart.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-no-response-event-order.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-non-same-origin.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-receive-utf16.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus-sync.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-bogus.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-infinite.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-no-location.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-cors.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect-to-non-cors.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-redirect.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-event-order.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadend.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-loadstart.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-response-upload-event-progress.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-send.any.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-blocks-async.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-load.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-loadend.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-no-response-event-order.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-response-event-order.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-sync-timeout.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-timeout-events.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/send-usp.any.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-after-send.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-empty-value.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-allow-whitespace-in-value.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-before-open.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-name.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-bogus-value.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-case-insensitive.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-allowed.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-header-forbidden.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/setrequestheader-open-setrequestheader.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/status-async.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/status-basic.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/status-error.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-progress.any.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/sync-no-timeout.any.js >+/LayoutTests/imported/w3c/web-platform-tests/xhr/template-element.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-cors-async.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-multiple-fetches.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/timeout-sync.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-basic.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-eventtarget.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error.htm >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts-subframe.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-scripts.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader-subframe.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-aborted.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-abortedonmain.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overrides.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overridesexpires.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-reused.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-simple.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-synconmain.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-twice.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-aborted.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overrides.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overridesexpires.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-simple.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-synconworker.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-twice.html >+/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-unsent.htm >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-basic-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7da83b4a203333734d5a4dce7609ebd18c0795c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-basic-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: prototype and members >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-basic.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-basic.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c48b610ff6627af704810740a2dcab23d085764b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-basic.htm >@@ -0,0 +1,45 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: prototype and members</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest" data-tested-assertations="following::ol/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#xmlhttprequest" data-tested-assertations="." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#states" data-tested-assertations="following::dfn[2] following::dfn[3] following::dfn[4] following::dfn[5] following::dfn[6]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ XMLHttpRequest.prototype.test = function() { return "TEH" } >+ var client = new XMLHttpRequest() >+ assert_equals(client.test(), "TEH") >+ var members = ["onreadystatechange", >+ "open", >+ "setRequestHeader", >+ "send", >+ "abort", >+ "status", >+ "statusText", >+ "getResponseHeader", >+ "getAllResponseHeaders", >+ "responseText", >+ "responseXML"] >+ for(var x in members) >+ assert_true(members[x] in client, members[x]) >+ var constants = ["UNSENT", >+ "OPENED", >+ "HEADERS_RECEIVED", >+ "LOADING", >+ "DONE"], >+ i = 0 >+ for(var x in constants) { >+ assert_equals(client[constants[x]], i, constants[x]) >+ assert_equals(XMLHttpRequest[constants[x]], i, "XHR " + constants[x]) >+ i++ >+ } >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-eventtarget-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-eventtarget-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2eef69e4a9f6e719d8c4cbee0e1c598fe06e2753 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-eventtarget-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: implements EventTarget >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-eventtarget.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-eventtarget.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ea58fd4dc3e8f1f1d89515b410f2c9357b5d5e60 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-eventtarget.htm >@@ -0,0 +1,48 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: implements EventTarget</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#xmlhttprequesteventtarget" data-tested-assertations=".." /> >+ <!-- Obviously, most of the stuff actually being tested here is covered in the DOM events spec, not in the XHR spec --> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test(), >+ x = null, >+ expected = ["a1", "b1", "c1", "a2", "b2", "c2", "a3", "c3", "a4", "c4"], >+ result = [] >+ function callback(e) { >+ result.push("b" + x.readyState) >+ test.step(function() { >+ if(x.readyState == 3) >+ assert_unreached() >+ }) >+ } >+ test.step(function() { >+ x = new XMLHttpRequest() >+ x.onreadystatechange = function() { >+ test.step(function() { >+ result.push("a" + x.readyState) >+ }) >+ } >+ x.addEventListener("readystatechange", callback, false) >+ x.addEventListener("readystatechange", function() { >+ test.step(function() { >+ result.push("c" + x.readyState) >+ if(x.readyState == 2) >+ x.removeEventListener("readystatechange", callback, false) >+ if(x.readyState == 4) { >+ assert_array_equals(result, expected) >+ test.done() >+ } >+ }) >+ }, false) >+ x.open("GET", "folder.txt") >+ x.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3751341d7fb002150b17c2abdaf0ba1ca79d63a0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: members during network errors >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3b0f3c14560cf9d57ce22bb69533287db6476456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: members during network errors (sync) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c4a887a1ebee76390dea928f8c56a2c8f34d6ad2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync.htm >@@ -0,0 +1,34 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: members during network errors (sync)</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/p[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[5]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-getresponseheader()-method" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[3]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[3]" /> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ client.open("GET", "resources/infinite-redirects.py", false) >+ assert_throws("NetworkError", function() { client.send(null) }, "send") >+ assert_equals(client.status, 0, "status") >+ assert_equals(client.statusText, "", "statusText") >+ assert_equals(client.getAllResponseHeaders(), "", "getAllResponseHeaders") >+ assert_equals(client.getResponseHeader("content-type"), null, "getResponseHeader") >+ assert_equals(client.responseText, "", "responseText") >+ assert_equals(client.responseXML, null, "responseXML") >+ assert_equals(client.readyState, client.DONE, "readyState") >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..c8e32008095f817f150af872d9551cbeae899b0e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error.htm >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>XMLHttpRequest: members during network errors</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dl[1]/dt[2] following::dl[1]/dd[2]/ol/li[1] following::dl[1]/dd[2]/ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-getresponseheader()-method" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[3]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[3]" /> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ var test = async_test() >+ test.step(function() { >+ var client = new XMLHttpRequest() >+ client.onreadystatechange = function() { >+ test.step(function() { >+ assert_equals(client.status, 0, "status") >+ assert_equals(client.statusText, "", "statusText") >+ assert_equals(client.getAllResponseHeaders(), "", "getAllResponseHeaders") >+ assert_equals(client.getResponseHeader("content-type"), null, "getResponseHeader") >+ assert_equals(client.responseText, "", "responseText") >+ assert_equals(client.responseXML, null, "responseXML") >+ if(client.readyState == 4) >+ test.done() >+ }) >+ } >+ client.open("GET", "resources/infinite-redirects.py") >+ client.send(null) >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..34b1e5289e95cb30c7a3ea0b8ffb383a0cef39de >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts-expected.txt >@@ -0,0 +1,4 @@ >+ >+ >+PASS Check that a sync XHR in a defer script blocks later defer scripts from running >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts-subframe.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts-subframe.html >new file mode 100644 >index 0000000000000000000000000000000000000000..be46a12b6f716f659e702e34cef36d8f2bd8b495 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts-subframe.html >@@ -0,0 +1,17 @@ >+<!DOCTYPE html> >+<script> >+ var x = 0; >+</script> >+<!-- This script's URI is: >+ var xhr = new XMLHttpRequest(); >+ xhr.open('GET', 'data:text/plain,aaa', false); >+ xhr.send(); >+ x=1; >+ --> >+<script defer src="data:application/javascript,var%20x%20=%200;%20var%20xhr%20=%20new%20XMLHttpRequest();%20xhr.open('GET',%20'data:text/plain,aaa',%20false);%20xhr.send();%20x=1"></script> >+ >+<!-- This script's URI is: >+ parent.postMessage(x, '*'); >+--> >+<script defer src="data:application/javascript,parent.postMessage(x, '*');"></script> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0aabdd4b3463dcf0e0321444d93cb3cea4aa5d4f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-defer-scripts.html >@@ -0,0 +1,15 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>Check that a sync XHR in a defer script blocks later defer scripts from running</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<!-- >+ We run the test in a subframe, because something in the testharness stuff >+ interferes with defer scripts --> >+<script> >+ var t = async_test(); >+ onmessage = t.step_func_done(function(e) { >+ assert_equals(e.data, 1); >+ }); >+</script> >+<iframe src="xmlhttprequest-sync-block-defer-scripts-subframe.html"></iframe> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-scripts-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-scripts-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b06d11231b76186aee345dd8bb356e173cbd95b1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-scripts-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Check that while a sync XHR is in flight async script loads don't complete and run script >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-scripts.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-scripts.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d6714ac754e83bdfb5c40b53450684ec003c8cc9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-block-scripts.html >@@ -0,0 +1,22 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>Check that while a sync XHR is in flight async script loads don't complete and run script</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<body> >+<script> >+var scriptRan = false; >+var onloadFired = false; >+test(function() { >+ var s = document.createElement("script"); >+ s.src = "data:application/javascript,scriptRan = true;"; >+ s.onload = function() { onloadFired = true; } >+ document.body.appendChild(s); >+ var xhr = new XMLHttpRequest(); >+ xhr.open("GET", "data:,", false); >+ xhr.send(); >+ assert_false(scriptRan, "Script should not have run"); >+ assert_false(onloadFired, "load event for <script> should not have fired"); >+}); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6e6e7e367b2d55f086e7a950783d7d6f8447b9f9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub-expected.txt >@@ -0,0 +1,11 @@ >+Blocked access to external URL http://www.localhost:8800/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html#iframe#sync-xhr >+Blocked access to external URL http://www.localhost:8800/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html#iframe#sync-xhr >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+PASS Default "sync-xhr" feature policy ["*"] allows the top-level document. >+PASS Default "sync-xhr" feature policy ["*"] allows same-origin iframes. >+TIMEOUT Default "sync-xhr" feature policy ["*"] allows cross-origin iframes. Test timed out >+TIMEOUT Feature policy "sync-xhr" can be disabled in cross-origin iframes using "allow" attribute. Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5ad5557700d79cb0104a5a5db52afdfa0906533b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub.html >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<body> >+ <meta charset="utf-8"> >+ <title>Synchronous XMLHttpRequest Feature Policy Test</title> >+ <script src=/resources/testharness.js></script> >+ <script src=/resources/testharnessreport.js></script> >+ <script src=/feature-policy/resources/featurepolicy.js></script> >+ <script src=util/utils.js></script> >+ <script> >+ 'use strict'; >+ run_all_fp_tests_allow_all( >+ 'http://{{domains[www]}}:{{ports[http][0]}}', >+ 'sync-xhr', >+ 'NetworkError', >+ () => { >+ return new Promise((resolve, reject) => { >+ try { >+ var xhr = new XMLHttpRequest(); >+ xhr.open("GET", "data:,", false); >+ try { >+ xhr.send(); >+ } catch(e) { >+ reject(e); >+ } >+ } catch(e) { >+ reject({"name": "UnexpectedException:" + e.name}); >+ } >+ resolve(); >+ }); >+ }); >+ </script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5ac9ab2911c6ae39c0da14ebc9ed814d5a33b310 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader-expected.txt >@@ -0,0 +1,5 @@ >+ >+ >+PASS Ensure that an async script added during a defer script that then does a >+ sync XHR still runs >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader-subframe.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader-subframe.html >new file mode 100644 >index 0000000000000000000000000000000000000000..aeff2af97c8a3d415c95115c728d0464c4ca04c7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader-subframe.html >@@ -0,0 +1,17 @@ >+<!DOCTYPE html> >+<script> >+ function secondScriptRan() { >+ parent.postMessage("done", "*"); >+ } >+ >+ function createSecondScript() { >+ var script = document.createElement("script"); >+ script.src = "data:application/javascript,secondScriptRan()"; >+ document.head.appendChild(script); >+ >+ var xhr = new XMLHttpRequest(); >+ xhr.open("GET", "data:,", false); >+ xhr.send(); >+ } >+</script> >+<script src="data:application/javascript,createSecondScript()" defer></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bbec1eddcd8be2a6f4988ca17f2e1ee8ac27954b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-not-hang-scriptloader.html >@@ -0,0 +1,16 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>Ensure that an async script added during a defer script that then does a >+ sync XHR still runs</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<!-- >+ We run the test in a subframe, because something in the testharness stuff >+ interferes with defer scripts --> >+<script> >+ var t = async_test(); >+ onmessage = t.step_func_done(function(e) { >+ assert_equals(e.data, "done"); >+ }); >+</script> >+<iframe src="xmlhttprequest-sync-not-hang-scriptloader-subframe.html"></iframe> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-aborted-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-aborted-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..656cefc0f4e5b5eaeca556ca526f698dfc0f25f9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-aborted-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >+ >+ >+PASS Timeout test: No events should fire for an unsent, unaborted request >+PASS Timeout test: time to abort is -1, timeout set at 2000 >+PASS Timeout test: time to abort is 5000, timeout set at 2000 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-aborted.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-aborted.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0af6d9cf6991d6888997c4037c0f97c53578751c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-aborted.html >@@ -0,0 +1,26 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[4]/ol/li[5]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following-sibling::ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#abort-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-abort" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-timeout" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >+ <div id="log"></div> >+ <script src="resources/xmlhttprequest-timeout-aborted.js" type="text/javascript"></script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-abortedonmain-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-abortedonmain-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..87e7d5c764c940cc866f489e20303beb3a411ad1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-abortedonmain-expected.txt >@@ -0,0 +1,8 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >+ >+ >+PASS Timeout test: time to abort is 0, timeout set at 2000 >+PASS Timeout test: time to abort is 1000, timeout set at 2000 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-abortedonmain.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-abortedonmain.html >new file mode 100644 >index 0000000000000000000000000000000000000000..70cba4980fdf7a6bbdd9cb178779a88ebb516f67 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-abortedonmain.html >@@ -0,0 +1,23 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[4]/ol/li[5]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#abort-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-abort" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol/li[9]"/> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >+ <div id="log"></div> >+ <script src="resources/xmlhttprequest-timeout-abortedonmain.js" type="text/javascript"></script> >+</body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overrides-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overrides-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..25a47fc6b815b28b9ab23cb09e5ebb7ec93f3d0b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overrides-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >+ >+ >+PASS Timeout test: timeout disabled after initially set, original timeout at 5000, reset at 2000 to 0 >+PASS Timeout test: timeout overrides load after a delay, original timeout at 5000, reset at 1000 to 2000 >+PASS Timeout test: timeout enabled after initially disabled, original timeout at 0, reset at 2000 to 50000 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overrides.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overrides.html >new file mode 100644 >index 0000000000000000000000000000000000000000..61a32bb1af09fe04cf067b43e333fb1aa08eb756 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overrides.html >@@ -0,0 +1,23 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >+ <div id="log"></div> >+ <script src="resources/xmlhttprequest-timeout-overrides.js"></script> >+</body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overridesexpires-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overridesexpires-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5ef2d8d0d80171487cbca3ef52d6dc7cbdd53b62 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overridesexpires-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >+ >+ >+PASS Timeout test: timeout set to expiring value after load fires, original timeout at 5000, reset at 4000 to 1000 >+PASS Timeout test: timeout set to expired value before load fires, original timeout at 5000, reset at 2000 to 1100 >+PASS Timeout test: timeout set to non-expiring value after timeout fires, original timeout at 1000, reset at 2000 to 500 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overridesexpires.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overridesexpires.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d29cbbbff532258e29ecd448f07dc171729b4bd9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-overridesexpires.html >@@ -0,0 +1,23 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >+ <div id="log"></div> >+ <script src="resources/xmlhttprequest-timeout-overridesexpires.js" type="text/javascript"></script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-reused-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-reused-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b11872d1456ab3a6581bea47140e10c313dd499a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-reused-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XHR2 Timeout Property Tests >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-reused.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-reused.html >new file mode 100644 >index 0000000000000000000000000000000000000000..48a98932ca33a0d2108425da8052e655e7564131 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-reused.html >@@ -0,0 +1,49 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+ <div id="log"></div> >+ <script type="text/javascript"> >+ >+var test = async_test(); >+ >+function startRequest() { >+ xhr.open("GET", "./resources/content.py?content=Hi", true); >+ xhr.timeout = 2000; >+ test.step_timeout(function () { >+ xhr.send(); >+ }, 1000); >+} >+ >+test.step(function() >+{ >+ var count = 0; >+ xhr = new XMLHttpRequest(); >+ xhr.onload = function () { >+ assert_equals(xhr.response, "Hi"); >+ if (++count == 2) { >+ test.done(); >+ } >+ } >+ xhr.ontimeout = function () { >+ assert_unreached("HTTP error should not timeout"); >+ } >+ startRequest(); >+ test.step_timeout(startRequest, 3500); >+}); >+ >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-simple-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-simple-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..fec8fbc319f7530f721e26991e972e9aa12ecfcb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-simple-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >+ >+ >+PASS Timeout test: no time out scheduled, load fires normally, timeout scheduled at 0 >+PASS Timeout test: load fires normally, timeout scheduled at 5000 >+PASS Timeout test: timeout hit before load, timeout scheduled at 2000 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-simple.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-simple.html >new file mode 100644 >index 0000000000000000000000000000000000000000..982cf552945a08ae796d76cac726cfecb271f68f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-simple.html >@@ -0,0 +1,24 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >+ <div id="log"></div> >+ <script src="resources/xmlhttprequest-timeout-simple.js"></script> >+</body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-synconmain-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-synconmain-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..86146eebc0c95d0306f420880e59815bf4bd8de6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-synconmain-expected.txt >@@ -0,0 +1,10 @@ >+CONSOLE MESSAGE: line 314: XMLHttpRequest.timeout cannot be set for synchronous HTTP(S) requests made from the window context. >+CONSOLE MESSAGE: line 289: Synchronous XMLHttpRequests must not have a timeout value set. >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >+ >+ >+PASS Timeout test: Synchronous XHR must not allow a timeout to be set - setting timeout must throw >+PASS Timeout test: Synchronous XHR must not allow a timeout to be set - calling open() after timeout is set must throw >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-synconmain.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-synconmain.html >new file mode 100644 >index 0000000000000000000000000000000000000000..79430a9d32797032c56093af2f18fc6cecb85d79 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-synconmain.html >@@ -0,0 +1,21 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[10]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >+ <div id="log"></div> >+ <script src="resources/xmlhttprequest-timeout-synconmain.js" type="text/javascript"></script> >+</body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-twice-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-twice-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0882429be6e2d558f66ec07e680dba6f45792271 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-twice-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context. >+ >+ >+PASS Timeout test: load fires normally with no timeout set, twice, original timeout at 0, reset at 2000 to 0 >+PASS Timeout test: load fires normally with same timeout set twice, original timeout at 5000, reset at 2000 to 5000 >+PASS Timeout test: timeout fires normally with same timeout set twice, original timeout at 2000, reset at 1000 to 2000 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-twice.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-twice.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1423fd5dbd48b7772ab4a572b8d02c5bbc1b739e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-twice.html >@@ -0,0 +1,25 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in async cases in document (i.e. non-worker) context.</p> >+ <div id="log"></div> >+ <script src="resources/xmlhttprequest-timeout-twice.js" type="text/javascript"></script> >+</body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-aborted-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-aborted-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d6f548f91928785e6124291abc25d7aff30c8742 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-aborted-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in in a worker context. >+ >+ >+PASS Timeout test: No events should fire for an unsent, unaborted request >+PASS Timeout test: time to abort is -1, timeout set at 2000 >+PASS Timeout test: time to abort is 5000, timeout set at 2000 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-aborted.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-aborted.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c3a4581f7569504e2cdf3ff90a953c4d9be48c13 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-aborted.html >@@ -0,0 +1,28 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests in Worker</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4] following-sibling::ol/li[4]/ol/li[5]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following-sibling::ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#abort-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-abort" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#event-xhr-timeout" data-tested-assertations="../.." /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >+ <div id="log"></div> >+ <script type="text/javascript"> >+ var worker = new Worker("resources/xmlhttprequest-timeout-aborted.js"); >+ worker.addEventListener("message", testResultCallbackHandler); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overrides-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overrides-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5714f6d36baeeed9b84c0a01d7229950933011b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overrides-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in in a worker context. >+ >+ >+PASS Timeout test: timeout disabled after initially set, original timeout at 5000, reset at 2000 to 0 >+PASS Timeout test: timeout overrides load after a delay, original timeout at 5000, reset at 1000 to 2000 >+PASS Timeout test: timeout enabled after initially disabled, original timeout at 0, reset at 2000 to 50000 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overrides.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overrides.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bf77d859c7f170cdeca8311c5c6b52910dc1e5e1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overrides.html >@@ -0,0 +1,24 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests in Worker</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >+ <div id="log"></div> >+ <script type="text/javascript"> >+ var worker = new Worker("resources/xmlhttprequest-timeout-overrides.js"); >+ worker.addEventListener("message", testResultCallbackHandler); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overridesexpires-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overridesexpires-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ed56f97243f0d5c875632233a3d86b5880ff091d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overridesexpires-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in in a worker context. >+ >+ >+PASS Timeout test: timeout set to expiring value after load fires, original timeout at 5000, reset at 4000 to 1000 >+PASS Timeout test: timeout set to expired value before load fires, original timeout at 5000, reset at 2000 to 1100 >+PASS Timeout test: timeout set to non-expiring value after timeout fires, original timeout at 1000, reset at 2000 to 500 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overridesexpires.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overridesexpires.html >new file mode 100644 >index 0000000000000000000000000000000000000000..180db52eacc8880d00af3f77cf4c99ed93ca5745 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-overridesexpires.html >@@ -0,0 +1,25 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests in Worker</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >+ <div id="log"></div> >+ <script type="text/javascript"> >+ var worker = new Worker("resources/xmlhttprequest-timeout-overridesexpires.js"); >+ worker.addEventListener("message", testResultCallbackHandler); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-simple-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-simple-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..149b1cc2c3dbeff32aba04e407f34d482b74ff0b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-simple-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in in a worker context. >+ >+ >+PASS Timeout test: no time out scheduled, load fires normally, timeout scheduled at 0 >+PASS Timeout test: load fires normally, timeout scheduled at 5000 >+PASS Timeout test: timeout hit before load, timeout scheduled at 2000 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-simple.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-simple.html >new file mode 100644 >index 0000000000000000000000000000000000000000..135691fbd9cf64653df29daf6815deb185fc529e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-simple.html >@@ -0,0 +1,26 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests in Worker</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >+ <div id="log"></div> >+ <script type="text/javascript"> >+ var worker = new Worker("resources/xmlhttprequest-timeout-simple.js"); >+ worker.onmessage = testResultCallbackHandler; >+ </script> >+</body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-synconworker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-synconworker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..25509d3834f9aa55121968bc495d3c2ee688071b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-synconworker-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in in a worker context. >+ >+ >+PASS Timeout test: no time out scheduled, load fires normally, timeout scheduled at 0 >+PASS Timeout test: load fires normally, timeout scheduled at 5000 >+PASS Timeout test: Unexpected error: TimeoutError: The operation timed out. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-synconworker.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-synconworker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..423dcc93cc4ac823688c35648ffdafa72aa02b2a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-synconworker.html >@@ -0,0 +1,25 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests in Worker</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >+ <div id="log"></div> >+ <script type="text/javascript"> >+ var worker = new Worker("resources/xmlhttprequest-timeout-synconworker.js"); >+ worker.addEventListener("message", testResultCallbackHandler); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-twice-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-twice-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..860f92ed2d615f959d6513e8765cd912339a9d6e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-twice-expected.txt >@@ -0,0 +1,9 @@ >+Description >+ >+This test validates that the XHR2 timeout property behaves as expected in in a worker context. >+ >+ >+PASS Timeout test: load fires normally with no timeout set, twice, original timeout at 0, reset at 2000 to 0 >+PASS Timeout test: load fires normally with same timeout set twice, original timeout at 5000, reset at 2000 to 5000 >+PASS Timeout test: timeout fires normally with same timeout set twice, original timeout at 2000, reset at 1000 to 2000 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-twice.html b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-twice.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7e7107d4b6f1439f940d81c29eb67103ac717fc5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-timeout-worker-twice.html >@@ -0,0 +1,26 @@ >+ <!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>XHR2 Timeout Property Tests in Worker</title> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-timeout-attribute" data-tested-assertations="following::ol[1]/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-ontimeout" data-tested-assertations="../.."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#timeout-error" data-tested-assertations=".."/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[9]"/> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/.. following-sibling::dl//code[contains(@title,'dom-XMLHttpRequest-timeout')]/../following-sibling::dd following::dt[1] following::dd[1]" /> >+ <meta name=timeout content=long> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="resources/xmlhttprequest-timeout-runner.js"></script> >+</head> >+<body> >+ <h1>Description</h1> >+ <p>This test validates that the XHR2 timeout property behaves as expected in in a worker context.</p> >+ <div id="log"></div> >+ <script type="text/javascript"> >+ var worker = new Worker("resources/xmlhttprequest-timeout-twice.js"); >+ worker.addEventListener("message", testResultCallbackHandler); >+ </script> >+</body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-unsent-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-unsent-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..763911c49bdc73c45804ec4f336e20a291492012 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-unsent-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: members during UNSENT >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-unsent.htm b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-unsent.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..eb52d63eef971895f69f1b0151baa457250dd452 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/xhr/xmlhttprequest-unsent.htm >@@ -0,0 +1,36 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>XMLHttpRequest: members during UNSENT</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-unsent" data-tested-assertations=".. following::dd" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-setrequestheader" data-tested-assertations="following::ol/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-status-attribute" data-tested-assertations="following::ol/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-statustext-attribute" data-tested-assertations="following::ol/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-getresponseheader()-method" data-tested-assertations="following::ol/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method" data-tested-assertations="following::ol/li[1]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsetext-attribute" data-tested-assertations="following::ol/li[2]" /> >+ <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol/li[2]" /> >+ >+ </head> >+ <body> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ var client = new XMLHttpRequest() >+ assert_throws("InvalidStateError", function() { client.setRequestHeader("x-test", "test") }, "setRequestHeader") >+ assert_throws("InvalidStateError", function() { client.send(null) }, "send") >+ assert_equals(client.status, 0, "status") >+ assert_equals(client.statusText, "", "statusText") >+ assert_equals(client.getAllResponseHeaders(), "", "getAllResponseHeaders") >+ assert_equals(client.getResponseHeader("x-test"), null, "getResponseHeader") >+ assert_equals(client.responseText, "", "responseText") >+ assert_equals(client.responseXML, null, "responseXML") >+ >+ assert_equals(client.readyState, client.UNSENT, "readyState") >+ }) >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/platform/gtk/TestExpectations b/LayoutTests/platform/gtk/TestExpectations >index b55127edbac65d12075532e84239f8b4810be130..d36cac1fff84aaccae7e5870f9a9ef1f2b6e5f09 100644 >--- a/LayoutTests/platform/gtk/TestExpectations >+++ b/LayoutTests/platform/gtk/TestExpectations >@@ -1862,7 +1862,7 @@ webkit.org/b/176757 fast/hidpi/filters-multiple.html [ Pass ImageOnlyFailure ] > > webkit.org/b/177527 [ Release ] fast/hidpi/filters-blur.html [ Pass ImageOnlyFailure ] > >-webkit.org/b/177530 imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed.htm [ Pass Failure ] >+webkit.org/b/177530 imported/w3c/web-platform-tests/xhr/setrequestheader-header-allowed.htm [ Pass Failure ] > > webkit.org/b/177940 workers/wasm-hashset.html [ Crash Timeout Pass ] > >@@ -1955,7 +1955,7 @@ webkit.org/b/186638 compositing/patterns/direct-pattern-compositing-padding.html > webkit.org/b/186638 fast/mediastream/media-stream-track-source-failure.html [ Failure Timeout Pass ] > webkit.org/b/186638 editing/selection/select-bidi-run.html [ Timeout Pass ] > webkit.org/b/186638 imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.html [ Failure Pass ] >-webkit.org/b/186638 imported/w3c/web-platform-tests/XMLHttpRequest/send-timeout-events.htm [ Failure Pass ] >+webkit.org/b/186638 imported/w3c/web-platform-tests/xhr/send-timeout-events.htm [ Failure Pass ] > webkit.org/b/186638 imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-large.html [ Failure Pass ] > webkit.org/b/186638 imported/w3c/web-platform-tests/html/webappapis/timers/negative-settimeout.html [ Failure Pass ] > webkit.org/b/186638 fast/selectors/hover-invalidation-descendant-dynamic.html [ Failure Pass ] >@@ -1993,8 +1993,8 @@ webkit.org/b/186750 imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_key > > webkit.org/b/186847 http/tests/inspector/network/resource-sizes-memory-cache.html [ Pass Failure ] > >-webkit.org/b/186851 imported/w3c/web-platform-tests/XMLHttpRequest/formdata.htm [ Pass Failure ] >-webkit.org/b/186851 imported/w3c/web-platform-tests/XMLHttpRequest/formdata-blob.htm [ Pass Failure ] >+webkit.org/b/186851 imported/w3c/web-platform-tests/xhr/formdata.htm [ Pass Failure ] >+webkit.org/b/186851 imported/w3c/web-platform-tests/xhr/formdata-blob.htm [ Pass Failure ] > > webkit.org/b/187326 fast/selectors/selection-window-inactive-stroke-color.html [ Pass ImageOnlyFailure ] > >@@ -3047,11 +3047,11 @@ webkit.org/b/148936 imported/w3c/web-platform-tests/html/semantics/embedded-cont > webkit.org/b/149128 fast/text/control-characters [ ImageOnlyFailure ] > > # web-platform-tests XHR tests >-webkit.org/b/179663 imported/w3c/web-platform-tests/XMLHttpRequest/headers-normalize-response.htm [ Failure ] >-webkit.org/b/179662 imported/w3c/web-platform-tests/XMLHttpRequest/status-async.htm [ Failure ] >-webkit.org/b/179662 imported/w3c/web-platform-tests/XMLHttpRequest/status-basic.htm [ Failure ] >-webkit.org/b/179662 imported/w3c/web-platform-tests/XMLHttpRequest/status-error.htm [ Failure ] >-imported/w3c/web-platform-tests/XMLHttpRequest/event-readystatechange-loaded.htm [ Slow ] >+webkit.org/b/179663 imported/w3c/web-platform-tests/xhr/headers-normalize-response.htm [ Failure ] >+webkit.org/b/179662 imported/w3c/web-platform-tests/xhr/status-async.htm [ Failure ] >+webkit.org/b/179662 imported/w3c/web-platform-tests/xhr/status-basic.htm [ Failure ] >+webkit.org/b/179662 imported/w3c/web-platform-tests/xhr/status-error.htm [ Failure ] >+imported/w3c/web-platform-tests/xhr/event-readystatechange-loaded.htm [ Slow ] > > webkit.org/b/151267 imported/blink/compositing/squashing/squashing-reflection-disallowed.html [ ImageOnlyFailure ] > webkit.org/b/151267 imported/blink/compositing/will-change/stacking-context-creation.html [ ImageOnlyFailure ] >@@ -3450,13 +3450,13 @@ webkit.org/b/185254 http/tests/cache/disk-cache/redirect-chain-limits.html [ Fai > webkit.org/b/185254 http/tests/xmlhttprequest/onloadend-event-after-error.html [ Failure ] > webkit.org/b/185254 http/tests/xmlhttprequest/response-access-on-error.html [ Failure ] > webkit.org/b/185254 http/tests/xmlhttprequest/state-after-network-error.html [ Failure ] >-webkit.org/b/185254 imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite.htm [ Failure ] >-webkit.org/b/185254 imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error.htm [ Failure ] >+webkit.org/b/185254 imported/w3c/web-platform-tests/xhr/send-redirect-infinite.htm [ Failure ] >+webkit.org/b/185254 imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error.htm [ Failure ] > webkit.org/b/185254 http/tests/cache/network-error-during-revalidation.html [ Failure ] > webkit.org/b/185254 http/tests/xmlhttprequest/XMLHttpRequestException.html [ Failure ] > webkit.org/b/185254 http/tests/xmlhttprequest/onloadend-event-after-sync-requests.html [ Failure ] >-webkit.org/b/185254 imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync.htm [ Failure ] >-webkit.org/b/185254 imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync.htm [ Failure ] >+webkit.org/b/185254 imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync.htm [ Failure ] >+webkit.org/b/185254 imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync.htm [ Failure ] > webkit.org/b/185254 http/tests/xmlhttprequest/connection-error-sync.html [ Failure ] > > webkit.org/b/185548 accessibility/scroll-to-make-visible-iframe-offscreen.html [ Failure ] >diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt >deleted file mode 100644 >index 5de1ad5c94c17bb03bec4a8c7a26367d17d1f36b..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (GET) >-PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (HEAD) >- >diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt >deleted file mode 100644 >index e155d0142b9d9feb4d7c0bef5d72043fa23d2a3a..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD (GET) >-PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD (HEAD) >- >diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt >deleted file mode 100644 >index 2acce45559ec1a6b550ae49ec28e2399591489b0..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >-Blocked access to external URL http://nonexistent-origin.localhost:8800/ >- >-PASS http URL >-FAIL data URL assert_throws: function "function () >- { >- xhr.send("Test Message"); >- }" did not throw >- >diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt >deleted file mode 100644 >index 5587fef98a7fef1587b24b58246417dc2cb4ba01..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Redirects (basics) (301) >-PASS XMLHttpRequest: send() - Redirects (basics) (302) >-PASS XMLHttpRequest: send() - Redirects (basics) (303) >-PASS XMLHttpRequest: send() - Redirects (basics) (307) >- >diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt >deleted file mode 100644 >index 8b504acc654f86d928478c2d7aa168ebda7e1258..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt >+++ /dev/null >@@ -1,38 +0,0 @@ >-CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >-CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >-CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >- >-FAIL setRequestHeader("") sends a blank string assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL setRequestHeader(" ") sends the string " " assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS setRequestHeader(null) sends the string "null" >-PASS setRequestHeader(undefined) sends the string "undefined" >-PASS String request has correct default Content-Type of "text/plain;charset=UTF-8" >-PASS String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >-FAIL XML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS XML Document request has correct default Content-Type of "application/xml;charset=UTF-8" >-FAIL XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: application/xhtml+xml;charset=UTF-8\n" but got "Content-Type: application/xhtml+xml;charset=ASCII\n" >-FAIL HTML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS HTML Document request has correct default Content-Type of "text/html;charset=UTF-8" >-FAIL HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: text/html+junk;charset=UTF-8\n" but got "Content-Type: text/html+junk;charset=ASCII\n" >-FAIL Blob request respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL Blob request with unset type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: \n" >-PASS Blob request with unset type keeps setRequestHeader() Content-Type and charset >-FAIL Blob request with set type respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS Blob request with set type uses that it for Content-Type unless setRequestHeader() >-PASS Blob request with set type keeps setRequestHeader() Content-Type and charset >-FAIL ArrayBuffer request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS ArrayBuffer request sends no Content-Type without setRequestHeader() call >-PASS ArrayBuffer request keeps setRequestHeader() Content-Type and charset >-FAIL ArrayBufferView request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS ArrayBufferView request sends no Content-Type without setRequestHeader() call >-PASS ArrayBufferView request keeps setRequestHeader() Content-Type and charset >-FAIL FormData request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS FormData request has correct default Content-Type of "multipart/form-data; boundary=_" >-PASS FormData request keeps setRequestHeader() Content-Type and charset >-FAIL URLSearchParams respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8" assert_equals: expected "Content-Type: application/x-www-form-urlencoded;charset=UTF-8\n" but got "Content-Type: text/plain;charset=UTF-8\n" >-PASS URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >-FAIL ReadableStream request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL ReadableStream request with under type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: text/plain;charset=UTF-8\n" >-FAIL ReadableStream request keeps setRequestHeader() Content-Type and charset assert_equals: expected "Content-Type: application/xml;charset=ASCII\n" but got "Content-Type: application/xml;charset=UTF-8\n" >- >diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5de1ad5c94c17bb03bec4a8c7a26367d17d1f36b >--- /dev/null >+++ b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (GET) >+PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (HEAD) >+ >diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e155d0142b9d9feb4d7c0bef5d72043fa23d2a3a >--- /dev/null >+++ b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD (GET) >+PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD (HEAD) >+ >diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2acce45559ec1a6b550ae49ec28e2399591489b0 >--- /dev/null >+++ b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt >@@ -0,0 +1,8 @@ >+Blocked access to external URL http://nonexistent-origin.localhost:8800/ >+ >+PASS http URL >+FAIL data URL assert_throws: function "function () >+ { >+ xhr.send("Test Message"); >+ }" did not throw >+ >diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5587fef98a7fef1587b24b58246417dc2cb4ba01 >--- /dev/null >+++ b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS XMLHttpRequest: send() - Redirects (basics) (301) >+PASS XMLHttpRequest: send() - Redirects (basics) (302) >+PASS XMLHttpRequest: send() - Redirects (basics) (303) >+PASS XMLHttpRequest: send() - Redirects (basics) (307) >+ >diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8b504acc654f86d928478c2d7aa168ebda7e1258 >--- /dev/null >+++ b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt >@@ -0,0 +1,38 @@ >+CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+ >+FAIL setRequestHeader("") sends a blank string assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL setRequestHeader(" ") sends the string " " assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS setRequestHeader(null) sends the string "null" >+PASS setRequestHeader(undefined) sends the string "undefined" >+PASS String request has correct default Content-Type of "text/plain;charset=UTF-8" >+PASS String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >+FAIL XML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS XML Document request has correct default Content-Type of "application/xml;charset=UTF-8" >+FAIL XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: application/xhtml+xml;charset=UTF-8\n" but got "Content-Type: application/xhtml+xml;charset=ASCII\n" >+FAIL HTML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS HTML Document request has correct default Content-Type of "text/html;charset=UTF-8" >+FAIL HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: text/html+junk;charset=UTF-8\n" but got "Content-Type: text/html+junk;charset=ASCII\n" >+FAIL Blob request respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL Blob request with unset type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: \n" >+PASS Blob request with unset type keeps setRequestHeader() Content-Type and charset >+FAIL Blob request with set type respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS Blob request with set type uses that it for Content-Type unless setRequestHeader() >+PASS Blob request with set type keeps setRequestHeader() Content-Type and charset >+FAIL ArrayBuffer request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS ArrayBuffer request sends no Content-Type without setRequestHeader() call >+PASS ArrayBuffer request keeps setRequestHeader() Content-Type and charset >+FAIL ArrayBufferView request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS ArrayBufferView request sends no Content-Type without setRequestHeader() call >+PASS ArrayBufferView request keeps setRequestHeader() Content-Type and charset >+FAIL FormData request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS FormData request has correct default Content-Type of "multipart/form-data; boundary=_" >+PASS FormData request keeps setRequestHeader() Content-Type and charset >+FAIL URLSearchParams respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8" assert_equals: expected "Content-Type: application/x-www-form-urlencoded;charset=UTF-8\n" but got "Content-Type: text/plain;charset=UTF-8\n" >+PASS URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >+FAIL ReadableStream request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL ReadableStream request with under type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: text/plain;charset=UTF-8\n" >+FAIL ReadableStream request keeps setRequestHeader() Content-Type and charset assert_equals: expected "Content-Type: application/xml;charset=ASCII\n" but got "Content-Type: application/xml;charset=UTF-8\n" >+ >diff --git a/LayoutTests/platform/ios-device/TestExpectations b/LayoutTests/platform/ios-device/TestExpectations >index 661de86b72a69897cef07526da1cd51944dac76b..d5c8e19559fb66707479939fd29782248c00843d 100644 >--- a/LayoutTests/platform/ios-device/TestExpectations >+++ b/LayoutTests/platform/ios-device/TestExpectations >@@ -74,8 +74,8 @@ imported/blink/compositing/child-transform-layer-with-foreground-layer.html [ Im > imported/blink/fast/canvas/canvas-unbalanced-save.html [ ImageOnlyFailure ] > > imported/w3c/web-platform-tests/IndexedDB/idbcursor-update-exception-order.htm [ Skip ] >-imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus-sync.htm [ Skip ] >-imported/w3c/web-platform-tests/XMLHttpRequest/send-send.htm [ Skip ] >+imported/w3c/web-platform-tests/xhr/send-redirect-bogus-sync.htm [ Skip ] >+imported/w3c/web-platform-tests/xhr/send-send.htm [ Skip ] > imported/w3c/web-platform-tests/cssom/ttwf-cssom-document-extension.html [ Skip ] > imported/w3c/web-platform-tests/dom/nodes/Element-childElement-null-xhtml.xhtml [ Skip ] > imported/w3c/web-platform-tests/dom/nodes/getElementsByClassName-06.htm [ Skip ] >diff --git a/LayoutTests/platform/ios-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt b/LayoutTests/platform/ios-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt >deleted file mode 100644 >index c32f87d5faa0efad4b61b16b446d76a331b0cba4..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/ios-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >-Blocked access to external URL http://nonexistent-origin.localhost%7D:8800/ >- >-FAIL XmlHttpRequest: The send() method: Throw a "throw an "NetworkError" exception when Network error happens (synchronous flag is set) assert_throws: function "function () >- { >- xhr.send("Test ..." threw object "AbortError (DOM Exception 20): The operation was aborted." that is not a DOMException NetworkError: property "code" is equal to 20, expected 19 >- >diff --git a/LayoutTests/platform/ios-wk1/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt b/LayoutTests/platform/ios-wk1/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c32f87d5faa0efad4b61b16b446d76a331b0cba4 >--- /dev/null >+++ b/LayoutTests/platform/ios-wk1/imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub-expected.txt >@@ -0,0 +1,6 @@ >+Blocked access to external URL http://nonexistent-origin.localhost%7D:8800/ >+ >+FAIL XmlHttpRequest: The send() method: Throw a "throw an "NetworkError" exception when Network error happens (synchronous flag is set) assert_throws: function "function () >+ { >+ xhr.send("Test ..." threw object "AbortError (DOM Exception 20): The operation was aborted." that is not a DOMException NetworkError: property "code" is equal to 20, expected 19 >+ >diff --git a/LayoutTests/platform/ios-wk2/TestExpectations b/LayoutTests/platform/ios-wk2/TestExpectations >index f208f9aea37dd9eb2543687a9717e64a341916ce..026d97706e943a1ba8c20a0732dd8ffa2f281772 100644 >--- a/LayoutTests/platform/ios-wk2/TestExpectations >+++ b/LayoutTests/platform/ios-wk2/TestExpectations >@@ -1221,7 +1221,7 @@ webkit.org/b/171638 [ Release ] http/tests/xmlhttprequest/methods.html [ Pass Ti > > webkit.org/b/171830 [ Debug ] http/tests/websocket/tests/hybi/workers/close.html [ Pass Failure ] > >-webkit.org/b/169637 imported/w3c/web-platform-tests/XMLHttpRequest/timeout-multiple-fetches.html [ Pass Failure ] >+webkit.org/b/169637 imported/w3c/web-platform-tests/xhr/timeout-multiple-fetches.html [ Pass Failure ] > > webkit.org/b/171886 imported/w3c/web-platform-tests/streams/readable-byte-streams/general.html [ Pass Failure ] > >@@ -1241,7 +1241,7 @@ webkit.org/b/171985 [ Release ] workers/bomb.html [ Pass Timeout ] > webkit.org/b/175939 [ Debug ] editing/execCommand/forward-delete-read-write-canvas.html [ Skip ] > > # <rdar://problem/32826391> >-imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type.htm [ Failure ] >+imported/w3c/web-platform-tests/xhr/setrequestheader-content-type.htm [ Failure ] > > webkit.org/b/176240 http/tests/websocket/tests/hybi/handshake-ok-with-legacy-websocket-response-headers.html [ Pass Failure ] > >@@ -1268,8 +1268,6 @@ webkit.org/b/181821 fast/visual-viewport/ios/caret-after-focus-in-fixed.html [ P > > webkit.org/b/182144 [ Debug ] webgl/1.0.3/conformance/rendering/many-draw-calls.html [ Skip ] > >-webkit.org/b/182849 imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.htm [ Pass Failure ] >- > # This is marked as Pass to see if additional logging can reveal the cause of the flakiness. > webkit.org/b/183714 [ Debug ] http/tests/storageAccess/grant-storage-access-under-opener.html [ Pass ] > >diff --git a/LayoutTests/platform/ios/TestExpectations b/LayoutTests/platform/ios/TestExpectations >index a5bc021c70e313f4c8c7b7e46f4fc5ae083a34b4..3f13de8d2aa2a07ef845194fe31bdd7366dfdc49 100644 >--- a/LayoutTests/platform/ios/TestExpectations >+++ b/LayoutTests/platform/ios/TestExpectations >@@ -2362,7 +2362,7 @@ webkit.org/b/152282 legacy-animation-engine/css3/filters/composited-during-trans > > webkit.org/b/152935 fast/scrolling/scroll-position-on-reload-rtl.html [ Failure ] > >-webkit.org/b/153371 imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-chunked-trailer.htm [ Pass Failure ] >+webkit.org/b/153371 imported/w3c/web-platform-tests/xhr/getresponseheader-chunked-trailer.htm [ Pass Failure ] > > webkit.org/b/169210 imported/w3c/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-navigation-samedoc.html [ Failure ] > >@@ -2379,7 +2379,7 @@ webkit.org/b/153370 imported/w3c/web-platform-tests/html/dom/documents/dom-tree- > > webkit.org/b/153311 fast/replaced/preferred-widths.html [ Pass Failure ] > >-webkit.org/b/153336 imported/w3c/web-platform-tests/XMLHttpRequest/open-url-multi-window-4.htm [ Pass Failure ] >+webkit.org/b/153336 imported/w3c/web-platform-tests/xhr/open-url-multi-window-4.htm [ Pass Failure ] > > webkit.org/b/153803 perf/show-hide-table-rows.html [ Pass Failure ] > >@@ -2631,7 +2631,7 @@ imported/w3c/web-platform-tests/dom/nodes/Document-contentType/contentType/conte > css3/font-variant-petite-caps-synthesis.html [ ImageOnlyFailure ] > css3/font-variant-small-caps-synthesis.html [ ImageOnlyFailure ] > >-webkit.org/b/161949 imported/w3c/web-platform-tests/XMLHttpRequest/response-method.htm [ Failure ] >+webkit.org/b/161949 imported/w3c/web-platform-tests/xhr/response-method.htm [ Failure ] > > webkit.org/b/130972 transitions/3d/interrupted-transition.html [ Pass Timeout ] > webkit.org/b/130972 legacy-animation-engine/transitions/3d/interrupted-transition.html [ Pass Timeout ] >@@ -2908,7 +2908,7 @@ fast/text/ipa-tone-letters.html [ Failure ] > # <rdar://problem/33251388> REGRESSION: Multiple imported/w3c/web-platform-tests/ are failing with blobs > imported/w3c/web-platform-tests/fetch/api/basic/request-headers.any.html [ Failure ] > imported/w3c/web-platform-tests/fetch/api/basic/request-headers.any.worker.html [ Failure ] >-imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type.html [ Failure ] >+imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type.html [ Failure ] > > # <rdar://problem/33630526> http/tests/websocket/tests/hybi/deflate-frame-parameter.html is failing on iOS 11 > http/tests/websocket/tests/hybi/deflate-frame-parameter.html [ Failure ] >diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt >deleted file mode 100644 >index b9f6d781b67d3287c29a0f3bd82dfe8261154929..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: getResponseHeader() case-insensitive matching >- >diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt >deleted file mode 100644 >index b8f5bd1b99bb5d18bc490f63417fb7cdeffde74b..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt >+++ /dev/null >@@ -1,10 +0,0 @@ >- >-PASS Synchronous blob loading with no mime type [POST] >-PASS Asynchronous blob loading with no mime type [POST] >-PASS Synchronous blob loading with no mime type [PUT] >-PASS Asynchronous blob loading with no mime type [PUT] >-PASS Synchronous blob loading with invalid mime type [POST] >-PASS Asynchronous blob loading with invalid mime type [POST] >-PASS Synchronous blob loading with invalid mime type [PUT] >-PASS Asynchronous blob loading with invalid mime type [PUT] >- >diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt >deleted file mode 100644 >index 973724355ba987cf0b9599ab5bad294180146952..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS XMLHttpRequest: send("") - empty entity body (POST) >-PASS XMLHttpRequest: send("") - empty entity body (PUT) >-FAIL XMLHttpRequest: send("") - empty entity body (HEAD) assert_equals: expected "NO" but got "0" >- >diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt >deleted file mode 100644 >index 53d467b17f38976c89be336f87b471fa1017b42d..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >- >-PASS No content type (POST) >-PASS No content type (PUT) >-FAIL No content type (HEAD) assert_equals: expected "NO" but got "0" >-PASS Explicit content type (POST) >-PASS Explicit content type (PUT) >-FAIL Explicit content type (HEAD) assert_equals: expected "NO" but got "0" >- >diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt >deleted file mode 100644 >index 41de5e6162c28541c55d948cd3853de7bb490c9c..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt >+++ /dev/null >@@ -1,37 +0,0 @@ >-CONSOLE MESSAGE: line 26: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >-CONSOLE MESSAGE: line 26: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >-CONSOLE MESSAGE: line 26: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >- >-PASS setRequestHeader("") sends a blank string >-PASS setRequestHeader(" ") sends the string " " >-PASS setRequestHeader(null) sends the string "null" >-PASS setRequestHeader(undefined) sends the string "undefined" >-PASS String request has correct default Content-Type of "text/plain;charset=UTF-8" >-PASS String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >-PASS XML Document request respects setRequestHeader("") >-PASS XML Document request has correct default Content-Type of "application/xml;charset=UTF-8" >-FAIL XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "content-type: application/xhtml+xml;charset=utf-8" but got "content-type: application/xhtml+xml;charset=ascii" >-PASS HTML Document request respects setRequestHeader("") >-PASS HTML Document request has correct default Content-Type of "text/html;charset=UTF-8" >-FAIL HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "content-type: text/html+junk;charset=utf-8" but got "content-type: text/html+junk;charset=ascii" >-PASS Blob request respects setRequestHeader("") to be specified >-FAIL Blob request with unset type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "content-type: " >-PASS Blob request with unset type keeps setRequestHeader() Content-Type and charset >-PASS Blob request with set type uses that it for Content-Type unless setRequestHeader() >-PASS Blob request with set type keeps setRequestHeader() Content-Type and charset >-PASS ArrayBuffer request respects setRequestHeader("") >-FAIL ArrayBuffer request sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "content-type: application/x-www-form-urlencoded" >-PASS ArrayBuffer request keeps setRequestHeader() Content-Type and charset >-PASS ArrayBufferView request respects setRequestHeader("") >-FAIL ArrayBufferView request sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "content-type: application/x-www-form-urlencoded" >-PASS ArrayBufferView request keeps setRequestHeader() Content-Type and charset >-PASS FormData request respects setRequestHeader("") >-PASS FormData request has correct default Content-Type of "multipart/form-data;boundary=_" >-PASS FormData request keeps setRequestHeader() Content-Type and charset >-PASS URLSearchParams respects setRequestHeader("") >-FAIL URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8" assert_equals: expected "content-type: application/x-www-form-urlencoded;charset=utf-8" but got "content-type: text/plain;charset=utf-8" >-PASS URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >-PASS ReadableStream request respects setRequestHeader("") >-FAIL ReadableStream request with under type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "content-type: text/plain;charset=utf-8" >-FAIL ReadableStream request keeps setRequestHeader() Content-Type and charset assert_equals: expected "content-type: application/xml;charset=ascii" but got "content-type: application/xml;charset=utf-8" >- >diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b9f6d781b67d3287c29a0f3bd82dfe8261154929 >--- /dev/null >+++ b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: getResponseHeader() case-insensitive matching >+ >diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b8f5bd1b99bb5d18bc490f63417fb7cdeffde74b >--- /dev/null >+++ b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt >@@ -0,0 +1,10 @@ >+ >+PASS Synchronous blob loading with no mime type [POST] >+PASS Asynchronous blob loading with no mime type [POST] >+PASS Synchronous blob loading with no mime type [PUT] >+PASS Asynchronous blob loading with no mime type [PUT] >+PASS Synchronous blob loading with invalid mime type [POST] >+PASS Asynchronous blob loading with invalid mime type [POST] >+PASS Synchronous blob loading with invalid mime type [PUT] >+PASS Asynchronous blob loading with invalid mime type [PUT] >+ >diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..973724355ba987cf0b9599ab5bad294180146952 >--- /dev/null >+++ b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS XMLHttpRequest: send("") - empty entity body (POST) >+PASS XMLHttpRequest: send("") - empty entity body (PUT) >+FAIL XMLHttpRequest: send("") - empty entity body (HEAD) assert_equals: expected "NO" but got "0" >+ >diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..53d467b17f38976c89be336f87b471fa1017b42d >--- /dev/null >+++ b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS No content type (POST) >+PASS No content type (PUT) >+FAIL No content type (HEAD) assert_equals: expected "NO" but got "0" >+PASS Explicit content type (POST) >+PASS Explicit content type (PUT) >+FAIL Explicit content type (HEAD) assert_equals: expected "NO" but got "0" >+ >diff --git a/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..41de5e6162c28541c55d948cd3853de7bb490c9c >--- /dev/null >+++ b/LayoutTests/platform/ios/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt >@@ -0,0 +1,37 @@ >+CONSOLE MESSAGE: line 26: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+CONSOLE MESSAGE: line 26: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+CONSOLE MESSAGE: line 26: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+ >+PASS setRequestHeader("") sends a blank string >+PASS setRequestHeader(" ") sends the string " " >+PASS setRequestHeader(null) sends the string "null" >+PASS setRequestHeader(undefined) sends the string "undefined" >+PASS String request has correct default Content-Type of "text/plain;charset=UTF-8" >+PASS String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >+PASS XML Document request respects setRequestHeader("") >+PASS XML Document request has correct default Content-Type of "application/xml;charset=UTF-8" >+FAIL XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "content-type: application/xhtml+xml;charset=utf-8" but got "content-type: application/xhtml+xml;charset=ascii" >+PASS HTML Document request respects setRequestHeader("") >+PASS HTML Document request has correct default Content-Type of "text/html;charset=UTF-8" >+FAIL HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "content-type: text/html+junk;charset=utf-8" but got "content-type: text/html+junk;charset=ascii" >+PASS Blob request respects setRequestHeader("") to be specified >+FAIL Blob request with unset type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "content-type: " >+PASS Blob request with unset type keeps setRequestHeader() Content-Type and charset >+PASS Blob request with set type uses that it for Content-Type unless setRequestHeader() >+PASS Blob request with set type keeps setRequestHeader() Content-Type and charset >+PASS ArrayBuffer request respects setRequestHeader("") >+FAIL ArrayBuffer request sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "content-type: application/x-www-form-urlencoded" >+PASS ArrayBuffer request keeps setRequestHeader() Content-Type and charset >+PASS ArrayBufferView request respects setRequestHeader("") >+FAIL ArrayBufferView request sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "content-type: application/x-www-form-urlencoded" >+PASS ArrayBufferView request keeps setRequestHeader() Content-Type and charset >+PASS FormData request respects setRequestHeader("") >+PASS FormData request has correct default Content-Type of "multipart/form-data;boundary=_" >+PASS FormData request keeps setRequestHeader() Content-Type and charset >+PASS URLSearchParams respects setRequestHeader("") >+FAIL URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8" assert_equals: expected "content-type: application/x-www-form-urlencoded;charset=utf-8" but got "content-type: text/plain;charset=utf-8" >+PASS URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >+PASS ReadableStream request respects setRequestHeader("") >+FAIL ReadableStream request with under type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "content-type: text/plain;charset=utf-8" >+FAIL ReadableStream request keeps setRequestHeader() Content-Type and charset assert_equals: expected "content-type: application/xml;charset=ascii" but got "content-type: application/xml;charset=utf-8" >+ >diff --git a/LayoutTests/platform/mac-sierra/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt b/LayoutTests/platform/mac-sierra/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt >deleted file mode 100644 >index 94e991784c3255e9ca014e6b211476b466955227..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/mac-sierra/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt >+++ /dev/null >@@ -1,10 +0,0 @@ >- >-FAIL Synchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Synchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >-FAIL Synchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Synchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >- >diff --git a/LayoutTests/platform/mac-sierra/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt b/LayoutTests/platform/mac-sierra/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..94e991784c3255e9ca014e6b211476b466955227 >--- /dev/null >+++ b/LayoutTests/platform/mac-sierra/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt >@@ -0,0 +1,10 @@ >+ >+FAIL Synchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Synchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >+FAIL Synchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Synchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >+ >diff --git a/LayoutTests/platform/mac-wk1/TestExpectations b/LayoutTests/platform/mac-wk1/TestExpectations >index c28aeaf80a21c622d2b1be88c7c2bb6651fade43..d26ed3b12790e175829449ab0543aadfc8289a2a 100644 >--- a/LayoutTests/platform/mac-wk1/TestExpectations >+++ b/LayoutTests/platform/mac-wk1/TestExpectations >@@ -368,7 +368,8 @@ webkit.org/b/158585 webgl/webgl-backing-store-size-update.html [ Pass Timeout ] > # rdar://problem/26478296 > [ Sierra+ ] svg/hixie/text/003.html [ Failure ] > >-webkit.org/b/159893 [ Debug ] imported/w3c/web-platform-tests/XMLHttpRequest/event-readystatechange-loaded.htm [ Pass Failure ] >+webkit.org/b/159893 [ Debug ] imported/w3c/web-platform-tests/xhr/event-readystatechange-loaded.htm [ Pass Failure ] >+webkit.org/b/188816 [ Debug ] imported/w3c/web-platform-tests/xhr/event-upload-progress.htm [ Pass Crash ] > > webkit.org/b/160101 userscripts/window-onerror-for-isolated-world-3.html [ Pass Failure ] > >@@ -426,7 +427,7 @@ css3/viewport-percentage-lengths/vh-auto-size.html [ Skip ] > > webkit.org/b/170877 [ Debug ] webgl/1.0.2/conformance/glsl/misc/shader-with-reserved-words.html [ Pass Timeout ] > >-webkit.org/b/180554 imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.htm [ Skip ] >+webkit.org/b/180554 imported/w3c/web-platform-tests/xhr/event-upload-progress-crossorigin.htm [ Skip ] > > webkit.org/b/187372 imported/w3c/web-platform-tests/IndexedDB/interfaces.any.worker.html [ Pass Timeout Slow ] > >@@ -511,7 +512,7 @@ webkit.org/b/175886 svg/animations/smil-leak-element-instances.svg [ Pass Failur > > webkit.org/b/172397 [ Debug ] legacy-animation-engine/animations/needs-layout.html [ Pass ImageOnlyFailure ] > >-webkit.org/b/179775 imported/w3c/web-platform-tests/XMLHttpRequest/firing-events-http-no-content-length.html [ Pass Failure ] >+webkit.org/b/179775 imported/w3c/web-platform-tests/xhr/firing-events-http-no-content-length.html [ Pass Failure ] > > webkit.org/b/172044 [ Debug ] imported/w3c/web-platform-tests/IndexedDB/open-request-queue.html [ Pass Timeout ] > >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt >deleted file mode 100644 >index d9a853e1b6d157ab1d7168a027efc7c1440f9264..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >- >-FAIL Local sync redirect to remote origin A network error occurred. >-PASS Local async redirect to remote origin >-FAIL Remote sync redirect to local origin A network error occurred. >-PASS Remote async redirect to local origin >-FAIL Remote sync redirect to same remote origin A network error occurred. >-PASS Remote async redirect to same remote origin >- >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/late-upload-events-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/late-upload-events-expected.txt >deleted file mode 100644 >index 5d86ccf4c2b74c2dcf17fc7a78bdd00213a08375..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/late-upload-events-expected.txt >+++ /dev/null >@@ -1,10 +0,0 @@ >-Blocked access to external URL http://www1.localhost:8800/cors/resources/status.py?headers=custom-header >-CONSOLE MESSAGE: line 30: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. >-CONSOLE MESSAGE: CORS-preflight request was blocked >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. >-Adding upload event listeners after send() >- >- >-FAIL Late listeners: No preflight assert_equals: expected 200 but got 0 >-FAIL Late listeners: Preflight assert_equals: expected 200 but got 0 >- >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt >deleted file mode 100644 >index 503780260b5e301f2eb9a8077969e9fc6219b46f..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: CORS-preflight request was blocked >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/auth1/corsenabled.py due to access control checks. >- >-PASS XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure) >- >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt >deleted file mode 100644 >index b20bc2c0caf7796d748f6222702b0f8f2002edf2..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: CORS-preflight request was blocked >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://nonexistent-origin.localhost:8800/ due to access control checks. >- >-PASS XMLHttpRequest: The send() method: Fire a progress event named error when Network error happens (synchronous flag is unset) >- >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub-expected.txt >deleted file mode 100644 >index 2e4d83419167d45181776678b88cff97b80772aa..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub-expected.txt >+++ /dev/null >@@ -1,11 +0,0 @@ >-Blocked access to external URL http://www.localhost:8800/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html#iframe%23sync-xhr >-Blocked access to external URL http://www.localhost:8800/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html#iframe%23sync-xhr >- >- >-Harness Error (TIMEOUT), message = null >- >-PASS Default "sync-xhr" feature policy ["*"] allows the top-level document. >-PASS Default "sync-xhr" feature policy ["*"] allows same-origin iframes. >-TIMEOUT Default "sync-xhr" feature policy ["*"] allows cross-origin iframes. Test timed out >-TIMEOUT Feature policy "sync-xhr" can be disabled in cross-origin iframes using "allow" attribute. Test timed out >- >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d9a853e1b6d157ab1d7168a027efc7c1440f9264 >--- /dev/null >+++ b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt >@@ -0,0 +1,8 @@ >+ >+FAIL Local sync redirect to remote origin A network error occurred. >+PASS Local async redirect to remote origin >+FAIL Remote sync redirect to local origin A network error occurred. >+PASS Remote async redirect to local origin >+FAIL Remote sync redirect to same remote origin A network error occurred. >+PASS Remote async redirect to same remote origin >+ >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/event-error-order.sub-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/event-error-order.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..85e046dfc063aaafd165cceff0c951540f9e3c29 >--- /dev/null >+++ b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/event-error-order.sub-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XMLHttpRequest: event - error (order of events) assert_equals: expected "upload.loadstart(0,12,true)" but got "upload.loadstart(0,0,false)" >+ >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/late-upload-events-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/late-upload-events-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5d86ccf4c2b74c2dcf17fc7a78bdd00213a08375 >--- /dev/null >+++ b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/late-upload-events-expected.txt >@@ -0,0 +1,10 @@ >+Blocked access to external URL http://www1.localhost:8800/cors/resources/status.py?headers=custom-header >+CONSOLE MESSAGE: line 30: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. >+CONSOLE MESSAGE: CORS-preflight request was blocked >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. >+Adding upload event listeners after send() >+ >+ >+FAIL Late listeners: No preflight assert_equals: expected 200 but got 0 >+FAIL Late listeners: Preflight assert_equals: expected 200 but got 0 >+ >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c7ac7b05c448e151579313c412b2ba2d80853779 >--- /dev/null >+++ b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: CORS-preflight request was blocked >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://www1.localhost:8800/xhr/resources/auth1/corsenabled.py due to access control checks. >+ >+PASS XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure) >+ >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b20bc2c0caf7796d748f6222702b0f8f2002edf2 >--- /dev/null >+++ b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: CORS-preflight request was blocked >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://nonexistent-origin.localhost:8800/ due to access control checks. >+ >+PASS XMLHttpRequest: The send() method: Fire a progress event named error when Network error happens (synchronous flag is unset) >+ >diff --git a/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub-expected.txt b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2e4d83419167d45181776678b88cff97b80772aa >--- /dev/null >+++ b/LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/xhr/xmlhttprequest-sync-default-feature-policy.sub-expected.txt >@@ -0,0 +1,11 @@ >+Blocked access to external URL http://www.localhost:8800/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html#iframe%23sync-xhr >+Blocked access to external URL http://www.localhost:8800/XMLHttpRequest/xmlhttprequest-sync-default-feature-policy.sub.html#iframe%23sync-xhr >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+PASS Default "sync-xhr" feature policy ["*"] allows the top-level document. >+PASS Default "sync-xhr" feature policy ["*"] allows same-origin iframes. >+TIMEOUT Default "sync-xhr" feature policy ["*"] allows cross-origin iframes. Test timed out >+TIMEOUT Feature policy "sync-xhr" can be disabled in cross-origin iframes using "allow" attribute. Test timed out >+ >diff --git a/LayoutTests/platform/mac-wk2/TestExpectations b/LayoutTests/platform/mac-wk2/TestExpectations >index 4dbb4767e795deedf98039a0273b92b0629fe5b8..3850450330a7a8c607243aedd6bdcf0b10b91449 100644 >--- a/LayoutTests/platform/mac-wk2/TestExpectations >+++ b/LayoutTests/platform/mac-wk2/TestExpectations >@@ -820,7 +820,7 @@ webkit.org/b/182341 imported/w3c/web-platform-tests/service-workers/service-work > > webkit.org/b/179352 imported/w3c/web-platform-tests/service-workers/service-worker/windowclient-navigate.https.html [ Pass Failure Slow ] > >-webkit.org/b/182849 imported/w3c/web-platform-tests/XMLHttpRequest/event-upload-progress-crossorigin.htm [ Pass Failure ] >+webkit.org/b/182849 imported/w3c/web-platform-tests/xhr/event-upload-progress-crossorigin.htm [ Pass Failure ] > > webkit.org/b/183164 fast/dom/Window/window-focus-self.html [ Pass Failure ] > >diff --git a/LayoutTests/platform/mac/TestExpectations b/LayoutTests/platform/mac/TestExpectations >index 71375966e72f321a762e46d9ebcc216bd5a92777..caf62e664e06f86682b043a9acb7f20d4cc7673e 100644 >--- a/LayoutTests/platform/mac/TestExpectations >+++ b/LayoutTests/platform/mac/TestExpectations >@@ -1133,9 +1133,9 @@ webkit.org/b/58766 fast/canvas/webgl/gl-teximage.html [ Pass Failure ] > # Imported Blink tests which have not been investigated. > imported/blink/compositing/video/video-controls-layer-creation-squashing.html [ Pass ImageOnlyFailure ] > >-webkit.org/b/150806 imported/w3c/web-platform-tests/XMLHttpRequest/send-timeout-events.htm [ Pass Failure ] >-webkit.org/b/150823 imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-chunked-trailer.htm [ Pass Failure ] >-webkit.org/b/159724 [ Debug ] imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm [ Skip ] >+webkit.org/b/150806 imported/w3c/web-platform-tests/xhr/send-timeout-events.htm [ Pass Failure ] >+webkit.org/b/150823 imported/w3c/web-platform-tests/xhr/getresponseheader-chunked-trailer.htm [ Pass Failure ] >+webkit.org/b/159724 [ Debug ] imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm [ Skip ] > > webkit.org/b/162668 fast/text/woff2-totalsfntsize.html [ ImageOnlyFailure ] > >@@ -1204,8 +1204,8 @@ webkit.org/b/158889 media/video-controls-show-on-kb-or-ax-event.html [ Pass Fail > # <rdar://problem/23500327> storage/websql/alter-to-info-table.html > [ Sierra+ ] storage/websql/alter-to-info-table.html [ Pass Failure ] > >-# <rdar://problem/23504749> imported/w3c/web-platform-tests/XMLHttpRequest/response-method.htm failing >-[ Sierra+ ] imported/w3c/web-platform-tests/XMLHttpRequest/response-method.htm [ Pass Failure ] >+# <rdar://problem/23504749> imported/w3c/web-platform-tests/xhr/response-method.htm failing >+[ Sierra+ ] imported/w3c/web-platform-tests/xhr/response-method.htm [ Pass Failure ] > > # <rdar://problem/23505582> Fails on iMac10,1 and iMac11,1 > [ Sierra+ ] fast/canvas/canvas-imageSmoothingEnabled-repaint.html [ Pass Failure ] >@@ -1371,7 +1371,7 @@ webkit.org/b/169324 media/track/media-element-enqueue-event-crash.html [ Pass Fa > > webkit.org/b/169572 imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location_hash.html [ Pass Failure ] > >-webkit.org/b/169637 imported/w3c/web-platform-tests/XMLHttpRequest/timeout-multiple-fetches.html [ Pass Failure ] >+webkit.org/b/169637 imported/w3c/web-platform-tests/xhr/timeout-multiple-fetches.html [ Pass Failure ] > > # <rdar://problem/19759913> > http/tests/media/video-served-as-text-with-type.html [ Skip ] >@@ -1585,8 +1585,8 @@ webkit.org/b/172052 [ Debug ] imported/w3c/web-platform-tests/html/webappapis/ti > # <rdar://problem/32800095> REGRESSION: LayoutTest imported/blink/fast/gradients/gradient-transparency.html is failing > [ HighSierra+ ] imported/blink/fast/gradients/gradient-transparency.html [ ImageOnlyFailure ] > >-# <rdar://problem/32826391> LayoutTest imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type.htm is failing on High Sierra >-[ HighSierra+ ] imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type.htm [ Failure ] >+# <rdar://problem/32826391> LayoutTest imported/w3c/web-platform-tests/xhr/setrequestheader-content-type.htm is failing on High Sierra >+[ HighSierra+ ] imported/w3c/web-platform-tests/xhr/setrequestheader-content-type.htm [ Failure ] > > # <rdar://problem/32864306> Unskip after bots have CTFontCopyPhysicalFont() > [ HighSierra+ ] fast/text/system-font-japanese-synthetic-italic.html [ Pass ImageOnlyFailure ] >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt >deleted file mode 100644 >index b9f6d781b67d3287c29a0f3bd82dfe8261154929..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/getresponseheader-case-insensitive-expected.txt >+++ /dev/null >@@ -1,3 +0,0 @@ >- >-PASS XMLHttpRequest: getResponseHeader() case-insensitive matching >- >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt >deleted file mode 100644 >index 94e991784c3255e9ca014e6b211476b466955227..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-blob-with-no-mime-type-expected.txt >+++ /dev/null >@@ -1,10 +0,0 @@ >- >-FAIL Synchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Synchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >-FAIL Synchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >-FAIL Synchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >-FAIL Asynchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >- >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt >deleted file mode 100644 >index 973724355ba987cf0b9599ab5bad294180146952..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-empty-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >- >-PASS XMLHttpRequest: send("") - empty entity body (POST) >-PASS XMLHttpRequest: send("") - empty entity body (PUT) >-FAIL XMLHttpRequest: send("") - empty entity body (HEAD) assert_equals: expected "NO" but got "0" >- >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt >deleted file mode 100644 >index 53d467b17f38976c89be336f87b471fa1017b42d..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-none-expected.txt >+++ /dev/null >@@ -1,8 +0,0 @@ >- >-PASS No content type (POST) >-PASS No content type (PUT) >-FAIL No content type (HEAD) assert_equals: expected "NO" but got "0" >-PASS Explicit content type (POST) >-PASS Explicit content type (PUT) >-FAIL Explicit content type (HEAD) assert_equals: expected "NO" but got "0" >- >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b9f6d781b67d3287c29a0f3bd82dfe8261154929 >--- /dev/null >+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/getresponseheader-case-insensitive-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS XMLHttpRequest: getResponseHeader() case-insensitive matching >+ >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..94e991784c3255e9ca014e6b211476b466955227 >--- /dev/null >+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type-expected.txt >@@ -0,0 +1,10 @@ >+ >+FAIL Synchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with no mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Synchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with no mime type [PUT] assert_equals: expected "NO" but got "" >+FAIL Synchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with invalid mime type [POST] assert_equals: expected "NO" but got "" >+FAIL Synchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >+FAIL Asynchronous blob loading with invalid mime type [PUT] assert_equals: expected "NO" but got "" >+ >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..973724355ba987cf0b9599ab5bad294180146952 >--- /dev/null >+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/send-entity-body-empty-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS XMLHttpRequest: send("") - empty entity body (POST) >+PASS XMLHttpRequest: send("") - empty entity body (PUT) >+FAIL XMLHttpRequest: send("") - empty entity body (HEAD) assert_equals: expected "NO" but got "0" >+ >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..53d467b17f38976c89be336f87b471fa1017b42d >--- /dev/null >+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/xhr/send-entity-body-none-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS No content type (POST) >+PASS No content type (PUT) >+FAIL No content type (HEAD) assert_equals: expected "NO" but got "0" >+PASS Explicit content type (POST) >+PASS Explicit content type (PUT) >+FAIL Explicit content type (HEAD) assert_equals: expected "NO" but got "0" >+ >diff --git a/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt b/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt >deleted file mode 100644 >index 5f4ba5b5cc6e02c491eeccb6c816a1cfd23db3b6..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-expected.txt >+++ /dev/null >@@ -1,9 +0,0 @@ >-CONSOLE MESSAGE: line 15: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/redirect-cors.py?location=http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow.py&allow_origin=true. Cross-origin redirection denied by Cross-Origin Resource Sharing policy. >- >-FAIL Local sync redirect to remote origin A network error occurred. >-PASS Local async redirect to remote origin >-FAIL Remote sync redirect to local origin A network error occurred. >-PASS Remote async redirect to local origin >-FAIL Remote sync redirect to same remote origin A network error occurred. >-PASS Remote async redirect to same remote origin >- >diff --git a/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/late-upload-events-expected.txt b/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/late-upload-events-expected.txt >deleted file mode 100644 >index 5d86ccf4c2b74c2dcf17fc7a78bdd00213a08375..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/late-upload-events-expected.txt >+++ /dev/null >@@ -1,10 +0,0 @@ >-Blocked access to external URL http://www1.localhost:8800/cors/resources/status.py?headers=custom-header >-CONSOLE MESSAGE: line 30: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. >-CONSOLE MESSAGE: CORS-preflight request was blocked >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. >-Adding upload event listeners after send() >- >- >-FAIL Late listeners: No preflight assert_equals: expected 200 but got 0 >-FAIL Late listeners: Preflight assert_equals: expected 200 but got 0 >- >diff --git a/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt b/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt >deleted file mode 100644 >index 503780260b5e301f2eb9a8077969e9fc6219b46f..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: CORS-preflight request was blocked >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/auth1/corsenabled.py due to access control checks. >- >-PASS XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure) >- >diff --git a/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt b/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt >deleted file mode 100644 >index b20bc2c0caf7796d748f6222702b0f8f2002edf2..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/win/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: CORS-preflight request was blocked >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://nonexistent-origin.localhost:8800/ due to access control checks. >- >-PASS XMLHttpRequest: The send() method: Fire a progress event named error when Network error happens (synchronous flag is unset) >- >diff --git a/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt b/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5f4ba5b5cc6e02c491eeccb6c816a1cfd23db3b6 >--- /dev/null >+++ b/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/access-control-and-redirects-expected.txt >@@ -0,0 +1,9 @@ >+CONSOLE MESSAGE: line 15: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/redirect-cors.py?location=http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-allow.py&allow_origin=true. Cross-origin redirection denied by Cross-Origin Resource Sharing policy. >+ >+FAIL Local sync redirect to remote origin A network error occurred. >+PASS Local async redirect to remote origin >+FAIL Remote sync redirect to local origin A network error occurred. >+PASS Remote async redirect to local origin >+FAIL Remote sync redirect to same remote origin A network error occurred. >+PASS Remote async redirect to same remote origin >+ >diff --git a/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/late-upload-events-expected.txt b/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/late-upload-events-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5d86ccf4c2b74c2dcf17fc7a78bdd00213a08375 >--- /dev/null >+++ b/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/late-upload-events-expected.txt >@@ -0,0 +1,10 @@ >+Blocked access to external URL http://www1.localhost:8800/cors/resources/status.py?headers=custom-header >+CONSOLE MESSAGE: line 30: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. >+CONSOLE MESSAGE: CORS-preflight request was blocked >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. >+Adding upload event listeners after send() >+ >+ >+FAIL Late listeners: No preflight assert_equals: expected 200 but got 0 >+FAIL Late listeners: Preflight assert_equals: expected 200 but got 0 >+ >diff --git a/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt b/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..503780260b5e301f2eb9a8077969e9fc6219b46f >--- /dev/null >+++ b/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/send-authentication-basic-cors-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: CORS-preflight request was blocked >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/auth1/corsenabled.py due to access control checks. >+ >+PASS XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure) >+ >diff --git a/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt b/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b20bc2c0caf7796d748f6222702b0f8f2002edf2 >--- /dev/null >+++ b/LayoutTests/platform/win/imported/w3c/web-platform-tests/xhr/send-network-error-async-events.sub-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: CORS-preflight request was blocked >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://nonexistent-origin.localhost:8800/ due to access control checks. >+ >+PASS XMLHttpRequest: The send() method: Fire a progress event named error when Network error happens (synchronous flag is unset) >+ >diff --git a/LayoutTests/platform/wpe/TestExpectations b/LayoutTests/platform/wpe/TestExpectations >index e50492a2e78d545d98f5b233d2032a60fb8978bf..12f9939bff9ee7e1e1daac36f1072cca52d0b705 100644 >--- a/LayoutTests/platform/wpe/TestExpectations >+++ b/LayoutTests/platform/wpe/TestExpectations >@@ -561,7 +561,7 @@ webkit.org/b/188162 [ Debug ] fast/canvas/webgl/texImage2D-video-flipY-true.html > # 6. FLAKY TESTS > #//////////////////////////////////////////////////////////////////////////////////////// > >-webkit.org/b/177530 imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed.htm [ Pass Failure ] >+webkit.org/b/177530 imported/w3c/web-platform-tests/xhr/setrequestheader-header-allowed.htm [ Pass Failure ] > > # Irregularly crashing on the HeadlessViewBackend. > webkit.org/b/173654 http/tests/appcache/insert-html-element-with-manifest-2.html [ Pass Crash ] >@@ -662,10 +662,10 @@ webkit.org/b/188057 imported/w3c/web-platform-tests/html/dom/interfaces.html [ F > > webkit.org/b/180932 [ Debug ] imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements [ Pass Crash ] > >-webkit.org/b/179611 imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-document.htm [ Pass Failure ] >-webkit.org/b/179607 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async.htm [ Pass Failure ] >-webkit.org/b/179607 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-and-redirects-async-same-origin.htm [ Pass Failure ] >-webkit.org/b/159724 imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-post-upload.htm [ Pass Failure ] >+webkit.org/b/179611 imported/w3c/web-platform-tests/xhr/send-entity-body-document.htm [ Pass Failure ] >+webkit.org/b/179607 imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async.htm [ Pass Failure ] >+webkit.org/b/179607 imported/w3c/web-platform-tests/xhr/access-control-and-redirects-async-same-origin.htm [ Pass Failure ] >+webkit.org/b/159724 imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm [ Pass Failure ] > > Bug(WPE) fast/doctypes/xhtml-with-xhtmlmp-doctype.xhtml [ Pass Failure ] > Bug(WPE) fast/doctypes/xhtml-with-xhtmlmp12-doctype.xhtml [ Pass Failure ] >@@ -925,22 +925,22 @@ webkit.org/b/180648 imported/w3c/web-platform-tests/html/semantics/text-level-se > webkit.org/b/180648 http/wpt/html/semantics/text-level-semantics/the-a-element/a-download-click-404.html [ Failure ] > webkit.org/b/175419 imported/w3c/web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https.html [ Failure ] > >-webkit.org/b/127676 imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-bogus.htm [ Skip ] >-webkit.org/b/127676 imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-cors.htm [ Skip ] >-webkit.org/b/127676 imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-to-non-cors.htm [ Skip ] >- >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-header-denied.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-method-denied.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-async-not-supported.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-header-denied.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-method-denied.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-sync-not-supported.htm [ Failure ] >-webkit.org/b/179608 imported/w3c/web-platform-tests/XMLHttpRequest/send-conditional-cors.htm [ Failure ] >-webkit.org/b/179375 imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm [ Failure ] >-webkit.org/b/171031 imported/w3c/web-platform-tests/XMLHttpRequest/getallresponseheaders-cl.htm [ Failure ] >- >-webkit.org/b/179663 imported/w3c/web-platform-tests/XMLHttpRequest/headers-normalize-response.htm [ Failure ] >-webkit.org/b/175586 imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-sync-events.sub.htm [ Failure ] >+webkit.org/b/127676 imported/w3c/web-platform-tests/xhr/send-redirect-bogus.htm [ Skip ] >+webkit.org/b/127676 imported/w3c/web-platform-tests/xhr/send-redirect-to-cors.htm [ Skip ] >+webkit.org/b/127676 imported/w3c/web-platform-tests/xhr/send-redirect-to-non-cors.htm [ Skip ] >+ >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-async-header-denied.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-async-method-denied.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-async-not-supported.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-header-denied.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-method-denied.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/access-control-preflight-sync-not-supported.htm [ Failure ] >+webkit.org/b/179608 imported/w3c/web-platform-tests/xhr/send-conditional-cors.htm [ Failure ] >+webkit.org/b/179375 imported/w3c/web-platform-tests/xhr/responsexml-document-properties.htm [ Failure ] >+webkit.org/b/171031 imported/w3c/web-platform-tests/xhr/getallresponseheaders-cl.htm [ Failure ] >+ >+webkit.org/b/179663 imported/w3c/web-platform-tests/xhr/headers-normalize-response.htm [ Failure ] >+webkit.org/b/175586 imported/w3c/web-platform-tests/xhr/send-network-error-sync-events.sub.htm [ Failure ] > > Bug(WPE) fast/css-grid-layout/flex-content-sized-columns-resize.html [ Timeout ] > Bug(WPE) fast/css-grid-layout/grid-baseline-margins.html [ ImageOnlyFailure ] >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers-expected.txt >deleted file mode 100644 >index 73b713045158c082b3cd30b3b75aea27b1e4b7ac..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-cors-safelisted-request-headers-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: line 22: Preflight response is not successful >-CONSOLE MESSAGE: line 22: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py due to access control checks. >- >-FAIL Request with CORS-safelisted headers A network error occurred. >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple-expected.txt >deleted file mode 100644 >index 867e8db847f8675f9a0e86e86398a4cfea8dc658..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-get-fail-non-simple-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: line 22: Preflight response is not successful >-CONSOLE MESSAGE: line 22: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-options-not-supported.py due to access control checks. >- >-PASS Preflighted cross-origin request denied >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt >deleted file mode 100644 >index 75e0bbe035a19948ee870818a4d42483c3f1565c..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >-CONSOLE MESSAGE: line 33: Preflight response is not successful >-CONSOLE MESSAGE: line 33: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-options-not-supported.py due to access control checks. >- >-PASS Same-origin request with non-safelisted content type succeeds >-PASS CORS request with non-safelisted content type sends preflight and fails >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt >deleted file mode 100644 >index 5de1ad5c94c17bb03bec4a8c7a26367d17d1f36b..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-async-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (GET) >-PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (HEAD) >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt >deleted file mode 100644 >index e155d0142b9d9feb4d7c0bef5d72043fa23d2a3a..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-entity-body-get-head-expected.txt >+++ /dev/null >@@ -1,4 +0,0 @@ >- >-PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD (GET) >-PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD (HEAD) >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt >deleted file mode 100644 >index 5587fef98a7fef1587b24b58246417dc2cb4ba01..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-expected.txt >+++ /dev/null >@@ -1,6 +0,0 @@ >- >-PASS XMLHttpRequest: send() - Redirects (basics) (301) >-PASS XMLHttpRequest: send() - Redirects (basics) (302) >-PASS XMLHttpRequest: send() - Redirects (basics) (303) >-PASS XMLHttpRequest: send() - Redirects (basics) (307) >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-expected.txt >deleted file mode 100644 >index 46027c41b9180b8fbddb89772c01ff5bf329433b..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: Load cannot follow more than 20 redirections >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/infinite-redirects.py?page=default&type=301&mix=0 due to access control checks. >- >-PASS XMLHttpRequest: send() - Redirects (infinite loop) >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync-expected.txt >deleted file mode 100644 >index 89bef3e70fbdff5fce349aab4d39aa75d938dfad..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/send-redirect-infinite-sync-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: line 18: Load cannot follow more than 20 redirections >-CONSOLE MESSAGE: line 18: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/infinite-redirects.py?page=default&type=301&mix=0 due to access control checks. >- >-PASS XMLHttpRequest: send() - Redirects (infinite loop; sync) (301) >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt >deleted file mode 100644 >index 8b504acc654f86d928478c2d7aa168ebda7e1258..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-content-type-expected.txt >+++ /dev/null >@@ -1,38 +0,0 @@ >-CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >-CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >-CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >- >-FAIL setRequestHeader("") sends a blank string assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL setRequestHeader(" ") sends the string " " assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS setRequestHeader(null) sends the string "null" >-PASS setRequestHeader(undefined) sends the string "undefined" >-PASS String request has correct default Content-Type of "text/plain;charset=UTF-8" >-PASS String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >-FAIL XML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS XML Document request has correct default Content-Type of "application/xml;charset=UTF-8" >-FAIL XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: application/xhtml+xml;charset=UTF-8\n" but got "Content-Type: application/xhtml+xml;charset=ASCII\n" >-FAIL HTML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS HTML Document request has correct default Content-Type of "text/html;charset=UTF-8" >-FAIL HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: text/html+junk;charset=UTF-8\n" but got "Content-Type: text/html+junk;charset=ASCII\n" >-FAIL Blob request respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL Blob request with unset type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: \n" >-PASS Blob request with unset type keeps setRequestHeader() Content-Type and charset >-FAIL Blob request with set type respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS Blob request with set type uses that it for Content-Type unless setRequestHeader() >-PASS Blob request with set type keeps setRequestHeader() Content-Type and charset >-FAIL ArrayBuffer request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS ArrayBuffer request sends no Content-Type without setRequestHeader() call >-PASS ArrayBuffer request keeps setRequestHeader() Content-Type and charset >-FAIL ArrayBufferView request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS ArrayBufferView request sends no Content-Type without setRequestHeader() call >-PASS ArrayBufferView request keeps setRequestHeader() Content-Type and charset >-FAIL FormData request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-PASS FormData request has correct default Content-Type of "multipart/form-data; boundary=_" >-PASS FormData request keeps setRequestHeader() Content-Type and charset >-FAIL URLSearchParams respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8" assert_equals: expected "Content-Type: application/x-www-form-urlencoded;charset=UTF-8\n" but got "Content-Type: text/plain;charset=UTF-8\n" >-PASS URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >-FAIL ReadableStream request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >-FAIL ReadableStream request with under type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: text/plain;charset=UTF-8\n" >-FAIL ReadableStream request keeps setRequestHeader() Content-Type and charset assert_equals: expected "Content-Type: application/xml;charset=ASCII\n" but got "Content-Type: application/xml;charset=UTF-8\n" >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-expected.txt >deleted file mode 100644 >index e582006dae700eef66472f579ddbd75379bedd46..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: Load cannot follow more than 20 redirections >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/infinite-redirects.py?page=default&type=302&mix=0 due to access control checks. >- >-PASS XMLHttpRequest: members during network errors >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync-expected.txt >deleted file mode 100644 >index a250743b56ae02a279d36b1e5688633eaa614f4a..0000000000000000000000000000000000000000 >--- a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/XMLHttpRequest/xmlhttprequest-network-error-sync-expected.txt >+++ /dev/null >@@ -1,5 +0,0 @@ >-CONSOLE MESSAGE: line 23: Load cannot follow more than 20 redirections >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/infinite-redirects.py?page=default&type=302&mix=0 due to access control checks. >- >-PASS XMLHttpRequest: members during network errors (sync) >- >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..73b713045158c082b3cd30b3b75aea27b1e4b7ac >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-cors-safelisted-request-headers-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: line 22: Preflight response is not successful >+CONSOLE MESSAGE: line 22: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py due to access control checks. >+ >+FAIL Request with CORS-safelisted headers A network error occurred. >+ >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..867e8db847f8675f9a0e86e86398a4cfea8dc658 >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-get-fail-non-simple-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: line 22: Preflight response is not successful >+CONSOLE MESSAGE: line 22: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-options-not-supported.py due to access control checks. >+ >+PASS Preflighted cross-origin request denied >+ >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..75e0bbe035a19948ee870818a4d42483c3f1565c >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/access-control-basic-post-with-non-cors-safelisted-content-type-expected.txt >@@ -0,0 +1,6 @@ >+CONSOLE MESSAGE: line 33: Preflight response is not successful >+CONSOLE MESSAGE: line 33: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-options-not-supported.py due to access control checks. >+ >+PASS Same-origin request with non-safelisted content type succeeds >+PASS CORS request with non-safelisted content type sends preflight and fails >+ >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5de1ad5c94c17bb03bec4a8c7a26367d17d1f36b >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-async-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (GET) >+PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD - async, no upload events should fire (HEAD) >+ >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e155d0142b9d9feb4d7c0bef5d72043fa23d2a3a >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-entity-body-get-head-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD (GET) >+PASS XMLHttpRequest: send() - non-empty data argument and GET/HEAD (HEAD) >+ >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5587fef98a7fef1587b24b58246417dc2cb4ba01 >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS XMLHttpRequest: send() - Redirects (basics) (301) >+PASS XMLHttpRequest: send() - Redirects (basics) (302) >+PASS XMLHttpRequest: send() - Redirects (basics) (303) >+PASS XMLHttpRequest: send() - Redirects (basics) (307) >+ >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..46027c41b9180b8fbddb89772c01ff5bf329433b >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: Load cannot follow more than 20 redirections >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/infinite-redirects.py?page=default&type=301&mix=0 due to access control checks. >+ >+PASS XMLHttpRequest: send() - Redirects (infinite loop) >+ >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..89bef3e70fbdff5fce349aab4d39aa75d938dfad >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/send-redirect-infinite-sync-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: line 18: Load cannot follow more than 20 redirections >+CONSOLE MESSAGE: line 18: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/infinite-redirects.py?page=default&type=301&mix=0 due to access control checks. >+ >+PASS XMLHttpRequest: send() - Redirects (infinite loop; sync) (301) >+ >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8b504acc654f86d928478c2d7aa168ebda7e1258 >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/setrequestheader-content-type-expected.txt >@@ -0,0 +1,38 @@ >+CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+CONSOLE MESSAGE: line 22: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. >+ >+FAIL setRequestHeader("") sends a blank string assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL setRequestHeader(" ") sends the string " " assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS setRequestHeader(null) sends the string "null" >+PASS setRequestHeader(undefined) sends the string "undefined" >+PASS String request has correct default Content-Type of "text/plain;charset=UTF-8" >+PASS String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >+FAIL XML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS XML Document request has correct default Content-Type of "application/xml;charset=UTF-8" >+FAIL XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: application/xhtml+xml;charset=UTF-8\n" but got "Content-Type: application/xhtml+xml;charset=ASCII\n" >+FAIL HTML Document request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS HTML Document request has correct default Content-Type of "text/html;charset=UTF-8" >+FAIL HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 assert_equals: expected "Content-Type: text/html+junk;charset=UTF-8\n" but got "Content-Type: text/html+junk;charset=ASCII\n" >+FAIL Blob request respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL Blob request with unset type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: \n" >+PASS Blob request with unset type keeps setRequestHeader() Content-Type and charset >+FAIL Blob request with set type respects setRequestHeader("") to be specified assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS Blob request with set type uses that it for Content-Type unless setRequestHeader() >+PASS Blob request with set type keeps setRequestHeader() Content-Type and charset >+FAIL ArrayBuffer request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS ArrayBuffer request sends no Content-Type without setRequestHeader() call >+PASS ArrayBuffer request keeps setRequestHeader() Content-Type and charset >+FAIL ArrayBufferView request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS ArrayBufferView request sends no Content-Type without setRequestHeader() call >+PASS ArrayBufferView request keeps setRequestHeader() Content-Type and charset >+FAIL FormData request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+PASS FormData request has correct default Content-Type of "multipart/form-data; boundary=_" >+PASS FormData request keeps setRequestHeader() Content-Type and charset >+FAIL URLSearchParams respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8" assert_equals: expected "Content-Type: application/x-www-form-urlencoded;charset=UTF-8\n" but got "Content-Type: text/plain;charset=UTF-8\n" >+PASS URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8 >+FAIL ReadableStream request respects setRequestHeader("") assert_equals: expected "Content-Type: \n" but got "Content-Type: \n" >+FAIL ReadableStream request with under type sends no Content-Type without setRequestHeader() call assert_equals: expected "" but got "Content-Type: text/plain;charset=UTF-8\n" >+FAIL ReadableStream request keeps setRequestHeader() Content-Type and charset assert_equals: expected "Content-Type: application/xml;charset=ASCII\n" but got "Content-Type: application/xml;charset=UTF-8\n" >+ >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e582006dae700eef66472f579ddbd75379bedd46 >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: Load cannot follow more than 20 redirections >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/infinite-redirects.py?page=default&type=302&mix=0 due to access control checks. >+ >+PASS XMLHttpRequest: members during network errors >+ >diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a250743b56ae02a279d36b1e5688633eaa614f4a >--- /dev/null >+++ b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/xhr/xmlhttprequest-network-error-sync-expected.txt >@@ -0,0 +1,5 @@ >+CONSOLE MESSAGE: line 23: Load cannot follow more than 20 redirections >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/infinite-redirects.py?page=default&type=302&mix=0 due to access control checks. >+ >+PASS XMLHttpRequest: members during network errors (sync) >+
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
commit-queue
:
commit-queue-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 188816
:
347701
|
347736
|
347742
|
347743
|
347748
|
347796
|
348114
|
348117