Update On Wed Apr 9 20:49:03 CEST 2025
This commit is contained in:
parent
35b863fd86
commit
745952e3b8
223 changed files with 4293 additions and 1943 deletions
|
@ -117,7 +117,7 @@
|
|||
/>
|
||||
<description
|
||||
id="browsing-history-downloads-description"
|
||||
data-l10n-id="item-history-and-downloads-description"
|
||||
data-l10n-id="item-history-and-downloads-description2"
|
||||
class="sanitizeCheckboxDescription text-deemphasized"
|
||||
/>
|
||||
</vbox>
|
||||
|
@ -198,7 +198,7 @@
|
|||
/>
|
||||
<description
|
||||
id="browsing-history-downloads-description"
|
||||
data-l10n-id="item-history-and-downloads-description"
|
||||
data-l10n-id="item-history-and-downloads-description2"
|
||||
class="sanitizeCheckboxDescription text-deemphasized"
|
||||
/>
|
||||
</vbox>
|
||||
|
@ -279,7 +279,7 @@
|
|||
/>
|
||||
<description
|
||||
class="sanitizeCheckboxDescription text-deemphasized"
|
||||
data-l10n-id="item-history-and-downloads-description"
|
||||
data-l10n-id="item-history-and-downloads-description2"
|
||||
id="history-and-downloads-description"
|
||||
/>
|
||||
</vbox>
|
||||
|
|
|
@ -1216,20 +1216,24 @@ var SidebarController = {
|
|||
if (expandOnToggle) {
|
||||
// just expand/collapse the launcher
|
||||
this._state.updateVisibility(true, !initialExpandedValue);
|
||||
} else {
|
||||
const shouldShowLauncher = !this._state.launcherVisible;
|
||||
// show/hide the launcher
|
||||
this._state.updateVisibility(shouldShowLauncher);
|
||||
// if we're showing and there was panel open, open it again
|
||||
if (shouldShowLauncher && this._state.command) {
|
||||
this._show(this._state.command);
|
||||
} else if (!shouldShowLauncher) {
|
||||
// hide the open panel. It will re-open next time as we don't change the command value
|
||||
this.hide({ dismissPanel: false });
|
||||
}
|
||||
this.updateToolbarButton();
|
||||
return;
|
||||
}
|
||||
|
||||
this.updateToolbarButton();
|
||||
const shouldShowLauncher = !this._state.launcherVisible;
|
||||
// show/hide the launcher
|
||||
this._state.updateVisibility(shouldShowLauncher);
|
||||
// if we're showing and there was panel open, open it again
|
||||
if (shouldShowLauncher && this._state.command) {
|
||||
await this.show(this._state.command);
|
||||
} else if (!shouldShowLauncher) {
|
||||
// hide will only update the toolbar button state if the panel was open
|
||||
if (!this.isOpen) {
|
||||
this.updateToolbarButton();
|
||||
}
|
||||
// hide the open panel. It will re-open next time as we don't change the command value
|
||||
this.hide({ dismissPanel: false });
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -3,6 +3,10 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const { ExtensionCommon } = ChromeUtils.importESModule(
|
||||
"resource://gre/modules/ExtensionCommon.sys.mjs"
|
||||
);
|
||||
|
||||
add_setup(() =>
|
||||
SpecialPowers.pushPrefEnv({
|
||||
set: [["layout.css.devPixelsPerPx", 1]],
|
||||
|
@ -315,3 +319,93 @@ add_task(async function test_extension_sidebar_hidpi_icon() {
|
|||
await extension.unload();
|
||||
await BrowserTestUtils.closeWindow(win);
|
||||
});
|
||||
|
||||
add_task(async function test_extension_panel_load() {
|
||||
const launcher = document.querySelector("sidebar-main");
|
||||
const extension = ExtensionTestUtils.loadExtension({ ...extData });
|
||||
let textContent;
|
||||
|
||||
async function waitForPanelReady() {
|
||||
return Promise.all([
|
||||
extension.awaitMessage("sidebar"),
|
||||
BrowserTestUtils.waitForEvent(window, "SidebarFocused"),
|
||||
]);
|
||||
}
|
||||
|
||||
async function getSidebarPanelContents(win = window) {
|
||||
let sidebarBrowser = win.SidebarController.browser;
|
||||
is(
|
||||
sidebarBrowser.currentURI.spec,
|
||||
"chrome://browser/content/webext-panels.xhtml",
|
||||
"Sidebar wrapper loaded in sidebar browser"
|
||||
);
|
||||
let extSidebarBrowser = sidebarBrowser.contentDocument.getElementById(
|
||||
"webext-panels-browser"
|
||||
);
|
||||
ok(extSidebarBrowser, "got extSidebarBrowser");
|
||||
|
||||
const contentResult = await SpecialPowers.spawn(
|
||||
extSidebarBrowser,
|
||||
[],
|
||||
async () => {
|
||||
const doc = content.document;
|
||||
if (doc.readyState != "complete") {
|
||||
await new Promise(resolve =>
|
||||
doc.addEventListener("DOMContentLoaded", resolve, { once: true })
|
||||
);
|
||||
}
|
||||
return doc.documentElement.textContent.trim();
|
||||
}
|
||||
);
|
||||
return contentResult;
|
||||
}
|
||||
|
||||
const extensionPanelInitialReady = waitForPanelReady();
|
||||
await extension.startup();
|
||||
const commandID = `${ExtensionCommon.makeWidgetId(extension.id)}-sidebar-action`;
|
||||
|
||||
await extensionPanelInitialReady;
|
||||
is(launcher.extensionButtons.length, 1, "Extension is shown in the sidebar.");
|
||||
|
||||
ok(SidebarController.isOpen, "The sidebar panel opened on install");
|
||||
is(
|
||||
SidebarController.currentID,
|
||||
commandID,
|
||||
"The currentID is the extension's sidebarAction"
|
||||
);
|
||||
|
||||
textContent = await getSidebarPanelContents();
|
||||
is(
|
||||
textContent,
|
||||
"A Test Sidebar",
|
||||
"Extension's sidebarAction loaded its document into the sidebar panel"
|
||||
);
|
||||
|
||||
// check we can toggle it closed and open again
|
||||
let panelHiddenPromise = BrowserTestUtils.waitForMutationCondition(
|
||||
SidebarController._box,
|
||||
{ attributes: true, attributeFilter: ["hidden"] },
|
||||
() =>
|
||||
SidebarController._box.hidden &&
|
||||
SidebarController.browser.getAttribute("src") == "about:blank"
|
||||
);
|
||||
document.getElementById("sidebar-button").click();
|
||||
await panelHiddenPromise;
|
||||
|
||||
const extensionPanelReopenReady = waitForPanelReady();
|
||||
document.getElementById("sidebar-button").click();
|
||||
|
||||
info("Waiting for the panel to be shown & focused");
|
||||
await extensionPanelReopenReady;
|
||||
|
||||
textContent = await getSidebarPanelContents();
|
||||
is(
|
||||
textContent,
|
||||
"A Test Sidebar",
|
||||
"Extension's sidebarAction re-loaded its document into the sidebar panel"
|
||||
);
|
||||
|
||||
SidebarController.hide();
|
||||
await extension.unload();
|
||||
await launcher.updateComplete;
|
||||
});
|
||||
|
|
|
@ -204,6 +204,9 @@ add_task(async function test_states_for_hide_sidebar() {
|
|||
});
|
||||
await waitForTabstripOrientation("horizontal");
|
||||
|
||||
const { SidebarController } = window;
|
||||
const { sidebarContainer, sidebarMain, toolbarButton } = SidebarController;
|
||||
|
||||
Assert.equal(
|
||||
Services.prefs.getStringPref(SIDEBAR_VISIBILITY_PREF),
|
||||
"hide-sidebar",
|
||||
|
@ -211,19 +214,14 @@ add_task(async function test_states_for_hide_sidebar() {
|
|||
);
|
||||
// The sidebar launcher should be initially visible when visibility is "hide-sidebar"
|
||||
Assert.ok(
|
||||
!window.SidebarController.sidebarContainer.hidden,
|
||||
!SidebarController.sidebarContainer.hidden,
|
||||
"The launcher is initially visible"
|
||||
);
|
||||
Assert.ok(
|
||||
window.SidebarController.toolbarButton.checked,
|
||||
SidebarController.toolbarButton.checked,
|
||||
"The toolbar button is initially checked"
|
||||
);
|
||||
|
||||
const win = await BrowserTestUtils.openNewBrowserWindow();
|
||||
const { SidebarController } = win;
|
||||
const { sidebarContainer, sidebarMain, toolbarButton } = SidebarController;
|
||||
await waitForTabstripOrientation("horizontal", win);
|
||||
|
||||
const checkStates = async (
|
||||
{ hidden },
|
||||
container = sidebarContainer,
|
||||
|
@ -247,7 +245,9 @@ add_task(async function test_states_for_hide_sidebar() {
|
|||
() => !component.expanded
|
||||
);
|
||||
ok(true, "Sidebar should not be expanded");
|
||||
info("Waiting for button to be highlighted");
|
||||
info(
|
||||
`Waiting for button to be ${hidden ? "not highlighted" : "highlighted"}`
|
||||
);
|
||||
await BrowserTestUtils.waitForMutationCondition(
|
||||
button,
|
||||
{ attributes: true, attributeFilter: ["checked", "expanded"] },
|
||||
|
@ -276,7 +276,8 @@ add_task(async function test_states_for_hide_sidebar() {
|
|||
await checkStates({ hidden: false });
|
||||
|
||||
info("Hide sidebar using the toolbar button.");
|
||||
EventUtils.synthesizeMouseAtCenter(toolbarButton, {}, win);
|
||||
await SimpleTest.promiseFocus(window);
|
||||
EventUtils.synthesizeMouseAtCenter(toolbarButton, {}, window);
|
||||
await checkStates({ hidden: true });
|
||||
Assert.ok(
|
||||
!toolbarButton.checked,
|
||||
|
@ -297,7 +298,6 @@ add_task(async function test_states_for_hide_sidebar() {
|
|||
"The toolbar button in the new window is unchecked when the launcher is hidden"
|
||||
);
|
||||
|
||||
await BrowserTestUtils.closeWindow(win);
|
||||
await BrowserTestUtils.closeWindow(newWin);
|
||||
await SpecialPowers.popPrefEnv();
|
||||
await waitForTabstripOrientation("vertical");
|
||||
|
|
|
@ -106,6 +106,8 @@ skip-if = [
|
|||
|
||||
["browser_iframe_update_fields.js"]
|
||||
|
||||
["browser_label_matching.js"]
|
||||
|
||||
["browser_manageAddressesDialog.js"]
|
||||
|
||||
["browser_ml_model.js"]
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
https://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
add_heuristic_tests([
|
||||
{
|
||||
description:
|
||||
"Multiple inputs with the same id — <label> should only match the first occurrence",
|
||||
fixtureData: `<form>
|
||||
<input id='email' autocomplete="email">
|
||||
<input id='name' autocomplete="name">
|
||||
<label for="inputA">Street</label>
|
||||
<input id="inputA">
|
||||
<label for="inputA">Organization</label>
|
||||
<input id="inputA">
|
||||
<label for="inputA">Country</label>
|
||||
<input id="inputA">
|
||||
</form>`,
|
||||
expectedResult: [
|
||||
{
|
||||
default: {
|
||||
reason: "autocomplete",
|
||||
},
|
||||
fields: [
|
||||
{ fieldName: "email" },
|
||||
{ fieldName: "name" },
|
||||
{ fieldName: "street-address", reason: "regex-heuristic" },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
|
@ -18,7 +18,7 @@ add_heuristic_tests(
|
|||
{ fieldName: "address-line1" },
|
||||
{ fieldName: "email" },
|
||||
{ fieldName: "tel" },
|
||||
{ fieldName: "tel" }, // Extension
|
||||
{ fieldName: "tel-extension", reason: "update-heuristic" }, // Extension
|
||||
{ fieldName: "organization" },
|
||||
]
|
||||
},
|
||||
|
@ -37,7 +37,7 @@ add_heuristic_tests(
|
|||
{ fieldName: "address-line1" },
|
||||
{ fieldName: "email" },
|
||||
{ fieldName: "tel" },
|
||||
{ fieldName: "tel" }, // Extension
|
||||
{ fieldName: "tel-extension", reason: "update-heuristic" }, // Extension
|
||||
{ fieldName: "organization" },
|
||||
],
|
||||
},
|
||||
|
|
|
@ -51,7 +51,7 @@ const TESTCASES = [
|
|||
<label id="labelE4" for=" typeE ">label type E4</label>
|
||||
<input id=" typeE " type="text">`,
|
||||
inputId: " typeE ",
|
||||
expectedLabelIds: [[]],
|
||||
expectedLabelIds: [["labelE4"]],
|
||||
},
|
||||
{
|
||||
description: "Input contains in a label element.",
|
||||
|
|
|
@ -75,7 +75,7 @@ item-history-and-downloads =
|
|||
.label = Browsing & download history
|
||||
.accesskey = B
|
||||
|
||||
item-history-and-downloads-description = Clears search, site and download history
|
||||
item-history-and-downloads-description2 = Clears site and download history
|
||||
|
||||
item-cookies =
|
||||
.label = Cookies
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"af": {
|
||||
"pin": false,
|
||||
|
@ -37,7 +37,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"an": {
|
||||
"pin": false,
|
||||
|
@ -57,7 +57,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ar": {
|
||||
"pin": false,
|
||||
|
@ -77,7 +77,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ast": {
|
||||
"pin": false,
|
||||
|
@ -97,7 +97,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"az": {
|
||||
"pin": false,
|
||||
|
@ -117,7 +117,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"be": {
|
||||
"pin": false,
|
||||
|
@ -137,7 +137,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"bg": {
|
||||
"pin": false,
|
||||
|
@ -157,7 +157,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"bn": {
|
||||
"pin": false,
|
||||
|
@ -177,7 +177,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"bo": {
|
||||
"pin": false,
|
||||
|
@ -197,7 +197,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"br": {
|
||||
"pin": false,
|
||||
|
@ -217,7 +217,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"brx": {
|
||||
"pin": false,
|
||||
|
@ -237,7 +237,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"bs": {
|
||||
"pin": false,
|
||||
|
@ -257,7 +257,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ca": {
|
||||
"pin": false,
|
||||
|
@ -277,7 +277,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ca-valencia": {
|
||||
"pin": false,
|
||||
|
@ -297,7 +297,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"cak": {
|
||||
"pin": false,
|
||||
|
@ -317,7 +317,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ckb": {
|
||||
"pin": false,
|
||||
|
@ -337,7 +337,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"cs": {
|
||||
"pin": false,
|
||||
|
@ -357,7 +357,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"cy": {
|
||||
"pin": false,
|
||||
|
@ -377,7 +377,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"da": {
|
||||
"pin": false,
|
||||
|
@ -397,7 +397,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"de": {
|
||||
"pin": false,
|
||||
|
@ -417,7 +417,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"dsb": {
|
||||
"pin": false,
|
||||
|
@ -437,7 +437,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"el": {
|
||||
"pin": false,
|
||||
|
@ -457,7 +457,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"en-CA": {
|
||||
"pin": false,
|
||||
|
@ -477,7 +477,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"en-GB": {
|
||||
"pin": false,
|
||||
|
@ -497,7 +497,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"eo": {
|
||||
"pin": false,
|
||||
|
@ -517,7 +517,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"es-AR": {
|
||||
"pin": false,
|
||||
|
@ -537,7 +537,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"es-CL": {
|
||||
"pin": false,
|
||||
|
@ -557,7 +557,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"es-ES": {
|
||||
"pin": false,
|
||||
|
@ -577,7 +577,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"es-MX": {
|
||||
"pin": false,
|
||||
|
@ -597,7 +597,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"et": {
|
||||
"pin": false,
|
||||
|
@ -617,7 +617,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"eu": {
|
||||
"pin": false,
|
||||
|
@ -637,7 +637,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"fa": {
|
||||
"pin": false,
|
||||
|
@ -657,7 +657,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ff": {
|
||||
"pin": false,
|
||||
|
@ -677,7 +677,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"fi": {
|
||||
"pin": false,
|
||||
|
@ -697,7 +697,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"fr": {
|
||||
"pin": false,
|
||||
|
@ -717,7 +717,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"fur": {
|
||||
"pin": false,
|
||||
|
@ -737,7 +737,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"fy-NL": {
|
||||
"pin": false,
|
||||
|
@ -757,7 +757,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ga-IE": {
|
||||
"pin": false,
|
||||
|
@ -777,7 +777,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"gd": {
|
||||
"pin": false,
|
||||
|
@ -797,7 +797,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"gl": {
|
||||
"pin": false,
|
||||
|
@ -817,7 +817,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"gn": {
|
||||
"pin": false,
|
||||
|
@ -837,7 +837,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"gu-IN": {
|
||||
"pin": false,
|
||||
|
@ -857,7 +857,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"he": {
|
||||
"pin": false,
|
||||
|
@ -877,7 +877,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hi-IN": {
|
||||
"pin": false,
|
||||
|
@ -897,7 +897,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hr": {
|
||||
"pin": false,
|
||||
|
@ -917,7 +917,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hsb": {
|
||||
"pin": false,
|
||||
|
@ -937,7 +937,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hu": {
|
||||
"pin": false,
|
||||
|
@ -957,7 +957,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hy-AM": {
|
||||
"pin": false,
|
||||
|
@ -977,7 +977,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hye": {
|
||||
"pin": false,
|
||||
|
@ -997,7 +997,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ia": {
|
||||
"pin": false,
|
||||
|
@ -1017,7 +1017,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"id": {
|
||||
"pin": false,
|
||||
|
@ -1037,7 +1037,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"is": {
|
||||
"pin": false,
|
||||
|
@ -1057,7 +1057,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"it": {
|
||||
"pin": false,
|
||||
|
@ -1077,7 +1077,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ja": {
|
||||
"pin": false,
|
||||
|
@ -1095,7 +1095,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ja-JP-mac": {
|
||||
"pin": false,
|
||||
|
@ -1103,7 +1103,7 @@
|
|||
"macosx64",
|
||||
"macosx64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ka": {
|
||||
"pin": false,
|
||||
|
@ -1123,7 +1123,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"kab": {
|
||||
"pin": false,
|
||||
|
@ -1143,7 +1143,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"kk": {
|
||||
"pin": false,
|
||||
|
@ -1163,7 +1163,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"km": {
|
||||
"pin": false,
|
||||
|
@ -1183,7 +1183,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"kn": {
|
||||
"pin": false,
|
||||
|
@ -1203,7 +1203,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ko": {
|
||||
"pin": false,
|
||||
|
@ -1223,7 +1223,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"lij": {
|
||||
"pin": false,
|
||||
|
@ -1243,7 +1243,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"lo": {
|
||||
"pin": false,
|
||||
|
@ -1263,7 +1263,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"lt": {
|
||||
"pin": false,
|
||||
|
@ -1283,7 +1283,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ltg": {
|
||||
"pin": false,
|
||||
|
@ -1303,7 +1303,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"lv": {
|
||||
"pin": false,
|
||||
|
@ -1323,7 +1323,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"meh": {
|
||||
"pin": false,
|
||||
|
@ -1343,7 +1343,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"mk": {
|
||||
"pin": false,
|
||||
|
@ -1363,7 +1363,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ml": {
|
||||
"pin": false,
|
||||
|
@ -1383,7 +1383,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"mr": {
|
||||
"pin": false,
|
||||
|
@ -1403,7 +1403,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ms": {
|
||||
"pin": false,
|
||||
|
@ -1423,7 +1423,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"my": {
|
||||
"pin": false,
|
||||
|
@ -1443,7 +1443,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"nb-NO": {
|
||||
"pin": false,
|
||||
|
@ -1463,7 +1463,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ne-NP": {
|
||||
"pin": false,
|
||||
|
@ -1483,7 +1483,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"nl": {
|
||||
"pin": false,
|
||||
|
@ -1503,7 +1503,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"nn-NO": {
|
||||
"pin": false,
|
||||
|
@ -1523,7 +1523,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"oc": {
|
||||
"pin": false,
|
||||
|
@ -1543,7 +1543,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"pa-IN": {
|
||||
"pin": false,
|
||||
|
@ -1563,7 +1563,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"pl": {
|
||||
"pin": false,
|
||||
|
@ -1583,7 +1583,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"pt-BR": {
|
||||
"pin": false,
|
||||
|
@ -1603,7 +1603,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"pt-PT": {
|
||||
"pin": false,
|
||||
|
@ -1623,7 +1623,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"rm": {
|
||||
"pin": false,
|
||||
|
@ -1643,7 +1643,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ro": {
|
||||
"pin": false,
|
||||
|
@ -1663,7 +1663,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ru": {
|
||||
"pin": false,
|
||||
|
@ -1683,7 +1683,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sat": {
|
||||
"pin": false,
|
||||
|
@ -1703,7 +1703,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sc": {
|
||||
"pin": false,
|
||||
|
@ -1723,7 +1723,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"scn": {
|
||||
"pin": false,
|
||||
|
@ -1743,7 +1743,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sco": {
|
||||
"pin": false,
|
||||
|
@ -1763,7 +1763,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"si": {
|
||||
"pin": false,
|
||||
|
@ -1783,7 +1783,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sk": {
|
||||
"pin": false,
|
||||
|
@ -1803,7 +1803,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"skr": {
|
||||
"pin": false,
|
||||
|
@ -1823,7 +1823,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sl": {
|
||||
"pin": false,
|
||||
|
@ -1843,7 +1843,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"son": {
|
||||
"pin": false,
|
||||
|
@ -1863,7 +1863,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sq": {
|
||||
"pin": false,
|
||||
|
@ -1883,7 +1883,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sr": {
|
||||
"pin": false,
|
||||
|
@ -1903,7 +1903,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sv-SE": {
|
||||
"pin": false,
|
||||
|
@ -1923,7 +1923,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"szl": {
|
||||
"pin": false,
|
||||
|
@ -1943,7 +1943,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ta": {
|
||||
"pin": false,
|
||||
|
@ -1963,7 +1963,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"te": {
|
||||
"pin": false,
|
||||
|
@ -1983,7 +1983,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"tg": {
|
||||
"pin": false,
|
||||
|
@ -2003,7 +2003,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"th": {
|
||||
"pin": false,
|
||||
|
@ -2023,7 +2023,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"tl": {
|
||||
"pin": false,
|
||||
|
@ -2043,7 +2043,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"tr": {
|
||||
"pin": false,
|
||||
|
@ -2063,7 +2063,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"trs": {
|
||||
"pin": false,
|
||||
|
@ -2083,7 +2083,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"uk": {
|
||||
"pin": false,
|
||||
|
@ -2103,7 +2103,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ur": {
|
||||
"pin": false,
|
||||
|
@ -2123,7 +2123,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"uz": {
|
||||
"pin": false,
|
||||
|
@ -2143,7 +2143,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"vi": {
|
||||
"pin": false,
|
||||
|
@ -2163,7 +2163,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"wo": {
|
||||
"pin": false,
|
||||
|
@ -2183,7 +2183,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"xh": {
|
||||
"pin": false,
|
||||
|
@ -2203,7 +2203,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"zh-CN": {
|
||||
"pin": false,
|
||||
|
@ -2223,7 +2223,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"zh-TW": {
|
||||
"pin": false,
|
||||
|
@ -2243,6 +2243,6 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -405,3 +405,6 @@ https://123.123.123.123:443 privileged,nocert
|
|||
# Domain with HSTS preloaded
|
||||
http://includesubdomains.preloaded.test:80 privileged
|
||||
https://includesubdomains.preloaded.test:443 privileged
|
||||
|
||||
# Profiler URL to test profile uploads
|
||||
https://api.profiler.firefox.com:443
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
/* Tooltip is used when previewing primitives */
|
||||
/* Tooltip is used when previewing primitives and exceptions */
|
||||
.tooltip .preview-popup {
|
||||
max-width: inherit;
|
||||
min-height: inherit;
|
||||
|
@ -49,6 +49,12 @@
|
|||
padding: 0 5px;
|
||||
}
|
||||
}
|
||||
|
||||
&.exception-popup {
|
||||
padding: 5px;
|
||||
color: var(--theme-error-color);
|
||||
background-color: var(--theme-error-background);
|
||||
}
|
||||
}
|
||||
|
||||
.preview-tracer-header {
|
||||
|
|
|
@ -165,7 +165,7 @@ class GridInspector {
|
|||
this.inspector.sidebar.off("select", this.onSidebarSelect);
|
||||
this.inspector.off("new-root", this.onNavigate);
|
||||
|
||||
this.inspector.off("reflow-in-selected-target", this.onReflow);
|
||||
this.inspector.off("reflow", this.onReflow);
|
||||
|
||||
this._highlighters = null;
|
||||
this.document = null;
|
||||
|
@ -629,11 +629,13 @@ class GridInspector {
|
|||
*/
|
||||
onSidebarSelect() {
|
||||
if (!this.isPanelVisible()) {
|
||||
this.inspector.off("reflow-in-selected-target", this.onReflow);
|
||||
this.inspector.off("reflow", this.onReflow);
|
||||
return;
|
||||
}
|
||||
|
||||
this.inspector.on("reflow-in-selected-target", this.onReflow);
|
||||
// The panel shows grids from all debugged document, so we need to listen for the
|
||||
// `reflow` event (and not `reflow-in-selected-target`).
|
||||
this.inspector.on("reflow", this.onReflow);
|
||||
this.updateGridPanel();
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ add_task(async function () {
|
|||
is(elements.length, 2, "Grid outline is shown.");
|
||||
|
||||
info("Changing the grid in the page");
|
||||
const onReflow = inspector.once("reflow-in-selected-target");
|
||||
const onReflow = inspector.once("reflow");
|
||||
const onGridOutlineChanged = waitForDOM(doc, ".grid-outline-cell", 4);
|
||||
|
||||
await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
|
||||
|
|
|
@ -179,7 +179,6 @@ function Inspector(toolbox, commands) {
|
|||
this.onSidebarSelect = this.onSidebarSelect.bind(this);
|
||||
this.onSidebarShown = this.onSidebarShown.bind(this);
|
||||
this.onSidebarToggle = this.onSidebarToggle.bind(this);
|
||||
this.onReflowInSelection = this.onReflowInSelection.bind(this);
|
||||
this.listenForSearchEvents = this.listenForSearchEvents.bind(this);
|
||||
|
||||
this.prefObserver = new PrefObserver("devtools.");
|
||||
|
@ -241,6 +240,7 @@ Inspector.prototype = {
|
|||
// To observe CSS change before opening changes view.
|
||||
TYPES.CSS_CHANGE,
|
||||
TYPES.DOCUMENT_EVENT,
|
||||
TYPES.REFLOW,
|
||||
];
|
||||
// The root node is retrieved from onTargetSelected which is now called
|
||||
// on startup as well as on any navigation (= new top level target).
|
||||
|
@ -367,6 +367,16 @@ Inspector.prototype = {
|
|||
) {
|
||||
this._onWillNavigate();
|
||||
}
|
||||
|
||||
if (resource.resourceType === this.toolbox.resourceCommand.TYPES.REFLOW) {
|
||||
this.emit("reflow");
|
||||
if (resource.targetFront === this.selection?.nodeFront?.targetFront) {
|
||||
// This event will be fired whenever a reflow is detected in the target front of the
|
||||
// selected node front (so when a reflow is detected inside any of the windows that
|
||||
// belong to the BrowsingContext where the currently selected node lives).
|
||||
this.emit("reflow-in-selected-target");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Promise.all(rootNodeAvailablePromises);
|
||||
|
@ -1588,7 +1598,6 @@ Inspector.prototype = {
|
|||
|
||||
this.updateAddElementButton();
|
||||
this.updateSelectionCssSelectors();
|
||||
this.trackReflowsInSelection();
|
||||
|
||||
const selfUpdate = this.updating("inspector-panel");
|
||||
executeSoon(() => {
|
||||
|
@ -1601,56 +1610,6 @@ Inspector.prototype = {
|
|||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Starts listening for reflows in the targetFront of the currently selected nodeFront.
|
||||
*/
|
||||
async trackReflowsInSelection() {
|
||||
this.untrackReflowsInSelection();
|
||||
if (!this.selection.nodeFront) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._destroyed) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await this.commands.resourceCommand.watchResources(
|
||||
[this.commands.resourceCommand.TYPES.REFLOW],
|
||||
{
|
||||
onAvailable: this.onReflowInSelection,
|
||||
}
|
||||
);
|
||||
} catch (e) {
|
||||
// it can happen that watchResources fails as the client closes while we're processing
|
||||
// some asynchronous call.
|
||||
// In order to still get valid exceptions, we re-throw the exception if the inspector
|
||||
// isn't destroyed.
|
||||
if (!this._destroyed) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Stops listening for reflows.
|
||||
*/
|
||||
untrackReflowsInSelection() {
|
||||
this.commands.resourceCommand.unwatchResources(
|
||||
[this.commands.resourceCommand.TYPES.REFLOW],
|
||||
{
|
||||
onAvailable: this.onReflowInSelection,
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
onReflowInSelection() {
|
||||
// This event will be fired whenever a reflow is detected in the target front of the
|
||||
// selected node front (so when a reflow is detected inside any of the windows that
|
||||
// belong to the BrowsingContext when the currently selected node lives).
|
||||
this.emit("reflow-in-selected-target");
|
||||
},
|
||||
|
||||
/**
|
||||
* Delay the "inspector-updated" notification while a tool
|
||||
* is updating itself. Returns a function that must be
|
||||
|
@ -1788,7 +1747,6 @@ Inspector.prototype = {
|
|||
resourceCommand.unwatchResources(this._watchedResources, {
|
||||
onAvailable: this.onResourceAvailable,
|
||||
});
|
||||
this.untrackReflowsInSelection();
|
||||
|
||||
this._InspectorTabPanel = null;
|
||||
this._TabBar = null;
|
||||
|
|
|
@ -87,9 +87,9 @@ const lazy = createLazyLoaders({
|
|||
});
|
||||
|
||||
/**
|
||||
* This function is called when the profile is captured with the shortcut
|
||||
* keys, with the profiler toolbarbutton, or with the button inside the
|
||||
* popup.
|
||||
* This function is called when the profile is captured with the shortcut keys,
|
||||
* with the profiler toolbarbutton, with the button inside the popup, or with
|
||||
* the about:logging page.
|
||||
* @param {PageContext} pageContext
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
|
|
|
@ -272,6 +272,14 @@
|
|||
);
|
||||
--theme-warning-color: light-dark(var(--yellow-80), hsl(43, 94%, 81%));
|
||||
|
||||
/* Error colors */
|
||||
--theme-error-background: light-dark(hsl(344, 73%, 97%), hsl(345, 23%, 24%));
|
||||
--theme-error-border: light-dark(
|
||||
rgb(from var(--red-60) r g b / 0.12),
|
||||
hsl(345, 30%, 35%)
|
||||
);
|
||||
--theme-error-color: light-dark(var(--red-70), var(--red-20));
|
||||
|
||||
/* Flashing colors used to highlight updates */
|
||||
--theme-contrast-background: light-dark(
|
||||
/* = Yellow 50-a40 on white */
|
||||
|
|
|
@ -29,12 +29,9 @@
|
|||
var(--theme-splitter-color)
|
||||
);
|
||||
--console-message-color: var(--theme-text-color-strong);
|
||||
--console-error-background: light-dark(hsl(344, 73%, 97%), hsl(345, 23%, 24%));
|
||||
--console-error-border: light-dark(
|
||||
rgb(from var(--red-60) r g b / 0.12),
|
||||
hsl(345, 30%, 35%)
|
||||
);
|
||||
--console-error-color: light-dark(var(--red-70), var(--red-20));
|
||||
--console-error-background: var(--theme-error-background);
|
||||
--console-error-border: var(--theme-error-border);
|
||||
--console-error-color: var(--theme-error-color);
|
||||
--console-navigation-color: var(--theme-highlight-blue);
|
||||
--console-navigation-border: light-dark(var(--blue-30), var(--blue-60));
|
||||
--console-indent-border-color: var(--theme-highlight-blue);
|
||||
|
|
|
@ -128,7 +128,7 @@ static const RedirEntry kRedirMap[] = {
|
|||
{"license", "chrome://global/content/license.html",
|
||||
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
|
||||
nsIAboutModule::IS_SECURE_CHROME_UI},
|
||||
{"logging", "chrome://global/content/aboutLogging.html",
|
||||
{"logging", "chrome://global/content/aboutLogging/aboutLogging.html",
|
||||
nsIAboutModule::ALLOW_SCRIPT},
|
||||
{"logo", "chrome://branding/content/about.png",
|
||||
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
|
||||
|
|
|
@ -17,8 +17,7 @@ extern LazyLogModule sPEMLog;
|
|||
("AndroidEncoderModule(%p)::%s: " arg, this, __func__, ##__VA_ARGS__))
|
||||
|
||||
bool AndroidEncoderModule::SupportsCodec(CodecType aCodec) const {
|
||||
return (aCodec == CodecType::H264 &&
|
||||
java::HardwareCodecCapabilityUtils::HasHWH264(true /* encoder */)) ||
|
||||
return aCodec == CodecType::H264 ||
|
||||
(aCodec == CodecType::VP8 &&
|
||||
java::HardwareCodecCapabilityUtils::HasHWVP8(true /* encoder */)) ||
|
||||
(aCodec == CodecType::VP9 &&
|
||||
|
|
|
@ -652,7 +652,15 @@ class ConfigureCodec {
|
|||
mUseTransportCC(false),
|
||||
mUseAudioFec(false),
|
||||
mRedUlpfecEnabled(false) {
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
// Although Play Store policy doesn't allow GMP plugin, Android has H.264 SW
|
||||
// codec.
|
||||
MOZ_ASSERT(!PeerConnectionCtx::GetInstance()->gmpHasH264(),
|
||||
"GMP plugin not allowed on Android");
|
||||
mSoftwareH264Enabled = true;
|
||||
#else
|
||||
mSoftwareH264Enabled = PeerConnectionCtx::GetInstance()->gmpHasH264();
|
||||
#endif
|
||||
|
||||
if (WebrtcVideoConduit::HasH264Hardware()) {
|
||||
glean::webrtc::has_h264_hardware
|
||||
|
@ -743,9 +751,9 @@ class ConfigureCodec {
|
|||
// Might disable it, but we set up other params anyway
|
||||
videoCodec.mEnabled = mH264Enabled;
|
||||
|
||||
if (videoCodec.mPacketizationMode == 0 && !mSoftwareH264Enabled) {
|
||||
// We're assuming packetization mode 0 is unsupported by
|
||||
// hardware.
|
||||
if (videoCodec.mPacketizationMode == 0 &&
|
||||
!PeerConnectionCtx::GetInstance()->gmpHasH264()) {
|
||||
// Packetization mode 0 is unsupported by MediaDataEncoder.
|
||||
videoCodec.mEnabled = false;
|
||||
}
|
||||
} else if (videoCodec.mName == "red") {
|
||||
|
|
|
@ -57,6 +57,16 @@
|
|||
}
|
||||
}
|
||||
|
||||
function getNumExpectedH264SendCodecs() {
|
||||
if (!navigator.userAgent.includes("Android")) {
|
||||
// Constrained Baseline and Baseline multiplied with packetization-mode 0 and 1.
|
||||
return 4;
|
||||
}
|
||||
// packetization-mode=0 is not supported with MediaDataEncoder, which is
|
||||
// the only encoder on Android.
|
||||
return 2;
|
||||
}
|
||||
|
||||
// SDP with unusual values in fmtp, but in the same formatting that Firefox
|
||||
// typically uses. This lets us check that we're putting the right param values
|
||||
// in sdpFmtpLine, if not what appears in the SDP verbatim.
|
||||
|
@ -85,17 +95,21 @@ a=setup:passive
|
|||
|
||||
let videoSdp;
|
||||
if (navigator.userAgent.includes("Android")) {
|
||||
// Alternate form with no h264
|
||||
// Alternate form with no packetization-mode=0 h264
|
||||
videoSdp = `v=0
|
||||
o=- 1878890426675213188 2 IN IP4 127.0.0.1
|
||||
s=-
|
||||
t=0 0
|
||||
a=fingerprint:sha-256 EB:74:E9:5F:EB:FB:79:D4:36:3A:06:89:DD:49:D0:C7:A5:EA:2A:B2:38:74:C8:AF:E4:A0:5A:EF:A9:58:B5:1A
|
||||
m=video 9 UDP/TLS/RTP/SAVPF 121 125 120 124 123 122 119
|
||||
m=video 9 UDP/TLS/RTP/SAVPF 121 125 120 124 126 127 105 106 123 122 119
|
||||
c=IN IP4 0.0.0.0
|
||||
a=sendonly
|
||||
a=fmtp:126 profile-level-id=42e00b;level-asymmetry-allowed=1;packetization-mode=1
|
||||
a=fmtp:105 profile-level-id=420015;level-asymmetry-allowed=1;packetization-mode=1
|
||||
a=fmtp:121 max-fs=12277;max-fr=50
|
||||
a=fmtp:125 apt=121
|
||||
a=fmtp:127 apt=126
|
||||
a=fmtp:106 apt=105
|
||||
a=fmtp:120 max-fs=12266;max-fr=40
|
||||
a=fmtp:124 apt=120
|
||||
a=fmtp:119 apt=122
|
||||
|
@ -109,6 +123,10 @@ a=rtpmap:121 VP9/90000
|
|||
a=rtpmap:125 rtx/90000
|
||||
a=rtpmap:120 VP8/90000
|
||||
a=rtpmap:124 rtx/90000
|
||||
a=rtpmap:126 H264/90000
|
||||
a=rtpmap:127 rtx/90000
|
||||
a=rtpmap:105 H264/90000
|
||||
a=rtpmap:106 rtx/90000
|
||||
a=rtpmap:123 ulpfec/90000
|
||||
a=rtpmap:122 red/90000
|
||||
a=rtpmap:119 rtx/90000
|
||||
|
@ -120,17 +138,21 @@ o=- 1878890426675213188 2 IN IP4 127.0.0.1
|
|||
s=-
|
||||
t=0 0
|
||||
a=fingerprint:sha-256 EB:74:E9:5F:EB:FB:79:D4:36:3A:06:89:DD:49:D0:C7:A5:EA:2A:B2:38:74:C8:AF:E4:A0:5A:EF:A9:58:B5:1A
|
||||
m=video 9 UDP/TLS/RTP/SAVPF 121 125 120 124 126 127 97 98 123 122 119
|
||||
m=video 9 UDP/TLS/RTP/SAVPF 121 125 120 124 126 127 97 98 105 106 103 104 123 122 119
|
||||
c=IN IP4 0.0.0.0
|
||||
a=sendonly
|
||||
a=fmtp:126 profile-level-id=42e00b;level-asymmetry-allowed=1;packetization-mode=1
|
||||
a=fmtp:97 profile-level-id=42e00b;level-asymmetry-allowed=1
|
||||
a=fmtp:105 profile-level-id=420015;level-asymmetry-allowed=1;packetization-mode=1
|
||||
a=fmtp:103 profile-level-id=420015;level-asymmetry-allowed=1
|
||||
a=fmtp:121 max-fs=12277;max-fr=50
|
||||
a=fmtp:125 apt=121
|
||||
a=fmtp:120 max-fs=12266;max-fr=40
|
||||
a=fmtp:124 apt=120
|
||||
a=fmtp:127 apt=126
|
||||
a=fmtp:98 apt=97
|
||||
a=fmtp:106 apt=105
|
||||
a=fmtp:104 apt=103
|
||||
a=fmtp:100 apt=99
|
||||
a=fmtp:119 apt=122
|
||||
a=ice-pwd:60840251a559417c253d68478b0020fb
|
||||
|
@ -147,6 +169,10 @@ a=rtpmap:126 H264/90000
|
|||
a=rtpmap:127 rtx/90000
|
||||
a=rtpmap:97 H264/90000
|
||||
a=rtpmap:98 rtx/90000
|
||||
a=rtpmap:105 H264/90000
|
||||
a=rtpmap:106 rtx/90000
|
||||
a=rtpmap:103 H264/90000
|
||||
a=rtpmap:104 rtx/90000
|
||||
a=rtpmap:123 ulpfec/90000
|
||||
a=rtpmap:122 red/90000
|
||||
a=rtpmap:119 rtx/90000
|
||||
|
@ -236,121 +262,120 @@ a=setup:passive
|
|||
const {codecs} = pc.getSenders()[0].getParameters();
|
||||
// Control
|
||||
is(codecs.some(c => c.mimeType.toLowerCase() == 'video/vp8'), true);
|
||||
// No rtx
|
||||
// No VP9
|
||||
is(codecs.some(c => c.mimeType.toLowerCase() == 'video/vp9'), false);
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
async function checkH264Sender() {
|
||||
const numExpectedH264Codecs = getNumExpectedH264SendCodecs();
|
||||
const pc1 = new RTCPeerConnection();
|
||||
const pc2 = new RTCPeerConnection();
|
||||
const {sender} = pc1.addTransceiver('video');
|
||||
await pc1.setLocalDescription();
|
||||
await pc2.setRemoteDescription(pc1.localDescription);
|
||||
await pc2.setLocalDescription();
|
||||
await pc1.setRemoteDescription(pc2.localDescription);
|
||||
{
|
||||
const {codecs} = pc1.getSenders()[0].getParameters();
|
||||
info("pc1 codecs: " + JSON.stringify(codecs, null, 2));
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, numExpectedH264Codecs);
|
||||
const sections = SDPUtils.splitSections(pc1.remoteDescription.sdp);
|
||||
info("pc1 msection: " + sections[1].replace(/\r\n/g, "\n"));
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
|
||||
{
|
||||
const {codecs} = pc2.getSenders()[0].getParameters();
|
||||
info("pc2 codecs: " + JSON.stringify(codecs, null, 2));
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, numExpectedH264Codecs);
|
||||
const sections = SDPUtils.splitSections(pc2.remoteDescription.sdp);
|
||||
info("pc2 msection: " + sections[1].replace(/\r\n/g, "\n"));
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
},
|
||||
|
||||
async function checkH264Receiver() {
|
||||
const numExpectedH264Codecs = getNumExpectedH264SendCodecs();
|
||||
const pc1 = new RTCPeerConnection();
|
||||
const pc2 = new RTCPeerConnection();
|
||||
pc1.addTransceiver('video');
|
||||
await pc1.setLocalDescription();
|
||||
await pc2.setRemoteDescription(pc1.localDescription);
|
||||
await pc2.setLocalDescription();
|
||||
await pc1.setRemoteDescription(pc2.localDescription);
|
||||
{
|
||||
const {codecs} = pc1.getReceivers()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, numExpectedH264Codecs);
|
||||
const sections = SDPUtils.splitSections(pc1.localDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
|
||||
{
|
||||
const {codecs} = pc2.getReceivers()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, numExpectedH264Codecs);
|
||||
const sections = SDPUtils.splitSections(pc2.localDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
},
|
||||
|
||||
async function checkH264NoLevelAsymmetryInOffer() {
|
||||
const numExpectedH264Codecs = getNumExpectedH264SendCodecs();
|
||||
const pc1 = new RTCPeerConnection();
|
||||
const pc2 = new RTCPeerConnection();
|
||||
pc1.addTransceiver('video');
|
||||
await pc1.setLocalDescription();
|
||||
const mungedOffer = {
|
||||
sdp: pc1.localDescription.sdp.replace(/level-asymmetry-allowed=1/g, 'level-asymmetry-allowed=0'),
|
||||
type: 'offer'
|
||||
};
|
||||
await pc2.setRemoteDescription(mungedOffer);
|
||||
await pc2.setLocalDescription();
|
||||
{
|
||||
const {codecs} = pc2.getSenders()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, numExpectedH264Codecs);
|
||||
const sections = SDPUtils.splitSections(pc2.remoteDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
|
||||
{
|
||||
const {codecs} = pc2.getReceivers()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, numExpectedH264Codecs);
|
||||
const sections = SDPUtils.splitSections(pc2.localDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
},
|
||||
|
||||
async function checkH264NoLevelAsymmetryInAnswer() {
|
||||
const numExpectedH264Codecs = getNumExpectedH264SendCodecs();
|
||||
const pc1 = new RTCPeerConnection();
|
||||
const pc2 = new RTCPeerConnection();
|
||||
pc1.addTransceiver('video');
|
||||
await pc1.setLocalDescription();
|
||||
await pc2.setRemoteDescription(pc1.localDescription);
|
||||
await pc2.setLocalDescription();
|
||||
const mungedAnswer = {
|
||||
sdp: pc2.localDescription.sdp.replace(/level-asymmetry-allowed=1/g, 'level-asymmetry-allowed=0'),
|
||||
type: 'answer'
|
||||
};
|
||||
await pc1.setRemoteDescription(mungedAnswer);
|
||||
{
|
||||
const {codecs} = pc1.getSenders()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, numExpectedH264Codecs);
|
||||
const sections = SDPUtils.splitSections(pc1.remoteDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
|
||||
{
|
||||
const {codecs} = pc1.getReceivers()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, numExpectedH264Codecs);
|
||||
const sections = SDPUtils.splitSections(pc1.localDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
},
|
||||
];
|
||||
|
||||
if (!navigator.userAgent.includes("Android")) {
|
||||
tests = tests.concat([
|
||||
// h264 is currently not supported in wpt because the plugin is never
|
||||
// installed, so we have some h264 tests here.
|
||||
// TODO(https://bugzilla.mozilla.org/show_bug.cgi?id=1534688)
|
||||
async function checkH264Sender() {
|
||||
const pc1 = new RTCPeerConnection();
|
||||
const pc2 = new RTCPeerConnection();
|
||||
const {sender} = pc1.addTransceiver('video');
|
||||
await pc1.setLocalDescription();
|
||||
await pc2.setRemoteDescription(pc1.localDescription);
|
||||
await pc2.setLocalDescription();
|
||||
await pc1.setRemoteDescription(pc2.localDescription);
|
||||
{
|
||||
const {codecs} = pc1.getSenders()[0].getParameters();
|
||||
info("pc1 codecs: " + JSON.stringify(codecs, null, 2));
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, 4);
|
||||
const sections = SDPUtils.splitSections(pc1.remoteDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
|
||||
{
|
||||
const {codecs} = pc2.getSenders()[0].getParameters();
|
||||
info("pc2 codecs: " + JSON.stringify(codecs, null, 2));
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, 4);
|
||||
const sections = SDPUtils.splitSections(pc2.remoteDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
},
|
||||
|
||||
async function checkH264Receiver() {
|
||||
const pc1 = new RTCPeerConnection();
|
||||
const pc2 = new RTCPeerConnection();
|
||||
pc1.addTransceiver('video');
|
||||
await pc1.setLocalDescription();
|
||||
await pc2.setRemoteDescription(pc1.localDescription);
|
||||
await pc2.setLocalDescription();
|
||||
await pc1.setRemoteDescription(pc2.localDescription);
|
||||
{
|
||||
const {codecs} = pc1.getReceivers()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, 4);
|
||||
const sections = SDPUtils.splitSections(pc1.localDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
|
||||
{
|
||||
const {codecs} = pc2.getReceivers()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, 4);
|
||||
const sections = SDPUtils.splitSections(pc2.localDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
},
|
||||
|
||||
async function checkH264NoLevelAsymmetryInOffer() {
|
||||
const pc1 = new RTCPeerConnection();
|
||||
const pc2 = new RTCPeerConnection();
|
||||
pc1.addTransceiver('video');
|
||||
await pc1.setLocalDescription();
|
||||
const mungedOffer = {
|
||||
sdp: pc1.localDescription.sdp.replace(/level-asymmetry-allowed=1/g, 'level-asymmetry-allowed=0'),
|
||||
type: 'offer'
|
||||
};
|
||||
await pc2.setRemoteDescription(mungedOffer);
|
||||
await pc2.setLocalDescription();
|
||||
{
|
||||
const {codecs} = pc2.getSenders()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, 4);
|
||||
const sections = SDPUtils.splitSections(pc2.remoteDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
|
||||
{
|
||||
const {codecs} = pc2.getReceivers()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, 4);
|
||||
const sections = SDPUtils.splitSections(pc2.localDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
},
|
||||
|
||||
async function checkH264NoLevelAsymmetryInAnswer() {
|
||||
const pc1 = new RTCPeerConnection();
|
||||
const pc2 = new RTCPeerConnection();
|
||||
pc1.addTransceiver('video');
|
||||
await pc1.setLocalDescription();
|
||||
await pc2.setRemoteDescription(pc1.localDescription);
|
||||
await pc2.setLocalDescription();
|
||||
const mungedAnswer = {
|
||||
sdp: pc2.localDescription.sdp.replace(/level-asymmetry-allowed=1/g, 'level-asymmetry-allowed=0'),
|
||||
type: 'answer'
|
||||
};
|
||||
await pc1.setRemoteDescription(mungedAnswer);
|
||||
{
|
||||
const {codecs} = pc1.getSenders()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, 4);
|
||||
const sections = SDPUtils.splitSections(pc1.remoteDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
|
||||
{
|
||||
const {codecs} = pc1.getReceivers()[0].getParameters();
|
||||
is(codecs.filter(c => c.mimeType.toLowerCase() == 'video/h264').length, 4);
|
||||
const sections = SDPUtils.splitSections(pc1.localDescription.sdp);
|
||||
checkCodecsAgainstSDP(codecs, sections[1]);
|
||||
}
|
||||
},
|
||||
]);
|
||||
}
|
||||
|
||||
runNetworkTest(async () => {
|
||||
await SpecialPowers.pushPrefEnv({ set: [["media.navigator.video.disable_h264_baseline", false]] });
|
||||
for (const test of tests) {
|
||||
|
|
|
@ -32,12 +32,6 @@
|
|||
return d;
|
||||
};
|
||||
|
||||
const checkForH264Support = async () => {
|
||||
const pc = new RTCPeerConnection();
|
||||
const offer = await pc.createOffer({offerToReceiveVideo: true});
|
||||
return offer.sdp.match(/a=rtpmap:[1-9][0-9]* H264/);
|
||||
};
|
||||
|
||||
let resolutionAlignment = 1;
|
||||
|
||||
function testScale(codec) {
|
||||
|
@ -51,7 +45,7 @@
|
|||
pc1.onicecandidate = e => add(pc2, e.candidate, generateErrorCallback());
|
||||
pc2.onicecandidate = e => add(pc1, e.candidate, generateErrorCallback());
|
||||
|
||||
info("testing max-fs with" + codec);
|
||||
info("testing max-fs with " + codec);
|
||||
|
||||
pc1.onnegotiationneeded = e =>
|
||||
pc1.createOffer()
|
||||
|
@ -94,19 +88,26 @@
|
|||
}
|
||||
|
||||
runNetworkTest(async () => {
|
||||
await pushPrefs(['media.peerconnection.video.lock_scaling', true]);
|
||||
if (await checkForH264Support()) {
|
||||
if (navigator.userAgent.includes("Android")) {
|
||||
// Android only has a hw encoder for h264
|
||||
resolutionAlignment = 16;
|
||||
}
|
||||
await matchPlatformH264CodecPrefs();
|
||||
await testScale("H264");
|
||||
}
|
||||
await pushPrefs(
|
||||
['media.peerconnection.video.lock_scaling', true],
|
||||
// Disable h264 hardware support, to ensure it is not prioritized over VP8
|
||||
["media.webrtc.hw.h264.enabled", false],
|
||||
);
|
||||
|
||||
// Disable h264 hardware support, to ensure it is not prioritized over VP8
|
||||
await pushPrefs(["media.webrtc.hw.h264.enabled", false]);
|
||||
await pushPrefs(
|
||||
// Use libwebrtc VP8 encoder to avoid unexpected resolution alignment on
|
||||
// some devices.
|
||||
["media.webrtc.encoder_creation_strategy", 0],
|
||||
);
|
||||
await testScale("VP8");
|
||||
await SpecialPowers.popPrefEnv();
|
||||
|
||||
await matchPlatformH264CodecPrefs();
|
||||
if (navigator.userAgent.includes("Android")) {
|
||||
// Android only has a hw encoder for h264
|
||||
resolutionAlignment = 16;
|
||||
}
|
||||
await testScale("H264");
|
||||
});
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -12,12 +12,6 @@
|
|||
visible: true
|
||||
});
|
||||
|
||||
async function checkForH264Support() {
|
||||
const pc = new RTCPeerConnection();
|
||||
const offer = await pc.createOffer({offerToReceiveVideo: true});
|
||||
return offer.sdp.match(/a=rtpmap:[1-9][0-9]* H264/);
|
||||
}
|
||||
|
||||
let resolutionAlignment = 1;
|
||||
|
||||
var mustRejectWith = (msg, reason, f) =>
|
||||
|
@ -66,7 +60,7 @@
|
|||
is(parameters.encodings[0].maxBitrate, 60000, "Should be able to set maxBitrate");
|
||||
|
||||
let offer = await pc1.createOffer();
|
||||
if (codec == "VP8") {
|
||||
if (codec == "H264") {
|
||||
offer.sdp = sdputils.removeAllButPayloadType(offer.sdp, 126);
|
||||
}
|
||||
await pc1.setLocalDescription(offer);
|
||||
|
@ -101,17 +95,26 @@
|
|||
}
|
||||
|
||||
runNetworkTest(async () => {
|
||||
await pushPrefs(
|
||||
['media.peerconnection.video.lock_scaling', true],
|
||||
// Disable h264 hardware support, to ensure it is not prioritized over VP8
|
||||
["media.webrtc.hw.h264.enabled", false],
|
||||
);
|
||||
|
||||
await pushPrefs(
|
||||
// Use libwebrtc VP8 encoder to avoid unexpected resolution alignment on
|
||||
// some devices.
|
||||
["media.webrtc.encoder_creation_strategy", 0],
|
||||
);
|
||||
await testScale("VP8");
|
||||
await SpecialPowers.popPrefEnv();
|
||||
|
||||
await matchPlatformH264CodecPrefs();
|
||||
const hasH264 = await checkForH264Support();
|
||||
if (hasH264 && navigator.userAgent.includes("Android")) {
|
||||
// Android only has a hw encoder for h264
|
||||
if (navigator.userAgent.includes("Android")) {
|
||||
// MediaDataEncoder always uses 16-alignment.
|
||||
resolutionAlignment = 16;
|
||||
}
|
||||
await pushPrefs(['media.peerconnection.video.lock_scaling', true]);
|
||||
await testScale("VP8");
|
||||
if (hasH264) {
|
||||
await testScale("H264");
|
||||
}
|
||||
await testScale("H264");
|
||||
});
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -12,12 +12,6 @@
|
|||
visible: true
|
||||
});
|
||||
|
||||
async function checkForH264Support() {
|
||||
const pc = new RTCPeerConnection();
|
||||
const offer = await pc.createOffer({offerToReceiveVideo: true});
|
||||
return offer.sdp.match(/a=rtpmap:[1-9][0-9]* H264/);
|
||||
}
|
||||
|
||||
let resolutionAlignment = 1;
|
||||
|
||||
var mustRejectWith = (msg, reason, f) =>
|
||||
|
@ -69,7 +63,7 @@
|
|||
scaleResolutionDownBy: 2 }] });
|
||||
|
||||
let offer = await pc1.createOffer();
|
||||
if (codec == "VP8") {
|
||||
if (codec == "H264") {
|
||||
offer.sdp = sdputils.removeAllButPayloadType(offer.sdp, 126);
|
||||
}
|
||||
await pc1.setLocalDescription(offer);
|
||||
|
@ -104,17 +98,26 @@
|
|||
}
|
||||
|
||||
runNetworkTest(async () => {
|
||||
await pushPrefs(
|
||||
['media.peerconnection.video.lock_scaling', true],
|
||||
// Disable h264 hardware support, to ensure it is not prioritized over VP8
|
||||
["media.webrtc.hw.h264.enabled", false],
|
||||
);
|
||||
|
||||
await pushPrefs(
|
||||
// Use libwebrtc VP8 encoder to avoid unexpected resolution alignment on
|
||||
// some devices.
|
||||
["media.webrtc.encoder_creation_strategy", 0],
|
||||
);
|
||||
await testScale("VP8");
|
||||
await SpecialPowers.popPrefEnv();
|
||||
|
||||
await matchPlatformH264CodecPrefs();
|
||||
const hasH264 = await checkForH264Support();
|
||||
if (hasH264 && navigator.userAgent.includes("Android")) {
|
||||
// Android only has a hw encoder for h264
|
||||
if (navigator.userAgent.includes("Android")) {
|
||||
// MediaDataEncoder always uses 16-alignment.
|
||||
resolutionAlignment = 16;
|
||||
}
|
||||
await pushPrefs(['media.peerconnection.video.lock_scaling', true]);
|
||||
await testScale("VP8");
|
||||
if (hasH264) {
|
||||
await testScale("H264");
|
||||
}
|
||||
await testScale("H264");
|
||||
});
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -11,12 +11,6 @@ createHTML({
|
|||
title: "Live-updating scaleResolutionDownBy"
|
||||
});
|
||||
|
||||
async function checkForH264Support() {
|
||||
const pc = new RTCPeerConnection();
|
||||
const offer = await pc.createOffer({offerToReceiveVideo: true});
|
||||
return offer.sdp.match(/a=rtpmap:[1-9][0-9]* H264/);
|
||||
}
|
||||
|
||||
let sender, localElem, remoteElem;
|
||||
let originalWidth, originalHeight;
|
||||
let resolutionAlignment = 1;
|
||||
|
@ -42,14 +36,15 @@ async function checkScaleDownBy(scale) {
|
|||
|
||||
runNetworkTest(async function (options) {
|
||||
await pushPrefs(['media.peerconnection.video.lock_scaling', true]);
|
||||
// [TODO] re-enable HW decoder after bug 1526207 is fixed.
|
||||
if (navigator.userAgent.includes("Android")) {
|
||||
if (await checkForH264Support()) {
|
||||
// Android only has h264 in hw, so now we know it will use vp8 in hw too.
|
||||
resolutionAlignment = 16;
|
||||
}
|
||||
await pushPrefs(["media.navigator.mediadatadecoder_vpx_enabled", false],
|
||||
["media.webrtc.hw.h264.enabled", false]);
|
||||
await pushPrefs(
|
||||
// [TODO] re-enable HW decoder after bug 1526207 is fixed.
|
||||
["media.navigator.mediadatadecoder_vpx_enabled", false],
|
||||
// Use libwebrtc VP8 encoder to avoid unexpected resolution alignment on
|
||||
// some devices.
|
||||
["media.webrtc.encoder_creation_strategy", 0],
|
||||
["media.webrtc.hw.h264.enabled", false],
|
||||
);
|
||||
}
|
||||
|
||||
let test = new PeerConnectionTest(options);
|
||||
|
|
|
@ -11,12 +11,6 @@ createHTML({
|
|||
title: "Live-updating scaleResolutionDownBy"
|
||||
});
|
||||
|
||||
async function checkForH264Support() {
|
||||
const pc = new RTCPeerConnection();
|
||||
const offer = await pc.createOffer({offerToReceiveVideo: true});
|
||||
return offer.sdp.match(/a=rtpmap:[1-9][0-9]* H264/);
|
||||
}
|
||||
|
||||
let sender, localElem, remoteElem;
|
||||
let originalWidth, originalHeight;
|
||||
let resolutionAlignment = 1;
|
||||
|
@ -40,14 +34,15 @@ async function checkScaleDownBy(scale) {
|
|||
|
||||
runNetworkTest(async function (options) {
|
||||
await pushPrefs(['media.peerconnection.video.lock_scaling', true]);
|
||||
// [TODO] re-enable HW decoder after bug 1526207 is fixed.
|
||||
if (navigator.userAgent.includes("Android")) {
|
||||
if (await checkForH264Support()) {
|
||||
// Android only has h264 in hw, so now we know it will use vp8 in hw too.
|
||||
resolutionAlignment = 16;
|
||||
}
|
||||
await pushPrefs(["media.navigator.mediadatadecoder_vpx_enabled", false],
|
||||
["media.webrtc.hw.h264.enabled", false]);
|
||||
await pushPrefs(
|
||||
// [TODO] re-enable HW decoder after bug 1526207 is fixed.
|
||||
["media.navigator.mediadatadecoder_vpx_enabled", false],
|
||||
// Use libwebrtc VP8 encoder to avoid unexpected resolution alignment on
|
||||
// some devices.
|
||||
["media.webrtc.encoder_creation_strategy", 0],
|
||||
["media.webrtc.hw.h264.enabled", false],
|
||||
);
|
||||
}
|
||||
|
||||
let test = new PeerConnectionTest(options);
|
||||
|
|
|
@ -17,12 +17,7 @@
|
|||
visible: true
|
||||
});
|
||||
|
||||
async function hasH264() {
|
||||
const pc = new RTCPeerConnection();
|
||||
const offer = await pc.createOffer({offerToReceiveVideo: true});
|
||||
return offer.sdp.match(/a=rtpmap:[1-9][0-9]* H264/);
|
||||
}
|
||||
|
||||
const isAndroid = navigator.userAgent.includes("Android");
|
||||
async function doTest(codec) {
|
||||
const recvCodecs = RTCRtpReceiver.getCapabilities("video")?.codecs;
|
||||
isnot(recvCodecs, null, "Expected recv capabilities");
|
||||
|
@ -81,7 +76,7 @@
|
|||
// average color of all pixels and decodes a frame at the correct
|
||||
// resolution filled with that color. Thus, for H264, fill the entire
|
||||
// frame with the given color.
|
||||
fillEntireFrame: codec.mimeType.match(/H264/i)
|
||||
fillEntireFrame: !isAndroid && codec.mimeType.match(/H264/i)
|
||||
}
|
||||
);
|
||||
const videoStream = emitter.stream();
|
||||
|
@ -127,11 +122,13 @@
|
|||
const statsReady =
|
||||
Promise.all([waitForSyncedRtcp(offerer), waitForSyncedRtcp(answerer)]);
|
||||
|
||||
const helper = new VideoStreamHelper();
|
||||
info('Waiting for first video element to start playing');
|
||||
await helper.checkVideoPlaying(videoElems[0]);
|
||||
info('Waiting for second video element to start playing');
|
||||
await helper.checkVideoPlaying(videoElems[1]);
|
||||
if (!codec.mimeType.includes("H264") || !isAndroid) {
|
||||
const helper = new VideoStreamHelper();
|
||||
info('Waiting for first video element to start playing');
|
||||
await helper.checkVideoPlaying(videoElems[0]);
|
||||
info('Waiting for second video element to start playing');
|
||||
await helper.checkVideoPlaying(videoElems[1]);
|
||||
}
|
||||
|
||||
is(videoElems[0].videoWidth, 64,
|
||||
"sink is same width as source, modulo our cropping algorithm");
|
||||
|
@ -166,26 +163,27 @@
|
|||
["media.navigator.video.disable_h264_baseline", false],
|
||||
);
|
||||
|
||||
// [TODO] re-enable HW decoder after bug 1526207 is fixed.
|
||||
const isAndroid = navigator.userAgent.includes("Android");
|
||||
if (isAndroid) {
|
||||
await pushPrefs(["media.navigator.mediadatadecoder_vpx_enabled", false],
|
||||
["media.webrtc.hw.h264.enabled", false]);
|
||||
await pushPrefs(
|
||||
// [TODO] re-enable HW decoder after bug 1526207 is fixed.
|
||||
["media.navigator.mediadatadecoder_vpx_enabled", false],
|
||||
["media.webrtc.hw.h264.enabled", false],
|
||||
);
|
||||
}
|
||||
|
||||
const codecs = [
|
||||
{mimeType: "video/VP8"},
|
||||
{mimeType: "video/VP9"},
|
||||
{mimeType: "video/AV1"},
|
||||
{mimeType: "video/H264", sdpFmtpLineRegex: /profile-level-id=42e01f.*packetization-mode=1/},
|
||||
{mimeType: "video/H264", sdpFmtpLineRegex: /profile-level-id=42001f.*packetization-mode=1/},
|
||||
];
|
||||
|
||||
if (!isAndroid || await hasH264()) {
|
||||
// Can't check for emulator explicitly, but that's where we expect no
|
||||
// h264 support currently.
|
||||
if (!isAndroid) {
|
||||
// Android uses only MediaDataEncoder for H264, and it does not support
|
||||
// packetization-mode=0.
|
||||
codecs.push(
|
||||
{mimeType: "video/H264", sdpFmtpLineRegex: /profile-level-id=42e01f.*packetization-mode=1/},
|
||||
{mimeType: "video/H264", sdpFmtpLineRegex: /profile-level-id=42e01f.*asymmetry-allowed=1$/},
|
||||
{mimeType: "video/H264", sdpFmtpLineRegex: /profile-level-id=42001f.*packetization-mode=1/},
|
||||
{mimeType: "video/H264", sdpFmtpLineRegex: /profile-level-id=42001f.*asymmetry-allowed=1$/},
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1420,6 +1420,9 @@ static nsLiteralCString sConnectSrcAddonsAllowList[] = {
|
|||
"about:addons"_ns,
|
||||
// STOP! Do not add anything to this list.
|
||||
};
|
||||
// connect-src https://example.org
|
||||
// Any https host source.
|
||||
static nsLiteralCString sConnectSrcHttpsHostAllowList[] = {"about:logging"_ns};
|
||||
|
||||
class DisallowingVisitor : public nsCSPSrcVisitor {
|
||||
public:
|
||||
|
@ -1663,6 +1666,11 @@ class ConnectSrcVisitor : public AllowBuiltinSrcVisitor {
|
|||
|
||||
return AllowBuiltinSrcVisitor::visitSchemeSrc(src);
|
||||
}
|
||||
|
||||
bool visitHostSrc(const nsCSPHostSrc& src) override {
|
||||
return VisitHostSrcWithWildcardAndHttpsHostAllowLists(
|
||||
src, nullptr, sConnectSrcHttpsHostAllowList);
|
||||
}
|
||||
};
|
||||
|
||||
class AddonSrcVisitor : public AllowBuiltinSrcVisitor {
|
||||
|
@ -1955,7 +1963,6 @@ void nsContentSecurityUtils::AssertChromePageHasCSP(Document* aDocument) {
|
|||
"chrome://geckoview/content/geckoview.xhtml"_ns,
|
||||
"chrome://global/content/alerts/alert.xhtml"_ns,
|
||||
"chrome://global/content/appPicker.xhtml"_ns,
|
||||
"chrome://global/content/backgroundPageThumbs.xhtml"_ns,
|
||||
"chrome://global/content/megalist/megalist.html"_ns,
|
||||
// Test files
|
||||
"chrome://mochikit/"_ns,
|
||||
|
|
|
@ -93,7 +93,7 @@ UniquePtr<ExternalTextureD3D11> ExternalTextureD3D11::Create(
|
|||
RefPtr<gfx::FileHandleWrapper> handle =
|
||||
new gfx::FileHandleWrapper(UniqueFileHandle(sharedHandle));
|
||||
|
||||
auto fencesHolderId = layers::GpuProcessFencesHolderId::GetNext();
|
||||
auto fencesHolderId = layers::CompositeProcessFencesHolderId::GetNext();
|
||||
fencesHolderMap->Register(fencesHolderId);
|
||||
|
||||
return MakeUnique<ExternalTextureD3D11>(aWidth, aHeight, aFormat, aUsage,
|
||||
|
@ -106,7 +106,7 @@ ExternalTextureD3D11::ExternalTextureD3D11(
|
|||
const struct ffi::WGPUTextureFormat aFormat,
|
||||
const ffi::WGPUTextureUsages aUsage, const RefPtr<ID3D11Texture2D> aTexture,
|
||||
RefPtr<gfx::FileHandleWrapper>&& aSharedHandle,
|
||||
const layers::GpuProcessFencesHolderId aFencesHolderId,
|
||||
const layers::CompositeProcessFencesHolderId aFencesHolderId,
|
||||
RefPtr<layers::FenceD3D11>&& aWriteFence)
|
||||
: ExternalTexture(aWidth, aHeight, aFormat, aUsage),
|
||||
mTexture(aTexture),
|
||||
|
|
|
@ -27,13 +27,14 @@ class ExternalTextureD3D11 final : public ExternalTexture {
|
|||
const struct ffi::WGPUTextureFormat aFormat,
|
||||
const ffi::WGPUTextureUsages aUsage);
|
||||
|
||||
ExternalTextureD3D11(const uint32_t aWidth, const uint32_t aHeight,
|
||||
const struct ffi::WGPUTextureFormat aFormat,
|
||||
const ffi::WGPUTextureUsages aUsage,
|
||||
const RefPtr<ID3D11Texture2D> aTexture,
|
||||
RefPtr<gfx::FileHandleWrapper>&& aSharedHandle,
|
||||
const layers::GpuProcessFencesHolderId aFencesHolderId,
|
||||
RefPtr<layers::FenceD3D11>&& aWriteFence);
|
||||
ExternalTextureD3D11(
|
||||
const uint32_t aWidth, const uint32_t aHeight,
|
||||
const struct ffi::WGPUTextureFormat aFormat,
|
||||
const ffi::WGPUTextureUsages aUsage,
|
||||
const RefPtr<ID3D11Texture2D> aTexture,
|
||||
RefPtr<gfx::FileHandleWrapper>&& aSharedHandle,
|
||||
const layers::CompositeProcessFencesHolderId aFencesHolderId,
|
||||
RefPtr<layers::FenceD3D11>&& aWriteFence);
|
||||
virtual ~ExternalTextureD3D11();
|
||||
|
||||
void* GetExternalTextureHandle();
|
||||
|
@ -48,7 +49,7 @@ class ExternalTextureD3D11 final : public ExternalTexture {
|
|||
protected:
|
||||
const RefPtr<ID3D11Texture2D> mTexture;
|
||||
const RefPtr<gfx::FileHandleWrapper> mSharedHandle;
|
||||
const layers::GpuProcessFencesHolderId mFencesHolderId;
|
||||
const layers::CompositeProcessFencesHolderId mFencesHolderId;
|
||||
const RefPtr<layers::FenceD3D11> mWriteFence;
|
||||
};
|
||||
|
||||
|
|
|
@ -87,14 +87,14 @@ GpuProcessTextureId GpuProcessTextureId::GetNext() {
|
|||
}
|
||||
|
||||
/* static */
|
||||
GpuProcessFencesHolderId GpuProcessFencesHolderId::GetNext() {
|
||||
CompositeProcessFencesHolderId CompositeProcessFencesHolderId::GetNext() {
|
||||
if (!XRE_IsGPUProcess()) {
|
||||
MOZ_ASSERT_UNREACHABLE("unexpected to be called");
|
||||
return GpuProcessFencesHolderId{};
|
||||
return CompositeProcessFencesHolderId{};
|
||||
}
|
||||
|
||||
static std::atomic<uint64_t> sCounter = 0;
|
||||
return GpuProcessFencesHolderId{++sCounter};
|
||||
return CompositeProcessFencesHolderId{++sCounter};
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& os, ScrollDirection aDirection) {
|
||||
|
|
|
@ -463,21 +463,21 @@ struct GpuProcessTextureId {
|
|||
};
|
||||
|
||||
// FencesHolderId allocated in GPU process
|
||||
struct GpuProcessFencesHolderId {
|
||||
struct CompositeProcessFencesHolderId {
|
||||
uint64_t mId = 0;
|
||||
|
||||
static GpuProcessFencesHolderId GetNext();
|
||||
static CompositeProcessFencesHolderId GetNext();
|
||||
|
||||
bool IsValid() const { return mId != 0; }
|
||||
|
||||
// Allow explicit cast to a uint64_t for now
|
||||
explicit operator uint64_t() const { return mId; }
|
||||
|
||||
bool operator==(const GpuProcessFencesHolderId& aOther) const {
|
||||
bool operator==(const CompositeProcessFencesHolderId& aOther) const {
|
||||
return mId == aOther.mId;
|
||||
}
|
||||
|
||||
bool operator!=(const GpuProcessFencesHolderId& aOther) const {
|
||||
bool operator!=(const CompositeProcessFencesHolderId& aOther) const {
|
||||
return !(*this == aOther);
|
||||
}
|
||||
|
||||
|
@ -486,7 +486,7 @@ struct GpuProcessFencesHolderId {
|
|||
// std::unordered_map<GpuProcessQueryId, ValueType,
|
||||
// GpuProcessQueryId::HashFn> myMap;
|
||||
struct HashFn {
|
||||
std::size_t operator()(const GpuProcessFencesHolderId aKey) const {
|
||||
std::size_t operator()(const CompositeProcessFencesHolderId aKey) const {
|
||||
return std::hash<uint64_t>{}(aKey.mId);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -33,13 +33,13 @@ CompositeProcessD3D11FencesHolderMap::CompositeProcessD3D11FencesHolderMap()
|
|||
CompositeProcessD3D11FencesHolderMap::~CompositeProcessD3D11FencesHolderMap() {}
|
||||
|
||||
void CompositeProcessD3D11FencesHolderMap::Register(
|
||||
GpuProcessFencesHolderId aHolderId) {
|
||||
CompositeProcessFencesHolderId aHolderId) {
|
||||
MonitorAutoLock lock(mMonitor);
|
||||
|
||||
mFencesHolderById[aHolderId] = MakeUnique<FencesHolder>();
|
||||
}
|
||||
void CompositeProcessD3D11FencesHolderMap::Unregister(
|
||||
GpuProcessFencesHolderId aHolderId) {
|
||||
CompositeProcessFencesHolderId aHolderId) {
|
||||
MonitorAutoLock lock(mMonitor);
|
||||
|
||||
auto it = mFencesHolderById.find(aHolderId);
|
||||
|
@ -50,7 +50,7 @@ void CompositeProcessD3D11FencesHolderMap::Unregister(
|
|||
}
|
||||
|
||||
void CompositeProcessD3D11FencesHolderMap::SetWriteFence(
|
||||
GpuProcessFencesHolderId aHolderId, RefPtr<FenceD3D11> aWriteFence) {
|
||||
CompositeProcessFencesHolderId aHolderId, RefPtr<FenceD3D11> aWriteFence) {
|
||||
MOZ_ASSERT(aWriteFence);
|
||||
|
||||
if (!aWriteFence) {
|
||||
|
@ -78,7 +78,7 @@ void CompositeProcessD3D11FencesHolderMap::SetWriteFence(
|
|||
}
|
||||
|
||||
void CompositeProcessD3D11FencesHolderMap::SetReadFence(
|
||||
GpuProcessFencesHolderId aHolderId, RefPtr<FenceD3D11> aReadFence) {
|
||||
CompositeProcessFencesHolderId aHolderId, RefPtr<FenceD3D11> aReadFence) {
|
||||
MOZ_ASSERT(aReadFence);
|
||||
|
||||
if (!aReadFence) {
|
||||
|
@ -103,7 +103,7 @@ void CompositeProcessD3D11FencesHolderMap::SetReadFence(
|
|||
}
|
||||
|
||||
bool CompositeProcessD3D11FencesHolderMap::WaitWriteFence(
|
||||
GpuProcessFencesHolderId aHolderId, ID3D11Device* aDevice) {
|
||||
CompositeProcessFencesHolderId aHolderId, ID3D11Device* aDevice) {
|
||||
MOZ_ASSERT(aDevice);
|
||||
|
||||
if (!aDevice) {
|
||||
|
@ -130,7 +130,7 @@ bool CompositeProcessD3D11FencesHolderMap::WaitWriteFence(
|
|||
}
|
||||
|
||||
bool CompositeProcessD3D11FencesHolderMap::WaitAllFencesAndForget(
|
||||
GpuProcessFencesHolderId aHolderId, ID3D11Device* aDevice) {
|
||||
CompositeProcessFencesHolderId aHolderId, ID3D11Device* aDevice) {
|
||||
MOZ_ASSERT(aDevice);
|
||||
|
||||
if (!aDevice) {
|
||||
|
|
|
@ -32,17 +32,17 @@ class CompositeProcessD3D11FencesHolderMap {
|
|||
CompositeProcessD3D11FencesHolderMap();
|
||||
~CompositeProcessD3D11FencesHolderMap();
|
||||
|
||||
void Register(GpuProcessFencesHolderId aHolderId);
|
||||
void Unregister(GpuProcessFencesHolderId aHolderId);
|
||||
void Register(CompositeProcessFencesHolderId aHolderId);
|
||||
void Unregister(CompositeProcessFencesHolderId aHolderId);
|
||||
|
||||
void SetWriteFence(GpuProcessFencesHolderId aHolderId,
|
||||
void SetWriteFence(CompositeProcessFencesHolderId aHolderId,
|
||||
RefPtr<FenceD3D11> aWriteFence);
|
||||
void SetReadFence(GpuProcessFencesHolderId aHolderId,
|
||||
void SetReadFence(CompositeProcessFencesHolderId aHolderId,
|
||||
RefPtr<FenceD3D11> aReadFence);
|
||||
|
||||
bool WaitWriteFence(GpuProcessFencesHolderId aHolderId,
|
||||
bool WaitWriteFence(CompositeProcessFencesHolderId aHolderId,
|
||||
ID3D11Device* aDevice);
|
||||
bool WaitAllFencesAndForget(GpuProcessFencesHolderId aHolderId,
|
||||
bool WaitAllFencesAndForget(CompositeProcessFencesHolderId aHolderId,
|
||||
ID3D11Device* aDevice);
|
||||
|
||||
private:
|
||||
|
@ -55,8 +55,8 @@ class CompositeProcessD3D11FencesHolderMap {
|
|||
|
||||
mutable Monitor mMonitor MOZ_UNANNOTATED;
|
||||
|
||||
std::unordered_map<GpuProcessFencesHolderId, UniquePtr<FencesHolder>,
|
||||
GpuProcessFencesHolderId::HashFn>
|
||||
std::unordered_map<CompositeProcessFencesHolderId, UniquePtr<FencesHolder>,
|
||||
CompositeProcessFencesHolderId::HashFn>
|
||||
mFencesHolderById;
|
||||
|
||||
static StaticAutoPtr<CompositeProcessD3D11FencesHolderMap> sInstance;
|
||||
|
|
|
@ -733,7 +733,7 @@ DXGIYCbCrTextureData* DXGIYCbCrTextureData::Create(
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
auto fencesHolderId = GpuProcessFencesHolderId::GetNext();
|
||||
auto fencesHolderId = CompositeProcessFencesHolderId::GetNext();
|
||||
fenceHolderMap->Register(fencesHolderId);
|
||||
|
||||
RefPtr<ID3D11Texture2D> textures[3] = {aTextureY, aTextureCb, aTextureCr};
|
||||
|
@ -752,7 +752,7 @@ DXGIYCbCrTextureData::DXGIYCbCrTextureData(
|
|||
const gfx::IntSize& aSizeY, const gfx::IntSize& aSizeCbCr,
|
||||
const gfx::ColorDepth aColorDepth, const gfx::YUVColorSpace aYUVColorSpace,
|
||||
const gfx::ColorRange aColorRange,
|
||||
const GpuProcessFencesHolderId aFencesHolderId,
|
||||
const CompositeProcessFencesHolderId aFencesHolderId,
|
||||
const RefPtr<FenceD3D11> aWriteFence)
|
||||
: mSize(aSize),
|
||||
mSizeY(aSizeY),
|
||||
|
|
|
@ -207,7 +207,7 @@ class DXGIYCbCrTextureData : public TextureData {
|
|||
const gfx::ColorDepth mColorDepth;
|
||||
const gfx::YUVColorSpace mYUVColorSpace;
|
||||
const gfx::ColorRange mColorRange;
|
||||
const GpuProcessFencesHolderId mFencesHolderId;
|
||||
const CompositeProcessFencesHolderId mFencesHolderId;
|
||||
const RefPtr<FenceD3D11> mWriteFence;
|
||||
|
||||
protected:
|
||||
|
@ -218,7 +218,7 @@ class DXGIYCbCrTextureData : public TextureData {
|
|||
const gfx::ColorDepth aColorDepth,
|
||||
const gfx::YUVColorSpace aYUVColorSpace,
|
||||
const gfx::ColorRange aColorRange,
|
||||
const GpuProcessFencesHolderId aFencesHolderId,
|
||||
const CompositeProcessFencesHolderId aFencesHolderId,
|
||||
const RefPtr<FenceD3D11> aWriteFence);
|
||||
virtual ~DXGIYCbCrTextureData();
|
||||
|
||||
|
@ -397,7 +397,7 @@ class DXGITextureHostD3D11 : public TextureHost {
|
|||
const gfx::IntSize mSize;
|
||||
const gfx::SurfaceFormat mFormat;
|
||||
const bool mHasKeyedMutex;
|
||||
const Maybe<layers::GpuProcessFencesHolderId> mFencesHolderId;
|
||||
const Maybe<layers::CompositeProcessFencesHolderId> mFencesHolderId;
|
||||
const gfx::ColorSpace2 mColorSpace;
|
||||
const gfx::ColorRange mColorRange;
|
||||
};
|
||||
|
@ -458,7 +458,7 @@ class DXGIYCbCrTextureHostD3D11 : public TextureHost {
|
|||
const gfx::ColorDepth mColorDepth;
|
||||
const gfx::YUVColorSpace mYUVColorSpace;
|
||||
const gfx::ColorRange mColorRange;
|
||||
const GpuProcessFencesHolderId mFencesHolderId;
|
||||
const CompositeProcessFencesHolderId mFencesHolderId;
|
||||
|
||||
protected:
|
||||
// Handles will be closed automatically when `UniqueFileHandle` gets
|
||||
|
|
|
@ -264,8 +264,8 @@ struct ParamTraits<mozilla::layers::GpuProcessTextureId> {
|
|||
};
|
||||
|
||||
template <>
|
||||
struct ParamTraits<mozilla::layers::GpuProcessFencesHolderId> {
|
||||
typedef mozilla::layers::GpuProcessFencesHolderId paramType;
|
||||
struct ParamTraits<mozilla::layers::CompositeProcessFencesHolderId> {
|
||||
typedef mozilla::layers::CompositeProcessFencesHolderId paramType;
|
||||
|
||||
static void Write(MessageWriter* writer, const paramType& param) {
|
||||
WriteParam(writer, param.mId);
|
||||
|
|
|
@ -29,7 +29,7 @@ using mozilla::layers::RemoteTextureId from "mozilla/layers/LayersTypes.h";
|
|||
using mozilla::layers::RemoteTextureOwnerId from "mozilla/layers/LayersTypes.h";
|
||||
[RefCounted] using mozilla::layers::GpuFence from "mozilla/layers/GpuFence.h";
|
||||
using mozilla::layers::GpuProcessTextureId from "mozilla/layers/LayersTypes.h";
|
||||
using mozilla::layers::GpuProcessFencesHolderId from "mozilla/layers/LayersTypes.h";
|
||||
using mozilla::layers::CompositeProcessFencesHolderId from "mozilla/layers/LayersTypes.h";
|
||||
using mozilla::wr::ExternalImageSource from "mozilla/webrender/WebRenderTypes.h";
|
||||
using mozilla::wr::ExternalImageId from "mozilla/webrender/WebRenderTypes.h";
|
||||
using mozilla::layers::SurfaceDescriptorRemoteDecoderId from "mozilla/layers/LayersTypes.h";
|
||||
|
@ -47,7 +47,7 @@ namespace layers {
|
|||
ColorSpace2 colorSpace;
|
||||
ColorRange colorRange;
|
||||
bool hasKeyedMutex;
|
||||
GpuProcessFencesHolderId? fencesHolderId;
|
||||
CompositeProcessFencesHolderId? fencesHolderId;
|
||||
};
|
||||
|
||||
[Comparable] struct SurfaceDescriptorDXGIYCbCr {
|
||||
|
@ -60,7 +60,7 @@ namespace layers {
|
|||
ColorDepth colorDepth;
|
||||
YUVColorSpace yUVColorSpace;
|
||||
ColorRange colorRange;
|
||||
GpuProcessFencesHolderId fencesHolderId;
|
||||
CompositeProcessFencesHolderId fencesHolderId;
|
||||
};
|
||||
|
||||
[Comparable] struct SurfaceDescriptorMacIOSurface {
|
||||
|
|
|
@ -323,7 +323,7 @@ void gfxPlatformGtk::InitWebRenderConfig() {
|
|||
// HDR requires compositor to work
|
||||
#if defined(MOZ_WAYLAND)
|
||||
if (StaticPrefs::gfx_wayland_hdr_AtStartup()) {
|
||||
feature.EnableByDefault();
|
||||
feature.UserForceEnable("Requested for HDR");
|
||||
}
|
||||
if (feature.IsEnabled()) {
|
||||
if (!StaticPrefs::gfx_wayland_hdr_AtStartup()) {
|
||||
|
|
|
@ -30,7 +30,7 @@ RenderDXGITextureHost::RenderDXGITextureHost(
|
|||
const uint32_t aArrayIndex, const gfx::SurfaceFormat aFormat,
|
||||
const gfx::ColorSpace2 aColorSpace, const gfx::ColorRange aColorRange,
|
||||
const gfx::IntSize aSize, bool aHasKeyedMutex,
|
||||
const Maybe<layers::GpuProcessFencesHolderId>& aFencesHolderId)
|
||||
const Maybe<layers::CompositeProcessFencesHolderId>& aFencesHolderId)
|
||||
: mHandle(aHandle),
|
||||
mGpuProcessTextureId(aGpuProcessTextureId),
|
||||
mArrayIndex(aArrayIndex),
|
||||
|
@ -477,7 +477,7 @@ RenderDXGIYCbCrTextureHost::RenderDXGIYCbCrTextureHost(
|
|||
const gfx::YUVColorSpace aYUVColorSpace, const gfx::ColorDepth aColorDepth,
|
||||
const gfx::ColorRange aColorRange, const gfx::IntSize aSizeY,
|
||||
const gfx::IntSize aSizeCbCr,
|
||||
const layers::GpuProcessFencesHolderId aFencesHolderId)
|
||||
const layers::CompositeProcessFencesHolderId aFencesHolderId)
|
||||
: mHandles{aHandles[0], aHandles[1], aHandles[2]},
|
||||
mSurfaces{0},
|
||||
mStreams{0},
|
||||
|
|
|
@ -32,7 +32,7 @@ class RenderDXGITextureHost final : public RenderTextureHostSWGL {
|
|||
const uint32_t aArrayIndex, const gfx::SurfaceFormat aFormat,
|
||||
const gfx::ColorSpace2 aColorSpace, const gfx::ColorRange aColorRange,
|
||||
const gfx::IntSize aSize, const bool aHasKeyedMutex,
|
||||
const Maybe<layers::GpuProcessFencesHolderId>& aFencesHolderId);
|
||||
const Maybe<layers::CompositeProcessFencesHolderId>& aFencesHolderId);
|
||||
|
||||
wr::WrExternalImage Lock(uint8_t aChannelIndex, gl::GLContext* aGL) override;
|
||||
void Unlock() override;
|
||||
|
@ -127,7 +127,7 @@ class RenderDXGITextureHost final : public RenderTextureHostSWGL {
|
|||
const gfx::ColorRange mColorRange;
|
||||
const gfx::IntSize mSize;
|
||||
const bool mHasKeyedMutex;
|
||||
const Maybe<layers::GpuProcessFencesHolderId> mFencesHolderId;
|
||||
const Maybe<layers::CompositeProcessFencesHolderId> mFencesHolderId;
|
||||
|
||||
private:
|
||||
bool mLocked;
|
||||
|
@ -140,7 +140,7 @@ class RenderDXGIYCbCrTextureHost final : public RenderTextureHostSWGL {
|
|||
const gfx::YUVColorSpace aYUVColorSpace,
|
||||
const gfx::ColorDepth aColorDepth, const gfx::ColorRange aColorRange,
|
||||
const gfx::IntSize aSizeY, const gfx::IntSize aSizeCbCr,
|
||||
const layers::GpuProcessFencesHolderId aFencesHolderId);
|
||||
const layers::CompositeProcessFencesHolderId aFencesHolderId);
|
||||
|
||||
RenderDXGIYCbCrTextureHost* AsRenderDXGIYCbCrTextureHost() override {
|
||||
return this;
|
||||
|
@ -217,7 +217,7 @@ class RenderDXGIYCbCrTextureHost final : public RenderTextureHostSWGL {
|
|||
const gfx::ColorRange mColorRange;
|
||||
const gfx::IntSize mSizeY;
|
||||
const gfx::IntSize mSizeCbCr;
|
||||
const layers::GpuProcessFencesHolderId mFencesHolderId;
|
||||
const layers::CompositeProcessFencesHolderId mFencesHolderId;
|
||||
|
||||
bool mLocked = false;
|
||||
};
|
||||
|
|
|
@ -4,7 +4,6 @@ android-gradle-plugin = "8.9.1" # Keep lint version in sync
|
|||
lint = "31.9.1"
|
||||
|
||||
python-envs-plugin = "0.0.31"
|
||||
mozilla-glean = "64.0.1"
|
||||
maven-ant-tasks = "2.1.3"
|
||||
jacoco = "0.8.12"
|
||||
okhttp = "4.12.0"
|
||||
|
@ -63,7 +62,7 @@ osslicenses-plugin = "0.10.6"
|
|||
play-review = "2.0.2"
|
||||
play-services-ads-id = "18.1.0"
|
||||
play-services-base = "18.6.0"
|
||||
play-services-fido = "21.1.0"
|
||||
play-services-fido = "21.2.0"
|
||||
protobuf = "4.30.2" # Keep Protobuf in sync with the version used by AppServices.
|
||||
|
||||
# Gradle plugins
|
||||
|
@ -77,6 +76,10 @@ kotlin = "2.1.20" # remember to change ksp-plugin
|
|||
ksp-plugin = "2.1.20-1.0.32"
|
||||
serialization = "1.8.1"
|
||||
|
||||
# Mozilla versions
|
||||
apilint = "0.5.4"
|
||||
mozilla-glean = "64.0.1"
|
||||
|
||||
# Testing versions
|
||||
androidx-test = "1.6.1"
|
||||
androidx-test-espresso = "3.6.1"
|
||||
|
@ -94,7 +97,6 @@ robolectric = "4.14.1"
|
|||
adjust = "5.1.0"
|
||||
sentry = "8.6.0"
|
||||
|
||||
apilint = "0.5.3"
|
||||
commons-exec = "1.3"
|
||||
spotless = "6.25.0"
|
||||
tomlj = "1.1.0"
|
||||
|
|
|
@ -750,10 +750,11 @@ audio[controls] {
|
|||
transform: translate(0) !important;
|
||||
}
|
||||
|
||||
video > .caption-box {
|
||||
video > .caption-box:-moz-native-anonymous {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1851,28 +1851,6 @@
|
|||
file="src/main/res/drawable-xxhdpi"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="SmallSp"
|
||||
message="Avoid using sizes smaller than `11sp`: `10sp`"
|
||||
errorLine1=" android:textSize="10sp""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/layout/account_share_list_item.xml"
|
||||
line="39"
|
||||
column="9"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="SmallSp"
|
||||
message="Avoid using sizes smaller than `11sp`: `10sp`"
|
||||
errorLine1=" android:textSize="10sp""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/res/layout/app_share_list_item.xml"
|
||||
line="37"
|
||||
column="9"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="ClickableViewAccessibility"
|
||||
message="Custom view ``SearchDialogFragmentConstraintLayout`` has `setOnTouchListener` called on it but does not override `performClick`"
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:ignore="SmallSp"
|
||||
android:layout_width="76dp"
|
||||
android:layout_height="80dp"
|
||||
android:background="?selectableItemBackgroundBorderless">
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:ignore="SmallSp"
|
||||
android:layout_width="76dp"
|
||||
android:layout_height="80dp"
|
||||
android:background="?selectableItemBackgroundBorderless">
|
||||
|
|
|
@ -41,6 +41,9 @@ def test(mod, path, entity=None):
|
|||
if re.match(r"toolkit/about/[^/]*Webrtc.ftl", path):
|
||||
# error on toolkit/about/*Webrtc.ftl
|
||||
return "error"
|
||||
if re.match(r"toolkit/about/[^/]*Logging.ftl", path):
|
||||
# error on toolkit/about/*Logging.ftl
|
||||
return "error"
|
||||
return "ignore"
|
||||
|
||||
if mod == "dom":
|
||||
|
|
|
@ -48,6 +48,8 @@ relativesrcdir toolkit/locales:
|
|||
toolkit/about (%toolkit/about/*Compat.ftl)
|
||||
#about:webrtc
|
||||
toolkit/about (%toolkit/about/*Webrtc.ftl)
|
||||
#about:logging
|
||||
toolkit/about (%toolkit/about/*Logging.ftl)
|
||||
#endif
|
||||
# Do not add files below the endif. Reviewers, expand more context above
|
||||
# for comments.
|
||||
|
|
|
@ -173,6 +173,10 @@ exclude-multi-locale = [
|
|||
reference = "toolkit/locales/en-US/toolkit/about/*Webrtc.ftl"
|
||||
l10n = "{l}toolkit/toolkit/about/*Webrtc.ftl"
|
||||
|
||||
[[paths]]
|
||||
reference = "toolkit/locales/en-US/toolkit/about/*Logging.ftl"
|
||||
l10n = "{l}toolkit/toolkit/about/*Logging.ftl"
|
||||
|
||||
[[filters]]
|
||||
path = [
|
||||
"{l}mobile/android/mobile-l10n.js",
|
||||
|
|
|
@ -41,6 +41,9 @@ def test(mod, path, entity=None):
|
|||
if re.match(r"toolkit/about/[^/]*Webrtc.ftl", path):
|
||||
# error on toolkit/about/*Webrtc.ftl
|
||||
return "error"
|
||||
if re.match(r"toolkit/about/[^/]*Logging.ftl", path):
|
||||
# error on toolkit/about/*Logging.ftl
|
||||
return "error"
|
||||
return "ignore"
|
||||
|
||||
if mod == "dom":
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"an": {
|
||||
"pin": false,
|
||||
|
@ -15,7 +15,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ar": {
|
||||
"pin": false,
|
||||
|
@ -24,7 +24,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ast": {
|
||||
"pin": false,
|
||||
|
@ -33,7 +33,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"az": {
|
||||
"pin": false,
|
||||
|
@ -42,7 +42,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"be": {
|
||||
"pin": false,
|
||||
|
@ -51,7 +51,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"bg": {
|
||||
"pin": false,
|
||||
|
@ -60,7 +60,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"bn": {
|
||||
"pin": false,
|
||||
|
@ -69,7 +69,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"br": {
|
||||
"pin": false,
|
||||
|
@ -78,7 +78,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"bs": {
|
||||
"pin": false,
|
||||
|
@ -87,7 +87,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ca": {
|
||||
"pin": false,
|
||||
|
@ -96,7 +96,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"cak": {
|
||||
"pin": false,
|
||||
|
@ -105,7 +105,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"cs": {
|
||||
"pin": false,
|
||||
|
@ -114,7 +114,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"cy": {
|
||||
"pin": false,
|
||||
|
@ -123,7 +123,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"da": {
|
||||
"pin": false,
|
||||
|
@ -132,7 +132,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"de": {
|
||||
"pin": false,
|
||||
|
@ -141,7 +141,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"dsb": {
|
||||
"pin": false,
|
||||
|
@ -150,7 +150,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"el": {
|
||||
"pin": false,
|
||||
|
@ -159,7 +159,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"en-CA": {
|
||||
"pin": false,
|
||||
|
@ -168,7 +168,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"en-GB": {
|
||||
"pin": false,
|
||||
|
@ -177,7 +177,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"eo": {
|
||||
"pin": false,
|
||||
|
@ -186,7 +186,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"es-AR": {
|
||||
"pin": false,
|
||||
|
@ -195,7 +195,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"es-CL": {
|
||||
"pin": false,
|
||||
|
@ -204,7 +204,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"es-ES": {
|
||||
"pin": false,
|
||||
|
@ -213,7 +213,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"es-MX": {
|
||||
"pin": false,
|
||||
|
@ -222,7 +222,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"et": {
|
||||
"pin": false,
|
||||
|
@ -231,7 +231,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"eu": {
|
||||
"pin": false,
|
||||
|
@ -240,7 +240,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"fa": {
|
||||
"pin": false,
|
||||
|
@ -249,7 +249,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ff": {
|
||||
"pin": false,
|
||||
|
@ -258,7 +258,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"fi": {
|
||||
"pin": false,
|
||||
|
@ -267,7 +267,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"fr": {
|
||||
"pin": false,
|
||||
|
@ -276,7 +276,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"fy-NL": {
|
||||
"pin": false,
|
||||
|
@ -285,7 +285,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ga-IE": {
|
||||
"pin": false,
|
||||
|
@ -294,7 +294,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"gd": {
|
||||
"pin": false,
|
||||
|
@ -303,7 +303,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"gl": {
|
||||
"pin": false,
|
||||
|
@ -312,7 +312,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"gn": {
|
||||
"pin": false,
|
||||
|
@ -321,7 +321,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"gu-IN": {
|
||||
"pin": false,
|
||||
|
@ -330,7 +330,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"he": {
|
||||
"pin": false,
|
||||
|
@ -339,7 +339,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hi-IN": {
|
||||
"pin": false,
|
||||
|
@ -348,7 +348,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hr": {
|
||||
"pin": false,
|
||||
|
@ -357,7 +357,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hsb": {
|
||||
"pin": false,
|
||||
|
@ -366,7 +366,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hu": {
|
||||
"pin": false,
|
||||
|
@ -375,7 +375,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"hy-AM": {
|
||||
"pin": false,
|
||||
|
@ -384,7 +384,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ia": {
|
||||
"pin": false,
|
||||
|
@ -393,7 +393,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"id": {
|
||||
"pin": false,
|
||||
|
@ -402,7 +402,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"is": {
|
||||
"pin": false,
|
||||
|
@ -411,7 +411,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"it": {
|
||||
"pin": false,
|
||||
|
@ -420,7 +420,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ja": {
|
||||
"pin": false,
|
||||
|
@ -429,7 +429,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ka": {
|
||||
"pin": false,
|
||||
|
@ -438,7 +438,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"kab": {
|
||||
"pin": false,
|
||||
|
@ -447,7 +447,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"kk": {
|
||||
"pin": false,
|
||||
|
@ -456,7 +456,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"km": {
|
||||
"pin": false,
|
||||
|
@ -465,7 +465,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"kn": {
|
||||
"pin": false,
|
||||
|
@ -474,7 +474,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ko": {
|
||||
"pin": false,
|
||||
|
@ -483,7 +483,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"lij": {
|
||||
"pin": false,
|
||||
|
@ -492,7 +492,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"lo": {
|
||||
"pin": false,
|
||||
|
@ -501,7 +501,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"lt": {
|
||||
"pin": false,
|
||||
|
@ -510,7 +510,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ltg": {
|
||||
"pin": false,
|
||||
|
@ -519,7 +519,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"lv": {
|
||||
"pin": false,
|
||||
|
@ -528,7 +528,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"meh": {
|
||||
"pin": false,
|
||||
|
@ -537,7 +537,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"mix": {
|
||||
"pin": false,
|
||||
|
@ -546,7 +546,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ml": {
|
||||
"pin": false,
|
||||
|
@ -555,7 +555,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"mr": {
|
||||
"pin": false,
|
||||
|
@ -564,7 +564,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ms": {
|
||||
"pin": false,
|
||||
|
@ -573,7 +573,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"my": {
|
||||
"pin": false,
|
||||
|
@ -582,7 +582,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"nb-NO": {
|
||||
"pin": false,
|
||||
|
@ -591,7 +591,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ne-NP": {
|
||||
"pin": false,
|
||||
|
@ -600,7 +600,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"nl": {
|
||||
"pin": false,
|
||||
|
@ -609,7 +609,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"nn-NO": {
|
||||
"pin": false,
|
||||
|
@ -618,7 +618,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"oc": {
|
||||
"pin": false,
|
||||
|
@ -627,7 +627,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"pa-IN": {
|
||||
"pin": false,
|
||||
|
@ -636,7 +636,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"pl": {
|
||||
"pin": false,
|
||||
|
@ -645,7 +645,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"pt-BR": {
|
||||
"pin": false,
|
||||
|
@ -654,7 +654,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"pt-PT": {
|
||||
"pin": false,
|
||||
|
@ -663,7 +663,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"rm": {
|
||||
"pin": false,
|
||||
|
@ -672,7 +672,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ro": {
|
||||
"pin": false,
|
||||
|
@ -681,7 +681,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ru": {
|
||||
"pin": false,
|
||||
|
@ -690,7 +690,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sk": {
|
||||
"pin": false,
|
||||
|
@ -699,7 +699,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sl": {
|
||||
"pin": false,
|
||||
|
@ -708,7 +708,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"son": {
|
||||
"pin": false,
|
||||
|
@ -717,7 +717,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sq": {
|
||||
"pin": false,
|
||||
|
@ -726,7 +726,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sr": {
|
||||
"pin": false,
|
||||
|
@ -735,7 +735,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"sv-SE": {
|
||||
"pin": false,
|
||||
|
@ -744,7 +744,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ta": {
|
||||
"pin": false,
|
||||
|
@ -753,7 +753,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"te": {
|
||||
"pin": false,
|
||||
|
@ -762,7 +762,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"th": {
|
||||
"pin": false,
|
||||
|
@ -771,7 +771,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"tl": {
|
||||
"pin": false,
|
||||
|
@ -780,7 +780,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"tr": {
|
||||
"pin": false,
|
||||
|
@ -789,7 +789,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"trs": {
|
||||
"pin": false,
|
||||
|
@ -798,7 +798,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"uk": {
|
||||
"pin": false,
|
||||
|
@ -807,7 +807,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"ur": {
|
||||
"pin": false,
|
||||
|
@ -816,7 +816,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"uz": {
|
||||
"pin": false,
|
||||
|
@ -825,7 +825,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"vi": {
|
||||
"pin": false,
|
||||
|
@ -834,7 +834,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"wo": {
|
||||
"pin": false,
|
||||
|
@ -843,7 +843,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"xh": {
|
||||
"pin": false,
|
||||
|
@ -852,7 +852,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"zam": {
|
||||
"pin": false,
|
||||
|
@ -861,7 +861,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"zh-CN": {
|
||||
"pin": false,
|
||||
|
@ -870,7 +870,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
},
|
||||
"zh-TW": {
|
||||
"pin": false,
|
||||
|
@ -879,6 +879,6 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "0172b7fc7afb60368e3c46e08bedcd07d04e84df"
|
||||
"revision": "ba37989b472ed930cfdfa87d4b7c00cc89bd4933"
|
||||
}
|
||||
}
|
|
@ -3718,6 +3718,23 @@ pref("toolkit.aboutProcesses.showProfilerIcons", true);
|
|||
// profile is captured.
|
||||
pref("toolkit.aboutProcesses.profileDuration", 5);
|
||||
|
||||
// This preference controls how about:logging handles profiles when stopping:
|
||||
// either it opens the profile in a new tab on profiler.firefox.com, or it
|
||||
// uploads it directly to the cloud storage, providing the URL.
|
||||
// On Android, it's not currently possible to capture a profile this way,
|
||||
// therefore the profile is uploaded by default.
|
||||
#if !defined(MOZ_WIDGET_ANDROID)
|
||||
pref("toolkit.aboutLogging.uploadProfileToCloud", false);
|
||||
#else
|
||||
pref("toolkit.aboutLogging.uploadProfileToCloud", true);
|
||||
#endif
|
||||
// The pref "toolkit.aboutlogging.uploadProfileUrl" can also be set to change
|
||||
// the upload endpoint. The comment below shows the default value. It's not
|
||||
// defined usually because we don't expect our users, even advanced, to change
|
||||
// it, and therefore this will likely only be used in our tests.
|
||||
// pref("toolkit.aboutlogging.uploadProfileUrl", "https://api.profiler.firefox.com/compressed-store");
|
||||
|
||||
|
||||
// When a crash happens, whether to include heap regions of the crash context
|
||||
// in the minidump. Enabled by default on nightly and aurora.
|
||||
#ifdef RELEASE_OR_BETA
|
||||
|
|
|
@ -534,6 +534,45 @@ networking:
|
|||
In TRR channel, overall load time.
|
||||
expires: never
|
||||
|
||||
trr_response_size: &trr_response_size
|
||||
type: labeled_memory_distribution
|
||||
memory_unit: byte
|
||||
description: >
|
||||
In TRR channel, the size of the HTTP response.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1957859
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1957859
|
||||
notification_emails:
|
||||
- necko@mozilla.com
|
||||
- kershaw@mozilla.com
|
||||
labels:
|
||||
- mozilla.cloudflare-dns.com
|
||||
- firefox.dns.nextdns.io
|
||||
- private.canadianshield.cira.ca
|
||||
- doh.xfinity.com
|
||||
- dns.shaw.ca
|
||||
- dooh.cloudflare-dns.com
|
||||
- mozilla.cloudflare-dns.com_2
|
||||
- firefox.dns.nextdns.io_2
|
||||
- private.canadianshield.cira.ca_2
|
||||
- doh.xfinity.com_2
|
||||
- dns.shaw.ca_2
|
||||
- dooh.cloudflare-dns.com_2
|
||||
- mozilla.cloudflare-dns.com_3
|
||||
- firefox.dns.nextdns.io_3
|
||||
- private.canadianshield.cira.ca_3
|
||||
- doh.xfinity.com_3
|
||||
- dns.shaw.ca_3
|
||||
- dooh.cloudflare-dns.com_3
|
||||
expires: never
|
||||
|
||||
trr_request_size:
|
||||
<<: *trr_response_size
|
||||
description: >
|
||||
In TRR channel, the size of the HTTP request.
|
||||
expires: never
|
||||
|
||||
dns_renewal_time:
|
||||
type: timing_distribution
|
||||
time_unit: millisecond
|
||||
|
|
|
@ -1125,7 +1125,8 @@ TRRServiceChannel::OnDataAvailable(nsIRequest* request, nsIInputStream* input,
|
|||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
static void TelemetryReport(nsITimedChannel* aTimedChannel) {
|
||||
static void TelemetryReport(nsITimedChannel* aTimedChannel,
|
||||
uint64_t aRequestSize, uint64_t aTransferSize) {
|
||||
TimeStamp asyncOpen;
|
||||
nsresult rv = aTimedChannel->GetAsyncOpen(&asyncOpen);
|
||||
if (NS_FAILED(rv)) {
|
||||
|
@ -1211,6 +1212,8 @@ static void TelemetryReport(nsITimedChannel* aTimedChannel) {
|
|||
.AccumulateRawDuration(responseStart - asyncOpen);
|
||||
}
|
||||
}
|
||||
glean::networking::trr_request_size.Get(key).Accumulate(aRequestSize);
|
||||
glean::networking::trr_response_size.Get(key).Accumulate(aTransferSize);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -1222,6 +1225,8 @@ TRRServiceChannel::OnStopRequest(nsIRequest* request, nsresult status) {
|
|||
if (mCanceled || NS_FAILED(mStatus)) status = mStatus;
|
||||
|
||||
mTransactionTimings = mTransaction->Timings();
|
||||
mRequestSize = mTransaction->GetRequestSize();
|
||||
mTransferSize = mTransaction->GetTransferSize();
|
||||
mTransaction = nullptr;
|
||||
mTransactionPump = nullptr;
|
||||
|
||||
|
@ -1243,7 +1248,7 @@ TRRServiceChannel::OnStopRequest(nsIRequest* request, nsresult status) {
|
|||
}
|
||||
|
||||
ReleaseListeners();
|
||||
TelemetryReport(this);
|
||||
TelemetryReport(this, mRequestSize, mTransferSize);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -909,6 +909,15 @@ add_task(
|
|||
await Glean.networking.trrRequestCount.private.testGetValue(),
|
||||
2
|
||||
);
|
||||
// We've made 4 TRR requests.
|
||||
Assert.equal(
|
||||
await Glean.networking.trrRequestSize.other.testGetValue().count,
|
||||
4
|
||||
);
|
||||
Assert.equal(
|
||||
await Glean.networking.trrResponseSize.other.testGetValue().count,
|
||||
4
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#define mozilla_Sandbox_h
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "mozilla/ipc/UtilityProcessSandboxing.h"
|
||||
|
||||
enum MacSandboxType {
|
||||
|
|
|
@ -437,6 +437,19 @@ def run_remaining_transforms(config, tasks):
|
|||
yield from xforms(config, [task])
|
||||
|
||||
|
||||
@transforms.add
|
||||
def define_tags(config, tasks):
|
||||
for task in tasks:
|
||||
tags = task.setdefault("tags", {})
|
||||
tags.setdefault("test-suite", task["suite"])
|
||||
tags.setdefault("test-platform", task["test-platform"])
|
||||
variant = task.get("attributes", {}).get("unittest_variant")
|
||||
if variant:
|
||||
tags.setdefault("test-variant", variant)
|
||||
|
||||
yield task
|
||||
|
||||
|
||||
@transforms.add
|
||||
def make_job_description(config, tasks):
|
||||
"""Convert *test* descriptions to *job* descriptions (input to
|
||||
|
|
|
@ -3634,7 +3634,7 @@ toolbar#nav-bar {
|
|||
prefs = list(self.prefs_by_manifest[m])[0]
|
||||
self.extraPrefs = origPrefs.copy()
|
||||
if prefs:
|
||||
prefs = prefs.strip().split()
|
||||
prefs = [p.strip() for p in prefs.strip().split("\n")]
|
||||
self.log.info(
|
||||
"The following extra prefs will be set:\n {}".format(
|
||||
"\n ".join(prefs)
|
||||
|
|
|
@ -259,7 +259,7 @@ def test_prefs_validation_with_ancestor_manifest(get_active_tests, create_manife
|
|||
assert len(prefs) == 1
|
||||
assert (
|
||||
prefs.pop()
|
||||
== "\nbrowser.dom.foo=fleem\nflower=rose \nfoo=bar\nbrowser.dom.foo=baz"
|
||||
== "\nbrowser.dom.foo=fleem\nflower=rose\n\nfoo=bar\nbrowser.dom.foo=baz"
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -194,7 +194,7 @@ def combine_fields(global_vars, local_vars):
|
|||
return global_vars.copy()
|
||||
field_patterns = {
|
||||
"args": "%s %s",
|
||||
"prefs": "%s %s",
|
||||
"prefs": "%s\n%s",
|
||||
"skip-if": "%s\n%s", # consider implicit logical OR: "%s ||\n%s"
|
||||
"support-files": "%s %s",
|
||||
"tags": "%s %s",
|
||||
|
|
|
@ -10,3 +10,7 @@
|
|||
[clear in double partitioned with intermediate cross origin context doesn't clear unpartitioned data]
|
||||
expected:
|
||||
if tsan: [PASS, TIMEOUT]
|
||||
|
||||
[clear in cross origin iframe doesn't affect embedder]
|
||||
expected:
|
||||
if (processor == "x86") and (os == "linux"): [PASS, FAIL]
|
||||
|
|
|
@ -18,11 +18,13 @@
|
|||
expected: ERROR
|
||||
|
||||
[decompression-bad-chunks.tentative.https.any.shadowrealm-in-serviceworker.html]
|
||||
expected: [ERROR, TIMEOUT]
|
||||
expected:
|
||||
if (os == "win") and not debug and (processor == "x86_64"): [CRASH, ERROR, TIMEOUT]
|
||||
[ERROR, TIMEOUT]
|
||||
|
||||
[decompression-bad-chunks.tentative.https.any.shadowrealm-in-audioworklet.html]
|
||||
expected:
|
||||
if os == "linux": [TIMEOUT, ERROR]
|
||||
if os == "linux": [ERROR, TIMEOUT]
|
||||
ERROR
|
||||
|
||||
[decompression-bad-chunks.tentative.any.shadowrealm-in-window.html]
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[change_eventhandler_for_http_cookie_and_set_cookie_headers.https.window.html]
|
||||
[CookieStore agreed with HTTP headers agree on encoding non-ASCII cookies]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): FAIL
|
||||
if (os == "mac") and (version == "OS X 14.7"): PASS
|
||||
if os == "mac": PASS
|
||||
[PASS, FAIL]
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
[partitioned-cookies-a-b-a-embed.tentative.https.html]
|
||||
expected:
|
||||
if (os == "win") and debug and (processor == "x86_64"): [OK, ERROR]
|
||||
if (os == "win") and not debug and (processor == "x86"): [OK, ERROR]
|
||||
if (os == "mac") and not debug: [OK, ERROR]
|
||||
if (os == "linux") and (processor == "x86"): [OK, ERROR]
|
||||
if (os == "win") and debug and (processor == "x86"): OK
|
||||
if (os == "mac") and debug: OK
|
||||
if (os == "linux") and (processor == "x86_64"): OK
|
||||
if os == "android": OK
|
||||
[OK, ERROR]
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[column-height-010.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[column-height-012.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[root-scroll-button-activation.html]
|
||||
[CSS Overflow: ::scroll-button on root element activation]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[root-scroll-button.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,4 @@
|
|||
[root-scroll-marker-activation-in-iframe.html]
|
||||
expected: TIMEOUT
|
||||
[CSS Overflow: ::scroll-marker with ::scroll-marker-group on root element doesn't propagate scrolling]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,2 @@
|
|||
[scroll-marker-contain-005.tentative.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[scroll-marker-contain-006.tentative.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[scroll-marker-contain-007.tentative.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[interactivity-inert-all.tentative.html]
|
||||
[The 'all' shorthand should not set 'interactivity']
|
||||
expected: FAIL
|
|
@ -1,4 +1,4 @@
|
|||
[scroller-child.html]
|
||||
expected:
|
||||
if (os == "android") and not swgl and debug: TIMEOUT
|
||||
if (os == "android") and not swgl and not debug: [PASS, TIMEOUT]
|
||||
if (os == "linux") and asan and fission: TIMEOUT
|
||||
if (os == "android") and not debug: [PASS, TIMEOUT]
|
||||
|
|
|
@ -26,12 +26,12 @@
|
|||
|
||||
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scroll() ]
|
||||
expected:
|
||||
if not fission and (os == "linux") and debug: [PASS, FAIL]
|
||||
if (os == "linux") and debug and not fission: [PASS, FAIL]
|
||||
|
||||
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scrollTo() ]
|
||||
expected:
|
||||
if not fission and (os == "linux") and debug: [PASS, FAIL]
|
||||
if (os == "linux") and debug and not fission: [PASS, FAIL]
|
||||
|
||||
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollTo() ]
|
||||
expected:
|
||||
if not fission and (os == "linux") and debug: [PASS, FAIL]
|
||||
if (os == "linux") and debug and not fission: [PASS, FAIL]
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
[textencoder-utf16-surrogates.any.html]
|
||||
expected:
|
||||
if (processor == "x86") and (os == "linux"): [OK, ERROR]
|
||||
|
||||
[textencoder-utf16-surrogates.any.worker.html]
|
||||
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[clearkey-mp4-playback-destroy-persistent-license.https.html]
|
||||
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1313284
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
[clearkey-mp4-playback-persistent-license-events.https.html]
|
||||
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1313284
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
[clearkey-mp4-playback-persistent-license.https.html]
|
||||
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1313284
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
[clearkey-mp4-playback-retrieve-destroy-persistent-license.https.html]
|
||||
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1313284
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
[clearkey-mp4-playback-retrieve-persistent-license.https.html]
|
||||
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1313284
|
||||
|
|
@ -14,16 +14,17 @@
|
|||
|
||||
[FedCM disabled in 2 level deep nested iframe where middle iframe does not have permission policy]
|
||||
expected:
|
||||
if os == "win": [PASS, TIMEOUT]
|
||||
if (os == "mac") and (version == "OS X 14.7"): PASS
|
||||
[PASS, TIMEOUT]
|
||||
|
||||
[FedCM disabled in 2 level deep nested iframe where innermost iframe does not have permission policy]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [TIMEOUT, PASS, NOTRUN]
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [PASS, NOTRUN, TIMEOUT]
|
||||
if (os == "mac") and (version == "OS X 14.7"): [PASS, TIMEOUT, NOTRUN]
|
||||
[PASS, NOTRUN]
|
||||
|
||||
[FedCM should work in non-HTTPS URLs on localhost]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [NOTRUN, FAIL, TIMEOUT]
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [TIMEOUT, NOTRUN, FAIL]
|
||||
if (os == "mac") and (version == "OS X 14.7"): [FAIL, TIMEOUT, NOTRUN]
|
||||
[FAIL, TIMEOUT]
|
||||
|
|
|
@ -1,16 +1,30 @@
|
|||
[lfedcm-identity.create-store-collect.tentative.sub.https.html]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1") and debug: [OK, TIMEOUT]
|
||||
if (os == "mac") and (version == "OS X 14.7.1") and not debug: [TIMEOUT, OK]
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [TIMEOUT, OK]
|
||||
[Credentials can be collected silently, but preventSilentAccess is respected]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1") and debug: [PASS, TIMEOUT]
|
||||
if (os == "mac") and (version == "OS X 14.7.1") and not debug: [NOTRUN, PASS, TIMEOUT]
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [NOTRUN, PASS, TIMEOUT]
|
||||
|
||||
[Cross-origin identity credential collection is correctly returned when the type matches]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1") and not debug: TIMEOUT
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): NOTRUN
|
||||
|
||||
[Cross-origin identity credential collection is correctly filtered when the type does not match]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1") and not debug: NOTRUN
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): NOTRUN
|
||||
|
||||
[Cross-origin identity credential collection is correctly returned when the effective origin is the relying party]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [NOTRUN, TIMEOUT]
|
||||
|
||||
[Cross-origin identity credential collection is correctly filtered when the endpoint doesn't have CORS]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): NOTRUN
|
||||
|
||||
[Cross-origin identity credential collection is correctly filtered when the effective origin is not the relying party]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [TIMEOUT, PASS]
|
||||
|
||||
[Cross-origin identity credential collection is correctly returned when the endpoint returns success]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): NOTRUN
|
||||
|
|
|
@ -7,19 +7,21 @@
|
|||
expected:
|
||||
if os == "android": [OK, CRASH]
|
||||
[HTTP cache updates stored headers from a Last-Modified 304]
|
||||
expected: [PASS, FAIL]
|
||||
expected:
|
||||
if debug and (os == "linux") and fission: [FAIL, PASS]
|
||||
if debug and (os == "android") and sessionHistoryInParent: [FAIL, PASS]
|
||||
[PASS, FAIL]
|
||||
|
||||
|
||||
[304-update.any.serviceworker.html]
|
||||
expected:
|
||||
if (processor == "x86_64") and (os == "mac") and not debug: [OK, ERROR]
|
||||
if (processor == "x86_64") and (os == "android") and not debug: [OK, ERROR]
|
||||
if (processor == "x86") and debug: [OK, ERROR, TIMEOUT]
|
||||
if (processor == "x86") and not debug: [OK, TIMEOUT]
|
||||
if (os == "win") and (processor == "x86") and debug: [OK, ERROR, TIMEOUT]
|
||||
if (os == "win") and (processor == "x86") and not debug: [OK, TIMEOUT]
|
||||
if (os == "mac") and not debug: [OK, ERROR]
|
||||
if (os == "linux") and (processor == "x86"): [OK, TIMEOUT]
|
||||
if (os == "android") and not debug: [OK, ERROR]
|
||||
[HTTP cache updates stored headers from a Last-Modified 304]
|
||||
expected:
|
||||
if (os == "linux") and not debug and fission and (processor == "x86_64") and not asan and not tsan: [FAIL, PASS]
|
||||
[PASS, FAIL]
|
||||
expected: [PASS, FAIL]
|
||||
|
||||
[Content-* header]
|
||||
expected:
|
||||
|
@ -28,6 +30,4 @@
|
|||
|
||||
[304-update.any.sharedworker.html]
|
||||
[HTTP cache updates stored headers from a Last-Modified 304]
|
||||
expected:
|
||||
if (os == "win") and not debug and (processor == "x86_64"): PASS
|
||||
[PASS, FAIL]
|
||||
expected: [PASS, FAIL]
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
[select can be nested inside a popover]
|
||||
expected:
|
||||
if os == "android": FAIL
|
||||
if (os == "win") and debug and (processor == "x86_64"): PASS
|
||||
if (os == "win") and debug and (processor == "x86_64"): [PASS, FAIL]
|
||||
if os == "linux": PASS
|
||||
[PASS, FAIL]
|
||||
|
||||
|
|
|
@ -5,22 +5,10 @@
|
|||
[Popover focus navigation with imperative invocation]
|
||||
expected: FAIL
|
||||
|
||||
[Cases where the next focus candidate isn't in the direct parent scope with imperative invocation]
|
||||
expected:
|
||||
if os == "android": PASS
|
||||
FAIL
|
||||
|
||||
[Popover focus navigation with command/commandfor invocation]
|
||||
expected: FAIL
|
||||
|
||||
[Circular reference tab navigation with command/commandfor invocation]
|
||||
expected: FAIL
|
||||
|
||||
[Popover focus returns when popover is hidden by invoker with commandfor invocation]
|
||||
expected: FAIL
|
||||
|
||||
[Popover focus only returns to invoker when focus is within the popover with command/commandfor invocation]
|
||||
expected: FAIL
|
||||
|
||||
[Cases where the next focus candidate isn't in the direct parent scope with command/commandfor invocation]
|
||||
expected: FAIL
|
||||
[Popover focus navigation with popovertarget invocation]
|
||||
expected:
|
||||
if os == "android": PASS
|
||||
FAIL
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
[popover-focus-3.html]
|
||||
[Circular reference tab navigation with command/commandfor invocation]
|
||||
expected: FAIL
|
||||
|
||||
[Popover focus returns when popover is hidden by invoker with commandfor invocation]
|
||||
expected: FAIL
|
||||
|
||||
[Popover focus only returns to invoker when focus is within the popover with command/commandfor invocation]
|
||||
expected: FAIL
|
|
@ -0,0 +1,3 @@
|
|||
[popover-focus-4.html]
|
||||
[Cases where the next focus candidate isn't in the direct parent scope with command/commandfor invocation]
|
||||
expected: FAIL
|
|
@ -1,15 +1,15 @@
|
|||
[on-video-behavior.tentative.html]
|
||||
expected:
|
||||
if (os == "linux") and not tsan and asan and fission: [OK, ERROR]
|
||||
if (os == "win") and not debug and (processor == "x86"): [OK, ERROR]
|
||||
if (os == "android") and sessionHistoryInParent and not debug: [OK, ERROR]
|
||||
if (os == "linux") and tsan: [OK, ERROR]
|
||||
if not debug and (os == "linux") and not tsan and asan and fission: [OK, ERROR]
|
||||
if not debug and (os == "win") and (processor == "x86"): [OK, ERROR]
|
||||
if not debug and (os == "linux") and tsan: [OK, ERROR]
|
||||
if not debug and (os == "android"): [OK, ERROR]
|
||||
[invoking video with play-pause action makes video play]
|
||||
expected:
|
||||
if (os == "win") and not debug: [PASS, FAIL]
|
||||
if (os == "mac") and not debug: [PASS, FAIL]
|
||||
if (os == "linux") and asan: [PASS, FAIL]
|
||||
if (os == "linux") and not asan and (processor == "x86_64"): PASS
|
||||
if (os == "win") and debug: PASS
|
||||
if os == "android": FAIL
|
||||
[PASS, FAIL]
|
||||
|
||||
[invoking playing video with play-pause action pauses it]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,36 +1,72 @@
|
|||
[interesttarget-keyboard-behavior.tentative.html]
|
||||
[Basic keyboard behavior, <button>]
|
||||
expected: FAIL
|
||||
|
||||
[Showing interest in a second element loses interest in the first, <button>]
|
||||
expected: FAIL
|
||||
|
||||
[Cancelling loseinterest caused by keyboard-gained interest cancels interest, <button>]
|
||||
expected: FAIL
|
||||
|
||||
[Basic keyboard behavior, <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Showing interest in a second element loses interest in the first, <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Cancelling loseinterest caused by keyboard-gained interest cancels interest, <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Basic keyboard behavior, <area>]
|
||||
expected: FAIL
|
||||
|
||||
[Showing interest in a second element loses interest in the first, <area>]
|
||||
expected: FAIL
|
||||
|
||||
[Cancelling loseinterest caused by keyboard-gained interest cancels interest, <area>]
|
||||
expected: FAIL
|
||||
|
||||
[Basic keyboard behavior, SVG <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Showing interest in a second element loses interest in the first, SVG <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Cancelling loseinterest caused by keyboard-gained interest cancels interest, SVG <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Basic keyboard focus behavior, <button>]
|
||||
expected: FAIL
|
||||
|
||||
[Lose interest hot key behavior, <button>]
|
||||
expected: FAIL
|
||||
|
||||
[Lose interest hot key behavior with element not focused, <button>]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the interest event stops behavior, <button>]
|
||||
expected: FAIL
|
||||
|
||||
[Basic keyboard focus behavior, <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Lose interest hot key behavior, <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Lose interest hot key behavior with element not focused, <a>]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the interest event stops behavior, <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Basic keyboard focus behavior, <area>]
|
||||
expected: FAIL
|
||||
|
||||
[Lose interest hot key behavior, <area>]
|
||||
expected: FAIL
|
||||
|
||||
[Lose interest hot key behavior with element not focused, <area>]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the interest event stops behavior, <area>]
|
||||
expected: FAIL
|
||||
|
||||
[Basic keyboard focus behavior, SVG <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Lose interest hot key behavior, SVG <a>]
|
||||
expected: FAIL
|
||||
|
||||
[Lose interest hot key behavior with element not focused, SVG <a>]
|
||||
expected: FAIL
|
||||
|
||||
[canceling the interest event stops behavior, SVG <a>]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[http-url-like-specifiers.sub.html]
|
||||
expected:
|
||||
if (os == "android") and fission: [OK, TIMEOUT]
|
|
@ -1,21 +1,21 @@
|
|||
[isIntersecting-threshold.html]
|
||||
[Scrolled to half way through target element]
|
||||
expected:
|
||||
if (os == "win") and (processor == "x86_64") and not debug: PASS
|
||||
if (os == "win") and debug and (processor == "x86"): [FAIL, PASS]
|
||||
if (os == "android") and debug: PASS
|
||||
if os == "mac": PASS
|
||||
[PASS, FAIL]
|
||||
|
||||
[Scrolled to target element completely off screen]
|
||||
expected:
|
||||
if (os == "win") and (processor == "x86_64") and not debug: PASS
|
||||
if (os == "win") and debug and (processor == "x86"): [FAIL, PASS]
|
||||
if (os == "android") and debug: PASS
|
||||
if os == "mac": PASS
|
||||
[PASS, FAIL]
|
||||
|
||||
[At initial scroll position]
|
||||
expected:
|
||||
if (os == "win") and (processor == "x86_64") and not debug: PASS
|
||||
if (os == "win") and debug and (processor == "x86"): [FAIL, PASS]
|
||||
if (os == "android") and debug: PASS
|
||||
if os == "mac": PASS
|
||||
[PASS, FAIL]
|
||||
|
|
|
@ -1 +1 @@
|
|||
upstream: ba7a4354e3ee84426cf202039d4a841363beb5da
|
||||
upstream: c7e484eee1f383a212c03b44c028c0b8052ce797
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe-tag.http.html]
|
||||
expected:
|
||||
if (os == "android") and fission: [OK, TIMEOUT, ERROR, CRASH]
|
||||
if (os == "win") and not debug and (processor == "x86_64"): [OK, ERROR]
|
||||
[Referrer Policy: Expects origin for iframe-tag to same-https origin and swap-origin redirection from http context.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -4,13 +4,15 @@
|
|||
[cross-origin meta refresh with referrer policy "no-referrer-when-downgrade" refreshes with full url as referrer]
|
||||
# This is wontfix behavior.
|
||||
bug: "https://bugzilla.mozilla.org/show_bug.cgi?id=1800070#c2"
|
||||
expected: FAIL
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [FAIL, TIMEOUT]
|
||||
FAIL
|
||||
|
||||
[cross-origin header refresh with referrer policy "no-referrer-when-downgrade" refreshes with full url as referrer]
|
||||
# This is wontfix behavior.
|
||||
bug: "https://bugzilla.mozilla.org/show_bug.cgi?id=1800070#c2"
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): TIMEOUT
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [TIMEOUT, FAIL, NOTRUN]
|
||||
FAIL
|
||||
|
||||
[cross-origin meta refresh with referrer policy "unsafe-url" refreshes with full url as referrer]
|
||||
|
@ -49,7 +51,7 @@
|
|||
|
||||
[cross-origin meta refresh with referrer policy "origin" refreshes with origin as referrer]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): NOTRUN
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [NOTRUN, PASS]
|
||||
|
||||
[cross-origin meta refresh with referrer policy "strict-origin" refreshes with origin as referrer]
|
||||
expected:
|
||||
|
@ -73,4 +75,4 @@
|
|||
|
||||
[cross-origin header refresh with referrer policy "origin" refreshes with origin as referrer]
|
||||
expected:
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): NOTRUN
|
||||
if (os == "mac") and (version == "OS X 14.7.1"): [NOTRUN, TIMEOUT]
|
||||
|
|
|
@ -14,11 +14,6 @@
|
|||
if (os == "mac") and not debug: [PASS, FAIL]
|
||||
if (os == "android") and not debug: [PASS, FAIL]
|
||||
|
||||
[Testcase #75, "<template><div>Hello</div></template>", config: "{ "elements": ["template"\], "replaceWithChildrenElements": ["div"\]}".]
|
||||
expected:
|
||||
if (os == "mac") and not debug: [PASS, FAIL]
|
||||
if (os == "android") and not debug: [PASS, FAIL]
|
||||
|
||||
[Testcase #66, "<div>balabala<i>test</i></div><test>t</test><custom-element>custom-element</custom-element>", config: "{ "replaceWithChildrenElements": [123, "test", "i", "custom-element"\],\n "elements": ["div"\]}".]
|
||||
expected:
|
||||
if (os == "mac") and not debug: [PASS, FAIL]
|
||||
|
@ -33,3 +28,6 @@
|
|||
expected:
|
||||
if (os == "mac") and not debug: [PASS, FAIL]
|
||||
if (os == "android") and not debug: [PASS, FAIL]
|
||||
|
||||
[Testcase #71, "<table><div><td>", config: "{ "replaceWithChildrenElements": ["table"\] }".]
|
||||
expected: FAIL
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue