diff --git a/chrome/VERSION b/chrome/VERSION
index 02cf3d71..f8b8ab324 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=61
 MINOR=0
-BUILD=3141
+BUILD=3142
 PATCH=0
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
index 5c93a62..6645f1d 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -4411,8 +4411,6 @@
 crbug.com/591099 external/wpt/css/css-display-3/display-contents-multicol-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-display-3/display-flow-root-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/Flexible-order.html [ Crash Failure Pass ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/auto-margins-001-ref.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/auto-margins-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-reverse-wrap-reverse.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-reverse-wrap.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/css-flexbox-row-wrap-reverse.html [ Failure ]
@@ -4577,10 +4575,6 @@
 crbug.com/591099 external/wpt/css/css-flexbox-1/flexbox_wrap.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/order/order-with-row-reverse.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/percentage-heights-000.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/percentage-widths-001.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/position-absolute-002.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/position-absolute-004.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-flexbox-1/position-absolute-005.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/ttwf-reftest-flex-align-content-center.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/ttwf-reftest-flex-align-content-end.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox-1/ttwf-reftest-flex-align-content-space-around.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/NeverFixTests b/third_party/WebKit/LayoutTests/NeverFixTests
index cf6fb0546..3bfeabd 100644
--- a/third_party/WebKit/LayoutTests/NeverFixTests
+++ b/third_party/WebKit/LayoutTests/NeverFixTests
@@ -582,6 +582,20 @@
 external/wpt/css/css-ui-3/resize-005.html [ WontFix ]
 external/wpt/css/css-ui-3/resize-006.html [ WontFix ]
 external/wpt/css/css-ui-3/resize-007.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-008.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-009.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-010.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-011.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-012.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-013.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-014.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-015.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-016.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-017.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-018.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-019.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-020.html [ WontFix ]
+external/wpt/css/css-ui-3/resize-021.html [ WontFix ]
 external/wpt/css/css-ui-3/select-cursor-001-manual.html [ WontFix ]
 external/wpt/css/css-ui-3/text-overflow.html [ WontFix ]
 external/wpt/css/css-writing-modes-3/background-position-vlr-003.xht [ WontFix ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index b410d9a0..75de2e7 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -1223,7 +1223,6 @@
 crbug.com/377696 printing/setPrinting.html [ Skip ]
 crbug.com/377696 printing/width-overflow.html [ Skip ]
 
-crbug.com/474987 [ Win Mac ] external/wpt/css/css-flexbox-1/auto-margins-001.html [ Failure ]
 
 crbug.com/658305 css3/filters/buffer-offset.html [ Failure Pass ]
 crbug.com/658305 css3/filters/effect-all-on-background-hw.html [ Failure Pass ]
@@ -2023,6 +2022,7 @@
 crbug.com/626703 virtual/threaded/transitions/transition-end-event-multiple-03.html [ Pass Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/workers/name-property.html [ Timeout ]
 crbug.com/626703 external/wpt/pointerevents/pointerevent_disabled_form_control-manual.html [ Timeout Pass ]
 crbug.com/626703 external/wpt/css/CSS2/text/text-align-white-space-003.xht [ Failure ]
 crbug.com/626703 external/wpt/css/CSS2/text/text-align-white-space-007.xht [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index 8180503..d16116c0 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -2065,6 +2065,90 @@
      {}
     ]
    ],
+   "css/css-ui-3/resize-008.html": [
+    [
+     "/css/css-ui-3/resize-008.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-009.html": [
+    [
+     "/css/css-ui-3/resize-009.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-010.html": [
+    [
+     "/css/css-ui-3/resize-010.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-011.html": [
+    [
+     "/css/css-ui-3/resize-011.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-012.html": [
+    [
+     "/css/css-ui-3/resize-012.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-013.html": [
+    [
+     "/css/css-ui-3/resize-013.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-014.html": [
+    [
+     "/css/css-ui-3/resize-014.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-015.html": [
+    [
+     "/css/css-ui-3/resize-015.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-016.html": [
+    [
+     "/css/css-ui-3/resize-016.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-017.html": [
+    [
+     "/css/css-ui-3/resize-017.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-018.html": [
+    [
+     "/css/css-ui-3/resize-018.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-019.html": [
+    [
+     "/css/css-ui-3/resize-019.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-020.html": [
+    [
+     "/css/css-ui-3/resize-020.html",
+     {}
+    ]
+   ],
+   "css/css-ui-3/resize-021.html": [
+    [
+     "/css/css-ui-3/resize-021.html",
+     {}
+    ]
+   ],
    "css/css-ui-3/select-cursor-001-manual.html": [
     [
      "/css/css-ui-3/select-cursor-001-manual.html",
@@ -4032,6 +4116,12 @@
      "/webstorage/storage_session-manual.html",
      {}
     ]
+   ],
+   "webusb/usb-manual.https.html": [
+    [
+     "/webusb/usb-manual.https.html",
+     {}
+    ]
    ]
   },
   "reftest": {
@@ -58635,6 +58725,18 @@
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/tables/table-direction.html": [
+    [
+     "/html/rendering/non-replaced-elements/tables/table-direction.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/tables/table-direction-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/tables/table-layout.html": [
     [
      "/html/rendering/non-replaced-elements/tables/table-layout.html",
@@ -58647,6 +58749,30 @@
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/tables/table-row-direction.html": [
+    [
+     "/html/rendering/non-replaced-elements/tables/table-row-direction.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/tables/table-row-direction-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/tables/table-row-group-direction.html": [
+    [
+     "/html/rendering/non-replaced-elements/tables/table-row-group-direction.html",
+     [
+      [
+       "/html/rendering/non-replaced-elements/tables/table-row-group-direction-ref.html",
+       "=="
+      ]
+     ],
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/tables/table-width-150percent.html": [
     [
      "/html/rendering/non-replaced-elements/tables/table-width-150percent.html",
@@ -65176,6 +65302,21 @@
      {}
     ]
    ],
+   "IndexedDB/idbcursor_continue_index3-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "IndexedDB/idbcursor_iterating_objectstore2-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "IndexedDB/idbindex_count4-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "IndexedDB/idbobjectstore_createIndex15-autoincrement-expected.txt": [
     [
      {}
@@ -65196,6 +65337,21 @@
      {}
     ]
    ],
+   "IndexedDB/key_valid-expected.txt": [
+    [
+     {}
+    ]
+   ],
+   "IndexedDB/nested-cloning-common.js": [
+    [
+     {}
+    ]
+   ],
+   "IndexedDB/request_bubble-and-capture-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "IndexedDB/support-promises.js": [
     [
      {}
@@ -65206,6 +65362,11 @@
      {}
     ]
    ],
+   "IndexedDB/transaction-abort-multiple-metadata-revert-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "WebCryptoAPI/README.md": [
     [
      {}
@@ -73866,6 +74027,11 @@
      {}
     ]
    ],
+   "css/css-grid-1/test-plan/index.html": [
+    [
+     {}
+    ]
+   ],
    "css/css-position-3/position-sticky-bottom-ref.html": [
     [
      {}
@@ -74481,6 +74647,11 @@
      {}
     ]
    ],
+   "css/css-shapes-1/test-plan/index.html": [
+    [
+     {}
+    ]
+   ],
    "css/css-text-3/i18n/css3-text-line-break-baspglwj-026-expected.txt": [
     [
      {}
@@ -78381,6 +78552,16 @@
      {}
     ]
    ],
+   "css/css-ui-3/support/orange.png": [
+    [
+     {}
+    ]
+   ],
+   "css/css-ui-3/support/orange.svg": [
+    [
+     {}
+    ]
+   ],
    "css/css-ui-3/support/r1-1.svg": [
     [
      {}
@@ -78391,6 +78572,21 @@
      {}
     ]
    ],
+   "css/css-ui-3/support/test.mp4": [
+    [
+     {}
+    ]
+   ],
+   "css/css-ui-3/support/test.ogv": [
+    [
+     {}
+    ]
+   ],
+   "css/css-ui-3/support/test.webm": [
+    [
+     {}
+    ]
+   ],
    "css/css-ui-3/support/w100.svg": [
     [
      {}
@@ -80726,6 +80922,86 @@
      {}
     ]
    ],
+   "css/css-writing-modes-3/test-plan/img/figure-over_and_under-fail.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/figure-over_and_under-pass.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/figure-rendering-tcu.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/figure-tcufont.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/heavy_h.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/heavy_h_rotated.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/over_and_under.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/pointing_right.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/pointing_up.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/square_black.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/square_blank.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/stripe_double.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/stripe_quad.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/img/stripe_triple.svg": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/index.html": [
+    [
+     {}
+    ]
+   ],
+   "css/css-writing-modes-3/test-plan/req-tcu-font.html": [
+    [
+     {}
+    ]
+   ],
    "css/css-writing-modes-3/text-align-vlr-009-ref.xht": [
     [
      {}
@@ -82626,6 +82902,11 @@
      {}
     ]
    ],
+   "cssom-view/cssom-getClientRects-002-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "cssom-view/cssom-view/window-interface-expected.txt": [
     [
      {}
@@ -83856,11 +84137,6 @@
      {}
     ]
    ],
-   "domxpath/interfaces-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "domxpath/xml_xpath_tests.xml": [
     [
      {}
@@ -84641,6 +84917,11 @@
      {}
     ]
    ],
+   "encoding/legacy-mb-tchinese/big5/big5-enc-ascii-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html.headers": [
     [
      {}
@@ -93786,6 +94067,11 @@
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/tables/table-direction-ref.html": [
+    [
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/tables/table-layout-notref.html": [
     [
      {}
@@ -93796,6 +94082,16 @@
      {}
     ]
    ],
+   "html/rendering/non-replaced-elements/tables/table-row-direction-ref.html": [
+    [
+     {}
+    ]
+   ],
+   "html/rendering/non-replaced-elements/tables/table-row-group-direction-ref.html": [
+    [
+     {}
+    ]
+   ],
    "html/rendering/non-replaced-elements/tables/table-width-150percent-ref.html": [
     [
      {}
@@ -95806,6 +96102,26 @@
      {}
     ]
    ],
+   "html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8-with-charset-header.js": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8.js": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/resources/import-utf8-with-charset-header.js": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/resources/import-utf8.js": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/scripting-1/the-script-element/module/set-currentScript-on-window.js": [
     [
      {}
@@ -95851,6 +96167,21 @@
      {}
     ]
    ],
+   "html/semantics/scripting-1/the-script-element/resources/bom-utf-16be.js": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/resources/bom-utf-16le.js": [
+    [
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/resources/bom-utf-8.js": [
+    [
+     {}
+    ]
+   ],
    "html/semantics/scripting-1/the-script-element/resources/cocoa-module.js": [
     [
      {}
@@ -97616,6 +97947,11 @@
      {}
     ]
    ],
+   "interfaces/dedicated-workers.idl": [
+    [
+     {}
+    ]
+   ],
    "interfaces/dom.idl": [
     [
      {}
@@ -97661,6 +97997,11 @@
      {}
     ]
    ],
+   "interfaces/webusb.idl": [
+    [
+     {}
+    ]
+   ],
    "keyboard-lock/idlharness.https-expected.txt": [
     [
      {}
@@ -98176,6 +98517,11 @@
      {}
     ]
    ],
+   "mediacapture-streams/MediaDevices-IDL-all-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "mediacapture-streams/MediaDevices-IDL-enumerateDevices-expected.txt": [
     [
      {}
@@ -102836,11 +103182,6 @@
      {}
     ]
    ],
-   "service-workers/service-worker/claim-fetch.https-expected.txt": [
-    [
-     {}
-    ]
-   ],
    "service-workers/service-worker/clients-get-client-types.https-expected.txt": [
     [
      {}
@@ -103791,7 +104132,7 @@
      {}
     ]
    ],
-   "service-workers/service-worker/resources/opaque-response-preloaded-iframe.html": [
+   "service-workers/service-worker/resources/opaque-response-being-preloaded-xhr.html": [
     [
      {}
     ]
@@ -103801,6 +104142,11 @@
      {}
     ]
    ],
+   "service-workers/service-worker/resources/opaque-response-preloaded-xhr.html": [
+    [
+     {}
+    ]
+   ],
    "service-workers/service-worker/resources/other.html": [
     [
      {}
@@ -105671,6 +106017,11 @@
      {}
     ]
    ],
+   "webrtc/RTCPeerConnection-connectionState-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "webrtc/RTCPeerConnection-constructor-expected.txt": [
     [
      {}
@@ -105701,6 +106052,11 @@
      {}
     ]
    ],
+   "webrtc/RTCPeerConnection-iceConnectionState-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "webrtc/RTCPeerConnection-iceGatheringState-expected.txt": [
     [
      {}
@@ -105711,6 +106067,11 @@
      {}
     ]
    ],
+   "webrtc/RTCPeerConnection-removeTrack-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "webrtc/RTCPeerConnection-setRemoteDescription-expected.txt": [
     [
      {}
@@ -105721,6 +106082,11 @@
      {}
     ]
    ],
+   "webrtc/RTCRtpSender-replaceTrack-expected.txt": [
+    [
+     {}
+    ]
+   ],
    "webrtc/RTCSctpTransport-constructor-expected.txt": [
     [
      {}
@@ -106061,6 +106427,21 @@
      {}
     ]
    ],
+   "webusb/resources/fake-devices.js": [
+    [
+     {}
+    ]
+   ],
+   "webusb/resources/open-in-iframe.html": [
+    [
+     {}
+    ]
+   ],
+   "webusb/resources/usb-helpers.js": [
+    [
+     {}
+    ]
+   ],
    "webusb/usb-allowed-by-feature-policy.https.sub.html.headers": [
     [
      {}
@@ -108356,11 +108737,6 @@
      {}
     ]
    ],
-   "workers/interfaces.idl": [
-    [
-     {}
-    ]
-   ],
    "workers/interfaces/DedicatedWorkerGlobalScope/postMessage/message-event.js": [
     [
      {}
@@ -108626,6 +109002,11 @@
      {}
     ]
    ],
+   "workers/support/name-as-accidental-global.js": [
+    [
+     {}
+    ]
+   ],
    "workers/support/name.js": [
     [
      {}
@@ -115385,14 +115766,6 @@
      }
     ]
    ],
-   "IndexedDB/large-nested-cloning.html": [
-    [
-     "/IndexedDB/large-nested-cloning.html",
-     {
-      "timeout": "long"
-     }
-    ]
-   ],
    "IndexedDB/large-requests-abort.html": [
     [
      "/IndexedDB/large-requests-abort.html",
@@ -115413,6 +115786,30 @@
      {}
     ]
    ],
+   "IndexedDB/nested-cloning-large-multiple.html": [
+    [
+     "/IndexedDB/nested-cloning-large-multiple.html",
+     {
+      "timeout": "long"
+     }
+    ]
+   ],
+   "IndexedDB/nested-cloning-large.html": [
+    [
+     "/IndexedDB/nested-cloning-large.html",
+     {
+      "timeout": "long"
+     }
+    ]
+   ],
+   "IndexedDB/nested-cloning-small.html": [
+    [
+     "/IndexedDB/nested-cloning-small.html",
+     {
+      "timeout": "long"
+     }
+    ]
+   ],
    "IndexedDB/objectstore_keyorder.htm": [
     [
      "/IndexedDB/objectstore_keyorder.htm",
@@ -120547,6 +120944,12 @@
      {}
     ]
    ],
+   "css/css-flexbox-1/percentage-heights-001.html": [
+    [
+     "/css/css-flexbox-1/percentage-heights-001.html",
+     {}
+    ]
+   ],
    "css/css-grid-1/alignment/grid-self-alignment-stretch-001.html": [
     [
      "/css/css-grid-1/alignment/grid-self-alignment-stretch-001.html",
@@ -120937,6 +121340,12 @@
      {}
     ]
    ],
+   "css/css-position-3/position-sticky-offset-top-left.html": [
+    [
+     "/css/css-position-3/position-sticky-offset-top-left.html",
+     {}
+    ]
+   ],
    "css/css-position-3/position-sticky-parsing.html": [
     [
      "/css/css-position-3/position-sticky-parsing.html",
@@ -134147,6 +134556,24 @@
      {}
     ]
    ],
+   "html/semantics/scripting-1/the-script-element/module/charset-01.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/module/charset-01.html",
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/charset-02.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/module/charset-02.html",
+     {}
+    ]
+   ],
+   "html/semantics/scripting-1/the-script-element/module/charset-03.html": [
+    [
+     "/html/semantics/scripting-1/the-script-element/module/charset-03.html",
+     {}
+    ]
+   ],
    "html/semantics/scripting-1/the-script-element/module/compilation-error-1.html": [
     [
      "/html/semantics/scripting-1/the-script-element/module/compilation-error-1.html",
@@ -164327,6 +164754,60 @@
      {}
     ]
    ],
+   "webusb/usbConnectionEvent.https.html": [
+    [
+     "/webusb/usbConnectionEvent.https.html",
+     {}
+    ]
+   ],
+   "webusb/usbDevice-iframe.https.html": [
+    [
+     "/webusb/usbDevice-iframe.https.html",
+     {}
+    ]
+   ],
+   "webusb/usbDevice.https.html": [
+    [
+     "/webusb/usbDevice.https.html",
+     {}
+    ]
+   ],
+   "webusb/usbInTransferResult.https.html": [
+    [
+     "/webusb/usbInTransferResult.https.html",
+     {}
+    ]
+   ],
+   "webusb/usbIsochronousInTransferPacket.https.html": [
+    [
+     "/webusb/usbIsochronousInTransferPacket.https.html",
+     {}
+    ]
+   ],
+   "webusb/usbIsochronousInTransferResult.https.html": [
+    [
+     "/webusb/usbIsochronousInTransferResult.https.html",
+     {}
+    ]
+   ],
+   "webusb/usbIsochronousOutTransferPacket.https.html": [
+    [
+     "/webusb/usbIsochronousOutTransferPacket.https.html",
+     {}
+    ]
+   ],
+   "webusb/usbIsochronousOutTransferResult.https.html": [
+    [
+     "/webusb/usbIsochronousOutTransferResult.https.html",
+     {}
+    ]
+   ],
+   "webusb/usbOutTransferResult.https.html": [
+    [
+     "/webusb/usbOutTransferResult.https.html",
+     {}
+    ]
+   ],
    "webvr/idlharness.html": [
     [
      "/webvr/idlharness.html",
@@ -169859,7 +170340,7 @@
    "support"
   ],
   "./.travis.yml": [
-   "130d5c86ee06fc2bff6779ec8db90a86db7f0547",
+   "9f2adb9dff658274255e743a71372320968c2d00",
    "support"
   ],
   "./CONTRIBUTING.md": [
@@ -169899,7 +170380,7 @@
    "support"
   ],
   "./lint.whitelist": [
-   "59074d9f9b155631ac1bf03a9b4b40175ca8b538",
+   "fcf18952cf69e6aae904c8b208abaf33c928080e",
    "support"
   ],
   "./update-built-tests.sh": [
@@ -174814,6 +175295,10 @@
    "cbec9b06016acc1af49b3e0a673b2905773114f6",
    "testharness"
   ],
+  "IndexedDB/idbcursor_continue_index3-expected.txt": [
+   "1d69a1cffcd64c05bab8aa0ab0efa56b59568a79",
+   "support"
+  ],
   "IndexedDB/idbcursor_continue_index3.htm": [
    "6d37c3e1996d0f54d87a29b2a65d3bb76736cba2",
    "testharness"
@@ -174922,6 +175407,10 @@
    "728242c9f1b72b7348c68c2723b25765bab64332",
    "testharness"
   ],
+  "IndexedDB/idbcursor_iterating_objectstore2-expected.txt": [
+   "3ef1f02a86fe71c5096111ac2df33c734205da6d",
+   "support"
+  ],
   "IndexedDB/idbcursor_iterating_objectstore2.htm": [
    "811427a853df6d79e671569b87a95e51b3e06070",
    "testharness"
@@ -175254,6 +175743,10 @@
    "e60732dbfc5de408f3ea32007ae22ee34b337ed8",
    "testharness"
   ],
+  "IndexedDB/idbindex_count4-expected.txt": [
+   "9f7bdd476be5f8ae6c9b7692e338894d1b43eaa4",
+   "support"
+  ],
   "IndexedDB/idbindex_count4.htm": [
    "9deabbce03168c216316a8eb8d317089fb26cd02",
    "testharness"
@@ -175810,6 +176303,10 @@
    "8c0257c4231c413dde10c6f541f17f57634bff1c",
    "testharness"
   ],
+  "IndexedDB/key_valid-expected.txt": [
+   "f3b51f5baf287c6b05304501ab1f85042703d66b",
+   "support"
+  ],
   "IndexedDB/key_valid.html": [
    "85d0f455f5116e0754bf29fe6ba5052e7a7563a7",
    "testharness"
@@ -175858,10 +176355,6 @@
    "ef0680b2623521388e23654b5428cbfb553b4ee8",
    "testharness"
   ],
-  "IndexedDB/large-nested-cloning.html": [
-   "831510a9d36a19081cf037940b19092e37303e19",
-   "testharness"
-  ],
   "IndexedDB/large-requests-abort.html": [
    "7b8b1ccb8b7f9d737b648ceade5192a57c4ad690",
    "testharness"
@@ -175874,6 +176367,22 @@
    "d08882dc03b23cedaf1369c76937c95fec69df1e",
    "testharness"
   ],
+  "IndexedDB/nested-cloning-common.js": [
+   "6e96fe11781f75b6beca649e9264c5e990ea7ffc",
+   "support"
+  ],
+  "IndexedDB/nested-cloning-large-multiple.html": [
+   "6e16a5af0faab1406b6a2ae18397178b24440796",
+   "testharness"
+  ],
+  "IndexedDB/nested-cloning-large.html": [
+   "5981f9fd67f8487e27494aea57cf3dae9eacb3e6",
+   "testharness"
+  ],
+  "IndexedDB/nested-cloning-small.html": [
+   "9b9c7e27e3b80fc49c06406e05c251d2c66dacb0",
+   "testharness"
+  ],
   "IndexedDB/objectstore_keyorder.htm": [
    "dda6c0ad4832b2a48980efdcb0efdae995c43fdd",
    "testharness"
@@ -175894,6 +176403,10 @@
    "44e8124ba121e64d82e47a99735e1a1df4f8ed44",
    "testharness"
   ],
+  "IndexedDB/request_bubble-and-capture-expected.txt": [
+   "f14dd2c3e50689b38e5d2bb64153d6bd8ad077bc",
+   "support"
+  ],
   "IndexedDB/request_bubble-and-capture.htm": [
    "9c486babd57c2d14bb251d5bba202b3dbd6c802d",
    "testharness"
@@ -175918,6 +176431,10 @@
    "07a6e888f303a42e66f2afaa98c9941e08ce2aa2",
    "testharness"
   ],
+  "IndexedDB/transaction-abort-multiple-metadata-revert-expected.txt": [
+   "80751b784577c0ccc82e1e74b6bb51eeb821c972",
+   "support"
+  ],
   "IndexedDB/transaction-abort-multiple-metadata-revert.html": [
    "204ed174a936fe4a91c36e00559845287ae31748",
    "testharness"
@@ -180611,7 +181128,7 @@
    "testharness"
   ],
   "content-security-policy/securitypolicyviolation/idl-expected.txt": [
-   "3606099a0a700e33b39271142d5bb92a66bb0c64",
+   "8a26544297000dbcd2ad096b596bfb2b53e28807",
    "support"
   ],
   "content-security-policy/securitypolicyviolation/idl.html": [
@@ -180639,11 +181156,11 @@
    "testharness"
   ],
   "content-security-policy/securitypolicyviolation/script-sample-no-opt-in.html": [
-   "44cad18dc963c49062c0f3b7ea7a8951157cbcb7",
+   "f36718ff0a9040db0b9257f772f5bcae98ae2305",
    "testharness"
   ],
   "content-security-policy/securitypolicyviolation/script-sample.html": [
-   "27315dd1baa98901e99a0cae82efc449924e496b",
+   "9e2ad606d8c3d17f6417134f84aef32305c92c49",
    "testharness"
   ],
   "content-security-policy/securitypolicyviolation/securitypolicyviolation-block-cross-origin-image-from-script.sub.html": [
@@ -197250,6 +197767,10 @@
    "fbb795af85abb6bb28a2c3ac94012aad7e99b45b",
    "testharness"
   ],
+  "css/css-flexbox-1/percentage-heights-001.html": [
+   "5c3c576ee34a20e61e33a9851d332c743a9f078a",
+   "testharness"
+  ],
   "css/css-flexbox-1/reference/Flexible-order-ref.html": [
    "a6a2ef286c9c2abd0456056ad17cbb0ece7dc2d4",
    "support"
@@ -198902,6 +199423,10 @@
    "a9d8444db24ab38518f07a965a8a537cc6add437",
    "support"
   ],
+  "css/css-grid-1/test-plan/index.html": [
+   "e633dc7584fbc7bfe99177aa5dd9fbd107a2d3f5",
+   "support"
+  ],
   "css/css-position-3/position-sticky-bottom-ref.html": [
    "726d6e927d84669e9355701ccd948349d377e6fd",
    "support"
@@ -198911,7 +199436,7 @@
    "reftest"
   ],
   "css/css-position-3/position-sticky-get-bounding-client-rect.html": [
-   "77da4ac9e0eea6433c4fa890cd4a2151f46c35a3",
+   "5b9a1a29084f46228749c1b2b1a664be3ce02c43",
    "testharness"
   ],
   "css/css-position-3/position-sticky-left-ref.html": [
@@ -198922,6 +199447,10 @@
    "5151bca08dff652ea728cb8bccbb6b7c6d364dd8",
    "reftest"
   ],
+  "css/css-position-3/position-sticky-offset-top-left.html": [
+   "a25b64d016644c272ea92b6129a59eefb21d2fa0",
+   "testharness"
+  ],
   "css/css-position-3/position-sticky-parsing.html": [
    "224bc984bc6eb4a55931461cf7e51f7b04d219f4",
    "testharness"
@@ -200290,6 +200819,10 @@
    "078e1dd6dd61d36cec239ed75d02051f61fe60a5",
    "support"
   ],
+  "css/css-shapes-1/test-plan/index.html": [
+   "5bb192165bcb7d9a619d86dbff61831fc8de71cb",
+   "support"
+  ],
   "css/css-text-3/i18n/css3-text-line-break-baspglwj-001.html": [
    "b08dfce276ccafb057c793d69c25cf0caff332cc",
    "testharness"
@@ -206502,6 +207035,62 @@
    "ec49229d583a225738a3f514ae280d1ddfafd199",
    "manual"
   ],
+  "css/css-ui-3/resize-008.html": [
+   "8ab240226c30f6c13c368ea2d9d36812624cee21",
+   "manual"
+  ],
+  "css/css-ui-3/resize-009.html": [
+   "3a0c023506f975edb6b33d8f33a45911b767476a",
+   "manual"
+  ],
+  "css/css-ui-3/resize-010.html": [
+   "25eb9b36b22d59fca313dd2bc5bd01482b1e97ab",
+   "manual"
+  ],
+  "css/css-ui-3/resize-011.html": [
+   "e748077bb1f53f0298ff0a90122243e088c74512",
+   "manual"
+  ],
+  "css/css-ui-3/resize-012.html": [
+   "b46a69991f46cd17379c560bca5775ee9b615e51",
+   "manual"
+  ],
+  "css/css-ui-3/resize-013.html": [
+   "26714a476eb6e6b34e006bd004907ac51f61a062",
+   "manual"
+  ],
+  "css/css-ui-3/resize-014.html": [
+   "e31a1fba24516a5b64d5934f1d0f89337d52226c",
+   "manual"
+  ],
+  "css/css-ui-3/resize-015.html": [
+   "c994a65d309d23f2cedb38645b521f36325d9224",
+   "manual"
+  ],
+  "css/css-ui-3/resize-016.html": [
+   "3c08942b3f27ab8b90fcbad01fbc96c778a5bcaa",
+   "manual"
+  ],
+  "css/css-ui-3/resize-017.html": [
+   "b333ab876e53b194a5f292152fa3277d643ff50d",
+   "manual"
+  ],
+  "css/css-ui-3/resize-018.html": [
+   "38c5691917b0a1fdfffb5347beadd824e6e7ceda",
+   "manual"
+  ],
+  "css/css-ui-3/resize-019.html": [
+   "aabb0e62b8fa9b51d663c7759442ff4d7fbfe3b7",
+   "manual"
+  ],
+  "css/css-ui-3/resize-020.html": [
+   "dae674378da42d37720c2e892525da3c6df564e4",
+   "manual"
+  ],
+  "css/css-ui-3/resize-021.html": [
+   "cb95c6ff5f784bcd91a044a5ed3fcc2ae311f388",
+   "manual"
+  ],
   "css/css-ui-3/select-cursor-001-manual.html": [
    "192de157a390bef30b481257c3979c117c08e6fa",
    "manual"
@@ -207394,6 +207983,14 @@
    "aba357c58d6c4ce9975e2dd5dd9ef704895b4afb",
    "support"
   ],
+  "css/css-ui-3/support/orange.png": [
+   "df451ef5ab05264d56616c24d94fde0e0882fff7",
+   "support"
+  ],
+  "css/css-ui-3/support/orange.svg": [
+   "2d1dffcb42c54326795ed90700d23b7347a1644b",
+   "support"
+  ],
   "css/css-ui-3/support/r1-1.svg": [
    "e2eb4fc2608d74be2156eccb5ea5a22866e6eb66",
    "support"
@@ -207402,6 +207999,18 @@
    "559cf518d41b151bac2638045093ca0a0d9317e8",
    "support"
   ],
+  "css/css-ui-3/support/test.mp4": [
+   "2750d8491565f07a5f09eadfe1a1f0336a3ca26a",
+   "support"
+  ],
+  "css/css-ui-3/support/test.ogv": [
+   "25cc63ff816d5bfb039da788131050dba9d7dc6c",
+   "support"
+  ],
+  "css/css-ui-3/support/test.webm": [
+   "a06d964d2c7a770ddfc375532d06b94bf1a83c3c",
+   "support"
+  ],
   "css/css-ui-3/support/w100.svg": [
    "a82922abdcaba31b934a27cbc43bca3bd46de54b",
    "support"
@@ -209435,11 +210044,11 @@
    "reftest"
   ],
   "css/css-writing-modes-3/contiguous-floated-table-vlr-007.xht": [
-   "cdefb61a7766ee846c81553a6797fcb263a8dc35",
+   "b03e26b2eb2ae9eddd76cd4b96c004f10cfb15f1",
    "reftest"
   ],
   "css/css-writing-modes-3/contiguous-floated-table-vlr-009.xht": [
-   "b892a1a4c51ebfe2b8446c9787d001af64283a3d",
+   "e4969ad20f4892e539f4b6af959f544d0a1c02e6",
    "reftest"
   ],
   "css/css-writing-modes-3/contiguous-floated-table-vrl-002.xht": [
@@ -209451,11 +210060,11 @@
    "reftest"
   ],
   "css/css-writing-modes-3/contiguous-floated-table-vrl-006.xht": [
-   "43da7e1c56b3f983b4eac3c153ff0e29c24b119d",
+   "64687447330f8bcf2cb03538058e329ac3eb48be",
    "reftest"
   ],
   "css/css-writing-modes-3/contiguous-floated-table-vrl-008.xht": [
-   "4baa13869a2747e865a988e8a0fb63bf4989a0e7",
+   "50908668186f32ed39a7e64ad630bd9a71c85d2b",
    "reftest"
   ],
   "css/css-writing-modes-3/different-block-flow-dir-001.xht": [
@@ -210007,11 +210616,11 @@
    "support"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-003.xht": [
-   "03b71cb044e731fcb8b58041f1f642f839061dfd",
+   "9d355624e6e9e2b868b9890aaffed418dedd81c1",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-005.xht": [
-   "983c1a4f31c170fea66c38d2a626c105a7071dfe",
+   "6ff3ba2274767fd6b710970cad62dcd00a122a3c",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-007-ref.xht": [
@@ -210019,11 +210628,11 @@
    "support"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-007.xht": [
-   "aec7be36f364fa6f90a8371a489b4b3a3cf9cf82",
+   "4ba8dc40e9c0743b6055adb173311fb2e356cce6",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-009.xht": [
-   "4f4e72f788c804eec614238c4bc21c5328f2d472",
+   "439fe965f6ea34d25e4cc9710893a0f538eef24e",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-011-ref.xht": [
@@ -210031,11 +210640,11 @@
    "support"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-011.xht": [
-   "3f63e7d48990c2a136fb932c5db1688eb9f35762",
+   "ab420fd12b1a9df50bb16434985f24edc8dcdd7a",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-013.xht": [
-   "88386222e5ff936aa5d52bcc5a1bb9424f29d6d5",
+   "15b6d066907ab67224536a045d3d12bbfc265af2",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-021-ref.xht": [
@@ -210043,7 +210652,7 @@
    "support"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-021.xht": [
-   "636042d0e21518748f09ef7df43d809f46c9872c",
+   "97661051cf530fc7810203e7068072a42570d4e8",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-023-ref.xht": [
@@ -210051,7 +210660,7 @@
    "support"
   ],
   "css/css-writing-modes-3/line-box-height-vlr-023.xht": [
-   "bc545a63f82b19898cb6e5a056eeda98a6e73110",
+   "4c6eb6c5a4e271c50f1c8e8f9b4760b6be04264a",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vrl-002-ref.xht": [
@@ -210059,11 +210668,11 @@
    "support"
   ],
   "css/css-writing-modes-3/line-box-height-vrl-002.xht": [
-   "88a19212954a57a8731e0c879bfcb1ebe439eed4",
+   "35cbc9b97dba18aae3f1fe78b5d30112f08c0505",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vrl-004.xht": [
-   "4b28eee29924e4eebe196350c9e013b6c109ad5e",
+   "3fd6410b4ead23b5b122d27a6fb8bc7ba84ae65d",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vrl-006-ref.xht": [
@@ -210071,11 +210680,11 @@
    "support"
   ],
   "css/css-writing-modes-3/line-box-height-vrl-006.xht": [
-   "80b3a935fd622bbf4928561d92315259a7af6eb5",
+   "8c4aee9b0dd61c8f2b29c8d1cad9f6b8d21d09fb",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vrl-008.xht": [
-   "ee5be203f79c6afcf49647cb20932440a2f78116",
+   "6a5d20d37ad23987efeae1f6e4ee17ae77ca2a6b",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vrl-010-ref.xht": [
@@ -210083,11 +210692,11 @@
    "support"
   ],
   "css/css-writing-modes-3/line-box-height-vrl-010.xht": [
-   "9fa7b8b6f04afcd6f506e3d55245b36091d67116",
+   "4f4038c84de1d5c7fe044e0334b8f64493e21609",
    "reftest"
   ],
   "css/css-writing-modes-3/line-box-height-vrl-012.xht": [
-   "c73fe1815124b5c6c50196d6032d9e3fa77f06f4",
+   "af9a1409c41728f261794835cdedbfa2078aa141",
    "reftest"
   ],
   "css/css-writing-modes-3/margin-collapse-vlr-003.xht": [
@@ -212518,6 +213127,70 @@
    "06da3d0196df6aae3ad342ec81cacd967423326d",
    "reftest"
   ],
+  "css/css-writing-modes-3/test-plan/img/figure-over_and_under-fail.svg": [
+   "e51cf0c5422eeeccb490e60dc4f30d675d2f28f4",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/figure-over_and_under-pass.svg": [
+   "e4418b57eec378a81852c602d694b3871caef4c3",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/figure-rendering-tcu.svg": [
+   "b0968f032fe8c38e6ffb1f5ad54a0792f54300a4",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/figure-tcufont.svg": [
+   "552887f4b1fa587defd94b8e9ae3395447ad9c36",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/heavy_h.svg": [
+   "ba3770d94514d90f7874f6465ccd1e9fa7cfe016",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/heavy_h_rotated.svg": [
+   "d03200f84acbfbb6a93cd6849990205524b4c0ab",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/over_and_under.svg": [
+   "1a6ffb20be70fb01ef009ce57536c8a11b81ba88",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/pointing_right.svg": [
+   "678ebbaca599033d6e18befedeed4c07ac2cfb17",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/pointing_up.svg": [
+   "f1b76347d00b3c5190b27b3b624b8f248066ba99",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/square_black.svg": [
+   "b7c46e7ea9bdfb729d3b8f4b371a0311de6aae3a",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/square_blank.svg": [
+   "32e9c8382c28e724dd155c10d6cf6a901bad32d7",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/stripe_double.svg": [
+   "09e4bb3f1501a46de95f85eeb2178c7012ecb51a",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/stripe_quad.svg": [
+   "aa52e04f368e535ca6bbd9931f8c5ad148241ed4",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/img/stripe_triple.svg": [
+   "3588204fc3899909510a54008833825084e574db",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/index.html": [
+   "d8052e30e0242c0a1cec6fdf72dc4cdf68ebd930",
+   "support"
+  ],
+  "css/css-writing-modes-3/test-plan/req-tcu-font.html": [
+   "94244d93ce6d7c99d2315b657585ba56b419d596",
+   "support"
+  ],
   "css/css-writing-modes-3/text-align-vlr-003.xht": [
    "ff41d51a74d280e2f9a7010ccdd908c569e7877e",
    "reftest"
@@ -213707,7 +214380,7 @@
    "testharness"
   ],
   "css/geometry-1/interfaces-expected.txt": [
-   "c3e2e95577a843b349f9a8a26db0b5c176fa0546",
+   "bb047258daf8e4026ae2a94dbd1ab92a8b86a3c3",
    "support"
   ],
   "css/geometry-1/interfaces.html": [
@@ -216398,6 +217071,10 @@
    "8dfaa313b4abad30281d07ce22ac06a61754cc06",
    "testharness"
   ],
+  "cssom-view/cssom-getClientRects-002-expected.txt": [
+   "9a34de1b85869d6354083854633b2b2c800dd784",
+   "support"
+  ],
   "cssom-view/cssom-getClientRects-002.html": [
    "da348da01e09474f652ff1dfb6869665740668d5",
    "testharness"
@@ -216875,7 +217552,7 @@
    "testharness"
   ],
   "cssom/interfaces-expected.txt": [
-   "e51a6bd20556ebe7ae6afdf64bff8081c9e36fa8",
+   "5dc9fe830179160590e75ddf075deadc074f0c63",
    "support"
   ],
   "cssom/interfaces.html": [
@@ -219146,10 +219823,6 @@
    "4842d40e22e25ee72536946d785a3cd03bc6a11d",
    "testharness"
   ],
-  "domxpath/interfaces-expected.txt": [
-   "13c20828b49356218276f9edae673736a60de9d1",
-   "support"
-  ],
   "domxpath/interfaces.html": [
    "6848bd27f62d93fa527684c5625a42f4dc6470c2",
    "testharness"
@@ -220206,6 +220879,10 @@
    "895fb1caf07ea90bea9d34db70b0974f11d6c149",
    "support"
   ],
+  "encoding/legacy-mb-tchinese/big5/big5-enc-ascii-expected.txt": [
+   "4de10207efe04b64e15201709872e3fffa45f259",
+   "support"
+  ],
   "encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html": [
    "8bede0c09c65f957d4c6545025038bef3e01e418",
    "testharness"
@@ -222087,7 +222764,7 @@
    "testharness"
   ],
   "fetch/api/request/request-idl-expected.txt": [
-   "f63c66ed3ed9b2c166952fe8b4e718a6c2b1bd58",
+   "8ca22265e999443344290f4cdfa2dfb9bc88e7a0",
    "support"
   ],
   "fetch/api/request/request-idl.html": [
@@ -222243,7 +222920,7 @@
    "testharness"
   ],
   "fetch/api/response/response-idl-expected.txt": [
-   "595dc3432b2f6053860dfe33b28b99f7fa3151e3",
+   "aedba6ed576b1adae6fba4311c276e8ef45c09aa",
    "support"
   ],
   "fetch/api/response/response-idl.html": [
@@ -222423,7 +223100,7 @@
    "testharness"
   ],
   "fetch/nosniff/stylesheet-expected.txt": [
-   "b2646db0d28b41c428e0d143092479b9d60781e1",
+   "7f17b136a42732cd9f69e46e5af04caf4541a32f",
    "support"
   ],
   "fetch/nosniff/stylesheet.html": [
@@ -222619,7 +223296,7 @@
    "testharness"
   ],
   "fullscreen/interfaces-expected.txt": [
-   "bea9670b84dfc2282da00a60ad29bf2835700e34",
+   "b9a34fdf818c6c0fcf06b2a91357fa1963b70066",
    "support"
   ],
   "fullscreen/interfaces.html": [
@@ -222915,7 +223592,7 @@
    "manual"
   ],
   "html-media-capture/idlharness-expected.txt": [
-   "03ed7481bfae8eec07f40a6a76a48e0f5f1e13f1",
+   "a1fd1490201959a01f00647584a0dd47465d68f7",
    "support"
   ],
   "html-media-capture/idlharness.html": [
@@ -232066,6 +232743,14 @@
    "699050ab3bcc8fc11d51c2ae4b9b10aee46876a5",
    "reftest"
   ],
+  "html/rendering/non-replaced-elements/tables/table-direction-ref.html": [
+   "97b303c46c7afcc29e0c56856028409c34682baa",
+   "support"
+  ],
+  "html/rendering/non-replaced-elements/tables/table-direction.html": [
+   "4c890c9b43bfec7a82a6abeee94d558db2b8f83e",
+   "reftest"
+  ],
   "html/rendering/non-replaced-elements/tables/table-layout-notref.html": [
    "a05fad3c06f94c3a617f2efdc589bbb3f5525983",
    "support"
@@ -232078,6 +232763,22 @@
    "ec05c435cfd09291184360db7e8b0c5af9c7ba31",
    "reftest"
   ],
+  "html/rendering/non-replaced-elements/tables/table-row-direction-ref.html": [
+   "5cf01204381d870738a7454080ea40904b2d0f0c",
+   "support"
+  ],
+  "html/rendering/non-replaced-elements/tables/table-row-direction.html": [
+   "433565959474b716d385c2d98d0976ae2121d6d5",
+   "reftest"
+  ],
+  "html/rendering/non-replaced-elements/tables/table-row-group-direction-ref.html": [
+   "23616d2840feaafbc6d06b1a1db18dd75d221a23",
+   "support"
+  ],
+  "html/rendering/non-replaced-elements/tables/table-row-group-direction.html": [
+   "d4b5cf18545eb48780d9a9a9bfa62ded7dc076bc",
+   "reftest"
+  ],
   "html/rendering/non-replaced-elements/tables/table-vspace-hspace-s.html": [
    "a93cbe26a0c5b9a7aeda1faf9db618f79aae8715",
    "testharness"
@@ -233643,7 +234344,7 @@
    "support"
   ],
   "html/semantics/embedded-content/the-img-element/img.complete-expected.txt": [
-   "79ae0928208c2aa00afe5480d349847ca132446e",
+   "738a438e68e442de5acc3e8e9dc03464b47152ef",
    "support"
   ],
   "html/semantics/embedded-content/the-img-element/img.complete.html": [
@@ -235274,6 +235975,18 @@
    "4014bf8d2c024f3c9bc8d90595fa9af7786fed3e",
    "support"
   ],
+  "html/semantics/scripting-1/the-script-element/module/charset-01.html": [
+   "212b17deecd882699ef7f26ffa397f4cd2a705c4",
+   "testharness"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/charset-02.html": [
+   "84794e90fb4dbd4e11fbee3e4b390b8b3f01d54e",
+   "testharness"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/charset-03.html": [
+   "364c6d3b48ef8143d62d6f6bb02aa5554b0bd367",
+   "testharness"
+  ],
   "html/semantics/scripting-1/the-script-element/module/compilation-error-1.html": [
    "e36eda2e9941e0cfefbfd867d36da6de4dfe7b2e",
    "testharness"
@@ -235570,6 +236283,22 @@
    "f09db3d2acdf3aba3fc8c67b2f089a0ba506c799",
    "support"
   ],
+  "html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8-with-charset-header.js": [
+   "5ff227dc83335d8a3e8da0161993c1de239ee7f8",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/resources/import-non-utf8.js": [
+   "263589f24f862c862ac8f47ba2de71b77bd9e5bd",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/resources/import-utf8-with-charset-header.js": [
+   "23ca0a693a1d6ee4eca34bf27c55764e769437c6",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/module/resources/import-utf8.js": [
+   "c88ce333101627fd7674c1b4ede04fd1d0cf5bae",
+   "support"
+  ],
   "html/semantics/scripting-1/the-script-element/module/script-for-event.html": [
    "c225684e0c7d09f9628aab589c8673b140994243",
    "testharness"
@@ -235650,6 +236379,18 @@
    "4ce8a4cf095d43c542aa8cbcdfd57c5cf381a97b",
    "testharness"
   ],
+  "html/semantics/scripting-1/the-script-element/resources/bom-utf-16be.js": [
+   "c5524f60baeb48504b1a62e12611c34fcb60370f",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/resources/bom-utf-16le.js": [
+   "fe79fc884260e9be74c098719136f0eb1f2dac8a",
+   "support"
+  ],
+  "html/semantics/scripting-1/the-script-element/resources/bom-utf-8.js": [
+   "5ebf2ec79435c375eeca84b12167801f0b6c576a",
+   "support"
+  ],
   "html/semantics/scripting-1/the-script-element/resources/cocoa-module.js": [
    "43291b3e6eff8267c88100990aae5d4b2a09f3bd",
    "support"
@@ -238542,6 +239283,10 @@
    "bb17bbe93776dbeb33f061a7a90889e922e3138e",
    "support"
   ],
+  "interfaces/dedicated-workers.idl": [
+   "16b2bc5c05aab5838458dfee6203b83d36b13dfd",
+   "support"
+  ],
   "interfaces/dom.idl": [
    "86f2e15d4b32af7b5127283eb3cfab5a78b46c0a",
    "support"
@@ -238578,8 +239323,12 @@
    "2e9e783362e8ea80cbad3c9c688d63b9c8256163",
    "support"
   ],
+  "interfaces/webusb.idl": [
+   "7b5749e1fece69552e0a8bfac7af401fac15394d",
+   "support"
+  ],
   "keyboard-lock/idlharness.https-expected.txt": [
-   "0c68884ea12132394c772cf6f47836fd6b17e2f1",
+   "c78b5d669f56d9f602ca93c9e7492a7fee9839b1",
    "support"
   ],
   "keyboard-lock/idlharness.https.html": [
@@ -238687,7 +239436,7 @@
    "testharness"
   ],
   "media-capabilities/idlharness-expected.txt": [
-   "af14f23f4acbb383cded87cd505c385c6e2b7567",
+   "63d4a0979b459e2d469d38042908a553016f446d",
    "support"
   ],
   "media-capabilities/idlharness.html": [
@@ -238747,7 +239496,7 @@
    "support"
   ],
   "media-source/interfaces-expected.txt": [
-   "ac79301cacf8b85a6aef29794f72b591fe42d8dd",
+   "41a616b5f8c34187c445a473990bfadaecbda8e0",
    "support"
   ],
   "media-source/interfaces.html": [
@@ -239275,7 +240024,7 @@
    "support"
   ],
   "mediacapture-fromelement/idlharness-expected.txt": [
-   "83a8c21a64c39f0f711431d1ca0374b2c647d678",
+   "8a4cd1bf27e02170c3dace68de4bd1723a2f25fa",
    "support"
   ],
   "mediacapture-fromelement/idlharness.html": [
@@ -239295,7 +240044,7 @@
    "testharness"
   ],
   "mediacapture-record/idlharness-expected.txt": [
-   "3be36abad0f463a1d7ec5d0cc7ae3c055d8326af",
+   "15c47d282eedba507c099d404e44848b4e4b6e74",
    "support"
   ],
   "mediacapture-record/idlharness.html": [
@@ -239346,12 +240095,16 @@
    "bfd825c8fb46797d043d57d70689a766fa557bd3",
    "testharness"
   ],
+  "mediacapture-streams/MediaDevices-IDL-all-expected.txt": [
+   "26a244770dd0578e9f9b8f0194e1c6837d926ad8",
+   "support"
+  ],
   "mediacapture-streams/MediaDevices-IDL-all.html": [
-   "f1927866a05c7700dc2218e3a45eae1532a4171c",
+   "2d9b604f3039fd5bebbe0491f0bb31d5b0b47722",
    "testharness"
   ],
   "mediacapture-streams/MediaDevices-IDL-enumerateDevices-expected.txt": [
-   "4fcd65f6b323caa19064d921f352d56fddf30cf3",
+   "0f2cdc842faac1e6425df74e8029cdea893e15c1",
    "support"
   ],
   "mediacapture-streams/MediaDevices-IDL-enumerateDevices.html": [
@@ -239439,7 +240192,7 @@
    "testharness"
   ],
   "mediacapture-streams/MediaStreamTrack-init.https-expected.txt": [
-   "cc9a4ecff855ec2cffcd830bd3418b32d07004c8",
+   "36aea560450ddb3cbeea30e6b8d3d34a55081699",
    "support"
   ],
   "mediacapture-streams/MediaStreamTrack-init.https.html": [
@@ -239459,7 +240212,7 @@
    "support"
   ],
   "mediasession/idlharness-expected.txt": [
-   "510ce0bc3214192130ef4d8f0cc05906af283482",
+   "5b32854f7c36eb7dcd421de90382bd664c6ac666",
    "support"
   ],
   "mediasession/idlharness.html": [
@@ -247587,7 +248340,7 @@
    "manual"
   ],
   "orientation-event/idlharness-expected.txt": [
-   "5f7d397f4e607383dc21f67dfe7dda3f36d41e44",
+   "0ed66e5c56365883369a9dd2f6f9f318d04e511c",
    "support"
   ],
   "orientation-event/idlharness.html": [
@@ -247659,7 +248412,7 @@
    "testharness"
   ],
   "page-visibility/idlharness-expected.txt": [
-   "557dcfc267cb643467559c40acf8614b04c79a89",
+   "b029990e4d570e3b511c3837007dae7797cc484e",
    "support"
   ],
   "page-visibility/idlharness.html": [
@@ -248247,7 +249000,7 @@
    "testharness"
   ],
   "pointerlock/idlharness-expected.txt": [
-   "985868c8e54bf365dbca5e810714ab30e2779d07",
+   "2ab8d7035e48deac2307e4fd3ea8846ef4837d8d",
    "support"
   ],
   "pointerlock/idlharness.html": [
@@ -257098,10 +257851,6 @@
    "96ffb6f3376a5fa73abd405e123d019d8cac694d",
    "testharness"
   ],
-  "service-workers/service-worker/claim-fetch.https-expected.txt": [
-   "3e8688f2e8a82a93770a06f99fcece6d09e4e118",
-   "support"
-  ],
   "service-workers/service-worker/claim-fetch.https.html": [
    "adec77bbeec2ec9ea7da3aba94375bc92e1b4f6f",
    "testharness"
@@ -257595,7 +258344,7 @@
    "testharness"
   ],
   "service-workers/service-worker/opaque-response-preloaded.https.html": [
-   "4441c255d614ef6d898873f81aa9e5090fbf2875",
+   "9b82b28618ed405aa5dddd35341a076aceea91d6",
    "testharness"
   ],
   "service-workers/service-worker/performance-timeline.https-expected.txt": [
@@ -258314,12 +259063,16 @@
    "d81c494e7c0aedc7921c6d5a8c7a17b9b1f5a8aa",
    "support"
   ],
-  "service-workers/service-worker/resources/opaque-response-preloaded-iframe.html": [
-   "df5f1602891ffd5344dfcdf8d2e406f27b3f54e8",
+  "service-workers/service-worker/resources/opaque-response-being-preloaded-xhr.html": [
+   "d42457f8fdee9f0608f3cccc37872cbed3fe4eb9",
    "support"
   ],
   "service-workers/service-worker/resources/opaque-response-preloaded-worker.js": [
-   "84b0397640b74bc2cd5d8cd4fb90eb29dd5e032b",
+   "132a7dee868b03130d40611eb6b3420dbba35552",
+   "support"
+  ],
+  "service-workers/service-worker/resources/opaque-response-preloaded-xhr.html": [
+   "c53a1ee705cbe97b7843705b0834eafc8a890056",
    "support"
   ],
   "service-workers/service-worker/resources/other.html": [
@@ -260323,7 +261076,7 @@
    "testharness"
   ],
   "svg/interfaces-expected.txt": [
-   "6ddeeb371a8c6425aa3a2f1c6ed93f8c202c01fa",
+   "b7a7340cd44da47b750faf350a0cd7e5c1b99c70",
    "support"
   ],
   "svg/interfaces.html": [
@@ -261387,7 +262140,7 @@
    "testharness"
   ],
   "web-animations/interfaces/Animation/idlharness-expected.txt": [
-   "294230de230b84b8a637039748b726860c0f9700",
+   "98bfa3e93e802537514d3791809cfec523149b73",
    "support"
   ],
   "web-animations/interfaces/Animation/idlharness.html": [
@@ -261479,7 +262232,7 @@
    "testharness"
   ],
   "web-animations/interfaces/AnimationTimeline/idlharness.html": [
-   "d8c0e90499563d96ac9802632840f5333f61c8ac",
+   "80984bce09d54d4c57c4cea3a218b01467e43f9c",
    "testharness"
   ],
   "web-animations/interfaces/Document/getAnimations-expected.txt": [
@@ -262442,6 +263195,10 @@
    "0f585a89bd8f25aa8f83b6ec39b704cbb8e970b2",
    "testharness"
   ],
+  "webrtc/RTCPeerConnection-connectionState-expected.txt": [
+   "6935d8e8c76b13f9953f95873ca127336ce694c0",
+   "support"
+  ],
   "webrtc/RTCPeerConnection-connectionState.html": [
    "a733cd1ae59aace10832a7b5f98913967afb87f1",
    "testharness"
@@ -262494,12 +263251,16 @@
    "fbfee08e2b8c5f031780b5efd1139cfe310c89fb",
    "support"
   ],
+  "webrtc/RTCPeerConnection-iceConnectionState-expected.txt": [
+   "b424c205b6e99dae17e37ea44a1d3b9b9e30e389",
+   "support"
+  ],
   "webrtc/RTCPeerConnection-iceConnectionState.html": [
    "dad0787100a817c05dd871bf892a94464916a74a",
    "testharness"
   ],
   "webrtc/RTCPeerConnection-iceGatheringState-expected.txt": [
-   "6be33b9fb07075dfc81993ff1753e48a86f295b4",
+   "2cb68e387063cba06af0326f1e4e591152915c53",
    "support"
   ],
   "webrtc/RTCPeerConnection-iceGatheringState.html": [
@@ -262507,7 +263268,7 @@
    "testharness"
   ],
   "webrtc/RTCPeerConnection-idl-expected.txt": [
-   "8fb7cb01f8e165995be9789dbaed524303adfeee",
+   "a8578ee98585cababd679ff4569850e81bf439ee",
    "support"
   ],
   "webrtc/RTCPeerConnection-idl.html": [
@@ -262522,6 +263283,10 @@
    "e74e16479aca577be6673056eef0fd0212ec7151",
    "testharness"
   ],
+  "webrtc/RTCPeerConnection-removeTrack-expected.txt": [
+   "45905a435315ea26c885f4b01e6a3cd3be3b2582",
+   "support"
+  ],
   "webrtc/RTCPeerConnection-removeTrack.html": [
    "6e0b10df88f69f33ff9aac63975cfea2561f28a0",
    "testharness"
@@ -262546,6 +263311,10 @@
    "f273bd7fdfc883a15e8fb16fef5309061254c6cc",
    "testharness"
   ],
+  "webrtc/RTCRtpSender-replaceTrack-expected.txt": [
+   "224592841280eba0b4607273dd5bbf2c9d25f76f",
+   "support"
+  ],
   "webrtc/RTCRtpSender-replaceTrack.html": [
    "9e8eca4fa11cc72471bc48d98bec8e5936111334",
    "testharness"
@@ -262567,7 +263336,7 @@
    "testharness"
   ],
   "webrtc/datachannel-idlharness-expected.txt": [
-   "118978e3c74634bd77baed7cfd083cd65bb7aa42",
+   "de46e2abe3f943b563dad21be3840eff49284d39",
    "support"
   ],
   "webrtc/datachannel-idlharness.html": [
@@ -262583,7 +263352,7 @@
    "testharness"
   ],
   "webrtc/interfaces-expected.txt": [
-   "eb2eeadc0cc455ff97d7950e2179c1b92361ea33",
+   "9fb4c9aa96921b2099227fe2294c0c7799bb1ebb",
    "support"
   ],
   "webrtc/interfaces.html": [
@@ -263675,7 +264444,7 @@
    "support"
   ],
   "webstorage/idlharness-expected.txt": [
-   "a8bb9fff3f1cc88dba14f43f4f6cd1ae826ee3a5",
+   "72df62ee24b21ba10b13e605a4374af3c554c59c",
    "support"
   ],
   "webstorage/idlharness.html": [
@@ -263827,13 +264596,25 @@
    "testharness"
   ],
   "webusb/OWNERS": [
-   "8ea92f4cb8f9ba417745337ecb38e4a8615f50d5",
+   "c32effeee53d5a083e7853711be5b1881e6f9a83",
    "support"
   ],
   "webusb/idlharness.https.html": [
-   "e402105766a837cd26f6d020663ec4b50b757f86",
+   "0da5e66dd0b0e82d25082733465c22c54a96d1de",
    "testharness"
   ],
+  "webusb/resources/fake-devices.js": [
+   "2cfce7b35b9441529946c4bcea9427e261808c36",
+   "support"
+  ],
+  "webusb/resources/open-in-iframe.html": [
+   "6e6050f742e0da58fc94a5c0a0aa75f16dfcede9",
+   "support"
+  ],
+  "webusb/resources/usb-helpers.js": [
+   "41af64a414c353777e67eb9b57d08fd96a6fa88c",
+   "support"
+  ],
   "webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [
    "fda5a143afa30b86a318b3ab74baed513a5275bb",
    "testharness"
@@ -263862,6 +264643,46 @@
    "c8b3c972c90674c75d652a31a8d0b28eec8ca6e7",
    "support"
   ],
+  "webusb/usb-manual.https.html": [
+   "2d46e9436d420de71cbd62200a40dd3aaa3a5301",
+   "manual"
+  ],
+  "webusb/usbConnectionEvent.https.html": [
+   "b350ec95c8dfc96783b80d4914b932eeecbe00a1",
+   "testharness"
+  ],
+  "webusb/usbDevice-iframe.https.html": [
+   "d2c3f13551a4d3b58e155aec01fb19f6fade5073",
+   "testharness"
+  ],
+  "webusb/usbDevice.https.html": [
+   "db4de6d427f744294fc24f8a11c0971c2df207b1",
+   "testharness"
+  ],
+  "webusb/usbInTransferResult.https.html": [
+   "abfce8f939654027c4f9ef275878016dca126bb6",
+   "testharness"
+  ],
+  "webusb/usbIsochronousInTransferPacket.https.html": [
+   "0c13763ed243ed0981f00658d50eace2e49e654b",
+   "testharness"
+  ],
+  "webusb/usbIsochronousInTransferResult.https.html": [
+   "bf85d36769b9f52c0d8f69027875199669eb64e0",
+   "testharness"
+  ],
+  "webusb/usbIsochronousOutTransferPacket.https.html": [
+   "c8cd321d866b6ff693fe15b02d8808d092929ce1",
+   "testharness"
+  ],
+  "webusb/usbIsochronousOutTransferResult.https.html": [
+   "ec9dfc49ebcb419d777c16995940d91678a26954",
+   "testharness"
+  ],
+  "webusb/usbOutTransferResult.https.html": [
+   "f08a98a927d57cda8b780a8304a0fa6cf727cc81",
+   "testharness"
+  ],
   "webvr/idlharness-expected.txt": [
    "57556d1b78db42d2bfd8582376d4c200b1c9ebe4",
    "support"
@@ -264003,7 +264824,7 @@
    "support"
   ],
   "webvtt/api/interfaces-expected.txt": [
-   "c0816c76cc0834abb4fa9022d9a43324a35ba7df",
+   "ddc368a5243a892afd8d14fc2cdb2c7f8a7db3c6",
    "support"
   ],
   "webvtt/api/interfaces.html": [
@@ -267158,12 +267979,8 @@
    "50abaf936cfb58ba14e6870c9b7f239f5d54f59c",
    "testharness"
   ],
-  "workers/interfaces.idl": [
-   "d8961ea6af91a92a064bcf0e0da5b56781f6bc6b",
-   "support"
-  ],
   "workers/interfaces.worker.js": [
-   "e35e0f6de69052f24340bd887da469b85833953b",
+   "bab03d904dde60b7456d3cd60284c1ecc84a7649",
    "testharness"
   ],
   "workers/interfaces/DedicatedWorkerGlobalScope/EventTarget.worker.js": [
@@ -267403,7 +268220,7 @@
    "support"
   ],
   "workers/name-property.html": [
-   "762b7b4b65503e599560829675a1df07a61dd566",
+   "1c53fc1fdc2d6c8ed5592d832a18bdbd3bca541b",
    "testharness"
   ],
   "workers/nested_worker.worker.js": [
@@ -267762,8 +268579,12 @@
    "b0e679dd7720701364abeaca6870d94db5d7ee74",
    "support"
   ],
+  "workers/support/name-as-accidental-global.js": [
+   "530670268fae610b60066773ee475743b8498b53",
+   "support"
+  ],
   "workers/support/name.js": [
-   "af3a704319d8ee15cf7df2638e4c2c5e59af2403",
+   "27fa41f445888125f84dab8a57ca62b41c09e506",
    "support"
   ],
   "workers/support/nosiniff-error-worker.py": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/.travis.yml b/third_party/WebKit/LayoutTests/external/wpt/.travis.yml
index 05c97d9..f7985af 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/.travis.yml
+++ b/third_party/WebKit/LayoutTests/external/wpt/.travis.yml
@@ -72,7 +72,7 @@
       env: TOXENV=py35 HYPOTHESIS_PROFILE=ci SCRIPT=ci_unittest.sh
     - python: 3.6
       env: TOXENV=py36 HYPOTHESIS_PROFILE=ci SCRIPT=ci_unittest.sh
-    - python: pypy
+    - python: pypy-5.4
       env: TOXENV=pypy HYPOTHESIS_PROFILE=ci SCRIPT=ci_unittest.sh
   exclude:
     - env:  # exclude empty env from the top-level above
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/auto-margins-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/auto-margins-001-ref.html
deleted file mode 100644
index 04f32f5d..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/auto-margins-001-ref.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<style>
-
-#circles, #circles div {
-    border: 1em solid blue;
-    border-radius:50%;
-    margin: auto;
-}
-
-#circles { width:9em; height:9em; }
-
-</style>
-</head>
-<body>
-<p>These tests are from the spec: <a href="http://dev.w3.org/csswg/css3-flexbox/#auto-margins">http://dev.w3.org/csswg/css3-flexbox/#auto-margins</a>.</p>
-
-<p>The word OK should be centered vertically and horizontally.</p>
-<div style="width: 4em; height: 4em; background: silver">
-  <table style="width: 100%; height: 100%;"><tr><td style="text-align: center">OK</td></tr></table>
-</div>
-
-<div style="width: 4em; height: 4em; margin-top: 10px; background: silver; writing-mode: vertical-rl">
-  <table style="width: 100%; height: 100%;"><tr><td style="text-align: center">OK</td></tr></table>
-</div>
-
-<p>You should see 3 blue concentric circles.</p>
-<div id="circles">
-  <div style="width: 5em; height: 5em; margin-top: 1em;">
-    <div style="width: 1em; height: 1em; margin-top: 1em;"></div>
-  </div>
-</div>
-
-<p>The computed style of each margin should not be 0.<br>OK: PASS<br>Vertical OK: PASS</p>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/auto-margins-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/auto-margins-001.html
deleted file mode 100644
index 3a90ef2..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/auto-margins-001.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title>CSS Test: Aligning with auto margins</title>
-<link href="support/flexbox.css" rel="stylesheet">
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#auto-margins">
-<link rel="match" href="auto-margins-001-ref.html">
-<meta name="flags" content="">
-<style>
-
-#circles, #circles div {
-    display: flex;
-    width: -webkit-calc(100% - 4em);
-    width: calc(100% - 4em);
-    height: -webkit-calc(100% - 4em);
-    height: calc(100% - 4em);
-    border: 1em solid blue;
-    border-radius:50%;
-    margin: auto;
-}
-
-#circles { width:9em; height:9em; }
-
-</style>
-</head>
-<body>
-<p>These tests are from the spec: <a href="http://dev.w3.org/csswg/css3-flexbox/#auto-margins">http://dev.w3.org/csswg/css3-flexbox/#auto-margins</a>.</p>
-
-<p>The word OK should be centered vertically and horizontally.</p>
-<div class="flexbox" style="width: 4em; height: 4em; background: silver">
-  <p id="ok" style="margin: auto;">OK</p>
-</div>
-
-<div class="flexbox" style="width: 4em; height: 4em; margin-top: 10px; background: silver; writing-mode: vertical-rl">
-  <p id="okVertical" style="margin: auto;">OK</p>
-</div>
-
-<p>You should see 3 blue concentric circles.</p>
-<div id="circles"><div><div></div></div></div>
-
-<p id="log">The computed style of each margin should not be 0.</p>
-<script>
-var okStyle = getComputedStyle(document.getElementById('ok'));
-document.getElementById("log").innerHTML += "<br>OK: " +
-    ((parseInt(okStyle.marginTop) && parseInt(okStyle.marginRight) && parseInt(okStyle.marginBottom) && parseInt(okStyle.marginLeft)) ? "PASS" : "FAIL");
-
-var okVerticalStyle = getComputedStyle(document.getElementById('okVertical'));
-document.getElementById("log").innerHTML += "<br>Vertical OK: " +
-    ((parseInt(okVerticalStyle.marginTop) && parseInt(okVerticalStyle.marginRight) && parseInt(okVerticalStyle.marginBottom) && parseInt(okVerticalStyle.marginLeft)) ? "PASS" : "FAIL");
-</script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-heights-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-heights-001-ref.html
deleted file mode 100644
index 55ec381d2..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-heights-001-ref.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html>
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<style>
-body {
-  position: relative;
-  width: 800px;
-  height: 600px;
-}
-
-#container {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-}
-
-#top-bar {
-  background-color: green;
-  height: 100px;
-}
-
-#content {
-  background-color: blue;
-  height: 500px;
-}
-</style>
-
-
-<div id="container">
-  <div id="top-bar">
-  Tests that percentage heights get resolved correctly when the flexbox is
-  </div>
-  <div id="content">
-  absolutely positioned without an explicit height. You should see no red.
-  </div>
-</div>
-
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-heights-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-heights-001.html
index 043171d..f24eee9 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-heights-001.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-heights-001.html
@@ -1,47 +1,151 @@
 <!DOCTYPE html>
-<title>CSS Test: Percentage sizing in flexboxes</title>
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#definite-sizes">
-<link rel="match" href="percentage-heights-001-ref.html">
-<meta name="assert" content="Checks that we correctly size percentage-sized
-children of absolute-positioned flex boxes">
+
+<title>CSS Flexbox: Definite cross sizes</title>
+
+<link rel="stylesheet" href="support/flexbox.css">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#definite-sizes">
+<link rel="author" title="Google Inc." href="https://www.google.com/">
+<meta name="flags" content="dom" />
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/check-layout-th.js"></script>
+
 <style>
-body {
-  position: relative;
-  width: 800px;
-  height: 600px;
-}
-
-#container {
-  background-color: red;
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  display: flex;
-  flex-direction: column;
-}
-
-#top-bar {
-  background-color: green;
-  height: 20%;
-}
-
-#content {
+.rect {
+  width: 50px;
+  height: 50px;
   background-color: blue;
-  flex-basis: 100%;
+}
+
+.flexbox {
+  width: 50px;
+  outline: 3px solid black;
+}
+
+
+.flexbox > * {
+  min-height: 0;
+  min-width: 0;
+}
+
+.flexbox > div > div {
+  overflow: hidden;
 }
 </style>
 
+<body onload="checkLayout('.flexbox')" style="height: 800px;">
+<div id=log></div>
 
-<div id="container">
-  <div id="top-bar">
-  Tests that percentage heights get resolved correctly when the flexbox is
-  </div>
-  <div id="content">
-  absolutely positioned without an explicit height. You should see no red.
+
+<p>This test verifies that we consider flex items' cross sizes to be definite
+if the align value is stretch (the default)</p>
+
+<p>Tests that we get a definite size in the simple case:</p>
+<div class="flexbox" data-expected-height="50">
+  <div data-expected-height="50">
+    <div style="height: 50%" data-expected-height="25">
+      <div class="rect" data-expected-height="50"></div>
+    </div>
   </div>
 </div>
 
+<p>Tests that we get a definite size in a wrapping flexbox:</p>
+<div class="flexbox wrap" data-expected-height="50">
+  <div data-expected-height="50">
+    <div style="height: 50%" data-expected-height="25">
+      <div class="rect" data-expected-height="50"></div>
+    </div>
+  </div>
+</div>
 
+<p>Tests that we get an indefinite size when not stretch-aligning, despite
+definite size on container:</p>
+<div class="flexbox wrap" style="height: 50px;" data-expected-height="50">
+  <div class="align-self-flex-start" data-expected-height="50">
+    <div style="height: 50%" data-expected-height="50">
+      <div class="rect" data-expected-height="50"></div>
+    </div>
+  </div>
+</div>
+
+<p>Tests that we get a definite size in a definite-height flexbox:</p>
+<div class="flexbox" style="height: 50px;" data-expected-height="50">
+  <div data-expected-height="50">
+    <div style="height: 50%" data-expected-height="25">
+      <div class="rect" data-expected-height="50"></div>
+    </div>
+  </div>
+</div>
+
+<p>Tests that we get a definite size in a nested flexbox where only the outer
+one has an explicit height:</p>
+<div class="flexbox" style="height: 50px;" data-expected-height="50">
+  <div class="flexbox" data-expected-height="50">
+    <div data-expected-height="50">
+      <div style="height: 50%" data-expected-height="25">
+        <div class="rect" data-expected-height="50"></div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<p>Tests that we get a definite size in a nested flexbox where only the outer
+one has an explicit height and has an opposite direction:</p>
+<div class="flexbox" style="height: 50px;" data-expected-height="50">
+  <div class="flexbox column" data-expected-height="50">
+    <div class="flex-one" data-expected-height="50">
+      <div style="height: 50%" data-expected-height="25">
+        <div class="rect" data-expected-height="50"></div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<p>Tests that we respect min-height, on child of a flex item with percent
+height that's treated as definite:</p>
+<div class="flexbox" style="height: 50px;" data-expected-height="50">
+  <div data-expected-height="50">
+    <div style="height: 50%; min-height: 30px;" data-expected-height="30">
+      <div class="rect" data-expected-height="50"></div>
+    </div>
+  </div>
+</div>
+
+<p>Tests that max-height also supports percentages:</p>
+<div class="flexbox" data-expected-height="50">
+  <div data-expected-height="50">
+    <div style="max-height: 50%" data-expected-height="25">
+      <div class="rect" data-expected-height="50"></div>
+    </div>
+  </div>
+</div>
+
+<p>Tests that percentage sizes can also be definite:</p>
+<div class="flexbox" style="height: 10%;" data-expected-height="80">
+  <div data-expected-height="80">
+    <div style="height: 50%" data-expected-height="40">
+      <div class="rect" data-expected-height="50"></div>
+    </div>
+  </div>
+</div>
+
+<p>Tests that we use a definite size even when a percentage size is not definite</p>
+<div>
+  <div class="flexbox" style="height: 10%;" data-expected-height="50">
+    <div data-expected-height="50">
+      <div style="height: 50%" data-expected-height="25">
+        <div class="rect" data-expected-height="50"></div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<p>Tests that we don't mix up widths and heights</p>
+<div class="flexbox" style="height: 50px; width: 100px;" data-expected-height="50">
+  <div style="width: 100px;" data-expected-height="50" data-expected-width="100">
+    <div style="width: 50%" data-expected-width="50">
+      <div class="rect" data-expected-height="50" data-expected-width="50"></div>
+    </div>
+  </div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-widths-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-widths-001-ref.html
deleted file mode 100644
index ca0c4d9..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-widths-001-ref.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<style>
-body {
-  position: relative;
-  width: 600px;
-  height: 800px;
-}
-
-#container {
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  display: flex;
-}
-
-#top-bar {
-  background-color: green;
-  width: 100px;
-}
-
-#content {
-  background-color: blue;
-  width: 500px;
-}
-</style>
-
-
-<div id="container">
-  <div id="top-bar">
-  Tests that percentage widths get resolved correctly when the flexbox is
-  </div>
-  <div id="content">
-  absolutely positioned without an explicit width. You should see no red.
-  </div>
-</div>
-
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-widths-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-widths-001.html
deleted file mode 100644
index b1b5acff..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/percentage-widths-001.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<title>CSS Test: Absolutely positioned children of flexboxes</title>
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#definite-sizes">
-<link rel="match" href="percentage-widths-001-ref.html">
-<meta name="assert" content="Checks that we correctly size percentage-sized
-children of absolute-positioned flex boxes">
-<style>
-body {
-  position: relative;
-  width: 600px;
-  height: 800px;
-}
-
-#container {
-  background-color: red;
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  display: flex;
-  flex-direction: row;
-}
-
-#top-bar {
-  background-color: green;
-  width: 20%;
-}
-
-#content {
-  background-color: blue;
-  flex-basis: 100%;
-}
-</style>
-
-
-<div id="container">
-  <div id="top-bar">
-  Tests that percentage widths get resolved correctly when the flexbox is
-  </div>
-  <div id="content">
-  absolutely positioned without an explicit width. You should see no red.
-  </div>
-</div>
-
-
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-001.html
deleted file mode 100644
index d3d8089..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-001.html
+++ /dev/null
@@ -1,709 +0,0 @@
-<!DOCTYPE html>
-<html>
-<title>CSS Test: Absolutely positioned children of flexboxes</title>
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
-<meta name="flags" content="dom">
-<meta name="assert" content="Checks that we correctly position abspos children
-in a number of writing modes and alignments">
-<style>
-body {
-    margin: 0;
-}
-
-.title {
-    margin-top: 1em;
-}
-
-.flexbox {
-    display: flex;
-    background-color: #aaa;
-    position: relative;
-}
-.flexbox div {
-    border: 0;
-    flex: none;
-}
-
-.horizontal-tb {
-    writing-mode: horizontal-tb;
-}
-.vertical-rl {
-    writing-mode: vertical-rl;
-}
-.vertical-lr {
-    writing-mode: vertical-lr;
-}
-
-.row {
-    flex-flow: row;
-}
-.row-reverse {
-    flex-flow: row-reverse;
-}
-.column {
-    flex-flow: column;
-}
-.column-reverse {
-    flex-flow: column-reverse;
-}
-
-.flexbox :nth-child(1) {
-    background-color: blue;
-}
-.flexbox :nth-child(2) {
-    background-color: green;
-}
-
-.rtl {
-    direction: rtl;
-}
-.ltr {
-    direction: ltr;
-}
-
-.justify-content-flex-start {
-    justify-content: flex-start;
-}
-.justify-content-flex-end {
-    justify-content: flex-end;
-}
-.justify-content-center {
-    justify-content: center;
-}
-.justify-content-space-between {
-    justify-content: space-between;
-}
-.justify-content-space-around {
-    justify-content: space-around;
-}
-</style>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="support/check-layout-th.js"></script>
-<body onload="checkLayout('.flexbox')">
-<div id=log></div>
-<script>
-// Each flexbox has two abspos children - one is 40x10, the other 10x20.
-// The flexbox itself is 80x20.
-// All that is flipped for vertical flows.
-var expectations = {
-    'horizontal-tb': {
-        'row': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'center': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'flex-end': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'space-around': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-            },
-        },
-        'column': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [0, 40],
-                    'child2': [0, 70],
-                },
-                'center': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [10, 0],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [10, 40],
-                    'child2': [0, 70],
-                },
-                'center': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [10, 0],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-            },
-        },
-        'row-reverse': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'flex-end': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'space-around': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'center': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-            },
-        },
-        'column-reverse': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [0, 40],
-                    'child2': [0, 70],
-                },
-                'flex-end': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [0, 40],
-                    'child2': [0, 70],
-                },
-                'space-around': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [10, 40],
-                    'child2': [0, 70],
-                },
-                'flex-end': {
-                    'child1': [10, 0],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [10, 40],
-                    'child2': [0, 70],
-                },
-                'space-around': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-            },
-        },
-    },
-    'vertical-rl': {
-        'row': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [10, 0],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [10, 40],
-                    'child2': [0, 70],
-                },
-                'center': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [10, 0],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [10, 40],
-                    'child2': [0, 70],
-                },
-                'flex-end': {
-                    'child1': [10, 0],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [10, 40],
-                    'child2': [0, 70],
-                },
-                'space-around': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-            },
-        },
-        'column': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'flex-end': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'space-around': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [40, 10],
-                    'child2': [70, 0],
-                },
-                'flex-end': {
-                    'child1': [0, 10],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [20, 10],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [40, 10],
-                    'child2': [70, 0],
-                },
-                'space-around': {
-                    'child1': [20, 10],
-                    'child2': [35, 0],
-                },
-            },
-        },
-        'row-reverse': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [10, 40],
-                    'child2': [0, 70],
-                },
-                'flex-end': {
-                    'child1': [10, 0],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [10, 40],
-                    'child2': [0, 70],
-                },
-                'space-around': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [10, 0],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [10, 40],
-                    'child2': [0, 70],
-                },
-                'center': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [10, 0],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [10, 20],
-                    'child2': [0, 35],
-                },
-            },
-        },
-        'column-reverse': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'center': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [0, 10],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [40, 10],
-                    'child2': [70, 0],
-                },
-                'center': {
-                    'child1': [20, 10],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [0, 10],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [20, 10],
-                    'child2': [35, 0],
-                },
-            },
-        },
-    },
-    'vertical-lr': {
-        'row': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [0, 40],
-                    'child2': [0, 70],
-                },
-                'center': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [0, 40],
-                    'child2': [0, 70],
-                },
-                'flex-end': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [0, 40],
-                    'child2': [0, 70],
-                },
-                'space-around': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-            },
-        },
-        'column': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'center': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [0, 10],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [40, 10],
-                    'child2': [70, 0],
-                },
-                'center': {
-                    'child1': [20, 10],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [0, 10],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [20, 10],
-                    'child2': [35, 0],
-                },
-            },
-        },
-        'row-reverse': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [0, 40],
-                    'child2': [0, 70],
-                },
-                'flex-end': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [0, 40],
-                    'child2': [0, 70],
-                },
-                'space-around': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'flex-end': {
-                    'child1': [0, 40],
-                    'child2': [0, 70],
-                },
-                'center': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-                'space-between': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'space-around': {
-                    'child1': [0, 20],
-                    'child2': [0, 35],
-                },
-            },
-        },
-        'column-reverse': {
-            'ltr': {
-                'flex-start': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'flex-end': {
-                    'child1': [0, 0],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [40, 0],
-                    'child2': [70, 0],
-                },
-                'space-around': {
-                    'child1': [20, 0],
-                    'child2': [35, 0],
-                },
-            },
-            'rtl': {
-                'flex-start': {
-                    'child1': [40, 10],
-                    'child2': [70, 0],
-                },
-                'flex-end': {
-                    'child1': [0, 10],
-                    'child2': [0, 0],
-                },
-                'center': {
-                    'child1': [20, 10],
-                    'child2': [35, 0],
-                },
-                'space-between': {
-                    'child1': [40, 10],
-                    'child2': [70, 0],
-                },
-                'space-around': {
-                    'child1': [20, 10],
-                    'child2': [35, 0],
-                },
-            },
-        },
-    },
-};
-
-var writingModes = ['horizontal-tb', 'vertical-rl', 'vertical-lr'];
-var flexDirections = ['row', 'column', 'row-reverse', 'column-reverse'];
-var directions = ['ltr', 'rtl'];
-var justifyContents = ['flex-start', 'flex-end', 'center', 'space-between', 'space-around'];
-
-function mainAxisDirection(writingMode, flexDirection)
-{
-    if ((writingMode.indexOf('horizontal') != -1 && flexDirection.indexOf('row') != -1)
-        || (writingMode.indexOf('vertical') != -1 && flexDirection.indexOf('column') != -1))
-        return 'width';
-    return 'height';
-}
-
-function addChild(flexbox, mainAxis, crossAxis, mainAxisLength, crossAxisLength, expectations)
-{
-    var child = document.createElement('div');
-    child.setAttribute('style', mainAxis + ': ' + mainAxisLength + 'px;'
-        + crossAxis + ': ' + crossAxisLength + 'px; position: absolute;');
-
-    child.setAttribute("data-expected-" + mainAxis, mainAxisLength);
-    child.setAttribute("data-expected-" + crossAxis, crossAxisLength);
-    child.setAttribute("data-offset-x", expectations[0]);
-    child.setAttribute("data-offset-y", expectations[1]);
-
-    flexbox.appendChild(child);
-}
-
-writingModes.forEach(function(writingMode) {
-    flexDirections.forEach(function(flexDirection) {
-        directions.forEach(function(direction) {
-            justifyContents.forEach(function(justifyContent) {
-                var flexboxClassName = writingMode + ' ' + direction + ' ' + flexDirection + ' justify-content-' + justifyContent;
-                var title = document.createElement('div');
-                title.className = 'title';
-                title.innerHTML = flexboxClassName;
-                document.body.appendChild(title);
-
-                var mainAxis = mainAxisDirection(writingMode, flexDirection);
-                var crossAxis = (mainAxis == 'width') ? 'height' : 'width';
-
-                var flexbox = document.createElement('div');
-                flexbox.className = 'flexbox ' + flexboxClassName;
-                flexbox.setAttribute('style', mainAxis + ': 80px;' + crossAxis + ': 20px');
-
-                var baselineMargin = (flexDirection.indexOf('row') != -1) ? '-webkit-margin-before: 5px' : '-webkit-margin-start: 5px';
-
-                var testExpectations = expectations[writingMode][flexDirection][direction][justifyContent];
-                addChild(flexbox, mainAxis, crossAxis, 40, 10, testExpectations['child1']);
-                addChild(flexbox, mainAxis, crossAxis, 10, 20, testExpectations['child2']);
-
-                document.body.appendChild(flexbox);
-            })
-        })
-    })
-})
-
-</script>
-
-</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-002.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-002.html
deleted file mode 100644
index bf69765..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-002.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!DOCTYPE html>
-<html>
-<title>CSS Test: Absolutely positioned children of flexboxes</title>
-<link href="support/flexbox.css" rel="stylesheet">
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
-<meta name="flags" content="dom">
-<meta name="assert" content="Checks that we correctly position abspos children
-with different alignments and dynamic changes">
-<style>
-body {
-    margin: 0;
-}
-.flexbox {
-    background-color: green;
-    height: 100px;
-    width: 100px;
-    margin: 10px;
-}
-.flexbox > * {
-    flex: none;
-}
-.relative {
-    position: relative;
-}
-.flexbox > div {
-    width: 20px;
-    height: 20px;
-}
-.absolute {
-    position: absolute;
-}
-#placed-absolute {
-    top: 20px;
-    left: 20px;
-}
-
-.rtl {
-    direction: rtl;
-}
-.ltr {
-    direction: ltr;
-}
-
-.flexbox :nth-child(1) {
-    background-color: blue;
-}
-.flexbox :nth-child(2) {
-    background-color: yellow;
-}
-.flexbox :nth-child(3) {
-    background-color: salmon;
-}
-.flexbox :nth-child(4) {
-    background-color: grey;
-}
-.flexbox :nth-child(5) {
-    background-color: red;
-}
-.flexbox :nth-child(6) {
-    background-color: orange;
-}
-.flexbox :nth-child(7) {
-    background-color: purple;
-}
-</style>
-
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="support/check-layout-th.js"></script>
-
-<body onload="checkLayout('.flexbox')">
-<div id=log></div>
-
-<div class='flexbox relative align-items-center'>
-    <div id='placed-absolute' class='absolute' data-offset-x=20 data-offset-y=20></div>
-</div>
-
-<div class='flexbox relative align-items-center'>
-    <div data-offset-x=0 data-offset-y=40></div>
-    <div class='absolute' data-offset-x=0 data-offset-y=40></div>
-    <div data-offset-x=20 data-offset-y=40></div>
-    <div class="absolute" style="top: 5px; left: 5px" data-offset-x=5 data-offset-y=5></div>
-</div>
-
-<div class="relative">
-<div class='flexbox align-items-center'>
-    <div data-offset-x=10 data-offset-y=40></div>
-    <div class='absolute' data-offset-x=10 data-offset-y=40></div>
-    <div data-offset-x=30 data-offset-y=40></div>
-    <div class="absolute" style="top: 5px; left: 5px" data-offset-x=5 data-offset-y=5></div>
-</div>
-</div>
-
-<div class='flexbox relative column rtl'>
-    <div data-offset-x=80 data-offset-y=0></div>
-    <div class='absolute' data-offset-x=80 data-offset-y=0></div>
-    <div data-offset-x=80 data-offset-y=20></div>
-    <div class="absolute" style="top: 5px; left: 5px" data-offset-x=5 data-offset-y=5></div>
-</div>
-
-<div class="relative">
-<div class='flexbox wrap-reverse'>
-    <div style="width:90px" data-offset-x=10 data-offset-y=80></div>
-    <div class="absolute" data-offset-x=10 data-offset-y=80></div>
-    <div data-offset-x=10 data-offset-y=30></div>
-    <div class="absolute" data-offset-x=10 data-offset-y=80></div>
-    <div data-offset-x=30 data-offset-y=30></div>
-    <div class="absolute" data-offset-x=10 data-offset-y=80></div>
-    <div class="absolute" style="top: 5px; left: 5px" data-offset-x=5 data-offset-y=5></div>
-</div>
-</div>
-
-<div class='flexbox relative'>
-    <div style="margin: auto;" data-offset-x=40 data-offset-y=40></div>
-    <div class="absolute" style="margin: auto;" data-offset-x=0 data-offset-y=0></div>
-    <div class="absolute" style="margin: auto;" data-offset-x=0 data-offset-y=0></div>
-    <div class="absolute" style="margin: auto; top: 5px; left: 5px" data-offset-x=5 data-offset-y=5></div>
-</div>
-
-<div class='flexbox align-items-stretch relative'>
-    <div style="height: auto" data-offset-x=0 data-offset-y=0 data-expected-height=100></div>
-    <div class="absolute" style="height: auto" data-offset-x=0 data-offset-y=0 data-expected-height=0></div>
-    <div class="absolute" style="height: auto; top: 5px; left: 5px" data-offset-x=5 data-offset-y=5 data-expected-height=0></div>
-</div>
-
-<div class="flexbox wrap relative">
-  <div style="width: 100px;" data-offset-x=0 data-offset-y=0></div>
-  <div class="absolute" data-offset-x=0 data-offset-y=0></div>
-  <div style="width: 50px;" data-offset-x=0 data-offset-y=50></div>
-  <div class="absolute" data-offset-x=0 data-offset-y=0></div>
-  <div style="width: 50px;" data-offset-x=50 data-offset-y=50></div>
-  <div class="absolute" data-offset-x=0 data-offset-y=0></div>
-</div>
-
-<div class="flexbox wrap relative align-items-flex-end">
-  <div style="width: 100px;" data-offset-x=0 data-offset-y=30></div>
-  <div class="absolute" data-offset-x=0 data-offset-y=80></div>
-  <div style="width: 50px;" data-offset-x=0 data-offset-y=80></div>
-  <div class="absolute" data-offset-x=0 data-offset-y=80></div>
-  <div style="width: 50px;" data-offset-x=50 data-offset-y=80></div>
-  <div class="absolute" data-offset-x=0 data-offset-y=80></div>
-</div>
-
-
-<script>
-var absolute = document.getElementById('placed-absolute');
-var beforePosition = absolute.getBoundingClientRect();
-document.querySelector('.flexbox').style.height = '101px';
-var afterPosition = absolute.getBoundingClientRect();
-
-// Positioned element should not change position when the height of it's parent flexbox is changed.
-for (key in beforePosition) {
-    test(function() {
-        assert_equals(beforePosition[key], afterPosition[key]);
-    }, 'position of ' + key);
-}
-</script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-003.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-003.html
deleted file mode 100644
index 025aef6f..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-003.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!DOCTYPE html>
-<title>CSS Test: Absolutely positioned children of flexboxes</title>
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
-<meta name="flags" content="dom">
-<meta name="assert" content="Checks that we correctly handle border and
-padding in combination with abspos items">
-<style>
-.rect {
-  position: absolute;
-  width: 50px;
-  height: 50px;
-  background-color: green;
-}
-
-.flexbox {
-  position: relative;
-  width: 100px;
-  height: 100px;
-  outline: 3px solid black;
-}
-</style>
-
-<link rel="stylesheet" href="support/flexbox.css">
-
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="support/check-layout-th.js"></script>
-
-<body onload="checkLayout('.rect')">
-<div id=log></div>
-
-<div class="flexbox" style="padding-top: 10px; padding-left: 20px;">
-  <div class="rect" data-offset-x="20" data-offset-y="10"></div>
-</div>
-
-<div class="flexbox column" style="padding-top: 10px; padding-left: 20px;">
-  <div class="rect" data-offset-x="20" data-offset-y="10"></div>
-</div>
-
-<div class="flexbox" style="writing-mode: vertical-lr; padding-top: 10px; padding-left: 20px;">
-  <div class="rect" data-offset-x="20" data-offset-y="10"></div>
-</div>
-
-<div class="flexbox column" style="writing-mode: vertical-lr; padding-top: 10px; padding-left: 20px;">
-  <div class="rect" data-offset-x="20" data-offset-y="10"></div>
-</div>
-
-<div class="flexbox" style="direction: rtl; padding-top: 10px; padding-right: 20px;">
-  <div class="rect" data-offset-x="50" data-offset-y="10"></div>
-</div>
-
-<div class="flexbox column" style="direction: rtl; padding-top: 10px; padding-right: 20px;">
-  <div class="rect" data-offset-x="50" data-offset-y="10"></div>
-</div>
-
-<div class="flexbox" style="direction: rtl; writing-mode: vertical-lr; padding-bottom: 10px; padding-left: 20px;">
-  <div class="rect" data-offset-x="20" data-offset-y="50"></div>
-</div>
-
-<div class="flexbox column" style="direction: rtl; writing-mode: vertical-lr; padding-bottom: 10px; padding-left: 20px;">
-  <div class="rect" data-offset-x="20" data-offset-y="50"></div>
-</div>
-
-<hr>
-<div class="flexbox" style="border-top: 10px solid; border-left: 20px solid;">
-  <div class="rect" data-offset-x="0" data-offset-y="0"></div>
-</div>
-
-<div class="flexbox column" style="border-top: 10px solid; border-left: 20px solid;">
-  <div class="rect" data-offset-x="0" data-offset-y="0"></div>
-</div>
-
-<div class="flexbox" style="writing-mode: vertical-lr; border-top: 10px solid; border-left: 20px solid;">
-  <div class="rect" data-offset-x="0" data-offset-y="0"></div>
-</div>
-
-<div class="flexbox column" style="writing-mode: vertical-lr; border-top: 10px solid; border-left: 20px solid;">
-  <div class="rect" data-offset-x="0" data-offset-y="0"></div>
-</div>
-
-<div class="flexbox" style="direction: rtl; border-top: 10px solid; border-right: 20px solid;">
-  <div class="rect" data-offset-x="50" data-offset-y="0"></div>
-</div>
-
-<div class="flexbox column" style="direction: rtl; border-top: 10px solid; border-right: 20px solid;">
-  <div class="rect" data-offset-x="50" data-offset-y="0"></div>
-</div>
-
-<div class="flexbox" style="direction: rtl; writing-mode: vertical-lr; border-bottom: 10px solid; border-left: 20px solid;">
-  <div class="rect" data-offset-x="0" data-offset-y="50"></div>
-</div>
-
-<div class="flexbox column" style="direction: rtl; writing-mode: vertical-lr; border-bottom: 10px solid; border-left: 20px solid;">
-  <div class="rect" data-offset-x="0" data-offset-y="50"></div>
-</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-004.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-004.html
deleted file mode 100644
index ff14f35b..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-004.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE html>
-<title>CSS Test: Absolutely positioned children of flexboxes</title>
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
-<meta name="flags" content="dom">
-<meta name="assert" content="Checks that we correctly handle when a flex item
-becomes absolutely positioned">
-<style>
-#flex {
-  display: flex;
-  position: relative;
-  background: red;
-  width: 500px;
-  height: 200px;
-}
-
-#item {
-  background: green;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-}
-</style>
-
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="support/check-layout-th.js"></script>
-
-<script>
-function update() {
-  var item = document.getElementById("item");
-  item.offsetHeight;
-  item.style.position = "absolute";
-  item.offsetHeight;
-  checkLayout("#flex");
-}
-</script>
-
-<body onload="update();">
-
-<div id="flex">
-  <div id="item" data-expected-width="500"></div>
-</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-005-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-005-ref.html
deleted file mode 100644
index 2f7e669..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-005-ref.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<p>This test should not have a horizontal scrollbar</p>
-
-<div style="width: 400px; height: 100px; overflow-x: hidden; overflow-y: scroll;">
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-<br>
-</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-005.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-005.html
deleted file mode 100644
index 3199dfb..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/position-absolute-005.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html>
-<title>CSS Test: Absolutely positioned children of flexboxes</title>
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
-<link rel="match" href="position-absolute-005-ref.html">
-<meta name="assert" content="Checks that we correctly handle overflow: auto in
-abspos nodes in flexbox">
-
-<style>
-  body {
-    width: 400px;
-    height: 300px;
-  }
-
-  .flexbox {
-    display: flex;
-  }
-
-  .column {
-    flex-direction: column;
-  }
-
-  .flex11a {
-    flex: 1 1 auto;
-  }
-
-  .root {
-    height: 100px;
-    overflow-y: auto;
-    position: relative;
-  }
-
-  #abspos {
-    position: absolute;
-    left: 0;
-    right: 0;
-    top: 0;
-    height: 10px;
-  }
-</style>
-
-
-<p>This test should not have a horizontal scrollbar</p>
-
-<div class="flexbox column">
-  <div class="flexbox">
-    <div class="flex11a">
-      <div class="root">
-        <div>
-          <div>
-            <div id="history"></div>
-            <div id="abspos"></div>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</div>
-
-<script>
-onload = function() {
-  var historyEl = document.getElementById('history');
-  historyEl.offsetWidth;
-  historyEl.innerText = '\n\n\n\n\n\n\n\n';
-};
-</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/whitespace-in-flexitem-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/whitespace-in-flexitem-001-ref.html
deleted file mode 100644
index f7ab7ba..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/whitespace-in-flexitem-001-ref.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<link href="support/flexbox.css" rel="stylesheet">
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<style>
-  .a {
-    flex: none;
-    width: 30px;
-    background: salmon;
-  }
-</style>
-<body>
-  <div class="flexbox justify-content-space-around">
-    <div class="a"></div>
-  </div>
-
-  <div class="flexbox">
-    <b>foo</b><b>bar</b>
-  </div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/whitespace-in-flexitem-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/whitespace-in-flexitem-001.html
deleted file mode 100644
index bec931a4..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/css/css-flexbox-1/whitespace-in-flexitem-001.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<html>
-<title>CSS Test: Whitespace-only nodes in Flexboxes</title>
-<link href="support/flexbox.css" rel="stylesheet">
-<link rel="author" title="Google Inc." href="http://www.google.com/">
-<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-items">
-<link rel="match" href="whitespace-in-flexitem-001-ref.html">
-<meta name="flags" content="">
-<meta name="assert" content="Whitespace-only nodes in a flexbox should not
-be rendered and not influence justify-content, even in the presence of
-white-space: pre">
-<style>
-  .flexbox { white-space: pre; }
-  .a {
-    flex: none;
-    width: 30px;
-    background: salmon;
-  }
-</style>
-<body>
-  <div class="flexbox justify-content-space-around">
-    <div class="a"></div> &#9;
-  </div>
-
-  <div class="flexbox">
-    <b>foo</b> <b>bar</b>
-  </div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-008.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-008.html
new file mode 100644
index 0000000..0b10155a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-008.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing images</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact may">
+<meta name="assert" content="UAs may apply the resize property to <img> regardless of the value of the overflow property.">
+<style>
+img { resize: both; }
+</style>
+
+<p>Test passes if both <strong>width</strong> and <strong>height</strong> of the orange box below can be adjusted (for instance by dragging the bottom-right corner).</p>
+
+<img src="support/orange.png" alt="">
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-009.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-009.html
new file mode 100644
index 0000000..8662b1a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-009.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing sgv</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact may">
+<meta name="assert" content="UAs may apply the resize property to <svg> regardless of the value of the overflow property.">
+<style>
+svg { resize: both; }
+</style>
+
+<p>Test passes if both <strong>width</strong> and <strong>height</strong> of the orange box below can be adjusted (for instance by dragging the bottom-right corner).</p>
+
+<svg width="100" height="100" viewBox="0 0 100 100"
+  xmlns="http://www.w3.org/2000/svg">
+<rect x="0" y="0" width="100" height="100" fill="orange"/>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-010.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-010.html
new file mode 100644
index 0000000..b7cf2712
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-010.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing pictures</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact may">
+<meta name="assert" content="UAs may apply the resize property to <picture> regardless of the value of the overflow property.">
+<style>
+picture { resize: both; }
+</style>
+
+<p>Test passes if both <strong>width</strong> and <strong>height</strong> of the orange box below can be adjusted (for instance by dragging the bottom-right corner).</p>
+
+<picture>
+  <source srcset="support/orange.svg" type="image/svg+xml">
+  <img src="support/orange.png" alt="">
+</picture>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-011.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-011.html
new file mode 100644
index 0000000..71a8604
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-011.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing objects</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact may">
+<meta name="assert" content="UAs may apply the resize property to <object> regardless of the value of the overflow property.">
+<style>
+object { resize: both; }
+</style>
+
+<p>Test passes if both <strong>width</strong> and <strong>height</strong> of the orange box below can be adjusted (for instance by dragging the bottom-right corner).</p>
+
+<object data="support/orange.svg" type="image/svg+xml">
+  &lt;object&gt; is not supported. This test is non conclusive.
+</object>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-012.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-012.html
new file mode 100644
index 0000000..717cb5a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-012.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing iframes</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact may">
+<meta name="assert" content="UAs may apply the resize property to <iframes> regardless of the value of the overflow property.">
+<style>
+iframe { resize: both; }
+</style>
+
+<p>Test passes if both <strong>width</strong> and <strong>height</strong> of the box surrounding the orange box below can be adjusted (for instance by dragging the bottom-right corner).</p>
+
+<iframe src="support/orange.svg"></iframe>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-013.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-013.html
new file mode 100644
index 0000000..d8cea0e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-013.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing canvas</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact may">
+<meta name="assert" content="UAs may apply the resize property to <canvas> regardless of the value of the overflow property.">
+<style>
+canvas { resize: both; }
+</style>
+
+<p>Test passes if both <strong>width</strong> and <strong>height</strong> of the orange box below can be adjusted (for instance by dragging the bottom-right corner).</p>
+
+<canvas id="test" width="100" height="100">
+  &lt;canvas&gt; is not supported. This test is non conclusive.
+</canvas>
+<script>
+var canvas = document.getElementById('test');
+if (canvas.getContext) {
+  var ctx = canvas.getContext('2d');
+    ctx.fillStyle = '#FFA500';
+    ctx.fillRect (0, 0, 100, 100);
+}
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-014.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-014.html
new file mode 100644
index 0000000..fdbd77e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-014.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing videos</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact may">
+<meta name="assert" content="UAs may apply the resize property to <video> regardless of the value of the overflow property.">
+<style>
+video { resize: both; }
+</style>
+
+<p>Test passes if both <strong>width</strong> and <strong>height</strong> of the video below can be adjusted (for instance by dragging the bottom-right corner).</p>
+
+<video width="100" autoplay loop>
+  <source
+    src="support/test.webm"
+    type="video/webm">
+  <source
+    src="support/test.mp4"
+    type="video/mp4">
+  <source
+    src="support/test.ogv"
+    type="video/ogg">
+  &lt;video&gt; is not supported. This test is non conclusive.
+</video>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-015.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-015.html
new file mode 100644
index 0000000..b613da2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-015.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing uses the style attribute</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+#test {
+  position: absolute;
+  width: 100px;
+  height: 100px;
+  background: orange;
+  overflow: hidden;
+  resize: both;
+}
+#target {
+  position: absolute;
+  width: 150px;
+  height: 150px;
+  background: blue;
+}
+#log { margin-top: 200px; }
+</style>
+
+<p>Enlarge the orange box so that it at least covers the blue box entirely, then press the “done” button.</p>
+<!-- There's no actual need to cover the whole box,
+  but doing so makes sure that the user has resized in both dimensions -->
+
+<button onclick="verify()">done</button>
+
+<div id="target"></div>
+<div id="test"></div>
+<div id=log></div>
+<script>
+setup({ explicit_done: true });
+function verify() {
+  test(
+    function(){
+      var test = document.getElementById("test");
+      assert_regexp_match(test.style.width, /px$/, "The width property of the style attribute should be set in pixels");
+      assert_not_equals(test.style.width, "100px", "The width should be different from the initial one");
+      assert_regexp_match(test.style.height, /px$/, "The height property of the style attribute should be set in pixels");
+      assert_not_equals(test.style.height, "100px", "The height should be different from the initial one");
+    }, "resize works by setting the width and height properties on the style attrbute in pixels");
+  test(
+    function(){
+      var test = document.getElementById("test");
+      assert_false(test.getAttribute("style").includes("important"));
+    }, "resize does not set !important");
+  done();
+}
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-016.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-016.html
new file mode 100644
index 0000000..4bc0028
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-016.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing horizontally uses the style attribute</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+#test {
+  width: 100px;
+  height: 100px;
+  background: orange;
+  overflow: hidden;
+  resize: horizontal;
+}
+</style>
+
+<p>Attempt to resize the orange box both horizontally and vertically, then press the “done” button
+(Resizing vertically is not expected to be possible but should still be attempted).</p>
+
+<button onclick="verify()">done</button>
+
+<div id="test"></div>
+<div id=log></div>
+<script>
+setup({ explicit_done: true });
+function verify() {
+  test(
+    function(){
+      var test = document.getElementById("test");
+      assert_regexp_match(test.style.width, /px$/, "The width property of the style attribute should be set in pixels");
+      assert_not_equals(test.style.width, "100px", "The width should be different from the initial one");
+      assert_equals(test.style.height, "", "The height property of the style attribute should not be set");
+    }, "horizontal resizing only affects the width properties on the style attrbute.");
+  done();
+}
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-017.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-017.html
new file mode 100644
index 0000000..98a7d31
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-017.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing vertically uses the style attribute</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+#test {
+  width: 100px;
+  height: 100px;
+  background: orange;
+  overflow: hidden;
+  resize: vertical;
+}
+</style>
+
+<p>Attempt to resize the orange box both horizontally and vertically, then press the “done” button
+(Resizing horizontally is not expected to be possible but should still be attempted).</p>
+
+<button onclick="verify()">done</button>
+
+<div id="test"></div>
+<div id=log></div>
+<script>
+setup({ explicit_done: true });
+function verify() {
+  test(
+    function(){
+      var test = document.getElementById("test");
+      assert_equals(test.style.width, "", "The width property of the style attribute should not be set");
+      assert_regexp_match(test.style.height, /px$/, "The height property of the style attribute should be set in pixels");
+      assert_not_equals(test.style.height, "100px", "The height should be different from the initial one");
+    }, "horizontal resizing only affects the width properties on the style attrbute.");
+  done();
+}
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-018.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-018.html
new file mode 100644
index 0000000..6e40d58
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-018.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: removing the ability to resize keeps the resized dimentions</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+#test {
+  position: absolute;
+  width: 100px;
+  height: 100px;
+  background: orange;
+  overflow: hidden;
+  resize: both;
+}
+#target {
+  position: absolute;
+  width: 150px;
+  height: 150px;
+  background: blue;
+}
+#log { margin-top: 200px; }
+</style>
+
+<p>Enlarge the orange box so that it at least covers the blue box entirely, then press the “done” button.</p>
+<!-- There's no actual need to cover the whole box,
+  but doing so makes sure that the user has resized in both dimensions -->
+
+<button onclick="verify()">done</button>
+
+<div id="target"></div>
+<div id="test"></div>
+<div id=log></div>
+<script>
+setup({ explicit_done: true });
+function verify() {
+  test(
+    function(){
+      var test = document.getElementById("test");
+      var w = test.style.width;
+      var h = test.style.height;
+      assert_regexp_match(w, /px$/, "The width property of the style attribute should be set");
+      assert_regexp_match(h, /px$/, "The height property of the style attribute should be set");
+      document.styleSheets[0].cssRules[0].style.resize= "none";
+      assert_equals(test.style.width, w, "The width property of the style attribute should still be set after removing ability to resize");
+      assert_equals(test.style.height, h, "The height property of the style attribute should still be set after removing ability to resize");
+    }, "Removing the ability to resize an element does not reset its size");
+  done();
+}
+</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-019.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-019.html
new file mode 100644
index 0000000..4a6ff7d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-019.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing constraints</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact">
+<meta name="assert" content="UAs must not place constrains on resizing that would prevent an element from becoming smaller than its original size.">
+<style>
+#test {
+  position: absolute;
+  background: orange;
+  height: 100px;
+  width: 100px;
+  overflow: auto;
+  resize: both;
+}
+#ref {
+  position: absolute;
+  background: green;
+  height: 100px;
+  width: 100px;
+}
+</style>
+
+<p>The test passes is you can resize the orange box to be smaller than its initial size.
+For reference there is an unresizable green box beneath it.
+If you can uncover it, the test passes.</p>
+
+<div id=ref></div>
+<div id=test></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-020.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-020.html
new file mode 100644
index 0000000..807f788b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-020.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing min-height/width constraints</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact">
+<meta name="assert" content="min-width and min-height constraints are honored.">
+<style>
+#test {
+  position: absolute;
+  background: orange;
+  min-height: 50px;
+  min-width: 50px;
+  height: 100px;
+  width: 100px;
+  overflow: auto;
+  resize: both;
+}
+#ref {
+  position: absolute;
+  background: red;
+  height: 50px;
+  width: 50px;
+}
+</style>
+
+<p>Resize the orange box below to the smallest size possible.
+There is a smaller unresizable red box beneath it.</p>
+<p>If you can uncover any amount of red, the test fails.
+If you cannot resize the orange box, the test also fails.
+Otherwise, the test passes.</p>
+
+<div id=ref></div>
+<div id=test></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-021.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-021.html
new file mode 100644
index 0000000..709551f1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/resize-021.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Basic User Interface Test: resizing min-height/width constraints</title>
+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net">
+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize">
+<meta name="flags" content="interact">
+<meta name="assert" content="max-width and max-height constraints are honored.">
+<style>
+#test {
+  position: absolute;
+  background: linear-gradient(to right, transparent 200px, red 200px) no-repeat,
+              linear-gradient(to bottom, transparent 200px, red 200px) no-repeat,
+              orange;
+  max-height: 200px;
+  max-width: 200px;
+  height: 100px;
+  width: 100px;
+  overflow: auto;
+  resize: both;
+}
+#ref {
+  position: absolute;
+  background: blue;
+  height: 300px;
+  width: 300px;
+}
+</style>
+
+<p>Attempt to resize the orange box below so that it is large enough to fully cover the blue one.</p>
+<p>If you cannot enlarge the orange box, the test fails.<br>
+If you can fully cover the blue box, the test fails.<br>
+Even if the blue box is not fully covered, if you see any red, the test fails.<br>
+Otherwise, the test passes.</p>
+
+<div id=ref></div>
+<div id=test></div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/orange.png b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/orange.png
new file mode 100644
index 0000000..0a08d3ae
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/orange.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/orange.svg b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/orange.svg
new file mode 100644
index 0000000..56346a8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/orange.svg
@@ -0,0 +1,4 @@
+<svg width="100" height="100" viewBox="0 0 100 100"
+  xmlns="http://www.w3.org/2000/svg">
+<rect x="0" y="0" width="100" height="100" fill="orange"/>
+</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/test.mp4 b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/test.mp4
new file mode 100644
index 0000000..1b0e7b5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/test.mp4
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/test.ogv b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/test.ogv
new file mode 100644
index 0000000..50d59df
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/test.ogv
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/test.webm b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/test.webm
new file mode 100644
index 0000000..3a601805
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-ui-3/support/test.webm
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-001-ref.html b/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-001-ref.html
deleted file mode 100644
index 683198a..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-001-ref.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- quirks mode -->
-<html style="overflow:scroll">
-<body style="overflow:scroll">The body box should have scrollbars.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-001.html b/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-001.html
deleted file mode 100644
index 344e299..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-001.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!-- quirks mode -->
-<html>
-  <head>
-    <meta charset="utf-8">
-    <title>CSSOM View Test: Dynamically changing scrollingElement to html in quirks mode</title>
-    <link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com">
-    <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-document-scrollingelement">
-    <link rel="match" href="scrollingElement-quirks-dynamic-001-ref.html">
-    <meta name="assert" content="Checks that setting the overflow on html to scroll will stop propagating body scrollbars to viewport.">
-  </head>
-  <body style="overflow:scroll">The body box should have scrollbars.
-    <script>
-      document.body.offsetTop; // force layout
-      document.documentElement.style.overflow = "scroll";
-    </script>
-  </body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-002-ref.html b/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-002-ref.html
deleted file mode 100644
index c8a78398..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-002-ref.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<!-- quirks mode -->
-<body style="overflow:scroll">The body box should not have scrollbars.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-002.html b/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-002.html
deleted file mode 100644
index 8495be2..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/cssom-view/scrollingElement-quirks-dynamic-002.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!-- quirks mode -->
-<html style="overflow:scroll">
-  <head>
-    <meta charset="utf-8">
-    <title>CSSOM View Test: Dynamically changing scrollingElement to body in quirks mode</title>
-    <link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com">
-    <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-document-scrollingelement">
-    <link rel="match" href="scrollingElement-quirks-dynamic-002-ref.html">
-    <meta name="assert" content="Checks that setting the overflow on html to visible will propagate body scrollbars to viewport.">
-  </head>
-  <body style="overflow:scroll">The body box should not have scrollbars.
-    <script>
-      document.body.offsetTop; // force layout
-      document.documentElement.style.overflow = "visible";
-    </script>
-  </body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/dedicated-workers.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/dedicated-workers.idl
new file mode 100644
index 0000000..14259dc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/dedicated-workers.idl
@@ -0,0 +1,133 @@
+// -----------------------------------------------------------------------------
+// DOM
+// -----------------------------------------------------------------------------
+[Exposed=(Window,Worker)]
+interface EventTarget {
+  void addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options);
+  void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options);
+  boolean dispatchEvent(Event event);
+};
+
+callback interface EventListener {
+  void handleEvent(Event event);
+};
+
+dictionary EventListenerOptions {
+  boolean capture = false;
+};
+
+dictionary AddEventListenerOptions : EventListenerOptions {
+  boolean passive = false;
+  boolean once = false;
+};
+
+// -----------------------------------------------------------------------------
+// HTML
+// -----------------------------------------------------------------------------
+[TreatNonCallableAsNull]
+callback EventHandlerNonNull = any (Event event);
+typedef EventHandlerNonNull? EventHandler;
+
+[TreatNonCallableAsNull]
+callback OnErrorEventHandlerNonNull = any ((Event or DOMString) event, optional DOMString source, optional unsigned long lineno, optional unsigned long column, optional any error);
+typedef OnErrorEventHandlerNonNull? OnErrorEventHandler;
+
+[Exposed=Worker]
+interface WorkerGlobalScope : EventTarget {
+  readonly attribute WorkerGlobalScope self;
+  readonly attribute WorkerLocation location;
+  readonly attribute WorkerNavigator navigator;
+  void importScripts(USVString... urls);
+
+  attribute OnErrorEventHandler onerror;
+  attribute EventHandler onlanguagechange;
+  attribute EventHandler onoffline;
+  attribute EventHandler ononline;
+  attribute EventHandler onrejectionhandled;
+  attribute EventHandler onunhandledrejection;
+};
+
+[Global=(Worker,DedicatedWorker),Exposed=DedicatedWorker]
+interface DedicatedWorkerGlobalScope : WorkerGlobalScope {
+  [Replaceable] readonly attribute DOMString name;
+
+  void postMessage(any message, optional sequence<object> transfer = []);
+
+  void close();
+
+  attribute EventHandler onmessage;
+  attribute EventHandler onmessageerror;
+};
+
+typedef (DOMString or Function) TimerHandler;
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface WindowOrWorkerGlobalScope {
+  [Replaceable] readonly attribute USVString origin;
+
+  // base64 utility methods
+  DOMString btoa(DOMString data);
+  DOMString atob(DOMString data);
+
+  // timers
+  long setTimeout(TimerHandler handler, optional long timeout = 0, any... arguments);
+  void clearTimeout(optional long handle = 0);
+  long setInterval(TimerHandler handler, optional long timeout = 0, any... arguments);
+  void clearInterval(optional long handle = 0);
+
+  // ImageBitmap
+  Promise<ImageBitmap> createImageBitmap(ImageBitmapSource image, optional ImageBitmapOptions options);
+  Promise<ImageBitmap> createImageBitmap(ImageBitmapSource image, long sx, long sy, long sw, long sh, optional ImageBitmapOptions options);
+};
+WorkerGlobalScope implements WindowOrWorkerGlobalScope;
+
+[Exposed=Worker]
+interface WorkerNavigator {};
+WorkerNavigator implements NavigatorID;
+WorkerNavigator implements NavigatorLanguage;
+WorkerNavigator implements NavigatorOnLine;
+WorkerNavigator implements NavigatorConcurrentHardware;
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface NavigatorID {
+  readonly attribute DOMString appCodeName; // constant "Mozilla"
+  readonly attribute DOMString appName; // constant "Netscape"
+  readonly attribute DOMString appVersion;
+  readonly attribute DOMString platform;
+  readonly attribute DOMString product; // constant "Gecko"
+  [Exposed=Window] readonly attribute DOMString productSub;
+  readonly attribute DOMString userAgent;
+  [Exposed=Window] readonly attribute DOMString vendor;
+  [Exposed=Window] readonly attribute DOMString vendorSub; // constant ""
+
+  // also has additional members in a partial interface
+};
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface NavigatorLanguage {
+  readonly attribute DOMString language;
+  readonly attribute FrozenArray<DOMString> languages;
+};
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface NavigatorOnLine {
+  readonly attribute boolean onLine;
+};
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface NavigatorConcurrentHardware {
+  readonly attribute unsigned long long hardwareConcurrency;
+};
+
+[Exposed=Worker]
+interface WorkerLocation {
+  stringifier readonly attribute USVString href;
+  readonly attribute USVString origin;
+  readonly attribute USVString protocol;
+  readonly attribute USVString host;
+  readonly attribute USVString hostname;
+  readonly attribute USVString port;
+  readonly attribute USVString pathname;
+  readonly attribute USVString search;
+  readonly attribute USVString hash;
+};
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/idlharness.js b/third_party/WebKit/LayoutTests/external/wpt/resources/idlharness.js
index e83b2152..6dd1db3d 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/resources/idlharness.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/idlharness.js
@@ -322,6 +322,121 @@
     return ret;
 };
 
