diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2020-04-12 03:41:30 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2020-04-12 03:41:30 +0100 |
commit | 623ee73d661e5ed8475cb264511f683407d87365 (patch) | |
tree | 993eb27c93ec7a2d2d19550300d888fc1fed9e69 /www-client/firefox/files | |
parent | ceeeb463cc1eef97fd62eaee8bf2196ba04bc384 (diff) |
gentoo Easter resync : 12.04.2020
Diffstat (limited to 'www-client/firefox/files')
9 files changed, 654 insertions, 237 deletions
diff --git a/www-client/firefox/files/firefox-68.2.0-rust-1.39+.patch b/www-client/firefox/files/firefox-68.2.0-rust-1.39+.patch deleted file mode 100644 index bfb71cbb7887..000000000000 --- a/www-client/firefox/files/firefox-68.2.0-rust-1.39+.patch +++ /dev/null @@ -1,170 +0,0 @@ -Based on https://github.com/rust-lang/rust/issues/64710 - ---- a/third_party/rust/bindgen/.cargo-checksum.json -+++ b/third_party/rust/bindgen/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{"Cargo.toml":"9af635e7bad9021a49742a312faf6178b757dbd48aabc998931d6f491f14c179","LICENSE":"c23953d9deb0a3312dbeaf6c128a657f3591acee45067612fa68405eaa4525db","README.md":"5a1f556c6a57c0a6ccc65e19c27718e0f4b32381a8efcc80f6601b33c58c5d59","build.rs":"a9f6915c54d75f357ce32f96327bf4df53dc81a505b70831978f9dac6f43841d","src/callbacks.rs":"b24d7982332c6a35928f134184ddf4072fe4545a45546b97b9b0e0c1fbb77c08","src/clang.rs":"e9203eb5a1b432efebafcd011896e35e8c9145037bf99e7bb3709dc1b8e8e783","src/codegen/bitfield_unit.rs":"88b0604322dc449fc9284850eadc1f5d14b42fa747d4258bae0b6b9535f52dfd","src/codegen/bitfield_unit_tests.rs":"2073ac6a36e0bc9afaef5b1207966817c8fb7a1a9f6368c3b1b8f79822efbfba","src/codegen/error.rs":"2613af1d833377fd4a70719f4a09951d9d45dc9227827b9a2a938a1bcaaea2dd","src/codegen/helpers.rs":"fbd23e68dd51ccaddeb9761394d5df2db49baded0e2dccf6bbc52a2d6de502eb","src/codegen/impl_debug.rs":"f82969461d522fb758eca552ceaf189122a404cbb47fcc16008bfe52fc62aefa","src/codegen/impl_partialeq.rs":"d40d9ee2849c4d3d557b033c4d3af5e6de4a44347f67c0f016198086338811af","src/codegen/mod.rs":"238d989e13b7556e5d120a2bfe85b43332fba56cbe8df886d4c32e650fff1247","src/codegen/struct_layout.rs":"3fa5524aff82365ce292b0cc85080514c85a6dbd31bce90f001773b995dda28e","src/extra_assertions.rs":"494534bd4f18b80d89b180c8a93733e6617edcf7deac413e9a73fd6e7bc9ced7","src/features.rs":"c5fd7149f4a3b41fd4f89ade08505170942f4bc791bcb6a34fdddd3ae61856f8","src/ir/analysis/derive.rs":"325d4c1c1e6194e743f42a2316f1501b0ef852fe309f2e9cac3434825ad235f0","src/ir/analysis/has_destructor.rs":"63644f479738df35e531d3324ff892614083c3656e0747aa34d9f20dada878ec","src/ir/analysis/has_float.rs":"76162a309e4285a806755a08c687a3e7bc894a100a63da4e88584035e215b11d","src/ir/analysis/has_type_param_in_array.rs":"fdbc0af28a144c88ea2de83e6e6da5e1ffb40e3dd63fd7a708095d085bb06f94","src/ir/analysis/has_vtable.rs":"5788372d27bdbaaf0454bc17be31a5480918bc41a8a1c4832e8c61185c07f9cd","src/ir/analysis/mod.rs":"1f218e15c19f6666512908abc853fa7ff9ca5d0fafd94f026d9e4b0ce287ec3c","src/ir/analysis/sizedness.rs":"8dc10043d872e68e660ef96edca4d9733f95be45cdad4893462fa929b335014f","src/ir/analysis/template_params.rs":"6312c008bbc80f50e72a766756c8daddea0b6eeb31ec924b83a231df931e170e","src/ir/annotations.rs":"39a5ab19f4d5dfa617577e4a0d0d2b67b5369d480c7cca4b14d172458c9843f0","src/ir/comment.rs":"c48abe01c5af0f09f583a89f1394bc6c161b40f6c8f0f600bbfe3c907b47969b","src/ir/comp.rs":"ca439407faefbe3a198246f0a1dbdf4e40307e45eaaad317e85d1aab37bb31fc","src/ir/context.rs":"599226eb04d337a1b1b13af91af91bdb02dbd5f26f274cbc0ebc4489eb144fc0","src/ir/derive.rs":"34f9aa76b6c9c05136bb69dcd6455397faef571a567254d2c541d50a962994db","src/ir/dot.rs":"95ed2968fc3239d87892e9f1edf1ed6dd18630d949564961765967ea1d16960c","src/ir/enum_ty.rs":"9cc242d6b3c1866665594e8b306860ee39c0ea42d22198d46b7fded473fe3e84","src/ir/function.rs":"2d41d9df19f42b0c383f338be4c026c005853a8d1caf5f3e5a2f3a8dad202232","src/ir/int.rs":"07e0c7dbd2dd977177fae3acd2a14adf271c6cf9ff4b57cddc11d50734fd4801","src/ir/item.rs":"3bcdb69b793350e5744aec3577cdbb1e5068ece5220c38763cecd82dfb5e8f03","src/ir/item_kind.rs":"dbeae8c4fd0e5c9485d325aea040e056a1f2cd6d43fc927dee8fe1c0c59a7197","src/ir/layout.rs":"d49582081f5f86f7595afbe4845f38fb3b969a840b568f4a49b265e7d790bb5b","src/ir/mod.rs":"2eae90f207fad2e45957ec9287064992a419e3fc916aba84faff2ea25cbeb5ee","src/ir/module.rs":"c4d90bf38fe3672e01923734ccbdb7951ea929949d5f413a9c2aee12395a5094","src/ir/objc.rs":"758aa955a0c5d6ad82606c88a1f4cd1d93e666b71e82d43b18b1aaae96cf888a","src/ir/template.rs":"c0f8570b927dfd6a421fc4ce3094ec837a3ed936445225dbfac961e8e0842ae5","src/ir/traversal.rs":"ea751379a5aec02f93f8d2c61e18232776b1f000dbeae64b9a7195ba21a19dd6","src/ir/ty.rs":"952fb04cd6a71a2bca5c509aecacb42a1de0cae75824941541a38dc589f0993a","src/ir/var.rs":"8bdafb6d02f2c55ae11c28d88b19fb7a65ba8466da12ff039ae4c16c790b291e","src/lib.rs":"d5c8b404c515d30fc2d78b28eb84cff6b256f1f1e2dbd6aca280529bb2af6879","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"e519053bcdde6bc88f60f955246a02d53b3db1cc5ccd1612e6675b790b7460b0","src/options.rs":"041d635c8f6712ca32676a68f06d0245faed5577d9513786e058540ea2a69a7f","src/parse.rs":"be7d13cc84fae79ec7b3aa9e77063fa475a48d74a854423e2c72d75006a25202","src/regex_set.rs":"5cb72fc3714c0d79e9e942d003349c0775fafd7cd0c9603c65f5261883bbf9cf","src/time.rs":"3b763e6fee51d0eb01228dfe28bc28a9f692aff73b2a7b90a030902e0238fca6"},"package":"6bd7710ac8399ae1ebe1e3aac7c9047c4f39f2c94b33c997f482f49e96991f7c"} -\ No newline at end of file -+{"files":{"Cargo.toml":"9af635e7bad9021a49742a312faf6178b757dbd48aabc998931d6f491f14c179","LICENSE":"c23953d9deb0a3312dbeaf6c128a657f3591acee45067612fa68405eaa4525db","README.md":"5a1f556c6a57c0a6ccc65e19c27718e0f4b32381a8efcc80f6601b33c58c5d59","build.rs":"a9f6915c54d75f357ce32f96327bf4df53dc81a505b70831978f9dac6f43841d","src/callbacks.rs":"b24d7982332c6a35928f134184ddf4072fe4545a45546b97b9b0e0c1fbb77c08","src/clang.rs":"e9203eb5a1b432efebafcd011896e35e8c9145037bf99e7bb3709dc1b8e8e783","src/codegen/bitfield_unit.rs":"88b0604322dc449fc9284850eadc1f5d14b42fa747d4258bae0b6b9535f52dfd","src/codegen/bitfield_unit_tests.rs":"2073ac6a36e0bc9afaef5b1207966817c8fb7a1a9f6368c3b1b8f79822efbfba","src/codegen/error.rs":"2613af1d833377fd4a70719f4a09951d9d45dc9227827b9a2a938a1bcaaea2dd","src/codegen/helpers.rs":"fbd23e68dd51ccaddeb9761394d5df2db49baded0e2dccf6bbc52a2d6de502eb","src/codegen/impl_debug.rs":"f82969461d522fb758eca552ceaf189122a404cbb47fcc16008bfe52fc62aefa","src/codegen/impl_partialeq.rs":"d40d9ee2849c4d3d557b033c4d3af5e6de4a44347f67c0f016198086338811af","src/codegen/mod.rs":"238d989e13b7556e5d120a2bfe85b43332fba56cbe8df886d4c32e650fff1247","src/codegen/struct_layout.rs":"3fa5524aff82365ce292b0cc85080514c85a6dbd31bce90f001773b995dda28e","src/extra_assertions.rs":"494534bd4f18b80d89b180c8a93733e6617edcf7deac413e9a73fd6e7bc9ced7","src/features.rs":"c5fd7149f4a3b41fd4f89ade08505170942f4bc791bcb6a34fdddd3ae61856f8","src/ir/analysis/derive.rs":"325d4c1c1e6194e743f42a2316f1501b0ef852fe309f2e9cac3434825ad235f0","src/ir/analysis/has_destructor.rs":"63644f479738df35e531d3324ff892614083c3656e0747aa34d9f20dada878ec","src/ir/analysis/has_float.rs":"76162a309e4285a806755a08c687a3e7bc894a100a63da4e88584035e215b11d","src/ir/analysis/has_type_param_in_array.rs":"fdbc0af28a144c88ea2de83e6e6da5e1ffb40e3dd63fd7a708095d085bb06f94","src/ir/analysis/has_vtable.rs":"8c92a52c0f859c7bec7bfbc36b9d18f904baab0c8c9dc1b3e7af34de1a0b0da4","src/ir/analysis/mod.rs":"1f218e15c19f6666512908abc853fa7ff9ca5d0fafd94f026d9e4b0ce287ec3c","src/ir/analysis/sizedness.rs":"71f1a37f75b971ea5b0d8457473cc410947dbf706cb6d2c0338916910b78a675","src/ir/analysis/template_params.rs":"6312c008bbc80f50e72a766756c8daddea0b6eeb31ec924b83a231df931e170e","src/ir/annotations.rs":"39a5ab19f4d5dfa617577e4a0d0d2b67b5369d480c7cca4b14d172458c9843f0","src/ir/comment.rs":"c48abe01c5af0f09f583a89f1394bc6c161b40f6c8f0f600bbfe3c907b47969b","src/ir/comp.rs":"ca439407faefbe3a198246f0a1dbdf4e40307e45eaaad317e85d1aab37bb31fc","src/ir/context.rs":"599226eb04d337a1b1b13af91af91bdb02dbd5f26f274cbc0ebc4489eb144fc0","src/ir/derive.rs":"e5581852eec87918901a129284b4965aefc8a19394187a8095779a084f28fabe","src/ir/dot.rs":"95ed2968fc3239d87892e9f1edf1ed6dd18630d949564961765967ea1d16960c","src/ir/enum_ty.rs":"9cc242d6b3c1866665594e8b306860ee39c0ea42d22198d46b7fded473fe3e84","src/ir/function.rs":"2d41d9df19f42b0c383f338be4c026c005853a8d1caf5f3e5a2f3a8dad202232","src/ir/int.rs":"07e0c7dbd2dd977177fae3acd2a14adf271c6cf9ff4b57cddc11d50734fd4801","src/ir/item.rs":"3bcdb69b793350e5744aec3577cdbb1e5068ece5220c38763cecd82dfb5e8f03","src/ir/item_kind.rs":"dbeae8c4fd0e5c9485d325aea040e056a1f2cd6d43fc927dee8fe1c0c59a7197","src/ir/layout.rs":"d49582081f5f86f7595afbe4845f38fb3b969a840b568f4a49b265e7d790bb5b","src/ir/mod.rs":"2eae90f207fad2e45957ec9287064992a419e3fc916aba84faff2ea25cbeb5ee","src/ir/module.rs":"c4d90bf38fe3672e01923734ccbdb7951ea929949d5f413a9c2aee12395a5094","src/ir/objc.rs":"758aa955a0c5d6ad82606c88a1f4cd1d93e666b71e82d43b18b1aaae96cf888a","src/ir/template.rs":"c0f8570b927dfd6a421fc4ce3094ec837a3ed936445225dbfac961e8e0842ae5","src/ir/traversal.rs":"ea751379a5aec02f93f8d2c61e18232776b1f000dbeae64b9a7195ba21a19dd6","src/ir/ty.rs":"952fb04cd6a71a2bca5c509aecacb42a1de0cae75824941541a38dc589f0993a","src/ir/var.rs":"8bdafb6d02f2c55ae11c28d88b19fb7a65ba8466da12ff039ae4c16c790b291e","src/lib.rs":"d5c8b404c515d30fc2d78b28eb84cff6b256f1f1e2dbd6aca280529bb2af6879","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"e519053bcdde6bc88f60f955246a02d53b3db1cc5ccd1612e6675b790b7460b0","src/options.rs":"041d635c8f6712ca32676a68f06d0245faed5577d9513786e058540ea2a69a7f","src/parse.rs":"be7d13cc84fae79ec7b3aa9e77063fa475a48d74a854423e2c72d75006a25202","src/regex_set.rs":"5cb72fc3714c0d79e9e942d003349c0775fafd7cd0c9603c65f5261883bbf9cf","src/time.rs":"3b763e6fee51d0eb01228dfe28bc28a9f692aff73b2a7b90a030902e0238fca6"},"package":"6bd7710ac8399ae1ebe1e3aac7c9047c4f39f2c94b33c997f482f49e96991f7c"} -\ No newline at end of file ---- a/third_party/rust/bindgen/src/ir/analysis/has_vtable.rs -+++ b/third_party/rust/bindgen/src/ir/analysis/has_vtable.rs -@@ -9,17 +9,17 @@ use std::ops; - use {HashMap, Entry}; - - /// The result of the `HasVtableAnalysis` for an individual item. --#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord)] -+#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] - pub enum HasVtableResult { -- /// The item has a vtable, but the actual vtable pointer is in a base -- /// member. -- BaseHasVtable, -+ /// The item does not have a vtable pointer. -+ No, - - /// The item has a vtable and the actual vtable pointer is within this item. - SelfHasVtable, - -- /// The item does not have a vtable pointer. -- No -+ /// The item has a vtable, but the actual vtable pointer is in a base -+ /// member. -+ BaseHasVtable, - } - - impl Default for HasVtableResult { -@@ -28,21 +28,6 @@ impl Default for HasVtableResult { - } - } - --impl cmp::PartialOrd for HasVtableResult { -- fn partial_cmp(&self, rhs: &Self) -> Option<cmp::Ordering> { -- use self::HasVtableResult::*; -- -- match (*self, *rhs) { -- (x, y) if x == y => Some(cmp::Ordering::Equal), -- (BaseHasVtable, _) => Some(cmp::Ordering::Greater), -- (_, BaseHasVtable) => Some(cmp::Ordering::Less), -- (SelfHasVtable, _) => Some(cmp::Ordering::Greater), -- (_, SelfHasVtable) => Some(cmp::Ordering::Less), -- _ => unreachable!(), -- } -- } --} -- - impl HasVtableResult { - /// Take the least upper bound of `self` and `rhs`. - pub fn join(self, rhs: Self) -> Self { ---- a/third_party/rust/bindgen/src/ir/analysis/sizedness.rs -+++ b/third_party/rust/bindgen/src/ir/analysis/sizedness.rs -@@ -22,13 +22,14 @@ use {HashMap, Entry}; - /// - /// We initially assume that all types are `ZeroSized` and then update our - /// understanding as we learn more about each type. --#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord)] -+#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] - pub enum SizednessResult { -- /// Has some size that is known to be greater than zero. That doesn't mean -- /// it has a static size, but it is not zero sized for sure. In other words, -- /// it might contain an incomplete array or some other dynamically sized -- /// type. -- NonZeroSized, -+ /// The type is zero-sized. -+ /// -+ /// This means that if it is a C++ type, and is not being used as a base -+ /// member, then we must add an `_address` byte to enforce the -+ /// unique-address-per-distinct-object-instance rule. -+ ZeroSized, - - /// Whether this type is zero-sized or not depends on whether a type - /// parameter is zero-sized or not. -@@ -52,12 +53,11 @@ pub enum SizednessResult { - /// https://github.com/rust-lang-nursery/rust-bindgen/issues/586 - DependsOnTypeParam, - -- /// The type is zero-sized. -- /// -- /// This means that if it is a C++ type, and is not being used as a base -- /// member, then we must add an `_address` byte to enforce the -- /// unique-address-per-distinct-object-instance rule. -- ZeroSized, -+ /// Has some size that is known to be greater than zero. That doesn't mean -+ /// it has a static size, but it is not zero sized for sure. In other words, -+ /// it might contain an incomplete array or some other dynamically sized -+ /// type. -+ NonZeroSized, - } - - impl Default for SizednessResult { -@@ -66,21 +66,6 @@ impl Default for SizednessResult { - } - } - --impl cmp::PartialOrd for SizednessResult { -- fn partial_cmp(&self, rhs: &Self) -> Option<cmp::Ordering> { -- use self::SizednessResult::*; -- -- match (*self, *rhs) { -- (x, y) if x == y => Some(cmp::Ordering::Equal), -- (NonZeroSized, _) => Some(cmp::Ordering::Greater), -- (_, NonZeroSized) => Some(cmp::Ordering::Less), -- (DependsOnTypeParam, _) => Some(cmp::Ordering::Greater), -- (_, DependsOnTypeParam) => Some(cmp::Ordering::Less), -- _ => unreachable!(), -- } -- } --} -- - impl SizednessResult { - /// Take the least upper bound of `self` and `rhs`. - pub fn join(self, rhs: Self) -> Self { ---- a/third_party/rust/bindgen/src/ir/derive.rs -+++ b/third_party/rust/bindgen/src/ir/derive.rs -@@ -92,10 +92,10 @@ pub trait CanDeriveOrd { - /// - /// Initially we assume that we can derive trait for all types and then - /// update our understanding as we learn more about each type. --#[derive(Debug, Copy, Clone, PartialEq, Eq, Ord)] -+#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] - pub enum CanDerive { -- /// No, we cannot. -- No, -+ /// Yes, we can derive automatically. -+ Yes, - - /// The only thing that stops us from automatically deriving is that - /// array with more than maximum number of elements is used. -@@ -103,8 +103,8 @@ pub enum CanDerive { - /// This means we probably can "manually" implement such trait. - Manually, - -- /// Yes, we can derive automatically. -- Yes, -+ /// No, we cannot. -+ No, - } - - impl Default for CanDerive { -@@ -113,22 +113,6 @@ impl Default for CanDerive { - } - } - --impl cmp::PartialOrd for CanDerive { -- fn partial_cmp(&self, rhs: &Self) -> Option<cmp::Ordering> { -- use self::CanDerive::*; -- -- let ordering = match (*self, *rhs) { -- (x, y) if x == y => cmp::Ordering::Equal, -- (No, _) => cmp::Ordering::Greater, -- (_, No) => cmp::Ordering::Less, -- (Manually, _) => cmp::Ordering::Greater, -- (_, Manually) => cmp::Ordering::Less, -- _ => unreachable!() -- }; -- Some(ordering) -- } --} -- - impl CanDerive { - /// Take the least upper bound of `self` and `rhs`. - pub fn join(self, rhs: Self) -> Self { diff --git a/www-client/firefox/files/firefox-71.0-bug1602358-fix-older-builds-with-newer-cbindgen.patch b/www-client/firefox/files/firefox-71.0-bug1602358-fix-older-builds-with-newer-cbindgen.patch deleted file mode 100644 index 117b98caf33f..000000000000 --- a/www-client/firefox/files/firefox-71.0-bug1602358-fix-older-builds-with-newer-cbindgen.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 2683aaa789cfeb8c31a2d94ed972642421768a4b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= <emilio@crisal.io> -Date: Thu, 1 Jan 1970 00:00:00 +0000 -Subject: [PATCH] Bug 1602358 - Fix older builds with newer cbindgen. r=jwatt, - a=jcristau - -This should be fine to uplift so that downstream doesn't need multiple cbindgen -versions. - -Differential Revision: https://phabricator.services.mozilla.com/D56346 ---- - layout/generic/WritingModes.h | 3 ++- - servo/ports/geckolib/cbindgen.toml | 10 ---------- - 2 files changed, 2 insertions(+), 11 deletions(-) - -diff --git a/layout/generic/WritingModes.h b/layout/generic/WritingModes.h -index 1a8d08b191b..0671388902f 100644 ---- a/layout/generic/WritingModes.h -+++ b/layout/generic/WritingModes.h -@@ -518,7 +518,8 @@ class WritingMode { - */ - void SetDirectionFromBidiLevel(uint8_t level) { - if (IS_LEVEL_RTL(level) == IsBidiLTR()) { -- mWritingMode ^= StyleWritingMode_RTL | StyleWritingMode_INLINE_REVERSED; -+ mWritingMode.bits ^= static_cast<uint8_t>( -+ (StyleWritingMode_RTL | StyleWritingMode_INLINE_REVERSED).bits); - } - } - -diff --git a/servo/ports/geckolib/cbindgen.toml b/servo/ports/geckolib/cbindgen.toml -index bed86498ea1..8a7a9cd7998 100644 ---- a/servo/ports/geckolib/cbindgen.toml -+++ b/servo/ports/geckolib/cbindgen.toml -@@ -616,13 +616,3 @@ renaming_overrides_prefixing = true - // Get the layout rect, replacing auto right / bottom values for aAutoSize. - inline nsRect ToLayoutRect(nscoord aAutoSize = NS_MAXSIZE) const; - """ -- --"WritingMode" = """ -- StyleWritingMode operator^(const StyleWritingMode& other) const { -- return {static_cast<decltype(bits)>(this->bits ^ other.bits)}; -- } -- StyleWritingMode& operator^=(const StyleWritingMode& other) { -- *this = (*this ^ other); -- return *this; -- } --""" --- -2.20.1 - diff --git a/www-client/firefox/files/firefox-74.0-bug1607052-font-selection-regression.patch b/www-client/firefox/files/firefox-74.0-bug1607052-font-selection-regression.patch new file mode 100644 index 000000000000..7c962f8ddc14 --- /dev/null +++ b/www-client/firefox/files/firefox-74.0-bug1607052-font-selection-regression.patch @@ -0,0 +1,281 @@ +commit 9d26727a4e85 +Author: Zibi Braniecki <zbraniecki@mozilla.com> +Date: Fri Feb 21 00:39:18 2020 +0000 + + Bug 1607052 - Unify language identifier canonicalization in LocaleService and OSPreferences to use unic_langid, and extend GTK's RegionalPrefs reading to fallback on SystemLocales. r=jfkthame + + Differential Revision: https://phabricator.services.mozilla.com/D63393 + + --HG-- + extra : moz-landing-system : lando +--- + intl/locale/LocaleService.cpp | 53 ++------------------------- + intl/locale/LocaleService.h | 18 +++++++++ + intl/locale/OSPreferences.cpp | 18 ++------- + intl/locale/rust/unic-langid-ffi/src/lib.rs | 33 ++++++++++++++--- + intl/locale/tests/gtest/TestLocaleService.cpp | 23 ++++++++++++ + intl/locale/tests/unit/test_localeService.js | 3 +- + 6 files changed, 77 insertions(+), 71 deletions(-) + +diff --git intl/locale/LocaleService.cpp intl/locale/LocaleService.cpp +index f7e13e36ccbc7..6708c4af4b5c3 100644 +--- old/intl/locale/LocaleService.cpp ++++ new/intl/locale/LocaleService.cpp +@@ -39,51 +39,6 @@ NS_IMPL_ISUPPORTS(LocaleService, mozILocaleService, nsIObserver, + + mozilla::StaticRefPtr<LocaleService> LocaleService::sInstance; + +-/** +- * This function transforms a canonical Mozilla Language Tag, into it's +- * BCP47 compilant form. +- * +- * Example: "ja-JP-mac" -> "ja-JP-macos" +- * +- * The BCP47 form should be used for all calls to ICU/Intl APIs. +- * The canonical form is used for all internal operations. +- */ +-static bool SanitizeForBCP47(nsACString& aLocale, bool strict) { +- // Currently, the only locale code we use that's not BCP47-conformant is +- // "ja-JP-mac" on OS X, and ICU canonicalizes it into a mouthfull +- // "ja-JP-x-lvariant-mac", so instead we're hardcoding a conversion +- // of it to "ja-JP-macos". +- if (aLocale.LowerCaseEqualsASCII("ja-jp-mac")) { +- aLocale.AssignLiteral("ja-JP-macos"); +- return true; +- } +- +- nsAutoCString locale(aLocale); +- locale.Trim(" "); +- +- // POSIX may bring us locales such as "en-US.UTF8", which +- // ICU converts to `en-US-u-va-posix`. Let's cut out +- // the `.UTF8`, since it doesn't matter for us. +- int32_t pos = locale.FindChar('.'); +- if (pos != -1) { +- locale.Cut(pos, locale.Length() - pos); +- } +- +- // The rest of this function will use ICU canonicalization for any other +- // tag that may come this way. +- const int32_t LANG_TAG_CAPACITY = 128; +- char langTag[LANG_TAG_CAPACITY]; +- UErrorCode err = U_ZERO_ERROR; +- // This is a fail-safe method that will set langTag to "und" if it cannot +- // match any part of the input locale code. +- int32_t len = uloc_toLanguageTag(locale.get(), langTag, LANG_TAG_CAPACITY, +- strict, &err); +- if (U_SUCCESS(err) && len > 0) { +- aLocale.Assign(langTag, len); +- } +- return U_SUCCESS(err); +-} +- + /** + * This function splits an input string by `,` delimiter, sanitizes the result + * language tags and returns them to the caller. +@@ -93,7 +48,7 @@ static void SplitLocaleListStringIntoArray(nsACString& str, + if (str.Length() > 0) { + for (const nsACString& part : str.Split(',')) { + nsAutoCString locale(part); +- if (SanitizeForBCP47(locale, true)) { ++ if (LocaleService::CanonicalizeLanguageId(locale)) { + if (!aRetVal.Contains(locale)) { + aRetVal.AppendElement(locale); + } +@@ -421,7 +376,7 @@ LocaleService::GetDefaultLocale(nsACString& aRetVal) { + locale.Trim(" \t\n\r"); + // This should never be empty. + MOZ_ASSERT(!locale.IsEmpty()); +- if (SanitizeForBCP47(locale, true)) { ++ if (CanonicalizeLanguageId(locale)) { + mDefaultLocale.Assign(locale); + } + +@@ -617,7 +572,7 @@ LocaleService::SetRequestedLocales(const nsTArray<nsCString>& aRequested) { + + for (auto& req : aRequested) { + nsAutoCString locale(req); +- if (!SanitizeForBCP47(locale, true)) { ++ if (!CanonicalizeLanguageId(locale)) { + NS_ERROR("Invalid language tag provided to SetRequestedLocales!"); + return NS_ERROR_INVALID_ARG; + } +@@ -667,7 +622,7 @@ LocaleService::SetAvailableLocales(const nsTArray<nsCString>& aAvailable) { + + for (auto& avail : aAvailable) { + nsAutoCString locale(avail); +- if (!SanitizeForBCP47(locale, true)) { ++ if (!CanonicalizeLanguageId(locale)) { + NS_ERROR("Invalid language tag provided to SetAvailableLocales!"); + return NS_ERROR_INVALID_ARG; + } +diff --git intl/locale/LocaleService.h intl/locale/LocaleService.h +index 2ff428da3e3fd..5f5152c1fbb7a 100644 +--- old/intl/locale/LocaleService.h ++++ new/intl/locale/LocaleService.h +@@ -10,6 +10,7 @@ + #include "nsString.h" + #include "nsTArray.h" + #include "nsWeakReference.h" ++#include "MozLocaleBindings.h" + + #include "mozILocaleService.h" + +@@ -104,6 +105,23 @@ class LocaleService final : public mozILocaleService, + return RefPtr<LocaleService>(GetInstance()).forget(); + } + ++ /** ++ * Canonicalize a Unicode Language Identifier string. ++ * ++ * The operation is: ++ * * Normalizing casing (`eN-Us-Windows` -> `en-US-windows`) ++ * * Switching `_` to `-` (`en_US` -> `en-US`) ++ * * Rejecting invalid identifiers (`e21-X` sets aLocale to `und` and ++ * returns false) ++ * * Normalizing Mozilla's `ja-JP-mac` to `ja-JP-macos` ++ * * Cutting off POSIX dot postfix (`en-US.utf8` -> `en-US`) ++ * ++ * This operation should be used on any external input before ++ * it gets used in internal operations. ++ */ ++ static bool CanonicalizeLanguageId(nsACString& aLocale) { ++ return ffi::unic_langid_canonicalize(&aLocale); ++ } + /** + * This method should only be called in the client mode. + * +diff --git intl/locale/OSPreferences.cpp intl/locale/OSPreferences.cpp +index 283db96e0d718..f816ca57abfea 100644 +--- old/intl/locale/OSPreferences.cpp ++++ new/intl/locale/OSPreferences.cpp +@@ -54,19 +54,7 @@ void OSPreferences::Refresh() { + * It returns true if the canonicalization was successful. + */ + bool OSPreferences::CanonicalizeLanguageTag(nsCString& aLoc) { +- char langTag[512]; +- +- UErrorCode status = U_ZERO_ERROR; +- +- int32_t langTagLen = uloc_toLanguageTag(aLoc.get(), langTag, +- sizeof(langTag) - 1, false, &status); +- +- if (U_FAILURE(status)) { +- return false; +- } +- +- aLoc.Assign(langTag, langTagLen); +- return true; ++ return LocaleService::CanonicalizeLanguageId(aLoc); + } + + /** +@@ -291,7 +279,9 @@ OSPreferences::GetRegionalPrefsLocales(nsTArray<nsCString>& aRetVal) { + return NS_OK; + } + +- return NS_ERROR_FAILURE; ++ // If we failed to read regional prefs locales, ++ // use system locales as last fallback. ++ return GetSystemLocales(aRetVal); + } + + static OSPreferences::DateTimeFormatStyle ToDateTimeFormatStyle( +diff --git intl/locale/rust/unic-langid-ffi/src/lib.rs intl/locale/rust/unic-langid-ffi/src/lib.rs +index 701d3679c4cec..517e08c1a64c1 100644 +--- old/intl/locale/rust/unic-langid-ffi/src/lib.rs ++++ new/intl/locale/rust/unic-langid-ffi/src/lib.rs +@@ -5,18 +5,39 @@ + use nsstring::nsACString; + use nsstring::nsCString; + use thin_vec::ThinVec; +-pub use unic_langid::LanguageIdentifier; ++pub use unic_langid::{LanguageIdentifier, LanguageIdentifierError}; ++ ++fn new_langid_for_mozilla(name: &nsACString) -> Result<LanguageIdentifier, LanguageIdentifierError> { ++ if name.eq_ignore_ascii_case(b"ja-jp-mac") { ++ "ja-JP-macos".parse() ++ } else { ++ // Cut out any `.FOO` like `en-US.POSIX`. ++ let mut name: &[u8] = name.as_ref(); ++ if let Some(ptr) = name.iter().position(|b| b == &b'.') { ++ name = &name[..ptr]; ++ } ++ LanguageIdentifier::from_bytes(name) ++ } ++} ++ ++#[no_mangle] ++pub unsafe extern "C" fn unic_langid_canonicalize(name: &mut nsACString) -> bool { ++ let langid = new_langid_for_mozilla(name); ++ ++ let result = langid.is_ok(); ++ ++ name.assign(&langid.unwrap_or_default().to_string()); ++ ++ result ++} ++ + + #[no_mangle] + pub unsafe extern "C" fn unic_langid_new( + name: &nsACString, + ret_val: &mut bool, + ) -> *mut LanguageIdentifier { +- let langid = if name.eq_ignore_ascii_case(b"ja-jp-mac") { +- "ja-JP-macos".parse() +- } else { +- LanguageIdentifier::from_bytes(name) +- }; ++ let langid = new_langid_for_mozilla(name); + + *ret_val = langid.is_ok(); + Box::into_raw(Box::new(langid.unwrap_or_default())) +diff --git intl/locale/tests/gtest/TestLocaleService.cpp intl/locale/tests/gtest/TestLocaleService.cpp +index b13ecfd237dfa..aaac8615b09fd 100644 +--- old/intl/locale/tests/gtest/TestLocaleService.cpp ++++ new/intl/locale/tests/gtest/TestLocaleService.cpp +@@ -10,6 +10,29 @@ + + using namespace mozilla::intl; + ++TEST(Intl_Locale_LocaleService, CanonicalizeLanguageId) ++{ ++ nsCString locale("en-US.POSIX"); ++ ASSERT_TRUE(LocaleService::CanonicalizeLanguageId(locale)); ++ ASSERT_TRUE(locale.EqualsLiteral("en-US")); ++ ++ locale.AssignLiteral("en-US_POSIX"); ++ ASSERT_TRUE(LocaleService::CanonicalizeLanguageId(locale)); ++ ASSERT_TRUE(locale.EqualsLiteral("en-US-posix")); ++ ++ locale.AssignLiteral("en-US-POSIX"); ++ ASSERT_TRUE(LocaleService::CanonicalizeLanguageId(locale)); ++ ASSERT_TRUE(locale.EqualsLiteral("en-US-posix")); ++ ++ locale.AssignLiteral("C"); ++ ASSERT_FALSE(LocaleService::CanonicalizeLanguageId(locale)); ++ ASSERT_TRUE(locale.EqualsLiteral("und")); ++ ++ locale.AssignLiteral(""); ++ ASSERT_FALSE(LocaleService::CanonicalizeLanguageId(locale)); ++ ASSERT_TRUE(locale.EqualsLiteral("und")); ++} ++ + TEST(Intl_Locale_LocaleService, GetAppLocalesAsBCP47) + { + nsTArray<nsCString> appLocales; +diff --git intl/locale/tests/unit/test_localeService.js intl/locale/tests/unit/test_localeService.js +index 1970ae94b2607..202c2674972a8 100644 +--- old/intl/locale/tests/unit/test_localeService.js ++++ new/intl/locale/tests/unit/test_localeService.js +@@ -204,8 +204,7 @@ add_test(function test_requestedLocales_sanitize() { + Assert.equal(locales[0], "de"); + Assert.equal(locales[1], "pl"); + Assert.equal(locales[2], "de-AT"); +- Assert.equal(locales[3], "und"); +- Assert.equal(locales.length, 4); ++ Assert.equal(locales.length, 3); + + Services.prefs.clearUserPref(PREF_REQUESTED_LOCALES); + diff --git a/www-client/firefox/files/firefox-wayland.sh b/www-client/firefox/files/firefox-wayland.sh new file mode 100644 index 000000000000..44280250fb9d --- /dev/null +++ b/www-client/firefox/files/firefox-wayland.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +# +# Run Mozilla Firefox under Wayland +# +export MOZ_ENABLE_WAYLAND=1 +exec @PREFIX@/bin/firefox "$@" diff --git a/www-client/firefox/files/firefox-x11.sh b/www-client/firefox/files/firefox-x11.sh new file mode 100644 index 000000000000..756556690cf3 --- /dev/null +++ b/www-client/firefox/files/firefox-x11.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +# +# Run Mozilla Firefox on X11 +# +export MOZ_DISABLE_WAYLAND=1 +exec @PREFIX@/bin/firefox "$@" diff --git a/www-client/firefox/files/firefox.sh b/www-client/firefox/files/firefox.sh new file mode 100644 index 000000000000..c08d555196d6 --- /dev/null +++ b/www-client/firefox/files/firefox.sh @@ -0,0 +1,128 @@ +#!/bin/bash + +## +## Usage: +## +## $ firefox +## +## This script is meant to run Mozilla Firefox in Gentoo. + +cmdname=$(basename "$0") + +## +## Variables +## +MOZ_ARCH=$(uname -m) +case ${MOZ_ARCH} in + x86_64|s390x|sparc64) + MOZ_LIB_DIR="@PREFIX@/lib64" + SECONDARY_LIB_DIR="@PREFIX@/lib" + ;; + *) + MOZ_LIB_DIR="@PREFIX@/lib" + SECONDARY_LIB_DIR="@PREFIX@/lib64" + ;; +esac + +MOZ_FIREFOX_FILE="firefox" + +if [[ ! -r ${MOZ_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} ]]; then + if [[ ! -r ${SECONDARY_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} ]]; then + echo "Error: ${MOZ_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} not found" >&2 + if [[ -d $SECONDARY_LIB_DIR ]]; then + echo " ${SECONDARY_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} not found" >&2 + fi + exit 1 + fi + MOZ_LIB_DIR="$SECONDARY_LIB_DIR" +fi +MOZILLA_FIVE_HOME="${MOZ_LIB_DIR}/firefox" +MOZ_EXTENSIONS_PROFILE_DIR="${HOME}/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" +MOZ_PROGRAM="${MOZILLA_FIVE_HOME}/${MOZ_FIREFOX_FILE}" +DESKTOP_FILE="firefox" + +## +## Enable Wayland backend? +## +if @DEFAULT_WAYLAND@ && [[ -z ${MOZ_DISABLE_WAYLAND} ]]; then + if [[ -n "$WAYLAND_DISPLAY" ]]; then + DESKTOP_FILE="firefox-wayland" + export MOZ_ENABLE_WAYLAND=1 + fi +elif [[ -n ${MOZ_DISABLE_WAYLAND} ]]; then + DESKTOP_FILE="firefox-x11" +fi + +## +## Use D-Bus remote exclusively when there's Wayland display. +## +if [[ -n "${WAYLAND_DISPLAY}" ]]; then + export MOZ_DBUS_REMOTE=1 +fi + +## +## Make sure that we set the plugin path +## +MOZ_PLUGIN_DIR="plugins" + +if [[ -n "${MOZ_PLUGIN_PATH}" ]]; then + MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR} +else + MOZ_PLUGIN_PATH=${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR} +fi + +if [[ -d "${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}" ]]; then + MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR} +fi + +export MOZ_PLUGIN_PATH + +## +## Set MOZ_APP_LAUNCHER for gnome-session +## +export MOZ_APP_LAUNCHER="@PREFIX@/bin/${cmdname}" + +## +## Disable the GNOME crash dialog, Moz has it's own +## +if [[ "$XDG_CURRENT_DESKTOP" == "GNOME" ]]; then + GNOME_DISABLE_CRASH_DIALOG=1 + export GNOME_DISABLE_CRASH_DIALOG +fi + +## +## Enable Xinput2 (#617344) +## + +# respect user settings +MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2:-auto} + +if [[ ${MOZ_USE_XINPUT2} == auto && -n ${WAYLAND_DISPLAY} ]]; then + # enabling XINPUT2 should be safe for all wayland users + MOZ_USE_XINPUT2=1 +elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == KDE ]]; then + # XINPUT2 is known to cause problems for KWin users + MOZ_USE_XINPUT2=0 +elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == LXQT ]]; then + # LXQt uses KWin + MOZ_USE_XINPUT2=0 +elif [[ ${MOZ_USE_XINPUT2} == auto ]]; then + # should work on Mate, Xfce, FluxBox, OpenBox and all the others ... + MOZ_USE_XINPUT2=1 +fi + +[[ ${MOZ_USE_XINPUT2} != 0 ]] && export MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2} + +# Don't throw "old profile" dialog box. +export MOZ_ALLOW_DOWNGRADE=1 + +## +## Route to the correct .desktop file to get proper +## name and actions +## +if [[ $@ != *"--name "* ]]; then + set -- --name "${DESKTOP_FILE}" "$@" +fi + +# Run the browser +exec ${MOZ_PROGRAM} "$@" diff --git a/www-client/firefox/files/gentoo-default-prefs.js-2 b/www-client/firefox/files/gentoo-default-prefs.js-2 deleted file mode 100644 index ffd0d7dc8ee7..000000000000 --- a/www-client/firefox/files/gentoo-default-prefs.js-2 +++ /dev/null @@ -1,17 +0,0 @@ -pref("app.update.enabled", false); -pref("app.update.autoInstallEnabled", false); -pref("browser.display.use_system_colors", true); -pref("browser.link.open_external", 3); -pref("general.smoothScroll", true); -pref("general.autoScroll", false); -pref("browser.tabs.tabMinWidth", 15); -pref("browser.backspace_action", 0); -pref("browser.urlbar.hideGoButton", true); -pref("accessibility.typeaheadfind", true); -pref("browser.shell.checkDefaultBrowser", false); -pref("browser.EULA.override", true); -pref("general.useragent.vendor", "Gentoo"); -pref("general.useragent.locale", "chrome://global/locale/intl.properties"); -pref("intl.locale.requested", ""); -pref("extensions.autoDisableScopes", 0); -pref("layout.css.dpi", 0); diff --git a/www-client/firefox/files/gentoo-default-prefs.js-3 b/www-client/firefox/files/gentoo-default-prefs.js-3 index d2a4dc82c94a..073ea77e5117 100644 --- a/www-client/firefox/files/gentoo-default-prefs.js-3 +++ b/www-client/firefox/files/gentoo-default-prefs.js-3 @@ -16,3 +16,4 @@ pref("intl.locale.requested", ""); pref("extensions.autoDisableScopes", 0); pref("layout.css.dpi", 0); pref("network.trr.mode", 5); +pref("app.normandy.enabled", false); diff --git a/www-client/firefox/files/icon/firefox-r1.desktop b/www-client/firefox/files/icon/firefox-r1.desktop new file mode 100644 index 000000000000..a000dffda124 --- /dev/null +++ b/www-client/firefox/files/icon/firefox-r1.desktop @@ -0,0 +1,230 @@ +[Desktop Entry] +Version=1.0 +Name=@NAME@ +GenericName=Web Browser +Comment=Browse the Web +Exec=@EXEC@ %u +Icon=@ICON@ +Terminal=false +Type=Application +MimeType=application/pdf;application/vnd.mozilla.xul+xml;application/xhtml+xml;text/html;text/mml;text/xml;x-scheme-handler/ftp;x-scheme-handler/http;x-scheme-handler/https; +StartupNotify=@STARTUP_NOTIFY@ +Categories=Network;WebBrowser; +Keywords=web;browser;internet; +Actions=new-window;new-private-window; + +[Desktop Action new-window] +Name=Open a New Window +Name[ach]=Dirica manyen +Name[af]=Nuwe venster +Name[an]=Nueva finestra +Name[ar]=نافذة جديدة +Name[as]=নতুন উইন্ডো +Name[ast]=Ventana nueva +Name[az]=Yeni Pəncərə +Name[be]=Новае акно +Name[bg]=Нов прозорец +Name[bn_BD]=নতুন উইন্ডো (N) +Name[bn_IN]=নতুন উইন্ডো +Name[br]=Prenestr nevez +Name[brx]=गोदान उइन्ड'(N) +Name[bs]=Novi prozor +Name[ca]=Finestra nova +Name[cak]=K'ak'a' tzuwäch +Name[cs]=Nové okno +Name[cy]=Ffenestr Newydd +Name[da]=Nyt vindue +Name[de]=Neues Fenster +Name[dsb]=Nowe wokno +Name[el]=Νέο παράθυρο +Name[en_GB]=New Window +Name[en_US]=New Window +Name[en_ZA]=New Window +Name[eo]=Nova fenestro +Name[es_AR]=Nueva ventana +Name[es_CL]=Nueva ventana +Name[es_ES]=Nueva ventana +Name[es_MX]=Nueva ventana +Name[et]=Uus aken +Name[eu]=Leiho berria +Name[fa]=پنجره جدید +Name[ff]=Henorde Hesere +Name[fi]=Uusi ikkuna +Name[fr]=Nouvelle fenêtre +Name[fy_NL]=Nij finster +Name[ga_IE]=Fuinneog Nua +Name[gd]=Uinneag ùr +Name[gl]=Nova xanela +Name[gn]=Ovetã pyahu +Name[gu_IN]=નવી વિન્ડો +Name[he]=חלון חדש +Name[hi_IN]=नया विंडो +Name[hr]=Novi prozor +Name[hsb]=Nowe wokno +Name[hu]=Új ablak +Name[hy_AM]=Նոր Պատուհան +Name[id]=Jendela Baru +Name[is]=Nýr gluggi +Name[it]=Nuova finestra +Name[ja]=新しいウィンドウ +Name[ja_JP-mac]=新規ウインドウ +Name[ka]=ახალი ფანჯარა +Name[kk]=Жаңа терезе +Name[km]=បង្អួចថ្មី +Name[kn]=ಹೊಸ ಕಿಟಕಿ +Name[ko]=새 창 +Name[kok]=नवें जनेल +Name[ks]=نئئ وِنڈو +Name[lij]=Neuvo barcon +Name[lo]=ຫນ້າຕ່າງໃຫມ່ +Name[lt]=Naujas langas +Name[ltg]=Jauns lūgs +Name[lv]=Jauns logs +Name[mai]=नव विंडो +Name[mk]=Нов прозорец +Name[ml]=പുതിയ ജാലകം +Name[mr]=नवीन पटल +Name[ms]=Tetingkap Baru +Name[my]=ဝင်းဒိုးအသစ် +Name[nb_NO]=Nytt vindu +Name[ne_NP]=नयाँ सञ्झ्याल +Name[nl]=Nieuw venster +Name[nn_NO]=Nytt vindauge +Name[or]=ନୂତନ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ +Name[pl]=Nowe okno +Name[pt_BR]=Nova janela +Name[pt_PT]=Nova janela +Name[rm]=Nova fanestra +Name[ro]=Fereastră nouă +Name[ru]=Новое окно +Name[sat]=नावा विंडो (N) +Name[si]=නව කවුළුවක් +Name[sk]=Nové okno +Name[sl]=Novo okno +Name[son]=Zanfun taaga +Name[sq]=Dritare e Re +Name[sr]=Нови прозор +Name[sv_SE]=Nytt fönster +Name[ta]=புதிய சாளரம் +Name[te]=కొత్త విండో +Name[th]=หน้าต่างใหม่ +Name[tr]=Yeni pencere +Name[tsz]=Eraatarakua jimpani +Name[uk]=Нове вікно +Name[ur]=نیا دریچہ +Name[uz]=Yangi oyna +Name[vi]=Cửa sổ mới +Name[wo]=Palanteer bu bees +Name[xh]=Ifestile entsha +Name[zh_CN]=新建窗口 +Name[zh_TW]=開新視窗 +Exec=@EXEC@ --new-window %u + +[Desktop Action new-private-window] +Name=Open a New Private Window +Name[ach]=Dirica manyen me mung +Name[af]=Nuwe privaatvenster +Name[an]=Nueva finestra privada +Name[ar]=نافذة خاصة جديدة +Name[as]=নতুন ব্যক্তিগত উইন্ডো +Name[ast]=Ventana privada nueva +Name[az]=Yeni Məxfi Pəncərə +Name[be]=Новае акно адасаблення +Name[bg]=Нов прозорец за поверително сърфиране +Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো +Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো +Name[br]=Prenestr merdeiñ prevez nevez +Name[brx]=गोदान प्राइभेट उइन्ड' +Name[bs]=Novi privatni prozor +Name[ca]=Finestra privada nova +Name[cak]=K'ak'a' ichinan tzuwäch +Name[cs]=Nové anonymní okno +Name[cy]=Ffenestr Breifat Newydd +Name[da]=Nyt privat vindue +Name[de]=Neues privates Fenster +Name[dsb]=Nowe priwatne wokno +Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης +Name[en_GB]=New Private Window +Name[en_US]=New Private Window +Name[en_ZA]=New Private Window +Name[eo]=Nova privata fenestro +Name[es_AR]=Nueva ventana privada +Name[es_CL]=Nueva ventana privada +Name[es_ES]=Nueva ventana privada +Name[es_MX]=Nueva ventana privada +Name[et]=Uus privaatne aken +Name[eu]=Leiho pribatu berria +Name[fa]=پنجره ناشناس جدید +Name[ff]=Henorde Suturo Hesere +Name[fi]=Uusi yksityinen ikkuna +Name[fr]=Nouvelle fenêtre de navigation privée +Name[fy_NL]=Nij priveefinster +Name[ga_IE]=Fuinneog Nua Phríobháideach +Name[gd]=Uinneag phrìobhaideach ùr +Name[gl]=Nova xanela privada +Name[gn]=Ovetã ñemi pyahu +Name[gu_IN]=નવી ખાનગી વિન્ડો +Name[he]=חלון פרטי חדש +Name[hi_IN]=नयी निजी विंडो +Name[hr]=Novi privatni prozor +Name[hsb]=Nowe priwatne wokno +Name[hu]=Új privát ablak +Name[hy_AM]=Սկսել Գաղտնի դիտարկում +Name[id]=Jendela Mode Pribadi Baru +Name[is]=Nýr huliðsgluggi +Name[it]=Nuova finestra anonima +Name[ja]=新しいプライベートウィンドウ +Name[ja_JP-mac]=新規プライベートウインドウ +Name[ka]=ახალი პირადი ფანჯარა +Name[kk]=Жаңа жекелік терезе +Name[km]=បង្អួចឯកជនថ្មី +Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ +Name[ko]=새 사생활 보호 모드 +Name[kok]=नवो खाजगी विंडो +Name[ks]=نْو پرایوٹ وینڈو& +Name[lij]=Neuvo barcon privou +Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່ +Name[lt]=Naujas privataus naršymo langas +Name[ltg]=Jauns privatais lūgs +Name[lv]=Jauns privātais logs +Name[mai]=नया निज विंडो (W) +Name[mk]=Нов приватен прозорец +Name[ml]=പുതിയ സ്വകാര്യ ജാലകം +Name[mr]=नवीन वैयक्तिक पटल +Name[ms]=Tetingkap Persendirian Baharu +Name[my]=New Private Window +Name[nb_NO]=Nytt privat vindu +Name[ne_NP]=नयाँ निजी सञ्झ्याल +Name[nl]=Nieuw privévenster +Name[nn_NO]=Nytt privat vindauge +Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ +Name[pl]=Nowe okno prywatne +Name[pt_BR]=Nova janela privativa +Name[pt_PT]=Nova janela privada +Name[rm]=Nova fanestra privata +Name[ro]=Fereastră privată nouă +Name[ru]=Новое приватное окно +Name[sat]=नावा निजेराक् विंडो (W ) +Name[si]=නව පුද්ගලික කවුළුව (W) +Name[sk]=Nové okno v režime Súkromné prehliadanie +Name[sl]=Novo zasebno okno +Name[son]=Sutura zanfun taaga +Name[sq]=Dritare e Re Private +Name[sr]=Нови приватан прозор +Name[sv_SE]=Nytt privat fönster +Name[ta]=புதிய தனிப்பட்ட சாளரம் +Name[te]=కొత్త ఆంతరంగిక విండో +Name[th]=หน้าต่างส่วนตัวใหม่ +Name[tr]=Yeni gizli pencere +Name[tsz]=Juchiiti eraatarakua jimpani +Name[uk]=Приватне вікно +Name[ur]=نیا نجی دریچہ +Name[uz]=Yangi maxfiy oyna +Name[vi]=Cửa sổ riêng tư mới +Name[wo]=Panlanteeru biir bu bees +Name[xh]=Ifestile yangasese entsha +Name[zh_CN]=新建隐私浏览窗口 +Name[zh_TW]=新增隱私視窗 +Exec=@EXEC@ --private-window %u |