Bug 1209297 - Update web-platform-tests to revision 2869a58fd81da41f9f904441ff39f9398fba53bc, a=testonly
authorJames Graham <james@hoppipolla.co.uk>
Wed, 23 Sep 2015 13:42:26 +0100
changeset 264785 ac8d3f7f5c7225247188b8efcc3653ca07cc6b72
parent 264784 316ad2696b321e8faf29571b9f25bf5c9e916e35
child 264786 84c62ba95e198b4ff851b07499209e9a57687273
push id65742
push userjames@hoppipolla.co.uk
push dateMon, 28 Sep 2015 22:03:51 +0000
treeherdermozilla-inbound@84c62ba95e19 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerstestonly
bugs1209297
milestone44.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1209297 - Update web-platform-tests to revision 2869a58fd81da41f9f904441ff39f9398fba53bc, a=testonly
testing/web-platform/meta/MANIFEST.json
testing/web-platform/meta/mixed-content/allowed/no-opt-in/same-host-https/picture-tag/top-level/no-redirect/#allowed.https.html.ini#
testing/web-platform/meta/mixed-content/allowed/no-opt-in/same-host-https/picture-tag/top-level/no-redirect/.#allowed.https.html.ini
testing/web-platform/meta/mozilla-sync
testing/web-platform/tests/DOMEvents/tests/approved/stopPropagation.dispatchEvent.html
testing/web-platform/tests/DOMEvents/tests/submissions/Microsoft/converted/stopPropagation.dispatchEvent.html
testing/web-platform/tests/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/blink-contrib-2/stylehash-default-src.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib-2/stylehash-default-src.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/blink-contrib/blob-urls-do-not-match-self.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/blob-urls-do-not-match-self.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/blink-contrib/combine-header-and-meta-policies.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/combine-header-and-meta-policies.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-about-blank-allowed-by-default.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-about-blank-allowed-by-scheme.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-allowed.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-blocked.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-cross-origin-load.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/self-doesnt-match-blob.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/self-doesnt-match-blob.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/blink-contrib/star-doesnt-match-blob.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/star-doesnt-match-blob.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/blink-contrib/worker-from-guid.sub.html
testing/web-platform/tests/content-security-policy/blink-contrib/worker-from-guid.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/blink-contrib/worker-script-src.sub.html
testing/web-platform/tests/content-security-policy/child-src/child-src-about-blank-allowed-by-default.sub.html
testing/web-platform/tests/content-security-policy/child-src/child-src-about-blank-allowed-by-default.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/child-src/child-src-about-blank-allowed-by-scheme.sub.html
testing/web-platform/tests/content-security-policy/child-src/child-src-about-blank-allowed-by-scheme.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/child-src/child-src-allowed.sub.html
testing/web-platform/tests/content-security-policy/child-src/child-src-allowed.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/child-src/child-src-blocked.sub.html
testing/web-platform/tests/content-security-policy/child-src/child-src-blocked.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/child-src/child-src-conflicting-frame-src.sub.html
testing/web-platform/tests/content-security-policy/child-src/child-src-conflicting-frame-src.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/child-src/child-src-cross-origin-load.sub.html
testing/web-platform/tests/content-security-policy/child-src/child-src-cross-origin-load.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/child-src/child-src-worker-allowed.sub.html
testing/web-platform/tests/content-security-policy/child-src/child-src-worker-allowed.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/child-src/child-src-worker-blocked.sub.html
testing/web-platform/tests/content-security-policy/child-src/child-src-worker-blocked.sub.html.sub.headers
testing/web-platform/tests/content-security-policy/meta/meta-img-src.html
testing/web-platform/tests/content-security-policy/meta/meta-modified.html
testing/web-platform/tests/content-security-policy/support/alertAssert.sub.js
testing/web-platform/tests/csp/assert_undefined.py
testing/web-platform/tests/csp/csp-inline-script.html
testing/web-platform/tests/csp/csp-inline-script.html.headers
testing/web-platform/tests/docs/test-format-guidelines.md
testing/web-platform/tests/dom/events/Event-dispatch-propagation-stopped.html
testing/web-platform/tests/dom/interfaces.html
testing/web-platform/tests/dom/nodes/DOMImplementation-createDocument.html
testing/web-platform/tests/dom/nodes/DOMImplementation-createHTMLDocument.html
testing/web-platform/tests/dom/nodes/Document-characterSet-normalization.html
testing/web-platform/tests/dom/nodes/Document-constructor.html
testing/web-platform/tests/dom/nodes/Node-properties.html
testing/web-platform/tests/domparsing/DOMParser-parseFromString-html.html
testing/web-platform/tests/domparsing/DOMParser-parseFromString-xml.html
testing/web-platform/tests/html/browsers/history/the-location-interface/location_reload-iframe.html
testing/web-platform/tests/html/browsers/history/the-location-interface/location_reload.html
testing/web-platform/tests/html/dom/interfaces.html
testing/web-platform/tests/html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/document-all.html
testing/web-platform/tests/html/semantics/forms/constraints/form-validation-validity-tooLong.html
testing/web-platform/tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html
testing/web-platform/tests/html/semantics/forms/constraints/form-validation-willValidate.html
testing/web-platform/tests/html/semantics/forms/constraints/support/validator.js
testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-email-delete-manual.html
testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-password-delete-manual.html
testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-search-delete-manual.html
testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-tel-delete-manual.html
testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-text-delete-manual.html
testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-url-delete-manual.html
testing/web-platform/tests/html/semantics/forms/constraints/tooLong-textarea-delete-manual.html
testing/web-platform/tests/html/semantics/forms/the-input-element/input-textselection-01.html
testing/web-platform/tests/html/semantics/forms/the-label-element/label-attributes.html
testing/web-platform/tests/html/semantics/forms/the-optgroup-element/optgroup-disabled-manual.html
testing/web-platform/tests/html/semantics/interfaces.js
testing/web-platform/tests/html/semantics/scripting-1/the-template-element/definitions/template-contents-owner-document-type.html
testing/web-platform/tests/html/semantics/selectors/pseudo-classes/disabled.html
testing/web-platform/tests/html/semantics/text-level-semantics/the-wbr-element/wbr-element-ref.html
testing/web-platform/tests/html/semantics/text-level-semantics/the-wbr-element/wbr-element.html
testing/web-platform/tests/html/webappapis/scripting/event-loops/resources/common.js
testing/web-platform/tests/html/webappapis/scripting/event-loops/task_microtask_ordering-manual.html
testing/web-platform/tests/html/webappapis/scripting/event-loops/task_microtask_ordering.html
testing/web-platform/tests/subresource-integrity/subresource-integrity.html
testing/web-platform/tests/touch-events/multi-touch-interactions.js
testing/web-platform/tests/websockets/README.md
testing/web-platform/tests/webstorage/storage_builtins.html
testing/web-platform/tests/webstorage/storage_clear.html
testing/web-platform/tests/webstorage/storage_getitem.html
testing/web-platform/tests/webstorage/storage_in.html
testing/web-platform/tests/webstorage/storage_indexing.html
testing/web-platform/tests/webstorage/storage_key.html
testing/web-platform/tests/webstorage/storage_length.html
testing/web-platform/tests/webstorage/storage_removeitem.html
testing/web-platform/tests/webstorage/storage_setitem.html
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -705,20 +705,52 @@
         "path": "html/semantics/embedded-content/the-canvas-element/2d.scaled-manual.png",
         "url": "/html/semantics/embedded-content/the-canvas-element/2d.scaled-manual.png"
       },
       {
         "path": "html/semantics/forms/attributes-common-to-form-controls/dirname-rtl-manual.html",
         "url": "/html/semantics/forms/attributes-common-to-form-controls/dirname-rtl-manual.html"
       },
       {
+        "path": "html/semantics/forms/constraints/tooLong-input-email-delete-manual.html",
+        "url": "/html/semantics/forms/constraints/tooLong-input-email-delete-manual.html"
+      },
+      {
+        "path": "html/semantics/forms/constraints/tooLong-input-password-delete-manual.html",
+        "url": "/html/semantics/forms/constraints/tooLong-input-password-delete-manual.html"
+      },
+      {
+        "path": "html/semantics/forms/constraints/tooLong-input-search-delete-manual.html",
+        "url": "/html/semantics/forms/constraints/tooLong-input-search-delete-manual.html"
+      },
+      {
+        "path": "html/semantics/forms/constraints/tooLong-input-tel-delete-manual.html",
+        "url": "/html/semantics/forms/constraints/tooLong-input-tel-delete-manual.html"
+      },
+      {
+        "path": "html/semantics/forms/constraints/tooLong-input-text-delete-manual.html",
+        "url": "/html/semantics/forms/constraints/tooLong-input-text-delete-manual.html"
+      },
+      {
+        "path": "html/semantics/forms/constraints/tooLong-input-url-delete-manual.html",
+        "url": "/html/semantics/forms/constraints/tooLong-input-url-delete-manual.html"
+      },
+      {
+        "path": "html/semantics/forms/constraints/tooLong-textarea-delete-manual.html",
+        "url": "/html/semantics/forms/constraints/tooLong-textarea-delete-manual.html"
+      },
+      {
         "path": "html/semantics/forms/the-input-element/file-manual.html",
         "url": "/html/semantics/forms/the-input-element/file-manual.html"
       },
       {
+        "path": "html/semantics/forms/the-optgroup-element/optgroup-disabled-manual.html",
+        "url": "/html/semantics/forms/the-optgroup-element/optgroup-disabled-manual.html"
+      },
+      {
         "path": "html/semantics/forms/the-option-element/option-disabled-manual.html",
         "url": "/html/semantics/forms/the-option-element/option-disabled-manual.html"
       },
       {
         "path": "html/semantics/forms/the-textarea-element/textarea-placeholder-manual.html",
         "url": "/html/semantics/forms/the-textarea-element/textarea-placeholder-manual.html"
       },
       {
@@ -729,16 +761,20 @@
         "path": "html/semantics/forms/the-textarea-element/textarea-select-manual.html",
         "url": "/html/semantics/forms/the-textarea-element/textarea-select-manual.html"
       },
       {
         "path": "html/semantics/grouping-content/the-li-element/grouping-li-novalue-manual.html",
         "url": "/html/semantics/grouping-content/the-li-element/grouping-li-novalue-manual.html"
       },
       {
+        "path": "html/webappapis/scripting/event-loops/task_microtask_ordering-manual.html",
+        "url": "/html/webappapis/scripting/event-loops/task_microtask_ordering-manual.html"
+      },
+      {
         "path": "html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual.html",
         "url": "/html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual.html"
       },
       {
         "path": "mediacapture-streams/mediastreams-as-media-elements/video-assignment-manual.html",
         "url": "/mediacapture-streams/mediastreams-as-media-elements/video-assignment-manual.html"
       },
       {
@@ -10319,20 +10355,16 @@
         "path": "DOMEvents/tests/approved/stopImmediatePropagation.effect.html",
         "url": "/DOMEvents/tests/approved/stopImmediatePropagation.effect.html"
       },
       {
         "path": "DOMEvents/tests/approved/stopPropagation.deferred.effect.html",
         "url": "/DOMEvents/tests/approved/stopPropagation.deferred.effect.html"
       },
       {
-        "path": "DOMEvents/tests/approved/stopPropagation.dispatchEvent.html",
-        "url": "/DOMEvents/tests/approved/stopPropagation.dispatchEvent.html"
-      },
-      {
         "path": "DOMEvents/tests/submissions/Microsoft/converted/DOM.event.flow.html",
         "url": "/DOMEvents/tests/submissions/Microsoft/converted/DOM.event.flow.html"
       },
       {
         "path": "DOMEvents/tests/submissions/Microsoft/converted/EventListener.dispatch.new.event.html",
         "url": "/DOMEvents/tests/submissions/Microsoft/converted/EventListener.dispatch.new.event.html"
       },
       {
@@ -10363,20 +10395,16 @@
         "path": "DOMEvents/tests/submissions/Microsoft/converted/stopImmediatePropagation.effect.html",
         "url": "/DOMEvents/tests/submissions/Microsoft/converted/stopImmediatePropagation.effect.html"
       },
       {
         "path": "DOMEvents/tests/submissions/Microsoft/converted/stopPropagation.deferred.effect.html",
         "url": "/DOMEvents/tests/submissions/Microsoft/converted/stopPropagation.deferred.effect.html"
       },
       {
-        "path": "DOMEvents/tests/submissions/Microsoft/converted/stopPropagation.dispatchEvent.html",
-        "url": "/DOMEvents/tests/submissions/Microsoft/converted/stopPropagation.dispatchEvent.html"
-      },
-      {
         "path": "DOMEvents/throwing-in-listener-and-window-error-event.html",
         "url": "/DOMEvents/throwing-in-listener-and-window-error-event.html"
       },
       {
         "path": "DOMEvents/throwing-in-listener-when-all-have-not-run-yet.html",
         "url": "/DOMEvents/throwing-in-listener-when-all-have-not-run-yet.html"
       },
       {
@@ -12227,16 +12255,20 @@
         "path": "content-security-policy/blink-contrib-2/scripthash-allowed.sub.html",
         "url": "/content-security-policy/blink-contrib-2/scripthash-allowed.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib-2/scripthash-basic-blocked.sub.html",
         "url": "/content-security-policy/blink-contrib-2/scripthash-basic-blocked.sub.html"
       },
       {
+        "path": "content-security-policy/blink-contrib-2/scripthash-default-src.sub.html",
+        "url": "/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html"
+      },
+      {
         "path": "content-security-policy/blink-contrib-2/scripthash-ignore-unsafeinline.sub.html",
         "url": "/content-security-policy/blink-contrib-2/scripthash-ignore-unsafeinline.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib-2/scripthash-unicode-normalization.sub.html",
         "url": "/content-security-policy/blink-contrib-2/scripthash-unicode-normalization.sub.html"
       },
       {
@@ -12391,16 +12423,32 @@
         "path": "content-security-policy/blink-contrib/filesystem-urls-do-not-match-self.sub.html",
         "url": "/content-security-policy/blink-contrib/filesystem-urls-do-not-match-self.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/filesystem-urls-match-filesystem.sub.html",
         "url": "/content-security-policy/blink-contrib/filesystem-urls-match-filesystem.sub.html"
       },
       {
+        "path": "content-security-policy/blink-contrib/frame-src-about-blank-allowed-by-default.sub.html",
+        "url": "/content-security-policy/blink-contrib/frame-src-about-blank-allowed-by-default.sub.html"
+      },
+      {
+        "path": "content-security-policy/blink-contrib/frame-src-about-blank-allowed-by-scheme.sub.html",
+        "url": "/content-security-policy/blink-contrib/frame-src-about-blank-allowed-by-scheme.sub.html"
+      },
+      {
+        "path": "content-security-policy/blink-contrib/frame-src-allowed.sub.html",
+        "url": "/content-security-policy/blink-contrib/frame-src-allowed.sub.html"
+      },
+      {
+        "path": "content-security-policy/blink-contrib/frame-src-blocked.sub.html",
+        "url": "/content-security-policy/blink-contrib/frame-src-blocked.sub.html"
+      },
+      {
         "path": "content-security-policy/blink-contrib/frame-src-cross-origin-load.sub.html",
         "url": "/content-security-policy/blink-contrib/frame-src-cross-origin-load.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/function-constructor-allowed.sub.html",
         "url": "/content-security-policy/blink-contrib/function-constructor-allowed.sub.html"
       },
       {
@@ -12523,32 +12571,40 @@
         "path": "content-security-policy/blink-contrib/report-uri-from-javascript.sub.html",
         "url": "/content-security-policy/blink-contrib/report-uri-from-javascript.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/script-src-overrides-default-src.sub.html",
         "url": "/content-security-policy/blink-contrib/script-src-overrides-default-src.sub.html"
       },
       {
+        "path": "content-security-policy/blink-contrib/self-doesnt-match-blob.sub.html",
+        "url": "/content-security-policy/blink-contrib/self-doesnt-match-blob.sub.html"
+      },
+      {
         "path": "content-security-policy/blink-contrib/shared-worker-connect-src-allowed.sub.html",
         "url": "/content-security-policy/blink-contrib/shared-worker-connect-src-allowed.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/shared-worker-connect-src-blocked.sub.html",
         "url": "/content-security-policy/blink-contrib/shared-worker-connect-src-blocked.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/source-list-parsing-paths-03.sub.html",
         "url": "/content-security-policy/blink-contrib/source-list-parsing-paths-03.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/srcdoc-doesnt-bypass-script-src.sub.html",
         "url": "/content-security-policy/blink-contrib/srcdoc-doesnt-bypass-script-src.sub.html"
       },
       {
+        "path": "content-security-policy/blink-contrib/star-doesnt-match-blob.sub.html",
+        "url": "/content-security-policy/blink-contrib/star-doesnt-match-blob.sub.html"
+      },
+      {
         "path": "content-security-policy/blink-contrib/style-allowed.sub.html",
         "url": "/content-security-policy/blink-contrib/style-allowed.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/style-blocked.sub.html",
         "url": "/content-security-policy/blink-contrib/style-blocked.sub.html"
       },
       {
@@ -12559,32 +12615,68 @@
         "path": "content-security-policy/blink-contrib/worker-connect-src-blocked.sub.html",
         "url": "/content-security-policy/blink-contrib/worker-connect-src-blocked.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/worker-eval-blocked.sub.html",
         "url": "/content-security-policy/blink-contrib/worker-eval-blocked.sub.html"
       },
       {
+        "path": "content-security-policy/blink-contrib/worker-from-guid.sub.html",
+        "url": "/content-security-policy/blink-contrib/worker-from-guid.sub.html"
+      },
+      {
         "path": "content-security-policy/blink-contrib/worker-function-function-blocked.sub.html",
         "url": "/content-security-policy/blink-contrib/worker-function-function-blocked.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/worker-importscripts-blocked.sub.html",
         "url": "/content-security-policy/blink-contrib/worker-importscripts-blocked.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/worker-script-src.sub.html",
         "url": "/content-security-policy/blink-contrib/worker-script-src.sub.html"
       },
       {
         "path": "content-security-policy/blink-contrib/worker-set-timeout-blocked.sub.html",
         "url": "/content-security-policy/blink-contrib/worker-set-timeout-blocked.sub.html"
       },
       {
+        "path": "content-security-policy/child-src/child-src-about-blank-allowed-by-default.sub.html",
+        "url": "/content-security-policy/child-src/child-src-about-blank-allowed-by-default.sub.html"
+      },
+      {
+        "path": "content-security-policy/child-src/child-src-about-blank-allowed-by-scheme.sub.html",
+        "url": "/content-security-policy/child-src/child-src-about-blank-allowed-by-scheme.sub.html"
+      },
+      {
+        "path": "content-security-policy/child-src/child-src-allowed.sub.html",
+        "url": "/content-security-policy/child-src/child-src-allowed.sub.html"
+      },
+      {
+        "path": "content-security-policy/child-src/child-src-blocked.sub.html",
+        "url": "/content-security-policy/child-src/child-src-blocked.sub.html"
+      },
+      {
+        "path": "content-security-policy/child-src/child-src-conflicting-frame-src.sub.html",
+        "url": "/content-security-policy/child-src/child-src-conflicting-frame-src.sub.html"
+      },
+      {
+        "path": "content-security-policy/child-src/child-src-cross-origin-load.sub.html",
+        "url": "/content-security-policy/child-src/child-src-cross-origin-load.sub.html"
+      },
+      {
+        "path": "content-security-policy/child-src/child-src-worker-allowed.sub.html",
+        "url": "/content-security-policy/child-src/child-src-worker-allowed.sub.html"
+      },
+      {
+        "path": "content-security-policy/child-src/child-src-worker-blocked.sub.html",
+        "url": "/content-security-policy/child-src/child-src-worker-blocked.sub.html"
+      },
+      {
         "path": "content-security-policy/frame-ancestors/deep-allows-none.sub.html",
         "url": "/content-security-policy/frame-ancestors/deep-allows-none.sub.html"
       },
       {
         "path": "content-security-policy/frame-ancestors/multiple-frames-meta-ignored.sub.html",
         "url": "/content-security-policy/frame-ancestors/multiple-frames-meta-ignored.sub.html"
       },
       {
@@ -12667,16 +12759,24 @@
         "path": "content-security-policy/media-src/media-src-7_3.html",
         "url": "/content-security-policy/media-src/media-src-7_3.html"
       },
       {
         "path": "content-security-policy/media-src/media-src-7_3_2.html",
         "url": "/content-security-policy/media-src/media-src-7_3_2.html"
       },
       {
+        "path": "content-security-policy/meta/meta-img-src.html",
+        "url": "/content-security-policy/meta/meta-img-src.html"
+      },
+      {
+        "path": "content-security-policy/meta/meta-modified.html",
+        "url": "/content-security-policy/meta/meta-modified.html"
+      },
+      {
         "path": "content-security-policy/script-src/script-src-1_1.html",
         "url": "/content-security-policy/script-src/script-src-1_1.html"
       },
       {
         "path": "content-security-policy/script-src/script-src-1_10.html",
         "url": "/content-security-policy/script-src/script-src-1_10.html"
       },
       {
@@ -12799,20 +12899,16 @@
         "path": "cors/status-preflight.htm",
         "url": "/cors/status-preflight.htm"
       },
       {
         "path": "cors/status.htm",
         "url": "/cors/status.htm"
       },
       {
-        "path": "csp/csp-inline-script.html",
-        "url": "/csp/csp-inline-script.html"
-      },
-      {
         "path": "custom-elements/concepts/custom-elements-type-allowed-chars-first-char.html",
         "url": "/custom-elements/concepts/custom-elements-type-allowed-chars-first-char.html"
       },
       {
         "path": "custom-elements/concepts/custom-elements-type-allowed-chars.html",
         "url": "/custom-elements/concepts/custom-elements-type-allowed-chars.html"
       },
       {
@@ -13067,16 +13163,20 @@
         "path": "dom/events/Event-dispatch-handlers-changed.html",
         "url": "/dom/events/Event-dispatch-handlers-changed.html"
       },
       {
         "path": "dom/events/Event-dispatch-omitted-capture.html",
         "url": "/dom/events/Event-dispatch-omitted-capture.html"
       },
       {
+        "path": "dom/events/Event-dispatch-propagation-stopped.html",
+        "url": "/dom/events/Event-dispatch-propagation-stopped.html"
+      },
+      {
         "path": "dom/events/Event-dispatch-redispatch.html",
         "url": "/dom/events/Event-dispatch-redispatch.html"
       },
       {
         "path": "dom/events/Event-dispatch-reenter.html",
         "url": "/dom/events/Event-dispatch-reenter.html"
       },
       {
@@ -14607,16 +14707,20 @@
         "path": "html/browsers/history/the-location-interface/location_port.html",
         "url": "/html/browsers/history/the-location-interface/location_port.html"
       },
       {
         "path": "html/browsers/history/the-location-interface/location_protocol.html",
         "url": "/html/browsers/history/the-location-interface/location_protocol.html"
       },
       {
+        "path": "html/browsers/history/the-location-interface/location_reload.html",
+        "url": "/html/browsers/history/the-location-interface/location_reload.html"
+      },
+      {
         "path": "html/browsers/history/the-location-interface/location_replace.html",
         "url": "/html/browsers/history/the-location-interface/location_replace.html"
       },
       {
         "path": "html/browsers/history/the-location-interface/location_search.html",
         "url": "/html/browsers/history/the-location-interface/location_search.html"
       },
       {
@@ -15547,16 +15651,20 @@
         "path": "html/infrastructure/urls/terminology-0/document-base-url.html",
         "url": "/html/infrastructure/urls/terminology-0/document-base-url.html"
       },
       {
         "path": "html/infrastructure/urls/terminology-0/multiple-base.sub.html",
         "url": "/html/infrastructure/urls/terminology-0/multiple-base.sub.html"
       },
       {
+        "path": "html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/document-all.html",
+        "url": "/html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/document-all.html"
+      },
+      {
         "path": "html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/document-color-01.html",
         "url": "/html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/document-color-01.html"
       },
       {
         "path": "html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/document-color-02.html",
         "url": "/html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/document-color-02.html"
       },
       {
@@ -17847,16 +17955,20 @@
         "path": "html/webappapis/animation-frames/same-dispatch-time.html",
         "url": "/html/webappapis/animation-frames/same-dispatch-time.html"
       },
       {
         "path": "html/webappapis/atob/base64.html",
         "url": "/html/webappapis/atob/base64.html"
       },
       {
+        "path": "html/webappapis/scripting/event-loops/task_microtask_ordering.html",
+        "url": "/html/webappapis/scripting/event-loops/task_microtask_ordering.html"
+      },
+      {
         "path": "html/webappapis/scripting/events/body-onload.html",
         "url": "/html/webappapis/scripting/events/body-onload.html"
       },
       {
         "path": "html/webappapis/scripting/events/event-handler-javascript.html",
         "url": "/html/webappapis/scripting/events/event-handler-javascript.html"
       },
       {
@@ -18103,20 +18215,16 @@
         "path": "js/builtins/Object.prototype.seal.html",
         "url": "/js/builtins/Object.prototype.seal.html"
       },
       {
         "path": "js/builtins/WeakMap.prototype-properties.html",
         "url": "/js/builtins/WeakMap.prototype-properties.html"
       },
       {
-        "path": "media-source/SourceBuffer-abort-readyState.html",
-        "url": "/media-source/SourceBuffer-abort-readyState.html"
-      },
-      {
         "path": "media-source/SourceBuffer-abort-removed.html",
         "url": "/media-source/SourceBuffer-abort-removed.html"
       },
       {
         "path": "media-source/SourceBuffer-abort-updating.html",
         "url": "/media-source/SourceBuffer-abort-updating.html"
       },
       {
@@ -28813,16 +28921,21 @@
         "url": "/html/syntax/parsing/html5lib_webkit02.html?run_type=write"
       },
       {
         "path": "html/syntax/parsing/html5lib_webkit02.html",
         "timeout": "long",
         "url": "/html/syntax/parsing/html5lib_webkit02.html?run_type=write_single"
       },
       {
+        "path": "media-source/SourceBuffer-abort-readyState.html",
+        "timeout": "long",
+        "url": "/media-source/SourceBuffer-abort-readyState.html"
+      },
+      {
         "path": "media-source/mediasource-redundant-seek.html",
         "timeout": "long",
         "url": "/media-source/mediasource-redundant-seek.html"
       },
       {
         "path": "quirks-mode/hashless-hex-color.html",
         "timeout": "long",
         "url": "/quirks-mode/hashless-hex-color.html"
@@ -29101,23 +29214,16 @@
         "path": "webdriver/user_input/clear_test.py"
       }
     ]
   },
   "local_changes": {
     "deleted": [],
     "items": {
       "testharness": {
-        "media-source/SourceBuffer-abort-readyState.html": [
-          {
-            "path": "media-source/SourceBuffer-abort-readyState.html",
-            "timeout": "long",
-            "url": "/media-source/SourceBuffer-abort-readyState.html"
-          }
-        ],
         "webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueAtTime.html": [
           {
             "path": "webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueAtTime.html",
             "url": "/webaudio/the-audio-api/the-audioparam-interface/retrospective-setValueAtTime.html"
           }
         ]
       }
     },
@@ -31735,28 +31841,16 @@
           [
             "/html/semantics/text-level-semantics/the-br-element/br-bidi-ref.html",
             "=="
           ]
         ],
         "url": "/html/semantics/text-level-semantics/the-br-element/br-bidi.html"
       }
     ],
