Merge inbound to mozilla-central. a=merge
authorNarcis Beleuzu <nbeleuzu@mozilla.com>
Fri, 10 Aug 2018 19:00:28 +0300
changeset 430972 61e553ff703e2d93db2f03aa901d1976e8084723
parent 430943 2bbf606a0b6870b24dd33612dafa9a37f3bee47a (current diff)
parent 430971 1d475ec08b135446685a267b9a0e8d876a3d4c7f (diff)
child 430987 22df8543130204c62d68a257f2a3dbfe9d5abfad
child 431018 299ae7dac53a80e9843e75da290d4c3153573d03
push id34417
push usernbeleuzu@mozilla.com
push dateFri, 10 Aug 2018 16:00:49 +0000
treeherdermozilla-central@61e553ff703e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone63.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge inbound to mozilla-central. a=merge
testing/web-platform/meta/navigation-timing/nav2_test_document_open.html.ini
testing/web-platform/meta/service-workers/service-worker/claim-with-redirect.https.html.ini
--- a/browser/components/customizableui/PanelMultiView.jsm
+++ b/browser/components/customizableui/PanelMultiView.jsm
@@ -167,23 +167,18 @@ var AssociatedToNode = class {
   get document() {
     return this.node.ownerDocument;
   }
 
   get window() {
     return this.node.ownerGlobal;
   }
 
-  /**
-   * nsIDOMWindowUtils for the window of this node.
-   */
-  get _dwu() {
-    if (this.__dwu)
-      return this.__dwu;
-    return this.__dwu = this.window.windowUtils;
+  _getBoundsWithoutFlushing(element) {
+    return this.window.windowUtils.getBoundsWithoutFlushing(element);
   }
 
   /**
    * Dispatches a custom event on this element.
    *
    * @param  {String}    eventName Name of the event to dispatch.
    * @param  {Object}    [detail]  Event detail object. Optional.
    * @param  {Boolean}   cancelable If the event can be canceled.
@@ -418,18 +413,17 @@ var PanelMultiView = class extends Assoc
 
     this._panel.removeEventListener("mousemove", this);
     this._panel.removeEventListener("popupshowing", this);
     this._panel.removeEventListener("popuppositioned", this);
     this._panel.removeEventListener("popupshown", this);
     this._panel.removeEventListener("popuphidden", this);
     this.window.removeEventListener("keydown", this);
     this.node = this._openPopupPromise = this._openPopupCancelCallback =
-      this._viewContainer = this._viewStack = this.__dwu =
-      this._transitionDetails = null;
+      this._viewContainer = this._viewStack = this._transitionDetails = null;
   }
 
   /**
    * Tries to open the panel associated with this PanelMultiView, and displays
    * the main view specified with the "mainViewId" attribute.
    *
    * The hidePopup method can be called while the operation is in progress to
    * prevent the panel from being displayed. View events may also cancel the
@@ -873,31 +867,31 @@ var PanelMultiView = class extends Assoc
       let height = prevPanelView.knownHeight;
       viewRect = Object.assign({height, width}, viewNode.customRectGetter());
       nextPanelView.visible = true;
       // Until the header is visible, it has 0 height.
       // Wait for layout before measuring it
       let header = viewNode.firstElementChild;
       if (header && header.classList.contains("panel-header")) {
         viewRect.height += await window.promiseDocumentFlushed(() => {
-          return this._dwu.getBoundsWithoutFlushing(header).height;
+          return this._getBoundsWithoutFlushing(header).height;
         });
       }
       await nextPanelView.descriptionHeightWorkaround();
     } else {
       this._offscreenViewStack.style.minHeight = olderView.knownHeight + "px";
       this._offscreenViewStack.appendChild(viewNode);
       nextPanelView.visible = true;
 
       // Now that the subview is visible, we can check the height of the
       // description elements it contains.
       await nextPanelView.descriptionHeightWorkaround();
 
       viewRect = await window.promiseDocumentFlushed(() => {
-        return this._dwu.getBoundsWithoutFlushing(viewNode);
+        return this._getBoundsWithoutFlushing(viewNode);
       });
       // Bail out if the panel was closed in the meantime.
       if (!nextPanelView.isOpenIn(this)) {
         return;
       }
 
       // Place back the view after all the other views that are already open in
       // order for the transition to work as expected.
@@ -1252,17 +1246,17 @@ var PanelView = class extends Associated
   /**
    * Populates the "knownWidth" and "knownHeight" properties with the current
    * dimensions of the view. These may be zero if the view is invisible.
    *
    * These values are relevant during transitions and are retained for backwards
    * navigation if the view is still open but is invisible.
    */
   captureKnownSize() {
-    let rect = this._dwu.getBoundsWithoutFlushing(this.node);
+    let rect = this._getBoundsWithoutFlushing(this.node);
     this.knownWidth = rect.width;
     this.knownHeight = rect.height;
   }
 
   /**
    * If the main view or a subview contains wrapping elements, the attribute
    * "descriptionheightworkaround" should be set on the view to force all the
    * wrapping "description", "label" or "toolbarbutton" elements to a fixed
@@ -1365,26 +1359,25 @@ var PanelView = class extends Associated
    */
   get _navigableElements() {
     if (this.__navigableElements) {
       return this.__navigableElements;
     }
 
     let navigableElements = Array.from(this.node.querySelectorAll(
       ":-moz-any(button,toolbarbutton,menulist,.text-link):not([disabled])"));
-    let dwu = this._dwu;
     return this.__navigableElements = navigableElements.filter(element => {
       // Set the "tabindex" attribute to make sure the element is focusable.
       if (!element.hasAttribute("tabindex")) {
         element.setAttribute("tabindex", "0");
       }
       if (element.hasAttribute("disabled")) {
         return false;
       }
-      let bounds = dwu.getBoundsWithoutFlushing(element);
+      let bounds = this._getBoundsWithoutFlushing(element);
       return bounds.width > 0 && bounds.height > 0;
     });
   }
 
   /**
    * Element that is currently selected with the keyboard, or null if no element
    * is selected. Since the reference is held weakly, it can become null or
    * undefined at any time.
--- a/browser/components/extensions/parent/ext-commands.js
+++ b/browser/components/extensions/parent/ext-commands.js
@@ -356,16 +356,17 @@ this.commands = class extends ExtensionA
             commands.set(name, {...manifestCommands.get(name)});
             ExtensionSettingsStore.removeSetting(extension.id, "commands", name);
             this.registerKeys(commands);
           }
         },
         onCommand: new EventManager({
           context,
           name: "commands.onCommand",
+          inputHandling: true,
           register: fire => {
             let listener = (eventName, commandName) => {
               fire.async(commandName);
             };
             this.on("command", listener);
             return () => {
               this.off("command", listener);
             };
--- a/browser/components/extensions/test/browser/browser_ext_user_events.js
+++ b/browser/components/extensions/test/browser/browser_ext_user_events.js
@@ -42,16 +42,17 @@ add_task(async function testSources() {
         }
       }
 
       let tabs = await browser.tabs.query({active: true, currentWindow: true});
       await browser.pageAction.show(tabs[0].id);
 
       browser.pageAction.onClicked.addListener(() => request("bookmarks"));
       browser.browserAction.onClicked.addListener(() => request("tabs"));
+      browser.commands.onCommand.addListener(() => request("downloads"));
 
       browser.test.onMessage.addListener(msg => {
         if (msg === "contextMenus.update") {
           browser.contextMenus.onClicked.addListener(() => request("webNavigation"));
           browser.contextMenus.update("menu", {
             title: "test user events in onClicked",
             onclick: null,
           }, () => browser.test.sendMessage("contextMenus.update-done"));
@@ -118,19 +119,27 @@ add_task(async function testSources() {
         });
       },
     },
 
     manifest: {
       browser_action: {default_title: "test"},
       page_action: {default_title: "test"},
       permissions: ["contextMenus"],
-      optional_permissions: ["bookmarks", "tabs", "webNavigation", "webRequest", "cookies"],
+      optional_permissions: ["bookmarks", "tabs", "webNavigation", "webRequest",
+                             "cookies", "downloads"],
       options_ui: {page: "options.html"},
       content_security_policy: "script-src 'self' https://example.com; object-src 'none';",
+      commands: {
+        command: {
+          suggested_key: {
+            "default": "Alt+Shift+J",
+          },
+        },
+      },
     },
 
     useAddonManager: "temporary",
   });
 
   async function check(what) {
     let result = await extension.awaitMessage("request");
     ok(result.success, `request() did not throw when called from ${what}`);
@@ -173,16 +182,22 @@ add_task(async function testSources() {
   extension.sendMessage("contextMenus.update");
   await extension.awaitMessage("contextMenus.update-done");
   menu = await openContextMenu("body");
   items = menu.getElementsByAttribute("label", "test user events in onClicked");
   is(items.length, 1, "Found context menu item again");
   EventUtils.synthesizeMouseAtCenter(items[0], {});
   await check("context menu in onClicked");
 
+  EventUtils.synthesizeKey("j", {altKey: true, shiftKey: true});
+  promisePopupNotificationShown("addon-webext-permissions").then(panel => {
+    panel.button.click();
+  });
+  await check("commands shortcut");
+
   promisePopupNotificationShown("addon-webext-permissions").then(panel => {
     panel.button.click();
   });
   extension.sendMessage("openOptionsPage");
   await check("options page link click");
 
   await BrowserTestUtils.removeTab(gBrowser.selectedTab);
   await BrowserTestUtils.removeTab(tab);
--- a/dom/base/CustomElementRegistry.cpp
+++ b/dom/base/CustomElementRegistry.cpp
@@ -297,17 +297,23 @@ CustomElementRegistry::~CustomElementReg
 
 bool
 CustomElementRegistry::IsCustomElementEnabled(JSContext* aCx, JSObject* aObject)
 {
   if (nsContentUtils::IsCustomElementsEnabled()) {
     return true;
   }
 
-  return XRE_IsParentProcess() && nsContentUtils::AllowXULXBLForPrincipal(nsContentUtils::ObjectPrincipal(aObject));
+  if (!XRE_IsParentProcess()) {
+    return false;
+  }
+
+  nsIPrincipal* principal =
+    nsContentUtils::ObjectPrincipal(js::UncheckedUnwrap(aObject));
+  return nsContentUtils::AllowXULXBLForPrincipal(principal);
 }
 
 bool
 CustomElementRegistry::IsCustomElementEnabled(nsIDocument* aDoc)
 {
   if (nsContentUtils::IsCustomElementsEnabled()) {
     return true;
   }
--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
@@ -3092,20 +3092,20 @@ nsIPrincipal*
 nsContentUtils::ObjectPrincipal(JSObject* aObj)
 {
   MOZ_ASSERT(NS_IsMainThread());
 
 #ifdef DEBUG
   JS::AssertObjectBelongsToCurrentThread(aObj);
 #endif
 
-  // This is duplicated from nsScriptSecurityManager. We don't call through there
-  // because the API unnecessarily requires a JSContext for historical reasons.
-  JS::Compartment* compartment = js::GetObjectCompartment(aObj);
-  JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
+  MOZ_DIAGNOSTIC_ASSERT(!js::IsCrossCompartmentWrapper(aObj));
+
+  JS::Realm* realm = js::GetNonCCWObjectRealm(aObj);
+  JSPrincipals* principals = JS::GetRealmPrincipals(realm);
   return nsJSPrincipals::get(principals);
 }
 
 // static
 nsresult
 nsContentUtils::NewURIWithDocumentCharset(nsIURI** aResult,
                                           const nsAString& aSpec,
                                           nsIDocument* aDocument,
--- a/dom/base/nsContentUtils.h
+++ b/dom/base/nsContentUtils.h
@@ -660,17 +660,19 @@ public:
   // from the main thread and assumes an existing compartment.
   static nsIPrincipal* SubjectPrincipal(JSContext* aCx);
 
   // Returns the subject principal. Guaranteed to return non-null. May only
   // be called when nsContentUtils is initialized.
   static nsIPrincipal* SubjectPrincipal();
 
   // Returns the prinipal of the given JS object. This may only be called on
-  // the main thread for objects from the main thread's JSRuntime.
+  // the main thread for objects from the main thread's JSRuntime. The object
+  // must not be a cross-compartment wrapper, because CCWs are not associated
+  // with a single realm.
   static nsIPrincipal* ObjectPrincipal(JSObject* aObj);
 
   static nsresult GenerateStateKey(nsIContent* aContent,
                                    nsIDocument* aDocument,
                                    nsACString& aKey);
 
   /**
    * Create a new nsIURI from aSpec, using aBaseURI as the base.  The
--- a/dom/events/JSEventHandler.cpp
+++ b/dom/events/JSEventHandler.cpp
@@ -118,17 +118,17 @@ JSEventHandler::HandleEvent(Event* aEven
       !GetTypedEventHandler().Ptr()->CallbackPreserveColor()) {
     return NS_ERROR_FAILURE;
   }
 
   bool isMainThread = aEvent->IsMainThreadEvent();
   bool isChromeHandler =
     isMainThread ?
       nsContentUtils::ObjectPrincipal(
-        GetTypedEventHandler().Ptr()->CallbackPreserveColor()) ==
+        GetTypedEventHandler().Ptr()->CallbackGlobalOrNull()) ==
         nsContentUtils::GetSystemPrincipal() :
       mozilla::dom::IsCurrentThreadRunningChromeWorker();
 
   if (mTypedHandler.Type() == TypedEventHandler::eOnError) {
     MOZ_ASSERT_IF(mEventName, mEventName == nsGkAtoms::onerror);
 
     nsString errorMsg, file;
     EventOrString msgOrEvent;
--- a/js/src/jit-test/tests/wasm/gc/anyref-global-postbarrier.js
+++ b/js/src/jit-test/tests/wasm/gc/anyref-global-postbarrier.js
@@ -4,16 +4,29 @@ if (!wasmGcEnabled()) {
 
 const { startProfiling, endProfiling, assertEqPreciseStacks, isSingleStepProfilingEnabled } = WasmHelpers;
 
 // Dummy constructor.
 function Baguette(calories) {
     this.calories = calories;
 }
 
+// Ensure the baseline compiler sync's before the postbarrier.
+(function() {
+    wasmEvalText(`(module
+        (global (mut anyref) (ref.null anyref))
+        (func (export "f")
+            get_global 0
+            ref.null anyref
+            set_global 0
+            set_global 0
+        )
+    )`).exports.f();
+})();
+
 let exportsPlain = wasmEvalText(`(module
     (global i32 (i32.const 42))
     (global $g (mut anyref) (ref.null anyref))
     (func (export "set") (param anyref) get_local 0 set_global $g)
     (func (export "get") (result anyref) get_global $g)
 )`).exports;
 
 let exportsObj = wasmEvalText(`(module
--- a/js/src/wasm/WasmBaselineCompile.cpp
+++ b/js/src/wasm/WasmBaselineCompile.cpp
@@ -5663,16 +5663,20 @@ class BaseCompiler final : public BaseCo
     // values. Pass None for object when the field's owner object is known to
     // be tenured or heap-allocated.
     //
     // This frees the register `valueAddr`.
 
     void emitPostBarrier(const Maybe<RegPtr>& object, RegPtr otherScratch, RegPtr valueAddr, RegPtr setValue) {
         Label skipBarrier;
 
+        // One of the branches (in case we need the C++ call) will cause a sync,
+        // so ensure the stack is sync'd before, so that the join is sync'd too.
+        sync();
+
         // If the pointer being stored is null, no barrier.
         masm.branchTestPtr(Assembler::Zero, setValue, setValue, &skipBarrier);
 
         // If there is a containing object and it is in the nursery, no barrier.
         if (object)
             masm.branchPtrInNurseryChunk(Assembler::Equal, *object, otherScratch, &skipBarrier);
 
         // If the pointer being stored is to a tenured object, no barrier.
--- a/js/xpconnect/src/xpcprivate.h
+++ b/js/xpconnect/src/xpcprivate.h
@@ -828,18 +828,18 @@ public:
         return mGlobalJSObject;
     }
 
     JSObject*
     GetGlobalJSObjectPreserveColor() const {return mGlobalJSObject.unbarrieredGet();}
 
     nsIPrincipal*
     GetPrincipal() const {
-        JS::Compartment* c = js::GetObjectCompartment(mGlobalJSObject);
-        return nsJSPrincipals::get(JS_GetCompartmentPrincipals(c));
+        JS::Realm* r = js::GetNonCCWObjectRealm(mGlobalJSObject);
+        return nsJSPrincipals::get(JS::GetRealmPrincipals(r));
     }
 
     JSObject*
     GetExpandoChain(JS::HandleObject target);
 
     JSObject*
     DetachExpandoChain(JS::HandleObject target);
 
@@ -3061,16 +3061,18 @@ ObjectScope(JSObject* obj)
     return RealmPrivate::Get(obj)->scope;
 }
 
 JSObject* NewOutObject(JSContext* cx);
 bool IsOutObject(JSContext* cx, JSObject* obj);
 
 nsresult HasInstance(JSContext* cx, JS::HandleObject objArg, const nsID* iid, bool* bp);
 
+// Returns the principal associated with |obj|'s realm. The object must not be a
+// cross-compartment wrapper.
 nsIPrincipal* GetObjectPrincipal(JSObject* obj);
 
 // Attempt to clean up the passed in value pointer. The pointer `value` must be
 // a pointer to a value described by the type `nsXPTType`.
 //
 // This method expects a value of the following types:
 //   TD_PNSIID
 //     value : nsID* (free)
--- a/js/xpconnect/wrappers/AccessCheck.cpp
+++ b/js/xpconnect/wrappers/AccessCheck.cpp
@@ -40,17 +40,17 @@ nsIPrincipal*
 GetRealmPrincipal(JS::Realm* realm)
 {
     return nsJSPrincipals::get(JS::GetRealmPrincipals(realm));
 }
 
 nsIPrincipal*
 GetObjectPrincipal(JSObject* obj)
 {
-    return GetCompartmentPrincipal(js::GetObjectCompartment(obj));
+    return GetRealmPrincipal(js::GetNonCCWObjectRealm(obj));
 }
 
 // Does the principal of compartment a subsume the principal of compartment b?
 bool
 AccessCheck::subsumes(JS::Compartment* a, JS::Compartment* b)
 {
     nsIPrincipal* aprin = GetCompartmentPrincipal(a);
     nsIPrincipal* bprin = GetCompartmentPrincipal(b);
@@ -101,22 +101,16 @@ AccessCheck::isChrome(JS::Compartment* c
 }
 
 bool
 AccessCheck::isChrome(JSObject* obj)
 {
     return isChrome(js::GetObjectCompartment(obj));
 }
 
-nsIPrincipal*
-AccessCheck::getPrincipal(JS::Compartment* compartment)
-{
-    return GetCompartmentPrincipal(compartment);
-}
-
 // Hardcoded policy for cross origin property access. See the HTML5 Spec.
 static bool
 IsPermitted(CrossOriginObjectType type, JSFlatString* prop, bool set)
 {
     size_t propLength = JS_GetStringLength(JS_FORGET_STRING_FLATNESS(prop));
     if (!propLength)
         return false;
 
--- a/js/xpconnect/wrappers/AccessCheck.h
+++ b/js/xpconnect/wrappers/AccessCheck.h
@@ -20,17 +20,16 @@ class AccessCheck {
     static bool subsumes(JS::Compartment* a, JS::Compartment* b);
     static bool subsumes(JSObject* a, JSObject* b);
     static bool wrapperSubsumes(JSObject* wrapper);
     static bool subsumesConsideringDomain(JS::Compartment* a, JS::Compartment* b);
     static bool subsumesConsideringDomainIgnoringFPD(JS::Compartment* a,
                                                      JS::Compartment* b);
     static bool isChrome(JS::Compartment* compartment);
     static bool isChrome(JSObject* obj);
-    static nsIPrincipal* getPrincipal(JS::Compartment* compartment);
     static bool isCrossOriginAccessPermitted(JSContext* cx, JS::HandleObject obj,
                                              JS::HandleId id, js::Wrapper::Action act);
     static bool checkPassToPrivilegedCode(JSContext* cx, JS::HandleObject wrapper,
                                           JS::HandleValue value);
     static bool checkPassToPrivilegedCode(JSContext* cx, JS::HandleObject wrapper,
                                           const JS::CallArgs& args);
     // Called to report the correct sort of exception when our policy denies and
     // should throw.  The accessType argument should be one of "access",
--- a/old-configure.in
+++ b/old-configure.in
@@ -1028,19 +1028,16 @@ case "$target" in
             # which clang-cl doesn't understand.
             CXXFLAGS="$CXXFLAGS -Wno-ignored-attributes"
             # __attribute__((unused)) really means "might be unused" and
             # we use it to avoid warnings about things that are unused
             # in some compilation units, but used in many others.  This
             # warning insists on complaining about the latter case, which
             # is annoying, and rather noisy.
             CXXFLAGS="$CXXFLAGS -Wno-used-but-marked-unused"
-            # Work around until bug 1472254 is fixed.
-            CFLAGS="$CFLAGS -Wno-pragma-pack"
-            CXXFLAGS="$CXXFLAGS -Wno-pragma-pack"
         fi
         # make 'foo == bar;' error out
         CFLAGS="$CFLAGS -we4553"
         CXXFLAGS="$CXXFLAGS -we4553"
         # Silence VS2017 15.5+ TR1 deprecation warnings hit by older gtest versions
         CXXFLAGS="$CXXFLAGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING"
         LIBS="$LIBS kernel32.lib user32.lib gdi32.lib winmm.lib wsock32.lib advapi32.lib secur32.lib"
         MOZ_DEBUG_LDFLAGS='-DEBUG -DEBUGTYPE:CV'
--- a/security/nss/TAG-INFO
+++ b/security/nss/TAG-INFO
@@ -1,1 +1,1 @@
-e2a0d66b122f
+01d970fe9048
--- a/security/nss/coreconf/coreconf.dep
+++ b/security/nss/coreconf/coreconf.dep
@@ -5,9 +5,8 @@
 
 /*
  * A dummy header file that is a dependency for all the object files.
  * Used to force a full recompilation of NSS in Mozilla's Tinderbox
  * depend builds.  See comments in rules.mk.
  */
 
 #error "Do not include this header file."
-
--- a/security/nss/lib/ckfw/ckfw.h
+++ b/security/nss/lib/ckfw/ckfw.h
@@ -1599,18 +1599,18 @@ nssCKFWSession_InitPIN(
 
 /*
  * nssCKFWSession_SetPIN
  *
  */
 NSS_EXTERN CK_RV
 nssCKFWSession_SetPIN(
     NSSCKFWSession *fwSession,
-    NSSItem *newPin,
-    NSSItem *oldPin);
+    const NSSItem *oldPin,
+    NSSItem *newPin);
 
 /*
  * nssCKFWSession_GetOperationStateLen
  *
  */
 NSS_EXTERN CK_ULONG
 nssCKFWSession_GetOperationStateLen(
     NSSCKFWSession *fwSession,
--- a/security/nss/lib/ckfw/session.c
+++ b/security/nss/lib/ckfw/session.c
@@ -866,17 +866,17 @@ nssCKFWSession_InitPIN(
 
 /*
  * nssCKFWSession_SetPIN
  *
  */
 NSS_IMPLEMENT CK_RV
 nssCKFWSession_SetPIN(
     NSSCKFWSession *fwSession,
-    NSSItem *oldPin,
+    const NSSItem *oldPin,
     NSSItem *newPin)
 {
     CK_RV error = CKR_OK;
 
 #ifdef NSSDEBUG
     error = nssCKFWSession_verifyPointer(fwSession);
     if (CKR_OK != error) {
         return error;
@@ -902,17 +902,17 @@ nssCKFWSession_SetPIN(
     }
 
     if (!fwSession->mdSession->SetPIN) {
         return CKR_TOKEN_WRITE_PROTECTED;
     }
 
     error = fwSession->mdSession->SetPIN(fwSession->mdSession, fwSession,
                                          fwSession->mdToken, fwSession->fwToken, fwSession->mdInstance,
-                                         fwSession->fwInstance, oldPin, newPin);
+                                         fwSession->fwInstance, (NSSItem *)oldPin, newPin);
 
     return error;
 }
 
 /*
  * nssCKFWSession_GetOperationStateLen
  *
  */
--- a/security/nss/lib/freebl/mpi/mpi_arm.c
+++ b/security/nss/lib/freebl/mpi/mpi_arm.c
@@ -24,27 +24,27 @@ s_mpv_mul_d(const mp_digit *a, mp_size a
 #else
         "cmp     %1, r5\n" /* r5 is 0 now */
         "beq     2f\n"
 #endif
 
         "1:\n"
         "mov     r4, #0\n"
         "ldr     r6, [%0], #4\n"
-        "umlal   r5, r4, r6, %2\n"
-        "str     r5, [%3], #4\n"
+        "umlal   r5, r4, r6, %3\n"
+        "str     r5, [%2], #4\n"
         "mov     r5, r4\n"
 
         "subs    %1, #1\n"
         "bne     1b\n"
 
         "2:\n"
-        "str     r5, [%3]\n"
-        :
-        : "r"(a), "l"(a_len), "r"(b), "r"(c)
+        "str     r5, [%2]\n"
+        : "+r"(a), "+l"(a_len), "+r"(c)
+        : "r"(b)
         : "memory", "cc", "%r4", "%r5", "%r6");
 }
 
 void
 s_mpv_mul_d_add(const mp_digit *a, mp_size a_len, mp_digit b, mp_digit *c)
 {
     __asm__ __volatile__(
         "mov     r5, #0\n"
@@ -52,76 +52,76 @@ s_mpv_mul_d_add(const mp_digit *a, mp_si
         "cbz     %1, 2f\n"
 #else
         "cmp     %1, r5\n" /* r5 is 0 now */
         "beq     2f\n"
 #endif
 
         "1:\n"
         "mov     r4, #0\n"
-        "ldr     r6, [%3]\n"
+        "ldr     r6, [%2]\n"
         "adds    r5, r6\n"
         "adc     r4, r4, #0\n"
 
         "ldr     r6, [%0], #4\n"
-        "umlal   r5, r4, r6, %2\n"
-        "str     r5, [%3], #4\n"
+        "umlal   r5, r4, r6, %3\n"
+        "str     r5, [%2], #4\n"
         "mov     r5, r4\n"
 
         "subs    %1, #1\n"
         "bne     1b\n"
 
         "2:\n"
-        "str     r5, [%3]\n"
-        :
-        : "r"(a), "l"(a_len), "r"(b), "r"(c)
+        "str     r5, [%2]\n"
+        : "+r"(a), "+l"(a_len), "+r"(c)
+        : "r"(b)
         : "memory", "cc", "%r4", "%r5", "%r6");
 }
 
 void
 s_mpv_mul_d_add_prop(const mp_digit *a, mp_size a_len, mp_digit b, mp_digit *c)
 {
     if (!a_len)
         return;
 
     __asm__ __volatile__(
         "mov     r5, #0\n"
 
         "1:\n"
         "mov     r4, #0\n"
-        "ldr     r6, [%3]\n"
+        "ldr     r6, [%2]\n"
         "adds    r5, r6\n"
         "adc     r4, r4, #0\n"
         "ldr     r6, [%0], #4\n"
-        "umlal   r5, r4, r6, %2\n"
-        "str     r5, [%3], #4\n"
+        "umlal   r5, r4, r6, %3\n"
+        "str     r5, [%2], #4\n"
         "mov     r5, r4\n"
 
         "subs    %1, #1\n"
         "bne     1b\n"
 
 #ifdef __thumb2__
         "cbz     r4, 3f\n"
 #else
         "cmp     r4, #0\n"
         "beq     3f\n"
 #endif
 
         "2:\n"
         "mov     r4, #0\n"
-        "ldr     r6, [%3]\n"
+        "ldr     r6, [%2]\n"
         "adds    r5, r6\n"
         "adc     r4, r4, #0\n"
-        "str     r5, [%3], #4\n"
+        "str     r5, [%2], #4\n"
         "movs    r5, r4\n"
         "bne     2b\n"
 
         "3:\n"
-        :
-        : "r"(a), "r"(a_len), "r"(b), "r"(c)
+        : "+r"(a), "+l"(a_len), "+r"(c)
+        : "r"(b)
         : "memory", "cc", "%r4", "%r5", "%r6");
 }
 #endif
 
 #ifdef MP_ASSEMBLY_SQUARE
 void
 s_mpv_sqr_add_prop(const mp_digit *pa, mp_size a_len, mp_digit *ps)
 {
@@ -162,14 +162,14 @@ s_mpv_sqr_add_prop(const mp_digit *pa, m
         "ldr     r5, [%2]\n"
         "adds    r3, r5\n"
         "adc     r4, r4, #0\n"
         "str     r3, [%2], #4\n"
         "movs    r3, r4\n"
         "bne     2b\n"
 
         "3:"
+        : "+r"(pa), "+r"(a_len), "+r"(ps)
         :
-        : "r"(pa), "r"(a_len), "r"(ps)
         : "memory", "cc", "%r3", "%r4", "%r5", "%r6");
 }
 #endif
 #endif
--- a/security/nss/lib/util/pkcs11p.h
+++ b/security/nss/lib/util/pkcs11p.h
@@ -8,14 +8,17 @@
  * this document.
  */
 /* these data types are platform/implementation dependent. */
 /*
  * Packing was removed from the shipped RSA header files, even
  * though it's still needed. put in a central file to help merging..
  */
 
-#if defined(_WIN32)
+#if defined(_WIN32) || defined(_WINDOWS)
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wpragma-pack"
+#endif
 #ifdef _MSC_VER
 #pragma warning(disable : 4103)
 #endif
 #pragma pack(push, cryptoki, 1)
 #endif
--- a/security/nss/lib/util/pkcs11u.h
+++ b/security/nss/lib/util/pkcs11u.h
@@ -6,14 +6,17 @@
  * is granted provided that it is identified as "RSA Security Inc. Public-Key
  * Cryptography Standards (PKCS)" in all material mentioning or referencing
  * this document.
  */
 /*
  * reset any packing set by pkcs11p.h
  */
 
-#if defined(_WIN32)
+#if defined(_WIN32) || defined(_WINDOWS)
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wpragma-pack"
+#endif
 #ifdef _MSC_VER
 #pragma warning(disable : 4103)
 #endif
 #pragma pack(pop, cryptoki)
 #endif
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -190382,16 +190382,31 @@
      {}
     ]
    ],
    ".well-known/idp-proxy/mock-idp.js": [
     [
      {}
     ]
    ],
+   ".well-known/origin-policy/policy-csp-1": [
+    [
+     {}
+    ]
+   ],
+   ".well-known/origin-policy/policy-csp-2": [
+    [
+     {}
+    ]
+   ],
+   ".well-known/origin-policy/policy-noimg": [
+    [
+     {}
+    ]
+   ],
    "2dcontext/2x2.png": [
     [
      {}
     ]
    ],
    "2dcontext/2x4.png": [
     [
      {}
@@ -288752,16 +288767,21 @@
      {}
     ]
    ],
    "interfaces/META.yml": [
     [
      {}
     ]
    ],
+   "interfaces/README.md": [
+    [
+     {}
+    ]
+   ],
    "interfaces/ResizeObserver.idl": [
     [
      {}
     ]
    ],
    "interfaces/SRI.idl": [
     [
      {}
@@ -289242,16 +289262,21 @@
      {}
     ]
    ],
    "interfaces/shape-detection-api.idl": [
     [
      {}
     ]
    ],
+   "interfaces/speech-api.idl": [
+    [
+     {}
+    ]
+   ],
    "interfaces/storage.idl": [
     [
      {}
     ]
    ],
    "interfaces/touch-events.idl": [
     [
      {}
@@ -291102,16 +291127,26 @@
      {}
     ]
    ],
    "orientation-sensor/orientation-sensor-tests.js": [
     [
      {}
     ]
    ],
+   "origin-policy/origin-policy-single-report.https.tentative.html.headers": [
+    [
+     {}
+    ]
+   ],
+   "origin-policy/sec-origin-policy-header.html.py": [
+    [
+     {}
+    ]
+   ],
    "page-visibility/META.yml": [
     [
      {}
     ]
    ],
    "page-visibility/resources/blank_page_green.html": [
     [
      {}
@@ -329025,16 +329060,22 @@
     ]
    ],
    "css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html": [
     [
      "/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html",
      {}
     ]
    ],
+   "css/css-grid/alignment/grid-content-alignment-second-pass-001.html": [
+    [
+     "/css/css-grid/alignment/grid-content-alignment-second-pass-001.html",
+     {}
+    ]
+   ],
    "css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html": [
     [
      "/css/css-grid/alignment/grid-fit-content-tracks-dont-stretch-001.html",
      {}
     ]
    ],
    "css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html": [
     [
@@ -376705,16 +376746,28 @@
     ]
    ],
    "orientation-sensor/idlharness.https.window.js": [
     [
      "/orientation-sensor/idlharness.https.window.html",
      {}
     ]
    ],
+   "origin-policy/origin-policy-single-report.https.tentative.html": [
+    [
+     "/origin-policy/origin-policy-single-report.https.tentative.html",
+     {}
+    ]
+   ],
+   "origin-policy/origin-policy.https.tentative.html": [
+    [
+     "/origin-policy/origin-policy.https.tentative.html",
+     {}
+    ]
+   ],
    "page-visibility/idlharness.window.js": [
     [
      "/page-visibility/idlharness.window.html",
      {}
     ]
    ],
    "page-visibility/iframe-unload.html": [
     [
@@ -389307,16 +389360,22 @@
     ]
    ],
    "speech-api/historical.html": [
     [
      "/speech-api/historical.html",
      {}
     ]
    ],
+   "speech-api/idlharness.window.js": [
+    [
+     "/speech-api/idlharness.window.html",
+     {}
+    ]
+   ],
    "storage/estimate-indexeddb-worker.https.html": [
     [
      "/storage/estimate-indexeddb-worker.https.html",
      {}
     ]
    ],
    "storage/estimate-indexeddb.https.html": [
     [
@@ -421224,16 +421283,28 @@
   ".well-known/idp-proxy/README.md": [
    "dc5795cf8181178c00da9e73a4d5027cc931a64a",
    "support"
   ],
   ".well-known/idp-proxy/mock-idp.js": [
    "242b4ef56f60a3472899939426246e764e842a65",
    "support"
   ],
+  ".well-known/origin-policy/policy-csp-1": [
+   "adbfc362580842fa933bb136a9c66c9a913e6eb1",
+   "support"
+  ],
+  ".well-known/origin-policy/policy-csp-2": [
+   "e896da36303c72f1afa5ba2fdd0361e650f3125e",
+   "support"
+  ],
+  ".well-known/origin-policy/policy-noimg": [
+   "fce2d40c6e054b88938606ba9a28da94d308149a",
+   "support"
+  ],
   "2dcontext/2x2.png": [
    "9be31562b3fccadab6d36d9e892713fd4db8d476",
    "support"
   ],
   "2dcontext/2x4.png": [
    "f5589a731840441ee6052912763f3ea0436a563f",
    "support"
   ],
@@ -532468,16 +532539,20 @@
   "css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html": [
    "22e03201b38209f0714c9178a42f840a38964cde",
    "testharness"
   ],
   "css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html": [
    "3630eee37558bfa33c84b9c5ec467224b747edef",
    "testharness"
   ],
+  "css/css-grid/alignment/grid-content-alignment-second-pass-001.html": [
+   "5b4bbabbb160079796aa4eb6786ea15383f6dd75",
+   "testharness"
+  ],
   "css/css-grid/alignment/grid-content-distribution-001.html": [
    "7b53a2897b83d20ff7cd12db85f576830953b56e",
    "reftest"
   ],
   "css/css-grid/alignment/grid-content-distribution-002.html": [
    "194934bb93e5fdfdc57f573a6ef6235c19a99ed9",
    "reftest"
   ],
@@ -604233,31 +604308,35 @@
    "0ef9b238388ca7bce9e7c14d1f2a7423abc4c039",
    "support"
   ],
   "interfaces/DOM-Parsing.idl": [
    "83a8fe167fcf822933a444c70884f1a7077c5432",
    "support"
   ],
   "interfaces/FileAPI.idl": [
-   "690d777338f09507f18ba231c816c6f93a1666eb",
+   "42e51d01a247dba706805f7bfb8357ff89d4b4fb",
    "support"
   ],
   "interfaces/IndexedDB.idl": [
    "2aa6e2c4b1686154406658441e762b09a9c5ba73",
    "support"
   ],
   "interfaces/InputDeviceCapabilities.idl": [
    "868d8171d309734f15ca62c770b1bfaa0eea41da",
    "support"
   ],
   "interfaces/META.yml": [
    "6895a5fc5674a099909a481a46726c990804fc61",
    "support"
   ],
+  "interfaces/README.md": [
+   "024cd0885a67fca28f0f1a3d5a5c2df3ca4bd42d",
+   "support"
+  ],
   "interfaces/ResizeObserver.idl": [
    "a75a11c965ceae6506732f95b278edb398e4d8ef",
    "support"
   ],
   "interfaces/SRI.idl": [
    "2d0d21f905e7ef93ed8386ebaa211eeeabc9935f",
    "support"
   ],
@@ -604277,33 +604356,33 @@
    "aa1a8409e5bb99c0e7cbe726bb7a4e6fcee5e806",
    "support"
   ],
   "interfaces/ambient-light.idl": [
    "46c89ee8e40ce4cc8ffeeaa8dedb3614e205c539",
    "support"
   ],
   "interfaces/animation-worklet.idl": [
-   "762c443246747a523fdf0e6602ad58c9dc89ad45",
+   "e0f5fc2ec200c5204a6992fbbe4f168fa4fa3f78",
    "support"
   ],
   "interfaces/appmanifest.idl": [
    "273b4f0255e395549ae9c6a7066267b58a2c99fc",
    "support"
   ],
   "interfaces/audio-output.idl": [
    "c1869ab0e9c04f5ca4760c84f83b09e5b28c4102",
    "support"
   ],
   "interfaces/background-fetch.idl": [
    "fc3ed8dad3555a93221c6c7aa1cae0fbc7a6b402",
    "support"
   ],
   "interfaces/battery-status.idl": [
-   "1491d6429c50eabb8a611d98385cd0c26555f266",
+   "fca24cdbaed19290504480a182b2068d0970debd",
    "support"
   ],
   "interfaces/beacon.idl": [
    "663448565e9f38ab3a9a0f1cfe32f0d698bf8b27",
    "support"
   ],
   "interfaces/budget-api.idl": [
    "957e8f2d3127cff1a2ad8a15dc136ffc33e63aa3",
@@ -604481,61 +604560,61 @@
    "83c5d90d6e2c23c355bbc25a8e220b61bcc45fe6",
    "support"
   ],
   "interfaces/keyboard-lock.idl": [
    "4ffffd43717933ceee5c3c8f47b3e3a5276b9952",
    "support"
   ],
   "interfaces/keyboard-map.idl": [
-   "e2f2c32736d03bbc1461a5aad661eede4069d77a",
+   "3d472361023292da922d2951095ab576b1c2d67b",
    "support"
   ],
   "interfaces/longtasks.idl": [
    "8671b17a9be7a563f326858d83a7234dca54bb3a",
    "support"
   ],
   "interfaces/magnetometer.idl": [
    "7a558f8c5cc1e8568769bd16e7d76f5278c8f9a6",
    "support"
   ],
   "interfaces/media-capabilities.idl": [
    "05b505d3ceff169a3cadb0d235ff45749b5d26f0",
    "support"
   ],
   "interfaces/media-source.idl": [
-   "6476794ede0c14df99bfed54f975f23ba1df97b8",
+   "5e9663a4d32e228a5905b4abcde0de03efa847d7",
    "support"
   ],
   "interfaces/mediacapture-depth.idl": [
    "d28c3cf8f6c74ef34241b8b86d7035566b8c2e86",
    "support"
   ],
   "interfaces/mediacapture-fromelement.idl": [
    "003bcb4cc81aee7584b8cd47ed986956d6cd8e40",
    "support"
   ],
   "interfaces/mediacapture-streams.idl": [
-   "1d2dd31ffb00afa527095278e40849f3fabf52a8",
+   "1d943eace26680b54c3407b47e185b40c5d5455b",
    "support"
   ],
   "interfaces/mediasession.idl": [
    "3c6935ce1db9104d0c3700e7c716a7cea60ea214",
    "support"
   ],
   "interfaces/mediastream-recording.idl": [
    "9d28ea277823c7878c531fdac73cb1004f08a7ce",
    "support"
   ],
   "interfaces/navigation-timing.idl": [
    "7b6f75d51502b3f5b3b8f0440a2385f59c403fb9",
    "support"
   ],
   "interfaces/netinfo.idl": [
-   "3e6212c3712fcbf525d1c9bbcd15b732cc4b2762",
+   "8fd0bba0490243e987709719031a2a3c6847b736",
    "support"
   ],
   "interfaces/notifications.idl": [
    "2524933dfd497aaff1d7f1c82d2e3f2c44c867ef",
    "support"
   ],
   "interfaces/orientation-event.idl": [
    "5f874186ade0e13a0190c0c423c0b72b5c1eab8d",
@@ -604561,17 +604640,17 @@
    "3ed8b5a35b575b510581faf528b3fd3e53eae1fa",
    "support"
   ],
   "interfaces/payment-request.idl": [
    "1018ecc93e7d47558aca41d9da0a003295843f66",
    "support"
   ],
   "interfaces/performance-timeline.idl": [
-   "0eda1be96035a0ca44ec249fa6a4360f6b7439fe",
+   "0ff9cdc03854f2496078c668c84e5ded72002bc9",
    "support"
   ],
   "interfaces/permissions.idl": [
    "9b088b27d421d87551133101f07d1fa7383bad57",
    "support"
   ],
   "interfaces/picture-in-picture.idl": [
    "78a5ae781b1488655f05c88847fef10ac948da6b",
@@ -604640,16 +604719,20 @@
   "interfaces/service-workers.idl": [
    "38d22c6e2e7b186654b0df92bbfc16bb9d6661c6",
    "support"
   ],
   "interfaces/shape-detection-api.idl": [
    "8f8009889d073109d39c1b00910f486f6aa579ff",
    "support"
   ],
+  "interfaces/speech-api.idl": [
+   "5ffa04fc9686b5051e654d85dd9b5871031a65d0",
+   "support"
+  ],
   "interfaces/storage.idl": [
    "33ce213b954154da7e93858ca0652003fbac2214",
    "support"
   ],
   "interfaces/touch-events.idl": [
    "097b0e9ac9ea30ef9536d390b4f54d22472b0dee",
    "support"
   ],
@@ -604709,25 +604792,25 @@
    "fce2cdf032875d9182ce2d927ba52a8153e1c2da",
    "support"
   ],
   "interfaces/webgl2.idl": [
    "b8f5b23bf65b68c4e93ae3a64a2c0661345cc3e0",
    "support"
   ],
   "interfaces/webmidi.idl": [
-   "eb7ed6befcc4d172254fc38357cb9c002db589d3",
+   "bc5c3b7924b56527fce3b9286dabcd95629f9328",
    "support"
   ],
   "interfaces/webrtc-stats.idl": [
    "0b2474a5385c281de0bea591381652b968135454",
    "support"
   ],
   "interfaces/webrtc.idl": [
-   "8d949cabbdd3435729249dd45675ed1782b50d8b",
+   "2849a7d2b272d411dc0eddb134739e4f00ce05cc",
    "support"
   ],
   "interfaces/webusb.idl": [
    "edbbf03f07f1dbbcdcc4717f374ab49f6f564fd9",
    "support"
   ],
   "interfaces/webvtt.idl": [
    "7032fce096e61d6bc77cdce28d830e14f0e8907b",
@@ -614828,16 +614911,32 @@
   "orientation-sensor/idlharness.https.window.js": [
    "39217fcc627653c6b6e6585bbbd6c7d46c2f7460",
    "testharness"
   ],
   "orientation-sensor/orientation-sensor-tests.js": [
    "74e360a041a90b8f72db5a88da150cf0e5fe6986",
    "support"
   ],
+  "origin-policy/origin-policy-single-report.https.tentative.html": [
+   "24ee89990548ade02ff38ab4c87d873162a88613",
+   "testharness"
+  ],
+  "origin-policy/origin-policy-single-report.https.tentative.html.headers": [
+   "cb596cf27571a57bc4826eee377fb73115f08cb7",
+   "support"
+  ],
+  "origin-policy/origin-policy.https.tentative.html": [
+   "34a71fe40a192418a3f9a5792d7ee5fdecf970dd",
+   "testharness"
+  ],
+  "origin-policy/sec-origin-policy-header.html.py": [
+   "8e62b6c2a635217b6fa02e049a68991a548c74ff",
+   "support"
+  ],
   "page-visibility/META.yml": [
    "509936c371b7de3e7e0e5f7e41d10cffba9f5d2a",
    "support"
   ],
   "page-visibility/idlharness.window.js": [
    "8ef2561b9f81d7408e45d8b7611c603f44700346",
    "testharness"
   ],
@@ -616333,17 +616432,17 @@
    "eb63bb862377dff269edf30307f1f56a8f6ef2e8",
    "support"
   ],
   "presentation-api/receiving-ua/support/stash.py": [
    "5bddc7160f279363cd9ff3368e9420447a773564",
    "support"
   ],
   "priority-hints/META.yml": [
-   "22a350d70de951ec27c4f4f46f871de4606fb678",
+   "487b4013a02209cf35be8c9d5099c4d7842ba915",
    "support"
   ],
   "priority-hints/fetch-api-request.tentative.any.js": [
    "e492d87d4f2fc40555a7b350d9c20fd1de74ffc5",
    "testharness"
   ],
   "priority-hints/img-attr-named-constructor.tentative.html": [
    "ce677ccc177b6c1e002939d174339fd25c8f3303",
@@ -630652,16 +630751,20 @@
   "speech-api/SpeechSynthesisUtterance-basics.https.html": [
    "9a90f086ac451d09922f05b55144818e787a5ded",
    "testharness"
   ],
   "speech-api/historical.html": [
    "2fb0ccd4b905b4503f0affa4c8c7be3141871fe3",
    "testharness"
   ],
+  "speech-api/idlharness.window.js": [
+   "2f9702878a3037c6a6e4df3d6d329827740bf41e",
+   "testharness"
+  ],
   "speech-api/webspeech.js": [
    "93830e648b2e16e325295ec8cd5cd2db7f00baf0",
    "support"
   ],
   "storage/META.yml": [
    "2aad1fb513710e839ad86c923bf208dae604d3d2",
    "support"
   ],
@@ -643317,17 +643420,17 @@
    "47afcdef2a2812acccecd0f203d30d3023593f3d",
    "support"
   ],
   "wasm/resources/load_wasm.js": [
    "512324639059da8a9d76e9d740d97fc56ebdebc4",
    "support"
   ],
   "wasm/resources/service-worker.js": [
-   "bb0ec21cc570bef2ecc880d8a03cf88395a56b76",
+   "684eaf64878c22afc9ac877b79db7d26f14a3670",
    "support"
   ],
   "wasm/wasm_local_iframe_test.html": [
    "0f4fbd0c7191ece3a901b0a065f147c03431a2d4",
    "testharness"
   ],
   "wasm/wasm_serialization_tests.html": [
    "49766c770525bcef9d66ee0b735e410bc5a7ebb8",
@@ -643337,17 +643440,17 @@
    "3cc4166168b08f46ce54511b6364d01f7b8cbeb9",
    "support"
   ],
   "wasm/wasm_serialization_worker.js": [
    "3361ed73951770b2a6e881ef093a116d10676939",
    "support"
   ],
   "wasm/wasm_service_worker_test.https.html": [
-   "e350ed95eaff91ed982b28dada7a774675368adb",
+   "cced4b8f6ecdaa03c6d80793c2f3650b217452a5",
    "testharness"
   ],
   "web-animations/META.yml": [
    "bf92f7a7516302641aabcefe3c482ba6889c2c23",
    "support"
   ],
   "web-animations/README.md": [
    "f6efbf977f95bc9ab3cb6a061a841c6d4942250e",
@@ -646401,17 +646504,17 @@
    "9c4b6cd412e451a57318b507f264235ea827fa82",
    "support"
   ],
   "webrtc/RTCRtpParameters-rtcp.html": [
    "c40edf25698842cb8e7a026b1563dd5c602f6689",
    "testharness"
   ],
   "webrtc/RTCRtpParameters-transactionId.html": [
-   "ac6f6d19556b8252097cb061b0639ae5bf1fd263",
+   "472b0439b5cc77d553b48000f6a7de3dda90b7d4",
    "testharness"
   ],
   "webrtc/RTCRtpReceiver-getCapabilities.html": [
    "21dcae208afc456e4ca56b690a7e75f44657457c",
    "testharness"
   ],
   "webrtc/RTCRtpReceiver-getContributingSources.https.html": [
    "8ddff5be410d904fef572f84e98f760668078bb3",
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/css/css-grid/alignment/grid-content-alignment-second-pass-001.html.ini
@@ -0,0 +1,19 @@
+[grid-content-alignment-second-pass-001.html]
+  [.grid 3]
+    expected: FAIL
+
+  [.grid 5]
+    expected: FAIL
+
+  [.grid 4]
+    expected: FAIL
+
+  [.grid 7]
+    expected: FAIL
+
+  [.grid 6]
+    expected: FAIL
+
+  [.grid 8]
+    expected: FAIL
+
--- a/testing/web-platform/meta/css/css-pseudo/idlharness.html.ini
+++ b/testing/web-platform/meta/css/css-pseudo/idlharness.html.ini
@@ -1,8 +1,10 @@
+prefs: [dom.animations-api.getAnimations.enabled:true]
+
 [idlharness.html]
   [CSSPseudoElementList interface: existence and properties of interface object]
     expected: FAIL
 
   [CSSPseudoElementList must be primary interface of beforeElements]
     expected: FAIL
 
   [CSSPseudoElementList interface: beforeElements must inherit property "item(unsigned long)" with the proper type]
--- a/testing/web-platform/meta/mozilla-sync
+++ b/testing/web-platform/meta/mozilla-sync
@@ -1,2 +1,2 @@
-local: 767d1527dae2e181dd52d3073b8e6ab488d09f66
-upstream: 41c5a5ec588f4e0e7b31ee9964831712848d8b44
+local: d3e0beb88df24f7f1d676f17d3feab171d9cea32
+upstream: 9d6cc1e097031d1a2eda42b61a94e660be3ed5b0
deleted file mode 100644
--- a/testing/web-platform/meta/navigation-timing/nav2_test_document_open.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[nav2_test_document_open.html]
-  [Navigation Timing 2 WPT]
-    expected:
-      if not debug and webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): FAIL
-
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/origin-policy/origin-policy-single-report.https.tentative.html.ini
@@ -0,0 +1,5 @@
+[origin-policy-single-report.https.tentative.html]
+  expected: TIMEOUT
+  [Origin-Policy-based CSP violation should trigger 1 violation event]
+    expected: TIMEOUT
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/origin-policy/origin-policy.https.tentative.html.ini
@@ -0,0 +1,22 @@
+[origin-policy.https.tentative.html]
+  [The basics: A policy should have an effect..]
+    expected: FAIL
+
+  [The basics: A policy should stick.]
+    expected: FAIL
+
+  [Policy set, update, and delete.]
+    expected: FAIL
+
+  [Policy set-update-delete cycle with checks.]
+    expected: FAIL
+
+  [Policy set-update-delete cycle.]
+    expected: FAIL
+
+  [Policy re-set and re-delete.]
+    expected: FAIL
+
+  [Double Trouble]
+    expected: FAIL
+
deleted file mode 100644
--- a/testing/web-platform/meta/service-workers/service-worker/claim-with-redirect.https.html.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[claim-with-redirect.https.html]
-  expected:
-    if debug and webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): TIMEOUT
-  [Claim works after redirection to another origin]
-    expected:
-      if debug and webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): TIMEOUT
-
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/speech-api/idlharness.window.js.ini
@@ -0,0 +1,397 @@
+[idlharness.window.html]
+  [SpeechRecognition interface: operation start()]
+    expected: FAIL
+
+  [SpeechRecognitionResultList interface: existence and properties of interface object]
+    expected: FAIL
+
+  [SpeechRecognitionError interface: existence and properties of interface prototype object's @@unscopables property]
+    expected: FAIL
+
+  [SpeechRecognitionAlternative interface: attribute transcript]
+    expected: FAIL
+
+  [SpeechRecognitionAlternative interface: attribute confidence]
+    expected: FAIL
+
+  [SpeechGrammarList interface: operation addFromURI(DOMString, float)]
+    expected: FAIL
+
+  [SpeechRecognitionEvent interface: existence and properties of interface prototype object's @@unscopables property]
+    expected: FAIL
+
+  [SpeechRecognitionEvent interface: attribute interpretation]
+    expected: FAIL
+
+  [SpeechRecognition interface: existence and properties of interface prototype object's @@unscopables property]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onsoundend]
+    expected: FAIL
+
+  [SpeechRecognitionAlternative interface: existence and properties of interface object]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute interimResults]
+    expected: FAIL
+
+  [SpeechGrammarList interface: calling item(unsigned long) on new SpeechGrammarList() with too few arguments must throw TypeError]
+    expected: FAIL
+
+  [SpeechGrammar interface: existence and properties of interface prototype object's "constructor" property]
+    expected: FAIL
+
+  [SpeechGrammarList interface: attribute length]
+    expected: FAIL
+
+  [SpeechGrammarList interface: operation addFromString(DOMString, float)]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "grammars" with the proper type]
+    expected: FAIL
+
+  [SpeechGrammar interface object name]
+    expected: FAIL
+
+  [SpeechRecognitionEvent interface: attribute results]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onend" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onaudioend" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onaudiostart]
+    expected: FAIL
+
+  [SpeechRecognitionResult interface: existence and properties of interface prototype object's @@unscopables property]
+    expected: FAIL
+
+  [SpeechRecognitionResult interface: existence and properties of interface prototype object]
+    expected: FAIL
+
+  [SpeechRecognitionEvent interface: attribute resultIndex]
+    expected: FAIL
+
+  [SpeechGrammarList interface: existence and properties of interface object]
+    expected: FAIL
+
+  [SpeechGrammarList interface: calling addFromString(DOMString, float) on new SpeechGrammarList() with too few arguments must throw TypeError]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onsoundstart" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognitionAlternative interface: existence and properties of interface prototype object's "constructor" property]
+    expected: FAIL
+
+  [SpeechRecognitionResultList interface: existence and properties of interface prototype object's @@unscopables property]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onresult]
+    expected: FAIL
+
+  [SpeechRecognitionResult interface: attribute isFinal]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onend]
+    expected: FAIL
+
+  [SpeechGrammar interface: attribute weight]
+    expected: FAIL
+
+  [SpeechRecognitionEvent interface: attribute emma]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onspeechend]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onerror]
+    expected: FAIL
+
+  [SpeechGrammar interface: existence and properties of interface prototype object's @@unscopables property]
+    expected: FAIL
+
+  [SpeechRecognitionResultList interface: existence and properties of interface prototype object]
+    expected: FAIL
+
+  [SpeechRecognitionResultList interface: existence and properties of interface prototype object's "constructor" property]
+    expected: FAIL
+
+  [SpeechSynthesisErrorEvent interface object length]
+    expected: FAIL
+
+  [SpeechRecognitionResult interface object name]
+    expected: FAIL
+
+  [SpeechGrammar interface: new SpeechGrammar() must inherit property "src" with the proper type]
+    expected: FAIL
+
+  [SpeechGrammarList interface: new SpeechGrammarList() must inherit property "item(unsigned long)" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognition interface object length]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "abort()" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognitionEvent interface: existence and properties of interface prototype object]
+    expected: FAIL
+
+  [SpeechRecognitionResult interface: existence and properties of interface object]
+    expected: FAIL
+
+  [SpeechRecognitionResultList interface object length]
+    expected: FAIL
+
+  [SpeechRecognitionAlternative interface: existence and properties of interface prototype object]
+    expected: FAIL
+
+  [SpeechGrammarList interface: existence and properties of interface prototype object]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "start()" with the proper type]
+    expected: FAIL
+
+  [SpeechSynthesisEvent interface object length]
+    expected: FAIL
+
+  [SpeechRecognitionEvent interface: existence and properties of interface prototype object's "constructor" property]
+    expected: FAIL
+
+  [SpeechGrammarList interface: new SpeechGrammarList() must inherit property "length" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognitionError interface: attribute message]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onspeechstart]
+    expected: FAIL
+
+  [SpeechRecognitionEvent interface: existence and properties of interface object]
+    expected: FAIL
+
+  [SpeechRecognition interface: operation abort()]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onsoundend" with the proper type]
+    expected: FAIL
+
+  [Stringification of new SpeechRecognition()]
+    expected: FAIL
+
+  [SpeechGrammarList interface: existence and properties of interface prototype object's "constructor" property]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute serviceURI]
+    expected: FAIL
+
+  [SpeechGrammarList interface object length]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "serviceURI" with the proper type]
+    expected: FAIL
+
+  [SpeechGrammarList interface: new SpeechGrammarList() must inherit property "addFromURI(DOMString, float)" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute maxAlternatives]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onaudiostart" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognitionError interface: existence and properties of interface object]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute continuous]
+    expected: FAIL
+
+  [SpeechGrammar must be primary interface of new SpeechGrammar()]
+    expected: FAIL
+
+  [SpeechRecognitionResultList interface: attribute length]
+    expected: FAIL
+
+  [SpeechRecognitionError interface: attribute error]
+    expected: FAIL
+
+  [SpeechRecognitionError interface: existence and properties of interface prototype object]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "interimResults" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onstart]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onstart" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onspeechend" with the proper type]
+    expected: FAIL
+
+  [SpeechGrammarList interface: new SpeechGrammarList() must inherit property "addFromString(DOMString, float)" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "stop()" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognitionError interface object name]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onerror" with the proper type]
+    expected: FAIL
+
+  [Stringification of new SpeechGrammar()]
+    expected: FAIL
+
+  [SpeechRecognitionEvent interface object length]
+    expected: FAIL
+
+  [SpeechGrammar interface: existence and properties of interface prototype object]
+    expected: FAIL
+
+  [Stringification of new SpeechGrammarList()]
+    expected: FAIL
+
+  [SpeechGrammarList must be primary interface of new SpeechGrammarList()]
+    expected: FAIL
+
+  [SpeechRecognitionResult interface object length]
+    expected: FAIL
+
+  [SpeechRecognitionError interface: existence and properties of interface prototype object's "constructor" property]
+    expected: FAIL
+
+  [SpeechRecognitionResultList interface object name]
+    expected: FAIL
+
+  [SpeechRecognition interface: existence and properties of interface prototype object's "constructor" property]
+    expected: FAIL
+
+  [SpeechRecognition interface: existence and properties of interface object]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute grammars]
+    expected: FAIL
+
+  [SpeechRecognitionResultList interface: operation item(unsigned long)]
+    expected: FAIL
+
+  [SpeechRecognitionEvent interface object name]
+    expected: FAIL
+
+  [SpeechGrammar interface: attribute src]
+    expected: FAIL
+
+  [SpeechRecognitionResult interface: attribute length]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onnomatch" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognition must be primary interface of new SpeechRecognition()]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onsoundstart]
+    expected: FAIL
+
+  [SpeechRecognitionAlternative interface: existence and properties of interface prototype object's @@unscopables property]
+    expected: FAIL
+
+  [SpeechGrammarList interface object name]
+    expected: FAIL
+
+  [SpeechGrammar interface: existence and properties of interface object]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onnomatch]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onspeechstart" with the proper type]
+    expected: FAIL
+
+  [SpeechGrammar interface object length]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute lang]
+    expected: FAIL
+
+  [SpeechGrammar interface: new SpeechGrammar() must inherit property "weight" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognition interface object name]
+    expected: FAIL
+
+  [SpeechRecognition interface: operation stop()]
+    expected: FAIL
+
+  [SpeechGrammarList interface: calling addFromURI(DOMString, float) on new SpeechGrammarList() with too few arguments must throw TypeError]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "continuous" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognitionResult interface: existence and properties of interface prototype object's "constructor" property]
+    expected: FAIL
+
+  [SpeechRecognitionResult interface: operation item(unsigned long)]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "onresult" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognitionAlternative interface object name]
+    expected: FAIL
+
+  [SpeechRecognition interface: existence and properties of interface prototype object]
+    expected: FAIL
+
+  [SpeechGrammarList interface: operation item(unsigned long)]
+    expected: FAIL
+
+  [SpeechRecognitionAlternative interface object length]
+    expected: FAIL
+
+  [SpeechRecognitionError interface object length]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "maxAlternatives" with the proper type]
+    expected: FAIL
+
+  [SpeechGrammarList interface: existence and properties of interface prototype object's @@unscopables property]
+    expected: FAIL
+
+  [SpeechRecognition interface: attribute onaudioend]
+    expected: FAIL
+
+  [SpeechRecognition interface: new SpeechRecognition() must inherit property "lang" with the proper type]
+    expected: FAIL
+
+  [SpeechRecognitionErrorEvent interface object length]
+    expected: FAIL
+
+  [SpeechRecognitionErrorEvent interface: existence and properties of interface prototype object's "constructor" property]
+    expected: FAIL
+
+  [SpeechRecognitionErrorEvent interface: attribute message]
+    expected: FAIL
+
+  [SpeechRecognitionErrorEvent interface: existence and properties of interface prototype object's @@unscopables property]
+    expected: FAIL
+
+  [SpeechRecognitionErrorEvent interface: existence and properties of interface object]
+    expected: FAIL
+
+  [SpeechRecognitionErrorEvent interface object name]
+    expected: FAIL
+
+  [SpeechRecognitionErrorEvent interface: existence and properties of interface prototype object]
+    expected: FAIL
+
+  [SpeechRecognitionErrorEvent interface: attribute error]
+    expected: FAIL
+
--- a/testing/web-platform/meta/webrtc/RTCRtpParameters-transactionId.html.ini
+++ b/testing/web-platform/meta/webrtc/RTCRtpParameters-transactionId.html.ini
@@ -12,8 +12,11 @@
     expected: FAIL
 
   [setParameters() with parameters older than last getParameters() should reject with InvalidModificationError]
     expected: FAIL
 
   [setParameters() twice with the same parameters should reject with InvalidStateError]
     expected: FAIL
 
+  [sender.setParameters() with transaction ID unset should reject with TypeError]
+    expected: FAIL
+
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/.well-known/origin-policy/policy-csp-1
@@ -0,0 +1,3 @@
+{
+  "content-security-policy": [{ "policy": "script-src 'self' 'unsafe-inline'" }]
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/.well-known/origin-policy/policy-csp-2
@@ -0,0 +1,5 @@
+{
+  "content-security-policy": [{
+    "policy": "script-src 'self' 'nonce-test'"
+  }]
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/.well-known/origin-policy/policy-noimg
@@ -0,0 +1,3 @@
+{
+  "content-security-policy": [{ "policy": "img-src 'none'" }]
+}
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/css/css-grid/alignment/grid-content-alignment-second-pass-001.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Content alignment second pass</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#algo-overview">
+<meta name="flags" content="ahem dom">
+<meta name="assert" content="This test checks that content alignment is properly applied when the size of the tracks changes in the second pass of the track sizing algorithm.">
+<link rel="stylesheet" href="../../support/grid.css">
+<link rel="stylesheet" href="../../support/alignment.css">
+
+<style>
+.grid {
+  position: relative;
+  width: 100px;
+  height: 50px;
+  font: 25px/1 Ahem;
+  margin: 10px;
+}
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onLoad="checkLayout('.grid');">
+
+<div id="log"></div>
+
+<div class="grid">
+  <div class="firstRowFirstColumn verticalLR" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50">XX X</div>
+</div>
+
+<div class="grid contentStretch">
+  <div class="firstRowFirstColumn verticalLR" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50">XX X</div>
+</div>
+
+<div class="grid contentStart">
+  <div class="firstRowFirstColumn verticalLR" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="50">XX X</div>
+</div>
+
+<div class="grid contentCenter">
+  <div class="firstRowFirstColumn verticalLR" data-offset-x="25" data-offset-y="0" data-expected-width="50" data-expected-height="50">XX X</div>
+</div>
+
+<div class="grid contentEnd">
+  <div class="firstRowFirstColumn verticalLR" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="50">XX X</div>
+</div>
+
+<div class="grid contentSpaceBetween">
+  <div class="firstRowFirstColumn verticalLR" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="50">XX X</div>
+  <div class="firstRowSecondColumn" data-offset-x="75" data-offset-y="0" data-expected-width="25" data-expected-height="50">X</div>
+</div>
+
+<div class="grid contentSpaceEvenly" style="width: 105px;">
+  <div class="firstRowFirstColumn verticalLR" data-offset-x="10" data-offset-y="0" data-expected-width="50" data-expected-height="50">XX X</div>
+  <div class="firstRowSecondColumn" data-offset-x="70" data-offset-y="0" data-expected-width="25" data-expected-height="50">X</div>
+</div>
+
+<div class="grid contentSpaceAround" style="width: 115px;">
+  <div class="firstRowFirstColumn verticalLR" data-offset-x="10" data-offset-y="0" data-expected-width="50" data-expected-height="50">XX X</div>
+  <div class="firstRowSecondColumn" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="50">X</div>
+</div>
+
+</body>
--- a/testing/web-platform/tests/interfaces/FileAPI.idl
+++ b/testing/web-platform/tests/interfaces/FileAPI.idl
@@ -46,17 +46,17 @@ interface FileList {
 };
 
 [Constructor, Exposed=(Window,Worker)]
 interface FileReader: EventTarget {
 
   // async read methods
   void readAsArrayBuffer(Blob blob);
   void readAsBinaryString(Blob blob);
-  void readAsText(Blob blob, optional DOMString label);
+  void readAsText(Blob blob, optional DOMString encoding);
   void readAsDataURL(Blob blob);
 
   void abort();
 
   // states
   const unsigned short EMPTY = 0;
   const unsigned short LOADING = 1;
   const unsigned short DONE = 2;
@@ -79,17 +79,17 @@ interface FileReader: EventTarget {
 };
 
 [Constructor, Exposed=(DedicatedWorker,SharedWorker)]
 interface FileReaderSync {
   // Synchronously return strings
 
   ArrayBuffer readAsArrayBuffer(Blob blob);
   DOMString readAsBinaryString(Blob blob);
-  DOMString readAsText(Blob blob, optional DOMString label);
+  DOMString readAsText(Blob blob, optional DOMString encoding);
   DOMString readAsDataURL(Blob blob);
 };
 
 [Exposed=(Window,DedicatedWorker,SharedWorker)]
 partial interface URL {
   static DOMString createObjectURL(Blob blob);
   static void revokeObjectURL(DOMString url);
 };
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/interfaces/README.md
@@ -0,0 +1,5 @@
+This directory contains [Web IDL](https://heycam.github.io/webidl/) interface definitions for use in idlharness.js tests.
+
+The `.idl` files are extracted from specs by [Reffy](https://github.com/tidoust/reffy) into [reffy-reports](https://github.com/tidoust/reffy-reports), and then copied into this directory.
+
+Automatically importing changes from reffy-reports is tracked by the [Auto-import IDL files](https://github.com/web-platform-tests/wpt/projects/1) project. Currently, it is only semi-automated, and not guaranteed to happen at any particular cadence. If you need to update an IDL file, please copy the file from [whatwg/idl/](https://github.com/tidoust/reffy-reports/tree/master/whatwg/idl) in reffy-reports.
--- a/testing/web-platform/tests/interfaces/animation-worklet.idl
+++ b/testing/web-platform/tests/interfaces/animation-worklet.idl
@@ -17,17 +17,16 @@ interface AnimationWorkletGlobalScope : 
 [Constructor (DOMString animatorName,
               optional (AnimationEffectReadOnly or sequence)? effects = null,
               optional AnimationTimeline? timeline,
               optional any options)]
 interface WorkletAnimation : Animation {
         readonly attribute DOMString animatorName;
 };
 
-
 interface WorkletGroupEffectReadOnly :  GroupEffectReadOnly {};
 
 interface WorkletGroupEffect :  WorkletGroupEffectReadOnly {};
 WorkletGroupEffect implements AnimationEffectMutable;
 WorkletGroupEffect implements GroupEffectMutable;
 
 [Exposed=AnimationWorklet]
 partial interface AnimationEffectReadOnly {
--- a/testing/web-platform/tests/interfaces/battery-status.idl
+++ b/testing/web-platform/tests/interfaces/battery-status.idl
@@ -1,16 +1,17 @@
 // GENERATED CONTENT - DO NOT EDIT
 // Content of this file was automatically extracted from the
 // "Battery Status API" spec.
 // See: https://w3c.github.io/battery/
 
 partial interface Navigator {
   Promise<BatteryManager> getBattery();
 };
+
 [Exposed=Window]
 interface BatteryManager : EventTarget {
     readonly        attribute boolean charging;
     readonly        attribute unrestricted double chargingTime;
     readonly        attribute unrestricted double dischargingTime;
     readonly        attribute double level;
                     attribute EventHandler onchargingchange;
                     attribute EventHandler onchargingtimechange;
--- a/testing/web-platform/tests/interfaces/keyboard-map.idl
+++ b/testing/web-platform/tests/interfaces/keyboard-map.idl
@@ -1,8 +1,14 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "Keyboard Map" spec.
+// See: https://wicg.github.io/keyboard-map/
+
+[Exposed=Window]
 partial interface Navigator {
   [SecureContext, SameObject] readonly attribute Keyboard keyboard;
 };
 
 interface KeyboardLayoutMap {
   readonly maplike<DOMString, DOMString>;
 };
 
--- a/testing/web-platform/tests/interfaces/media-source.idl
+++ b/testing/web-platform/tests/interfaces/media-source.idl
@@ -3,40 +3,44 @@
 // "Media Source Extensions™" spec.
 // See: https://w3c.github.io/media-source/
 
 enum ReadyState {
     "closed",
     "open",
     "ended"
 };
+
 enum EndOfStreamError {
     "network",
     "decode"
 };
+
 [Constructor]
 interface MediaSource : EventTarget {
     readonly attribute SourceBufferList    sourceBuffers;
     readonly attribute SourceBufferList    activeSourceBuffers;
     readonly attribute ReadyState          readyState;
              attribute unrestricted double duration;
              attribute EventHandler        onsourceopen;
              attribute EventHandler        onsourceended;
              attribute EventHandler        onsourceclose;
     SourceBuffer addSourceBuffer(DOMString type);
     void         removeSourceBuffer(SourceBuffer sourceBuffer);
     void         endOfStream(optional EndOfStreamError error);
     void         setLiveSeekableRange(double start, double end);
     void         clearLiveSeekableRange();
     static boolean isTypeSupported(DOMString type);
 };
+
 enum AppendMode {
     "segments",
     "sequence"
 };
+
 interface SourceBuffer : EventTarget {
              attribute AppendMode          mode;
     readonly attribute boolean             updating;
     readonly attribute TimeRanges          buffered;
              attribute double              timestampOffset;
     readonly attribute AudioTrackList      audioTracks;
     readonly attribute VideoTrackList      videoTracks;
     readonly attribute TextTrackList       textTracks;
@@ -46,27 +50,32 @@ interface SourceBuffer : EventTarget {
              attribute EventHandler        onupdate;
              attribute EventHandler        onupdateend;
              attribute EventHandler        onerror;
              attribute EventHandler        onabort;
     void appendBuffer(BufferSource data);
     void abort();
     void remove(double start, unrestricted double end);
 };
+
 interface SourceBufferList : EventTarget {
     readonly attribute unsigned long length;
              attribute EventHandler  onaddsourcebuffer;
              attribute EventHandler  onremovesourcebuffer;
     getter SourceBuffer (unsigned long index);
 };
+
 [Exposed=Window]
 partial interface URL {
     static DOMString createObjectURL(MediaSource mediaSource);
 };
+
 partial interface AudioTrack {
     readonly attribute SourceBuffer? sourceBuffer;
 };
+
 partial interface VideoTrack {
     readonly attribute SourceBuffer? sourceBuffer;
 };
+
 partial interface TextTrack {
     readonly attribute SourceBuffer? sourceBuffer;
 };
--- a/testing/web-platform/tests/interfaces/mediacapture-streams.idl
+++ b/testing/web-platform/tests/interfaces/mediacapture-streams.idl
@@ -3,236 +3,268 @@
 // "Media Capture and Streams" spec.
 // See: https://w3c.github.io/mediacapture-main/
 
 [Exposed=Window,
  Constructor,
  Constructor(MediaStream stream),
  Constructor(sequence<MediaStreamTrack> tracks)]
 interface MediaStream : EventTarget {
-    readonly attribute DOMString    id;
+    readonly        attribute DOMString id;
     sequence<MediaStreamTrack> getAudioTracks();
     sequence<MediaStreamTrack> getVideoTracks();
     sequence<MediaStreamTrack> getTracks();
-    MediaStreamTrack?          getTrackById(DOMString trackId);
-    void                       addTrack(MediaStreamTrack track);
-    void                       removeTrack(MediaStreamTrack track);
-    MediaStream                clone();
-    readonly attribute boolean      active;
-             attribute EventHandler onaddtrack;
-             attribute EventHandler onremovetrack;
+    MediaStreamTrack? getTrackById(DOMString trackId);
+    void addTrack(MediaStreamTrack track);
+    void removeTrack(MediaStreamTrack track);
+    MediaStream clone();
+    readonly        attribute boolean active;
+                    attribute EventHandler onaddtrack;
+                    attribute EventHandler onremovetrack;
 };
+
 [Exposed=Window]
 interface MediaStreamTrack : EventTarget {
-    readonly attribute DOMString             kind;
-    readonly attribute DOMString             id;
-    readonly attribute DOMString             label;
-             attribute boolean               enabled;
-    readonly attribute boolean               muted;
-             attribute EventHandler          onmute;
-             attribute EventHandler          onunmute;
-    readonly attribute MediaStreamTrackState readyState;
-             attribute EventHandler          onended;
-    MediaStreamTrack       clone();
-    void                   stop();
+    readonly        attribute DOMString kind;
+    readonly        attribute DOMString id;
+    readonly        attribute DOMString label;
+                    attribute boolean enabled;
+    readonly        attribute boolean muted;
+                    attribute EventHandler onmute;
+                    attribute EventHandler onunmute;
+    readonly        attribute MediaStreamTrackState readyState;
+                    attribute EventHandler onended;
+    MediaStreamTrack clone();
+    void stop();
     MediaTrackCapabilities getCapabilities();
-    MediaTrackConstraints  getConstraints();
-    MediaTrackSettings     getSettings();
-    Promise<void>          applyConstraints(optional MediaTrackConstraints constraints);
-             attribute EventHandler          onoverconstrained;
+    MediaTrackConstraints getConstraints();
+    MediaTrackSettings getSettings();
+    Promise<void> applyConstraints(optional MediaTrackConstraints constraints);
+                    attribute EventHandler onoverconstrained;
 };
+
 enum MediaStreamTrackState {
     "live",
     "ended"
 };
+
 dictionary MediaTrackSupportedConstraints {
-    boolean width = true;
-    boolean height = true;
-    boolean aspectRatio = true;
-    boolean frameRate = true;
-    boolean facingMode = true;
-    boolean resizeMode = true;
-    boolean volume = true;
-    boolean sampleRate = true;
-    boolean sampleSize = true;
-    boolean echoCancellation = true;
-    boolean autoGainControl = true;
-    boolean noiseSuppression = true;
-    boolean latency = true;
-    boolean channelCount = true;
-    boolean deviceId = true;
-    boolean groupId = true;
+             boolean width = true;
+             boolean height = true;
+             boolean aspectRatio = true;
+             boolean frameRate = true;
+             boolean facingMode = true;
+             boolean resizeMode = true;
+             boolean volume = true;
+             boolean sampleRate = true;
+             boolean sampleSize = true;
+             boolean echoCancellation = true;
+             boolean autoGainControl = true;
+             boolean noiseSuppression = true;
+             boolean latency = true;
+             boolean channelCount = true;
+             boolean deviceId = true;
+             boolean groupId = true;
 };
+
 dictionary MediaTrackCapabilities {
-    ULongRange          width;
-    ULongRange          height;
-    DoubleRange         aspectRatio;
-    DoubleRange         frameRate;
-    sequence<DOMString> facingMode;
-    sequence<DOMString> resizeMode;
-    DoubleRange         volume;
-    ULongRange          sampleRate;
-    ULongRange          sampleSize;
-    sequence<boolean>   echoCancellation;
-    sequence<boolean>   autoGainControl;
-    sequence<boolean>   noiseSuppression;
-    DoubleRange         latency;
-    ULongRange          channelCount;
-    DOMString           deviceId;
-    DOMString           groupId;
+             ULongRange width;
+             ULongRange height;
+             DoubleRange aspectRatio;
+             DoubleRange frameRate;
+             sequence<DOMString> facingMode;
+             sequence<DOMString> resizeMode;
+             DoubleRange volume;
+             ULongRange sampleRate;
+             ULongRange sampleSize;
+             sequence<boolean> echoCancellation;
+             sequence<boolean> autoGainControl;
+             sequence<boolean> noiseSuppression;
+             DoubleRange latency;
+             ULongRange channelCount;
+             DOMString deviceId;
+             DOMString groupId;
 };
+
 dictionary MediaTrackConstraints : MediaTrackConstraintSet {
-    sequence<MediaTrackConstraintSet> advanced;
+             sequence<MediaTrackConstraintSet> advanced;
 };
+
 dictionary MediaTrackConstraintSet {
-    ConstrainULong     width;
-    ConstrainULong     height;
-    ConstrainDouble    aspectRatio;
-    ConstrainDouble    frameRate;
-    ConstrainDOMString facingMode;
-    ConstrainDOMString resizeMode;
-    ConstrainDouble    volume;
-    ConstrainULong     sampleRate;
-    ConstrainULong     sampleSize;
-    ConstrainBoolean   echoCancellation;
-    ConstrainBoolean   autoGainControl;
-    ConstrainBoolean   noiseSuppression;
-    ConstrainDouble    latency;
-    ConstrainULong     channelCount;
-    ConstrainDOMString deviceId;
-    ConstrainDOMString groupId;
+             ConstrainULong width;
+             ConstrainULong height;
+             ConstrainDouble aspectRatio;
+             ConstrainDouble frameRate;
+             ConstrainDOMString facingMode;
+             ConstrainDOMString resizeMode;
+             ConstrainDouble volume;
+             ConstrainULong sampleRate;
+             ConstrainULong sampleSize;
+             ConstrainBoolean echoCancellation;
+             ConstrainBoolean autoGainControl;
+             ConstrainBoolean noiseSuppression;
+             ConstrainDouble latency;
+             ConstrainULong channelCount;
+             ConstrainDOMString deviceId;
+             ConstrainDOMString groupId;
 };
+
 dictionary MediaTrackSettings {
-    long      width;
-    long      height;
-    double    aspectRatio;
-    double    frameRate;
-    DOMString facingMode;
-    DOMString resizeMode;
-    double    volume;
-    long      sampleRate;
-    long      sampleSize;
-    boolean   echoCancellation;
-    boolean   autoGainControl;
-    boolean   noiseSuppression;
-    double    latency;
-    long      channelCount;
-    DOMString deviceId;
-    DOMString groupId;
+             long width;
+             long height;
+             double aspectRatio;
+             double frameRate;
+             DOMString facingMode;
+             DOMString resizeMode;
+             double volume;
+             long sampleRate;
+             long sampleSize;
+             boolean echoCancellation;
+             boolean autoGainControl;
+             boolean noiseSuppression;
+             double latency;
+             long channelCount;
+             DOMString deviceId;
+             DOMString groupId;
 };
+
 enum VideoFacingModeEnum {
     "user",
     "environment",
     "left",
     "right"
 };
+
 enum VideoResizeModeEnum {
     "none",
     "crop-and-scale"
 };
+
 [Exposed=Window,
  Constructor(DOMString type, MediaStreamTrackEventInit eventInitDict)]
 interface MediaStreamTrackEvent : Event {
     [SameObject]
-    readonly attribute MediaStreamTrack track;
+    readonly        attribute MediaStreamTrack track;
 };
+
 dictionary MediaStreamTrackEventInit : EventInit {
     required MediaStreamTrack track;
 };
+
 [Exposed=Window,
  Constructor(DOMString type, OverconstrainedErrorEventInit eventInitDict)]
 interface OverconstrainedErrorEvent : Event {
-    readonly attribute OverconstrainedError? error;
+    readonly        attribute OverconstrainedError? error;
 };
+
 dictionary OverconstrainedErrorEventInit : EventInit {
-    OverconstrainedError? error = null;
+             OverconstrainedError? error = null;
 };
+
 partial interface Navigator {
     [SameObject]
-    readonly attribute MediaDevices mediaDevices;
+    readonly        attribute MediaDevices mediaDevices;
 };
+
 [Exposed=Window]
 interface MediaDevices : EventTarget {
-    attribute EventHandler ondevicechange;
+                    attribute EventHandler ondevicechange;
     Promise<sequence<MediaDeviceInfo>> enumerateDevices();
 };
+
 [Exposed=Window]
 interface MediaDeviceInfo {
-    readonly attribute DOMString       deviceId;
-    readonly attribute MediaDeviceKind kind;
-    readonly attribute DOMString       label;
-    readonly attribute DOMString       groupId;
+    readonly        attribute DOMString deviceId;
+    readonly        attribute MediaDeviceKind kind;
+    readonly        attribute DOMString label;
+    readonly        attribute DOMString groupId;
     [Default] object toJSON();
 };
+
 enum MediaDeviceKind {
     "audioinput",
     "audiooutput",
     "videoinput"
 };
-[Exposed=Window]
-interface InputDeviceInfo : MediaDeviceInfo {
+
+[Exposed=Window] interface InputDeviceInfo : MediaDeviceInfo {
     MediaTrackCapabilities getCapabilities();
 };
+
 partial interface Navigator {
-    void getUserMedia(MediaStreamConstraints constraints,
-                      NavigatorUserMediaSuccessCallback successCallback,
-                      NavigatorUserMediaErrorCallback errorCallback);
+    void getUserMedia(MediaStreamConstraints constraints, NavigatorUserMediaSuccessCallback successCallback, NavigatorUserMediaErrorCallback errorCallback);
 };
+
 partial interface MediaDevices {
     MediaTrackSupportedConstraints getSupportedConstraints();
-    Promise<MediaStream>           getUserMedia(optional MediaStreamConstraints constraints);
+    Promise<MediaStream> getUserMedia(optional MediaStreamConstraints constraints);
 };
+
 dictionary MediaStreamConstraints {
-    (boolean or MediaTrackConstraints) video = false;
-    (boolean or MediaTrackConstraints) audio = false;
+             (boolean or MediaTrackConstraints) video = false;
+             (boolean or MediaTrackConstraints) audio = false;
 };
+
 callback NavigatorUserMediaSuccessCallback = void (MediaStream stream);
+
 callback NavigatorUserMediaErrorCallback = void (MediaStreamError error);
+
 typedef object MediaStreamError;
+
 [NoInterfaceObject]
 interface ConstrainablePattern {
-    Capabilities  getCapabilities();
-    Constraints   getConstraints();
-    Settings      getSettings();
+    Capabilities getCapabilities();
+    Constraints getConstraints();
+    Settings getSettings();
     Promise<void> applyConstraints(optional Constraints constraints);
-    attribute EventHandler onoverconstrained;
+                    attribute EventHandler onoverconstrained;
 };
+
 dictionary DoubleRange {
-    double max;
-    double min;
+             double max;
+             double min;
 };
+
 dictionary ConstrainDoubleRange : DoubleRange {
-    double exact;
-    double ideal;
+             double exact;
+             double ideal;
 };
+
 dictionary ULongRange {
-    [Clamp]
-    unsigned long max;
-    [Clamp]
-    unsigned long min;
+             [Clamp] unsigned long max;
+             [Clamp] unsigned long min;
 };
+
 dictionary ConstrainULongRange : ULongRange {
-    [Clamp]
-    unsigned long exact;
-    [Clamp]
-    unsigned long ideal;
+             [Clamp] unsigned long exact;
+             [Clamp] unsigned long ideal;
 };
+
 dictionary ConstrainBooleanParameters {
-    boolean exact;
-    boolean ideal;
+             boolean exact;
+             boolean ideal;
 };
+
 dictionary ConstrainDOMStringParameters {
-    (DOMString or sequence<DOMString>) exact;
-    (DOMString or sequence<DOMString>) ideal;
+             (DOMString or sequence<DOMString>) exact;
+             (DOMString or sequence<DOMString>) ideal;
 };
+
 typedef ([Clamp] unsigned long or ConstrainULongRange) ConstrainULong;
+
 typedef (double or ConstrainDoubleRange) ConstrainDouble;
+
 typedef (boolean or ConstrainBooleanParameters) ConstrainBoolean;
+
 typedef (DOMString or sequence<DOMString> or ConstrainDOMStringParameters) ConstrainDOMString;
+
 dictionary Capabilities {
 };
+
 dictionary Settings {
 };
+
 dictionary ConstraintSet {
 };
+
 dictionary Constraints : ConstraintSet {
-    sequence<ConstraintSet> advanced;
+             sequence<ConstraintSet> advanced;
 };
--- a/testing/web-platform/tests/interfaces/netinfo.idl
+++ b/testing/web-platform/tests/interfaces/netinfo.idl
@@ -34,9 +34,12 @@ WorkerNavigator implements NavigatorNetw
 interface NetworkInformation : EventTarget {
   readonly attribute ConnectionType type;
   readonly attribute EffectiveConnectionType effectiveType;
   readonly attribute Megabit downlinkMax;
   readonly attribute Megabit downlink;
   readonly attribute Millisecond rtt;
   readonly attribute boolean saveData;
   attribute EventHandler onchange;
-};typedef unrestricted double Megabit;typedef unsigned long long Millisecond;
+};
+
+typedef unrestricted double Megabit;
+typedef unsigned long long Millisecond;
--- a/testing/web-platform/tests/interfaces/performance-timeline.idl
+++ b/testing/web-platform/tests/interfaces/performance-timeline.idl
@@ -2,17 +2,18 @@
 // Content of this file was automatically extracted from the
 // "Performance Timeline Level 2" spec.
 // See: https://w3c.github.io/performance-timeline/
 
 partial interface Performance {
   PerformanceEntryList getEntries();
   PerformanceEntryList getEntriesByType(DOMString type);
   PerformanceEntryList getEntriesByName(DOMString name, optional DOMString type);
-};typedef sequence<PerformanceEntry> PerformanceEntryList;
+};
+typedef sequence<PerformanceEntry> PerformanceEntryList;
 
 [Exposed=(Window,Worker)]
 interface PerformanceEntry {
   readonly    attribute DOMString name;
   readonly    attribute DOMString entryType;
   readonly    attribute DOMHighResTimeStamp startTime;
   readonly    attribute DOMHighResTimeStamp duration;
   [Default] object toJSON();
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/interfaces/speech-api.idl
@@ -0,0 +1,174 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "Web Speech API" spec.
+// See: https://w3c.github.io/speech-api/
+
+[Exposed=Window, Constructor]
+interface SpeechRecognition : EventTarget {
+    // recognition parameters
+    attribute SpeechGrammarList grammars;
+    attribute DOMString lang;
+    attribute boolean continuous;
+    attribute boolean interimResults;
+    attribute unsigned long maxAlternatives;
+    attribute DOMString serviceURI;
+
+    // methods to drive the speech interaction
+    void start();
+    void stop();
+    void abort();
+
+    // event methods
+    attribute EventHandler onaudiostart;
+    attribute EventHandler onsoundstart;
+    attribute EventHandler onspeechstart;
+    attribute EventHandler onspeechend;
+    attribute EventHandler onsoundend;
+    attribute EventHandler onaudioend;
+    attribute EventHandler onresult;
+    attribute EventHandler onnomatch;
+    attribute EventHandler onerror;
+    attribute EventHandler onstart;
+    attribute EventHandler onend;
+};
+
+enum SpeechRecognitionErrorCode {
+    "no-speech",
+    "aborted",
+    "audio-capture",
+    "network",
+    "not-allowed",
+    "service-not-allowed",
+    "bad-grammar",
+    "language-not-supported"
+};
+
+[Exposed=Window]
+interface SpeechRecognitionErrorEvent : Event {
+    readonly attribute SpeechRecognitionErrorCode error;
+    readonly attribute DOMString message;
+};
+
+// Item in N-best list
+[Exposed=Window]
+interface SpeechRecognitionAlternative {
+    readonly attribute DOMString transcript;
+    readonly attribute float confidence;
+};
+
+// A complete one-shot simple response
+[Exposed=Window]
+interface SpeechRecognitionResult {
+    readonly attribute unsigned long length;
+    getter SpeechRecognitionAlternative item(unsigned long index);
+    readonly attribute boolean isFinal;
+};
+
+// A collection of responses (used in continuous mode)
+[Exposed=Window]
+interface SpeechRecognitionResultList {
+    readonly attribute unsigned long length;
+    getter SpeechRecognitionResult item(unsigned long index);
+};
+
+// A full response, which could be interim or final, part of a continuous response or not
+[Exposed=Window]
+interface SpeechRecognitionEvent : Event {
+    readonly attribute unsigned long resultIndex;
+    readonly attribute SpeechRecognitionResultList results;
+    readonly attribute any interpretation;
+    readonly attribute Document? emma;
+};
+
+// The object representing a speech grammar
+[Exposed=Window, Constructor]
+interface SpeechGrammar {
+    attribute DOMString src;
+    attribute float weight;
+};
+
+// The object representing a speech grammar collection
+[Exposed=Window, Constructor]
+interface SpeechGrammarList {
+    readonly attribute unsigned long length;
+    getter SpeechGrammar item(unsigned long index);
+    void addFromURI(DOMString src,
+                    optional float weight);
+    void addFromString(DOMString string,
+                    optional float weight);
+};
+
+[Exposed=Window]
+interface SpeechSynthesis : EventTarget {
+    readonly attribute boolean pending;
+    readonly attribute boolean speaking;
+    readonly attribute boolean paused;
+
+    attribute EventHandler onvoiceschanged;
+
+    void speak(SpeechSynthesisUtterance utterance);
+    void cancel();
+    void pause();
+    void resume();
+    sequence<SpeechSynthesisVoice> getVoices();
+};
+
+partial interface Window {
+    [SameObject] readonly attribute SpeechSynthesis speechSynthesis;
+};
+
+[Exposed=Window,
+  Constructor,
+  Constructor(DOMString text)]
+interface SpeechSynthesisUtterance : EventTarget {
+    attribute DOMString text;
+    attribute DOMString lang;
+    attribute SpeechSynthesisVoice? voice;
+    attribute float volume;
+    attribute float rate;
+    attribute float pitch;
+
+    attribute EventHandler onstart;
+    attribute EventHandler onend;
+    attribute EventHandler onerror;
+    attribute EventHandler onpause;
+    attribute EventHandler onresume;
+    attribute EventHandler onmark;
+    attribute EventHandler onboundary;
+};
+
+[Exposed=Window]
+interface SpeechSynthesisEvent : Event {
+    readonly attribute SpeechSynthesisUtterance utterance;
+    readonly attribute unsigned long charIndex;
+    readonly attribute float elapsedTime;
+    readonly attribute DOMString name;
+};
+
+enum SpeechSynthesisErrorCode {
+    "canceled",
+    "interrupted",
+    "audio-busy",
+    "audio-hardware",
+    "network",
+    "synthesis-unavailable",
+    "synthesis-failed",
+    "language-unavailable",
+    "voice-unavailable",
+    "text-too-long",
+    "invalid-argument",
+};
+
+[Exposed=Window]
+interface SpeechSynthesisErrorEvent : SpeechSynthesisEvent {
+    readonly attribute SpeechSynthesisErrorCode error;
+};
+
+[Exposed=Window]
+interface SpeechSynthesisVoice {
+    readonly attribute DOMString voiceURI;
+    readonly attribute DOMString name;
+    readonly attribute DOMString lang;
+    readonly attribute boolean localService;
+    readonly attribute boolean default;
+};
--- a/testing/web-platform/tests/interfaces/webmidi.idl
+++ b/testing/web-platform/tests/interfaces/webmidi.idl
@@ -1,70 +1,84 @@
 // GENERATED CONTENT - DO NOT EDIT
 // Content of this file was automatically extracted from the
 // "Web MIDI API" spec.
 // See: http://webaudio.github.io/web-midi-api/
 
 partial interface Navigator {
-    Promise<MIDIAccess> requestMIDIAccess(optional MIDIOptions options);
+  Promise<MIDIAccess> requestMIDIAccess(optional MIDIOptions options);
 };
+
 dictionary MIDIOptions {
-    boolean sysex;
-    boolean software;
+  boolean sysex;
+  boolean software;
 };
+
 interface MIDIInputMap {
-    readonly maplike<DOMString, MIDIInput>;
+  readonly maplike<DOMString, MIDIInput>;
 };
+
 interface MIDIOutputMap {
-    readonly maplike<DOMString, MIDIOutput>;
+  readonly maplike<DOMString, MIDIOutput>;
 };
+
 interface MIDIAccess : EventTarget {
-    readonly attribute MIDIInputMap  inputs;
-    readonly attribute MIDIOutputMap outputs;
-             attribute EventHandler  onstatechange;
-    readonly attribute boolean       sysexEnabled;
+  readonly attribute MIDIInputMap inputs;
+  readonly attribute MIDIOutputMap outputs;
+  attribute EventHandler onstatechange;
+  readonly attribute boolean sysexEnabled;
 };
+
 interface MIDIPort : EventTarget {
-    readonly attribute DOMString               id;
-    readonly attribute DOMString?              manufacturer;
-    readonly attribute DOMString?              name;
-    readonly attribute MIDIPortType            type;
-    readonly attribute DOMString?              version;
-    readonly attribute MIDIPortDeviceState     state;
-    readonly attribute MIDIPortConnectionState connection;
-             attribute EventHandler            onstatechange;
-    Promise<MIDIPort> open();
-    Promise<MIDIPort> close();
+  readonly attribute DOMString id;
+  readonly attribute DOMString? manufacturer;
+  readonly attribute DOMString? name;
+  readonly attribute MIDIPortType type;
+  readonly attribute DOMString? version;
+  readonly attribute MIDIPortDeviceState state;
+  readonly attribute MIDIPortConnectionState connection;
+  attribute EventHandler onstatechange;
+  Promise<MIDIPort> open();
+  Promise<MIDIPort> close();
 };
+
 interface MIDIInput : MIDIPort {
-    attribute EventHandler onmidimessage;
+  attribute EventHandler onmidimessage;
 };
+
 interface MIDIOutput : MIDIPort {
-    void send(sequence<octet> data, optional DOMHighResTimeStamp timestamp = 0);
-    void clear();
+  void send(sequence<octet> data, optional DOMHighResTimeStamp timestamp = 0);
+  void clear();
 };
+
 enum MIDIPortType {
-    "input",
-    "output",
+  "input",
+  "output",
 };
+
 enum MIDIPortDeviceState {
-    "disconnected",
-    "connected",
+  "disconnected",
+  "connected",
 };
+
 enum MIDIPortConnectionState {
-    "open",
-    "closed",
-    "pending",
+  "open",
+  "closed",
+  "pending",
 };
+
 [Constructor(DOMString type, optional MIDIMessageEventInit eventInitDict)]
 interface MIDIMessageEvent : Event {
-    readonly attribute Uint8Array data;
+  readonly attribute Uint8Array data;
 };
+
 dictionary MIDIMessageEventInit : EventInit {
-    Uint8Array data;
+  Uint8Array data;
 };
+
 [Constructor(DOMString type, optional MIDIConnectionEventInit eventInitDict)]
 interface MIDIConnectionEvent : Event {
-    readonly attribute MIDIPort port;
+  readonly attribute MIDIPort port;
 };
+
 dictionary MIDIConnectionEventInit : EventInit {
-    MIDIPort port;
+  MIDIPort port;
 };
--- a/testing/web-platform/tests/interfaces/webrtc.idl
+++ b/testing/web-platform/tests/interfaces/webrtc.idl
@@ -582,17 +582,16 @@ dictionary RTCDTMFToneChangeEventInit : 
 };
 
 partial interface RTCPeerConnection {
     Promise<RTCStatsReport> getStats(optional MediaStreamTrack? selector = null);
     attribute EventHandler onstatsended;
           };
 
 [Exposed=Window] interface RTCStatsReport {
-
     readonly maplike<DOMString, object>;
 };
 
 dictionary RTCStats {
              required DOMHighResTimeStamp timestamp;
              required RTCStatsType type;
              required DOMString id;
 };
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/origin-policy/origin-policy-single-report.https.tentative.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <script src='/resources/testharness.js'></script>
+  <script src='/resources/testharnessreport.js'></script>
+</head>
+<body>
+  <iframe id=frame></iframe>
+  <script>
+    async_test(t => {
+      let violations = [];
+      window.addEventListener("message", (e) => {
+        violations.push(e);
+        t.step_timeout(() => {
+          assert_equals(violations.length, 1);
+          t.done();
+        });
+      });
+
+      let forbidden_image = "<img src=https://127.0.0.1:1234/bla.jpg>";
+      let event_bouncer = "<script>document.addEventListener(" +
+          "'securitypolicyviolation'," +
+          "(e) => window.parent.postMessage(e.blockedURI, '*'));</sc" +
+          "ript>";
+      document.getElementById("frame").src =
+        "data:text/html;charset=utf-8," + event_bouncer + forbidden_image;
+    }, "Origin-Policy-based CSP violation should trigger 1 violation event");
+  </script>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/origin-policy/origin-policy-single-report.https.tentative.html.headers
@@ -0,0 +1,1 @@
+Sec-Origin-Policy: policy-noimg
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/origin-policy/origin-policy.https.tentative.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <script src='/resources/testharness.js'></script>
+  <script src='/resources/testharnessreport.js'></script>
+</head>
+<body>
+  <div id=log></div>
+  <iframe id=frame></iframe>
+  <script>
+    // Navigate the frame to a test page with the given policy and wait for
+    // postMessage to arrive. Resolve the result promise with the message.
+    function navigate(policy) {
+      return new Promise(resolve => {
+        window.addEventListener("message", event => { resolve(event.data); },
+                                { once: true });
+        document.getElementById("frame").src =
+            "/origin-policy/sec-origin-policy-header.html.py?policy=" + policy;
+      });
+    }
+
+    // Check whether the message returned from the frame meets our expectations.
+    function expect(expect_script, expect_eval, message) {
+      assert_own_property(message, "inline_allowed");
+      assert_own_property(message, "eval_allowed");
+      assert_equals(message.inline_allowed, expect_script);
+      assert_equals(message.eval_allowed, expect_eval);
+    }
+
+    // Generate a more descriptive error message. Re-throw the error.
+    function descriptive_message(policy, expect_inline, expect_eval,
+                                 index, error) {
+      error.message = `Error occured on entry #${index + 1} ["${policy
+          }", ${expect_inline}, ${expect_eval}]: "${error}".`;
+      throw(error);
+    }
+
+    // Run the navigation + expectation checking for one test case line.
+    function test_case_entry([policy, expect_inline, expect_eval], index) {
+      return navigate(policy)
+          .then(message => expect(expect_inline, expect_eval, message))
+
+          // This catch handler merely logs a more friendly message,
+          // pointing you to the exact line of the failing test.
+          .catch(error => descriptive_message(policy, expect_inline,
+                                              expect_eval, index, error));
+    }
+
+    function origin_policy_csp_test_case(test_case_list) {
+      return t => {
+        // Setup the promise chain for the test.
+        let chain = Promise.resolve();
+        for ([index, val] of test_case_list.entries())
+          chain = chain.then(test_case_entry.bind(this, val, index));
+
+        // Delete the policy as the last element of the chain, on both
+        // resolve + reject paths, so that a left-over policy won't break
+        // subsequent tests.
+        return chain.then(() => navigate("0"),
+                          (error) => { navigate("0"); throw error; });
+      }
+    }
+
+
+    // Sanity check: A request with no policy.
+    promise_test(origin_policy_csp_test_case([
+        ["", true, true],  // No policy.
+    ]), "sanity check");
+
+    // Basic functionality. A policy should have an effect.
+    promise_test(origin_policy_csp_test_case([
+        ["",             true, true],  // No policy.
+        ["policy-csp-1", true, false], // policy-csp-1, which forbids eval.
+        ["0",            true, true],  // Delete the policy again.
+      ]), "The basics: A policy should have an effect..");
+
+    // Basic functionality. Set a policy. Make sure it "sticks".
+    promise_test(origin_policy_csp_test_case([
+        ["",             true, true],  // No policy.
+        ["policy-csp-1", true, false], // policy-csp-1, which forbids eval.
+        ["",             true, false], // No policy. Should remember p...-csp-1.
+        ["0",            true, true],  // Delete the policy again.
+      ]), "The basics: A policy should stick.");
+
+    // Set, update, and delete a policy.
+    promise_test(origin_policy_csp_test_case([
+        ["",             true,  true],
+        ["policy-csp-1", true,  false], // policy-csp-1, which forbids eval.
+        ["policy-csp-2", false, false], // policy-csp-2, forbids script + eval.
+        ["0",            true,  true],  // Delete the policy.
+      ]), "Policy set, update, and delete.");
+
+    // Set, update, and delete a policy. Check on each step whether it 'sticks'.
+    promise_test(origin_policy_csp_test_case([
+        ["",             true,  true],
+        ["policy-csp-1", true,  false], // policy-csp-1, which forbids eval.
+        ["",             true,  false],
+        ["policy-csp-2", false, false], // Forbid script + eval.
+        ["",             false, false],
+        ["0",            true,  true],  // Delete the policy.
+        ["",             true,  true],
+      ]), "Policy set-update-delete cycle with checks.");
+
+    // Set a policy, update, then revert to the old one.
+    promise_test(origin_policy_csp_test_case([
+        ["",             true,  true],
+        ["policy-csp-1", true,  false], // policy-csp-1, which forbids eval.
+        ["policy-csp-2", false, false], // Forbid script + eval.
+        ["policy-csp-1", true,  false], // policy-csp-1 again.
+        ["0",            true,  true],
+      ]), "Policy set-update-delete cycle.");
+
+    // Set, delete, re-set, and re-delete a policy.
+    promise_test(origin_policy_csp_test_case([
+        ["",             true, true],  // No policy.
+        ["policy-csp-1", true, false], // policy-csp-1, which forbids eval.
+        ["",             true, false],
+        ["0",            true, true],  // Delete the policy.
+        ["",             true, true],
+        ["policy-csp-1", true, false], // Set policy after policy was deleted.
+        ["",             true, false],
+        ["0",            true, true],  // Delete the policy again.
+        ["",             true, true],
+      ]), "Policy re-set and re-delete.");
+
+    // We've had some bugs with repeated policies being set, so lets just
+    // run through a set-update-delete cycle but with every request being
+    // made twice.
+    promise_test(origin_policy_csp_test_case([
+        ["",             true,  true],
+        ["",             true,  true],
+        ["policy-csp-1", true,  false],
+        ["policy-csp-1", true,  false],
+        ["policy-csp-2", false, false],
+        ["policy-csp-2", false, false],
+        ["0",            true,  true],
+        ["0",            true,  true],
+        ["",             true,  true],
+        ["",             true,  true],
+      ]), "Double Trouble");
+  </script>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/origin-policy/sec-origin-policy-header.html.py
@@ -0,0 +1,64 @@
+def main(request, response):
+  """Send a response with the origin policy indicated by the ?policy= argument.
+
+     Won't send a policy when the browser doesn't indicate support.
+     The response tests whether inline script and eval are allowed, and will
+     send a corresponding message to the parent frame.
+     For easier debugging, we'll also show the results in-page.
+  """
+  origin_policy_header = "Sec-Origin-Policy"
+  request_policy = request.headers.get(origin_policy_header)
+  response_policy = request.GET.first("policy", default="")
+
+  if request_policy and response_policy:
+    response.headers.set(origin_policy_header, response_policy)
+    response.headers.set("Vary", "sec-origin-policy")
+
+  response.headers.set("Content-Type", "text/html");
+  return """
+    <html>
+    <head>
+     <title>Page with an Origin Policy</title>
+    </head>
+    <body>
+    <script nonce=test>
+      let inlineAllowed = false;
+      let evalAllowed = false;
+      try { eval('evalAllowed = true;'); } catch (e) {};
+    </script>
+    <script>
+      inlineAllowed = true;
+    </script>
+
+    <p>Reveal whether CSP with "unsafe-inline" or "unsafe-eval" is present:</p>
+    <ul>
+      <li>inline script allowed: <span id=inline_allowed></span></li>
+      <li>eval allowed: <span id=eval_allowed></span></li>
+    </ul>
+
+    <script nonce=test>
+      const result = {
+        "inline_allowed": inlineAllowed,
+        "eval_allowed": evalAllowed,
+      };
+
+      // Mirror content into the page for easy debugging:
+      const styles = {
+        true: "font-weight: bold; color: green;",
+        false: "font-weight: bold; color: red",
+      }
+      for (const [key, value] of Object.entries(result)) {
+        let element = document.getElementById(key);
+        element.textContent = value.toString();
+        element.style = styles[value];
+      }
+
+      // Send result to parent frame for evaluation.
+      if (window.parent) {
+        window.parent.postMessage(result, "*");
+      }
+    </script>
+    </body>
+    </html>
+  """
+
--- a/testing/web-platform/tests/priority-hints/META.yml
+++ b/testing/web-platform/tests/priority-hints/META.yml
@@ -1,3 +1,5 @@
 spec: https://wicg.github.io/priority-hints/
 suggested_reviewers:
+  - addyosmani
   - domfarolino
+  - yoavweiss
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/speech-api/idlharness.window.js
@@ -0,0 +1,34 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+'use strict';
+
+idl_test(
+  ['speech-api'],
+  ['dom', 'html'],
+  idl_array => {
+    idl_array.add_objects({
+      SpeechGrammar: ['new SpeechGrammar()'],
+      SpeechGrammarList: ['new SpeechGrammarList()'],
+      SpeechRecognition: ['new SpeechRecognition()'],
+      // TODO: SpeechRecognitionAlternative
+      // TODO: SpeechRecognitionErrorEvent
+      // TODO: SpeechRecognitionEvent
+      // TODO: SpeechRecognitionResult
+      // TODO: SpeechRecognitionResultList
+      SpeechSynthesis: ['speechSynthesis'],
+      // TODO: SpeechSynthesisErrorEvent
+      // TODO: SpeechSynthesisEvent
+      SpeechSynthesisUtterance: ['new SpeechSynthesisUtterance()'],
+      Window: ['self'],
+    });
+
+    // https://w3c.github.io/speech-api/#dom-speechsynthesis-getvoices can
+    // return an empty list, so add SpeechSynthesisVoice conditionally.
+    const voices = speechSynthesis.getVoices();
+    if (voices.length) {
+      self.voice = voices[0];
+      idl_array.add_objects({ SpeechSynthesisVoice: ['voice'] });
+    }
+  }
+);
--- a/testing/web-platform/tests/wasm/resources/service-worker.js
+++ b/testing/web-platform/tests/wasm/resources/service-worker.js
@@ -19,8 +19,12 @@ self.addEventListener('message', functio
                     port.postMessage({type:"OK", module:m});
                 } catch (e) {
                     port.postMessage({type:"SEND ERROR"});
                 }
             })
             .catch(e => port.postMessage({type:"OTHER ERROR"}));
     }
 });
+
+self.addEventListener('messageerror', function(e) {
+  port.postMessage({type:"RECEIVE ERROR"});
+});
--- a/testing/web-platform/tests/wasm/wasm_service_worker_test.https.html
+++ b/testing/web-platform/tests/wasm/wasm_service_worker_test.https.html
@@ -3,19 +3,21 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/common/get-host-info.sub.js"></script>
 <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
 <script>
   promise_test(async test => {
     var registration = await service_worker_unregister_and_register(
       test, 'resources/service-worker.js', 'resources/blank.html');
-      add_completion_callback(() => registration.unregister());
-      var worker = registration.installing;
-      var data = await new Promise((resolve, reject) => {
-        var messageChannel = new MessageChannel();
-        worker.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
-        worker.postMessage({compile: true});
-        messageChannel.port1.onmessage = event => resolve(event.data);
-      });
-      assert_equals(data, null);
+    add_completion_callback(() => registration.unregister());
+    var worker = registration.installing;
+    var event = await new Promise((resolve, reject) => {
+      var messageChannel = new MessageChannel();
+      worker.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
+      worker.postMessage({compile: true});
+      messageChannel.port1.onmessage = event => reject(event);
+      messageChannel.port1.onmessageerror = event => resolve(event);
+    });
+    assert_equals(event.type, "messageerror");
+    assert_equals(event.data, null);
   }, 'postMessaging wasm from a service worker should fail');
 </script>
--- a/testing/web-platform/tests/webrtc/RTCRtpParameters-transactionId.html
+++ b/testing/web-platform/tests/webrtc/RTCRtpParameters-transactionId.html
@@ -107,19 +107,19 @@
     const { sender } = pc.addTransceiver('audio');
     await doOfferAnswerExchange(t, pc);
 
     const param = sender.getParameters();
     validateSenderRtpParameters(param);
 
     param.transactionId = undefined;
 
-    return promise_rejects(t, 'InvalidModificationError',
+    return promise_rejects(t, new TypeError(),
       sender.setParameters(param));
-  }, `sender.setParameters() with transaction ID unset should reject with InvalidModificationError`);
+  }, `sender.setParameters() with transaction ID unset should reject with TypeError`);
 
   promise_test(async t => {
     const pc = new RTCPeerConnection();
     t.add_cleanup(() => pc.close());
     const { sender } = pc.addTransceiver('audio');
     await doOfferAnswerExchange(t, pc);
 
     const param = sender.getParameters();
--- a/toolkit/components/extensions/parent/ext-toolkit.js
+++ b/toolkit/components/extensions/parent/ext-toolkit.js
@@ -1,21 +1,21 @@
 "use strict";
 
 // These are defined on "global" which is used for the same scopes as the other
 // ext-*.js files.
 /* exported getCookieStoreIdForTab, getCookieStoreIdForContainer,
             getContainerForCookieStoreId,
             isValidCookieStoreId, isContainerCookieStoreId,
-            EventManager, InputEventManager, URL */
+            EventManager, URL */
 /* global getCookieStoreIdForTab:false, getCookieStoreIdForContainer:false,
           getContainerForCookieStoreId: false,
           isValidCookieStoreId:false, isContainerCookieStoreId:false,
           isDefaultCookieStoreId: false, isPrivateCookieStoreId:false,
-          EventManager: false, InputEventManager: false */
+          EventManager: false */
 
 ChromeUtils.defineModuleGetter(this, "ContextualIdentityService",
                                "resource://gre/modules/ContextualIdentityService.jsm");
 
 XPCOMUtils.defineLazyGlobalGetters(this, ["URL"]);
 
 ChromeUtils.import("resource://gre/modules/ExtensionCommon.jsm");