Bug 1260772 - Update web-platform-tests to revision e9b6636c067fc08b9eb393a1c0ff380a77ae1786, a=testonly
authorJames Graham <james@hoppipolla.co.uk>
Tue, 22 Mar 2016 16:39:09 +0000
changeset 291251 ad956e863c35f42c8b951bc83428a8425daad8de
parent 291250 8d8a214a21b3276814b126656982141802981ff5
child 291252 6c39b1407e78b9f498f9d466dc74c681555eafa7
push id19656
push usergwagner@mozilla.com
push dateMon, 04 Apr 2016 13:43:23 +0000
treeherderb2g-inbound@e99061fde28a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerstestonly
bugs1260772
milestone48.0a1
Bug 1260772 - Update web-platform-tests to revision e9b6636c067fc08b9eb393a1c0ff380a77ae1786, a=testonly MozReview-Commit-ID: 3cs3y3zPVja
testing/web-platform/meta/MANIFEST.json
testing/web-platform/meta/mozilla-sync
testing/web-platform/mozilla/meta/MANIFEST.json
testing/web-platform/tests/dom/events/Event-dispatch-bubbles-false.html
testing/web-platform/tests/dom/interfaces.html
testing/web-platform/tests/dom/nodes/CharacterData-appendChild.html
testing/web-platform/tests/dom/nodes/Node-contains-xml.xml
testing/web-platform/tests/dom/nodes/Node-contains.xml
testing/web-platform/tests/dom/nodes/Node-isEqualNode-xhtml.xhtml
testing/web-platform/tests/dom/nodes/Node-isEqualNode.xhtml
testing/web-platform/tests/dom/nodes/attributes.html
testing/web-platform/tests/html/dom/interfaces.html
testing/web-platform/tests/html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml
testing/web-platform/tests/html/rendering/non-replaced-elements/lists/li-type-supported.xhtml
testing/web-platform/tests/html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml
testing/web-platform/tests/html/rendering/non-replaced-elements/lists/ol-type-supported.xhtml
testing/web-platform/tests/html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml
testing/web-platform/tests/html/rendering/non-replaced-elements/lists/ul-type-supported.xhtml
testing/web-platform/tests/html/semantics/embedded-content/the-canvas-element/2d.scaled-manual.png
testing/web-platform/tests/html/semantics/embedded-content/the-canvas-element/2d.scaled.png
testing/web-platform/tests/tools/manifest/item.py
testing/web-platform/tests/tools/manifest/manifest.py
testing/web-platform/tests/tools/manifest/sourcefile.py
testing/web-platform/tests/tools/wptserve/setup.py
testing/web-platform/tests/tools/wptserve/wptserve/handlers.py
testing/web-platform/tests/tools/wptserve/wptserve/pipes.py
testing/web-platform/tests/tools/wptserve/wptserve/response.py
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -277,16 +277,20 @@
         "path": "html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-manual.html",
         "url": "/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-manual.html"
       },
       {
         "path": "html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-manual.html",
         "url": "/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-manual.html"
       },
       {
+        "path": "html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load-manual.html",
+        "url": "/html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load-manual.html"
+      },
+      {
         "path": "html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-manual.html",
         "url": "/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-manual.html"
       },
       {
         "path": "html/browsers/history/the-location-interface/non-automated/reload_in_resize-manual.html",
         "url": "/html/browsers/history/the-location-interface/non-automated/reload_in_resize-manual.html"
       },
       {
@@ -729,20 +733,16 @@
         "path": "html/semantics/embedded-content/media-elements/video_volume_silent-manual.html",
         "url": "/html/semantics/embedded-content/media-elements/video_volume_silent-manual.html"
       },
       {
         "path": "html/semantics/embedded-content/the-canvas-element/2d.scaled-manual.html",
         "url": "/html/semantics/embedded-content/the-canvas-element/2d.scaled-manual.html"
       },
       {
-        "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"
       },
       {
@@ -4585,36 +4585,36 @@
           [
             "/html/rendering/non-replaced-elements/flow-content-0/figure-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/flow-content-0/figure.html"
       },
       {
+        "path": "html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml",
+        "references": [
+          [
+            "/html/rendering/non-replaced-elements/lists/li-type-supported-ref.html",
+            "=="
+          ]
+        ],
+        "url": "/html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml"
+      },
+      {
         "path": "html/rendering/non-replaced-elements/lists/li-type-supported.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/li-type-supported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/li-type-supported.html"
       },
       {
-        "path": "html/rendering/non-replaced-elements/lists/li-type-supported.xhtml",
-        "references": [
-          [
-            "/html/rendering/non-replaced-elements/lists/li-type-supported-ref.html",
-            "=="
-          ]
-        ],
-        "url": "/html/rendering/non-replaced-elements/lists/li-type-supported.xhtml"
-      },
-      {
         "path": "html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-alpha.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/li-type-unsupported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-alpha.html"
@@ -4645,36 +4645,36 @@
           [
             "/html/rendering/non-replaced-elements/lists/li-type-unsupported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-roman.html"
       },
       {
+        "path": "html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml",
+        "references": [
+          [
+            "/html/rendering/non-replaced-elements/lists/ol-type-supported-ref.html",
+            "=="
+          ]
+        ],
+        "url": "/html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml"
+      },
+      {
         "path": "html/rendering/non-replaced-elements/lists/ol-type-supported.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/ol-type-supported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/ol-type-supported.html"
       },
       {
-        "path": "html/rendering/non-replaced-elements/lists/ol-type-supported.xhtml",
-        "references": [
-          [
-            "/html/rendering/non-replaced-elements/lists/ol-type-supported-ref.html",
-            "=="
-          ]
-        ],
-        "url": "/html/rendering/non-replaced-elements/lists/ol-type-supported.xhtml"
-      },
-      {
         "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-circle.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-circle.html"
@@ -4765,36 +4765,36 @@
           [
             "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-upper-roman.html"
       },
       {
+        "path": "html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml",
+        "references": [
+          [
+            "/html/rendering/non-replaced-elements/lists/ul-type-supported-ref.html",
+            "=="
+          ]
+        ],
+        "url": "/html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml"
+      },
+      {
         "path": "html/rendering/non-replaced-elements/lists/ul-type-supported.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/ul-type-supported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/ul-type-supported.html"
       },
       {
-        "path": "html/rendering/non-replaced-elements/lists/ul-type-supported.xhtml",
-        "references": [
-          [
-            "/html/rendering/non-replaced-elements/lists/ul-type-supported-ref.html",
-            "=="
-          ]
-        ],
-        "url": "/html/rendering/non-replaced-elements/lists/ul-type-supported.xhtml"
-      },
-      {
         "path": "html/rendering/non-replaced-elements/lists/ul-type-unsupported-decimal.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-decimal.html"
@@ -14057,16 +14057,20 @@
         "path": "dom/lists/DOMTokenList-stringifier.html",
         "url": "/dom/lists/DOMTokenList-stringifier.html"
       },
       {
         "path": "dom/lists/DOMTokenList-value.html",
         "url": "/dom/lists/DOMTokenList-value.html"
       },
       {
+        "path": "dom/nodes/CharacterData-appendChild.html",
+        "url": "/dom/nodes/CharacterData-appendChild.html"
+      },
+      {
         "path": "dom/nodes/CharacterData-appendData.html",
         "url": "/dom/nodes/CharacterData-appendData.html"
       },
       {
         "path": "dom/nodes/CharacterData-data.html",
         "url": "/dom/nodes/CharacterData-data.html"
       },
       {
@@ -14513,36 +14517,36 @@
         "path": "dom/nodes/Node-compareDocumentPosition.html",
         "url": "/dom/nodes/Node-compareDocumentPosition.html"
       },
       {
         "path": "dom/nodes/Node-constants.html",
         "url": "/dom/nodes/Node-constants.html"
       },
       {
+        "path": "dom/nodes/Node-contains-xml.xml",
+        "url": "/dom/nodes/Node-contains-xml.xml"
+      },
+      {
         "path": "dom/nodes/Node-contains.html",
         "url": "/dom/nodes/Node-contains.html"
       },
       {
-        "path": "dom/nodes/Node-contains.xml",
-        "url": "/dom/nodes/Node-contains.xml"
-      },
-      {
         "path": "dom/nodes/Node-insertBefore.html",
         "url": "/dom/nodes/Node-insertBefore.html"
       },
       {
+        "path": "dom/nodes/Node-isEqualNode-xhtml.xhtml",
+        "url": "/dom/nodes/Node-isEqualNode-xhtml.xhtml"
+      },
+      {
         "path": "dom/nodes/Node-isEqualNode.html",
         "url": "/dom/nodes/Node-isEqualNode.html"
       },
       {
-        "path": "dom/nodes/Node-isEqualNode.xhtml",
-        "url": "/dom/nodes/Node-isEqualNode.xhtml"
-      },
-      {
         "path": "dom/nodes/Node-lookupNamespaceURI.html",
         "url": "/dom/nodes/Node-lookupNamespaceURI.html"
       },
       {
         "path": "dom/nodes/Node-lookupPrefix.xhtml",
         "url": "/dom/nodes/Node-lookupPrefix.xhtml"
       },
       {
@@ -16257,20 +16261,16 @@
         "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"
       },
       {
-        "path": "html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html",
-        "url": "/html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html"
-      },
-      {
         "path": "html/browsers/history/the-location-interface/reload_document_open_write.html",
         "url": "/html/browsers/history/the-location-interface/reload_document_open_write.html"
       },
       {
         "path": "html/browsers/history/the-location-interface/reload_document_write.html",
         "url": "/html/browsers/history/the-location-interface/reload_document_write.html"
       },
       {
@@ -34701,114 +34701,148 @@
       {
         "path": "webstorage/storage_session_setitem_quotaexceedederr.html",
         "timeout": "long",
         "url": "/webstorage/storage_session_setitem_quotaexceedederr.html"
       }
     ],
     "wdspec": [
       {
-        "path": "webdriver/command_contexts/open_and_close_window_test.py"
-      },
-      {
-        "path": "webdriver/command_contexts/window_handle_test.py"
-      },
-      {
-        "path": "webdriver/command_contexts/window_size_test.py"
-      },
-      {
-        "path": "webdriver/cookie/cookie_test.py"
-      },
-      {
-        "path": "webdriver/ecmascript/ecmascript_test.py"
-      },
-      {
-        "path": "webdriver/element_location/element_location_test.py"
-      },
-      {
-        "path": "webdriver/element_state/method_test.py"
-      },
-      {
-        "path": "webdriver/element_state/properties.py"
-      },
-      {
-        "path": "webdriver/element_state/selected_test.py"
-      },
-      {
-        "path": "webdriver/element_state/visibility_test.py"
-      },
-      {
-        "path": "webdriver/javascript/execute_script_test.py"
-      },
-      {
-        "path": "webdriver/modal/alerts_quit_test.py"
-      },
-      {
-        "path": "webdriver/modal/alerts_test.py"
-      },
-      {
-        "path": "webdriver/navigation/auth_tests.py"
-      },
-      {
-        "path": "webdriver/navigation/forward.py"
-      },
-      {
-        "path": "webdriver/navigation/forwardToNothing.py"
-      },
-      {
-        "path": "webdriver/navigation/get_from_http_test.py"
-      },
-      {
-        "path": "webdriver/navigation/invalid_cert_test.py"
-      },
-      {
-        "path": "webdriver/navigation/refresh-page.py"
-      },
-      {
-        "path": "webdriver/navigation/refresh_page.py"
-      },
-      {
-        "path": "webdriver/screenshot/take_screenshot.py"
-      },
-      {
-        "path": "webdriver/timeouts/implicit_waits_tests.py"
-      },
-      {
-        "path": "webdriver/timeouts/page_load_timeouts_tests.py"
-      },
-      {
-        "path": "webdriver/user_input/clear_test.py"
-      },
-      {
-        "path": "webdriver/user_input/click_test.py"
-      },
-      {
-        "path": "webdriver/user_input/sendkeys_test.py"
-      },
-      {
-        "path": "webdriver/windows/tabbing.py"
-      },
-      {
-        "path": "webdriver/windows/window_manipulation.py"
+        "path": "webdriver/base_test.py",
+        "url": "/webdriver/base_test.py"
+      },
+      {
+        "path": "webdriver/command_contexts/open_and_close_window_test.py",
+        "url": "/webdriver/command_contexts/open_and_close_window_test.py"
+      },
+      {
+        "path": "webdriver/command_contexts/window_handle_test.py",
+        "url": "/webdriver/command_contexts/window_handle_test.py"
+      },
+      {
+        "path": "webdriver/command_contexts/window_size_test.py",
+        "url": "/webdriver/command_contexts/window_size_test.py"
+      },
+      {
+        "path": "webdriver/cookie/cookie_test.py",
+        "url": "/webdriver/cookie/cookie_test.py"
+      },
+      {
+        "path": "webdriver/ecmascript/ecmascript_test.py",
+        "url": "/webdriver/ecmascript/ecmascript_test.py"
+      },
+      {
+        "path": "webdriver/element_location/element_location_test.py",
+        "url": "/webdriver/element_location/element_location_test.py"
+      },
+      {
+        "path": "webdriver/element_state/method_test.py",
+        "url": "/webdriver/element_state/method_test.py"
+      },
+      {
+        "path": "webdriver/element_state/properties.py",
+        "url": "/webdriver/element_state/properties.py"
+      },
+      {
+        "path": "webdriver/element_state/selected_test.py",
+        "url": "/webdriver/element_state/selected_test.py"
+      },
+      {
+        "path": "webdriver/element_state/visibility_test.py",
+        "url": "/webdriver/element_state/visibility_test.py"
+      },
+      {
+        "path": "webdriver/javascript/execute_script_test.py",
+        "url": "/webdriver/javascript/execute_script_test.py"
+      },
+      {
+        "path": "webdriver/modal/alerts_quit_test.py",
+        "url": "/webdriver/modal/alerts_quit_test.py"
+      },
+      {
+        "path": "webdriver/modal/alerts_test.py",
+        "url": "/webdriver/modal/alerts_test.py"
+      },
+      {
+        "path": "webdriver/navigation/auth_tests.py",
+        "url": "/webdriver/navigation/auth_tests.py"
+      },
+      {
+        "path": "webdriver/navigation/forward.py",
+        "url": "/webdriver/navigation/forward.py"
+      },
+      {
+        "path": "webdriver/navigation/forwardToNothing.py",
+        "url": "/webdriver/navigation/forwardToNothing.py"
+      },
+      {
+        "path": "webdriver/navigation/get_from_http_test.py",
+        "url": "/webdriver/navigation/get_from_http_test.py"
+      },
+      {
+        "path": "webdriver/navigation/invalid_cert_test.py",
+        "url": "/webdriver/navigation/invalid_cert_test.py"
+      },
+      {
+        "path": "webdriver/navigation/refresh-page.py",
+        "url": "/webdriver/navigation/refresh-page.py"
+      },
+      {
+        "path": "webdriver/navigation/refresh_page.py",
+        "url": "/webdriver/navigation/refresh_page.py"
+      },
+      {
+        "path": "webdriver/network.py",
+        "url": "/webdriver/network.py"
+      },
+      {
+        "path": "webdriver/runtests.py",
+        "url": "/webdriver/runtests.py"
+      },
+      {
+        "path": "webdriver/runtests_p0.py",
+        "url": "/webdriver/runtests_p0.py"
+      },
+      {
+        "path": "webdriver/screenshot/take_screenshot.py",
+        "url": "/webdriver/screenshot/take_screenshot.py"
+      },
+      {
+        "path": "webdriver/timeouts/implicit_waits_tests.py",
+        "url": "/webdriver/timeouts/implicit_waits_tests.py"
+      },
+      {
+        "path": "webdriver/timeouts/page_load_timeouts_tests.py",
+        "url": "/webdriver/timeouts/page_load_timeouts_tests.py"
+      },
+      {
+        "path": "webdriver/user_input/clear_test.py",
+        "url": "/webdriver/user_input/clear_test.py"
+      },
+      {
+        "path": "webdriver/user_input/click_test.py",
+        "url": "/webdriver/user_input/click_test.py"
+      },
+      {
+        "path": "webdriver/user_input/sendkeys_test.py",
+        "url": "/webdriver/user_input/sendkeys_test.py"
+      },
+      {
+        "path": "webdriver/windows/tabbing.py",
+        "url": "/webdriver/windows/tabbing.py"
+      },
+      {
+        "path": "webdriver/windows/window_manipulation.py",
+        "url": "/webdriver/windows/window_manipulation.py"
       }
     ]
   },
   "local_changes": {
-    "deleted": [
-      "html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html"
-    ],
+    "deleted": [],
     "items": {
-      "manual": {
-        "html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load-manual.html": [
-          {
-            "path": "html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load-manual.html",
-            "url": "/html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load-manual.html"
-          }
-        ]
-      },
       "reftest": {
         "compat/webkit-text-fill-color-property-001a.html": [
           {
             "path": "compat/webkit-text-fill-color-property-001a.html",
             "references": [
               [
                 "/compat/webkit-text-fill-color-property-001-ref.html",
                 "=="
@@ -37012,40 +37046,40 @@
           [
             "/html/rendering/non-replaced-elements/flow-content-0/figure-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/flow-content-0/figure.html"
       }
     ],
+    "html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml": [
+      {
+        "path": "html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml",
+        "references": [
+          [
+            "/html/rendering/non-replaced-elements/lists/li-type-supported-ref.html",
+            "=="
+          ]
+        ],
+        "url": "/html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml"
+      }
+    ],
     "html/rendering/non-replaced-elements/lists/li-type-supported.html": [
       {
         "path": "html/rendering/non-replaced-elements/lists/li-type-supported.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/li-type-supported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/li-type-supported.html"
       }
     ],
-    "html/rendering/non-replaced-elements/lists/li-type-supported.xhtml": [
-      {
-        "path": "html/rendering/non-replaced-elements/lists/li-type-supported.xhtml",
-        "references": [
-          [
-            "/html/rendering/non-replaced-elements/lists/li-type-supported-ref.html",
-            "=="
-          ]
-        ],
-        "url": "/html/rendering/non-replaced-elements/lists/li-type-supported.xhtml"
-      }
-    ],
     "html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-alpha.html": [
       {
         "path": "html/rendering/non-replaced-elements/lists/li-type-unsupported-lower-alpha.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/li-type-unsupported-ref.html",
             "=="
           ]
@@ -37084,40 +37118,40 @@
           [
             "/html/rendering/non-replaced-elements/lists/li-type-unsupported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/li-type-unsupported-upper-roman.html"
       }
     ],
+    "html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml": [
+      {
+        "path": "html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml",
+        "references": [
+          [
+            "/html/rendering/non-replaced-elements/lists/ol-type-supported-ref.html",
+            "=="
+          ]
+        ],
+        "url": "/html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml"
+      }
+    ],
     "html/rendering/non-replaced-elements/lists/ol-type-supported.html": [
       {
         "path": "html/rendering/non-replaced-elements/lists/ol-type-supported.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/ol-type-supported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/ol-type-supported.html"
       }
     ],
-    "html/rendering/non-replaced-elements/lists/ol-type-supported.xhtml": [
-      {
-        "path": "html/rendering/non-replaced-elements/lists/ol-type-supported.xhtml",
-        "references": [
-          [
-            "/html/rendering/non-replaced-elements/lists/ol-type-supported-ref.html",
-            "=="
-          ]
-        ],
-        "url": "/html/rendering/non-replaced-elements/lists/ol-type-supported.xhtml"
-      }
-    ],
     "html/rendering/non-replaced-elements/lists/ol-type-unsupported-circle.html": [
       {
         "path": "html/rendering/non-replaced-elements/lists/ol-type-unsupported-circle.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html",
             "=="
           ]
@@ -37228,40 +37262,40 @@
           [
             "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/ol-type-unsupported-upper-roman.html"
       }
     ],
+    "html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml": [
+      {
+        "path": "html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml",
+        "references": [
+          [
+            "/html/rendering/non-replaced-elements/lists/ul-type-supported-ref.html",
+            "=="
+          ]
+        ],
+        "url": "/html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml"
+      }
+    ],
     "html/rendering/non-replaced-elements/lists/ul-type-supported.html": [
       {
         "path": "html/rendering/non-replaced-elements/lists/ul-type-supported.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/ul-type-supported-ref.html",
             "=="
           ]
         ],
         "url": "/html/rendering/non-replaced-elements/lists/ul-type-supported.html"
       }
     ],
-    "html/rendering/non-replaced-elements/lists/ul-type-supported.xhtml": [
-      {
-        "path": "html/rendering/non-replaced-elements/lists/ul-type-supported.xhtml",
-        "references": [
-          [
-            "/html/rendering/non-replaced-elements/lists/ul-type-supported-ref.html",
-            "=="
-          ]
-        ],
-        "url": "/html/rendering/non-replaced-elements/lists/ul-type-supported.xhtml"
-      }
-    ],
     "html/rendering/non-replaced-elements/lists/ul-type-unsupported-decimal.html": [
       {
         "path": "html/rendering/non-replaced-elements/lists/ul-type-unsupported-decimal.html",
         "references": [
           [
             "/html/rendering/non-replaced-elements/lists/ul-type-unsupported-ref.html",
             "=="
           ]
@@ -41057,12 +41091,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": "dccaa413ec1107e87b72245aa5ce837ee37ddff7",
+  "rev": "e9b6636c067fc08b9eb393a1c0ff380a77ae1786",
   "url_base": "/",
-  "version": 2
+  "version": 3
 }
--- a/testing/web-platform/meta/mozilla-sync
+++ b/testing/web-platform/meta/mozilla-sync
@@ -1,1 +1,1 @@
-9749b23ced55b8ddcb8d453e52bddf90378bf27a
\ No newline at end of file
+3422e17135e084287140f638ea29f939584113c3
\ No newline at end of file
--- a/testing/web-platform/mozilla/meta/MANIFEST.json
+++ b/testing/web-platform/mozilla/meta/MANIFEST.json
@@ -601,10 +601,10 @@
         ]
       }
     },
     "reftest_nodes": {}
   },
   "reftest_nodes": {},
   "rev": null,
   "url_base": "/_mozilla/",
-  "version": 2
+  "version": 3
 }
--- a/testing/web-platform/tests/dom/events/Event-dispatch-bubbles-false.html
+++ b/testing/web-platform/tests/dom/events/Event-dispatch-bubbles-false.html
@@ -18,17 +18,17 @@
     </tr>
     </tbody>
 </table>
 <script>
 function targetsForDocumentChain(document) {
     return [
         document,
         document.documentElement,
-        document.body,
+        document.getElementsByTagName("body")[0],
         document.getElementById("table"),
         document.getElementById("table-body"),
         document.getElementById("parent")
     ];
 }
 
 function testChain(document, targetParents, phases, event_type) {
     var target = document.getElementById("target");
--- a/testing/web-platform/tests/dom/interfaces.html
+++ b/testing/web-platform/tests/dom/interfaces.html
@@ -480,16 +480,17 @@ setup(function() {
   element = xmlDoc.createElementNS(null, "test");
   element.setAttribute("bar", "baz");
 
   idlArray = new IdlArray();
   idlArray.add_idls(document.querySelector("script[type=text\\/plain]").textContent);
   idlArray.add_objects({
     Event: ['document.createEvent("Event")', 'new Event("foo")'],
     CustomEvent: ['new CustomEvent("foo")'],
+    Document: ['new Document()'],
     XMLDocument: ['xmlDoc'],
     DOMImplementation: ['document.implementation'],
     DocumentFragment: ['document.createDocumentFragment()'],
     DocumentType: ['document.doctype'],
     Element: ['element'],
     Attr: ['document.querySelector("[id]").attributes[0]'],
     Text: ['document.createTextNode("abc")'],
     ProcessingInstruction: ['xmlDoc.createProcessingInstruction("abc", "def")'],
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/dom/nodes/CharacterData-appendChild.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Node.appendChild applied to CharacterData</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-appendchild">
+<link rel=help href="https://dom.spec.whatwg.org/#introduction-to-the-dom">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function create(type) {
+  switch (type) {
+    case "Text": return document.createTextNode("test"); break;
+    case "Comment": return document.createComment("test"); break;
+    case "ProcessingInstruction": return document.createProcessingInstruction("target", "test"); break;
+  }
+}
+
+function testNode(type1, type2) {
+  test(function() {
+    var node1 = create(type1);
+    var node2 = create(type2);
+    assert_throws("HierarchyRequestError", function () {
+      node1.appendChild(node2);
+    }, "CharacterData type " + type1 + " must not have children");
+  }, type1 + ".appendChild(" + type2 + ")");
+}
+
+var types = ["Text", "Comment", "ProcessingInstruction"];
+types.forEach(function(type1) {
+  types.forEach(function(type2) {
+    testNode(type1, type2);
+  });
+});
+</script>
rename from testing/web-platform/tests/dom/nodes/Node-contains.xml
rename to testing/web-platform/tests/dom/nodes/Node-contains-xml.xml
rename from testing/web-platform/tests/dom/nodes/Node-isEqualNode.xhtml
rename to testing/web-platform/tests/dom/nodes/Node-isEqualNode-xhtml.xhtml
--- a/testing/web-platform/tests/dom/nodes/attributes.html
+++ b/testing/web-platform/tests/dom/nodes/attributes.html
@@ -6,16 +6,21 @@
 <link rel=help href="https://dom.spec.whatwg.org/#dom-element-setattributens">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="attributes.js"></script>
 <script src="productions.js"></script>
 <div id="log"></div>
 <span id="test1"></span>
 <span class="&amp;&lt;&gt;foo"></span>
+<span id="test2">
+  <span ~=""></span>
+  <span ~></span>
+  <span></span>
+</span>
 <script>
 var XML = "http://www.w3.org/XML/1998/namespace"
 var XMLNS = "http://www.w3.org/2000/xmlns/"
 
 // AttrExodus
 test(function() {
   document.body.setAttribute("abc", "pass")
   var attr = document.body.attributes[0]
@@ -36,16 +41,26 @@ test(function() {
 // Step 1
 test(function() {
   var el = document.createElement("foo")
   for (var i = 0; i < invalid_names.length; i++) {
     assert_throws("INVALID_CHARACTER_ERR", function() { el.setAttribute(invalid_names[i], "test") })
   }
 }, "When qualifiedName does not match the Name production, an " +
    "INVALID_CHARACTER_ERR exception is to be thrown. (setAttribute)")
+test(function() {
+  var el = document.getElementById("test2")
+  for (var i = 0; i < el.children.length; i++) {
+    assert_throws("INVALID_CHARACTER_ERR", function() {
+      el.children[i].setAttribute("~", "test")
+    })
+  }
+}, "When qualifiedName does not match the Name production, an " +
+   "INVALID_CHARACTER_ERR exception is to be thrown, even if the attribute " +
+   "is already present. (setAttribute)")
 
 // Step 2
 test(function() {
   var el = document.createElement("div")
   el.setAttribute("ALIGN", "left")
   assert_equals(el.getAttributeNS("", "ALIGN"), null)
   assert_equals(el.getAttributeNS("", "align"), "left")
   assert_equals(el.getAttribute("align"), "left")
@@ -112,16 +127,27 @@ test(function() {
   var el = document.createElement("foo")
   for (var i = 0, il = invalid_names.length; i < il; ++i) {
     assert_throws("INVALID_CHARACTER_ERR",
                   function() { el.setAttributeNS("a", invalid_names[i], "fail") })
   }
 }, "When qualifiedName does not match the Name production, an " +
    "INVALID_CHARACTER_ERR exception is to be thrown. (setAttributeNS)")
 
+test(function() {
+  var el = document.getElementById("test2")
+  for (var i = 0; i < el.children.length; i++) {
+    assert_throws("INVALID_CHARACTER_ERR", function() {
+      el.children[i].setAttributeNS(null, "~", "test")
+    })
+  }
+}, "When qualifiedName does not match the Name production, an " +
+   "INVALID_CHARACTER_ERR exception is to be thrown, even if the attribute " +
+   "is already present. (setAttributeNS)")
+
 // Step 2
 test(function() {
   var el = document.createElement("foo")
   for (var i = 0, il = invalid_qnames.length; i < il; ++i) {
     assert_throws("NAMESPACE_ERR",
                   function() { el.setAttributeNS("a", invalid_qnames[i], "fail") },
                   "Expected exception for " + invalid_qnames[i] + ".")
   }
--- a/testing/web-platform/tests/html/dom/interfaces.html
+++ b/testing/web-platform/tests/html/dom/interfaces.html
@@ -3197,17 +3197,17 @@ window.onload = function() {
     HTMLFormControlsCollection: ['document.createElement("form").elements'],
     RadioNodeList: [],
     HTMLOptionsCollection: ['document.createElement("select").options'],
     HTMLPropertiesCollection: ['document.head.properties'],
     PropertyNodeList: [],
     DOMStringMap: ['document.head.dataset'],
     DOMElementMap: ['document.cssElementMap'],
     Transferable: [],
-    Document: ['iframe.contentDocument'],
+    Document: ['iframe.contentDocument', 'new Document()'],
     XMLDocument: ['document.implementation.createDocument(null, "", null)'],
     HTMLElement: [
       'document.createElement("noscript")',
       'document.createElement("section")',
       'document.createElement("nav")',
       'document.createElement("article")',
       'document.createElement("aside")',
       'document.createElement("hgroup")',
rename from testing/web-platform/tests/html/rendering/non-replaced-elements/lists/li-type-supported.xhtml
rename to testing/web-platform/tests/html/rendering/non-replaced-elements/lists/li-type-supported-xhtml.xhtml
rename from testing/web-platform/tests/html/rendering/non-replaced-elements/lists/ol-type-supported.xhtml
rename to testing/web-platform/tests/html/rendering/non-replaced-elements/lists/ol-type-supported-xhtml.xhtml
rename from testing/web-platform/tests/html/rendering/non-replaced-elements/lists/ul-type-supported.xhtml
rename to testing/web-platform/tests/html/rendering/non-replaced-elements/lists/ul-type-supported-xhtml.xhtml
rename from testing/web-platform/tests/html/semantics/embedded-content/the-canvas-element/2d.scaled-manual.png
rename to testing/web-platform/tests/html/semantics/embedded-content/the-canvas-element/2d.scaled.png
--- a/testing/web-platform/tests/tools/manifest/item.py
+++ b/testing/web-platform/tests/tools/manifest/item.py
@@ -57,16 +57,19 @@ class ManifestItem(object):
     def __eq__(self, other):
         if not hasattr(other, "key"):
             return False
         return self.key() == other.key()
 
     def __hash__(self):
         return hash(self.key() + self.meta_key())
 
+    def __repr__(self):
+        return "<%s.%s id=%s, path=%s>" % (self.__module__, self.__class__.__name__, self.id, self.path)
+
     def to_json(self):
         return {"path": from_os_path(self.path)}
 
     @classmethod
     def from_json(self, manifest, tests_root, obj, source_files=None):
         raise NotImplementedError
 
 
@@ -170,23 +173,19 @@ class RefTest(URLManifestItem):
                    viewport_size=obj.get("viewport_size"),
                    dpi=obj.get("dpi"),
                    manifest=manifest)
 
 
 class ManualTest(URLManifestItem):
     item_type = "manual"
 
+
 class Stub(URLManifestItem):
     item_type = "stub"
 
-class WebdriverSpecTest(ManifestItem):
+
+class WebdriverSpecTest(URLManifestItem):
     item_type = "wdspec"
 
-    @property
-    def id(self):
-        return self.path
-
-    @classmethod
-    def from_json(cls, manifest, tests_root, obj, source_files=None):
-        source_file = get_source_file(source_files, tests_root, manifest,
-                                      to_os_path(obj["path"]))
-        return cls(source_file, manifest=manifest)
+    def __init__(self, source_file, url, url_base="/", timeout=None, manifest=None):
+        URLManifestItem.__init__(self, source_file, url, url_base=url_base, manifest=manifest)
+        self.timeout = timeout
--- a/testing/web-platform/tests/tools/manifest/manifest.py
+++ b/testing/web-platform/tests/tools/manifest/manifest.py
@@ -1,19 +1,19 @@
 import json
 import os
-from collections import defaultdict
+from collections import defaultdict, OrderedDict
 
 from item import item_types, ManualTest, WebdriverSpecTest, Stub, RefTest, TestharnessTest
 from log import get_logger
 from sourcefile import SourceFile
 from utils import from_os_path, to_os_path
 
 
-CURRENT_VERSION = 2
+CURRENT_VERSION = 3
 
 
 class ManifestError(Exception):
     pass
 
 
 class ManifestVersionMismatch(ManifestError):
     pass
@@ -203,18 +203,19 @@ class Manifest(object):
             item_type: sorted(
                 test.to_json()
                 for _, tests in items.iteritems()
                 for test in tests
             )
             for item_type, items in self._data.iteritems()
         }
 
-        reftest_nodes = {from_os_path(key): [v.to_json() for v in value]
-                         for key, value in self.reftest_nodes.iteritems()}
+        reftest_nodes = OrderedDict()
+        for key, value in sorted(self.reftest_nodes.items()):
+            reftest_nodes[from_os_path(key)] = [v.to_json() for v in value]
 
         rv = {"url_base": self.url_base,
               "rev": self.rev,
               "local_changes": self.local_changes.to_json(),
               "items": out_items,
               "reftest_nodes": reftest_nodes,
               "version": CURRENT_VERSION}
         return rv
--- a/testing/web-platform/tests/tools/manifest/sourcefile.py
+++ b/testing/web-platform/tests/tools/manifest/sourcefile.py
@@ -107,17 +107,17 @@ class SourceFile(object):
     @property
     def name_is_webdriver(self):
         """Check if the file name matches the conditions for the file to
         be a webdriver spec test file"""
         # wdspec tests are in subdirectories of /webdriver excluding __init__.py
         # files.
         rel_dir_tree = self.rel_path.split(os.path.sep)
         return (rel_dir_tree[0] == "webdriver" and
-                len(rel_dir_tree) > 2 and
+                len(rel_dir_tree) > 1 and
                 self.filename != "__init__.py" and
                 fnmatch(self.filename, wd_pattern))
 
     @property
     def name_is_reference(self):
         """Check if the file name matches the conditions for the file to
         be a reference file (not a reftest)"""
         return self.type_flag in ("ref", "notref")
@@ -291,17 +291,17 @@ class SourceFile(object):
 
         elif self.name_is_manual:
             rv = [ManualTest(self, self.url)]
 
         elif self.name_is_worker:
             rv = [TestharnessTest(self, self.url[:-3])]
 
         elif self.name_is_webdriver:
-            rv = [WebdriverSpecTest(self)]
+            rv = [WebdriverSpecTest(self, self.url)]
 
         elif self.content_is_testharness:
             rv = []
             for variant in self.test_variants:
                 url = self.url + variant
                 rv.append(TestharnessTest(self, url, timeout=self.timeout))
 
         elif self.content_is_ref_node:
--- a/testing/web-platform/tests/tools/wptserve/setup.py
+++ b/testing/web-platform/tests/tools/wptserve/setup.py
@@ -1,11 +1,11 @@
 from setuptools import setup
 
-PACKAGE_VERSION = '1.3.0'
+PACKAGE_VERSION = '1.4.0'
 deps = []
 
 setup(name='wptserve',
       version=PACKAGE_VERSION,
       description="Python webserver intended for in web browser testing",
       long_description=open("README.md").read(),
       # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
       classifiers=["Development Status :: 5 - Production/Stable",
--- a/testing/web-platform/tests/tools/wptserve/wptserve/handlers.py
+++ b/testing/web-platform/tests/tools/wptserve/wptserve/handlers.py
@@ -135,16 +135,17 @@ class FileHandler(object):
 
             pipeline = None
             if "pipe" in query:
                 pipeline = Pipeline(query["pipe"][-1])
             elif os.path.splitext(path)[0].endswith(".sub"):
                 ml_extensions = {".html", ".htm", ".xht", ".xhtml", ".xml", ".svg"}
                 escape_type = "html" if os.path.splitext(path)[1] in ml_extensions else "none"
                 pipeline = Pipeline("sub(%s)" % escape_type)
+
             if pipeline is not None:
                 response = pipeline(request, response)
 
             return response
 
         except (OSError, IOError):
             raise HTTPException(404)
 
@@ -169,20 +170,22 @@ class FileHandler(object):
             return []
         else:
             if use_sub:
                 data = template(request, data, escape_type="none")
             return [tuple(item.strip() for item in line.split(":", 1))
                     for line in data.splitlines() if line]
 
     def get_data(self, response, path, byte_ranges):
-        with open(path, 'rb') as f:
-            if byte_ranges is None:
-                return f.read()
-            else:
+        """Return either the handle to a file, or a string containing
+        the content of a chunk of the file, if we have a range request."""
+        if byte_ranges is None:
+            return open(path, 'rb')
+        else:
+            with open(path, 'rb') as f:
                 response.status = 206
                 if len(byte_ranges) > 1:
                     parts_content_type, content = self.set_response_multipart(response,
                                                                               byte_ranges,
                                                                               f)
                     for byte_range in byte_ranges:
                         content.append_part(self.get_range_data(f, byte_range),
                                             parts_content_type,
--- a/testing/web-platform/tests/tools/wptserve/wptserve/pipes.py
+++ b/testing/web-platform/tests/tools/wptserve/wptserve/pipes.py
@@ -3,17 +3,17 @@ import gzip as gzip_module
 import re
 import time
 import types
 import uuid
 from cStringIO import StringIO
 
 
 def resolve_content(response):
-    rv = "".join(item for item in response.iter_content())
+    rv = "".join(item for item in response.iter_content(read_file=True))
     if type(rv) == unicode:
         rv = rv.encode(response.encoding)
     return rv
 
 
 class Pipeline(object):
     pipes = {}
 
@@ -227,43 +227,36 @@ def trickle(request, response, delays):
             else:
                 rv.append((item_type, value))
         return rv
 
     delays = parse_delays()
     if not delays:
         return response
     content = resolve_content(response)
-    modified_content = []
     offset = [0]
 
-    def sleep(seconds):
-        def inner():
-            time.sleep(seconds)
-            return ""
-        return inner
-
     def add_content(delays, repeat=False):
         for i, (item_type, value) in enumerate(delays):
             if item_type == "bytes":
-                modified_content.append(content[offset[0]:offset[0] + value])
+                yield content[offset[0]:offset[0] + value]
                 offset[0] += value
             elif item_type == "delay":
-                modified_content.append(sleep(value))
+                time.sleep(value)
             elif item_type == "repeat":
-                assert i == len(delays) - 1
+                if i != len(delays) - 1:
+                    continue
                 while offset[0] < len(content):
-                    add_content(delays[-(value + 1):-1], True)
+                    for item in add_content(delays[-(value + 1):-1], True):
+                        yield item
 
         if not repeat and offset[0] < len(content):
-            modified_content.append(content[offset[0]:])
+            yield content[offset[0]:]
 
-    add_content(delays)
-
-    response.content = modified_content
+    response.content = add_content(delays)
     return response
 
 
 @pipe(nullable(int), opt(nullable(int)))
 def slice(request, response, start, end=None):
     """Send a byte range of the response body
 
     :param start: The starting offset. Follows python semantics including
--- a/testing/web-platform/tests/tools/wptserve/wptserve/response.py
+++ b/testing/web-platform/tests/tools/wptserve/wptserve/response.py
@@ -163,23 +163,35 @@ class Response(object):
                     self.headers.append(("Set-Cookie", m.OutputString()))
 
     def delete_cookie(self, name, path="/", domain=None):
         """Delete a cookie on the client by setting it to the empty string
         and to expire in the past"""
         self.set_cookie(name, None, path=path, domain=domain, max_age=0,
                         expires=timedelta(days=-1))
 
-    def iter_content(self):
+    def iter_content(self, read_file=False):
         """Iterator returning chunks of response body content.
 
         If any part of the content is a function, this will be called
-        and the resulting value (if any) returned."""
-        if type(self.content) in types.StringTypes:
+        and the resulting value (if any) returned.
+
+        :param read_file: - boolean controlling the behaviour when content
+        is a file handle. When set to False the handle will be returned directly
+        allowing the file to be passed to the output in small chunks. When set to
+        True, the entire content of the file will be returned as a string facilitating
+        non-streaming operations like template substitution.
+        """
+        if isinstance(self.content, types.StringTypes):
             yield self.content
+        elif hasattr(self.content, "read"):
+            if read_file:
+                yield self.content.read()
+            else:
+                yield self.content
         else:
             for item in self.content:
                 if hasattr(item, "__call__"):
                     value = item()
                 else:
                     value = item
                 if value:
                     yield value
@@ -350,16 +362,17 @@ class ResponseWriter(object):
     def __init__(self, handler, response):
         self._wfile = handler.wfile
         self._response = response
         self._handler = handler
         self._headers_seen = set()
         self._headers_complete = False
         self.content_written = False
         self.request = response.request
+        self.file_chunk_size = 32 * 1024
 
     def write_status(self, code, message=None):
         """Write out the status line of a response.
 
         :param code: The integer status code of the response.
         :param message: The message of the response. Defaults to the message commonly used
                         with the status code."""
         if message is None:
@@ -406,30 +419,46 @@ class ResponseWriter(object):
         if "content-length" not in self._headers_seen:
             self._response.close_connection = True
         if not self._response.explicit_flush:
             self.flush()
         self._headers_complete = True
 
     def write_content(self, data):
         """Write the body of the response."""
-        self.write(self.encode(data))
+        if isinstance(data, types.StringTypes):
+            self.write(data)
+        else:
+            self.write_content_file(data)
         if not self._response.explicit_flush:
             self.flush()
 
     def write(self, data):
         """Write directly to the response, converting unicode to bytes
         according to response.encoding. Does not flush."""
         self.content_written = True
         try:
             self._wfile.write(self.encode(data))
         except socket.error:
             # This can happen if the socket got closed by the remote end
             pass
 
+    def write_content_file(self, data):
+        """Write a file-like object directly to the response in chunks.
+        Does not flush."""
+        self.content_written = True
+        while True:
+            buf = data.read(self.file_chunk_size)
+            if not buf:
+                break
+            try:
+                self._wfile.write(buf)
+            except socket.error:
+                break
+
     def encode(self, data):
         """Convert unicode to bytes according to response.encoding."""
         if isinstance(data, str):
             return data
         elif isinstance(data, unicode):
             return data.encode(self._response.encoding)
         else:
             raise ValueError