зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset e9407b04cde1 (bug 1433144) for build bustage on test_orphan_file_patterns on a CLOSED TREE
--HG-- rename : testing/web-platform/tests/interfaces/WebCryptoAPI.idl => testing/web-platform/tests/WebCryptoAPI/WebCryptoAPI.idl rename : testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker.js => testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker.js rename : testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker.js => testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker.js rename : testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/hkdf.https.worker.js => testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/hkdf.worker.js rename : testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.js => testing/web-platform/tests/WebCryptoAPI/derive_bits_keys/pbkdf2.worker.js rename : testing/web-platform/tests/WebCryptoAPI/digest/digest.https.worker.js => testing/web-platform/tests/WebCryptoAPI/digest/digest.worker.js rename : testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/aes_cbc.https.worker.js => testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/aes_cbc.worker.js rename : testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/aes_ctr.https.worker.js => testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/aes_ctr.worker.js rename : testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/aes_gcm.https.worker.js => testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/aes_gcm.worker.js rename : testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/rsa.https.worker.js => testing/web-platform/tests/WebCryptoAPI/encrypt_decrypt/rsa.worker.js rename : testing/web-platform/tests/WebCryptoAPI/import_export/ec_importKey.https.worker.js => testing/web-platform/tests/WebCryptoAPI/import_export/ec_importKey.worker.js rename : testing/web-platform/tests/WebCryptoAPI/import_export/rsa_importKey.https.worker.js => testing/web-platform/tests/WebCryptoAPI/import_export/rsa_importKey.worker.js rename : testing/web-platform/tests/WebCryptoAPI/import_export/symmetric_importKey.https.worker.js => testing/web-platform/tests/WebCryptoAPI/import_export/symmetric_importKey.worker.js rename : testing/web-platform/tests/WebCryptoAPI/sign_verify/ecdsa.https.worker.js => testing/web-platform/tests/WebCryptoAPI/sign_verify/ecdsa.worker.js rename : testing/web-platform/tests/WebCryptoAPI/sign_verify/hmac.https.worker.js => testing/web-platform/tests/WebCryptoAPI/sign_verify/hmac.worker.js rename : testing/web-platform/tests/WebCryptoAPI/sign_verify/rsa_pkcs.https.worker.js => testing/web-platform/tests/WebCryptoAPI/sign_verify/rsa_pkcs.worker.js rename : testing/web-platform/tests/WebCryptoAPI/sign_verify/rsa_pss.https.worker.js => testing/web-platform/tests/WebCryptoAPI/sign_verify/rsa_pss.worker.js rename : testing/web-platform/tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.worker.js => testing/web-platform/tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.js rename : testing/web-platform/tests/xhr/FormData-append.html => testing/web-platform/tests/XMLHttpRequest/FormData-append.html rename : testing/web-platform/tests/xhr/OWNERS => testing/web-platform/tests/XMLHttpRequest/OWNERS rename : testing/web-platform/tests/xhr/README.md => testing/web-platform/tests/XMLHttpRequest/README.md rename : testing/web-platform/tests/xhr/XMLHttpRequest-withCredentials.any.js => testing/web-platform/tests/XMLHttpRequest/XMLHttpRequest-withCredentials.any.js rename : testing/web-platform/tests/xhr/abort-after-receive.htm => testing/web-platform/tests/XMLHttpRequest/abort-after-receive.htm rename : testing/web-platform/tests/xhr/abort-after-send.htm => testing/web-platform/tests/XMLHttpRequest/abort-after-send.htm rename : testing/web-platform/tests/xhr/abort-after-stop.htm => testing/web-platform/tests/XMLHttpRequest/abort-after-stop.htm rename : testing/web-platform/tests/xhr/abort-after-timeout.htm => testing/web-platform/tests/XMLHttpRequest/abort-after-timeout.htm rename : testing/web-platform/tests/xhr/abort-during-done.htm => testing/web-platform/tests/XMLHttpRequest/abort-during-done.htm rename : testing/web-platform/tests/xhr/abort-during-headers-received.htm => testing/web-platform/tests/XMLHttpRequest/abort-during-headers-received.htm rename : testing/web-platform/tests/xhr/abort-during-loading.htm => testing/web-platform/tests/XMLHttpRequest/abort-during-loading.htm rename : testing/web-platform/tests/xhr/abort-during-open.htm => testing/web-platform/tests/XMLHttpRequest/abort-during-open.htm rename : testing/web-platform/tests/xhr/abort-during-open.js => testing/web-platform/tests/XMLHttpRequest/abort-during-open.js rename : testing/web-platform/tests/xhr/abort-during-open.worker.js => testing/web-platform/tests/XMLHttpRequest/abort-during-open.worker.js rename : testing/web-platform/tests/xhr/abort-during-unsent.htm => testing/web-platform/tests/XMLHttpRequest/abort-during-unsent.htm rename : testing/web-platform/tests/xhr/abort-during-upload.htm => testing/web-platform/tests/XMLHttpRequest/abort-during-upload.htm rename : testing/web-platform/tests/xhr/abort-event-abort.htm => testing/web-platform/tests/XMLHttpRequest/abort-event-abort.htm rename : testing/web-platform/tests/xhr/abort-event-listeners.htm => testing/web-platform/tests/XMLHttpRequest/abort-event-listeners.htm rename : testing/web-platform/tests/xhr/abort-event-loadend.htm => testing/web-platform/tests/XMLHttpRequest/abort-event-loadend.htm rename : testing/web-platform/tests/xhr/abort-event-order.htm => testing/web-platform/tests/XMLHttpRequest/abort-event-order.htm rename : testing/web-platform/tests/xhr/abort-upload-event-abort.htm => testing/web-platform/tests/XMLHttpRequest/abort-upload-event-abort.htm rename : testing/web-platform/tests/xhr/abort-upload-event-loadend.htm => testing/web-platform/tests/XMLHttpRequest/abort-upload-event-loadend.htm rename : testing/web-platform/tests/xhr/anonymous-mode-unsupported.htm => testing/web-platform/tests/XMLHttpRequest/anonymous-mode-unsupported.htm rename : testing/web-platform/tests/xhr/data-uri.htm => testing/web-platform/tests/XMLHttpRequest/data-uri.htm rename : testing/web-platform/tests/xhr/event-abort.htm => testing/web-platform/tests/XMLHttpRequest/event-abort.htm rename : testing/web-platform/tests/xhr/event-error-order.sub.html => testing/web-platform/tests/XMLHttpRequest/event-error-order.sub.html rename : testing/web-platform/tests/xhr/event-error.sub.html => testing/web-platform/tests/XMLHttpRequest/event-error.sub.html rename : testing/web-platform/tests/xhr/event-load.htm => testing/web-platform/tests/XMLHttpRequest/event-load.htm rename : testing/web-platform/tests/xhr/event-loadend.htm => testing/web-platform/tests/XMLHttpRequest/event-loadend.htm rename : testing/web-platform/tests/xhr/event-loadstart-upload.htm => testing/web-platform/tests/XMLHttpRequest/event-loadstart-upload.htm rename : testing/web-platform/tests/xhr/event-loadstart.htm => testing/web-platform/tests/XMLHttpRequest/event-loadstart.htm rename : testing/web-platform/tests/xhr/event-progress.htm => testing/web-platform/tests/XMLHttpRequest/event-progress.htm rename : testing/web-platform/tests/xhr/event-readystate-sync-open.htm => testing/web-platform/tests/XMLHttpRequest/event-readystate-sync-open.htm rename : testing/web-platform/tests/xhr/event-readystatechange-loaded.htm => testing/web-platform/tests/XMLHttpRequest/event-readystatechange-loaded.htm rename : testing/web-platform/tests/xhr/event-timeout-order.htm => testing/web-platform/tests/XMLHttpRequest/event-timeout-order.htm rename : testing/web-platform/tests/xhr/event-timeout.htm => testing/web-platform/tests/XMLHttpRequest/event-timeout.htm rename : testing/web-platform/tests/xhr/event-upload-progress.htm => testing/web-platform/tests/XMLHttpRequest/event-upload-progress.htm rename : testing/web-platform/tests/xhr/firing-events-http-content-length.html => testing/web-platform/tests/XMLHttpRequest/firing-events-http-content-length.html rename : testing/web-platform/tests/xhr/firing-events-http-no-content-length.html => testing/web-platform/tests/XMLHttpRequest/firing-events-http-no-content-length.html rename : testing/web-platform/tests/xhr/folder.txt => testing/web-platform/tests/XMLHttpRequest/folder.txt rename : testing/web-platform/tests/xhr/formdata-blob.htm => testing/web-platform/tests/XMLHttpRequest/formdata-blob.htm rename : testing/web-platform/tests/xhr/formdata-delete.htm => testing/web-platform/tests/XMLHttpRequest/formdata-delete.htm rename : testing/web-platform/tests/xhr/formdata-foreach.html => testing/web-platform/tests/XMLHttpRequest/formdata-foreach.html rename : testing/web-platform/tests/xhr/formdata-get.htm => testing/web-platform/tests/XMLHttpRequest/formdata-get.htm rename : testing/web-platform/tests/xhr/formdata-has.htm => testing/web-platform/tests/XMLHttpRequest/formdata-has.htm rename : testing/web-platform/tests/xhr/formdata-set.htm => testing/web-platform/tests/XMLHttpRequest/formdata-set.htm rename : testing/web-platform/tests/xhr/formdata.htm => testing/web-platform/tests/XMLHttpRequest/formdata.htm rename : testing/web-platform/tests/xhr/getallresponseheaders-cookies.htm => testing/web-platform/tests/XMLHttpRequest/getallresponseheaders-cookies.htm rename : testing/web-platform/tests/xhr/getallresponseheaders-status.htm => testing/web-platform/tests/XMLHttpRequest/getallresponseheaders-status.htm rename : testing/web-platform/tests/xhr/getallresponseheaders.htm => testing/web-platform/tests/XMLHttpRequest/getallresponseheaders.htm rename : testing/web-platform/tests/xhr/getresponseheader-case-insensitive.htm => testing/web-platform/tests/XMLHttpRequest/getresponseheader-case-insensitive.htm rename : testing/web-platform/tests/xhr/getresponseheader-chunked-trailer.htm => testing/web-platform/tests/XMLHttpRequest/getresponseheader-chunked-trailer.htm rename : testing/web-platform/tests/xhr/getresponseheader-cookies-and-more.htm => testing/web-platform/tests/XMLHttpRequest/getresponseheader-cookies-and-more.htm rename : testing/web-platform/tests/xhr/getresponseheader-error-state.htm => testing/web-platform/tests/XMLHttpRequest/getresponseheader-error-state.htm rename : testing/web-platform/tests/xhr/getresponseheader-server-date.htm => testing/web-platform/tests/XMLHttpRequest/getresponseheader-server-date.htm rename : testing/web-platform/tests/xhr/getresponseheader-special-characters.htm => testing/web-platform/tests/XMLHttpRequest/getresponseheader-special-characters.htm rename : testing/web-platform/tests/xhr/getresponseheader-unsent-opened-state.htm => testing/web-platform/tests/XMLHttpRequest/getresponseheader-unsent-opened-state.htm rename : testing/web-platform/tests/xhr/headers-normalize-response.htm => testing/web-platform/tests/XMLHttpRequest/headers-normalize-response.htm rename : testing/web-platform/tests/xhr/historical.html => testing/web-platform/tests/XMLHttpRequest/historical.html rename : testing/web-platform/tests/xhr/loadstart-and-state.html => testing/web-platform/tests/XMLHttpRequest/loadstart-and-state.html rename : testing/web-platform/tests/xhr/no-utf16-json.htm => testing/web-platform/tests/XMLHttpRequest/no-utf16-json.htm rename : testing/web-platform/tests/xhr/open-after-abort.htm => testing/web-platform/tests/XMLHttpRequest/open-after-abort.htm rename : testing/web-platform/tests/xhr/open-after-setrequestheader.htm => testing/web-platform/tests/XMLHttpRequest/open-after-setrequestheader.htm rename : testing/web-platform/tests/xhr/open-during-abort-event.htm => testing/web-platform/tests/XMLHttpRequest/open-during-abort-event.htm rename : testing/web-platform/tests/xhr/open-during-abort-processing.htm => testing/web-platform/tests/XMLHttpRequest/open-during-abort-processing.htm rename : testing/web-platform/tests/xhr/open-during-abort.htm => testing/web-platform/tests/XMLHttpRequest/open-during-abort.htm rename : testing/web-platform/tests/xhr/open-method-bogus.htm => testing/web-platform/tests/XMLHttpRequest/open-method-bogus.htm rename : testing/web-platform/tests/xhr/open-method-case-insensitive.htm => testing/web-platform/tests/XMLHttpRequest/open-method-case-insensitive.htm rename : testing/web-platform/tests/xhr/open-method-case-sensitive.htm => testing/web-platform/tests/XMLHttpRequest/open-method-case-sensitive.htm rename : testing/web-platform/tests/xhr/open-method-insecure.htm => testing/web-platform/tests/XMLHttpRequest/open-method-insecure.htm rename : testing/web-platform/tests/xhr/open-method-responsetype-set-sync.htm => testing/web-platform/tests/XMLHttpRequest/open-method-responsetype-set-sync.htm rename : testing/web-platform/tests/xhr/open-open-send.htm => testing/web-platform/tests/XMLHttpRequest/open-open-send.htm rename : testing/web-platform/tests/xhr/open-open-sync-send.htm => testing/web-platform/tests/XMLHttpRequest/open-open-sync-send.htm rename : testing/web-platform/tests/xhr/open-referer.htm => testing/web-platform/tests/XMLHttpRequest/open-referer.htm rename : testing/web-platform/tests/xhr/open-send-during-abort.htm => testing/web-platform/tests/XMLHttpRequest/open-send-during-abort.htm rename : testing/web-platform/tests/xhr/open-send-open.htm => testing/web-platform/tests/XMLHttpRequest/open-send-open.htm rename : testing/web-platform/tests/xhr/open-sync-open-send.htm => testing/web-platform/tests/XMLHttpRequest/open-sync-open-send.htm rename : testing/web-platform/tests/xhr/open-url-about-blank-window.htm => testing/web-platform/tests/XMLHttpRequest/open-url-about-blank-window.htm rename : testing/web-platform/tests/xhr/open-url-base-inserted-after-open.htm => testing/web-platform/tests/XMLHttpRequest/open-url-base-inserted-after-open.htm rename : testing/web-platform/tests/xhr/open-url-base-inserted.htm => testing/web-platform/tests/XMLHttpRequest/open-url-base-inserted.htm rename : testing/web-platform/tests/xhr/open-url-base.htm => testing/web-platform/tests/XMLHttpRequest/open-url-base.htm rename : testing/web-platform/tests/xhr/open-url-encoding.htm => testing/web-platform/tests/XMLHttpRequest/open-url-encoding.htm rename : testing/web-platform/tests/xhr/open-url-javascript-window-2.htm => testing/web-platform/tests/XMLHttpRequest/open-url-javascript-window-2.htm rename : testing/web-platform/tests/xhr/open-url-javascript-window.htm => testing/web-platform/tests/XMLHttpRequest/open-url-javascript-window.htm rename : testing/web-platform/tests/xhr/open-url-multi-window-2.htm => testing/web-platform/tests/XMLHttpRequest/open-url-multi-window-2.htm rename : testing/web-platform/tests/xhr/open-url-multi-window-3.htm => testing/web-platform/tests/XMLHttpRequest/open-url-multi-window-3.htm rename : testing/web-platform/tests/xhr/open-url-multi-window-4.htm => testing/web-platform/tests/XMLHttpRequest/open-url-multi-window-4.htm rename : testing/web-platform/tests/xhr/open-url-multi-window-5.htm => testing/web-platform/tests/XMLHttpRequest/open-url-multi-window-5.htm rename : testing/web-platform/tests/xhr/open-url-multi-window-6.htm => testing/web-platform/tests/XMLHttpRequest/open-url-multi-window-6.htm rename : testing/web-platform/tests/xhr/open-url-multi-window.htm => testing/web-platform/tests/XMLHttpRequest/open-url-multi-window.htm rename : testing/web-platform/tests/xhr/open-url-redirected-worker-origin.htm => testing/web-platform/tests/XMLHttpRequest/open-url-redirected-worker-origin.htm rename : testing/web-platform/tests/xhr/open-url-worker-origin.htm => testing/web-platform/tests/XMLHttpRequest/open-url-worker-origin.htm rename : testing/web-platform/tests/xhr/open-url-worker-simple.htm => testing/web-platform/tests/XMLHttpRequest/open-url-worker-simple.htm rename : testing/web-platform/tests/xhr/open-user-password-non-same-origin.htm => testing/web-platform/tests/XMLHttpRequest/open-user-password-non-same-origin.htm rename : testing/web-platform/tests/xhr/overridemimetype-blob.html => testing/web-platform/tests/XMLHttpRequest/overridemimetype-blob.html rename : testing/web-platform/tests/xhr/overridemimetype-done-state.htm => testing/web-platform/tests/XMLHttpRequest/overridemimetype-done-state.htm rename : testing/web-platform/tests/xhr/overridemimetype-headers-received-state-force-shiftjis.htm => testing/web-platform/tests/XMLHttpRequest/overridemimetype-headers-received-state-force-shiftjis.htm rename : testing/web-platform/tests/xhr/overridemimetype-invalid-mime-type.htm => testing/web-platform/tests/XMLHttpRequest/overridemimetype-invalid-mime-type.htm rename : testing/web-platform/tests/xhr/overridemimetype-loading-state.htm => testing/web-platform/tests/XMLHttpRequest/overridemimetype-loading-state.htm rename : testing/web-platform/tests/xhr/overridemimetype-open-state-force-utf-8.htm => testing/web-platform/tests/XMLHttpRequest/overridemimetype-open-state-force-utf-8.htm rename : testing/web-platform/tests/xhr/overridemimetype-open-state-force-xml.htm => testing/web-platform/tests/XMLHttpRequest/overridemimetype-open-state-force-xml.htm rename : testing/web-platform/tests/xhr/overridemimetype-unsent-state-force-shiftjis.htm => testing/web-platform/tests/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm rename : testing/web-platform/tests/xhr/preserve-ua-header-on-redirect.htm => testing/web-platform/tests/XMLHttpRequest/preserve-ua-header-on-redirect.htm rename : testing/web-platform/tests/xhr/progress-events-response-data-gzip.htm => testing/web-platform/tests/XMLHttpRequest/progress-events-response-data-gzip.htm rename : testing/web-platform/tests/xhr/progressevent-constructor.html => testing/web-platform/tests/XMLHttpRequest/progressevent-constructor.html rename : testing/web-platform/tests/xhr/progressevent-interface.html => testing/web-platform/tests/XMLHttpRequest/progressevent-interface.html rename : testing/web-platform/tests/xhr/resources/accept-language.py => testing/web-platform/tests/XMLHttpRequest/resources/accept-language.py rename : testing/web-platform/tests/xhr/resources/accept.py => testing/web-platform/tests/XMLHttpRequest/resources/accept.py rename : testing/web-platform/tests/xhr/resources/access-control-allow-lists.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-allow-lists.py rename : testing/web-platform/tests/xhr/resources/access-control-allow-with-body.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-allow-with-body.py rename : testing/web-platform/tests/xhr/resources/access-control-auth-basic.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-auth-basic.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-allow-no-credentials.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-allow-star.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-allow-star.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-allow.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-allow.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-cors-safelisted-request-headers.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-denied.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-denied.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-options-not-supported.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-options-not-supported.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-preflight-cache-invalidation.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-preflight-cache-timeout.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-preflight-cache-timeout.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-preflight-cache.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-preflight-cache.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-put-allow.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-put-allow.py rename : testing/web-platform/tests/xhr/resources/access-control-basic-whitelist-response-headers.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-basic-whitelist-response-headers.py rename : testing/web-platform/tests/xhr/resources/access-control-cookie.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-cookie.py rename : testing/web-platform/tests/xhr/resources/access-control-origin-header.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-origin-header.py rename : testing/web-platform/tests/xhr/resources/access-control-preflight-denied.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-preflight-denied.py rename : testing/web-platform/tests/xhr/resources/access-control-preflight-request-header-lowercase.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-preflight-request-header-lowercase.py rename : testing/web-platform/tests/xhr/resources/access-control-preflight-request-header-sorted.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-preflight-request-header-sorted.py rename : testing/web-platform/tests/xhr/resources/access-control-preflight-request-headers-origin.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-preflight-request-headers-origin.py rename : testing/web-platform/tests/xhr/resources/access-control-preflight-request-invalid-status.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py rename : testing/web-platform/tests/xhr/resources/access-control-preflight-request-must-not-contain-cookie.py => testing/web-platform/tests/XMLHttpRequest/resources/access-control-preflight-request-must-not-contain-cookie.py rename : testing/web-platform/tests/xhr/resources/access-control-sandboxed-iframe.html => testing/web-platform/tests/XMLHttpRequest/resources/access-control-sandboxed-iframe.html rename : testing/web-platform/tests/xhr/resources/auth1/auth.py => testing/web-platform/tests/XMLHttpRequest/resources/auth1/auth.py rename : testing/web-platform/tests/xhr/resources/auth2/auth.py => testing/web-platform/tests/XMLHttpRequest/resources/auth2/auth.py rename : testing/web-platform/tests/xhr/resources/auth2/corsenabled.py => testing/web-platform/tests/XMLHttpRequest/resources/auth2/corsenabled.py rename : testing/web-platform/tests/xhr/resources/auth3/auth.py => testing/web-platform/tests/XMLHttpRequest/resources/auth3/auth.py rename : testing/web-platform/tests/xhr/resources/auth4/auth.py => testing/web-platform/tests/XMLHttpRequest/resources/auth4/auth.py rename : testing/web-platform/tests/xhr/resources/auth5/auth.py => testing/web-platform/tests/XMLHttpRequest/resources/auth5/auth.py rename : testing/web-platform/tests/xhr/resources/auth6/auth.py => testing/web-platform/tests/XMLHttpRequest/resources/auth6/auth.py rename : testing/web-platform/tests/xhr/resources/auth7/corsenabled.py => testing/web-platform/tests/XMLHttpRequest/resources/auth7/corsenabled.py rename : testing/web-platform/tests/xhr/resources/auth8/corsenabled-no-authorize.py => testing/web-platform/tests/XMLHttpRequest/resources/auth8/corsenabled-no-authorize.py rename : testing/web-platform/tests/xhr/resources/auth9/auth.py => testing/web-platform/tests/XMLHttpRequest/resources/auth9/auth.py rename : testing/web-platform/tests/xhr/resources/authentication.py => testing/web-platform/tests/XMLHttpRequest/resources/authentication.py rename : testing/web-platform/tests/xhr/resources/base.xml => testing/web-platform/tests/XMLHttpRequest/resources/base.xml rename : testing/web-platform/tests/xhr/resources/chunked.py => testing/web-platform/tests/XMLHttpRequest/resources/chunked.py rename : testing/web-platform/tests/xhr/resources/conditional.py => testing/web-platform/tests/XMLHttpRequest/resources/conditional.py rename : testing/web-platform/tests/xhr/resources/content.py => testing/web-platform/tests/XMLHttpRequest/resources/content.py rename : testing/web-platform/tests/xhr/resources/corsenabled.py => testing/web-platform/tests/XMLHttpRequest/resources/corsenabled.py rename : testing/web-platform/tests/xhr/resources/delay.py => testing/web-platform/tests/XMLHttpRequest/resources/delay.py rename : testing/web-platform/tests/xhr/resources/echo-headers.py => testing/web-platform/tests/XMLHttpRequest/resources/echo-headers.py rename : testing/web-platform/tests/xhr/resources/echo-method.py => testing/web-platform/tests/XMLHttpRequest/resources/echo-method.py rename : testing/web-platform/tests/xhr/resources/empty-div-utf8-html.py => testing/web-platform/tests/XMLHttpRequest/resources/empty-div-utf8-html.py rename : testing/web-platform/tests/xhr/resources/folder.txt => testing/web-platform/tests/XMLHttpRequest/resources/folder.txt rename : testing/web-platform/tests/xhr/resources/form.py => testing/web-platform/tests/XMLHttpRequest/resources/form.py rename : testing/web-platform/tests/xhr/resources/gzip.py => testing/web-platform/tests/XMLHttpRequest/resources/gzip.py rename : testing/web-platform/tests/xhr/resources/header-content-length.asis => testing/web-platform/tests/XMLHttpRequest/resources/header-content-length.asis rename : testing/web-platform/tests/xhr/resources/headers-basic.asis => testing/web-platform/tests/XMLHttpRequest/resources/headers-basic.asis rename : testing/web-platform/tests/xhr/resources/headers.asis => testing/web-platform/tests/XMLHttpRequest/resources/headers.asis rename : testing/web-platform/tests/xhr/resources/headers.py => testing/web-platform/tests/XMLHttpRequest/resources/headers.py rename : testing/web-platform/tests/xhr/resources/image.gif => testing/web-platform/tests/XMLHttpRequest/resources/image.gif rename : testing/web-platform/tests/xhr/resources/img-utf8-html.py => testing/web-platform/tests/XMLHttpRequest/resources/img-utf8-html.py rename : testing/web-platform/tests/xhr/resources/img.jpg => testing/web-platform/tests/XMLHttpRequest/resources/img.jpg rename : testing/web-platform/tests/xhr/resources/infinite-redirects.py => testing/web-platform/tests/XMLHttpRequest/resources/infinite-redirects.py rename : testing/web-platform/tests/xhr/resources/init.htm => testing/web-platform/tests/XMLHttpRequest/resources/init.htm rename : testing/web-platform/tests/xhr/resources/inspect-headers.py => testing/web-platform/tests/XMLHttpRequest/resources/inspect-headers.py rename : testing/web-platform/tests/xhr/resources/invalid-utf8-html.py => testing/web-platform/tests/XMLHttpRequest/resources/invalid-utf8-html.py rename : testing/web-platform/tests/xhr/resources/last-modified.py => testing/web-platform/tests/XMLHttpRequest/resources/last-modified.py rename : testing/web-platform/tests/xhr/resources/no-custom-header-on-preflight.py => testing/web-platform/tests/XMLHttpRequest/resources/no-custom-header-on-preflight.py rename : testing/web-platform/tests/xhr/resources/nocors/folder.txt => testing/web-platform/tests/XMLHttpRequest/resources/nocors/folder.txt rename : testing/web-platform/tests/xhr/resources/parse-headers.py => testing/web-platform/tests/XMLHttpRequest/resources/parse-headers.py rename : testing/web-platform/tests/xhr/resources/pass.txt => testing/web-platform/tests/XMLHttpRequest/resources/pass.txt rename : testing/web-platform/tests/xhr/resources/redirect-cors.py => testing/web-platform/tests/XMLHttpRequest/resources/redirect-cors.py rename : testing/web-platform/tests/xhr/resources/redirect.py => testing/web-platform/tests/XMLHttpRequest/resources/redirect.py rename : testing/web-platform/tests/xhr/resources/requri.py => testing/web-platform/tests/XMLHttpRequest/resources/requri.py rename : testing/web-platform/tests/xhr/resources/reset-token.py => testing/web-platform/tests/XMLHttpRequest/resources/reset-token.py rename : testing/web-platform/tests/xhr/resources/responseType-document-in-worker.js => testing/web-platform/tests/XMLHttpRequest/resources/responseType-document-in-worker.js rename : testing/web-platform/tests/xhr/resources/responseXML-unavailable-in-worker.js => testing/web-platform/tests/XMLHttpRequest/resources/responseXML-unavailable-in-worker.js rename : testing/web-platform/tests/xhr/resources/send-after-setting-document-domain-window-1.htm => testing/web-platform/tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-1.htm rename : testing/web-platform/tests/xhr/resources/send-after-setting-document-domain-window-2.htm => testing/web-platform/tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-2.htm rename : testing/web-platform/tests/xhr/resources/send-after-setting-document-domain-window-helper.js => testing/web-platform/tests/XMLHttpRequest/resources/send-after-setting-document-domain-window-helper.js rename : testing/web-platform/tests/xhr/resources/shift-jis-html.py => testing/web-platform/tests/XMLHttpRequest/resources/shift-jis-html.py rename : testing/web-platform/tests/xhr/resources/status.py => testing/web-platform/tests/XMLHttpRequest/resources/status.py rename : testing/web-platform/tests/xhr/resources/trickle.py => testing/web-platform/tests/XMLHttpRequest/resources/trickle.py rename : testing/web-platform/tests/xhr/resources/upload.py => testing/web-platform/tests/XMLHttpRequest/resources/upload.py rename : testing/web-platform/tests/xhr/resources/utf16-bom.json => testing/web-platform/tests/XMLHttpRequest/resources/utf16-bom.json rename : testing/web-platform/tests/xhr/resources/utf16.txt => testing/web-platform/tests/XMLHttpRequest/resources/utf16.txt rename : testing/web-platform/tests/xhr/resources/well-formed.xml => testing/web-platform/tests/XMLHttpRequest/resources/well-formed.xml rename : testing/web-platform/tests/xhr/resources/win-1252-html.py => testing/web-platform/tests/XMLHttpRequest/resources/win-1252-html.py rename : testing/web-platform/tests/xhr/resources/win-1252-xml.py => testing/web-platform/tests/XMLHttpRequest/resources/win-1252-xml.py rename : testing/web-platform/tests/xhr/resources/workerxhr-origin-referrer.js => testing/web-platform/tests/XMLHttpRequest/resources/workerxhr-origin-referrer.js rename : testing/web-platform/tests/xhr/resources/workerxhr-simple.js => testing/web-platform/tests/XMLHttpRequest/resources/workerxhr-simple.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-event-order.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-timeout-aborted.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-timeout-aborted.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-timeout-abortedonmain.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-timeout-abortedonmain.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-timeout-overrides.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-timeout-overrides.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-timeout-overridesexpires.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-timeout-overridesexpires.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-timeout-runner.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-timeout-runner.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-timeout-simple.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-timeout-simple.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-timeout-synconmain.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconmain.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-timeout-synconworker.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-timeout-synconworker.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-timeout-twice.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-timeout-twice.js rename : testing/web-platform/tests/xhr/resources/xmlhttprequest-timeout.js => testing/web-platform/tests/XMLHttpRequest/resources/xmlhttprequest-timeout.js rename : testing/web-platform/tests/xhr/resources/zlib.py => testing/web-platform/tests/XMLHttpRequest/resources/zlib.py rename : testing/web-platform/tests/xhr/response-data-arraybuffer.htm => testing/web-platform/tests/XMLHttpRequest/response-data-arraybuffer.htm rename : testing/web-platform/tests/xhr/response-data-blob.htm => testing/web-platform/tests/XMLHttpRequest/response-data-blob.htm rename : testing/web-platform/tests/xhr/response-data-deflate.htm => testing/web-platform/tests/XMLHttpRequest/response-data-deflate.htm rename : testing/web-platform/tests/xhr/response-data-gzip.htm => testing/web-platform/tests/XMLHttpRequest/response-data-gzip.htm rename : testing/web-platform/tests/xhr/response-data-progress.htm => testing/web-platform/tests/XMLHttpRequest/response-data-progress.htm rename : testing/web-platform/tests/xhr/response-invalid-responsetype.htm => testing/web-platform/tests/XMLHttpRequest/response-invalid-responsetype.htm rename : testing/web-platform/tests/xhr/response-json.htm => testing/web-platform/tests/XMLHttpRequest/response-json.htm rename : testing/web-platform/tests/xhr/response-method.htm => testing/web-platform/tests/XMLHttpRequest/response-method.htm rename : testing/web-platform/tests/xhr/responseText-status.html => testing/web-platform/tests/XMLHttpRequest/responseText-status.html rename : testing/web-platform/tests/xhr/responseType-document-in-worker.html => testing/web-platform/tests/XMLHttpRequest/responseType-document-in-worker.html rename : testing/web-platform/tests/xhr/responseXML-unavailable-in-worker.html => testing/web-platform/tests/XMLHttpRequest/responseXML-unavailable-in-worker.html rename : testing/web-platform/tests/xhr/responsedocument-decoding.htm => testing/web-platform/tests/XMLHttpRequest/responsedocument-decoding.htm rename : testing/web-platform/tests/xhr/responsetext-decoding.htm => testing/web-platform/tests/XMLHttpRequest/responsetext-decoding.htm rename : testing/web-platform/tests/xhr/responsetype.html => testing/web-platform/tests/XMLHttpRequest/responsetype.html rename : testing/web-platform/tests/xhr/responseurl.html => testing/web-platform/tests/XMLHttpRequest/responseurl.html rename : testing/web-platform/tests/xhr/responsexml-basic.htm => testing/web-platform/tests/XMLHttpRequest/responsexml-basic.htm rename : testing/web-platform/tests/xhr/responsexml-document-properties.htm => testing/web-platform/tests/XMLHttpRequest/responsexml-document-properties.htm rename : testing/web-platform/tests/xhr/responsexml-get-twice.htm => testing/web-platform/tests/XMLHttpRequest/responsexml-get-twice.htm rename : testing/web-platform/tests/xhr/responsexml-media-type.htm => testing/web-platform/tests/XMLHttpRequest/responsexml-media-type.htm rename : testing/web-platform/tests/xhr/responsexml-non-document-types.htm => testing/web-platform/tests/XMLHttpRequest/responsexml-non-document-types.htm rename : testing/web-platform/tests/xhr/responsexml-non-well-formed.htm => testing/web-platform/tests/XMLHttpRequest/responsexml-non-well-formed.htm rename : testing/web-platform/tests/xhr/send-accept-language.htm => testing/web-platform/tests/XMLHttpRequest/send-accept-language.htm rename : testing/web-platform/tests/xhr/send-accept.htm => testing/web-platform/tests/XMLHttpRequest/send-accept.htm rename : testing/web-platform/tests/xhr/send-authentication-basic-cors-not-enabled.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-basic-cors-not-enabled.htm rename : testing/web-platform/tests/xhr/send-authentication-basic-cors.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-basic-cors.htm rename : testing/web-platform/tests/xhr/send-authentication-basic-repeat-no-args.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-basic-repeat-no-args.htm rename : testing/web-platform/tests/xhr/send-authentication-basic-setrequestheader-and-arguments.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-basic-setrequestheader-and-arguments.htm rename : testing/web-platform/tests/xhr/send-authentication-basic-setrequestheader-existing-session.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-basic-setrequestheader-existing-session.htm rename : testing/web-platform/tests/xhr/send-authentication-basic-setrequestheader.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-basic-setrequestheader.htm rename : testing/web-platform/tests/xhr/send-authentication-basic.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-basic.htm rename : testing/web-platform/tests/xhr/send-authentication-competing-names-passwords.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-competing-names-passwords.htm rename : testing/web-platform/tests/xhr/send-authentication-cors-basic-setrequestheader.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm rename : testing/web-platform/tests/xhr/send-authentication-cors-setrequestheader-no-cred.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm rename : testing/web-platform/tests/xhr/send-authentication-existing-session-manual.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-existing-session-manual.htm rename : testing/web-platform/tests/xhr/send-authentication-prompt-2-manual.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-prompt-2-manual.htm rename : testing/web-platform/tests/xhr/send-authentication-prompt-manual.htm => testing/web-platform/tests/XMLHttpRequest/send-authentication-prompt-manual.htm rename : testing/web-platform/tests/xhr/send-blob-with-no-mime-type.html => testing/web-platform/tests/XMLHttpRequest/send-blob-with-no-mime-type.html rename : testing/web-platform/tests/xhr/send-conditional-cors.htm => testing/web-platform/tests/XMLHttpRequest/send-conditional-cors.htm rename : testing/web-platform/tests/xhr/send-conditional.htm => testing/web-platform/tests/XMLHttpRequest/send-conditional.htm rename : testing/web-platform/tests/xhr/send-content-type-charset.htm => testing/web-platform/tests/XMLHttpRequest/send-content-type-charset.htm rename : testing/web-platform/tests/xhr/send-content-type-string.htm => testing/web-platform/tests/XMLHttpRequest/send-content-type-string.htm rename : testing/web-platform/tests/xhr/send-data-arraybuffer.htm => testing/web-platform/tests/XMLHttpRequest/send-data-arraybuffer.htm rename : testing/web-platform/tests/xhr/send-data-arraybufferview.htm => testing/web-platform/tests/XMLHttpRequest/send-data-arraybufferview.htm rename : testing/web-platform/tests/xhr/send-data-blob.htm => testing/web-platform/tests/XMLHttpRequest/send-data-blob.htm rename : testing/web-platform/tests/xhr/send-data-es-object.htm => testing/web-platform/tests/XMLHttpRequest/send-data-es-object.htm rename : testing/web-platform/tests/xhr/send-data-formdata.htm => testing/web-platform/tests/XMLHttpRequest/send-data-formdata.htm rename : testing/web-platform/tests/xhr/send-data-unexpected-tostring.htm => testing/web-platform/tests/XMLHttpRequest/send-data-unexpected-tostring.htm rename : testing/web-platform/tests/xhr/send-entity-body-basic.htm => testing/web-platform/tests/XMLHttpRequest/send-entity-body-basic.htm rename : testing/web-platform/tests/xhr/send-entity-body-document-bogus.htm => testing/web-platform/tests/XMLHttpRequest/send-entity-body-document-bogus.htm rename : testing/web-platform/tests/xhr/send-entity-body-document.htm => testing/web-platform/tests/XMLHttpRequest/send-entity-body-document.htm rename : testing/web-platform/tests/xhr/send-entity-body-empty.htm => testing/web-platform/tests/XMLHttpRequest/send-entity-body-empty.htm rename : testing/web-platform/tests/xhr/send-entity-body-get-head-async.htm => testing/web-platform/tests/XMLHttpRequest/send-entity-body-get-head-async.htm rename : testing/web-platform/tests/xhr/send-entity-body-get-head.htm => testing/web-platform/tests/XMLHttpRequest/send-entity-body-get-head.htm rename : testing/web-platform/tests/xhr/send-entity-body-none.htm => testing/web-platform/tests/XMLHttpRequest/send-entity-body-none.htm rename : testing/web-platform/tests/xhr/send-network-error-async-events.sub.htm => testing/web-platform/tests/XMLHttpRequest/send-network-error-async-events.sub.htm rename : testing/web-platform/tests/xhr/send-network-error-sync-events.sub.htm => testing/web-platform/tests/XMLHttpRequest/send-network-error-sync-events.sub.htm rename : testing/web-platform/tests/xhr/send-no-response-event-loadend.htm => testing/web-platform/tests/XMLHttpRequest/send-no-response-event-loadend.htm rename : testing/web-platform/tests/xhr/send-no-response-event-loadstart.htm => testing/web-platform/tests/XMLHttpRequest/send-no-response-event-loadstart.htm rename : testing/web-platform/tests/xhr/send-no-response-event-order.htm => testing/web-platform/tests/XMLHttpRequest/send-no-response-event-order.htm rename : testing/web-platform/tests/xhr/send-non-same-origin.htm => testing/web-platform/tests/XMLHttpRequest/send-non-same-origin.htm rename : testing/web-platform/tests/xhr/send-receive-utf16.htm => testing/web-platform/tests/XMLHttpRequest/send-receive-utf16.htm rename : testing/web-platform/tests/xhr/send-redirect-bogus-sync.htm => testing/web-platform/tests/XMLHttpRequest/send-redirect-bogus-sync.htm rename : testing/web-platform/tests/xhr/send-redirect-bogus.htm => testing/web-platform/tests/XMLHttpRequest/send-redirect-bogus.htm rename : testing/web-platform/tests/xhr/send-redirect-infinite-sync.htm => testing/web-platform/tests/XMLHttpRequest/send-redirect-infinite-sync.htm rename : testing/web-platform/tests/xhr/send-redirect-infinite.htm => testing/web-platform/tests/XMLHttpRequest/send-redirect-infinite.htm rename : testing/web-platform/tests/xhr/send-redirect-no-location.htm => testing/web-platform/tests/XMLHttpRequest/send-redirect-no-location.htm rename : testing/web-platform/tests/xhr/send-redirect-post-upload.htm => testing/web-platform/tests/XMLHttpRequest/send-redirect-post-upload.htm rename : testing/web-platform/tests/xhr/send-redirect-to-cors.htm => testing/web-platform/tests/XMLHttpRequest/send-redirect-to-cors.htm rename : testing/web-platform/tests/xhr/send-redirect-to-non-cors.htm => testing/web-platform/tests/XMLHttpRequest/send-redirect-to-non-cors.htm rename : testing/web-platform/tests/xhr/send-redirect.htm => testing/web-platform/tests/XMLHttpRequest/send-redirect.htm rename : testing/web-platform/tests/xhr/send-response-event-order.htm => testing/web-platform/tests/XMLHttpRequest/send-response-event-order.htm rename : testing/web-platform/tests/xhr/send-response-upload-event-loadend.htm => testing/web-platform/tests/XMLHttpRequest/send-response-upload-event-loadend.htm rename : testing/web-platform/tests/xhr/send-response-upload-event-loadstart.htm => testing/web-platform/tests/XMLHttpRequest/send-response-upload-event-loadstart.htm rename : testing/web-platform/tests/xhr/send-response-upload-event-progress.htm => testing/web-platform/tests/XMLHttpRequest/send-response-upload-event-progress.htm rename : testing/web-platform/tests/xhr/send-send.htm => testing/web-platform/tests/XMLHttpRequest/send-send.htm rename : testing/web-platform/tests/xhr/send-send.js => testing/web-platform/tests/XMLHttpRequest/send-send.js rename : testing/web-platform/tests/xhr/send-send.worker.js => testing/web-platform/tests/XMLHttpRequest/send-send.worker.js rename : testing/web-platform/tests/xhr/send-sync-blocks-async.htm => testing/web-platform/tests/XMLHttpRequest/send-sync-blocks-async.htm rename : testing/web-platform/tests/xhr/send-sync-no-response-event-load.htm => testing/web-platform/tests/XMLHttpRequest/send-sync-no-response-event-load.htm rename : testing/web-platform/tests/xhr/send-sync-no-response-event-loadend.htm => testing/web-platform/tests/XMLHttpRequest/send-sync-no-response-event-loadend.htm rename : testing/web-platform/tests/xhr/send-sync-no-response-event-order.htm => testing/web-platform/tests/XMLHttpRequest/send-sync-no-response-event-order.htm rename : testing/web-platform/tests/xhr/send-sync-response-event-order.htm => testing/web-platform/tests/XMLHttpRequest/send-sync-response-event-order.htm rename : testing/web-platform/tests/xhr/send-sync-timeout.htm => testing/web-platform/tests/XMLHttpRequest/send-sync-timeout.htm rename : testing/web-platform/tests/xhr/send-timeout-events.htm => testing/web-platform/tests/XMLHttpRequest/send-timeout-events.htm rename : testing/web-platform/tests/xhr/send-usp.any.js => testing/web-platform/tests/XMLHttpRequest/send-usp.any.js rename : testing/web-platform/tests/xhr/setrequestheader-after-send.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-after-send.htm rename : testing/web-platform/tests/xhr/setrequestheader-allow-empty-value.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-allow-empty-value.htm rename : testing/web-platform/tests/xhr/setrequestheader-allow-whitespace-in-value.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-allow-whitespace-in-value.htm rename : testing/web-platform/tests/xhr/setrequestheader-before-open.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-before-open.htm rename : testing/web-platform/tests/xhr/setrequestheader-bogus-name.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-bogus-name.htm rename : testing/web-platform/tests/xhr/setrequestheader-bogus-value.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-bogus-value.htm rename : testing/web-platform/tests/xhr/setrequestheader-case-insensitive.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-case-insensitive.htm rename : testing/web-platform/tests/xhr/setrequestheader-content-type.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-content-type.htm rename : testing/web-platform/tests/xhr/setrequestheader-header-allowed.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-header-allowed.htm rename : testing/web-platform/tests/xhr/setrequestheader-header-forbidden.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-header-forbidden.htm rename : testing/web-platform/tests/xhr/setrequestheader-open-setrequestheader.htm => testing/web-platform/tests/XMLHttpRequest/setrequestheader-open-setrequestheader.htm rename : testing/web-platform/tests/xhr/status-async.htm => testing/web-platform/tests/XMLHttpRequest/status-async.htm rename : testing/web-platform/tests/xhr/status-basic.htm => testing/web-platform/tests/XMLHttpRequest/status-basic.htm rename : testing/web-platform/tests/xhr/status-error.htm => testing/web-platform/tests/XMLHttpRequest/status-error.htm rename : testing/web-platform/tests/xhr/template-element.html => testing/web-platform/tests/XMLHttpRequest/template-element.html rename : testing/web-platform/tests/xhr/timeout-cors-async.htm => testing/web-platform/tests/XMLHttpRequest/timeout-cors-async.htm rename : testing/web-platform/tests/xhr/timeout-sync.htm => testing/web-platform/tests/XMLHttpRequest/timeout-sync.htm rename : testing/web-platform/tests/xhr/xmlhttprequest-basic.htm => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-basic.htm rename : testing/web-platform/tests/xhr/xmlhttprequest-eventtarget.htm => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-eventtarget.htm rename : testing/web-platform/tests/xhr/xmlhttprequest-network-error-sync.htm => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-network-error-sync.htm rename : testing/web-platform/tests/xhr/xmlhttprequest-network-error.htm => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-network-error.htm rename : testing/web-platform/tests/xhr/xmlhttprequest-sync-block-defer-scripts-subframe.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts-subframe.html rename : testing/web-platform/tests/xhr/xmlhttprequest-sync-block-defer-scripts.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-sync-block-defer-scripts.html rename : testing/web-platform/tests/xhr/xmlhttprequest-sync-block-scripts.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-sync-block-scripts.html rename : testing/web-platform/tests/xhr/xmlhttprequest-sync-not-hang-scriptloader-subframe.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader-subframe.html rename : testing/web-platform/tests/xhr/xmlhttprequest-sync-not-hang-scriptloader.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-sync-not-hang-scriptloader.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-aborted.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-aborted.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-abortedonmain.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-abortedonmain.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-overrides.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-overrides.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-overridesexpires.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-overridesexpires.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-reused.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-reused.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-simple.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-simple.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-synconmain.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-synconmain.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-twice.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-twice.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-worker-aborted.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-worker-aborted.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-worker-overrides.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overrides.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-worker-overridesexpires.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-worker-overridesexpires.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-worker-simple.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-worker-simple.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-worker-synconworker.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-worker-synconworker.html rename : testing/web-platform/tests/xhr/xmlhttprequest-timeout-worker-twice.html => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-timeout-worker-twice.html rename : testing/web-platform/tests/xhr/xmlhttprequest-unsent.htm => testing/web-platform/tests/XMLHttpRequest/xmlhttprequest-unsent.htm rename : testing/web-platform/tests/quirks/active-and-hover-manual.html => testing/web-platform/tests/quirks-mode/active-and-hover-manual.html rename : testing/web-platform/tests/quirks/blocks-ignore-line-height.html => testing/web-platform/tests/quirks-mode/blocks-ignore-line-height.html rename : testing/web-platform/tests/quirks/classname-query-after-sibling-adoption.html => testing/web-platform/tests/quirks-mode/classname-query-after-sibling-adoption.html rename : testing/web-platform/tests/quirks/hashless-hex-color.html => testing/web-platform/tests/quirks-mode/hashless-hex-color.html rename : testing/web-platform/tests/quirks/historical/list-item-bullet-size-ref.html => testing/web-platform/tests/quirks-mode/historical/list-item-bullet-size-ref.html rename : testing/web-platform/tests/quirks/historical/list-item-bullet-size.html => testing/web-platform/tests/quirks-mode/historical/list-item-bullet-size.html rename : testing/web-platform/tests/quirks/line-height-calculation.html => testing/web-platform/tests/quirks-mode/line-height-calculation.html rename : testing/web-platform/tests/quirks/percentage-height-calculation.html => testing/web-platform/tests/quirks-mode/percentage-height-calculation.html rename : testing/web-platform/tests/quirks/supports.html => testing/web-platform/tests/quirks-mode/supports.html rename : testing/web-platform/tests/quirks/table-cell-nowrap-minimum-width-calculation.html => testing/web-platform/tests/quirks-mode/table-cell-nowrap-minimum-width-calculation.html rename : testing/web-platform/tests/quirks/table-cell-width-calculation.html => testing/web-platform/tests/quirks-mode/table-cell-width-calculation.html rename : testing/web-platform/tests/quirks/unitless-length.html => testing/web-platform/tests/quirks-mode/unitless-length.html
This commit is contained in:
Родитель
2d283eea75
Коммит
35276d96fb
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,2 +1,2 @@
|
||||||
local: e2bb11b88bd45bdb2e055042e1624b74d414e73c
|
local: ac93fdadf1022211eec62258ad22b42cb37a6d14
|
||||||
upstream: 2e19bfdaee6edb2c1069c07e14037284167284a3
|
upstream: 45668a155fde7eb87c4c82721fc18fcf8c757c60
|
||||||
|
|
|
@ -1423,7 +1423,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"wasm/js/harness/index.js": [
|
"wasm/js/harness/index.js": [
|
||||||
"b1af046bac238e99d0bc73cc89faf3030149340f",
|
"654a29a03543230ddd2db8f8a3398f33233cbf69",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"wasm/js/harness/wasm-constants.js": [
|
"wasm/js/harness/wasm-constants.js": [
|
||||||
|
|
|
@ -68,7 +68,7 @@ matrix:
|
||||||
python: "2.7"
|
python: "2.7"
|
||||||
env:
|
env:
|
||||||
- secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM="
|
- secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM="
|
||||||
- JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=sauce:safari:11.0 PLATFORM='macOS 10.12'
|
- JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=sauce:safari:10.0 PLATFORM='macOS 10.12'
|
||||||
- os: linux
|
- os: linux
|
||||||
python: "2.7"
|
python: "2.7"
|
||||||
env:
|
env:
|
||||||
|
@ -87,7 +87,7 @@ matrix:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- libnss3-tools
|
- libnss3-tools
|
||||||
env: JOB=wpt_integration TOXENV=py27,py27-flake8 SCRIPT=tools/ci/ci_wpt.sh
|
env: JOB=wpt_integration TOXENV=py27 SCRIPT=tools/ci/ci_wpt.sh
|
||||||
exclude:
|
exclude:
|
||||||
- env: # exclude empty env from the top-level above
|
- env: # exclude empty env from the top-level above
|
||||||
allow_failures:
|
allow_failures:
|
||||||
|
@ -100,7 +100,7 @@ matrix:
|
||||||
- JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=sauce:MicrosoftEdge:14.14393 PLATFORM='Windows 10'
|
- JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=sauce:MicrosoftEdge:14.14393 PLATFORM='Windows 10'
|
||||||
- env:
|
- env:
|
||||||
- secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM="
|
- secure: "YTSXPwI0DyCA1GhYrLT9KMEV6b7QQKuEeaQgeFDP38OTzJ1+cIj3CC4SRNqbnJ/6SJwPGcdqSxLuV8m4e5HFFnyCcQnJe6h8EMsTehZ7W3j/fP9UYrJqYqvGpe3Vj3xblO5pwBYmq7sg3jAmmuCgAgOW6VGf7cRMucrsmFeo7VM="
|
||||||
- JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=sauce:safari:11.0 PLATFORM='macOS 10.12'
|
- JOB=stability SCRIPT=tools/ci/ci_stability.sh PRODUCT=sauce:safari:10.0 PLATFORM='macOS 10.12'
|
||||||
script:
|
script:
|
||||||
- ./tools/ci/run.sh
|
- ./tools/ci/run.sh
|
||||||
cache:
|
cache:
|
||||||
|
|
|
@ -1,108 +1,58 @@
|
||||||
function makeCanvas() {
|
function testCanvasDisplayingPattern(canvas)
|
||||||
return new Promise(resolve => {
|
{
|
||||||
var testCanvas = document.createElement("canvas");
|
var tolerance = 5; // for creating ImageBitmap from a video, the tolerance needs to be high
|
||||||
testCanvas.width = 20;
|
_assertPixelApprox(canvas, 5,5, 255,0,0,255, "5,5", "255,0,0,255", tolerance);
|
||||||
testCanvas.height = 20;
|
_assertPixelApprox(canvas, 15,5, 0,255,0,255, "15,5", "0,255,0,255", tolerance);
|
||||||
var testCtx = testCanvas.getContext("2d");
|
_assertPixelApprox(canvas, 5,15, 0,0,255,255, "5,15", "0,0,255,255", tolerance);
|
||||||
testCtx.fillStyle = "rgb(255, 0, 0)";
|
_assertPixelApprox(canvas, 15,15, 0,0,0,255, "15,15", "0,0,0,255", tolerance);
|
||||||
testCtx.fillRect(0, 0, 10, 10);
|
}
|
||||||
testCtx.fillStyle = "rgb(0, 255, 0)";
|
|
||||||
testCtx.fillRect(10, 0, 10, 10);
|
function testDrawImageBitmap(source)
|
||||||
testCtx.fillStyle = "rgb(0, 0, 255)";
|
{
|
||||||
testCtx.fillRect(0, 10, 10, 10);
|
var canvas = document.createElement("canvas");
|
||||||
testCtx.fillStyle = "rgb(0, 0, 0)";
|
canvas.width = 20;
|
||||||
testCtx.fillRect(10, 10, 10, 10);
|
canvas.height = 20;
|
||||||
resolve(testCanvas);
|
var ctx = canvas.getContext("2d");
|
||||||
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
|
return createImageBitmap(source).then(imageBitmap => {
|
||||||
|
ctx.drawImage(imageBitmap, 0, 0);
|
||||||
|
testCanvasDisplayingPattern(canvas);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeOffscreenCanvas() {
|
function initializeTestCanvas(testCanvas)
|
||||||
return new Promise(resolve => {
|
{
|
||||||
let canvas = new OffscreenCanvas(20, 20);
|
testCanvas.width = 20;
|
||||||
var testCtx = canvas.getContext("2d");
|
testCanvas.height = 20;
|
||||||
testCtx.fillStyle = "rgb(255, 0, 0)";
|
var testCtx = testCanvas.getContext("2d");
|
||||||
testCtx.fillRect(0, 0, 10, 10);
|
testCtx.fillStyle = "rgb(255, 0, 0)";
|
||||||
testCtx.fillStyle = "rgb(0, 255, 0)";
|
testCtx.fillRect(0, 0, 10, 10);
|
||||||
testCtx.fillRect(10, 0, 10, 10);
|
testCtx.fillStyle = "rgb(0, 255, 0)";
|
||||||
testCtx.fillStyle = "rgb(0, 0, 255)";
|
testCtx.fillRect(10, 0, 10, 10);
|
||||||
testCtx.fillRect(0, 10, 10, 10);
|
testCtx.fillStyle = "rgb(0, 0, 255)";
|
||||||
testCtx.fillStyle = "rgb(0, 0, 0)";
|
testCtx.fillRect(0, 10, 10, 10);
|
||||||
testCtx.fillRect(10, 10, 10, 10);
|
testCtx.fillStyle = "rgb(0, 0, 0)";
|
||||||
resolve(canvas);
|
testCtx.fillRect(10, 10, 10, 10);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeVideo() {
|
function initializeImageData(imgData, width, height)
|
||||||
return new Promise(function(resolve, reject) {
|
{
|
||||||
var video = document.createElement("video");
|
for (var i = 0; i < width * height * 4; i+=4) {
|
||||||
video.oncanplaythrough = function() {
|
imgData.data[i] = 0;
|
||||||
resolve(video);
|
imgData.data[i + 1] = 0;
|
||||||
};
|
imgData.data[i + 2] = 0;
|
||||||
video.onerror = reject;
|
imgData.data[i + 3] = 255; //alpha channel: 255
|
||||||
video.src = getVideoURI("/images/pattern");
|
}
|
||||||
});
|
var halfWidth = width/2;
|
||||||
|
var halfHeight = height/2;
|
||||||
|
// initialize to R, G, B, Black, with each one 10*10 pixels
|
||||||
|
for (var i = 0; i < halfHeight; i++)
|
||||||
|
for (var j = 0; j < halfWidth; j++)
|
||||||
|
imgData.data[i * width * 4 + j * 4] = 255;
|
||||||
|
for (var i = 0; i < halfHeight; i++)
|
||||||
|
for (var j = halfWidth; j < width; j++)
|
||||||
|
imgData.data[i * width * 4 + j * 4 + 1] = 255;
|
||||||
|
for (var i = halfHeight; i < height; i++)
|
||||||
|
for (var j = 0; j < halfWidth; j++)
|
||||||
|
imgData.data[i * width * 4 + j * 4 + 2] = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeImage() {
|
|
||||||
return new Promise(resolve => {
|
|
||||||
var img = new Image();
|
|
||||||
img.onload = function() {
|
|
||||||
resolve(img);
|
|
||||||
};
|
|
||||||
img.src = "/images/pattern.png";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function makeImageData() {
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
var width = 20, height = 20;
|
|
||||||
var imgData = new ImageData(width, height);
|
|
||||||
for (var i = 0; i < width * height * 4; i += 4) {
|
|
||||||
imgData.data[i] = 0;
|
|
||||||
imgData.data[i + 1] = 0;
|
|
||||||
imgData.data[i + 2] = 0;
|
|
||||||
imgData.data[i + 3] = 255; //alpha channel: 255
|
|
||||||
}
|
|
||||||
var halfWidth = width / 2;
|
|
||||||
var halfHeight = height / 2;
|
|
||||||
// initialize to R, G, B, Black, with each one 10*10 pixels
|
|
||||||
for (var i = 0; i < halfHeight; i++)
|
|
||||||
for (var j = 0; j < halfWidth; j++)
|
|
||||||
imgData.data[i * width * 4 + j * 4] = 255;
|
|
||||||
for (var i = 0; i < halfHeight; i++)
|
|
||||||
for (var j = halfWidth; j < width; j++)
|
|
||||||
imgData.data[i * width * 4 + j * 4 + 1] = 255;
|
|
||||||
for (var i = halfHeight; i < height; i++)
|
|
||||||
for (var j = 0; j < halfWidth; j++)
|
|
||||||
imgData.data[i * width * 4 + j * 4 + 2] = 255;
|
|
||||||
resolve(imgData);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function makeImageBitmap() {
|
|
||||||
return makeCanvas().then(canvas => {
|
|
||||||
return createImageBitmap(canvas);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function makeBlob() {
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
xhr.open("GET", '/images/pattern.png');
|
|
||||||
xhr.responseType = 'blob';
|
|
||||||
xhr.send();
|
|
||||||
xhr.onload = function() {
|
|
||||||
resolve(xhr.response);
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var imageSourceTypes = [
|
|
||||||
{ name: 'an HTMLCanvasElement', factory: makeCanvas },
|
|
||||||
{ name: 'an HTMLVideoElement', factory: makeVideo },
|
|
||||||
{ name: 'an HTMLImageElement', factory: makeImage },
|
|
||||||
{ name: 'an OffscreenCanvas', factory: makeOffscreenCanvas },
|
|
||||||
{ name: 'an ImageData', factory: makeImageData },
|
|
||||||
{ name: 'an ImageBitmap', factory: makeImageBitmap },
|
|
||||||
{ name: 'a Blob', factory: makeBlob },
|
|
||||||
];
|
|
||||||
|
|
|
@ -4,46 +4,72 @@
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<script src="/common/canvas-tests.js"></script>
|
<script src="/common/canvas-tests.js"></script>
|
||||||
<script src="/common/media.js"></script>
|
|
||||||
<script src="common.js"></script>
|
<script src="common.js"></script>
|
||||||
<link rel="stylesheet" href="/common/canvas-tests.css">
|
<link rel="stylesheet" href="/common/canvas-tests.css">
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
function testCanvasDisplayingPattern(canvas)
|
(function() {
|
||||||
{
|
|
||||||
var tolerance = 5; // for creating ImageBitmap from a video, the tolerance needs to be high
|
|
||||||
_assertPixelApprox(canvas, 5,5, 255,0,0,255, "5,5", "255,0,0,255", tolerance);
|
|
||||||
_assertPixelApprox(canvas, 15,5, 0,255,0,255, "15,5", "0,255,0,255", tolerance);
|
|
||||||
_assertPixelApprox(canvas, 5,15, 0,0,255,255, "5,15", "0,0,255,255", tolerance);
|
|
||||||
_assertPixelApprox(canvas, 15,15, 0,0,0,255, "15,15", "0,0,0,255", tolerance);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testDrawImageBitmap(source, args = [])
|
|
||||||
{
|
|
||||||
var canvas = document.createElement("canvas");
|
|
||||||
canvas.width = 20;
|
|
||||||
canvas.height = 20;
|
|
||||||
var ctx = canvas.getContext("2d");
|
|
||||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
||||||
return createImageBitmap(source, ...args).then(imageBitmap => {
|
|
||||||
ctx.drawImage(imageBitmap, 0, 0);
|
|
||||||
testCanvasDisplayingPattern(canvas);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let { name, factory } of imageSourceTypes) {
|
|
||||||
promise_test(function() {
|
promise_test(function() {
|
||||||
return factory().then(function(img) {
|
return new Promise(function(resolve, reject) {
|
||||||
|
var img = new Image();
|
||||||
|
img.onload = function() { resolve(img); };
|
||||||
|
img.src = "/images/pattern.png";
|
||||||
|
}).then(function(img) {
|
||||||
return testDrawImageBitmap(img);
|
return testDrawImageBitmap(img);
|
||||||
});
|
});
|
||||||
}, `createImageBitmap from ${name}, and drawImage on the created ImageBitmap`);
|
}, "createImageBitmap from a HTMLImageElement, and drawImage on the created ImageBitmap");
|
||||||
|
|
||||||
promise_test(function() {
|
promise_test(function() {
|
||||||
return factory().then(function(img) {
|
return new Promise(function(resolve, reject) {
|
||||||
return testDrawImageBitmap(img, [20, 20, -20, -20]);
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("GET", '/images/pattern.png');
|
||||||
|
xhr.responseType = 'blob';
|
||||||
|
xhr.send();
|
||||||
|
xhr.onload = function() {
|
||||||
|
blob = xhr.response;
|
||||||
|
resolve(blob);
|
||||||
|
};
|
||||||
|
}).then(function(blob) {
|
||||||
|
return testDrawImageBitmap(blob);
|
||||||
});
|
});
|
||||||
}, `createImageBitmap from ${name} with negative sw/sh, and drawImage on the created ImageBitmap`);
|
}, "createImageBitmap from a Blob, and drawImage on the created ImageBitmap");
|
||||||
}
|
|
||||||
|
promise_test(function() {
|
||||||
|
var testCanvas = document.createElement("canvas");
|
||||||
|
initializeTestCanvas(testCanvas);
|
||||||
|
return testDrawImageBitmap(testCanvas);
|
||||||
|
}, "createImageBitmap from a HTMLCanvasElement, and drawImage on the created ImageBitmap");
|
||||||
|
|
||||||
|
promise_test(function() {
|
||||||
|
var testCanvas = document.createElement("canvas");
|
||||||
|
initializeTestCanvas(testCanvas);
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
createImageBitmap(testCanvas).then(function(bitmap) {
|
||||||
|
resolve(bitmap);
|
||||||
|
});
|
||||||
|
}).then(function(bitmap) {
|
||||||
|
return testDrawImageBitmap(bitmap);
|
||||||
|
});
|
||||||
|
}, "createImageBitmap from an ImageBitmap, and drawImage on the created ImageBitmap");
|
||||||
|
|
||||||
|
promise_test(function() {
|
||||||
|
var imgData = new ImageData(20, 20);
|
||||||
|
initializeImageData(imgData, 20, 20);
|
||||||
|
return testDrawImageBitmap(imgData);
|
||||||
|
}, "createImageBitmap from an ImageData, and drawImage on the created ImageBitmap");
|
||||||
|
|
||||||
|
promise_test(function() {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
var video = document.createElement("video");
|
||||||
|
video.oncanplaythrough = function() {
|
||||||
|
resolve(video);
|
||||||
|
};
|
||||||
|
video.src = "/images/pattern.ogv";
|
||||||
|
}).then(function(video) {
|
||||||
|
return testDrawImageBitmap(video);
|
||||||
|
});
|
||||||
|
}, "createImageBitmap from a HTMLVideoElement, and drawImage on the created ImageBitmap");
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,10 +1,24 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<script src="/common/media.js"></script>
|
|
||||||
<script src="common.js"></script>
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
function makeCanvas() {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
let canvas = document.createElement('canvas');
|
||||||
|
canvas.setAttribute('width', '10');
|
||||||
|
canvas.setAttribute('height', '10');
|
||||||
|
resolve(canvas);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeOffscreenCanvas() {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
let canvas = new OffscreenCanvas(10, 10);
|
||||||
|
resolve(canvas);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function makeOversizedCanvas() {
|
function makeOversizedCanvas() {
|
||||||
|
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
|
@ -22,6 +36,46 @@ function makeOversizedOffscreenCanvas() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function makeVideo() {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
let video = document.createElement('video');
|
||||||
|
video.addEventListener('canplaythrough', resolve.bind(undefined, video), false);
|
||||||
|
video.src = '/media/A4.ogv';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeImage() {
|
||||||
|
return makeCanvas().then(canvas => {
|
||||||
|
let image = new Image();
|
||||||
|
image.src = canvas.toDataURL();
|
||||||
|
return new Promise(resolve => {
|
||||||
|
image.onload = resolve.bind(undefined, image);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeImageData() {
|
||||||
|
return makeCanvas().then(canvas => {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
resolve(canvas.getContext('2d').getImageData(0, 0, 10, 10));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeImageBitmap() {
|
||||||
|
return makeCanvas().then(canvas => {
|
||||||
|
return createImageBitmap(canvas);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeBlob() {
|
||||||
|
return makeCanvas().then(canvas => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
canvas.toBlob(resolve);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function makeInvalidBlob() {
|
function makeInvalidBlob() {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
resolve(new Blob()); // Blob with no data cannot be decoded.
|
resolve(new Blob()); // Blob with no data cannot be decoded.
|
||||||
|
@ -31,23 +85,33 @@ function makeInvalidBlob() {
|
||||||
function makeBrokenImage() {
|
function makeBrokenImage() {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
const image = new Image();
|
const image = new Image();
|
||||||
image.src = "data:,x";
|
image.src = "data,x";
|
||||||
image.onerror = () => resolve(image);
|
image.onerror = () => resolve(image);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeAvailableButBrokenImage() {
|
function makeAvailableButBrokenImage() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise(resolve => {
|
||||||
const image = new Image();
|
const image = new Image();
|
||||||
image.src = "/images/broken.png";
|
image.src = "/images/broken.png";
|
||||||
image.onload = () => resolve(image);
|
image.onload = () => resolve(image);
|
||||||
image.onerror = reject;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
imageSourceTypes = [
|
||||||
|
{ name: 'HTMLImageElement', factory: makeImage },
|
||||||
|
{ name: 'HTMLVideoElement', factory: makeVideo },
|
||||||
|
{ name: 'HTMLCanvasElement', factory: makeCanvas },
|
||||||
|
{ name: 'OffscreenCanvas', factory: makeOffscreenCanvas },
|
||||||
|
{ name: 'ImageData', factory: makeImageData },
|
||||||
|
{ name: 'ImageBitmap', factory: makeImageBitmap },
|
||||||
|
{ name: 'Blob', factory: makeBlob },
|
||||||
|
];
|
||||||
|
|
||||||
testCases = [
|
testCases = [
|
||||||
{
|
{
|
||||||
description: 'createImageBitmap with a <sourceType> source and sw set to 0',
|
description: 'createImageBitmap with a <sourceType> source and sw set to ' +
|
||||||
|
'0 rejects with a RangeError.',
|
||||||
promiseTestFunction:
|
promiseTestFunction:
|
||||||
(source, t) => {
|
(source, t) => {
|
||||||
return promise_rejects(t, new RangeError(),
|
return promise_rejects(t, new RangeError(),
|
||||||
|
@ -55,7 +119,8 @@ testCases = [
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: 'createImageBitmap with a <sourceType> source and sh set to 0',
|
description: 'createImageBitmap with a <sourceType> source and sh set to ' +
|
||||||
|
'0 rejects with a RangeError.',
|
||||||
promiseTestFunction:
|
promiseTestFunction:
|
||||||
(source, t) => {
|
(source, t) => {
|
||||||
return promise_rejects(t, new RangeError(),
|
return promise_rejects(t, new RangeError(),
|
||||||
|
@ -65,11 +130,10 @@ testCases = [
|
||||||
{
|
{
|
||||||
// This case is not explicitly documented in the specification for
|
// This case is not explicitly documented in the specification for
|
||||||
// createImageBitmap, but it is expected that internal failures cause
|
// createImageBitmap, but it is expected that internal failures cause
|
||||||
// InvalidStateError.
|
|
||||||
//
|
//
|
||||||
// Note: https://bugs.chromium.org/p/chromium/issues/detail?id=799025
|
|
||||||
description: 'createImageBitmap with a <sourceType> source and oversized ' +
|
description: 'createImageBitmap with a <sourceType> source and oversized ' +
|
||||||
'(unallocatable) crop region',
|
'(unallocatable) crop region rejects with an InvalidStateError ' +
|
||||||
|
'DOMException.',
|
||||||
promiseTestFunction:
|
promiseTestFunction:
|
||||||
(source, t) => {
|
(source, t) => {
|
||||||
return promise_rejects(t, new DOMException('', 'InvalidStateError'),
|
return promise_rejects(t, new DOMException('', 'InvalidStateError'),
|
||||||
|
@ -93,61 +157,55 @@ imageSourceTypes.forEach(imageSourceType => {
|
||||||
|
|
||||||
promise_test( t => {
|
promise_test( t => {
|
||||||
return promise_rejects(t, new TypeError(), createImageBitmap(undefined));
|
return promise_rejects(t, new TypeError(), createImageBitmap(undefined));
|
||||||
}, "createImageBitmap with undefined image source.");
|
}, "createImageBitmap with undefined image source rejects with a TypeError.");
|
||||||
|
|
||||||
promise_test( t => {
|
promise_test( t => {
|
||||||
return promise_rejects(t, new TypeError(), createImageBitmap(null));
|
return promise_rejects(t, new TypeError(), createImageBitmap(null));
|
||||||
}, "createImageBitmap with null image source.");
|
}, "createImageBitmap with null image source rejects with a TypeError.");
|
||||||
|
|
||||||
promise_test( t => {
|
promise_test( t => {
|
||||||
return promise_rejects(t, "InvalidStateError",
|
return promise_rejects(t, "InvalidStateError",
|
||||||
createImageBitmap(new Image()));
|
createImageBitmap(new Image()));
|
||||||
}, "createImageBitmap with empty image source.");
|
}, "createImageBitmap with empty image source rejects with a InvalidStateError.");
|
||||||
|
|
||||||
promise_test( t => {
|
promise_test( t => {
|
||||||
return promise_rejects(t, "InvalidStateError",
|
return promise_rejects(t, "InvalidStateError",
|
||||||
createImageBitmap(document.createElement('video')));
|
createImageBitmap(document.createElement('video')));
|
||||||
}, "createImageBitmap with empty video source.");
|
}, "createImageBitmap with empty video source rejects with a InvalidStateError.");
|
||||||
|
|
||||||
promise_test( t => {
|
promise_test( t => {
|
||||||
return makeOversizedCanvas().then(canvas => {
|
return makeOversizedCanvas().then(canvas => {
|
||||||
return promise_rejects(t, "InvalidStateError",
|
return promise_rejects(t, "InvalidStateError",
|
||||||
createImageBitmap(canvas));
|
createImageBitmap(canvas));
|
||||||
});
|
});
|
||||||
}, "createImageBitmap with an oversized canvas source.");
|
}, "createImageBitmap with an oversized canvas source rejects with a RangeError.");
|
||||||
|
|
||||||
promise_test( t => {
|
promise_test( t => {
|
||||||
return makeOversizedOffscreenCanvas().then(offscreenCanvas => {
|
return makeOversizedOffscreenCanvas().then(offscreenCanvas => {
|
||||||
return promise_rejects(t, "InvalidStateError",
|
return promise_rejects(t, "InvalidStateError",
|
||||||
createImageBitmap(offscreenCanvas));
|
createImageBitmap(offscreenCanvas));
|
||||||
});
|
});
|
||||||
}, "createImageBitmap with an invalid OffscreenCanvas source.");
|
}, "createImageBitmap with an invalid OffscreenCanvas source rejects with a RangeError.");
|
||||||
|
|
||||||
promise_test( t => {
|
promise_test( t => {
|
||||||
return makeInvalidBlob().then(blob => {
|
return makeInvalidBlob().then(blob => {
|
||||||
return promise_rejects(t, "InvalidStateError",
|
return promise_rejects(t, "InvalidStateError",
|
||||||
createImageBitmap(blob));
|
createImageBitmap(blob));
|
||||||
});
|
});
|
||||||
}, "createImageBitmap with an undecodable blob source.");
|
}, "createImageBitmap with an undecodable blob source rejects with an InvalidStateError.");
|
||||||
|
|
||||||
promise_test( t => {
|
promise_test( t => {
|
||||||
return makeBrokenImage().then(image => {
|
return makeBrokenImage().then(image => {
|
||||||
return promise_rejects(t, "InvalidStateError",
|
return promise_rejects(t, "InvalidStateError",
|
||||||
createImageBitmap(image));
|
createImageBitmap(image));
|
||||||
});
|
});
|
||||||
}, "createImageBitmap with a broken image source.");
|
}, "createImageBitmap with a broken image source rejects with an InvalidStateError.");
|
||||||
|
|
||||||
promise_test( t => {
|
promise_test( t => {
|
||||||
return makeAvailableButBrokenImage().then(image => {
|
return makeAvailableButBrokenImage().then(image => {
|
||||||
return promise_rejects(t, "InvalidStateError",
|
return promise_rejects(t, "InvalidStateError",
|
||||||
createImageBitmap(image));
|
createImageBitmap(image));
|
||||||
});
|
});
|
||||||
}, "createImageBitmap with an available but undecodable image source.");
|
}, "createImageBitmap with an available but undecodable image source rejects with an InvalidStateError.");
|
||||||
|
|
||||||
promise_test( t => {
|
|
||||||
return makeImageBitmap().then(bitmap => {
|
|
||||||
bitmap.close()
|
|
||||||
return promise_rejects(t, "InvalidStateError", createImageBitmap(bitmap));
|
|
||||||
});
|
|
||||||
}, "createImageBitmap with a closed ImageBitmap.");
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
var test_result = 'test1_OK';
|
|
@ -0,0 +1,25 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Test file</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.block {
|
||||||
|
height: 5000px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
window.test_result = 'test3_OK';
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<a id="block1"></a>
|
||||||
|
<div class="block"></div>
|
||||||
|
|
||||||
|
<a id="block2"></a>
|
||||||
|
<div class="block"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,122 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Blob and File reference URL Test(1)</title>
|
||||||
|
<link rel=help href="http://dev.w3.org/2006/webapi/FileAPI/#convenienceAPI">
|
||||||
|
<link rel=author title="Breezewish" href="mailto:me@breeswish.org">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<form name="upload">
|
||||||
|
<input type="file" id="fileChooser">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<p>Test steps:</p>
|
||||||
|
<ol>
|
||||||
|
<li>Download the <a href="support/file_test1.js">file</a>.</li>
|
||||||
|
<li>Select the file in the file inputbox to run the test.</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="log"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
var fileChooser = document.querySelector('#fileChooser');
|
||||||
|
|
||||||
|
setup({explicit_done: true});
|
||||||
|
setup({explicit_timeout: true});
|
||||||
|
|
||||||
|
//Run the test when user selects a file
|
||||||
|
|
||||||
|
on_event(fileChooser, 'change', function() {
|
||||||
|
|
||||||
|
var testCount = 10000;
|
||||||
|
|
||||||
|
test(function() {
|
||||||
|
|
||||||
|
var list = [], file = fileChooser.files[0];
|
||||||
|
|
||||||
|
for (var i = 0; i <= testCount; i++) {
|
||||||
|
list.push(window.URL.createObjectURL(file));
|
||||||
|
}
|
||||||
|
|
||||||
|
list.sort();
|
||||||
|
|
||||||
|
for (var i = 0; i < testCount; i++) {
|
||||||
|
assert_not_equals(list[i], list[i+1], 'generated Blob URL should be unique');
|
||||||
|
}
|
||||||
|
|
||||||
|
}, 'Check whether generated Blob/File URL is unique (Notice: only generate for ' + testCount + ' times)');
|
||||||
|
|
||||||
|
|
||||||
|
async_test(function(t) {
|
||||||
|
|
||||||
|
var url = URL.createObjectURL(fileChooser.files[0]);
|
||||||
|
var expected_file_content = "var test_result = 'test1_OK';";
|
||||||
|
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', url, true);
|
||||||
|
xhr.onreadystatechange = t.step_func(function() {
|
||||||
|
switch (xhr.readyState) {
|
||||||
|
case xhr.DONE:
|
||||||
|
assert_equals(xhr.status, 200, 'status code should be 200');
|
||||||
|
assert_equals(xhr.responseText, expected_file_content);
|
||||||
|
t.done();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
xhr.send();
|
||||||
|
|
||||||
|
}, 'Check whether Blob/File URL could be used in XHR requests and could get expected data');
|
||||||
|
|
||||||
|
async_test(function(t) {
|
||||||
|
|
||||||
|
var url = URL.createObjectURL(fileChooser.files[0]);
|
||||||
|
var expected_run_result = "test1_OK";
|
||||||
|
|
||||||
|
//expected file content:
|
||||||
|
// var test_result = 'test1_OK';
|
||||||
|
|
||||||
|
var e = document.createElement('script');
|
||||||
|
e.setAttribute('type', 'text/javascript');
|
||||||
|
e.setAttribute('src', url);
|
||||||
|
e.onload = t.step_func_done(function() {
|
||||||
|
assert_equals(test_result, expected_run_result);
|
||||||
|
});
|
||||||
|
|
||||||
|
document.body.appendChild(e);
|
||||||
|
|
||||||
|
}, 'Check whether Blob/File URL could be used in tags src like <script>');
|
||||||
|
|
||||||
|
async_test(function(t) {
|
||||||
|
|
||||||
|
var url = URL.createObjectURL(fileChooser.files[0]);
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', url, true);
|
||||||
|
xhr.onreadystatechange = t.step_func(function() {
|
||||||
|
switch (xhr.readyState) {
|
||||||
|
case xhr.DONE:
|
||||||
|
assert_equals(xhr.status, 500, 'status code should be 500 if Blob URI is revoked.');
|
||||||
|
t.done();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
xhr.send();
|
||||||
|
|
||||||
|
}, 'Check whether revokeObjectURL works well');
|
||||||
|
|
||||||
|
done();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,71 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Blob and File reference URL Test(3)</title>
|
||||||
|
<link rel=help href="http://dev.w3.org/2006/webapi/FileAPI/#convenienceAPI">
|
||||||
|
<link rel=author title="Breezewish" href="mailto:me@breeswish.org">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<form name="upload">
|
||||||
|
<input type="file" id="fileChooser">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<p>Test steps:</p>
|
||||||
|
<ol>
|
||||||
|
<li>Download the <a href="support/file_test3.html">file</a>.</li>
|
||||||
|
<li>Select the file in the file inputbox and the test will start.</li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="log"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
var fileChooser = document.querySelector('#fileChooser');
|
||||||
|
|
||||||
|
setup({explicit_done: true});
|
||||||
|
setup({explicit_timeout: true});
|
||||||
|
|
||||||
|
on_event(fileChooser, 'change', function() {
|
||||||
|
|
||||||
|
async_test(function(t) {
|
||||||
|
|
||||||
|
var url = URL.createObjectURL(fileChooser.files[0]);
|
||||||
|
|
||||||
|
var e = document.createElement('iframe');
|
||||||
|
e.setAttribute('src', url);
|
||||||
|
e.setAttribute('style', 'display:none;');
|
||||||
|
document.body.appendChild(e);
|
||||||
|
|
||||||
|
e.contentWindow.document.body.onload = t.step_func_done(function() {
|
||||||
|
assert_equals(e.contentWindow.test_result, 'test3_OK');
|
||||||
|
});
|
||||||
|
|
||||||
|
}, 'Check whether the iframe content could be accessed when using Blob/File URL in the same origin.');
|
||||||
|
|
||||||
|
async_test(function(t) {
|
||||||
|
|
||||||
|
var url = URL.createObjectURL(fileChooser.files[0]);
|
||||||
|
url += '#block2';
|
||||||
|
|
||||||
|
var e = document.createElement('iframe');
|
||||||
|
e.setAttribute('src', url);
|
||||||
|
document.body.appendChild(e);
|
||||||
|
|
||||||
|
e.contentWindow.document.body.onload = t.step_func_done(function() {
|
||||||
|
assert_equals(e.contentWindow.scrollY, 5000);
|
||||||
|
});
|
||||||
|
|
||||||
|
}, 'Check whether the Blob/File URL fragment is implemented.');
|
||||||
|
|
||||||
|
done();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,42 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>FileReader NotReadableError Test</title>
|
|
||||||
<link rel="author" title="Intel" href="http://www.intel.com">
|
|
||||||
<link rel="help" href="https://w3c.github.io/FileAPI/#dfn-error-codes">
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
<form name="upload">
|
|
||||||
<input type="file" id="fileChooser"><br><input type="button" id="start" value="start">
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<p>Test steps:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Download the <a href="support/file_test1.txt">file</a>.</li>
|
|
||||||
<li>Select the file in the file inputbox.</li>
|
|
||||||
<li>Delete the file's readable permission.</li>
|
|
||||||
<li>Click the 'start' button.</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
|
|
||||||
const fileChooser = document.querySelector('#fileChooser');
|
|
||||||
|
|
||||||
setup({explicit_done: true});
|
|
||||||
setup({explicit_timeout: true});
|
|
||||||
|
|
||||||
on_event(document.querySelector('#start'), 'click', () => {
|
|
||||||
async_test(t => {
|
|
||||||
const reader = new FileReader();
|
|
||||||
reader.readAsArrayBuffer(fileChooser.files[0]);
|
|
||||||
reader.onloadend = t.step_func_done(event => {
|
|
||||||
assert_equals(event.target.readyState, FileReader.DONE);
|
|
||||||
assert_equals(reader.error.name, "NotReadableError");
|
|
||||||
});
|
|
||||||
}, 'FileReader.error should be NotReadableError if the file is unreadable');
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>FileReader SecurityError Test</title>
|
|
||||||
<link rel="author" title="Intel" href="http://www.intel.com">
|
|
||||||
<link rel="help" href="https://w3c.github.io/FileAPI/#dfn-error-codes">
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
<form name="upload">
|
|
||||||
<input type="file" id="fileChooser"><br><input type="button" id="start" value="start">
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<p>Test steps:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Select a system sensitive file (e.g. files in /usr/bin, password files,
|
|
||||||
and other native operating system executables) in the file inputbox.</li>
|
|
||||||
<li>Click the 'start' button.</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
|
|
||||||
const fileChooser = document.querySelector('#fileChooser');
|
|
||||||
|
|
||||||
setup({explicit_done: true});
|
|
||||||
setup({explicit_timeout: true});
|
|
||||||
|
|
||||||
on_event(document.querySelector('#start'), 'click', () => {
|
|
||||||
async_test(t => {
|
|
||||||
const reader = new FileReader();
|
|
||||||
reader.readAsArrayBuffer(fileChooser.files[0]);
|
|
||||||
reader.onloadend = t.step_func_done(event => {
|
|
||||||
assert_equals(event.target.readyState, FileReader.DONE);
|
|
||||||
assert_equals(reader.error.name, "SecurityError");
|
|
||||||
});
|
|
||||||
}, 'FileReader.error should be SECURITY_ERROR if the file is a system sensitive file');
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>Revoking blob URL used with Request/fetch</title>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
promise_test(function(t) {
|
||||||
|
const blob = new Blob(["test"]);
|
||||||
|
const url = URL.createObjectURL(blob);
|
||||||
|
const request = new Request(url);
|
||||||
|
|
||||||
|
// Revoke the object URL. Request should take a reference to the blob as
|
||||||
|
// soon as it receives it in open(), so the request succeeds even though we
|
||||||
|
// revoke the URL before calling fetch().
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
|
||||||
|
return fetch(request).then(response => response.text()).then(text => {
|
||||||
|
assert_equals(text, 'test');
|
||||||
|
});
|
||||||
|
}, "Revoke blob URL after creating Request, will fetch");
|
||||||
|
|
||||||
|
promise_test(function(t) {
|
||||||
|
const blob = new Blob(["test"]);
|
||||||
|
const url = URL.createObjectURL(blob);
|
||||||
|
|
||||||
|
return fetch(url).then(response => response.text()).then(text => {
|
||||||
|
assert_equals(text, 'test');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Revoke the object URL. fetch should have already resolved the blob URL.
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
}, "Revoke blob URL after fetch, will fetch");
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const blob = new Blob(["test"]);
|
||||||
|
const url = URL.createObjectURL(blob);
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
const request = new Request(url);
|
||||||
|
return promise_rejects(t, new TypeError, fetch(request));
|
||||||
|
}, "Revoke blob URL before creating Request, network error (after fetch)")
|
||||||
|
</script>
|
|
@ -0,0 +1,38 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>Revoking blob URL used with XMLHttpRequest</title>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
async_test(function(t) {
|
||||||
|
var blob = new Blob(["test"]);
|
||||||
|
var url = URL.createObjectURL(blob);
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("GET", url);
|
||||||
|
|
||||||
|
// Revoke the object URL. XHR should take a reference to the blob as soon as
|
||||||
|
// it receives it in open(), so the request succeeds even though we revoke the
|
||||||
|
// URL before calling send().
|
||||||
|
URL.revokeObjectURL(url);
|
||||||
|
|
||||||
|
xhr.send();
|
||||||
|
|
||||||
|
xhr.onload = t.step_func_done(function() {
|
||||||
|
assert_equals(xhr.response, "test");
|
||||||
|
})
|
||||||
|
xhr.onerror = t.step_func(function() {
|
||||||
|
assert_unreached("Got unexpected error event");
|
||||||
|
})
|
||||||
|
}, "Revoke blob URL after open(), will fetch");
|
||||||
|
|
||||||
|
async_test(t => {
|
||||||
|
const blob = new Blob(["test"]),
|
||||||
|
blobURL = URL.createObjectURL(blob),
|
||||||
|
client = new XMLHttpRequest
|
||||||
|
URL.revokeObjectURL(blobURL)
|
||||||
|
client.open("GET", blobURL)
|
||||||
|
client.onload = t.step_func(() => assert_unreached("Got unexpected load event"))
|
||||||
|
client.onerror = t.step_func_done()
|
||||||
|
client.send()
|
||||||
|
}, "Revoke blob URL before open(), network error (after send())")
|
||||||
|
</script>
|
|
@ -47,7 +47,7 @@ test_first_argument(["bits", new Blob(["bits"]), new Blob(), new Uint8Array([0x5
|
||||||
test_first_argument([12], 2, "Number in fileBits");
|
test_first_argument([12], 2, "Number in fileBits");
|
||||||
test_first_argument([[1,2,3]], 5, "Array in fileBits");
|
test_first_argument([[1,2,3]], 5, "Array in fileBits");
|
||||||
test_first_argument([{}], 15, "Object in fileBits"); // "[object Object]"
|
test_first_argument([{}], 15, "Object in fileBits"); // "[object Object]"
|
||||||
test_first_argument([document.body], 24, "HTMLBodyElement in fileBits"); // "[object HTMLBodyElement]"
|
test_first_argument([document], 21, "HTMLDocument in fileBits"); // "[object HTMLDocument]"
|
||||||
test_first_argument([to_string_obj], 8, "Object with toString in fileBits");
|
test_first_argument([to_string_obj], 8, "Object with toString in fileBits");
|
||||||
test_first_argument({[Symbol.iterator]() {
|
test_first_argument({[Symbol.iterator]() {
|
||||||
let i = 0;
|
let i = 0;
|
||||||
|
@ -88,7 +88,7 @@ test_second_argument("dummy/foo", "dummy:foo", "Using special character in fileN
|
||||||
test_second_argument(null, "null", "Using null fileName");
|
test_second_argument(null, "null", "Using null fileName");
|
||||||
test_second_argument(1, "1", "Using number fileName");
|
test_second_argument(1, "1", "Using number fileName");
|
||||||
test_second_argument('', '', "Using empty string fileName");
|
test_second_argument('', '', "Using empty string fileName");
|
||||||
test_second_argument(document.body, '[object HTMLBodyElement]', "Using object fileName");
|
test_second_argument(document, '[object HTMLDocument]', "Using object fileName");
|
||||||
|
|
||||||
// testing the third argument
|
// testing the third argument
|
||||||
[
|
[
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>FileAPI Test: Creating Blob URL with Blob</title>
|
||||||
|
<link rel="author" title="Victor Costan" href="mailto:pwnall@chromium.org">
|
||||||
|
<link rel="help" href="https://w3c.github.io/FileAPI/#originOfBlobURL">
|
||||||
|
<link rel="help" href="https://html.spec.whatwg.org/multipage/browsers.html#concept-origin">
|
||||||
|
<link rel="help" href="https://url.spec.whatwg.org/#url-parsing">
|
||||||
|
<link rel="help" href="https://fetch.spec.whatwg.org/#main-fetch">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
iframe { width: 10px; height: 10px; }
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<iframe id="unconstrained-iframe"></iframe>
|
||||||
|
<iframe id="sandboxed-iframe" sandbox="allow-scripts"></iframe>
|
||||||
|
|
||||||
|
<script id="iframe-srcdoc" language="text/html">
|
||||||
|
<!doctype html>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
window.onload = () => {
|
||||||
|
const blob = new Blob(['Hello world!']);
|
||||||
|
const blobUrl = URL.createObjectURL(blob);
|
||||||
|
|
||||||
|
fetch(blobUrl).then(response => response.text()).then(text => {
|
||||||
|
window.parent.postMessage({ blobUrl, text }, '*');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// The script tag is closed in readBlobFromUrl().
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
// Carries out the test of minting a Blob URL in an iframe, and reading it back.
|
||||||
|
//
|
||||||
|
// Returns a promise resolved with an object with properties blobUrl and text
|
||||||
|
// (the text read back from the Blob URL).
|
||||||
|
function readBlobFromUrl(t, iframeSelector) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.onmessage = t.step_func((message) => { resolve(message.data); });
|
||||||
|
|
||||||
|
const frame = document.querySelector(iframeSelector);
|
||||||
|
const html = document.querySelector('#iframe-srcdoc').textContent +
|
||||||
|
'<' + '/script>';
|
||||||
|
frame.setAttribute('srcdoc', html);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
promise_test(t => readBlobFromUrl(t, '#unconstrained-iframe').then(data => {
|
||||||
|
assert_true(data.blobUrl.startsWith('blob:'),
|
||||||
|
"The Blob's URL should use the blob: scheme");
|
||||||
|
assert_equals(data.text, 'Hello world!',
|
||||||
|
"The result of reading the Blob's URL should be the Blob's contents");
|
||||||
|
}), 'reading a Blob URL in an unconstrained iframe');
|
||||||
|
|
||||||
|
promise_test(t => readBlobFromUrl(t, '#sandboxed-iframe').then(data => {
|
||||||
|
assert_true(data.blobUrl.startsWith('blob:'),
|
||||||
|
"The Blob's URL should use the blob: scheme");
|
||||||
|
assert_equals(data.text, 'Hello world!',
|
||||||
|
"The result of reading the Blob's URL should be the Blob's contents");
|
||||||
|
}), 'reading a Blob URL in a sandboxed iframe without the same-origin flag');
|
||||||
|
|
||||||
|
</script>
|
|
@ -1,61 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
<body>
|
|
||||||
<script>
|
|
||||||
async_test(t => {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob = new Blob([blob_contents]);
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
const frame = document.createElement('iframe');
|
|
||||||
frame.setAttribute('style', 'display:none;');
|
|
||||||
frame.src = 'resources/revoke-helper.html';
|
|
||||||
document.body.appendChild(frame);
|
|
||||||
|
|
||||||
frame.onload = t.step_func(e => {
|
|
||||||
frame.contentWindow.postMessage({url: url}, '*');
|
|
||||||
});
|
|
||||||
|
|
||||||
self.addEventListener('message', t.step_func(e => {
|
|
||||||
if (e.source !== frame.contentWindow) return;
|
|
||||||
assert_equals(e.data, 'revoked');
|
|
||||||
promise_rejects(t, new TypeError, fetch(url)).then(t.step_func_done());
|
|
||||||
}));
|
|
||||||
}, 'It is possible to revoke same-origin blob URLs from different frames.');
|
|
||||||
|
|
||||||
async_test(t => {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob = new Blob([blob_contents]);
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
const worker = new Worker('resources/revoke-helper.js');
|
|
||||||
worker.onmessage = t.step_func(e => {
|
|
||||||
assert_equals(e.data, 'revoked');
|
|
||||||
promise_rejects(t, new TypeError, fetch(url)).then(t.step_func_done());
|
|
||||||
});
|
|
||||||
worker.postMessage({url: url});
|
|
||||||
}, 'It is possible to revoke same-origin blob URLs from a different worker global.');
|
|
||||||
|
|
||||||
async_test(t => {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob = new Blob([blob_contents]);
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
const frame = document.createElement('iframe');
|
|
||||||
frame.setAttribute('style', 'display:none;');
|
|
||||||
frame.src = '//{{domains[www1]}}:{{location[port]}}/FileAPI/url/resources/revoke-helper.html';
|
|
||||||
document.body.appendChild(frame);
|
|
||||||
|
|
||||||
frame.onload = t.step_func(e => {
|
|
||||||
frame.contentWindow.postMessage({url: url}, '*');
|
|
||||||
});
|
|
||||||
|
|
||||||
self.addEventListener('message', t.step_func(e => {
|
|
||||||
if (e.source !== frame.contentWindow) return;
|
|
||||||
assert_equals(e.data, 'revoked');
|
|
||||||
fetch(url).then(response => response.text()).then(t.step_func_done(text => {
|
|
||||||
assert_equals(text, blob_contents);
|
|
||||||
}), t.unreached_func('Unexpected promise rejection'));
|
|
||||||
}));
|
|
||||||
}, 'It is not possible to revoke cross-origin blob URLs.');
|
|
||||||
|
|
||||||
</script>
|
|
|
@ -5,6 +5,14 @@
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script>
|
||||||
|
test(t => {
|
||||||
|
const blob = new Blob(["Test Blob"]);
|
||||||
|
const url = URL.createObjectURL(blob);
|
||||||
|
assert_equals(new URL(url).origin, location.origin);
|
||||||
|
assert_true(url.includes(location.origin));
|
||||||
|
assert_true(url.startsWith('blob:{{location[scheme]}}://'));
|
||||||
|
}, 'Verify origin of Blob URI matches our origin');
|
||||||
|
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
const frame = document.createElement('iframe');
|
const frame = document.createElement('iframe');
|
||||||
self.addEventListener('message', t.step_func(e => {
|
self.addEventListener('message', t.step_func(e => {
|
|
@ -1,7 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<script>
|
|
||||||
self.addEventListener('message', e => {
|
|
||||||
let url = URL.createObjectURL(e.data.blob);
|
|
||||||
e.source.postMessage({url: url}, '*');
|
|
||||||
});
|
|
||||||
</script>
|
|
|
@ -1,4 +0,0 @@
|
||||||
self.addEventListener('message', e => {
|
|
||||||
let url = URL.createObjectURL(e.data.blob);
|
|
||||||
self.postMessage({url: url});
|
|
||||||
});
|
|
|
@ -1,71 +0,0 @@
|
||||||
// This method generates a number of tests verifying fetching of blob URLs,
|
|
||||||
// allowing the same tests to be used both with fetch() and XMLHttpRequest.
|
|
||||||
//
|
|
||||||
// |fetch_method| is only used in test names, and should describe the
|
|
||||||
// (javascript) method being used by the other two arguments (i.e. 'fetch' or 'XHR').
|
|
||||||
//
|
|
||||||
// |fetch_should_succeed| is a callback that is called with the Test and a URL.
|
|
||||||
// Fetching the URL is expected to succeed. The callback should return a promise
|
|
||||||
// resolved with whatever contents were fetched.
|
|
||||||
//
|
|
||||||
// |fetch_should_fail| similarly is a callback that is called with the Test, a URL
|
|
||||||
// to fetch, and optionally a method to use to do the fetch. If no method is
|
|
||||||
// specified the callback should use the 'GET' method. Fetching of these URLs is
|
|
||||||
// expected to fail, and the callback should return a promise that resolves iff
|
|
||||||
// fetching did indeed fail.
|
|
||||||
function fetch_tests(fetch_method, fetch_should_succeed, fetch_should_fail) {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob = new Blob([blob_contents]);
|
|
||||||
|
|
||||||
promise_test(t => {
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
return fetch_should_succeed(t, url).then(text => {
|
|
||||||
assert_equals(text, blob_contents);
|
|
||||||
});
|
|
||||||
}, 'Blob URLs can be used in ' + fetch_method);
|
|
||||||
|
|
||||||
promise_test(t => {
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
return fetch_should_succeed(t, url + '#fragment').then(text => {
|
|
||||||
assert_equals(text, blob_contents);
|
|
||||||
});
|
|
||||||
}, fetch_method + ' with a fragment should succeed');
|
|
||||||
|
|
||||||
promise_test(t => {
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
URL.revokeObjectURL(url);
|
|
||||||
|
|
||||||
return fetch_should_fail(t, url);
|
|
||||||
}, fetch_method + ' of a revoked URL should fail');
|
|
||||||
|
|
||||||
promise_test(t => {
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
URL.revokeObjectURL(url + '#fragment');
|
|
||||||
|
|
||||||
return fetch_should_succeed(t, url).then(text => {
|
|
||||||
assert_equals(text, blob_contents);
|
|
||||||
});
|
|
||||||
}, 'Only exact matches should revoke URLs, using ' + fetch_method);
|
|
||||||
|
|
||||||
promise_test(t => {
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
return fetch_should_fail(t, url + '?querystring');
|
|
||||||
}, 'Appending a query string should cause ' + fetch_method + ' to fail');
|
|
||||||
|
|
||||||
promise_test(t => {
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
return fetch_should_fail(t, url + '/path');
|
|
||||||
}, 'Appending a path should cause ' + fetch_method + ' to fail');
|
|
||||||
|
|
||||||
for (const method of ['HEAD', 'POST', 'DELETE', 'OPTIONS', 'PUT', 'CUSTOM']) {
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
promise_test(t => {
|
|
||||||
return fetch_should_fail(t, url, method);
|
|
||||||
}, fetch_method + ' with method "' + method + '" should fail');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<script>
|
|
||||||
self.addEventListener('message', e => {
|
|
||||||
URL.revokeObjectURL(e.data.url);
|
|
||||||
e.source.postMessage('revoked', '*');
|
|
||||||
});
|
|
||||||
</script>
|
|
|
@ -1,4 +0,0 @@
|
||||||
self.addEventListener('message', e => {
|
|
||||||
URL.revokeObjectURL(e.data.url);
|
|
||||||
self.postMessage('revoked');
|
|
||||||
});
|
|
|
@ -1,31 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>FileAPI Test: Verify behavior of Blob URL in unique origins</title>
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
|
|
||||||
<iframe id="sandboxed-iframe" sandbox="allow-scripts"></iframe>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
|
|
||||||
const iframe_scripts = [
|
|
||||||
'resources/fetch-tests.js',
|
|
||||||
'url-format.any.js',
|
|
||||||
'url-with-xhr.any.js',
|
|
||||||
'url-with-fetch.any.js',
|
|
||||||
'url-with-tags.window.js',
|
|
||||||
];
|
|
||||||
|
|
||||||
let html = '<!doctype html>\n<meta charset="utf-8">\n<body>\n';
|
|
||||||
html = html + '<script src="/resources/testharness.js"></' + 'script>\n';
|
|
||||||
html = html + '<script>setup({"explicit_timeout": true});</' + 'script>\n';
|
|
||||||
for (const script of iframe_scripts)
|
|
||||||
html = html + '<script src="' + script + '"></' + 'script>\n';
|
|
||||||
|
|
||||||
const frame = document.querySelector('#sandboxed-iframe');
|
|
||||||
frame.setAttribute('srcdoc', html);
|
|
||||||
frame.setAttribute('style', 'display:none;');
|
|
||||||
|
|
||||||
fetch_tests_from_window(frame.contentWindow);
|
|
||||||
|
|
||||||
</script>
|
|
|
@ -1,63 +0,0 @@
|
||||||
const blob = new Blob(['test']);
|
|
||||||
const file = new File(['test'], 'name');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
const url_count = 5000;
|
|
||||||
let list = [];
|
|
||||||
|
|
||||||
for (let i = 0; i < url_count; ++i)
|
|
||||||
list.push(URL.createObjectURL(blob));
|
|
||||||
|
|
||||||
list.sort();
|
|
||||||
|
|
||||||
for (let i = 1; i < list.length; ++i)
|
|
||||||
assert_not_equals(list[i], list[i-1], 'generated Blob URLs should be unique');
|
|
||||||
}, 'Generated Blob URLs are unique');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
assert_equals(typeof url, 'string');
|
|
||||||
assert_true(url.startsWith('blob:'));
|
|
||||||
}, 'Blob URL starts with "blob:"');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
const url = URL.createObjectURL(file);
|
|
||||||
assert_equals(typeof url, 'string');
|
|
||||||
assert_true(url.startsWith('blob:'));
|
|
||||||
}, 'Blob URL starts with "blob:" for Files');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
assert_equals(new URL(url).origin, location.origin);
|
|
||||||
if (location.origin !== 'null') {
|
|
||||||
assert_true(url.includes(location.origin));
|
|
||||||
assert_true(url.startsWith('blob:' + location.protocol));
|
|
||||||
}
|
|
||||||
}, 'Origin of Blob URL matches our origin');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
const url_record = new URL(url);
|
|
||||||
assert_equals(url_record.protocol, 'blob:');
|
|
||||||
assert_equals(url_record.origin, location.origin);
|
|
||||||
assert_equals(url_record.host, '', 'host should be an empty string');
|
|
||||||
assert_equals(url_record.port, '', 'port should be an empty string');
|
|
||||||
const uuid_path_re = /\/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
||||||
assert_true(uuid_path_re.test(url_record.pathname), 'Path must end with a valid UUID');
|
|
||||||
if (location.origin !== 'null') {
|
|
||||||
const nested_url = new URL(url_record.pathname);
|
|
||||||
assert_equals(nested_url.origin, location.origin);
|
|
||||||
assert_equals(nested_url.pathname.search(uuid_path_re), 0, 'Path must be a valid UUID');
|
|
||||||
assert_true(url.includes(location.origin));
|
|
||||||
assert_true(url.startsWith('blob:' + location.protocol));
|
|
||||||
}
|
|
||||||
}, 'Blob URL parses correctly');
|
|
||||||
|
|
||||||
test(() => {
|
|
||||||
const url = URL.createObjectURL(file);
|
|
||||||
assert_equals(new URL(url).origin, location.origin);
|
|
||||||
if (location.origin !== 'null') {
|
|
||||||
assert_true(url.includes(location.origin));
|
|
||||||
assert_true(url.startsWith('blob:' + location.protocol));
|
|
||||||
}
|
|
||||||
}, 'Origin of Blob URL matches our origin for Files');
|
|
|
@ -1,50 +0,0 @@
|
||||||
async_test(t => {
|
|
||||||
const run_result = 'test_script_OK';
|
|
||||||
const blob_contents = 'window.test_result = "' + run_result + '";';
|
|
||||||
const blob = new Blob([blob_contents]);
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
const e = document.createElement('script');
|
|
||||||
e.setAttribute('src', url);
|
|
||||||
e.onload = t.step_func_done(() => {
|
|
||||||
assert_equals(window.test_result, run_result);
|
|
||||||
});
|
|
||||||
|
|
||||||
document.body.appendChild(e);
|
|
||||||
}, 'Blob URLs can be used in <script> tags');
|
|
||||||
|
|
||||||
async_test(t => {
|
|
||||||
const run_result = 'test_frame_OK';
|
|
||||||
const blob_contents = '<!doctype html>\n<meta charset="utf-8">\n' +
|
|
||||||
'<script>window.test_result = "' + run_result + '";</script>';
|
|
||||||
const blob = new Blob([blob_contents], {type: 'text/html'});
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
const frame = document.createElement('iframe');
|
|
||||||
frame.setAttribute('src', url);
|
|
||||||
frame.setAttribute('style', 'display:none;');
|
|
||||||
document.body.appendChild(frame);
|
|
||||||
|
|
||||||
frame.onload = t.step_func_done(() => {
|
|
||||||
assert_equals(frame.contentWindow.test_result, run_result);
|
|
||||||
});
|
|
||||||
}, 'Blob URLs can be used in iframes, and are treated same origin');
|
|
||||||
|
|
||||||
async_test(t => {
|
|
||||||
const scroll_position = 5000;
|
|
||||||
const blob_contents = '<!doctype html>\n<meta charset="utf-8">\n' +
|
|
||||||
'<style>body { margin: 0; } .block { height: 5000px; }</style>\n' +
|
|
||||||
'<body>\n' +
|
|
||||||
'<a id="block1"></a><div class="block"></div>\n' +
|
|
||||||
'<a id="block2"></a><div class="block"></div>';
|
|
||||||
const blob = new Blob([blob_contents], {type: 'text/html'});
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
const frame = document.createElement('iframe');
|
|
||||||
frame.setAttribute('src', url + '#block2');
|
|
||||||
document.body.appendChild(frame);
|
|
||||||
|
|
||||||
frame.onload = t.step_func_done(() => {
|
|
||||||
assert_equals(frame.contentWindow.scrollY, 5000);
|
|
||||||
});
|
|
||||||
}, 'Blob URL fragment is implemented.');
|
|
|
@ -1,56 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<script src="/resources/testharness.js"></script>
|
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
|
||||||
<body>
|
|
||||||
<script>
|
|
||||||
promise_test(t => {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob = new Blob([blob_contents]);
|
|
||||||
const worker = new Worker('resources/create-helper.js');
|
|
||||||
let url;
|
|
||||||
return new Promise(resolve => {
|
|
||||||
worker.onmessage = e => resolve(e.data);
|
|
||||||
worker.postMessage({blob: blob});
|
|
||||||
}).then(data => {
|
|
||||||
url = data.url;
|
|
||||||
let result = fetch(url);
|
|
||||||
worker.terminate();
|
|
||||||
return result;
|
|
||||||
}).then(response => response.text()).then(text => {
|
|
||||||
assert_equals(text, blob_contents);
|
|
||||||
return new Promise(resolve => t.step_timeout(resolve, 100));
|
|
||||||
}).then(() => promise_rejects(t, new TypeError, fetch(url)));
|
|
||||||
}, 'Terminating worker revokes its URLs');
|
|
||||||
|
|
||||||
promise_test(t => {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob = new Blob([blob_contents]);
|
|
||||||
const frame = document.createElement('iframe');
|
|
||||||
frame.setAttribute('style', 'display:none;');
|
|
||||||
frame.src = 'resources/create-helper.html';
|
|
||||||
document.body.appendChild(frame);
|
|
||||||
|
|
||||||
let url;
|
|
||||||
return new Promise(resolve => {
|
|
||||||
frame.onload = t.step_func(e => {
|
|
||||||
resolve(e);
|
|
||||||
});
|
|
||||||
}).then(e => {
|
|
||||||
frame.contentWindow.postMessage({blob: blob}, '*');
|
|
||||||
return new Promise(resolve => {
|
|
||||||
self.addEventListener('message', t.step_func(e => {
|
|
||||||
if (e.source === frame.contentWindow) resolve(e);
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
}).then(e => {
|
|
||||||
url = e.data.url;
|
|
||||||
let fetch_result = fetch(url);
|
|
||||||
document.body.removeChild(frame);
|
|
||||||
return fetch_result;
|
|
||||||
}).then(response => response.text()).then(text => {
|
|
||||||
assert_equals(text, blob_contents);
|
|
||||||
return new Promise(resolve => t.step_timeout(resolve, 100));
|
|
||||||
}).then(() => promise_rejects(t, new TypeError, fetch(url)));
|
|
||||||
}, 'Removing an iframe revokes its URLs');
|
|
||||||
</script>
|
|
|
@ -1,53 +0,0 @@
|
||||||
// META: script=resources/fetch-tests.js
|
|
||||||
|
|
||||||
function fetch_should_succeed(test, request) {
|
|
||||||
return fetch(request).then(response => response.text());
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetch_should_fail(test, url, method = 'GET') {
|
|
||||||
return promise_rejects(test, new TypeError, fetch(url, {method: method}));
|
|
||||||
}
|
|
||||||
|
|
||||||
fetch_tests('fetch', fetch_should_succeed, fetch_should_fail);
|
|
||||||
|
|
||||||
promise_test(t => {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob_type = 'image/png';
|
|
||||||
const blob = new Blob([blob_contents], {type: blob_type});
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
return fetch(url).then(response => {
|
|
||||||
assert_equals(response.headers.get('Content-Type'), blob_type);
|
|
||||||
});
|
|
||||||
}, 'fetch should return Content-Type from Blob');
|
|
||||||
|
|
||||||
promise_test(t => {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob = new Blob([blob_contents]);
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
const request = new Request(url);
|
|
||||||
|
|
||||||
// Revoke the object URL. Request should take a reference to the blob as
|
|
||||||
// soon as it receives it in open(), so the request succeeds even though we
|
|
||||||
// revoke the URL before calling fetch().
|
|
||||||
URL.revokeObjectURL(url);
|
|
||||||
|
|
||||||
return fetch_should_succeed(t, request).then(text => {
|
|
||||||
assert_equals(text, blob_contents);
|
|
||||||
});
|
|
||||||
}, 'Revoke blob URL after creating Request, will fetch');
|
|
||||||
|
|
||||||
promise_test(function(t) {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob = new Blob([blob_contents]);
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
const result = fetch_should_succeed(t, url).then(text => {
|
|
||||||
assert_equals(text, blob_contents);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Revoke the object URL. fetch should have already resolved the blob URL.
|
|
||||||
URL.revokeObjectURL(url);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}, 'Revoke blob URL after calling fetch, fetch should succeed');
|
|
|
@ -1,68 +0,0 @@
|
||||||
// META: script=resources/fetch-tests.js
|
|
||||||
|
|
||||||
function xhr_should_succeed(test, url) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const xhr = new XMLHttpRequest();
|
|
||||||
xhr.open('GET', url);
|
|
||||||
xhr.onload = test.step_func(() => {
|
|
||||||
assert_equals(xhr.status, 200);
|
|
||||||
assert_equals(xhr.statusText, 'OK');
|
|
||||||
resolve(xhr.response);
|
|
||||||
});
|
|
||||||
xhr.onerror = () => reject('Got unexpected error event');
|
|
||||||
xhr.send();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function xhr_should_fail(test, url, method = 'GET') {
|
|
||||||
const xhr = new XMLHttpRequest();
|
|
||||||
xhr.open(method, url);
|
|
||||||
const result1 = new Promise((resolve, reject) => {
|
|
||||||
xhr.onload = () => reject('Got unexpected load event');
|
|
||||||
xhr.onerror = resolve;
|
|
||||||
});
|
|
||||||
const result2 = new Promise(resolve => {
|
|
||||||
xhr.onreadystatechange = test.step_func(() => {
|
|
||||||
if (xhr.readyState !== xhr.DONE) return;
|
|
||||||
assert_equals(xhr.status, 0);
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
xhr.send();
|
|
||||||
return Promise.all([result1, result2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
fetch_tests('XHR', xhr_should_succeed, xhr_should_fail);
|
|
||||||
|
|
||||||
async_test(t => {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob_type = 'image/png';
|
|
||||||
const blob = new Blob([blob_contents], {type: blob_type});
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
const xhr = new XMLHttpRequest();
|
|
||||||
xhr.open('GET', url);
|
|
||||||
xhr.onloadend = t.step_func_done(() => {
|
|
||||||
assert_equals(xhr.getResponseHeader('Content-Type'), blob_type);
|
|
||||||
});
|
|
||||||
xhr.send();
|
|
||||||
}, 'XHR should return Content-Type from Blob');
|
|
||||||
|
|
||||||
async_test(t => {
|
|
||||||
const blob_contents = 'test blob contents';
|
|
||||||
const blob = new Blob([blob_contents]);
|
|
||||||
const url = URL.createObjectURL(blob);
|
|
||||||
const xhr = new XMLHttpRequest();
|
|
||||||
xhr.open('GET', url);
|
|
||||||
|
|
||||||
// Revoke the object URL. XHR should take a reference to the blob as soon as
|
|
||||||
// it receives it in open(), so the request succeeds even though we revoke the
|
|
||||||
// URL before calling send().
|
|
||||||
URL.revokeObjectURL(url);
|
|
||||||
|
|
||||||
xhr.onload = t.step_func_done(() => {
|
|
||||||
assert_equals(xhr.response, blob_contents);
|
|
||||||
});
|
|
||||||
xhr.onerror = t.unreached_func('Got unexpected error event');
|
|
||||||
|
|
||||||
xhr.send();
|
|
||||||
}, 'Revoke blob URL after open(), will fetch');
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>FileAPI Test: Creating Blob URL with Blob</title>
|
||||||
|
<link rel="author" title="Intel" href="http://www.intel.com">
|
||||||
|
<link rel="author" title="JunChen Xia" href="mailto:xjconlyme@gmail.com">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<div id="log"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var blob = new Blob(["Test Blob"]);
|
||||||
|
|
||||||
|
test(function() {
|
||||||
|
var testBlob = window.URL.createObjectURL(blob);
|
||||||
|
assert_equals(typeof testBlob, "string", "Blob URI is typeof string");
|
||||||
|
assert_equals(testBlob.indexOf("blob"), 0, "Blob URI starts with 'blob'");
|
||||||
|
}, "Check if the Blob URI starts with 'blob' using createObjectURL()");
|
||||||
|
</script>
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>FileAPI Test: Creating Blob URL via XMLHttpRequest</title>
|
||||||
|
<link rel="author" title="Intel" href="http://www.intel.com">
|
||||||
|
<link rel="author" title="JunChen Xia" href="mailto:xjconlyme@gmail.com">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<div id="log"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
async_test(function () {
|
||||||
|
var http = new XMLHttpRequest();
|
||||||
|
http.open("GET", "/images/blue96x96.png", true);
|
||||||
|
http.responseType = "blob";
|
||||||
|
http.onloadend = this.step_func(function(evt) {
|
||||||
|
var blobURI = window.URL.createObjectURL(http.response);
|
||||||
|
assert_true(http.response instanceof Blob, "XMLHttpRequest returns instanceof Blob");
|
||||||
|
assert_equals(typeof blobURI, "string", "Blob URI is typeof string");
|
||||||
|
assert_equals(blobURI.indexOf("blob"), 0, "Blob URI starts with 'blob'");
|
||||||
|
assert_equals(http.status, 200, "The status is 200");
|
||||||
|
assert_equals(http.statusText, "OK", "The status text is OK when XMLHttpRequest returns correct blob");
|
||||||
|
assert_equals(http.getResponseHeader("Content-Type"), "image/png", "The content type is image/png when set the respnose blob");
|
||||||
|
this.done();
|
||||||
|
});
|
||||||
|
http.send();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>IDL check of WebCrypto</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#crypto-interface">
|
||||||
|
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
<script src=/resources/WebIDLParser.js></script>
|
||||||
|
<script src=/resources/idlharness.js></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1 class="instructions">Description</h1>
|
||||||
|
|
||||||
|
<p class="instructions">This test verifies that the implementations of the WebCrypto API match with its WebIDL definition.</p>
|
||||||
|
|
||||||
|
<div id='log'></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var file_input;
|
||||||
|
setup(function() {
|
||||||
|
var idl_array = new IdlArray();
|
||||||
|
|
||||||
|
var request = new XMLHttpRequest();
|
||||||
|
request.open("GET", "WebCryptoAPI.idl");
|
||||||
|
request.send();
|
||||||
|
request.onload = function() {
|
||||||
|
var idls = request.responseText;
|
||||||
|
|
||||||
|
idl_array.add_idls(idls);
|
||||||
|
|
||||||
|
idl_array.add_objects({"Crypto":["crypto"], "SubtleCrypto":["crypto.subtle"]});
|
||||||
|
|
||||||
|
idl_array.test();
|
||||||
|
done();
|
||||||
|
};
|
||||||
|
}, {explicit_done: true});
|
||||||
|
</script>
|
|
@ -24,7 +24,7 @@ setup(function() {
|
||||||
var idl_array = new IdlArray();
|
var idl_array = new IdlArray();
|
||||||
|
|
||||||
var request = new XMLHttpRequest();
|
var request = new XMLHttpRequest();
|
||||||
request.open("GET", "../interfaces/WebCryptoAPI.idl");
|
request.open("GET", "WebCryptoAPI.idl");
|
||||||
request.send();
|
request.send();
|
||||||
request.onload = function() {
|
request.onload = function() {
|
||||||
var idls = request.responseText;
|
var idls = request.responseText;
|
||||||
|
|
|
@ -2,7 +2,7 @@ importScripts("/resources/testharness.js");
|
||||||
importScripts("/resources/WebIDLParser.js", "/resources/idlharness.js");
|
importScripts("/resources/WebIDLParser.js", "/resources/idlharness.js");
|
||||||
|
|
||||||
var request = new XMLHttpRequest();
|
var request = new XMLHttpRequest();
|
||||||
request.open("GET", "../interfaces/WebCryptoAPI.idl");
|
request.open("GET", "WebCryptoAPI.idl");
|
||||||
request.send();
|
request.send();
|
||||||
request.onload = function() {
|
request.onload = function() {
|
||||||
var idl_array = new IdlArray();
|
var idl_array = new IdlArray();
|
|
@ -33,37 +33,37 @@
|
||||||
|
|
||||||
// The redirect response passes the access check.
|
// The redirect response passes the access check.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, "/xhr/resources/access-control-basic-allow-star.py",
|
runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow-star.py",
|
||||||
withoutCredentials, succeeds)
|
withoutCredentials, succeeds)
|
||||||
}, "Request without credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star)");
|
}, "Request without credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star)");
|
||||||
|
|
||||||
// The redirect response fails the access check because credentials were sent.
|
// The redirect response fails the access check because credentials were sent.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, "/xhr/resources/access-control-basic-allow-star.py",
|
runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow-star.py",
|
||||||
withCredentials, fails)
|
withCredentials, fails)
|
||||||
}, "Request with credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star)");
|
}, "Request with credentials is redirected to a cross-origin response with Access-Control-Allow-Origin=* (with star)");
|
||||||
|
|
||||||
// The redirect response passes the access check.
|
// The redirect response passes the access check.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, "/xhr/resources/access-control-basic-allow.py",
|
runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow.py",
|
||||||
withoutCredentials, succeeds)
|
withoutCredentials, succeeds)
|
||||||
}, "Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin");
|
}, "Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin");
|
||||||
|
|
||||||
// The redirect response passes the access check.
|
// The redirect response passes the access check.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, "/xhr/resources/access-control-basic-allow.py",
|
runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow.py",
|
||||||
withCredentials, succeeds)
|
withCredentials, succeeds)
|
||||||
}, "Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin");
|
}, "Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin");
|
||||||
|
|
||||||
// forbidding credentials. The redirect response passes the access check.
|
// forbidding credentials. The redirect response passes the access check.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, "/xhr/resources/access-control-basic-allow-no-credentials.py",
|
runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py",
|
||||||
withoutCredentials, succeeds)
|
withoutCredentials, succeeds)
|
||||||
}, "Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials)");
|
}, "Request without credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials)");
|
||||||
|
|
||||||
// forbidding credentials. The redirect response fails the access check.
|
// forbidding credentials. The redirect response fails the access check.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, "/xhr/resources/access-control-basic-allow-no-credentials.py",
|
runTest(t, "/XMLHttpRequest/resources/access-control-basic-allow-no-credentials.py",
|
||||||
withCredentials, fails)
|
withCredentials, fails)
|
||||||
}, "Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials)");
|
}, "Request with credentials is redirected to a cross-origin response with a specific Access-Control-Allow-Origin (no credentials)");
|
||||||
</script>
|
</script>
|
|
@ -11,7 +11,7 @@
|
||||||
function runTest(test, destination, parameters, customHeader, local, expectSuccess) {
|
function runTest(test, destination, parameters, customHeader, local, expectSuccess) {
|
||||||
const xhr = new XMLHttpRequest();
|
const xhr = new XMLHttpRequest();
|
||||||
const url = (local ? get_host_info().HTTP_ORIGIN : get_host_info().HTTP_REMOTE_ORIGIN) +
|
const url = (local ? get_host_info().HTTP_ORIGIN : get_host_info().HTTP_REMOTE_ORIGIN) +
|
||||||
"/xhr/resources/redirect-cors.py?location=" + destination + "&" + parameters;
|
"/XMLHttpRequest/resources/redirect-cors.py?location=" + destination + "&" + parameters;
|
||||||
|
|
||||||
xhr.open("GET", url, true);
|
xhr.open("GET", url, true);
|
||||||
|
|
||||||
|
@ -41,21 +41,21 @@
|
||||||
// The redirect response fails the access check because the redirect lacks a CORS header.
|
// The redirect response fails the access check because the redirect lacks a CORS header.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
runTest(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow-star.py", "",
|
"/XMLHttpRequest/resources/access-control-basic-allow-star.py", "",
|
||||||
withoutCustomHeader, remote, fails)
|
withoutCustomHeader, remote, fails)
|
||||||
}, "Request is redirected without CORS headers to a response with Access-Control-Allow-Origin=*");
|
}, "Request is redirected without CORS headers to a response with Access-Control-Allow-Origin=*");
|
||||||
|
|
||||||
// The redirect response passes the access check.
|
// The redirect response passes the access check.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
runTest(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow-star.py", "allow_origin=true",
|
"/XMLHttpRequest/resources/access-control-basic-allow-star.py", "allow_origin=true",
|
||||||
withoutCustomHeader, remote, succeeds)
|
withoutCustomHeader, remote, succeeds)
|
||||||
}, "Request is redirected to a response with Access-Control-Allow-Origin=*");
|
}, "Request is redirected to a response with Access-Control-Allow-Origin=*");
|
||||||
|
|
||||||
// The redirect response fails the access check because user info was sent.
|
// The redirect response fails the access check because user info was sent.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, get_host_info().HTTP_REMOTE_ORIGIN.replace("http://", "http://username:password@") +
|
runTest(t, get_host_info().HTTP_REMOTE_ORIGIN.replace("http://", "http://username:password@") +
|
||||||
"/xhr/resources/access-control-basic-allow-star.py", "allow_origin=true",
|
"/XMLHttpRequest/resources/access-control-basic-allow-star.py", "allow_origin=true",
|
||||||
withoutCustomHeader, remote, fails)
|
withoutCustomHeader, remote, fails)
|
||||||
}, "Request with user info is redirected to a response with Access-Control-Allow-Origin=*");
|
}, "Request with user info is redirected to a response with Access-Control-Allow-Origin=*");
|
||||||
|
|
||||||
|
@ -67,21 +67,21 @@
|
||||||
// The preflighted redirect response fails the access check because of preflighting.
|
// The preflighted redirect response fails the access check because of preflighting.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
runTest(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow-star.py",
|
"/XMLHttpRequest/resources/access-control-basic-allow-star.py",
|
||||||
"allow_origin=true&redirect_preflight=true", withCustomHeader, remote, fails)
|
"allow_origin=true&redirect_preflight=true", withCustomHeader, remote, fails)
|
||||||
}, "Preflighted request is redirected to a response with Access-Control-Allow-Origin=*");
|
}, "Preflighted request is redirected to a response with Access-Control-Allow-Origin=*");
|
||||||
|
|
||||||
// The preflighted redirect response fails the access check after successful preflighting.
|
// The preflighted redirect response fails the access check after successful preflighting.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
runTest(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow-star.py",
|
"/XMLHttpRequest/resources/access-control-basic-allow-star.py",
|
||||||
"allow_origin=true&allow_header=x-test&redirect_preflight=true",
|
"allow_origin=true&allow_header=x-test&redirect_preflight=true",
|
||||||
withCustomHeader, remote, fails)
|
withCustomHeader, remote, fails)
|
||||||
}, "Preflighted request is redirected to a response with Access-Control-Allow-Origin=* and header allowed");
|
}, "Preflighted request is redirected to a response with Access-Control-Allow-Origin=* and header allowed");
|
||||||
|
|
||||||
// The same-origin redirect response passes the access check.
|
// The same-origin redirect response passes the access check.
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runTest(t, get_host_info().HTTP_ORIGIN + "/xhr/resources/pass.txt",
|
runTest(t, get_host_info().HTTP_ORIGIN + "/XMLHttpRequest/resources/pass.txt",
|
||||||
"", withCustomHeader, local, succeeds)
|
"", withCustomHeader, local, succeeds)
|
||||||
}, "Request is redirected to a same-origin resource file");
|
}, "Request is redirected to a same-origin resource file");
|
||||||
</script>
|
</script>
|
|
@ -29,31 +29,31 @@
|
||||||
}
|
}
|
||||||
test(t => {
|
test(t => {
|
||||||
runSync(t, "resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN +
|
runSync(t, "resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow.py")
|
"/XMLHttpRequest/resources/access-control-basic-allow.py")
|
||||||
}, "Local sync redirect to remote origin");
|
}, "Local sync redirect to remote origin");
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runAsync(t, "resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN +
|
runAsync(t, "resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow.py")
|
"/XMLHttpRequest/resources/access-control-basic-allow.py")
|
||||||
}, "Local async redirect to remote origin");
|
}, "Local async redirect to remote origin");
|
||||||
test(t => {
|
test(t => {
|
||||||
runSync(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
runSync(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/redirect-cors.py?location=" + get_host_info().HTTP_ORIGIN +
|
"/XMLHttpRequest/resources/redirect-cors.py?location=" + get_host_info().HTTP_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow.py&allow_origin=true")
|
"/XMLHttpRequest/resources/access-control-basic-allow.py&allow_origin=true")
|
||||||
}, "Remote sync redirect to local origin");
|
}, "Remote sync redirect to local origin");
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runAsync(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
runAsync(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/redirect-cors.py?location=" + get_host_info().HTTP_ORIGIN +
|
"/XMLHttpRequest/resources/redirect-cors.py?location=" + get_host_info().HTTP_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow.py&allow_origin=true")
|
"/XMLHttpRequest/resources/access-control-basic-allow.py&allow_origin=true")
|
||||||
}, "Remote async redirect to local origin");
|
}, "Remote async redirect to local origin");
|
||||||
test(t => {
|
test(t => {
|
||||||
runSync(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
runSync(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN +
|
"/XMLHttpRequest/resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow.py&allow_origin=true")
|
"/XMLHttpRequest/resources/access-control-basic-allow.py&allow_origin=true")
|
||||||
}, "Remote sync redirect to same remote origin");
|
}, "Remote sync redirect to same remote origin");
|
||||||
async_test(t => {
|
async_test(t => {
|
||||||
runAsync(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
runAsync(t, get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN +
|
"/XMLHttpRequest/resources/redirect-cors.py?location=" + get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow.py&allow_origin=true")
|
"/XMLHttpRequest/resources/access-control-basic-allow.py&allow_origin=true")
|
||||||
}, "Remote async redirect to same remote origin");
|
}, "Remote async redirect to same remote origin");
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
|
@ -8,7 +8,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
const url = get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-origin-header.py";
|
const url = get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-origin-header.py";
|
||||||
async_test(function(test) {
|
async_test(function(test) {
|
||||||
window.addEventListener("message", test.step_func(function(evt) {
|
window.addEventListener("message", test.step_func(function(evt) {
|
||||||
if (evt.data == "ready") {
|
if (evt.data == "ready") {
|
|
@ -10,7 +10,7 @@
|
||||||
async_test(function(test) {
|
async_test(function(test) {
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-origin-header.py", false);
|
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-origin-header.py", false);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
|
|
||||||
assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\n" +
|
assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\n" +
|
|
@ -21,7 +21,7 @@
|
||||||
xhr.onerror = test.unreached_func("FAIL: Network error.");
|
xhr.onerror = test.unreached_func("FAIL: Network error.");
|
||||||
|
|
||||||
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN +
|
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-allow.py", true);
|
"/XMLHttpRequest/resources/access-control-basic-allow.py", true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}, "Basic async cross-origin XHR request");
|
}, "Basic async cross-origin XHR request");
|
||||||
</script>
|
</script>
|
|
@ -18,7 +18,7 @@
|
||||||
xhr.onerror = test.unreached_func("Unexpected error.");
|
xhr.onerror = test.unreached_func("Unexpected error.");
|
||||||
|
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN +
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-put-allow.py");
|
"/XMLHttpRequest/resources/access-control-basic-put-allow.py");
|
||||||
xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
|
xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
|
||||||
xhr.send("PASS: PUT data received");
|
xhr.send("PASS: PUT data received");
|
||||||
}, "Allow async PUT request");
|
}, "Allow async PUT request");
|
|
@ -11,7 +11,7 @@
|
||||||
test(function() {
|
test(function() {
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-put-allow.py", false);
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-put-allow.py", false);
|
||||||
|
|
||||||
xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
|
xhr.setRequestHeader("Content-Type", "text/plain; charset=UTF-8");
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
firstRequest();
|
firstRequest();
|
||||||
});
|
});
|
||||||
|
|
||||||
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/reset-token.py?token=" + uuid, true);
|
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/reset-token.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
|
|
||||||
function firstRequest() {
|
function firstRequest() {
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
assert_equals(xhr.responseText, "PASS: First PUT request.");
|
assert_equals(xhr.responseText, "PASS: First PUT request.");
|
||||||
secondRequest();
|
secondRequest();
|
||||||
});
|
});
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true);
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
test.done();
|
test.done();
|
||||||
});
|
});
|
||||||
// Send a header not included in the inital cache.
|
// Send a header not included in the inital cache.
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true);
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true);
|
||||||
xhr.setRequestHeader("x-test", "headerValue");
|
xhr.setRequestHeader("x-test", "headerValue");
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}
|
}
|
|
@ -20,7 +20,7 @@
|
||||||
firstRequest();
|
firstRequest();
|
||||||
});
|
});
|
||||||
|
|
||||||
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/reset-token.py?token=" + uuid, true);
|
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/reset-token.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
|
|
||||||
function firstRequest() {
|
function firstRequest() {
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
assert_equals(xhr.responseText, "PASS: First PUT request.");
|
assert_equals(xhr.responseText, "PASS: First PUT request.");
|
||||||
secondRequest();
|
secondRequest();
|
||||||
});
|
});
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true);
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
test.done();
|
test.done();
|
||||||
});
|
});
|
||||||
// Send a header not included in the inital cache.
|
// Send a header not included in the inital cache.
|
||||||
xhr.open("XMETHOD", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true);
|
xhr.open("XMETHOD", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-invalidation.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}
|
}
|
||||||
}, "Preflight cache should be invalidated by changed method");
|
}, "Preflight cache should be invalidated by changed method");
|
|
@ -20,7 +20,7 @@
|
||||||
firstRequest();
|
firstRequest();
|
||||||
});
|
});
|
||||||
|
|
||||||
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/reset-token.py?token=" + uuid, true);
|
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/reset-token.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
|
|
||||||
function firstRequest() {
|
function firstRequest() {
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
assert_equals(xhr.responseText, "PASS: First PUT request.");
|
assert_equals(xhr.responseText, "PASS: First PUT request.");
|
||||||
step_timeout(secondRequest, 3000); // 3 seconds
|
step_timeout(secondRequest, 3000); // 3 seconds
|
||||||
});
|
});
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-timeout.py?token=" + uuid, true);
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-timeout.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
assert_equals(xhr.responseText, "PASS: Second OPTIONS request was sent.");
|
assert_equals(xhr.responseText, "PASS: Second OPTIONS request was sent.");
|
||||||
test.done();
|
test.done();
|
||||||
});
|
});
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache-timeout.py?token=" + uuid, true);
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache-timeout.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}
|
}
|
||||||
}, "Preflight cache should be invalidated on timeout");
|
}, "Preflight cache should be invalidated on timeout");
|
|
@ -20,7 +20,7 @@
|
||||||
firstRequest();
|
firstRequest();
|
||||||
});
|
});
|
||||||
|
|
||||||
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/reset-token.py?token=" + uuid, true);
|
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/reset-token.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
|
|
||||||
function firstRequest() {
|
function firstRequest() {
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
assert_equals(xhr.responseText, "PASS: First PUT request.");
|
assert_equals(xhr.responseText, "PASS: First PUT request.");
|
||||||
secondRequest();
|
secondRequest();
|
||||||
});
|
});
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache.py?token=" + uuid, true);
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
xhr.onload = test.step_func_done(function() {
|
xhr.onload = test.step_func_done(function() {
|
||||||
assert_equals(xhr.responseText, "PASS: Second PUT request. Preflight worked.");
|
assert_equals(xhr.responseText, "PASS: Second PUT request. Preflight worked.");
|
||||||
});
|
});
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-preflight-cache.py?token=" + uuid, true);
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-preflight-cache.py?token=" + uuid, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}
|
}
|
||||||
}, "Preflight cache should allow second request");
|
}, "Preflight cache should allow second request");
|
|
@ -11,7 +11,7 @@
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
test(function(test) {
|
test(function(test) {
|
||||||
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-allow-star.py", false);
|
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-allow-star.py", false);
|
||||||
|
|
||||||
xhr.send();
|
xhr.send();
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
test(function() {
|
test(function() {
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-allow.py", false);
|
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-allow.py", false);
|
||||||
|
|
||||||
xhr.send();
|
xhr.send();
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
test(function() {
|
test(function() {
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-cors-safelisted-request-headers.py", false);
|
xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-cors-safelisted-request-headers.py", false);
|
||||||
|
|
||||||
xhr.setRequestHeader("Accept", "*");
|
xhr.setRequestHeader("Accept", "*");
|
||||||
xhr.setRequestHeader("Accept-Language", "ru");
|
xhr.setRequestHeader("Accept-Language", "ru");
|
|
@ -12,7 +12,7 @@
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN +
|
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-whitelist-response-headers.py", false);
|
"/XMLHttpRequest/resources/access-control-basic-whitelist-response-headers.py", false);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
|
|
||||||
assert_not_equals(xhr.getResponseHeader("cache-control"), null);
|
assert_not_equals(xhr.getResponseHeader("cache-control"), null);
|
|
@ -8,7 +8,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
const path = "/xhr/resources/access-control-basic-denied.py";
|
const path = "/XMLHttpRequest/resources/access-control-basic-denied.py";
|
||||||
|
|
||||||
test(function() {
|
test(function() {
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
|
@ -12,7 +12,7 @@
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN +
|
xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-options-not-supported.py", false);
|
"/XMLHttpRequest/resources/access-control-basic-options-not-supported.py", false);
|
||||||
|
|
||||||
// Non-CORS-safelisted header
|
// Non-CORS-safelisted header
|
||||||
xhr.setRequestHeader("x-test", "foobar");
|
xhr.setRequestHeader("x-test", "foobar");
|
|
@ -12,14 +12,14 @@
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN +
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-put-allow.py", false);
|
"/XMLHttpRequest/resources/access-control-basic-put-allow.py", false);
|
||||||
xhr.setRequestHeader("Content-Type", "text/plain");
|
xhr.setRequestHeader("Content-Type", "text/plain");
|
||||||
xhr.send("PASS: PUT data received");
|
xhr.send("PASS: PUT data received");
|
||||||
|
|
||||||
assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\nPASS: PUT data received");
|
assert_equals(xhr.responseText, "PASS: Cross-domain access allowed.\nPASS: PUT data received");
|
||||||
|
|
||||||
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN +
|
xhr.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-put-allow.py", false);
|
"/XMLHttpRequest/resources/access-control-basic-put-allow.py", false);
|
||||||
xhr.setRequestHeader("Content-Type", "application/xml");
|
xhr.setRequestHeader("Content-Type", "application/xml");
|
||||||
|
|
||||||
try {
|
try {
|
|
@ -11,7 +11,7 @@
|
||||||
async_test(function(test) {
|
async_test(function(test) {
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/access-control-basic-options-not-supported.py");
|
xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN + "/XMLHttpRequest/resources/access-control-basic-options-not-supported.py");
|
||||||
|
|
||||||
xhr.onerror = test.unreached_func("Network error.");
|
xhr.onerror = test.unreached_func("Network error.");
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.open("POST", get_host_info().HTTP_ORIGIN +
|
xhr.open("POST", get_host_info().HTTP_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-options-not-supported.py", false);
|
"/XMLHttpRequest/resources/access-control-basic-options-not-supported.py", false);
|
||||||
|
|
||||||
xhr.setRequestHeader("Content-Type", "application/xml");
|
xhr.setRequestHeader("Content-Type", "application/xml");
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN +
|
xhr.open("POST", get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-options-not-supported.py", false);
|
"/XMLHttpRequest/resources/access-control-basic-options-not-supported.py", false);
|
||||||
|
|
||||||
xhr.setRequestHeader("Content-Type", "application/xml");
|
xhr.setRequestHeader("Content-Type", "application/xml");
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
xhr.onload = test.unreached_func("Request succeeded unexpectedly");
|
xhr.onload = test.unreached_func("Request succeeded unexpectedly");
|
||||||
|
|
||||||
xhr.open("FOO", get_host_info().HTTP_REMOTE_ORIGIN +
|
xhr.open("FOO", get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-basic-denied.py");
|
"/XMLHttpRequest/resources/access-control-basic-denied.py");
|
||||||
xhr.send();
|
xhr.send();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
|
@ -11,7 +11,7 @@
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
const uuid = token();
|
const uuid = token();
|
||||||
const url = get_host_info().HTTP_REMOTE_ORIGIN +
|
const url = get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-preflight-denied.py?token=" + uuid;
|
"/XMLHttpRequest/resources/access-control-preflight-denied.py?token=" + uuid;
|
||||||
|
|
||||||
async_test((test) => {
|
async_test((test) => {
|
||||||
let xhr = new XMLHttpRequest;
|
let xhr = new XMLHttpRequest;
|
|
@ -11,7 +11,7 @@
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
const uuid = token();
|
const uuid = token();
|
||||||
const url = get_host_info().HTTP_REMOTE_ORIGIN +
|
const url = get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-preflight-denied.py?token=" + uuid;
|
"/XMLHttpRequest/resources/access-control-preflight-denied.py?token=" + uuid;
|
||||||
|
|
||||||
async_test((test) => {
|
async_test((test) => {
|
||||||
let xhr = new XMLHttpRequest;
|
let xhr = new XMLHttpRequest;
|
|
@ -11,7 +11,7 @@
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
const uuid = token();
|
const uuid = token();
|
||||||
const url = get_host_info().HTTP_REMOTE_ORIGIN +
|
const url = get_host_info().HTTP_REMOTE_ORIGIN +
|
||||||
"/xhr/resources/access-control-preflight-denied.py?token=" + uuid;
|
"/XMLHttpRequest/resources/access-control-preflight-denied.py?token=" + uuid;
|
||||||
|
|
||||||
async_test((test) => {
|
async_test((test) => {
|
||||||
let xhr = new XMLHttpRequest;
|
let xhr = new XMLHttpRequest;
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче