Update On Mon Jun 17 20:46:48 CEST 2024
This commit is contained in:
parent
1783cf35d2
commit
c113905f49
1626 changed files with 25323 additions and 33835 deletions
89
Cargo.lock
generated
89
Cargo.lock
generated
|
@ -1427,9 +1427,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "diplomat"
|
name = "diplomat"
|
||||||
version = "0.7.0"
|
version = "0.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a31672b3ebc3c7866c3c98726f7a9a5ac8f13962e77d3c8225f6be49a7b8c5f2"
|
checksum = "3137c640d2bac491dbfca7f9945c948f888dd8c95bdf7ee6b164fbdfa5d3efc2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"diplomat_core",
|
"diplomat_core",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
|
@ -1439,15 +1439,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "diplomat-runtime"
|
name = "diplomat-runtime"
|
||||||
version = "0.7.0"
|
version = "0.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f7b0f23d549a46540e26e5490cd44c64ced0d762959f1ffdec6ab0399634cf3c"
|
checksum = "5124bed7f5a5bc993adc24b2ef2df45514f005c31c198e62fceb1b2fe8cdf9a9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "diplomat_core"
|
name = "diplomat_core"
|
||||||
version = "0.7.0"
|
version = "0.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bfaa5e13e8b8735d2338f2836c06cd8643902ab87dda1dd07dbb351998ddc127"
|
checksum = "5d86a70d2e21480f7ecd11e69b517de5c04fa6708510d6e26f75ad35d6d0eb14"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
|
@ -2773,11 +2773,12 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_capi"
|
name = "icu_capi"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"diplomat",
|
"diplomat",
|
||||||
"diplomat-runtime",
|
"diplomat-runtime",
|
||||||
"icu_locid",
|
"icu_locid",
|
||||||
|
"icu_properties",
|
||||||
"icu_provider",
|
"icu_provider",
|
||||||
"icu_provider_adapters",
|
"icu_provider_adapters",
|
||||||
"icu_segmenter",
|
"icu_segmenter",
|
||||||
|
@ -2787,9 +2788,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_collections"
|
name = "icu_collections"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "137d96353afc8544d437e8a99eceb10ab291352699573b0de5b08bda38c78c60"
|
checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"displaydoc",
|
"displaydoc",
|
||||||
"yoke",
|
"yoke",
|
||||||
|
@ -2799,9 +2800,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_locid"
|
name = "icu_locid"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5c0aa2536adc14c07e2a521e95512b75ed8ef832f0fdf9299d4a0a45d2be2a9d"
|
checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"displaydoc",
|
"displaydoc",
|
||||||
"litemap",
|
"litemap",
|
||||||
|
@ -2812,9 +2813,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_locid_transform"
|
name = "icu_locid_transform"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "57c17d8f6524fdca4471101dd71f0a132eb6382b5d6d7f2970441cb25f6f435a"
|
checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"displaydoc",
|
"displaydoc",
|
||||||
"icu_locid",
|
"icu_locid",
|
||||||
|
@ -2826,15 +2827,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_locid_transform_data"
|
name = "icu_locid_transform_data"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "545c6c3e8bf9580e2dafee8de6f9ec14826aaf359787789c7724f1f85f47d3dc"
|
checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_properties"
|
name = "icu_properties"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "976e296217453af983efa25f287a4c1da04b9a63bf1ed63719455068e4453eb5"
|
checksum = "1f8ac670d7422d7f76b32e17a5db556510825b29ec9154f235977c9caba61036"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"displaydoc",
|
"displaydoc",
|
||||||
"icu_collections",
|
"icu_collections",
|
||||||
|
@ -2848,15 +2849,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_properties_data"
|
name = "icu_properties_data"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f6a86c0e384532b06b6c104814f9c1b13bcd5b64409001c0d05713a1f3529d99"
|
checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_provider"
|
name = "icu_provider"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ba58e782287eb6950247abbf11719f83f5d4e4a5c1f2cd490d30a334bc47c2f4"
|
checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"displaydoc",
|
"displaydoc",
|
||||||
"icu_locid",
|
"icu_locid",
|
||||||
|
@ -2871,9 +2872,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_provider_adapters"
|
name = "icu_provider_adapters"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a229f978260da7c3aabb68cb7dc7316589936680570fe55e50fdd3f97711a4dd"
|
checksum = "d6324dfd08348a8e0374a447ebd334044d766b1839bb8d5ccf2482a99a77c0bc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"icu_locid",
|
"icu_locid",
|
||||||
"icu_locid_transform",
|
"icu_locid_transform",
|
||||||
|
@ -2884,9 +2885,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_provider_macros"
|
name = "icu_provider_macros"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d2abdd3a62551e8337af119c5899e600ca0c88ec8f23a46c60ba216c803dcf1a"
|
checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -2895,9 +2896,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_segmenter"
|
name = "icu_segmenter"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b2dc1e8f4ba33a6a4956770ac5c08570f255d6605519fb3a859a0c0a270a2f8f"
|
checksum = "a717725612346ffc2d7b42c94b820db6908048f39434504cb130e8b46256b0de"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"core_maths",
|
"core_maths",
|
||||||
"displaydoc",
|
"displaydoc",
|
||||||
|
@ -2911,7 +2912,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "icu_segmenter_data"
|
name = "icu_segmenter_data"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "id-arena"
|
name = "id-arena"
|
||||||
|
@ -3357,9 +3358,9 @@ checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "litemap"
|
name = "litemap"
|
||||||
version = "0.7.2"
|
version = "0.7.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f9d642685b028806386b2b6e75685faadd3eb65a85fff7df711ce18446a422da"
|
checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "litrs"
|
name = "litrs"
|
||||||
|
@ -5806,9 +5807,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tinystr"
|
name = "tinystr"
|
||||||
version = "0.7.4"
|
version = "0.7.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d5d0e245e80bdc9b4e5356fc45a72184abbc3861992603f515270e9340f5a219"
|
checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"displaydoc",
|
"displaydoc",
|
||||||
"zerovec",
|
"zerovec",
|
||||||
|
@ -6918,9 +6919,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "writeable"
|
name = "writeable"
|
||||||
version = "0.5.4"
|
version = "0.5.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dad7bb64b8ef9c0aa27b6da38b452b0ee9fd82beaf276a87dd796fb55cbae14e"
|
checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "xml-rs"
|
name = "xml-rs"
|
||||||
|
@ -6982,9 +6983,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "yoke"
|
name = "yoke"
|
||||||
version = "0.7.3"
|
version = "0.7.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "65e71b2e4f287f467794c671e2b8f8a5f3716b3c829079a1c44740148eff07e4"
|
checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"stable_deref_trait",
|
"stable_deref_trait",
|
||||||
|
@ -6994,9 +6995,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "yoke-derive"
|
name = "yoke-derive"
|
||||||
version = "0.7.3"
|
version = "0.7.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9e6936f0cce458098a201c245a11bef556c6a0181129c7034d10d76d1ec3a2b8"
|
checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -7037,9 +7038,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerofrom"
|
name = "zerofrom"
|
||||||
version = "0.1.2"
|
version = "0.1.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "df54d76c3251de27615dfcce21e636c172dafb2549cd7fd93e21c66f6ca6bea2"
|
checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"zerofrom-derive",
|
"zerofrom-derive",
|
||||||
]
|
]
|
||||||
|
@ -7058,9 +7059,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerovec"
|
name = "zerovec"
|
||||||
version = "0.10.1"
|
version = "0.10.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "eff4439ae91fb5c72b8abc12f3f2dbf51bd27e6eadb9f8a5bc8898dddb0e27ea"
|
checksum = "bb2cc8827d6c0994478a15c53f374f46fbd41bea663d809b14744bc42e6b109c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"yoke",
|
"yoke",
|
||||||
"zerofrom",
|
"zerofrom",
|
||||||
|
@ -7069,9 +7070,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerovec-derive"
|
name = "zerovec-derive"
|
||||||
version = "0.10.1"
|
version = "0.10.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7b4e5997cbf58990550ef1f0e5124a05e47e1ebd33a84af25739be6031a62c20"
|
checksum = "97cf56601ee5052b4417d90c8755c6683473c926039908196cf35d99f893ebe7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
|
@ -141,6 +141,11 @@ interface FeatureCallout {
|
||||||
{
|
{
|
||||||
// A CSS selector for the element to anchor to. The callout will be
|
// A CSS selector for the element to anchor to. The callout will be
|
||||||
// anchored to the first visible element that matches this selector.
|
// anchored to the first visible element that matches this selector.
|
||||||
|
// This supports a special token %triggerTab% that functions as a
|
||||||
|
// selector for the tab that triggered the callout, usually (but not
|
||||||
|
// always) the selected tab. It can be placed at any position in the
|
||||||
|
// selector, like other tokens. For example:
|
||||||
|
// "#tabbrowser-tabs %triggerTab%[visuallyselected] .tab-icon-image"
|
||||||
selector: string;
|
selector: string;
|
||||||
// An object representing how the callout should be positioned
|
// An object representing how the callout should be positioned
|
||||||
// relative to the anchor element.
|
// relative to the anchor element.
|
||||||
|
|
|
@ -16,6 +16,7 @@ Please note that some targeting attributes require stricter controls on the tele
|
||||||
* [attributionData](#attributiondata)
|
* [attributionData](#attributiondata)
|
||||||
* [backgroundTaskName](#backgroundtaskname)
|
* [backgroundTaskName](#backgroundtaskname)
|
||||||
* [blockedCountByType](#blockedcountbytype)
|
* [blockedCountByType](#blockedcountbytype)
|
||||||
|
* [browserIsSelected](#browserisselected)
|
||||||
* [browserSettings](#browsersettings)
|
* [browserSettings](#browsersettings)
|
||||||
* [creditCardsSaved](#creditcardssaved)
|
* [creditCardsSaved](#creditcardssaved)
|
||||||
* [currentDate](#currentdate)
|
* [currentDate](#currentdate)
|
||||||
|
@ -746,7 +747,7 @@ Returns a breakdown by category of all blocked resources in the past 42 days.
|
||||||
#### Definition
|
#### Definition
|
||||||
|
|
||||||
```
|
```
|
||||||
declare const messageImpressions: { [key: string]: number };
|
declare const blockedCountByType: { [key: string]: number };
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Examples
|
#### Examples
|
||||||
|
@ -761,6 +762,19 @@ Object {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `browserIsSelected`
|
||||||
|
|
||||||
|
A context property included for all triggers, indicating whether the tab the
|
||||||
|
trigger came from is the currently selected tab. For some triggers that don't
|
||||||
|
actually emit from tabs, this is always true. For other triggers, like
|
||||||
|
`openURL`, this can be false if the trigger happened in a background tab.
|
||||||
|
|
||||||
|
#### Definition
|
||||||
|
|
||||||
|
```ts
|
||||||
|
declare const browserIsSelected: boolean;
|
||||||
|
```
|
||||||
|
|
||||||
### `isChinaRepack`
|
### `isChinaRepack`
|
||||||
|
|
||||||
Does the user use [the partner repack distributed by Mozilla Online](https://github.com/mozilla-partners/mozillaonline),
|
Does the user use [the partner repack distributed by Mozilla Online](https://github.com/mozilla-partners/mozillaonline),
|
||||||
|
|
|
@ -1942,6 +1942,17 @@ export class _ASRouter {
|
||||||
if (!skipLoadingMessages) {
|
if (!skipLoadingMessages) {
|
||||||
await this.loadMessagesFromAllProviders();
|
await this.loadMessagesFromAllProviders();
|
||||||
}
|
}
|
||||||
|
// Implement the global `browserIsSelected` context property.
|
||||||
|
if (trigger && browser?.constructor.name === "MozBrowser") {
|
||||||
|
if (!Object.prototype.hasOwnProperty.call(trigger, "context")) {
|
||||||
|
trigger.context = {};
|
||||||
|
}
|
||||||
|
if (typeof trigger.context === "object") {
|
||||||
|
trigger.context.browserIsSelected =
|
||||||
|
trigger.context.browserIsSelected ||
|
||||||
|
browser === browser.ownerGlobal.gBrowser?.selectedBrowser;
|
||||||
|
}
|
||||||
|
}
|
||||||
const telemetryObject = { tabId };
|
const telemetryObject = { tabId };
|
||||||
TelemetryStopwatch.start("MS_MESSAGE_REQUEST_TIME_MS", telemetryObject);
|
TelemetryStopwatch.start("MS_MESSAGE_REQUEST_TIME_MS", telemetryObject);
|
||||||
// Return all the messages so that it can record the Reach event
|
// Return all the messages so that it can record the Reach event
|
||||||
|
|
|
@ -556,7 +556,10 @@ export class FeatureCallout {
|
||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const { selector, arrow_position, panel_position } = anchor;
|
let { selector, arrow_position, panel_position } = anchor;
|
||||||
|
if (!selector) {
|
||||||
|
continue; // No selector provided.
|
||||||
|
}
|
||||||
if (panel_position) {
|
if (panel_position) {
|
||||||
let panel_position_string =
|
let panel_position_string =
|
||||||
this._getPanelPositionString(panel_position);
|
this._getPanelPositionString(panel_position);
|
||||||
|
@ -587,7 +590,28 @@ export class FeatureCallout {
|
||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const element = selector && this.doc.querySelector(selector);
|
let scope = this.doc.documentElement;
|
||||||
|
// %triggerTab% is a special token that gets replaced with :scope, and
|
||||||
|
// instructs us to look for the anchor element within the trigger tab.
|
||||||
|
if (this.browser && selector.includes("%triggerTab%")) {
|
||||||
|
let triggerTab = this.browser.ownerGlobal.gBrowser?.getTabForBrowser(
|
||||||
|
this.browser
|
||||||
|
);
|
||||||
|
if (triggerTab) {
|
||||||
|
selector = selector.replace("%triggerTab%", ":scope");
|
||||||
|
scope = triggerTab;
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let element = scope.querySelector(selector);
|
||||||
|
// The element may not be a child of the scope, but the scope itself. For
|
||||||
|
// example, if we're anchoring directly to the trigger tab, our selector
|
||||||
|
// might look like `%triggerTab%[visuallyselected]`. In this case,
|
||||||
|
// querySelector() will return nothing, but matches() will return true.
|
||||||
|
if (!element && scope.matches(selector)) {
|
||||||
|
element = scope;
|
||||||
|
}
|
||||||
if (!element) {
|
if (!element) {
|
||||||
continue; // Element doesn't exist at all.
|
continue; // Element doesn't exist at all.
|
||||||
}
|
}
|
||||||
|
@ -614,7 +638,7 @@ export class FeatureCallout {
|
||||||
if (
|
if (
|
||||||
this.context === "chrome" &&
|
this.context === "chrome" &&
|
||||||
element.id &&
|
element.id &&
|
||||||
anchor.selector.includes(`#${element.id}`)
|
selector.includes(`#${element.id}`)
|
||||||
) {
|
) {
|
||||||
let widget = lazy.CustomizableUI.getWidget(element.id);
|
let widget = lazy.CustomizableUI.getWidget(element.id);
|
||||||
if (
|
if (
|
||||||
|
|
|
@ -1120,3 +1120,36 @@ add_task(async function first_anchor_selected_is_invalid() {
|
||||||
await BrowserTestUtils.closeWindow(win);
|
await BrowserTestUtils.closeWindow(win);
|
||||||
sandbox.restore();
|
sandbox.restore();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
add_task(async function test_triggerTab_selector() {
|
||||||
|
const win = await BrowserTestUtils.openNewBrowserWindow();
|
||||||
|
const config = {
|
||||||
|
win,
|
||||||
|
location: "chrome",
|
||||||
|
context: "chrome",
|
||||||
|
browser: win.gBrowser.selectedBrowser,
|
||||||
|
theme: { preset: "chrome" },
|
||||||
|
};
|
||||||
|
|
||||||
|
const message = JSON.parse(JSON.stringify(testMessage.message));
|
||||||
|
message.content.screens[0].anchors[0].selector =
|
||||||
|
"#tabbrowser-tabs %triggerTab%[visuallyselected]";
|
||||||
|
const sandbox = sinon.createSandbox();
|
||||||
|
|
||||||
|
const doc = win.document;
|
||||||
|
const featureCallout = new FeatureCallout(config);
|
||||||
|
const getAnchorSpy = sandbox.spy(featureCallout, "_getAnchor");
|
||||||
|
featureCallout.showFeatureCallout(message);
|
||||||
|
await waitForCalloutScreen(doc, message.content.screens[0].id);
|
||||||
|
ok(
|
||||||
|
getAnchorSpy.alwaysReturned(
|
||||||
|
sandbox.match(message.content.screens[0].anchors[0])
|
||||||
|
),
|
||||||
|
"The first anchor is selected"
|
||||||
|
);
|
||||||
|
|
||||||
|
win.document.querySelector(calloutCTASelector).click();
|
||||||
|
await waitForCalloutRemoved(win.document);
|
||||||
|
await BrowserTestUtils.closeWindow(win);
|
||||||
|
sandbox.restore();
|
||||||
|
});
|
||||||
|
|
|
@ -50,6 +50,7 @@ describe("ASRouter", () => {
|
||||||
let FakeToolbarBadgeHub;
|
let FakeToolbarBadgeHub;
|
||||||
let FakeMomentsPageHub;
|
let FakeMomentsPageHub;
|
||||||
let ASRouterTargeting;
|
let ASRouterTargeting;
|
||||||
|
let gBrowser;
|
||||||
let screenImpressions;
|
let screenImpressions;
|
||||||
|
|
||||||
function setMessageProviderPref(value) {
|
function setMessageProviderPref(value) {
|
||||||
|
@ -171,6 +172,14 @@ describe("ASRouter", () => {
|
||||||
userId: "adsf",
|
userId: "adsf",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
gBrowser = {
|
||||||
|
selectedBrowser: {
|
||||||
|
constructor: { name: "MozBrowser" },
|
||||||
|
get ownerGlobal() {
|
||||||
|
return { gBrowser };
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
ASRouterPreferences.specialConditions = {
|
ASRouterPreferences.specialConditions = {
|
||||||
someCondition: true,
|
someCondition: true,
|
||||||
|
@ -236,7 +245,7 @@ describe("ASRouter", () => {
|
||||||
ASRouterTargeting,
|
ASRouterTargeting,
|
||||||
ASRouterTriggerListeners,
|
ASRouterTriggerListeners,
|
||||||
QueryCache,
|
QueryCache,
|
||||||
gBrowser: { selectedBrowser: {} },
|
gBrowser,
|
||||||
gURLBar: {},
|
gURLBar: {},
|
||||||
isSeparateAboutWelcome: true,
|
isSeparateAboutWelcome: true,
|
||||||
AttributionCode: fakeAttributionCode,
|
AttributionCode: fakeAttributionCode,
|
||||||
|
@ -1591,7 +1600,7 @@ describe("ASRouter", () => {
|
||||||
|
|
||||||
await Router.sendTriggerMessage({
|
await Router.sendTriggerMessage({
|
||||||
tabId: 0,
|
tabId: 0,
|
||||||
browser: {},
|
browser: gBrowser.selectedBrowser,
|
||||||
id: "firstRun",
|
id: "firstRun",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1601,7 +1610,7 @@ describe("ASRouter", () => {
|
||||||
{
|
{
|
||||||
id: "firstRun",
|
id: "firstRun",
|
||||||
param: undefined,
|
param: undefined,
|
||||||
context: undefined,
|
context: { browserIsSelected: true },
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
@ -70,7 +70,11 @@ describe("ASRTargeting docs", () => {
|
||||||
// "allow" includes targeting attributes that are not implemented by
|
// "allow" includes targeting attributes that are not implemented by
|
||||||
// ASRTargetingAttributes. For example trigger context passed to the evaluation
|
// ASRTargetingAttributes. For example trigger context passed to the evaluation
|
||||||
// context in when a trigger runs or ASRouter state used in the evaluation.
|
// context in when a trigger runs or ASRouter state used in the evaluation.
|
||||||
const allow = ["messageImpressions", "screenImpressions"];
|
const allow = [
|
||||||
|
"messageImpressions",
|
||||||
|
"screenImpressions",
|
||||||
|
"browserIsSelected",
|
||||||
|
];
|
||||||
for (const targetingParam of DOCS_TARGETING_HEADINGS.filter(
|
for (const targetingParam of DOCS_TARGETING_HEADINGS.filter(
|
||||||
doc => !allow.includes(doc)
|
doc => !allow.includes(doc)
|
||||||
)) {
|
)) {
|
||||||
|
|
|
@ -943,12 +943,9 @@ export class TelemetryFeed {
|
||||||
this.handleSetPref(action);
|
this.handleSetPref(action);
|
||||||
break;
|
break;
|
||||||
case at.WEATHER_IMPRESSION:
|
case at.WEATHER_IMPRESSION:
|
||||||
this.handleWeatherUserEvent(action);
|
|
||||||
break;
|
|
||||||
case at.WEATHER_LOAD_ERROR:
|
case at.WEATHER_LOAD_ERROR:
|
||||||
this.handleWeatherUserEvent(action);
|
|
||||||
break;
|
|
||||||
case at.WEATHER_OPEN_PROVIDER_URL:
|
case at.WEATHER_OPEN_PROVIDER_URL:
|
||||||
|
case at.WEATHER_LOCATION_DATA_UPDATE:
|
||||||
this.handleWeatherUserEvent(action);
|
this.handleWeatherUserEvent(action);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -996,6 +993,11 @@ export class TelemetryFeed {
|
||||||
newtab_visit_id: session.session_id,
|
newtab_visit_id: session.session_id,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case "WEATHER_LOCATION_DATA_UPDATE":
|
||||||
|
Glean.newtab.weatherLocationSelected.record({
|
||||||
|
newtab_visit_id: session.session_id,
|
||||||
|
});
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -415,6 +415,23 @@ newtab:
|
||||||
send_in_pings:
|
send_in_pings:
|
||||||
- newtab
|
- newtab
|
||||||
|
|
||||||
|
weather_location_selected:
|
||||||
|
type: event
|
||||||
|
description: >
|
||||||
|
Recorded when a user selects a location for weather widget
|
||||||
|
bugs:
|
||||||
|
- https://bugzilla.mozilla.org/show_bug.cgi?id=1900103
|
||||||
|
data_reviews:
|
||||||
|
- https://bugzilla.mozilla.org/show_bug.cgi?id=1900103
|
||||||
|
data_sensitivity:
|
||||||
|
- interaction
|
||||||
|
notification_emails:
|
||||||
|
- nbarrett@mozilla.com
|
||||||
|
expires: never
|
||||||
|
extra_keys:
|
||||||
|
newtab_visit_id: *newtab_visit_id
|
||||||
|
send_in_pings:
|
||||||
|
- newtab
|
||||||
|
|
||||||
newtab.search:
|
newtab.search:
|
||||||
enabled:
|
enabled:
|
||||||
|
|
|
@ -3,26 +3,6 @@
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# 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/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
if test "$OS_ARCH" = "WINNT"; then
|
|
||||||
if ! test "$HAVE_64BIT_BUILD"; then
|
|
||||||
if test "$MOZ_UPDATE_CHANNEL" = "nightly" -o \
|
|
||||||
"$MOZ_UPDATE_CHANNEL" = "nightly-try" -o \
|
|
||||||
"$MOZ_UPDATE_CHANNEL" = "aurora" -o \
|
|
||||||
"$MOZ_UPDATE_CHANNEL" = "beta" -o \
|
|
||||||
"$MOZ_UPDATE_CHANNEL" = "release"; then
|
|
||||||
if ! test "$MOZ_DEBUG"; then
|
|
||||||
if ! test "$USE_STUB_INSTALLER"; then
|
|
||||||
# Expect USE_STUB_INSTALLER from taskcluster for downstream task consistency
|
|
||||||
echo "ERROR: STUB installer expected to be enabled but"
|
|
||||||
echo "ERROR: USE_STUB_INSTALLER is not specified in the environment"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
MOZ_STUB_INSTALLER=1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# MOZ_APP_DISPLAYNAME will be set by branding/configure.sh
|
# MOZ_APP_DISPLAYNAME will be set by branding/configure.sh
|
||||||
# MOZ_BRANDING_DIRECTORY is the default branding directory used when none is
|
# MOZ_BRANDING_DIRECTORY is the default branding directory used when none is
|
||||||
# specified. It should never point to the "official" branding directory.
|
# specified. It should never point to the "official" branding directory.
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"af": {
|
"af": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"an": {
|
"an": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ar": {
|
"ar": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ast": {
|
"ast": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"az": {
|
"az": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"be": {
|
"be": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -130,7 +130,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"bg": {
|
"bg": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -149,7 +149,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"bn": {
|
"bn": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -168,7 +168,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"bo": {
|
"bo": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -187,7 +187,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"br": {
|
"br": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -206,7 +206,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"brx": {
|
"brx": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -225,7 +225,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"bs": {
|
"bs": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -244,7 +244,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ca": {
|
"ca": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -263,7 +263,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ca-valencia": {
|
"ca-valencia": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -282,7 +282,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"cak": {
|
"cak": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -301,7 +301,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ckb": {
|
"ckb": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -320,7 +320,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"cs": {
|
"cs": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -339,7 +339,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"cy": {
|
"cy": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -358,7 +358,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"da": {
|
"da": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -377,7 +377,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"de": {
|
"de": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -396,7 +396,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"dsb": {
|
"dsb": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -415,7 +415,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"el": {
|
"el": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -434,7 +434,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"en-CA": {
|
"en-CA": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -453,7 +453,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"en-GB": {
|
"en-GB": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -472,7 +472,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"eo": {
|
"eo": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -491,7 +491,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"es-AR": {
|
"es-AR": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -510,7 +510,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"es-CL": {
|
"es-CL": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -529,7 +529,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"es-ES": {
|
"es-ES": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -548,7 +548,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"es-MX": {
|
"es-MX": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -567,7 +567,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"et": {
|
"et": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -586,7 +586,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"eu": {
|
"eu": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -605,7 +605,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"fa": {
|
"fa": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -624,7 +624,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ff": {
|
"ff": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -643,7 +643,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"fi": {
|
"fi": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -662,7 +662,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"fr": {
|
"fr": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -681,7 +681,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"fur": {
|
"fur": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -700,7 +700,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"fy-NL": {
|
"fy-NL": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -719,7 +719,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ga-IE": {
|
"ga-IE": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -738,7 +738,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"gd": {
|
"gd": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -757,7 +757,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"gl": {
|
"gl": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -776,7 +776,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"gn": {
|
"gn": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -795,7 +795,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"gu-IN": {
|
"gu-IN": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -814,7 +814,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"he": {
|
"he": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -833,7 +833,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"hi-IN": {
|
"hi-IN": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -852,7 +852,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"hr": {
|
"hr": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -871,7 +871,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"hsb": {
|
"hsb": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -890,7 +890,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"hu": {
|
"hu": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -909,7 +909,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"hy-AM": {
|
"hy-AM": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -928,7 +928,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"hye": {
|
"hye": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -947,7 +947,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ia": {
|
"ia": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -966,7 +966,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"id": {
|
"id": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -985,7 +985,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"is": {
|
"is": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1004,7 +1004,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"it": {
|
"it": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1023,7 +1023,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ja": {
|
"ja": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1040,7 +1040,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ja-JP-mac": {
|
"ja-JP-mac": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1048,7 +1048,7 @@
|
||||||
"macosx64",
|
"macosx64",
|
||||||
"macosx64-devedition"
|
"macosx64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ka": {
|
"ka": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1067,7 +1067,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"kab": {
|
"kab": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1086,7 +1086,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"kk": {
|
"kk": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1105,7 +1105,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"km": {
|
"km": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1124,7 +1124,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"kn": {
|
"kn": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1143,7 +1143,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ko": {
|
"ko": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1162,7 +1162,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"lij": {
|
"lij": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1181,7 +1181,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"lo": {
|
"lo": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1200,7 +1200,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"lt": {
|
"lt": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1219,7 +1219,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ltg": {
|
"ltg": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1238,7 +1238,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"lv": {
|
"lv": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1257,7 +1257,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"meh": {
|
"meh": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1276,7 +1276,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"mk": {
|
"mk": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1295,7 +1295,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"mr": {
|
"mr": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1314,7 +1314,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ms": {
|
"ms": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1333,7 +1333,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"my": {
|
"my": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1352,7 +1352,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"nb-NO": {
|
"nb-NO": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1371,7 +1371,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ne-NP": {
|
"ne-NP": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1390,7 +1390,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"nl": {
|
"nl": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1409,7 +1409,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"nn-NO": {
|
"nn-NO": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1428,7 +1428,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"oc": {
|
"oc": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1447,7 +1447,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"pa-IN": {
|
"pa-IN": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1466,7 +1466,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"pl": {
|
"pl": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1485,7 +1485,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"pt-BR": {
|
"pt-BR": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1504,7 +1504,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"pt-PT": {
|
"pt-PT": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1523,7 +1523,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"rm": {
|
"rm": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1542,7 +1542,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ro": {
|
"ro": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1561,7 +1561,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ru": {
|
"ru": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1580,7 +1580,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"sat": {
|
"sat": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1599,7 +1599,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"sc": {
|
"sc": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1618,7 +1618,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"scn": {
|
"scn": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1637,7 +1637,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"sco": {
|
"sco": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1656,7 +1656,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"si": {
|
"si": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1675,7 +1675,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"sk": {
|
"sk": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1694,7 +1694,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"skr": {
|
"skr": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1713,7 +1713,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"sl": {
|
"sl": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1732,7 +1732,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"son": {
|
"son": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1751,7 +1751,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"sq": {
|
"sq": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1770,7 +1770,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"sr": {
|
"sr": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1789,7 +1789,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"sv-SE": {
|
"sv-SE": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1808,7 +1808,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"szl": {
|
"szl": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1827,7 +1827,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ta": {
|
"ta": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1846,7 +1846,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"te": {
|
"te": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1865,7 +1865,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"tg": {
|
"tg": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1884,7 +1884,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"th": {
|
"th": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1903,7 +1903,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"tl": {
|
"tl": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1922,7 +1922,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"tr": {
|
"tr": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1941,7 +1941,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"trs": {
|
"trs": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1960,7 +1960,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"uk": {
|
"uk": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1979,7 +1979,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"ur": {
|
"ur": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -1998,7 +1998,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"uz": {
|
"uz": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -2017,7 +2017,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"vi": {
|
"vi": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -2036,7 +2036,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"wo": {
|
"wo": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -2055,7 +2055,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"xh": {
|
"xh": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -2074,7 +2074,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"zh-CN": {
|
"zh-CN": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -2093,7 +2093,7 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
},
|
},
|
||||||
"zh-TW": {
|
"zh-TW": {
|
||||||
"pin": false,
|
"pin": false,
|
||||||
|
@ -2112,6 +2112,6 @@
|
||||||
"win64-aarch64-devedition",
|
"win64-aarch64-devedition",
|
||||||
"win64-devedition"
|
"win64-devedition"
|
||||||
],
|
],
|
||||||
"revision": "6196da8b122cbf67fac79486cbfd5b2ed9f7096b"
|
"revision": "f50e933c8752cfe56644f509fb816644b26adab8"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -24,4 +24,32 @@ with only_when(target_has_linux_kernel & compile_environment):
|
||||||
|
|
||||||
set_config("MOZ_NO_PIE_COMPAT", depends_if("MOZ_NO_PIE_COMPAT")(lambda _: True))
|
set_config("MOZ_NO_PIE_COMPAT", depends_if("MOZ_NO_PIE_COMPAT")(lambda _: True))
|
||||||
|
|
||||||
|
|
||||||
|
@depends(target, update_channel, have_64_bit, moz_debug, "MOZ_AUTOMATION")
|
||||||
|
@imports(_from="os", _import="environ")
|
||||||
|
def requires_stub_installer(
|
||||||
|
target, update_channel, have_64_bit, moz_debug, moz_automation
|
||||||
|
):
|
||||||
|
if target.kernel != "WINNT":
|
||||||
|
return False
|
||||||
|
if have_64_bit:
|
||||||
|
return False
|
||||||
|
if update_channel not in ("nightly", "nightly-try", "aurora", "beta", "release"):
|
||||||
|
return False
|
||||||
|
|
||||||
|
if moz_debug:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Expect USE_STUB_INSTALLER from taskcluster for downstream task consistency
|
||||||
|
if moz_automation and not environ.get("USE_STUB_INSTALLER"):
|
||||||
|
die(
|
||||||
|
"STUB installer expected to be enabled but "
|
||||||
|
"USE_STUB_INSTALLER is not specified in the environment"
|
||||||
|
)
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
imply_option("MOZ_STUB_INSTALLER", True, when=requires_stub_installer)
|
||||||
|
|
||||||
include("../toolkit/moz.configure")
|
include("../toolkit/moz.configure")
|
||||||
|
|
|
@ -189,14 +189,6 @@ panelview {
|
||||||
&:not([visible]) {
|
&:not([visible]) {
|
||||||
visibility: collapse;
|
visibility: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prevent a scrollbar from appearing while the animation for transitioning from
|
|
||||||
one view to another runs, which would otherwise happen if the new view has
|
|
||||||
more height than the old one because that would mean that during the
|
|
||||||
animation the height of the multiview will be too short for the new view. */
|
|
||||||
&[transitioning] > .panel-viewcontainer > .panel-viewstack > panelview > .panel-subview-body {
|
|
||||||
overflow-y: hidden;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.panel-viewcontainer {
|
.panel-viewcontainer {
|
||||||
|
|
|
@ -1201,9 +1201,14 @@ public:
|
||||||
J.objectBegin();
|
J.objectBegin();
|
||||||
J.attribute("pretty", getQualifiedName(&Field));
|
J.attribute("pretty", getQualifiedName(&Field));
|
||||||
J.attribute("sym", getMangledName(CurMangleContext, &Field));
|
J.attribute("sym", getMangledName(CurMangleContext, &Field));
|
||||||
|
|
||||||
QualType FieldType = Field.getType();
|
QualType FieldType = Field.getType();
|
||||||
QualType CanonicalFieldType = FieldType.getCanonicalType();
|
QualType CanonicalFieldType = FieldType.getCanonicalType();
|
||||||
J.attribute("type", CanonicalFieldType.getAsString());
|
LangOptions langOptions;
|
||||||
|
PrintingPolicy Policy(langOptions);
|
||||||
|
Policy.PrintCanonicalTypes = true;
|
||||||
|
J.attribute("type", CanonicalFieldType.getAsString(Policy));
|
||||||
|
|
||||||
const TagDecl *tagDecl = CanonicalFieldType->getAsTagDecl();
|
const TagDecl *tagDecl = CanonicalFieldType->getAsTagDecl();
|
||||||
if (!tagDecl) {
|
if (!tagDecl) {
|
||||||
// Try again piercing any pointers/references involved. Note that our
|
// Try again piercing any pointers/references involved. Note that our
|
||||||
|
|
|
@ -1045,7 +1045,6 @@ def mozilla_official(official):
|
||||||
|
|
||||||
set_config("MOZILLA_OFFICIAL", mozilla_official)
|
set_config("MOZILLA_OFFICIAL", mozilla_official)
|
||||||
set_define("MOZILLA_OFFICIAL", mozilla_official)
|
set_define("MOZILLA_OFFICIAL", mozilla_official)
|
||||||
add_old_configure_assignment("MOZILLA_OFFICIAL", mozilla_official)
|
|
||||||
|
|
||||||
# Allow specifying custom paths to the version files used by the milestone() function below.
|
# Allow specifying custom paths to the version files used by the milestone() function below.
|
||||||
option(
|
option(
|
||||||
|
|
|
@ -102,7 +102,6 @@ def old_configure_options(*options):
|
||||||
"--libdir",
|
"--libdir",
|
||||||
"--prefix",
|
"--prefix",
|
||||||
"--with-branding",
|
"--with-branding",
|
||||||
"--with-distribution-id",
|
|
||||||
"--x-includes",
|
"--x-includes",
|
||||||
"--x-libraries",
|
"--x-libraries",
|
||||||
)
|
)
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
# ==============================================================
|
# ==============================================================
|
||||||
@depends(build_project, target)
|
@depends(build_project, target)
|
||||||
def updater_default(build_project, target):
|
def updater_default(build_project, target):
|
||||||
|
if build_project == "tools/update-programs":
|
||||||
|
return True
|
||||||
return build_project != "mobile/android" and target.os != "iOS"
|
return build_project != "mobile/android" and target.os != "iOS"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ class SearchBox extends PureComponent {
|
||||||
onKeyDown: PropTypes.func,
|
onKeyDown: PropTypes.func,
|
||||||
placeholder: PropTypes.string.isRequired,
|
placeholder: PropTypes.string.isRequired,
|
||||||
summary: PropTypes.string,
|
summary: PropTypes.string,
|
||||||
|
summaryId: PropTypes.string,
|
||||||
summaryTooltip: PropTypes.string,
|
summaryTooltip: PropTypes.string,
|
||||||
type: PropTypes.string,
|
type: PropTypes.string,
|
||||||
value: PropTypes.string,
|
value: PropTypes.string,
|
||||||
|
@ -215,6 +216,7 @@ class SearchBox extends PureComponent {
|
||||||
const {
|
const {
|
||||||
autocompleteProvider,
|
autocompleteProvider,
|
||||||
summary,
|
summary,
|
||||||
|
summaryId,
|
||||||
summaryTooltip,
|
summaryTooltip,
|
||||||
learnMoreTitle,
|
learnMoreTitle,
|
||||||
learnMoreUrl,
|
learnMoreUrl,
|
||||||
|
@ -226,12 +228,10 @@ class SearchBox extends PureComponent {
|
||||||
autocompleteProvider && this.state.focused && value !== "";
|
autocompleteProvider && this.state.focused && value !== "";
|
||||||
const showLearnMoreLink = learnMoreUrl && value === "";
|
const showLearnMoreLink = learnMoreUrl && value === "";
|
||||||
|
|
||||||
const inputClassList = [`devtools-${type}input`];
|
|
||||||
|
|
||||||
return dom.div(
|
return dom.div(
|
||||||
{ className: "devtools-searchbox" },
|
{ className: "devtools-searchbox" },
|
||||||
dom.input({
|
dom.input({
|
||||||
className: inputClassList.join(" "),
|
className: `devtools-${type}input`,
|
||||||
onBlur: this.onBlur,
|
onBlur: this.onBlur,
|
||||||
onChange: e => this.onChange(e.target.value),
|
onChange: e => this.onChange(e.target.value),
|
||||||
onFocus: this.onFocus,
|
onFocus: this.onFocus,
|
||||||
|
@ -240,6 +240,7 @@ class SearchBox extends PureComponent {
|
||||||
ref: this.inputRef,
|
ref: this.inputRef,
|
||||||
value,
|
value,
|
||||||
type: "search",
|
type: "search",
|
||||||
|
"aria-describedby": (summary && summaryId) || undefined,
|
||||||
}),
|
}),
|
||||||
showLearnMoreLink &&
|
showLearnMoreLink &&
|
||||||
MDNLink({
|
MDNLink({
|
||||||
|
@ -250,7 +251,8 @@ class SearchBox extends PureComponent {
|
||||||
? dom.span(
|
? dom.span(
|
||||||
{
|
{
|
||||||
className: "devtools-searchinput-summary",
|
className: "devtools-searchinput-summary",
|
||||||
title: summaryTooltip || "",
|
id: summaryId,
|
||||||
|
title: summaryTooltip,
|
||||||
},
|
},
|
||||||
summary
|
summary
|
||||||
)
|
)
|
||||||
|
|
|
@ -65,8 +65,31 @@ window.onload = function () {
|
||||||
ok($(".devtools-searchinput-clear").hidden, "Clear button was hidden");
|
ok($(".devtools-searchinput-clear").hidden, "Clear button was hidden");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function testSearchBoxWithSummary() {
|
||||||
|
const { $ } = await createComponentTest(SearchBox, {
|
||||||
|
summary: "my summary",
|
||||||
|
summaryId: "my-summary-id",
|
||||||
|
summaryTooltip: "my summary tooltip",
|
||||||
|
});
|
||||||
|
|
||||||
|
const summaryEl = $(".devtools-searchinput-summary");
|
||||||
|
is(summaryEl.textContent, "my summary", "Summary has expected content");
|
||||||
|
is(
|
||||||
|
summaryEl.getAttribute("title"),
|
||||||
|
"my summary tooltip",
|
||||||
|
"Summary has expected title attribute"
|
||||||
|
);
|
||||||
|
is(summaryEl.id, "my-summary-id", "Summary has expected id");
|
||||||
|
is(
|
||||||
|
$(".devtools-searchinput").getAttribute("aria-describedby"),
|
||||||
|
"my-summary-id",
|
||||||
|
"input aria-describedby attribute is the summary element id"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
add_task(async function () {
|
add_task(async function () {
|
||||||
await testSimpleSearchBox();
|
await testSimpleSearchBox();
|
||||||
|
await testSearchBoxWithSummary();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -475,6 +475,8 @@ iframe {
|
||||||
.devtools-searchbox {
|
.devtools-searchbox {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
gap: 4px;
|
||||||
|
padding-inline-end: 4px;
|
||||||
position: relative;
|
position: relative;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
@ -515,7 +517,7 @@ iframe {
|
||||||
.devtools-searchinput-clear {
|
.devtools-searchinput-clear {
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
align-self: center;
|
align-self: center;
|
||||||
margin: 0 4px;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
width: 16px;
|
width: 16px;
|
||||||
|
|
|
@ -711,6 +711,15 @@ a.learn-more-link.webconsole-learn-more-link {
|
||||||
min-width: 150px;
|
min-width: 150px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* We always render the "X hidden" element in the filter bar for accessibility.
|
||||||
|
But when the filter input is not focused, or empty, and there is no filtered messages,
|
||||||
|
we don't want to display it as it provides little value
|
||||||
|
*/
|
||||||
|
.webconsole-filterbar-primary[data-has-filtered-by-text="false"]
|
||||||
|
.devtools-searchbox input:is(:not(:focus),:empty) ~ #devtools-console-output-filter-summary {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Special casing String reps, and warning/error string colors
|
/* Special casing String reps, and warning/error string colors
|
||||||
* so they are legible */
|
* so they are legible */
|
||||||
|
|
|
@ -300,23 +300,18 @@ class FilterBar extends Component {
|
||||||
renderSearchBox() {
|
renderSearchBox() {
|
||||||
const { dispatch, filteredMessagesCount } = this.props;
|
const { dispatch, filteredMessagesCount } = this.props;
|
||||||
|
|
||||||
let searchBoxSummary;
|
// We want the summary to always be announced to screen reader, even if there are
|
||||||
let searchBoxSummaryTooltip;
|
// no filtered out messages.
|
||||||
if (filteredMessagesCount.text > 0) {
|
// We'll hide the "0 hidden" summary when the input field is not focused.
|
||||||
searchBoxSummary = l10n.getStr("webconsole.filteredMessagesByText.label");
|
const searchBoxSummary = PluralForm.get(
|
||||||
searchBoxSummary = PluralForm.get(
|
filteredMessagesCount.text,
|
||||||
filteredMessagesCount.text,
|
l10n.getStr("webconsole.filteredMessagesByText.label")
|
||||||
searchBoxSummary
|
).replace("#1", filteredMessagesCount.text);
|
||||||
).replace("#1", filteredMessagesCount.text);
|
|
||||||
|
|
||||||
searchBoxSummaryTooltip = l10n.getStr(
|
const searchBoxSummaryTooltip = PluralForm.get(
|
||||||
"webconsole.filteredMessagesByText.tooltip"
|
filteredMessagesCount.text,
|
||||||
);
|
l10n.getStr("webconsole.filteredMessagesByText.tooltip")
|
||||||
searchBoxSummaryTooltip = PluralForm.get(
|
).replace("#1", filteredMessagesCount.text);
|
||||||
filteredMessagesCount.text,
|
|
||||||
searchBoxSummaryTooltip
|
|
||||||
).replace("#1", filteredMessagesCount.text);
|
|
||||||
}
|
|
||||||
|
|
||||||
return SearchBox({
|
return SearchBox({
|
||||||
type: "filter",
|
type: "filter",
|
||||||
|
@ -325,6 +320,7 @@ class FilterBar extends Component {
|
||||||
onChange: text => dispatch(actions.filterTextSet(text)),
|
onChange: text => dispatch(actions.filterTextSet(text)),
|
||||||
summary: searchBoxSummary,
|
summary: searchBoxSummary,
|
||||||
summaryTooltip: searchBoxSummaryTooltip,
|
summaryTooltip: searchBoxSummaryTooltip,
|
||||||
|
summaryId: "devtools-console-output-filter-summary",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -373,7 +369,8 @@ class FilterBar extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { closeButtonVisible, displayMode } = this.props;
|
const { closeButtonVisible, displayMode, filteredMessagesCount } =
|
||||||
|
this.props;
|
||||||
|
|
||||||
const isNarrow = displayMode === FILTERBAR_DISPLAY_MODES.NARROW;
|
const isNarrow = displayMode === FILTERBAR_DISPLAY_MODES.NARROW;
|
||||||
const isWide = displayMode === FILTERBAR_DISPLAY_MODES.WIDE;
|
const isWide = displayMode === FILTERBAR_DISPLAY_MODES.WIDE;
|
||||||
|
@ -390,6 +387,7 @@ class FilterBar extends Component {
|
||||||
className:
|
className:
|
||||||
"devtools-toolbar devtools-input-toolbar webconsole-filterbar-primary",
|
"devtools-toolbar devtools-input-toolbar webconsole-filterbar-primary",
|
||||||
key: "primary-bar",
|
key: "primary-bar",
|
||||||
|
"data-has-filtered-by-text": filteredMessagesCount.text > 0,
|
||||||
},
|
},
|
||||||
clearButton,
|
clearButton,
|
||||||
separator,
|
separator,
|
||||||
|
|
|
@ -79,8 +79,14 @@ describe("FilterBar component:", () => {
|
||||||
expect(textFilter.attr("type")).toBe("search");
|
expect(textFilter.attr("type")).toBe("search");
|
||||||
expect(textFilter.attr("value")).toBe("");
|
expect(textFilter.attr("value")).toBe("");
|
||||||
|
|
||||||
|
// Text filter input summary element
|
||||||
|
const textFilterSummary = textInput.children().eq(1);
|
||||||
|
expect(textFilterSummary.attr("class")).toBe(
|
||||||
|
"devtools-searchinput-summary"
|
||||||
|
);
|
||||||
|
|
||||||
// Text filter input clear button
|
// Text filter input clear button
|
||||||
const textFilterClearButton = textInput.children().eq(1);
|
const textFilterClearButton = textInput.children().eq(2);
|
||||||
expect(textFilterClearButton.attr("class")).toBe(
|
expect(textFilterClearButton.attr("class")).toBe(
|
||||||
"devtools-searchinput-clear"
|
"devtools-searchinput-clear"
|
||||||
);
|
);
|
||||||
|
@ -141,15 +147,6 @@ describe("FilterBar component:", () => {
|
||||||
expect(message.prop("title")).toBe("3 items hidden by text filter");
|
expect(message.prop("title")).toBe("3 items hidden by text filter");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("does not display the number of hidden messages when there are no messages", () => {
|
|
||||||
const store = setupStore();
|
|
||||||
store.dispatch(actions.filterTextSet("qwerty"));
|
|
||||||
const wrapper = mount(Provider({ store }, getFilterBar()));
|
|
||||||
|
|
||||||
const toolbar = wrapper.find(".devtools-searchinput-summary");
|
|
||||||
expect(toolbar.exists()).toBeFalsy();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("Displays a filter buttons bar on its own element in narrow displayMode", () => {
|
it("Displays a filter buttons bar on its own element in narrow displayMode", () => {
|
||||||
const store = setupStore();
|
const store = setupStore();
|
||||||
|
|
||||||
|
|
|
@ -313,94 +313,94 @@ NS_IMETHODIMP DecryptingInputStream<CipherStrategy>::Seek(const int32_t aWhence,
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Can't call this just in NS_SEEK_CUR case, because getting the decrypted
|
||||||
|
// size below changes the current position.
|
||||||
|
int64_t current;
|
||||||
|
nsresult rv = Tell(¤t);
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX The size of the stream could also be queried and stored once only.
|
||||||
|
auto decryptedStreamSizeOrErr = [this]() -> Result<int64_t, nsresult> {
|
||||||
|
nsresult rv = (*mBaseSeekableStream)->Seek(NS_SEEK_SET, 0);
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return Err(rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t baseStreamSize;
|
||||||
|
rv = (*mBaseStream)->Available(&baseStreamSize);
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return Err(rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!baseStreamSize) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
rv = (*mBaseSeekableStream)
|
||||||
|
->Seek(NS_SEEK_END, -static_cast<int64_t>(*mBlockSize));
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return Err(rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
mNextByte = 0;
|
||||||
|
mPlainBytes = 0;
|
||||||
|
|
||||||
|
uint32_t bytesRead;
|
||||||
|
rv = ParseNextChunk(&bytesRead);
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return Err(rv);
|
||||||
|
}
|
||||||
|
MOZ_ASSERT(bytesRead);
|
||||||
|
|
||||||
|
// XXX Shouldn't ParseNextChunk better update mPlainBytes?
|
||||||
|
mPlainBytes = bytesRead;
|
||||||
|
|
||||||
|
mNextByte = bytesRead;
|
||||||
|
|
||||||
|
int64_t current;
|
||||||
|
rv = Tell(¤t);
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return Err(rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
return current;
|
||||||
|
}();
|
||||||
|
|
||||||
|
if (decryptedStreamSizeOrErr.isErr()) {
|
||||||
|
return decryptedStreamSizeOrErr.unwrapErr();
|
||||||
|
}
|
||||||
|
|
||||||
int64_t baseBlocksOffset;
|
int64_t baseBlocksOffset;
|
||||||
int64_t nextByteOffset;
|
int64_t nextByteOffset;
|
||||||
switch (aWhence) {
|
switch (aWhence) {
|
||||||
case NS_SEEK_CUR:
|
case NS_SEEK_CUR:
|
||||||
// XXX Simplify this without using Tell.
|
// XXX Simplify this without using Tell.
|
||||||
{
|
aOffset += current;
|
||||||
int64_t current;
|
|
||||||
nsresult rv = Tell(¤t);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
aOffset += current;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NS_SEEK_SET:
|
case NS_SEEK_SET:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NS_SEEK_END:
|
case NS_SEEK_END:
|
||||||
// XXX Simplify this without using Seek/Tell.
|
// XXX Simplify this without using Seek/Tell.
|
||||||
{
|
aOffset += decryptedStreamSizeOrErr.inspect();
|
||||||
// XXX The size of the stream could also be queried and stored once
|
|
||||||
// only.
|
|
||||||
nsresult rv = (*mBaseSeekableStream)->Seek(NS_SEEK_SET, 0);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t baseStreamSize;
|
|
||||||
rv = (*mBaseStream)->Available(&baseStreamSize);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto decryptedStreamSizeOrErr = [baseStreamSize,
|
|
||||||
this]() -> Result<int64_t, nsresult> {
|
|
||||||
if (!baseStreamSize) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult rv =
|
|
||||||
(*mBaseSeekableStream)
|
|
||||||
->Seek(NS_SEEK_END, -static_cast<int64_t>(*mBlockSize));
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return Err(rv);
|
|
||||||
}
|
|
||||||
|
|
||||||
mNextByte = 0;
|
|
||||||
mPlainBytes = 0;
|
|
||||||
|
|
||||||
uint32_t bytesRead;
|
|
||||||
rv = ParseNextChunk(&bytesRead);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return Err(rv);
|
|
||||||
}
|
|
||||||
MOZ_ASSERT(bytesRead);
|
|
||||||
|
|
||||||
// XXX Shouldn't ParseNextChunk better update mPlainBytes?
|
|
||||||
mPlainBytes = bytesRead;
|
|
||||||
|
|
||||||
mNextByte = bytesRead;
|
|
||||||
|
|
||||||
int64_t current;
|
|
||||||
rv = Tell(¤t);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return Err(rv);
|
|
||||||
}
|
|
||||||
|
|
||||||
return current;
|
|
||||||
}();
|
|
||||||
|
|
||||||
if (decryptedStreamSizeOrErr.isErr()) {
|
|
||||||
return decryptedStreamSizeOrErr.unwrapErr();
|
|
||||||
}
|
|
||||||
|
|
||||||
aOffset += decryptedStreamSizeOrErr.unwrap();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return NS_ERROR_ILLEGAL_VALUE;
|
return NS_ERROR_ILLEGAL_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (aOffset < 0 || aOffset > decryptedStreamSizeOrErr.inspect()) {
|
||||||
|
return NS_ERROR_ILLEGAL_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
baseBlocksOffset = aOffset / mEncryptedBlock->MaxPayloadLength();
|
baseBlocksOffset = aOffset / mEncryptedBlock->MaxPayloadLength();
|
||||||
nextByteOffset = aOffset % mEncryptedBlock->MaxPayloadLength();
|
nextByteOffset = aOffset % mEncryptedBlock->MaxPayloadLength();
|
||||||
|
|
||||||
// XXX If we remain in the same block as before, we can skip this.
|
// XXX If we remain in the same block as before, we can skip this.
|
||||||
nsresult rv =
|
rv =
|
||||||
(*mBaseSeekableStream)->Seek(NS_SEEK_SET, baseBlocksOffset * *mBlockSize);
|
(*mBaseSeekableStream)->Seek(NS_SEEK_SET, baseBlocksOffset * *mBlockSize);
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
|
@ -420,15 +420,10 @@ NS_IMETHODIMP DecryptingInputStream<CipherStrategy>::Seek(const int32_t aWhence,
|
||||||
// XXX We could know earlier if we positioned us after the last block.
|
// XXX We could know earlier if we positioned us after the last block.
|
||||||
if (!readBytes) {
|
if (!readBytes) {
|
||||||
// XXX It seems that this check was added to prevent seeking before the
|
// XXX It seems that this check was added to prevent seeking before the
|
||||||
// start of the base stream during the Seek call below. However, it also
|
// start of the base stream during the Seek call below.
|
||||||
// looks like a check for not allowing seeking past the end of the stream
|
|
||||||
// (by returning NS_ERROR_ILLEGAL_VALUE), but it does that only for one
|
|
||||||
// special case when the stream is empty. In any case, proper checks for
|
|
||||||
// not allowing seeking past the end of the stream should be added
|
|
||||||
// somewhere after the aWhence switch instead of doing it partially here.
|
|
||||||
if (baseBlocksOffset == 0) {
|
if (baseBlocksOffset == 0) {
|
||||||
// The stream is empty.
|
// The stream is empty.
|
||||||
return aOffset == 0 ? NS_OK : NS_ERROR_ILLEGAL_VALUE;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult rv = (*mBaseSeekableStream)->Seek(NS_SEEK_CUR, -*mBlockSize);
|
nsresult rv = (*mBaseSeekableStream)->Seek(NS_SEEK_CUR, -*mBlockSize);
|
||||||
|
|
|
@ -639,9 +639,12 @@ enum struct SeekOffset {
|
||||||
MinusHalfDataSize,
|
MinusHalfDataSize,
|
||||||
PlusHalfDataSize,
|
PlusHalfDataSize,
|
||||||
PlusDataSize,
|
PlusDataSize,
|
||||||
MinusDataSize
|
MinusDataSize,
|
||||||
|
MinusDataSizeAndOne,
|
||||||
|
PlusOne,
|
||||||
|
MinusOne
|
||||||
};
|
};
|
||||||
using SeekOp = std::pair<int32_t, SeekOffset>;
|
using SeekOp = std::tuple<int32_t, SeekOffset, nsresult>;
|
||||||
|
|
||||||
using PackedSeekTestParams = std::tuple<size_t, size_t, std::vector<SeekOp>>;
|
using PackedSeekTestParams = std::tuple<size_t, size_t, std::vector<SeekOp>>;
|
||||||
|
|
||||||
|
@ -666,7 +669,7 @@ std::string SeekTestParamToString(
|
||||||
ss << "data" << testParams.mDataSize << kSeparator << "writechunk"
|
ss << "data" << testParams.mDataSize << kSeparator << "writechunk"
|
||||||
<< testParams.mBlockSize << kSeparator;
|
<< testParams.mBlockSize << kSeparator;
|
||||||
for (const auto& seekOp : testParams.mSeekOps) {
|
for (const auto& seekOp : testParams.mSeekOps) {
|
||||||
switch (seekOp.first) {
|
switch (std::get<0>(seekOp)) {
|
||||||
case nsISeekableStream::NS_SEEK_SET:
|
case nsISeekableStream::NS_SEEK_SET:
|
||||||
ss << "Set";
|
ss << "Set";
|
||||||
break;
|
break;
|
||||||
|
@ -679,7 +682,7 @@ std::string SeekTestParamToString(
|
||||||
default:
|
default:
|
||||||
MOZ_CRASH("Unknown whence");
|
MOZ_CRASH("Unknown whence");
|
||||||
};
|
};
|
||||||
switch (seekOp.second) {
|
switch (std::get<1>(seekOp)) {
|
||||||
case SeekOffset::Zero:
|
case SeekOffset::Zero:
|
||||||
ss << "Zero";
|
ss << "Zero";
|
||||||
break;
|
break;
|
||||||
|
@ -692,9 +695,18 @@ std::string SeekTestParamToString(
|
||||||
case SeekOffset::MinusDataSize:
|
case SeekOffset::MinusDataSize:
|
||||||
ss << "MinusDataSize";
|
ss << "MinusDataSize";
|
||||||
break;
|
break;
|
||||||
|
case SeekOffset::MinusDataSizeAndOne:
|
||||||
|
ss << "MinusDataSizeAndOne";
|
||||||
|
break;
|
||||||
case SeekOffset::PlusDataSize:
|
case SeekOffset::PlusDataSize:
|
||||||
ss << "PlusDataSize";
|
ss << "PlusDataSize";
|
||||||
break;
|
break;
|
||||||
|
case SeekOffset::PlusOne:
|
||||||
|
ss << "PlusOne";
|
||||||
|
break;
|
||||||
|
case SeekOffset::MinusOne:
|
||||||
|
ss << "MinusOne";
|
||||||
|
break;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return ss.str();
|
return ss.str();
|
||||||
|
@ -727,7 +739,7 @@ class ParametrizedSeekCryptTest
|
||||||
|
|
||||||
uint32_t accumulatedOffset = 0;
|
uint32_t accumulatedOffset = 0;
|
||||||
for (const auto& seekOp : testParams.mSeekOps) {
|
for (const auto& seekOp : testParams.mSeekOps) {
|
||||||
const auto offset = [offsetKind = seekOp.second,
|
const auto offset = [offsetKind = std::get<1>(seekOp),
|
||||||
dataSize = testParams.mDataSize]() -> int64_t {
|
dataSize = testParams.mDataSize]() -> int64_t {
|
||||||
switch (offsetKind) {
|
switch (offsetKind) {
|
||||||
case SeekOffset::Zero:
|
case SeekOffset::Zero:
|
||||||
|
@ -738,25 +750,61 @@ class ParametrizedSeekCryptTest
|
||||||
return static_cast<int64_t>(dataSize) / 2;
|
return static_cast<int64_t>(dataSize) / 2;
|
||||||
case SeekOffset::MinusDataSize:
|
case SeekOffset::MinusDataSize:
|
||||||
return -static_cast<int64_t>(dataSize);
|
return -static_cast<int64_t>(dataSize);
|
||||||
|
case SeekOffset::MinusDataSizeAndOne:
|
||||||
|
return -static_cast<int64_t>(dataSize + 1);
|
||||||
case SeekOffset::PlusDataSize:
|
case SeekOffset::PlusDataSize:
|
||||||
return static_cast<int64_t>(dataSize);
|
return static_cast<int64_t>(dataSize);
|
||||||
|
case SeekOffset::PlusOne:
|
||||||
|
return 1;
|
||||||
|
case SeekOffset::MinusOne:
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
MOZ_CRASH("Unknown SeekOffset");
|
MOZ_CRASH("Unknown SeekOffset");
|
||||||
}();
|
}();
|
||||||
switch (seekOp.first) {
|
nsresult rv = inStream->Seek(std::get<0>(seekOp), offset);
|
||||||
case nsISeekableStream::NS_SEEK_SET:
|
EXPECT_EQ(std::get<2>(seekOp), rv);
|
||||||
accumulatedOffset = offset;
|
// XXX Need to skip remaining checks for this specific case for now.
|
||||||
break;
|
if (std::get<0>(seekOp) == nsISeekableStream::NS_SEEK_END &&
|
||||||
case nsISeekableStream::NS_SEEK_CUR:
|
std::get<1>(seekOp) == SeekOffset::PlusOne &&
|
||||||
accumulatedOffset += offset;
|
testParams.mDataSize != 0) {
|
||||||
break;
|
// XXX The seek operation leaves invalid state after trying to position
|
||||||
case nsISeekableStream::NS_SEEK_END:
|
// past the end of the stream, other checks must be skipped because of
|
||||||
accumulatedOffset = testParams.mDataSize + offset;
|
// that!
|
||||||
break;
|
return;
|
||||||
default:
|
}
|
||||||
MOZ_CRASH("Unknown whence");
|
// XXX Need to skip remaining checks for this specific case for now.
|
||||||
|
if (std::get<0>(seekOp) == nsISeekableStream::NS_SEEK_CUR &&
|
||||||
|
std::get<1>(seekOp) == SeekOffset::MinusOne &&
|
||||||
|
testParams.mDataSize != 0) {
|
||||||
|
// XXX The seek operation leaves invalid state after trying to position
|
||||||
|
// before the start of the stream, other checks must be skipped because
|
||||||
|
// of that!
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// XXX Need to skip remaining checks for this specific case for now.
|
||||||
|
if (std::get<0>(seekOp) == nsISeekableStream::NS_SEEK_END &&
|
||||||
|
std::get<1>(seekOp) == SeekOffset::MinusDataSizeAndOne &&
|
||||||
|
testParams.mDataSize != 0) {
|
||||||
|
// XXX The seek operation leaves invalid state after trying to position
|
||||||
|
// before the start of the stream, other checks must be skipped because
|
||||||
|
// of that!
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
switch (std::get<0>(seekOp)) {
|
||||||
|
case nsISeekableStream::NS_SEEK_SET:
|
||||||
|
accumulatedOffset = offset;
|
||||||
|
break;
|
||||||
|
case nsISeekableStream::NS_SEEK_CUR:
|
||||||
|
accumulatedOffset += offset;
|
||||||
|
break;
|
||||||
|
case nsISeekableStream::NS_SEEK_END:
|
||||||
|
accumulatedOffset = testParams.mDataSize + offset;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
MOZ_CRASH("Unknown whence");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
EXPECT_EQ(NS_OK, inStream->Seek(seekOp.first, offset));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -831,26 +879,39 @@ INSTANTIATE_TEST_SUITE_P(
|
||||||
/* seekOperations */
|
/* seekOperations */
|
||||||
testing::Values(/* NS_SEEK_SET only, single ops */
|
testing::Values(/* NS_SEEK_SET only, single ops */
|
||||||
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_SET,
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_SET,
|
||||||
SeekOffset::PlusDataSize}},
|
SeekOffset::PlusDataSize, NS_OK}},
|
||||||
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_SET,
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_SET,
|
||||||
SeekOffset::PlusHalfDataSize}},
|
SeekOffset::PlusHalfDataSize,
|
||||||
|
NS_OK}},
|
||||||
/* NS_SEEK_SET only, multiple ops */
|
/* NS_SEEK_SET only, multiple ops */
|
||||||
std::vector<SeekOp>{
|
std::vector<SeekOp>{
|
||||||
{nsISeekableStream::NS_SEEK_SET,
|
{nsISeekableStream::NS_SEEK_SET,
|
||||||
SeekOffset::PlusHalfDataSize},
|
SeekOffset::PlusHalfDataSize, NS_OK},
|
||||||
{nsISeekableStream::NS_SEEK_SET, SeekOffset::Zero}},
|
{nsISeekableStream::NS_SEEK_SET, SeekOffset::Zero,
|
||||||
|
NS_OK}},
|
||||||
/* NS_SEEK_CUR only, single ops */
|
/* NS_SEEK_CUR only, single ops */
|
||||||
std::vector<SeekOp>{
|
|
||||||
{nsISeekableStream::NS_SEEK_CUR, SeekOffset::Zero}},
|
|
||||||
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_CUR,
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_CUR,
|
||||||
SeekOffset::PlusDataSize}},
|
SeekOffset::Zero, NS_OK}},
|
||||||
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_CUR,
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_CUR,
|
||||||
SeekOffset::PlusHalfDataSize}},
|
SeekOffset::PlusDataSize, NS_OK}},
|
||||||
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_CUR,
|
||||||
|
SeekOffset::PlusHalfDataSize,
|
||||||
|
NS_OK}},
|
||||||
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_CUR,
|
||||||
|
SeekOffset::MinusOne,
|
||||||
|
NS_ERROR_ILLEGAL_VALUE}},
|
||||||
/* NS_SEEK_END only, single ops */
|
/* NS_SEEK_END only, single ops */
|
||||||
std::vector<SeekOp>{
|
|
||||||
{nsISeekableStream::NS_SEEK_END, SeekOffset::Zero}},
|
|
||||||
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_END,
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_END,
|
||||||
SeekOffset::MinusDataSize}},
|
SeekOffset::Zero, NS_OK}},
|
||||||
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_END,
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_END,
|
||||||
SeekOffset::MinusHalfDataSize}})),
|
SeekOffset::MinusDataSize, NS_OK}},
|
||||||
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_END,
|
||||||
|
SeekOffset::MinusDataSizeAndOne,
|
||||||
|
NS_ERROR_ILLEGAL_VALUE}},
|
||||||
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_END,
|
||||||
|
SeekOffset::MinusHalfDataSize,
|
||||||
|
NS_OK}},
|
||||||
|
std::vector<SeekOp>{{nsISeekableStream::NS_SEEK_END,
|
||||||
|
SeekOffset::PlusOne,
|
||||||
|
NS_ERROR_ILLEGAL_VALUE}})),
|
||||||
SeekTestParamToString);
|
SeekTestParamToString);
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include "nsCharTraits.h"
|
#include "nsCharTraits.h"
|
||||||
#include "nsContentUtils.h"
|
#include "nsContentUtils.h"
|
||||||
|
#include "mozilla/dom/Element.h"
|
||||||
#include "mozilla/dom/nsCSPContext.h"
|
#include "mozilla/dom/nsCSPContext.h"
|
||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
@ -32,15 +33,24 @@ static nsString MaybeTruncateSample(const nsAString& aSample) {
|
||||||
}
|
}
|
||||||
|
|
||||||
CSPViolationData::CSPViolationData(uint32_t aViolatedPolicyIndex,
|
CSPViolationData::CSPViolationData(uint32_t aViolatedPolicyIndex,
|
||||||
Resource&& aResource, uint32_t aLineNumber,
|
Resource&& aResource,
|
||||||
uint32_t aColumnNumber,
|
const CSPDirective aEffectiveDirective,
|
||||||
const nsAString& aSample)
|
const nsAString& aSourceFile,
|
||||||
|
uint32_t aLineNumber, uint32_t aColumnNumber,
|
||||||
|
Element* aElement, const nsAString& aSample)
|
||||||
: mViolatedPolicyIndex{aViolatedPolicyIndex},
|
: mViolatedPolicyIndex{aViolatedPolicyIndex},
|
||||||
mResource{std::move(aResource)},
|
mResource{std::move(aResource)},
|
||||||
|
mEffectiveDirective{aEffectiveDirective},
|
||||||
|
mSourceFile{aSourceFile},
|
||||||
mLineNumber{aLineNumber},
|
mLineNumber{aLineNumber},
|
||||||
mColumnNumber{aColumnNumber},
|
mColumnNumber{aColumnNumber},
|
||||||
|
mElement{aElement},
|
||||||
mSample{MaybeTruncateSample(aSample)} {}
|
mSample{MaybeTruncateSample(aSample)} {}
|
||||||
|
|
||||||
|
// Required for `mElement`, since its destructor requires a definition of
|
||||||
|
// `Element`.
|
||||||
|
CSPViolationData::~CSPViolationData() = default;
|
||||||
|
|
||||||
auto CSPViolationData::BlockedContentSourceOrUnknown() const
|
auto CSPViolationData::BlockedContentSourceOrUnknown() const
|
||||||
-> BlockedContentSource {
|
-> BlockedContentSource {
|
||||||
return mResource.is<CSPViolationData::BlockedContentSource>()
|
return mResource.is<CSPViolationData::BlockedContentSource>()
|
||||||
|
|
|
@ -8,8 +8,10 @@
|
||||||
#define DOM_SECURITY_CSPVIOLATION_H_
|
#define DOM_SECURITY_CSPVIOLATION_H_
|
||||||
|
|
||||||
#include "nsCOMPtr.h"
|
#include "nsCOMPtr.h"
|
||||||
|
#include "nsIContentSecurityPolicy.h"
|
||||||
#include "nsIURI.h"
|
#include "nsIURI.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
|
#include "mozilla/RefPtr.h"
|
||||||
#include "mozilla/Variant.h"
|
#include "mozilla/Variant.h"
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
@ -17,7 +19,10 @@
|
||||||
class nsIURI;
|
class nsIURI;
|
||||||
|
|
||||||
namespace mozilla::dom {
|
namespace mozilla::dom {
|
||||||
|
class Element;
|
||||||
|
|
||||||
// Represents parts of <https://w3c.github.io/webappsec-csp/#violation>.
|
// Represents parts of <https://w3c.github.io/webappsec-csp/#violation>.
|
||||||
|
// The remaining parts can be deduced from the corresponding nsCSPContext.
|
||||||
struct CSPViolationData {
|
struct CSPViolationData {
|
||||||
enum class BlockedContentSource {
|
enum class BlockedContentSource {
|
||||||
Unknown,
|
Unknown,
|
||||||
|
@ -31,15 +36,23 @@ struct CSPViolationData {
|
||||||
|
|
||||||
// @param aSample Will be truncated if necessary.
|
// @param aSample Will be truncated if necessary.
|
||||||
CSPViolationData(uint32_t aViolatedPolicyIndex, Resource&& aResource,
|
CSPViolationData(uint32_t aViolatedPolicyIndex, Resource&& aResource,
|
||||||
uint32_t aLineNumber, uint32_t aColumnNumber,
|
const CSPDirective aEffectiveDirective,
|
||||||
|
const nsAString& aSourceFile, uint32_t aLineNumber,
|
||||||
|
uint32_t aColumnNumber, Element* aElement,
|
||||||
const nsAString& aSample);
|
const nsAString& aSample);
|
||||||
|
|
||||||
|
~CSPViolationData();
|
||||||
|
|
||||||
BlockedContentSource BlockedContentSourceOrUnknown() const;
|
BlockedContentSource BlockedContentSourceOrUnknown() const;
|
||||||
|
|
||||||
const uint32_t mViolatedPolicyIndex;
|
const uint32_t mViolatedPolicyIndex;
|
||||||
const Resource mResource;
|
const Resource mResource;
|
||||||
|
const CSPDirective mEffectiveDirective;
|
||||||
|
// String representation of the URL. The empty string represents a null-URL.
|
||||||
|
const nsString mSourceFile;
|
||||||
const uint32_t mLineNumber;
|
const uint32_t mLineNumber;
|
||||||
const uint32_t mColumnNumber;
|
const uint32_t mColumnNumber;
|
||||||
|
RefPtr<Element> mElement;
|
||||||
const nsString mSample;
|
const nsString mSample;
|
||||||
};
|
};
|
||||||
} // namespace mozilla::dom
|
} // namespace mozilla::dom
|
||||||
|
|
|
@ -222,17 +222,21 @@ bool nsCSPContext::permitsInternal(
|
||||||
? Resource{nsCOMPtr<nsIURI>{aContentLocation}}
|
? Resource{nsCOMPtr<nsIURI>{aContentLocation}}
|
||||||
: Resource{CSPViolationData::BlockedContentSource::Unknown};
|
: Resource{CSPViolationData::BlockedContentSource::Unknown};
|
||||||
|
|
||||||
CSPViolationData cspViolationData{p, std::move(resource), lineNumber,
|
CSPViolationData cspViolationData{p,
|
||||||
columnNumber, /* aSample */ u""_ns};
|
std::move(resource),
|
||||||
|
aDir,
|
||||||
|
spec,
|
||||||
|
lineNumber,
|
||||||
|
columnNumber,
|
||||||
|
aTriggeringElement,
|
||||||
|
/* aSample */ u""_ns};
|
||||||
|
|
||||||
AsyncReportViolation(
|
AsyncReportViolation(
|
||||||
aTriggeringElement, aCSPEventListener, std::move(cspViolationData),
|
aCSPEventListener, std::move(cspViolationData),
|
||||||
aOriginalURIIfRedirect, /* in case of redirect originalURI is not
|
aOriginalURIIfRedirect, /* in case of redirect originalURI is not
|
||||||
null */
|
null */
|
||||||
violatedDirective, violatedDirectiveString,
|
violatedDirective, violatedDirectiveString,
|
||||||
aDir, // aViolatedDirective
|
|
||||||
u""_ns, // no observer subject
|
u""_ns, // no observer subject
|
||||||
spec, // source file
|
|
||||||
false); // aReportSample (no sample)
|
false); // aReportSample (no sample)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -564,17 +568,19 @@ void nsCSPContext::reportInlineViolation(
|
||||||
aViolatedPolicyIndex,
|
aViolatedPolicyIndex,
|
||||||
CSPViolationData::Resource{
|
CSPViolationData::Resource{
|
||||||
CSPViolationData::BlockedContentSource::Inline},
|
CSPViolationData::BlockedContentSource::Inline},
|
||||||
lineNumber, columnNumber, aSample};
|
aEffectiveDirective,
|
||||||
|
sourceFile,
|
||||||
|
lineNumber,
|
||||||
|
columnNumber,
|
||||||
|
aTriggeringElement,
|
||||||
|
aSample};
|
||||||
|
|
||||||
AsyncReportViolation(aTriggeringElement, aCSPEventListener,
|
AsyncReportViolation(aCSPEventListener, std::move(cspViolationData),
|
||||||
std::move(cspViolationData),
|
|
||||||
mSelfURI, // aOriginalURI
|
mSelfURI, // aOriginalURI
|
||||||
aViolatedDirective, // aViolatedDirective
|
aViolatedDirective, // aViolatedDirective
|
||||||
aViolatedDirectiveString,
|
aViolatedDirectiveString,
|
||||||
aEffectiveDirective, // aEffectiveDirective
|
observerSubject, // aObserverSubject
|
||||||
observerSubject, // aObserverSubject
|
aReportSample); // aReportSample
|
||||||
sourceFile, // aSourceFile
|
|
||||||
aReportSample); // aReportSample
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
@ -754,15 +760,19 @@ nsCSPContext::LogViolationDetails(
|
||||||
violatedDirectiveNameAndValue, &reportSample);
|
violatedDirectiveNameAndValue, &reportSample);
|
||||||
|
|
||||||
CSPViolationData cspViolationData{
|
CSPViolationData cspViolationData{
|
||||||
p, CSPViolationData::Resource{blockedContentSource},
|
p,
|
||||||
static_cast<uint32_t>(aLineNum), static_cast<uint32_t>(aColumnNum),
|
CSPViolationData::Resource{blockedContentSource},
|
||||||
|
/* aEffectiveDirective */ CSPDirective::SCRIPT_SRC_DIRECTIVE,
|
||||||
|
aSourceFile,
|
||||||
|
static_cast<uint32_t>(aLineNum),
|
||||||
|
static_cast<uint32_t>(aColumnNum),
|
||||||
|
aTriggeringElement,
|
||||||
aScriptSample};
|
aScriptSample};
|
||||||
|
|
||||||
AsyncReportViolation(
|
AsyncReportViolation(aCSPEventListener, std::move(cspViolationData),
|
||||||
aTriggeringElement, aCSPEventListener, std::move(cspViolationData),
|
nullptr, violatedDirectiveName,
|
||||||
nullptr, violatedDirectiveName, violatedDirectiveNameAndValue,
|
violatedDirectiveNameAndValue, observerSubject,
|
||||||
CSPDirective::SCRIPT_SRC_DIRECTIVE /* aEffectiveDirective */,
|
reportSample);
|
||||||
observerSubject, aSourceFile, reportSample);
|
|
||||||
}
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -976,7 +986,7 @@ void StripURIForReporting(nsIURI* aSelfURI, nsIURI* aURI,
|
||||||
nsresult nsCSPContext::GatherSecurityPolicyViolationEventData(
|
nsresult nsCSPContext::GatherSecurityPolicyViolationEventData(
|
||||||
nsIURI* aOriginalURI, const nsAString& aEffectiveDirective,
|
nsIURI* aOriginalURI, const nsAString& aEffectiveDirective,
|
||||||
const mozilla::dom::CSPViolationData& aCSPViolationData,
|
const mozilla::dom::CSPViolationData& aCSPViolationData,
|
||||||
const nsAString& aSourceFile, const nsAString& aScriptSample,
|
const nsAString& aScriptSample,
|
||||||
mozilla::dom::SecurityPolicyViolationEventInit& aViolationEventInit) {
|
mozilla::dom::SecurityPolicyViolationEventInit& aViolationEventInit) {
|
||||||
EnsureIPCPoliciesRead();
|
EnsureIPCPoliciesRead();
|
||||||
NS_ENSURE_ARG_MAX(aCSPViolationData.mViolatedPolicyIndex,
|
NS_ENSURE_ARG_MAX(aCSPViolationData.mViolatedPolicyIndex,
|
||||||
|
@ -1033,16 +1043,16 @@ nsresult nsCSPContext::GatherSecurityPolicyViolationEventData(
|
||||||
aViolationEventInit.mOriginalPolicy = originalPolicy;
|
aViolationEventInit.mOriginalPolicy = originalPolicy;
|
||||||
|
|
||||||
// source-file
|
// source-file
|
||||||
if (!aSourceFile.IsEmpty()) {
|
if (!aCSPViolationData.mSourceFile.IsEmpty()) {
|
||||||
// if aSourceFile is a URI, we have to make sure to strip fragments
|
// if aSourceFile is a URI, we have to make sure to strip fragments
|
||||||
nsCOMPtr<nsIURI> sourceURI;
|
nsCOMPtr<nsIURI> sourceURI;
|
||||||
NS_NewURI(getter_AddRefs(sourceURI), aSourceFile);
|
NS_NewURI(getter_AddRefs(sourceURI), aCSPViolationData.mSourceFile);
|
||||||
if (sourceURI) {
|
if (sourceURI) {
|
||||||
nsAutoCString spec;
|
nsAutoCString spec;
|
||||||
StripURIForReporting(mSelfURI, sourceURI, aEffectiveDirective, spec);
|
StripURIForReporting(mSelfURI, sourceURI, aEffectiveDirective, spec);
|
||||||
CopyUTF8toUTF16(spec, aViolationEventInit.mSourceFile);
|
CopyUTF8toUTF16(spec, aViolationEventInit.mSourceFile);
|
||||||
} else {
|
} else {
|
||||||
aViolationEventInit.mSourceFile = aSourceFile;
|
aViolationEventInit.mSourceFile = aCSPViolationData.mSourceFile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1387,18 +1397,14 @@ nsresult nsCSPContext::FireViolationEvent(
|
||||||
*/
|
*/
|
||||||
class CSPReportSenderRunnable final : public Runnable {
|
class CSPReportSenderRunnable final : public Runnable {
|
||||||
public:
|
public:
|
||||||
CSPReportSenderRunnable(Element* aTriggeringElement,
|
CSPReportSenderRunnable(nsICSPEventListener* aCSPEventListener,
|
||||||
nsICSPEventListener* aCSPEventListener,
|
|
||||||
CSPViolationData&& aCSPViolationData,
|
CSPViolationData&& aCSPViolationData,
|
||||||
nsIURI* aOriginalURI, bool aReportOnlyFlag,
|
nsIURI* aOriginalURI, bool aReportOnlyFlag,
|
||||||
const nsAString& aViolatedDirectiveName,
|
const nsAString& aViolatedDirectiveName,
|
||||||
const nsAString& aViolatedDirectiveNameAndValue,
|
const nsAString& aViolatedDirectiveNameAndValue,
|
||||||
const CSPDirective aEffectiveDirective,
|
const nsAString& aObserverSubject, bool aReportSample,
|
||||||
const nsAString& aObserverSubject,
|
|
||||||
const nsAString& aSourceFile, bool aReportSample,
|
|
||||||
nsCSPContext* aCSPContext)
|
nsCSPContext* aCSPContext)
|
||||||
: mozilla::Runnable("CSPReportSenderRunnable"),
|
: mozilla::Runnable("CSPReportSenderRunnable"),
|
||||||
mTriggeringElement(aTriggeringElement),
|
|
||||||
mCSPEventListener(aCSPEventListener),
|
mCSPEventListener(aCSPEventListener),
|
||||||
mCSPViolationData(std::move(aCSPViolationData)),
|
mCSPViolationData(std::move(aCSPViolationData)),
|
||||||
mOriginalURI(aOriginalURI),
|
mOriginalURI(aOriginalURI),
|
||||||
|
@ -1406,8 +1412,6 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
mReportSample(aReportSample),
|
mReportSample(aReportSample),
|
||||||
mViolatedDirectiveName(aViolatedDirectiveName),
|
mViolatedDirectiveName(aViolatedDirectiveName),
|
||||||
mViolatedDirectiveNameAndValue(aViolatedDirectiveNameAndValue),
|
mViolatedDirectiveNameAndValue(aViolatedDirectiveNameAndValue),
|
||||||
mEffectiveDirective(aEffectiveDirective),
|
|
||||||
mSourceFile(aSourceFile),
|
|
||||||
mCSPContext(aCSPContext) {
|
mCSPContext(aCSPContext) {
|
||||||
NS_ASSERTION(!aViolatedDirectiveName.IsEmpty(),
|
NS_ASSERTION(!aViolatedDirectiveName.IsEmpty(),
|
||||||
"Can not send reports without a violated directive");
|
"Can not send reports without a violated directive");
|
||||||
|
@ -1444,10 +1448,10 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
|
|
||||||
nsAutoString effectiveDirective;
|
nsAutoString effectiveDirective;
|
||||||
effectiveDirective.AssignASCII(
|
effectiveDirective.AssignASCII(
|
||||||
CSP_CSPDirectiveToString(mEffectiveDirective));
|
CSP_CSPDirectiveToString(mCSPViolationData.mEffectiveDirective));
|
||||||
|
|
||||||
nsresult rv = mCSPContext->GatherSecurityPolicyViolationEventData(
|
nsresult rv = mCSPContext->GatherSecurityPolicyViolationEventData(
|
||||||
mOriginalURI, effectiveDirective, mCSPViolationData, mSourceFile,
|
mOriginalURI, effectiveDirective, mCSPViolationData,
|
||||||
mReportSample ? mCSPViolationData.mSample : EmptyString(), init);
|
mReportSample ? mCSPViolationData.mSample : EmptyString(), init);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
@ -1470,8 +1474,8 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
// A frame-ancestors violation has occurred, but we should not dispatch
|
// A frame-ancestors violation has occurred, but we should not dispatch
|
||||||
// the violation event to a potentially cross-origin ancestor.
|
// the violation event to a potentially cross-origin ancestor.
|
||||||
if (!mViolatedDirectiveName.EqualsLiteral("frame-ancestors")) {
|
if (!mViolatedDirectiveName.EqualsLiteral("frame-ancestors")) {
|
||||||
mCSPContext->FireViolationEvent(mTriggeringElement, mCSPEventListener,
|
mCSPContext->FireViolationEvent(mCSPViolationData.mElement,
|
||||||
init);
|
mCSPEventListener, init);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -1480,7 +1484,7 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
private:
|
private:
|
||||||
void ReportToConsole() const {
|
void ReportToConsole() const {
|
||||||
NS_ConvertUTF8toUTF16 effectiveDirective(
|
NS_ConvertUTF8toUTF16 effectiveDirective(
|
||||||
CSP_CSPDirectiveToString(mEffectiveDirective));
|
CSP_CSPDirectiveToString(mCSPViolationData.mEffectiveDirective));
|
||||||
|
|
||||||
const auto blockedContentSource =
|
const auto blockedContentSource =
|
||||||
mCSPViolationData.BlockedContentSourceOrUnknown();
|
mCSPViolationData.BlockedContentSourceOrUnknown();
|
||||||
|
@ -1488,16 +1492,18 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
switch (blockedContentSource) {
|
switch (blockedContentSource) {
|
||||||
case CSPViolationData::BlockedContentSource::Inline: {
|
case CSPViolationData::BlockedContentSource::Inline: {
|
||||||
const char* errorName = nullptr;
|
const char* errorName = nullptr;
|
||||||
if (mEffectiveDirective == CSPDirective::STYLE_SRC_ATTR_DIRECTIVE ||
|
if (mCSPViolationData.mEffectiveDirective ==
|
||||||
mEffectiveDirective == CSPDirective::STYLE_SRC_ELEM_DIRECTIVE) {
|
CSPDirective::STYLE_SRC_ATTR_DIRECTIVE ||
|
||||||
|
mCSPViolationData.mEffectiveDirective ==
|
||||||
|
CSPDirective::STYLE_SRC_ELEM_DIRECTIVE) {
|
||||||
errorName = mReportOnlyFlag ? "CSPROInlineStyleViolation"
|
errorName = mReportOnlyFlag ? "CSPROInlineStyleViolation"
|
||||||
: "CSPInlineStyleViolation";
|
: "CSPInlineStyleViolation";
|
||||||
} else if (mEffectiveDirective ==
|
} else if (mCSPViolationData.mEffectiveDirective ==
|
||||||
CSPDirective::SCRIPT_SRC_ATTR_DIRECTIVE) {
|
CSPDirective::SCRIPT_SRC_ATTR_DIRECTIVE) {
|
||||||
errorName = mReportOnlyFlag ? "CSPROEventHandlerScriptViolation"
|
errorName = mReportOnlyFlag ? "CSPROEventHandlerScriptViolation"
|
||||||
: "CSPEventHandlerScriptViolation";
|
: "CSPEventHandlerScriptViolation";
|
||||||
} else {
|
} else {
|
||||||
MOZ_ASSERT(mEffectiveDirective ==
|
MOZ_ASSERT(mCSPViolationData.mEffectiveDirective ==
|
||||||
CSPDirective::SCRIPT_SRC_ELEM_DIRECTIVE);
|
CSPDirective::SCRIPT_SRC_ELEM_DIRECTIVE);
|
||||||
errorName = mReportOnlyFlag ? "CSPROInlineScriptViolation"
|
errorName = mReportOnlyFlag ? "CSPROInlineScriptViolation"
|
||||||
: "CSPInlineScriptViolation";
|
: "CSPInlineScriptViolation";
|
||||||
|
@ -1506,9 +1512,9 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
AutoTArray<nsString, 2> params = {mViolatedDirectiveNameAndValue,
|
AutoTArray<nsString, 2> params = {mViolatedDirectiveNameAndValue,
|
||||||
effectiveDirective};
|
effectiveDirective};
|
||||||
mCSPContext->logToConsole(
|
mCSPContext->logToConsole(
|
||||||
errorName, params, mSourceFile, mCSPViolationData.mSample,
|
errorName, params, mCSPViolationData.mSourceFile,
|
||||||
mCSPViolationData.mLineNumber, mCSPViolationData.mColumnNumber,
|
mCSPViolationData.mSample, mCSPViolationData.mLineNumber,
|
||||||
nsIScriptError::errorFlag);
|
mCSPViolationData.mColumnNumber, nsIScriptError::errorFlag);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1518,7 +1524,7 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
mCSPContext->logToConsole(
|
mCSPContext->logToConsole(
|
||||||
mReportOnlyFlag ? "CSPROEvalScriptViolation"
|
mReportOnlyFlag ? "CSPROEvalScriptViolation"
|
||||||
: "CSPEvalScriptViolation",
|
: "CSPEvalScriptViolation",
|
||||||
params, mSourceFile, mCSPViolationData.mSample,
|
params, mCSPViolationData.mSourceFile, mCSPViolationData.mSample,
|
||||||
mCSPViolationData.mLineNumber, mCSPViolationData.mColumnNumber,
|
mCSPViolationData.mLineNumber, mCSPViolationData.mColumnNumber,
|
||||||
nsIScriptError::errorFlag);
|
nsIScriptError::errorFlag);
|
||||||
break;
|
break;
|
||||||
|
@ -1530,7 +1536,7 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
mCSPContext->logToConsole(
|
mCSPContext->logToConsole(
|
||||||
mReportOnlyFlag ? "CSPROWasmEvalScriptViolation"
|
mReportOnlyFlag ? "CSPROWasmEvalScriptViolation"
|
||||||
: "CSPWasmEvalScriptViolation",
|
: "CSPWasmEvalScriptViolation",
|
||||||
params, mSourceFile, mCSPViolationData.mSample,
|
params, mCSPViolationData.mSourceFile, mCSPViolationData.mSample,
|
||||||
mCSPViolationData.mLineNumber, mCSPViolationData.mColumnNumber,
|
mCSPViolationData.mLineNumber, mCSPViolationData.mColumnNumber,
|
||||||
nsIScriptError::errorFlag);
|
nsIScriptError::errorFlag);
|
||||||
break;
|
break;
|
||||||
|
@ -1557,7 +1563,7 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* errorName = nullptr;
|
const char* errorName = nullptr;
|
||||||
switch (mEffectiveDirective) {
|
switch (mCSPViolationData.mEffectiveDirective) {
|
||||||
case CSPDirective::STYLE_SRC_ELEM_DIRECTIVE:
|
case CSPDirective::STYLE_SRC_ELEM_DIRECTIVE:
|
||||||
errorName =
|
errorName =
|
||||||
mReportOnlyFlag ? "CSPROStyleViolation" : "CSPStyleViolation";
|
mReportOnlyFlag ? "CSPROStyleViolation" : "CSPStyleViolation";
|
||||||
|
@ -1578,14 +1584,13 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
AutoTArray<nsString, 3> params = {mViolatedDirectiveNameAndValue,
|
AutoTArray<nsString, 3> params = {mViolatedDirectiveNameAndValue,
|
||||||
source, effectiveDirective};
|
source, effectiveDirective};
|
||||||
mCSPContext->logToConsole(
|
mCSPContext->logToConsole(
|
||||||
errorName, params, mSourceFile, mCSPViolationData.mSample,
|
errorName, params, mCSPViolationData.mSourceFile,
|
||||||
mCSPViolationData.mLineNumber, mCSPViolationData.mColumnNumber,
|
mCSPViolationData.mSample, mCSPViolationData.mLineNumber,
|
||||||
nsIScriptError::errorFlag);
|
mCSPViolationData.mColumnNumber, nsIScriptError::errorFlag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<Element> mTriggeringElement;
|
|
||||||
nsCOMPtr<nsICSPEventListener> mCSPEventListener;
|
nsCOMPtr<nsICSPEventListener> mCSPEventListener;
|
||||||
CSPViolationData mCSPViolationData;
|
CSPViolationData mCSPViolationData;
|
||||||
nsCOMPtr<nsIURI> mOriginalURI;
|
nsCOMPtr<nsIURI> mOriginalURI;
|
||||||
|
@ -1593,9 +1598,7 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
bool mReportSample;
|
bool mReportSample;
|
||||||
nsString mViolatedDirectiveName;
|
nsString mViolatedDirectiveName;
|
||||||
nsString mViolatedDirectiveNameAndValue;
|
nsString mViolatedDirectiveNameAndValue;
|
||||||
CSPDirective mEffectiveDirective;
|
|
||||||
nsCOMPtr<nsISupports> mObserverSubject;
|
nsCOMPtr<nsISupports> mObserverSubject;
|
||||||
nsString mSourceFile;
|
|
||||||
RefPtr<nsCSPContext> mCSPContext;
|
RefPtr<nsCSPContext> mCSPContext;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1604,8 +1607,6 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
* topic that a violation occurred. Also triggers report sending and console
|
* topic that a violation occurred. Also triggers report sending and console
|
||||||
* logging. All asynchronous on the main thread.
|
* logging. All asynchronous on the main thread.
|
||||||
*
|
*
|
||||||
* @param aTriggeringElement
|
|
||||||
* The element that triggered this report violation. It can be null.
|
|
||||||
* @param aOriginalUri
|
* @param aOriginalUri
|
||||||
* The original URI if the blocked content is a redirect, else null
|
* The original URI if the blocked content is a redirect, else null
|
||||||
* @param aViolatedDirectiveName
|
* @param aViolatedDirectiveName
|
||||||
|
@ -1613,27 +1614,22 @@ class CSPReportSenderRunnable final : public Runnable {
|
||||||
* @param aObserverSubject
|
* @param aObserverSubject
|
||||||
* optional, subject sent to the nsIObservers listening to the CSP
|
* optional, subject sent to the nsIObservers listening to the CSP
|
||||||
* violation topic.
|
* violation topic.
|
||||||
* @param aSourceFile
|
|
||||||
* name of the file containing the inline script violation
|
|
||||||
*/
|
*/
|
||||||
nsresult nsCSPContext::AsyncReportViolation(
|
nsresult nsCSPContext::AsyncReportViolation(
|
||||||
mozilla::dom::Element* aTriggeringElement,
|
|
||||||
nsICSPEventListener* aCSPEventListener,
|
nsICSPEventListener* aCSPEventListener,
|
||||||
mozilla::dom::CSPViolationData&& aCSPViolationData, nsIURI* aOriginalURI,
|
mozilla::dom::CSPViolationData&& aCSPViolationData, nsIURI* aOriginalURI,
|
||||||
const nsAString& aViolatedDirectiveName,
|
const nsAString& aViolatedDirectiveName,
|
||||||
const nsAString& aViolatedDirectiveNameAndValue,
|
const nsAString& aViolatedDirectiveNameAndValue,
|
||||||
const CSPDirective aEffectiveDirective, const nsAString& aObserverSubject,
|
const nsAString& aObserverSubject, bool aReportSample) {
|
||||||
const nsAString& aSourceFile, bool aReportSample) {
|
|
||||||
EnsureIPCPoliciesRead();
|
EnsureIPCPoliciesRead();
|
||||||
NS_ENSURE_ARG_MAX(aCSPViolationData.mViolatedPolicyIndex,
|
NS_ENSURE_ARG_MAX(aCSPViolationData.mViolatedPolicyIndex,
|
||||||
mPolicies.Length() - 1);
|
mPolicies.Length() - 1);
|
||||||
|
|
||||||
nsCOMPtr<nsIRunnable> task = new CSPReportSenderRunnable(
|
nsCOMPtr<nsIRunnable> task = new CSPReportSenderRunnable(
|
||||||
aTriggeringElement, aCSPEventListener, std::move(aCSPViolationData),
|
aCSPEventListener, std::move(aCSPViolationData), aOriginalURI,
|
||||||
aOriginalURI,
|
|
||||||
mPolicies[aCSPViolationData.mViolatedPolicyIndex]->getReportOnlyFlag(),
|
mPolicies[aCSPViolationData.mViolatedPolicyIndex]->getReportOnlyFlag(),
|
||||||
aViolatedDirectiveName, aViolatedDirectiveNameAndValue,
|
aViolatedDirectiveName, aViolatedDirectiveNameAndValue, aObserverSubject,
|
||||||
aEffectiveDirective, aObserverSubject, aSourceFile, aReportSample, this);
|
aReportSample, this);
|
||||||
|
|
||||||
if (XRE_IsContentProcess()) {
|
if (XRE_IsContentProcess()) {
|
||||||
if (mEventTarget) {
|
if (mEventTarget) {
|
||||||
|
|
|
@ -85,8 +85,6 @@ class nsCSPContext : public nsIContentSecurityPolicy {
|
||||||
* The original URI if the blocked content is a redirect, else null
|
* The original URI if the blocked content is a redirect, else null
|
||||||
* @param aViolatedDirective
|
* @param aViolatedDirective
|
||||||
* the directive that was violated (string).
|
* the directive that was violated (string).
|
||||||
* @param aSourceFile
|
|
||||||
* name of the file containing the inline script violation
|
|
||||||
* @param aScriptSample
|
* @param aScriptSample
|
||||||
* a sample of the violating inline script
|
* a sample of the violating inline script
|
||||||
* @param aViolationEventInit
|
* @param aViolationEventInit
|
||||||
|
@ -95,7 +93,7 @@ class nsCSPContext : public nsIContentSecurityPolicy {
|
||||||
nsresult GatherSecurityPolicyViolationEventData(
|
nsresult GatherSecurityPolicyViolationEventData(
|
||||||
nsIURI* aOriginalURI, const nsAString& aEffectiveDirective,
|
nsIURI* aOriginalURI, const nsAString& aEffectiveDirective,
|
||||||
const mozilla::dom::CSPViolationData& aCSPViolationData,
|
const mozilla::dom::CSPViolationData& aCSPViolationData,
|
||||||
const nsAString& aSourceFile, const nsAString& aScriptSample,
|
const nsAString& aScriptSample,
|
||||||
mozilla::dom::SecurityPolicyViolationEventInit& aViolationEventInit);
|
mozilla::dom::SecurityPolicyViolationEventInit& aViolationEventInit);
|
||||||
|
|
||||||
nsresult SendReports(
|
nsresult SendReports(
|
||||||
|
@ -109,13 +107,11 @@ class nsCSPContext : public nsIContentSecurityPolicy {
|
||||||
aViolationEventInit);
|
aViolationEventInit);
|
||||||
|
|
||||||
nsresult AsyncReportViolation(
|
nsresult AsyncReportViolation(
|
||||||
mozilla::dom::Element* aTriggeringElement,
|
|
||||||
nsICSPEventListener* aCSPEventListener,
|
nsICSPEventListener* aCSPEventListener,
|
||||||
mozilla::dom::CSPViolationData&& aCSPViolationData, nsIURI* aOriginalURI,
|
mozilla::dom::CSPViolationData&& aCSPViolationData, nsIURI* aOriginalURI,
|
||||||
const nsAString& aViolatedDirectiveName,
|
const nsAString& aViolatedDirectiveName,
|
||||||
const nsAString& aViolatedDirectiveNameAndValue,
|
const nsAString& aViolatedDirectiveNameAndValue,
|
||||||
const CSPDirective aEffectiveDirective, const nsAString& aObserverSubject,
|
const nsAString& aObserverSubject, bool aReportSample);
|
||||||
const nsAString& aSourceFile, bool aReportSample);
|
|
||||||
|
|
||||||
// Hands off! Don't call this method unless you know what you
|
// Hands off! Don't call this method unless you know what you
|
||||||
// are doing. It's only supposed to be called from within
|
// are doing. It's only supposed to be called from within
|
||||||
|
|
|
@ -966,7 +966,7 @@ impl ClipNodeRange {
|
||||||
//TODO: merge with `CoordinateSpaceMapping`?
|
//TODO: merge with `CoordinateSpaceMapping`?
|
||||||
#[derive(Debug, MallocSizeOf)]
|
#[derive(Debug, MallocSizeOf)]
|
||||||
#[cfg_attr(feature = "capture", derive(Serialize))]
|
#[cfg_attr(feature = "capture", derive(Serialize))]
|
||||||
enum ClipSpaceConversion {
|
pub enum ClipSpaceConversion {
|
||||||
Local,
|
Local,
|
||||||
ScaleOffset(ScaleOffset),
|
ScaleOffset(ScaleOffset),
|
||||||
Transform(LayoutToWorldTransform),
|
Transform(LayoutToWorldTransform),
|
||||||
|
@ -974,7 +974,7 @@ enum ClipSpaceConversion {
|
||||||
|
|
||||||
impl ClipSpaceConversion {
|
impl ClipSpaceConversion {
|
||||||
/// Construct a new clip space converter between two spatial nodes.
|
/// Construct a new clip space converter between two spatial nodes.
|
||||||
fn new(
|
pub fn new(
|
||||||
prim_spatial_node_index: SpatialNodeIndex,
|
prim_spatial_node_index: SpatialNodeIndex,
|
||||||
clip_spatial_node_index: SpatialNodeIndex,
|
clip_spatial_node_index: SpatialNodeIndex,
|
||||||
spatial_tree: &SpatialTree,
|
spatial_tree: &SpatialTree,
|
||||||
|
@ -1184,106 +1184,6 @@ impl ClipNode {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Find the mask regions of a given clip node. For each mask region, map it in to the space defined
|
|
||||||
/// by `prim_spatial_node_index`, and invoke a closure with the local rect of that region. Returns
|
|
||||||
/// false for transformed clips (we can handle this case better in future).
|
|
||||||
pub fn get_local_mask_rects<F>(
|
|
||||||
&self,
|
|
||||||
prim_spatial_node_index: SpatialNodeIndex,
|
|
||||||
spatial_tree: &SpatialTree,
|
|
||||||
mut f: F,
|
|
||||||
) -> bool where F: FnMut(LayoutRect) {
|
|
||||||
let conversion = ClipSpaceConversion::new(
|
|
||||||
prim_spatial_node_index,
|
|
||||||
self.item.spatial_node_index,
|
|
||||||
spatial_tree,
|
|
||||||
);
|
|
||||||
|
|
||||||
match self.item.kind {
|
|
||||||
ClipItemKind::Rectangle { mode, .. } => {
|
|
||||||
match conversion {
|
|
||||||
ClipSpaceConversion::Local | ClipSpaceConversion::ScaleOffset(_) => {
|
|
||||||
// These clips will be handled by the vertex shader, so no mask is needed
|
|
||||||
// Ensure we don't see any ClipOut though - they should only arrive in
|
|
||||||
// this code path when we start passing box-shadows through here.
|
|
||||||
assert!(mode != ClipMode::ClipOut);
|
|
||||||
}
|
|
||||||
ClipSpaceConversion::Transform(..) => {
|
|
||||||
// For now, we don't handle mask regions for complex transforms. Previously, we didn't
|
|
||||||
// handle mask regions at all, so this is no worse than existing state. In future, we
|
|
||||||
// should conservatively map these cases if we come across any content which shows
|
|
||||||
// up as slow in this case.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ClipItemKind::RoundedRectangle { mode: ClipMode::Clip, rect, radius } => {
|
|
||||||
// Construct the mask regions for each corner
|
|
||||||
|
|
||||||
let mut top_left = LayoutRect::from_origin_and_size(
|
|
||||||
LayoutPoint::new(rect.min.x, rect.min.y),
|
|
||||||
LayoutSize::new(radius.top_left.width, radius.top_left.height),
|
|
||||||
);
|
|
||||||
let mut top_right = LayoutRect::from_origin_and_size(
|
|
||||||
LayoutPoint::new(
|
|
||||||
rect.max.x - radius.top_right.width,
|
|
||||||
rect.min.y,
|
|
||||||
),
|
|
||||||
LayoutSize::new(radius.top_right.width, radius.top_right.height),
|
|
||||||
);
|
|
||||||
let mut bottom_left = LayoutRect::from_origin_and_size(
|
|
||||||
LayoutPoint::new(
|
|
||||||
rect.min.x,
|
|
||||||
rect.max.y - radius.bottom_left.height,
|
|
||||||
),
|
|
||||||
LayoutSize::new(radius.bottom_left.width, radius.bottom_left.height),
|
|
||||||
);
|
|
||||||
let mut bottom_right = LayoutRect::from_origin_and_size(
|
|
||||||
LayoutPoint::new(
|
|
||||||
rect.max.x - radius.bottom_right.width,
|
|
||||||
rect.max.y - radius.bottom_right.height,
|
|
||||||
),
|
|
||||||
LayoutSize::new(radius.bottom_right.width, radius.bottom_right.height),
|
|
||||||
);
|
|
||||||
|
|
||||||
match conversion {
|
|
||||||
ClipSpaceConversion::Local => {
|
|
||||||
// No mapping necessary, same local space
|
|
||||||
}
|
|
||||||
ClipSpaceConversion::ScaleOffset(scale_offset) => {
|
|
||||||
top_left = scale_offset.map_rect(&top_left);
|
|
||||||
top_right = scale_offset.map_rect(&top_right);
|
|
||||||
bottom_left = scale_offset.map_rect(&bottom_left);
|
|
||||||
bottom_right = scale_offset.map_rect(&bottom_right);
|
|
||||||
}
|
|
||||||
ClipSpaceConversion::Transform(..) => {
|
|
||||||
// For now, we don't handle mask regions for complex transforms. Previously, we didn't
|
|
||||||
// handle mask regions at all, so this is no worse than existing state. In future, we
|
|
||||||
// should conservatively map these cases if we come across any content which shows
|
|
||||||
// up as slow in this case.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
f(top_left);
|
|
||||||
f(top_right);
|
|
||||||
f(bottom_left);
|
|
||||||
f(bottom_right);
|
|
||||||
}
|
|
||||||
ClipItemKind::RoundedRectangle { mode: ClipMode::ClipOut, .. } => {
|
|
||||||
panic!("bug: old box-shadow clips unexpected in this path");
|
|
||||||
}
|
|
||||||
ClipItemKind::BoxShadow { .. } => {
|
|
||||||
panic!("bug: old box-shadow clips unexpected in this path");
|
|
||||||
}
|
|
||||||
ClipItemKind::Image { .. } => {
|
|
||||||
panic!("bug: image clips unexpected in this path");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
|
|
@ -120,10 +120,6 @@ fn can_use_clip_chain_for_quad_path(
|
||||||
let clip_node = &data_stores.clip[clip_instance.handle];
|
let clip_node = &data_stores.clip[clip_instance.handle];
|
||||||
|
|
||||||
match clip_node.item.kind {
|
match clip_node.item.kind {
|
||||||
ClipItemKind::Rectangle { mode: ClipMode::ClipOut, .. } |
|
|
||||||
ClipItemKind::RoundedRectangle { mode: ClipMode::ClipOut, .. } => {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
ClipItemKind::RoundedRectangle { .. } | ClipItemKind::Rectangle { .. } => {}
|
ClipItemKind::RoundedRectangle { .. } | ClipItemKind::Rectangle { .. } => {}
|
||||||
ClipItemKind::BoxShadow { .. } => {
|
ClipItemKind::BoxShadow { .. } => {
|
||||||
// legacy path for box-shadows for now (move them to a separate primitive next)
|
// legacy path for box-shadows for now (move them to a separate primitive next)
|
||||||
|
|
|
@ -6,7 +6,7 @@ use api::{units::*, ClipMode, PremultipliedColorF};
|
||||||
use euclid::point2;
|
use euclid::point2;
|
||||||
|
|
||||||
use crate::batch::{BatchKey, BatchKind, BatchTextures};
|
use crate::batch::{BatchKey, BatchKind, BatchTextures};
|
||||||
use crate::clip::{ClipChainInstance, ClipIntern, ClipItemKind, ClipStore};
|
use crate::clip::{ClipChainInstance, ClipIntern, ClipItemKind, ClipNodeRange, ClipSpaceConversion, ClipStore};
|
||||||
use crate::command_buffer::{CommandBufferIndex, PrimitiveCommand, QuadFlags};
|
use crate::command_buffer::{CommandBufferIndex, PrimitiveCommand, QuadFlags};
|
||||||
use crate::frame_builder::{FrameBuildingContext, FrameBuildingState, PictureContext, PictureState};
|
use crate::frame_builder::{FrameBuildingContext, FrameBuildingState, PictureContext, PictureState};
|
||||||
use crate::gpu_types::{PrimitiveInstanceData, QuadInstance, QuadSegment, TransformPaletteId, ZBufferId};
|
use crate::gpu_types::{PrimitiveInstanceData, QuadInstance, QuadSegment, TransformPaletteId, ZBufferId};
|
||||||
|
@ -20,7 +20,7 @@ use crate::renderer::{BlendMode, GpuBufferAddress, GpuBufferBuilder, GpuBufferBu
|
||||||
use crate::segment::EdgeAaSegmentMask;
|
use crate::segment::EdgeAaSegmentMask;
|
||||||
use crate::space::SpaceMapper;
|
use crate::space::SpaceMapper;
|
||||||
use crate::spatial_tree::{SpatialNodeIndex, SpatialTree};
|
use crate::spatial_tree::{SpatialNodeIndex, SpatialTree};
|
||||||
use crate::util::{MaxRect, ScaleOffset};
|
use crate::util::{extract_inner_rect_k, MaxRect, ScaleOffset};
|
||||||
|
|
||||||
const MIN_AA_SEGMENTS_SIZE: f32 = 4.0;
|
const MIN_AA_SEGMENTS_SIZE: f32 = 4.0;
|
||||||
const MIN_QUAD_SPLIT_SIZE: f32 = 256.0;
|
const MIN_QUAD_SPLIT_SIZE: f32 = 256.0;
|
||||||
|
@ -174,7 +174,7 @@ pub fn prepare_quad(
|
||||||
pattern,
|
pattern,
|
||||||
clipped_surface_rect.size(),
|
clipped_surface_rect.size(),
|
||||||
clipped_surface_rect.min.to_f32(),
|
clipped_surface_rect.min.to_f32(),
|
||||||
clip_chain,
|
clip_chain.clips_range,
|
||||||
prim_spatial_node_index,
|
prim_spatial_node_index,
|
||||||
pic_context.raster_spatial_node_index,
|
pic_context.raster_spatial_node_index,
|
||||||
main_prim_address,
|
main_prim_address,
|
||||||
|
@ -232,16 +232,95 @@ pub fn prepare_quad(
|
||||||
let clip_instance = frame_state.clip_store.get_instance_from_range(&clip_chain.clips_range, i);
|
let clip_instance = frame_state.clip_store.get_instance_from_range(&clip_chain.clips_range, i);
|
||||||
let clip_node = &interned_clips[clip_instance.handle];
|
let clip_node = &interned_clips[clip_instance.handle];
|
||||||
|
|
||||||
if !clip_node.get_local_mask_rects(
|
// Construct a prim <-> clip space converter
|
||||||
|
let conversion = ClipSpaceConversion::new(
|
||||||
prim_spatial_node_index,
|
prim_spatial_node_index,
|
||||||
|
clip_node.item.spatial_node_index,
|
||||||
frame_context.spatial_tree,
|
frame_context.spatial_tree,
|
||||||
|mask_region| {
|
);
|
||||||
scratch.quad_tile_classifier.add_mask_region(mask_region)
|
|
||||||
|
// For now, we only handle axis-aligned mappings
|
||||||
|
let transform = match conversion {
|
||||||
|
ClipSpaceConversion::Local => ScaleOffset::identity(),
|
||||||
|
ClipSpaceConversion::ScaleOffset(scale_offset) => scale_offset,
|
||||||
|
ClipSpaceConversion::Transform(..) => {
|
||||||
|
// If the clip transform is not axis-aligned, just assume the entire primitive
|
||||||
|
// local rect is affected by the clip, for now. It's no worse than what
|
||||||
|
// we were doing previously for all tiles.
|
||||||
|
scratch.quad_tile_classifier.add_mask_region(*local_rect);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add regions to the classifier depending on the clip kind
|
||||||
|
match clip_node.item.kind {
|
||||||
|
ClipItemKind::Rectangle { mode, ref rect } => {
|
||||||
|
let rect = transform.map_rect(rect);
|
||||||
|
scratch.quad_tile_classifier.add_clip_rect(rect, mode);
|
||||||
|
}
|
||||||
|
ClipItemKind::RoundedRectangle { mode: ClipMode::Clip, ref rect, ref radius } => {
|
||||||
|
// For rounded-rects with Clip mode, we need a mask for each corner,
|
||||||
|
// and to add the clip rect itself (to cull tiles outside that rect)
|
||||||
|
|
||||||
|
// Map the local rect and radii
|
||||||
|
let rect = transform.map_rect(rect);
|
||||||
|
let r_tl = transform.map_size(&radius.top_left);
|
||||||
|
let r_tr = transform.map_size(&radius.top_right);
|
||||||
|
let r_br = transform.map_size(&radius.bottom_right);
|
||||||
|
let r_bl = transform.map_size(&radius.bottom_left);
|
||||||
|
|
||||||
|
// Construct the mask regions for each corner
|
||||||
|
let c_tl = LayoutRect::from_origin_and_size(
|
||||||
|
LayoutPoint::new(rect.min.x, rect.min.y),
|
||||||
|
r_tl,
|
||||||
|
);
|
||||||
|
let c_tr = LayoutRect::from_origin_and_size(
|
||||||
|
LayoutPoint::new(
|
||||||
|
rect.max.x - r_tr.width,
|
||||||
|
rect.min.y,
|
||||||
|
),
|
||||||
|
r_tr,
|
||||||
|
);
|
||||||
|
let c_br = LayoutRect::from_origin_and_size(
|
||||||
|
LayoutPoint::new(
|
||||||
|
rect.max.x - r_br.width,
|
||||||
|
rect.max.y - r_br.height,
|
||||||
|
),
|
||||||
|
r_br,
|
||||||
|
);
|
||||||
|
let c_bl = LayoutRect::from_origin_and_size(
|
||||||
|
LayoutPoint::new(
|
||||||
|
rect.min.x,
|
||||||
|
rect.max.y - r_bl.height,
|
||||||
|
),
|
||||||
|
r_bl,
|
||||||
|
);
|
||||||
|
|
||||||
|
scratch.quad_tile_classifier.add_clip_rect(rect, ClipMode::Clip);
|
||||||
|
scratch.quad_tile_classifier.add_mask_region(c_tl);
|
||||||
|
scratch.quad_tile_classifier.add_mask_region(c_tr);
|
||||||
|
scratch.quad_tile_classifier.add_mask_region(c_br);
|
||||||
|
scratch.quad_tile_classifier.add_mask_region(c_bl);
|
||||||
|
}
|
||||||
|
ClipItemKind::RoundedRectangle { mode: ClipMode::ClipOut, ref rect, ref radius } => {
|
||||||
|
// Try to find an inner rect within the clip-out rounded rect that we can
|
||||||
|
// use to cull inner tiles. If we can't, the entire rect needs to be masked
|
||||||
|
match extract_inner_rect_k(rect, radius, 0.5) {
|
||||||
|
Some(ref rect) => {
|
||||||
|
let rect = transform.map_rect(rect);
|
||||||
|
scratch.quad_tile_classifier.add_clip_rect(rect, ClipMode::ClipOut);
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
scratch.quad_tile_classifier.add_mask_region(*local_rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ClipItemKind::BoxShadow { .. } => {
|
||||||
|
panic!("bug: old box-shadow clips unexpected in this path");
|
||||||
|
}
|
||||||
|
ClipItemKind::Image { .. } => {
|
||||||
|
panic!("bug: image clips unexpected in this path");
|
||||||
}
|
}
|
||||||
) {
|
|
||||||
// If we couldn't extract a mask region, just assume the entire primitive
|
|
||||||
// local rect is affected by the clip, for now.
|
|
||||||
scratch.quad_tile_classifier.add_mask_region(*local_rect);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,11 +368,8 @@ pub fn prepare_quad(
|
||||||
// This tile was entirely clipped, so we can skip drawing it
|
// This tile was entirely clipped, so we can skip drawing it
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
QuadTileKind::Pattern => {
|
QuadTileKind::Pattern { has_mask } => {
|
||||||
prim_is_2d_scale_translation
|
prim_is_2d_scale_translation && !has_mask
|
||||||
}
|
|
||||||
QuadTileKind::PatternWithMask => {
|
|
||||||
false
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -316,7 +392,7 @@ pub fn prepare_quad(
|
||||||
pattern,
|
pattern,
|
||||||
int_rect.round().to_i32().size(),
|
int_rect.round().to_i32().size(),
|
||||||
rect.min,
|
rect.min,
|
||||||
clip_chain,
|
clip_chain.clips_range,
|
||||||
prim_spatial_node_index,
|
prim_spatial_node_index,
|
||||||
pic_context.raster_spatial_node_index,
|
pic_context.raster_spatial_node_index,
|
||||||
main_prim_address,
|
main_prim_address,
|
||||||
|
@ -465,7 +541,7 @@ pub fn prepare_quad(
|
||||||
pattern,
|
pattern,
|
||||||
device_rect.size(),
|
device_rect.size(),
|
||||||
device_rect.min.to_f32(),
|
device_rect.min.to_f32(),
|
||||||
clip_chain,
|
clip_chain.clips_range,
|
||||||
prim_spatial_node_index,
|
prim_spatial_node_index,
|
||||||
pic_context.raster_spatial_node_index,
|
pic_context.raster_spatial_node_index,
|
||||||
main_prim_address,
|
main_prim_address,
|
||||||
|
@ -595,7 +671,7 @@ fn add_render_task_with_mask(
|
||||||
pattern: &Pattern,
|
pattern: &Pattern,
|
||||||
task_size: DeviceIntSize,
|
task_size: DeviceIntSize,
|
||||||
content_origin: DevicePoint,
|
content_origin: DevicePoint,
|
||||||
clip_chain: &ClipChainInstance,
|
clips_range: ClipNodeRange,
|
||||||
prim_spatial_node_index: SpatialNodeIndex,
|
prim_spatial_node_index: SpatialNodeIndex,
|
||||||
raster_spatial_node_index: SpatialNodeIndex,
|
raster_spatial_node_index: SpatialNodeIndex,
|
||||||
prim_address_f: GpuBufferAddress,
|
prim_address_f: GpuBufferAddress,
|
||||||
|
@ -618,19 +694,20 @@ fn add_render_task_with_mask(
|
||||||
transform_id,
|
transform_id,
|
||||||
aa_flags,
|
aa_flags,
|
||||||
quad_flags,
|
quad_flags,
|
||||||
clip_chain.clips_range,
|
|
||||||
needs_scissor_rect,
|
needs_scissor_rect,
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
|
||||||
let masks = MaskSubPass {
|
if clips_range.count > 0 {
|
||||||
clip_node_range: clip_chain.clips_range,
|
let masks = MaskSubPass {
|
||||||
prim_spatial_node_index,
|
clip_node_range: clips_range,
|
||||||
prim_address_f,
|
prim_spatial_node_index,
|
||||||
};
|
prim_address_f,
|
||||||
|
};
|
||||||
|
|
||||||
let task = frame_state.rg_builder.get_task_mut(task_id);
|
let task = frame_state.rg_builder.get_task_mut(task_id);
|
||||||
task.add_sub_pass(SubPass::Masks { masks });
|
task.add_sub_pass(SubPass::Masks { masks });
|
||||||
|
}
|
||||||
|
|
||||||
frame_state
|
frame_state
|
||||||
.surface_builder
|
.surface_builder
|
||||||
|
@ -890,13 +967,12 @@ pub fn add_to_batch<F>(
|
||||||
#[cfg_attr(feature = "capture", derive(Serialize))]
|
#[cfg_attr(feature = "capture", derive(Serialize))]
|
||||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||||
pub enum QuadTileKind {
|
pub enum QuadTileKind {
|
||||||
// TODO(gw): We don't construct this just yet, will be enabled in a follow up patch
|
|
||||||
// Clipped out - can be skipped
|
// Clipped out - can be skipped
|
||||||
Clipped,
|
Clipped,
|
||||||
// Requires the pattern only, can draw directly
|
// Requires the pattern only, can draw directly
|
||||||
Pattern,
|
Pattern {
|
||||||
// Requires a mask, must be drawn indirectly
|
has_mask: bool,
|
||||||
PatternWithMask,
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(feature = "capture", derive(Serialize))]
|
#[cfg_attr(feature = "capture", derive(Serialize))]
|
||||||
|
@ -910,7 +986,7 @@ impl Default for QuadTileInfo {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
QuadTileInfo {
|
QuadTileInfo {
|
||||||
rect: LayoutRect::zero(),
|
rect: LayoutRect::zero(),
|
||||||
kind: QuadTileKind::Pattern,
|
kind: QuadTileKind::Pattern { has_mask: false },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -967,8 +1043,6 @@ impl QuadTileClassifier {
|
||||||
for x in 0 .. x_tiles {
|
for x in 0 .. x_tiles {
|
||||||
let info = &mut self.buffer[y * x_tiles + x];
|
let info = &mut self.buffer[y * x_tiles + x];
|
||||||
|
|
||||||
info.kind = QuadTileKind::Pattern;
|
|
||||||
|
|
||||||
let p0 = LayoutPoint::new(
|
let p0 = LayoutPoint::new(
|
||||||
rect.min.x + x as f32 * tw,
|
rect.min.x + x as f32 * tw,
|
||||||
rect.min.y + y as f32 * th,
|
rect.min.y + y as f32 * th,
|
||||||
|
@ -979,6 +1053,7 @@ impl QuadTileClassifier {
|
||||||
);
|
);
|
||||||
|
|
||||||
info.rect = LayoutRect::new(p0, p1);
|
info.rect = LayoutRect::new(p0, p1);
|
||||||
|
info.kind = QuadTileKind::Pattern { has_mask: false };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1003,12 +1078,16 @@ impl QuadTileClassifier {
|
||||||
}
|
}
|
||||||
ClipMode::ClipOut => {
|
ClipMode::ClipOut => {
|
||||||
self.clip_out_regions.push(clip_rect);
|
self.clip_out_regions.push(clip_rect);
|
||||||
|
|
||||||
|
self.add_mask_region(self.rect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Classify all the tiles in to categories, based on the provided masks and clip regions
|
/// Classify all the tiles in to categories, based on the provided masks and clip regions
|
||||||
pub fn classify(&mut self) -> &[QuadTileInfo] {
|
pub fn classify(
|
||||||
|
&mut self,
|
||||||
|
) -> &[QuadTileInfo] {
|
||||||
assert_ne!(self.x_tiles, 0);
|
assert_ne!(self.x_tiles, 0);
|
||||||
assert_ne!(self.y_tiles, 0);
|
assert_ne!(self.y_tiles, 0);
|
||||||
|
|
||||||
|
@ -1020,8 +1099,8 @@ impl QuadTileClassifier {
|
||||||
for clip_region in &self.clip_in_regions {
|
for clip_region in &self.clip_in_regions {
|
||||||
match info.kind {
|
match info.kind {
|
||||||
QuadTileKind::Clipped => {},
|
QuadTileKind::Clipped => {},
|
||||||
QuadTileKind::Pattern | QuadTileKind::PatternWithMask => {
|
QuadTileKind::Pattern { .. } => {
|
||||||
if clip_region.contains_box(&info.rect) {
|
if !clip_region.intersects(&info.rect) {
|
||||||
info.kind = QuadTileKind::Clipped;
|
info.kind = QuadTileKind::Clipped;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1033,8 +1112,8 @@ impl QuadTileClassifier {
|
||||||
for clip_region in &self.clip_out_regions {
|
for clip_region in &self.clip_out_regions {
|
||||||
match info.kind {
|
match info.kind {
|
||||||
QuadTileKind::Clipped => {},
|
QuadTileKind::Clipped => {},
|
||||||
QuadTileKind::Pattern | QuadTileKind::PatternWithMask => {
|
QuadTileKind::Pattern { .. } => {
|
||||||
if !clip_region.intersects(&info.rect) {
|
if clip_region.contains_box(&info.rect) {
|
||||||
info.kind = QuadTileKind::Clipped;
|
info.kind = QuadTileKind::Clipped;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1044,10 +1123,10 @@ impl QuadTileClassifier {
|
||||||
// If a tile intersects with a mask region, and isn't clipped, it needs a mask
|
// If a tile intersects with a mask region, and isn't clipped, it needs a mask
|
||||||
for mask_region in &self.mask_regions {
|
for mask_region in &self.mask_regions {
|
||||||
match info.kind {
|
match info.kind {
|
||||||
QuadTileKind::Clipped | QuadTileKind::PatternWithMask => {},
|
QuadTileKind::Clipped | QuadTileKind::Pattern { has_mask: true, .. } => {},
|
||||||
QuadTileKind::Pattern => {
|
QuadTileKind::Pattern { ref mut has_mask, .. } => {
|
||||||
if mask_region.intersects(&info.rect) {
|
if mask_region.intersects(&info.rect) {
|
||||||
info.kind = QuadTileKind::PatternWithMask;
|
*has_mask = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1086,15 +1165,21 @@ fn qc_verify(mut qc: QuadTileClassifier, expected: &[QuadTileKind]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
use QuadTileKind::{Pattern as p, Clipped as c, PatternWithMask as m};
|
const P: QuadTileKind = QuadTileKind::Pattern { has_mask: false };
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
const C: QuadTileKind = QuadTileKind::Clipped;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
const M: QuadTileKind = QuadTileKind::Pattern { has_mask: true };
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn quad_classify_1() {
|
fn quad_classify_1() {
|
||||||
let qc = qc_new(3, 3, 0.0, 0.0, 100.0, 100.0);
|
let qc = qc_new(3, 3, 0.0, 0.0, 100.0, 100.0);
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
p, p, p,
|
P, P, P,
|
||||||
p, p, p,
|
P, P, P,
|
||||||
p, p, p,
|
P, P, P,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1106,9 +1191,9 @@ fn quad_classify_2() {
|
||||||
qc.add_clip_rect(rect, ClipMode::Clip);
|
qc.add_clip_rect(rect, ClipMode::Clip);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
c, c, c,
|
P, P, P,
|
||||||
c, c, c,
|
P, P, P,
|
||||||
c, c, c,
|
P, P, P,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1120,9 +1205,9 @@ fn quad_classify_3() {
|
||||||
qc.add_clip_rect(rect, ClipMode::Clip);
|
qc.add_clip_rect(rect, ClipMode::Clip);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
p, p, p,
|
C, C, C,
|
||||||
p, p, p,
|
C, P, C,
|
||||||
p, p, p,
|
C, C, C,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1134,9 +1219,9 @@ fn quad_classify_4() {
|
||||||
qc.add_clip_rect(rect, ClipMode::Clip);
|
qc.add_clip_rect(rect, ClipMode::Clip);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
p, p, p,
|
P, P, P,
|
||||||
p, c, p,
|
P, P, P,
|
||||||
p, p, p,
|
P, P, P,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1148,9 +1233,9 @@ fn quad_classify_5() {
|
||||||
qc.add_clip_rect(rect, ClipMode::ClipOut);
|
qc.add_clip_rect(rect, ClipMode::ClipOut);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
p, p, p,
|
M, M, M,
|
||||||
p, p, p,
|
M, C, M,
|
||||||
p, p, p,
|
M, M, M,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1162,9 +1247,9 @@ fn quad_classify_6() {
|
||||||
qc.add_clip_rect(rect, ClipMode::ClipOut);
|
qc.add_clip_rect(rect, ClipMode::ClipOut);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
c, c, c,
|
M, M, M,
|
||||||
c, p, c,
|
M, M, M,
|
||||||
c, c, c,
|
M, M, M,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1176,9 +1261,9 @@ fn quad_classify_7() {
|
||||||
qc.add_mask_region(rect);
|
qc.add_mask_region(rect);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
m, m, m,
|
M, M, M,
|
||||||
m, m, m,
|
M, M, M,
|
||||||
m, m, m,
|
M, M, M,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1190,9 +1275,9 @@ fn quad_classify_8() {
|
||||||
qc.add_mask_region(rect);
|
qc.add_mask_region(rect);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
p, p, p,
|
P, P, P,
|
||||||
p, m, p,
|
P, M, P,
|
||||||
p, p, p,
|
P, P, P,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1204,10 +1289,10 @@ fn quad_classify_9() {
|
||||||
qc.add_mask_region(rect);
|
qc.add_mask_region(rect);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
m, m, p, p,
|
M, M, P, P,
|
||||||
m, m, p, p,
|
M, M, P, P,
|
||||||
p, p, p, p,
|
P, P, P, P,
|
||||||
p, p, p, p,
|
P, P, P, P,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1222,10 +1307,10 @@ fn quad_classify_10() {
|
||||||
qc.add_clip_rect(clip_rect, ClipMode::Clip);
|
qc.add_clip_rect(clip_rect, ClipMode::Clip);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
m, m, p, p,
|
M, M, P, C,
|
||||||
m, c, p, p,
|
M, M, P, C,
|
||||||
p, c, p, p,
|
P, P, P, C,
|
||||||
p, p, p, p,
|
P, P, P, C,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1243,10 +1328,10 @@ fn quad_classify_11() {
|
||||||
qc.add_clip_rect(clip_out_rect, ClipMode::ClipOut);
|
qc.add_clip_rect(clip_out_rect, ClipMode::ClipOut);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
c, m, p, c,
|
M, M, M, C,
|
||||||
c, c, p, c,
|
M, M, M, C,
|
||||||
c, c, c, c,
|
M, M, M, C,
|
||||||
c, c, c, c,
|
M, M, M, C,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1264,9 +1349,9 @@ fn quad_classify_12() {
|
||||||
qc.add_mask_region(mask_rect);
|
qc.add_mask_region(mask_rect);
|
||||||
|
|
||||||
qc_verify(qc, &[
|
qc_verify(qc, &[
|
||||||
c, m, p, c,
|
M, M, M, C,
|
||||||
c, c, p, c,
|
M, M, M, C,
|
||||||
c, c, c, c,
|
M, M, M, C,
|
||||||
c, c, c, c,
|
M, M, M, C,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
|
||||||
use api::{units::*, PremultipliedColorF, ClipMode};
|
use api::{units::*, PremultipliedColorF};
|
||||||
use api::{ColorF, LineOrientation, BorderStyle};
|
use api::{ColorF, LineOrientation, BorderStyle};
|
||||||
use crate::batch::{AlphaBatchBuilder, AlphaBatchContainer, BatchTextures};
|
use crate::batch::{AlphaBatchBuilder, AlphaBatchContainer, BatchTextures};
|
||||||
use crate::batch::{ClipBatcher, BatchBuilder, INVALID_SEGMENT_INDEX, ClipMaskInstanceList};
|
use crate::batch::{ClipBatcher, BatchBuilder, INVALID_SEGMENT_INDEX, ClipMaskInstanceList};
|
||||||
|
@ -1208,8 +1208,6 @@ fn build_mask_tasks(
|
||||||
(clip_address, fast_path)
|
(clip_address, fast_path)
|
||||||
}
|
}
|
||||||
ClipItemKind::Rectangle { rect, mode, .. } => {
|
ClipItemKind::Rectangle { rect, mode, .. } => {
|
||||||
assert_eq!(mode, ClipMode::Clip);
|
|
||||||
|
|
||||||
let mut writer = gpu_buffer_builder.f32.write_blocks(3);
|
let mut writer = gpu_buffer_builder.f32.write_blocks(3);
|
||||||
writer.push_one(rect);
|
writer.push_one(rect);
|
||||||
writer.push_one([0.0, 0.0, 0.0, 0.0]);
|
writer.push_one([0.0, 0.0, 0.0, 0.0]);
|
||||||
|
|
|
@ -196,7 +196,6 @@ pub struct PrimTask {
|
||||||
pub transform_id: TransformPaletteId,
|
pub transform_id: TransformPaletteId,
|
||||||
pub edge_flags: EdgeAaSegmentMask,
|
pub edge_flags: EdgeAaSegmentMask,
|
||||||
pub quad_flags: QuadFlags,
|
pub quad_flags: QuadFlags,
|
||||||
pub clip_node_range: ClipNodeRange,
|
|
||||||
pub prim_needs_scissor_rect: bool,
|
pub prim_needs_scissor_rect: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -544,7 +543,6 @@ impl RenderTaskKind {
|
||||||
transform_id: TransformPaletteId,
|
transform_id: TransformPaletteId,
|
||||||
edge_flags: EdgeAaSegmentMask,
|
edge_flags: EdgeAaSegmentMask,
|
||||||
quad_flags: QuadFlags,
|
quad_flags: QuadFlags,
|
||||||
clip_node_range: ClipNodeRange,
|
|
||||||
prim_needs_scissor_rect: bool,
|
prim_needs_scissor_rect: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
RenderTaskKind::Prim(PrimTask {
|
RenderTaskKind::Prim(PrimTask {
|
||||||
|
@ -557,7 +555,6 @@ impl RenderTaskKind {
|
||||||
transform_id,
|
transform_id,
|
||||||
edge_flags,
|
edge_flags,
|
||||||
quad_flags,
|
quad_flags,
|
||||||
clip_node_range,
|
|
||||||
prim_needs_scissor_rect,
|
prim_needs_scissor_rect,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -349,6 +349,13 @@ impl ScaleOffset {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn map_size<F, T>(&self, size: &Size2D<f32, F>) -> Size2D<f32, T> {
|
||||||
|
Size2D::new(
|
||||||
|
size.width * self.scale.x,
|
||||||
|
size.height * self.scale.y,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn unmap_vector<F, T>(&self, vector: &Vector2D<f32, F>) -> Vector2D<f32, T> {
|
pub fn unmap_vector<F, T>(&self, vector: &Vector2D<f32, F>) -> Vector2D<f32, T> {
|
||||||
Vector2D::new(
|
Vector2D::new(
|
||||||
vector.x / self.scale.x,
|
vector.x / self.scale.x,
|
||||||
|
@ -677,6 +684,17 @@ pub fn extract_inner_rect_safe<U>(
|
||||||
extract_inner_rect_impl(rect, radii, 1.0)
|
extract_inner_rect_impl(rect, radii, 1.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return an aligned rectangle that is inside the clip region and doesn't intersect
|
||||||
|
/// any of the bounding rectangles of the rounded corners, with a specific k factor
|
||||||
|
/// to control how much of the rounded corner is included.
|
||||||
|
pub fn extract_inner_rect_k<U>(
|
||||||
|
rect: &Box2D<f32, U>,
|
||||||
|
radii: &BorderRadius,
|
||||||
|
k: f32,
|
||||||
|
) -> Option<Box2D<f32, U>> {
|
||||||
|
extract_inner_rect_impl(rect, radii, k)
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
use euclid::vec3;
|
use euclid::vec3;
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
@ -7,4 +7,4 @@ edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
unicode-bidi = { version = "0.3.15", features = ["smallvec"] }
|
unicode-bidi = { version = "0.3.15", features = ["smallvec"] }
|
||||||
icu_properties = { version = "1.4.0", features = ["bidi"] }
|
icu_properties = { version = "1.5.0", features = ["bidi"] }
|
||||||
|
|
|
@ -81,7 +81,7 @@ if CONFIG["MOZ_ICU4X"]:
|
||||||
"src/ICU4XGeckoDataProvider.cpp",
|
"src/ICU4XGeckoDataProvider.cpp",
|
||||||
]
|
]
|
||||||
LOCAL_INCLUDES += [
|
LOCAL_INCLUDES += [
|
||||||
"/intl/icu_capi/c/include",
|
"/intl/icu_capi/bindings/c",
|
||||||
]
|
]
|
||||||
|
|
||||||
# At the time of this writing the MOZ_HAS_MOZGLUE define must be true in order to
|
# At the time of this writing the MOZ_HAS_MOZGLUE define must be true in order to
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
--- a/intl/icu_capi/Cargo.toml 2023-11-23 00:55:29.801649858 +0900
|
--- a/intl/icu_capi/Cargo.toml 2023-11-23 00:55:29.801649858 +0900
|
||||||
+++ b/intl/icu_capi/Cargo.toml 2023-11-23 00:57:49.528753911 +0900
|
+++ b/intl/icu_capi/Cargo.toml 2023-11-23 00:57:49.528753911 +0900
|
||||||
@@ -190,19 +190,7 @@
|
@@ -190,19 +190,8 @@
|
||||||
"icu_timezone?/serde",
|
"icu_experimental?/serde",
|
||||||
]
|
]
|
||||||
compiled_data = [
|
compiled_data = [
|
||||||
- "icu_calendar?/compiled_data",
|
- "icu_calendar?/compiled_data",
|
||||||
|
@ -9,14 +9,14 @@
|
||||||
- "icu_collator?/compiled_data",
|
- "icu_collator?/compiled_data",
|
||||||
- "icu_datetime?/compiled_data",
|
- "icu_datetime?/compiled_data",
|
||||||
- "icu_decimal?/compiled_data",
|
- "icu_decimal?/compiled_data",
|
||||||
- "icu_displaynames?/compiled_data",
|
|
||||||
- "icu_list?/compiled_data",
|
- "icu_list?/compiled_data",
|
||||||
- "icu_locid_transform?/compiled_data",
|
- "icu_locid_transform?/compiled_data",
|
||||||
- "icu_normalizer?/compiled_data",
|
- "icu_normalizer?/compiled_data",
|
||||||
- "icu_plurals?/compiled_data",
|
- "icu_plurals?/compiled_data",
|
||||||
- "icu_properties?/compiled_data",
|
"icu_properties?/compiled_data",
|
||||||
"icu_segmenter?/compiled_data",
|
"icu_segmenter?/compiled_data",
|
||||||
- "icu_timezone?/compiled_data",
|
- "icu_timezone?/compiled_data",
|
||||||
|
- "icu_experimental?/compiled_data",
|
||||||
]
|
]
|
||||||
cpp_default = ["logging"]
|
cpp_default = ["logging"]
|
||||||
default = [
|
default = [
|
||||||
|
|
|
@ -1,89 +0,0 @@
|
||||||
diff --git a/intl/icu_capi/cpp/include/diplomat_runtime.hpp b/intl/icu_capi/cpp/include/diplomat_runtime.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/diplomat_runtime.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/diplomat_runtime.hpp
|
|
||||||
@@ -49,52 +49,60 @@ template<typename T> struct WriteableTra
|
|
||||||
template<> struct WriteableTrait<std::string> {
|
|
||||||
static inline capi::DiplomatWriteable Construct(std::string& t) {
|
|
||||||
return diplomat::WriteableFromString(t);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class T> struct Ok {
|
|
||||||
T inner;
|
|
||||||
- Ok(T&& i): inner(std::move(i)) {}
|
|
||||||
+ explicit Ok(T&& i): inner(std::move(i)) {}
|
|
||||||
// We don't want to expose an lvalue-capable constructor in general
|
|
||||||
// however there is no problem doing this for trivially copyable types
|
|
||||||
template<typename X = T, typename = typename std::enable_if<std::is_trivially_copyable<X>::value>::type>
|
|
||||||
- Ok(T i): inner(i) {}
|
|
||||||
+ explicit Ok(const T& i): inner(i) {}
|
|
||||||
Ok() = default;
|
|
||||||
Ok(Ok&&) noexcept = default;
|
|
||||||
Ok(const Ok &) = default;
|
|
||||||
Ok& operator=(const Ok&) = default;
|
|
||||||
Ok& operator=(Ok&&) noexcept = default;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class T> struct Err {
|
|
||||||
T inner;
|
|
||||||
- Err(T&& i): inner(std::move(i)) {}
|
|
||||||
+ explicit Err(T&& i): inner(std::move(i)) {}
|
|
||||||
// We don't want to expose an lvalue-capable constructor in general
|
|
||||||
// however there is no problem doing this for trivially copyable types
|
|
||||||
template<typename X = T, typename = typename std::enable_if<std::is_trivially_copyable<X>::value>::type>
|
|
||||||
- Err(T i): inner(i) {}
|
|
||||||
+ explicit Err(const T& i): inner(i) {}
|
|
||||||
Err() = default;
|
|
||||||
Err(Err&&) noexcept = default;
|
|
||||||
Err(const Err &) = default;
|
|
||||||
Err& operator=(const Err&) = default;
|
|
||||||
Err& operator=(Err&&) noexcept = default;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class T, class E>
|
|
||||||
class result {
|
|
||||||
private:
|
|
||||||
std::variant<Ok<T>, Err<E>> val;
|
|
||||||
public:
|
|
||||||
- result(Ok<T>&& v): val(std::move(v)) {}
|
|
||||||
- result(Err<E>&& v): val(std::move(v)) {}
|
|
||||||
+ explicit result(Ok<T>&& v): val(std::move(v)) {}
|
|
||||||
+ explicit result(Err<E>&& v): val(std::move(v)) {}
|
|
||||||
result() = default;
|
|
||||||
result(const result &) = default;
|
|
||||||
result& operator=(const result&) = default;
|
|
||||||
+ result& operator=(Ok<T>&& t) {
|
|
||||||
+ this->val = Ok<T>(std::move(t));
|
|
||||||
+ return *this;
|
|
||||||
+ }
|
|
||||||
+ result& operator=(Err<E>&& e) {
|
|
||||||
+ this->val = Err<E>(std::move(e));
|
|
||||||
+ return *this;
|
|
||||||
+ }
|
|
||||||
result& operator=(result&&) noexcept = default;
|
|
||||||
result(result &&) noexcept = default;
|
|
||||||
~result() = default;
|
|
||||||
bool is_ok() const {
|
|
||||||
return std::holds_alternative<Ok<T>>(this->val);
|
|
||||||
};
|
|
||||||
bool is_err() const {
|
|
||||||
return std::holds_alternative<Err<E>>(this->val);
|
|
||||||
@@ -142,17 +150,17 @@ template<class T> using span = std::span
|
|
||||||
// C++-17-compatible std::span
|
|
||||||
template<class T>
|
|
||||||
class span {
|
|
||||||
|
|
||||||
public:
|
|
||||||
constexpr span(T* data, size_t size)
|
|
||||||
: data_(data), size_(size) {}
|
|
||||||
template<size_t N>
|
|
||||||
- constexpr span(std::array<typename std::remove_const<T>::type, N>& arr)
|
|
||||||
+ explicit constexpr span(std::array<typename std::remove_const<T>::type, N>& arr)
|
|
||||||
: data_(const_cast<T*>(arr.data())), size_(N) {}
|
|
||||||
constexpr T* data() const noexcept {
|
|
||||||
return this->data_;
|
|
||||||
}
|
|
||||||
constexpr size_t size() const noexcept {
|
|
||||||
return this->size_;
|
|
||||||
}
|
|
||||||
private:
|
|
|
@ -1,11 +1,10 @@
|
||||||
diff --git a/intl/icu_capi/src/data_struct.rs b/intl/icu_capi/src/data_struct.rs
|
diff --git a/intl/icu_capi/src/data_struct.rs b/intl/icu_capi/src/data_struct.rs
|
||||||
index d66e20b117b58..60765cec2419a 100644
|
|
||||||
--- a/intl/icu_capi/src/data_struct.rs
|
--- a/intl/icu_capi/src/data_struct.rs
|
||||||
+++ b/intl/icu_capi/src/data_struct.rs
|
+++ b/intl/icu_capi/src/data_struct.rs
|
||||||
@@ -20,7 +20,7 @@ pub mod ffi {
|
@@ -21,7 +21,7 @@ pub mod ffi {
|
||||||
///
|
///
|
||||||
/// This can be used to construct a StructDataProvider.
|
/// This can be used to construct a StructDataProvider.
|
||||||
#[diplomat::attr(dart, disable)]
|
#[diplomat::attr(*, disable)]
|
||||||
- pub struct ICU4XDataStruct(pub(crate) AnyPayload);
|
- pub struct ICU4XDataStruct(pub(crate) AnyPayload);
|
||||||
+ pub struct ICU4XDataStruct(#[allow(dead_code)] AnyPayload);
|
+ pub struct ICU4XDataStruct(#[allow(dead_code)] AnyPayload);
|
||||||
|
|
|
@ -1,242 +0,0 @@
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XDataProvider.hpp b/intl/icu_capi/cpp/include/ICU4XDataProvider.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XDataProvider.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XDataProvider.hpp
|
|
||||||
@@ -109,17 +109,17 @@ class ICU4XDataProvider {
|
|
||||||
/**
|
|
||||||
* See the [Rust documentation for `new_with_fallbacker`](https://docs.rs/icu_provider_adapters/latest/icu_provider_adapters/fallback/struct.LocaleFallbackProvider.html#method.new_with_fallbacker) for more information.
|
|
||||||
*
|
|
||||||
* Additional information: [1](https://docs.rs/icu_provider_adapters/latest/icu_provider_adapters/fallback/struct.LocaleFallbackProvider.html)
|
|
||||||
*/
|
|
||||||
diplomat::result<std::monostate, ICU4XError> enable_locale_fallback_with(const ICU4XLocaleFallbacker& fallbacker);
|
|
||||||
inline const capi::ICU4XDataProvider* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XDataProvider* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XDataProvider(capi::ICU4XDataProvider* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XDataProvider(capi::ICU4XDataProvider* i) : inner(i) {}
|
|
||||||
ICU4XDataProvider() = default;
|
|
||||||
ICU4XDataProvider(ICU4XDataProvider&&) noexcept = default;
|
|
||||||
ICU4XDataProvider& operator=(ICU4XDataProvider&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XDataProvider, ICU4XDataProviderDeleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
#include "ICU4XLocaleFallbacker.hpp"
|
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XLineBreakIteratorLatin1.hpp b/intl/icu_capi/cpp/include/ICU4XLineBreakIteratorLatin1.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XLineBreakIteratorLatin1.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XLineBreakIteratorLatin1.hpp
|
|
||||||
@@ -33,17 +33,17 @@ class ICU4XLineBreakIteratorLatin1 {
|
|
||||||
* Finds the next breakpoint. Returns -1 if at the end of the string or if the index is
|
|
||||||
* out of range of a 32-bit signed integer.
|
|
||||||
*
|
|
||||||
* See the [Rust documentation for `next`](https://docs.rs/icu/latest/icu/segmenter/struct.LineBreakIterator.html#method.next) for more information.
|
|
||||||
*/
|
|
||||||
int32_t next();
|
|
||||||
inline const capi::ICU4XLineBreakIteratorLatin1* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XLineBreakIteratorLatin1* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XLineBreakIteratorLatin1(capi::ICU4XLineBreakIteratorLatin1* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XLineBreakIteratorLatin1(capi::ICU4XLineBreakIteratorLatin1* i) : inner(i) {}
|
|
||||||
ICU4XLineBreakIteratorLatin1() = default;
|
|
||||||
ICU4XLineBreakIteratorLatin1(ICU4XLineBreakIteratorLatin1&&) noexcept = default;
|
|
||||||
ICU4XLineBreakIteratorLatin1& operator=(ICU4XLineBreakIteratorLatin1&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XLineBreakIteratorLatin1, ICU4XLineBreakIteratorLatin1Deleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XLineBreakIteratorUtf16.hpp b/intl/icu_capi/cpp/include/ICU4XLineBreakIteratorUtf16.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XLineBreakIteratorUtf16.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XLineBreakIteratorUtf16.hpp
|
|
||||||
@@ -33,17 +33,17 @@ class ICU4XLineBreakIteratorUtf16 {
|
|
||||||
* Finds the next breakpoint. Returns -1 if at the end of the string or if the index is
|
|
||||||
* out of range of a 32-bit signed integer.
|
|
||||||
*
|
|
||||||
* See the [Rust documentation for `next`](https://docs.rs/icu/latest/icu/segmenter/struct.LineBreakIterator.html#method.next) for more information.
|
|
||||||
*/
|
|
||||||
int32_t next();
|
|
||||||
inline const capi::ICU4XLineBreakIteratorUtf16* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XLineBreakIteratorUtf16* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XLineBreakIteratorUtf16(capi::ICU4XLineBreakIteratorUtf16* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XLineBreakIteratorUtf16(capi::ICU4XLineBreakIteratorUtf16* i) : inner(i) {}
|
|
||||||
ICU4XLineBreakIteratorUtf16() = default;
|
|
||||||
ICU4XLineBreakIteratorUtf16(ICU4XLineBreakIteratorUtf16&&) noexcept = default;
|
|
||||||
ICU4XLineBreakIteratorUtf16& operator=(ICU4XLineBreakIteratorUtf16&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XLineBreakIteratorUtf16, ICU4XLineBreakIteratorUtf16Deleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XLocale.hpp b/intl/icu_capi/cpp/include/ICU4XLocale.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XLocale.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XLocale.hpp
|
|
||||||
@@ -202,17 +202,17 @@ class ICU4XLocale {
|
|
||||||
/**
|
|
||||||
* Deprecated
|
|
||||||
*
|
|
||||||
* Use `create_from_string("bn").
|
|
||||||
*/
|
|
||||||
static ICU4XLocale create_bn();
|
|
||||||
inline const capi::ICU4XLocale* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XLocale* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XLocale(capi::ICU4XLocale* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XLocale(capi::ICU4XLocale* i) : inner(i) {}
|
|
||||||
ICU4XLocale() = default;
|
|
||||||
ICU4XLocale(ICU4XLocale&&) noexcept = default;
|
|
||||||
ICU4XLocale& operator=(ICU4XLocale&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XLocale, ICU4XLocaleDeleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XLocaleFallbackIterator.hpp b/intl/icu_capi/cpp/include/ICU4XLocaleFallbackIterator.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XLocaleFallbackIterator.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XLocaleFallbackIterator.hpp
|
|
||||||
@@ -40,17 +40,17 @@ class ICU4XLocaleFallbackIterator {
|
|
||||||
/**
|
|
||||||
* Performs one step of the fallback algorithm, mutating the locale.
|
|
||||||
*
|
|
||||||
* See the [Rust documentation for `step`](https://docs.rs/icu/latest/icu/locid_transform/fallback/struct.LocaleFallbackIterator.html#method.step) for more information.
|
|
||||||
*/
|
|
||||||
void step();
|
|
||||||
inline const capi::ICU4XLocaleFallbackIterator* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XLocaleFallbackIterator* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XLocaleFallbackIterator(capi::ICU4XLocaleFallbackIterator* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XLocaleFallbackIterator(capi::ICU4XLocaleFallbackIterator* i) : inner(i) {}
|
|
||||||
ICU4XLocaleFallbackIterator() = default;
|
|
||||||
ICU4XLocaleFallbackIterator(ICU4XLocaleFallbackIterator&&) noexcept = default;
|
|
||||||
ICU4XLocaleFallbackIterator& operator=(ICU4XLocaleFallbackIterator&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XLocaleFallbackIterator, ICU4XLocaleFallbackIteratorDeleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
#include "ICU4XLocale.hpp"
|
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XLocaleFallbacker.hpp b/intl/icu_capi/cpp/include/ICU4XLocaleFallbacker.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XLocaleFallbacker.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XLocaleFallbacker.hpp
|
|
||||||
@@ -53,17 +53,17 @@ class ICU4XLocaleFallbacker {
|
|
||||||
*
|
|
||||||
* See the [Rust documentation for `for_config`](https://docs.rs/icu/latest/icu/locid_transform/fallback/struct.LocaleFallbacker.html#method.for_config) for more information.
|
|
||||||
*
|
|
||||||
* Lifetimes: `this` must live at least as long as the output.
|
|
||||||
*/
|
|
||||||
diplomat::result<ICU4XLocaleFallbackerWithConfig, ICU4XError> for_config(ICU4XLocaleFallbackConfig config) const;
|
|
||||||
inline const capi::ICU4XLocaleFallbacker* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XLocaleFallbacker* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XLocaleFallbacker(capi::ICU4XLocaleFallbacker* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XLocaleFallbacker(capi::ICU4XLocaleFallbacker* i) : inner(i) {}
|
|
||||||
ICU4XLocaleFallbacker() = default;
|
|
||||||
ICU4XLocaleFallbacker(ICU4XLocaleFallbacker&&) noexcept = default;
|
|
||||||
ICU4XLocaleFallbacker& operator=(ICU4XLocaleFallbacker&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XLocaleFallbacker, ICU4XLocaleFallbackerDeleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
#include "ICU4XDataProvider.hpp"
|
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XLocaleFallbackerWithConfig.hpp b/intl/icu_capi/cpp/include/ICU4XLocaleFallbackerWithConfig.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XLocaleFallbackerWithConfig.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XLocaleFallbackerWithConfig.hpp
|
|
||||||
@@ -38,17 +38,17 @@ class ICU4XLocaleFallbackerWithConfig {
|
|
||||||
*
|
|
||||||
* See the [Rust documentation for `fallback_for`](https://docs.rs/icu/latest/icu/locid_transform/fallback/struct.LocaleFallbacker.html#method.fallback_for) for more information.
|
|
||||||
*
|
|
||||||
* Lifetimes: `this` must live at least as long as the output.
|
|
||||||
*/
|
|
||||||
ICU4XLocaleFallbackIterator fallback_for_locale(const ICU4XLocale& locale) const;
|
|
||||||
inline const capi::ICU4XLocaleFallbackerWithConfig* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XLocaleFallbackerWithConfig* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XLocaleFallbackerWithConfig(capi::ICU4XLocaleFallbackerWithConfig* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XLocaleFallbackerWithConfig(capi::ICU4XLocaleFallbackerWithConfig* i) : inner(i) {}
|
|
||||||
ICU4XLocaleFallbackerWithConfig() = default;
|
|
||||||
ICU4XLocaleFallbackerWithConfig(ICU4XLocaleFallbackerWithConfig&&) noexcept = default;
|
|
||||||
ICU4XLocaleFallbackerWithConfig& operator=(ICU4XLocaleFallbackerWithConfig&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XLocaleFallbackerWithConfig, ICU4XLocaleFallbackerWithConfigDeleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
#include "ICU4XLocale.hpp"
|
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorLatin1.hpp b/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorLatin1.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorLatin1.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorLatin1.hpp
|
|
||||||
@@ -46,17 +46,17 @@ class ICU4XWordBreakIteratorLatin1 {
|
|
||||||
/**
|
|
||||||
* Return true when break boundary is word-like such as letter/number/CJK
|
|
||||||
*
|
|
||||||
* See the [Rust documentation for `is_word_like`](https://docs.rs/icu/latest/icu/segmenter/struct.WordBreakIterator.html#method.is_word_like) for more information.
|
|
||||||
*/
|
|
||||||
bool is_word_like() const;
|
|
||||||
inline const capi::ICU4XWordBreakIteratorLatin1* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XWordBreakIteratorLatin1* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XWordBreakIteratorLatin1(capi::ICU4XWordBreakIteratorLatin1* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XWordBreakIteratorLatin1(capi::ICU4XWordBreakIteratorLatin1* i) : inner(i) {}
|
|
||||||
ICU4XWordBreakIteratorLatin1() = default;
|
|
||||||
ICU4XWordBreakIteratorLatin1(ICU4XWordBreakIteratorLatin1&&) noexcept = default;
|
|
||||||
ICU4XWordBreakIteratorLatin1& operator=(ICU4XWordBreakIteratorLatin1&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XWordBreakIteratorLatin1, ICU4XWordBreakIteratorLatin1Deleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorUtf16.hpp b/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorUtf16.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorUtf16.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorUtf16.hpp
|
|
||||||
@@ -46,17 +46,17 @@ class ICU4XWordBreakIteratorUtf16 {
|
|
||||||
/**
|
|
||||||
* Return true when break boundary is word-like such as letter/number/CJK
|
|
||||||
*
|
|
||||||
* See the [Rust documentation for `is_word_like`](https://docs.rs/icu/latest/icu/segmenter/struct.WordBreakIterator.html#method.is_word_like) for more information.
|
|
||||||
*/
|
|
||||||
bool is_word_like() const;
|
|
||||||
inline const capi::ICU4XWordBreakIteratorUtf16* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XWordBreakIteratorUtf16* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XWordBreakIteratorUtf16(capi::ICU4XWordBreakIteratorUtf16* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XWordBreakIteratorUtf16(capi::ICU4XWordBreakIteratorUtf16* i) : inner(i) {}
|
|
||||||
ICU4XWordBreakIteratorUtf16() = default;
|
|
||||||
ICU4XWordBreakIteratorUtf16(ICU4XWordBreakIteratorUtf16&&) noexcept = default;
|
|
||||||
ICU4XWordBreakIteratorUtf16& operator=(ICU4XWordBreakIteratorUtf16&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XWordBreakIteratorUtf16, ICU4XWordBreakIteratorUtf16Deleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorUtf8.hpp b/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorUtf8.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorUtf8.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XWordBreakIteratorUtf8.hpp
|
|
||||||
@@ -46,17 +46,17 @@ class ICU4XWordBreakIteratorUtf8 {
|
|
||||||
/**
|
|
||||||
* Return true when break boundary is word-like such as letter/number/CJK
|
|
||||||
*
|
|
||||||
* See the [Rust documentation for `is_word_like`](https://docs.rs/icu/latest/icu/segmenter/struct.WordBreakIterator.html#method.is_word_like) for more information.
|
|
||||||
*/
|
|
||||||
bool is_word_like() const;
|
|
||||||
inline const capi::ICU4XWordBreakIteratorUtf8* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XWordBreakIteratorUtf8* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XWordBreakIteratorUtf8(capi::ICU4XWordBreakIteratorUtf8* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XWordBreakIteratorUtf8(capi::ICU4XWordBreakIteratorUtf8* i) : inner(i) {}
|
|
||||||
ICU4XWordBreakIteratorUtf8() = default;
|
|
||||||
ICU4XWordBreakIteratorUtf8(ICU4XWordBreakIteratorUtf8&&) noexcept = default;
|
|
||||||
ICU4XWordBreakIteratorUtf8& operator=(ICU4XWordBreakIteratorUtf8&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XWordBreakIteratorUtf8, ICU4XWordBreakIteratorUtf8Deleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/intl/icu_capi/cpp/include/ICU4XWordSegmenter.hpp b/intl/icu_capi/cpp/include/ICU4XWordSegmenter.hpp
|
|
||||||
--- a/intl/icu_capi/cpp/include/ICU4XWordSegmenter.hpp
|
|
||||||
+++ b/intl/icu_capi/cpp/include/ICU4XWordSegmenter.hpp
|
|
||||||
@@ -88,17 +88,17 @@ class ICU4XWordSegmenter {
|
|
||||||
*
|
|
||||||
* See the [Rust documentation for `segment_latin1`](https://docs.rs/icu/latest/icu/segmenter/struct.WordSegmenter.html#method.segment_latin1) for more information.
|
|
||||||
*
|
|
||||||
* Lifetimes: `this`, `input` must live at least as long as the output.
|
|
||||||
*/
|
|
||||||
ICU4XWordBreakIteratorLatin1 segment_latin1(const diplomat::span<const uint8_t> input) const;
|
|
||||||
inline const capi::ICU4XWordSegmenter* AsFFI() const { return this->inner.get(); }
|
|
||||||
inline capi::ICU4XWordSegmenter* AsFFIMut() { return this->inner.get(); }
|
|
||||||
- inline ICU4XWordSegmenter(capi::ICU4XWordSegmenter* i) : inner(i) {}
|
|
||||||
+ inline explicit ICU4XWordSegmenter(capi::ICU4XWordSegmenter* i) : inner(i) {}
|
|
||||||
ICU4XWordSegmenter() = default;
|
|
||||||
ICU4XWordSegmenter(ICU4XWordSegmenter&&) noexcept = default;
|
|
||||||
ICU4XWordSegmenter& operator=(ICU4XWordSegmenter&& other) noexcept = default;
|
|
||||||
private:
|
|
||||||
std::unique_ptr<capi::ICU4XWordSegmenter, ICU4XWordSegmenterDeleter> inner;
|
|
||||||
};
|
|
||||||
|
|
||||||
#include "ICU4XDataProvider.hpp"
|
|
6
intl/icu_capi/.cargo_vcs_info.json
Normal file
6
intl/icu_capi/.cargo_vcs_info.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"git": {
|
||||||
|
"sha1": "c5703c8d9f2544ecccc6495d5e57287a894e9d9d"
|
||||||
|
},
|
||||||
|
"path_in_vcs": "ffi/capi"
|
||||||
|
}
|
|
@ -13,12 +13,11 @@
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
rust-version = "1.67"
|
rust-version = "1.67"
|
||||||
name = "icu_capi"
|
name = "icu_capi"
|
||||||
version = "1.4.0"
|
version = "1.5.0"
|
||||||
authors = ["The ICU4X Project Developers"]
|
authors = ["The ICU4X Project Developers"]
|
||||||
include = [
|
include = [
|
||||||
"js/**/*",
|
"bindings/**/*",
|
||||||
"c/**/*",
|
"!bindings/dart/**/*",
|
||||||
"cpp/**/*",
|
|
||||||
"src/**/*",
|
"src/**/*",
|
||||||
"tests/**/*",
|
"tests/**/*",
|
||||||
"Cargo.toml",
|
"Cargo.toml",
|
||||||
|
@ -29,7 +28,7 @@ description = "C interface to ICU4X"
|
||||||
homepage = "https://icu4x.unicode.org"
|
homepage = "https://icu4x.unicode.org"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
categories = ["internationalization"]
|
categories = ["internationalization"]
|
||||||
license-file = "LICENSE"
|
license = "Unicode-3.0"
|
||||||
repository = "https://github.com/unicode-org/icu4x"
|
repository = "https://github.com/unicode-org/icu4x"
|
||||||
|
|
||||||
[package.metadata.cargo-all-features]
|
[package.metadata.cargo-all-features]
|
||||||
|
@ -45,126 +44,127 @@ max_combination_size = 2
|
||||||
all-features = true
|
all-features = true
|
||||||
|
|
||||||
[dependencies.diplomat]
|
[dependencies.diplomat]
|
||||||
version = "0.7"
|
version = "0.8"
|
||||||
|
|
||||||
[dependencies.diplomat-runtime]
|
[dependencies.diplomat-runtime]
|
||||||
version = "0.7"
|
version = "0.8"
|
||||||
|
|
||||||
[dependencies.fixed_decimal]
|
[dependencies.fixed_decimal]
|
||||||
version = "0.5.5"
|
version = "0.5.6"
|
||||||
features = ["ryu"]
|
features = ["ryu"]
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_calendar]
|
[dependencies.icu_calendar]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_casemap]
|
[dependencies.icu_casemap]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_collator]
|
[dependencies.icu_collator]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_collections]
|
[dependencies.icu_collections]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_datetime]
|
[dependencies.icu_datetime]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_decimal]
|
[dependencies.icu_decimal]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_displaynames]
|
[dependencies.icu_experimental]
|
||||||
version = "0.11.2"
|
version = "~0.1.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_list]
|
[dependencies.icu_list]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_locid]
|
[dependencies.icu_locid]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_locid_transform]
|
[dependencies.icu_locid_transform]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_normalizer]
|
[dependencies.icu_normalizer]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_plurals]
|
[dependencies.icu_plurals]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_properties]
|
[dependencies.icu_properties]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
features = ["bidi"]
|
features = ["bidi"]
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_provider]
|
[dependencies.icu_provider]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_provider_adapters]
|
[dependencies.icu_provider_adapters]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_provider_blob]
|
[dependencies.icu_provider_blob]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_segmenter]
|
[dependencies.icu_segmenter]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
features = ["auto"]
|
features = ["auto"]
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.icu_timezone]
|
[dependencies.icu_timezone]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.log]
|
[dependencies.log]
|
||||||
version = "0.4"
|
version = "0.4.17"
|
||||||
optional = true
|
optional = true
|
||||||
|
default-features = false
|
||||||
|
|
||||||
[dependencies.serde]
|
[dependencies.serde]
|
||||||
version = "1.0"
|
version = "1.0.110"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.tinystr]
|
[dependencies.tinystr]
|
||||||
version = "0.7.4"
|
version = "0.7.5"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.unicode-bidi]
|
[dependencies.unicode-bidi]
|
||||||
version = "0.3.13"
|
version = "0.3.11"
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.writeable]
|
[dependencies.writeable]
|
||||||
version = "0.5.4"
|
version = "0.5.5"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
@ -177,7 +177,6 @@ buffer_provider = [
|
||||||
"icu_collator?/serde",
|
"icu_collator?/serde",
|
||||||
"icu_datetime?/serde",
|
"icu_datetime?/serde",
|
||||||
"icu_decimal?/serde",
|
"icu_decimal?/serde",
|
||||||
"icu_displaynames?/serde",
|
|
||||||
"icu_list?/serde",
|
"icu_list?/serde",
|
||||||
"icu_locid_transform?/serde",
|
"icu_locid_transform?/serde",
|
||||||
"icu_locid/serde",
|
"icu_locid/serde",
|
||||||
|
@ -188,8 +187,10 @@ buffer_provider = [
|
||||||
"icu_provider_adapters/serde",
|
"icu_provider_adapters/serde",
|
||||||
"icu_segmenter?/serde",
|
"icu_segmenter?/serde",
|
||||||
"icu_timezone?/serde",
|
"icu_timezone?/serde",
|
||||||
|
"icu_experimental?/serde",
|
||||||
]
|
]
|
||||||
compiled_data = [
|
compiled_data = [
|
||||||
|
"icu_properties?/compiled_data",
|
||||||
"icu_segmenter?/compiled_data",
|
"icu_segmenter?/compiled_data",
|
||||||
]
|
]
|
||||||
cpp_default = ["logging"]
|
cpp_default = ["logging"]
|
||||||
|
@ -198,6 +199,7 @@ default = [
|
||||||
"default_components",
|
"default_components",
|
||||||
"logging",
|
"logging",
|
||||||
"simple_logger",
|
"simple_logger",
|
||||||
|
"std",
|
||||||
]
|
]
|
||||||
default_components = [
|
default_components = [
|
||||||
"icu_calendar",
|
"icu_calendar",
|
||||||
|
@ -213,6 +215,7 @@ default_components = [
|
||||||
"icu_segmenter",
|
"icu_segmenter",
|
||||||
"icu_timezone",
|
"icu_timezone",
|
||||||
]
|
]
|
||||||
|
experimental_components = ["dep:icu_experimental"]
|
||||||
icu_calendar = ["dep:icu_calendar"]
|
icu_calendar = ["dep:icu_calendar"]
|
||||||
icu_casemap = ["dep:icu_casemap"]
|
icu_casemap = ["dep:icu_casemap"]
|
||||||
icu_collator = ["dep:icu_collator"]
|
icu_collator = ["dep:icu_collator"]
|
||||||
|
@ -227,7 +230,6 @@ icu_decimal = [
|
||||||
"dep:icu_decimal",
|
"dep:icu_decimal",
|
||||||
"dep:fixed_decimal",
|
"dep:fixed_decimal",
|
||||||
]
|
]
|
||||||
icu_displaynames = ["dep:icu_displaynames"]
|
|
||||||
icu_list = ["dep:icu_list"]
|
icu_list = ["dep:icu_list"]
|
||||||
icu_locid_transform = ["dep:icu_locid_transform"]
|
icu_locid_transform = ["dep:icu_locid_transform"]
|
||||||
icu_normalizer = ["dep:icu_normalizer"]
|
icu_normalizer = ["dep:icu_normalizer"]
|
||||||
|
@ -245,27 +247,38 @@ icu_timezone = [
|
||||||
"dep:icu_timezone",
|
"dep:icu_timezone",
|
||||||
"dep:icu_calendar",
|
"dep:icu_calendar",
|
||||||
]
|
]
|
||||||
|
libc_alloc = ["dep:libc_alloc"]
|
||||||
logging = [
|
logging = [
|
||||||
"icu_provider/logging",
|
"icu_provider/logging",
|
||||||
"dep:log",
|
"dep:log",
|
||||||
"diplomat-runtime/log",
|
"diplomat-runtime/log",
|
||||||
|
"std",
|
||||||
]
|
]
|
||||||
|
looping_panic_handler = []
|
||||||
provider_fs = [
|
provider_fs = [
|
||||||
"dep:icu_provider_fs",
|
"dep:icu_provider_fs",
|
||||||
"buffer_provider",
|
"buffer_provider",
|
||||||
|
"std",
|
||||||
]
|
]
|
||||||
provider_test = ["compiled_data"]
|
provider_test = ["compiled_data"]
|
||||||
simple_logger = [
|
simple_logger = [
|
||||||
"dep:simple_logger",
|
"dep:simple_logger",
|
||||||
"logging",
|
"logging",
|
||||||
]
|
]
|
||||||
|
std = []
|
||||||
wasm_default = ["logging"]
|
wasm_default = ["logging"]
|
||||||
|
|
||||||
[target."cfg(not(any(target_arch = \"wasm32\", target_os = \"none\")))".dependencies.icu_provider_fs]
|
[target."cfg(not(any(target_arch = \"wasm32\", target_os = \"none\")))".dependencies.icu_provider_fs]
|
||||||
version = "~1.4.0"
|
version = "~1.5.0"
|
||||||
|
optional = true
|
||||||
|
default-features = false
|
||||||
|
|
||||||
|
[target."cfg(not(any(target_arch = \"wasm32\", target_os = \"none\")))".dependencies.libc_alloc]
|
||||||
|
version = "1.0.6"
|
||||||
|
features = ["global"]
|
||||||
optional = true
|
optional = true
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[target."cfg(not(target_arch = \"wasm32\"))".dependencies.simple_logger]
|
[target."cfg(not(target_arch = \"wasm32\"))".dependencies.simple_logger]
|
||||||
version = "4.1.0"
|
version = "4.0.0"
|
||||||
optional = true
|
optional = true
|
||||||
|
|
|
@ -2,7 +2,7 @@ UNICODE LICENSE V3
|
||||||
|
|
||||||
COPYRIGHT AND PERMISSION NOTICE
|
COPYRIGHT AND PERMISSION NOTICE
|
||||||
|
|
||||||
Copyright © 2020-2023 Unicode, Inc.
|
Copyright © 2020-2024 Unicode, Inc.
|
||||||
|
|
||||||
NOTICE TO USER: Carefully read the following legal agreement. BY
|
NOTICE TO USER: Carefully read the following legal agreement. BY
|
||||||
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
|
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
|
||||||
|
@ -38,6 +38,8 @@ not be used in advertising or otherwise to promote the sale, use or other
|
||||||
dealings in these Data Files or Software without prior written
|
dealings in these Data Files or Software without prior written
|
||||||
authorization of the copyright holder.
|
authorization of the copyright holder.
|
||||||
|
|
||||||
|
SPDX-License-Identifier: Unicode-3.0
|
||||||
|
|
||||||
—
|
—
|
||||||
|
|
||||||
Portions of ICU4X may have been adapted from ICU4C and/or ICU4J.
|
Portions of ICU4X may have been adapted from ICU4C and/or ICU4J.
|
||||||
|
|
|
@ -11,17 +11,17 @@ and as such this crate may unpredictably change its Rust API across compatible s
|
||||||
by this crate, while not directly documented, are stable within the same major semver version, as are the bindings exposed under
|
by this crate, while not directly documented, are stable within the same major semver version, as are the bindings exposed under
|
||||||
the `cpp/` and `js/` folders.
|
the `cpp/` and `js/` folders.
|
||||||
|
|
||||||
This crate may still be explored for documentation on docs.rs, and there are generated language-specific docs available as well.
|
This crate may still be explored for documentation on docs.rs, and there are language-specific docs available as well.
|
||||||
C++ has sphinx docs in `cpp/docs/`, and the header files also contain documentation comments. The JS version has sphinx docs under
|
C++, Dart, and TypeScript headers contain inline documentation, which is available pre-rendered: [C++], [TypeScript].
|
||||||
`js/docs`, and the TypeScript sources in `js/include` are compatible with `tsdoc`.
|
|
||||||
|
|
||||||
This crate is `no_std` and will not typically build as a staticlib on its own. If you wish to link to it you should prefer
|
This crate is `no_std`-compatible. If you wish to use it in `no_std` mode, you must write a wrapper crate that defines an allocator
|
||||||
using `icu_capi_staticlib`, or for more esoteric platforms you may write a shim crate depending on this crate that hooks in
|
and a panic hook in order to compile as a C library.
|
||||||
an allocator and panic hook.
|
|
||||||
|
|
||||||
More information on using ICU4X from C++ can be found in [our tutorial].
|
More information on using ICU4X from C++ can be found in [our tutorial].
|
||||||
|
|
||||||
[our tutorial]: https://github.com/unicode-org/icu4x/blob/main/docs/tutorials/cpp.md
|
[our tutorial]: https://github.com/unicode-org/icu4x/blob/main/tutorials/cpp.md
|
||||||
|
[TypeScript]: https://unicode-org.github.io/icu4x/tsdoc
|
||||||
|
[C++]: https://unicode-org.github.io/icu4x/cppdoc
|
||||||
|
|
||||||
<!-- cargo-rdme end -->
|
<!-- cargo-rdme end -->
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,8 @@ diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_loa
|
||||||
|
|
||||||
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_east_asian_width(const ICU4XDataProvider* provider);
|
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_east_asian_width(const ICU4XDataProvider* provider);
|
||||||
|
|
||||||
|
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_hangul_syllable_type(const ICU4XDataProvider* provider);
|
||||||
|
|
||||||
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_indic_syllabic_category(const ICU4XDataProvider* provider);
|
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_indic_syllabic_category(const ICU4XDataProvider* provider);
|
||||||
|
|
||||||
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_line_break(const ICU4XDataProvider* provider);
|
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_line_break(const ICU4XDataProvider* provider);
|
||||||
|
@ -52,6 +54,8 @@ diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_try
|
||||||
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_word_break(const ICU4XDataProvider* provider);
|
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_word_break(const ICU4XDataProvider* provider);
|
||||||
|
|
||||||
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_sentence_break(const ICU4XDataProvider* provider);
|
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_sentence_break(const ICU4XDataProvider* provider);
|
||||||
|
|
||||||
|
diplomat_result_box_ICU4XCodePointMapData8_ICU4XError ICU4XCodePointMapData8_load_joining_type(const ICU4XDataProvider* provider);
|
||||||
void ICU4XCodePointMapData8_destroy(ICU4XCodePointMapData8* self);
|
void ICU4XCodePointMapData8_destroy(ICU4XCodePointMapData8* self);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
|
@ -19,6 +19,7 @@ typedef struct ICU4XCollator ICU4XCollator;
|
||||||
#include "ICU4XCollatorOptionsV1.h"
|
#include "ICU4XCollatorOptionsV1.h"
|
||||||
#include "diplomat_result_box_ICU4XCollator_ICU4XError.h"
|
#include "diplomat_result_box_ICU4XCollator_ICU4XError.h"
|
||||||
#include "ICU4XOrdering.h"
|
#include "ICU4XOrdering.h"
|
||||||
|
#include "ICU4XCollatorResolvedOptionsV1.h"
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
namespace capi {
|
namespace capi {
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -30,7 +31,9 @@ ICU4XOrdering ICU4XCollator_compare(const ICU4XCollator* self, const char* left_
|
||||||
|
|
||||||
ICU4XOrdering ICU4XCollator_compare_valid_utf8(const ICU4XCollator* self, const char* left_data, size_t left_len, const char* right_data, size_t right_len);
|
ICU4XOrdering ICU4XCollator_compare_valid_utf8(const ICU4XCollator* self, const char* left_data, size_t left_len, const char* right_data, size_t right_len);
|
||||||
|
|
||||||
ICU4XOrdering ICU4XCollator_compare_utf16(const ICU4XCollator* self, const uint16_t* left_data, size_t left_len, const uint16_t* right_data, size_t right_len);
|
ICU4XOrdering ICU4XCollator_compare_utf16(const ICU4XCollator* self, const char16_t* left_data, size_t left_len, const char16_t* right_data, size_t right_len);
|
||||||
|
|
||||||
|
ICU4XCollatorResolvedOptionsV1 ICU4XCollator_resolved_options(const ICU4XCollator* self);
|
||||||
void ICU4XCollator_destroy(ICU4XCollator* self);
|
void ICU4XCollator_destroy(ICU4XCollator* self);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
50
intl/icu_capi/bindings/c/ICU4XCollatorResolvedOptionsV1.h
Normal file
50
intl/icu_capi/bindings/c/ICU4XCollatorResolvedOptionsV1.h
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
#ifndef ICU4XCollatorResolvedOptionsV1_H
|
||||||
|
#define ICU4XCollatorResolvedOptionsV1_H
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "diplomat_runtime.h"
|
||||||
|
|
||||||
|
#include "ICU4XCollatorStrength.h"
|
||||||
|
#include "ICU4XCollatorAlternateHandling.h"
|
||||||
|
#include "ICU4XCollatorCaseFirst.h"
|
||||||
|
#include "ICU4XCollatorMaxVariable.h"
|
||||||
|
#include "ICU4XCollatorCaseLevel.h"
|
||||||
|
#include "ICU4XCollatorNumeric.h"
|
||||||
|
#include "ICU4XCollatorBackwardSecondLevel.h"
|
||||||
|
#ifdef __cplusplus
|
||||||
|
namespace capi {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct ICU4XCollatorResolvedOptionsV1 {
|
||||||
|
ICU4XCollatorStrength strength;
|
||||||
|
ICU4XCollatorAlternateHandling alternate_handling;
|
||||||
|
ICU4XCollatorCaseFirst case_first;
|
||||||
|
ICU4XCollatorMaxVariable max_variable;
|
||||||
|
ICU4XCollatorCaseLevel case_level;
|
||||||
|
ICU4XCollatorNumeric numeric;
|
||||||
|
ICU4XCollatorBackwardSecondLevel backward_second_level;
|
||||||
|
} ICU4XCollatorResolvedOptionsV1;
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // namespace capi
|
||||||
|
#endif
|
||||||
|
#include "ICU4XCollatorStrength.h"
|
||||||
|
#include "ICU4XCollatorAlternateHandling.h"
|
||||||
|
#include "ICU4XCollatorCaseFirst.h"
|
||||||
|
#include "ICU4XCollatorMaxVariable.h"
|
||||||
|
#include "ICU4XCollatorCaseLevel.h"
|
||||||
|
#include "ICU4XCollatorNumeric.h"
|
||||||
|
#include "ICU4XCollatorBackwardSecondLevel.h"
|
||||||
|
#ifdef __cplusplus
|
||||||
|
namespace capi {
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void ICU4XCollatorResolvedOptionsV1_destroy(ICU4XCollatorResolvedOptionsV1* self);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // extern "C"
|
||||||
|
} // namespace capi
|
||||||
|
#endif
|
||||||
|
#endif
|
|
@ -19,6 +19,7 @@ typedef struct ICU4XCustomTimeZone ICU4XCustomTimeZone;
|
||||||
#include "diplomat_result_int32_t_ICU4XError.h"
|
#include "diplomat_result_int32_t_ICU4XError.h"
|
||||||
#include "diplomat_result_bool_ICU4XError.h"
|
#include "diplomat_result_bool_ICU4XError.h"
|
||||||
#include "ICU4XIanaToBcp47Mapper.h"
|
#include "ICU4XIanaToBcp47Mapper.h"
|
||||||
|
#include "ICU4XTimeZoneIdMapper.h"
|
||||||
#include "ICU4XMetazoneCalculator.h"
|
#include "ICU4XMetazoneCalculator.h"
|
||||||
#include "ICU4XIsoDateTime.h"
|
#include "ICU4XIsoDateTime.h"
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -50,6 +51,8 @@ diplomat_result_void_ICU4XError ICU4XCustomTimeZone_try_set_time_zone_id(ICU4XCu
|
||||||
|
|
||||||
diplomat_result_void_ICU4XError ICU4XCustomTimeZone_try_set_iana_time_zone_id(ICU4XCustomTimeZone* self, const ICU4XIanaToBcp47Mapper* mapper, const char* id_data, size_t id_len);
|
diplomat_result_void_ICU4XError ICU4XCustomTimeZone_try_set_iana_time_zone_id(ICU4XCustomTimeZone* self, const ICU4XIanaToBcp47Mapper* mapper, const char* id_data, size_t id_len);
|
||||||
|
|
||||||
|
diplomat_result_void_ICU4XError ICU4XCustomTimeZone_try_set_iana_time_zone_id_2(ICU4XCustomTimeZone* self, const ICU4XTimeZoneIdMapper* mapper, const char* id_data, size_t id_len);
|
||||||
|
|
||||||
void ICU4XCustomTimeZone_clear_time_zone_id(ICU4XCustomTimeZone* self);
|
void ICU4XCustomTimeZone_clear_time_zone_id(ICU4XCustomTimeZone* self);
|
||||||
|
|
||||||
diplomat_result_void_ICU4XError ICU4XCustomTimeZone_time_zone_id(const ICU4XCustomTimeZone* self, DiplomatWriteable* write);
|
diplomat_result_void_ICU4XError ICU4XCustomTimeZone_time_zone_id(const ICU4XCustomTimeZone* self, DiplomatWriteable* write);
|
|
@ -34,6 +34,8 @@ ICU4XDate* ICU4XDate_to_calendar(const ICU4XDate* self, const ICU4XCalendar* cal
|
||||||
|
|
||||||
ICU4XIsoDate* ICU4XDate_to_iso(const ICU4XDate* self);
|
ICU4XIsoDate* ICU4XDate_to_iso(const ICU4XDate* self);
|
||||||
|
|
||||||
|
uint16_t ICU4XDate_day_of_year(const ICU4XDate* self);
|
||||||
|
|
||||||
uint32_t ICU4XDate_day_of_month(const ICU4XDate* self);
|
uint32_t ICU4XDate_day_of_month(const ICU4XDate* self);
|
||||||
|
|
||||||
ICU4XIsoWeekday ICU4XDate_day_of_week(const ICU4XDate* self);
|
ICU4XIsoWeekday ICU4XDate_day_of_week(const ICU4XDate* self);
|
|
@ -50,6 +50,8 @@ uint8_t ICU4XDateTime_second(const ICU4XDateTime* self);
|
||||||
|
|
||||||
uint32_t ICU4XDateTime_nanosecond(const ICU4XDateTime* self);
|
uint32_t ICU4XDateTime_nanosecond(const ICU4XDateTime* self);
|
||||||
|
|
||||||
|
uint16_t ICU4XDateTime_day_of_year(const ICU4XDateTime* self);
|
||||||
|
|
||||||
uint32_t ICU4XDateTime_day_of_month(const ICU4XDateTime* self);
|
uint32_t ICU4XDateTime_day_of_month(const ICU4XDateTime* self);
|
||||||
|
|
||||||
ICU4XIsoWeekday ICU4XDateTime_day_of_week(const ICU4XDateTime* self);
|
ICU4XIsoWeekday ICU4XDateTime_day_of_week(const ICU4XDateTime* self);
|
|
@ -14,6 +14,7 @@ typedef enum ICU4XError {
|
||||||
ICU4XError_UnknownError = 0,
|
ICU4XError_UnknownError = 0,
|
||||||
ICU4XError_WriteableError = 1,
|
ICU4XError_WriteableError = 1,
|
||||||
ICU4XError_OutOfBoundsError = 2,
|
ICU4XError_OutOfBoundsError = 2,
|
||||||
|
ICU4XError_Utf8Error = 3,
|
||||||
ICU4XError_DataMissingDataKeyError = 256,
|
ICU4XError_DataMissingDataKeyError = 256,
|
||||||
ICU4XError_DataMissingVariantError = 257,
|
ICU4XError_DataMissingVariantError = 257,
|
||||||
ICU4XError_DataMissingLocaleError = 258,
|
ICU4XError_DataMissingLocaleError = 258,
|
||||||
|
@ -66,6 +67,7 @@ typedef enum ICU4XError {
|
||||||
ICU4XError_TimeZoneInvalidIdError = 2563,
|
ICU4XError_TimeZoneInvalidIdError = 2563,
|
||||||
ICU4XError_NormalizerFutureExtensionError = 2816,
|
ICU4XError_NormalizerFutureExtensionError = 2816,
|
||||||
ICU4XError_NormalizerValidationError = 2817,
|
ICU4XError_NormalizerValidationError = 2817,
|
||||||
|
ICU4XError_InvalidCldrUnitIdentifierError = 3072,
|
||||||
} ICU4XError;
|
} ICU4XError;
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // namespace capi
|
} // namespace capi
|
|
@ -17,6 +17,7 @@ typedef struct ICU4XFixedDecimal ICU4XFixedDecimal;
|
||||||
#include "diplomat_result_box_ICU4XFixedDecimal_ICU4XError.h"
|
#include "diplomat_result_box_ICU4XFixedDecimal_ICU4XError.h"
|
||||||
#include "ICU4XFixedDecimalSign.h"
|
#include "ICU4XFixedDecimalSign.h"
|
||||||
#include "ICU4XFixedDecimalSignDisplay.h"
|
#include "ICU4XFixedDecimalSignDisplay.h"
|
||||||
|
#include "ICU4XRoundingIncrement.h"
|
||||||
#include "diplomat_result_void_void.h"
|
#include "diplomat_result_void_void.h"
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
namespace capi {
|
namespace capi {
|
||||||
|
@ -73,22 +74,40 @@ void ICU4XFixedDecimal_set_max_position(ICU4XFixedDecimal* self, int16_t positio
|
||||||
|
|
||||||
void ICU4XFixedDecimal_trunc(ICU4XFixedDecimal* self, int16_t position);
|
void ICU4XFixedDecimal_trunc(ICU4XFixedDecimal* self, int16_t position);
|
||||||
|
|
||||||
|
void ICU4XFixedDecimal_trunc_to_increment(ICU4XFixedDecimal* self, int16_t position, ICU4XRoundingIncrement increment);
|
||||||
|
|
||||||
void ICU4XFixedDecimal_half_trunc(ICU4XFixedDecimal* self, int16_t position);
|
void ICU4XFixedDecimal_half_trunc(ICU4XFixedDecimal* self, int16_t position);
|
||||||
|
|
||||||
|
void ICU4XFixedDecimal_half_trunc_to_increment(ICU4XFixedDecimal* self, int16_t position, ICU4XRoundingIncrement increment);
|
||||||
|
|
||||||
void ICU4XFixedDecimal_expand(ICU4XFixedDecimal* self, int16_t position);
|
void ICU4XFixedDecimal_expand(ICU4XFixedDecimal* self, int16_t position);
|
||||||
|
|
||||||
|
void ICU4XFixedDecimal_expand_to_increment(ICU4XFixedDecimal* self, int16_t position, ICU4XRoundingIncrement increment);
|
||||||
|
|
||||||
void ICU4XFixedDecimal_half_expand(ICU4XFixedDecimal* self, int16_t position);
|
void ICU4XFixedDecimal_half_expand(ICU4XFixedDecimal* self, int16_t position);
|
||||||
|
|
||||||
|
void ICU4XFixedDecimal_half_expand_to_increment(ICU4XFixedDecimal* self, int16_t position, ICU4XRoundingIncrement increment);
|
||||||
|
|
||||||
void ICU4XFixedDecimal_ceil(ICU4XFixedDecimal* self, int16_t position);
|
void ICU4XFixedDecimal_ceil(ICU4XFixedDecimal* self, int16_t position);
|
||||||
|
|
||||||
|
void ICU4XFixedDecimal_ceil_to_increment(ICU4XFixedDecimal* self, int16_t position, ICU4XRoundingIncrement increment);
|
||||||
|
|
||||||
void ICU4XFixedDecimal_half_ceil(ICU4XFixedDecimal* self, int16_t position);
|
void ICU4XFixedDecimal_half_ceil(ICU4XFixedDecimal* self, int16_t position);
|
||||||
|
|
||||||
|
void ICU4XFixedDecimal_half_ceil_to_increment(ICU4XFixedDecimal* self, int16_t position, ICU4XRoundingIncrement increment);
|
||||||
|
|
||||||
void ICU4XFixedDecimal_floor(ICU4XFixedDecimal* self, int16_t position);
|
void ICU4XFixedDecimal_floor(ICU4XFixedDecimal* self, int16_t position);
|
||||||
|
|
||||||
|
void ICU4XFixedDecimal_floor_to_increment(ICU4XFixedDecimal* self, int16_t position, ICU4XRoundingIncrement increment);
|
||||||
|
|
||||||
void ICU4XFixedDecimal_half_floor(ICU4XFixedDecimal* self, int16_t position);
|
void ICU4XFixedDecimal_half_floor(ICU4XFixedDecimal* self, int16_t position);
|
||||||
|
|
||||||
|
void ICU4XFixedDecimal_half_floor_to_increment(ICU4XFixedDecimal* self, int16_t position, ICU4XRoundingIncrement increment);
|
||||||
|
|
||||||
void ICU4XFixedDecimal_half_even(ICU4XFixedDecimal* self, int16_t position);
|
void ICU4XFixedDecimal_half_even(ICU4XFixedDecimal* self, int16_t position);
|
||||||
|
|
||||||
|
void ICU4XFixedDecimal_half_even_to_increment(ICU4XFixedDecimal* self, int16_t position, ICU4XRoundingIncrement increment);
|
||||||
|
|
||||||
diplomat_result_void_void ICU4XFixedDecimal_concatenate_end(ICU4XFixedDecimal* self, ICU4XFixedDecimal* other);
|
diplomat_result_void_void ICU4XFixedDecimal_concatenate_end(ICU4XFixedDecimal* self, ICU4XFixedDecimal* other);
|
||||||
|
|
||||||
void ICU4XFixedDecimal_to_string(const ICU4XFixedDecimal* self, DiplomatWriteable* to);
|
void ICU4XFixedDecimal_to_string(const ICU4XFixedDecimal* self, DiplomatWriteable* to);
|
|
@ -28,7 +28,7 @@ diplomat_result_box_ICU4XGraphemeClusterSegmenter_ICU4XError ICU4XGraphemeCluste
|
||||||
|
|
||||||
ICU4XGraphemeClusterBreakIteratorUtf8* ICU4XGraphemeClusterSegmenter_segment_utf8(const ICU4XGraphemeClusterSegmenter* self, const char* input_data, size_t input_len);
|
ICU4XGraphemeClusterBreakIteratorUtf8* ICU4XGraphemeClusterSegmenter_segment_utf8(const ICU4XGraphemeClusterSegmenter* self, const char* input_data, size_t input_len);
|
||||||
|
|
||||||
ICU4XGraphemeClusterBreakIteratorUtf16* ICU4XGraphemeClusterSegmenter_segment_utf16(const ICU4XGraphemeClusterSegmenter* self, const uint16_t* input_data, size_t input_len);
|
ICU4XGraphemeClusterBreakIteratorUtf16* ICU4XGraphemeClusterSegmenter_segment_utf16(const ICU4XGraphemeClusterSegmenter* self, const char16_t* input_data, size_t input_len);
|
||||||
|
|
||||||
ICU4XGraphemeClusterBreakIteratorLatin1* ICU4XGraphemeClusterSegmenter_segment_latin1(const ICU4XGraphemeClusterSegmenter* self, const uint8_t* input_data, size_t input_len);
|
ICU4XGraphemeClusterBreakIteratorLatin1* ICU4XGraphemeClusterSegmenter_segment_latin1(const ICU4XGraphemeClusterSegmenter* self, const uint8_t* input_data, size_t input_len);
|
||||||
void ICU4XGraphemeClusterSegmenter_destroy(ICU4XGraphemeClusterSegmenter* self);
|
void ICU4XGraphemeClusterSegmenter_destroy(ICU4XGraphemeClusterSegmenter* self);
|
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