-    "html/semantics/text-level-semantics/the-wbr-element/wbr-element-ref.html": [
-      {
-        "path": "html/semantics/text-level-semantics/the-wbr-element/wbr-element-ref.html",
-        "references": [
-          [
-            "/html/semantics/text-level-semantics/the-wbr-element/wbr-element-notref.html",
-            "!="
-          ]
-        ],
-        "url": "/html/semantics/text-level-semantics/the-wbr-element/wbr-element-ref.html"
-      }
-    ],
     "html/semantics/text-level-semantics/the-wbr-element/wbr-element.html": [
       {
         "path": "html/semantics/text-level-semantics/the-wbr-element/wbr-element.html",
         "references": [
           [
             "/html/semantics/text-level-semantics/the-wbr-element/wbr-element-ref.html",
             "=="
           ]
@@ -34520,12 +34614,12 @@
             "/webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped-ref.html",
             "=="
           ]
         ],
         "url": "/webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped.html"
       }
     ]
   },
-  "rev": "3f82dd41c8e3697bfe5fa5c57321c842b65ba2aa",
+  "rev": "2869a58fd81da41f9f904441ff39f9398fba53bc",
   "url_base": "/",
   "version": 2
-}
\ No newline at end of file
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/mixed-content/allowed/no-opt-in/same-host-https/picture-tag/top-level/no-redirect/#allowed.https.html.ini#
@@ -0,0 +1,16 @@
+[allowed.https.html]
+  type: testharness
+  disabled:
+    if e10s: https://bugzilla.mozilla.org/show_bug.cgi?id=1205654
+  [opt_in_method: no-opt-in\n                                 origin: same-host-https\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: no-redirect\n                                 subresource: picture-tag\n                                 expectation: allowed]
+    expected:
+      if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): PASS
+      if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
+      if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): PASS
+      if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): PASS
+      if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): PASS
+      if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
+      if debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86_64") and (bits == 64): PASS
+      if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
+      FAIL
+
new file mode 120000
--- /dev/null
+++ b/testing/web-platform/meta/mixed-content/allowed/no-opt-in/same-host-https/picture-tag/top-level/no-redirect/.#allowed.https.html.ini
@@ -0,0 +1,1 @@
+jgraham@luna.6655:1442188582
\ No newline at end of file
--- a/testing/web-platform/meta/mozilla-sync
+++ b/testing/web-platform/meta/mozilla-sync
@@ -1,1 +1,1 @@
-a25e8ccf7474a9d4a0ef14c10ab8dcabeb367527
\ No newline at end of file
+66b5a91a4fa541fb8b5cdfb22df0411beab7a240
\ No newline at end of file
deleted file mode 100644
--- a/testing/web-platform/tests/DOMEvents/tests/approved/stopPropagation.dispatchEvent.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title> Calling stopPropagation() prior to dispatchEvent() </title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-</head>
-<body>
-<div id=log></div>
-
-<table id="table" border="1" style="display: none">
-    <tbody id="table-body">
-    <tr id="table-row">
-        <td id="table-cell">Shady Grove</td>
-        <td>Aeolian</td>
-    </tr>
-    <tr id="parent">    
-        <td id="target">Over the river, Charlie</td>
-        <td>Dorian</td>
-    </tr>
-    </tbody>
-</table>
-        
-<script>
-    var EVENT = "foo";    
-    var TARGET = document.getElementById("target");
-    var PARENT = document.getElementById("parent"); 
-    var TBODY = document.getElementById("table-body");
-    var TABLE = document.getElementById("table");
-    var BODY = document.body;
-    var HTML = document.documentElement;                
-    var CurrentTargets = [window, document, HTML, BODY, TABLE, TBODY, PARENT, TARGET];
-    var ExpectResult = [];
-    var ActualResult = [];
-    var ExpectPhases = [];
-    var ActualPhases = [];
-
-    var description = "Test Description: " + 
-                      "If Event.stopPropagation() has been called prior to the dispatch, all phases must be skipped."; 
-    test(function()
-    {
-        for (var i=0; i < CurrentTargets.length; i++)
-        {
-            CurrentTargets[i].addEventListener(EVENT, TestEvent, true);
-            CurrentTargets[i].addEventListener(EVENT, TestEvent, false);
-        }
-       
-        var evt = document.createEvent("Event");
-        evt.initEvent(EVENT, true, true);
-        evt.stopPropagation();              
-        TARGET.dispatchEvent(evt);
-
-        assert_array_equals(ActualResult, ExpectResult, "ActualResult");
-        assert_array_equals(ActualPhases, ExpectPhases, "ActualPhases");
-        
-    }, description);
-         
-    function TestEvent(evt)
-    {   
-        ActualResult.push(evt.currentTarget);         
-        ActualPhases.push(evt.eventPhase);                   
-    }
-</script>
-</body>
-</html>
deleted file mode 100644
--- a/testing/web-platform/tests/DOMEvents/tests/submissions/Microsoft/converted/stopPropagation.dispatchEvent.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title> Calling stopPropagation() prior to dispatchEvent() </title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-</head>
-<body>
-<div id=log></div>
-
-<table id="table" border="1" style="display: none">
-    <tbody id="table-body">
-    <tr id="table-row">
-        <td id="table-cell">Shady Grove</td>
-        <td>Aeolian</td>
-    </tr>
-    <tr id="parent">
-        <td id="target">Over the river, Charlie</td>
-        <td>Dorian</td>
-    </tr>
-    </tbody>
-</table>
-
-<script>
-
-    var EVENT = "foo";
-    var TARGET = document.getElementById("target");
-    var PARENT = document.getElementById("parent");
-    var TBODY = document.getElementById("table-body");
-    var TABLE = document.getElementById("table");
-    var BODY = document.body;
-    var HTML = document.documentElement;
-    var CurrentTargets = [window, document, HTML, BODY, TABLE, TBODY, PARENT, TARGET];
-    var ExpectResult = [];
-    var ActualResult = [];
-    var ExpectPhases = [];
-    var ActualPhases = [];
-
-    var description = "Test Description: " +
-                      "If Event.stopPropagation() has been called prior to the dispatch, all phases must be skipped.";
-    test(function()
-    {
-        for (var i=0; i < CurrentTargets.length; i++)
-        {
-            CurrentTargets[i].addEventListener(EVENT, TestEvent, true);
-            CurrentTargets[i].addEventListener(EVENT, TestEvent, false);
-        }
-
-        var evt = document.createEvent("Event");
-        evt.initEvent(EVENT, true, true);
-        evt.stopPropagation();
-        TARGET.dispatchEvent(evt);
-
-        assert_array_equals(ActualResult, ExpectResult, "ActualResult");
-        assert_array_equals(ActualPhases, ExpectPhases, "ActualPhases");
-
-    }, description);
-
-    function TestEvent(evt)
-    {
-        ActualResult.push(evt.currentTarget);
-        ActualPhases.push(evt.eventPhase);
-    }
-</script>
-</body>
-</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+    <head>
+    <title>script-hash allowed from default-src</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    
+    <script>done();</script>
+    </head>
+
+    <body>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=false"></script>
+    </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: scripthash-default-src={{$id:uuid()}}; Path=/content-security-policy/blink-contrib-2
+Content-Security-Policy: default-src 'self' 'sha256-sc3CeiHrlck5tH2tTC4MnBYFnI9D5zp8f9odqnmGQjE='; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib-2/stylehash-default-src.sub.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+    <head>
+    <title>stylehash allowed from default-src</title>
+    <script src="../../../resources/testharness.js"></script>
+    <script src="../../../resources/testharnessreport.js"></script>
+    </head>
+
+    <body>
+    <p id="p">Test</p>
+    <style>p#p { color: green; }</style>
+    <script>
+    var color = window.getComputedStyle(document.querySelector('#p')).color;
+    assert_equals(color, "rgb(0, 128, 0)");
+    done();
+    </script>
+
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=false"></script>
+    </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib-2/stylehash-default-src.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: stylehash-default-src={{$id:uuid()}}; Path=/content-security-policy/blink-contrib-2
+Content-Security-Policy: default-src 'self' 'sha256-SXMrww9+PS7ymkxYbv91id+HfXeO7p1uCY0xhNb4MIw='; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
--- a/testing/web-platform/tests/content-security-policy/blink-contrib/blob-urls-do-not-match-self.sub.html
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/blob-urls-do-not-match-self.sub.html
@@ -4,17 +4,17 @@
 <head>
     <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
     <title>blob-urls-do-not-match-self</title>
     <script src="/resources/testharness.js"></script>
     <script src="/resources/testharnessreport.js"></script>
     <script src="../support/logTest.sub.js?logs=[]"></script>
     <script src="../support/alertAssert.sub.js?alerts=[]"></script>
     <!-- enforcing policy:
-script-src 'self' 'unsafe-inline'; connect-src 'self';
+script-src 'self' 'unsafe-inline'; connect-src 'self'; child-src 'self';
 -->
 </head>
 
 <body>
     <p>
         blob: URLs are same-origin with the page in which they were created, but explicitly do not match the &apos;self&apos; or '*' source in CSP directives because they are more akin to 'unsafe-inline' content.
     </p>
     <script>
--- a/testing/web-platform/tests/content-security-policy/blink-contrib/blob-urls-do-not-match-self.sub.html.sub.headers
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/blob-urls-do-not-match-self.sub.html.sub.headers
@@ -1,6 +1,6 @@
 Expires: Mon, 26 Jul 1997 05:00:00 GMT
 Cache-Control: no-store, no-cache, must-revalidate
 Cache-Control: post-check=0, pre-check=0, false
 Pragma: no-cache
 Set-Cookie: blob-urls-do-not-match-self={{$id:uuid()}}; Path=/content-security-policy/blink-contrib
-Content-Security-Policy: script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
+Content-Security-Policy: script-src 'self' 'unsafe-inline'; connect-src 'self'; child-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
--- a/testing/web-platform/tests/content-security-policy/blink-contrib/combine-header-and-meta-policies.sub.html
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/combine-header-and-meta-policies.sub.html
@@ -1,15 +1,15 @@
 <!DOCTYPE html>
 <html>
 
 <head>
     <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
     <meta http-equiv="Content-Security-Policy" content="img-src 'none'">
-    <title>combine-multiple-policies</title>
+    <title>combine-header-and-meta-policies</title>
     <script src="/resources/testharness.js"></script>
     <script src="/resources/testharnessreport.js"></script>
     <script src='../support/logTest.sub.js?logs=["TEST COMPLETE"]'></script>
     <script src="../support/alertAssert.sub.js?alerts=[]"></script>
     <!-- enforcing multiple policies:
 Content-Security-Policy: script-src 'self' 'unsafe-inline'; connect-src 'self'; style-src 'self'
 Content-Security-Policy: img-src 'none'
 -->
--- a/testing/web-platform/tests/content-security-policy/blink-contrib/combine-header-and-meta-policies.sub.html.sub.headers
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/combine-header-and-meta-policies.sub.html.sub.headers
@@ -1,6 +1,6 @@
 Expires: Mon, 26 Jul 1997 05:00:00 GMT
 Cache-Control: no-store, no-cache, must-revalidate
 Cache-Control: post-check=0, pre-check=0, false
 Pragma: no-cache
-Set-Cookie: combine-multiple-policies={{$id:uuid()}}; Path=/content-security-policy/blink-contrib
-Content-Security-Policy: script-src 'self' 'unsafe-inline'; connect-src 'self'; style-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
\ No newline at end of file
+Set-Cookie: combine-header-and-meta-policies={{$id:uuid()}}; Path=/content-security-policy/blink-contrib
+Content-Security-Policy: script-src 'self' 'unsafe-inline'; connect-src 'self'; style-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
--- a/testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-about-blank-allowed-by-default.sub.html
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-about-blank-allowed-by-default.sub.html
@@ -1,4 +1,24 @@
+<!DOCTYPE html>
+<html>
 
-These frames should not be blocked by Content-Security-Policy. It&apos;s pointle to block about:blank iframes because blocking a frame just results in displaying about:blank anyway!
-<iframe src="about:blank"></iframe>
-<object type="text/html" data="about:blank"></object>
+<head>
+    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
+    <title>frame-src-about-blank-allowed-by-default</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+ 
+    <!-- enforcing policy:
+frame-src 'none'; object-src 'none'; script-src 'self' 'unsafe-inline'; connect-src 'self';
+-->
+    <p>These frames should not be blocked by Content-Security-Policy.
+        It&apos;s pointless to block about:blank iframes because
+        blocking a frame just results in displaying about:blank anyway!
+    </p>
+    <iframe src="about:blank"></iframe>
+    <object type="text/html" data="about:blank"></object>
+
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=false"></script>
+</body>
+
+</html>
\ No newline at end of file
--- a/testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-about-blank-allowed-by-scheme.sub.html
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-about-blank-allowed-by-scheme.sub.html
@@ -1,3 +1,20 @@
+<!DOCTYPE html>
+<html>
 
-This iframe should not be blocked by Content-Security-Policy:
-<iframe src="about:blank"></iframe>
+<head>
+    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
+    <title>frame-src-about-blank-allowed-by-scheme</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+ 
+    <!-- enforcing policy:
+frame-src about:; script-src 'self' 'unsafe-inline'; connect-src 'self';
+-->
+    <p>This frame should not be blocked by Content-Security-Policy.
+    </p>
+    <iframe src="about:blank"></iframe>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=false"></script>
+</body>
+
+</html>
\ No newline at end of file
--- a/testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-allowed.sub.html
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-allowed.sub.html
@@ -1,1 +1,63 @@
-<iframe src="resources/alert-pass.html"></iframe>
+<!DOCTYPE html>
+<html>
+
+<head>
+    <title>frame-src-allowed</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src='../support/logTest.sub.js?logs=["PASS IFrame %231 generated a load event."]'></script>
+    <script>
+        window.addEventListener("message", function(event) {
+            alert_assert(event.data);
+        }, false);
+
+        var t_alert = async_test('Expecting alerts: ["PASS"]');
+        var expected_alerts = ["PASS"];
+
+        function alert_assert(msg) {
+            t_alert.step(function() {
+                if (msg.match(/^FAIL/i)) {
+                    assert_unreached(msg);
+                    t_alert.done();
+                }
+                for (var i = 0; i < expected_alerts.length; i++) {
+                    if (expected_alerts[i] == msg) {
+                        assert_true(expected_alerts[i] == msg);
+                        expected_alerts.splice(i, 1);
+                        if (expected_alerts.length == 0) {
+                            t_alert.done();
+                        }
+                        return;
+                    }
+                }
+                assert_unreached('unexpected alert: ' + msg);
+                t_log.done();
+            });
+        }
+
+    </script>
+    <!-- enforcing policy:
+Content-Security-Policy: frame-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self';
+-->
+    <p>
+        This iframe should be allowed.
+    </p>
+    <script>
+        window.wasPostTestScriptParsed = true;
+        var loads = 0;
+
+        function loadEvent() {
+            loads++;
+            log("PASS " + "IFrame #" + loads + " generated a load event.");
+        }
+
+    </script>
+</head>
+
+<body>
+    <iframe src="/content-security-policy/blink-contrib/resources/postmessage-pass.html" onload="loadEvent()"></iframe>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=false"></script>
+</body>
+
+</html>
--- a/testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-blocked.sub.html
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-blocked.sub.html
@@ -1,1 +1,61 @@
-<iframe src="resources/alert-fail.html"></iframe>
+<!DOCTYPE html>
+<html>
+
+<head>
+    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
+    <title>frame-src-blocked</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src='../support/logTest.sub.js?logs=["PASS IFrame %231 generated a load event."]'></script>
+    <script>
+        window.addEventListener("message", function(event) {
+            alert_assert(event.data);
+        }, false);
+
+        function alert_assert(msg) {
+            t_alert.step(function() {
+                if (msg.match(/^FAIL/i)) {
+                    assert_unreached(msg);
+                    t_alert.done();
+                }
+                for (var i = 0; i < expected_alerts.length; i++) {
+                    if (expected_alerts[i] == msg) {
+                        assert_true(expected_alerts[i] == msg);
+                        expected_alerts.splice(i, 1);
+                        if (expected_alerts.length == 0) {
+                            t_alert.done();
+                        }
+                        return;
+                    }
+                }
+                assert_unreached('unexpected alert: ' + msg);
+                t_log.done();
+            });
+        }
+
+    </script>
+    <!-- enforcing policy:
+frame-src 'none'; script-src 'self' 'unsafe-inline'; connect-src 'self';
+-->
+    <p>
+        IFrames blocked by CSP should generate a 'load', not 'error' event, regardless of blocked state. This means they appear to be normal cross-origin loads, thereby not leaking URL information directly to JS.
+    </p>
+    <script>
+        window.wasPostTestScriptParsed = true;
+        var loads = 0;
+
+        function loadEvent() {
+            loads++;
+            log("PASS " + "IFrame #" + loads + " generated a load event.");
+        }
+
+    </script>
+</head>
+
+<body>
+    <iframe src="/content-security-policy/blink-contrib/resources/postmessage-fail.html" onload="loadEvent()" onerror="log('FAIL')"></iframe>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=true&amp;reportField=violated-directive&amp;reportValue=frame-src%20&apos;none&apos;"></script>
+</body>
+
+</html>
--- a/testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-cross-origin-load.sub.html
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/frame-src-cross-origin-load.sub.html
@@ -27,42 +27,40 @@
                         expected_alerts.splice(i, 1);
                         if (expected_alerts.length == 0) {
                             t_alert.done();
                         }
                         return;
                     }
                 }
                 assert_unreached('unexpected alert: ' + msg);
-                t_log.done();
+                t_alert.done();
             });
         }
 
     </script>
     <!-- enforcing policy:
-frame-src 'self' http://localhost:8080; script-src 'self' 'unsafe-inline'; connect-src 'self';
+frame-src 'self' http://www1.{{host}}:{{ports[http][0]}}; script-src 'self' 'unsafe-inline'; connect-src 'self';
 -->
     <p>
         IFrames blocked by CSP should generate a 'load', not 'error' event, regardless of blocked state. This means they appear to be normal cross-origin loads, thereby not leaking URL information directly to JS.
     </p>
     <script>
         window.wasPostTestScriptParsed = true;
         var loads = 0;
 
         function loadEvent() {
             loads++;
             log("PASS " + "IFrame #" + loads + " generated a load event.");
-            if (loads == 3)
-                log("TEST COMPLETE");
         }
 
     </script>
 </head>
 
 <body>
     <iframe src="resources/postmessage-pass.html" onload="loadEvent()"></iframe>
     <iframe src="http://www1.{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/postmessage-pass.html" onload="loadEvent()"></iframe>
     <iframe src="http://www2.{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/postmessage-fail.html" onload="loadEvent()" onerror="log('FAIL')"></iframe>
     <div id="log"></div>
-    <script async defer src="../support/checkReport.sub.js?reportExists=true&amp;reportField=violated-directive&amp;reportValue=frame-src%20&apos;self&apos;%20http://localhost:8080"></script>
+    <script async defer src="../support/checkReport.sub.js?reportExists=true&amp;reportField=violated-directive&amp;reportValue=frame-src%20&apos;self&apos;http://www1.{{host}}:{{ports[http][0]}}"></script>
 </body>
 
 </html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/self-doesnt-match-blob.sub.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
+    <title>worker-connect-src-blocked</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="../support/logTest.sub.js?logs=[]"></script>
+    <script src='../support/alertAssert.sub.js?alerts=["TEST COMPLETE"]'></script>
+    <!-- enforcing policy:
+connect-src 'self'; script-src 'self' 'unsafe-inline'; child-src 'self';
+-->
+
+</head>
+<p>This test loads a worker, from a guid.
+    The worker should be blocked from loading with a child-src policy of 'self'
+    as the blob: scheme must be specified explicitly.
+    A report should be sent to the report-uri specified
+    with this resource.</p>
+<body>
+    <script>
+        try {
+            var blob = new Blob([
+                "postMessage('FAIL');" +
+                "postMessage('TEST COMPLETE');"
+                ],
+                {type : 'application/javascript'});
+            var url = URL.createObjectURL(blob);
+            var worker = new Worker(url);
+            worker.onmessage = function(event) {
+                alert_assert(event.data);
+            };
+        } catch (e) {
+            alert_assert('TEST COMPLETE');
+        }
+        function timeout() {
+            alert_assert('TEST COMPLETE');
+        }
+    </script>
+    <div id="log"></div>
+     <script async defer src="../support/checkReport.sub.js?reportExists=true&amp;reportField=violated-directive&amp;reportValue=child-src%20&apos;self&apos;"></script>
+</body>
+
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/self-doesnt-match-blob.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: self-doesnt-match-blob={{$id:uuid()}}; Path=/content-security-policy/blink-contrib
+Content-Security-Policy: connect-src 'self'; script-src 'self' 'unsafe-inline'; child-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/star-doesnt-match-blob.sub.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
+    <title>worker-connect-src-blocked</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="../support/logTest.sub.js?logs=[]"></script>
+    <script src='../support/alertAssert.sub.js?alerts=["TEST COMPLETE"]'></script>
+    <!-- enforcing policy:
+connect-src 'self'; script-src 'self' 'unsafe-inline'; child-src *;
+-->
+
+</head>
+<p>This test loads a worker, from a guid.
+    The worker should be blocked from loading with a child-src policy of *
+    as the blob: scheme must be specified explicitly.
+    A report should be sent to the report-uri specified
+    with this resource.</p>
+<body>
+    <script>
+        try {
+            var blob = new Blob([
+                "postMessage('FAIL');" +
+                "postMessage('TEST COMPLETE');"
+                ],
+                {type : 'application/javascript'});
+            var url = URL.createObjectURL(blob);
+            var worker = new Worker(url);
+            worker.onmessage = function(event) {
+                alert_assert(event.data);
+            };
+        } catch (e) {
+            alert_assert('TEST COMPLETE');
+        }
+        function timeout() {
+            alert_assert('TEST COMPLETE');
+        }
+    </script>
+    <div id="log"></div>
+     <script async defer src="../support/checkReport.sub.js?reportExists=true&amp;reportField=violated-directive&amp;reportValue=child-src%20&apos;self&apos;"></script>
+</body>
+
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/star-doesnt-match-blob.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: star-doesnt-match-blob={{$id:uuid()}}; Path=/content-security-policy/blink-contrib
+Content-Security-Policy: connect-src 'self'; script-src 'self' 'unsafe-inline'; child-src *; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/worker-from-guid.sub.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
+    <title>worker-connect-src-blocked</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="../support/logTest.sub.js?logs=[]"></script>
+    <script src='../support/alertAssert.sub.js?alerts=["xhr blocked","TEST COMPLETE"]'></script>
+    <!-- enforcing policy:
+connect-src 'self'; script-src 'self' 'unsafe-inline' blob:;
+-->
+
+</head>
+<p>This test loads a worker, from a guid.
+    The worker should be blocked from making an XHR
+    to www1 as this resource's policy is connect-src 'self
+    and a guid Worker should inherit is parent's policy.
+    A report should be sent to the report-uri specified
+    with this resource.</p>
+<body>
+    <script>
+        try {
+            var blob = new Blob([
+                "var xhr = new XMLHttpRequest;" +
+                "xhr.onerror = function () {" +
+                "  postMessage('xhr blocked');" +
+                "  postMessage('TEST COMPLETE');" +
+                "};" +
+                "xhr.onload = function () {" +
+                "  if (xhr.responseText == 'FAIL') {" +
+                "    postMessage('xhr allowed');" +
+                "  } else {" +
+                "    postMessage('xhr blocked');" +
+                "  }" +
+                "  postMessage('TEST COMPLETE');" +
+                "};" +
+                "try { " +
+                "  xhr.open(" +
+                "   'GET'," +
+                "   'http://www1.{{host}}:{{ports[http][0]}}/content-security-policy/support/fail.asis'," + 
+                "    true" +
+                "  );" +
+                "  xhr.send();" +
+                "} catch (e) {" +
+                "  postMessage('xhr blocked');" +
+                "  postMessage('TEST COMPLETE');" +
+                "}"],
+                {type : 'application/javascript'});
+            var url = URL.createObjectURL(blob);
+            var worker = new Worker(url);
+            worker.onmessage = function(event) {
+                alert_assert(event.data);
+            };
+        } catch (e) {
+            alert_assert(e);
+        }
+
+    </script>
+    <div id="log"></div>
+     <script async defer src="../support/checkReport.sub.js?reportExists=true&amp;reportField=violated-directive&amp;reportValue=connect-src%20&apos;self&apos;"></script>
+</body>
+
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/worker-from-guid.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: worker-from-guid={{$id:uuid()}}; Path=/content-security-policy/blink-contrib
+Content-Security-Policy: connect-src 'self'; script-src 'self' 'unsafe-inline' blob:; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
--- a/testing/web-platform/tests/content-security-policy/blink-contrib/worker-script-src.sub.html
+++ b/testing/web-platform/tests/content-security-policy/blink-contrib/worker-script-src.sub.html
@@ -4,17 +4,17 @@
 <head>
     <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
     <title>worker-script-src</title>
     <script src="/resources/testharness.js"></script>
     <script src="/resources/testharnessreport.js"></script>
     <script src="../support/logTest.sub.js?logs=[]"></script>
     <script src='../support/alertAssert.sub.js?alerts=["PASS"]'></script>
     <!-- enforcing policy:
-script-src 'self' 'unsafe-inline' 'unsafe-inline'; connect-src 'self';
+script-src 'self' 'unsafe-inline'; connect-src 'self';
 -->
 
 </head>
 
 <body>
     <script>
         try {
             var foo = new Worker('http://{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/post-message.js');
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-about-blank-allowed-by-default.sub.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
+    <title>child-src-about-blank-allowed-by-default</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+ 
+    <!-- enforcing policy:
+child-src 'none'; object-src 'none'; script-src 'self' 'unsafe-inline'; connect-src 'self';
+-->
+    <p>These frames should not be blocked by Content-Security-Policy.
+        It&apos;s pointless to block about:blank iframes because
+        blocking a frame just results in displaying about:blank anyway!
+    </p>
+    <iframe src="about:blank"></iframe>
+    <object type="text/html" data="about:blank"></object>
+
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=false"></script>
+</body>
+
+</html>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-about-blank-allowed-by-default.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: child-src-about-blank-allowed-by-default={{$id:uuid()}}; Path=/content-security-policy/child-src
+Content-Security-Policy: child-src 'none'; object-src 'none'; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-about-blank-allowed-by-scheme.sub.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
+    <title>child-src-about-blank-allowed-by-scheme</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+ 
+    <!-- enforcing policy:
+child-src about:; script-src 'self' 'unsafe-inline'; connect-src 'self';
+-->
+    <p>This frame should not be blocked by Content-Security-Policy.
+    </p>
+    <iframe src="about:blank"></iframe>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=false"></script>
+</body>
+
+</html>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-about-blank-allowed-by-scheme.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: child-src-about-blank-allowed-by-scheme={{$id:uuid()}}; Path=/content-security-policy/child-src
+Content-Security-Policy: child-src about:; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-allowed.sub.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <title>child-src-allowed</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src='../support/logTest.sub.js?logs=["PASS IFrame %231 generated a load event."]'></script>
+    <script>
+        window.addEventListener("message", function(event) {
+            alert_assert(event.data);
+        }, false);
+
+        var t_alert = async_test('Expecting alerts: ["PASS"]');
+        var expected_alerts = ["PASS"];
+
+        function alert_assert(msg) {
+            t_alert.step(function() {
+                if (msg.match(/^FAIL/i)) {
+                    assert_unreached(msg);
+                    t_alert.done();
+                }
+                for (var i = 0; i < expected_alerts.length; i++) {
+                    if (expected_alerts[i] == msg) {
+                        assert_true(expected_alerts[i] == msg);
+                        expected_alerts.splice(i, 1);
+                        if (expected_alerts.length == 0) {
+                            t_alert.done();
+                        }
+                        return;
+                    }
+                }
+                assert_unreached('unexpected alert: ' + msg);
+                t_alert.done();
+            });
+        }
+
+    </script>
+    <!-- enforcing policy:
+Content-Security-Policy: child-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self';
+-->
+    <p>
+        This iframe should be allowed.
+    </p>
+    <script>
+        window.wasPostTestScriptParsed = true;
+        var loads = 0;
+
+        function loadEvent() {
+            loads++;
+            log("PASS " + "IFrame #" + loads + " generated a load event.");
+        }
+
+    </script>
+</head>
+
+<body>
+    <iframe src="/content-security-policy/blink-contrib/resources/postmessage-pass.html" onload="loadEvent()"></iframe>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=false"></script>
+</body>
+
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-allowed.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: child-src-allowed={{$id:uuid()}}; Path=/content-security-policy/child-src
+Content-Security-Policy: child-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-blocked.sub.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
+    <title>child-src-blocked</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src='../support/logTest.sub.js?logs=["PASS IFrame %231 generated a load event."]'></script>
+    <script>
+        window.addEventListener("message", function(event) {
+            alert_assert(event.data);
+        }, false);
+
+        function alert_assert(msg) {
+            t_log.step(function() {
+                if (msg.match(/^FAIL/i)) {
+                    assert_unreached(msg);
+                    t_log.done();
+                }
+                for (var i = 0; i < expected_alerts.length; i++) {
+                    if (expected_alerts[i] == msg) {
+                        assert_true(expected_alerts[i] == msg);
+                        expected_alerts.splice(i, 1);
+                        if (expected_alerts.length == 0) {
+                            t_log.done();
+                        }
+                        return;
+                    }
+                }
+                assert_unreached('unexpected alert: ' + msg);
+                t_log.done();
+            });
+        }
+
+    </script>
+    <!-- enforcing policy:
+child-src 'none'; script-src 'self' 'unsafe-inline'; connect-src 'self';
+-->
+    <p>
+        IFrames blocked by CSP should generate a 'load', not 'error' event, regardless of blocked state. This means they appear to be normal cross-origin loads, thereby not leaking URL information directly to JS.
+    </p>
+    <script>
+        window.wasPostTestScriptParsed = true;
+        var loads = 0;
+
+        function loadEvent() {
+            loads++;
+            log("PASS " + "IFrame #" + loads + " generated a load event.");
+        }
+
+    </script>
+</head>
+
+<body>
+    <iframe src="/content-security-policy/blink-contrib/resources/postmessage-fail.html" onload="loadEvent()" onerror="log('FAIL')"></iframe>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=true&amp;reportField=violated-directive&amp;reportValue=child-src%20&apos;none&apos;"></script>
+</body>
+
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-blocked.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: child-src-blocked={{$id:uuid()}}; Path=/content-security-policy/child-src
+Content-Security-Policy: child-src 'none'; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-conflicting-frame-src.sub.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>child-src-blocked</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src='../support/logTest.sub.js?logs=["PASS IFrame %231 generated a load event."]'></script>
+    <script>
+        window.addEventListener("message", function(event) {
+            alert_assert(event.data);
+        }, false);
+
+        function alert_assert(msg) {
+            t_log.step(function() {
+                if (msg.match(/^FAIL/i)) {
+                    assert_unreached(msg);
+                    t_log.done();
+                }
+                for (var i = 0; i < expected_alerts.length; i++) {
+                    if (expected_alerts[i] == msg) {
+                        assert_true(expected_alerts[i] == msg);
+                        expected_alerts.splice(i, 1);
+                        if (expected_alerts.length == 0) {
+                            t_log.done();
+                        }
+                        return;
+                    }
+                }
+                assert_unreached('unexpected alert: ' + msg);
+                t_log.done();
+            });
+        }
+
+    </script>
+    <!-- enforcing policy:
+frame-src 'none'; child-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self';
+-->
+    <p>
+        A more permissive child-src should not relax restrictions from a less-
+        permissive frame-src.  Directives still combine for least privilege, even when
+        one obsoletes another.
+    </p>
+    <script>
+        window.wasPostTestScriptParsed = true;
+        var loads = 0;
+
+        function loadEvent() {
+            loads++;
+            log("PASS " + "IFrame #" + loads + " generated a load event.");
+        }
+
+    </script>
+</head>
+
+<body>
+    <iframe src="/content-security-policy/blink-contrib/resources/postmessage-fail.html" onload="loadEvent()" onerror="log('FAIL')"></iframe>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=true&amp;reportField=violated-directive&amp;reportValue=frame-src%20&apos;none&apos;"></script>
+</body>
+
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-conflicting-frame-src.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: child-src-conflicting-frame-src={{$id:uuid()}}; Path=/content-security-policy/child-src
+Content-Security-Policy: frame-src 'none'; child-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-cross-origin-load.sub.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
+    <title>child-src-cross-origin-load</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src='../support/logTest.sub.js?logs=["PASS IFrame %231 generated a load event.","PASS IFrame %232 generated a load event.","PASS IFrame %233 generated a load event."]'></script>
+    <script>
+        window.addEventListener("message", function(event) {
+            alert_assert(event.data);
+        }, false);
+
+        var t_alert = async_test('Expecting alerts: ["PASS","PASS"]');
+        var expected_alerts = ["PASS", "PASS"];
+
+        function alert_assert(msg) {
+            t_alert.step(function() {
+                if (msg.match(/^FAIL/i)) {
+                    assert_unreached(msg);
+                    t_alert.done();
+                }
+                for (var i = 0; i < expected_alerts.length; i++) {
+                    if (expected_alerts[i] == msg) {
+                        assert_true(expected_alerts[i] == msg);
+                        expected_alerts.splice(i, 1);
+                        if (expected_alerts.length == 0) {
+                            t_alert.done();
+                        }
+                        return;
+                    }
+                }
+                assert_unreached('unexpected alert: ' + msg);
+                t_alert.done();
+            });
+        }
+
+    </script>
+    <!-- enforcing policy:
+child-src 'self' http://www1.{{host}}:{{ports[http][0]}}; script-src 'self' 'unsafe-inline'; connect-src 'self';
+-->
+    <p>
+        IFrames blocked by CSP should generate a 'load', not 'error' event, regardless of blocked state. This means they appear to be normal cross-origin loads, thereby not leaking URL information directly to JS.
+    </p>
+    <script>
+        window.wasPostTestScriptParsed = true;
+        var loads = 0;
+
+        function loadEvent() {
+            loads++;
+            log("PASS " + "IFrame #" + loads + " generated a load event.");
+            if (loads == 3)
+                log("TEST COMPLETE");
+        }
+
+    </script>
+</head>
+
+<body>
+    <iframe src="/content-security-policy/blink-contrib/resources/postmessage-pass.html" onload="loadEvent()"></iframe>
+    <iframe src="http://www1.{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/postmessage-pass.html" onload="loadEvent()"></iframe>
+    <iframe src="http://www2.{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/postmessage-fail.html" onload="loadEvent()" onerror="log('FAIL')"></iframe>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=true&amp;reportField=violated-directive&amp;reportValue=child-src%20&apos;self&apos;"></script>
+</body>
+
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-cross-origin-load.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: child-src-cross-origin-load={{$id:uuid()}}; Path=/content-security-policy/child-src
+Content-Security-Policy: child-src 'self' http://www1.{{host}}:{{ports[http][0]}}; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-worker-allowed.sub.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <title>child-src-worker-allowed</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="../support/logTest.sub.js?logs=[]"></script>
+    <script src='../support/alertAssert.sub.js?alerts=["PASS"]'></script>
+    <!-- enforcing policy:
+child-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-inline'; connect-src 'self';
+-->
+
+</head>
+
+<body>
+    <script>
+        try {
+            var foo = new Worker('http://{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/post-message.js');
+            foo.onmessage = function(event) {
+                alert_assert("PASS");
+            };
+        } catch (e) {
+            alert_assert(e);
+        }
+
+    </script>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=false"></script>
+</body>
+
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-worker-allowed.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: child-src-worker-allowed={{$id:uuid()}}; Path=/content-security-policy/child-src
+Content-Security-Policy: child-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-worker-blocked.sub.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <title>child-src-worker-blocked</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="../support/logTest.sub.js?logs=[]"></script>
+    <script src='../support/alertAssert.sub.js?alerts=["PASS"]'></script>
+    <!-- enforcing policy:
+child-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-inline'; connect-src 'self';
+-->
+
+</head>
+
+<body>
+    <script>
+        try {
+            var foo = new Worker('http://{{host}}:{{ports[http][0]}}/content-security-policy/blink-contrib/resources/post-message.js');
+            foo.onmessage = function(event) {
+                alert_assert("FAIL");
+            };
+        } catch (e) {
+            alert_assert("PASS");
+        }
+
+    </script>
+    <div id="log"></div>
+    <script async defer src="../support/checkReport.sub.js?reportExists=true&amp;reportField=violated-directive&amp;reportValue=child-src%20&apos;none&apos;"></script>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/child-src/child-src-worker-blocked.sub.html.sub.headers
@@ -0,0 +1,6 @@
+Expires: Mon, 26 Jul 1997 05:00:00 GMT
+Cache-Control: no-store, no-cache, must-revalidate
+Cache-Control: post-check=0, pre-check=0, false
+Pragma: no-cache
+Set-Cookie: child-src-worker-blocked={{$id:uuid()}}; Path=/content-security-policy/child-src
+Content-Security-Policy: child-src 'none'; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/meta/meta-img-src.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta id="meta_csp" http-equiv="Content-Security-Policy" content="img-src 'none'">
+    <title>meta-img-src</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src='../support/logTest.sub.js?logs=["PASS","TEST COMPLETE"]'></script>
+</head>
+
+<body>
+<p>Test passes if the image is blocked.</p>
+
+    <script>
+    function testImgSrc() {
+        var img = document.createElement('img');
+        img.src = '../support/fail.png';
+        img.onerror = function() {
+            log("PASS");
+        };
+        img.onload = function() {
+            log("FAIL");
+        };
+        document.body.appendChild(img);
+    }
+    testImgSrc();
+    log("TEST COMPLETE");
+    </script>
+    <div id="log"></div>
+</body>
+
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/content-security-policy/meta/meta-modified.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta id="meta_csp" http-equiv="Content-Security-Policy" content="img-src 'none'">
+    <title>meta-modified</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src='../support/logTest.sub.js?logs=["PASS", "PASS","TEST COMPLETE"]'></script>
+</head>
+
+<body>
+<p>Test passes if the image is blocked both before and after policy modification.</p>
+
+    <script>
+    function testImgSrc() {
+        var img = document.createElement('img');
+        img.src = '../support/fail.png';
+        img.onerror = function() {
+            log("PASS");
+        };
+        img.onload = function() {
+            log("FAIL");
+        };
+        document.body.appendChild(img);
+    }
+    testImgSrc();
+    document.getElementById("meta_csp").setAttribute("content", "img-src *");
+    testImgSrc();
+    log("TEST COMPLETE");
+    </script>
+    <div id="log"></div>
+</body>
+
+</html>
--- a/testing/web-platform/tests/content-security-policy/support/alertAssert.sub.js
+++ b/testing/web-platform/tests/content-security-policy/support/alertAssert.sub.js
@@ -4,17 +4,20 @@ var expected_alerts = {{GET[alerts]}};
 if(expected_alerts.length == 0) {
   function alert_assert(msg) {
    test(function () { assert_unreached(msg) });
  }
 } else {
  var t_alert = async_test('Expecting alerts: {{GET[alerts]}}');
  function alert_assert(msg) {
      t_alert.step(function () {
-         if (msg.match(/^FAIL/i)) {
+         if(msg && msg instanceof Error) {
+             msg = msg.message;
+         }
+         if (msg && msg.match(/^FAIL/i)) {
              assert_unreached(msg);
              t_alert.done();
          }
          for (var i = 0; i < expected_alerts.length; i++) {
              if (expected_alerts[i] == msg) {
                  assert_true(expected_alerts[i] == msg);
                  expected_alerts.splice(i, 1);
                  if (expected_alerts.length == 0) {
deleted file mode 100644
--- a/testing/web-platform/tests/csp/assert_undefined.py
+++ /dev/null
@@ -1,8 +0,0 @@
-def main(request, response):
-    code = """
-test(function() {
-  assert_equals(self.%s, undefined);
-});
-""" % request.GET["varName"]
-
-    return ([("Content-Type", "text/javascript")], code)
deleted file mode 100644
--- a/testing/web-platform/tests/csp/csp-inline-script.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!doctype html>
-<meta charset=UTF-8>
-<link rel="author" title="tanvi@mozilla.com">
-<title>No inline script</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id=log></div>
-<script>
-unsafeScript = false;
-</script>
-<script src="assert_undefined.py?varName=unsafeScript"></script>
deleted file mode 100644
--- a/testing/web-platform/tests/csp/csp-inline-script.html.headers
+++ /dev/null
@@ -1,1 +0,0 @@
-Content-Security-Policy: default-src 'self'
--- a/testing/web-platform/tests/docs/test-format-guidelines.md
+++ b/testing/web-platform/tests/docs/test-format-guidelines.md
@@ -37,17 +37,17 @@ running in automation. In general the fo
 * [testharness.js](testharness.html) tests - for any test that can be
   written using script alone.
 
 * [Reftests][reftests] - for most tests of rendering.
 
 * WebDriver tests - for testing the webdriver protocol itself or (in
   the future) for certain tests that require access to privileged APIs.
 
-* Manual tests - as a last resort for anything that can't be tested
+* [Manual tests][manual-tests] - as a last resort for anything that can't be tested
   using one of the above techniques.
 
 Some scenarios demand certain test types. For example:
 
 * Tests for layout will generally be reftests. In some cases it will
   not be possible to construct a reference and a test that will always
   render the same, in which case a manual test, accompanied by
   testharness tests that inspect the layout via the DOM must be
@@ -323,12 +323,13 @@ see the [lint-tool documentation][lint-t
 But in the unusual case of error reports for things essential to a certain
 test or that for other exceptional reasons shouldn't prevent a merge of a
 test, update and commit the `lint.whitelist` file in the web-platform-tests
 root directory to suppress the error reports. For details on doing that,
 see the [lint-tool documentation][lint-tool].
 
 [lint-tool]: ./lint-tool.html
 [reftests]: ./reftests.html
+[manual-tests]: ./manual-test.html
 [test-templates]: ./test-templates.html
 [requirement-flags]: ./test-templates.html#requirement-flags
 [testharness-documentation]: ./testharness-documentation.html
 [validator]: http://validator.w3.org
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/dom/events/Event-dispatch-propagation-stopped.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title> Calling stopPropagation() prior to dispatchEvent() </title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id=log></div>
+
+<table id="table" border="1" style="display: none">
+    <tbody id="table-body">
+    <tr id="table-row">
+        <td id="table-cell">Shady Grove</td>
+        <td>Aeolian</td>
+    </tr>
+    <tr id="parent">
+        <td id="target">Over the river, Charlie</td>
+        <td>Dorian</td>
+    </tr>
+    </tbody>
+</table>
+
+<script>
+test(function() {
+    var event = "foo";
+    var target = document.getElementById("target");
+    var parent = document.getElementById("parent");
+    var tbody = document.getElementById("table-body");
+    var table = document.getElementById("table");
+    var body = document.body;
+    var html = document.documentElement;
+    var current_targets = [window, document, html, body, table, tbody, parent, target];
+    var expected_targets = [];
+    var actual_targets = [];
+    var expected_phases = [];
+    var actual_phases = [];
+
+    var test_event = function(evt) {
+        actual_targets.push(evt.currentTarget);
+        actual_phases.push(evt.eventPhase);
+    };
+
+    for (var i = 0; i < current_targets.length; ++i) {
+        current_targets[i].addEventListener(event, test_event, true);
+        current_targets[i].addEventListener(event, test_event, false);
+    }
+
+    var evt = document.createEvent("Event");
+    evt.initEvent(event, true, true);
+    evt.stopPropagation();
+    target.dispatchEvent(evt);
+
+    assert_array_equals(actual_targets, expected_targets, "actual_targets");
+    assert_array_equals(actual_phases, expected_phases, "actual_phases");
+});
+</script>
+</body>
+</html>
--- a/testing/web-platform/tests/dom/interfaces.html
+++ b/testing/web-platform/tests/dom/interfaces.html
@@ -218,16 +218,17 @@ interface Node : EventTarget {
 [Constructor]
 interface Document : Node {
   [SameObject] readonly attribute DOMImplementation implementation;
   readonly attribute DOMString URL;
   readonly attribute DOMString documentURI;
   readonly attribute DOMString origin;
   readonly attribute DOMString compatMode;
   readonly attribute DOMString characterSet;
+  readonly attribute DOMString charset; // legacy alias of .characterSet
   readonly attribute DOMString inputEncoding; // legacy alias of .characterSet
   readonly attribute DOMString contentType;
 
   readonly attribute DocumentType? doctype;
   readonly attribute Element? documentElement;
   HTMLCollection getElementsByTagName(DOMString localName);
   HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
   HTMLCollection getElementsByClassName(DOMString classNames);
--- a/testing/web-platform/tests/dom/nodes/DOMImplementation-createDocument.html
+++ b/testing/web-platform/tests/dom/nodes/DOMImplementation-createDocument.html
@@ -98,19 +98,26 @@ test(function() {
       }
     }, "createDocument test " + i + ": " + t.map(function(el) { return format_value(el) }))
 
     if (expected === null) {
       test(function() {
         var doc = document.implementation.createDocument(namespace, qualifiedName, doctype)
         assert_equals(doc.compatMode, "CSS1Compat")
         assert_equals(doc.characterSet, "UTF-8")
-        assert_equals(doc.inputEncoding, "UTF-8")
         assert_equals(doc.contentType, "application/xml")
         assert_equals(doc.URL, "about:blank")
         assert_equals(doc.documentURI, "about:blank")
         assert_equals(doc.createElement("DIV").localName, "DIV");
       }, "createDocument test " + i + ": metadata for " +
       [namespace, qualifiedName, doctype].map(function(el) { return format_value(el) }))
+
+      test(function() {
+        var doc = document.implementation.createDocument(namespace, qualifiedName, doctype)
+        assert_equals(doc.characterSet, "UTF-8", "characterSet");
+        assert_equals(doc.charset, "UTF-8", "charset");
+        assert_equals(doc.inputEncoding, "UTF-8", "inputEncoding");
+      }, "createDocument test " + i + ": characterSet aliases for " +
+      [namespace, qualifiedName, doctype].map(function(el) { return format_value(el) }))
     }
   })
 })
 </script>
--- a/testing/web-platform/tests/dom/nodes/DOMImplementation-createHTMLDocument.html
+++ b/testing/web-platform/tests/dom/nodes/DOMImplementation-createHTMLDocument.html
@@ -64,21 +64,27 @@ createHTMLDocuments(function(doc, expect
 })
 
 test(function() {
   var doc = document.implementation.createHTMLDocument("test");
   assert_equals(doc.URL, "about:blank");
   assert_equals(doc.documentURI, "about:blank");
   assert_equals(doc.compatMode, "CSS1Compat");
   assert_equals(doc.characterSet, "UTF-8");
-  assert_equals(doc.inputEncoding, "UTF-8");
   assert_equals(doc.contentType, "text/html");
   assert_equals(doc.createElement("DIV").localName, "div");
 }, "createHTMLDocument(): metadata")
 
 test(function() {
   var doc = document.implementation.createHTMLDocument("test");
+  assert_equals(doc.characterSet, "UTF-8", "characterSet");
+  assert_equals(doc.charset, "UTF-8", "charset");
+  assert_equals(doc.inputEncoding, "UTF-8", "inputEncoding");
+}, "createHTMLDocument(): characterSet aliases")
+
+test(function() {
+  var doc = document.implementation.createHTMLDocument("test");
   var a = doc.createElement("a");
   // In UTF-8: 0xC3 0xA4
   a.href = "http://example.org/?\u00E4";
   assert_equals(a.href, "http://example.org/?%C3%A4");
 }, "createHTMLDocument(): URL parsing")
 </script>
--- a/testing/web-platform/tests/dom/nodes/Document-characterSet-normalization.html
+++ b/testing/web-platform/tests/dom/nodes/Document-characterSet-normalization.html
@@ -353,29 +353,35 @@ function expected_case(encoding_label) {
 
 Object.keys(encodingMap).forEach(function(name) {
   encodingMap[name].forEach(function(label) {
     var iframe = document.createElement("iframe");
     var t = async_test("Name " + format_value(name) +
                        " has label " + format_value(label) + " (characterSet)");
     var t2 = async_test("Name " + format_value(name) +
                        " has label " + format_value(label) + " (inputEncoding)");
+    var t3 = async_test("Name " + format_value(name) +
+                       " has label " + format_value(label) + " (charset)");
     /*
     iframe.src = "data:text/html,<!doctype html>" +
                  '<meta charset="' + label + '">';
     */
     iframe.src = "encoding.py?label=" + label;
     iframe.onload = function() {
       t.step(function() {
         assert_equals(iframe.contentDocument.characterSet, expected_case(name));
       });
       t2.step(function() {
         assert_equals(iframe.contentDocument.inputEncoding, expected_case(name));
       });
+      t3.step(function() {
+        assert_equals(iframe.contentDocument.charset, expected_case(name));
+      });
       document.body.removeChild(iframe);
       t.done();
       t2.done();
+      t3.done();
     };
     document.body.appendChild(iframe);
   });
 });
 </script>
 <!-- vim: set expandtab tabstop=2 shiftwidth=2: -->
--- a/testing/web-platform/tests/dom/nodes/Document-constructor.html
+++ b/testing/web-platform/tests/dom/nodes/Document-constructor.html
@@ -27,21 +27,27 @@ test(function() {
 }, "new Document(): children")
 
 test(function() {
   var doc = new Document();
   assert_equals(doc.URL, "about:blank");
   assert_equals(doc.documentURI, "about:blank");
   assert_equals(doc.compatMode, "CSS1Compat");
   assert_equals(doc.characterSet, "UTF-8");
-  assert_equals(doc.inputEncoding, "UTF-8");
   assert_equals(doc.contentType, "application/xml");
   assert_equals(doc.createElement("DIV").localName, "DIV");
 }, "new Document(): metadata")
 
 test(function() {
   var doc = new Document();
+  assert_equals(doc.characterSet, "UTF-8", "characterSet");
+  assert_equals(doc.charset, "UTF-8", "charset");
+  assert_equals(doc.inputEncoding, "UTF-8", "inputEncoding");
+}, "new Document(): characterSet aliases")
+
+test(function() {
+  var doc = new Document();
   var a = doc.createElement("a");
   // In UTF-8: 0xC3 0xA4
   a.href = "http://example.org/?\u00E4";
   assert_equals(a.href, "http://example.org/?%C3%A4");
 }, "new Document(): URL parsing")
 </script>
--- a/testing/web-platform/tests/dom/nodes/Node-properties.html
+++ b/testing/web-platform/tests/dom/nodes/Node-properties.html
@@ -131,34 +131,32 @@ var expected = {
         "childNodes.length": 2,
         "childNodes[0]": document.doctype,
         "childNodes[1]": document.documentElement,
 
         // Document
         URL: String(location),
         compatMode: "CSS1Compat",
         characterSet: "UTF-8",
-        inputEncoding: "UTF-8",
         contentType: "text/html",
         doctype: doctype,
         //documentElement: ,
     },
     foreignDoc: {
         // Node
         nodeType: Node.DOCUMENT_NODE,
         "childNodes.length": 3,
         "childNodes[0]": foreignDoc.doctype,
         "childNodes[1]": foreignDoc.documentElement,
         "childNodes[2]": foreignComment,
 
         // Document
         URL: "about:blank",
         compatMode: "CSS1Compat",
         characterSet: "UTF-8",
-        inputEncoding: "UTF-8",
         contentType: "text/html",
         //doctype: ,
         //documentElement: ,
     },
     foreignPara1: {
         // Node
         nodeType: Node.ELEMENT_NODE,
         ownerDocument: foreignDoc,
@@ -206,17 +204,16 @@ var expected = {
         "childNodes[1]": xmlElement,
         "childNodes[2]": processingInstruction,
         "childNodes[3]": xmlComment,
 
         // Document
         URL: "about:blank",
         compatMode: "CSS1Compat",
         characterSet: "UTF-8",
-        inputEncoding: "UTF-8",
         contentType: "application/xml",
         //doctype: ,
         //documentElement: ,
     },
     xmlElement: {
         // Node
         nodeType: Node.ELEMENT_NODE,
         ownerDocument: xmlDoc,
@@ -635,16 +632,18 @@ for (var node in expected) {
 
     case Node.DOCUMENT_NODE:
         expected[node].nodeName = "#document";
         expected[node].ownerDocument = expected[node].parentNode =
             expected[node].parentElement = expected[node].previousSibling =
             expected[node].nextSibling = expected[node].nodeValue =
             expected[node].textContent = null;
         expected[node].documentURI = expected[node].URL;
+        expected[node].charset = expected[node].inputEncoding =
+            expected[node].characterSet;
         break;
 
     case Node.DOCUMENT_TYPE_NODE:
         expected[node].nodeName = expected[node].name;
         expected[node]["childNodes.length"] = 0;
         expected[node].parentElement = expected[node].nodeValue =
             expected[node].textContent = null;
         break;
--- a/testing/web-platform/tests/domparsing/DOMParser-parseFromString-html.html
+++ b/testing/web-platform/tests/domparsing/DOMParser-parseFromString-html.html
@@ -34,16 +34,20 @@ test(function() {
     assert_equals(doc.characterSet, "UTF-8")
 }, 'characterSet');
 
 test(function() {
     assert_equals(doc.inputEncoding, "UTF-8")
 }, 'inputEncoding');
 
 test(function() {
+    assert_equals(doc.charset, "UTF-8")
+}, 'charset');
+
+test(function() {
     var url = document.URL;
     assert_equals(doc.documentURI, url,
                   'The document must have a URL value equal to the URL of the active document.');
     assert_equals(doc.URL, url,
                   'The document must have a URL value equal to the URL of the active document.');
 }, 'URL value');
 
 test(function() {
--- a/testing/web-platform/tests/domparsing/DOMParser-parseFromString-xml.html
+++ b/testing/web-platform/tests/domparsing/DOMParser-parseFromString-xml.html
@@ -5,16 +5,17 @@
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 function checkMetadata(doc, contentType) {
   assert_true(doc instanceof Document, "Should be Document");
   assert_equals(doc.URL, document.URL, "URL");
   assert_equals(doc.documentURI, document.URL, "documentURI");
   assert_equals(doc.characterSet, "UTF-8", "characterSet");
+  assert_equals(doc.charset, "UTF-8", "charset");
   assert_equals(doc.inputEncoding, "UTF-8", "inputEncoding");
   assert_equals(doc.contentType, contentType, "contentType");
   assert_equals(doc.location, null, "location");
 }
 
 var allowedTypes = ["text/xml", "application/xml", "application/xhtml+xml", "image/svg+xml"];
 
 allowedTypes.forEach(function(type) {
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/history/the-location-interface/location_reload-iframe.html
@@ -0,0 +1,4 @@
+<script>
+  parent._ping(window.location.href)
+  location.reload();
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/history/the-location-interface/location_reload.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<html>
+  <head>
+    <title>location_reload</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <div id="log"></div>
+
+    <iframe></iframe>
+
+    <script>
+
+    async_test(function(t) {
+
+      var url = new URL("./location_reload-iframe.html", window.location).href;
+      var pingCount = 0;
+
+      window._ping = t.step_func(function(innerURL) {
+          assert_equals(url, innerURL, "iframe url (" + pingCount + ")");
+          pingCount++;
+          if (pingCount == 5) {
+            t.done();
+          }
+      });
+
+      var iframe = document.querySelector("iframe");
+      iframe.src = url;
+
+    });
+
+
+    </script>
+
+  </body>
+</html>
--- a/testing/web-platform/tests/html/dom/interfaces.html
+++ b/testing/web-platform/tests/html/dom/interfaces.html
@@ -230,16 +230,17 @@ interface Node : EventTarget {
 [Constructor]
 interface Document : Node {
   [SameObject] readonly attribute DOMImplementation implementation;
   readonly attribute DOMString URL;
   readonly attribute DOMString documentURI;
   readonly attribute DOMString origin;
   readonly attribute DOMString compatMode;
   readonly attribute DOMString characterSet;
+  readonly attribute DOMString charset; // legacy alias of .characterSet
   readonly attribute DOMString inputEncoding; // legacy alias of .characterSet
   readonly attribute DOMString contentType;
 
   readonly attribute DocumentType? doctype;
   readonly attribute Element? documentElement;
   HTMLCollection getElementsByTagName(DOMString localName);
   HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
   HTMLCollection getElementsByClassName(DOMString classNames);
@@ -3217,16 +3218,17 @@ window.onload = function() {
       'document.createElement("rp")',
       'document.createElement("bdi")',
       'document.createElement("bdo")',
       'document.createElement("wbr")',
       'document.createElement("summary")',
       'document.createElement("acronym")',
     ],
     HTMLUnknownElement: [
+      'document.createElement("blink")',
       'document.createElement("quasit")',
       'document.createElement("bgsound")',
       'document.createElement("isindex")',
       'document.createElement("multicol")',
       'document.createElement("nextid")',
       'document.createElement("rb")',
       'document.createElement("spacer")',
       'document.createElement("basefont")',
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/document-all.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<title>document.all</title>
+<link rel="author" title="Corey Farwell" href="mailto:coreyf@rwell.org">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/obsolete.html#dom-document-all">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function () {
+  assert_false(Boolean(document.all));
+
+  assert_true(document.all == undefined);
+  assert_true(document.all == null);
+  assert_false(document.all != undefined);
+  assert_false(document.all != null);
+
+  assert_true(document.all !== undefined);
+  assert_true(document.all !== null);
+  assert_false(document.all === undefined);
+  assert_false(document.all === null);
+
+  assert_equals(typeof document.all, "undefined");
+
+  if (document.all) { assert_true(false); }
+
+  if (!document.all) {}
+  else { assert_true(false); }
+}, "'unusual behaviors' of document.all")
+
+test(function() {
+  var all = document.all;
+
+  assert_false(Boolean(all));
+
+  assert_true(all == undefined);
+  assert_true(all == null);
+  assert_false(all != undefined);
+  assert_false(all != null);
+
+  assert_true(all !== undefined);
+  assert_true(all !== null);
+  assert_false(all === undefined);
+  assert_false(all === null);
+
+  assert_equals(typeof all, "undefined");
+
+  if (all) { assert_true(false); }
+
+  if (!all) {}
+  else { assert_true(false); }
+}, "'unusual behaviors' of document.all with assignment")
+</script>
--- a/testing/web-platform/tests/html/semantics/forms/constraints/form-validation-validity-tooLong.html
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/form-validation-validity-tooLong.html
@@ -18,31 +18,33 @@
         {conditions: {maxLength: "4", value: ""}, expected: false, name: "[target] Non-dirty value - value is empty string"},
         {conditions: {maxLength: "4", value: "abc"}, expected: false, name: "[target] Non-dirty value - length of value is less than maxlength"},
         {conditions: {maxLength: "4", value: "abcd"}, expected: false, name: "[target] Non-dirty value - length of value equals to maxlength"},
         {conditions: {maxLength: "4", value: "abcde"}, expected: false, name: "[target] Non-dirty value - length of value is greater than maxlength"},
         //Dirty value
         {conditions: {maxLength: "4", value: "abc"}, expected: false, name: "[target] Dirty value - value is less than maxlength", dirty: true},
         {conditions: {maxLength: "4", value: "\u0041\u0041\u0041"}, expected: false, name: "[target] Dirty value - length of value(AAA) in unicode is less than maxlength", dirty: true},
         {conditions: {maxLength: "4", value: "abcd"}, expected: false, name: "[target] Dirty value - value equals to maxlength", dirty: true},
-        {conditions: {maxLength: "4", value: "abcde"}, expected: true, name: "[target] Dirty value - length of value is greater than maxlength", dirty: true}
+        // False due to lack of required interactive editing by the user
+        {conditions: {maxLength: "4", value: "abcde"}, expected: false, name: "[target] Dirty value - length of value is greater than maxlength", dirty: true}
       ]
     },
     {
       tag: "textarea",
       types: [],
       testData: [
         {conditions: {maxLength: "", value: "abc"}, expected: false, name: "[target] Non-dirty value - maxlength is not set"},
         {conditions: {maxLength: "4", value: ""}, expected: false, name: "[target] Non-dirty value - value is empty string"},
         {conditions: {maxLength: "4", value: "abc"}, expected: false, name: "[target] Non-dirty value - length of value is less than maxlength"},
         {conditions: {maxLength: "4", value: "abcd"}, expected: false, name: "[target] Non-dirty value - length of value equals to maxlength"},
         {conditions: {maxLength: "4", value: "abcde"}, expected: false, name: "[target] Non-dirty value - length of value is greater than maxlength"},
         //Dirty value
         {conditions: {maxLength: "4", value: "abc"}, expected: false, name: "[target] Dirty value - value is less than maxlength", dirty: true},
         {conditions: {maxLength: "4", value: "\u000D\u000A"}, expected: false, name: "[target] Dirty value - length of value(LF, CRLF) in unicode is less than maxlength", dirty: true},
         {conditions: {maxLength: "4", value: "abcd"}, expected: false, name: "[target] Dirty value - length of value equals to maxlength", dirty: true},
-        {conditions: {maxLength: "4", value: "abcde"}, expected: true, name: "[target] Dirty value - length of value is greater than maxlength", dirty: true}
+        // False due to lack of required interactive editing by the user
+        {conditions: {maxLength: "4", value: "abcde"}, expected: false, name: "[target] Dirty value - length of value is greater than maxlength", dirty: true}
       ]
     }
   ];
 
   validator.run_test (testElements, "tooLong");
 </script>
--- a/testing/web-platform/tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html
@@ -109,17 +109,17 @@
         {conditions: {required: true, value: "123"}, expected: false, name: "[target] Value is an integer with a leading symbol '+'"},
         {conditions: {required: true, value: "-123.45"}, expected: false, name: "[target] Value is a number with a '-' symbol"},
         {conditions: {required: true, value: "123.01e-10"}, expected: false, name: "[target] Value is a number in scientific notation form(e is in lowercase)"},
         {conditions: {required: true, value: "123.01E+10"}, expected: false, name: "[target] Value is a number in scientific notation form(E is in uppercase)"},
         {conditions: {required: true, value: "-0"}, expected: false, name: "[target] Value is -0"},
         {conditions: {required: true, value: " 123 "}, expected: true, name: "[target] Value is a number with some white spaces"},
         {conditions: {required: true, value: Math.pow(2, 1024)}, expected: true, name: "[target] Value is Math.pow(2, 1024)"},
         {conditions: {required: true, value: Math.pow(-2, 1024)}, expected: true, name: "[target] Value is Math.pow(-2, 1024)"},
-        {conditions: {required: true, value: "abc"}, expected: true, name: "[target] Value is a string that can not be coverted to a number"},
+        {conditions: {required: true, value: "abc"}, expected: true, name: "[target] Value is a string that cannot be converted to a number"},
         {conditions: {required: true, value: ""}, expected: true, name: "[target] The value attribute is empty string"}
       ]
     },
     {
       tag: "input",
       types: ["checkbox", "radio"],
       testData: [
         {conditions: {required: false, checked: false, name: "test1"}, expected: false, name: "[target] The required attribute is not set"},
--- a/testing/web-platform/tests/html/semantics/forms/constraints/form-validation-willValidate.html
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/form-validation-willValidate.html
@@ -47,44 +47,44 @@
     //If an element is disabled, it is barred from constraint validation.
     //The willValidate attribute must be true if an element is mutable
     //If the readonly attribute is specified on an INPUT element, the element is barred from constraint validation.
     {
       tag: "input",
       types: ["text", "search", "tel", "url", "email", "password", "datetime", "date", "month", "week", "time", "color", "file", "submit"],
       testData: [
         {conditions: {disabled: true}, expected: false, name: "[target] Must be barred from the constraint validation if it is disabled"},
-        {conditions: {disabled: false, readOnly: false}, expected: true, name: "[target] The willValidate attribute must be true if an elment is mutable"},
+        {conditions: {disabled: false, readOnly: false}, expected: true, name: "[target] The willValidate attribute must be true if an element is mutable"},
         {conditions: {readOnly: true}, expected: false, name: "[target] Must be barred from the constraint validation if it is readonly"},
         {conditions: {disabled: false, readOnly: false}, expected: false, name: "[target] The willValidate attribute must be false if it has a datalist ancestor", ancestor: "datalist"},
       ]
     },
     {
       tag: "button",
       types: ["submit"],
       testData: [
         {conditions: {disabled: true}, expected: false, name: "[target] Must be barred from the constraint validation"},
-        {conditions: {disabled: false}, expected: true, name: "[target] The willValidate attribute must be true if an elment is mutable"},
+        {conditions: {disabled: false}, expected: true, name: "[target] The willValidate attribute must be true if an element is mutable"},
         {conditions: {disabled: false}, expected: false, name: "[target] The willValidate attribute must be false if it has a datalist ancestor", ancestor: "datalist"}
       ]
     },
     {
       tag: "select",
       types: [],
       testData: [
         {conditions: {disabled: true}, expected: false, name: "[target] Must be barred from the constraint validation"},
-        {conditions: {disabled: false}, expected: true, name: "[target] The willValidate attribute must be true if an elment is mutable"},
+        {conditions: {disabled: false}, expected: true, name: "[target] The willValidate attribute must be true if an element is mutable"},
         {conditions: {disabled: false}, expected: false, name: "[target] The willValidate attribute must be false if it has a datalist ancestor", ancestor: "datalist"}
       ]
     },
     {
       tag: "textarea",
       types: [],
       testData: [,
         {conditions: {disabled: true}, expected: false, name: "[target] Must be barred from the constraint validation"},
-        {conditions: {disabled: false}, expected: true, name: "[target] The willValidate attribute must be true if an elment is mutable"},
+        {conditions: {disabled: false}, expected: true, name: "[target] The willValidate attribute must be true if an element is mutable"},
         {conditions: {disabled: false}, expected: false, name: "[target] The willValidate attribute must be false if it has a datalist ancestor", ancestor: "datalist"}
       ]
     }
   ];
 
   validator.run_test(testElements, "willValidate");
 </script>
--- a/testing/web-platform/tests/html/semantics/forms/constraints/support/validator.js
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/support/validator.js
@@ -224,18 +224,18 @@ var validator = {
         assert_equals(e.type, "invalid", "The invalid event should be fired.");
         eventFired = true;
       });
 
       if (data.expected) {
         assert_true(ctl.reportValidity(), "The reportValidity method should be true.");
         assert_false(eventFired, "The invalid event should not be fired.");
       } else {
+        assert_false(ctl.reportValidity(), "The reportValidity method should be false.");
         assert_true(eventFired, "The invalid event should be fired.");
-        assert_false(ctl.reportValidity(), "The reportValidity method should be false.");
       }
     }, data.name);
 
     test(function () {
       var fm = document.createElement("form");
       var ctl2 = ctl.cloneNode(true);
 
       self.pre_check(ctl, "reportValidity");
@@ -257,35 +257,49 @@ var validator = {
 
   test_support_type: function (ctl, typ, testName) {
     test(function () {
       assert_equals(ctl.type, typ, "The " + typ + " type should be supported.");
     }, testName);
   },
 
   set_conditions: function (ctl, obj) {
-    ["required", "pattern", "step", "max", "min", "maxlength",
-     "value", "multiple", "checked", "selected"].forEach(function(item) {
+    [
+      "checked",
+      "disabled",
+      "max",
+      "maxlength",
+      "min",
+      "minlength",
+      "multiple",
+      "pattern",
+      "required",
+      "selected",
+      "step",
+      "value"
+    ].forEach(function(item) {
       ctl.removeAttribute(item);
     });
     for (var attr in obj) {
       if (obj[attr] || obj[attr] === "")
         ctl[attr] = obj[attr];
     }
   },
 
   set_dirty: function(ctl) {
-    document.disgnMode = "on";
+    document.designMode = "on";
     ctl.focus();
     var old_value = ctl.value;
     ctl.value = "a";
     ctl.value = old_value;
-    ctl.setSelectionRange(ctl.value.length, ctl.value.length);
+    if (ctl.type !== 'email') {
+      ctl.setSelectionRange(ctl.value.length, ctl.value.length);
+    }
     document.execCommand("Delete");
-    document.disgnMode = "off";
+    document.designMode = "off";
   },
 
   pre_check: function(ctl, item) {
     switch (item) {
       case "willValidate":
         assert_true(item in ctl, "The " + item + " attribute doesn't exist.");
         break;
       case "checkValidity":
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-email-delete-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>input[type="email"], ValidityState.tooLong and user editing</title>
+    <link rel="author" title="Chris Rebert" href="http://chrisrebert.com">
+    <link rel="help" href="https://html.spec.whatwg.org/multipage/#limiting-user-input-length:-the-maxlength-attribute">
+    <meta name="flags" content="interact">
+    <meta name="assert" content="Per the 'Constraint validation' definition in the referenced section, an input whose value was edited by the user but still exceeds the input's maxlength should suffer from being too long.">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <p>Delete one character from the following text input:</p>
+    <input type="email" value="jane.doe@example.com" maxlength="5" autocomplete="off" id="testinput">
+
+    <div id="log"></div>
+    <script>
+var input = document.getElementById('testinput');
+setup({explicit_timeout: true, explicit_done: true});
+on_event(input, "input", function () {
+  test(function() {
+    assert_class_string(input.validity, 'ValidityState', 'HTMLInputElement.validity must be a ValidityState instance');
+    assert_true(input.validity.tooLong, "tooLong must be true since the user just changed the input's value and the value exceeds the maxlength");
+  });
+  done();
+});
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-password-delete-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>input[type="password"], ValidityState.tooLong and user editing</title>
+    <link rel="author" title="Chris Rebert" href="http://chrisrebert.com">
+    <link rel="help" href="https://html.spec.whatwg.org/multipage/#limiting-user-input-length:-the-maxlength-attribute">
+    <meta name="flags" content="interact">
+    <meta name="assert" content="Per the 'Constraint validation' definition in the referenced section, an input whose value was edited by the user but still exceeds the input's maxlength should suffer from being too long.">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <p>Delete one character from the following text input:</p>
+    <input type="password" value="swordfish" maxlength="5" autocomplete="off" id="testinput">
+
+    <div id="log"></div>
+    <script>
+var input = document.getElementById('testinput');
+setup({explicit_timeout: true, explicit_done: true});
+on_event(input, "input", function () {
+  test(function() {
+    assert_class_string(input.validity, 'ValidityState', 'HTMLInputElement.validity must be a ValidityState instance');
+    assert_true(input.validity.tooLong, "tooLong must be true since the user just changed the input's value and the value exceeds the maxlength");
+  });
+  done();
+});
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-search-delete-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>input[type="search"], ValidityState.tooLong and user editing</title>
+    <link rel="author" title="Chris Rebert" href="http://chrisrebert.com">
+    <link rel="help" href="https://html.spec.whatwg.org/multipage/#limiting-user-input-length:-the-maxlength-attribute">
+    <meta name="flags" content="interact">
+    <meta name="assert" content="Per the 'Constraint validation' definition in the referenced section, an input whose value was edited by the user but still exceeds the input's maxlength should suffer from being too long.">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <p>Delete one character from the following text input:</p>
+    <input type="search" value="abcdefghi" maxlength="5" autocomplete="off" id="testinput">
+
+    <div id="log"></div>
+    <script>
+var input = document.getElementById('testinput');
+setup({explicit_timeout: true, explicit_done: true});
+on_event(input, "input", function () {
+  test(function() {
+    assert_class_string(input.validity, 'ValidityState', 'HTMLInputElement.validity must be a ValidityState instance');
+    assert_true(input.validity.tooLong, "tooLong must be true since the user just changed the input's value and the value exceeds the maxlength");
+  });
+  done();
+});
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-tel-delete-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>input[type="tel"], ValidityState.tooLong and user editing</title>
+    <link rel="author" title="Chris Rebert" href="http://chrisrebert.com">
+    <link rel="help" href="https://html.spec.whatwg.org/multipage/#limiting-user-input-length:-the-maxlength-attribute">
+    <meta name="flags" content="interact">
+    <meta name="assert" content="Per the 'Constraint validation' definition in the referenced section, an input whose value was edited by the user but still exceeds the input's maxlength should suffer from being too long.">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <p>Delete one character from the following text input:</p>
+    <input type="tel" value="123-456-7890" maxlength="7" autocomplete="off" id="testinput">
+
+    <div id="log"></div>
+    <script>
+var input = document.getElementById('testinput');
+setup({explicit_timeout: true, explicit_done: true});
+on_event(input, "input", function () {
+  test(function() {
+    assert_class_string(input.validity, 'ValidityState', 'HTMLInputElement.validity must be a ValidityState instance');
+    assert_true(input.validity.tooLong, "tooLong must be true since the user just changed the input's value and the value exceeds the maxlength");
+  });
+  done();
+});
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-text-delete-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>input[type="text"], ValidityState.tooLong and user editing</title>
+    <link rel="author" title="Chris Rebert" href="http://chrisrebert.com">
+    <link rel="help" href="https://html.spec.whatwg.org/multipage/#limiting-user-input-length:-the-maxlength-attribute">
+    <meta name="flags" content="interact">
+    <meta name="assert" content="Per the 'Constraint validation' definition in the referenced section, an input whose value was edited by the user but still exceeds the input's maxlength should suffer from being too long.">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <p>Delete one character from the following text input:</p>
+    <input type="text" value="0123456789" maxlength="5" autocomplete="off" id="testinput">
+
+    <div id="log"></div>
+    <script>
+var input = document.getElementById('testinput');
+setup({explicit_timeout: true, explicit_done: true});
+on_event(input, "input", function () {
+  test(function() {
+    assert_class_string(input.validity, 'ValidityState', 'HTMLInputElement.validity must be a ValidityState instance');
+    assert_true(input.validity.tooLong, "tooLong must be true since the user just changed the input's value and the value exceeds the maxlength");
+  });
+  done();
+});
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/tooLong-input-url-delete-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>input[type="url"], ValidityState.tooLong and user editing</title>
+    <link rel="author" title="Chris Rebert" href="http://chrisrebert.com">
+    <link rel="help" href="https://html.spec.whatwg.org/multipage/#limiting-user-input-length:-the-maxlength-attribute">
+    <meta name="flags" content="interact">
+    <meta name="assert" content="Per the 'Constraint validation' definition in the referenced section, an input whose value was edited by the user but still exceeds the input's maxlength should suffer from being too long.">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <p>Delete one character from the following text input:</p>
+    <input type="url" value="http://example.com/foo" maxlength="12" autocomplete="off" id="testinput">
+
+    <div id="log"></div>
+    <script>
+var input = document.getElementById('testinput');
+setup({explicit_timeout: true, explicit_done: true});
+on_event(input, "input", function () {
+  test(function() {
+    assert_class_string(input.validity, 'ValidityState', 'HTMLInputElement.validity must be a ValidityState instance');
+    assert_true(input.validity.tooLong, "tooLong must be true since the user just changed the input's value and the value exceeds the maxlength");
+  });
+  done();
+});
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/forms/constraints/tooLong-textarea-delete-manual.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>textarea, ValidityState.tooLong and user editing</title>
+    <link rel="author" title="Chris Rebert" href="http://chrisrebert.com">
+    <link rel="help" href="https://html.spec.whatwg.org/multipage/#limiting-user-input-length:-the-maxlength-attribute">
+    <meta name="flags" content="interact">
+    <meta name="assert" content="Per the 'Constraint validation' definition in the referenced section, a textarea whose value was edited by the user but still exceeds the textarea's maxlength should suffer from being too long.">
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body>
+    <p>Delete one character from the following text area:</p>
+    <textarea maxlength="5" autocomplete="off" id="testinput">0123456789</textarea>
+
+    <div id="log"></div>
+    <script>
+var input = document.getElementById('testinput');
+setup({explicit_timeout: true, explicit_done: true});
+on_event(input, "input", function () {
+  test(function() {
+    assert_class_string(input.validity, 'ValidityState', 'HTMLTextAreaElement.validity must be a ValidityState instance');
+    assert_true(input.validity.tooLong, "tooLong must be true since the user just changed the input's value and the value exceeds the maxlength");
+  });
+  done();
+});
+    </script>
+  </body>
+</html>
--- a/testing/web-platform/tests/html/semantics/forms/the-input-element/input-textselection-01.html
+++ b/testing/web-platform/tests/html/semantics/forms/the-input-element/input-textselection-01.html
@@ -2,20 +2,20 @@
 <title>The selection interface members</title>
 <link rel="author" title="Ms2ger" href="mailto:ms2ger@gmail.com">
 <link rel="help" href="https://html.spec.whatwg.org/multipage/#textFieldSelection">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 test(function() {
-  var valid = ["text", "search", "url", "tel", "email", "password"];
+  var valid = ["text", "search", "url", "tel", "password"];
   var invalid = ["hidden", "datetime", "date", "month", "week", "datetime-local",
                  "number", "range", "color", "checkbox", "radio", "button",
-                 "file", "submit", "image", "reset"];
+                 "file", "email", "submit", "image", "reset"];
   valid.forEach(function(aType) {
     test(function() {
       var input = document.createElement("input");
       input.type = aType;
       assert_equals(input.type, aType, "Input type unsupported")
       input.select();
       var a = input.selectionStart;
       input.selectionStart = 0;
--- a/testing/web-platform/tests/html/semantics/forms/the-label-element/label-attributes.html
+++ b/testing/web-platform/tests/html/semantics/forms/the-label-element/label-attributes.html
@@ -100,17 +100,17 @@
   test(function () {
     var labels = document.getElementById("test4").labels;
     assert_true(labels instanceof NodeList, "A form control's 'labels' property should be an instance of a NodeList.");
     assert_equals(labels.length, 0, "The number of labels should be 0 if the associated form control isn't referenced by any <label>.");
   }, "A form control has no label 1.");
 
   test(function () {
     assert_equals(document.getElementById("test5").labels.length, 0,
-                  "The number of labels should be 0 if the form control has an ancestor label elment that the for attribute points to another control.");
+                  "The number of labels should be 0 if the form control has an ancestor label element that the for attribute points to another control.");
     assert_equals(document.getElementById("lbl2").control, null,
                   "The labeled cotrol should be associated with the control whose ID is equal to the value of the 'for' attribute.");
   }, "A form control has no label 2.");
 
   // form attribute
   test(function () {
     assert_equals(document.getElementById("lbl0").form, document.getElementById("fm"),
                   "The 'form' property for a label with a form owner should return the form owner.");
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/forms/the-optgroup-element/optgroup-disabled-manual.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>HTMLOptGroupElement Test: disabled</title>
+<meta name="flags" content="interact">
+<link rel="author" title="Intel" href="http://www.intel.com/">
+
+<form>
+  <select>
+    <optgroup label="8.01" disabled>
+      <option value="8.01.1">Lecture 01: Powers of Ten</option>
+      <option value="8.01.2">Lecture 02: 1D Kinematics</option>
+      <option value="8.01.3">Lecture 03: Vectors</option>
+    </optgroup>
+    <optgroup label="8.02">
+      <option value="8.02.1">Lecture 01: What holds our world together?</option>
+      <option value="8.02.2">Lecture 02: Electric Field</option>
+      <option value="8.02.3">Lecture 03: Electric Flux</option>
+    </optgroup>
+  </select>
+</form>
+
+<h2>Description</h2>
+<p>
+  This test validates that an optgroup element is disabled if its disabled attribute is present.
+</p>
+
+<h2>Test steps:</h2>
+<ol>
+  <li>
+    Click the select flag to select section '8.01'
+  </li>
+</ol>
+
+<h2>Result:</h2>
+<p>Click the select flag and try to select section 8.01, test passes if the section 8.01 is disable to be selected</p>
--- a/testing/web-platform/tests/html/semantics/interfaces.js
+++ b/testing/web-platform/tests/html/semantics/interfaces.js
@@ -113,25 +113,26 @@ var elements = [
   ["hgroup", ""],
   ["header", ""],
   ["footer", ""],
   ["time", "Time"],
   ["mark", ""],
   ["progress", "Progress"],
   ["meter", "Meter"],
   ["ruby", ""],
+  ["rb", ""],
   ["rt", ""],
+  ["rtc", ""],
   ["rp", ""],
   ["figure", ""],
   ["datalist", "DataList"],
   ["output", "Output"],
   ["details", "Details"],
   ["command", "Command"],
   ["nextid", "Unknown"],
-  ["rb", "Unknown"],
   ["bdi", ""],
   ["data", "Data"],
   ["a", "Anchor"],
   ["area", "Area"],
   ["dialog", "Dialog"],
   ["figcaption", ""],
   ["summary", ""],
   ["track", "Track"],
--- a/testing/web-platform/tests/html/semantics/scripting-1/the-template-element/definitions/template-contents-owner-document-type.html
+++ b/testing/web-platform/tests/html/semantics/scripting-1/the-template-element/definitions/template-contents-owner-document-type.html
@@ -12,61 +12,73 @@
 </head>
 <body>
 <div id="log"></div>
 <script type="text/javascript">
 
 testInIFrame('../resources/template-contents.html', function(context) {
     var doc = context.iframes[0].contentDocument;
     var template = doc.querySelector('template');
+    var content_owner = template.content.ownerDocument;
 
-    assert_class_string(template.content.ownerDocument, 'HTMLDocument',
-            'Template content owner should be a HTML document');
+    assert_class_string(content_owner, 'Document',
+            'Template content owner should be a document');
+    assert_equals(content_owner.createElement('DIV').localName, 'div',
+            'Template content owner should be an HTML document');
 
 }, 'The template contents owner document type is HTML document ' +
     '(case when document has browsing context and the template ' +
     'is created by HTML parser)');
 
 
 testInIFrame('../resources/template-contents.html', function(context) {
     var doc = context.iframes[0].contentDocument;
     var template = doc.createElement('template');
-    var div = doc.createElement('div');
+    var content_owner = template.content.ownerDocument;
+    var div = doc.createElement('DIV');
     template.appendChild(div);
 
     doc.body.appendChild(template);
 
-    assert_class_string(template.content.ownerDocument, 'HTMLDocument',
-            'Template content owner should be a HTML document');
+    assert_class_string(content_owner, 'Document',
+            'Template content owner should be a document');
+    assert_equals(div.localName, 'div',
+            'Template content owner should be an HTML document');
 
 }, 'The template contents owner document type is HTML document ' +
     '(case when document has browsing context and the template ' +
     'is created by createElement())');
 
 
 test(function() {
     var doc = newHTMLDocument();
     var template = doc.createElement('template');
-    var div = doc.createElement('div');
+    var content_owner = template.content.ownerDocument;
+    var div = doc.createElement('DIV');
     template.appendChild(div);
 
     doc.body.appendChild(template);
 
-    assert_class_string(template.content.ownerDocument, 'HTMLDocument',
-            'Template content owner should be a HTML document');
+    assert_class_string(content_owner, 'Document',
+            'Template content owner should be a document');
+    assert_equals(div.localName, 'div',
+            'Template content owner should be an HTML document');
 
 }, 'The template contents owner document type is HTML document ' +
     '(case when document has no browsing context and the template is created ' +
     'by createElement())');
 
 test(function() {
     var doc = newHTMLDocument();
     doc.body.innerHTML = '<template><div>Hello!</div></template>';
     var template = doc.querySelector('template');
+    var content_owner = template.content.ownerDocument;
 
-    assert_class_string(template.content.ownerDocument, 'HTMLDocument',
-            'Template content owner should be a HTML document');
+    assert_class_string(content_owner, 'Document',
+            'Template content owner should be a document');
+    assert_equals(content_owner.createElement('DIV').localName, 'div',
+            'Template content owner should be an HTML document');
 
 }, 'The template contents owner document type is HTML document ' +
     '(case when document has no browsing context and the template is created via innerHTML)');
 </script>
 </body>
 </html>
--- a/testing/web-platform/tests/html/semantics/selectors/pseudo-classes/disabled.html
+++ b/testing/web-platform/tests/html/semantics/selectors/pseudo-classes/disabled.html
@@ -43,15 +43,18 @@
   testSelector(":disabled", ["button2", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should match only disabled elements");
 
   document.getElementById("button2").removeAttribute("disabled");
   testSelector(":disabled", ["input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should not match elements whose disabled attribute has been removed");
 
   document.getElementById("button1").setAttribute("disabled", "disabled");
   testSelector(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should also match elements whose disabled attribute has been set");
 
+  document.getElementById("button1").setAttribute("disabled", "disabled");
+  testSelector(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should also match elements whose disabled attribute has been set twice");
+
   document.getElementById("input2").setAttribute("type", "submit"); // change input type to submit
   testSelector(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should also match disabled elements whose type has changed");
 
   var input = document.createElement("input");
   input.setAttribute("disabled", "disabled");
   testSelector(":disabled", ["button1", "input2", "select2", "optgroup2", "option2", "textarea2", "fieldset2", "clubname", "clubnum"], "':disabled' should not match elements not in the document");
 </script>
--- a/testing/web-platform/tests/html/semantics/text-level-semantics/the-wbr-element/wbr-element-ref.html
+++ b/testing/web-platform/tests/html/semantics/text-level-semantics/the-wbr-element/wbr-element-ref.html
@@ -1,10 +1,9 @@
 <!DOCTYPE html>
 <meta charset=utf-8>
 <title>The wbr element</title>
 <link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org">
-<link rel="mismatch" href="wbr-element-notref.html" />
 <meta name="flags" content="ahem">
 <style>
-  p {font-family: Ahem;}
+  p {font:15px/1 Ahem;}
 </style>
 <p>Loremipsumdolorsit<br>amet,consectetur<br>adipisicingelit,sed<br>doeiusmodtempor<br>incididuntutlaboreet<br>doloremagnaaliqua.Ut<br>enimadminimveniam,<br>quisnostrud<br>exercitationullamco<br>laborisnisiutaliquip<br>exeacommodo<br>consequat.Duisaute<br>iruredolorin<br>reprehenderitin<br>voluptatevelitesse<br>cillumdoloreeufugiat<br>nullapariatur.<br>Excepteursint<br>occaecatcupidatatnon<br>proident,suntinculpa<br>quiofficiadeserunt<br>mollitanimidest<br>laborum.</p>
--- a/testing/web-platform/tests/html/semantics/text-level-semantics/the-wbr-element/wbr-element.html
+++ b/testing/web-platform/tests/html/semantics/text-level-semantics/the-wbr-element/wbr-element.html
@@ -1,11 +1,11 @@
 <!DOCTYPE html>
 <meta charset=utf-8>
 <title>The wbr element</title>
 <link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org">
 <link rel=help href="https://html.spec.whatwg.org/multipage/#rendering">
 <link rel="match" href="wbr-element-ref.html">
 <meta name="flags" content="ahem">
 <style>
-  p {max-width: 300px; font-family: Ahem;}
+  p {max-width: 300px; font:15px/1 Ahem;}
 </style>
 <p>AHEM_<wbr>ipsum<wbr>dolor<wbr>sit<wbr>amet,<wbr>consectetur<wbr>adipisicing<wbr>elit,<wbr>sed<wbr>do<wbr>eiusmod<wbr>tempor<wbr>incididunt<wbr>ut<wbr>labore<wbr>et<wbr>dolore<wbr>magna<wbr>aliqua.<wbr>Ut<wbr>enim<wbr>ad<wbr>minim<wbr>veniam,<wbr>quis<wbr>nostrud<wbr>exercitation<wbr>ullamco<wbr>laboris<wbr>nisi<wbr>ut<wbr>aliquip<wbr>ex<wbr>ea<wbr>commodo<wbr>consequat.<wbr>Duis<wbr>aute<wbr>irure<wbr>dolor<wbr>in<wbr>reprehenderit<wbr>in<wbr>voluptate<wbr>velit<wbr>esse<wbr>cillum<wbr>dolore<wbr>eu<wbr>fugiat<wbr>nulla<wbr>pariatur.<wbr>Excepteur<wbr>sint<wbr>occaecat<wbr>cupidatat<wbr>non<wbr>proident,<wbr>sunt<wbr>in<wbr>culpa<wbr>qui<wbr>officia<wbr>deserunt<wbr>mollit<wbr>anim<wbr>id<wbr>est<wbr>laborum.</p>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/webappapis/scripting/event-loops/resources/common.js
@@ -0,0 +1,20 @@
+// Helper for tests that just want to verify the ordering of a series of events.
+// Usage:
+//   log_test(function(t, log) {
+//      log('first');
+//      log('second');
+//   }, ['first', 'second'], 'Ordinal numbers are ordinal');
+
+function log_test(func, expected, description) {
+    async_test(function(t) {
+        var actual = [];
+        function log(entry) {
+            actual.push(entry);
+            if (expected.length <= actual.length) {
+                assert_array_equals(actual, expected);
+                t.done();
+            }
+        }
+        func(t, t.step_func(log));
+    }, description);
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/webappapis/scripting/event-loops/task_microtask_ordering-manual.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<title>Task and Microtask Ordering </title>
+<link rel=author title="Joshua Bell" href="mailto:jsbell@google.com">
+<link rel=help href="https://html.spec.whatwg.org/multipage/webappapis.html#event-loops">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/common.js"></script>
+<style>
+.inner { padding: 46px; width: 0; margin: 0 auto; background: #d4d4d4; }
+.outer { padding: 25px; width: 92px; background: #f1f1f1; }
+</style>
+
+<p>Click on the inner box:</p>
+<div class="outer">
+  <div class="inner"></div>
+</div>
+
+<script>
+
+// Based on: https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/
+
+log_test(function(t, log) {
+    // Let's get hold of those elements
+    var outer = document.querySelector('.outer');
+    var inner = document.querySelector('.inner');
+
+    // Let's listen for attribute changes on the
+    // outer element
+    new MutationObserver(function() {
+        log('mutate');
+    }).observe(outer, {
+        attributes: true
+    });
+
+    // Here's a click listener...
+    function onClick() {
+        log('click');
+
+        setTimeout(function() {
+            log('timeout');
+        }, 0);
+
+        Promise.resolve().then(function() {
+            log('promise');
+        });
+
+        outer.setAttribute('data-random', Math.random());
+    }
+
+    // ...which we'll attach to both elements
+    inner.addEventListener('click', onClick);
+    outer.addEventListener('click', onClick);
+}, [
+    'click',
+    'promise',
+    'mutate',
+    'click',
+    'promise',
+    'mutate',
+    'timeout',
+    'timeout'
+], 'Level 1 bossfight (manual click)');
+
+</script>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/html/webappapis/scripting/event-loops/task_microtask_ordering.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<title>Task and Microtask Ordering </title>
+<link rel=author title="Joshua Bell" href="mailto:jsbell@google.com">
+<link rel=help href="https://html.spec.whatwg.org/multipage/webappapis.html#event-loops">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/common.js"></script>
+
+<div class="outer">
+  <div class="inner"></div>
+</div>
+
+<script>
+
+// Based on: https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/
+
+log_test(function(t, log) {
+    log('script start');
+
+    setTimeout(function() {
+        log('setTimeout');
+    }, 0);
+
+    Promise.resolve().then(function() {
+        log('promise1');
+    }).then(function() {
+        log('promise2');
+    });
+
+    log('script end');
+}, [
+    'script start',
+    'script end',
+    'promise1',
+    'promise2',
+    'setTimeout'
+], 'Basic task and microtask ordering');
+
+log_test(function(t, log) {
+    // Let's get hold of those elements
+    var outer = document.querySelector('.outer');
+    var inner = document.querySelector('.inner');
+
+    // Let's listen for attribute changes on the
+    // outer element
+    new MutationObserver(function() {
+        log('mutate');
+    }).observe(outer, {
+        attributes: true
+    });
+
+    // Here's a click listener...
+    function onClick() {
+        log('click');
+
+        setTimeout(function() {
+            log('timeout');
+        }, 0);
+
+        Promise.resolve().then(function() {
+            log('promise');
+        });
+
+        outer.setAttribute('data-random', Math.random());
+    }
+
+    // ...which we'll attach to both elements
+    inner.addEventListener('click', onClick);
+    outer.addEventListener('click', onClick);
+
+    // Note that this will behave differently than a real click,
+    // since the dispatch is synchronous and microtasks will not
+    // run between event bubbling steps.
+    inner.click();
+}, [
+    'click',
+    'click',
+    'promise',
+    'mutate',
+    'promise',
+    'timeout',
+    'timeout'
+], 'Level 1 bossfight (synthetic click)');
+
+</script>
--- a/testing/web-platform/tests/subresource-integrity/subresource-integrity.html
+++ b/testing/web-platform/tests/subresource-integrity/subresource-integrity.html
@@ -281,234 +281,234 @@
     ).execute();
 
     // Style tests
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with correct sha256 hash",
         {
-            href: "style.css",
+            href: "style.css?1",
             integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4="
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with correct sha384 hash",
         {
-            href: "style.css",
+            href: "style.css?2",
             integrity: "sha384-wDAWxH4tOWBwAwHfBn9B7XuNmFxHTMeigAMwn0iVQ0zq3FtmYMLxihcGnU64CwcX"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with correct sha512 hash",
         {
-            href: "style.css",
+            href: "style.css?3",
             integrity: "sha512-9wXDjd6Wq3H6nPAhI9zOvG7mJkUr03MTxaO+8ztTKnfJif42laL93Be/IF6YYZHHF4esitVYxiwpY2HSZX4l6w=="
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with empty integrity",
         {
-            href: "style.css",
+            href: "style.css?4",
             integrity: ""
         }
     );
 
     new SRIStyleTest(
         style_tests,
         false,
         "Same-origin with incorrect hash.",
         {
-            href: "style.css",
+            href: "style.css?5",
             integrity: "sha256-deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdead"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with multiple sha256 hashes, including correct.",
         {
-            href: "style.css",
-            integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F-SPLT7YZk7gyCWUV4= sha256-deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdead"
+            href: "style.css?6",
+            integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4= sha256-deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdead"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with multiple sha256 hashes, including unknown algorithm.",
         {
-            href: "style.css",
-            integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F-SPLT7YZk7gyCWUV4= foo666-deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdead"
+            href: "style.css?7",
+            integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4= foo666-deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdead"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with sha256 mismatch, sha512 match",
         {
-            href: "style.css",
+            href: "style.css?8",
             integrity: "sha512-9wXDjd6Wq3H6nPAhI9zOvG7mJkUr03MTxaO+8ztTKnfJif42laL93Be/IF6YYZHHF4esitVYxiwpY2HSZX4l6w== sha256-deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdead"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         false,
         "Same-origin with sha256 match, sha512 mismatch",
         {
-            href: "style.css",
+            href: "style.css?9",
             integrity: "sha512-deadbeef9wXDjd6Wq3H6nPAhI9zOvG7mJkUr03MTxaO+8ztTKnfJif42laL93Be/IF6YYZHHF4esitVYxiwpY2== sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4="
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "<crossorigin='anonymous'> with correct hash, ACAO: *",
         {
-            href: xorigin_anon_style,
+            href: xorigin_anon_style + '?1',
             integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4=",
             crossorigin: "anonymous"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         false,
         "<crossorigin='anonymous'> with incorrect hash, ACAO: *",
         {
-            href: xorigin_anon_style,
+            href: xorigin_anon_style + '?2',
             integrity: "sha256-deadbeefCzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk=",
             crossorigin: "anonymous"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "<crossorigin='use-credentials'> with correct hash, CORS-eligible",
         {
-            href: xorigin_creds_style,
+            href: xorigin_creds_style + '?1',
             integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4=",
             crossorigin: "use-credentials"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         false,
         "<crossorigin='use-credentials'> with incorrect hash CORS-eligible",
         {
-            href: xorigin_creds_style,
+            href: xorigin_creds_style + '?2',
             integrity: "sha256-deadbeefCzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk=",
             crossorigin: "use-credentials"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         false,
         "<crossorigin='anonymous'> with CORS-ineligible resource",
         {
-            href: xorigin_ineligible_style,
+            href: xorigin_ineligible_style + '?1',
             integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4=",
             crossorigin: "anonymous"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         false,
         "Cross-origin, not CORS request, with correct hash",
         {
-            href: xorigin_anon_style,
+            href: xorigin_anon_style + '?3',
             integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4="
         }
     );
 
     new SRIStyleTest(
         style_tests,
         false,
         "Cross-origin, not CORS request, with hash mismatch",
         {
-            href: xorigin_anon_style,
+            href: xorigin_anon_style + '?4',
             integrity: "sha256-deadbeefCzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk="
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Cross-origin, empty integrity",
         {
-            href: xorigin_anon_style,
+            href: xorigin_anon_style + '?5',
             integrity: ""
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with correct hash, options.",
         {
-            href: "style.css",
+            href: "style.css?10",
             integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4=?foo=bar?spam=eggs"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with unknown algorithm only.",
         {
-            href: "style.css",
+            href: "style.css?11",
             integrity: "foo666-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4=?foo=bar?spam=eggs"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with correct sha256 hash, rel='stylesheet license'",
         {
-            href: "style.css",
-            integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F-SPLT7YZk7gyCWUV4=",
+            href: "style.css?12",
+            integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4=",
             rel: "stylesheet license"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with correct sha256 hash, rel='license stylesheet'",
         {
-            href: "style.css",
-            integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F-SPLT7YZk7gyCWUV4=",
+            href: "style.css?13",
+            integrity: "sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4=",
             rel: "license stylesheet"
         }
     );
 
     new SRIStyleTest(
         style_tests,
         true,
         "Same-origin with correct sha256 and sha512 hash, rel='alternate stylesheet' enabled",
         {
-            href: "alternate.css",
+            href: "alternate.css?1",
             title: "alt",
             type: "text/css",
             class: "alternate",
             disabled: "disabled",
             rel: "alternate stylesheet",
             integrity: "sha256-phbz83bWhnLig+d2VPKrRrTRyhqoDRo1ruGqZLZ0= sha512-8OYEB7ktnzcb6h+kB9CUIuc8qvKIyLpygRJdQSEEycRy74dUsB+Yu9rSjpOPjRUblle8WWX9Gn7v39LK2Oceig==",
         },
         function (link, container) {
@@ -518,17 +518,17 @@
         "rgb(255, 0, 0)"
     );
 
     new SRIStyleTest(
         style_tests,
         false,
         "Same-origin with incorrect sha256 and sha512 hash, rel='alternate stylesheet' enabled",
         {
-            href: "alternate.css",
+            href: "alternate.css?2",
             title: "alt",
             type: "text/css",
             class: "alternate",
             disabled: "disabled",
             rel: "alternate stylesheet",
             integrity: "sha256-fail83bWhnLig+d2VPKrRrTRyhqoDRo1ruGqZLZ0= sha512-failB7ktnzcb6h+kB9CUIuc8qvKIyLpygRJdQSEEycRy74dUsB+Yu9rSjpOPjRUblle8WWX9Gn7v39LK2Oceig==",
         },
         function (link, container) {
--- a/testing/web-platform/tests/touch-events/multi-touch-interactions.js
+++ b/testing/web-platform/tests/touch-events/multi-touch-interactions.js
@@ -285,17 +285,17 @@ function run() {
 
 		// TA: 1.5.3.5 (new)
 		test(function() {
 			check_targets(ev.targetTouches, ev.target);
 		}, "touchend #" + touchend_received + ": targets of targetTouches are correct");
 
 		// In some cases, when multiple touch points are released simultaneously
 		// the UA would dispatch the "same" touchend event (same changedTouches, same touches, but possibly different targetTouches)
-		// to each of the elements that are starting elments of the released touch points.
+		// to each of the elements that are starting elements of the released touch points.
 		// in these situations, the subsequent events are exempt from TA 1.5.3.4 and 1.5.4.2
 		var same_event_as_last = false;
 		if (last_changedTouches && last_changedTouches.length==ev.changedTouches.length) {
 			same_event_as_last = true; // assume true until proven otherwise
 			for (i=0; i<last_changedTouches.length; i++) {
 				var match = false;
 				for (j=0; j<ev.changedTouches.length; j++)
 					if (last_changedTouches.item(i) == ev.changedTouches.item(j)) {
--- a/testing/web-platform/tests/websockets/README.md
+++ b/testing/web-platform/tests/websockets/README.md
@@ -1,10 +1,10 @@
 This directory contains the WebSocket API test suite.
 
 The following document contains a list of each test file in the test suite and the results of running the test file on several browsers <http://www.w3.org/wiki/Webapps/Interop/WebSockets>.
 
-To run this test suite within a browser, go to: <http://w3c-test.org/web-platform-tests/master/websockets/>.
+To run this test suite within a browser, go to: <http://w3c-test.org/websockets/>.
 
 The latest Editor's Draft of WebSocket API is: <http://dev.w3.org/html5/websockets/>.
 
 The latest W3C Technical Report of WebSocket API is <http://www.w3.org/TR/websockets/>.
 
--- a/testing/web-platform/tests/webstorage/storage_builtins.html
+++ b/testing/web-platform/tests/webstorage/storage_builtins.html
@@ -1,10 +1,10 @@
 <!DOCTYPE HTML>
-<mete charset=utf-8>
+<meta charset=utf-8>
 <title>WebStorage Test: Storage - builtins</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 ["localStorage", "sessionStorage"].forEach(function(name) {
     test(function() {
         var storage = window[name];
--- a/testing/web-platform/tests/webstorage/storage_clear.html
+++ b/testing/web-platform/tests/webstorage/storage_clear.html
@@ -1,10 +1,10 @@
 <!DOCTYPE HTML>
-<mete charset=utf-8>
+<meta charset=utf-8>
 <title>WebStorage Test: Storage - clear()</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 ["localStorage", "sessionStorage"].forEach(function(name) {
     test(function() {
         var storage = window[name];
--- a/testing/web-platform/tests/webstorage/storage_getitem.html
+++ b/testing/web-platform/tests/webstorage/storage_getitem.html
@@ -1,10 +1,10 @@
 <!DOCTYPE HTML>
-<mete charset=utf-8>
+<meta charset=utf-8>
 <title>WebStorage Test: Storage - getItem(key) and named getter</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 ["localStorage", "sessionStorage"].forEach(function(name) {
     test(function() {
         var storage = window[name];
--- a/testing/web-platform/tests/webstorage/storage_in.html
+++ b/testing/web-platform/tests/webstorage/storage_in.html
@@ -1,10 +1,10 @@
 <!DOCTYPE HTML>
-<mete charset=utf-8>
+<meta charset=utf-8>
 <title>WebStorage Test: Storage - in operator</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 ["localStorage", "sessionStorage"].forEach(function(name) {
     test(function() {
         var storage = window[name];
--- a/testing/web-platform/tests/webstorage/storage_indexing.html
+++ b/testing/web-platform/tests/webstorage/storage_indexing.html
@@ -1,10 +1,10 @@
 <!DOCTYPE HTML>
-<mete charset=utf-8>
+<meta charset=utf-8>
 <title>WebStorage Test: Storage - indexed getter</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 ["localStorage", "sessionStorage"].forEach(function(name) {
     test(function() {
         var storage = window[name];
--- a/testing/web-platform/tests/webstorage/storage_key.html
+++ b/testing/web-platform/tests/webstorage/storage_key.html
@@ -1,10 +1,10 @@
 <!DOCTYPE HTML>
-<mete charset=utf-8>
+<meta charset=utf-8>
 <title>WebStorage Test: Storage - key(index)</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 ["localStorage", "sessionStorage"].forEach(function(name) {
     test(function() {
         var storage = window[name];
--- a/testing/web-platform/tests/webstorage/storage_length.html
+++ b/testing/web-platform/tests/webstorage/storage_length.html
@@ -1,10 +1,10 @@
 <!DOCTYPE HTML>
-<mete charset=utf-8>
+<meta charset=utf-8>
 <title>WebStorage Test: Storage - length</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 ["localStorage", "sessionStorage"].forEach(function(name) {
     test(function() {
         var storage = window[name];
--- a/testing/web-platform/tests/webstorage/storage_removeitem.html
+++ b/testing/web-platform/tests/webstorage/storage_removeitem.html
@@ -1,10 +1,10 @@
 <!DOCTYPE HTML>
-<mete charset=utf-8>
+<meta charset=utf-8>
 <title>WebStorage Test: Storage - removeItem(key)</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 ["localStorage", "sessionStorage"].forEach(function(name) {
     test(function() {
         var storage = window[name];
--- a/testing/web-platform/tests/webstorage/storage_setitem.html
+++ b/testing/web-platform/tests/webstorage/storage_setitem.html
@@ -1,10 +1,10 @@
 <!DOCTYPE HTML>
-<mete charset=utf-8>
+<meta charset=utf-8>
 <title>WebStorage Test: Storage - setItem(key, value)</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <div id="log"></div>
 <script>
 ["localStorage", "sessionStorage"].forEach(function(name) {
     var test_error = { name: "test" };