Refresh WPT tests up to
73f4ad361ca56d890b5f46d62c3bc84371a77e10
https://bugs.webkit.org/show_bug.cgi?id=167105
Patch by Youenn Fablet <youennf@gmail.com> on 2017-01-17
Reviewed by Alex Christensen.
Refreshing tests but not WPT dependencies.
* resources/ImportExpectations:
* resources/TestRepositories:
* resources/resource-files.json:
* web-platform-tests/IndexedDB/idbindex-rename-abort.html:
* web-platform-tests/IndexedDB/idbindex-rename-errors.html:
* web-platform-tests/IndexedDB/idbindex-rename.html:
* web-platform-tests/IndexedDB/idbkeyrange-expected.txt:
* web-platform-tests/IndexedDB/idbkeyrange.htm:
* web-platform-tests/IndexedDB/idbobjectstore-rename-abort.html:
* web-platform-tests/IndexedDB/idbobjectstore-rename-errors.html:
* web-platform-tests/IndexedDB/idbobjectstore-rename-store.html:
* web-platform-tests/IndexedDB/idbrequest_error-expected.txt: Added.
* web-platform-tests/IndexedDB/idbrequest_error.html: Added.
* web-platform-tests/IndexedDB/idbrequest_result-expected.txt: Added.
* web-platform-tests/IndexedDB/idbrequest_result.html: Added.
* web-platform-tests/IndexedDB/name-scopes.html:
* web-platform-tests/IndexedDB/support-promises.js:
(databaseName):
(requestWatcher):
(migrateDatabase):
(migrateNamedDatabase):
(createNamedDatabase):
(openNamedDatabase):
(const.createBooksStore):
(createNotBooksStore):
(checkStoreIndexes):
(checkStoreGenerator):
* web-platform-tests/IndexedDB/transaction-abort-generator-revert.html:
* web-platform-tests/IndexedDB/transaction-abort-index-metadata-revert.html:
* web-platform-tests/IndexedDB/transaction-abort-multiple-metadata-revert.html:
* web-platform-tests/IndexedDB/transaction-abort-object-store-metadata-revert.html:
* web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-backend-aborted-expected.txt: Added.
* web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-backend-aborted.html: Added.
* web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-committed-expected.txt: Added.
* web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-committed.html: Added.
* web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-user-aborted-expected.txt: Added.
* web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-user-aborted.html: Added.
* web-platform-tests/IndexedDB/w3c-import.log:
* web-platform-tests/LICENSE.md: Added.
* web-platform-tests/README.md:
* web-platform-tests/XMLHttpRequest/OWNERS:
* web-platform-tests/XMLHttpRequest/open-url-multi-window-6.htm:
* web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js:
(getNextEvent):
(global.assert_xhr_event_order_matches):
* web-platform-tests/check_stability.py:
(GitHub.__init__):
(GitHub.patch):
(GitHub.post_comment):
(Firefox.install):
(Firefox._latest_geckodriver_version):
(call):
(setup_github_logging):
(get_sha1):
(get_affected_testfiles):
(write_inconsistent):
(write_results):
(main):
* web-platform-tests/ci_built_diff.sh: Added.
* web-platform-tests/common/redirect-opt-in.py: Added.
(main):
* web-platform-tests/common/w3c-import.log:
* web-platform-tests/custom-elements/parser/parser-uses-constructed-element-expected.txt:
* web-platform-tests/custom-elements/parser/parser-uses-constructed-element.html:
* web-platform-tests/dom/OWNERS:
* web-platform-tests/dom/events/w3c-import.log:
* web-platform-tests/dom/historical-expected.txt:
* web-platform-tests/dom/historical.html:
* web-platform-tests/dom/nodes/Node-cloneNode-expected.txt:
* web-platform-tests/dom/nodes/Node-cloneNode.html:
* web-platform-tests/domparsing/w3c-import.log:
* web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys.html:
* web-platform-tests/encrypted-media/clearkey-not-callable-after-createsession.html:
* web-platform-tests/encrypted-media/content/video_512x288_h264-360k_multikey_key1_dashinit.mp4: Added.
* web-platform-tests/encrypted-media/drm-events.html:
* web-platform-tests/encrypted-media/drm-expiration.html:
* web-platform-tests/encrypted-media/drm-keystatuses-multiple-sessions.html:
* web-platform-tests/encrypted-media/drm-keystatuses.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-destroy-persistent-license.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-persistent-license-events.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-persistent-license.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-persistent-usage-record-events.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary-clear-encrypted.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary-encrypted-clear.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multisession.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary-two-videos.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary-waitingforkey.html:
* web-platform-tests/encrypted-media/drm-mp4-playback-temporary.html:
* web-platform-tests/encrypted-media/drm-mp4-requestmediakeysystemaccess.html:
* web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-playback.html:
* web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-resetting-src.html:
* web-platform-tests/encrypted-media/drm-mp4-setmediakeys-at-same-time.html:
* web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-different-mediakeys.html:
* web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html:
* web-platform-tests/encrypted-media/drm-mp4-setmediakeys-to-multiple-video-elements.html:
* web-platform-tests/encrypted-media/drm-mp4-setmediakeys.html:
* web-platform-tests/encrypted-media/drm-mp4-waiting-for-a-key.html:
* web-platform-tests/encrypted-media/drm-not-callable-after-createsession.html:
* web-platform-tests/encrypted-media/drm-temporary-license-type.html:
* web-platform-tests/fetch/api/basic/request-headers-expected.txt:
* web-platform-tests/fetch/api/basic/request-headers-worker-expected.txt:
* web-platform-tests/fetch/api/basic/request-headers.js:
(checkContentType):
(requestOriginHeader):
* web-platform-tests/fetch/api/basic/request-upload-expected.txt:
* web-platform-tests/fetch/api/basic/request-upload-worker-expected.txt:
* web-platform-tests/fetch/api/basic/request-upload.js:
* web-platform-tests/fetch/api/headers/headers-basic-expected.txt:
* web-platform-tests/fetch/api/headers/headers-basic.html:
* web-platform-tests/fetch/api/headers/headers-idl.html:
* web-platform-tests/fetch/api/redirect/redirect-count-worker.html:
* web-platform-tests/fetch/api/redirect/redirect-count.html:
* web-platform-tests/fetch/api/redirect/redirect-count.js:
(redirectCount):
* web-platform-tests/fetch/api/redirect/redirect-referrer-expected.txt: Added.
* web-platform-tests/fetch/api/redirect/redirect-referrer-worker-expected.txt: Added.
* web-platform-tests/fetch/api/redirect/redirect-referrer-worker.html: Copied from LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-worker.html.
* web-platform-tests/fetch/api/redirect/redirect-referrer.html: Copied from LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count.html.
* web-platform-tests/fetch/api/redirect/redirect-referrer.js: Added.
(testReferrerAfterRedirection):
* web-platform-tests/fetch/api/redirect/w3c-import.log:
* web-platform-tests/fetch/api/request/multi-globals/current/current.html:
* web-platform-tests/fetch/api/request/multi-globals/incumbent/incumbent.html:
* web-platform-tests/fetch/api/request/multi-globals/url-parsing.html:
* web-platform-tests/fetch/api/request/request-bad-port-expected.txt: Added.
* web-platform-tests/fetch/api/request/request-bad-port.html: Added.
* web-platform-tests/fetch/api/request/request-idl.html:
* web-platform-tests/fetch/api/request/request-init-001.sub-expected.txt:
* web-platform-tests/fetch/api/request/request-init-001.sub.html:
* web-platform-tests/fetch/api/request/w3c-import.log:
* web-platform-tests/fetch/api/resources/redirect.py:
(main):
* web-platform-tests/fetch/api/response/multi-globals/current/current.html:
* web-platform-tests/fetch/api/response/multi-globals/incumbent/incumbent.html:
* web-platform-tests/fetch/api/response/multi-globals/url-parsing.html:
* web-platform-tests/fetch/api/response/response-consume-expected.txt:
* web-platform-tests/fetch/api/response/response-consume.html:
* web-platform-tests/fetch/nosniff/image-expected.txt:
* web-platform-tests/fetch/nosniff/image.html:
* web-platform-tests/html/OWNERS:
* web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resources/post_name_on_load.html: Added.
* web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resources/w3c-import.log:
* web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resume-timer-on-history-back-expected.txt: Added.
* web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resume-timer-on-history-back.html: Added.
* web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/w3c-import.log:
* web-platform-tests/html/browsers/browsing-the-web/history-traversal/resources/a.html: Added.
* web-platform-tests/html/browsers/browsing-the-web/history-traversal/resources/b.html: Added.
* web-platform-tests/html/browsers/browsing-the-web/history-traversal/resources/c.html: Added.
* web-platform-tests/html/browsers/browsing-the-web/history-traversal/resources/w3c-import.log: Copied from LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resources/w3c-import.log.
* web-platform-tests/html/browsers/browsing-the-web/history-traversal/w3c-import.log:
* web-platform-tests/html/browsers/history/the-location-interface/location-pathname-setter-question-mark-expected.txt: Added.
* web-platform-tests/html/browsers/history/the-location-interface/location-pathname-setter-question-mark.html: Added.
* web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-expected.txt: Added.
* web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-expected.txt: Added.
* web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird-expected.txt: Added.
* web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html: Added.
* web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html: Added.
* web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter.html: Added.
* web-platform-tests/html/browsers/history/the-location-interface/w3c-import.log:
* web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-exceptions-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt.
* web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-exceptions.html: Copied from LayoutTests/imported/w3c/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.
* web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt:
* web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window-expected.txt:
* web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html:
* web-platform-tests/html/browsers/origin/cross-origin-objects/frame.html:
* web-platform-tests/html/browsers/origin/cross-origin-objects/w3c-import.log:
* web-platform-tests/html/browsers/origin/cross-origin-objects/win-documentdomain.sub.html:
* web-platform-tests/html/dom/elements-embedded.js:
* web-platform-tests/html/dom/elements-metadata.js:
* web-platform-tests/html/dom/elements-misc.js:
* web-platform-tests/html/dom/elements-text.js:
* web-platform-tests/html/dom/elements/elements-in-the-dom/historical-expected.txt: Added.
* web-platform-tests/html/dom/elements/elements-in-the-dom/historical.html: Added.
* web-platform-tests/html/dom/elements/elements-in-the-dom/w3c-import.log:
* web-platform-tests/html/dom/interfaces.html:
* web-platform-tests/html/dom/reflection-embedded-expected.txt:
* web-platform-tests/html/dom/reflection-metadata-expected.txt:
* web-platform-tests/html/dom/reflection-misc-expected.txt:
* web-platform-tests/html/dom/reflection-text-expected.txt:
* web-platform-tests/html/resources/common.js:
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1-expected.txt: Added.
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html: Added.
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2-expected.txt: Added.
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2.html: Added.
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/dynamic-append-expected.txt: Added.
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/dynamic-append.html: Added.
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/moving-documents-expected.txt: Added.
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/moving-documents.html: Added.
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/not-in-shadow-tree-expected.txt: Added.
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/not-in-shadow-tree.html: Added.
* web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/w3c-import.log:
* web-platform-tests/html/semantics/embedded-content/the-canvas-element/size.attributes.parse.whitespace.html:
* web-platform-tests/html/semantics/embedded-content/the-canvas-element/size.attributes.setAttribute.whitespace.html:
* web-platform-tests/html/semantics/embedded-content/the-canvas-element/toDataURL.nocontext.html:
* web-platform-tests/html/semantics/embedded-content/the-canvas-element/toDataURL.png.complexcolours.png:
* web-platform-tests/html/semantics/embedded-content/the-img-element/image.png: Added.
* web-platform-tests/html/semantics/embedded-content/the-img-element/update-src-complete-expected.txt: Added.
* web-platform-tests/html/semantics/embedded-content/the-img-element/update-src-complete.html: Added.
* web-platform-tests/html/semantics/embedded-content/the-img-element/w3c-import.log:
* web-platform-tests/html/semantics/forms/constraints/form-validation-willValidate-expected.txt:
* web-platform-tests/html/semantics/forms/constraints/form-validation-willValidate.html:
* web-platform-tests/html/semantics/forms/form-control-infrastructure/form-expected.txt:
* web-platform-tests/html/semantics/forms/form-control-infrastructure/form.html:
* web-platform-tests/html/semantics/forms/form-submission-0/submit-entity-body.html:
* web-platform-tests/html/semantics/forms/form-submission-0/url-encoded-expected.txt:
* web-platform-tests/html/semantics/forms/form-submission-0/url-encoded.html:
* web-platform-tests/html/semantics/forms/resetting-a-form/reset-form.html:
* web-platform-tests/html/semantics/forms/the-form-element/form-nameditem-expected.txt:
* web-platform-tests/html/semantics/forms/the-form-element/form-nameditem.html:
* web-platform-tests/html/semantics/forms/the-input-element/clone-expected.txt: Added.
* web-platform-tests/html/semantics/forms/the-input-element/clone.html: Added.
* web-platform-tests/html/semantics/forms/the-input-element/radio-expected.txt:
* web-platform-tests/html/semantics/forms/the-input-element/radio.html:
* web-platform-tests/html/semantics/forms/the-input-element/w3c-import.log:
* web-platform-tests/html/semantics/forms/the-label-element/labelable-elements-expected.txt:
* web-platform-tests/html/semantics/forms/the-label-element/labelable-elements.html:
* web-platform-tests/html/semantics/forms/the-select-element/select-validity-expected.txt: Added.
* web-platform-tests/html/semantics/forms/the-select-element/select-validity.html: Added.
* web-platform-tests/html/semantics/forms/the-select-element/select-value-expected.txt: Added.
* web-platform-tests/html/semantics/forms/the-select-element/select-value.html: Added.
* web-platform-tests/html/semantics/forms/the-select-element/w3c-import.log:
* web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html:
* web-platform-tests/html/semantics/interfaces-expected.txt:
* web-platform-tests/html/semantics/interfaces.js:
* web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant-expected.txt:
* web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant.html:
* web-platform-tests/html/syntax/parsing/html5lib_entities01-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_entities01.html:
* web-platform-tests/html/syntax/parsing/html5lib_entities02-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_entities02.html:
* web-platform-tests/html/syntax/parsing/html5lib_innerHTML_adoption01-expected.txt: Added.
* web-platform-tests/html/syntax/parsing/html5lib_innerHTML_adoption01.html: Added.
* web-platform-tests/html/syntax/parsing/html5lib_innerHTML_foreign-fragment-expected.txt: Added.
* web-platform-tests/html/syntax/parsing/html5lib_innerHTML_foreign-fragment.html: Added.
* web-platform-tests/html/syntax/parsing/html5lib_innerHTML_math-expected.txt: Added.
* web-platform-tests/html/syntax/parsing/html5lib_innerHTML_math.html: Added.
* web-platform-tests/html/syntax/parsing/html5lib_innerHTML_webkit02-expected.txt: Added.
* web-platform-tests/html/syntax/parsing/html5lib_innerHTML_webkit02.html: Added.
* web-platform-tests/html/syntax/parsing/html5lib_isindex-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_isindex.html:
* web-platform-tests/html/syntax/parsing/html5lib_menuitem-element-expected.txt: Added.
* web-platform-tests/html/syntax/parsing/html5lib_menuitem-element.html: Added.
* web-platform-tests/html/syntax/parsing/html5lib_namespace-sensitivity-expected.txt: Added.
* web-platform-tests/html/syntax/parsing/html5lib_namespace-sensitivity.html: Added.
* web-platform-tests/html/syntax/parsing/html5lib_ruby-expected.txt: Added.
* web-platform-tests/html/syntax/parsing/html5lib_ruby.html: Added.
* web-platform-tests/html/syntax/parsing/html5lib_template-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_template.html:
* web-platform-tests/html/syntax/parsing/html5lib_tests11-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_tests11.html:
* web-platform-tests/html/syntax/parsing/html5lib_tests19-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_tests19.html:
* web-platform-tests/html/syntax/parsing/html5lib_tests2-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_tests2.html:
* web-platform-tests/html/syntax/parsing/html5lib_tests20-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_tests20.html:
* web-platform-tests/html/syntax/parsing/html5lib_tests25-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_tests25.html:
* web-platform-tests/html/syntax/parsing/html5lib_tests7-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_tests7.html:
* web-platform-tests/html/syntax/parsing/html5lib_webkit01-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_webkit01.html:
* web-platform-tests/html/syntax/parsing/html5lib_webkit02-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_webkit02.html:
* web-platform-tests/html/syntax/parsing/test.js:
(test_serializer):
* web-platform-tests/html/syntax/parsing/w3c-import.log:
* web-platform-tests/html/webappapis/scripting/events/event-handler-onauxclick-expected.txt: Added.
* web-platform-tests/html/webappapis/scripting/events/event-handler-onauxclick.html: Added.
* web-platform-tests/html/webappapis/scripting/events/w3c-import.log:
* web-platform-tests/html/webappapis/scripting/processing-model-2/compile-error-same-origin-with-hash-expected.txt: Added.
* web-platform-tests/html/webappapis/scripting/processing-model-2/compile-error-same-origin-with-hash.html: Added.
* web-platform-tests/html/webappapis/scripting/processing-model-2/runtime-error-same-origin-with-hash-expected.txt: Added.
* web-platform-tests/html/webappapis/scripting/processing-model-2/runtime-error-same-origin-with-hash.html: Added.
* web-platform-tests/html/webappapis/scripting/processing-model-2/w3c-import.log:
* web-platform-tests/media-source/mediasource-errors.html:
* web-platform-tests/resource-timing/resource_cached-expected.txt: Added.
* web-platform-tests/resource-timing/resource_cached.htm: Added.
* web-platform-tests/resource-timing/resource_connection_reuse-expected.txt: Added.
* web-platform-tests/resource-timing/resource_connection_reuse.html: Added.
* web-platform-tests/resource-timing/resource_dynamic_insertion-expected.txt: Added.
* web-platform-tests/resource-timing/resource_dynamic_insertion.html: Added.
* web-platform-tests/resource-timing/resources/fake_responses.html: Added.
* web-platform-tests/resource-timing/resources/fake_responses.py: Added.
(main):
* web-platform-tests/resource-timing/resources/inject_resource_test.html: Added.
* web-platform-tests/resource-timing/resources/w3c-import.log:
* web-platform-tests/resource-timing/resources/webperftestharnessextension.js: Added.
(test_method_exists):
(test_noless_than):
(test_resource_entries):
(performance_entrylist_checker.entry_check):
(performance_entrylist_checker.entrylist_order_check):
(performance_entrylist_checker.entrylist_check):
(performance_entrylist_checker):
(PerformanceContext):
(PerformanceContext.prototype.initialMeasures):
(PerformanceContext.prototype.mark):
(PerformanceContext.prototype.measure):
(PerformanceContext.prototype.clearMarks):
(PerformanceContext.prototype.clearMeasures):
(PerformanceContext.prototype.getEntries):
(PerformanceContext.prototype.getEntriesByType):
(PerformanceContext.prototype.getEntriesByName):
(PerformanceContext.prototype.setResourceTimingBufferSize):
(PerformanceContext.prototype.registerResourceTimingBufferFullCallback):
(PerformanceContext.prototype.clearResourceTimings):
* web-platform-tests/resource-timing/w3c-import.log:
* web-platform-tests/shadow-dom/slotchange-event-expected.txt:
* web-platform-tests/shadow-dom/slotchange-event.html:
* web-platform-tests/update-built-tests.sh: Added.
* web-platform-tests/url/OWNERS:
* web-platform-tests/url/a-element-expected.txt:
* web-platform-tests/url/a-element-origin-expected.txt:
* web-platform-tests/url/a-element-origin-xhtml-expected.txt:
* web-platform-tests/url/a-element-origin-xhtml.xhtml:
* web-platform-tests/url/a-element-origin.html:
* web-platform-tests/url/a-element-xhtml-expected.txt:
* web-platform-tests/url/a-element-xhtml.xhtml:
* web-platform-tests/url/a-element.html:
* web-platform-tests/url/setters_tests.json:
* web-platform-tests/url/url-constructor-expected.txt:
* web-platform-tests/url/url-origin-expected.txt:
* web-platform-tests/url/url-setters-expected.txt:
* web-platform-tests/url/urlsearchparams-append.html:
* web-platform-tests/url/urlsearchparams-constructor-expected.txt:
* web-platform-tests/url/urlsearchparams-constructor.html:
* web-platform-tests/url/urlsearchparams-delete.html:
* web-platform-tests/url/urlsearchparams-get.html:
* web-platform-tests/url/urlsearchparams-getall.html:
* web-platform-tests/url/urlsearchparams-has.html:
* web-platform-tests/url/urlsearchparams-set.html:
* web-platform-tests/url/urlsearchparams-stringifier.html:
* web-platform-tests/url/urltestdata.json:
* web-platform-tests/w3c-import.log:
* web-platform-tests/webrtc/RTCDataChannelEvent-constructor-expected.txt: Added.
* web-platform-tests/webrtc/RTCDataChannelEvent-constructor.html: Added.
* web-platform-tests/webrtc/RTCPeerConnectionIceEvent-constructor-expected.txt: Added.
* web-platform-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html: Added.
* web-platform-tests/webrtc/datachannel-emptystring.html:
* web-platform-tests/webrtc/simplecall.html:
* web-platform-tests/webrtc/w3c-import.log:
LayoutTests:
Refresh WPT tests up to
73f4ad361ca56d890b5f46d62c3bc84371a77e10
https://bugs.webkit.org/show_bug.cgi?id=167105
Patch by Youenn Fablet <youenn@apple.com> on 2017-01-17
Reviewed by Alex Christensen.
Skipping two fetch tests as they reach an ASSERT on debug builds (missing implemented feature).
* TestExpectations:
* platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-expected.txt: Added.
* platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/dom/reflection-embedded-expected.txt:
* platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/semantics/forms/constraints/form-validation-willValidate-expected.txt:
* platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/semantics/forms/form-control-infrastructure/form-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/form-control-infrastructure/form-expected.txt.
* platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-label-element/labelable-elements-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/the-label-element/labelable-elements-expected.txt.
* platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-select-element/select-validity-expected.txt: Added.
* platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/semantics/interfaces-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/semantics/interfaces-expected.txt.
* tests-options.json:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@210823
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2017-01-17 Youenn Fablet <youenn@apple.com>
+
+ Refresh WPT tests up to 73f4ad361ca56d890b5f46d62c3bc84371a77e10
+ https://bugs.webkit.org/show_bug.cgi?id=167105
+
+ Reviewed by Alex Christensen.
+
+ Skipping two fetch tests as they reach an ASSERT on debug builds (missing implemented feature).
+
+ * TestExpectations:
+ * platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-expected.txt: Added.
+ * platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/dom/reflection-embedded-expected.txt:
+ * platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/semantics/forms/constraints/form-validation-willValidate-expected.txt:
+ * platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/semantics/forms/form-control-infrastructure/form-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/form-control-infrastructure/form-expected.txt.
+ * platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-label-element/labelable-elements-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/the-label-element/labelable-elements-expected.txt.
+ * platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-select-element/select-validity-expected.txt: Added.
+ * platform/ios-simulator-wk2/imported/w3c/web-platform-tests/html/semantics/interfaces-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/semantics/interfaces-expected.txt.
+ * tests-options.json:
+
2017-01-16 Carlos Alberto Lopez Perez <clopez@igalia.com>
[GTK][MSE] Update list of media-source tests that fail.
webkit.org/b/157145 imported/w3c/web-platform-tests/fetch/nosniff/stylesheet.html [ Failure Pass ]
webkit.org/b/161312 imported/w3c/web-platform-tests/html/semantics/document-metadata/the-link-element/document-without-browsing-context.html [ Failure Pass ]
+# Flaky tests due to always changing assertion error message
+imported/w3c/web-platform-tests/fetch/api/basic/request-headers.html [ Failure ]
+imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/url-encoded.html [ Failure ]
+
+[ Debug ] imported/w3c/web-platform-tests/fetch/api/basic/request-upload.html [ Skip ]
+[ Debug ] imported/w3c/web-platform-tests/fetch/api/basic/request-upload-worker.html [ Skip ]
+
imported/w3c/web-platform-tests/fetch/api/cors/cors-origin.html [ DumpJSConsoleLogInStdErr ]
imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight.html [ DumpJSConsoleLogInStdErr ]
imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-redirect.html [ DumpJSConsoleLogInStdErr ]
webkit.org/b/163706 imported/w3c/csswg-test/css-shapes-1/shape-outside/shape-image/shape-image-024.html [ Skip ]
imported/blink/http/tests/security/shape-image-cors-disallow-origin.html [ ImageOnlyFailure ]
imported/blink/http/tests/security/shape-image-cors-port.html [ ImageOnlyFailure ]
-
webkit.org/b/163887 svg/as-image/svg-image-with-data-uri-use-data-uri.svg [ Pass Crash ]
# Temporary failure until we start using ANGLE as a WebGL backend
+2017-01-17 Youenn Fablet <youennf@gmail.com>
+
+ Refresh WPT tests up to 73f4ad361ca56d890b5f46d62c3bc84371a77e10
+ https://bugs.webkit.org/show_bug.cgi?id=167105
+
+ Reviewed by Alex Christensen.
+
+ Refreshing tests but not WPT dependencies.
+
+ * resources/ImportExpectations:
+ * resources/TestRepositories:
+ * resources/resource-files.json:
+ * web-platform-tests/IndexedDB/idbindex-rename-abort.html:
+ * web-platform-tests/IndexedDB/idbindex-rename-errors.html:
+ * web-platform-tests/IndexedDB/idbindex-rename.html:
+ * web-platform-tests/IndexedDB/idbkeyrange-expected.txt:
+ * web-platform-tests/IndexedDB/idbkeyrange.htm:
+ * web-platform-tests/IndexedDB/idbobjectstore-rename-abort.html:
+ * web-platform-tests/IndexedDB/idbobjectstore-rename-errors.html:
+ * web-platform-tests/IndexedDB/idbobjectstore-rename-store.html:
+ * web-platform-tests/IndexedDB/idbrequest_error-expected.txt: Added.
+ * web-platform-tests/IndexedDB/idbrequest_error.html: Added.
+ * web-platform-tests/IndexedDB/idbrequest_result-expected.txt: Added.
+ * web-platform-tests/IndexedDB/idbrequest_result.html: Added.
+ * web-platform-tests/IndexedDB/name-scopes.html:
+ * web-platform-tests/IndexedDB/support-promises.js:
+ (databaseName):
+ (requestWatcher):
+ (migrateDatabase):
+ (migrateNamedDatabase):
+ (createNamedDatabase):
+ (openNamedDatabase):
+ (const.createBooksStore):
+ (createNotBooksStore):
+ (checkStoreIndexes):
+ (checkStoreGenerator):
+ * web-platform-tests/IndexedDB/transaction-abort-generator-revert.html:
+ * web-platform-tests/IndexedDB/transaction-abort-index-metadata-revert.html:
+ * web-platform-tests/IndexedDB/transaction-abort-multiple-metadata-revert.html:
+ * web-platform-tests/IndexedDB/transaction-abort-object-store-metadata-revert.html:
+ * web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-backend-aborted-expected.txt: Added.
+ * web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-backend-aborted.html: Added.
+ * web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-committed-expected.txt: Added.
+ * web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-committed.html: Added.
+ * web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-user-aborted-expected.txt: Added.
+ * web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-user-aborted.html: Added.
+ * web-platform-tests/IndexedDB/w3c-import.log:
+ * web-platform-tests/LICENSE.md: Added.
+ * web-platform-tests/README.md:
+ * web-platform-tests/XMLHttpRequest/OWNERS:
+ * web-platform-tests/XMLHttpRequest/open-url-multi-window-6.htm:
+ * web-platform-tests/XMLHttpRequest/resources/xmlhttprequest-event-order.js:
+ (getNextEvent):
+ (global.assert_xhr_event_order_matches):
+ * web-platform-tests/check_stability.py:
+ (GitHub.__init__):
+ (GitHub.patch):
+ (GitHub.post_comment):
+ (Firefox.install):
+ (Firefox._latest_geckodriver_version):
+ (call):
+ (setup_github_logging):
+ (get_sha1):
+ (get_affected_testfiles):
+ (write_inconsistent):
+ (write_results):
+ (main):
+ * web-platform-tests/ci_built_diff.sh: Added.
+ * web-platform-tests/common/redirect-opt-in.py: Added.
+ (main):
+ * web-platform-tests/common/w3c-import.log:
+ * web-platform-tests/custom-elements/parser/parser-uses-constructed-element-expected.txt:
+ * web-platform-tests/custom-elements/parser/parser-uses-constructed-element.html:
+ * web-platform-tests/dom/OWNERS:
+ * web-platform-tests/dom/events/w3c-import.log:
+ * web-platform-tests/dom/historical-expected.txt:
+ * web-platform-tests/dom/historical.html:
+ * web-platform-tests/dom/nodes/Node-cloneNode-expected.txt:
+ * web-platform-tests/dom/nodes/Node-cloneNode.html:
+ * web-platform-tests/domparsing/w3c-import.log:
+ * web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys.html:
+ * web-platform-tests/encrypted-media/clearkey-not-callable-after-createsession.html:
+ * web-platform-tests/encrypted-media/content/video_512x288_h264-360k_multikey_key1_dashinit.mp4: Added.
+ * web-platform-tests/encrypted-media/drm-events.html:
+ * web-platform-tests/encrypted-media/drm-expiration.html:
+ * web-platform-tests/encrypted-media/drm-keystatuses-multiple-sessions.html:
+ * web-platform-tests/encrypted-media/drm-keystatuses.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-destroy-persistent-license.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-persistent-license-events.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-persistent-license.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-persistent-usage-record-events.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-retrieve-persistent-usage-record.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary-clear-encrypted.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary-encrypted-clear.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multikey.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary-multisession.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-src.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-after-update.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-immediately.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary-setMediaKeys-onencrypted.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary-two-videos.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary-waitingforkey.html:
+ * web-platform-tests/encrypted-media/drm-mp4-playback-temporary.html:
+ * web-platform-tests/encrypted-media/drm-mp4-requestmediakeysystemaccess.html:
+ * web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-playback.html:
+ * web-platform-tests/encrypted-media/drm-mp4-setmediakeys-again-after-resetting-src.html:
+ * web-platform-tests/encrypted-media/drm-mp4-setmediakeys-at-same-time.html:
+ * web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-different-mediakeys.html:
+ * web-platform-tests/encrypted-media/drm-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.html:
+ * web-platform-tests/encrypted-media/drm-mp4-setmediakeys-to-multiple-video-elements.html:
+ * web-platform-tests/encrypted-media/drm-mp4-setmediakeys.html:
+ * web-platform-tests/encrypted-media/drm-mp4-waiting-for-a-key.html:
+ * web-platform-tests/encrypted-media/drm-not-callable-after-createsession.html:
+ * web-platform-tests/encrypted-media/drm-temporary-license-type.html:
+ * web-platform-tests/fetch/api/basic/request-headers-expected.txt:
+ * web-platform-tests/fetch/api/basic/request-headers-worker-expected.txt:
+ * web-platform-tests/fetch/api/basic/request-headers.js:
+ (checkContentType):
+ (requestOriginHeader):
+ * web-platform-tests/fetch/api/basic/request-upload-expected.txt:
+ * web-platform-tests/fetch/api/basic/request-upload-worker-expected.txt:
+ * web-platform-tests/fetch/api/basic/request-upload.js:
+ * web-platform-tests/fetch/api/headers/headers-basic-expected.txt:
+ * web-platform-tests/fetch/api/headers/headers-basic.html:
+ * web-platform-tests/fetch/api/headers/headers-idl.html:
+ * web-platform-tests/fetch/api/redirect/redirect-count-worker.html:
+ * web-platform-tests/fetch/api/redirect/redirect-count.html:
+ * web-platform-tests/fetch/api/redirect/redirect-count.js:
+ (redirectCount):
+ * web-platform-tests/fetch/api/redirect/redirect-referrer-expected.txt: Added.
+ * web-platform-tests/fetch/api/redirect/redirect-referrer-worker-expected.txt: Added.
+ * web-platform-tests/fetch/api/redirect/redirect-referrer-worker.html: Copied from LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-worker.html.
+ * web-platform-tests/fetch/api/redirect/redirect-referrer.html: Copied from LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count.html.
+ * web-platform-tests/fetch/api/redirect/redirect-referrer.js: Added.
+ (testReferrerAfterRedirection):
+ * web-platform-tests/fetch/api/redirect/w3c-import.log:
+ * web-platform-tests/fetch/api/request/multi-globals/current/current.html:
+ * web-platform-tests/fetch/api/request/multi-globals/incumbent/incumbent.html:
+ * web-platform-tests/fetch/api/request/multi-globals/url-parsing.html:
+ * web-platform-tests/fetch/api/request/request-bad-port-expected.txt: Added.
+ * web-platform-tests/fetch/api/request/request-bad-port.html: Added.
+ * web-platform-tests/fetch/api/request/request-idl.html:
+ * web-platform-tests/fetch/api/request/request-init-001.sub-expected.txt:
+ * web-platform-tests/fetch/api/request/request-init-001.sub.html:
+ * web-platform-tests/fetch/api/request/w3c-import.log:
+ * web-platform-tests/fetch/api/resources/redirect.py:
+ (main):
+ * web-platform-tests/fetch/api/response/multi-globals/current/current.html:
+ * web-platform-tests/fetch/api/response/multi-globals/incumbent/incumbent.html:
+ * web-platform-tests/fetch/api/response/multi-globals/url-parsing.html:
+ * web-platform-tests/fetch/api/response/response-consume-expected.txt:
+ * web-platform-tests/fetch/api/response/response-consume.html:
+ * web-platform-tests/fetch/nosniff/image-expected.txt:
+ * web-platform-tests/fetch/nosniff/image.html:
+ * web-platform-tests/html/OWNERS:
+ * web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resources/post_name_on_load.html: Added.
+ * web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resources/w3c-import.log:
+ * web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resume-timer-on-history-back-expected.txt: Added.
+ * web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resume-timer-on-history-back.html: Added.
+ * web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/w3c-import.log:
+ * web-platform-tests/html/browsers/browsing-the-web/history-traversal/resources/a.html: Added.
+ * web-platform-tests/html/browsers/browsing-the-web/history-traversal/resources/b.html: Added.
+ * web-platform-tests/html/browsers/browsing-the-web/history-traversal/resources/c.html: Added.
+ * web-platform-tests/html/browsers/browsing-the-web/history-traversal/resources/w3c-import.log: Copied from LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/resources/w3c-import.log.
+ * web-platform-tests/html/browsers/browsing-the-web/history-traversal/w3c-import.log:
+ * web-platform-tests/html/browsers/history/the-location-interface/location-pathname-setter-question-mark-expected.txt: Added.
+ * web-platform-tests/html/browsers/history/the-location-interface/location-pathname-setter-question-mark.html: Added.
+ * web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-expected.txt: Added.
+ * web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-expected.txt: Added.
+ * web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird-expected.txt: Added.
+ * web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html: Added.
+ * web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html: Added.
+ * web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter.html: Added.
+ * web-platform-tests/html/browsers/history/the-location-interface/w3c-import.log:
+ * web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-exceptions-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt.
+ * web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-exceptions.html: Copied from LayoutTests/imported/w3c/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.
+ * web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt:
+ * web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window-expected.txt:
+ * web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html:
+ * web-platform-tests/html/browsers/origin/cross-origin-objects/frame.html:
+ * web-platform-tests/html/browsers/origin/cross-origin-objects/w3c-import.log:
+ * web-platform-tests/html/browsers/origin/cross-origin-objects/win-documentdomain.sub.html:
+ * web-platform-tests/html/dom/elements-embedded.js:
+ * web-platform-tests/html/dom/elements-metadata.js:
+ * web-platform-tests/html/dom/elements-misc.js:
+ * web-platform-tests/html/dom/elements-text.js:
+ * web-platform-tests/html/dom/elements/elements-in-the-dom/historical-expected.txt: Added.
+ * web-platform-tests/html/dom/elements/elements-in-the-dom/historical.html: Added.
+ * web-platform-tests/html/dom/elements/elements-in-the-dom/w3c-import.log:
+ * web-platform-tests/html/dom/interfaces.html:
+ * web-platform-tests/html/dom/reflection-embedded-expected.txt:
+ * web-platform-tests/html/dom/reflection-metadata-expected.txt:
+ * web-platform-tests/html/dom/reflection-misc-expected.txt:
+ * web-platform-tests/html/dom/reflection-text-expected.txt:
+ * web-platform-tests/html/resources/common.js:
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1-expected.txt: Added.
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html: Added.
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2-expected.txt: Added.
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2.html: Added.
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/dynamic-append-expected.txt: Added.
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/dynamic-append.html: Added.
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/moving-documents-expected.txt: Added.
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/moving-documents.html: Added.
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/not-in-shadow-tree-expected.txt: Added.
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/not-in-shadow-tree.html: Added.
+ * web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/w3c-import.log:
+ * web-platform-tests/html/semantics/embedded-content/the-canvas-element/size.attributes.parse.whitespace.html:
+ * web-platform-tests/html/semantics/embedded-content/the-canvas-element/size.attributes.setAttribute.whitespace.html:
+ * web-platform-tests/html/semantics/embedded-content/the-canvas-element/toDataURL.nocontext.html:
+ * web-platform-tests/html/semantics/embedded-content/the-canvas-element/toDataURL.png.complexcolours.png:
+ * web-platform-tests/html/semantics/embedded-content/the-img-element/image.png: Added.
+ * web-platform-tests/html/semantics/embedded-content/the-img-element/update-src-complete-expected.txt: Added.
+ * web-platform-tests/html/semantics/embedded-content/the-img-element/update-src-complete.html: Added.
+ * web-platform-tests/html/semantics/embedded-content/the-img-element/w3c-import.log:
+ * web-platform-tests/html/semantics/forms/constraints/form-validation-willValidate-expected.txt:
+ * web-platform-tests/html/semantics/forms/constraints/form-validation-willValidate.html:
+ * web-platform-tests/html/semantics/forms/form-control-infrastructure/form-expected.txt:
+ * web-platform-tests/html/semantics/forms/form-control-infrastructure/form.html:
+ * web-platform-tests/html/semantics/forms/form-submission-0/submit-entity-body.html:
+ * web-platform-tests/html/semantics/forms/form-submission-0/url-encoded-expected.txt:
+ * web-platform-tests/html/semantics/forms/form-submission-0/url-encoded.html:
+ * web-platform-tests/html/semantics/forms/resetting-a-form/reset-form.html:
+ * web-platform-tests/html/semantics/forms/the-form-element/form-nameditem-expected.txt:
+ * web-platform-tests/html/semantics/forms/the-form-element/form-nameditem.html:
+ * web-platform-tests/html/semantics/forms/the-input-element/clone-expected.txt: Added.
+ * web-platform-tests/html/semantics/forms/the-input-element/clone.html: Added.
+ * web-platform-tests/html/semantics/forms/the-input-element/radio-expected.txt:
+ * web-platform-tests/html/semantics/forms/the-input-element/radio.html:
+ * web-platform-tests/html/semantics/forms/the-input-element/w3c-import.log:
+ * web-platform-tests/html/semantics/forms/the-label-element/labelable-elements-expected.txt:
+ * web-platform-tests/html/semantics/forms/the-label-element/labelable-elements.html:
+ * web-platform-tests/html/semantics/forms/the-select-element/select-validity-expected.txt: Added.
+ * web-platform-tests/html/semantics/forms/the-select-element/select-validity.html: Added.
+ * web-platform-tests/html/semantics/forms/the-select-element/select-value-expected.txt: Added.
+ * web-platform-tests/html/semantics/forms/the-select-element/select-value.html: Added.
+ * web-platform-tests/html/semantics/forms/the-select-element/w3c-import.log:
+ * web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html:
+ * web-platform-tests/html/semantics/interfaces-expected.txt:
+ * web-platform-tests/html/semantics/interfaces.js:
+ * web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant-expected.txt:
+ * web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_entities01-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_entities01.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_entities02-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_entities02.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_innerHTML_adoption01-expected.txt: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_innerHTML_adoption01.html: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_innerHTML_foreign-fragment-expected.txt: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_innerHTML_foreign-fragment.html: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_innerHTML_math-expected.txt: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_innerHTML_math.html: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_innerHTML_webkit02-expected.txt: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_innerHTML_webkit02.html: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_isindex-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_isindex.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_menuitem-element-expected.txt: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_menuitem-element.html: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_namespace-sensitivity-expected.txt: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_namespace-sensitivity.html: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_ruby-expected.txt: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_ruby.html: Added.
+ * web-platform-tests/html/syntax/parsing/html5lib_template-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_template.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests11-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests11.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests19-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests19.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests2-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests2.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests20-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests20.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests25-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests25.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests7-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_tests7.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_webkit01-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_webkit01.html:
+ * web-platform-tests/html/syntax/parsing/html5lib_webkit02-expected.txt:
+ * web-platform-tests/html/syntax/parsing/html5lib_webkit02.html:
+ * web-platform-tests/html/syntax/parsing/test.js:
+ (test_serializer):
+ * web-platform-tests/html/syntax/parsing/w3c-import.log:
+ * web-platform-tests/html/webappapis/scripting/events/event-handler-onauxclick-expected.txt: Added.
+ * web-platform-tests/html/webappapis/scripting/events/event-handler-onauxclick.html: Added.
+ * web-platform-tests/html/webappapis/scripting/events/w3c-import.log:
+ * web-platform-tests/html/webappapis/scripting/processing-model-2/compile-error-same-origin-with-hash-expected.txt: Added.
+ * web-platform-tests/html/webappapis/scripting/processing-model-2/compile-error-same-origin-with-hash.html: Added.
+ * web-platform-tests/html/webappapis/scripting/processing-model-2/runtime-error-same-origin-with-hash-expected.txt: Added.
+ * web-platform-tests/html/webappapis/scripting/processing-model-2/runtime-error-same-origin-with-hash.html: Added.
+ * web-platform-tests/html/webappapis/scripting/processing-model-2/w3c-import.log:
+ * web-platform-tests/media-source/mediasource-errors.html:
+ * web-platform-tests/resource-timing/resource_cached-expected.txt: Added.
+ * web-platform-tests/resource-timing/resource_cached.htm: Added.
+ * web-platform-tests/resource-timing/resource_connection_reuse-expected.txt: Added.
+ * web-platform-tests/resource-timing/resource_connection_reuse.html: Added.
+ * web-platform-tests/resource-timing/resource_dynamic_insertion-expected.txt: Added.
+ * web-platform-tests/resource-timing/resource_dynamic_insertion.html: Added.
+ * web-platform-tests/resource-timing/resources/fake_responses.html: Added.
+ * web-platform-tests/resource-timing/resources/fake_responses.py: Added.
+ (main):
+ * web-platform-tests/resource-timing/resources/inject_resource_test.html: Added.
+ * web-platform-tests/resource-timing/resources/w3c-import.log:
+ * web-platform-tests/resource-timing/resources/webperftestharnessextension.js: Added.
+ (test_method_exists):
+ (test_noless_than):
+ (test_resource_entries):
+ (performance_entrylist_checker.entry_check):
+ (performance_entrylist_checker.entrylist_order_check):
+ (performance_entrylist_checker.entrylist_check):
+ (performance_entrylist_checker):
+ (PerformanceContext):
+ (PerformanceContext.prototype.initialMeasures):
+ (PerformanceContext.prototype.mark):
+ (PerformanceContext.prototype.measure):
+ (PerformanceContext.prototype.clearMarks):
+ (PerformanceContext.prototype.clearMeasures):
+ (PerformanceContext.prototype.getEntries):
+ (PerformanceContext.prototype.getEntriesByType):
+ (PerformanceContext.prototype.getEntriesByName):
+ (PerformanceContext.prototype.setResourceTimingBufferSize):
+ (PerformanceContext.prototype.registerResourceTimingBufferFullCallback):
+ (PerformanceContext.prototype.clearResourceTimings):
+ * web-platform-tests/resource-timing/w3c-import.log:
+ * web-platform-tests/shadow-dom/slotchange-event-expected.txt:
+ * web-platform-tests/shadow-dom/slotchange-event.html:
+ * web-platform-tests/update-built-tests.sh: Added.
+ * web-platform-tests/url/OWNERS:
+ * web-platform-tests/url/a-element-expected.txt:
+ * web-platform-tests/url/a-element-origin-expected.txt:
+ * web-platform-tests/url/a-element-origin-xhtml-expected.txt:
+ * web-platform-tests/url/a-element-origin-xhtml.xhtml:
+ * web-platform-tests/url/a-element-origin.html:
+ * web-platform-tests/url/a-element-xhtml-expected.txt:
+ * web-platform-tests/url/a-element-xhtml.xhtml:
+ * web-platform-tests/url/a-element.html:
+ * web-platform-tests/url/setters_tests.json:
+ * web-platform-tests/url/url-constructor-expected.txt:
+ * web-platform-tests/url/url-origin-expected.txt:
+ * web-platform-tests/url/url-setters-expected.txt:
+ * web-platform-tests/url/urlsearchparams-append.html:
+ * web-platform-tests/url/urlsearchparams-constructor-expected.txt:
+ * web-platform-tests/url/urlsearchparams-constructor.html:
+ * web-platform-tests/url/urlsearchparams-delete.html:
+ * web-platform-tests/url/urlsearchparams-get.html:
+ * web-platform-tests/url/urlsearchparams-getall.html:
+ * web-platform-tests/url/urlsearchparams-has.html:
+ * web-platform-tests/url/urlsearchparams-set.html:
+ * web-platform-tests/url/urlsearchparams-stringifier.html:
+ * web-platform-tests/url/urltestdata.json:
+ * web-platform-tests/w3c-import.log:
+ * web-platform-tests/webrtc/RTCDataChannelEvent-constructor-expected.txt: Added.
+ * web-platform-tests/webrtc/RTCDataChannelEvent-constructor.html: Added.
+ * web-platform-tests/webrtc/RTCPeerConnectionIceEvent-constructor-expected.txt: Added.
+ * web-platform-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html: Added.
+ * web-platform-tests/webrtc/datachannel-emptystring.html:
+ * web-platform-tests/webrtc/simplecall.html:
+ * web-platform-tests/webrtc/w3c-import.log:
+
2017-01-14 Chris Dumez <cdumez@apple.com>
Align the innerText setter with the HTML spec and Gecko
web-platform-tests/XMLHttpRequest/send-authentication-competing-names-passwords.htm [ Skip ]
web-platform-tests/XMLHttpRequest/send-entity-body-basic.htm [ Skip ]
web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub.htm [ Skip ]
+web-platform-tests/accelerometer [ Skip ]
web-platform-tests/ambient-light [ Skip ]
web-platform-tests/annotation-model [ Skip ]
web-platform-tests/annotation-protocol [ Skip ]
web-platform-tests/annotation-vocab [ Skip ]
web-platform-tests/animation-timing [ Skip ]
web-platform-tests/app-uri [ Skip ]
+web-platform-tests/auxclick [ Skip ]
web-platform-tests/battery-status [ Skip ]
web-platform-tests/bluetooth [ Skip ]
web-platform-tests/browser-payment-api [ Skip ]
+web-platform-tests/clear-site-data [ Skip ]
web-platform-tests/compat [ Skip ]
web-platform-tests/console [Skip]
web-platform-tests/content-security-policy [ Skip ]
web-platform-tests/cookies [Skip]
web-platform-tests/cors [ Skip ]
+web-platform-tests/css-values [ Skip ]
#web-platform-tests/custom-elements [ Pass ]
web-platform-tests/custom-elements/v0 [ Skip ]
web-platform-tests/cssom [ Skip ]
web-platform-tests/ext-xhtml-pubid [ Skip ]
#web-platform-tests/fetch [ Pass ]
web-platform-tests/fullscreen [ Skip ]
-web-platform-tests/geolocation-API [ Skip ]
web-platform-tests/gamepad [ Skip ]
+web-platform-tests/geolocation-API [ Skip ]
+web-platform-tests/gyroscope [ Skip ]
web-platform-tests/hr-time [ Skip ]
#web-platform-tests/html [ Pass ]
web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name.html [ Skip ]
web-platform-tests/innerText [ Skip ]
web-platform-tests/input-events [ Skip ]
web-platform-tests/js [ Skip ]
+web-platform-tests/magnetometer [ Skip ]
web-platform-tests/mathml [ Skip ]
web-platform-tests/mediacapture-record [ Skip ]
web-platform-tests/mediacapture-streams [ Skip ]
web-platform-tests/mixed-content [ Skip ]
web-platform-tests/navigation-timing [ Skip ]
web-platform-tests/notifications [ Skip ]
+web-platform-tests/offscreen-canvas [ Skip ]
web-platform-tests/old-tests [ Skip ]
web-platform-tests/orientation-event [ Skip ]
web-platform-tests/page-visibility [ Skip ]
web-platform-tests/performance-timeline [ Skip ]
web-platform-tests/pointerevents [ Skip ]
web-platform-tests/pointerlock [ Skip ]
+web-platform-tests/preload [ Skip ]
web-platform-tests/progress-events [ Skip ]
web-platform-tests/proximity [ Skip ]
web-platform-tests/quirks-mode [ Skip ]
#web-platform-tests/touch-events [ Pass ]
web-platform-tests/typedarrays [ Skip ]
web-platform-tests/uievents [ Skip ]
+web-platform-tests/upgrade-insecure-requests [ Skip ]
#web-platform-tests/url [ Pass ]
web-platform-tests/user-timing [ Skip ]
web-platform-tests/vibration [ Skip ]
#web-platform-tests/webrtc [ Pass ]
web-platform-tests/websockets [ Skip ]
web-platform-tests/webstorage [ Skip ]
+web-platform-tests/webvr [ SKip ]
web-platform-tests/webvtt [ Skip ]
web-platform-tests/workers [ Skip ]
{
"name": "web-platform-tests",
"url": "https://github.com/w3c/web-platform-tests.git",
- "revision": "a4c2b37",
+ "revision": "73f4ad361ca56d890b5f46d62c3bc84371a77e10",
"paths_to_skip": [
"conformance-checkers",
"docs",
"web-platform-tests/html/syntax/parsing/foreign_content_013.html",
"web-platform-tests/html/webappapis/scripting/events/onerroreventhandler-frame.html",
"web-platform-tests/mathml/relations/html5-tree/unique-identifier-1-iframe.html",
- "web-platform-tests/resource-timing/iframe-setdomain.sub.html"
+ "web-platform-tests/resource-timing/iframe-setdomain.sub.html",
+ "web-platform-tests/upgrade-insecure-requests/support/post-origin-to-parent.html"
]
}
\ No newline at end of file
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
<title>IndexedDB: index renaming support in aborted transactions</title>
<link rel="help"
href="https://w3c.github.io/IndexedDB/#dom-idbindex-name">
<script src="/resources/testharnessreport.js"></script>
<script src="support-promises.js"></script>
<script>
+'use strict';
promise_test(testCase => {
const dbName = databaseName(testCase);
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
<title>IndexedDB: index renaming error handling</title>
<link rel="help"
href="https://w3c.github.io/IndexedDB/#dom-idbindex-name">
<script src="/resources/testharnessreport.js"></script>
<script src="support-promises.js"></script>
<script>
+'use strict';
promise_test(testCase => {
return createDatabase(testCase, (database, transaction) => {
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
+<meta name="timeout" content="long">
<title>IndexedDB: index renaming support</title>
<link rel="help"
href="https://w3c.github.io/IndexedDB/#dom-idbindex-name">
<script src="/resources/testharnessreport.js"></script>
<script src="support-promises.js"></script>
<script>
+'use strict';
promise_test(testCase => {
let authorIndex = null, authorIndex2 = null;
PASS IDBKeyRange.only() - returns an IDBKeyRange and the properties are set correctly
+PASS IDBKeyRange.only() - throws on invalid keys
PASS IDBKeyRange.lowerBound() - returns an IDBKeyRange and the properties are set correctly
PASS IDBKeyRange.lowerBound() - 'open' parameter has correct default set
+PASS IDBKeyRange.lowerBound() - throws on invalid keys
PASS IDBKeyRange.upperBound() - returns an IDBKeyRange and the properties are set correctly
PASS IDBKeyRange.upperBound() - 'open' parameter has correct default set
+PASS IDBKeyRange.upperBound() - throws on invalid keys
PASS IDBKeyRange.bound() - returns an IDBKeyRange and the properties are set correctly
PASS IDBKeyRange.bound() - 'lowerOpen' and 'upperOpen' parameters have correct defaults set
assert_false(keyRange.upperOpen, "keyRange.upperOpen");
}, "IDBKeyRange.only() - returns an IDBKeyRange and the properties are set correctly");
+ test( function() {
+ assert_throws('DataError', function() { IDBKeyRange.only(undefined); }, 'undefined is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.only(null); }, 'null is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.only({}); }, 'Object is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.only(Symbol()); }, 'Symbol is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.only(true); }, 'boolean is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.only(() => {}); }, 'function is not a valid key');
+ }, "IDBKeyRange.only() - throws on invalid keys");
+
// lowerBound
test( function() {
var keyRange = IDBKeyRange.lowerBound(1, true)
assert_false(keyRange.lowerOpen, "keyRange.lowerOpen");
}, "IDBKeyRange.lowerBound() - 'open' parameter has correct default set");
+ test( function() {
+ assert_throws('DataError', function() { IDBKeyRange.lowerBound(undefined); }, 'undefined is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.lowerBound(null); }, 'null is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.lowerBound({}); }, 'Object is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.lowerBound(Symbol()); }, 'Symbol is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.lowerBound(true); }, 'boolean is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.lowerBound(() => {}); }, 'function is not a valid key');
+ }, "IDBKeyRange.lowerBound() - throws on invalid keys");
+
// upperBound
test( function() {
var keyRange = IDBKeyRange.upperBound(1, true);
assert_false(keyRange.upperOpen, "keyRange.upperOpen");
}, "IDBKeyRange.upperBound() - 'open' parameter has correct default set");
+ test( function() {
+ assert_throws('DataError', function() { IDBKeyRange.upperBound(undefined); }, 'undefined is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.upperBound(null); }, 'null is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.upperBound({}); }, 'Object is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.upperBound(Symbol()); }, 'Symbol is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.upperBound(true); }, 'boolean is not a valid key');
+ assert_throws('DataError', function() { IDBKeyRange.upperBound(() => {}); }, 'function is not a valid key');
+ }, "IDBKeyRange.upperBound() - throws on invalid keys");
+
// bound
test( function() {
var keyRange = IDBKeyRange.bound(1, 2, true, true);
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
<title>IndexedDB: object store renaming support in aborted transactions</title>
<link rel="help"
href="https://w3c.github.io/IndexedDB/#dom-idbobjectstore-name">
<script src="/resources/testharnessreport.js"></script>
<script src="support-promises.js"></script>
<script>
+'use strict';
promise_test(testCase => {
const dbName = databaseName(testCase);
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
<title>IndexedDB: object store renaming error handling</title>
<link rel="help"
href="https://w3c.github.io/IndexedDB/#dom-idbobjectstore-name">
<script src="/resources/testharnessreport.js"></script>
<script src="support-promises.js"></script>
<script>
+'use strict';
promise_test(testCase => {
return createDatabase(testCase, (database, transaction) => {
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
+<meta name="timeout" content="long">
<title>IndexedDB: object store renaming support</title>
<link rel="help"
href="https://w3c.github.io/IndexedDB/#dom-idbobjectstore-name">
<script src="/resources/testharnessreport.js"></script>
<script src="support-promises.js"></script>
<script>
+'use strict';
// Renames the 'books' store to 'renamed_books'.
//
--- /dev/null
+
+PASS IDBRequest.error throws if ready state is pending
+
--- /dev/null
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>IDBRequest.error</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=support.js></script>
+
+<script>
+async_test(t => {
+ var open = createdb(t);
+ open.onupgradeneeded = t.step_func(e => {
+ var db = e.target.result;
+ db.createObjectStore('store');
+ });
+ open.onsuccess = t.step_func(e => {
+ var db = e.target.result;
+ var request = db.transaction('store').objectStore('store').get(0);
+
+ assert_equals(request.readyState, 'pending');
+ assert_throws('InvalidStateError', () => request.error,
+ 'IDBRequest.error should throw if request is pending');
+ t.done();
+ });
+}, 'IDBRequest.error throws if ready state is pending');
+</script>
--- /dev/null
+
+PASS IDBRequest.result throws if ready state is pending
+
--- /dev/null
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>IDBRequest.result</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=support.js></script>
+
+<script>
+async_test(t => {
+ var open = createdb(t);
+ open.onupgradeneeded = t.step_func(e => {
+ var db = e.target.result;
+ db.createObjectStore('store');
+ });
+ open.onsuccess = t.step_func(e => {
+ var db = e.target.result;
+ var request = db.transaction('store').objectStore('store').get(0);
+
+ assert_equals(request.readyState, 'pending');
+ assert_throws('InvalidStateError', () => request.result,
+ 'IDBRequest.result should throw if request is pending');
+ t.done();
+ });
+}, 'IDBRequest.result throws if ready state is pending');
+</script>
-<!DOCTYPE html>
+<!doctype html>
<meta charset="utf-8">
<title>
IndexedDB: scoping for database / object store / index names, and index keys
-// Returns an IndexedDB database name likely to be unique to the test case.
-const databaseName = (testCase) => {
+'use strict';
+
+// Returns an IndexedDB database name that is unique to the test case.
+function databaseName(testCase) {
return 'db' + self.location.pathname + '-' + testCase.name;
-};
+}
// Creates an EventWatcher covering all the events that can be issued by
// IndexedDB requests and transactions.
-const requestWatcher = (testCase, request) => {
+function requestWatcher(testCase, request) {
return new EventWatcher(testCase, request,
- ['error', 'success', 'upgradeneeded']);
-};
+ ['abort', 'blocked', 'complete', 'error', 'success', 'upgradeneeded']);
+}
// Migrates an IndexedDB database whose name is unique for the test case.
//
// newVersion must be greater than the database's current version.
//
// migrationCallback will be called during a versionchange transaction and will
-// be given the created database and the versionchange transaction.
+// given the created database, the versionchange transaction, and the database
+// open request.
//
// Returns a promise. If the versionchange transaction goes through, the promise
// resolves to an IndexedDB database that must be closed by the caller. If the
// versionchange transaction is aborted, the promise resolves to an error.
-const migrateDatabase = (testCase, newVersion, migrationCallback) => {
+function migrateDatabase(testCase, newVersion, migrationCallback) {
return migrateNamedDatabase(
testCase, databaseName(testCase), newVersion, migrationCallback);
-};
+}
// Migrates an IndexedDB database.
//
// newVersion must be greater than the database's current version.
//
// migrationCallback will be called during a versionchange transaction and will
-// be given the created database and the versionchange transaction.
+// given the created database, the versionchange transaction, and the database
+// open request.
//
// Returns a promise. If the versionchange transaction goes through, the promise
// resolves to an IndexedDB database that must be closed by the caller. If the
// versionchange transaction is aborted, the promise resolves to an error.
-const migrateNamedDatabase =
- (testCase, databaseName, newVersion, migrationCallback) => {
+function migrateNamedDatabase(
+ testCase, databaseName, newVersion, migrationCallback) {
// We cannot use eventWatcher.wait_for('upgradeneeded') here, because
// the versionchange transaction auto-commits before the Promise's then
// callback gets called.
request.onupgradeneeded = testCase.step_func(event => {
const database = event.target.result;
const transaction = event.target.transaction;
- let abortCalled = false;
+ let shouldBeAborted = false;
+ let requestEventPromise = null;
// We wrap IDBTransaction.abort so we can set up the correct event
// listeners and expectations if the test chooses to abort the
// versionchange transaction.
const transactionAbort = transaction.abort.bind(transaction);
transaction.abort = () => {
- request.onerror = event => {
- event.preventDefault();
- resolve(event);
- };
- request.onsuccess = () => reject(new Error(
- 'indexedDB.open should not succeed after the versionchange ' +
- 'transaction is aborted'));
+ transaction._willBeAborted();
transactionAbort();
- abortCalled = true;
+ }
+ transaction._willBeAborted = () => {
+ requestEventPromise = new Promise((resolve, reject) => {
+ request.onerror = event => {
+ event.preventDefault();
+ resolve(event);
+ };
+ request.onsuccess = () => reject(new Error(
+ 'indexedDB.open should not succeed for an aborted ' +
+ 'versionchange transaction'));
+ });
+ shouldBeAborted = true;
}
- migrationCallback(database, transaction);
- if (!abortCalled) {
+ // If migration callback returns a promise, we'll wait for it to resolve.
+ // This simplifies some tests.
+ const callbackResult = migrationCallback(database, transaction, request);
+ if (!shouldBeAborted) {
+ request.onerror = null;
request.onsuccess = null;
- resolve(requestWatcher(testCase, request).wait_for('success'));
+ requestEventPromise =
+ requestWatcher(testCase, request).wait_for('success');
}
+
+ // requestEventPromise needs to be the last promise in the chain, because
+ // we want the event that it resolves to.
+ resolve(Promise.resolve(callbackResult).then(() => requestEventPromise));
});
request.onerror = event => reject(event.target.error);
request.onsuccess = () => reject(new Error(
'indexedDB.open should not succeed without creating a ' +
'versionchange transaction'));
}).then(event => event.target.result || event.target.error);
-};
+}
// Creates an IndexedDB database whose name is unique for the test case.
//
// setupCallback will be called during a versionchange transaction, and will be
-// given the created database and the versionchange transaction.
+// given the created database, the versionchange transaction, and the database
+// open request.
//
// Returns a promise that resolves to an IndexedDB database. The caller must
// close the database.
-const createDatabase = (testCase, setupCallback) => {
+function createDatabase(testCase, setupCallback) {
return createNamedDatabase(testCase, databaseName(testCase), setupCallback);
-};
+}
// Creates an IndexedDB database.
//
// setupCallback will be called during a versionchange transaction, and will be
-// given the created database and the versionchange transaction.
+// given the created database, the versionchange transaction, and the database
+// open request.
//
// Returns a promise that resolves to an IndexedDB database. The caller must
// close the database.
-const createNamedDatabase = (testCase, databaseName, setupCallback) => {
+function createNamedDatabase(testCase, databaseName, setupCallback) {
const request = indexedDB.deleteDatabase(databaseName);
const eventWatcher = requestWatcher(testCase, request);
return eventWatcher.wait_for('success').then(event =>
migrateNamedDatabase(testCase, databaseName, 1, setupCallback));
-};
+}
// Opens an IndexedDB database without performing schema changes.
//
//
// Returns a promise that resolves to an IndexedDB database. The caller must
// close the database.
-const openDatabase = (testCase, version) => {
+function openDatabase(testCase, version) {
return openNamedDatabase(testCase, databaseName(testCase), version);
}
//
// Returns a promise that resolves to an IndexedDB database. The caller must
// close the database.
-const openNamedDatabase = (testCase, databaseName, version) => {
+function openNamedDatabase(testCase, databaseName, version) {
const request = indexedDB.open(databaseName, version);
const eventWatcher = requestWatcher(testCase, request);
return eventWatcher.wait_for('success').then(event => event.target.result);
for (let record of BOOKS_RECORD_DATA)
store.put(record);
return store;
-};
+}
// Creates a 'not_books' object store used to test renaming into existing or
// deleted store names.
-const createNotBooksStore = (testCase, database) => {
- const store = database.createObjectStore('not_books');
- store.createIndex('not_by_author', 'author');
- store.createIndex('not_by_title', 'title', { unique: true });
- return store;
-};
+function createNotBooksStore(testCase, database) {
+ const store = database.createObjectStore('not_books');
+ store.createIndex('not_by_author', 'author');
+ store.createIndex('not_by_title', 'title', { unique: true });
+ return store;
+}
// Verifies that an object store's indexes match the indexes used to create the
// books store in the test database's version 1.
// The errorMessage is used if the assertions fail. It can state that the
// IndexedDB implementation being tested is incorrect, or that the testing code
// is using it incorrectly.
-const checkStoreIndexes = (testCase, store, errorMessage) => {
+function checkStoreIndexes (testCase, store, errorMessage) {
assert_array_equals(
store.indexNames, ['by_author', 'by_title'], errorMessage);
const authorIndex = store.index('by_author');
checkAuthorIndexContents(testCase, authorIndex, errorMessage),
checkTitleIndexContents(testCase, titleIndex, errorMessage),
]);
-};
+}
// Verifies that an object store's key generator is in the same state as the
// key generator created for the books store in the test database's version 1.
// The errorMessage is used if the assertions fail. It can state that the
// IndexedDB implementation being tested is incorrect, or that the testing code
// is using it incorrectly.
-const checkStoreGenerator = (testCase, store, expectedKey, errorMessage) => {
+function checkStoreGenerator(testCase, store, expectedKey, errorMessage) {
const request = store.put(
{ title: 'Bedrock Nights ' + expectedKey, author: 'Barney' });
const eventWatcher = requestWatcher(testCase, request);
const result = request.result;
assert_equals(result, expectedKey, errorMessage);
});
-};
+}
// Verifies that an object store's contents matches the contents used to create
// the books store in the test database's version 1.
// The errorMessage is used if the assertions fail. It can state that the
// IndexedDB implementation being tested is incorrect, or that the testing code
// is using it incorrectly.
-const checkStoreContents = (testCase, store, errorMessage) => {
+function checkStoreContents(testCase, store, errorMessage) {
const request = store.get(123456);
const eventWatcher = requestWatcher(testCase, request);
return eventWatcher.wait_for('success').then(() => {
assert_equals(result.author, BOOKS_RECORD_DATA[0].author, errorMessage);
assert_equals(result.title, BOOKS_RECORD_DATA[0].title, errorMessage);
});
-};
+}
// Verifies that index matches the 'by_author' index used to create the
// by_author books store in the test database's version 1.
// The errorMessage is used if the assertions fail. It can state that the
// IndexedDB implementation being tested is incorrect, or that the testing code
// is using it incorrectly.
-const checkAuthorIndexContents = (testCase, index, errorMessage) => {
+function checkAuthorIndexContents(testCase, index, errorMessage) {
const request = index.get(BOOKS_RECORD_DATA[2].author);
const eventWatcher = requestWatcher(testCase, request);
return eventWatcher.wait_for('success').then(() => {
assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage);
assert_equals(result.title, BOOKS_RECORD_DATA[2].title, errorMessage);
});
-};
+}
// Verifies that an index matches the 'by_title' index used to create the books
// store in the test database's version 1.
// The errorMessage is used if the assertions fail. It can state that the
// IndexedDB implementation being tested is incorrect, or that the testing code
// is using it incorrectly.
-const checkTitleIndexContents = (testCase, index, errorMessage) => {
+function checkTitleIndexContents(testCase, index, errorMessage) {
const request = index.get(BOOKS_RECORD_DATA[2].title);
const eventWatcher = requestWatcher(testCase, request);
return eventWatcher.wait_for('success').then(() => {
assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage);
assert_equals(result.author, BOOKS_RECORD_DATA[2].author, errorMessage);
});
-};
+}
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
<title>IndexedDB: aborting transactions reverts an object store's key generator state</title>
<link rel="help" href="https://w3c.github.io/IndexedDB/#abort-transaction">
<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
<script src="/resources/testharnessreport.js"></script>
<script src="support-promises.js"></script>
<script>
+'use strict';
promise_test(testCase => {
return createDatabase(testCase, (database, transaction) => {
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
<title>IndexedDB: aborting transactions reverts index metadata</title>
<link rel="help" href="https://w3c.github.io/IndexedDB/#abort-transaction">
<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
<script src="/resources/testharnessreport.js"></script>
<script src="support-promises.js"></script>
<script>
+'use strict';
promise_test(testCase => {
let store = null, index = null;
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
<title>IndexedDB: aborting transactions reverts multiple operations on the same metadata</title>
<link rel="help" href="https://w3c.github.io/IndexedDB/#abort-transaction">
<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
<script src="/resources/testharnessreport.js"></script>
<script src="support-promises.js"></script>
<script>
+'use strict';
promise_test(testCase => {
let store = null, index = null;
-<!DOCTYPE html>
+<!doctype html>
+<meta charset="utf8">
<title>IndexedDB: aborting transactions reverts object store metadata</title>
<link rel="help" href="https://w3c.github.io/IndexedDB/#abort-transaction">
<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
<script src="/resources/testharnessreport.js"></script>
<script src="support-promises.js"></script>
<script>
+'use strict';
promise_test(testCase => {
let store = null, migrationTransaction = null, migrationDatabase = null;
--- /dev/null
+
+PASS in the abort event handler for a transaction aborted due to an unhandled request error
+PASS in a setTimeout(0) callback after the abort event is fired for a transaction aborted due to an unhandled request failure
+
--- /dev/null
+<!doctype html>
+<meta charset="utf8">
+<title>IndexedDB: backend-aborted versionchange transaction lifecycle</title>
+<link rel="help"
+ href="https://w3c.github.io/IndexedDB/#upgrade-transaction-steps">
+<link rel="help"
+ href="https://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore">
+<link rel="help"
+ href="https://w3c.github.io/IndexedDB/#dom-idbdatabase-deleteobjectstore">
+<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support-promises.js"></script>
+<script>
+'use strict';
+
+promise_test(t => {
+ return createDatabase(t, database => {
+ createBooksStore(t, database);
+ }).then(database => {
+ database.close();
+ }).then(() => migrateDatabase(t, 2, (database, transaction, request) => {
+ return new Promise((resolve, reject) => {
+ transaction.addEventListener('abort', () => {
+ resolve(new Promise((resolve, reject) => {
+ assert_equals(
+ request.transaction, transaction,
+ "The open request's transaction should be reset after onabort");
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.createObjectStore('books2'); },
+ 'createObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.deleteObjectStore('books'); },
+ 'deleteObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ resolve();
+ }));
+ }, false);
+ transaction.objectStore('books').add(BOOKS_RECORD_DATA[0]);
+ transaction._willBeAborted();
+ });
+ }));
+}, 'in the abort event handler for a transaction aborted due to an unhandled ' +
+ 'request error');
+
+promise_test(t => {
+ return createDatabase(t, database => {
+ createBooksStore(t, database);
+ }).then(database => {
+ database.close();
+ }).then(() => migrateDatabase(t, 2, (database, transaction, request) => {
+ return new Promise((resolve, reject) => {
+ transaction.addEventListener('abort', () => {
+ setTimeout(() => {
+ resolve(new Promise((resolve, reject) => {
+ assert_equals(
+ request.transaction, null,
+ "The open request's transaction should be reset after " +
+ 'onabort microtasks');
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.createObjectStore('books2'); },
+ 'createObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.deleteObjectStore('books'); },
+ 'deleteObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ resolve();
+ }));
+ }, 0);
+ }, false);
+ transaction.objectStore('books').add(BOOKS_RECORD_DATA[0]);
+ transaction._willBeAborted();
+ });
+ }));
+}, 'in a setTimeout(0) callback after the abort event is fired for a ' +
+ 'transaction aborted due to an unhandled request failure');
+
+</script>
--- /dev/null
+
+PASS in the complete event handler for a committed transaction
+PASS in a setTimeout(0) callback after the complete event is fired for a committed transaction
+
--- /dev/null
+<!doctype html>
+<meta charset="utf8">
+<title>IndexedDB: committed versionchange transaction lifecycle</title>
+<link rel="help"
+ href="https://w3c.github.io/IndexedDB/#upgrade-transaction-steps">
+<link rel="help"
+ href="https://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore">
+<link rel="help"
+ href="https://w3c.github.io/IndexedDB/#dom-idbdatabase-deleteobjectstore">
+<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support-promises.js"></script>
+<script>
+'use strict';
+
+promise_test(t => {
+ return createDatabase(t, database => {
+ createBooksStore(t, database);
+ }).then(database => {
+ database.close();
+ }).then(() => migrateDatabase(t, 2, (database, transaction, request) => {
+ return new Promise((resolve, reject) => {
+ transaction.addEventListener('complete', () => {
+ resolve(new Promise((resolve, reject) => {
+ assert_equals(
+ request.transaction, transaction,
+ "The open request's transaction should be reset after " +
+ 'oncomplete');
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.createObjectStore('books2'); },
+ 'createObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.deleteObjectStore('books'); },
+ 'deleteObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ resolve();
+ }));
+ }, false);
+ });
+ })).then(database => { database.close(); });
+}, 'in the complete event handler for a committed transaction');
+
+promise_test(t => {
+ return createDatabase(t, database => {
+ createBooksStore(t, database);
+ }).then(database => {
+ database.close();
+ }).then(() => migrateDatabase(t, 2, (database, transaction, request) => {
+ return new Promise((resolve, reject) => {
+ transaction.addEventListener('complete', () => {
+ setTimeout(() => {
+ resolve(new Promise((resolve, reject) => {
+ assert_equals(
+ request.transaction, null,
+ "The open request's transaction should be reset after " +
+ 'oncomplete microtasks');
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.createObjectStore('books2'); },
+ 'createObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.deleteObjectStore('books'); },
+ 'deleteObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ resolve();
+ }));
+ }, 0);
+ }, false);
+ });
+ })).then(database => { database.close(); });
+}, 'in a setTimeout(0) callback after the complete event is fired for a ' +
+ 'committed transaction');
+
+</script>
--- /dev/null
+
+PASS synchronously after abort() is called
+PASS in a promise microtask after abort() is called, before the transaction abort event is fired
+PASS in the abort event handler for a transaction aborted due to an abort() call
+PASS in a setTimeout(0) callback after the abort event is fired for a transaction aborted due to an abort() call
+
--- /dev/null
+<!doctype html>
+<meta charset="utf8">
+<title>IndexedDB: user-abort()ed versionchange transaction lifecycle</title>
+<link rel="help"
+ href="https://w3c.github.io/IndexedDB/#upgrade-transaction-steps">
+<link rel="help"
+ href="https://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore">
+<link rel="help"
+ href="https://w3c.github.io/IndexedDB/#dom-idbdatabase-deleteobjectstore">
+<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support-promises.js"></script>
+<script>
+'use strict';
+
+promise_test(t => {
+ return createDatabase(t, database => {
+ createBooksStore(t, database);
+ }).then(database => {
+ database.close();
+ }).then(() => migrateDatabase(t, 2, (database, transaction, request) => {
+ transaction.abort();
+ assert_equals(
+ request.transaction, transaction,
+ "The open request's transaction should be reset after onabort");
+
+ assert_throws(
+ 'TransactionInactiveError',
+ () => { database.createObjectStore('books2'); },
+ 'createObjectStore exception should reflect that the transaction is ' +
+ 'still running');
+ assert_throws(
+ 'TransactionInactiveError',
+ () => { database.deleteObjectStore('books'); },
+ 'deleteObjectStore exception should reflect that the transaction is' +
+ 'still running');
+ }));
+}, 'synchronously after abort() is called');
+
+promise_test(t => {
+ return createDatabase(t, database => {
+ createBooksStore(t, database);
+ }).then(database => {
+ database.close();
+ }).then(() => migrateDatabase(t, 2, (database, transaction, request) => {
+ let abortFired = false;
+ const abortPromise = new Promise((resolve, reject) => {
+ transaction.addEventListener('abort', () => {
+ abortFired = true;
+ resolve();
+ }, false);
+ transaction.abort();
+ });
+
+ return Promise.resolve().then(() => {
+ assert_false(
+ abortFired,
+ 'The abort event should fire after promises are resolved');
+ assert_equals(
+ request.transaction, transaction,
+ "The open request's transaction should be reset after onabort");
+ assert_throws(
+ 'TransactionInactiveError',
+ () => { database.createObjectStore('books2'); },
+ 'createObjectStore exception should reflect that the transaction ' +
+ 'is still running');
+ assert_throws(
+ 'TransactionInactiveError',
+ () => { database.deleteObjectStore('books'); },
+ 'deleteObjectStore exception should reflect that the transaction ' +
+ 'is still running');
+ }).then(() => abortPromise);
+ }));
+}, 'in a promise microtask after abort() is called, before the transaction ' +
+ 'abort event is fired');
+
+promise_test(t => {
+ return createDatabase(t, database => {
+ createBooksStore(t, database);
+ }).then(database => {
+ database.close();
+ }).then(() => migrateDatabase(t, 2, (database, transaction, request) => {
+ return new Promise((resolve, reject) => {
+ transaction.addEventListener('abort', () => {
+ resolve(new Promise((resolve, reject) => {
+ assert_equals(
+ request.transaction, transaction,
+ "The open request's transaction should be reset after onabort");
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.createObjectStore('books2'); },
+ 'createObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.deleteObjectStore('books'); },
+ 'deleteObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ resolve();
+ }));
+ }, false);
+ transaction.abort();
+ });
+ }));
+}, 'in the abort event handler for a transaction aborted due to an abort() ' +
+ 'call');
+
+promise_test(t => {
+ return createDatabase(t, database => {
+ createBooksStore(t, database);
+ }).then(database => {
+ database.close();
+ }).then(() => migrateDatabase(t, 2, (database, transaction, request) => {
+ return new Promise((resolve, reject) => {
+ transaction.addEventListener('abort', () => {
+ setTimeout(() => {
+ resolve(new Promise((resolve, reject) => {
+ assert_equals(
+ request.transaction, null,
+ "The open request's transaction should be reset after " +
+ 'onabort microtasks');
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.createObjectStore('books2'); },
+ 'createObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ assert_throws(
+ 'InvalidStateError',
+ () => { database.deleteObjectStore('books'); },
+ 'deleteObjectStore exception should reflect that the ' +
+ 'transaction is no longer running');
+ resolve();
+ }));
+ }, 0);
+ }, false);
+ transaction.abort();
+ });
+ }));
+}, 'in a setTimeout(0) callback after the abort event is fired for a ' +
+ 'transaction aborted due to an abort() call');
+
+</script>
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbobjectstore_put7.htm
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbobjectstore_put8.htm
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbobjectstore_put9.htm
+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbrequest_error.html
+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbrequest_result.html
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbtransaction-oncomplete.htm
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbtransaction.htm
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbtransaction_abort.htm
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/transaction-lifetime.htm
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/transaction-requestqueue.htm
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/transaction_bubble-and-capture.htm
+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-backend-aborted.html
+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-committed.html
+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-user-aborted.html
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/value.htm
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/value_recursive.htm
/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/writer-starvation.htm
--- /dev/null
+#Dual-License for W3C Test Suites
+
+All documents in this Repository are licensed by contributors to be distributed under both the [W3C Test Suite License](#w3c-test-suite-license) and the [W3C 3-clause BSD License](#w3c-3-clause-bsd-license), reproduced below. The choice of license is up to the licensee. For more information, see [Licenses for W3C Test Suites](https://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html)
+
+# W3C Test Suite License
+
+This document, Test Suites and other documents that link to this statement are provided by the copyright holders under the following license: By using and/or copying this document, or the W3C document from which this statement is linked, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions:
+
+Permission to copy, and distribute the contents of this document, or the W3C document from which this statement is linked, in any medium for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the document, or portions thereof, that you use:
+
+* A link or URL to the original W3C document.
+* The pre-existing copyright notice of the original author, or if it doesn't exist, a notice (hypertext is preferred, but a textual representation is permitted) of the form: "Copyright © [$date-of-document] World Wide Web Consortium, (MIT, ERCIM, Keio, Beihang) and others. All Rights Reserved. http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html"
+* If it exists, the STATUS of the W3C document.
+
+When space permits, inclusion of the full text of this NOTICE should be provided. We request that authorship attribution be provided in any software, documents, or other items or products that you create pursuant to the implementation of the contents of this document, or any portion thereof.
+
+No right to create modifications or derivatives of W3C documents is granted pursuant to this license. However, if additional requirements (documented in the Copyright FAQ) are satisfied, the right to create modifications or derivatives is sometimes granted by the W3C to individuals complying with those requirements.
+
+If a Test Suite distinguishes the test harness (or, framework for navigation) and the actual tests, permission is given to remove or alter the harness or navigation if the Test Suite in question allows to do so. The tests themselves shall NOT be changed in any way.
+
+The name and trademarks of W3C and other copyright holders may NOT be used in advertising or publicity pertaining to this document or other documents that link to this statement without specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders. Permission is given to use the trademarked string "W3C" within claims of performance concerning W3C Specifications or features described therein, and there only, if the test suite so authorizes.
+
+THIS WORK IS PROVIDED BY W3C, MIT, ERCIM, KEIO, BEIHANG, THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL W3C, MIT, ERCIM, KEIO, BEIHANG, THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# W3C 3-clause BSD License
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+* Neither the name of the W3C nor the names of its contributors may be used to endorse or promote products derived from this work without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
=================
The tests are designed to be run from your local computer. The test
-environment requires Python 2.7+ (but not Python 3.x). You will also
-need a copy of OpenSSL. Users on Windows should read the
-[Windows Notes](#windows-notes) section below.
+environment requires [Python 2.7+](http://www.python.org/downloads) (but not Python 3.x).
+You will also need a copy of OpenSSL.
+
+On Windows, be sure to add the Python directory (`c:\python2x`, by default) to
+your `%Path%` [Environment Variable](http://www.computerhope.com/issues/ch000549.htm),
+and read the [Windows Notes](#windows-notes) section below.
To get the tests running, you need to set up the test domains in your
[`hosts` file](http://en.wikipedia.org/wiki/Hosts_%28file%29%23Location_in_the_file_system). The
installing an OpenSSL distribution.
[Shining Light](https://slproweb.com/products/Win32OpenSSL.html)
provide a convenient installer that is known to work, but requires a
-little extra setup.
-
-After installation ensure that the path to OpenSSL is on your `%Path%`
-environment variable.
-
-Then set the path to the default OpenSSL configuration file (usually
-something like `C:\OpenSSL-Win32\bin\openssl.cfg` in the server
-configuration. To do this copy `config.default.json` in the
-web-platform-tests root to `config.json`. Then edit the JSON so that
-the key `ssl/openssl/base_conf_path` has a value that is the path to
-the OpenSSL config file.
-
+little extra setup, i.e.:
+
+Run the installer for Win32_OpenSSL_v1.1.0b (30MB). During installation,
+change the default location for where to Copy OpenSSL Dlls from the
+System directory to the /bin directory.
+
+After installation, ensure that the path to OpenSSL (typically,
+this will be `C:\OpenSSL-Win32\bin`) is in your `%Path%`
+[Environment Variable](http://www.computerhope.com/issues/ch000549.htm).
+If you forget to do this part, you will most likely see a 'File Not Found'
+error when you start wptserve.
+
+Finally, set the path value in the server configuration file to the
+default OpenSSL configuration file location. To do this,
+copy `config.default.json` in the web-platform-tests root to `config.json`.
+Then edit the JSON so that the key `ssl/openssl/base_conf_path` has a
+value that is the path to the OpenSSL config file (typically this
+will be `C:\\OpenSSL-Win32\\bin\\openssl.cfg`).
+
+Alternatively, you may also use
+[Bash on Ubuntu on Windows](https://msdn.microsoft.com/en-us/commandline/wsl/about)
+in the Windows 10 Anniversary Update build, then access your windows
+partition from there to launch wptserve.
Test Runner
===========
The master branch is automatically synced to http://w3c-test.org/.
-Pull requests that have been checked are automatically mirrored to
-http://w3c-test.org/submissions/.
+Pull requests are automatically mirrored to
+http://w3c-test.org/submissions/ a few minutes after someone with merge
+access has added a comment with "LGTM" (or "w3c-test:mirror") to indicate
+the PR has been checked.
Finding Things
==============
@kangxu
@caitp
@Manishearth
-@plehegar
@jungkees
@ibelem
@mathiasbynens
client = new ifr.contentWindow.XMLHttpRequest();
count++;
// Important to do a normal navigation, not a reload.
- win.location.href = "resources/init.htm";
- }, 100);
+ win.location.href = "resources/init.htm?avoid-replace";
+ }, 0);
}
doc.body.appendChild(ifr);
} else if(1 == count) {
}
function getNextEvent(arr) {
- var eventStr = arr.shift();
+ var event = { str: arr.shift() };
// we can only handle strings, numbers (readystates) and undefined
- if (eventStr === undefined) {
+ if (event.str === undefined) {
return event;
}
- if (typeof eventStr !== "string") {
- if (Number.isInteger(eventStr)) {
- eventStr = "readystatechange(" + eventStr + ")";
+
+ if (typeof event.str !== "string") {
+ if (Number.isInteger(event.str)) {
+ event.state = event.str;
+ event.str = "readystatechange(" + event.str + ")";
} else {
- throw "Test error: unexpected event type " + eventStr;
+ throw "Test error: unexpected event type " + event.str;
}
}
// parse out the general type, loaded and total values
- var type = eventStr.type = eventStr.split("(")[0].split(".").pop();
- eventStr.mayFollowOptionalProgressEvents = type == "progress" ||
- type == "load" || type == "abort" || type == "error";
- var loadedAndTotal = eventStr.match(/\((\d)+,(\d)+/);
+ var type = event.type = event.str.split("(")[0].split(".").pop();
+ var loadedAndTotal = event.str.match(/.*\((\d+),(\d+),(true|false)\)/);
if (loadedAndTotal) {
- eventStr.loaded = parseInt(loadedAndTotal[0]);
- eventStr.total = parseInt(loadedAndTotal[1]);
+ event.loaded = parseInt(loadedAndTotal[1]);
+ event.total = parseInt(loadedAndTotal[2]);
+ event.lengthComputable = loadedAndTotal[3] == "true";
}
- return eventStr;
+ return event;
}
global.assert_xhr_event_order_matches = function(expected) {
var recorded = recorded_xhr_events;
var lastRecordedLoaded = -1;
-
while(expected.length && recorded.length) {
var currentExpected = getNextEvent(expected),
currentRecorded = getNextEvent(recorded);
- // skip to the last progress event if we've hit one
- while (recorded.length && currentRecorded.type == "progress") {
- assert_greater(currentRecorded.loaded, lastRecordedLoaded,
- "progress event 'loaded' values must only increase");
+ // skip to the last progress event if we've hit one (note the next
+ // event after a progress event should be a LOADING readystatechange,
+ // if there are multiple progress events in a row).
+ while (recorded.length && currentRecorded.type == "progress" &&
+ parseInt(recorded) === 3) {
+ assert_greater_than(currentRecorded.loaded, lastRecordedLoaded,
+ "progress event 'loaded' values must only increase");
lastRecordedLoaded = currentRecorded.loaded;
- currentRecorded = getNextEvent(recorded);
}
- if (currentRecorded.type == "loadstart") {
+ if (currentRecorded.type == "loadend") {
+ recordedProgressCount = 0;
lastRecordedLoaded = -1;
}
- assert_equals(currentRecorded, currentExpected);
+ assert_equals(currentRecorded.str, currentExpected.str);
}
if (recorded.length) {
throw "\nUnexpected extra events: " + recorded.join(", ");
from cStringIO import StringIO
from collections import defaultdict
from urlparse import urljoin
+from tools.manifest import manifest
import requests
wptcommandline = None
wptrunner = None
-
logger = logging.getLogger(os.path.splitext(__file__)[0])
class GitHub(object):
- def __init__(self, org, repo, token):
+ def __init__(self, org, repo, token, browser):
self.token = token
self.headers = {"Accept": "application/vnd.github.v3+json"}
self.auth = (self.token, "x-oauth-basic")
self.org = org
self.repo = repo
self.base_url = "https://api.github.com/repos/%s/%s/" % (org, repo)
+ self.browser = browser
def _headers(self, headers):
if headers is None:
resp.raise_for_status()
return resp
+ def patch(self, url, data, headers=None):
+ logger.debug("PATCH %s" % url)
+ if data is not None:
+ data = json.dumps(data)
+ resp = requests.patch(
+ url,
+ data=data,
+ headers=self._headers(headers),
+ auth=self.auth
+ )
+ resp.raise_for_status()
+ return resp
+
def get(self, url, headers=None):
logger.debug("GET %s" % url)
resp = requests.get(
return resp
def post_comment(self, issue_number, body):
- url = urljoin(self.base_url, "issues/%s/comments" % issue_number)
- return self.post(url, {"body": body})
+ user = self.get(urljoin(self.base_url, "/user")).json()
+ issue_comments_url = urljoin(self.base_url, "issues/%s/comments" % issue_number)
+ comments = self.get(issue_comments_url).json()
+ title_line = "# %s #" % self.browser.title()
+ data = {"body": body}
+ for comment in comments:
+ if (comment["user"]["login"] == user["login"] and
+ comment["body"].startswith(title_line)):
+ comment_url = urljoin(self.base_url, "issues/comments/%s" % comment["id"])
+ self.patch(comment_url, data)
+ break
+ else:
+ self.post(issue_comments_url, data)
def releases(self):
url = urljoin(self.base_url, "releases/latest")
def install(self):
call("pip", "install", "-r", "w3c/wptrunner/requirements_firefox.txt")
- resp = get("https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/firefox-52.0a1.en-US.linux-x86_64.tar.bz2")
+ resp = get("https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/firefox-53.0a1.en-US.linux-x86_64.tar.bz2")
untar(resp.raw)
if not os.path.exists("profiles"):
assert latest_release != 0
return "v%s.%s.%s" % tuple(str(item) for item in latest_release)
-
def install_webdriver(self):
version = self._latest_geckodriver_version()
logger.debug("Latest geckodriver release %s" % version)
def call(*args):
logger.debug("%s" % " ".join(args))
- return subprocess.check_output(args)
+ try:
+ return subprocess.check_output(args)
+ except subprocess.CalledProcessError as e:
+ logger.critical("%s exited with return code %i" %
+ (e.cmd, e.returncode))
+ logger.critical(e.output)
+ raise
def get_git_cmd(repo_path):
def setup_github_logging(args):
gh_handler = None
if args.comment_pr:
- github = GitHub("w3c", "web-platform-tests", args.gh_token)
+ github = GitHub("w3c", "web-platform-tests", args.gh_token, args.browser)
try:
pr_number = int(args.comment_pr)
except ValueError:
git = get_git_cmd(os.path.join(os.path.abspath(os.curdir), "w3c", "web-platform-tests"))
return git("rev-parse", "HEAD").strip()
+
def build_manifest():
with pwd(os.path.join(os.path.abspath(os.curdir), "w3c", "web-platform-tests")):
# TODO: Call the manifest code directly
for item in files[:-1].split("\0")]
+def get_affected_testfiles(files_changed):
+ affected_testfiles = []
+ all_tests = set()
+ nontests_changed = set(files_changed)
+ repo_root = os.path.abspath(os.path.join(os.path.abspath(os.curdir), "w3c", "web-platform-tests"))
+ manifest_file = os.path.join(repo_root, "MANIFEST.json")
+ for test, _ in manifest.load(repo_root, manifest_file):
+ test_full_path = os.path.join(repo_root, test)
+ all_tests.add(test_full_path)
+ if test_full_path in nontests_changed:
+ # Reduce the set of changed files to only non-tests.
+ nontests_changed.remove(test_full_path)
+ for changedfile_pathname in nontests_changed:
+ changed_file_repo_path = os.path.join(os.path.sep, os.path.relpath(changedfile_pathname, repo_root))
+ os.path.normpath(changed_file_repo_path)
+ path_components = changed_file_repo_path.split(os.sep)[1:]
+ if len(path_components) < 2:
+ # This changed file is in the repo root, so skip it
+ # (because it's not part of any test).
+ continue
+ top_level_subdir = path_components[0]
+ if top_level_subdir in ["conformance-checkers", "docs"]:
+ continue
+ # OK, this changed file is the kind we care about: It's something
+ # other than a test (e.g., it's a .js or .json file), and it's
+ # somewhere down beneath one of the top-level "spec" directories.
+ # So now we try to find any tests that reference it.
+ for root, dirs, fnames in os.walk(os.path.join(repo_root, top_level_subdir)):
+ # Walk top_level_subdir looking for test files containing either the
+ # relative filepath or absolute filepatch to the changed file.
+ for fname in fnames:
+ testfile_full_path = os.path.join(root, fname)
+ # Skip any test file that's already in files_changed.
+ if testfile_full_path in files_changed:
+ continue
+ # Skip any file that's not a test file.
+ if testfile_full_path not in all_tests:
+ continue
+ with open(testfile_full_path, "r") as fh:
+ file_contents = fh.read()
+ changed_file_relpath = os.path.relpath(changedfile_pathname, root).replace(os.path.sep, "/")
+ if changed_file_relpath in file_contents or changed_file_repo_path.replace(os.path.sep, "/") in file_contents:
+ affected_testfiles.append(testfile_full_path)
+ return affected_testfiles
+
+
def wptrunner_args(root, files_changed, iterations, browser):
parser = wptcommandline.create_parser([browser.product])
args = vars(parser.parse_args([]))
def write_inconsistent(inconsistent, iterations):
logger.error("## Unstable results ##\n")
strings = [("`%s`" % markdown_adjust(test), ("`%s`" % markdown_adjust(subtest)) if subtest else "", err_string(results, iterations))
- for test, subtest, results in inconsistent]
+ for test, subtest, results in inconsistent]
table(["Test", "Subtest", "Results"], strings, logger.error)
except ValueError:
pass
if pr_number:
- logger.info("### [%s](%s/%s%s) ###" % (test, baseurl, pr_number, test))
+ logger.info("<details>\n")
+ logger.info('<summary><a href="%s/%s%s">%s</a></summary>\n\n' %
+ (baseurl, pr_number, test, test))
else:
logger.info("### %s ###" % test)
parent = test_results.pop(None)
strings = [("", err_string(parent, iterations))]
- strings.extend(((("`%s`" % markdown_adjust(subtest)) if subtest else "", err_string(results, iterations))
+ strings.extend(((("`%s`" % markdown_adjust(subtest)) if subtest
+ else "", err_string(results, iterations))
for subtest, results in test_results.iteritems()))
table(["Subtest", "Results"], strings, logger.info)
+ if pr_number:
+ logger.info("</details>\n")
def get_parser():
logger.debug("Files changed:\n%s" % "".join(" * %s\n" % item for item in files_changed))
+ affected_testfiles = get_affected_testfiles(files_changed)
+
+ logger.debug("Affected tests:\n%s" % "".join(" * %s\n" % item for item in affected_testfiles))
+
+ files_changed.extend(affected_testfiles)
+
browser = browser_cls(args.gh_token)
browser.install()
--- /dev/null
+set -ex
+
+# Diff PNGs based on pixel-for-pixel identity
+echo -e '[diff "img"]\n textconv = identify -quiet -format "%#"' >> .git/config
+echo -e '*.png diff=img' >> .git/info/attributes
+
+# Exclude tests that rely on font rendering
+excluded=(
+ '2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.basic.png'
+ '2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.large.png'
+ '2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.rtl.png'
+ '2dcontext/drawing-text-to-the-canvas/2d.text.draw.stroke.basic.png'
+)
+
+./update-built-tests.sh
+git update-index --assume-unchanged ${excluded[*]}
+git diff --exit-code
--- /dev/null
+def main(request, response):
+ """Simple handler that causes redirection.
+
+ The request should typically have two query parameters:
+ status - The status to use for the redirection. Defaults to 302.
+ location - The resource to redirect to.
+ """
+ status = 302
+ if "status" in request.GET:
+ try:
+ status = int(request.GET.first("status"))
+ except ValueError:
+ pass
+
+ response.status = status
+
+ location = request.GET.first("location")
+
+ response.headers.set("Location", location)
+ response.headers.set("Timing-Allow-Origin", "*")
/LayoutTests/imported/w3c/web-platform-tests/common/get-host-info.sub.js
/LayoutTests/imported/w3c/web-platform-tests/common/large.py
/LayoutTests/imported/w3c/web-platform-tests/common/media.js
+/LayoutTests/imported/w3c/web-platform-tests/common/redirect-opt-in.py
/LayoutTests/imported/w3c/web-platform-tests/common/redirect.py
/LayoutTests/imported/w3c/web-platform-tests/common/reftest-wait.js
/LayoutTests/imported/w3c/web-platform-tests/common/stringifiers.js
-FAIL HTML parser must use the returned value of the custom element constructor instead of the one created before super() call assert_equals: expected (string) "HTML parser must insert the synchronously constructed custom element" but got (boolean) true
-FAIL HTML parser must use the returned value of the custom element constructor instead using the one created in super() call assert_equals: expected (string) "HTML parser must insert the synchronously constructed custom element" but got (boolean) true
+PASS HTML parser must use the returned value of the custom element constructor instead of the one created before super() call
+PASS HTML parser must use the returned value of the custom element constructor instead using the one created in super() call
test(function () {
var instance = document.querySelector('instantiates-itself-before-super');
- assert_equals(instance instanceof InstantiatesItselfBeforeSuper, 'HTML parser must insert the synchronously constructed custom element');
+ assert_true(instance instanceof InstantiatesItselfBeforeSuper, 'HTML parser must insert the synchronously constructed custom element');
assert_equals(instance, elementCreatedBySuperCall, 'HTML parser must insert the element returned by the custom element constructor');
assert_not_equals(instance, anotherElementCreatedBeforeSuperCall, 'HTML parser must not insert another instance of the custom element created before super() call');
assert_equals(anotherElementCreatedBeforeSuperCall.parentNode, null, 'HTML parser must not insert another instance of the custom element created before super() call');
test(function () {
var instance = document.querySelector('returns-another-instance');
- assert_equals(instance instanceof ReturnsAnotherInstance, 'HTML parser must insert the synchronously constructed custom element');
+ assert_true(instance instanceof ReturnsAnotherInstance, 'HTML parser must insert the synchronously constructed custom element');
assert_equals(instance, anotherInstance, 'HTML parser must insert the element returned by the custom element constructor');
assert_not_equals(instance, firstInstance, 'HTML parser must not insert the element created by super() call if the constructor returned another element');
assert_equals(firstInstance.parentNode, null, 'HTML parser must not insert the element created by super() call if the constructor returned another element');
@ayg
@jdm
@Ms2ger
-@plehegar
@zcorpan
@zqzhang
/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-click.html
/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-detached-click.html
/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-handlers-changed.html
-/LayoutTests/imported/w3c/web-platform-tests/dom/events/dom/events/Event-dispatch-multiple-cancelBubble.html
+/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-multiple-cancelBubble.html
/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-multiple-stopPropagation.html
/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-omitted-capture.html
/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-dispatch-order.html
PASS Historical DOM features must be removed: defaultCharset
PASS Historical DOM features must be removed: height
PASS Historical DOM features must be removed: width
+PASS Historical DOM features must be removed: commands
+PASS Historical DOM features must be removed: cssElementMap
+PASS Historical DOM features must be removed: async
+PASS document.load
PASS DOMImplementation.getFeature() must be nuked.
PASS Historical DOM features must be removed: schemaTypeInfo
PASS Historical DOM features must be removed: setIdAttribute
PASS Historical DOM features must be removed: setIdAttributeNS
PASS Historical DOM features must be removed: setIdAttributeNode
+PASS Attr member must be nuked: schemaTypeInfo
+FAIL Attr member must be nuked: isId assert_equals: expected (undefined) undefined but got (boolean) false
PASS DocumentType member must be nuked: entities
PASS DocumentType member must be nuked: notations
PASS DocumentType member must be nuked: internalSubset
PASS Node member must be nuked: setUserData
PASS Node member must be nuked: rootNode
PASS Window member must be nuked: attachEvent
+FAIL Event should not have this constant: MOUSEDOWN assert_equals: expected (undefined) undefined but got (number) 1
+FAIL Event should not have this constant: MOUSEUP assert_equals: expected (undefined) undefined but got (number) 2
+FAIL Event should not have this constant: MOUSEOVER assert_equals: expected (undefined) undefined but got (number) 4
+FAIL Event should not have this constant: MOUSEOUT assert_equals: expected (undefined) undefined but got (number) 8
+FAIL Event should not have this constant: MOUSEMOVE assert_equals: expected (undefined) undefined but got (number) 16
+FAIL Event should not have this constant: MOUSEDRAG assert_equals: expected (undefined) undefined but got (number) 32
+FAIL Event should not have this constant: CLICK assert_equals: expected (undefined) undefined but got (number) 64
+FAIL Event should not have this constant: DBLCLICK assert_equals: expected (undefined) undefined but got (number) 128
+FAIL Event should not have this constant: KEYDOWN assert_equals: expected (undefined) undefined but got (number) 256
+FAIL Event should not have this constant: KEYUP assert_equals: expected (undefined) undefined but got (number) 512
+FAIL Event should not have this constant: KEYPRESS assert_equals: expected (undefined) undefined but got (number) 1024
+FAIL Event should not have this constant: DRAGDROP assert_equals: expected (undefined) undefined but got (number) 2048
+FAIL Event should not have this constant: FOCUS assert_equals: expected (undefined) undefined but got (number) 4096
+FAIL Event should not have this constant: BLUR assert_equals: expected (undefined) undefined but got (number) 8192
+FAIL Event should not have this constant: SELECT assert_equals: expected (undefined) undefined but got (number) 16384
+FAIL Event should not have this constant: CHANGE assert_equals: expected (undefined) undefined but got (number) 32768
"renameNode",
"defaultCharset",
"height",
- "width"
+ "width",
+ // https://github.com/whatwg/html/commit/a64aea7fdb221bba027d95dc3cabda09e0b3e5dc
+ "commands",
+ // https://github.com/whatwg/html/commit/797b4d273955a0fe3cc2e2d0ca5d578f37c0f126
+ "cssElementMap",
+ // https://github.com/whatwg/html/commit/e236f46820b93d6fe2e2caae0363331075c6c4fb
+ "async",
]
documentNuked.forEach(isNukedFromDocument)
test(function() {
+ // https://github.com/whatwg/html/commit/e236f46820b93d6fe2e2caae0363331075c6c4fb
+ assert_false("load" in document);
+}, "document.load");
+
+test(function() {
assert_equals(document.implementation["getFeature"], undefined)
}, "DOMImplementation.getFeature() must be nuked.")
]
elementNuked.forEach(isNukedFromElement)
+function isNukedFromAttr(name) {
+ test(function() {
+ var attr = document.createAttribute("test")
+ assert_equals(attr[name], undefined)
+ }, "Attr member must be nuked: " + name)
+}
+var attrNuked = [
+ "schemaTypeInfo",
+ "isId"
+]
+attrNuked.forEach(isNukedFromAttr)
+
function isNukedFromDoctype(name) {
test(function() {
var doctype = document.implementation.createDocumentType("test", "", "")
"attachEvent"
]
windowNuked.forEach(isNukedFromWindow)
+
+function isRemovedFromEvent(name) {
+ test(() => {
+ assert_equals(Event[name], undefined)
+ }, "Event should not have this constant: " + name)
+}
+var EventRemoved = [
+ "MOUSEDOWN",
+ "MOUSEUP",
+ "MOUSEOVER",
+ "MOUSEOUT",
+ "MOUSEMOVE",
+ "MOUSEDRAG",
+ "CLICK",
+ "DBLCLICK",
+ "KEYDOWN",
+ "KEYUP",
+ "KEYPRESS",
+ "DRAGDROP",
+ "FOCUS",
+ "BLUR",
+ "SELECT",
+ "CHANGE"
+]
+EventRemoved.forEach(isRemovedFromEvent)
</script>
-FAIL Node.cloneNode Can't find variable: HTMLDataListElement
PASS createElement(a)
PASS createElement(abbr)
PASS createElement(acronym)
PASS createElement(col)
PASS createElement(colgroup)
PASS createElement(data)
+FAIL createElement(datalist) assert_true: HTMLDataListElement is not supported expected true got false
+FAIL createElement(dialog) assert_true: HTMLDialogElement is not supported expected true got false
+PASS createElement(dd)
+PASS createElement(del)
+PASS createElement(details)
+PASS createElement(dfn)
+PASS createElement(dir)
+PASS createElement(div)
+PASS createElement(dl)
+PASS createElement(dt)
+PASS createElement(embed)
+PASS createElement(fieldset)
+PASS createElement(figcaption)
+PASS createElement(figure)
+PASS createElement(font)
+PASS createElement(footer)
+PASS createElement(form)
+PASS createElement(frame)
+PASS createElement(frameset)
+PASS createElement(h1)
+PASS createElement(h2)
+PASS createElement(h3)
+PASS createElement(h4)
+PASS createElement(h5)
+PASS createElement(h6)
+PASS createElement(head)
+PASS createElement(header)
+PASS createElement(hgroup)
+PASS createElement(hr)
+PASS createElement(html)
+PASS createElement(i)
+PASS createElement(iframe)
+PASS createElement(img)
+PASS createElement(input)
+PASS createElement(ins)
+PASS createElement(isindex)
+PASS createElement(kbd)
+PASS createElement(label)
+PASS createElement(legend)
+PASS createElement(li)
+PASS createElement(link)
+PASS createElement(main)
+PASS createElement(map)
+PASS createElement(mark)
+PASS createElement(marquee)
+PASS createElement(meta)
+PASS createElement(meter)
+PASS createElement(nav)
+PASS createElement(nobr)
+PASS createElement(noframes)
+PASS createElement(noscript)
+PASS createElement(object)
+PASS createElement(ol)
+PASS createElement(optgroup)
+PASS createElement(option)
+PASS createElement(output)
+PASS createElement(p)
+PASS createElement(param)
+PASS createElement(pre)
+PASS createElement(progress)
+PASS createElement(q)
+PASS createElement(rp)
+PASS createElement(rt)
+PASS createElement(ruby)
+PASS createElement(s)
+PASS createElement(samp)
+PASS createElement(script)
+PASS createElement(section)
+PASS createElement(select)
+PASS createElement(small)
+PASS createElement(source)
+PASS createElement(spacer)
+PASS createElement(span)
+PASS createElement(strike)
+PASS createElement(style)
+PASS createElement(sub)
+PASS createElement(summary)
+PASS createElement(sup)
+PASS createElement(table)
+PASS createElement(tbody)
+PASS createElement(td)
+PASS createElement(template)
+PASS createElement(textarea)
+PASS createElement(th)
+PASS createElement(time)
+PASS createElement(title)
+PASS createElement(tr)
+PASS createElement(tt)
+PASS createElement(track)
+PASS createElement(u)
+PASS createElement(ul)
+PASS createElement(var)
+PASS createElement(video)
+PASS createElement(unknown)
+PASS createElement(wbr)
PASS createDocumentFragment
PASS createTextNode
PASS createComment
PASS createElementNS non-HTML
PASS createProcessingInstruction
PASS implementation.createDocumentType
-PASS implementation.createDocument
+FAIL implementation.createDocument assert_equals: expected "null" but got "http_localhost_8800"
PASS implementation.createHTMLDocument
PASS node with children
assert_true(copy instanceof type, "Should be type");
}
-function create_element_and_check(localName, type) {
+function create_element_and_check(localName, typeName) {
test(function() {
+ assert_true(typeName in window, typeName + " is not supported");
var element = document.createElement(localName);
var copy = element.cloneNode();
- check_copy(element, copy, type);
+ check_copy(element, copy, window[typeName]);
}, "createElement(" + localName + ")");
}
// test1: createElement
-test(function() {
- create_element_and_check("a", HTMLAnchorElement);
- create_element_and_check("abbr", HTMLElement);
- create_element_and_check("acronym", HTMLElement);
- create_element_and_check("address", HTMLElement);
- create_element_and_check("applet", HTMLAppletElement);
- create_element_and_check("area", HTMLAreaElement);
- create_element_and_check("article", HTMLElement);
- create_element_and_check("aside", HTMLElement);
- create_element_and_check("audio", HTMLAudioElement);
- create_element_and_check("b", HTMLElement);
- create_element_and_check("base", HTMLBaseElement);
- create_element_and_check("bdi", HTMLElement);
- create_element_and_check("bdo", HTMLElement);
- create_element_and_check("bgsound", HTMLElement);
- create_element_and_check("big", HTMLElement);
- create_element_and_check("blockquote",HTMLElement);
- create_element_and_check("body", HTMLBodyElement);
- create_element_and_check("br", HTMLBRElement);
- create_element_and_check("button", HTMLButtonElement);
- create_element_and_check("canvas", HTMLCanvasElement);
- create_element_and_check("caption", HTMLTableCaptionElement);
- create_element_and_check("center", HTMLElement);
- create_element_and_check("cite", HTMLElement);
- create_element_and_check("code", HTMLElement);
- create_element_and_check("col", HTMLTableColElement);
- create_element_and_check("colgroup", HTMLTableColElement);
- create_element_and_check("data", HTMLDataElement);
- create_element_and_check("datalist", HTMLDataListElement);
- create_element_and_check("dialog", HTMLDialogElement);
- create_element_and_check("dd", HTMLElement);
- create_element_and_check("del", HTMLModElement);
- create_element_and_check("details", HTMLElement);
- create_element_and_check("dfn", HTMLElement);
- create_element_and_check("dir", HTMLDirectoryElement);
- create_element_and_check("div", HTMLDivElement);
- create_element_and_check("dl", HTMLDListElement);
- create_element_and_check("dt", HTMLElement);
- create_element_and_check("embed", HTMLEmbedElement);
- create_element_and_check("fieldset", HTMLFieldSetElement);
- create_element_and_check("figcaption",HTMLElement);
- create_element_and_check("figure", HTMLElement);
- create_element_and_check("font", HTMLFontElement);
- create_element_and_check("footer", HTMLElement);
- create_element_and_check("form", HTMLFormElement);
- create_element_and_check("frame", HTMLFrameElement);
- create_element_and_check("frameset", HTMLFrameSetElement);
- create_element_and_check("h1", HTMLHeadingElement);
- create_element_and_check("h2", HTMLHeadingElement);
- create_element_and_check("h3", HTMLHeadingElement);
- create_element_and_check("h4", HTMLHeadingElement);
- create_element_and_check("h5", HTMLHeadingElement);
- create_element_and_check("h6", HTMLHeadingElement);
- create_element_and_check("head", HTMLHeadElement);
- create_element_and_check("header", HTMLElement);
- create_element_and_check("hgroup", HTMLElement);
- create_element_and_check("hr", HTMLHRElement);
- create_element_and_check("html", HTMLHtmlElement);
- create_element_and_check("i", HTMLElement);
- create_element_and_check("iframe", HTMLIFrameElement);
- create_element_and_check("img", HTMLImageElement);
- create_element_and_check("input", HTMLInputElement);
- create_element_and_check("ins", HTMLModElement);
- create_element_and_check("isindex", HTMLElement);
- create_element_and_check("kbd", HTMLElement);
- create_element_and_check("label", HTMLLabelElement);
- create_element_and_check("legend", HTMLLegendElement);
- create_element_and_check("li", HTMLLIElement);
- create_element_and_check("link", HTMLLinkElement);
- create_element_and_check("main", HTMLElement);
- create_element_and_check("map", HTMLMapElement);
- create_element_and_check("mark", HTMLElement);
- create_element_and_check("marquee", HTMLElement);
- create_element_and_check("meta", HTMLMetaElement);
- create_element_and_check("meter", HTMLMeterElement);
- create_element_and_check("nav", HTMLElement);
- create_element_and_check("nobr", HTMLElement);
- create_element_and_check("noframes", HTMLElement);
- create_element_and_check("noscript", HTMLElement);
- create_element_and_check("object", HTMLObjectElement);
- create_element_and_check("ol", HTMLOListElement);
- create_element_and_check("optgroup", HTMLOptGroupElement);
- create_element_and_check("option", HTMLOptionElement);
- create_element_and_check("output", HTMLOutputElement);
- create_element_and_check("p", HTMLParagraphElement);
- create_element_and_check("param", HTMLParamElement);
- create_element_and_check("pre", HTMLPreElement);
- create_element_and_check("progress", HTMLProgressElement);
- create_element_and_check("q", HTMLQuoteElement);
- create_element_and_check("rp", HTMLElement);
- create_element_and_check("rt", HTMLElement);
- create_element_and_check("ruby", HTMLElement);
- create_element_and_check("s", HTMLElement);
- create_element_and_check("samp", HTMLElement);
- create_element_and_check("script", HTMLScriptElement);
- create_element_and_check("section", HTMLElement);
- create_element_and_check("select", HTMLSelectElement);
- create_element_and_check("small", HTMLElement);
- create_element_and_check("source", HTMLSourceElement);
- create_element_and_check("spacer", HTMLElement);
- create_element_and_check("span", HTMLSpanElement);
- create_element_and_check("strike", HTMLElement);
- create_element_and_check("style", HTMLStyleElement);
- create_element_and_check("sub", HTMLElement);
- create_element_and_check("summary", HTMLElement);
- create_element_and_check("sup", HTMLElement);
- create_element_and_check("table", HTMLTableElement);
- create_element_and_check("tbody", HTMLTableSectionElement);
- create_element_and_check("td", HTMLTableCellElement);
- create_element_and_check("template", HTMLTemplateElement);
- create_element_and_check("textarea", HTMLTextAreaElement);
- create_element_and_check("th", HTMLTableCellElement);
- create_element_and_check("time", HTMLTimeElement);
- create_element_and_check("title", HTMLTitleElement);
- create_element_and_check("tr", HTMLTableRowElement);
- create_element_and_check("tt", HTMLElement);
- create_element_and_check("track", HTMLTrackElement);
- create_element_and_check("u", HTMLElement);
- create_element_and_check("ul", HTMLUListElement);
- create_element_and_check("var", HTMLElement);
- create_element_and_check("video", HTMLVideoElement);
- create_element_and_check("unknown", HTMLUnknownElement);
- create_element_and_check("wbr", HTMLElement);
-}, "");
+create_element_and_check("a", "HTMLAnchorElement");
+create_element_and_check("abbr", "HTMLElement");
+create_element_and_check("acronym", "HTMLElement");
+create_element_and_check("address", "HTMLElement");
+create_element_and_check("applet", "HTMLAppletElement");
+create_element_and_check("area", "HTMLAreaElement");
+create_element_and_check("article", "HTMLElement");
+create_element_and_check("aside", "HTMLElement");
+create_element_and_check("audio", "HTMLAudioElement");
+create_element_and_check("b", "HTMLElement");
+create_element_and_check("base", "HTMLBaseElement");
+create_element_and_check("bdi", "HTMLElement");
+create_element_and_check("bdo", "HTMLElement");
+create_element_and_check("bgsound", "HTMLElement");
+create_element_and_check("big", "HTMLElement");
+create_element_and_check("blockquote","HTMLElement");
+create_element_and_check("body", "HTMLBodyElement");
+create_element_and_check("br", "HTMLBRElement");
+create_element_and_check("button", "HTMLButtonElement");
+create_element_and_check("canvas", "HTMLCanvasElement");
+create_element_and_check("caption", "HTMLTableCaptionElement");
+create_element_and_check("center", "HTMLElement");
+create_element_and_check("cite", "HTMLElement");
+create_element_and_check("code", "HTMLElement");
+create_element_and_check("col", "HTMLTableColElement");
+create_element_and_check("colgroup", "HTMLTableColElement");
+create_element_and_check("data", "HTMLDataElement");
+create_element_and_check("datalist", "HTMLDataListElement");
+create_element_and_check("dialog", "HTMLDialogElement");
+create_element_and_check("dd", "HTMLElement");
+create_element_and_check("del", "HTMLModElement");
+create_element_and_check("details", "HTMLElement");
+create_element_and_check("dfn", "HTMLElement");
+create_element_and_check("dir", "HTMLDirectoryElement");
+create_element_and_check("div", "HTMLDivElement");
+create_element_and_check("dl", "HTMLDListElement");
+create_element_and_check("dt", "HTMLElement");
+create_element_and_check("embed", "HTMLEmbedElement");
+create_element_and_check("fieldset", "HTMLFieldSetElement");
+create_element_and_check("figcaption","HTMLElement");
+create_element_and_check("figure", "HTMLElement");
+create_element_and_check("font", "HTMLFontElement");
+create_element_and_check("footer", "HTMLElement");
+create_element_and_check("form", "HTMLFormElement");
+create_element_and_check("frame", "HTMLFrameElement");
+create_element_and_check("frameset", "HTMLFrameSetElement");
+create_element_and_check("h1", "HTMLHeadingElement");
+create_element_and_check("h2", "HTMLHeadingElement");
+create_element_and_check("h3", "HTMLHeadingElement");
+create_element_and_check("h4", "HTMLHeadingElement");
+create_element_and_check("h5", "HTMLHeadingElement");
+create_element_and_check("h6", "HTMLHeadingElement");
+create_element_and_check("head", "HTMLHeadElement");
+create_element_and_check("header", "HTMLElement");
+create_element_and_check("hgroup", "HTMLElement");
+create_element_and_check("hr", "HTMLHRElement");
+create_element_and_check("html", "HTMLHtmlElement");
+create_element_and_check("i", "HTMLElement");
+create_element_and_check("iframe", "HTMLIFrameElement");
+create_element_and_check("img", "HTMLImageElement");
+create_element_and_check("input", "HTMLInputElement");
+create_element_and_check("ins", "HTMLModElement");
+create_element_and_check("isindex", "HTMLElement");
+create_element_and_check("kbd", "HTMLElement");
+create_element_and_check("label", "HTMLLabelElement");
+create_element_and_check("legend", "HTMLLegendElement");
+create_element_and_check("li", "HTMLLIElement");
+create_element_and_check("link", "HTMLLinkElement");
+create_element_and_check("main", "HTMLElement");
+create_element_and_check("map", "HTMLMapElement");
+create_element_and_check("mark", "HTMLElement");
+create_element_and_check("marquee", "HTMLElement");
+create_element_and_check("meta", "HTMLMetaElement");
+create_element_and_check("meter", "HTMLMeterElement");
+create_element_and_check("nav", "HTMLElement");
+create_element_and_check("nobr", "HTMLElement");
+create_element_and_check("noframes", "HTMLElement");
+create_element_and_check("noscript", "HTMLElement");
+create_element_and_check("object", "HTMLObjectElement");
+create_element_and_check("ol", "HTMLOListElement");
+create_element_and_check("optgroup", "HTMLOptGroupElement");
+create_element_and_check("option", "HTMLOptionElement");
+create_element_and_check("output", "HTMLOutputElement");
+create_element_and_check("p", "HTMLParagraphElement");
+create_element_and_check("param", "HTMLParamElement");
+create_element_and_check("pre", "HTMLPreElement");
+create_element_and_check("progress", "HTMLProgressElement");
+create_element_and_check("q", "HTMLQuoteElement");
+create_element_and_check("rp", "HTMLElement");
+create_element_and_check("rt", "HTMLElement");
+create_element_and_check("ruby", "HTMLElement");
+create_element_and_check("s", "HTMLElement");
+create_element_and_check("samp", "HTMLElement");
+create_element_and_check("script", "HTMLScriptElement");
+create_element_and_check("section", "HTMLElement");
+create_element_and_check("select", "HTMLSelectElement");
+create_element_and_check("small", "HTMLElement");
+create_element_and_check("source", "HTMLSourceElement");
+create_element_and_check("spacer", "HTMLElement");
+create_element_and_check("span", "HTMLSpanElement");
+create_element_and_check("strike", "HTMLElement");
+create_element_and_check("style", "HTMLStyleElement");
+create_element_and_check("sub", "HTMLElement");
+create_element_and_check("summary", "HTMLElement");
+create_element_and_check("sup", "HTMLElement");
+create_element_and_check("table", "HTMLTableElement");
+create_element_and_check("tbody", "HTMLTableSectionElement");
+create_element_and_check("td", "HTMLTableCellElement");
+create_element_and_check("template", "HTMLTemplateElement");
+create_element_and_check("textarea", "HTMLTextAreaElement");
+create_element_and_check("th", "HTMLTableCellElement");
+create_element_and_check("time", "HTMLTimeElement");
+create_element_and_check("title", "HTMLTitleElement");
+create_element_and_check("tr", "HTMLTableRowElement");
+create_element_and_check("tt", "HTMLElement");
+create_element_and_check("track", "HTMLTrackElement");
+create_element_and_check("u", "HTMLElement");
+create_element_and_check("ul", "HTMLUListElement");
+create_element_and_check("var", "HTMLElement");
+create_element_and_check("video", "HTMLVideoElement");
+create_element_and_check("unknown", "HTMLUnknownElement");
+create_element_and_check("wbr", "HTMLElement");
test(function() {
var fragment = document.createDocumentFragment();
var doc = document.implementation.createDocument(null, null);
var copy = doc.cloneNode();
check_copy(doc, copy, Document);
+ assert_equals(doc.charset, "UTF-8");
+ assert_equals(doc.charset, copy.charset);
+ assert_equals(doc.contentType, "application/xml");
assert_equals(doc.contentType, copy.contentType);
+ assert_equals(doc.URL, "about:blank")
+ assert_equals(doc.URL, copy.URL);
+ assert_equals(doc.origin, "null")
+ assert_equals(doc.origin, copy.origin);
+ assert_equals(doc.compatMode, "CSS1Compat");
+ assert_equals(doc.compatMode, copy.compatMode);
}, "implementation.createDocument");
test(function() {
------------------------------------------------------------------------
List of files:
/LayoutTests/imported/w3c/web-platform-tests/domparsing/DOMParser-parseFromString-html.html
-/LayoutTests/imported/w3c/web-platform-tests/domparsing/DOMParser-parseFromString-xml-doctype.html
-/LayoutTests/imported/w3c/web-platform-tests/domparsing/DOMParser-parseFromString-xml.html
/LayoutTests/imported/w3c/web-platform-tests/domparsing/OWNERS
-/LayoutTests/imported/w3c/web-platform-tests/domparsing/XMLSerializer-serializeToString.html
/LayoutTests/imported/w3c/web-platform-tests/domparsing/createContextualFragment.html
/LayoutTests/imported/w3c/web-platform-tests/domparsing/innerhtml-01.xhtml
/LayoutTests/imported/w3c/web-platform-tests/domparsing/innerhtml-03.xhtml
/LayoutTests/imported/w3c/web-platform-tests/domparsing/insert-adjacent.html
/LayoutTests/imported/w3c/web-platform-tests/domparsing/insert_adjacent_html.html
/LayoutTests/imported/w3c/web-platform-tests/domparsing/insert_adjacent_html.js
-/LayoutTests/imported/w3c/web-platform-tests/domparsing/insert_adjacent_html-xhtml.xhtml
/LayoutTests/imported/w3c/web-platform-tests/domparsing/outerhtml-01.html
/LayoutTests/imported/w3c/web-platform-tests/domparsing/outerhtml-02.html
-/LayoutTests/imported/w3c/web-platform-tests/domparsing/style_attribute_html.html
/LayoutTests/imported/w3c/web-platform-tests/domparsing/xml-serialization.xhtml
<!-- Content metadata -->
<script src=/encrypted-media/content/content-metadata.js></script>
- <!-- Message handler for Clear Key -->
- <script src=/encrypted-media/util/clearkey-messagehandler.js></script>
<!-- The script for this specific test -->
<script src=/encrypted-media/scripts/setmediakeys.js></script>
<script src=/encrypted-media/util/utf8.js></script>
<script src=/encrypted-media/util/fetch.js></script>
- <!-- Message handler for Clear Key -->
- <script src=/encrypted-media/util/clearkey-messagehandler.js></script>
-
<!-- The script for this specific test -->
<script src=/encrypted-media/scripts/not-callable-after-createsession.js></script>
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Events with DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Expiration with DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, multiple keys for audio/video</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Verify MediaKeySession.keyStatuses with multiple sessions, DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, persistent-license session with DRM, mp4, destroy the license</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, persistent-license session with DRM, mp4, event sequence</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, persistent-license session with DRM, mp4</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, persistent-usage-record session with DRM, mp4, event sequence</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: persistent-usage-record, playback and retrieve record in new window, DRM, mp4</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, clear then encrypted</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, encrypted then clear</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful playback, temporary session with DRM, mp4, multiple keys</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Verify MediaKeySession.keyStatuses with multiple sessions, DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4, two videos</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Verify MediaKeySession.keyStatuses with multiple sessions, DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Successful Playback, Temporary session with DRM, mp4</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
- <meta name="timeout" content="long">
<title>Encrypted Media Extensions: requestMediaKeySystemAccess tests, DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: setMediaKeys again after playback with DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: setMediaKeys again after resetting src attribute on video element with DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: setMediaKeys multiple at same time with DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: setMediaKeys multiple times with different mediakeys with DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: setMediaKeys multiple times with the same mediakeys with DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: setMediaKeys to multiple video elements with DRM</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<!-- Content metadata -->
<script src=/encrypted-media/content/content-metadata.js></script>
- <!-- Message handler for DRM servers -->
- <script src=/encrypted-media/util/drm-messagehandler.js></script>
-
<!-- The script for this specific test -->
<script src=/encrypted-media/scripts/setmediakeys.js></script>
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions - Waiting for a key for DRM, mp4</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
<script src=/encrypted-media/util/utf8.js></script>
<script src=/encrypted-media/util/fetch.js></script>
- <!-- Message handler for DRM server -->
- <script src=/encrypted-media/util/drm-messagehandler.js></script>
-
<!-- The script for this specific test -->
<script src=/encrypted-media/scripts/not-callable-after-createsession.js></script>
<html>
<head>
<meta charset=utf-8>
+ <meta name="timeout" content="long">
<title>Encrypted Media Extensions: Test that persistent license cannot be ingested into temporary session</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/">
-FAIL Fetch with GET assert_equals: Request should have header origin: http://localhost:8800 expected (string) "http://localhost:8800" but got (object) null
-FAIL Fetch with HEAD assert_equals: Request should have header origin: http://localhost:8800 expected (string) "http://localhost:8800" but got (object) null
+PASS Fetch with GET
+FAIL Fetch with HEAD assert_equals: Request should have header content-length: null expected (object) null but got (string) "0"
PASS Fetch with PUT without body
PASS Fetch with PUT with body
PASS Fetch with POST without body
PASS Fetch with POST with text body
-PASS Fetch with POST with FormData body
+FAIL Fetch with POST with FormData body assert_true: Request should have header content-type starting with multipart/form-data; boundary=, but got multipart/form-data;boundary=----WebKitFormBoundary7HBc13pIcNoBV6R5 expected true got false
PASS Fetch with POST with URLSearchParams body
FAIL Fetch with POST with Blob body assert_equals: Request should have header content-type: null expected (object) null but got (string) ""
FAIL Fetch with POST with ArrayBuffer body assert_equals: Request should have header content-type: null expected (object) null but got (string) "application/x-www-form-urlencoded"
PASS Fetch with POST with Blob body with mime type
FAIL Fetch with Chicken assert_equals: Request should have header content-length: null expected (object) null but got (string) "0"
PASS Fetch with Chicken with body
+PASS Fetch with GET and mode "cors" does not need an Origin header
+PASS Fetch with POST and mode "same-origin" needs an Origin header
+PASS Fetch with POST and mode "no-cors" needs an Origin header
+PASS Fetch with PUT and mode "same-origin" needs an Origin header
+PASS Fetch with TacO and mode "same-origin" needs an Origin header
+PASS Fetch with TacO and mode "cors" needs an Origin header
-FAIL Fetch with GET assert_equals: Request should have header origin: http://localhost:8800 expected (string) "http://localhost:8800" but got (object) null
-FAIL Fetch with HEAD assert_equals: Request should have header origin: http://localhost:8800 expected (string) "http://localhost:8800" but got (object) null
+PASS Fetch with GET
+FAIL Fetch with HEAD assert_equals: Request should have header content-length: null expected (object) null but got (string) "0"
PASS Fetch with PUT without body
PASS Fetch with PUT with body
PASS Fetch with POST without body
PASS Fetch with POST with Blob body with mime type
FAIL Fetch with Chicken assert_equals: Request should have header content-length: null expected (object) null but got (string) "0"
PASS Fetch with Chicken with body
+PASS Fetch with GET and mode "cors" does not need an Origin header
+PASS Fetch with POST and mode "same-origin" needs an Origin header
+PASS Fetch with POST and mode "no-cors" needs an Origin header
+PASS Fetch with PUT and mode "same-origin" needs an Origin header
+PASS Fetch with TacO and mode "same-origin" needs an Origin header
+PASS Fetch with TacO and mode "cors" needs an Origin header
function checkContentType(contentType, body)
{
if (self.FormData && body instanceof self.FormData) {
- assert_true(contentType.startsWith("multipart/form-data;boundary="), "Request should have header content-type starting with multipart/form-data;boundary=, but got " + contentType);
+ assert_true(contentType.startsWith("multipart/form-data; boundary="), "Request should have header content-type starting with multipart/form-data; boundary=, but got " + contentType);
return;
}
var url = RESOURCES_DIR + "inspect-headers.py"
-requestHeaders("Fetch with GET", url, "GET", null, location.origin, null);
-requestHeaders("Fetch with HEAD", url, "HEAD", null, location.origin, null);
+requestHeaders("Fetch with GET", url, "GET", null, null, null);
+requestHeaders("Fetch with HEAD", url, "HEAD", null, null, null);
requestHeaders("Fetch with PUT without body", url, "POST", null, location.origin, "0");
requestHeaders("Fetch with PUT with body", url, "PUT", "Request's body", location.origin, "14");
requestHeaders("Fetch with POST without body", url, "POST", null, location.origin, "0");
requestHeaders("Fetch with Chicken", url, "Chicken", null, location.origin, null);
requestHeaders("Fetch with Chicken with body", url, "Chicken", "Request's body", location.origin, "14");
+function requestOriginHeader(method, mode, needsOrigin) {
+ promise_test(function(test){
+ return fetch(url + "?headers=origin", {method:method, mode:mode}).then(function(resp) {
+ assert_equals(resp.status, 200, "HTTP status is 200");
+ assert_equals(resp.type , "basic", "Response's type is basic");
+ if(needsOrigin)
+ assert_equals(resp.headers.get("x-request-origin") , location.origin, "Request should have an Origin header with origin: " + location.origin);
+ else
+ assert_equals(resp.headers.get("x-request-origin"), null, "Request should not have an Origin header")
+ });
+ }, "Fetch with " + method + " and mode \"" + mode + "\" " + (needsOrigin ? "needs" : "does not need") + " an Origin header");
+}
+
+requestOriginHeader("GET", "cors", false);
+requestOriginHeader("POST", "same-origin", true);
+requestOriginHeader("POST", "no-cors", true);
+requestOriginHeader("PUT", "same-origin", true);
+requestOriginHeader("TacO", "same-origin", true);
+requestOriginHeader("TacO", "cors", true);
+
done();
PASS Fetch with POST with Float64Array body
PASS Fetch with POST with DataView body
PASS Fetch with POST with Blob body with mime type
+FAIL Fetch with POST with ReadableStream assert_equals: expected "Test" but got ""
+FAIL Fetch with POST with ReadableStream containing String undefined is not an object (evaluating 'promise.then')
+FAIL Fetch with POST with ReadableStream containing null undefined is not an object (evaluating 'promise.then')
+FAIL Fetch with POST with ReadableStream containing number undefined is not an object (evaluating 'promise.then')
+FAIL Fetch with POST with ReadableStream containing ArrayBuffer undefined is not an object (evaluating 'promise.then')
+FAIL Fetch with POST with ReadableStream containing Blob undefined is not an object (evaluating 'promise.then')
PASS Fetch with POST with Float64Array body
PASS Fetch with POST with DataView body
PASS Fetch with POST with Blob body with mime type
+FAIL Fetch with POST with ReadableStream assert_equals: expected "Test" but got ""
+FAIL Fetch with POST with ReadableStream containing String undefined is not an object (evaluating 'promise.then')
+FAIL Fetch with POST with ReadableStream containing null undefined is not an object (evaluating 'promise.then')
+FAIL Fetch with POST with ReadableStream containing number undefined is not an object (evaluating 'promise.then')
+FAIL Fetch with POST with ReadableStream containing ArrayBuffer undefined is not an object (evaluating 'promise.then')
+FAIL Fetch with POST with ReadableStream containing Blob undefined is not an object (evaluating 'promise.then')
}, desc);
}
+function testUploadFailure(desc, url, method, body) {
+ const requestInit = {"method": method};
+ promise_test(test => {
+ if (typeof body === "function")
+ body = body();
+ if (body)
+ requestInit["body"] = body;
+ return promise_rejects(new TypeError(), fetch(url, requestInit));
+ }, desc);
+}
+
var url = RESOURCES_DIR + "echo-content.py"
testUpload("Fetch with PUT with body", url, "PUT", "Request's body", "Request's body");
testUpload("Fetch with POST with Float64Array body", url, "POST", new Float64Array(1), "\0\0\0\0\0\0\0\0");
testUpload("Fetch with POST with DataView body", url, "POST", new DataView(new ArrayBuffer(8), 0, 4), "\0\0\0\0");
testUpload("Fetch with POST with Blob body with mime type", url, "POST", new Blob(["Test"], { type: "text/maybe" }), "Test");
+testUpload("Fetch with POST with ReadableStream", url, "POST", new ReadableStream({start: controller => {
+ const encoder = new TextEncoder();
+ controller.enqueue(encoder.encode("Test"));
+ controller.close();
+ }}), "Test");
+testUploadFailure("Fetch with POST with ReadableStream containing String", url, "POST", new ReadableStream({start: controller => {
+ controller.enqueue("Test");
+ controller.close();
+ }}));
+testUploadFailure("Fetch with POST with ReadableStream containing null", url, "POST", new ReadableStream({start: controller => {
+ controller.enqueue(null);
+ controller.close();
+ }}));
+testUploadFailure("Fetch with POST with ReadableStream containing number", url, "POST", new ReadableStream({start: controller => {
+ controller.enqueue(99);
+ controller.close();
+ }}));
+testUploadFailure("Fetch with POST with ReadableStream containing ArrayBuffer", url, "POST", new ReadableStream({start: controller => {
+ controller.enqueue(new ArrayBuffer());
+ controller.close();
+ }}));
+testUploadFailure("Fetch with POST with ReadableStream containing Blob", url, "POST", new ReadableStream({start: controller => {
+ controller.enqueue(new Blob());
+ controller.close();
+ }}));
done();
PASS Create headers with null should throw
PASS Create headers with 1 should throw
PASS Create headers with sequence
-PASS Create headers with OpenEndedDictionary
+PASS Create headers with record
PASS Create headers with existing headers
+FAIL Create headers with existing headers with custom iterator assert_equals: expected (string) "test" but got (object) null
PASS Check append method
PASS Check set method
PASS Check has method
assert_equals(headers.get(name), String(headerDict[name]),
"name: " + name + " has value: " + headerDict[name]);
}
- }, "Create headers with OpenEndedDictionary");
+ }, "Create headers with record");
test(function() {
var headers = new Headers(headerDict);
}, "Create headers with existing headers");
test(function() {
+ var headers = new Headers()
+ headers[Symbol.iterator] = function *() {
+ yield ["test", "test"]
+ }
+ var headers2 = new Headers(headers)
+ assert_equals(headers2.get("test"), "test")
+ }, "Create headers with existing headers with custom iterator");
+
+ test(function() {
var headers = new Headers();
for (name in headerDict) {
headers.append(name, headerDict[name]);
</head>
<body>
<script id="headers-idl" type="text/plain">
- typedef (Headers or sequence<sequence<ByteString>> or OpenEndedDictionary<ByteString>) HeadersInit;
+ typedef (sequence<sequence<ByteString>> or record<ByteString>) HeadersInit;
[Constructor(optional HeadersInit init),
Exposed=(Window,Worker)]
<head>
<meta charset="utf-8">
<title>Fetch in worker: rediraction loop</title>
+ <meta name="timeout" content="long">
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
<script src="/resources/testharness.js"></script>
fetch_tests_from_worker(new Worker("redirect-count.js"));
</script>
</body>
-</html>
\ No newline at end of file
+</html>
<head>
<meta charset="utf-8">
<title>Fetch: redirection loop</title>
+ <meta name="timeout" content="long">
<meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
<meta name="help" href="https://fetch.spec.whatwg.org/#http-network-or-cache-fetch">
<script src="/resources/testharness.js"></script>
<script src="../resources/utils.js"></script>
<script src="redirect-count.js"></script>
</body>
-</html>
\ No newline at end of file
+</html>
importScripts("/common/utils.js");
}
-function redirectCount(desc, redirectUrl, redirectStatus, maxCount, shouldPass) {
+function redirectCount(desc, redirectUrl, redirectLocation, redirectStatus, maxCount, shouldPass) {
var uuid_token = token();
var urlParameters = "?token=" + uuid_token + "&max_age=0";
urlParameters += "&redirect_status=" + redirectStatus;
urlParameters += "&max_count=" + maxCount;
+ if (redirectLocation)
+ urlParameters += "&location=" + encodeURIComponent(redirectLocation);
var url = redirectUrl;
var requestInit = {"redirect": "follow"};
}, desc);
}
-var redirUrl = RESOURCES_DIR + "redirect-count.py";
+var redirUrl = RESOURCES_DIR + "redirect.py";
for (var statusCode of [301, 302, 303, 307, 308]) {
- redirectCount("Redirect " + statusCode + " 20 times", redirUrl, statusCode, 20, true);
- redirectCount("Redirect " + statusCode + " 21 times", redirUrl, statusCode, 21, false);
+ redirectCount("Redirect " + statusCode + " 20 times", redirUrl, redirUrl, statusCode, 20, true);
+ redirectCount("Redirect " + statusCode + " 21 times", redirUrl, redirUrl, statusCode, 21, false);
}
done();
--- /dev/null
+
+PASS Same origin redirection, empty init, unsafe-url redirect header
+PASS Same origin redirection, empty init, no-referrer-when-downgrade redirect header
+PASS Same origin redirection, empty init, same-origin redirect header
+FAIL Same origin redirection, empty init, origin redirect header assert_equals: Check referrer header expected "http://localhost:8800/" but got "http://localhost:8800/fetch/api/redirect/redirect-referrer.html"
+PASS Same origin redirection, empty init, origin-when-cross-origin redirect header
+FAIL Same origin redirection, empty init, no-referrer redirect header assert_equals: Check referrer header expected (object) null but got (string) "http://localhost:8800/fetch/api/redirect/redirect-referrer.html"
+FAIL Same origin redirection, empty init, strict-origin redirect header assert_equals: Check referrer header expected "http://localhost:8800/" but got "http://localhost:8800/fetch/api/redirect/redirect-referrer.html"
+PASS Same origin redirection, empty init, strict-origin-when-cross-origin redirect header
+PASS Same origin redirection, empty redirect header, unsafe-url init
+PASS Same origin redirection, empty redirect header, no-referrer-when-downgrade init
+FAIL Same origin redirection, empty redirect header, same-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+PASS Same origin redirection, empty redirect header, origin init
+PASS Same origin redirection, empty redirect header, origin-when-cross-origin init
+PASS Same origin redirection, empty redirect header, no-referrer init
+FAIL Same origin redirection, empty redirect header, strict-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+FAIL Same origin redirection, empty redirect header, strict-origin-when-cross-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+FAIL Cross origin redirection, empty init, unsafe-url redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/fetch/api/redirect/redirect-referrer.html" but got (object) null
+FAIL Cross origin redirection, empty init, no-referrer-when-downgrade redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/fetch/api/redirect/redirect-referrer.html" but got (object) null
+PASS Cross origin redirection, empty init, same-origin redirect header
+FAIL Cross origin redirection, empty init, origin redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+FAIL Cross origin redirection, empty init, origin-when-cross-origin redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+PASS Cross origin redirection, empty init, no-referrer redirect header
+FAIL Cross origin redirection, empty init, strict-origin redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+FAIL Cross origin redirection, empty init, strict-origin-when-cross-origin redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+FAIL Cross origin redirection, empty redirect header, unsafe-url init assert_equals: Check referrer header expected (string) "http://localhost:8800/fetch/api/redirect/redirect-referrer.html" but got (object) null
+FAIL Cross origin redirection, empty redirect header, no-referrer-when-downgrade init assert_equals: Check referrer header expected (string) "http://localhost:8800/fetch/api/redirect/redirect-referrer.html" but got (object) null
+FAIL Cross origin redirection, empty redirect header, same-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+FAIL Cross origin redirection, empty redirect header, origin init assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+FAIL Cross origin redirection, empty redirect header, origin-when-cross-origin init assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+PASS Cross origin redirection, empty redirect header, no-referrer init
+FAIL Cross origin redirection, empty redirect header, strict-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+FAIL Cross origin redirection, empty redirect header, strict-origin-when-cross-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+
--- /dev/null
+
+PASS Same origin redirection, empty init, unsafe-url redirect header
+PASS Same origin redirection, empty init, no-referrer-when-downgrade redirect header
+PASS Same origin redirection, empty init, same-origin redirect header
+FAIL Same origin redirection, empty init, origin redirect header assert_equals: Check referrer header expected "http://localhost:8800/" but got "http://localhost:8800/fetch/api/redirect/redirect-referrer.js"
+PASS Same origin redirection, empty init, origin-when-cross-origin redirect header
+FAIL Same origin redirection, empty init, no-referrer redirect header assert_equals: Check referrer header expected (object) null but got (string) "http://localhost:8800/fetch/api/redirect/redirect-referrer.js"
+FAIL Same origin redirection, empty init, strict-origin redirect header assert_equals: Check referrer header expected "http://localhost:8800/" but got "http://localhost:8800/fetch/api/redirect/redirect-referrer.js"
+PASS Same origin redirection, empty init, strict-origin-when-cross-origin redirect header
+PASS Same origin redirection, empty redirect header, unsafe-url init
+PASS Same origin redirection, empty redirect header, no-referrer-when-downgrade init
+FAIL Same origin redirection, empty redirect header, same-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+PASS Same origin redirection, empty redirect header, origin init
+PASS Same origin redirection, empty redirect header, origin-when-cross-origin init
+PASS Same origin redirection, empty redirect header, no-referrer init
+FAIL Same origin redirection, empty redirect header, strict-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+FAIL Same origin redirection, empty redirect header, strict-origin-when-cross-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+FAIL Cross origin redirection, empty init, unsafe-url redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/fetch/api/redirect/redirect-referrer.js" but got (object) null
+FAIL Cross origin redirection, empty init, no-referrer-when-downgrade redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/fetch/api/redirect/redirect-referrer.js" but got (object) null
+PASS Cross origin redirection, empty init, same-origin redirect header
+FAIL Cross origin redirection, empty init, origin redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+FAIL Cross origin redirection, empty init, origin-when-cross-origin redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+PASS Cross origin redirection, empty init, no-referrer redirect header
+FAIL Cross origin redirection, empty init, strict-origin redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+FAIL Cross origin redirection, empty init, strict-origin-when-cross-origin redirect header assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+FAIL Cross origin redirection, empty redirect header, unsafe-url init assert_equals: Check referrer header expected (string) "http://localhost:8800/fetch/api/redirect/redirect-referrer.js" but got (object) null
+FAIL Cross origin redirection, empty redirect header, no-referrer-when-downgrade init assert_equals: Check referrer header expected (string) "http://localhost:8800/fetch/api/redirect/redirect-referrer.js" but got (object) null
+FAIL Cross origin redirection, empty redirect header, same-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+FAIL Cross origin redirection, empty redirect header, origin init assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+FAIL Cross origin redirection, empty redirect header, origin-when-cross-origin init assert_equals: Check referrer header expected (string) "http://localhost:8800/" but got (object) null
+PASS Cross origin redirection, empty redirect header, no-referrer init
+FAIL Cross origin redirection, empty redirect header, strict-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+FAIL Cross origin redirection, empty redirect header, strict-origin-when-cross-origin init promise_test: Unhandled rejection with value: object "TypeError: Type error"
+
--- /dev/null
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>Fetch in worker: redirect referrer handling</title>
+ <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
+ <meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
+ <meta name="help" href="https://fetch.spec.whatwg.org/#http-redirect-fetch">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body>
+ <script>
+ fetch_tests_from_worker(new Worker("redirect-referrer.js"));
+ </script>
+ </body>
+</html>
--- /dev/null
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>Fetch: redirect referrer handling</title>
+ <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
+ <meta name="help" href="https://fetch.spec.whatwg.org/#main-fetch">
+ <meta name="help" href="https://fetch.spec.whatwg.org/#http-redirect-fetch">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body>
+ <script src="/common/utils.js"></script>
+ <script src="../resources/utils.js"></script>
+ <script src="/common/get-host-info.sub.js"></script>
+ <script src="redirect-referrer.js"></script>
+ </body>
+</html>
--- /dev/null
+if (this.document === undefined) {
+ importScripts("/common/utils.js");
+ importScripts("/resources/testharness.js");
+ importScripts("../resources/utils.js");
+ importScripts("/common/get-host-info.sub.js");
+}
+
+function testReferrerAfterRedirection(desc, redirectUrl, redirectLocation, referrerPolicy, redirectReferrerPolicy, expectedReferrer) {
+ var url = redirectUrl;
+ var urlParameters = "?location=" + encodeURIComponent(redirectLocation);
+
+ if (redirectReferrerPolicy)
+ urlParameters += "&redirect_referrerpolicy=" + redirectReferrerPolicy;
+
+ var requestInit = {"redirect": "follow", "referrerPolicy": referrerPolicy};
+
+ promise_test(function(test) {
+ return fetch(url + urlParameters, requestInit).then(function(response) {
+ assert_equals(response.status, 200, "Inspect header response's status is 200");
+ assert_equals(response.headers.get("x-request-referer"), expectedReferrer ? expectedReferrer : null, "Check referrer header");
+ });
+ }, desc);
+}
+
+var referrerOrigin = get_host_info().HTTP_ORIGIN + "/";
+var referrerUrl = location.href;
+
+var redirectUrl = RESOURCES_DIR + "redirect.py";
+var locationUrl = get_host_info().HTTP_ORIGIN + dirname(location.pathname) + RESOURCES_DIR + "inspect-headers.py?headers=referer";
+var crossLocationUrl = get_host_info().HTTP_REMOTE_ORIGIN + dirname(location.pathname) + RESOURCES_DIR + "inspect-headers.py?cors&headers=referer";
+
+testReferrerAfterRedirection("Same origin redirection, empty init, unsafe-url redirect header ", redirectUrl, locationUrl, "", "unsafe-url", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty init, no-referrer-when-downgrade redirect header ", redirectUrl, locationUrl, "", "no-referrer-when-downgrade", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty init, same-origin redirect header ", redirectUrl, locationUrl, "", "same-origin", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty init, origin redirect header ", redirectUrl, locationUrl, "", "origin", referrerOrigin);
+testReferrerAfterRedirection("Same origin redirection, empty init, origin-when-cross-origin redirect header ", redirectUrl, locationUrl, "", "origin-when-cross-origin", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty init, no-referrer redirect header ", redirectUrl, locationUrl, "", "no-referrer", null);
+testReferrerAfterRedirection("Same origin redirection, empty init, strict-origin redirect header ", redirectUrl, locationUrl, "", "strict-origin", referrerOrigin);
+testReferrerAfterRedirection("Same origin redirection, empty init, strict-origin-when-cross-origin redirect header ", redirectUrl, locationUrl, "", "strict-origin-when-cross-origin", referrerUrl);
+
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, unsafe-url init ", redirectUrl, locationUrl, "unsafe-url", "", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, no-referrer-when-downgrade init ", redirectUrl, locationUrl, "no-referrer-when-downgrade", "", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, same-origin init ", redirectUrl, locationUrl, "same-origin", "", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, origin init ", redirectUrl, locationUrl, "origin", "", referrerOrigin);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, origin-when-cross-origin init ", redirectUrl, locationUrl, "origin-when-cross-origin", "", referrerUrl);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, no-referrer init ", redirectUrl, locationUrl, "no-referrer", "", null);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, strict-origin init ", redirectUrl, locationUrl, "strict-origin", "", referrerOrigin);
+testReferrerAfterRedirection("Same origin redirection, empty redirect header, strict-origin-when-cross-origin init ", redirectUrl, locationUrl, "strict-origin-when-cross-origin", "", referrerUrl);
+
+testReferrerAfterRedirection("Cross origin redirection, empty init, unsafe-url redirect header ", redirectUrl, crossLocationUrl, "", "unsafe-url", referrerUrl);
+testReferrerAfterRedirection("Cross origin redirection, empty init, no-referrer-when-downgrade redirect header ", redirectUrl, crossLocationUrl, "", "no-referrer-when-downgrade", referrerUrl);
+testReferrerAfterRedirection("Cross origin redirection, empty init, same-origin redirect header ", redirectUrl, crossLocationUrl, "", "same-origin", null);
+testReferrerAfterRedirection("Cross origin redirection, empty init, origin redirect header ", redirectUrl, crossLocationUrl, "", "origin", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty init, origin-when-cross-origin redirect header ", redirectUrl, crossLocationUrl, "", "origin-when-cross-origin", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty init, no-referrer redirect header ", redirectUrl, crossLocationUrl, "", "no-referrer", null);
+testReferrerAfterRedirection("Cross origin redirection, empty init, strict-origin redirect header ", redirectUrl, crossLocationUrl, "", "strict-origin", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty init, strict-origin-when-cross-origin redirect header ", redirectUrl, crossLocationUrl, "", "strict-origin-when-cross-origin", referrerOrigin);
+
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, unsafe-url init ", redirectUrl, crossLocationUrl, "unsafe-url", "", referrerUrl);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, no-referrer-when-downgrade init ", redirectUrl, crossLocationUrl, "no-referrer-when-downgrade", "", referrerUrl);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, same-origin init ", redirectUrl, crossLocationUrl, "same-origin", "", null);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, origin init ", redirectUrl, crossLocationUrl, "origin", "", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, origin-when-cross-origin init ", redirectUrl, crossLocationUrl, "origin-when-cross-origin", "", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, no-referrer init ", redirectUrl, crossLocationUrl, "no-referrer", "", null);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, strict-origin init ", redirectUrl, crossLocationUrl, "strict-origin", "", referrerOrigin);
+testReferrerAfterRedirection("Cross origin redirection, empty redirect header, strict-origin-when-cross-origin init ", redirectUrl, crossLocationUrl, "strict-origin-when-cross-origin", "", referrerOrigin);
+
+done();
/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-origin-worker.html
/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-origin.html
/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-origin.js
+/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-referrer-worker.html
+/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-referrer.html
+/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-referrer.js
/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-schemes.html
/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-to-dataurl-worker.html
/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-to-dataurl.html
<!DOCTYPE html>
<title>Current page used as a test helper</title>
+<base href="success/">
<script>
'use strict';
-const current = document.querySelector('#c').contentWindow;
-
window.createRequest = (...args) => {
+ const current = document.querySelector('#c').contentWindow;
return new current.Request(...args);
};
promise_test(() => {
return loadPromise.then(() => {
- const req = frames[0].createRequest("url");
+ const req = document.querySelector('iframe').contentWindow.createRequest("url");
- assert_equals(req.url, new URL("current/url", location.href).href);
+ assert_equals(req.url, new URL("current/success/url", location.href).href);
});
}, "should parse the URL relative to the current settings object");
--- /dev/null
+Blocked access to external URL http://example.com:1/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:1/ due to access control checks.
+Blocked access to external URL http://example.com:7/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:7/ due to access control checks.
+Blocked access to external URL http://example.com:9/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:9/ due to access control checks.
+Blocked access to external URL http://example.com:11/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:11/ due to access control checks.
+Blocked access to external URL http://example.com:13/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:13/ due to access control checks.
+Blocked access to external URL http://example.com:15/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:15/ due to access control checks.
+Blocked access to external URL http://example.com:17/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:17/ due to access control checks.
+Blocked access to external URL http://example.com:19/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:19/ due to access control checks.
+Blocked access to external URL http://example.com:20/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:20/ due to access control checks.
+Blocked access to external URL http://example.com:21/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:21/ due to access control checks.
+Blocked access to external URL http://example.com:22/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:22/ due to access control checks.
+Blocked access to external URL http://example.com:23/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:23/ due to access control checks.
+Blocked access to external URL http://example.com:25/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:25/ due to access control checks.
+Blocked access to external URL http://example.com:37/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:37/ due to access control checks.
+Blocked access to external URL http://example.com:42/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:42/ due to access control checks.
+Blocked access to external URL http://example.com:43/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:43/ due to access control checks.
+Blocked access to external URL http://example.com:53/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:53/ due to access control checks.
+Blocked access to external URL http://example.com:77/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:77/ due to access control checks.
+Blocked access to external URL http://example.com:79/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:79/ due to access control checks.
+Blocked access to external URL http://example.com:87/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:87/ due to access control checks.
+Blocked access to external URL http://example.com:95/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:95/ due to access control checks.
+Blocked access to external URL http://example.com:101/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:101/ due to access control checks.
+Blocked access to external URL http://example.com:102/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:102/ due to access control checks.
+Blocked access to external URL http://example.com:103/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:103/ due to access control checks.
+Blocked access to external URL http://example.com:104/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:104/ due to access control checks.
+Blocked access to external URL http://example.com:109/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:109/ due to access control checks.
+Blocked access to external URL http://example.com:110/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:110/ due to access control checks.
+Blocked access to external URL http://example.com:111/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:111/ due to access control checks.
+Blocked access to external URL http://example.com:113/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:113/ due to access control checks.
+Blocked access to external URL http://example.com:115/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:115/ due to access control checks.
+Blocked access to external URL http://example.com:117/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:117/ due to access control checks.
+Blocked access to external URL http://example.com:119/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:119/ due to access control checks.
+Blocked access to external URL http://example.com:123/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:123/ due to access control checks.
+Blocked access to external URL http://example.com:135/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:135/ due to access control checks.
+Blocked access to external URL http://example.com:139/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:139/ due to access control checks.
+Blocked access to external URL http://example.com:143/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:143/ due to access control checks.
+Blocked access to external URL http://example.com:179/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:179/ due to access control checks.
+Blocked access to external URL http://example.com:389/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:389/ due to access control checks.
+Blocked access to external URL http://example.com:465/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:465/ due to access control checks.
+Blocked access to external URL http://example.com:512/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:512/ due to access control checks.
+Blocked access to external URL http://example.com:513/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:513/ due to access control checks.
+Blocked access to external URL http://example.com:514/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:514/ due to access control checks.
+Blocked access to external URL http://example.com:515/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:515/ due to access control checks.
+Blocked access to external URL http://example.com:526/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:526/ due to access control checks.
+Blocked access to external URL http://example.com:530/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:530/ due to access control checks.
+Blocked access to external URL http://example.com:531/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:531/ due to access control checks.
+Blocked access to external URL http://example.com:532/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:532/ due to access control checks.
+Blocked access to external URL http://example.com:540/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:540/ due to access control checks.
+Blocked access to external URL http://example.com:556/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:556/ due to access control checks.
+Blocked access to external URL http://example.com:563/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:563/ due to access control checks.
+Blocked access to external URL http://example.com:587/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:587/ due to access control checks.
+Blocked access to external URL http://example.com:601/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:601/ due to access control checks.
+Blocked access to external URL http://example.com:636/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:636/ due to access control checks.
+Blocked access to external URL http://example.com:993/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:993/ due to access control checks.
+Blocked access to external URL http://example.com:995/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:995/ due to access control checks.
+Blocked access to external URL http://example.com:2049/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:2049/ due to access control checks.
+Blocked access to external URL http://example.com:3659/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:3659/ due to access control checks.
+Blocked access to external URL http://example.com:4045/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:4045/ due to access control checks.
+Blocked access to external URL http://example.com:6000/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:6000/ due to access control checks.
+Blocked access to external URL http://example.com:6665/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:6665/ due to access control checks.
+Blocked access to external URL http://example.com:6666/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:6666/ due to access control checks.
+Blocked access to external URL http://example.com:6667/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:6667/ due to access control checks.
+Blocked access to external URL http://example.com:6668/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:6668/ due to access control checks.
+Blocked access to external URL http://example.com:6669/
+CONSOLE MESSAGE: line 1: Fetch API cannot load http://example.com:6669/ due to access control checks.
+
+PASS Request on bad port 1 should throw TypeError.
+PASS Request on bad port 7 should throw TypeError.
+PASS Request on bad port 9 should throw TypeError.
+PASS Request on bad port 11 should throw TypeError.
+PASS Request on bad port 13 should throw TypeError.
+PASS Request on bad port 15 should throw TypeError.
+PASS Request on bad port 17 should throw TypeError.
+PASS Request on bad port 19 should throw TypeError.
+PASS Request on bad port 20 should throw TypeError.
+PASS Request on bad port 21 should throw TypeError.
+PASS Request on bad port 22 should throw TypeError.
+PASS Request on bad port 23 should throw TypeError.
+PASS Request on bad port 25 should throw TypeError.
+PASS Request on bad port 37 should throw TypeError.
+PASS Request on bad port 42 should throw TypeError.
+PASS Request on bad port 43 should throw TypeError.
+PASS Request on bad port 53 should throw TypeError.
+PASS Request on bad port 77 should throw TypeError.
+PASS Request on bad port 79 should throw TypeError.
+PASS Request on bad port 87 should throw TypeError.
+PASS Request on bad port 95 should throw TypeError.
+PASS Request on bad port 101 should throw TypeError.
+PASS Request on bad port 102 should throw TypeError.
+PASS Request on bad port 103 should throw TypeError.
+PASS Request on bad port 104 should throw TypeError.
+PASS Request on bad port 109 should throw TypeError.
+PASS Request on bad port 110 should throw TypeError.
+PASS Request on bad port 111 should throw TypeError.
+PASS Request on bad port 113 should throw TypeError.
+PASS Request on bad port 115 should throw TypeError.
+PASS Request on bad port 117 should throw TypeError.
+PASS Request on bad port 119 should throw TypeError.
+PASS Request on bad port 123 should throw TypeError.
+PASS Request on bad port 135 should throw TypeError.
+PASS Request on bad port 139 should throw TypeError.
+PASS Request on bad port 143 should throw TypeError.
+PASS Request on bad port 179 should throw TypeError.
+PASS Request on bad port 389 should throw TypeError.
+PASS Request on bad port 465 should throw TypeError.
+PASS Request on bad port 512 should throw TypeError.
+PASS Request on bad port 513 should throw TypeError.
+PASS Request on bad port 514 should throw TypeError.
+PASS Request on bad port 515 should throw TypeError.
+PASS Request on bad port 526 should throw TypeError.
+PASS Request on bad port 530 should throw TypeError.
+PASS Request on bad port 531 should throw TypeError.
+PASS Request on bad port 532 should throw TypeError.
+PASS Request on bad port 540 should throw TypeError.
+PASS Request on bad port 556 should throw TypeError.
+PASS Request on bad port 563 should throw TypeError.
+PASS Request on bad port 587 should throw TypeError.
+PASS Request on bad port 601 should throw TypeError.
+PASS Request on bad port 636 should throw TypeError.
+PASS Request on bad port 993 should throw TypeError.
+PASS Request on bad port 995 should throw TypeError.
+PASS Request on bad port 2049 should throw TypeError.
+PASS Request on bad port 3659 should throw TypeError.
+PASS Request on bad port 4045 should throw TypeError.
+PASS Request on bad port 6000 should throw TypeError.
+PASS Request on bad port 6665 should throw TypeError.
+PASS Request on bad port 6666 should throw TypeError.
+PASS Request on bad port 6667 should throw TypeError.
+PASS Request on bad port 6668 should throw TypeError.
+PASS Request on bad port 6669 should throw TypeError.
+
--- /dev/null
+<!doctype html>
+<meta charset="utf-8">
+<title></title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+ // list of bad ports according to
+ // https://fetch.spec.whatwg.org/#port-blocking
+ var BLOCKED_PORTS_LIST = [
+ 1, // tcpmux
+ 7, // echo
+ 9, // discard
+ 11, // systat
+ 13, // daytime
+ 15, // netstat
+ 17, // qotd
+ 19, // chargen
+ 20, // ftp-data
+ 21, // ftp
+ 22, // ssh
+ 23, // telnet
+ 25, // smtp
+ 37, // time
+ 42, // name
+ 43, // nicname
+ 53, // domain
+ 77, // priv-rjs
+ 79, // finger
+ 87, // ttylink
+ 95, // supdup
+ 101, // hostriame
+ 102, // iso-tsap
+ 103, // gppitnp
+ 104, // acr-nema
+ 109, // pop2
+ 110, // pop3
+ 111, // sunrpc
+ 113, // auth
+ 115, // sftp
+ 117, // uucp-path
+ 119, // nntp
+ 123, // ntp
+ 135, // loc-srv / epmap
+ 139, // netbios
+ 143, // imap2
+ 179, // bgp
+ 389, // ldap
+ 465, // smtp+ssl
+ 512, // print / exec
+ 513, // login
+ 514, // shell
+ 515, // printer
+ 526, // tempo
+ 530, // courier
+ 531, // chat
+ 532, // netnews
+ 540, // uucp
+ 556, // remotefs
+ 563, // nntp+ssl
+ 587, // smtp
+ 601, // syslog-conn
+ 636, // ldap+ssl
+ 993, // imap+ssl
+ 995, // pop3+ssl
+ 2049, // nfs
+ 3659, // apple-sasl
+ 4045, // lockd
+ 6000, // x11
+ 6665, // irc (alternate)
+ 6666, // irc (alternate)
+ 6667, // irc (default)
+ 6668, // irc (alternate)
+ 6669, // irc (alternate)
+ ];
+
+ BLOCKED_PORTS_LIST.map(function(a){
+ promise_test(function(t){
+ return promise_rejects(t, new TypeError(), fetch("http://example.com:" + a))
+ }, 'Request on bad port ' + a + ' should throw TypeError.');
+ });
+</script>
enum RequestCredentials { "omit", "same-origin", "include" };
enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" };
enum RequestRedirect { "follow", "error", "manual" };
- enum ReferrerPolicy { "", "no-referrer", "no-referrer-when-downgrade", "origin-only", "origin-when-cross-origin", "unsafe-url" };
+ enum ReferrerPolicy {
+ "", "no-referrer", "no-referrer-when-downgrade", "origin",
+ "origin-when-cross-origin", "unsafe-url", "same-origin", "strict-origin",
+ "strict-origin-when-cross-origin"
+ };
</script>
<script>
var idlsArray = new IdlArray();
PASS Check referrerPolicy init value of origin and associated getter
PASS Check referrerPolicy init value of origin-when-cross-origin and associated getter
PASS Check referrerPolicy init value of unsafe-url and associated getter
+FAIL Check referrerPolicy init value of same-origin and associated getter Type error
+FAIL Check referrerPolicy init value of strict-origin and associated getter Type error
+FAIL Check referrerPolicy init value of strict-origin-when-cross-origin and associated getter Type error
PASS Check mode init value of same-origin and associated getter
PASS Check mode init value of no-cors and associated getter
PASS Check mode init value of cors and associated getter
"no-referrer-when-downgrade",
"origin",
"origin-when-cross-origin",
- "unsafe-url"
+ "unsafe-url",
+ "same-origin",
+ "strict-origin",
+ "strict-origin-when-cross-origin"
],
"expectedValues" : ["",
"no-referrer",
"no-referrer-when-downgrade",
"origin",
"origin-when-cross-origin",
- "unsafe-url"
+ "unsafe-url",
+ "same-origin",
+ "strict-origin",
+ "strict-origin-when-cross-origin"
]
};
var modes = {"givenValues" : ["same-origin", "no-cors", "cors"],
None
------------------------------------------------------------------------
List of files:
+/LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-bad-port.html
/LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-cache-default-conditional.html
/LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-cache-default.html
/LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-cache-force-cache.html
url += "&count=" + str(stashed_data['count'])
headers.append(("Location", url))
+ if "redirect_referrerpolicy" in request.GET:
+ headers.append(("Referrer-Policy", request.GET['redirect_referrerpolicy']))
+
if token:
request.server.stash.put(request.GET.first("token"), stashed_data)
if "max_count" in request.GET:
<!DOCTYPE html>
<title>Current page used as a test helper</title>
+<base href="success/">
<script>
'use strict';
-const current = document.querySelector('#c').contentWindow;
-const relevant = document.querySelector('#r').contentWindow;
-
window.createRedirectResponse = (...args) => {
+ const current = document.querySelector('#c').contentWindow;
+ const relevant = document.querySelector('#r').contentWindow;
return current.Response.redirect.call(relevant.Response, ...args);
};
promise_test(() => {
return loadPromise.then(() => {
- const res = frames[0].createRedirectResponse("url");
+ const res = document.querySelector('iframe').contentWindow.createRedirectResponse("url");
- assert_equals(res.headers.get("Location"), new URL("current/url", location.href).href);
+ assert_equals(res.headers.get("Location"), new URL("current/success/url", location.href).href);
});
}, "should parse the redirect Location URL relative to the current settings object");
PASS Consume response's body: from fetch to text
PASS Consume response's body: from fetch to arrayBuffer
FAIL Consume response's body: from fetch without correct type to formData (error case) assert_throws: function "function () { throw e }" threw "Not implemented" (undefined) expected object "TypeError" ("TypeError")
+FAIL Consume response's body: from multipart form data blob to formData promise_test: Unhandled rejection with value: "Not implemented"
</head>
<body>
<script>
+ function blobToFormDataResponse(name, blob) {
+ var formData = new FormData();
+ formData.append(name, blob);
+ return new Response(formData);
+ }
+
+ function readBlobAsArrayBuffer(blob) {
+ return new Promise(function(resolve, reject) {
+ var reader = new FileReader();
+ reader.onload = function(evt) {
+ resolve(reader.result);
+ };
+ reader.onerror = function(evt) {
+ reject("Blob's reader failed");
+ };
+ reader.readAsArrayBuffer(blob);
+ });
+ }
+
function responsePromise(body, responseInit) {
return new Promise(function(resolve, reject) {
resolve(new Response(body, responseInit));
checkResponseBody(fetch("../resources/top.txt"), "top", checkBodyArrayBuffer, "from fetch to arrayBuffer");
checkResponseBody(fetch("../resources/top.txt"), "top", checkBodyFormDataError, "from fetch without correct type to formData (error case)");
+ promise_test(function(test) {
+ var response = new Response(new Blob([
+ "--boundary\r\n",
+