LayoutTests/ChangeLog

 12021-01-27 Jonathan Bedard <jbedard@apple.com>
 2
 3 [LayoutTests] Convert xmlhttprequest php to Python
 4 https://bugs.webkit.org/show_bug.cgi?id=220995
 5 <rdar://problem/73630008>
 6
 7 Reviewed by NOBODY (OOPS!).
 8
 9 * http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404.html:
 10 * http/tests/xmlhttprequest/XMLHttpRequestException.html:
 11 * http/tests/xmlhttprequest/abort-should-cancel-load-expected.txt:
 12 * http/tests/xmlhttprequest/abort-should-cancel-load.html:
 13 * http/tests/xmlhttprequest/access-control-and-redirects-async-expected.txt:
 14 * http/tests/xmlhttprequest/access-control-and-redirects-async.html:
 15 * http/tests/xmlhttprequest/access-control-preflight-not-successful-expected.txt:
 16 * http/tests/xmlhttprequest/access-control-preflight-not-successful.html:
 17 * http/tests/xmlhttprequest/access-control-response-with-body-sync.html:
 18 * http/tests/xmlhttprequest/access-control-response-with-body.html:
 19 * http/tests/xmlhttprequest/access-control-response-with-expose-headers.html:
 20 * http/tests/xmlhttprequest/chunked-progress-event-expectedLength.html:
 21 * http/tests/xmlhttprequest/connection-error-sync.html:
 22 * http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight-expected.txt:
 23 * http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:
 24 * http/tests/xmlhttprequest/cross-origin-authorization-with-embedder.html:
 25 * http/tests/xmlhttprequest/cross-origin-authorization.html:
 26 * http/tests/xmlhttprequest/cross-origin-cookie-storage.html:
 27 * http/tests/xmlhttprequest/cross-origin-no-authorization-expected.txt:
 28 * http/tests/xmlhttprequest/cross-origin-no-authorization.html:
 29 * http/tests/xmlhttprequest/cross-origin-preflight-get.html:
 30 * http/tests/xmlhttprequest/cross-origin-redirect-responseURL.html:
 31 * http/tests/xmlhttprequest/detaching-frame-2.html:
 32 * http/tests/xmlhttprequest/head-redirection.html:
 33 * http/tests/xmlhttprequest/navigation-should-abort.html:
 34 * http/tests/xmlhttprequest/null-auth.php: Removed.
 35 * http/tests/xmlhttprequest/null-auth.py: Added.
 36 * http/tests/xmlhttprequest/onabort-event.html:
 37 * http/tests/xmlhttprequest/onabort-progressevent-attributes.html:
 38 * http/tests/xmlhttprequest/onloadend-event-after-error.html:
 39 * http/tests/xmlhttprequest/onloadend-event-after-sync-requests.html:
 40 * http/tests/xmlhttprequest/overridemimetype-headers-received-state-force-shiftjis.html:
 41 * http/tests/xmlhttprequest/resources/access-control-allow-with-body.php: Removed.
 42 * http/tests/xmlhttprequest/resources/access-control-allow-with-body.py: Added.
 43 * http/tests/xmlhttprequest/resources/access-control-response-with-expose-headers.php: Removed.
 44 * http/tests/xmlhttprequest/resources/access-control-response-with-expose-headers.py: Added.
 45 * http/tests/xmlhttprequest/resources/big-response.php: Removed.
 46 * http/tests/xmlhttprequest/resources/big-response.py: Added.
 47 * http/tests/xmlhttprequest/resources/chunked-transfer.php: Removed.
 48 * http/tests/xmlhttprequest/resources/chunked-transfer.py: Added.
 49 * http/tests/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php: Removed.
 50 * http/tests/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py: Added.
 51 * http/tests/xmlhttprequest/resources/cross-origin-authorization.php: Removed.
 52 * http/tests/xmlhttprequest/resources/cross-origin-authorization.py: Added.
 53 * http/tests/xmlhttprequest/resources/cross-origin-check-cookies.php: Removed.
 54 * http/tests/xmlhttprequest/resources/cross-origin-check-cookies.py: Added.
 55 * http/tests/xmlhttprequest/resources/cross-origin-no-authorization.php: Removed.
 56 * http/tests/xmlhttprequest/resources/cross-origin-no-authorization.py: Added.
 57 * http/tests/xmlhttprequest/resources/cross-origin-preflight-get.php: Removed.
 58 * http/tests/xmlhttprequest/resources/cross-origin-preflight-get.py: Added.
 59 * http/tests/xmlhttprequest/resources/cross-origin-preset-authorization-frame.html:
 60 * http/tests/xmlhttprequest/resources/cross-origin-set-cookies.php: Removed.
 61 * http/tests/xmlhttprequest/resources/cross-origin-set-cookies.py: Added.
 62 * http/tests/xmlhttprequest/resources/custom-headers.php: Removed.
 63 * http/tests/xmlhttprequest/resources/custom-headers.py: Added.
 64 * http/tests/xmlhttprequest/resources/download-header-with-delay.php: Removed.
 65 * http/tests/xmlhttprequest/resources/download-header-with-delay.py: Added.
 66 * http/tests/xmlhttprequest/resources/download-with-delay.php: Removed.
 67 * http/tests/xmlhttprequest/resources/download-with-delay.py: Added.
 68 * http/tests/xmlhttprequest/resources/echo-auth.php: Removed.
 69 * http/tests/xmlhttprequest/resources/echo-auth.py: Added.
 70 * http/tests/xmlhttprequest/resources/echo-host.php: Removed.
 71 * http/tests/xmlhttprequest/resources/echo-host.py: Added.
 72 * http/tests/xmlhttprequest/resources/echo-request-method.php: Removed.
 73 * http/tests/xmlhttprequest/resources/echo-request-method.py: Added.
 74 * http/tests/xmlhttprequest/resources/echo-user-agent.php: Removed.
 75 * http/tests/xmlhttprequest/resources/echo-user-agent.py: Added.
 76 * http/tests/xmlhttprequest/resources/empty-content-type.php: Removed.
 77 * http/tests/xmlhttprequest/resources/empty-content-type.py: Added.
 78 * http/tests/xmlhttprequest/resources/endlessxml.php: Removed.
 79 * http/tests/xmlhttprequest/resources/endlessxml.py: Added.
 80 * http/tests/xmlhttprequest/resources/frame-load-to-cancel.html:
 81 * http/tests/xmlhttprequest/resources/get-content.php: Removed.
 82 * http/tests/xmlhttprequest/resources/get-content.py: Added.
 83 * http/tests/xmlhttprequest/resources/get_method.php: Removed.
 84 * http/tests/xmlhttprequest/resources/get_method.py: Added.
 85 * http/tests/xmlhttprequest/resources/headers.php: Removed.
 86 * http/tests/xmlhttprequest/resources/headers.py: Added.
 87 * http/tests/xmlhttprequest/resources/infinite-loop.php: Removed.
 88 * http/tests/xmlhttprequest/resources/infinite-loop.py: Added.
 89 * http/tests/xmlhttprequest/resources/no-authenticate-header-401.php: Removed.
 90 * http/tests/xmlhttprequest/resources/no-authenticate-header-401.py: Added.
 91 * http/tests/xmlhttprequest/resources/not-ascii-status.php: Removed.
 92 * http/tests/xmlhttprequest/resources/not-ascii-status.py: Added.
 93 * http/tests/xmlhttprequest/resources/print-headers.php: Removed.
 94 * http/tests/xmlhttprequest/resources/print-headers.py: Added.
 95 * http/tests/xmlhttprequest/resources/print-referer.php: Removed.
 96 * http/tests/xmlhttprequest/resources/print-referer.py: Added.
 97 * http/tests/xmlhttprequest/resources/redirect-cors.php: Removed.
 98 * http/tests/xmlhttprequest/resources/redirect-cors.py: Added.
 99 * http/tests/xmlhttprequest/resources/redirect_methods.php: Removed.
 100 * http/tests/xmlhttprequest/resources/redirect_methods.py: Added.
 101 * http/tests/xmlhttprequest/resources/status-404-without-body.php: Removed.
 102 * http/tests/xmlhttprequest/resources/status-404-without-body.py: Added.
 103 * http/tests/xmlhttprequest/resources/xmlhttprequest-in-unload.html:
 104 * http/tests/xmlhttprequest/resources/xmlhttprequest-mimetype-mixed-case.php: Removed.
 105 * http/tests/xmlhttprequest/resources/xmlhttprequest-mimetype-mixed-case.py: Added.
 106 * http/tests/xmlhttprequest/response-access-on-error.html:
 107 * http/tests/xmlhttprequest/response-special-characters.html:
 108 * http/tests/xmlhttprequest/simple-sync.html:
 109 * http/tests/xmlhttprequest/unauthorized-without-authenticate-header.html:
 110 * http/tests/xmlhttprequest/workers/resources/endless-response.php: Removed.
 111 * http/tests/xmlhttprequest/workers/resources/endless-response.py: Added.
 112 * http/tests/xmlhttprequest/workers/resources/endless-sync-xhr.js:
 113 * http/tests/xmlhttprequest/xhr-user-agent.html:
 114 * http/tests/xmlhttprequest/xmlhttprequest-50ms-download-dispatch.html:
 115 * http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldDispatchEvent.html:
 116 * http/tests/xmlhttprequest/xmlhttprequest-check-get-readystate-for-404-without-body.html:
 117 * http/tests/xmlhttprequest/xmlhttprequest-contenttype-empty.html:
 118 * http/tests/xmlhttprequest/xmlhttprequest-mimetype-mixed-case.html:
 119 * http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html:
 120 * http/tests/xmlhttprequest/xmlhttprequest-open-method-allowed.html:
 121 * http/tests/xmlhttprequest/xmlhttprequest-open-method-case-insensitive.html:
 122 * http/tests/xmlhttprequest/xmlhttprequest-responseURL.html:
 123 * http/tests/xmlhttprequest/xmlhttprequest-sync-no-timers.html:
 124 * http/tests/xmlhttprequest/xmlhttprequest-test-custom-headers.html:
 125 * http/tests/xmlhttprequest/xmlhttprequest-test-send-flag.html:
 126
11272021-01-27 Commit Queue <commit-queue@webkit.org>
2128
3129 Unreviewed, reverting r271940.
271966

LayoutTests/http/tests/websocket/tests/hybi/error-event-ready-state-non-existent-url-with-server-responding-404.html

@@description("Test that readyState is CLO
1111
1212window.jsTestIsAsync = true;
1313
14 var ws = new WebSocket("ws://localhost:8000/websocket/tests/hybi/resources/status-404-without-body.php");
 14var ws = new WebSocket("ws://localhost:8000/websocket/tests/hybi/resources/status-404-without-body.py");
1515
1616ws.onerror = function(event) {
1717 debug("onerror() was called.");
271966

LayoutTests/http/tests/xmlhttprequest/XMLHttpRequestException.html

3636 var e;
3737 try {
3838 var req = new XMLHttpRequest;
39  req.open('GET', 'resources/infinite-loop.php', false);
 39 req.open('GET', 'resources/infinite-loop.py', false);
4040 req.send(null);
4141 // raises NETWORK_ERR
4242 } catch (err) {
271966

LayoutTests/http/tests/xmlhttprequest/abort-should-cancel-load-expected.txt

1 http://127.0.0.1:8000/xmlhttprequest/resources/endlessxml.php - willSendRequest <NSURLRequest URL http://127.0.0.1:8000/xmlhttprequest/resources/endlessxml.php, main document URL http://127.0.0.1:8000/xmlhttprequest/abort-should-cancel-load.html, http method GET> redirectResponse (null)
2 http://127.0.0.1:8000/xmlhttprequest/resources/endlessxml.php - didFailLoadingWithError: <NSError domain NSURLErrorDomain, code -999, failing URL "http://127.0.0.1:8000/xmlhttprequest/resources/endlessxml.php">
 1http://127.0.0.1:8000/xmlhttprequest/resources/endlessxml.py - willSendRequest <NSURLRequest URL http://127.0.0.1:8000/xmlhttprequest/resources/endlessxml.py, main document URL http://127.0.0.1:8000/xmlhttprequest/abort-should-cancel-load.html, http method GET> redirectResponse (null)
 2http://127.0.0.1:8000/xmlhttprequest/resources/endlessxml.py - didFailLoadingWithError: <NSError domain NSURLErrorDomain, code -999, failing URL "http://127.0.0.1:8000/xmlhttprequest/resources/endlessxml.py">
33This tests that calling abort() on an XHR object stops the load, causing the relevant resource load delegates to be sent.
44
271966

LayoutTests/http/tests/xmlhttprequest/abort-should-cancel-load.html

33<script>
44function f() {
55 req = new XMLHttpRequest();
6  req.open("GET", "resources/endlessxml.php");
 6 req.open("GET", "resources/endlessxml.py");
77 req.send(null);
88 req.abort();
99}
271966

LayoutTests/http/tests/xmlhttprequest/access-control-and-redirects-async-expected.txt

11CONSOLE MESSAGE: Cross-origin redirection to http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi denied by Cross-Origin Resource Sharing policy: Origin http://127.0.0.1:8000 is not allowed by Access-Control-Allow-Origin.
2 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi due to access control checks.
 2CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi due to access control checks.
33CONSOLE MESSAGE: Cross-origin redirection to http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi denied by Cross-Origin Resource Sharing policy: redirection URL http://username:password@localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi has credentials
4 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://username:password@localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&%20%20access-control-allow-origin=http://127.0.0.1:8000 due to access control checks.
 4CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=http://username:password@localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&access-control-allow-origin=http://127.0.0.1:8000 due to access control checks.
55CONSOLE MESSAGE: Cross-origin redirection to foo://bar.cgi denied by Cross-Origin Resource Sharing policy: not allowed to follow a cross-origin CORS redirection with non CORS scheme
6 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=foo://bar.cgi&%20%20access-control-allow-origin=http://127.0.0.1:8000 due to access control checks.
 6CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=foo://bar.cgi&access-control-allow-origin=http://127.0.0.1:8000 due to access control checks.
77CONSOLE MESSAGE: Preflight response is not successful
8 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true&%20%20url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&%20%20access-control-allow-origin=* due to access control checks.
 8CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&access-control-allow-origin=* due to access control checks.
99CONSOLE MESSAGE: Request header field x-webkit is not allowed by Access-Control-Allow-Headers.
1010CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi due to access control checks.
1111Tests that asynchronous XMLHttpRequests handle redirects according to the CORS standard.
1212
13 Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi without credentials
 13Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi without credentials
1414Expecting success: false
1515PASS: 0
16 Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi& access-control-allow-origin=http://127.0.0.1:8000 without credentials
 16Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&access-control-allow-origin=http://127.0.0.1:8000 without credentials
1717Expecting success: true
1818PASS: PASS: Cross-domain access allowed.
1919
20 Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://username:password@localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi& access-control-allow-origin=http://127.0.0.1:8000 without credentials
 20Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=http://username:password@localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&access-control-allow-origin=http://127.0.0.1:8000 without credentials
2121Expecting success: false
2222PASS: 0
23 Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=foo://bar.cgi& access-control-allow-origin=http://127.0.0.1:8000 without credentials
 23Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=foo://bar.cgi&access-control-allow-origin=http://127.0.0.1:8000 without credentials
2424Expecting success: false
2525PASS: 0
26 Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true& url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi& access-control-allow-origin=* without credentials
 26Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&access-control-allow-origin=* without credentials
2727Expecting success: false
2828PASS: 0
29 Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=false& url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi& access-control-allow-origin=*& access-control-allow-headers=x-webkit without credentials
 29Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=false&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&access-control-allow-origin=*&access-control-allow-headers=x-webkit without credentials
3030Expecting success: false
3131PASS: 0
32 Testing resources/redirect-cors.php?url=http://127.0.0.1:8000/xmlhttprequest/resources/get.txt without credentials
 32Testing resources/redirect-cors.py?url=http://127.0.0.1:8000/xmlhttprequest/resources/get.txt without credentials
3333Expecting success: true
3434PASS: PASS
3535
271966

LayoutTests/http/tests/xmlhttprequest/access-control-and-redirects-async.html

@@var tests = [
4545// 1) Test simple cross origin requests that receive redirects.
4646
4747// Receives a redirect response without CORS headers. The redirect response fails the access check.
48 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi",
 48["http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi",
4949 withoutCredentials, noCustomHeader, fails],
5050
5151// Receives a redirect response with CORS headers. The redirect response passes the access check and the resource response passes the access check.
52 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&\
53  access-control-allow-origin=http://127.0.0.1:8000",
 52["http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&access-control-allow-origin=http://127.0.0.1:8000",
5453 withoutCredentials, noCustomHeader, succeeds],
5554
5655// Receives a redirect response with a URL containing the userinfo production.
57 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=http://username:password@localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&\
58  access-control-allow-origin=http://127.0.0.1:8000",
 56["http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=http://username:password@localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&access-control-allow-origin=http://127.0.0.1:8000",
5957 withoutCredentials, noCustomHeader, fails],
6058
6159// Receives a redirect response with a URL with an unsupported scheme.
62 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?url=foo://bar.cgi&\
63  access-control-allow-origin=http://127.0.0.1:8000",
 60["http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?url=foo://bar.cgi&access-control-allow-origin=http://127.0.0.1:8000",
6461 withoutCredentials, noCustomHeader, fails],
6562
6663// 2) Test preflighted cross origin requests that receive redirects.
6764
6865// Receives a redirect response to the preflight request and fails.
69 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true&\
70  url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&\
71  access-control-allow-origin=*",
 66["http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&access-control-allow-origin=*",
7267 withoutCredentials, addCustomHeader, fails],
7368
7469// Successful preflight and receives a redirect response to the actual request.
7570// Preflight to the redirected URL should fail as it does not allow custom headers.
76 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=false&\
77  url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&\
78  access-control-allow-origin=*&\
79  access-control-allow-headers=x-webkit",
 71["http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=false&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi&access-control-allow-origin=*&access-control-allow-headers=x-webkit",
8072 withoutCredentials, addCustomHeader, fails],
8173
8274// 3) Test same origin requests with a custom header that receive a same origin redirect.
83 ["resources/redirect-cors.php?url=http://127.0.0.1:8000/xmlhttprequest/resources/get.txt",
 75["resources/redirect-cors.py?url=http://127.0.0.1:8000/xmlhttprequest/resources/get.txt",
8476 withoutCredentials, addCustomHeader, succeeds],
8577
8678]
271966

LayoutTests/http/tests/xmlhttprequest/access-control-preflight-not-successful-expected.txt

11CONSOLE MESSAGE: Preflight response is not successful
2 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi due to access control checks.
 2CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi due to access control checks.
33CONSOLE MESSAGE: Preflight response is not successful
4 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi due to access control checks.
 4CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi due to access control checks.
55CONSOLE MESSAGE: Preflight response is not successful
6 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/status-404-without-body.php due to access control checks.
 6CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/status-404-without-body.py due to access control checks.
77CONSOLE MESSAGE: Preflight response is not successful
8 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/status-404-without-body.php due to access control checks.
 8CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/status-404-without-body.py due to access control checks.
99Tests that not successful preflight responses make preflight failing
1010
11 Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi (sync)
 11Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi (sync)
1212Expecting success: true
1313PASS: PASS: Cross-domain access allowed.
1414
15 Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi(async)
 15Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi(async)
1616Expecting success: true
1717PASS: PASS: Cross-domain access allowed.
1818
19 Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi (sync)
 19Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi (sync)
2020Expecting success: false
2121PASS: NetworkError: A network error occurred.
22 Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi(async)
 22Testing http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi(async)
2323Expecting success: false
2424PASS: 0
25 Testing http://localhost:8000/xmlhttprequest/resources/status-404-without-body.php (sync)
 25Testing http://localhost:8000/xmlhttprequest/resources/status-404-without-body.py (sync)
2626Expecting success: true
2727PASS:
28 Testing http://localhost:8000/xmlhttprequest/resources/status-404-without-body.php(async)
 28Testing http://localhost:8000/xmlhttprequest/resources/status-404-without-body.py(async)
2929Expecting success: true
3030PASS:
31 Testing http://localhost:8000/xmlhttprequest/resources/status-404-without-body.php (sync)
 31Testing http://localhost:8000/xmlhttprequest/resources/status-404-without-body.py (sync)
3232Expecting success: false
3333PASS: NetworkError: A network error occurred.
34 Testing http://localhost:8000/xmlhttprequest/resources/status-404-without-body.php(async)
 34Testing http://localhost:8000/xmlhttprequest/resources/status-404-without-body.py(async)
3535Expecting success: false
3636PASS: 0
3737
271966

LayoutTests/http/tests/xmlhttprequest/access-control-preflight-not-successful.html

@@function runTest(url, expectSyncSuccess,
5050
5151var tests = [
5252 // No preflight, hence ok
53  ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi",
 53 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi",
5454 true, true, false],
5555 // Preflight receiving redirection hence failing at preflight step, which should be shown by console log message.
56  ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.php?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi",
 56 ["http://localhost:8000/xmlhttprequest/resources/redirect-cors.py?redirect-preflight=true&access-control-allow-headers=x-webkit&access-control-allow-origin=*&url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow-star.cgi",
5757 false, false, true],
5858 // Receiving a 404, no preflight, hence ok
59  ["http://localhost:8000/xmlhttprequest/resources/status-404-without-body.php", true, true, false],
 59 ["http://localhost:8000/xmlhttprequest/resources/status-404-without-body.py", true, true, false],
6060 // Receiving a 404 as preflight response, hence ko at preflight step, which should be shown by console log message.
61  ["http://localhost:8000/xmlhttprequest/resources/status-404-without-body.php", false, false, true],
 61 ["http://localhost:8000/xmlhttprequest/resources/status-404-without-body.py", false, false, true],
6262]
6363
6464var currentTest = 0;
271966

LayoutTests/http/tests/xmlhttprequest/access-control-response-with-body-sync.html

@@Body from cross origin preflight respons
1010
1111 window.onload = function() {
1212 var xhr = new XMLHttpRequest();
13  xhr.open("GET","http://localhost:8000/xmlhttprequest/resources/access-control-allow-with-body.php", false);
 13 xhr.open("GET","http://localhost:8000/xmlhttprequest/resources/access-control-allow-with-body.py", false);
1414 xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
1515 xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
1616 xhr.send(null);
271966

LayoutTests/http/tests/xmlhttprequest/access-control-response-with-body.html

@@window.onload = function() {
1818 testRunner.notifyDone();
1919 };
2020
21  xhr.open("GET","http://localhost:8000/xmlhttprequest/resources/access-control-allow-with-body.php");
 21 xhr.open("GET","http://localhost:8000/xmlhttprequest/resources/access-control-allow-with-body.py");
2222 xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
2323 xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
2424 xhr.send(null);
271966

LayoutTests/http/tests/xmlhttprequest/access-control-response-with-expose-headers.html

@@xhr.onreadystatechange=function() {
1616 finishJSTest();
1717 }
1818}
19 var url = "http://localhost:8000/xmlhttprequest/resources/access-control-response-with-expose-headers.php";
 19var url = "http://localhost:8000/xmlhttprequest/resources/access-control-response-with-expose-headers.py";
2020xhr.open("GET",url);
2121xhr.send(null);
2222</script>
271966

LayoutTests/http/tests/xmlhttprequest/chunked-progress-event-expectedLength.html

@@function log(message)
2121function test()
2222{
2323 var xhr = new XMLHttpRequest();
24  xhr.open("GET", "resources/chunked-transfer.php", true);
 24 xhr.open("GET", "resources/chunked-transfer.py", true);
2525
2626 xhr.onprogress = function(e) {
2727 if (e.loaded == 4 && e.total == 0 && !e.lengthComputable)
271966

LayoutTests/http/tests/xmlhttprequest/connection-error-sync.html

1818 }
1919 }
2020
21  req.open('GET', 'resources/infinite-loop.php', false);
 21 req.open('GET', 'resources/infinite-loop.py', false);
2222 req.send(null);
2323
2424 document.write("Status: " + req.status);
271966

LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight-expected.txt

11CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
2 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 2CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
33CONSOLE MESSAGE: Request header field Accept-Language is not allowed by Access-Control-Allow-Headers.
4 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 4CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
55CONSOLE MESSAGE: Request header field Content-Language is not allowed by Access-Control-Allow-Headers.
6 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 6CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
77CONSOLE MESSAGE: Request header field Content-Language is not allowed by Access-Control-Allow-Headers.
8 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 8CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
99CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
10 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 10CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
1111CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
12 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 12CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
1313CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
14 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 14CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
1515CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
16 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 16CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
1717CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
18 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 18CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
1919CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
20 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 20CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
2121CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
22 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 22CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
2323CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
24 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 24CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
2525CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
26 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 26CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
2727CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
28 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 28CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
2929CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
30 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 30CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
3131CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
32 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 32CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
3333CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
34 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 34CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
3535CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
36 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 36CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
3737CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
38 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 38CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
3939CONSOLE MESSAGE: Request header field Accept-Language is not allowed by Access-Control-Allow-Headers.
40 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 40CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
4141CONSOLE MESSAGE: Request header field Content-Language is not allowed by Access-Control-Allow-Headers.
42 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 42CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
4343CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
44 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 44CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
4545CONSOLE MESSAGE: Request header field Accept-Language is not allowed by Access-Control-Allow-Headers.
46 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 46CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
4747CONSOLE MESSAGE: Request header field Content-Language is not allowed by Access-Control-Allow-Headers.
48 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 48CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
4949CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
50 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 50CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
5151CONSOLE MESSAGE: Request header field Accept-Language is not allowed by Access-Control-Allow-Headers.
52 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 52CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
5353CONSOLE MESSAGE: Request header field Content-Language is not allowed by Access-Control-Allow-Headers.
54 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 54CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
5555CONSOLE MESSAGE: Request header field Accept is not allowed by Access-Control-Allow-Headers.
56 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 56CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
5757CONSOLE MESSAGE: Request header field Accept-Language is not allowed by Access-Control-Allow-Headers.
58 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 58CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
5959CONSOLE MESSAGE: Request header field Content-Language is not allowed by Access-Control-Allow-Headers.
60 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php/?shouldPreflight due to access control checks.
 60CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py/?shouldPreflight due to access control checks.
6161PASS Accept header value 'application/json,text/*,*/*' SHOULD NOT cause a preflight
6262PASS Accept header with normal value 'application/vnd.api+json' SHOULD NOT cause a preflight
6363PASS Accept header with normal value 'text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c' SHOULD NOT cause a preflight
271966

LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html

1414 }
1515
1616 var xhr;
17  var url = 'http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php';
 17 var url = 'http://localhost:8000/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py';
1818
1919 function createOnLoadHandler (description, testNumber, isExpected) {
2020 return function handler (e) {
271966

LayoutTests/http/tests/xmlhttprequest/cross-origin-authorization-with-embedder.html

@@function log(message)
1515function presetAuthorization()
1616{
1717 if (window.testRunner)
18  testRunner.authenticateSession("http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.php", "test", "test");
 18 testRunner.authenticateSession("http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.py", "test", "test");
1919
2020 test();
2121}

@@function presetAuthorization()
2323function test()
2424{
2525 var req = new XMLHttpRequest;
26  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.php", false);
 26 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.py", false);
2727 try {
2828 req.send();
2929 log((req.status == 401) ? "PASS" : "FAIL: credentials were sent");
271966

LayoutTests/http/tests/xmlhttprequest/cross-origin-authorization.html

@@function test()
2424 log("You should see several PASS messages followed by a DONE\n");
2525 log("SCRIPT SRC='...' Should succeed, since authorization is sent for cross-origin subresource loads.");
2626 var scriptElement = document.createElement("script");
27  scriptElement.setAttribute("src", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.php");
 27 scriptElement.setAttribute("src", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.py");
2828 scriptElement.setAttribute("onload", "test_sync_auth_stored()");
2929 scriptElement.setAttribute("onerror", "test_sync_auth_stored()");
3030 document.body.appendChild(scriptElement);

@@function test_sync_auth_stored()
3535 log("Cross-origin XMLHttpRequest (sync), testing stored authorization.");
3636
3737 var req = new XMLHttpRequest;
38  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.php", false);
 38 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.py", false);
3939 req.withCredentials = true;
4040 try {
4141 req.send();

@@function test_sync_cookies()
5151 log("Cross-origin XMLHttpRequest (sync), testing cookies.");
5252
5353 var req = new XMLHttpRequest;
54  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.php", false);
 54 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.py", false);
5555 req.withCredentials = true;
5656 req.send();
5757 if (req.status == 200)

@@function test_async_auth_stored()
6666 log("Cross-origin XMLHttpRequest (async), testing stored authorization.");
6767
6868 var req = new XMLHttpRequest;
69  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.php", true);
 69 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.py", true);
7070 req.withCredentials = true;
7171 req.send();
7272 req.onload = function() {

@@function test_async_cookies()
8484 log("Cross-origin XMLHttpRequest (async), testing cookies.");
8585
8686 var req = new XMLHttpRequest;
87  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.php", true);
 87 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.py", true);
8888 req.withCredentials = true;
8989 req.send();
9090 req.onload = function() {

@@function test_sync_auth_explicit()
9898 log("Cross-origin XMLHttpRequest (sync), testing authorization with explicitly provided credentials that should be ignored.");
9999
100100 var req = new XMLHttpRequest;
101  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.php", false, "test2", "test2");
 101 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.py", false, "test2", "test2");
102102 req.withCredentials = true;
103103 try {
104104 req.send();

@@function test_async_auth_explicit()
118118 log("Cross-origin XMLHttpRequest (async), testing authorization with explicitly provided credentials that should be ignored.");
119119
120120 var req = new XMLHttpRequest;
121  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.php", true, "test2", "test2");
 121 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.py", true, "test2", "test2");
122122 req.withCredentials = true;
123123 req.send();
124124 req.onload = function() {
271966

LayoutTests/http/tests/xmlhttprequest/cross-origin-cookie-storage.html

@@function resourceURL(resourceName)
2222function clearCookies()
2323{
2424 var xhr = new XMLHttpRequest;
25  xhr.open("GET", resourceURL("cross-origin-set-cookies.php?clear=1"), false);
 25 xhr.open("GET", resourceURL("cross-origin-set-cookies.py?clear=1"), false);
2626 xhr.withCredentials = true;
2727 xhr.send("");
2828}

@@function endTesting()
3737function checkForCookie()
3838{
3939 var xhr = new XMLHttpRequest;
40  xhr.open("GET", resourceURL("cross-origin-check-cookies.php?cookie=WK-xhr-cookie-storage"), false);
 40 xhr.open("GET", resourceURL("cross-origin-check-cookies.py?cookie=WK-xhr-cookie-storage"), false);
4141 xhr.withCredentials = true;
4242 try {
4343 xhr.send();

@@function testSyncCookiesNoCredentials()
5454 clearCookies();
5555
5656 var req = new XMLHttpRequest;
57  req.open("GET", resourceURL("cross-origin-set-cookies.php"), false);
 57 req.open("GET", resourceURL("cross-origin-set-cookies.py"), false);
5858 req.withCredentials = false;
5959 req.send();
6060 log("PASS: Finished sync xhr.");

@@function testAsyncCookiesNoCredentials()
7272 clearCookies();
7373
7474 var req = new XMLHttpRequest;
75  req.open("GET", resourceURL("cross-origin-set-cookies.php"), true);
 75 req.open("GET", resourceURL("cross-origin-set-cookies.py"), true);
7676 req.withCredentials = false;
7777 req.send();
7878 req.onerror = function() {

@@function testSyncCookiesWithCredentials(
9494 clearCookies();
9595
9696 var req = new XMLHttpRequest;
97  req.open("GET", resourceURL("cross-origin-set-cookies.php"), false);
 97 req.open("GET", resourceURL("cross-origin-set-cookies.py"), false);
9898 req.withCredentials = true;
9999 req.send();
100100 log("PASS: Finished sync xhr.");
271966

LayoutTests/http/tests/xmlhttprequest/cross-origin-no-authorization-expected.txt

11CONSOLE MESSAGE: Credentials flag is true, but Access-Control-Allow-Credentials is not "true".
2 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.php due to access control checks.
 2CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.py due to access control checks.
33CONSOLE MESSAGE: Credentials flag is true, but Access-Control-Allow-Credentials is not "true".
4 CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.php due to access control checks.
 4CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.py due to access control checks.
55Start
66Trying different ways to access a password protected resource from another origin. The UA already has login and password for this protection space.
77
271966

LayoutTests/http/tests/xmlhttprequest/cross-origin-no-authorization.html

@@function test()
2424 log("You should see several PASS messages followed by a DONE\n");
2525 log("SCRIPT SRC='...' Should succeed, since authorization is sent for cross-origin subresource loads.");
2626 var scriptElement = document.createElement("script");
27  scriptElement.setAttribute("src", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.php");
 27 scriptElement.setAttribute("src", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.py");
2828 scriptElement.setAttribute("onload", "test_sync_auth_stored()");
2929 scriptElement.setAttribute("onerror", "test_sync_auth_stored()");
3030 document.body.appendChild(scriptElement);

@@function test_sync_auth_stored()
3535 log("Cross-origin XMLHttpRequest (sync), authorization will not be sent, because withCredentials is false.");
3636
3737 var req = new XMLHttpRequest;
38  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.php", false);
 38 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.py", false);
3939 try {
4040 req.send();
4141 log((req.status == 401) ? "PASS: 401 Authorization required" : "FAIL: Loaded");

@@function test_sync_auth_stored_with_cred
5050 log("Cross-origin XMLHttpRequest (sync), testing authorization that's not allowed by the server (withCredentials is true, but access control headers are not set).");
5151
5252 var req = new XMLHttpRequest;
53  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.php", false);
 53 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.py", false);
5454 req.withCredentials = true;
5555 try {
5656 req.send();

@@function test_sync_cookies()
6666 log("Cross-origin XMLHttpRequest (sync), testing cookies.");
6767
6868 var req = new XMLHttpRequest;
69  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.php", false);
 69 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.py", false);
7070 req.send();
7171 log(req.responseText.match(/WK\-cross\-origin/) ? "FAIL" : "PASS");
7272 test_async_auth_stored();

@@function test_async_auth_stored()
7777 log("Cross-origin XMLHttpRequest (async), authorization will not be sent, because withCredentials is false.");
7878
7979 var req = new XMLHttpRequest;
80  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.php", true);
 80 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.py", true);
8181 req.send();
8282 req.onload = function() {
8383 log((req.status == 401) ? "PASS: 401 Authorization required" : "FAIL: Loaded");

@@function test_async_auth_stored_with_cre
9494 log("Cross-origin XMLHttpRequest (async), testing authorization that's not allowed by the server (withCredentials is true, but access control headers are not set).");
9595
9696 var req = new XMLHttpRequest;
97  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.php", true);
 97 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.py", true);
9898 req.withCredentials = true;
9999 req.send();
100100 req.onload = function() {

@@function test_async_cookies()
112112 log("Cross-origin XMLHttpRequest (async), testing cookies.");
113113
114114 var req = new XMLHttpRequest;
115  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.php", true);
 115 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.py", true);
116116 req.send();
117117 req.onload = function() {
118118 log(req.responseText.match(/WK\-cross\-origin/) ? "FAIL" : "PASS");

@@function test_sync_auth_explicit()
125125 log("Cross-origin XMLHttpRequest (sync), testing authorization with explicitly provided credentials that should be ignored.");
126126
127127 var req = new XMLHttpRequest;
128  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.php", false, "test", "test");
 128 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.py", false, "test", "test");
129129 try {
130130 req.send();
131131 log((req.status == 401) ? "PASS: 401 Authorization required" : "FAIL: Loaded");

@@function test_async_auth_explicit()
141141 log("Cross-origin XMLHttpRequest (async), testing authorization with explicitly provided credentials that should be ignored.");
142142
143143 var req = new XMLHttpRequest;
144  req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.php", true, "test", "test");
 144 req.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-no-authorization.py", true, "test", "test");
145145 req.send();
146146 req.onload = function() {
147147 log((req.status == 401) ? "PASS: 401 Authorization required" : "FAIL: Loaded");
271966

LayoutTests/http/tests/xmlhttprequest/cross-origin-preflight-get.html

@@function log(message)
1717function test()
1818{
1919 var xhr = new XMLHttpRequest();
20  xhr.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-preflight-get.php", true);
 20 xhr.open("GET", "http://localhost:8000/xmlhttprequest/resources/cross-origin-preflight-get.py", true);
2121 // Make this a "non-simple" cross-origin request by adding a custom header.
2222 xhr.setRequestHeader("X-Proprietary-Header", "foo");
2323 xhr.onerror = function() { log("onerror") }
271966

LayoutTests/http/tests/xmlhttprequest/cross-origin-redirect-responseURL.html

@@runTest('/resources/redirect.php?url=htt
4848 window.responseURL = req.responseURL;
4949 shouldBeEqualToString('responseURL', '');
5050
51  return runTest('resources/redirect-cors.php?url=http://127.0.0.1:8000/xmlhttprequest/resources/get.txt', 'text');
 51 return runTest('resources/redirect-cors.py?url=http://127.0.0.1:8000/xmlhttprequest/resources/get.txt', 'text');
5252}).then(function(req) {
5353 window.responseURL = req.responseURL;
5454 shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/get.txt');
271966

LayoutTests/http/tests/xmlhttprequest/detaching-frame-2.html

1616 var client
1717 try {
1818 client = new window.x()
19  client.open("GET", "/xmlhttprequest/resources/echo-host.php", false)
 19 client.open("GET", "/xmlhttprequest/resources/echo-host.py", false)
2020 client.send("")
2121 } catch(e)
2222 {

2929 frames[0].location = frames[0].location.toString().replace("127.0.0.1", "localhost")
3030 }
3131</script>
32 <iframe src="resources/echo-host.php"></iframe>
 32<iframe src="resources/echo-host.py"></iframe>
3333<div id=result>FAIL: Script did not run.</div>
3434</body>
271966

LayoutTests/http/tests/xmlhttprequest/head-redirection.html

@@This script does a redirection to a seco
4747 }
4848 }
4949
50  var urlTemplate = "/xmlhttprequest/resources/redirect_methods.php?url=/xmlhttprequest/resources/get_method.php&code=";
 50 var urlTemplate = "/xmlhttprequest/resources/redirect_methods.py?url=/xmlhttprequest/resources/get_method.py&code=";
5151
5252 function testMethodSync() {
5353 var test = tests[testIndex];
271966

LayoutTests/http/tests/xmlhttprequest/navigation-should-abort.html

66 testRunner.dumpAsText();
77
88 var req = new XMLHttpRequest();
9  req.open("GET", "resources/endlessxml.php");
 9 req.open("GET", "resources/endlessxml.py");
1010 req.onerror = function () {
1111 console.log("PASS: Expected 'error', got 'error'.");
1212 };
271966

LayoutTests/http/tests/xmlhttprequest/null-auth.php

1 <p>Test that null values in XHR login/password parameters are treated correctly.</p>
2 <p>No auth tokens should be sent with this request.</p>
3 <pre id='syncResult'> </pre>
4 <script>
5 if (window.testRunner)
6  testRunner.dumpAsText();
7 
8 req = new XMLHttpRequest;
9 req.open('POST', '<?php echo 'http://foo:bar@' . $_SERVER['HTTP_HOST'] . '/xmlhttprequest/resources/echo-auth.php' ?>', false, null, null);
10 req.send();
11 document.getElementById('syncResult').firstChild.nodeValue = req.responseText;
12 </script>
271966

LayoutTests/http/tests/xmlhttprequest/null-auth.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/html')
 6sys.stdout.write('\r\n\r\n')
 7
 8print('<p>Test that null values in XHR login/password parameters are treated correctly.</p>')
 9print('<p>No auth tokens should be sent with this request.</p>')
 10print('<pre id=\'syncResult\'> </pre>')
 11print('<script>')
 12print('if (window.testRunner)')
 13print(' testRunner.dumpAsText();')
 14print('')
 15print('req = new XMLHttpRequest;')
 16print('req.open(\'POST\', \'{}\', false, null, null);'.format(
 17 'http://foo:bar@{}/xmlhttprequest/resources/echo-auth.py'.format(os.environ.get('HTTP_HOST', '?')),
 18))
 19print('req.send();')
 20print('document.getElementById(\'syncResult\').firstChild.nodeValue = req.responseText;')
 21print('</script>')
nonexistent

LayoutTests/http/tests/xmlhttprequest/onabort-event.html

2424
2525 xhr = new XMLHttpRequest;
2626 xhr.onabort = abortHandler;
27  xhr.open("GET", "resources/endlessxml.php", true);
 27 xhr.open("GET", "resources/endlessxml.py", true);
2828 xhr.send();
2929 xhr.abort();
3030</script>
271966

LayoutTests/http/tests/xmlhttprequest/onabort-progressevent-attributes.html

@@function test()
6262 onProgressEvent(e);
6363 completeTest();
6464 }
65  req.open("GET", "resources/download-with-delay.php?iteration=" + iteration + "&delay=" + delay, true);
 65 req.open("GET", "resources/download-with-delay.py?iteration=" + iteration + "&delay=" + delay, true);
6666 req.send(null);
6767
6868}
271966

LayoutTests/http/tests/xmlhttprequest/onloadend-event-after-error.html

@@function test()
5858 completeTest();
5959 }
6060
61  xhr.open("GET", "resources/infinite-loop.php", true);
 61 xhr.open("GET", "resources/infinite-loop.py", true);
6262 xhr.send();
6363}
6464
271966

LayoutTests/http/tests/xmlhttprequest/onloadend-event-after-sync-requests.html

@@function testError()
6464 xhr.onload = logUnexpectedProgressEvent;
6565 xhr.onloadend = logProgressEvent;
6666
67  xhr.open("GET", "resources/infinite-loop.php", false);
 67 xhr.open("GET", "resources/infinite-loop.py", false);
6868 try {
6969 xhr.send();
7070 }
271966

LayoutTests/http/tests/xmlhttprequest/overridemimetype-headers-received-state-force-shiftjis.html

2828 assert_equals( client.responseText, 'テスト', 'overrideMimeType() in HEADERS RECEIVED state set encoding' );
2929 test.done();
3030 });
31  client.open("GET", "resources/get-content.php?type="+encodeURIComponent('text/html;charset=UTF-8')+'&content=%83%65%83%58%83%67');
 31 client.open("GET", "resources/get-content.py?type="+encodeURIComponent('text/html;charset=UTF-8')+'&content=%83%65%83%58%83%67');
3232 client.send( '' );
3333 </script>
3434 </body>
271966

LayoutTests/http/tests/xmlhttprequest/response-access-on-error.html

2121 assert_response(xhr)
2222 test1.done()
2323 })
24  xhr.open("GET", "resources/infinite-loop.php", true)
 24 xhr.open("GET", "resources/infinite-loop.py", true)
2525 xhr.send("")
2626 })
2727
271966

LayoutTests/http/tests/xmlhttprequest/response-special-characters.html

3434
3535 run_test("non ascii response header value",
3636 function(client){
37  client.open("GET", "resources/headers.php")
 37 client.open("GET", "resources/headers.py")
3838 },function(client){
3939 assert_equals(client.getResponseHeader("x-custom-header-bytes"), "\xE2\x80\xA6")
4040 }

4242
4343 run_test("non ascii statusText",
4444 function(client){
45  client.open("GET", "resources/not-ascii-status.php")
 45 client.open("GET", "resources/not-ascii-status.py")
4646 },function(client){
4747 assert_equals(client.statusText, "OK\xE2\x80\xA6")
4848 }
271966

LayoutTests/http/tests/xmlhttprequest/simple-sync.html

99 testRunner.dumpAsText();
1010
1111 req = new XMLHttpRequest;
12  req.open("GET", "resources/print-referer.php", false);
 12 req.open("GET", "resources/print-referer.py", false);
1313 req.send(null);
1414 if (req.responseText == document.URL)
1515 document.getElementById("result").firstChild.data += "OK";
271966

LayoutTests/http/tests/xmlhttprequest/unauthorized-without-authenticate-header.html

1616 finishJSTest();
1717 }
1818
19  xhr.open('GET', 'resources/no-authenticate-header-401.php');
 19 xhr.open('GET', 'resources/no-authenticate-header-401.py');
2020 xhr.send(null);
2121 }
2222 </script>
271966

LayoutTests/http/tests/xmlhttprequest/xhr-user-agent.html

@@jsTestIsAsync = true;
99onload = () => {
1010 debug ("* Synchronous XHR");
1111 syncXHR = new XMLHttpRequest();
12  syncXHR.open("GET", 'resources/echo-user-agent.php', false);
 12 syncXHR.open("GET", 'resources/echo-user-agent.py', false);
1313 syncXHR.send("");
1414 shouldBe("syncXHR.status", "200");
1515 syncXHRUserAgent = syncXHR.responseText;

@@onload = () => {
2727 debug("");
2828 finishJSTest();
2929 }
30  asyncXHR.open("GET", 'resources/echo-user-agent.php', true);
 30 asyncXHR.open("GET", 'resources/echo-user-agent.py', true);
3131 asyncXHR.send("");
3232}
3333</script>
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-50ms-download-dispatch.html

@@function test(iteration, delay, compare,
5050 var req = new XMLHttpRequest();
5151 req.onprogress = onProgress;
5252 req.onreadystatechange = onReadyState;
53  req.open("GET", "resources/download-with-delay.php?iteration=" + iteration + "&delay=" + delay, true);
 53 req.open("GET", "resources/download-with-delay.py?iteration=" + iteration + "&delay=" + delay, true);
5454 req.send(null);
5555}
5656
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldDispatchEvent.html

@@function testAbortWithReadyStateEventLoa
3535
3636 // We use a slow page to test the LOADING state with the send() flag
3737 // and we do not catch readyState event before send has been called
38  xhr.open("GET", "resources/endlessxml.php", true);
 38 xhr.open("GET", "resources/endlessxml.py", true);
3939 xhr.send(null);
4040
4141 ++finishedTests;
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-check-get-readystate-for-404-without-body.html

@@function loadXMLDoc() {
2222 }
2323 }
2424
25  xmlhttp.open("GET", "resources/status-404-without-body.php", true);
 25 xmlhttp.open("GET", "resources/status-404-without-body.py", true);
2626 xmlhttp.send();
2727}
2828</script>
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-contenttype-empty.html

@@Crash.
2424 }
2525
2626 var xmlhttp = new XMLHttpRequest();
27  xmlhttp.open('GET','resources/empty-content-type.php');
 27 xmlhttp.open('GET','resources/empty-content-type.py');
2828 xmlhttp.onreadystatechange = done;
2929 xmlhttp.send(null);
3030
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-mimetype-mixed-case.html

77 window.jsTestIsAsync = true;
88
99 var xhr = new XMLHttpRequest(),
10  url = 'resources/xmlhttprequest-mimetype-mixed-case.php';
 10 url = 'resources/xmlhttprequest-mimetype-mixed-case.py';
1111 xhr.onload = function() {
1212 shouldBeNonNull('xhr.responseXML');
1313 finishJSTest();
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html

@@function onProgress(e) {
1919 var xhr = e.target;
2020 xhr.onprogress = onProgressTest;
2121 xhr.onreadystatechange = onReadyStateChange;
22  xhr.open("GET", "resources/big-response.php", true);
 22 xhr.open("GET", "resources/big-response.py", true);
2323 xhr.send(null);
2424 }
2525}

@@if (window.testRunner) {
4444
4545var req = new XMLHttpRequest();
4646req.onprogress = onProgress;
47 req.open("GET", "resources/big-response.php", true);
 47req.open("GET", "resources/big-response.py", true);
4848req.send(null);
4949</script>
5050</body>
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-open-method-allowed.html

1010 <script type="text/javascript">
1111 function testMethod(methodName) {
1212 var client = new XMLHttpRequest();
13  client.open(methodName, "resources/echo-request-method.php");
 13 client.open(methodName, "resources/echo-request-method.py");
1414 client.onreadystatechange = function(event) {
1515 if (event.target.readyState == 4)
1616 assert_equals(client.getResponseHeader("x-custom-request-method"), methodName.toUpperCase());
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-open-method-case-insensitive.html

1010 <script type="text/javascript">
1111 function testMethod(methodName, lastTest) {
1212 var client = new XMLHttpRequest();
13  client.open(methodName, "resources/echo-request-method.php");
 13 client.open(methodName, "resources/echo-request-method.py");
1414 client.onreadystatechange = function(event) {
1515 if (event.target.readyState == 4)
1616 assert_equals(client.getResponseHeader("x-custom-request-method"), methodName);
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-responseURL.html

@@runTest('resources/reply.txt', 'text').t
3838 window.responseURL = req.responseURL;
3939 shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/reply.txt');
4040
41  return runTest('resources/redirect_methods.php?url=reply.xml', 'document');
 41 return runTest('resources/redirect_methods.py?url=reply.xml', 'document');
4242}).then(function(req) {
4343 window.responseURL = req.responseURL;
4444 shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/reply.xml');
4545
46  return runTest('resources/redirect_methods.php?url=not-found.txt', 'text');
 46 return runTest('resources/redirect_methods.py?url=not-found.txt', 'text');
4747}).then(function(req) {
4848 window.responseURL = req.responseURL;
4949 shouldBeEqualToString('responseURL', 'http://127.0.0.1:8000/xmlhttprequest/resources/not-found.txt');
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-sync-no-timers.html

@@var intervalId = setInterval(function()
1919
2020try {
2121 var req = new XMLHttpRequest();
22  req.open("GET", "resources/download-with-delay.php?iteration=5&delay=50", false);
 22 req.open("GET", "resources/download-with-delay.py?iteration=5&delay=50", false);
2323 req.send(null);
2424} catch (ex) {
2525 log(ex);
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-test-custom-headers.html

1717 }
1818 }
1919
20  xhr.open("GET", "resources/custom-headers.php");
 20 xhr.open("GET", "resources/custom-headers.py");
2121 xhr.send(null);
2222
2323 xhr.onreadystatechange = function() {
271966

LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-test-send-flag.html

@@if (window.XMLHttpRequest) {
2929}
3030
3131// First test : test open method send() flag check
32 xhr.open("GET", "resources/endlessxml.php", true);
 32xhr.open("GET", "resources/endlessxml.py", true);
3333xhr.send(null);
3434try {
3535 if (xhr.readyState == 1)

@@try {
4242}
4343
4444// Second test : test setResponseHeader method send() flag check
45 xhr.open("GET", "resources/endlessxml.php", true);
 45xhr.open("GET", "resources/endlessxml.py", true);
4646xhr.setRequestHeader("Test1", "Test1");
4747xhr.send(null);
4848try {
271966

LayoutTests/http/tests/xmlhttprequest/resources/access-control-allow-with-body.php

1 <?php
2  header("Access-control-allow-headers: X-Requested-With");
3  header("Access-control-max-age: 0");
4  header("Access-control-allow-origin: *");
5  header("Access-control-allow-methods: *");
6  header("Vary: Accept-Encoding");
7  header("Content-Type: text/plain");
8 
9  print "echo"
10 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/access-control-allow-with-body.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/html\r\n')
 6sys.stdout.write('Access-control-allow-headers: X-Requested-With\r\n')
 7
 8sys.stdout.write('Access-control-max-age: 0\r\n')
 9sys.stdout.write('Access-control-allow-origin: *\r\n')
 10sys.stdout.write('Access-control-allow-methods: *\r\n')
 11sys.stdout.write('Vary: Accept-Encoding\r\n')
 12sys.stdout.write('Content-Type: text/plain\r\n')
 13sys.stdout.write('\r\n')
 14
 15sys.stdout.write('echo')
 16
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/access-control-response-with-expose-headers.php

1 <?php
2  header("Access-control-max-age: 0");
3  header("Access-control-allow-origin: *");
4  header("X-foo: BAR");
5  header("X-TEST: TEST");
6  header("Access-Control-Expose-Headers: x-Foo");
7  header("Content-Type: text/html");
8 
9  print "echo"
10 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/access-control-response-with-expose-headers.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/html\r\n')
 6sys.stdout.write('Access-control-max-age: 0\r\n')
 7sys.stdout.write('Access-control-allow-origin: *\r\n')
 8sys.stdout.write('X-foo: BAR\r\n')
 9sys.stdout.write('X-TEST: TEST\r\n')
 10sys.stdout.write('Access-Control-Expose-Headers: x-Foo\r\n')
 11sys.stdout.write('Content-Type: text/html\r\n')
 12sys.stdout.write('\r\n')
 13
 14print('echo')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/big-response.php

1 <?php
2 for ($i = 0; $i < 128 * 1024; $i++) {
3  echo "Chunk $i";
4  if (!$i % 200)
5  flush();
6 }
7 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/big-response.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/html\r\n\r\n')
 6
 7for i in range(128 * 1024):
 8 sys.stdout.write('Chunk {}'.format(i))
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/chunked-transfer.php

1 <?php
2 header("Transfer-encoding: chunked");
3 header("Cache-Control: no-cache, no-store");
4 flush();
5 printf("4\r\n<a/>\r\n");
6 flush();
7 printf("0\r\n\r\n");
8 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/chunked-transfer.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/html\r\n')
 6sys.stdout.write('Transfer-encoding: chunked\r\n')
 7
 8sys.stdout.write('Cache-Control: no-cache, no-store\r\n')
 9
 10sys.stdout.write('\r\n')
 11
 12sys.stdout.flush()
 13sys.stdout.write("4\r\n<a/>\r\n")
 14sys.stdout.flush()
 15sys.stdout.write("0\r\n\r\n")
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.php

1 <?php
2 
3 if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
4  if (!isset($_GET['shouldPreflight'])) {
5  return 404;
6  }
7  if (isset($_GET['explicitlyAllowHeaders'])) {
8  header('Access-Control-Allow-Methods: GET, OPTIONS');
9  header('Access-Control-Allow-Headers: Accept, Accept-Language, Content-Language');
10  }
11 }
12 header('Access-Control-Allow-Origin: http://127.0.0.1:8000');
13 
14 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/cors-preflight-safelisted-headers-responder.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5from urllib.parse import parse_qs
 6query = parse_qs(os.environ.get('QUERY_STRING', ''), keep_blank_values=True)
 7
 8sys.stdout.write('Content-Type: text/html\r\n')
 9
 10if os.environ.get('REQUEST_METHOD') == 'OPTIONS':
 11 if query.get('shouldPreflight') is None:
 12 sys.stdout.write('status: 404\r\n')
 13 sys.stdout.write('\r\n')
 14 sys.exit(0)
 15 if query.get('explicitlyAllowHeaders') is not None:
 16 sys.stdout.write('Access-Control-Allow-Methods: GET, OPTIONS\r\n')
 17 sys.stdout.write('Access-Control-Allow-Headers: Accept, Accept-Language, Content-Language\r\n')
 18
 19sys.stdout.write('Access-Control-Allow-Origin: http://127.0.0.1:8000\r\n')
 20sys.stdout.write('\r\n')
 21print(query)
 22print(os.environ.get('QUERY_STRING', ''))
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-authorization.php

1 <?php
2 header("Set-Cookie: WK-cross-origin=1");
3 header("Cache-Control: no-store");
4 header("Last-Modified: Thu, 19 Mar 2009 11:22:11 GMT");
5 header("Access-Control-Allow-Origin: http://127.0.0.1:8000");
6 header("Access-Control-Allow-Credentials: true");
7 header("Connection: close");
8 
9 if (!isset($_SERVER['PHP_AUTH_USER'])) {
10  header('WWW-Authenticate: Basic realm="WebKit xmlhttprequest/cross-origin-no-authorization"');
11  header('HTTP/1.0 401 Unauthorized');
12  echo 'Authentication canceled';
13  exit;
14 }
15 ?>
16 log('PASS: Loaded, user <?php print $_SERVER['PHP_AUTH_USER'] ?>');
271966

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-authorization.py

 1#!/usr/bin/env python3
 2import base64
 3import os
 4import sys
 5
 6sys.stdout.write('Content-Type: text/html\r\n')
 7sys.stdout.write('Set-Cookie: WK-cross-origin=1\r\n')
 8sys.stdout.write('Cache-Control: no-store\r\n')
 9sys.stdout.write('Last-Modified: Thu, 19 Mar 2009 11:22:11 GMT\r\n')
 10sys.stdout.write('Access-Control-Allow-Origin: http://127.0.0.1:8000\r\n')
 11sys.stdout.write('Access-Control-Allow-Credentials: true\r\n')
 12sys.stdout.write('Connection: close\r\n')
 13
 14if os.environ.get('HTTP_AUTHORIZATION'):
 15 sys.stdout.write('\r\n')
 16 username, _ = base64.b64decode(os.environ['HTTP_AUTHORIZATION'].split(' ')[1]).split(b':')
 17 print("log('PASS: Loaded, user {}');".format(username.decode('utf-8')))
 18
 19else:
 20 sys.stdout.write('WWW-Authenticate: Basic realm="WebKit xmlhttprequest/cross-origin-no-authorization"\r\n')
 21 sys.stdout.write('status: 401\r\n')
 22 sys.stdout.write('\r\n')
 23 sys.stdout.write('Authentication canceled')
 24
 25sys.stdout.flush()
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-check-cookies.php

1 <?php
2 header("Cache-Control: no-store");
3 header("Last-Modified: Thu, 19 Mar 2009 11:22:11 GMT");
4 header("Access-Control-Allow-Origin: http://127.0.0.1:8000");
5 header("Access-Control-Allow-Credentials: true");
6 header("Connection: close");
7 
8 $cookie = $_GET['cookie'];
9 if (empty($cookie)) {
10  $cookie = 'WK-cross-origin';
11 }
12 
13 if (isset($_COOKIE[$cookie])) {
14  echo $cookie . ': ' . $_COOKIE[$cookie];
15 } else {
16  echo 'Cookie was not sent.';
17 }
18 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-check-cookies.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5from urllib.parse import parse_qs
 6query = parse_qs(os.environ.get('QUERY_STRING', ''))
 7cookies = {
 8 pair.split('=')[0]: '='.join(pair.split('=')[1:]) for pair in os.environ.get('HTTP_COOKIE', '').split(';')
 9}
 10
 11sys.stdout.write('Content-Type: text/html\r\n')
 12sys.stdout.write('Cache-Control: no-store\r\n')
 13sys.stdout.write('Last-Modified: Thu, 19 Mar 2009 11:22:11 GMT\r\n')
 14sys.stdout.write('Access-Control-Allow-Origin: http://127.0.0.1:8000\r\n')
 15sys.stdout.write('Access-Control-Allow-Credentials: true\r\n')
 16sys.stdout.write('Connection: close\r\n')
 17sys.stdout.write('\r\n')
 18
 19cookie = query.get('cookie')
 20if cookie:
 21 cookie = cookie[0]
 22if not cookie:
 23 cookie = 'WK-cross-origin'
 24
 25if cookies.get(cookie):
 26 sys.stdout.write('{}: {}'.format(cookie, cookies.get(cookie)))
 27else:
 28 sys.stdout.write('Cookie was not sent')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-no-authorization.php

1 <?php
2 header("Set-Cookie: WK-cross-origin=1");
3 header("Cache-Control: no-store");
4 header("Last-Modified: Thu, 19 Mar 2009 11:22:11 GMT");
5 header("Access-Control-Allow-Origin: http://127.0.0.1:8000");
6 header("Connection: close");
7 
8 if (!isset($_SERVER['PHP_AUTH_USER'])) {
9  header('WWW-Authenticate: Basic realm="WebKit xmlhttprequest/cross-origin-no-authorization"');
10  header('HTTP/1.0 401 Unauthorized');
11  echo 'Authentication canceled';
12  exit;
13 }
14 ?>
15 log('PASS: Loaded, user <?php print $_SERVER['PHP_AUTH_USER'] ?>');
271966

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-no-authorization.py

 1#!/usr/bin/env python3
 2import base64
 3import os
 4import sys
 5
 6sys.stdout.write('Content-Type: text/html\r\n')
 7sys.stdout.write('Set-Cookie: WK-cross-origin=1\r\n')
 8sys.stdout.write('Cache-Control: no-store\r\n')
 9sys.stdout.write('Last-Modified: Thu, 19 Mar 2009 11:22:11 GMT\r\n')
 10sys.stdout.write('Access-Control-Allow-Origin: http://127.0.0.1:8000\r\n')
 11sys.stdout.write('Connection: close\r\n')
 12
 13if os.environ.get('HTTP_AUTHORIZATION'):
 14 sys.stdout.write('\r\n')
 15 username, _ = base64.b64decode(os.environ['HTTP_AUTHORIZATION'].split(' ')[1]).split(b':')
 16 print("log('PASS: Loaded, user {}');".format(username.decode('utf-8')))
 17
 18else:
 19 sys.stdout.write('WWW-Authenticate: Basic realm="WebKit xmlhttprequest/cross-origin-no-authorization"\r\n')
 20 sys.stdout.write('status: 401\r\n')
 21 sys.stdout.write('\r\n')
 22 sys.stdout.write('Authentication canceled')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-preflight-get.php

1 <?php
2 if(!isset($_SERVER['HTTP_ORIGIN'])) {
3  echo "FAIL: No origin header sent";
4 } else {
5  header("Access-Control-Allow-Origin: *");
6  header("Access-Control-Allow-Headers: X-Proprietary-Header");
7  echo "PASS: Origin header correctly sent";
8 }
9 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-preflight-get.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/html\r\n')
 6
 7if os.environ.get('HTTP_ORIGIN'):
 8 sys.stdout.write('Access-Control-Allow-Origin: *\r\n')
 9 sys.stdout.write('Access-Control-Allow-Headers: X-Proprietary-Header\r\n')
 10 sys.stdout.write('\r\n')
 11 sys.stdout.write('PASS: Origin header correctly sent')
 12else:
 13 sys.stdout.write('\r\n')
 14 sys.stdout.write('FAIL: No origin header sent')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-preset-authorization-frame.html

11<script>
22// Good for both cross-origin-no-authorization and cross-origin-authorization, which only differ in cross-origin case.
33var req = new XMLHttpRequest;
4 req.open("GET", "cross-origin-no-authorization.php", false, "test", "test");
 4req.open("GET", "cross-origin-no-authorization.py", false, "test", "test");
55req.send();
66opener.postMessage("test", "*");
77window.close();
271966

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-set-cookies.php

1 <?php
2 $age_string = "";
3 if ($_GET['clear']) {
4  $age_string = "expires=Thu, 19 Mar 1982 11:22:11 GMT";
5 }
6 header("Set-Cookie: WK-xhr-cookie-storage=MySpecialValue;$age_string");
7 header("Cache-Control: no-store");
8 header("Last-Modified: Thu, 19 Mar 2009 11:22:11 GMT");
9 header("Access-Control-Allow-Origin: http://127.0.0.1:8000");
10 header("Access-Control-Allow-Credentials: true");
11 ?>
12 log('PASS: Loaded');
271966

LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-set-cookies.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5from urllib.parse import parse_qs
 6
 7query = parse_qs(os.environ.get('QUERY_STRING', ''), keep_blank_values=True)
 8
 9sys.stdout.write('Content-Type: text/html\r\n')
 10sys.stdout.write('Set-Cookie: WK-xhr-cookie-storage=MySpecialValue;{}\r\n'.format(
 11 'expires=Thu, 19 Mar 1982 11:22:11 GMT' if query.get('clear') is not None else '',
 12))
 13sys.stdout.write('Cache-Control: no-store\r\n')
 14sys.stdout.write('Last-Modified: Thu, 19 Mar 2009 11:22:11 GMT\r\n')
 15sys.stdout.write('Access-Control-Allow-Origin: http://127.0.0.1:8000\r\n')
 16sys.stdout.write('Access-Control-Allow-Credentials: true\r\n')
 17sys.stdout.write('\r\n')
 18
 19print("log('PASS: Loaded')")
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/custom-headers.php

1 <?php
2  header("Content-Type: text/plain");
3  header("X-Custom-Header-Single: single");
4  header("X-Custom-Header-Empty:");
5  header("X-Custom-Header-List: one");
6  header("X-Custom-Header-List: two", false);
7 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/custom-headers.py

 1#!/usr/bin/env python3
 2import sys
 3
 4sys.stdout.write('Content-Type: text/plain\r\n')
 5sys.stdout.write('X-Custom-Header-Single: single\r\n')
 6sys.stdout.write('X-Custom-Header-Empty:\r\n')
 7sys.stdout.write('X-Custom-Header-List: one\r\n')
 8sys.stdout.write('X-Custom-Header-List: two\r\n')
 9sys.stdout.write('\r\n')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/download-header-with-delay.php

1 <?php
2 $delay = $_GET['delay'];
3 usleep($delay * 1000);
4 
5 header("Expires: Thu, 01 Dec 2003 16:00:00 GMT");
6 header("Cache-Control: no-cache, no-store, must-revalidate");
7 header("Pragma: no-cache");
8 header("Content-Type: application/x-no-buffering-please");
9 
10 echo "$delay\n";
11 echo "foobar\n";
12 ob_flush();
13 flush();
14 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/download-header-with-delay.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5from urllib.parse import parse_qs
 6
 7query = parse_qs(os.environ.get('QUERY_STRING', ''))
 8delay = query.get('delay', 0)
 9time.sleep(delay)
 10
 11sys.stdout.write('Content-Type: application/x-no-buffering-please\r\n')
 12sys.stdout.write('Expires: Thu, 01 Dec 2003 16:00:00 GMT\r\n')
 13sys.stdout.write('Cache-Control: no-cache, no-store, must-revalidate\r\n')
 14sys.stdout.write('Pragma: no-cache\r\n')
 15sys.stdout.write('Content-Type: text/html\r\n')
 16sys.stdout.write('\r\n')
 17
 18print(delay)
 19print('foobar')
 20sys.stdout.flush()
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/download-with-delay.php

1 <?php
2 header("Expires: Thu, 01 Dec 2003 16:00:00 GMT");
3 header("Cache-Control: no-cache, no-store, must-revalidate");
4 header("Pragma: no-cache");
5 header("Content-Type: application/x-no-buffering-please");
6 
7 $iteration = $_GET['iteration'];
8 $delay = $_GET['delay'];
9 
10 echo "$iteration\n";
11 echo "$delay\n";
12 
13 for ($i = 1; $i <= $iteration; ++$i) {
14  echo "$i\n";
15  echo "foobar\n";
16  // Force content to be sent to the browser as is.
17  ob_flush();
18  flush();
19  usleep($delay * 1000);
20 }
21 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/download-with-delay.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4import time
 5
 6from urllib.parse import parse_qs
 7
 8sys.stdout.write('Content-Type: text/html\r\n')
 9sys.stdout.write('Expires: Thu, 01 Dec 2003 16:00:00 GMT\r\n')
 10sys.stdout.write('Cache-Control: no-cache, no-store, must-revalidate\r\n')
 11sys.stdout.write('Content-Type: application/x-no-buffering-please\r\n')
 12sys.stdout.write('\r\n')
 13
 14query = parse_qs(os.environ.get('QUERY_STRING', ''))
 15iteration = query.get('iteration', 1)
 16delay = query.get('delay', 0)
 17
 18print(iteration)
 19print(delay)
 20
 21for i in range(iteration):
 22 print(i)
 23 print('foobar')
 24 sys.stdout.flush()
 25 time.sleep(delay)
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/echo-auth.php

1 <?php
2  if (!isset($_SERVER['PHP_AUTH_USER'])) {
3  echo 'No authentication';
4  } else {
5  echo "User: {$_SERVER['PHP_AUTH_USER']}, password: {$_SERVER['PHP_AUTH_PW']}.";
6  }
7 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/echo-auth.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/html\r\n')
 6sys.stdout.write('\r\n')
 7
 8if not os.environ.get('PHP_AUTH_USER'):
 9 sys.stdout.write('No authentication')
 10else:
 11 print('User: {}, password: {}.'.format(
 12 os.environ.get('PHP_AUTH_USER'),
 13 os.environ.get('PHP_AUTH_PW'),
 14 ))
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/echo-host.php

1 <p>Host: <?php
2 print $_SERVER['HTTP_HOST']
3 ?></p>
271966

LayoutTests/http/tests/xmlhttprequest/resources/echo-host.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/plain\r\n')
 6sys.stdout.write('\r\n')
 7
 8print(os.environ.get('HTTP_HOST'))
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/echo-request-method.php

1 <?php
2 if ($_SERVER['REQUEST_METHOD'])
3  header("X-CUSTOM-REQUEST-METHOD: " . $_SERVER['REQUEST_METHOD']);
4 else
5  header("X-CUSTOM-REQUEST-METHOD: NOT_SET");
6 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/echo-request-method.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/html\r\n')
 6sys.stdout.write('X-CUSTOM-REQUEST-METHOD: {}\r\n'.format(
 7 os.environ.get('REQUEST_METHOD', 'NOT_SET')
 8))
 9sys.stdout.write('\r\n')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/echo-user-agent.php

1 <?php echo $_SERVER['HTTP_USER_AGENT']; ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/echo-user-agent.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/html\r\n')
 6sys.stdout.write('\r\n')
 7
 8print(os.environ.get('HTTP_USER_AGENT', 'CRAP'))
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/empty-content-type.php

1 <?php
2 header('Content-Type: ');
3 echo '<?'.'xml version="1.0" ?'.'>';
4 echo '<root/>';
5 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/empty-content-type.py

 1#!/usr/bin/env python3
 2import sys
 3
 4sys.stdout.write('Content-Type: \r\n')
 5sys.stdout.write('\r\n')
 6
 7print('<?xml version="1.0" ?>')
 8print('<root/>')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/endlessxml.php

1 <?php
2 sleep(10);
3 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/endlessxml.py

 1#!/usr/bin/env python3
 2import sys
 3import time
 4
 5time.sleep(10)
 6
 7sys.stdout.write('Content-Type: text/xml\r\n')
 8sys.stdout.write('\r\n')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/frame-load-to-cancel.html

33<script>
44function loadXMLDoc()
55{
6  url = 'endlessxml.php';
 6 url = 'endlessxml.py';
77
88 rq = false;
99
271966

LayoutTests/http/tests/xmlhttprequest/resources/get-content.php

1 <?php
2  $content = $_GET["content"] ? $_GET["content"] : "";
3  $type = $_GET["type"] ? $_GET["type"] : "";
4  header("HTTP/1.1 200 OK");
5  header("Content-Type:" . $type);
6 
7  echo $content;
8  exit;
9 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/get-content.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5from urllib.parse import unquote, unquote_to_bytes
 6
 7query = os.environ.get('QUERY_STRING', 'type=text%2Fhtml%3Bcharset%3DUTF-8&content=%83%65%83%58%83%67')
 8split_query = {}
 9for pair in query.split('&'):
 10 split_query[unquote(pair.split('=')[0])] = '='.join(pair.split('=')[1:])
 11
 12typ = unquote(split_query.get('type', 'text/html'))
 13
 14sys.stdout.write('Content-Type: {}\r\n'.format(typ))
 15sys.stdout.write('status: 200\r\n')
 16sys.stdout.write('\r\n')
 17
 18sys.stdout.flush()
 19os.write(sys.stdout.fileno(), unquote_to_bytes(split_query.get('content')))
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/get_method.php

1 <?php
2  $method = $_SERVER['REQUEST_METHOD'];
3  header("REQMETHOD: $method");
4  if ($method != "HEAD") {
5  echo $method;
6  }
7 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/get_method.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5method = os.environ.get('REQUEST_METHOD', 'GET')
 6
 7sys.stdout.write('Content-Type: text/html\r\n')
 8sys.stdout.write('REQMETHOD: {}\r\n'.format(method))
 9sys.stdout.write('\r\n')
 10
 11if method != 'HEAD':
 12 print(method)
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/headers.php

1 <?php
2  header("Content-Type: text/plain");
3  header("X-Custom-Header: test");
4  header("Set-Cookie: test");
5  header("Set-Cookie2: test");
6  header("X-Custom-Header-Empty:");
7  header("X-Custom-Header-Comma: 1");
8  header("X-Custom-Header-Comma: 2", false);
9  header("X-Custom-Header-Bytes: …");
10  echo "TEST";
11 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/headers.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-Type: text/plain\r\n')
 6sys.stdout.write('X-Custom-Header: test\r\n')
 7sys.stdout.write('Set-Cookie: test\r\n')
 8sys.stdout.write('Set-Cookie2: test\r\n')
 9sys.stdout.write('X-Custom-Header-Empty:\r\n')
 10sys.stdout.write('X-Custom-Header-Comma: 1\r\n')
 11sys.stdout.write('X-Custom-Header-Comma: 2\r\n')
 12sys.stdout.write('X-Custom-Header-Bytes: …\r\n')
 13sys.stdout.write('\r\n')
 14
 15print('TEST')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/infinite-loop.php

1 <?php
2  header('HTTP/1.0 302 Found');
3  header('Location: infinite-loop.php');
4 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/infinite-loop.py

 1#!/usr/bin/env python3
 2import sys
 3
 4sys.stdout.write('Content-Type: text/html\r\n')
 5sys.stdout.write('Location: infinite-loop.py\r\n')
 6sys.stdout.write('status: 302\r\n')
 7sys.stdout.write('\r\n')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/no-authenticate-header-401.php

1 <?php
2 
3 header('HTTP/1.1 401 UNAUTHORIZED');
271966

LayoutTests/http/tests/xmlhttprequest/resources/no-authenticate-header-401.py

 1#!/usr/bin/env python3
 2import sys
 3
 4sys.stdout.write('Content-Type: text/html\r\n')
 5sys.stdout.write('status: 401\r\n')
 6sys.stdout.write('\r\n')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/not-ascii-status.php

1 <?php
2  header('HTTP/1.1 200 OK…');
3  echo "OK…";
4 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/not-ascii-status.py

 1#!/usr/bin/env python3
 2import sys
 3
 4sys.stdout.write('Content-Type: text/html\r\n')
 5sys.stdout.write('status: 200 OK…\r\n')
 6sys.stdout.write('\r\n')
 7sys.stdout.write('OK…')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/print-headers.php

1 <?php
2 $headers = apache_request_headers();
3 
4 header("Content-Type: text/plain");
5 header("Cache-Control: no-store");
6 
7 foreach ($headers as $header => $value) {
8  $request_headers[strtolower($header)] = $value;
9 }
10 echo json_encode( $request_headers );
271966

LayoutTests/http/tests/xmlhttprequest/resources/print-headers.py

 1#!/usr/bin/env python3
 2import json
 3import os
 4import sys
 5
 6sys.stdout.write('Content-Type: text/plain\r\n')
 7sys.stdout.write('Cache-Control: no-store\r\n')
 8sys.stdout.write('\r\n')
 9
 10headers = {}
 11for headername, headervalue in os.environ.iteritems():
 12 if not headername.startswith('HTTP_'):
 13 continue
 14 headers[headername[4:].lower().replace('_', '-')] = headervalue
 15
 16sys.stdout.write(json.dumps(headers))
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/print-referer.php

1 <?php
2 
3 header("Content-type: text/plain");
4 echo !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "NO REFERER";
271966

LayoutTests/http/tests/xmlhttprequest/resources/print-referer.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5sys.stdout.write('Content-type: text/plain\r\n')
 6sys.stdout.write('\r\n')
 7
 8sys.stdout.write(os.environ.get('HTTP_REFERER', 'NO REFERER'))
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/redirect-cors.php

1 <?php
2  $url = $_GET['url'];
3  $redirect_preflight = $_GET['redirect-preflight'];
4  $access_control_allow_origin = $_GET['access-control-allow-origin'];
5  $access_control_allow_credentials = $_GET['access-control-allow-credentials'];
6  $access_control_allow_headers = $_GET['access-control-allow-headers'];
7 
8  if ($_SERVER['REQUEST_METHOD'] == "OPTIONS") {
9  if ($redirect_preflight == "true") {
10  header("HTTP/1.1 302");
11  header("Location: $url");
12  }
13  else {
14  header("HTTP/1.1 200");
15  }
16  header("Access-Control-Allow-Methods: GET");
17  header("Access-Control-Max-Age: 1");
18  } else if ($_SERVER['REQUEST_METHOD'] == "GET") {
19  header("HTTP/1.1 302");
20  header("Location: $url");
21  }
22  if (!is_null($access_control_allow_origin))
23  header("Access-Control-Allow-Origin: $access_control_allow_origin");
24  if (!is_null($access_control_allow_credentials))
25  header("Access-Control-Allow-Credentials: $access_control_allow_credentials");
26  if (!is_null($access_control_allow_headers))
27  header("Access-Control-Allow-Headers: $access_control_allow_headers");
28 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/redirect-cors.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4import time
 5
 6from urllib.parse import parse_qs, unquote
 7query = parse_qs(os.environ.get('QUERY_STRING', ''), keep_blank_values=True)
 8
 9sys.stdout.write('Content-Type: text/html\r\n')
 10
 11url = query.get('url', [''])[0]
 12
 13if os.environ.get('REQUEST_METHOD') == 'OPTIONS':
 14 if query.get('redirect-preflight', ['false'])[0] == 'true':
 15 sys.stdout.write('status: 302\r\n')
 16 sys.stdout.write('Location: {}\r\n'.format(url))
 17 else:
 18 sys.stdout.write('status: 200\r\n')
 19 sys.stdout.write('Access-Control-Allow-Methods: GET\r\n')
 20 sys.stdout.write('Access-Control-Max-Age: 1\r\n')
 21
 22elif os.environ.get('REQUEST_METHOD') == 'GET':
 23 sys.stdout.write('status: 302\r\n')
 24 sys.stdout.write('Location: {}\r\n'.format(url))
 25
 26allowOrigin = query.get('access-control-allow-origin', [None])[0]
 27allowCredentials = query.get('access-control-allow-credentials', [None])[0]
 28allowHeaders = query.get('access-control-allow-headers', [None])[0]
 29
 30if allowOrigin is not None:
 31 sys.stdout.write('Access-Control-Allow-Origin: {}\r\n'.format(allowOrigin))
 32if allowCredentials is not None:
 33 sys.stdout.write('Access-Control-Allow-Credentials: {}\r\n'.format(allowCredentials))
 34if allowHeaders is not None:
 35 sys.stdout.write('Access-Control-Allow-Headers: {}\r\n'.format(allowHeaders))
 36
 37sys.stdout.write('\r\n')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/redirect_methods.php

1 <?php
2  $url = $_GET['url'];
3  $code = $_GET['code'];
4  header("HTTP/1.1 $code");
5  header("Location: $url");
6 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/redirect_methods.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4
 5from urllib.parse import parse_qs
 6query = parse_qs(os.environ.get('QUERY_STRING', ''), keep_blank_values=True)
 7
 8sys.stdout.write('Content-Type: text/html\r\n')
 9sys.stdout.write('status: {}\r\n'.format(query.get('code', [200])[0]))
 10sys.stdout.write('Location: {}\r\n'.format(query.get('url', [''])[0]))
 11sys.stdout.write('\r\n')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/status-404-without-body.php

1 <?php
2  header('http/1.1 404 Not Found');
3  header("Access-Control-Allow-Origin: *");
4  exit();
5 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/status-404-without-body.py

 1#!/usr/bin/env python3
 2import sys
 3
 4sys.stdout.write('Content-Type: text/html\r\n')
 5sys.stdout.write('status: 404\r\n')
 6sys.stdout.write('Access-Control-Allow-Origin: *\r\n')
 7sys.stdout.write('\r\n')
nonexistent

LayoutTests/http/tests/xmlhttprequest/resources/xmlhttprequest-in-unload.html

33<script>
44function loadXML()
55{
6  url = 'endlessxml.php';
 6 url = 'endlessxml.py';
77
88 try {
99 xhr = new XMLHttpRequest();
271966

LayoutTests/http/tests/xmlhttprequest/resources/xmlhttprequest-mimetype-mixed-case.php

1 <?php
2 header('Content-Type: Application/Xhtml+Xml');
3 readfile('load-icon.xhtml');
4 ?>
271966

LayoutTests/http/tests/xmlhttprequest/resources/xmlhttprequest-mimetype-mixed-case.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4import time
 5
 6sys.stdout.write('Content-Type: Application/Xhtml+Xml\r\n')
 7sys.stdout.write('\r\n')
 8
 9with open(os.path.join(os.path.dirname(__file__), 'load-icon.xhtml')) as file:
 10 sys.stdout.writelines(file.readlines())
nonexistent

LayoutTests/http/tests/xmlhttprequest/workers/resources/endless-response.php

1 <?php
2 sleep(10);
3 ?>
271966

LayoutTests/http/tests/xmlhttprequest/workers/resources/endless-response.py

 1#!/usr/bin/env python3
 2import os
 3import sys
 4import time
 5
 6
 7sys.stdout.write('Content-Type: text/html')
 8sys.stdout.write('\r\n\r\n')
 9
 10time.sleep(10)
nonexistent

LayoutTests/http/tests/xmlhttprequest/workers/resources/endless-sync-xhr.js

11postMessage("START");
22xhr = new XMLHttpRequest;
3 xhr.open("GET", "endless-response.php", false);
 3xhr.open("GET", "endless-response.py", false);
44try {
55 xhr.send();
66} catch (e) {
271966