Update On Mon Apr 7 20:24:16 CEST 2025
This commit is contained in:
parent
ff87719c89
commit
7f6c3906d7
701 changed files with 9196 additions and 2404 deletions
|
@ -1,33 +0,0 @@
|
|||
1; /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
||||
|
||||
const lazy = {};
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
RFPHelper: "resource://gre/modules/RFPHelper.sys.mjs",
|
||||
});
|
||||
|
||||
const kPrefLetterboxing = "privacy.resistFingerprinting.letterboxing";
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
lazy,
|
||||
"isLetterboxingEnabled",
|
||||
kPrefLetterboxing,
|
||||
false
|
||||
);
|
||||
|
||||
export class RFPHelperParent extends JSWindowActorParent {
|
||||
receiveMessage(aMessage) {
|
||||
if (
|
||||
lazy.isLetterboxingEnabled &&
|
||||
aMessage.name == "Letterboxing:ContentSizeUpdated"
|
||||
) {
|
||||
let browser = this.browsingContext.top.embedderElement;
|
||||
let window = browser.ownerGlobal;
|
||||
lazy.RFPHelper.contentSizeUpdated(window);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1945,7 +1945,7 @@ pref("browser.newtabpage.activity-stream.discoverystream.spocMessageVariant", ""
|
|||
pref("browser.newtabpage.activity-stream.discoverystream.sendToPocket.enabled", true);
|
||||
|
||||
// Pref enabling content reporting
|
||||
pref("browser.newtabpage.activity-stream.discoverystream.reportContent.enabled", false);
|
||||
pref("browser.newtabpage.activity-stream.discoverystream.reportAds.enabled", false);
|
||||
|
||||
// List of regions that do not get stories, regardless of locale-list-config.
|
||||
pref("browser.newtabpage.activity-stream.discoverystream.region-stories-block", "");
|
||||
|
|
|
@ -297,7 +297,7 @@ add_task(async function test_forceEnrollUpdatesMessages() {
|
|||
|
||||
await assertMessageInState("xman_test_message");
|
||||
|
||||
await ExperimentManager.unenroll(`optin-${experiment.slug}`, "cleanup");
|
||||
await ExperimentManager.unenroll(`optin-${experiment.slug}`);
|
||||
await SpecialPowers.popPrefEnv();
|
||||
await cleanup();
|
||||
});
|
||||
|
|
|
@ -2,12 +2,11 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
const PREF_TEST_ORIGINS = "browser.uitour.testingOrigins";
|
||||
const UITOUR_PERMISSION = "uitour";
|
||||
import { UITourUtils } from "moz-src:///browser/components/uitour/UITourUtils.sys.mjs";
|
||||
|
||||
export class UITourChild extends JSWindowActorChild {
|
||||
handleEvent(event) {
|
||||
if (!this.ensureTrustedOrigin()) {
|
||||
if (!UITourUtils.ensureTrustedOrigin(this.manager)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -18,62 +17,6 @@ export class UITourChild extends JSWindowActorChild {
|
|||
});
|
||||
}
|
||||
|
||||
isTestingOrigin(aURI) {
|
||||
let testingOrigins = Services.prefs.getStringPref(PREF_TEST_ORIGINS, "");
|
||||
if (!testingOrigins) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Allow any testing origins (comma-seperated).
|
||||
for (let origin of testingOrigins.split(/\s*,\s*/)) {
|
||||
try {
|
||||
let testingURI = Services.io.newURI(origin);
|
||||
if (aURI.prePath == testingURI.prePath) {
|
||||
return true;
|
||||
}
|
||||
} catch (ex) {
|
||||
console.error(ex);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// This function is copied from UITour.sys.mjs.
|
||||
isSafeScheme(aURI) {
|
||||
let allowedSchemes = new Set(["https", "about"]);
|
||||
if (!allowedSchemes.has(aURI.scheme)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
ensureTrustedOrigin() {
|
||||
if (this.browsingContext.top != this.browsingContext) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let uri = this.document.documentURIObject;
|
||||
|
||||
if (uri.schemeIs("chrome")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!this.isSafeScheme(uri)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let permission = Services.perms.testPermissionFromPrincipal(
|
||||
this.document.nodePrincipal,
|
||||
UITOUR_PERMISSION
|
||||
);
|
||||
if (permission == Services.perms.ALLOW_ACTION) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return this.isTestingOrigin(uri);
|
||||
}
|
||||
|
||||
receiveMessage(aMessage) {
|
||||
switch (aMessage.name) {
|
||||
case "UITour:SendPageCallback":
|
||||
|
@ -86,7 +29,7 @@ export class UITourChild extends JSWindowActorChild {
|
|||
}
|
||||
|
||||
sendPageEvent(type, detail) {
|
||||
if (!this.ensureTrustedOrigin()) {
|
||||
if (!UITourUtils.ensureTrustedOrigin(this.manager)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,9 +3,13 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
import { UITour } from "moz-src:///browser/components/uitour/UITour.sys.mjs";
|
||||
import { UITourUtils } from "moz-src:///browser/components/uitour/UITourUtils.sys.mjs";
|
||||
|
||||
export class UITourParent extends JSWindowActorParent {
|
||||
receiveMessage(message) {
|
||||
if (!UITourUtils.ensureTrustedOrigin(this.manager)) {
|
||||
return;
|
||||
}
|
||||
switch (message.name) {
|
||||
case "UITour:onPageEvent":
|
||||
if (this.manager.rootFrameLoader) {
|
||||
|
|
84
browser/components/uitour/UITourUtils.sys.mjs
Normal file
84
browser/components/uitour/UITourUtils.sys.mjs
Normal file
|
@ -0,0 +1,84 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
const PREF_TEST_ORIGINS = "browser.uitour.testingOrigins";
|
||||
const UITOUR_PERMISSION = "uitour";
|
||||
|
||||
export let UITourUtils = {
|
||||
/**
|
||||
* Check if we've got a testing origin.
|
||||
*
|
||||
* @param {nsIURI} uri
|
||||
* The URI to check
|
||||
* @returns {boolean}
|
||||
* Whether or not it's a testing origin.
|
||||
*/
|
||||
isTestingOrigin(uri) {
|
||||
let testingOrigins = Services.prefs.getStringPref(PREF_TEST_ORIGINS, "");
|
||||
if (!testingOrigins) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Allow any testing origins (comma-seperated).
|
||||
for (let origin of testingOrigins.split(/\s*,\s*/)) {
|
||||
try {
|
||||
let testingURI = Services.io.newURI(origin);
|
||||
if (uri.prePath == testingURI.prePath) {
|
||||
return true;
|
||||
}
|
||||
} catch (ex) {
|
||||
console.error(ex);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {WindowGlobalChild|WindowGlobalParent} windowGlobal
|
||||
* The parent/child representation of a window global to check if we can
|
||||
* use UITour.
|
||||
* @returns {boolean}
|
||||
* Whether or not we can use UITour here.
|
||||
*/
|
||||
ensureTrustedOrigin(windowGlobal) {
|
||||
// If we're not top-most or no longer current, bail out immediately.
|
||||
if (windowGlobal.browsingContext.parent || !windowGlobal.isCurrentGlobal) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let principal, uri;
|
||||
// We can get either a WindowGlobalParent or WindowGlobalChild, depending on
|
||||
// what process we're called in, and determining the secure context-ness and
|
||||
// principal + URI needs different approaches based on this.
|
||||
if (WindowGlobalParent.isInstance(windowGlobal)) {
|
||||
if (!windowGlobal.browsingContext.secureBrowserUI?.isSecureContext) {
|
||||
return false;
|
||||
}
|
||||
principal = windowGlobal.documentPrincipal;
|
||||
uri = windowGlobal.documentURI;
|
||||
} else {
|
||||
if (!windowGlobal.contentWindow?.isSecureContext) {
|
||||
return false;
|
||||
}
|
||||
let document = windowGlobal.contentWindow.document;
|
||||
principal = document?.nodePrincipal;
|
||||
uri = document?.documentURIObject;
|
||||
}
|
||||
|
||||
if (!principal) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let permission = Services.perms.testPermissionFromPrincipal(
|
||||
principal,
|
||||
UITOUR_PERMISSION
|
||||
);
|
||||
if (permission == Services.perms.ALLOW_ACTION) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return uri && this.isTestingOrigin(uri);
|
||||
},
|
||||
};
|
|
@ -2,7 +2,12 @@
|
|||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOZ_SRC_FILES += ["UITour.sys.mjs", "UITourChild.sys.mjs", "UITourParent.sys.mjs"]
|
||||
MOZ_SRC_FILES += [
|
||||
"UITour.sys.mjs",
|
||||
"UITourChild.sys.mjs",
|
||||
"UITourParent.sys.mjs",
|
||||
"UITourUtils.sys.mjs",
|
||||
]
|
||||
|
||||
BROWSER_CHROME_MANIFESTS += [
|
||||
"test/browser.toml",
|
||||
|
|
|
@ -16,6 +16,10 @@ add_task(async function test_privatebrowsing_window() {
|
|||
const ABOUT_ORIGIN_WITH_UITOUR_DEFAULT = "about:newtab";
|
||||
const HTTPS_ORIGIN_WITH_UITOUR_DEFAULT = "https://www.mozilla.org";
|
||||
|
||||
let { UITourUtils } = ChromeUtils.importESModule(
|
||||
"moz-src:///browser/components/uitour/UITourUtils.sys.mjs"
|
||||
);
|
||||
|
||||
let win = await BrowserTestUtils.openNewBrowserWindow({ private: true });
|
||||
let browser = win.gBrowser.selectedBrowser;
|
||||
|
||||
|
@ -26,10 +30,21 @@ add_task(async function test_privatebrowsing_window() {
|
|||
BrowserTestUtils.startLoadingURIString(browser, uri);
|
||||
await BrowserTestUtils.browserLoaded(browser);
|
||||
|
||||
Assert.ok(
|
||||
UITourUtils.ensureTrustedOrigin(
|
||||
browser.browsingContext.currentWindowGlobal
|
||||
),
|
||||
"Page should be considered trusted for UITour in the parent."
|
||||
);
|
||||
|
||||
await SpecialPowers.spawn(browser, [], async () => {
|
||||
let actor = content.windowGlobalChild.getActor("UITour");
|
||||
// eslint-disable-next-line no-shadow
|
||||
let { UITourUtils } = ChromeUtils.importESModule(
|
||||
"moz-src:///browser/components/uitour/UITourUtils.sys.mjs"
|
||||
);
|
||||
Assert.ok(
|
||||
actor.ensureTrustedOrigin(),
|
||||
UITourUtils.ensureTrustedOrigin(actor.manager),
|
||||
"Page should be considered trusted for UITour."
|
||||
);
|
||||
});
|
||||
|
|
|
@ -158,11 +158,16 @@ The following scalars are recorded for Firefox Suggest. For general information
|
|||
on scalar telemetry in Firefox, see the
|
||||
:doc:`/toolkit/components/telemetry/collection/scalars` document.
|
||||
|
||||
browser.ui.interaction.preferences_panePrivacy
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
browser.ui.interaction.preferences_paneSearch
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This keyed scalar is incremented each time the user clicks a Firefox Suggest
|
||||
checkbox or toggle switch in the preferences UI. Keys are the following:
|
||||
checkbox or toggle switch in the preferences UI.
|
||||
|
||||
Note: These are also recorded in different forms under the
|
||||
``contextual.services.quicksuggest.*`` telemetry described below.
|
||||
|
||||
Keys are the following:
|
||||
|
||||
:firefoxSuggestBestMatch:
|
||||
This key is incremented when the "Top pick" checkbox is clicked. In 120 this
|
||||
|
@ -173,10 +178,10 @@ checkbox or toggle switch in the preferences UI. Keys are the following:
|
|||
:firefoxSuggestDataCollectionToggle:
|
||||
This key is incremented when the toggle switch for data collection
|
||||
is clicked.
|
||||
:firefoxSuggestNonsponsoredToggle:
|
||||
:firefoxSuggestNonsponsored:
|
||||
This key is incremented when the toggle switch for non-sponsored suggestions
|
||||
is clicked.
|
||||
:firefoxSuggestSponsoredToggle:
|
||||
:firefoxSuggestSponsored:
|
||||
This key is incremented when the toggle switch for sponsored suggestions
|
||||
is clicked.
|
||||
|
||||
|
@ -194,10 +199,18 @@ Changelog
|
|||
Removed ``firefoxSuggestBestMatch`` and
|
||||
``firefoxSuggestBestMatchLearnMore``. [Bug 1857391_]
|
||||
|
||||
Firefox 123.0
|
||||
Recording moved from ``browser.ui.interaction.preferences_panePrivacy`` to
|
||||
``browser.ui.interaction.preferences_paneSearch``. [Bug 1852048_]
|
||||
``firefoxSuggestNonsponsoredToggle`` was renamed to ``firefoxSuggestNonsponsored``
|
||||
``firefoxSuggestSponsoredToggle`` was renamed to ``firefoxSuggestSponsored``
|
||||
``
|
||||
|
||||
.. _1735976: https://bugzilla.mozilla.org/show_bug.cgi?id=1735976
|
||||
.. _1755100: https://bugzilla.mozilla.org/show_bug.cgi?id=1755100
|
||||
.. _1756917: https://bugzilla.mozilla.org/show_bug.cgi?id=1756917
|
||||
.. _1857391: https://bugzilla.mozilla.org/show_bug.cgi?id=1857391
|
||||
.. _1852048: https://bugzilla.mozilla.org/show_bug.cgi?id=1852048
|
||||
|
||||
contextual.services.quicksuggest.block_dynamic_wikipedia
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
|
@ -291,6 +291,10 @@ urlbar.searchmode.*
|
|||
Used when the user selects a keyword offer result.
|
||||
- ``oneoff``
|
||||
Used when the user selects a one-off engine in the Urlbar.
|
||||
- ``searchbutton``
|
||||
Used when the user entered search mode via the unified search button.
|
||||
Added in Firefox 133, but the unified search button was not enabled in
|
||||
release until 136.
|
||||
- ``shortcut``
|
||||
Used when the user enters search mode with a keyboard shortcut or menu bar
|
||||
item (e.g. ``Accel+K``).
|
||||
|
@ -365,6 +369,14 @@ urlbar.searchmode.*
|
|||
Please note that symbols cannot trigger the ``urlbar.searchmode.keywordoffer``
|
||||
telemetry, as symbols are only valid for typed. [Bug `1919180`_]
|
||||
|
||||
Firefox 133
|
||||
Added ``urlbar.searchmode.searchbutton``:
|
||||
- This new probe is for accesses to search mode from the unified search
|
||||
button. The button was released in Firefox 136 and replaced the previous
|
||||
one-off buttons (``urlbar.searchmode.oneoff``).
|
||||
|
||||
Added Glean equivalents of the probes as labeled counters.
|
||||
|
||||
|
||||
urlbar.picked.*
|
||||
~~~~~~~~~~~~~~~
|
||||
|
|
|
@ -253,8 +253,9 @@ export class _DiscoveryStreamBase extends React.PureComponent {
|
|||
const { config } = this.props.DiscoveryStream;
|
||||
const topicSelectionEnabled =
|
||||
this.props.Prefs.values["discoverystream.topicSelection.enabled"];
|
||||
const reportContentEnabled =
|
||||
this.props.Prefs.values["discoverystream.reportContent.enabled"];
|
||||
const reportAdsEnabled =
|
||||
this.props.Prefs.values["discoverystream.reportAds.enabled"];
|
||||
const spocsEnabled = this.props.Prefs.values["unifiedAds.spocs.enabled"];
|
||||
|
||||
// Allow rendering without extracting special components
|
||||
if (!config.collapsible) {
|
||||
|
@ -319,16 +320,19 @@ export class _DiscoveryStreamBase extends React.PureComponent {
|
|||
}
|
||||
}
|
||||
|
||||
// Render a DS-style TopSites then the rest if any in a collapsible section
|
||||
const { DiscoveryStream } = this.props;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
{this.props.DiscoveryStream.isPrivacyInfoModalVisible && (
|
||||
<DSPrivacyModal dispatch={this.props.dispatch} />
|
||||
)}
|
||||
{reportContentEnabled && (
|
||||
|
||||
{/* Reporting stories/articles will only be available in sections, not the default card grid */}
|
||||
{((reportAdsEnabled && spocsEnabled) || sectionsEnabled) && (
|
||||
<ReportContent spocs={DiscoveryStream.spocs} />
|
||||
)}
|
||||
|
||||
{topSites &&
|
||||
this.renderLayout([
|
||||
{
|
||||
|
|
|
@ -49,6 +49,7 @@ export const AdBanner = ({
|
|||
};
|
||||
|
||||
const sectionsEnabled = prefs["discoverystream.sections.enabled"];
|
||||
const showAdReporting = prefs["discoverystream.reportAds.enabled"];
|
||||
|
||||
const { width: imgWidth, height: imgHeight } = getDimensions(spoc.format);
|
||||
|
||||
|
@ -89,7 +90,7 @@ export const AdBanner = ({
|
|||
spoc={spoc}
|
||||
position={row}
|
||||
type={type}
|
||||
prefs={prefs}
|
||||
showAdReporting={showAdReporting}
|
||||
/>
|
||||
<SafeAnchor
|
||||
className="ad-banner-link"
|
||||
|
|
|
@ -17,16 +17,20 @@ import { LinkMenu } from "../../LinkMenu/LinkMenu";
|
|||
* @param spoc
|
||||
* @param position
|
||||
* @param type
|
||||
* @param showAdReporting
|
||||
* @returns {Element}
|
||||
* @constructor
|
||||
*/
|
||||
export function AdBannerContextMenu({ dispatch, spoc, position, type, prefs }) {
|
||||
const PREF_REPORT_CONTENT_ENABLED = "discoverystream.reportContent.enabled";
|
||||
const showReporting = prefs[PREF_REPORT_CONTENT_ENABLED];
|
||||
|
||||
export function AdBannerContextMenu({
|
||||
dispatch,
|
||||
spoc,
|
||||
position,
|
||||
type,
|
||||
showAdReporting,
|
||||
}) {
|
||||
const ADBANNER_CONTEXT_MENU_OPTIONS = [
|
||||
"BlockAdUrl",
|
||||
...(showReporting ? ["ReportAd"] : []),
|
||||
...(showAdReporting ? ["ReportAd"] : []),
|
||||
"ManageSponsoredContent",
|
||||
"OurSponsorsAndYourPrivacy",
|
||||
];
|
||||
|
|
|
@ -12,15 +12,15 @@ export class _DSLinkMenu extends React.PureComponent {
|
|||
render() {
|
||||
const { index, dispatch } = this.props;
|
||||
let TOP_STORIES_CONTEXT_MENU_OPTIONS;
|
||||
const PREF_REPORT_CONTENT_ENABLED = "discoverystream.reportContent.enabled";
|
||||
const PREF_REPORT_ADS_ENABLED = "discoverystream.reportAds.enabled";
|
||||
const prefs = this.props.Prefs.values;
|
||||
const showReporting = prefs[PREF_REPORT_CONTENT_ENABLED];
|
||||
const showAdsReporting = prefs[PREF_REPORT_ADS_ENABLED];
|
||||
const isSpoc = this.props.card_type === "spoc";
|
||||
|
||||
if (isSpoc) {
|
||||
TOP_STORIES_CONTEXT_MENU_OPTIONS = [
|
||||
"BlockUrl",
|
||||
...(showReporting ? ["ReportAd"] : []),
|
||||
...(showAdsReporting ? ["ReportAd"] : []),
|
||||
"ManageSponsoredContent",
|
||||
"OurSponsorsAndYourPrivacy",
|
||||
];
|
||||
|
@ -31,7 +31,7 @@ export class _DSLinkMenu extends React.PureComponent {
|
|||
|
||||
TOP_STORIES_CONTEXT_MENU_OPTIONS = [
|
||||
"CheckBookmark",
|
||||
...(showReporting && this.props.section ? ["ReportContent"] : []),
|
||||
...(this.props.section ? ["ReportContent"] : []),
|
||||
...saveToPocketOptions,
|
||||
"Separator",
|
||||
"OpenInNewWindow",
|
||||
|
@ -41,9 +41,6 @@ export class _DSLinkMenu extends React.PureComponent {
|
|||
];
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-console
|
||||
console.log("dslinkmenu prop", this.props);
|
||||
|
||||
const type = this.props.type || "DISCOVERY_STREAM";
|
||||
const title = this.props.title || this.props.source;
|
||||
|
||||
|
|
|
@ -515,6 +515,7 @@ export const LinkMenuOptions = {
|
|||
ManageSponsoredContent: () => ({
|
||||
id: "newtab-menu-manage-sponsored-content",
|
||||
action: ac.OnlyToMain({ type: at.SETTINGS_OPEN }),
|
||||
userEvent: "OPEN_NEWTAB_PREFS",
|
||||
}),
|
||||
OurSponsorsAndYourPrivacy: () => ({
|
||||
id: "newtab-menu-our-sponsors-and-your-privacy",
|
||||
|
@ -524,6 +525,7 @@ export const LinkMenuOptions = {
|
|||
url: "https://support.mozilla.org/kb/pocket-sponsored-stories-new-tabs",
|
||||
},
|
||||
}),
|
||||
userEvent: "CLICK_PRIVACY_INFO",
|
||||
}),
|
||||
ReportAd: site => {
|
||||
return {
|
||||
|
|
|
@ -2202,6 +2202,7 @@ const LinkMenuOptions = {
|
|||
ManageSponsoredContent: () => ({
|
||||
id: "newtab-menu-manage-sponsored-content",
|
||||
action: actionCreators.OnlyToMain({ type: actionTypes.SETTINGS_OPEN }),
|
||||
userEvent: "OPEN_NEWTAB_PREFS",
|
||||
}),
|
||||
OurSponsorsAndYourPrivacy: () => ({
|
||||
id: "newtab-menu-our-sponsors-and-your-privacy",
|
||||
|
@ -2211,6 +2212,7 @@ const LinkMenuOptions = {
|
|||
url: "https://support.mozilla.org/kb/pocket-sponsored-stories-new-tabs",
|
||||
},
|
||||
}),
|
||||
userEvent: "CLICK_PRIVACY_INFO",
|
||||
}),
|
||||
ReportAd: site => {
|
||||
return {
|
||||
|
@ -2437,19 +2439,16 @@ class _DSLinkMenu extends (external_React_default()).PureComponent {
|
|||
dispatch
|
||||
} = this.props;
|
||||
let TOP_STORIES_CONTEXT_MENU_OPTIONS;
|
||||
const PREF_REPORT_CONTENT_ENABLED = "discoverystream.reportContent.enabled";
|
||||
const PREF_REPORT_ADS_ENABLED = "discoverystream.reportAds.enabled";
|
||||
const prefs = this.props.Prefs.values;
|
||||
const showReporting = prefs[PREF_REPORT_CONTENT_ENABLED];
|
||||
const showAdsReporting = prefs[PREF_REPORT_ADS_ENABLED];
|
||||
const isSpoc = this.props.card_type === "spoc";
|
||||
if (isSpoc) {
|
||||
TOP_STORIES_CONTEXT_MENU_OPTIONS = ["BlockUrl", ...(showReporting ? ["ReportAd"] : []), "ManageSponsoredContent", "OurSponsorsAndYourPrivacy"];
|
||||
TOP_STORIES_CONTEXT_MENU_OPTIONS = ["BlockUrl", ...(showAdsReporting ? ["ReportAd"] : []), "ManageSponsoredContent", "OurSponsorsAndYourPrivacy"];
|
||||
} else {
|
||||
const saveToPocketOptions = this.props.pocket_button_enabled ? ["CheckArchiveFromPocket", "CheckSavedToPocket"] : [];
|
||||
TOP_STORIES_CONTEXT_MENU_OPTIONS = ["CheckBookmark", ...(showReporting && this.props.section ? ["ReportContent"] : []), ...saveToPocketOptions, "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl"];
|
||||
TOP_STORIES_CONTEXT_MENU_OPTIONS = ["CheckBookmark", ...(this.props.section ? ["ReportContent"] : []), ...saveToPocketOptions, "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl"];
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-console
|
||||
console.log("dslinkmenu prop", this.props);
|
||||
const type = this.props.type || "DISCOVERY_STREAM";
|
||||
const title = this.props.title || this.props.source;
|
||||
return /*#__PURE__*/external_React_default().createElement("div", {
|
||||
|
@ -4521,6 +4520,7 @@ function ListFeed({
|
|||
* @param spoc
|
||||
* @param position
|
||||
* @param type
|
||||
* @param showAdReporting
|
||||
* @returns {Element}
|
||||
* @constructor
|
||||
*/
|
||||
|
@ -4529,11 +4529,9 @@ function AdBannerContextMenu({
|
|||
spoc,
|
||||
position,
|
||||
type,
|
||||
prefs
|
||||
showAdReporting
|
||||
}) {
|
||||
const PREF_REPORT_CONTENT_ENABLED = "discoverystream.reportContent.enabled";
|
||||
const showReporting = prefs[PREF_REPORT_CONTENT_ENABLED];
|
||||
const ADBANNER_CONTEXT_MENU_OPTIONS = ["BlockAdUrl", ...(showReporting ? ["ReportAd"] : []), "ManageSponsoredContent", "OurSponsorsAndYourPrivacy"];
|
||||
const ADBANNER_CONTEXT_MENU_OPTIONS = ["BlockAdUrl", ...(showAdReporting ? ["ReportAd"] : []), "ManageSponsoredContent", "OurSponsorsAndYourPrivacy"];
|
||||
const [showContextMenu, setShowContextMenu] = (0,external_React_namespaceObject.useState)(false);
|
||||
const onClick = e => {
|
||||
e.preventDefault();
|
||||
|
@ -4633,6 +4631,7 @@ const AdBanner = ({
|
|||
};
|
||||
};
|
||||
const sectionsEnabled = prefs["discoverystream.sections.enabled"];
|
||||
const showAdReporting = prefs["discoverystream.reportAds.enabled"];
|
||||
const {
|
||||
width: imgWidth,
|
||||
height: imgHeight
|
||||
|
@ -4675,7 +4674,7 @@ const AdBanner = ({
|
|||
spoc: spoc,
|
||||
position: row,
|
||||
type: type,
|
||||
prefs: prefs
|
||||
showAdReporting: showAdReporting
|
||||
}), /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
|
||||
className: "ad-banner-link",
|
||||
url: spoc.url,
|
||||
|
@ -11412,7 +11411,8 @@ class _DiscoveryStreamBase extends (external_React_default()).PureComponent {
|
|||
config
|
||||
} = this.props.DiscoveryStream;
|
||||
const topicSelectionEnabled = this.props.Prefs.values["discoverystream.topicSelection.enabled"];
|
||||
const reportContentEnabled = this.props.Prefs.values["discoverystream.reportContent.enabled"];
|
||||
const reportAdsEnabled = this.props.Prefs.values["discoverystream.reportAds.enabled"];
|
||||
const spocsEnabled = this.props.Prefs.values["unifiedAds.spocs.enabled"];
|
||||
|
||||
// Allow rendering without extracting special components
|
||||
if (!config.collapsible) {
|
||||
|
@ -11474,14 +11474,12 @@ class _DiscoveryStreamBase extends (external_React_default()).PureComponent {
|
|||
sectionTitle = "Editor’s Picks";
|
||||
}
|
||||
}
|
||||
|
||||
// Render a DS-style TopSites then the rest if any in a collapsible section
|
||||
const {
|
||||
DiscoveryStream
|
||||
} = this.props;
|
||||
return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, this.props.DiscoveryStream.isPrivacyInfoModalVisible && /*#__PURE__*/external_React_default().createElement(DSPrivacyModal, {
|
||||
dispatch: this.props.dispatch
|
||||
}), reportContentEnabled && /*#__PURE__*/external_React_default().createElement(ReportContent, {
|
||||
}), (reportAdsEnabled && spocsEnabled || sectionsEnabled) && /*#__PURE__*/external_React_default().createElement(ReportContent, {
|
||||
spocs: DiscoveryStream.spocs
|
||||
}), topSites && this.renderLayout([{
|
||||
width: 12,
|
||||
|
|
|
@ -610,10 +610,9 @@ export const PREFS_CONFIG = new Map([
|
|||
},
|
||||
],
|
||||
[
|
||||
"discoverystream.reportContent.enabled",
|
||||
"discoverystream.reportAds.enabled",
|
||||
{
|
||||
title:
|
||||
"Boolean flag to enable reporting content and ads from the context menu",
|
||||
title: "Boolean flag to enable reporting ads from the context menu",
|
||||
value: false,
|
||||
},
|
||||
],
|
||||
|
|
|
@ -11,9 +11,7 @@ describe("<AdBannerContextMenu>", () => {
|
|||
spoc: { url: "https://www.test.com/", shim: "aaabbbcccddd" },
|
||||
position: 1,
|
||||
type: "billboard",
|
||||
prefs: {
|
||||
"discoverystream.reportContent.enabled": true,
|
||||
},
|
||||
prefs: {},
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
|
@ -53,8 +51,34 @@ describe("<AdBannerContextMenu>", () => {
|
|||
].forEach(prop => assert.property(linkMenuProps, prop));
|
||||
});
|
||||
|
||||
it("should pass through the correct menu options to LinkMenu for ad banners", () => {
|
||||
const reportPref = props.prefs["discoverystream.reportContent.enabled"];
|
||||
it("should pass through the correct menu options to LinkMenu for ad banners with reporting INCLUDED", () => {
|
||||
const propsWithReporting = {
|
||||
...props,
|
||||
showAdReporting: true,
|
||||
};
|
||||
wrapper = shallow(<AdBannerContextMenu {...propsWithReporting} />);
|
||||
wrapper.find("moz-button").simulate("click", {
|
||||
preventDefault: () => {},
|
||||
});
|
||||
const linkMenuProps = wrapper.find(LinkMenu).props();
|
||||
|
||||
const linkMenuOptions = [
|
||||
"BlockAdUrl",
|
||||
"ReportAd",
|
||||
"ManageSponsoredContent",
|
||||
"OurSponsorsAndYourPrivacy",
|
||||
];
|
||||
|
||||
assert.deepEqual(linkMenuProps.options, linkMenuOptions);
|
||||
});
|
||||
|
||||
it("should pass through correct menu options to LinkMenu for ad banner with reporting EXCLUDED", () => {
|
||||
const propsWithoutReporting = {
|
||||
...props,
|
||||
showAdReporting: false,
|
||||
};
|
||||
|
||||
wrapper = shallow(<AdBannerContextMenu {...propsWithoutReporting} />);
|
||||
wrapper.find("moz-button").simulate("click", {
|
||||
preventDefault: () => {},
|
||||
});
|
||||
|
@ -66,18 +90,7 @@ describe("<AdBannerContextMenu>", () => {
|
|||
"OurSponsorsAndYourPrivacy",
|
||||
];
|
||||
|
||||
const optionsWithReporting = [
|
||||
"BlockAdUrl",
|
||||
"ReportAd",
|
||||
"ManageSponsoredContent",
|
||||
"OurSponsorsAndYourPrivacy",
|
||||
];
|
||||
|
||||
const expectedOptions = reportPref
|
||||
? optionsWithReporting
|
||||
: linkMenuOptions;
|
||||
|
||||
assert.deepEqual(linkMenuProps.options, expectedOptions);
|
||||
assert.deepEqual(linkMenuProps.options, linkMenuOptions);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"af": {
|
||||
"pin": false,
|
||||
|
@ -37,7 +37,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"an": {
|
||||
"pin": false,
|
||||
|
@ -57,7 +57,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ar": {
|
||||
"pin": false,
|
||||
|
@ -77,7 +77,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ast": {
|
||||
"pin": false,
|
||||
|
@ -97,7 +97,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"az": {
|
||||
"pin": false,
|
||||
|
@ -117,7 +117,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"be": {
|
||||
"pin": false,
|
||||
|
@ -137,7 +137,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"bg": {
|
||||
"pin": false,
|
||||
|
@ -157,7 +157,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"bn": {
|
||||
"pin": false,
|
||||
|
@ -177,7 +177,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"bo": {
|
||||
"pin": false,
|
||||
|
@ -197,7 +197,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"br": {
|
||||
"pin": false,
|
||||
|
@ -217,7 +217,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"brx": {
|
||||
"pin": false,
|
||||
|
@ -237,7 +237,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"bs": {
|
||||
"pin": false,
|
||||
|
@ -257,7 +257,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ca": {
|
||||
"pin": false,
|
||||
|
@ -277,7 +277,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ca-valencia": {
|
||||
"pin": false,
|
||||
|
@ -297,7 +297,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"cak": {
|
||||
"pin": false,
|
||||
|
@ -317,7 +317,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ckb": {
|
||||
"pin": false,
|
||||
|
@ -337,7 +337,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"cs": {
|
||||
"pin": false,
|
||||
|
@ -357,7 +357,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"cy": {
|
||||
"pin": false,
|
||||
|
@ -377,7 +377,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"da": {
|
||||
"pin": false,
|
||||
|
@ -397,7 +397,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"de": {
|
||||
"pin": false,
|
||||
|
@ -417,7 +417,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"dsb": {
|
||||
"pin": false,
|
||||
|
@ -437,7 +437,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"el": {
|
||||
"pin": false,
|
||||
|
@ -457,7 +457,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"en-CA": {
|
||||
"pin": false,
|
||||
|
@ -477,7 +477,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"en-GB": {
|
||||
"pin": false,
|
||||
|
@ -497,7 +497,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"eo": {
|
||||
"pin": false,
|
||||
|
@ -517,7 +517,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"es-AR": {
|
||||
"pin": false,
|
||||
|
@ -537,7 +537,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"es-CL": {
|
||||
"pin": false,
|
||||
|
@ -557,7 +557,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"es-ES": {
|
||||
"pin": false,
|
||||
|
@ -577,7 +577,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"es-MX": {
|
||||
"pin": false,
|
||||
|
@ -597,7 +597,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"et": {
|
||||
"pin": false,
|
||||
|
@ -617,7 +617,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"eu": {
|
||||
"pin": false,
|
||||
|
@ -637,7 +637,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"fa": {
|
||||
"pin": false,
|
||||
|
@ -657,7 +657,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ff": {
|
||||
"pin": false,
|
||||
|
@ -677,7 +677,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"fi": {
|
||||
"pin": false,
|
||||
|
@ -697,7 +697,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"fr": {
|
||||
"pin": false,
|
||||
|
@ -717,7 +717,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"fur": {
|
||||
"pin": false,
|
||||
|
@ -737,7 +737,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"fy-NL": {
|
||||
"pin": false,
|
||||
|
@ -757,7 +757,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ga-IE": {
|
||||
"pin": false,
|
||||
|
@ -777,7 +777,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"gd": {
|
||||
"pin": false,
|
||||
|
@ -797,7 +797,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"gl": {
|
||||
"pin": false,
|
||||
|
@ -817,7 +817,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"gn": {
|
||||
"pin": false,
|
||||
|
@ -837,7 +837,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"gu-IN": {
|
||||
"pin": false,
|
||||
|
@ -857,7 +857,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"he": {
|
||||
"pin": false,
|
||||
|
@ -877,7 +877,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hi-IN": {
|
||||
"pin": false,
|
||||
|
@ -897,7 +897,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hr": {
|
||||
"pin": false,
|
||||
|
@ -917,7 +917,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hsb": {
|
||||
"pin": false,
|
||||
|
@ -937,7 +937,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hu": {
|
||||
"pin": false,
|
||||
|
@ -957,7 +957,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hy-AM": {
|
||||
"pin": false,
|
||||
|
@ -977,7 +977,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hye": {
|
||||
"pin": false,
|
||||
|
@ -997,7 +997,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ia": {
|
||||
"pin": false,
|
||||
|
@ -1017,7 +1017,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"id": {
|
||||
"pin": false,
|
||||
|
@ -1037,7 +1037,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"is": {
|
||||
"pin": false,
|
||||
|
@ -1057,7 +1057,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"it": {
|
||||
"pin": false,
|
||||
|
@ -1077,7 +1077,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ja": {
|
||||
"pin": false,
|
||||
|
@ -1095,7 +1095,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ja-JP-mac": {
|
||||
"pin": false,
|
||||
|
@ -1103,7 +1103,7 @@
|
|||
"macosx64",
|
||||
"macosx64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ka": {
|
||||
"pin": false,
|
||||
|
@ -1123,7 +1123,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"kab": {
|
||||
"pin": false,
|
||||
|
@ -1143,7 +1143,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"kk": {
|
||||
"pin": false,
|
||||
|
@ -1163,7 +1163,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"km": {
|
||||
"pin": false,
|
||||
|
@ -1183,7 +1183,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"kn": {
|
||||
"pin": false,
|
||||
|
@ -1203,7 +1203,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ko": {
|
||||
"pin": false,
|
||||
|
@ -1223,7 +1223,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"lij": {
|
||||
"pin": false,
|
||||
|
@ -1243,7 +1243,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"lo": {
|
||||
"pin": false,
|
||||
|
@ -1263,7 +1263,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"lt": {
|
||||
"pin": false,
|
||||
|
@ -1283,7 +1283,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ltg": {
|
||||
"pin": false,
|
||||
|
@ -1303,7 +1303,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"lv": {
|
||||
"pin": false,
|
||||
|
@ -1323,7 +1323,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"meh": {
|
||||
"pin": false,
|
||||
|
@ -1343,7 +1343,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"mk": {
|
||||
"pin": false,
|
||||
|
@ -1363,7 +1363,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ml": {
|
||||
"pin": false,
|
||||
|
@ -1383,7 +1383,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"mr": {
|
||||
"pin": false,
|
||||
|
@ -1403,7 +1403,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ms": {
|
||||
"pin": false,
|
||||
|
@ -1423,7 +1423,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"my": {
|
||||
"pin": false,
|
||||
|
@ -1443,7 +1443,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"nb-NO": {
|
||||
"pin": false,
|
||||
|
@ -1463,7 +1463,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ne-NP": {
|
||||
"pin": false,
|
||||
|
@ -1483,7 +1483,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"nl": {
|
||||
"pin": false,
|
||||
|
@ -1503,7 +1503,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"nn-NO": {
|
||||
"pin": false,
|
||||
|
@ -1523,7 +1523,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"oc": {
|
||||
"pin": false,
|
||||
|
@ -1543,7 +1543,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"pa-IN": {
|
||||
"pin": false,
|
||||
|
@ -1563,7 +1563,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"pl": {
|
||||
"pin": false,
|
||||
|
@ -1583,7 +1583,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"pt-BR": {
|
||||
"pin": false,
|
||||
|
@ -1603,7 +1603,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"pt-PT": {
|
||||
"pin": false,
|
||||
|
@ -1623,7 +1623,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"rm": {
|
||||
"pin": false,
|
||||
|
@ -1643,7 +1643,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ro": {
|
||||
"pin": false,
|
||||
|
@ -1663,7 +1663,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ru": {
|
||||
"pin": false,
|
||||
|
@ -1683,7 +1683,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sat": {
|
||||
"pin": false,
|
||||
|
@ -1703,7 +1703,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sc": {
|
||||
"pin": false,
|
||||
|
@ -1723,7 +1723,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"scn": {
|
||||
"pin": false,
|
||||
|
@ -1743,7 +1743,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sco": {
|
||||
"pin": false,
|
||||
|
@ -1763,7 +1763,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"si": {
|
||||
"pin": false,
|
||||
|
@ -1783,7 +1783,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sk": {
|
||||
"pin": false,
|
||||
|
@ -1803,7 +1803,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"skr": {
|
||||
"pin": false,
|
||||
|
@ -1823,7 +1823,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sl": {
|
||||
"pin": false,
|
||||
|
@ -1843,7 +1843,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"son": {
|
||||
"pin": false,
|
||||
|
@ -1863,7 +1863,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sq": {
|
||||
"pin": false,
|
||||
|
@ -1883,7 +1883,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sr": {
|
||||
"pin": false,
|
||||
|
@ -1903,7 +1903,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sv-SE": {
|
||||
"pin": false,
|
||||
|
@ -1923,7 +1923,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"szl": {
|
||||
"pin": false,
|
||||
|
@ -1943,7 +1943,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ta": {
|
||||
"pin": false,
|
||||
|
@ -1963,7 +1963,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"te": {
|
||||
"pin": false,
|
||||
|
@ -1983,7 +1983,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"tg": {
|
||||
"pin": false,
|
||||
|
@ -2003,7 +2003,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"th": {
|
||||
"pin": false,
|
||||
|
@ -2023,7 +2023,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"tl": {
|
||||
"pin": false,
|
||||
|
@ -2043,7 +2043,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"tr": {
|
||||
"pin": false,
|
||||
|
@ -2063,7 +2063,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"trs": {
|
||||
"pin": false,
|
||||
|
@ -2083,7 +2083,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"uk": {
|
||||
"pin": false,
|
||||
|
@ -2103,7 +2103,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ur": {
|
||||
"pin": false,
|
||||
|
@ -2123,7 +2123,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"uz": {
|
||||
"pin": false,
|
||||
|
@ -2143,7 +2143,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"vi": {
|
||||
"pin": false,
|
||||
|
@ -2163,7 +2163,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"wo": {
|
||||
"pin": false,
|
||||
|
@ -2183,7 +2183,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"xh": {
|
||||
"pin": false,
|
||||
|
@ -2203,7 +2203,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"zh-CN": {
|
||||
"pin": false,
|
||||
|
@ -2223,7 +2223,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"zh-TW": {
|
||||
"pin": false,
|
||||
|
@ -2243,6 +2243,6 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
}
|
||||
}
|
|
@ -2849,7 +2849,7 @@ void nsPIDOMWindowInner::TryToCacheTopInnerWindow() {
|
|||
}
|
||||
}
|
||||
|
||||
void nsPIDOMWindowInner::UpdateActiveIndexedDBDatabaseCount(int32_t aDelta) {
|
||||
void nsGlobalWindowInner::UpdateActiveIndexedDBDatabaseCount(int32_t aDelta) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
if (aDelta == 0) {
|
||||
|
@ -2865,7 +2865,7 @@ void nsPIDOMWindowInner::UpdateActiveIndexedDBDatabaseCount(int32_t aDelta) {
|
|||
counter += aDelta;
|
||||
}
|
||||
|
||||
bool nsGlobalWindowInner::HasActiveIndexedDBDatabases() {
|
||||
bool nsGlobalWindowInner::HasActiveIndexedDBDatabases() const {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
return mTopInnerWindow ? mTopInnerWindow->mNumOfIndexedDBDatabases > 0
|
||||
|
|
|
@ -335,12 +335,15 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget,
|
|||
void Freeze(bool aIncludeSubWindows = true);
|
||||
void Thaw(bool aIncludeSubWindows = true);
|
||||
virtual bool IsFrozen() const override;
|
||||
virtual bool HasActiveIndexedDBDatabases() override;
|
||||
virtual bool HasActiveIndexedDBDatabases() const override;
|
||||
virtual bool HasActivePeerConnections() override;
|
||||
virtual bool HasOpenWebSockets() const override;
|
||||
virtual bool HasScheduledNormalOrHighPriorityWebTasks() const override;
|
||||
void SyncStateFromParentWindow();
|
||||
virtual void UpdateWebSocketCount(int32_t aDelta) override;
|
||||
// Increase/Decrease the number of active IndexedDB databases for the
|
||||
// decision making of timeout-throttling.
|
||||
virtual void UpdateActiveIndexedDBDatabaseCount(int32_t aDelta) override;
|
||||
|
||||
// Called on the current inner window of a browsing context when its
|
||||
// background state changes according to selected tab or visibility of the
|
||||
|
|
|
@ -336,7 +336,7 @@ class nsIGlobalObject : public nsISupports {
|
|||
}
|
||||
// Return true if there is any active IndexedDB databases which could block
|
||||
// timeout-throttling.
|
||||
virtual bool HasActiveIndexedDBDatabases() { return false; }
|
||||
virtual bool HasActiveIndexedDBDatabases() const { return false; }
|
||||
/**
|
||||
* Check whether the active peer connection count is non-zero.
|
||||
*/
|
||||
|
@ -352,6 +352,9 @@ class nsIGlobalObject : public nsISupports {
|
|||
}
|
||||
|
||||
virtual void UpdateWebSocketCount(int32_t aDelta) {};
|
||||
// Increase/Decrease the number of active IndexedDB databases for the
|
||||
// decision making of timeout-throttling.
|
||||
virtual void UpdateActiveIndexedDBDatabaseCount(int32_t aDelta) {}
|
||||
|
||||
/**
|
||||
* Report a localized error message to the error console. Currently this
|
||||
|
|
|
@ -340,10 +340,6 @@ class nsPIDOMWindowInner : public mozIDOMWindow {
|
|||
// indexedDB counters.
|
||||
void TryToCacheTopInnerWindow();
|
||||
|
||||
// Increase/Decrease the number of active IndexedDB databases for the
|
||||
// decision making of timeout-throttling.
|
||||
void UpdateActiveIndexedDBDatabaseCount(int32_t aDelta);
|
||||
|
||||
mozilla::Maybe<mozilla::dom::ClientInfo> GetClientInfo() const;
|
||||
mozilla::Maybe<mozilla::dom::ClientState> GetClientState() const;
|
||||
mozilla::Maybe<mozilla::dom::ServiceWorkerDescriptor> GetController() const;
|
||||
|
|
|
@ -178,6 +178,7 @@ interface WindowGlobalChild {
|
|||
readonly attribute boolean isInProcess;
|
||||
readonly attribute BrowsingContext browsingContext;
|
||||
readonly attribute WindowContext windowContext;
|
||||
readonly attribute WindowProxy? contentWindow;
|
||||
|
||||
readonly attribute boolean isCurrentGlobal;
|
||||
|
||||
|
|
|
@ -404,8 +404,8 @@ void IDBFactory::UpdateActiveDatabaseCount(int32_t aDelta) {
|
|||
(mActiveDatabaseCount + aDelta) < mActiveDatabaseCount);
|
||||
mActiveDatabaseCount += aDelta;
|
||||
|
||||
if (nsGlobalWindowInner* win = GetOwnerWindow()) {
|
||||
win->UpdateActiveIndexedDBDatabaseCount(aDelta);
|
||||
if (nsIGlobalObject* global = GetOwnerGlobal()) {
|
||||
global->UpdateActiveIndexedDBDatabaseCount(aDelta);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -258,6 +258,13 @@ dom::BrowsingContext* WindowGlobalChild::BrowsingContext() {
|
|||
return mWindowContext->GetBrowsingContext();
|
||||
}
|
||||
|
||||
Nullable<WindowProxyHolder> WindowGlobalChild::GetContentWindow() {
|
||||
if (IsCurrentGlobal()) {
|
||||
return WindowProxyHolder(BrowsingContext());
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
uint64_t WindowGlobalChild::InnerWindowId() {
|
||||
return mWindowContext->InnerWindowId();
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "nsWrapperCache.h"
|
||||
#include "mozilla/dom/Document.h"
|
||||
#include "mozilla/dom/WindowGlobalActor.h"
|
||||
#include "mozilla/dom/WindowProxyHolder.h"
|
||||
|
||||
class nsGlobalWindowInner;
|
||||
class nsDocShell;
|
||||
|
@ -53,6 +54,8 @@ class WindowGlobalChild final : public WindowGlobalActor,
|
|||
dom::WindowContext* WindowContext() const { return mWindowContext; }
|
||||
nsGlobalWindowInner* GetWindowGlobal() const { return mWindowGlobal; }
|
||||
|
||||
Nullable<WindowProxyHolder> GetContentWindow();
|
||||
|
||||
// Has this actor been shut down
|
||||
bool IsClosed() { return !CanSend(); }
|
||||
void Destroy();
|
||||
|
|
|
@ -2699,12 +2699,7 @@ void QuotaManager::UpdateOriginAccessTime(
|
|||
|
||||
MutexAutoUnlock autoUnlock(mQuotaMutex);
|
||||
|
||||
auto op = CreateSaveOriginAccessTimeOp(WrapMovingNotNullUnchecked(this),
|
||||
aOriginMetadata, timestamp);
|
||||
|
||||
RegisterNormalOriginOp(*op);
|
||||
|
||||
op->RunImmediately();
|
||||
SaveOriginAccessTime(aOriginMetadata, timestamp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6589,6 +6584,21 @@ RefPtr<BoolPromise> QuotaManager::InitializeAllTemporaryOrigins() {
|
|||
return promise;
|
||||
}
|
||||
|
||||
RefPtr<BoolPromise> QuotaManager::SaveOriginAccessTime(
|
||||
const OriginMetadata& aOriginMetadata, int64_t aTimestamp) {
|
||||
AssertIsOnOwningThread();
|
||||
MOZ_ASSERT(aOriginMetadata.mPersistenceType != PERSISTENCE_TYPE_PERSISTENT);
|
||||
|
||||
auto saveOriginAccessTimeOp = CreateSaveOriginAccessTimeOp(
|
||||
WrapMovingNotNullUnchecked(this), aOriginMetadata, aTimestamp);
|
||||
|
||||
RegisterNormalOriginOp(*saveOriginAccessTimeOp);
|
||||
|
||||
saveOriginAccessTimeOp->RunImmediately();
|
||||
|
||||
return saveOriginAccessTimeOp->OnResults();
|
||||
}
|
||||
|
||||
RefPtr<OriginUsageMetadataArrayPromise> QuotaManager::GetUsage(
|
||||
bool aGetAll, RefPtr<BoolPromise> aOnCancelPromise) {
|
||||
AssertIsOnOwningThread();
|
||||
|
|
|
@ -114,7 +114,7 @@ class FinalizeOriginEvictionOp : public OriginOperationBase {
|
|||
};
|
||||
|
||||
class SaveOriginAccessTimeOp
|
||||
: public OpenStorageDirectoryHelper<NormalOriginOperationBase> {
|
||||
: public OpenStorageDirectoryHelper<ResolvableNormalOriginOp<bool>> {
|
||||
const OriginMetadata mOriginMetadata;
|
||||
int64_t mTimestamp;
|
||||
|
||||
|
@ -129,8 +129,6 @@ class SaveOriginAccessTimeOp
|
|||
AssertIsOnOwningThread();
|
||||
}
|
||||
|
||||
NS_INLINE_DECL_REFCOUNTING(SaveOriginAccessTimeOp, override)
|
||||
|
||||
private:
|
||||
~SaveOriginAccessTimeOp() = default;
|
||||
|
||||
|
@ -138,7 +136,7 @@ class SaveOriginAccessTimeOp
|
|||
|
||||
virtual nsresult DoDirectoryWork(QuotaManager& aQuotaManager) override;
|
||||
|
||||
virtual void SendResults() override;
|
||||
bool UnwrapResolveValue() override { return true; }
|
||||
|
||||
void CloseDirectory() override;
|
||||
};
|
||||
|
@ -1006,7 +1004,7 @@ RefPtr<OriginOperationBase> CreateFinalizeOriginEvictionOp(
|
|||
std::move(aLocks));
|
||||
}
|
||||
|
||||
RefPtr<NormalOriginOperationBase> CreateSaveOriginAccessTimeOp(
|
||||
RefPtr<ResolvableNormalOriginOp<bool>> CreateSaveOriginAccessTimeOp(
|
||||
MovingNotNull<RefPtr<QuotaManager>> aQuotaManager,
|
||||
const OriginMetadata& aOriginMetadata, int64_t aTimestamp) {
|
||||
return MakeRefPtr<SaveOriginAccessTimeOp>(std::move(aQuotaManager),
|
||||
|
@ -1331,8 +1329,6 @@ nsresult SaveOriginAccessTimeOp::DoDirectoryWork(QuotaManager& aQuotaManager) {
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
void SaveOriginAccessTimeOp::SendResults() {}
|
||||
|
||||
void SaveOriginAccessTimeOp::CloseDirectory() {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ RefPtr<OriginOperationBase> CreateFinalizeOriginEvictionOp(
|
|||
MovingNotNull<RefPtr<QuotaManager>> aQuotaManager,
|
||||
nsTArray<RefPtr<OriginDirectoryLock>>&& aLocks);
|
||||
|
||||
RefPtr<NormalOriginOperationBase> CreateSaveOriginAccessTimeOp(
|
||||
RefPtr<ResolvableNormalOriginOp<bool>> CreateSaveOriginAccessTimeOp(
|
||||
MovingNotNull<RefPtr<QuotaManager>> aQuotaManager,
|
||||
const OriginMetadata& aOriginMetadata, int64_t aTimestamp);
|
||||
|
||||
|
|
|
@ -510,6 +510,9 @@ class QuotaManager final : public BackgroundThreadObject {
|
|||
public:
|
||||
RefPtr<BoolPromise> InitializeAllTemporaryOrigins();
|
||||
|
||||
RefPtr<BoolPromise> SaveOriginAccessTime(
|
||||
const OriginMetadata& aOriginMetadata, int64_t aTimestamp);
|
||||
|
||||
RefPtr<OriginUsageMetadataArrayPromise> GetUsage(
|
||||
bool aGetAll, RefPtr<BoolPromise> aOnCancelPromise = nullptr);
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "mozilla/dom/quota/UniversalDirectoryLock.h"
|
||||
#include "mozilla/gtest/MozAssertions.h"
|
||||
#include "nsFmtString.h"
|
||||
#include "prtime.h"
|
||||
#include "QuotaManagerDependencyFixture.h"
|
||||
#include "QuotaManagerTestHelpers.h"
|
||||
|
||||
|
@ -1989,6 +1990,39 @@ TEST_F(TestQuotaManager,
|
|||
ASSERT_NO_FATAL_FAILURE(ShutdownStorage());
|
||||
}
|
||||
|
||||
// Tests the availability of SaveOriginAccessTime and verifies that calling it
|
||||
// does not trigger temporary storage or origin initialization.
|
||||
TEST_F(TestQuotaManager, SaveOriginAccessTime_Simple) {
|
||||
auto testOriginMetadata = GetTestOriginMetadata();
|
||||
|
||||
ASSERT_NO_FATAL_FAILURE(ShutdownStorage());
|
||||
|
||||
ASSERT_NO_FATAL_FAILURE(AssertStorageNotInitialized());
|
||||
ASSERT_NO_FATAL_FAILURE(AssertTemporaryStorageNotInitialized());
|
||||
ASSERT_NO_FATAL_FAILURE(
|
||||
AssertTemporaryOriginNotInitialized(testOriginMetadata));
|
||||
|
||||
PerformOnBackgroundThread([testOriginMetadata]() {
|
||||
QuotaManager* quotaManager = QuotaManager::Get();
|
||||
ASSERT_TRUE(quotaManager);
|
||||
|
||||
{
|
||||
int64_t timestamp = PR_Now();
|
||||
|
||||
auto value = Await(
|
||||
quotaManager->SaveOriginAccessTime(testOriginMetadata, timestamp));
|
||||
ASSERT_TRUE(value.IsResolve());
|
||||
}
|
||||
});
|
||||
|
||||
ASSERT_NO_FATAL_FAILURE(AssertStorageInitialized());
|
||||
ASSERT_NO_FATAL_FAILURE(AssertTemporaryStorageNotInitialized());
|
||||
ASSERT_NO_FATAL_FAILURE(
|
||||
AssertTemporaryOriginNotInitialized(testOriginMetadata));
|
||||
|
||||
ASSERT_NO_FATAL_FAILURE(ShutdownStorage());
|
||||
}
|
||||
|
||||
// Test simple ClearStoragesForOrigin.
|
||||
TEST_F(TestQuotaManager, ClearStoragesForOrigin_Simple) {
|
||||
ASSERT_NO_FATAL_FAILURE(ShutdownStorage());
|
||||
|
|
|
@ -1959,7 +1959,6 @@ void nsContentSecurityUtils::AssertChromePageHasCSP(Document* aDocument) {
|
|||
"chrome://global/content/appPicker.xhtml"_ns,
|
||||
"chrome://global/content/backgroundPageThumbs.xhtml"_ns,
|
||||
"chrome://global/content/megalist/megalist.html"_ns,
|
||||
"chrome://global/content/selectDialog.xhtml"_ns,
|
||||
// Test files
|
||||
"chrome://mochikit/"_ns,
|
||||
"chrome://mochitests/"_ns,
|
||||
|
|
|
@ -37,7 +37,8 @@ UniquePtr<ExternalTexture> ExternalTexture::Create(
|
|||
|
||||
UniquePtr<ExternalTexture> texture;
|
||||
#ifdef XP_WIN
|
||||
texture = ExternalTextureD3D11::Create(aWidth, aHeight, aFormat, aUsage);
|
||||
texture = ExternalTextureD3D11::Create(aParent, aDeviceId, aWidth, aHeight,
|
||||
aFormat, aUsage);
|
||||
#elif defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
|
||||
texture = ExternalTextureDMABuf::Create(aParent, aDeviceId, aWidth, aHeight,
|
||||
aFormat, aUsage);
|
||||
|
|
|
@ -43,6 +43,7 @@ class ExtTex : public ObjectBase {
|
|||
void Cleanup() {}
|
||||
};
|
||||
|
||||
class ExternalTextureD3D11;
|
||||
class ExternalTextureDMABuf;
|
||||
class ExternalTextureMacIOSurface;
|
||||
class WebGPUParent;
|
||||
|
@ -62,10 +63,7 @@ class ExternalTexture {
|
|||
const ffi::WGPUTextureUsages aUsage);
|
||||
virtual ~ExternalTexture();
|
||||
|
||||
virtual void* GetExternalTextureHandle() { return nullptr; }
|
||||
|
||||
virtual Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor(
|
||||
Maybe<gfx::FenceInfo>& aFenceInfo) = 0;
|
||||
virtual Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() = 0;
|
||||
|
||||
virtual void GetSnapshot(const ipc::Shmem& aDestShmem,
|
||||
const gfx::IntSize& aSize) {}
|
||||
|
@ -76,6 +74,8 @@ class ExternalTexture {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
virtual ExternalTextureD3D11* AsExternalTextureD3D11() { return nullptr; }
|
||||
|
||||
gfx::IntSize GetSize() { return gfx::IntSize(mWidth, mHeight); }
|
||||
|
||||
void SetSubmissionIndex(uint64_t aSubmissionIndex);
|
||||
|
@ -114,8 +114,7 @@ class ExternalTextureReadBackPresent final : public ExternalTexture {
|
|||
const ffi::WGPUTextureUsages aUsage);
|
||||
virtual ~ExternalTextureReadBackPresent();
|
||||
|
||||
Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor(
|
||||
Maybe<gfx::FenceInfo>& aFenceInfo) override {
|
||||
Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override {
|
||||
return Nothing();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -9,15 +9,40 @@
|
|||
|
||||
#include "mozilla/gfx/DeviceManagerDx.h"
|
||||
#include "mozilla/gfx/Logging.h"
|
||||
#include "mozilla/layers/FenceD3D11.h"
|
||||
#include "mozilla/layers/GpuProcessD3D11FencesHolderMap.h"
|
||||
#include "mozilla/layers/ImageDataSerializer.h"
|
||||
#include "mozilla/webgpu/WebGPUParent.h"
|
||||
|
||||
namespace mozilla::webgpu {
|
||||
|
||||
// static
|
||||
UniquePtr<ExternalTextureD3D11> ExternalTextureD3D11::Create(
|
||||
WebGPUParent* aParent, const ffi::WGPUDeviceId aDeviceId,
|
||||
const uint32_t aWidth, const uint32_t aHeight,
|
||||
const struct ffi::WGPUTextureFormat aFormat,
|
||||
const ffi::WGPUTextureUsages aUsage) {
|
||||
auto* fencesHolderMap = layers::GpuProcessD3D11FencesHolderMap::Get();
|
||||
if (!fencesHolderMap) {
|
||||
MOZ_ASSERT_UNREACHABLE("unexpected to be called");
|
||||
gfxCriticalNoteOnce << "Failed to get FencesHolderMap";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RefPtr<gfx::FileHandleWrapper> fenceHandle =
|
||||
aParent->GetDeviceFenceHandle(aDeviceId);
|
||||
if (!fenceHandle) {
|
||||
gfxCriticalNoteOnce << "Failed to get fenceHandle";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RefPtr<layers::FenceD3D11> fence =
|
||||
layers::FenceD3D11::CreateFromHandle(fenceHandle);
|
||||
if (!fence) {
|
||||
gfxCriticalNoteOnce << "Failed create FenceD3D11";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const RefPtr<ID3D11Device> d3d11Device =
|
||||
gfx::DeviceManagerDx::Get()->GetCompositorDevice();
|
||||
if (!d3d11Device) {
|
||||
|
@ -53,55 +78,74 @@ UniquePtr<ExternalTextureD3D11> ExternalTextureD3D11::Create(
|
|||
texture->QueryInterface((IDXGIResource1**)getter_AddRefs(resource));
|
||||
if (!resource) {
|
||||
gfxCriticalNoteOnce << "Failed to get IDXGIResource";
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
HANDLE sharedHandle;
|
||||
hr = resource->CreateSharedHandle(
|
||||
nullptr, DXGI_SHARED_RESOURCE_READ | DXGI_SHARED_RESOURCE_WRITE, nullptr,
|
||||
&sharedHandle);
|
||||
if (FAILED(hr)) {
|
||||
if (FAILED(hr) || !sharedHandle) {
|
||||
gfxCriticalNoteOnce << "GetSharedHandle failed: " << gfx::hexa(hr);
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RefPtr<gfx::FileHandleWrapper> handle =
|
||||
new gfx::FileHandleWrapper(UniqueFileHandle(sharedHandle));
|
||||
|
||||
auto fencesHolderId = layers::GpuProcessFencesHolderId::GetNext();
|
||||
fencesHolderMap->Register(fencesHolderId);
|
||||
|
||||
return MakeUnique<ExternalTextureD3D11>(aWidth, aHeight, aFormat, aUsage,
|
||||
texture, std::move(handle));
|
||||
texture, std::move(handle),
|
||||
fencesHolderId, std::move(fence));
|
||||
}
|
||||
|
||||
ExternalTextureD3D11::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)
|
||||
RefPtr<gfx::FileHandleWrapper>&& aSharedHandle,
|
||||
const layers::GpuProcessFencesHolderId aFencesHolderId,
|
||||
RefPtr<layers::FenceD3D11>&& aWriteFence)
|
||||
: ExternalTexture(aWidth, aHeight, aFormat, aUsage),
|
||||
mTexture(aTexture),
|
||||
mSharedHandle(std::move(aSharedHandle)) {
|
||||
mSharedHandle(std::move(aSharedHandle)),
|
||||
mFencesHolderId(aFencesHolderId),
|
||||
mWriteFence(std::move(aWriteFence)) {
|
||||
MOZ_ASSERT(mTexture);
|
||||
}
|
||||
|
||||
ExternalTextureD3D11::~ExternalTextureD3D11() {}
|
||||
|
||||
void* ExternalTextureD3D11::GetExternalTextureHandle() {
|
||||
if (!mSharedHandle) {
|
||||
return nullptr;
|
||||
}
|
||||
RefPtr<ID3D11Device> device;
|
||||
mTexture->GetDevice(getter_AddRefs(device));
|
||||
auto* fencesHolderMap = layers::GpuProcessD3D11FencesHolderMap::Get();
|
||||
MOZ_ASSERT(fencesHolderMap);
|
||||
|
||||
// XXX deliver fences to wgpu
|
||||
fencesHolderMap->WaitAllFencesAndForget(mFencesHolderId, device);
|
||||
|
||||
return mSharedHandle->GetHandle();
|
||||
}
|
||||
|
||||
Maybe<layers::SurfaceDescriptor> ExternalTextureD3D11::ToSurfaceDescriptor(
|
||||
Maybe<gfx::FenceInfo>& aFenceInfo) {
|
||||
Maybe<layers::SurfaceDescriptor> ExternalTextureD3D11::ToSurfaceDescriptor() {
|
||||
MOZ_ASSERT(mSubmissionIndex > 0);
|
||||
|
||||
mWriteFence->Update(mSubmissionIndex);
|
||||
|
||||
auto* fencesHolderMap = layers::GpuProcessD3D11FencesHolderMap::Get();
|
||||
MOZ_ASSERT(fencesHolderMap);
|
||||
fencesHolderMap->SetWriteFence(mFencesHolderId, mWriteFence);
|
||||
|
||||
const auto format = gfx::SurfaceFormat::B8G8R8A8;
|
||||
return Some(layers::SurfaceDescriptorD3D10(
|
||||
mSharedHandle,
|
||||
/* gpuProcessTextureId */ Nothing(),
|
||||
/* arrayIndex */ 0, format, gfx::IntSize(mWidth, mHeight),
|
||||
gfx::ColorSpace2::SRGB, gfx::ColorRange::FULL,
|
||||
/* hasKeyedMutex */ false, aFenceInfo));
|
||||
/* hasKeyedMutex */ false, Some(mFencesHolderId)));
|
||||
}
|
||||
|
||||
void ExternalTextureD3D11::GetSnapshot(const ipc::Shmem& aDestShmem,
|
||||
|
|
|
@ -13,11 +13,16 @@ struct ID3D11Texture2D;
|
|||
|
||||
namespace mozilla {
|
||||
|
||||
namespace layers {
|
||||
class FenceD3D11;
|
||||
} // namespace layers
|
||||
|
||||
namespace webgpu {
|
||||
|
||||
class ExternalTextureD3D11 final : public ExternalTexture {
|
||||
public:
|
||||
static UniquePtr<ExternalTextureD3D11> Create(
|
||||
WebGPUParent* aParent, const ffi::WGPUDeviceId aDeviceId,
|
||||
const uint32_t aWidth, const uint32_t aHeight,
|
||||
const struct ffi::WGPUTextureFormat aFormat,
|
||||
const ffi::WGPUTextureUsages aUsage);
|
||||
|
@ -26,20 +31,25 @@ class ExternalTextureD3D11 final : public ExternalTexture {
|
|||
const struct ffi::WGPUTextureFormat aFormat,
|
||||
const ffi::WGPUTextureUsages aUsage,
|
||||
const RefPtr<ID3D11Texture2D> aTexture,
|
||||
RefPtr<gfx::FileHandleWrapper>&& aSharedHandle);
|
||||
RefPtr<gfx::FileHandleWrapper>&& aSharedHandle,
|
||||
const layers::GpuProcessFencesHolderId aFencesHolderId,
|
||||
RefPtr<layers::FenceD3D11>&& aWriteFence);
|
||||
virtual ~ExternalTextureD3D11();
|
||||
|
||||
void* GetExternalTextureHandle() override;
|
||||
void* GetExternalTextureHandle();
|
||||
|
||||
Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor(
|
||||
Maybe<gfx::FenceInfo>& aFenceInfo) override;
|
||||
Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override;
|
||||
|
||||
void GetSnapshot(const ipc::Shmem& aDestShmem,
|
||||
const gfx::IntSize& aSize) override;
|
||||
|
||||
ExternalTextureD3D11* AsExternalTextureD3D11() override { return this; }
|
||||
|
||||
protected:
|
||||
const RefPtr<ID3D11Texture2D> mTexture;
|
||||
const RefPtr<gfx::FileHandleWrapper> mSharedHandle;
|
||||
const layers::GpuProcessFencesHolderId mFencesHolderId;
|
||||
const RefPtr<layers::FenceD3D11> mWriteFence;
|
||||
};
|
||||
|
||||
} // namespace webgpu
|
||||
|
|
|
@ -97,10 +97,7 @@ ExternalTextureDMABuf::ExternalTextureDMABuf(
|
|||
|
||||
ExternalTextureDMABuf::~ExternalTextureDMABuf() {}
|
||||
|
||||
void* ExternalTextureDMABuf::GetExternalTextureHandle() { return nullptr; }
|
||||
|
||||
Maybe<layers::SurfaceDescriptor> ExternalTextureDMABuf::ToSurfaceDescriptor(
|
||||
Maybe<gfx::FenceInfo>& aFenceInfo) {
|
||||
Maybe<layers::SurfaceDescriptor> ExternalTextureDMABuf::ToSurfaceDescriptor() {
|
||||
layers::SurfaceDescriptor sd;
|
||||
if (!mSurface->Serialize(sd)) {
|
||||
return Nothing();
|
||||
|
|
|
@ -35,10 +35,7 @@ class ExternalTextureDMABuf final : public ExternalTexture {
|
|||
const layers::SurfaceDescriptorDMABuf& aSurfaceDescriptor);
|
||||
virtual ~ExternalTextureDMABuf();
|
||||
|
||||
void* GetExternalTextureHandle() override;
|
||||
|
||||
Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor(
|
||||
Maybe<gfx::FenceInfo>& aFenceInfo) override;
|
||||
Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override;
|
||||
|
||||
void GetSnapshot(const ipc::Shmem& aDestShmem,
|
||||
const gfx::IntSize& aSize) override;
|
||||
|
|
|
@ -55,17 +55,12 @@ ExternalTextureMacIOSurface::ExternalTextureMacIOSurface(
|
|||
|
||||
ExternalTextureMacIOSurface::~ExternalTextureMacIOSurface() {}
|
||||
|
||||
void* ExternalTextureMacIOSurface::GetExternalTextureHandle() {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
uint32_t ExternalTextureMacIOSurface::GetIOSurfaceId() {
|
||||
return mSurface->GetIOSurfaceID();
|
||||
}
|
||||
|
||||
Maybe<layers::SurfaceDescriptor>
|
||||
ExternalTextureMacIOSurface::ToSurfaceDescriptor(
|
||||
Maybe<gfx::FenceInfo>& aFenceInfo) {
|
||||
ExternalTextureMacIOSurface::ToSurfaceDescriptor() {
|
||||
MOZ_ASSERT(mSubmissionIndex > 0);
|
||||
|
||||
RefPtr<layers::GpuFence> gpuFence;
|
||||
|
|
|
@ -32,10 +32,7 @@ class ExternalTextureMacIOSurface final : public ExternalTexture {
|
|||
RefPtr<MacIOSurface>&& aSurface);
|
||||
virtual ~ExternalTextureMacIOSurface();
|
||||
|
||||
void* GetExternalTextureHandle() override;
|
||||
|
||||
Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor(
|
||||
Maybe<gfx::FenceInfo>& aFenceInfo) override;
|
||||
Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override;
|
||||
|
||||
void GetSnapshot(const ipc::Shmem& aDestShmem,
|
||||
const gfx::IntSize& aSize) override;
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#if defined(XP_WIN)
|
||||
# include "mozilla/gfx/DeviceManagerDx.h"
|
||||
# include "mozilla/webgpu/ExternalTextureD3D11.h"
|
||||
#endif
|
||||
|
||||
#if defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)
|
||||
|
@ -86,7 +87,12 @@ extern void* wgpu_server_get_external_texture_handle(void* aParam,
|
|||
|
||||
void* sharedHandle = nullptr;
|
||||
#ifdef XP_WIN
|
||||
sharedHandle = texture->GetExternalTextureHandle();
|
||||
auto* textureD3D11 = texture->AsExternalTextureD3D11();
|
||||
if (!textureD3D11) {
|
||||
MOZ_ASSERT_UNREACHABLE("unexpected to be called");
|
||||
return nullptr;
|
||||
}
|
||||
sharedHandle = textureD3D11->GetExternalTextureHandle();
|
||||
if (!sharedHandle) {
|
||||
MOZ_ASSERT_UNREACHABLE("unexpected to be called");
|
||||
gfxCriticalNoteOnce << "Failed to get shared handle";
|
||||
|
@ -1428,19 +1434,11 @@ void WebGPUParent::PostExternalTexture(
|
|||
|
||||
const auto surfaceFormat = gfx::SurfaceFormat::B8G8R8A8;
|
||||
const auto size = aExternalTexture->GetSize();
|
||||
const auto index = aExternalTexture->GetSubmissionIndex();
|
||||
MOZ_ASSERT(index != 0);
|
||||
|
||||
RefPtr<PresentationData> data = lookup->second.get();
|
||||
|
||||
Maybe<gfx::FenceInfo> fenceInfo;
|
||||
auto it = mDeviceFenceHandles.find(data->mDeviceId);
|
||||
if (it != mDeviceFenceHandles.end()) {
|
||||
fenceInfo = Some(gfx::FenceInfo(it->second, index));
|
||||
}
|
||||
|
||||
Maybe<layers::SurfaceDescriptor> desc =
|
||||
aExternalTexture->ToSurfaceDescriptor(fenceInfo);
|
||||
aExternalTexture->ToSurfaceDescriptor();
|
||||
if (!desc) {
|
||||
MOZ_ASSERT_UNREACHABLE("unexpected to be called");
|
||||
return;
|
||||
|
@ -1456,6 +1454,15 @@ void WebGPUParent::PostExternalTexture(
|
|||
}
|
||||
}
|
||||
|
||||
RefPtr<gfx::FileHandleWrapper> WebGPUParent::GetDeviceFenceHandle(
|
||||
const RawId aDeviceId) {
|
||||
auto it = mDeviceFenceHandles.find(aDeviceId);
|
||||
if (it == mDeviceFenceHandles.end()) {
|
||||
return nullptr;
|
||||
}
|
||||
return it->second;
|
||||
}
|
||||
|
||||
ipc::IPCResult WebGPUParent::RecvSwapChainPresent(
|
||||
RawId aTextureId, RawId aCommandEncoderId,
|
||||
const layers::RemoteTextureId& aRemoteTextureId,
|
||||
|
|
|
@ -190,6 +190,8 @@ class WebGPUParent final : public PWebGPUParent, public SupportsWeakPtr {
|
|||
return mActiveDeviceIds.Contains(aDeviceId);
|
||||
}
|
||||
|
||||
RefPtr<gfx::FileHandleWrapper> GetDeviceFenceHandle(const RawId aDeviceId);
|
||||
|
||||
private:
|
||||
static void MapCallback(uint8_t* aUserData,
|
||||
ffi::WGPUBufferMapAsyncStatus aStatus);
|
||||
|
|
|
@ -218,8 +218,20 @@ class WorkerGlobalScopeBase : public DOMEventTargetHelper,
|
|||
mNumOfOpenWebSockets += aDelta;
|
||||
}
|
||||
|
||||
// Increase/Decrease the number of active IndexedDB databases for the
|
||||
// decision making of timeout-throttling.
|
||||
void UpdateActiveIndexedDBDatabaseCount(int32_t aDelta) override {
|
||||
AssertIsOnWorkerThread();
|
||||
mNumOfIndexedDBDatabases += aDelta;
|
||||
}
|
||||
|
||||
bool HasOpenWebSockets() const override { return mNumOfOpenWebSockets; }
|
||||
|
||||
bool HasActiveIndexedDBDatabases() const override {
|
||||
AssertIsOnWorkerThread();
|
||||
return mNumOfIndexedDBDatabases;
|
||||
}
|
||||
|
||||
void TriggerUpdateCCFlag() override {
|
||||
mWorkerPrivate->UpdateCCFlag(WorkerPrivate::CCFlag::EligibleForTimeout);
|
||||
}
|
||||
|
@ -247,6 +259,7 @@ class WorkerGlobalScopeBase : public DOMEventTargetHelper,
|
|||
#endif
|
||||
mozilla::UniquePtr<mozilla::dom::TimeoutManager> mTimeoutManager;
|
||||
uint32_t mNumOfOpenWebSockets{};
|
||||
uint32_t mNumOfIndexedDBDatabases{};
|
||||
};
|
||||
|
||||
namespace workerinternals {
|
||||
|
|
|
@ -444,6 +444,7 @@ skip-if = ["os == 'android'"] # Needs interaction with the scrollbar
|
|||
["test_editing_UI_in_plaintext-only.html"]
|
||||
|
||||
["test_execCommandPaste_noTarget.html"]
|
||||
skip-if = ["display == 'wayland'"] # Bug 1935188
|
||||
|
||||
["test_focus_caret_navigation_between_nested_editors.html"]
|
||||
|
||||
|
|
|
@ -31,13 +31,13 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=578771
|
|||
ce.focus();
|
||||
|
||||
synthesizeMouse(elem, 5, 5, {clickCount: 2 });
|
||||
ok(elem.selectionStart == 0 && elem.selectionEnd == 7,
|
||||
" Double-clicking on another " + elemTag + " works correctly");
|
||||
is(elem.selectionStart, 0, `${elemTag} selectionStart after double-click`);
|
||||
is(elem.selectionEnd, 7, `${elemTag} selectionEnd after double-click`);
|
||||
|
||||
ce.focus();
|
||||
synthesizeMouse(elem, 5, 5, {clickCount: 3 });
|
||||
ok(elem.selectionStart == 0 && elem.selectionEnd == 14,
|
||||
"Triple-clicking on another " + elemTag + " works correctly");
|
||||
is(elem.selectionStart, 0, `${elemTag} selectionStart after triple-click`);
|
||||
is(elem.selectionEnd, 14, `${elemTag} selectionEnd after triple-click`);
|
||||
}
|
||||
// Avoid platform selection differences
|
||||
SimpleTest.waitForFocus(function() {
|
||||
|
|
|
@ -177,7 +177,7 @@ SharedSurface_ANGLEShareHandle::ToSurfaceDescriptor() {
|
|||
mSharedHandle, /* gpuProcessTextureId */ Nothing(),
|
||||
/* arrayIndex */ 0, format, mDesc.size, mDesc.colorSpace,
|
||||
gfx::ColorRange::FULL, /* hasKeyedMutex */ true,
|
||||
/* fenceInfo */ Nothing()));
|
||||
/* fencesHolderId */ Nothing()));
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -452,7 +452,7 @@ SharedSurface_D3D11Interop::ToSurfaceDescriptor() {
|
|||
mData.dxgiHandle, /* gpuProcessTextureId */ Nothing(),
|
||||
/* arrayIndex */ 0, format, mDesc.size, mDesc.colorSpace,
|
||||
gfx::ColorRange::FULL, /* hasKeyedMutex */ true,
|
||||
/* fenceInfo */ Nothing()));
|
||||
/* fencesHolderId */ Nothing()));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -43,20 +43,6 @@ class FileHandleWrapper {
|
|||
const mozilla::UniqueFileHandle mHandle;
|
||||
};
|
||||
|
||||
struct FenceInfo {
|
||||
FenceInfo() = default;
|
||||
FenceInfo(FileHandleWrapper* aFenceHandle, uint64_t aFenceValue)
|
||||
: mFenceHandle(aFenceHandle), mFenceValue(aFenceValue) {}
|
||||
|
||||
bool operator==(const FenceInfo& aOther) const {
|
||||
return mFenceHandle == aOther.mFenceHandle &&
|
||||
mFenceValue == aOther.mFenceValue;
|
||||
}
|
||||
|
||||
RefPtr<FileHandleWrapper> mFenceHandle;
|
||||
uint64_t mFenceValue = 0;
|
||||
};
|
||||
|
||||
} // namespace gfx
|
||||
} // namespace mozilla
|
||||
|
||||
|
|
|
@ -1203,24 +1203,6 @@ struct ParamTraits<mozilla::fontlist::Pointer> {
|
|||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct ParamTraits<mozilla::gfx::FenceInfo> {
|
||||
typedef mozilla::gfx::FenceInfo paramType;
|
||||
|
||||
static void Write(MessageWriter* aWriter, const paramType& aParam) {
|
||||
WriteParam(aWriter, aParam.mFenceHandle);
|
||||
WriteParam(aWriter, aParam.mFenceValue);
|
||||
}
|
||||
|
||||
static bool Read(MessageReader* aReader, paramType* aResult) {
|
||||
if (!ReadParam(aReader, &aResult->mFenceHandle) ||
|
||||
!ReadParam(aReader, &aResult->mFenceValue)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace IPC
|
||||
|
||||
namespace mozilla {
|
||||
|
|
|
@ -63,6 +63,11 @@ RefPtr<FenceD3D11> FenceD3D11::Create(ID3D11Device* aDevice) {
|
|||
/* static */
|
||||
RefPtr<FenceD3D11> FenceD3D11::CreateFromHandle(
|
||||
RefPtr<gfx::FileHandleWrapper> aHandle) {
|
||||
MOZ_ASSERT(aHandle);
|
||||
|
||||
if (!aHandle) {
|
||||
return nullptr;
|
||||
}
|
||||
// Opening shared handle is deferred.
|
||||
return new FenceD3D11(aHandle);
|
||||
}
|
||||
|
@ -125,10 +130,6 @@ RefPtr<FenceD3D11> FenceD3D11::CloneFromHandle() {
|
|||
return fence;
|
||||
}
|
||||
|
||||
gfx::FenceInfo FenceD3D11::GetFenceInfo() const {
|
||||
return gfx::FenceInfo(mHandle, mFenceValue);
|
||||
}
|
||||
|
||||
bool FenceD3D11::IncrementAndSignal() {
|
||||
MOZ_ASSERT(mDevice);
|
||||
MOZ_ASSERT(mSignalFence);
|
||||
|
|
|
@ -62,8 +62,6 @@ class FenceD3D11 final : public Fence {
|
|||
|
||||
uint64_t GetFenceValue() const { return mFenceValue; }
|
||||
|
||||
gfx::FenceInfo GetFenceInfo() const;
|
||||
|
||||
const RefPtr<gfx::FileHandleWrapper> mHandle;
|
||||
|
||||
protected:
|
||||
|
|
|
@ -17,13 +17,13 @@ StaticAutoPtr<GpuProcessD3D11FencesHolderMap>
|
|||
|
||||
/* static */
|
||||
void GpuProcessD3D11FencesHolderMap::Init() {
|
||||
MOZ_ASSERT(XRE_IsGPUProcess());
|
||||
MOZ_ASSERT(XRE_IsGPUProcess() || XRE_IsParentProcess());
|
||||
sInstance = new GpuProcessD3D11FencesHolderMap();
|
||||
}
|
||||
|
||||
/* static */
|
||||
void GpuProcessD3D11FencesHolderMap::Shutdown() {
|
||||
MOZ_ASSERT(XRE_IsGPUProcess());
|
||||
MOZ_ASSERT(XRE_IsGPUProcess() || XRE_IsParentProcess());
|
||||
sInstance = nullptr;
|
||||
}
|
||||
|
||||
|
|
|
@ -425,7 +425,7 @@ bool D3D11TextureData::SerializeSpecific(
|
|||
*aOutDesc = SurfaceDescriptorD3D10(
|
||||
mSharedHandle, mGpuProcessTextureId, mArrayIndex, mFormat, mSize,
|
||||
mColorSpace, mColorRange, /* hasKeyedMutex */ mHasKeyedMutex,
|
||||
/* fenceInfo */ Nothing());
|
||||
/* fencesHolderId */ Nothing());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -921,9 +921,7 @@ DXGITextureHostD3D11::DXGITextureHostD3D11(
|
|||
mSize(aDescriptor.size()),
|
||||
mFormat(aDescriptor.format()),
|
||||
mHasKeyedMutex(aDescriptor.hasKeyedMutex()),
|
||||
mAcquireFenceInfo(aDescriptor.fenceInfo().isSome()
|
||||
? aDescriptor.fenceInfo().ref()
|
||||
: gfx::FenceInfo()),
|
||||
mFencesHolderId(aDescriptor.fencesHolderId()),
|
||||
mColorSpace(aDescriptor.colorSpace()),
|
||||
mColorRange(aDescriptor.colorRange()) {}
|
||||
|
||||
|
@ -1182,7 +1180,7 @@ void DXGITextureHostD3D11::CreateRenderTexture(
|
|||
|
||||
RefPtr<wr::RenderDXGITextureHost> texture = new wr::RenderDXGITextureHost(
|
||||
mHandle, mGpuProcessTextureId, mArrayIndex, mFormat, mColorSpace,
|
||||
mColorRange, mSize, mHasKeyedMutex, mAcquireFenceInfo);
|
||||
mColorRange, mSize, mHasKeyedMutex, mFencesHolderId);
|
||||
if (mFlags & TextureFlags::SOFTWARE_DECODED_VIDEO) {
|
||||
texture->SetIsSoftwareDecodedVideo();
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@ namespace mozilla {
|
|||
|
||||
namespace gfx {
|
||||
class FileHandleWrapper;
|
||||
struct FenceInfo;
|
||||
} // namespace gfx
|
||||
|
||||
namespace gl {
|
||||
|
@ -398,7 +397,7 @@ class DXGITextureHostD3D11 : public TextureHost {
|
|||
const gfx::IntSize mSize;
|
||||
const gfx::SurfaceFormat mFormat;
|
||||
const bool mHasKeyedMutex;
|
||||
const gfx::FenceInfo mAcquireFenceInfo;
|
||||
const Maybe<layers::GpuProcessFencesHolderId> mFencesHolderId;
|
||||
const gfx::ColorSpace2 mColorSpace;
|
||||
const gfx::ColorRange mColorRange;
|
||||
};
|
||||
|
|
|
@ -257,7 +257,7 @@ RefPtr<TextureHost> TextureHostWrapperD3D11::CreateFromBufferTexture(
|
|||
auto descD3D10 = SurfaceDescriptorD3D10(
|
||||
nullptr, Some(id),
|
||||
/* arrayIndex */ 0, gfx::SurfaceFormat::NV12, size, colorSpace,
|
||||
colorRange, /* hasKeyedMutex */ false, /* fenceInfo */ Nothing());
|
||||
colorRange, /* hasKeyedMutex */ false, /* fencesHolderId */ Nothing());
|
||||
|
||||
RefPtr<DXGITextureHostD3D11> textureHostD3D11 =
|
||||
new DXGITextureHostD3D11(flags, descD3D10);
|
||||
|
|
|
@ -22,7 +22,6 @@ using mozilla::gfx::SurfaceFormat from "mozilla/gfx/Types.h";
|
|||
using mozilla::gfx::IntRect from "mozilla/gfx/Rect.h";
|
||||
using mozilla::gfx::IntSize from "mozilla/gfx/Point.h";
|
||||
using mozilla::gfx::Matrix4x4 from "mozilla/gfx/Matrix.h";
|
||||
using mozilla::gfx::FenceInfo from "mozilla/gfx/FileHandleWrapper.h";
|
||||
[RefCounted] using mozilla::gfx::FileHandleWrapper from "mozilla/gfx/FileHandleWrapper.h";
|
||||
using gfxImageFormat from "gfxTypes.h";
|
||||
using mozilla::layers::MaybeVideoBridgeSource from "mozilla/layers/VideoBridgeUtils.h";
|
||||
|
@ -48,7 +47,7 @@ namespace layers {
|
|||
ColorSpace2 colorSpace;
|
||||
ColorRange colorRange;
|
||||
bool hasKeyedMutex;
|
||||
FenceInfo? fenceInfo;
|
||||
GpuProcessFencesHolderId? fencesHolderId;
|
||||
};
|
||||
|
||||
[Comparable] struct SurfaceDescriptorDXGIYCbCr {
|
||||
|
|
|
@ -77,6 +77,7 @@
|
|||
|
||||
#if defined(XP_WIN)
|
||||
# include "gfxWindowsPlatform.h"
|
||||
# include "mozilla/layers/GpuProcessD3D11FencesHolderMap.h"
|
||||
# include "mozilla/widget/WinWindowOcclusionTracker.h"
|
||||
#elif defined(XP_DARWIN)
|
||||
# include "gfxPlatformMac.h"
|
||||
|
@ -1336,6 +1337,9 @@ void gfxPlatform::InitLayersIPC() {
|
|||
}
|
||||
#endif
|
||||
if (!gfxConfig::IsEnabled(Feature::GPU_PROCESS)) {
|
||||
#if defined(XP_WIN)
|
||||
GpuProcessD3D11FencesHolderMap::Init();
|
||||
#endif
|
||||
RemoteTextureMap::Init();
|
||||
wr::RenderThread::Start(GPUProcessManager::Get()->AllocateNamespace());
|
||||
image::ImageMemoryReporter::InitForWebRender();
|
||||
|
@ -1391,6 +1395,7 @@ void gfxPlatform::ShutdownLayersIPC() {
|
|||
StaticPrefs::GetPrefName_gfx_webrender_blob_tile_size()));
|
||||
}
|
||||
#if defined(XP_WIN)
|
||||
GpuProcessD3D11FencesHolderMap::Shutdown();
|
||||
widget::WinWindowOcclusionTracker::ShutDown();
|
||||
#endif
|
||||
} else {
|
||||
|
@ -3974,6 +3979,9 @@ void gfxPlatform::DisableGPUProcess() {
|
|||
"FEATURE_FAILURE_DISABLED_BY_GPU_PROCESS_DISABLED"_ns);
|
||||
}
|
||||
|
||||
#if defined(XP_WIN)
|
||||
GpuProcessD3D11FencesHolderMap::Init();
|
||||
#endif
|
||||
RemoteTextureMap::Init();
|
||||
// We need to initialize the parent process to prepare for WebRender if we
|
||||
// did not end up disabling it, despite losing the GPU process.
|
||||
|
|
|
@ -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 gfx::FenceInfo& aAcquireFenceInfo)
|
||||
const Maybe<layers::GpuProcessFencesHolderId>& aFencesHolderId)
|
||||
: mHandle(aHandle),
|
||||
mGpuProcessTextureId(aGpuProcessTextureId),
|
||||
mArrayIndex(aArrayIndex),
|
||||
|
@ -42,7 +42,7 @@ RenderDXGITextureHost::RenderDXGITextureHost(
|
|||
mColorRange(aColorRange),
|
||||
mSize(aSize),
|
||||
mHasKeyedMutex(aHasKeyedMutex),
|
||||
mAcquireFenceInfo(aAcquireFenceInfo),
|
||||
mFencesHolderId(aFencesHolderId),
|
||||
mLocked(false) {
|
||||
MOZ_COUNT_CTOR_INHERITED(RenderDXGITextureHost, RenderTextureHost);
|
||||
MOZ_ASSERT((mFormat != gfx::SurfaceFormat::NV12 &&
|
||||
|
@ -367,19 +367,20 @@ wr::WrExternalImage RenderDXGITextureHost::Lock(uint8_t aChannelIndex,
|
|||
}
|
||||
|
||||
bool RenderDXGITextureHost::LockInternal() {
|
||||
if (!mLocked) {
|
||||
if (mAcquireFenceInfo.mFenceHandle) {
|
||||
if (!mAcquireFence) {
|
||||
mAcquireFence = layers::FenceD3D11::CreateFromHandle(
|
||||
mAcquireFenceInfo.mFenceHandle);
|
||||
}
|
||||
if (mAcquireFence) {
|
||||
MOZ_ASSERT(mAcquireFenceInfo.mFenceHandle == mAcquireFence->mHandle);
|
||||
MOZ_ASSERT(mTexture);
|
||||
|
||||
mAcquireFence->Update(mAcquireFenceInfo.mFenceValue);
|
||||
RefPtr<ID3D11Device> d3d11Device =
|
||||
gfx::DeviceManagerDx::Get()->GetCompositorDevice();
|
||||
mAcquireFence->Wait(d3d11Device);
|
||||
if (!mLocked) {
|
||||
if (mFencesHolderId.isSome()) {
|
||||
auto* fencesHolderMap = layers::GpuProcessD3D11FencesHolderMap::Get();
|
||||
if (!fencesHolderMap) {
|
||||
MOZ_ASSERT_UNREACHABLE("unexpected to be called");
|
||||
return false;
|
||||
}
|
||||
RefPtr<ID3D11Device> device;
|
||||
mTexture->GetDevice(getter_AddRefs(device));
|
||||
|
||||
if (!fencesHolderMap->WaitWriteFence(mFencesHolderId.ref(), device)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (mKeyedMutex) {
|
||||
|
@ -468,7 +469,7 @@ gfx::IntSize RenderDXGITextureHost::GetSize(uint8_t aChannelIndex) const {
|
|||
|
||||
bool RenderDXGITextureHost::SyncObjectNeeded() {
|
||||
return mGpuProcessTextureId.isNothing() && !mHasKeyedMutex &&
|
||||
!mAcquireFenceInfo.mFenceHandle;
|
||||
mFencesHolderId.isNothing();
|
||||
}
|
||||
|
||||
RenderDXGIYCbCrTextureHost::RenderDXGIYCbCrTextureHost(
|
||||
|
@ -641,12 +642,12 @@ bool RenderDXGIYCbCrTextureHost::EnsureD3D11Texture2D(ID3D11Device* aDevice) {
|
|||
|
||||
bool RenderDXGIYCbCrTextureHost::LockInternal() {
|
||||
if (!mLocked) {
|
||||
auto* fenceHolderMap = layers::GpuProcessD3D11FencesHolderMap::Get();
|
||||
if (!fenceHolderMap) {
|
||||
auto* fencesHolderMap = layers::GpuProcessD3D11FencesHolderMap::Get();
|
||||
if (!fencesHolderMap) {
|
||||
MOZ_ASSERT_UNREACHABLE("unexpected to be called");
|
||||
return false;
|
||||
}
|
||||
if (!fenceHolderMap->WaitWriteFence(mFencesHolderId, mDevice)) {
|
||||
if (!fencesHolderMap->WaitWriteFence(mFencesHolderId, mDevice)) {
|
||||
return false;
|
||||
}
|
||||
mLocked = true;
|
||||
|
|
|
@ -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 gfx::FenceInfo& aAcquireFenceInfo);
|
||||
const Maybe<layers::GpuProcessFencesHolderId>& aFencesHolderId);
|
||||
|
||||
wr::WrExternalImage Lock(uint8_t aChannelIndex, gl::GLContext* aGL) override;
|
||||
void Unlock() override;
|
||||
|
@ -121,15 +121,13 @@ class RenderDXGITextureHost final : public RenderTextureHostSWGL {
|
|||
|
||||
bool mIsSoftwareDecodedVideo = false;
|
||||
|
||||
RefPtr<layers::FenceD3D11> mAcquireFence;
|
||||
|
||||
public:
|
||||
const gfx::SurfaceFormat mFormat;
|
||||
const gfx::ColorSpace2 mColorSpace;
|
||||
const gfx::ColorRange mColorRange;
|
||||
const gfx::IntSize mSize;
|
||||
const bool mHasKeyedMutex;
|
||||
const gfx::FenceInfo mAcquireFenceInfo;
|
||||
const Maybe<layers::GpuProcessFencesHolderId> mFencesHolderId;
|
||||
|
||||
private:
|
||||
bool mLocked;
|
||||
|
|
|
@ -393,10 +393,15 @@ impl PictureChainBuilder {
|
|||
// If no picture was created for this stacking context, create a
|
||||
// pass-through wrapper now. This is only needed in 1-2 edge cases
|
||||
// now, and will be removed as a follow up.
|
||||
|
||||
// If the picture is snapshotted, it needs to have a surface rather
|
||||
// than being pass-through.
|
||||
let composite_mode = snapshot.map(|_| PictureCompositeMode::Blit(BlitReason::SNAPSHOT));
|
||||
|
||||
let pic_index = PictureIndex(prim_store.pictures
|
||||
.alloc()
|
||||
.init(PicturePrimitive::new_image(
|
||||
None,
|
||||
composite_mode,
|
||||
Picture3DContext::Out,
|
||||
self.flags,
|
||||
prim_list,
|
||||
|
@ -644,6 +649,10 @@ impl<'a> SceneBuilder<'a> {
|
|||
&builder.interners,
|
||||
);
|
||||
|
||||
for pic_index in &builder.snapshot_pictures {
|
||||
builder.picture_graph.add_root(*pic_index);
|
||||
}
|
||||
|
||||
// Add all the tile cache pictures as roots of the picture graph
|
||||
for pic_index in &tile_cache_pictures {
|
||||
builder.picture_graph.add_root(*pic_index);
|
||||
|
@ -2618,7 +2627,10 @@ impl<'a> SceneBuilder<'a> {
|
|||
// 3d render context.
|
||||
for child_pic_index in &prim_list.child_pictures {
|
||||
let child_pic = &mut self.prim_store.pictures[child_pic_index.0];
|
||||
child_pic.composite_mode = None;
|
||||
let needs_surface = child_pic.snapshot.is_some();
|
||||
if !needs_surface {
|
||||
child_pic.composite_mode = None;
|
||||
}
|
||||
child_pic.context_3d = Picture3DContext::Out;
|
||||
}
|
||||
|
||||
|
|
|
@ -839,11 +839,17 @@ class VsyncRefreshDriverTimer : public RefreshDriverTimer {
|
|||
sMostRecentHighRate = rate;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
// On 32-bit Windows we sometimes get times where TimeStamp::Now() is not
|
||||
// monotonic because the underlying system apis produce non-monontonic
|
||||
// results. (bug 1306896)
|
||||
#if !defined(_WIN32)
|
||||
// results; see bug 1306896.
|
||||
// On Wayland, vsync timestamp might not precisely match system time; see
|
||||
// bug 1958043.
|
||||
# if defined(_WIN32) || defined(MOZ_WAYLAND)
|
||||
Unused << NS_WARN_IF(aVsyncTimestamp > tickStart);
|
||||
# else
|
||||
MOZ_ASSERT(aVsyncTimestamp <= tickStart);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
bool shouldGiveNonVSyncTasksMoreTime = ShouldGiveNonVsyncTasksMoreTime();
|
||||
|
|
|
@ -4615,6 +4615,10 @@ nsresult nsIFrame::GetDataForTableSelection(
|
|||
}
|
||||
|
||||
static bool IsEditingHost(const nsIFrame* aFrame) {
|
||||
if (aFrame->Style()->GetPseudoType() ==
|
||||
PseudoStyleType::mozTextControlEditingRoot) {
|
||||
return true;
|
||||
}
|
||||
nsIContent* content = aFrame->GetContent();
|
||||
return content && content->IsEditingHost();
|
||||
}
|
||||
|
@ -4666,8 +4670,6 @@ bool nsIFrame::ShouldHaveLineIfEmpty() const {
|
|||
break;
|
||||
case PseudoStyleType::scrolledContent:
|
||||
return GetParent()->ShouldHaveLineIfEmpty();
|
||||
case PseudoStyleType::mozTextControlEditingRoot:
|
||||
return true;
|
||||
case PseudoStyleType::buttonContent:
|
||||
// HTML quirk.
|
||||
return GetContent()->IsHTMLElement(nsGkAtoms::input);
|
||||
|
@ -5460,6 +5462,23 @@ struct MOZ_STACK_CLASS FrameContentRange {
|
|||
int32_t end;
|
||||
};
|
||||
|
||||
static bool IsRelevantBlockFrame(const nsIFrame* aFrame) {
|
||||
if (!aFrame->IsBlockOutside()) {
|
||||
return false;
|
||||
}
|
||||
if (aFrame->GetContent()->IsInNativeAnonymousSubtree()) {
|
||||
// This helps skipping things like scrollbar parts.
|
||||
return false;
|
||||
}
|
||||
auto pseudoType = aFrame->Style()->GetPseudoType();
|
||||
if (PseudoStyle::IsAnonBox(pseudoType)) {
|
||||
// Table cell contents should be considered block boundaries for this
|
||||
// purpose.
|
||||
return pseudoType == PseudoStyleType::cellContent;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Retrieve the content offsets of a frame
|
||||
static FrameContentRange GetRangeForFrame(const nsIFrame* aFrame) {
|
||||
nsIContent* content = aFrame->GetContent();
|
||||
|
@ -5486,7 +5505,7 @@ static FrameContentRange GetRangeForFrame(const nsIFrame* aFrame) {
|
|||
|
||||
MOZ_ASSERT(!content->IsBeingRemoved());
|
||||
nsIContent* parent = content->GetParent();
|
||||
if (aFrame->IsBlockOutside() || !parent) {
|
||||
if (IsRelevantBlockFrame(aFrame) || !parent) {
|
||||
return FrameContentRange(content, 0, content->GetChildCount());
|
||||
}
|
||||
|
||||
|
@ -9385,7 +9404,7 @@ static nsContentAndOffset FindLineBreakingFrame(nsIFrame* aFrame,
|
|||
// the content of the inline frames they were created from. The
|
||||
// first/last child of such frames is the real block frame we're
|
||||
// looking for.
|
||||
if ((aFrame->IsBlockOutside() &&
|
||||
if ((IsRelevantBlockFrame(aFrame) &&
|
||||
!aFrame->HasAnyStateBits(NS_FRAME_PART_OF_IBSPLIT)) ||
|
||||
aFrame->IsBrFrame()) {
|
||||
nsIContent* content = aFrame->GetContent();
|
||||
|
@ -9427,7 +9446,7 @@ nsresult nsIFrame::PeekOffsetForParagraph(PeekOffsetStruct* aPos) {
|
|||
nsIFrame* frame = this;
|
||||
nsContentAndOffset blockFrameOrBR;
|
||||
blockFrameOrBR.mContent = nullptr;
|
||||
bool reachedLimit = frame->IsBlockOutside() || IsEditingHost(frame);
|
||||
bool reachedLimit = IsRelevantBlockFrame(frame) || IsEditingHost(frame);
|
||||
|
||||
auto traverse = [&aPos](nsIFrame* current) {
|
||||
return aPos->mDirection == eDirPrevious ? current->GetPrevSibling()
|
||||
|
@ -9463,7 +9482,8 @@ nsresult nsIFrame::PeekOffsetForParagraph(PeekOffsetStruct* aPos) {
|
|||
break;
|
||||
}
|
||||
frame = parent;
|
||||
reachedLimit = frame && (frame->IsBlockOutside() || IsEditingHost(frame));
|
||||
reachedLimit =
|
||||
frame && (IsRelevantBlockFrame(frame) || IsEditingHost(frame));
|
||||
}
|
||||
|
||||
if (reachedLimit) { // no "stop frame" found
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<style>
|
||||
body { margin: 0; font: 16px/1 sans-serif; }
|
||||
code { display: inline-block }
|
||||
#d code { overflow: auto }
|
||||
</style>
|
||||
<p id="a">Some <code>code</code> with <span>text</span> with <code>code</code> in it</p>
|
||||
|
||||
|
@ -15,6 +16,8 @@ some <span>more</span> code <span>with</span> pre-formatted
|
|||
whitespace <span>that</span> should be selected
|
||||
line <span>by</span> line</pre>
|
||||
|
||||
<p id="d">Some <code>code</code> with <span>text</span> with <code>code</code> in <span>it</span></p>
|
||||
|
||||
<script>
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
|
@ -25,7 +28,7 @@ line <span>by</span> line</pre>
|
|||
}
|
||||
|
||||
SimpleTest.waitForFocus(function () {
|
||||
for (let child of document.querySelectorAll("#a span, #a code"))
|
||||
for (let child of document.querySelectorAll(":is(#a, #d) :is(span, code)"))
|
||||
testTripleClick(child, "Some code with text with code in it");
|
||||
|
||||
{
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
<script>
|
||||
const NON_CONTENT_ACCESSIBLE_ENV_VARS = [
|
||||
"-moz-gtk-csd-titlebar-radius",
|
||||
"-moz-gtk-csd-tooltip-radius",
|
||||
"-moz-gtk-csd-minimize-button-position",
|
||||
"-moz-gtk-csd-maximize-button-position",
|
||||
"-moz-gtk-csd-close-button-position",
|
||||
|
|
|
@ -2,18 +2,47 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
|
||||
<!-- Name of the "notification channel" used for displaying download notification. See https://developer.android.com/training/notify-user/channels -->
|
||||
<string name="mozac_feature_downloads_notification_channel">Preuzimanja</string>
|
||||
<!--
|
||||
Text shown on the second row of an in progress download notification.
|
||||
%1$s will be replaced with the percentage of download completed so far.
|
||||
-->
|
||||
<string name="mozac_feature_downloads_percentage_notification_text">%1$s je završeno</string>
|
||||
<!-- Text shown on the second row of a paused download notification. -->
|
||||
<string name="mozac_feature_downloads_paused_notification_text">Preuzimanje pauzirano</string>
|
||||
<!-- Text shown on the second row of an completed download notification. The filename is shown on the first row. -->
|
||||
<string name="mozac_feature_downloads_completed_notification_text2">Preuzimanje završeno</string>
|
||||
<!-- Text shown on the second row of an failed download notification. The filename is shown on the first row. -->
|
||||
<string name="mozac_feature_downloads_failed_notification_text2">Neuspjelo preuzimanje</string>
|
||||
<!--
|
||||
Alert dialog confirmation before downloading a previously downloaded file, this is the title.
|
||||
%1$s will be replaced with the size of the file.
|
||||
-->
|
||||
<string name="mozac_feature_downloads_again_dialog_title" tools:ignore="UnusedResources">Ponovo preuzeti fajl? (%1$s)</string>
|
||||
<!--
|
||||
Alert dialog confirmation before downloading a file, this is the title.
|
||||
%1$s will be replaced with the size of the file.
|
||||
-->
|
||||
<string name="mozac_feature_downloads_dialog_title_3">Preuzeti fajl? (%1$s)</string>
|
||||
<!-- Alert dialog confirmation before download a file, this is the title. %1$s will be replaced with the name of the file. -->
|
||||
<string name="mozac_feature_downloads_dialog_title2" moz:removedIn="138" tools:ignore="UnusedResources">Preuzimanje (%1$s)</string>
|
||||
<!-- Alert dialog confirmation before download a file, this is the positive action. -->
|
||||
<string name="mozac_feature_downloads_dialog_download">Preuzmi</string>
|
||||
<!-- Alert dialog confirmation before downloading a file again, this is the positive action. -->
|
||||
<string name="mozac_feature_downloads_dialog_download_again" tools:ignore="UnusedResources">Preuzmi ponovo</string>
|
||||
<!-- Alert dialog confirmation before download a file, this is the negative action. -->
|
||||
<string name="mozac_feature_downloads_dialog_cancel">Otkaži</string>
|
||||
<!--
|
||||
Alert dialog confirmation before downloading a previously downloaded file, this is the description.
|
||||
%1$s will be replaced with the name of the file.
|
||||
-->
|
||||
<string name="mozac_feature_downloads_already_exists_dialog_title" tools:ignore="UnusedResources">%1$s već postoji.</string>
|
||||
<!--
|
||||
Alert dialog confirmation before downloading a file without network connection, this is the description.
|
||||
%1$s will be replaced with the name of the file.
|
||||
-->
|
||||
<string name="mozac_feature_downloads_file_failure_no_connection" tools:ignore="UnusedResources">%1$s nije preuzet.</string>
|
||||
<!-- Alert dialog confirmation before downloading a file without network connection, this is the description. -->
|
||||
<string name="mozac_feature_downloads_file_check_connection" tools:ignore="UnusedResources">Provjerite vezu i pokušajte ponovo.</string>
|
||||
<!-- Error shown when the user is trying to download a invalid file. %1$s will be replaced with the name of the app. -->
|
||||
<string name="mozac_feature_downloads_file_not_supported2">%1$s ne može preuzeti ovaj tip fajla</string>
|
||||
<!-- Message that appears when the downloaded file could not be opened. -->
|
||||
|
|
|
@ -2,18 +2,47 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://mozac.org/tools">
|
||||
<!-- Name of the "notification channel" used for displaying download notification. See https://developer.android.com/training/notify-user/channels -->
|
||||
<string name="mozac_feature_downloads_notification_channel">Descargas</string>
|
||||
<!--
|
||||
Text shown on the second row of an in progress download notification.
|
||||
%1$s will be replaced with the percentage of download completed so far.
|
||||
-->
|
||||
<string name="mozac_feature_downloads_percentage_notification_text">%1$s completado</string>
|
||||
<!-- Text shown on the second row of a paused download notification. -->
|
||||
<string name="mozac_feature_downloads_paused_notification_text">Descarga en pausa</string>
|
||||
<!-- Text shown on the second row of an completed download notification. The filename is shown on the first row. -->
|
||||
<string name="mozac_feature_downloads_completed_notification_text2">Descarga completa</string>
|
||||
<!-- Text shown on the second row of an failed download notification. The filename is shown on the first row. -->
|
||||
<string name="mozac_feature_downloads_failed_notification_text2">Descarga fallida</string>
|
||||
<!--
|
||||
Alert dialog confirmation before downloading a previously downloaded file, this is the title.
|
||||
%1$s will be replaced with the size of the file.
|
||||
-->
|
||||
<string name="mozac_feature_downloads_again_dialog_title" tools:ignore="UnusedResources">¿Descargar archivo de nuevo? (%1$s)</string>
|
||||
<!--
|
||||
Alert dialog confirmation before downloading a file, this is the title.
|
||||
%1$s will be replaced with the size of the file.
|
||||
-->
|
||||
<string name="mozac_feature_downloads_dialog_title_3">¿Descargar archivo? (%1$s)</string>
|
||||
<!-- Alert dialog confirmation before download a file, this is the title. %1$s will be replaced with the name of the file. -->
|
||||
<string name="mozac_feature_downloads_dialog_title2" moz:removedIn="138" tools:ignore="UnusedResources">Descargar (%1$s)</string>
|
||||
<!-- Alert dialog confirmation before download a file, this is the positive action. -->
|
||||
<string name="mozac_feature_downloads_dialog_download">Descargar</string>
|
||||
<!-- Alert dialog confirmation before downloading a file again, this is the positive action. -->
|
||||
<string name="mozac_feature_downloads_dialog_download_again" tools:ignore="UnusedResources">Descargar de nuevo</string>
|
||||
<!-- Alert dialog confirmation before download a file, this is the negative action. -->
|
||||
<string name="mozac_feature_downloads_dialog_cancel">Cancelar</string>
|
||||
<!--
|
||||
Alert dialog confirmation before downloading a previously downloaded file, this is the description.
|
||||
%1$s will be replaced with the name of the file.
|
||||
-->
|
||||
<string name="mozac_feature_downloads_already_exists_dialog_title" tools:ignore="UnusedResources">%1$s ya existe.</string>
|
||||
<!--
|
||||
Alert dialog confirmation before downloading a file without network connection, this is the description.
|
||||
%1$s will be replaced with the name of the file.
|
||||
-->
|
||||
<string name="mozac_feature_downloads_file_failure_no_connection" tools:ignore="UnusedResources">%1$s no ha sido descargado.</string>
|
||||
<!-- Alert dialog confirmation before downloading a file without network connection, this is the description. -->
|
||||
<string name="mozac_feature_downloads_file_check_connection" tools:ignore="UnusedResources">Comprueba tu conexión y vuelve a intentarlo.</string>
|
||||
<!-- Error shown when the user is trying to download a invalid file. %1$s will be replaced with the name of the app. -->
|
||||
<string name="mozac_feature_downloads_file_not_supported2">%1$s no puede descargar este tipo de archivo</string>
|
||||
<!-- Message that appears when the downloaded file could not be opened. -->
|
||||
|
|
|
@ -671,6 +671,8 @@
|
|||
<!-- Onboarding toolbar selection card content description for the toolbar placement image. -->
|
||||
<string name="onboarding_customize_toolbar_placement_bottom_content_description">Slika trake s alatima na dnu</string>
|
||||
<string name="onboarding_customize_toolbar_placement_top_content_description">Slika trake s alatima na vrhu</string>
|
||||
<!-- Action label for toolbar options that can be selected. Talkback will append this to say "Double tap to select". -->
|
||||
<string name="onboarding_customize_toolbar_a11y_action_label_select">izaberi</string>
|
||||
<!-- Onboarding header for the theme selection card, used by Nimbus experiments. -->
|
||||
<string name="onboarding_customize_theme_title" tools:ignore="UnusedResources">Izaberi temu</string>
|
||||
<!-- Onboarding sub header for theme selection card, used by Nimbus experiments. -->
|
||||
|
@ -687,6 +689,8 @@
|
|||
<string name="onboarding_customize_theme_main_image_content_description">Velika slika zaglavlja prikaza odabira teme koja prikazuje ilustrovane alate umjetnika i graditelja.</string>
|
||||
<!-- Onboarding theme selection card content description for the theme selection image. %1$s is placeholder for either 'system', 'light' or 'dark'. -->
|
||||
<string name="onboarding_customize_theme_content_description">Slika %1$s teme</string>
|
||||
<!-- Action label for options that can be selected. Talkback will append this to say "Double tap to select". -->
|
||||
<string name="onboarding_customize_theme_a11y_action_label_select">izaberi</string>
|
||||
<!--
|
||||
Widget Picker
|
||||
|
||||
|
@ -764,6 +768,10 @@
|
|||
<string name="preferences_add_private_browsing_shortcut">Dodaj prečicu za privatno surfanje</string>
|
||||
<!-- Preference for enabling "HTTPS-Only" mode -->
|
||||
<string name="preferences_https_only_title">Način rada samo za HTTPS</string>
|
||||
<!-- Preference title for using the screen lock to hide tabs in private browsing -->
|
||||
<string name="preferences_pbm_lock_screen_title">Koristite zaključavanje ekrana da sakrijete tabove u privatnom pregledavanju</string>
|
||||
<!-- Informs the user how to access the tabs when "Use screen lock to hide tabs in private browsing" is enabled -->
|
||||
<string name="preferences_pbm_lock_screen_summary">Pregledajte tabove s otiskom prsta, otključavanjem licem ili PIN-om.</string>
|
||||
<!-- Label for cookie banner section in quick settings panel. -->
|
||||
<string name="cookie_banner_blocker">Blokiranje pojavljivanja dijaloga kolačića</string>
|
||||
<!-- Preference for removing cookie/consent banners from sites automatically in private mode. See reduce_cookie_banner_summary for additional context. -->
|
||||
|
@ -1437,10 +1445,31 @@
|
|||
Text for the snackbar to confirm that multiple downloads items have been removed
|
||||
-->
|
||||
<string name="download_delete_multiple_items_snackbar_1" moz:removedIn="138" tools:ignore="UnusedResources">Preuzimanja su uklonjena</string>
|
||||
<!--
|
||||
Text for the snackbar to confirm that a multiple download items have been removed. %1$s is the number of removed download items.
|
||||
%1$d is the number of items deleted.
|
||||
-->
|
||||
<string name="download_delete_multiple_items_snackbar_2">Izbrisane stavke: %1$d</string>
|
||||
<!-- Text for the snackbar to confirm that a single download item has been removed. %1$s is the name of the download item. -->
|
||||
<string name="download_delete_single_item_snackbar" moz:removedIn="138" tools:ignore="UnusedResources">Uklonjeno %1$s</string>
|
||||
<!-- Text for the snackbar to confirm that a single download item has been removed. %1$s is the name of the download item. -->
|
||||
<string name="download_delete_single_item_snackbar_2">Izbrisano “%1$s”</string>
|
||||
<!-- Text for the snackbar to confirm that downloads are in progress. -->
|
||||
<string name="download_in_progress_snackbar" tools:ignore="UnusedResources">Preuzimanje u toku…</string>
|
||||
<!-- Text for the snackbar action button to view in progress download details. -->
|
||||
<string name="download_in_progress_snackbar_action_details" tools:ignore="UnusedResources">Detalji</string>
|
||||
<!-- Text for the snackbar to confirm that a download has completed. -->
|
||||
<string name="download_completed_snackbar" tools:ignore="UnusedResources">Preuzimanje završeno</string>
|
||||
<!-- Text for the snackbar action button to open a completed download. -->
|
||||
<string name="download_completed_snackbar_action_open" tools:ignore="UnusedResources">Otvori</string>
|
||||
<!-- Text for the snackbar action button to undo deleting a download. -->
|
||||
<string name="download_undo_delete_snackbar_action">Poništi</string>
|
||||
<!-- Text shown when no download exists -->
|
||||
<string name="download_empty_message_1" moz:removedIn="138" tools:ignore="UnusedResources">Nema preuzetih fajlova</string>
|
||||
<!-- Text shown when no download exists -->
|
||||
<string name="download_empty_message_2">Još nema preuzimanja</string>
|
||||
<!-- Text description shown when no download exists -->
|
||||
<string name="download_empty_description">Fajlovi koje preuzmete će se pojaviti ovdje.</string>
|
||||
<!--
|
||||
History multi select title in app bar
|
||||
%1$d is the number of downloads selected
|
||||
|
@ -1448,6 +1477,20 @@
|
|||
<string name="download_multi_select_title">%1$d označeno</string>
|
||||
<!-- Text for the button to remove a single download item -->
|
||||
<string name="download_delete_item_1" moz:removedIn="138" tools:ignore="UnusedResources">Ukloni</string>
|
||||
<!-- Text for the button to delete a single downloaded file item -->
|
||||
<string name="download_delete_item">Izbriši</string>
|
||||
<!-- Text for the button to share the download URL -->
|
||||
<string name="download_share_url">Dijeli URL</string>
|
||||
<!-- Text for the button to share the download file -->
|
||||
<string name="download_share_file">Dijeli fajl</string>
|
||||
<!-- Alert dialog confirmation before deleting multiple download items, this is the title. -->
|
||||
<string name="download_delete_multi_select_dialog_confirmation" tools:ignore="UnusedResources">Jeste li sigurni da želite izbrisati odabrane stavke?</string>
|
||||
<!-- Alert dialog confirmation before deleting multiple download items, this is the positive action. -->
|
||||
<string name="download_delete_multi_select_dialog_confirm" tools:ignore="UnusedResources">Izbriši</string>
|
||||
<!-- Alert dialog confirmation before deleting multiple download items, this is the negative action. -->
|
||||
<string name="download_delete_multi_select_dialog_cancel" tools:ignore="UnusedResources">Otkaži</string>
|
||||
<!-- Text for the header of in progress downloads -->
|
||||
<string name="download_header_in_progress" tools:ignore="UnusedResources">U procesu</string>
|
||||
<!--
|
||||
Time period headers for downloads
|
||||
|
||||
|
@ -1462,6 +1505,23 @@
|
|||
<string name="download_time_period_last_30_days">Zadnjih 30 dana</string>
|
||||
<!-- Text for the header that groups the downloads older than other groups -->
|
||||
<string name="download_time_period_older">Starije</string>
|
||||
<!--
|
||||
Description of an in progress download item, displayed in the downloads list.
|
||||
%1$s is the current file size that has been downloaded.
|
||||
%2$s is the total size of the downloaded file.
|
||||
%3$s is the amount of time remaining to complete the download.
|
||||
-->
|
||||
<string name="download_item_in_progress_description" tools:ignore="UnusedResources">%1$s / %2$s • Ostalo je %3$s</string>
|
||||
<!-- Text to indicate that an in progress download is paused. -->
|
||||
<string name="download_item_status_paused" tools:ignore="UnusedResources">pauzirano</string>
|
||||
<!-- Text to indicate that the download speed of an in progress download is being calculated. -->
|
||||
<string name="download_item_download_speed_pending" tools:ignore="UnusedResources">na čekanju</string>
|
||||
<!-- Text to indicate that a download has failed to download. -->
|
||||
<string name="download_item_status_failed" tools:ignore="UnusedResources">Neuspjelo preuzimanje</string>
|
||||
<!-- Placeholder text to indicate that users can use the search bar to search for a download. -->
|
||||
<string name="download_search_placeholder" tools:ignore="UnusedResources">Traži preuzimanja</string>
|
||||
<!-- Text to indicate that no downloads match the search query. -->
|
||||
<string name="download_search_no_results_found" tools:ignore="UnusedResources">Nema pronađenih rezultata</string>
|
||||
<!--
|
||||
Downloads Content Type Filters
|
||||
|
||||
|
@ -1476,6 +1536,8 @@
|
|||
<string name="download_content_type_filter_document">Dokumenti</string>
|
||||
<!-- Text for the filter button to show all other file types in the downloads list -->
|
||||
<string name="download_content_type_filter_other" moz:removedIn="138" tools:ignore="UnusedResources">Ostalo</string>
|
||||
<!-- Text for the filter button to show all other file types in the downloads list -->
|
||||
<string name="download_content_type_filter_other_1">Ostalo</string>
|
||||
<!--
|
||||
Description of a downloaded item, displayed in the downloads list.
|
||||
%1$s: The size of the downloaded file.
|
||||
|
@ -1586,6 +1648,14 @@
|
|||
<string name="bookmark_menu_delete_button">Obriši</string>
|
||||
<!-- Bookmark overflow menu save button -->
|
||||
<string name="bookmark_menu_save_button">Spasi</string>
|
||||
<!-- Label for button to sort bookmarks by newest in the bookmark sorting overflow menu. -->
|
||||
<string name="bookmark_sort_menu_newest">Poredaj po najnovijim</string>
|
||||
<!-- Label for button to sort bookmarks by oldest in the bookmark sorting overflow menu. -->
|
||||
<string name="bookmark_sort_menu_oldest">Poredaj po najstarijim</string>
|
||||
<!-- Label for button to sort bookmarks in alphabetical order in the bookmark sorting overflow menu. -->
|
||||
<string name="bookmark_sort_menu_a_to_z">Poredaj po A do Ž</string>
|
||||
<!-- Label for button to sort bookmarks in reverse alphabetical order in the bookmark sorting overflow menu. -->
|
||||
<string name="bookmark_sort_menu_z_to_a">Poredaj od Ž do A</string>
|
||||
<!--
|
||||
Bookmark multi select title in app bar
|
||||
%1$d is the number of bookmarks selected
|
||||
|
@ -3364,8 +3434,40 @@
|
|||
<string name="text_field_eye_trailing_icon_default_content_description">Prikaži skriveni tekst</string>
|
||||
<!-- The default content description for the cross trailing icon button in TextField -->
|
||||
<string name="text_field_cross_trailing_icon_default_content_description">Obriši tekst</string>
|
||||
<!--
|
||||
Setup checklist feature
|
||||
|
||||
The title of the default browser task for the setup checklist
|
||||
-->
|
||||
<string name="setup_checklist_task_default_browser" tools:ignore="UnusedResources">Postavi kao zadani pretraživač</string>
|
||||
<!-- The title of the sign-in task for the setup checklist -->
|
||||
<string name="setup_checklist_task_account_sync" tools:ignore="UnusedResources">Prijavite se na svoj račun</string>
|
||||
<!-- The title of the theme selection task for the setup checklist -->
|
||||
<string name="setup_checklist_task_theme_selection" tools:ignore="UnusedResources">Odaberite temu</string>
|
||||
<!-- The title of the toolbar selection task for the setup checklist -->
|
||||
<string name="setup_checklist_task_toolbar_selection" tools:ignore="UnusedResources">Odaberite položaj trake sa alatima</string>
|
||||
<!-- The title of the explore extensions task for the setup checklist -->
|
||||
<string name="setup_checklist_task_explore_extensions" tools:ignore="UnusedResources">Istražite ekstenzije</string>
|
||||
<!-- The title of the search widget task for the setup checklist -->
|
||||
<string name="setup_checklist_task_search_widget" tools:ignore="UnusedResources">Instalirajte widget za pretraživanje</string>
|
||||
<!-- The title of the 'essentials' group in the setup checklist. %1$s is the name of the app (for example "Firefox"). -->
|
||||
<string name="setup_checklist_group_essentials" tools:ignore="UnusedResources">%1$s osnove</string>
|
||||
<!-- The title of the 'customize' group in the setup checklist. %1$s is the name of the app (for example "Firefox"). -->
|
||||
<string name="setup_checklist_group_customize" tools:ignore="UnusedResources">Prilagodite svoj %1$s</string>
|
||||
<!-- The title of the 'helpful tools' group in the setup checklist -->
|
||||
<string name="setup_checklist_group_helpful_tools" tools:ignore="UnusedResources">Korisni alati</string>
|
||||
<!-- Accessibility description for a check mark on a completed task -->
|
||||
<string name="a11y_completed_task_description">Završen zadatak</string>
|
||||
<!-- Accessibility description for the task icon -->
|
||||
<string name="a11y_task_icon_description">Ikona zadatka</string>
|
||||
<!--
|
||||
Private browsing mode authentication screen
|
||||
|
||||
Label for the secondary action to exit private browsing mode
|
||||
-->
|
||||
<string name="pbm_authentication_leave_private_tabs">Napustite privatne tabove</string>
|
||||
<!-- Label for the primary action button to unlock private tabs -->
|
||||
<string name="pbm_authentication_unlock">Otključaj</string>
|
||||
<!-- Title text instructing the user to unlock private tabs -->
|
||||
<string name="pbm_authentication_unlock_private_tabs">Otključajte privatne tabove</string>
|
||||
</resources>
|
||||
|
|
|
@ -3436,6 +3436,28 @@
|
|||
<string name="text_field_eye_trailing_icon_default_content_description">Show hidden text</string>
|
||||
<!-- The default content description for the cross trailing icon button in TextField -->
|
||||
<string name="text_field_cross_trailing_icon_default_content_description">Clear text</string>
|
||||
<!--
|
||||
Setup checklist feature
|
||||
|
||||
The title of the default browser task for the setup checklist
|
||||
-->
|
||||
<string name="setup_checklist_task_default_browser" tools:ignore="UnusedResources">Set as default browser</string>
|
||||
<!-- The title of the sign-in task for the setup checklist -->
|
||||
<string name="setup_checklist_task_account_sync" tools:ignore="UnusedResources">Sign in to your account</string>
|
||||
<!-- The title of the theme selection task for the setup checklist -->
|
||||
<string name="setup_checklist_task_theme_selection" tools:ignore="UnusedResources">Select a theme</string>
|
||||
<!-- The title of the toolbar selection task for the setup checklist -->
|
||||
<string name="setup_checklist_task_toolbar_selection" tools:ignore="UnusedResources">Choose toolbar placement</string>
|
||||
<!-- The title of the explore extensions task for the setup checklist -->
|
||||
<string name="setup_checklist_task_explore_extensions" tools:ignore="UnusedResources">Explore extensions</string>
|
||||
<!-- The title of the search widget task for the setup checklist -->
|
||||
<string name="setup_checklist_task_search_widget" tools:ignore="UnusedResources">Install search widget</string>
|
||||
<!-- The title of the 'essentials' group in the setup checklist. %1$s is the name of the app (for example "Firefox"). -->
|
||||
<string name="setup_checklist_group_essentials" tools:ignore="UnusedResources">%1$s essentials</string>
|
||||
<!-- The title of the 'customize' group in the setup checklist. %1$s is the name of the app (for example "Firefox"). -->
|
||||
<string name="setup_checklist_group_customize" tools:ignore="UnusedResources">Customise your %1$s</string>
|
||||
<!-- The title of the 'helpful tools' group in the setup checklist -->
|
||||
<string name="setup_checklist_group_helpful_tools" tools:ignore="UnusedResources">Helpful tools</string>
|
||||
<!-- Accessibility description for a check mark on a completed task -->
|
||||
<string name="a11y_completed_task_description">Completed task</string>
|
||||
<!-- Accessibility description for the task icon -->
|
||||
|
|
|
@ -672,6 +672,8 @@
|
|||
<!-- Onboarding toolbar selection card content description for the toolbar placement image. -->
|
||||
<string name="onboarding_customize_toolbar_placement_bottom_content_description">Imagen de la barra de herramientas inferior</string>
|
||||
<string name="onboarding_customize_toolbar_placement_top_content_description">Imagen de la barra de herramientas superior</string>
|
||||
<!-- Action label for toolbar options that can be selected. Talkback will append this to say "Double tap to select". -->
|
||||
<string name="onboarding_customize_toolbar_a11y_action_label_select">seleccionar</string>
|
||||
<!-- Onboarding header for the theme selection card, used by Nimbus experiments. -->
|
||||
<string name="onboarding_customize_theme_title" tools:ignore="UnusedResources">Elige un tema</string>
|
||||
<!-- Onboarding sub header for theme selection card, used by Nimbus experiments. -->
|
||||
|
@ -688,6 +690,8 @@
|
|||
<string name="onboarding_customize_theme_main_image_content_description">Imagen de encabezado grande de la vista de selección de tema que muestra un artista y herramientas de construcción ilustrados.</string>
|
||||
<!-- Onboarding theme selection card content description for the theme selection image. %1$s is placeholder for either 'system', 'light' or 'dark'. -->
|
||||
<string name="onboarding_customize_theme_content_description">Imagen del tema %1$s</string>
|
||||
<!-- Action label for options that can be selected. Talkback will append this to say "Double tap to select". -->
|
||||
<string name="onboarding_customize_theme_a11y_action_label_select">seleccionar</string>
|
||||
<!--
|
||||
Widget Picker
|
||||
|
||||
|
@ -765,6 +769,10 @@
|
|||
<string name="preferences_add_private_browsing_shortcut">Agregar acceso directo a navegación privada</string>
|
||||
<!-- Preference for enabling "HTTPS-Only" mode -->
|
||||
<string name="preferences_https_only_title">Modo solo HTTPS</string>
|
||||
<!-- Preference title for using the screen lock to hide tabs in private browsing -->
|
||||
<string name="preferences_pbm_lock_screen_title">Utiliza el bloqueo de pantalla para ocultar pestañas en la navegación privada</string>
|
||||
<!-- Informs the user how to access the tabs when "Use screen lock to hide tabs in private browsing" is enabled -->
|
||||
<string name="preferences_pbm_lock_screen_summary">Ver pestañas con huella digital, desbloqueo facial o PIN.</string>
|
||||
<!-- Label for cookie banner section in quick settings panel. -->
|
||||
<string name="cookie_banner_blocker">Bloqueador de avisos de cookies</string>
|
||||
<!-- Preference for removing cookie/consent banners from sites automatically in private mode. See reduce_cookie_banner_summary for additional context. -->
|
||||
|
@ -1438,10 +1446,31 @@
|
|||
Text for the snackbar to confirm that multiple downloads items have been removed
|
||||
-->
|
||||
<string name="download_delete_multiple_items_snackbar_1" moz:removedIn="138" tools:ignore="UnusedResources">Descargas eliminadas</string>
|
||||
<!--
|
||||
Text for the snackbar to confirm that a multiple download items have been removed. %1$s is the number of removed download items.
|
||||
%1$d is the number of items deleted.
|
||||
-->
|
||||
<string name="download_delete_multiple_items_snackbar_2">Elementos eliminados: %1$d</string>
|
||||
<!-- Text for the snackbar to confirm that a single download item has been removed. %1$s is the name of the download item. -->
|
||||
<string name="download_delete_single_item_snackbar" moz:removedIn="138" tools:ignore="UnusedResources">%1$s eliminado</string>
|
||||
<!-- Text for the snackbar to confirm that a single download item has been removed. %1$s is the name of the download item. -->
|
||||
<string name="download_delete_single_item_snackbar_2">“%1$s” eliminado</string>
|
||||
<!-- Text for the snackbar to confirm that downloads are in progress. -->
|
||||
<string name="download_in_progress_snackbar" tools:ignore="UnusedResources">Descarga en curso…</string>
|
||||
<!-- Text for the snackbar action button to view in progress download details. -->
|
||||
<string name="download_in_progress_snackbar_action_details" tools:ignore="UnusedResources">Detalles</string>
|
||||
<!-- Text for the snackbar to confirm that a download has completed. -->
|
||||
<string name="download_completed_snackbar" tools:ignore="UnusedResources">Descarga completa</string>
|
||||
<!-- Text for the snackbar action button to open a completed download. -->
|
||||
<string name="download_completed_snackbar_action_open" tools:ignore="UnusedResources">Abierto</string>
|
||||
<!-- Text for the snackbar action button to undo deleting a download. -->
|
||||
<string name="download_undo_delete_snackbar_action">Deshacer</string>
|
||||
<!-- Text shown when no download exists -->
|
||||
<string name="download_empty_message_1" moz:removedIn="138" tools:ignore="UnusedResources">No hay archivos descargados</string>
|
||||
<!-- Text shown when no download exists -->
|
||||
<string name="download_empty_message_2">Todavía no hay descargas</string>
|
||||
<!-- Text description shown when no download exists -->
|
||||
<string name="download_empty_description">Los archivos que descargues aparecerán aquí.</string>
|
||||
<!--
|
||||
History multi select title in app bar
|
||||
%1$d is the number of downloads selected
|
||||
|
@ -1449,6 +1478,20 @@
|
|||
<string name="download_multi_select_title">%1$d seleccionado(s)</string>
|
||||
<!-- Text for the button to remove a single download item -->
|
||||
<string name="download_delete_item_1" moz:removedIn="138" tools:ignore="UnusedResources">Eliminar</string>
|
||||
<!-- Text for the button to delete a single downloaded file item -->
|
||||
<string name="download_delete_item">Eliminar</string>
|
||||
<!-- Text for the button to share the download URL -->
|
||||
<string name="download_share_url">Compartir URL</string>
|
||||
<!-- Text for the button to share the download file -->
|
||||
<string name="download_share_file">Compartir archivo</string>
|
||||
<!-- Alert dialog confirmation before deleting multiple download items, this is the title. -->
|
||||
<string name="download_delete_multi_select_dialog_confirmation" tools:ignore="UnusedResources">¿Seguro que quieres eliminar los elementos seleccionados?</string>
|
||||
<!-- Alert dialog confirmation before deleting multiple download items, this is the positive action. -->
|
||||
<string name="download_delete_multi_select_dialog_confirm" tools:ignore="UnusedResources">Eliminar</string>
|
||||
<!-- Alert dialog confirmation before deleting multiple download items, this is the negative action. -->
|
||||
<string name="download_delete_multi_select_dialog_cancel" tools:ignore="UnusedResources">Cancelar</string>
|
||||
<!-- Text for the header of in progress downloads -->
|
||||
<string name="download_header_in_progress" tools:ignore="UnusedResources">En curso</string>
|
||||
<!--
|
||||
Time period headers for downloads
|
||||
|
||||
|
@ -1463,6 +1506,23 @@
|
|||
<string name="download_time_period_last_30_days">Últimos 30 días</string>
|
||||
<!-- Text for the header that groups the downloads older than other groups -->
|
||||
<string name="download_time_period_older">Más antiguas</string>
|
||||
<!--
|
||||
Description of an in progress download item, displayed in the downloads list.
|
||||
%1$s is the current file size that has been downloaded.
|
||||
%2$s is the total size of the downloaded file.
|
||||
%3$s is the amount of time remaining to complete the download.
|
||||
-->
|
||||
<string name="download_item_in_progress_description" tools:ignore="UnusedResources">%1$s / %2$s • %3$s restantes</string>
|
||||
<!-- Text to indicate that an in progress download is paused. -->
|
||||
<string name="download_item_status_paused" tools:ignore="UnusedResources">pausado</string>
|
||||
<!-- Text to indicate that the download speed of an in progress download is being calculated. -->
|
||||
<string name="download_item_download_speed_pending" tools:ignore="UnusedResources">pendiente</string>
|
||||
<!-- Text to indicate that a download has failed to download. -->
|
||||
<string name="download_item_status_failed" tools:ignore="UnusedResources">Descarga fallida</string>
|
||||
<!-- Placeholder text to indicate that users can use the search bar to search for a download. -->
|
||||
<string name="download_search_placeholder" tools:ignore="UnusedResources">Buscar en descargas</string>
|
||||
<!-- Text to indicate that no downloads match the search query. -->
|
||||
<string name="download_search_no_results_found" tools:ignore="UnusedResources">No se han encontrado resultados</string>
|
||||
<!--
|
||||
Downloads Content Type Filters
|
||||
|
||||
|
@ -1477,6 +1537,8 @@
|
|||
<string name="download_content_type_filter_document">Documentos</string>
|
||||
<!-- Text for the filter button to show all other file types in the downloads list -->
|
||||
<string name="download_content_type_filter_other" moz:removedIn="138" tools:ignore="UnusedResources">Otros</string>
|
||||
<!-- Text for the filter button to show all other file types in the downloads list -->
|
||||
<string name="download_content_type_filter_other_1">Otro</string>
|
||||
<!--
|
||||
Description of a downloaded item, displayed in the downloads list.
|
||||
%1$s: The size of the downloaded file.
|
||||
|
@ -1587,6 +1649,14 @@
|
|||
<string name="bookmark_menu_delete_button">Eliminar</string>
|
||||
<!-- Bookmark overflow menu save button -->
|
||||
<string name="bookmark_menu_save_button">Guardar</string>
|
||||
<!-- Label for button to sort bookmarks by newest in the bookmark sorting overflow menu. -->
|
||||
<string name="bookmark_sort_menu_newest">Ordenar por más reciente</string>
|
||||
<!-- Label for button to sort bookmarks by oldest in the bookmark sorting overflow menu. -->
|
||||
<string name="bookmark_sort_menu_oldest">Ordenar por más antiguo</string>
|
||||
<!-- Label for button to sort bookmarks in alphabetical order in the bookmark sorting overflow menu. -->
|
||||
<string name="bookmark_sort_menu_a_to_z">Ordenar de la A a la Z</string>
|
||||
<!-- Label for button to sort bookmarks in reverse alphabetical order in the bookmark sorting overflow menu. -->
|
||||
<string name="bookmark_sort_menu_z_to_a">Ordenar de la Z a la A</string>
|
||||
<!--
|
||||
Bookmark multi select title in app bar
|
||||
%1$d is the number of bookmarks selected
|
||||
|
@ -3364,8 +3434,40 @@
|
|||
<string name="text_field_eye_trailing_icon_default_content_description">Mostrar texto oculto</string>
|
||||
<!-- The default content description for the cross trailing icon button in TextField -->
|
||||
<string name="text_field_cross_trailing_icon_default_content_description">Borrar texto</string>
|
||||
<!--
|
||||
Setup checklist feature
|
||||
|
||||
The title of the default browser task for the setup checklist
|
||||
-->
|
||||
<string name="setup_checklist_task_default_browser" tools:ignore="UnusedResources">Establecer como navegador predeterminado</string>
|
||||
<!-- The title of the sign-in task for the setup checklist -->
|
||||
<string name="setup_checklist_task_account_sync" tools:ignore="UnusedResources">Conéctate a tu cuenta</string>
|
||||
<!-- The title of the theme selection task for the setup checklist -->
|
||||
<string name="setup_checklist_task_theme_selection" tools:ignore="UnusedResources">Seleccionar un tema</string>
|
||||
<!-- The title of the toolbar selection task for the setup checklist -->
|
||||
<string name="setup_checklist_task_toolbar_selection" tools:ignore="UnusedResources">Elige la ubicación de la barra de herramientas</string>
|
||||
<!-- The title of the explore extensions task for the setup checklist -->
|
||||
<string name="setup_checklist_task_explore_extensions" tools:ignore="UnusedResources">Explorar extensiones</string>
|
||||
<!-- The title of the search widget task for the setup checklist -->
|
||||
<string name="setup_checklist_task_search_widget" tools:ignore="UnusedResources">Instalar el widget de búsqueda</string>
|
||||
<!-- The title of the 'essentials' group in the setup checklist. %1$s is the name of the app (for example "Firefox"). -->
|
||||
<string name="setup_checklist_group_essentials" tools:ignore="UnusedResources">Esenciales de %1$s</string>
|
||||
<!-- The title of the 'customize' group in the setup checklist. %1$s is the name of the app (for example "Firefox"). -->
|
||||
<string name="setup_checklist_group_customize" tools:ignore="UnusedResources">Personaliza tu %1$s</string>
|
||||
<!-- The title of the 'helpful tools' group in the setup checklist -->
|
||||
<string name="setup_checklist_group_helpful_tools" tools:ignore="UnusedResources">Herramientas útiles</string>
|
||||
<!-- Accessibility description for a check mark on a completed task -->
|
||||
<string name="a11y_completed_task_description">Tarea completada</string>
|
||||
<!-- Accessibility description for the task icon -->
|
||||
<string name="a11y_task_icon_description">Icono de tarea</string>
|
||||
<!--
|
||||
Private browsing mode authentication screen
|
||||
|
||||
Label for the secondary action to exit private browsing mode
|
||||
-->
|
||||
<string name="pbm_authentication_leave_private_tabs">Salir de pestañas privadas</string>
|
||||
<!-- Label for the primary action button to unlock private tabs -->
|
||||
<string name="pbm_authentication_unlock">Desbloquear</string>
|
||||
<!-- Title text instructing the user to unlock private tabs -->
|
||||
<string name="pbm_authentication_unlock_private_tabs">Desbloquear pestañas privadas</string>
|
||||
</resources>
|
||||
|
|
|
@ -777,6 +777,8 @@
|
|||
<string name="preferences_show_voice_search">Lêgerîna dengî nîşan bide</string>
|
||||
<!-- Preference title for switch preference to show search suggestions also in private mode -->
|
||||
<string name="preferences_show_search_suggestions_in_private">Di rûniştinên veşartî de nîşan bide</string>
|
||||
<!-- Preference title for switch preference to show trending search suggestions -->
|
||||
<string name="preferences_show_trending_search_suggestions">Pêşniyarên rojevî nîşan bide</string>
|
||||
<!-- Preference title for switch preference to show a clipboard suggestion when searching -->
|
||||
<string name="preferences_show_clipboard_suggestions">Pêşniyarên panoyê nîşan bide</string>
|
||||
<!-- Preference title for switch preference to suggest browsing history when searching -->
|
||||
|
@ -789,6 +791,8 @@
|
|||
<string name="preferences_account_settings">Sazkariyên hesêb</string>
|
||||
<!-- Preference for enabling url autocomplete -->
|
||||
<string name="preferences_enable_autocomplete_urls">Navnîşanan bixweber dagire</string>
|
||||
<!-- Preference title for switch preference to show sponsored Firefox Suggest search suggestions -->
|
||||
<string name="preferences_show_sponsored_suggestions">Pêşniyarên ji sponsoran</string>
|
||||
<!-- Preference for open links in third party apps -->
|
||||
<string name="preferences_open_links_in_apps">Girêdanan di sepanan de veke</string>
|
||||
<!-- Preference for open links in third party apps always open in apps option -->
|
||||
|
@ -1286,6 +1290,8 @@
|
|||
<string name="tab_crash_restore">Hilpekînê vegerîne</string>
|
||||
<!-- Unsubmitted crash dialog negative button to dismiss the dialog -->
|
||||
<string name="unsubmitted_crash_dialog_negative_button">Bigire</string>
|
||||
<!-- Unsubmitted crash dialog positive button to submit crash report -->
|
||||
<string name="unsubmitted_crash_dialog_positive_button">Rapora qezayê bişîne</string>
|
||||
<!--
|
||||
Bookmarks
|
||||
|
||||
|
|
|
@ -682,6 +682,22 @@
|
|||
<string name="onboarding_save_and_start_button">ᱥᱟᱸᱪᱟᱣ ᱢᱮ ᱟᱨ ᱵᱽᱨᱟᱣᱩᱡᱤᱝ ᱮᱦᱚᱵ ᱢᱮ</string>
|
||||
<!-- Onboarding theme selection card label for 'dark' option, used by Nimbus experiments. -->
|
||||
<string name="onboarding_customize_theme_dark_option">ᱧᱩᱛ</string>
|
||||
<!-- Onboarding theme selection card label for 'light' option, used by Nimbus experiments. -->
|
||||
<string name="onboarding_customize_theme_light_option">ᱢᱟᱨᱥᱟᱞ</string>
|
||||
<!-- Onboarding theme selection card label for 'System auto' option, used by Nimbus experiments. -->
|
||||
<string name="onboarding_customize_theme_system_option">ᱥᱤᱥᱴᱚᱢ ᱟᱡ ᱛᱮ</string>
|
||||
<!-- Onboarding theme selection card content description for the main image. -->
|
||||
<string name="onboarding_customize_theme_main_image_content_description">ᱪᱤᱛᱟᱹᱨ ᱠᱟᱹᱨᱤᱜᱚᱞᱨ ᱟᱨ ᱵᱤᱞᱰᱟᱨ ᱥᱟᱯᱟᱵ ᱠᱚ ᱩᱫᱩᱜ ᱛᱷᱤᱢ ᱵᱟᱪᱷᱟᱣ ᱧᱮᱞ ᱨᱮᱭᱟᱜ ᱢᱟᱨᱟᱝ ᱦᱮᱰᱟᱨ ᱪᱤᱛᱟᱹᱨ ᱾</string>
|
||||
<!-- Onboarding theme selection card content description for the theme selection image. %1$s is placeholder for either 'system', 'light' or 'dark'. -->
|
||||
<string name="onboarding_customize_theme_content_description">%1$s ᱛᱷᱤᱢ ᱨᱮᱭᱟᱜ ᱪᱤᱛᱟᱹᱨ</string>
|
||||
<!-- Action label for options that can be selected. Talkback will append this to say "Double tap to select". -->
|
||||
<string name="onboarding_customize_theme_a11y_action_label_select">ᱵᱟᱪᱷᱟᱣ ᱢᱮ</string>
|
||||
<!--
|
||||
Widget Picker
|
||||
|
||||
Widget description for widget picker screen
|
||||
-->
|
||||
<string name="widget_picket_description">ᱩᱥᱟᱹᱨᱟ ᱥᱮᱸᱫᱽᱨᱟ ᱮᱦᱚᱵ ᱢᱮ</string>
|
||||
<!--
|
||||
Search Widget
|
||||
|
||||
|
@ -753,6 +769,10 @@
|
|||
<string name="preferences_add_private_browsing_shortcut">ᱱᱤᱡᱮᱨᱟᱜ ᱵᱽᱨᱟᱣᱩᱡᱤᱝ ᱠᱷᱟᱴᱚᱢᱟᱪᱷᱟ ᱥᱮᱞᱮᱫᱽ ᱢᱮ</string>
|
||||
<!-- Preference for enabling "HTTPS-Only" mode -->
|
||||
<string name="preferences_https_only_title">ᱠᱷᱟᱹᱞᱤᱼHTTPS ᱢᱳᱰ</string>
|
||||
<!-- Preference title for using the screen lock to hide tabs in private browsing -->
|
||||
<string name="preferences_pbm_lock_screen_title">ᱯᱨᱟᱭᱣᱮᱴ ᱵᱽᱨᱟᱣᱩᱡᱤᱝ ᱨᱮ ᱴᱮᱵᱽ ᱩᱠᱩ ᱞᱟᱹᱜᱤᱫ ᱥᱠᱨᱤᱱ ᱞᱚᱠ ᱵᱮᱵᱷᱟᱨ ᱢᱮ</string>
|
||||
<!-- Informs the user how to access the tabs when "Use screen lock to hide tabs in private browsing" is enabled -->
|
||||
<string name="preferences_pbm_lock_screen_summary">ᱠᱟᱹᱴᱩᱵ ᱪᱤᱛᱟᱹᱨ, ᱪᱮᱦᱨᱟ ᱠᱟᱹᱴᱷᱤ, ᱵᱟᱝᱠᱷᱟᱱ PIN ᱥᱟᱶ ᱴᱮᱵᱽ ᱧᱮᱞ ᱢᱮ ᱾</string>
|
||||
<!-- Label for cookie banner section in quick settings panel. -->
|
||||
<string name="cookie_banner_blocker">ᱠᱩᱠᱤ ᱵᱮᱱᱚᱨ ᱟᱠᱚᱴᱤᱭᱟᱹ</string>
|
||||
<!-- Preference for removing cookie/consent banners from sites automatically in private mode. See reduce_cookie_banner_summary for additional context. -->
|
||||
|
|
|
@ -491,6 +491,8 @@
|
|||
<string name="onboarding_first_screen_button_text" moz:removedIn="137" tools:ignore="UnusedResources">Započnite</string>
|
||||
<!-- New Onboarding flow first screen button label -->
|
||||
<string name="onboarding_first_screen_button_agree_and_continue">Slažem se, nastavi</string>
|
||||
<!-- In the first screen of new onboarding flow, additional accessibility description for content that contain urls. -->
|
||||
<string name="a11y_link_available">Link dostupan</string>
|
||||
<!--
|
||||
Onboarding second screen: Title
|
||||
|
||||
|
|
|
@ -491,6 +491,8 @@
|
|||
<string name="onboarding_first_screen_button_text" moz:removedIn="137" tools:ignore="UnusedResources">Comenzar</string>
|
||||
<!-- New Onboarding flow first screen button label -->
|
||||
<string name="onboarding_first_screen_button_agree_and_continue">Aceptar y continuar</string>
|
||||
<!-- In the first screen of new onboarding flow, additional accessibility description for content that contain urls. -->
|
||||
<string name="a11y_link_available">Enlace disponible</string>
|
||||
<!--
|
||||
Onboarding second screen: Title
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"an": {
|
||||
"pin": false,
|
||||
|
@ -15,7 +15,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ar": {
|
||||
"pin": false,
|
||||
|
@ -24,7 +24,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ast": {
|
||||
"pin": false,
|
||||
|
@ -33,7 +33,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"az": {
|
||||
"pin": false,
|
||||
|
@ -42,7 +42,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"be": {
|
||||
"pin": false,
|
||||
|
@ -51,7 +51,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"bg": {
|
||||
"pin": false,
|
||||
|
@ -60,7 +60,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"bn": {
|
||||
"pin": false,
|
||||
|
@ -69,7 +69,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"br": {
|
||||
"pin": false,
|
||||
|
@ -78,7 +78,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"bs": {
|
||||
"pin": false,
|
||||
|
@ -87,7 +87,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ca": {
|
||||
"pin": false,
|
||||
|
@ -96,7 +96,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"cak": {
|
||||
"pin": false,
|
||||
|
@ -105,7 +105,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"cs": {
|
||||
"pin": false,
|
||||
|
@ -114,7 +114,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"cy": {
|
||||
"pin": false,
|
||||
|
@ -123,7 +123,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"da": {
|
||||
"pin": false,
|
||||
|
@ -132,7 +132,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"de": {
|
||||
"pin": false,
|
||||
|
@ -141,7 +141,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"dsb": {
|
||||
"pin": false,
|
||||
|
@ -150,7 +150,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"el": {
|
||||
"pin": false,
|
||||
|
@ -159,7 +159,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"en-CA": {
|
||||
"pin": false,
|
||||
|
@ -168,7 +168,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"en-GB": {
|
||||
"pin": false,
|
||||
|
@ -177,7 +177,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"eo": {
|
||||
"pin": false,
|
||||
|
@ -186,7 +186,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"es-AR": {
|
||||
"pin": false,
|
||||
|
@ -195,7 +195,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"es-CL": {
|
||||
"pin": false,
|
||||
|
@ -204,7 +204,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"es-ES": {
|
||||
"pin": false,
|
||||
|
@ -213,7 +213,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"es-MX": {
|
||||
"pin": false,
|
||||
|
@ -222,7 +222,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"et": {
|
||||
"pin": false,
|
||||
|
@ -231,7 +231,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"eu": {
|
||||
"pin": false,
|
||||
|
@ -240,7 +240,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"fa": {
|
||||
"pin": false,
|
||||
|
@ -249,7 +249,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ff": {
|
||||
"pin": false,
|
||||
|
@ -258,7 +258,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"fi": {
|
||||
"pin": false,
|
||||
|
@ -267,7 +267,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"fr": {
|
||||
"pin": false,
|
||||
|
@ -276,7 +276,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"fy-NL": {
|
||||
"pin": false,
|
||||
|
@ -285,7 +285,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ga-IE": {
|
||||
"pin": false,
|
||||
|
@ -294,7 +294,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"gd": {
|
||||
"pin": false,
|
||||
|
@ -303,7 +303,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"gl": {
|
||||
"pin": false,
|
||||
|
@ -312,7 +312,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"gn": {
|
||||
"pin": false,
|
||||
|
@ -321,7 +321,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"gu-IN": {
|
||||
"pin": false,
|
||||
|
@ -330,7 +330,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"he": {
|
||||
"pin": false,
|
||||
|
@ -339,7 +339,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hi-IN": {
|
||||
"pin": false,
|
||||
|
@ -348,7 +348,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hr": {
|
||||
"pin": false,
|
||||
|
@ -357,7 +357,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hsb": {
|
||||
"pin": false,
|
||||
|
@ -366,7 +366,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hu": {
|
||||
"pin": false,
|
||||
|
@ -375,7 +375,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"hy-AM": {
|
||||
"pin": false,
|
||||
|
@ -384,7 +384,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ia": {
|
||||
"pin": false,
|
||||
|
@ -393,7 +393,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"id": {
|
||||
"pin": false,
|
||||
|
@ -402,7 +402,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"is": {
|
||||
"pin": false,
|
||||
|
@ -411,7 +411,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"it": {
|
||||
"pin": false,
|
||||
|
@ -420,7 +420,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ja": {
|
||||
"pin": false,
|
||||
|
@ -429,7 +429,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ka": {
|
||||
"pin": false,
|
||||
|
@ -438,7 +438,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"kab": {
|
||||
"pin": false,
|
||||
|
@ -447,7 +447,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"kk": {
|
||||
"pin": false,
|
||||
|
@ -456,7 +456,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"km": {
|
||||
"pin": false,
|
||||
|
@ -465,7 +465,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"kn": {
|
||||
"pin": false,
|
||||
|
@ -474,7 +474,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ko": {
|
||||
"pin": false,
|
||||
|
@ -483,7 +483,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"lij": {
|
||||
"pin": false,
|
||||
|
@ -492,7 +492,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"lo": {
|
||||
"pin": false,
|
||||
|
@ -501,7 +501,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"lt": {
|
||||
"pin": false,
|
||||
|
@ -510,7 +510,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ltg": {
|
||||
"pin": false,
|
||||
|
@ -519,7 +519,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"lv": {
|
||||
"pin": false,
|
||||
|
@ -528,7 +528,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"meh": {
|
||||
"pin": false,
|
||||
|
@ -537,7 +537,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"mix": {
|
||||
"pin": false,
|
||||
|
@ -546,7 +546,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ml": {
|
||||
"pin": false,
|
||||
|
@ -555,7 +555,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"mr": {
|
||||
"pin": false,
|
||||
|
@ -564,7 +564,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ms": {
|
||||
"pin": false,
|
||||
|
@ -573,7 +573,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"my": {
|
||||
"pin": false,
|
||||
|
@ -582,7 +582,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"nb-NO": {
|
||||
"pin": false,
|
||||
|
@ -591,7 +591,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ne-NP": {
|
||||
"pin": false,
|
||||
|
@ -600,7 +600,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"nl": {
|
||||
"pin": false,
|
||||
|
@ -609,7 +609,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"nn-NO": {
|
||||
"pin": false,
|
||||
|
@ -618,7 +618,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"oc": {
|
||||
"pin": false,
|
||||
|
@ -627,7 +627,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"pa-IN": {
|
||||
"pin": false,
|
||||
|
@ -636,7 +636,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"pl": {
|
||||
"pin": false,
|
||||
|
@ -645,7 +645,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"pt-BR": {
|
||||
"pin": false,
|
||||
|
@ -654,7 +654,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"pt-PT": {
|
||||
"pin": false,
|
||||
|
@ -663,7 +663,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"rm": {
|
||||
"pin": false,
|
||||
|
@ -672,7 +672,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ro": {
|
||||
"pin": false,
|
||||
|
@ -681,7 +681,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ru": {
|
||||
"pin": false,
|
||||
|
@ -690,7 +690,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sk": {
|
||||
"pin": false,
|
||||
|
@ -699,7 +699,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sl": {
|
||||
"pin": false,
|
||||
|
@ -708,7 +708,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"son": {
|
||||
"pin": false,
|
||||
|
@ -717,7 +717,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sq": {
|
||||
"pin": false,
|
||||
|
@ -726,7 +726,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sr": {
|
||||
"pin": false,
|
||||
|
@ -735,7 +735,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"sv-SE": {
|
||||
"pin": false,
|
||||
|
@ -744,7 +744,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ta": {
|
||||
"pin": false,
|
||||
|
@ -753,7 +753,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"te": {
|
||||
"pin": false,
|
||||
|
@ -762,7 +762,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"th": {
|
||||
"pin": false,
|
||||
|
@ -771,7 +771,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"tl": {
|
||||
"pin": false,
|
||||
|
@ -780,7 +780,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"tr": {
|
||||
"pin": false,
|
||||
|
@ -789,7 +789,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"trs": {
|
||||
"pin": false,
|
||||
|
@ -798,7 +798,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"uk": {
|
||||
"pin": false,
|
||||
|
@ -807,7 +807,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"ur": {
|
||||
"pin": false,
|
||||
|
@ -816,7 +816,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"uz": {
|
||||
"pin": false,
|
||||
|
@ -825,7 +825,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"vi": {
|
||||
"pin": false,
|
||||
|
@ -834,7 +834,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"wo": {
|
||||
"pin": false,
|
||||
|
@ -843,7 +843,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"xh": {
|
||||
"pin": false,
|
||||
|
@ -852,7 +852,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"zam": {
|
||||
"pin": false,
|
||||
|
@ -861,7 +861,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"zh-CN": {
|
||||
"pin": false,
|
||||
|
@ -870,7 +870,7 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
},
|
||||
"zh-TW": {
|
||||
"pin": false,
|
||||
|
@ -879,6 +879,6 @@
|
|||
"android-arm",
|
||||
"android-multilocale"
|
||||
],
|
||||
"revision": "22ddd09d5b7bf939862d445984bc2c3095dc2503"
|
||||
"revision": "467538f140e3a848feafd5eba60654350dcce57f"
|
||||
}
|
||||
}
|
|
@ -5235,11 +5235,7 @@
|
|||
# Maximum value of navigator.hardwareConcurrency.
|
||||
- name: dom.maxHardwareConcurrency
|
||||
type: RelaxedAtomicUint32
|
||||
#ifdef NIGHTLY_BUILD
|
||||
value: 128
|
||||
#else
|
||||
value: 16
|
||||
#endif
|
||||
mirror: always
|
||||
|
||||
# W3C pointer events draft.
|
||||
|
@ -18652,7 +18648,7 @@
|
|||
# * 2: auto
|
||||
- name: widget.windows.follow_shortcuts_on_file_open
|
||||
type: RelaxedAtomicInt32
|
||||
value: 2
|
||||
value: 1
|
||||
mirror: always
|
||||
|
||||
# The number of messages of each type to keep for display in
|
||||
|
|
|
@ -3343,7 +3343,7 @@ pref("urlclassifier.features.consentmanager.annotate.allowlistTables", "mozstd-t
|
|||
pref("urlclassifier.disallow_completions", "goog-downloadwhite-digest256,base-track-digest256,mozstd-trackwhite-digest256,content-track-digest256,mozplugin-block-digest256,mozplugin2-block-digest256,ads-track-digest256,social-track-digest256,analytics-track-digest256,base-fingerprinting-track-digest256,content-fingerprinting-track-digest256,base-cryptomining-track-digest256,content-cryptomining-track-digest256,fanboyannoyance-ads-digest256,fanboysocial-ads-digest256,easylist-ads-digest256,easyprivacy-ads-digest256,adguard-ads-digest256,social-tracking-protection-digest256,social-tracking-protection-facebook-digest256,social-tracking-protection-linkedin-digest256,social-tracking-protection-twitter-digest256,base-email-track-digest256,content-email-track-digest256,consent-manager-track-digest256");
|
||||
|
||||
// Workaround for Google Recaptcha
|
||||
pref("urlclassifier.trackingAnnotationSkipURLs", "*://google.com/recaptcha/*,*://*.google.com/recaptcha/*,*://d3vox9szr7t2nm.cloudfront.net/*");
|
||||
pref("urlclassifier.trackingAnnotationSkipURLs", "");
|
||||
pref("privacy.rejectForeign.allowList", "");
|
||||
|
||||
// The list of email webapp sites
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
# documentation and how to modify this file.
|
||||
repo: mozilla-central
|
||||
created_at: '2021-10-14T12:50:40.073465'
|
||||
updated_at: '2025-04-02T20:26:15.852994+00:00'
|
||||
updated_at: '2025-04-07T08:24:03.558859+00:00'
|
||||
export:
|
||||
path: ./docs/mots/index.rst
|
||||
format: rst
|
||||
|
@ -1273,6 +1273,7 @@ modules:
|
|||
- *bvandersloot
|
||||
- *dimi
|
||||
- *emz
|
||||
- *tjr
|
||||
machine_name: core_antitracking
|
||||
|
||||
- name: 'Core: APZ (Graphics submodule)'
|
||||
|
@ -4546,5 +4547,5 @@ modules:
|
|||
- Ryan Tilder
|
||||
group: dev-platform
|
||||
hashes:
|
||||
config: 93b411d8790c372028509fc186c01b8a34ec8cd5
|
||||
export: 3823627c4a11aab9dc12d92537080eeddffceb34
|
||||
config: 191cbfa5573d7c94c637045ac3ed62e662fb1b03
|
||||
export: 7fb1baa3c6c64954bdaca31c752859f93cf2b78b
|
||||
|
|
|
@ -35,7 +35,7 @@ from mozbuild.base import (
|
|||
MozbuildObject,
|
||||
)
|
||||
from mozbuild.base import MachCommandConditions as conditions
|
||||
from mozbuild.util import MOZBUILD_METRICS_PATH
|
||||
from mozbuild.util import MOZBUILD_METRICS_PATH, ForwardingArgumentParser
|
||||
|
||||
here = os.path.abspath(os.path.dirname(__file__))
|
||||
|
||||
|
@ -1476,7 +1476,7 @@ def _get_android_run_parser():
|
|||
|
||||
|
||||
def _get_jsshell_run_parser():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser = ForwardingArgumentParser()
|
||||
group = parser.add_argument_group("Compiled Program Environment Options")
|
||||
|
||||
group = parser.add_argument_group("debugging")
|
||||
|
@ -1506,22 +1506,12 @@ def _get_jsshell_run_parser():
|
|||
help=argparse.SUPPRESS,
|
||||
)
|
||||
|
||||
group = parser.add_argument_group("Compiled Program Options")
|
||||
# Trick ArgumentParser into displaying an advice to access program help
|
||||
group.add_argument(
|
||||
"fake_help",
|
||||
nargs=argparse.REMAINDER,
|
||||
default=[],
|
||||
metavar="-- --help",
|
||||
help="Display the program help.",
|
||||
)
|
||||
group.add_argument(
|
||||
"params",
|
||||
nargs=argparse.REMAINDER,
|
||||
default=[],
|
||||
metavar="[--] params...",
|
||||
parser.add_forwarding_group(
|
||||
title="Compiled Program Options",
|
||||
dest="params",
|
||||
help="Command-line arguments to be passed through to the program. "
|
||||
"Omitting --profile or -P results in a temporary profile being used.",
|
||||
forwarding_help="Display the program help.",
|
||||
)
|
||||
|
||||
return parser
|
||||
|
@ -1529,7 +1519,7 @@ def _get_jsshell_run_parser():
|
|||
|
||||
def _get_desktop_run_parser():
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser = ForwardingArgumentParser()
|
||||
group = parser.add_argument_group("Compiled Program Environment Options")
|
||||
group.add_argument("--packaged", action="store_true", help="Run a packaged build.")
|
||||
group.add_argument(
|
||||
|
@ -1632,25 +1622,13 @@ def _get_desktop_run_parser():
|
|||
"--show-dump-stats", action="store_true", help="Show stats when doing dumps."
|
||||
)
|
||||
|
||||
group = parser.add_argument_group("Compiled Program Options")
|
||||
# Trick ArgumentParser into displaying an advice to access program help
|
||||
group.add_argument(
|
||||
"fake_help",
|
||||
nargs=argparse.REMAINDER,
|
||||
default=[],
|
||||
metavar="-- --help",
|
||||
help="Display the program help.",
|
||||
)
|
||||
|
||||
group.add_argument(
|
||||
"params",
|
||||
nargs=argparse.REMAINDER,
|
||||
default=[],
|
||||
metavar="[--] params...",
|
||||
parser.add_forwarding_group(
|
||||
title="Compiled Program Options",
|
||||
dest="params",
|
||||
help="Command-line arguments to be passed through to the program. "
|
||||
"Omitting --profile or -P results in a temporary profile being used.",
|
||||
forwarding_help="Display the program help.",
|
||||
)
|
||||
|
||||
return parser
|
||||
|
||||
|
||||
|
@ -1672,10 +1650,6 @@ def setup_run_parser():
|
|||
)
|
||||
def run(command_context, **kwargs):
|
||||
"""Run the compiled program."""
|
||||
# Get rid of fake_help artifact
|
||||
fake_help = kwargs.pop("fake_help", None)
|
||||
assert not fake_help
|
||||
|
||||
if conditions.is_android(command_context):
|
||||
return _run_android(command_context, **kwargs)
|
||||
if conditions.is_jsshell(command_context):
|
||||
|
|
|
@ -7,6 +7,7 @@ import copy
|
|||
import hashlib
|
||||
import itertools
|
||||
import os
|
||||
import re
|
||||
import string
|
||||
import sys
|
||||
import unittest
|
||||
|
@ -19,6 +20,7 @@ from mozunit import main
|
|||
from mozbuild.util import (
|
||||
EnumString,
|
||||
EnumStringComparisonError,
|
||||
ForwardingArgumentParser,
|
||||
HierarchicalStringList,
|
||||
MozbuildDeletionError,
|
||||
ReadOnlyDict,
|
||||
|
@ -886,5 +888,38 @@ def test_read_only_dict():
|
|||
assert isinstance(d_copy, ReadOnlyDict)
|
||||
|
||||
|
||||
def test_forwarding_argument_parser():
|
||||
# init
|
||||
parser = ForwardingArgumentParser()
|
||||
parser.add_forwarding_group(
|
||||
title="my forwarding group",
|
||||
dest="fwd",
|
||||
help="some program",
|
||||
forwarding_help="some help",
|
||||
)
|
||||
|
||||
# test help format
|
||||
formatted_help = parser.format_help()
|
||||
ref_help = """\
|
||||
usage: test_util.py \\[-h\\] ...
|
||||
|
||||
option.*:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
my forwarding group:
|
||||
-- --help some help
|
||||
|
||||
\\[--\\] fwd... some program
|
||||
"""
|
||||
assert re.match(ref_help, formatted_help)
|
||||
|
||||
# test argument parsing
|
||||
forwarded_args = parser.parse_args(["1", "2"])
|
||||
assert forwarded_args.fwd == ["1", "2"]
|
||||
|
||||
forwarded_help = parser.parse_args(["--", "--help"])
|
||||
assert forwarded_help.fwd == ["--", "--help"]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
|
@ -1132,6 +1132,33 @@ def expand_variables(s, variables):
|
|||
return result
|
||||
|
||||
|
||||
class ForwardingArgumentParser(argparse.ArgumentParser):
|
||||
"""
|
||||
An argument parser with customized help generation when forwarding
|
||||
arguments.
|
||||
"""
|
||||
|
||||
def add_forwarding_group(
|
||||
self, title, dest, help, forwarding_help, default_type=list, **kwargs
|
||||
):
|
||||
"""
|
||||
Add a group that captures all remaining arguments in order to pass them
|
||||
down to another program.
|
||||
"""
|
||||
group = self.add_argument_group(
|
||||
title, description=f"-- --help {forwarding_help}", **kwargs
|
||||
)
|
||||
|
||||
group.add_argument(
|
||||
dest,
|
||||
nargs=argparse.REMAINDER,
|
||||
default=default_type(),
|
||||
metavar=f"[--] {dest}...",
|
||||
help=help,
|
||||
)
|
||||
return group
|
||||
|
||||
|
||||
class DefinesAction(argparse.Action):
|
||||
"""An ArgumentParser action to handle -Dvar[=value] type of arguments."""
|
||||
|
||||
|
|
|
@ -142,7 +142,7 @@ macro_rules! lnf_int_variable {
|
|||
}};
|
||||
}
|
||||
|
||||
static CHROME_ENVIRONMENT_VARIABLES: [EnvironmentVariable; 9] = [
|
||||
static CHROME_ENVIRONMENT_VARIABLES: [EnvironmentVariable; 10] = [
|
||||
lnf_int_variable!(
|
||||
atom!("-moz-mac-titlebar-height"),
|
||||
MacTitlebarHeight,
|
||||
|
@ -158,6 +158,11 @@ static CHROME_ENVIRONMENT_VARIABLES: [EnvironmentVariable; 9] = [
|
|||
TitlebarRadius,
|
||||
int_pixels
|
||||
),
|
||||
lnf_int_variable!(
|
||||
atom!("-moz-gtk-csd-tooltip-radius"),
|
||||
TooltipRadius,
|
||||
int_pixels
|
||||
),
|
||||
lnf_int_variable!(
|
||||
atom!("-moz-gtk-csd-close-button-position"),
|
||||
GTKCSDCloseButtonPosition,
|
||||
|
|
|
@ -76,7 +76,7 @@ tasks:
|
|||
fedora42:
|
||||
image: fedora:42
|
||||
pre-commands:
|
||||
- dnf install -y mercurial python3-pip
|
||||
- dnf install -y mercurial python3-pip awk
|
||||
rockylinux8:
|
||||
image: rockylinux:8
|
||||
pre-commands:
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[key-conversion-exceptions.htm]
|
||||
expected:
|
||||
if (os == "android") and fission: [OK, TIMEOUT]
|
|
@ -1,3 +0,0 @@
|
|||
[key_invalid.htm]
|
||||
expected:
|
||||
if (os == "android") and fission: [TIMEOUT, OK]
|
|
@ -1,3 +0,0 @@
|
|||
[key_valid.html]
|
||||
expected:
|
||||
if (os == "android") and fission: [OK, TIMEOUT]
|
|
@ -1,52 +0,0 @@
|
|||
[keyorder.htm]
|
||||
expected:
|
||||
if (os == "win") and not debug and (processor == "x86"): [OK, TIMEOUT]
|
||||
if (os == "linux") and asan and fission: CRASH
|
||||
if (os == "mac") and not debug: [OK, CRASH]
|
||||
[Database readback sort - String < Array]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - float < String]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - float < Date]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - float < Date < String < Array]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - Date(1 sec ago) < Date(now) < Date(1 minute in future)]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - -1.1 < 1 < 1.01337 < 1.013373 < 2]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - -Infinity < -0.01 < 0 < Infinity]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - "" < "a" < "ab" < "b" < "ba"]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - Arrays]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - Array.length: 10,000 < Array.length: 10,001]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - Infinity inside arrays]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
||||
|
||||
[Database readback sort - Test different stuff at once]
|
||||
expected:
|
||||
if (processor == "x86") and not debug: [PASS, NOTRUN]
|
|
@ -14,12 +14,6 @@
|
|||
[LanguageDetector.measureInputUsage() and inputQuota basic usage.]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting Translator.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.create() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -47,15 +41,18 @@
|
|||
[LanguageDetector.measureInputUsage() and inputQuota basic usage.]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting Translator.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
[Creating LanguageDetector with expectedInputLanguages]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.create() notifies its monitor on downloadprogress]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting LanguageDetector.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[detector.https.tentative.any.html]
|
||||
[Simple LanguageDetector.availability() call]
|
||||
|
@ -73,12 +70,6 @@
|
|||
[LanguageDetector.measureInputUsage() and inputQuota basic usage.]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting Translator.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.create() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -106,15 +97,18 @@
|
|||
[LanguageDetector.measureInputUsage() and inputQuota basic usage.]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting Translator.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
[Creating LanguageDetector with expectedInputLanguages]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.create() notifies its monitor on downloadprogress]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting LanguageDetector.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[detector.https.tentative.any.serviceworker.html]
|
||||
[Simple LanguageDetector.availability() call]
|
||||
|
@ -132,12 +126,6 @@
|
|||
[LanguageDetector.measureInputUsage() and inputQuota basic usage.]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting Translator.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.create() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -165,15 +153,18 @@
|
|||
[LanguageDetector.measureInputUsage() and inputQuota basic usage.]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting Translator.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
[Creating LanguageDetector with expectedInputLanguages]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.create() notifies its monitor on downloadprogress]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting LanguageDetector.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[detector.https.tentative.any.sharedworker.html]
|
||||
[Simple LanguageDetector.availability() call]
|
||||
|
@ -191,12 +182,6 @@
|
|||
[LanguageDetector.measureInputUsage() and inputQuota basic usage.]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting Translator.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.create() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -224,11 +209,14 @@
|
|||
[LanguageDetector.measureInputUsage() and inputQuota basic usage.]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting Translator.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
[Creating LanguageDetector with expectedInputLanguages]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.create() notifies its monitor on downloadprogress]
|
||||
expected: FAIL
|
||||
|
||||
[LanguageDetector.measureInputUsage() call with an aborted signal.]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting LanguageDetector.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
|
|
@ -26,9 +26,6 @@
|
|||
[Aborting Translator.translate().]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.create() monitor option is called correctly.]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.translate() echos non-translatable content]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -40,3 +37,6 @@
|
|||
|
||||
[Aborting Translator.measureInputUsage().]
|
||||
expected: FAIL
|
||||
|
||||
[Translator.create() notifies its monitor on downloadprogress]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
[clear-cache-bfcache.sub.https.html]
|
||||
[BfCached document shouldn't be cached after receiving clear-cache header from the same origin.]
|
||||
expected: FAIL
|
||||
|
||||
[BfCached document shouldn't be cached after receiving clear-cache header from another window.]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[partitioned-cookies-same-site-subresource-to-cross-site-redirect.tentative.https.html]
|
||||
[Partitioned cookies are not sent in embedded same-site to cross-site redirects]
|
||||
expected: FAIL
|
File diff suppressed because it is too large
Load diff
|
@ -45,3 +45,36 @@
|
|||
|
||||
[corner-shape-render-fuzzy.html?corner-shape=squircle&border-radius=50%]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?border-radius=30%&corner-shape=superellipse(0.4)&box-shadow=10px%2010px%200%2010px%20black]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?corner-shape=superellipse(8)&border-radius=40px&box-shadow=10px 10px 0 10px black]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?corner-shape=superellipse(-2)&border-radius=20%&border-width=20px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?corner-shape=superellipse(3)&border-radius=40px&box-shadow=10px 10px 0 10px black]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?corner-shape=superellipse(5)&border-radius=20%&border-width=20px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?border-radius=40%&corner-shape=notch&box-shadow=10px%2010px%200%2010px%20yellow]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?border-radius=30%&corner-shape=superellipse(-1.5)&box-shadow=10px%2010px%200%2010px%20black]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?corner-top-left-shape=superellipse(2.5)&border-radius=20%&border-width=10px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?corner-shape=superellipse(-7)&border-radius=20%&border-width=20px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?corner-top-left-shape=superellipse(-4)&border-radius=40%]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-fuzzy.html?corner-shape=superellipse(0.8)&border-radius=40px&border-width=10px&border-left-color=purple]
|
||||
expected: FAIL
|
||||
|
|
|
@ -48,3 +48,36 @@
|
|||
|
||||
[corner-shape-render-precise.html?corner-shape=squircle&border-top-right-radius=30px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?border-top-left-radius=50%&corner-shape=superellipse(1.4)&border-left-width=30px&border-top-width=30px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?corner-bottom-right-shape=superellipse(0.8)&border-bottom-right-radius=50%]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?corner-shape=superellipse(3)&border-top-right-radius=33px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?corner-shape=superellipse(2.3)&border-radius=40%]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?border-top-left-radius=50%&corner-shape=superellipse(0.7)&border-left-width=30px&border-top-width=30px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?border-radius=50%&corner-shape=bevel&box-shadow=10px%2010px%200%2010px%20black]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?corner-shape=square&border-bottom-left-radius=5px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?corner-top-left-shape=superellipse(0.5)&border-radius=40px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?corner-top-left-shape=superellipse(-4)&border-radius=40px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?corner-top-left-shape=superellipse(-0.5)&border-radius=40px]
|
||||
expected: FAIL
|
||||
|
||||
[corner-shape-render-precise.html?corner-top-right-shape=superellipse(-4)&border-top-right-radius=50px]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[corner-shape-square.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[corner-shape-straight.html]
|
||||
expected: FAIL
|
|
@ -20,9 +20,6 @@
|
|||
[Property corner-top-left-shape value 'superellipse(2)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-top-left-shape value 'superellipse( .5)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-top-right-shape value 'round']
|
||||
expected: FAIL
|
||||
|
||||
|
@ -59,12 +56,6 @@
|
|||
[Property corner-top-left-shape value 'superellipse(1)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-top-left-shape value 'superellipse(4)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-top-left-shape value 'superellipse( .5)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-top-right-shape value 'round']
|
||||
expected: FAIL
|
||||
|
||||
|
@ -86,9 +77,6 @@
|
|||
[Property corner-shape value 'bevel superellipse(0.1) round squircle']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-shape value 'superellipse(0.1) superellipse(3) superellipse(7) superellipse(0.1)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-shape value 'round round round round']
|
||||
expected: FAIL
|
||||
|
||||
|
@ -98,17 +86,26 @@
|
|||
[Property corner-shape value 'round scoop round scoop']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-shape value 'bevel superellipse(2)']
|
||||
[Property corner-top-left-shape value 'superellipse(-infinity)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-shape value 'superellipse(0.5) superellipse(3) straight']
|
||||
[Property corner-top-left-shape value 'superellipse( -1)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-shape value 'superellipse(0.5) superellipse(3) superellipse(1)']
|
||||
[Property corner-shape value 'superellipse(-5) superellipse(3) superellipse(7) superellipse(-5.5)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-shape value 'bevel superellipse(2) squircle round']
|
||||
[Property corner-shape value 'bevel superellipse(1)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-shape value 'superellipse(0.5) superellipse(3) superellipse(1) superellipse(infinity)']
|
||||
[Property corner-shape value 'superellipse(-1) superellipse(3) square']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-shape value 'superellipse(-1) superellipse(3) superellipse(0)']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-shape value 'bevel superellipse(1) squircle round']
|
||||
expected: FAIL
|
||||
|
||||
[Property corner-shape value 'superellipse(-1) superellipse(3) superellipse(0) superellipse(infinity)']
|
||||
expected: FAIL
|
||||
|
|
|
@ -14,9 +14,6 @@
|
|||
[e.style['corner-top-left-shape'\] = "squircle" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-left-shape'\] = "straight" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-left-shape'\] = "superellipse(2)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -56,9 +53,6 @@
|
|||
[e.style['corner-top-right-shape'\] = "squircle" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-right-shape'\] = "straight" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-right-shape'\] = "superellipse(2)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -98,9 +92,6 @@
|
|||
[e.style['corner-bottom-left-shape'\] = "squircle" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-left-shape'\] = "straight" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-left-shape'\] = "superellipse(2)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -140,9 +131,6 @@
|
|||
[e.style['corner-bottom-right-shape'\] = "squircle" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-right-shape'\] = "straight" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-right-shape'\] = "superellipse(2)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -182,9 +170,6 @@
|
|||
[e.style['corner-start-start-shape'\] = "squircle" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-start-shape'\] = "straight" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-start-shape'\] = "superellipse(2)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -224,9 +209,6 @@
|
|||
[e.style['corner-start-end-shape'\] = "squircle" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-end-shape'\] = "straight" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-end-shape'\] = "superellipse(2)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -266,9 +248,6 @@
|
|||
[e.style['corner-end-start-shape'\] = "squircle" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-start-shape'\] = "straight" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-start-shape'\] = "superellipse(2)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -308,9 +287,6 @@
|
|||
[e.style['corner-end-end-shape'\] = "squircle" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-end-shape'\] = "straight" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-end-shape'\] = "superellipse(2)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -347,9 +323,6 @@
|
|||
[e.style['corner-shape'\] = "bevel superellipse(2)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-shape'\] = "superellipse(0.5) superellipse(3) straight" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-shape'\] = "superellipse(0.5) superellipse(3) superellipse(1)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -358,3 +331,105 @@
|
|||
|
||||
[e.style['corner-shape'\] = "superellipse(0.5) superellipse(3) superellipse(1) superellipse(infinity)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-left-shape'\] = "square" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-left-shape'\] = "superellipse(-infinity)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-left-shape'\] = "superellipse(-0.5)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-left-shape'\] = "superellipse(-4)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-right-shape'\] = "square" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-right-shape'\] = "superellipse(-infinity)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-right-shape'\] = "superellipse(-0.5)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-top-right-shape'\] = "superellipse(-4)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-left-shape'\] = "square" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-left-shape'\] = "superellipse(-infinity)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-left-shape'\] = "superellipse(-0.5)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-left-shape'\] = "superellipse(-4)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-right-shape'\] = "square" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-right-shape'\] = "superellipse(-infinity)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-right-shape'\] = "superellipse(-0.5)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-bottom-right-shape'\] = "superellipse(-4)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-start-shape'\] = "square" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-start-shape'\] = "superellipse(-infinity)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-start-shape'\] = "superellipse(-0.5)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-start-shape'\] = "superellipse(-4)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-end-shape'\] = "square" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-end-shape'\] = "superellipse(-infinity)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-end-shape'\] = "superellipse(-0.5)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-start-end-shape'\] = "superellipse(-4)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-start-shape'\] = "square" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-start-shape'\] = "superellipse(-infinity)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-start-shape'\] = "superellipse(-0.5)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-start-shape'\] = "superellipse(-4)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-end-shape'\] = "square" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-end-shape'\] = "superellipse(-infinity)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-end-shape'\] = "superellipse(-0.5)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-end-end-shape'\] = "superellipse(-4)" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-shape'\] = "superellipse(0.5) superellipse(3) square" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['corner-shape'\] = "superellipse(-0.5) superellipse(3) square superellipse(-30)" should set the property value]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
[block-001-wm-vlr-print.html]
|
||||
fuzzy: maxDifference=0-76;totalPixels=0-120
|
||||
max-asserts: 2
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[font-stretch-computed.html]
|
||||
expected:
|
||||
if (os == "android") and fission: [OK, TIMEOUT]
|
||||
[Property font-stretch value 'calc(100% + (sign(20cqw - 10px) * 5%))']
|
||||
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