+//@}
+IdlArray.prototype.is_json_type = function(type)
+//@{
+{
+    /**
+     * Checks whether type is a JSON type as per
+     * https://heycam.github.io/webidl/#dfn-json-types
+     */
+
+    var idlType = type.idlType;
+    
+    if (type.generic == "Promise") { return false; }
+
+    //  nullable and annotated types don't need to be handled separately,
+    //  as webidl2 doesn't represent them wrapped-up (as they're described
+    //  in WebIDL).
+
+    // union and record types
+    if (type.union || type.generic == "record") {
+        return idlType.every(this.is_json_type, this);
+    }
+
+    // sequence types
+    if (type.generic == "sequence" || type.generic == "FrozenArray") {
+        return this.is_json_type(idlType);
+    }
+
+    if (typeof idlType != "string") { throw new Error("Unexpected type " + JSON.stringify(idlType)); }
+
+    switch (idlType)
+    {
+       //  Numeric types
+       case "byte":
+       case "octet":
+       case "short":
+       case "unsigned short":
+       case "long":
+       case "unsigned long":
+       case "long long":
+       case "unsigned long long":
+       case "float":
+       case "double":
+       case "unrestricted float":
+       case "unrestricted double":
+       // boolean
+       case "boolean":
+       // string types
+       case "DOMString":
+       case "ByteString":
+       case "USVString":
+       // object type
+       case "object":
+           return true;
+       case "Error":
+       case "DOMException":
+       case "Int8Array":
+       case "Int16Array":
+       case "Int32Array":
+       case "Uint8Array":
+       case "Uint16Array":
+       case "Uint32Array":
+       case "Uint8ClampedArray":
+       case "Float32Array":
+       case "ArrayBuffer":
+       case "DataView":
+       case "any":
+           return false;
+       default:
+           var thing = this.members[idlType];
+           if (!thing) { throw new Error("Type " + idlType + " not found"); }
+
+           if (thing instanceof IdlEnum) { return true; }
+
+           //  dictionaries where all of their members are JSON types
+           if (thing instanceof IdlDictionary) {
+               var stack = thing.get_inheritance_stack();
+               var map = new Map();
+               while (stack.length)
+               {
+                   stack.pop().members.forEach(m => map.set(m.name, m.idlType));
+               }
+               return [...map.values()].every(this.is_json_type, this);
+           }
+           
+           //  interface types that have a toJSON operation declared on themselves or
+           //  one of their inherited or consequential interfaces.
+           if (thing instanceof IdlInterface) {
+               var base;
+               while (thing)
+               {
+                   if (thing.has_to_json_regular_operation()) { return true; }
+                   var mixins = this.implements[thing.name];
+                   if (mixins) {
+                       mixins = mixins.map(id => {
+                           var mixin = this.members[id];
+                           if (!mixin) {
+                               throw new Error("Interface " + id + " not found (implemented by " + thing.name + ")");
+                           }
+                           return mixin;
+                       });
+                       if (mixins.some(m => m.has_to_json_regular_operation())) { return true; }
+                   }
+                   if (!thing.base) { return false; }
+                   base = this.members[thing.base];
+                   if (!base) {
+                       throw new Error("Interface " + thing.base + " not found (inherited by " + thing.name + ")");
+                   }
+                   thing = base;
+               }
+               return false;
+           }
+           return false;
+    }
+};
+
 function exposure_set(object, default_set) {
     var exposed = object.extAttrs.filter(function(a) { return a.name == "Exposed" });
     if (exposed.length > 1 || exposed.length < 0) {
@@ -696,6 +811,9 @@
     /** Self-explanatory. */
     this.name = obj.name;
 
+    /** A back-reference to our IdlArray. */
+    this.array = obj.array;
+
     /** An array of objects produced by the "dictionaryMember" production. */
     this.members = obj.members;
 
@@ -709,6 +827,10 @@
 //@}
 IdlDictionary.prototype = Object.create(IdlObject.prototype);
 
+IdlDictionary.prototype.get_inheritance_stack = function() {
+    return IdlInterface.prototype.get_inheritance_stack.call(this);
+};
+
 /// IdlInterface ///
 function IdlInterface(obj, is_callback)
 //@{
@@ -777,6 +899,127 @@
 };
 //@}
 
+IdlInterface.prototype.has_to_json_regular_operation = function() {
+    return this.members.some(function(m) {
+        return m.is_to_json_regular_operation();
+    });
+};
+
+IdlInterface.prototype.has_default_to_json_regular_operation = function() {
+    return this.members.some(function(m) {
+        return m.is_to_json_regular_operation() && m.has_extended_attribute("Default");
+    });
+};
+
+IdlInterface.prototype.get_inheritance_stack = function() {
+    /**
+     * See https://heycam.github.io/webidl/#create-an-inheritance-stack
+     *
+     * Returns an array of IdlInterface objects which contains itself
+     * and all of its inherited interfaces.
+     *
+     * So given:
+     *
+     *   A : B {};
+     *   B : C {};
+     *   C {};
+     *
+     * then A.get_inheritance_stack() should return [A, B, C],
+     * and B.get_inheritance_stack() should return [B, C].
+     *
+     * Note: as dictionary inheritance is expressed identically by the AST,
+     * this works just as well for getting a stack of inherited dictionaries. 
+     */
+
+    var stack = [this];
+    var idl_interface = this;
+    while (idl_interface.base) {
+        var base = this.array.members[idl_interface.base];
+        if (!base) {
+            throw new Error(idl_interface.type + " " + idl_interface.base + " not found (inherited by " + idl_interface.name + ")");
+        }
+        idl_interface = base;
+        stack.push(idl_interface);
+    }
+    return stack;
+};
+
+/**
+ * Implementation of
+ * https://heycam.github.io/webidl/#default-tojson-operation
+ * for testing purposes.
+ *
+ * Collects the IDL types of the attributes that meet the criteria
+ * for inclusion in the default toJSON operation for easy
+ * comparison with actual value
+ */
+IdlInterface.prototype.default_to_json_operation = function(callback) {
+    var map = new Map(), isDefault = false;
+    this.traverse_inherited_and_consequential_interfaces(function(I) {
+        if (I.has_default_to_json_regular_operation()) {
+            isDefault = true;
+            I.members.forEach(function(m) {
+                if (!m.static && m.type == "attribute" && I.array.is_json_type(m.idlType)) {
+                    map.set(m.name, m.idlType);
+                }
+            });
+        } else if (I.has_to_json_regular_operation()) {
+            isDefault = false;
+        }
+    });
+    return isDefault ? map : null;
+};
+
+/**
+ * Traverses inherited interfaces from the top down
+ * and imeplemented interfaces inside out.
+ * Invokes |callback| on each interface.
+ *
+ * This is an abstract implementation of the traversal
+ * algorithm specified in:
+ * https://heycam.github.io/webidl/#collect-attribute-values
+ * Given the following inheritance tree:
+ *
+ *           F
+ *           |
+ *       C   E - I
+ *       |   |
+ *       B - D
+ *       |
+ *   G - A - H - J
+ *
+ * Invoking traverse_inherited_and_consequential_interfaces() on A
+ * would traverse the tree in the following order:
+ * C -> B -> F -> E -> I -> D -> A -> G -> H -> J
+ */
+
+IdlInterface.prototype.traverse_inherited_and_consequential_interfaces = function(callback) {
+    if (typeof callback != "function") {
+        throw new TypeError();
+    }
+    var stack = this.get_inheritance_stack();
+    _traverse_inherited_and_consequential_interfaces(stack, callback);
+};
+
+function _traverse_inherited_and_consequential_interfaces(stack, callback) {
+    var I = stack.pop();
+    callback(I);
+    var mixins = I.array["implements"][I.name];
+    if (mixins) {
+        mixins.forEach(id => {
+            var mixin = I.array.members[id];
+            if (!mixin) {
+                throw new Error("Interface " + id + " not found (implemented by " + I.name + ")");
+            }
+            var interfaces = mixin.get_inheritance_stack();
+            _traverse_inherited_and_consequential_interfaces(interfaces, callback);
+        });
+    }
+    if (stack.length > 0) {
+        _traverse_inherited_and_consequential_interfaces(stack, callback);
+    }
+}
+
 IdlInterface.prototype.test = function()
 //@{
 {
@@ -1495,6 +1738,10 @@
         })),
         "property has wrong .length");
 
+    if (member.is_to_json_regular_operation()) {
+        this.test_to_json_operation(memberHolderObject, member);
+    }
+
     // Make some suitable arguments
     var args = member.arguments.map(function(arg) {
         return create_suitable_object(arg.idlType);
@@ -1551,6 +1798,32 @@
            { name: "thisValue", idlType: {idlType: "any"}, optional: true}]}));
 };
 
+IdlInterface.prototype.test_to_json_operation = function(memberHolderObject, member) {
+    if (member.has_extended_attribute("Default")) {
+        var map = this.default_to_json_operation();
+        test(function() {
+            var json = memberHolderObject.toJSON();
+            map.forEach(function(type, k) {
+                assert_true(k in json, "property " + k + " should be present in the output of " + this.name + ".prototype.toJSON()");
+                var descriptor = Object.getOwnPropertyDescriptor(json, k);
+                assert_true(descriptor.writable, "property " + k + " should be writable");
+                assert_true(descriptor.configurable, "property " + k + " should be configurable");
+                assert_true(descriptor.enumerable, "property " + k + " should be enumerable");
+                this.array.assert_type_is(json[k], type);
+                delete json[k];
+            }, this);
+            for (var k in json) {
+                assert_unreached("property " + k + " should not be present in the output of " + this.name + ".prototype.toJSON()");
+            }
+        }.bind(this), "Test default toJSON operation of " + this.name);
+    } else {
+        test(function() {
+            assert_true(this.array.is_json_type(member.idlType), JSON.stringify(member.idlType) + " is not an appropriate return value for the toJSON operation of " + this.name);
+            this.array.assert_type_is(memberHolderObject.toJSON(), member.idlType);
+        }.bind(this), "Test toJSON operation of " + this.name);
+    }
+};
+
 //@}
 IdlInterface.prototype.test_member_iterable = function(member)
 //@{
@@ -2096,6 +2369,10 @@
 //@}
 IdlInterfaceMember.prototype = Object.create(IdlObject.prototype);
 
+IdlInterfaceMember.prototype.is_to_json_regular_operation = function() {
+    return this.type == "operation" && !this.static && this.name == "toJSON";
+};
+
 /// Internal helper functions ///
 function create_suitable_object(type)
 //@{
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlArray/is_json_type.html b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlArray/is_json_type.html
new file mode 100644
index 0000000..57f714b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlArray/is_json_type.html
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>IdlArray.prototype.is_json_type()</title>
+</head>
+<body>
+<div id="log"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script src="../helper.js"></script>
+<script>
+    "use strict";
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_true(idl.is_json_type(typeFrom("DOMString")));
+        assert_true(idl.is_json_type(typeFrom("ByteString")));
+        assert_true(idl.is_json_type(typeFrom("USVString")));
+        idl.add_untested_idls('enum BarEnum { "a", "b", "c" };');
+        assert_true(idl.is_json_type(typeFrom("BarEnum")));
+    }, 'should return true for all string types');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_false(idl.is_json_type(typeFrom("Error")));
+        assert_false(idl.is_json_type(typeFrom("DOMException")));
+    }, 'should return false for all exception types');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_false(idl.is_json_type(typeFrom("Int8Array")));
+        assert_false(idl.is_json_type(typeFrom("Int16Array")));
+        assert_false(idl.is_json_type(typeFrom("Int32Array")));
+        assert_false(idl.is_json_type(typeFrom("Uint8Array")));
+        assert_false(idl.is_json_type(typeFrom("Uint16Array")));
+        assert_false(idl.is_json_type(typeFrom("Uint32Array")));
+        assert_false(idl.is_json_type(typeFrom("Uint8ClampedArray")));
+        assert_false(idl.is_json_type(typeFrom("Float32Array")));
+        assert_false(idl.is_json_type(typeFrom("ArrayBuffer")));
+        assert_false(idl.is_json_type(typeFrom("DataView")));
+    }, 'should return false for all buffer source types');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_true(idl.is_json_type(typeFrom("boolean")));
+    }, 'should return true for boolean');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_true(idl.is_json_type(typeFrom("byte")));
+        assert_true(idl.is_json_type(typeFrom("octet")));
+        assert_true(idl.is_json_type(typeFrom("short")));
+        assert_true(idl.is_json_type(typeFrom("unsigned short")));
+        assert_true(idl.is_json_type(typeFrom("long")));
+        assert_true(idl.is_json_type(typeFrom("unsigned long")));
+        assert_true(idl.is_json_type(typeFrom("long long")));
+        assert_true(idl.is_json_type(typeFrom("unsigned long long")));
+        assert_true(idl.is_json_type(typeFrom("float")));
+        assert_true(idl.is_json_type(typeFrom("unrestricted float")));
+        assert_true(idl.is_json_type(typeFrom("double")));
+        assert_true(idl.is_json_type(typeFrom("unrestricted double")));
+    }, 'should return true for all numeric types');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_false(idl.is_json_type(typeFrom("Promise<DOMString>")));
+    }, 'should return false for promises');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_false(idl.is_json_type(typeFrom("sequence<DOMException>")));
+        assert_true(idl.is_json_type(typeFrom("sequence<DOMString>")));
+    }, 'should handle sequences according to their inner types');
+    
+    test(function() {
+        var idl = new IdlArray();
+        assert_false(idl.is_json_type(typeFrom("FrozenArray<DOMException>")));
+        assert_true(idl.is_json_type(typeFrom("FrozenArray<DOMString>")));
+    }, 'should handle frozen arrays according to their inner types');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_true(idl.is_json_type(typeFrom("record<DOMString, DOMString>")));
+        assert_false(idl.is_json_type(typeFrom("record<DOMString, Error>")));
+    }, 'should handle records according to their inner types');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_true(idl.is_json_type(typeFrom("object")));
+    }, 'should return true for object type');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_false(idl.is_json_type(typeFrom("any")));
+    }, 'should return false for any type');
+
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_untested_idls('dictionary Foo { DOMString foo; }; dictionary Bar : Foo { DOMString bar; };');
+        assert_true(idl.is_json_type(typeFrom("Foo")));
+        assert_true(idl.is_json_type(typeFrom("Bar")));
+    }, 'should return true for dictionaries whose members are all JSON types');
+
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_untested_idls('dictionary Foo { };');
+        assert_true(idl.is_json_type(typeFrom("Foo")));
+    }, 'should return true for dictionaries which have no members');
+
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_untested_idls('dictionary FooBar { DOMString a; Error b; }; dictionary Baz : FooBar {};');
+        assert_false(idl.is_json_type(typeFrom("FooBar")));
+        assert_false(idl.is_json_type(typeFrom("Baz")));
+    }, 'should return false for dictionaries whose members are not all JSON types');
+
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_untested_idls('interface Foo { DOMString toJSON(); };');
+        assert_true(idl.is_json_type(typeFrom("Foo")));
+    }, 'should return true for interfaces which declare a toJSON operation');
+
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_untested_idls('interface Foo { DOMString toJSON(); }; interface Bar : Foo { };');
+        assert_true(idl.is_json_type(typeFrom("Bar")));
+    }, 'should return true for interfaces which inherit from an interface which declares a toJSON operation');
+
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_untested_idls('interface Foo { }; interface Bar { DOMString toJSON(); }; Foo implements Bar;');
+        assert_true(idl.is_json_type(typeFrom("Foo")));
+    }, 'should return true for interfaces which mixin an interface which declare a toJSON operation');
+
+//    test(function() {
+//        var idl = new IdlArray();
+//        idl.add_untested_idls('interface Foo { }; interface Bar { }; interface Baz { DOMString toJSON(); }; Foo implements Bar; Bar implements Baz;');
+//        assert_true(idl.is_json_type(typeFrom("Foo")));
+//    }, 'should return true for interfaces which mixin an interface which itself mixes in an interface which declares a toJSON operation');
+
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_untested_idls('interface Foo { };');
+        assert_false(idl.is_json_type(typeFrom("Foo")));
+    }, 'should return false for interfaces which do not declare a toJSON operation');
+
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_untested_idls('interface Foo { object toJSON(); };');
+        assert_true(idl.is_json_type(typeFrom("(Foo or DOMString)")));
+    }, 'should return true for union types whose member types are JSON types');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_false(idl.is_json_type(typeFrom("(DataView or DOMString)")));
+    }, 'should return false for union types whose member types are not all JSON types');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_true(idl.is_json_type(typeFrom("DOMString?")));
+        assert_false(idl.is_json_type(typeFrom("DataView?")));
+    }, 'should consider the inner types of nullable types');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_true(idl.is_json_type(typeFrom("[XAttr] long")));
+        assert_false(idl.is_json_type(typeFrom("[XAttr] DataView")));
+    }, 'should consider the inner types of annotated types.');
+
+    test(function() {
+        var idl = new IdlArray();
+        assert_throws(new Error(), _ => idl.is_json_type(typeFrom("Foo")));
+    }, "should throw if it references a dictionary, enum or interface which wasn't added to the IdlArray");
+
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_untested_idls('interface Foo : Bar { };');
+        assert_throws(new Error(), _ => idl.is_json_type(typeFrom("Foo")));
+    }, "should throw for interfaces which inherit from another interface which wasn't added to the IdlArray");
+</script>
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlDictionary/get_inheritance_stack.html b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlDictionary/get_inheritance_stack.html
new file mode 100644
index 0000000..83863fb8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlDictionary/get_inheritance_stack.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>IdlDictionary.prototype.get_inheritance_stack()</title>
+</head>
+<body>
+<div id="log"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script src="../helper.js"></script>
+<script>
+    "use strict";
+    test(function() {
+        var stack = dictionaryFrom('dictionary A { };').get_inheritance_stack();
+        assert_array_equals(stack.map(d => d.name), ["A"]);
+    }, 'should return an array that includes itself.');
+    
+    test(function() {
+        var d = dictionaryFrom('dictionary A : B { };');
+        assert_throws(new Error(), _ => d.get_inheritance_stack());
+    }, "should throw for dictionaries which inherit from another dictionary which wasn't added to the IdlArray");
+    
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_idls('dictionary A : B { };');
+        idl.add_untested_idls('dictionary B : C { }; dictionary C { };');
+        var A = idl.members["A"];
+        assert_array_equals(A.get_inheritance_stack().map(d => d.name), ["A", "B", "C"]);
+    }, 'should return an array of inherited dictionaries in order of inheritance, starting with itself.');
+</script>
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/default_to_json_operation.html b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/default_to_json_operation.html
new file mode 100644
index 0000000..a77ee3e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/default_to_json_operation.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>IdlDictionary.prototype.default_to_json_operation()</title>
+</head>
+<body>
+<div id="log"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script src="../helper.js"></script>
+<pre id=fragments>
+    interface A : B {
+      attribute DOMString a;
+    };
+
+    interface B : C {
+      [Default] object toJSON();
+      attribute long b;
+    };
+
+    interface C {
+      attribute DOMString c;
+    };
+
+    interface D : E {
+      [Default] object toJSON();
+      attribute float d;
+    };
+
+    interface E : F {
+      attribute DOMString e;
+    };
+
+    interface F {
+      [Default] object toJSON();
+      attribute unrestricted double f;
+    };
+
+    interface G {
+      [Default] object toJSON();
+      attribute octet g;
+    };
+
+    interface H {
+      [Default] object toJSON();
+      attribute DOMString h;
+    };
+
+    interface I {
+      [Default] object toJSON();
+      attribute boolean i;
+    };
+
+    interface J {
+      [Default] object toJSON();
+      attribute D j;
+    };
+
+    A implements G;
+    A implements H;
+    B implements D;
+    E implements I;
+    H implements J;
+</pre>
+<script>
+    "use strict";
+    test(function() {
+        var map = interfaceFrom('interface A { [Default] object toJSON(); };').default_to_json_operation();
+        assert_equals(map.size, 0);
+    }, 'should return an empty map when there are no attributes');
+
+    test(function() {
+        var r = interfaceFrom('interface A { };').default_to_json_operation();
+        assert_equals(r, null);
+    }, 'should return null when there is no toJSON method');
+
+    test(function() {
+        var r = interfaceFrom('interface A { DOMString toJSON(); };').default_to_json_operation();
+        assert_equals(r, null);
+    }, 'should return null when there is a toJSON method but it does not have the [Default] extended attribute');
+
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls("interface A : B { DOMString toJSON(); };");
+        context.add_idls("interface B { [Default] object toJSON(); };");
+        var r = context.members.A.default_to_json_operation();
+        assert_equals(r, null);
+    }, 'should return null when there is a toJSON method but it does not have the [Default] extended attribute even if this extended attribute exists on inherited interfaces');
+
+    test(function() {
+        var map = interfaceFrom('interface A { [Default] object toJSON(); static attribute DOMString foo; };').default_to_json_operation();
+        assert_equals(map.size, 0);
+    }, 'should not include static attributes');
+
+    test(function() {
+        var map = interfaceFrom('interface A { [Default] object toJSON(); attribute Promise<DOMString> bar; };').default_to_json_operation();
+        assert_equals(map.size, 0);
+    }, 'should not include attributes which are not JSON types');
+
+    test(function() {
+        var map = interfaceFrom('interface A { [Default] object toJSON(); DOMString bar(); };').default_to_json_operation();
+        assert_equals(map.size, 0);
+    }, 'should not include operations');
+
+    test(function() {
+        var map = interfaceFrom('interface A { [Default] object toJSON(); attribute DOMString bar; };').default_to_json_operation();
+        assert_equals(map.size, 1);
+        assert_true(map.has("bar"));
+        assert_equals(map.get("bar").idlType, "DOMString");
+    }, 'should return a map whose key/value pair represent the identifier and IDL type of valid attributes');
+
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls("interface A : B { [Default] object toJSON(); attribute DOMString a; };");
+        context.add_idls("interface B { [Default] object toJSON(); attribute long b; };");
+        var map = context.members.A.default_to_json_operation();
+        assert_array_equals([...map.keys()], ["b", "a"]);
+        assert_array_equals([...map.values()].map(v => v.idlType), ["long", "DOMString"]);
+    }, 'should return a properly ordered map that contains IDL types of valid attributes for inherited interfaces');
+
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls("interface A : B { attribute DOMString a; };");
+        context.add_idls("interface B { [Default] object toJSON(); attribute long b; };");
+        var map = context.members.A.default_to_json_operation();
+        assert_equals(map.size, 1);
+        assert_true(map.has("b"));
+        assert_equals(map.get("b").idlType, "long");
+        assert_array_equals([...map.keys()], ["b"]);
+    }, 'should not include attributes of the current interface when the [Default] toJSON method in inherited');
+
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls("interface A : B { [Default] object toJSON(); };");
+        context.add_idls("interface B : C { [Default] object toJSON(); attribute DOMString foo; };");
+        context.add_idls("interface C { [Default] object toJSON(); attribute long foo; };");
+        var map = context.members.A.default_to_json_operation();
+        assert_equals(map.size, 1);
+        assert_true(map.has("foo"));
+        assert_equals(map.get("foo").idlType, "DOMString");
+    }, 'attributes declared further away in the inheritance hierarchy should be masked by attributes declared closer');
+
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls("interface A : B { [Default] object toJSON(); attribute DOMString a; };");
+        context.add_idls("interface B { object toJSON(); attribute long b; };");
+        var map = context.members.A.default_to_json_operation();
+        assert_equals(map.size, 1);
+        assert_true(map.has("a"));
+        assert_false(map.has("b"));
+        assert_equals(map.get("a").idlType, "DOMString");
+    }, 'should return an ordered map that ignores attributes of inherited interfaces which do not declare a [Default] toJSON operation.');
+
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls("interface A { [Default] object toJSON(); attribute DOMString a; };");
+        context.add_idls("interface N { [Default] object toJSON(); attribute long n; };");
+        context.add_idls("A implements N;");
+        var map = context.members.A.default_to_json_operation();
+        assert_array_equals([...map.keys()], ["a", "n"]);
+        assert_array_equals([...map.values()].map(v => v.idlType), ["DOMString", "long"]);
+    }, 'should return a properly ordered map that accounts for mixed-in interfaces which declare a [Default] toJSON operation.');
+
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls("interface A { [Default] object toJSON(); attribute DOMString a; };");
+        context.add_idls("interface N { attribute long n; };");
+        context.add_idls("A implements N;");
+        var map = context.members.A.default_to_json_operation();
+        assert_equals(map.size, 1);
+        assert_true(map.has("a"));
+        assert_false(map.has("n"));
+        assert_equals(map.get("a").idlType, "DOMString");
+    }, 'should return a properly ordered map that ignores mixed-in interfaces which do not declare a [Default] toJSON operation.');
+
+
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls(document.getElementById('fragments').textContent);
+        var map = context.members.A.default_to_json_operation();
+        assert_array_equals([...map.keys()], ["b", "f", "i", "d", "g", "h", "j"]);
+        assert_array_equals([...map.values()].map(v => v.idlType), ["long", "unrestricted double", "boolean", "float", "octet", "DOMString", "D"]);
+    }, 'should return a properly ordered map of name/type pairs handling inherited and consequential interfaces as specified.');
+</script>
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/get_inheritance_stack.html b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/get_inheritance_stack.html
new file mode 100644
index 0000000..c1d61415
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/get_inheritance_stack.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>IdlInterface.prototype.get_inheritance_stack()</title>
+</head>
+<body>
+<div id="log"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script src="../helper.js"></script>
+<script>
+    "use strict";
+    test(function() {
+        var stack = interfaceFrom('interface A { };').get_inheritance_stack();
+        assert_array_equals(stack.map(i => i.name), ["A"]);
+    }, 'should return an array that includes itself.');
+    
+    test(function() {
+        var i = interfaceFrom('interface A : B { };');
+        assert_throws(new Error(), _ => i.get_inheritance_stack());
+    }, "should throw for interfaces which inherit from another interface which wasn't added to the IdlArray");
+    
+    test(function() {
+        var idl = new IdlArray();
+        idl.add_idls('interface A : B { };');
+        idl.add_untested_idls('interface B : C { }; interface C { };');
+        var A = idl.members["A"];
+        assert_array_equals(A.get_inheritance_stack().map(i => i.name), ["A", "B", "C"]);
+    }, 'should return an array of inherited interfaces in order of inheritance, starting with itself.');
+</script>
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/has_default_to_json_regular_operation.html b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/has_default_to_json_regular_operation.html
new file mode 100644
index 0000000..9498a3a7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/has_default_to_json_regular_operation.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>IdlInterface.prototype.has_default_to_json_regular_operation()</title>
+</head>
+<body>
+<div id="log"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script src="../helper.js"></script>
+<script>
+    "use strict";
+    test(function() {
+        var i = interfaceFrom('interface A { };');
+        assert_false(i.has_default_to_json_regular_operation());
+    }, 'should return false when the interface declares no toJSON operation.');
+
+    test(function() {
+        var i = interfaceFrom('interface A { static object toJSON(); };');
+        assert_false(i.has_default_to_json_regular_operation());
+    }, 'should return false when the interface declares a static toJSON operation.');
+
+    test(function() {
+        var i = interfaceFrom('interface A { object toJSON(); };');
+        assert_false(i.has_default_to_json_regular_operation());
+    }, 'should return false when the interface declares a regular toJSON operation with no extended attribute.');
+
+    test(function() {
+        var i = interfaceFrom('interface A { [x] object toJSON(); };');
+        assert_false(i.has_default_to_json_regular_operation());
+    }, 'should return false when the interface declares a regular toJSON operation with another extented attribute.');
+
+    test(function() {
+        var i = interfaceFrom('interface A { [Default] object toJSON(); };');
+        assert_true(i.has_default_to_json_regular_operation());
+    }, 'should return true when the interface declares a regular toJSON operation with the [Default] extented attribute.');
+
+    test(function() {
+        var i = interfaceFrom('interface A { [Attr, AnotherAttr, Default] object toJSON(); };');
+        assert_true(i.has_default_to_json_regular_operation());
+    }, 'should return true when the interface declares a regular toJSON operation with multiple extended attributes, including [Default].');
+</script>
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/has_to_json_regular_operation.html b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/has_to_json_regular_operation.html
new file mode 100644
index 0000000..a4b4e91b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/has_to_json_regular_operation.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>IdlInterface.prototype.has_to_json_regular_operation()</title>
+</head>
+<body>
+<div id="log"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script src="../helper.js"></script>
+<script>
+    "use strict";
+    test(function() {
+        var i = interfaceFrom('interface A { };');
+        assert_false(i.has_to_json_regular_operation());
+    }, 'should return false when the interface declares no toJSON operation.');
+    
+    test(function() {
+        var i = interfaceFrom('interface A { static object toJSON(); };');
+        assert_false(i.has_to_json_regular_operation());
+    }, 'should return false when the interface declares a static toJSON operation.');
+    
+    test(function() {
+        var i = interfaceFrom('interface A { object toJSON(); };');
+        assert_true(i.has_to_json_regular_operation());
+    }, 'should return true when the interface declares a regular toJSON operation.');
+</script>
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/test_to_json_operation.html b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/test_to_json_operation.html
new file mode 100644
index 0000000..b91f3ee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/test_to_json_operation.html
@@ -0,0 +1,197 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>IdlInterface.prototype.test_to_json_operation()</title>
+  <script src="/resources/testharness.js"></script>
+  <script src="/resources/testharnessreport.js"></script>
+  <script src="/resources/WebIDLParser.js"></script>
+  <script src="/resources/idlharness.js"></script>
+  <script src="../helper.js"></script>
+</head>
+<body>
+<script>
+    "use strict";
+    function wrap(obj) {
+        return {
+            toJSON: function() {
+                return obj;
+            }
+        }
+    }
+
+    var i, obj;
+    i = interfaceFrom("interface A { [Default] object toJSON(); attribute long foo; };");
+    i.test_to_json_operation(wrap({ foo: 123 }), i.members[0]);
+
+    // should fail (wrong type)
+    i = interfaceFrom("interface B { [Default] object toJSON(); attribute long foo; };");
+    i.test_to_json_operation(wrap({ foo: "a value" }), i.members[0]);
+
+    // should fail (extra property)
+    i = interfaceFrom("interface C { [Default] object toJSON(); attribute long foo; };");
+    i.test_to_json_operation(wrap({ foo: 123, bar: null }), i.members[0]);
+
+    // should fail (missing property)
+    i = interfaceFrom("interface D { [Default] object toJSON(); attribute long foo; };");
+    i.test_to_json_operation(wrap({ }), i.members[0]);
+
+    // should fail (extra property)
+    i = interfaceFrom("interface E { [Default] object toJSON(); attribute long foo; attribute Promise<long> baz; };");
+    i.test_to_json_operation(wrap({ foo: 123, baz: 123 }), i.members[0]);
+
+    // should fail (should be writable)
+    obj = Object.defineProperties({}, { foo: {
+        writable: false,
+        enumerable: true,
+        configurable: true,
+        value: 123
+    }});
+    i = interfaceFrom("interface F { [Default] object toJSON(); attribute long foo; };");
+    i.test_to_json_operation(wrap(obj), i.members[0]);
+
+    // should fail (should be enumerable)
+    obj = Object.defineProperties({}, { foo: {
+        writable: true,
+        enumerable: false,
+        configurable: true,
+        value: 123
+    }});
+    i = interfaceFrom("interface G { [Default] object toJSON(); attribute long foo; };");
+    i.test_to_json_operation(wrap(obj), i.members[0]);
+
+    // should fail (should be configurable)
+    obj = Object.defineProperties({}, { foo: {
+        writable: true,
+        enumerable: true,
+        configurable: false,
+        value: 123
+    }});
+    i = interfaceFrom("interface H { [Default] object toJSON(); attribute long foo; };");
+    i.test_to_json_operation(wrap(obj), i.members[0]);
+
+    var idl = new IdlArray();
+    idl.add_idls("interface I : J { [Default] object toJSON(); attribute long foo; };");
+    idl.add_idls("interface J { [Default] object toJSON(); attribute DOMString foo;};");
+    var i = idl.members.I;
+    i.test_to_json_operation(wrap({ foo: 123 }), i.members[0]);
+
+    i = interfaceFrom("interface K { [Default] object toJSON(); };");
+    i.test_to_json_operation(wrap({}), i.members[0]);
+
+    i = interfaceFrom("interface L { DOMString toJSON(); };");
+    i.test_to_json_operation(wrap("a string"), i.members[0]);
+
+    // should fail (wrong output type)
+    i = interfaceFrom("interface M { DOMString toJSON(); };");
+    i.test_to_json_operation(wrap({}), i.members[0]);
+
+    // should fail (not an IDL type)
+    i = interfaceFrom("interface N { DOMException toJSON(); };");
+    i.test_to_json_operation(wrap({}), i.members[0]);
+</script>
+<script type="text/json" id="expected">
+    {
+        "summarized_status": {
+            "message": null,
+            "stack": null,
+            "status_string": "OK"
+        },
+        "summarized_tests": [
+            {
+                "message": null,
+                "name": "Test default toJSON operation of A",
+                "properties": {},
+                "stack": null,
+                "status_string": "PASS"
+            },
+            {
+                "message": "assert_equals: expected \"number\" but got \"string\"",
+                "name": "Test default toJSON operation of B",
+                "properties": {},
+                "stack": "(implementation-defined)",
+                "status_string": "FAIL"
+            },
+            {
+                "message": "assert_unreached: property bar should not be present in the output of C.prototype.toJSON() Reached unreachable code",
+                "name": "Test default toJSON operation of C",
+                "properties": {},
+                "stack": "(implementation-defined)",
+                "status_string": "FAIL"
+            },
+            {
+                "message": "assert_true: property foo should be present in the output of D.prototype.toJSON() expected true got false",
+                "name": "Test default toJSON operation of D",
+                "properties": {},
+                "stack": "(implementation-defined)",
+                "status_string": "FAIL"
+            },
+            {
+                "message": "assert_unreached: property baz should not be present in the output of E.prototype.toJSON() Reached unreachable code",
+                "name": "Test default toJSON operation of E",
+                "properties": {},
+                "stack": "(implementation-defined)",
+                "status_string": "FAIL"
+            },
+            {
+                "message": "assert_true: property foo should be writable expected true got false",
+                "name": "Test default toJSON operation of F",
+                "properties": {},
+                "stack": "(implementation-defined)",
+                "status_string": "FAIL"
+            },
+            {
+                "message": "assert_true: property foo should be enumerable expected true got false",
+                "name": "Test default toJSON operation of G",
+                "properties": {},
+                "stack": "(implementation-defined)",
+                "status_string": "FAIL"
+            },
+            {
+                "message": "assert_true: property foo should be configurable expected true got false",
+                "name": "Test default toJSON operation of H",
+                "properties": {},
+                "stack": "(implementation-defined)",
+                "status_string": "FAIL"
+            },
+            {
+                "message": null,
+                "name": "Test default toJSON operation of I",
+                "properties": {},
+                "stack": null,
+                "status_string": "PASS"
+            },
+            {
+                "message": null,
+                "name": "Test default toJSON operation of K",
+                "properties": {},
+                "stack": null,
+                "status_string": "PASS"
+            },
+            {
+                "message": null,
+                "name": "Test toJSON operation of L",
+                "properties": {},
+                "stack": null,
+                "status_string": "PASS"
+            },
+            {
+                "message": "assert_equals: expected \"string\" but got \"object\"",
+                "name": "Test toJSON operation of M",
+                "properties": {},
+                "stack": "(implementation-defined)",
+                "status_string": "FAIL"
+            },
+            {
+                "message": "assert_true: {\"sequence\":false,\"generic\":null,\"nullable\":false,\"array\":false,\"union\":false,\"idlType\":\"DOMException\"} is not an appropriate return value for the toJSON operation of N expected true got false",
+                "name": "Test toJSON operation of N",
+                "properties": {},
+                "stack": "(implementation-defined)",
+                "status_string": "FAIL"
+            }
+        ],
+        "type": "complete"
+    }
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/traverse_inherited_and_consequential_interfaces.html b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/traverse_inherited_and_consequential_interfaces.html
new file mode 100644
index 0000000..1a192919
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterface/traverse_inherited_and_consequential_interfaces.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>IdlDictionary.prototype.traverse_inherited_and_consequential_interfaces()</title>
+</head>
+<body>
+<div id="log"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script src="../helper.js"></script>
+<pre id=fragments>
+    interface A : B { };
+    interface B : C { };
+    interface C { };
+    interface D : E { };
+    interface E : F { };
+    interface F { };
+    interface G { };
+    interface H { };
+    interface I { };
+    interface J { };
+
+    A implements G;
+    A implements H;
+    B implements D;
+    E implements I;
+    H implements J;
+</pre>
+<script>
+    "use strict";
+    test(function() {
+        var interfaces = [];
+        interfaceFrom('interface A { };').traverse_inherited_and_consequential_interfaces(function(i) {
+            interfaces.push(i.name);
+        });
+        assert_array_equals(interfaces, ["A"]);
+    }, 'should return an array that includes itself.');
+    
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls("interface A { }; A implements B;");
+        assert_throws(new Error(), _ => context.members["A"].traverse_inherited_and_consequential_interfaces(function() {}));
+    }, "should throw for interfaces which are extended by another interface which wasn't added to the IdlArray.");
+
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls("interface A { };");
+        assert_throws(new TypeError(), _ => context.members["A"].traverse_inherited_and_consequential_interfaces());
+    }, "should throw if not passed a callback");
+    
+    test(function() {
+        var context = new IdlArray();
+        context.add_idls(document.getElementById('fragments').textContent);
+        var interfaces = [];
+        context.members["A"].traverse_inherited_and_consequential_interfaces(function(i) {
+            interfaces.push(i.name);
+        });
+        assert_array_equals(interfaces, ["C", "B", "F", "E", "I", "D", "A", "G", "H", "J"]);
+    }, 'should return an array that includes the identifier of the interfaces in the correct order.');
+</script>
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterfaceMember/is_to_json_regular_operation.html b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterfaceMember/is_to_json_regular_operation.html
new file mode 100644
index 0000000..ac923dd5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/IdlInterfaceMember/is_to_json_regular_operation.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>IdlInterfaceMember.prototype.is_to_json_regular_operation()</title>
+</head>
+<body>
+<div id="log"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script src="../helper.js"></script>
+<script>
+    "use strict";
+    test(function() {
+        var m = memberFrom("readonly attribute DOMString foo");
+        assert_false(m.is_to_json_regular_operation());
+    }, 'should return false when member is an attribute.');
+
+    test(function() {
+        var m = memberFrom("static void foo()");
+        assert_false(m.is_to_json_regular_operation());
+    }, 'should return false when member is a static operation.');
+
+    test(function() {
+        var m = memberFrom("static object toJSON()");
+        assert_false(m.is_to_json_regular_operation());
+    }, 'should return false when member is a static toJSON operation.');
+
+    test(function() {
+        var m = memberFrom("object toJSON()");
+        assert_true(m.is_to_json_regular_operation());
+    }, 'should return true when member is a regular toJSON operation.');
+
+    test(function() {
+        var m = memberFrom("[Foo] object toJSON()");
+        assert_true(m.is_to_json_regular_operation());
+    }, 'should return true when member is a regular toJSON operation with extensible attributes.');
+</script>
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/basic.html b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/basic.html
new file mode 100644
index 0000000..da3c3fa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/basic.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>idlharness basic</title>
+</head>
+<body>
+<div id="log"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script>
+    "use strict";
+    test(function() {
+        assert_true("IdlArray" in window);
+    }, 'IdlArray constructor should be a global object');
+    test(function() {
+        assert_true(new IdlArray() instanceof IdlArray);
+    }, 'IdlArray constructor should be constructible');
+    test(function() {
+        assert_true("WebIDL2" in window);
+    }, 'WebIDL2 namespace should be a global object');
+    test(function() {
+        assert_equals(typeof WebIDL2.parse, "function");
+    }, 'WebIDL2 namespace should have a parse method');
+    test(function() {
+        assert_throws(new TypeError(), function() {  WebIDL2.parse("I'm a syntax error"); });
+    }, 'WebIDL2 parse method should bail on incorrect WebIDL');
+    test(function() {
+        assert_equals(typeof WebIDL2.parse("interface Foo {};"), "object");
+    }, 'WebIDL2 parse method should produce an AST for correct WebIDL');
+</script>
+</body>
+</html>
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/helper.js b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/helper.js
new file mode 100644
index 0000000..a8484af
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/resources/test/tests/idlharness/helper.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var dictionaryFrom = interfaceFrom;
+function interfaceFrom(i) {
+    var idl = new IdlArray();
+    idl.add_idls(i);
+    for (var prop in idl.members) {
+        return idl.members[prop];
+    }
+}
+
+function memberFrom(m) {
+    var idl = new IdlArray();
+    idl.add_idls('interface A { ' + m + '; };');
+    return idl.members["A"].members[0];
+}
+
+function typeFrom(type) {
+    var ast = WebIDL2.parse('interface Foo { ' + type + ' a(); };');
+    ast = ast[0]; // get the first fragment
+    ast = ast.members[0]; // get the first member
+    return ast.idlType; // get the type of the first field
+}
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https-expected.txt
new file mode 100644
index 0000000..f6a2141
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL fetch() should be intercepted after the client is claimed. promise_test: Unhandled rejection with value: object "TypeError: Cannot read property 'appendChild' of null"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https.html b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https.html
index 050c1ea..ddb7428 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/claim-fetch.https.html
@@ -4,12 +4,11 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="resources/test-helpers.sub.js"></script>
-<body>
 <script>
 
 promise_test(function(t) {
   var frame;
-  var resource = 'simple.txt';
+  var resource = 'resources/simple.txt';
 
   var worker;
   var scope = 'resources/';
@@ -66,4 +65,3 @@
 }, 'fetch() should be intercepted after the client is claimed.')
 
 </script>
-</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/workers/interfaces.idl b/third_party/WebKit/LayoutTests/external/wpt/workers/interfaces.idl
deleted file mode 100644
index 531a59cf..0000000
--- a/third_party/WebKit/LayoutTests/external/wpt/workers/interfaces.idl
+++ /dev/null
@@ -1,104 +0,0 @@
-// -----------------------------------------------------------------------------
-// DOM
-// -----------------------------------------------------------------------------
-[Exposed=(Window,Worker)]
-interface EventTarget {
-  void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
-  void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
-  boolean dispatchEvent(Event event);
-};
-
-callback interface EventListener {
-  void handleEvent(Event event);
-};
-
-// -----------------------------------------------------------------------------
-// HTML
-// -----------------------------------------------------------------------------
-[TreatNonCallableAsNull]
-callback EventHandlerNonNull = any (Event event);
-typedef EventHandlerNonNull? EventHandler;
-
-[TreatNonCallableAsNull]
-callback OnErrorEventHandlerNonNull = any ((Event or DOMString) event, optional DOMString source, optional unsigned long lineno, optional unsigned long column, optional any error);
-typedef OnErrorEventHandlerNonNull? OnErrorEventHandler;
-
-[Exposed=Worker]
-interface WorkerGlobalScope : EventTarget {
-  readonly attribute WorkerGlobalScope self;
-  readonly attribute WorkerLocation location;
-  readonly attribute WorkerNavigator navigator;
-
-  void importScripts(DOMString... urls);
-
-  attribute OnErrorEventHandler onerror;
-
-  attribute EventHandler onoffline;
-  attribute EventHandler ononline;
-};
-
-[Global=(Worker,DedicatedWorker),Exposed=DedicatedWorker]
-/*sealed*/ interface DedicatedWorkerGlobalScope : WorkerGlobalScope {
-  void postMessage(any message, optional sequence<Transferable> transfer);
-  void close();
-  attribute EventHandler onmessage;
-};
-
-WorkerGlobalScope implements WindowTimers;
-WorkerGlobalScope implements WindowBase64;
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface WindowTimers {
-  long setTimeout(Function handler, optional long timeout = 0, any... arguments);
-  long setTimeout(DOMString handler, optional long timeout = 0, any... arguments);
-  void clearTimeout(optional long handle = 0);
-  long setInterval(Function handler, optional long timeout = 0, any... arguments);
-  long setInterval(DOMString handler, optional long timeout = 0, any... arguments);
-  void clearInterval(optional long handle = 0);
-};
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface WindowBase64 {
-  DOMString btoa(DOMString btoa);
-  DOMString atob(DOMString atob);
-};
-
-[Exposed=Worker]
-interface WorkerNavigator {};
-WorkerNavigator implements NavigatorID;
-WorkerNavigator implements NavigatorLanguage;
-WorkerNavigator implements NavigatorOnLine;
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorID {
-  readonly attribute DOMString appCodeName; // constant "Mozilla"
-  readonly attribute DOMString appName;
-  readonly attribute DOMString appVersion;
-  readonly attribute DOMString platform;
-  readonly attribute DOMString product; // constant "Gecko"
-  readonly attribute DOMString userAgent;
-};
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorLanguage {
-  readonly attribute DOMString? language;
-  readonly attribute DOMString[] languages;
-};
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorOnLine {
-  readonly attribute boolean onLine;
-};
-
-[Exposed=Worker]
-interface WorkerLocation {
-  stringifier readonly attribute USVString href;
-  readonly attribute USVString origin;
-  readonly attribute USVString protocol;
-  readonly attribute USVString host;
-  readonly attribute USVString hostname;
-  readonly attribute USVString port;
-  readonly attribute USVString pathname;
-  readonly attribute USVString search;
-  readonly attribute USVString hash;
-};
diff --git a/third_party/WebKit/LayoutTests/external/wpt/workers/interfaces.worker.js b/third_party/WebKit/LayoutTests/external/wpt/workers/interfaces.worker.js
index f07669b..fc9f360 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/workers/interfaces.worker.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/workers/interfaces.worker.js
@@ -16,5 +16,5 @@
   idlArray.test();
   done();
 };
-request.open("GET", "interfaces.idl");
+request.open("GET", "/interfaces/dedicated-workers.idl");
 request.send();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/workers/name-property.html b/third_party/WebKit/LayoutTests/external/wpt/workers/name-property.html
index b16be68..939601e5 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/workers/name-property.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/workers/name-property.html
@@ -14,6 +14,12 @@
 const worker = new Worker("support/name.js", { name: "my name" });
 fetch_tests_from_worker(worker);
 
+const worker2 = new Worker("support/name-as-accidental-global.js");
+fetch_tests_from_worker(worker2);
+
 const sharedWorker = new SharedWorker("support/name.js", { name: "my name" });
 fetch_tests_from_worker(sharedWorker);
+
+const sharedWorker2 = new SharedWorker("support/name-as-accidental-global.js");
+fetch_tests_from_worker(sharedWorker2);
 </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/workers/support/name-as-accidental-global.js b/third_party/WebKit/LayoutTests/external/wpt/workers/support/name-as-accidental-global.js
new file mode 100644
index 0000000..8783a38
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/workers/support/name-as-accidental-global.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var name = "something else";
+
+// This just makes the test name not "Untitled"
+test(() => { }, "Declaring name as an accidental global must not cause a harness error");
+
+done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/workers/support/name.js b/third_party/WebKit/LayoutTests/external/wpt/workers/support/name.js
index 0f3537c..7c42c78 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/workers/support/name.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/workers/support/name.js
@@ -6,4 +6,13 @@
   assert_equals(self.name, "my name")
 }, `name property value for ${self.constructor.name}`);
 
+test(() => {
+  self.name = "something new";
+  const propDesc = Object.getOwnPropertyDescriptor(self, "name");
+  assert_equals(propDesc.value, "something new", "value");
+  assert_true(propDesc.configurable, "configurable");
+  assert_true(propDesc.writable, "writable");
+  assert_true(propDesc.enumerable, "enumerable");
+}, `name property is replaceable for ${self.constructor.name}`);
+
 done();