Compare commits
17 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1eea2f39af | ||
|
|
fc7a209334 | ||
|
|
ff7593c8d6 | ||
|
|
c1248d7f6d | ||
|
|
a3cb6b624f | ||
|
|
01d3f8cb27 | ||
|
|
89f0ddae17 | ||
|
|
9463d2dc66 | ||
|
|
24d9697324 | ||
|
|
20d966d84e | ||
|
|
2496a29256 | ||
|
|
2ab88d19bb | ||
|
|
0851f329d7 | ||
|
|
f5fe9ba2d0 | ||
|
|
9fc20240d2 | ||
|
|
6012642b79 | ||
|
|
60336f10c4 |
88 changed files with 14395 additions and 7010 deletions
402
.gitignore
vendored
402
.gitignore
vendored
|
|
@ -345,405 +345,3 @@ firefox-3.6.4.source.tar.bz2
|
|||
/firefox-67.0.source.tar.xz
|
||||
/firefox-langpacks-67.0-20190515.tar.xz
|
||||
/firefox-langpacks-67.0-20190517.tar.xz
|
||||
/firefox-67.0.2.source.tar.xz
|
||||
/firefox-langpacks-67.0.2-20190611.tar.xz
|
||||
/firefox-langpacks-67.0.3-20190618.tar.xz
|
||||
/firefox-67.0.3.source.tar.xz
|
||||
/firefox-67.0.4.source.tar.xz
|
||||
/firefox-langpacks-67.0.4-20190620.tar.xz
|
||||
/firefox-68.0.source.tar.xz
|
||||
/firefox-langpacks-68.0-20190702.tar.xz
|
||||
/firefox-langpacks-68.0-20190708.tar.xz
|
||||
/firefox-68.0.1.source.tar.xz
|
||||
/firefox-langpacks-68.0.1-20190722.tar.xz
|
||||
/firefox-68.0.2.source.tar.xz
|
||||
/firefox-langpacks-68.0.2-20190814.tar.xz
|
||||
/firefox-69.0.source.tar.xz
|
||||
/firefox-langpacks-69.0-20190829.tar.xz
|
||||
/firefox-69.0.1.source.tar.xz
|
||||
/firefox-langpacks-69.0.1-20190918.tar.xz
|
||||
/firefox-langpacks-69.0.2-20191003.tar.xz
|
||||
/firefox-69.0.2.source.tar.xz
|
||||
/firefox-69.0.3.source.tar.xz
|
||||
/firefox-langpacks-69.0.3-20191010.tar.xz
|
||||
/firefox-70.0.source.tar.xz
|
||||
/firefox-langpacks-70.0-20191018.tar.xz
|
||||
/firefox-70.0.1.source.tar.xz
|
||||
/firefox-langpacks-70.0.1-20191101.tar.xz
|
||||
/firefox-71.0b12.source.tar.xz
|
||||
/firefox-71.0.source.tar.xz
|
||||
/firefox-langpacks-71.0-20191126.tar.xz
|
||||
/firefox-langpacks-71.0-20191202.tar.xz
|
||||
/firefox-72.0.source.tar.xz
|
||||
/firefox-langpacks-72.0-20200103.tar.xz
|
||||
/firefox-langpacks-72.0-20200106.tar.xz
|
||||
/firefox-72.0.1.source.tar.xz
|
||||
/firefox-langpacks-72.0.1-20200108.tar.xz
|
||||
/firefox-72.0.2.source.tar.xz
|
||||
/firefox-langpacks-72.0.2-20200120.tar.xz
|
||||
/firefox-73.0.source.tar.xz
|
||||
/firefox-langpacks-73.0-20200211.tar.xz
|
||||
/firefox-73.0.1.source.tar.xz
|
||||
/firefox-langpacks-73.0.1-20200220.tar.xz
|
||||
/firefox-74.0.source.tar.xz
|
||||
/firefox-langpacks-74.0-20200303.tar.xz
|
||||
/firefox-langpacks-74.0-20200309.tar.xz
|
||||
/firefox-langpacks-74.0-20200310.tar.xz
|
||||
/firefox-74.0.1.source.tar.xz
|
||||
/firefox-langpacks-74.0.1-20200404.tar.xz
|
||||
/firefox-75.0.source.tar.xz
|
||||
/firefox-langpacks-75.0-20200406.tar.xz
|
||||
/firefox-76.0.source.tar.xz
|
||||
/firefox-langpacks-76.0-20200502.tar.xz
|
||||
/firefox-76.0.1.source.tar.xz
|
||||
/firefox-langpacks-76.0.1-20200508.tar.xz
|
||||
/firefox-77.0.source.tar.xz
|
||||
/firefox-langpacks-77.0-20200529.tar.xz
|
||||
/firefox-langpacks-77.0-20200602.tar.xz
|
||||
/firefox-77.0.1.source.tar.xz
|
||||
/firefox-langpacks-77.0.1-20200603.tar.xz
|
||||
/firefox-78.0.source.tar.xz
|
||||
/firefox-langpacks-78.0-20200629.tar.xz
|
||||
/firefox-78.0.1.source.tar.xz
|
||||
/firefox-langpacks-78.0.1-20200701.tar.xz
|
||||
/firefox-78.0.2.source.tar.xz
|
||||
/firefox-langpacks-78.0.2-20200709.tar.xz
|
||||
/firefox-79.0.source.tar.xz
|
||||
/firefox-langpacks-79.0-20200727.tar.xz
|
||||
/firefox-80.0.source.tar.xz
|
||||
/firefox-langpacks-80.0-20200818.tar.xz
|
||||
/firefox-langpacks-80.0-20200820.tar.xz
|
||||
/firefox-80.0.1.source.tar.xz
|
||||
/firefox-langpacks-80.0.1-20200901.tar.xz
|
||||
/firefox-81.0.source.tar.xz
|
||||
/firefox-langpacks-81.0-20200915.tar.xz
|
||||
/firefox-langpacks-81.0-20200921.tar.xz
|
||||
/firefox-81.0.1.source.tar.xz
|
||||
/firefox-langpacks-81.0.1-20200930.tar.xz
|
||||
/firefox-81.0.2.source.tar.xz
|
||||
/firefox-langpacks-81.0.2-20201012.tar.xz
|
||||
/firefox-82.0.source.tar.xz
|
||||
/firefox-langpacks-82.0-20201015.tar.xz
|
||||
/firefox-82.0.1.source.tar.xz
|
||||
/firefox-langpacks-82.0.1-20201028.tar.xz
|
||||
/firefox-82.0.2.source.tar.xz
|
||||
/firefox-langpacks-82.0.2-20201029.tar.xz
|
||||
/firefox-82.0.3.source.tar.xz
|
||||
/firefox-langpacks-82.0.3-20201109.tar.xz
|
||||
/firefox-83.0.source.tar.xz
|
||||
/firefox-langpacks-83.0-20201112.tar.xz
|
||||
/firefox-langpacks-83.0-20201116.tar.xz
|
||||
/firefox-testing.tar.gz
|
||||
/site-packages.tar.gz
|
||||
/mochitest-python.tar.gz
|
||||
/firefox-84.0.source.tar.xz
|
||||
/firefox-langpacks-84.0-20201210.tar.xz
|
||||
/firefox-langpacks-84.0-20201214.tar.xz
|
||||
/firefox-84.0.1.source.tar.xz
|
||||
/firefox-langpacks-84.0.1-20201222.tar.xz
|
||||
/firefox-84.0.2.source.tar.xz
|
||||
/firefox-langpacks-84.0.2-20210106.tar.xz
|
||||
/firefox-85.0.source.tar.xz
|
||||
/firefox-langpacks-85.0-20210120.tar.xz
|
||||
/firefox-85.0.1.source.tar.xz
|
||||
/firefox-langpacks-85.0.1-20210208.tar.xz
|
||||
/firefox-86.0.source.tar.xz
|
||||
/firefox-langpacks-86.0-20210222.tar.xz
|
||||
/firefox-86.0.1.source.tar.xz
|
||||
/firefox-langpacks-86.0.1-20210312.tar.xz
|
||||
/firefox-87.0.source.tar.xz
|
||||
/firefox-langpacks-87.0-20210322.tar.xz
|
||||
/firefox-langpacks-88.0-20210419.tar.xz
|
||||
/firefox-88.0.source.tar.xz
|
||||
/firefox-88.0.1.source.tar.xz
|
||||
/firefox-langpacks-88.0.1-20210510.tar.xz
|
||||
/firefox-langpacks-89.0-20210601.tar.xz
|
||||
/firefox-89.0.source.tar.xz
|
||||
/firefox-89.0.2.source.tar.xz
|
||||
/firefox-langpacks-89.0.2-20210624.tar.xz
|
||||
/firefox-90.0.source.tar.xz
|
||||
/firefox-langpacks-90.0-20210712.tar.xz
|
||||
/firefox-90.0.1.source.tar.xz
|
||||
/firefox-langpacks-90.0.1-20210721.tar.xz
|
||||
/firefox-90.0.2.source.tar.xz
|
||||
/firefox-langpacks-90.0.2-20210722.tar.xz
|
||||
/firefox-91.0.source.tar.xz
|
||||
/firefox-langpacks-91.0-20210810.tar.xz
|
||||
/firefox-91.0.2.source.tar.xz
|
||||
/firefox-langpacks-91.0.2-20210826.tar.xz
|
||||
/firefox-langpacks-92.0-20210903.tar.xz
|
||||
/firefox-92.0.source.tar.xz
|
||||
/firefox-92.0.1.source.tar.xz
|
||||
/firefox-langpacks-92.0.1-20210927.tar.xz
|
||||
/firefox-93.0.source.tar.xz
|
||||
/firefox-langpacks-93.0-20210929.tar.xz
|
||||
/firefox-94.0.source.tar.xz
|
||||
/firefox-langpacks-94.0-20211031.tar.xz
|
||||
/firefox-94.0.2.source.tar.xz
|
||||
/firefox-langpacks-94.0.2-20211125.tar.xz
|
||||
/firefox-95.0.source.tar.xz
|
||||
/firefox-langpacks-95.0-20211203.tar.xz
|
||||
/firefox-95.0.2.source.tar.xz
|
||||
/firefox-langpacks-95.0.2-20211220.tar.xz
|
||||
/firefox-96.0.source.tar.xz
|
||||
/firefox-langpacks-96.0-20220111.tar.xz
|
||||
/firefox-langpacks-96.0.1-20220118.tar.xz
|
||||
/firefox-96.0.1.source.tar.xz
|
||||
/firefox-96.0.3.source.tar.xz
|
||||
/firefox-langpacks-96.0.3-20220131.tar.xz
|
||||
/firefox-97.0.source.tar.xz
|
||||
/firefox-langpacks-97.0-20220208.tar.xz
|
||||
/firefox-97.0.1.source.tar.xz
|
||||
/firefox-langpacks-97.0.1-20220218.tar.xz
|
||||
/firefox-98.0.source.tar.xz
|
||||
/firefox-langpacks-98.0-20220301.tar.xz
|
||||
/firefox-langpacks-98.0-20220304.tar.xz
|
||||
/firefox-langpacks-98.0-20220305.tar.xz
|
||||
/firefox-98.0.2.source.tar.xz
|
||||
/firefox-langpacks-98.0.2-20220331.tar.xz
|
||||
/firefox-99.0.source.tar.xz
|
||||
/firefox-langpacks-99.0-20220331.tar.xz
|
||||
/firefox-langpacks-99.0.1-20220413.tar.xz
|
||||
/firefox-99.0.1.source.tar.xz
|
||||
/firefox-100.0.source.tar.xz
|
||||
/firefox-langpacks-100.0-20220502.tar.xz
|
||||
/firefox-100.0.1.source.tar.xz
|
||||
/firefox-langpacks-100.0.1-20220518.tar.xz
|
||||
/firefox-100.0.2.source.tar.xz
|
||||
/firefox-langpacks-100.0.2-20220520.tar.xz
|
||||
/firefox-101.0.source.tar.xz
|
||||
/firefox-langpacks-101.0-20220530.tar.xz
|
||||
/firefox-101.0.1.source.tar.xz
|
||||
/firefox-langpacks-101.0.1-20220609.tar.xz
|
||||
/firefox-102.0.source.tar.xz
|
||||
/firefox-langpacks-102.0-20220628.tar.xz
|
||||
/firefox-103.0.source.tar.xz
|
||||
/firefox-langpacks-103.0-20220721.tar.xz
|
||||
/firefox-103.0.1.source.tar.xz
|
||||
/firefox-langpacks-103.0.1-20220802.tar.xz
|
||||
/firefox-103.0.2.source.tar.xz
|
||||
/firefox-langpacks-103.0.2-20220812.tar.xz
|
||||
/firefox-104.0.source.tar.xz
|
||||
/firefox-langpacks-104.0-20220816.tar.xz
|
||||
/firefox-langpacks-104.0-20220822.tar.xz
|
||||
/firefox-langpacks-104.0.1-20220830.tar.xz
|
||||
/firefox-104.0.1.source.tar.xz
|
||||
/firefox-104.0.2.source.tar.xz
|
||||
/firefox-langpacks-104.0.2-20220906.tar.xz
|
||||
/firefox-langpacks-105.0-20220920.tar.xz
|
||||
/firefox-105.0.source.tar.xz
|
||||
/firefox-105.0.1.source.tar.xz
|
||||
/firefox-langpacks-105.0.1-20220922.tar.xz
|
||||
/firefox-105.0.2.source.tar.xz
|
||||
/firefox-langpacks-105.0.2-20221005.tar.xz
|
||||
/firefox-langpacks-106.0-20221014.tar.xz
|
||||
/firefox-106.0.source.tar.xz
|
||||
/firefox-106.0.1.source.tar.xz
|
||||
/firefox-langpacks-106.0.1-20221023.tar.xz
|
||||
/firefox-106.0.3.source.tar.xz
|
||||
/firefox-langpacks-106.0.3-20221031.tar.xz
|
||||
/firefox-langpacks-107.0-20221114.tar.xz
|
||||
/firefox-107.0.source.tar.xz
|
||||
/firefox-107.0.1.source.tar.xz
|
||||
/firefox-langpacks-107.0.1-20221206.tar.xz
|
||||
/firefox-108.0.source.tar.xz
|
||||
/firefox-langpacks-108.0-20221206.tar.xz
|
||||
/firefox-langpacks-108.0-20221214.tar.xz
|
||||
/firefox-108.0.1.source.tar.xz
|
||||
/firefox-langpacks-108.0.1-20221218.tar.xz
|
||||
/firefox-108.0.2.source.tar.xz
|
||||
/firefox-langpacks-108.0.2-20230112.tar.xz
|
||||
/firefox-109.0.source.tar.xz
|
||||
/firefox-langpacks-109.0-20230111.tar.xz
|
||||
/firefox-109.0.1.source.tar.xz
|
||||
/firefox-langpacks-109.0.1-20230201.tar.xz
|
||||
/firefox-110.0.source.tar.xz
|
||||
/firefox-langpacks-110.0-20230210.tar.xz
|
||||
/firefox-langpacks-110.0-20230214.tar.xz
|
||||
/firefox-111.0.source.tar.xz
|
||||
/firefox-langpacks-111.0-20230320.tar.xz
|
||||
/firefox-langpacks-111.0.1-20230322.tar.xz
|
||||
/firefox-111.0.1.source.tar.xz
|
||||
/firefox-112.0.source.tar.xz
|
||||
/firefox-langpacks-112.0-20230405.tar.xz
|
||||
/firefox-langpacks-112.0-20230406.tar.xz
|
||||
/firefox-langpacks-112.0.1-20230417.tar.xz
|
||||
/firefox-112.0.1.source.tar.xz
|
||||
/firefox-langpacks-112.0.2-20230427.tar.xz
|
||||
/firefox-112.0.2.source.tar.xz
|
||||
/firefox-langpacks-113.0-20230509.tar.xz
|
||||
/firefox-113.0.source.tar.xz
|
||||
/firefox-langpacks-113.0.1-20230515.tar.xz
|
||||
/firefox-113.0.1.source.tar.xz
|
||||
/firefox-114.0.source.tar.xz
|
||||
/firefox-langpacks-114.0-20230605.tar.xz
|
||||
/firefox-langpacks-114.0.2-20230620.tar.xz
|
||||
/firefox-114.0.2.source.tar.xz
|
||||
/firefox-langpacks-115.0-20230629.tar.xz
|
||||
/firefox-115.0.source.tar.xz
|
||||
/firefox-langpacks-115.0-20230703.tar.xz
|
||||
/firefox-115.0.2.source.tar.xz
|
||||
/firefox-langpacks-115.0.2-20230717.tar.xz
|
||||
/firefox-116.0.source.tar.xz
|
||||
/firefox-langpacks-116.0-20230725.tar.xz
|
||||
/firefox-langpacks-116.0-20230731.tar.xz
|
||||
/firefox-116.0.1.source.tar.xz
|
||||
/firefox-langpacks-116.0.1-20230804.tar.xz
|
||||
/firefox-langpacks-116.0.2-20230807.tar.xz
|
||||
/firefox-116.0.2.source.tar.xz
|
||||
/firefox-langpacks-116.0.3-20230817.tar.xz
|
||||
/firefox-116.0.3.source.tar.xz
|
||||
/firefox-117.0.source.tar.xz
|
||||
/firefox-langpacks-117.0-20230828.tar.xz
|
||||
/firefox-117.0.1.source.tar.xz
|
||||
/firefox-langpacks-117.0.1-20230913.tar.xz
|
||||
/firefox-118.0.source.tar.xz
|
||||
/firefox-langpacks-118.0-20230925.tar.xz
|
||||
/firefox-langpacks-118.0.1-20230929.tar.xz
|
||||
/firefox-118.0.1.source.tar.xz
|
||||
/firefox-118.0.2.source.tar.xz
|
||||
/firefox-langpacks-118.0.2-20231010.tar.xz
|
||||
/dump_syms-vendor.tar.xz
|
||||
/firefox-langpacks-119.0.1-20231110.tar.xz
|
||||
/firefox-119.0.1.source.tar.xz
|
||||
/firefox-120.0.source.tar.xz
|
||||
/firefox-langpacks-120.0-20231114.tar.xz
|
||||
/firefox-langpacks-120.0-20231120.tar.xz
|
||||
/firefox-120.0.1.source.tar.xz
|
||||
/firefox-langpacks-120.0.1-20231201.tar.xz
|
||||
/firefox-121.0.source.tar.xz
|
||||
/firefox-langpacks-121.0-20231218.tar.xz
|
||||
/firefox-121.0.1.source.tar.xz
|
||||
/firefox-langpacks-121.0.1-20240112.tar.xz
|
||||
/firefox-122.0.source.tar.xz
|
||||
/firefox-langpacks-122.0-20240119.tar.xz
|
||||
/firefox-langpacks-122.0.1-20240213.tar.xz
|
||||
/firefox-122.0.1.source.tar.xz
|
||||
/firefox-langpacks-123.0-20240219.tar.xz
|
||||
/firefox-123.0.source.tar.xz
|
||||
/firefox-123.0.1.source.tar.xz
|
||||
/firefox-langpacks-123.0.1-20240307.tar.xz
|
||||
/firefox-124.0.source.tar.xz
|
||||
/firefox-langpacks-124.0-20240313.tar.xz
|
||||
/firefox-124.0.1.source.tar.xz
|
||||
/firefox-langpacks-124.0.1-20240322.tar.xz
|
||||
/wasi-sdk-20.tar.gz
|
||||
/wasi-sdk-20-1.fc39.src.rpm
|
||||
/firefox-124.0.2.source.tar.xz
|
||||
/firefox-langpacks-124.0.2-20240404.tar.xz
|
||||
/firefox-langpacks-125.0-20240409.tar.xz
|
||||
/firefox-125.0.source.tar.xz
|
||||
/firefox-125.0.2.source.tar.xz
|
||||
/firefox-langpacks-125.0.2-20240420.tar.xz
|
||||
/firefox-125.0.3.source.tar.xz
|
||||
/firefox-langpacks-125.0.3-20240429.tar.xz
|
||||
/firefox-126.0.source.tar.xz
|
||||
/firefox-langpacks-126.0-20240507.tar.xz
|
||||
/firefox-127.0.source.tar.xz
|
||||
/firefox-langpacks-127.0-20240610.tar.xz
|
||||
/firefox-langpacks-127.0.2-20240625.tar.xz
|
||||
/firefox-127.0.2.source.tar.xz
|
||||
/firefox-128.0.source.tar.xz
|
||||
/firefox-langpacks-128.0-20240702.tar.xz
|
||||
/firefox-langpacks-128.0-20240708.tar.xz
|
||||
/firefox-128.0.3.source.tar.xz
|
||||
/firefox-langpacks-128.0.3-20240729.tar.xz
|
||||
/firefox-129.0.source.tar.xz
|
||||
/firefox-langpacks-129.0-20240730.tar.xz
|
||||
/firefox-langpacks-129.0-20240802.tar.xz
|
||||
/firefox-129.0.2.source.tar.xz
|
||||
/firefox-langpacks-192.0.2-20240820.tar.xz
|
||||
/firefox-langpacks-129.0.2-20240820.tar.xz
|
||||
/firefox-langpacks-130.0-20240828.tar.xz
|
||||
/firefox-130.0.source.tar.xz
|
||||
/firefox-130.0.1.source.tar.xz
|
||||
/firefox-langpacks-130.0.1-20240918.tar.xz
|
||||
/firefox-langpacks-131.0-20240924.tar.xz
|
||||
/firefox-131.0.source.tar.xz
|
||||
/firefox-131.0.2.source.tar.xz
|
||||
/firefox-langpacks-131.0.2-20241009.tar.xz
|
||||
/firefox-131.0.3.source.tar.xz
|
||||
/firefox-langpacks-131.0.3-20241015.tar.xz
|
||||
/firefox-132.0.source.tar.xz
|
||||
/firefox-langpacks-132.0-20241023.tar.xz
|
||||
/firefox-132.0.1.source.tar.xz
|
||||
/firefox-langpacks-132.0.1-20241105.tar.xz
|
||||
/firefox-langpacks-132.0.2-20241115.tar.xz
|
||||
/firefox-132.0.2.source.tar.xz
|
||||
/firefox-133.0.source.tar.xz
|
||||
/firefox-langpacks-133.0-20241122.tar.xz
|
||||
/firefox-langpacks-133.0.3-20241211.tar.xz
|
||||
/firefox-133.0.3.source.tar.xz
|
||||
/firefox-langpacks-134.0-20250102.tar.xz
|
||||
/firefox-134.0.source.tar.xz
|
||||
/firefox-langpacks-134.0.1-20250115.tar.xz
|
||||
/firefox-134.0.1.source.tar.xz
|
||||
/firefox-134.0.2.source.tar.xz
|
||||
/firefox-langpacks-134.0.2-20250122.tar.xz
|
||||
/wasi-sdk-25.tar.gz
|
||||
/wasm-component-ld-vendor.tar.xz
|
||||
/firefox-135.0.source.tar.xz
|
||||
/firefox-langpacks-135.0-20250204.tar.xz
|
||||
/firefox-136.0.source.tar.xz
|
||||
/firefox-langpacks-136.0-20250225.tar.xz
|
||||
/firefox-langpacks-136.0-20250228.tar.xz
|
||||
/firefox-136.0.1.source.tar.xz
|
||||
/firefox-langpacks-136.0.1-20250312.tar.xz
|
||||
/firefox-langpacks-136.0.2-20250319.tar.xz
|
||||
/firefox-136.0.2.source.tar.xz
|
||||
/firefox-136.0.3.source.tar.xz
|
||||
/firefox-langpacks-136.0.3-20250325.tar.xz
|
||||
/firefox-langpacks-137.0-20250326.tar.xz
|
||||
/firefox-137.0.source.tar.xz
|
||||
/firefox-langpacks-137.0-20250331.tar.xz
|
||||
/firefox-137.0.1.source.tar.xz
|
||||
/firefox-langpacks-137.0.1-20250414.tar.xz
|
||||
/firefox-138.0.source.tar.xz
|
||||
/firefox-langpacks-138.0-20250422.tar.xz
|
||||
/firefox-langpacks-138.0.1-20250501.tar.xz
|
||||
/firefox-138.0.1.source.tar.xz
|
||||
/firefox-138.0.3.source.tar.xz
|
||||
/firefox-langpacks-138.0.3-20250512.tar.xz
|
||||
/firefox-langpacks-138.0.4-20250519.tar.xz
|
||||
/firefox-138.0.4.source.tar.xz
|
||||
/firefox-139.0.source.tar.xz
|
||||
/firefox-langpacks-139.0-20250527.tar.xz
|
||||
/firefox-langpacks-139.0.4-20250610.tar.xz
|
||||
/firefox-139.0.4.source.tar.xz
|
||||
/firefox-140.0.source.tar.xz
|
||||
/firefox-langpacks-140.0-20250617.tar.xz
|
||||
/firefox-140.0.1.source.tar.xz
|
||||
/firefox-langpacks-140.0.1-20250627.tar.xz
|
||||
/firefox-140.0.4.source.tar.xz
|
||||
/firefox-langpacks-140.0.4-20250708.tar.xz
|
||||
/firefox-141.0.source.tar.xz
|
||||
/firefox-langpacks-141.0-20250717.tar.xz
|
||||
/firefox-langpacks-141.0-20250718.tar.xz
|
||||
/firefox-langpacks-141.2.0-20250806.tar.xz
|
||||
/firefox-141.0.2.source.tar.xz
|
||||
/firefox-langpacks-141.0.2-20250806.tar.xz
|
||||
/firefox-langpacks-141.0.3-20250811.tar.xz
|
||||
/firefox-141.0.3.source.tar.xz
|
||||
/firefox-142.0.source.tar.xz
|
||||
/firefox-langpacks-142.0-20250812.tar.xz
|
||||
/firefox-langpacks-142.0.1-20250827.tar.xz
|
||||
/firefox-142.0.1.source.tar.xz
|
||||
/firefox-143.0.1.source.tar.xz
|
||||
/firefox-langpacks-143.0.1-20250919.tar.xz
|
||||
/firefox-langpacks-143.0.3-20250930.tar.xz
|
||||
/firefox-143.0.3.source.tar.xz
|
||||
/firefox-langpacks-144.0-20251009.tar.xz
|
||||
/firefox-144.0.source.tar.xz
|
||||
/firefox-langpacks-144.0-20251010.tar.xz
|
||||
/firefox-145.0.source.tar.xz
|
||||
/firefox-langpacks-145.0-20251105.tar.xz
|
||||
/firefox-langpacks-145.0-20251111.tar.xz
|
||||
/firefox-145.0.1.source.tar.xz
|
||||
/firefox-langpacks-145.0.1-20251119.tar.xz
|
||||
/firefox-146.0.source.tar.xz
|
||||
/firefox-langpacks-146.0-20251202.tar.xz
|
||||
/firefox-langpacks-146.0-20251208.tar.xz
|
||||
/firefox-146.0.1.source.tar.xz
|
||||
/firefox-langpacks-146.0.1-20251219.tar.xz
|
||||
/firefox-langpacks-147.0-20260106.tar.xz
|
||||
/firefox-147.0.source.tar.xz
|
||||
|
|
|
|||
|
|
@ -1,31 +0,0 @@
|
|||
diff -up firefox-142.0/build/unix/stdc++compat/stdc++compat.cpp.0001-GLIBCXX-fix-for-GCC-12 firefox-142.0/build/unix/stdc++compat/stdc++compat.cpp
|
||||
--- firefox-142.0/build/unix/stdc++compat/stdc++compat.cpp.0001-GLIBCXX-fix-for-GCC-12 2025-08-11 20:04:27.000000000 +0200
|
||||
+++ firefox-142.0/build/unix/stdc++compat/stdc++compat.cpp 2025-08-14 15:02:05.496137133 +0200
|
||||
@@ -24,6 +24,7 @@
|
||||
GLIBCXX_3.4.27 is from gcc 10
|
||||
GLIBCXX_3.4.28 is from gcc 10
|
||||
GLIBCXX_3.4.29 is from gcc 11
|
||||
+ GLIBCXX_3.4.30 is from gcc 12
|
||||
|
||||
This file adds the necessary compatibility tricks to avoid symbols with
|
||||
version GLIBCXX_3.4.20 and bigger, keeping binary compatibility with
|
||||
@@ -94,6 +95,19 @@ void operator delete(void* ptr, size_t s
|
||||
}
|
||||
# endif
|
||||
|
||||
+#if _GLIBCXX_RELEASE >= 12
|
||||
+namespace std {
|
||||
+
|
||||
+/* This avoids the GLIBCXX_3.4.30 symbol version. */
|
||||
+void __attribute__((weak))
|
||||
+__glibcxx_assert_fail(const char* __file, int __line, const char* __function,
|
||||
+ const char* __condition) {
|
||||
+ MOZ_CRASH();
|
||||
+}
|
||||
+
|
||||
+} // namespace std
|
||||
+#endif
|
||||
+
|
||||
/* While we generally don't build with exceptions, we have some host tools
|
||||
* that do use them. libstdc++ from GCC 5.0 added exception constructors with
|
||||
* char const* argument. Older versions only have a constructor with
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,279 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Sirringhaus <msirringhaus@suse.de>
|
||||
Date: Tue, 8 Aug 2023 16:18:24 +0300
|
||||
Subject: [PATCH] Add KDE integration to Firefox
|
||||
|
||||
Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751
|
||||
Bug: https://bugzilla.suse.com/show_bug.cgi?id=170055
|
||||
|
||||
How to apply this patch:
|
||||
|
||||
1. Import and apply it
|
||||
2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul
|
||||
3. Find editBookmarkPanelDoneButton
|
||||
4. Replace #ifndef with #ifdef in the line above (this hanges the button order from Gnome-style to KDE-style)
|
||||
5. hg qrefresh
|
||||
---
|
||||
browser/components/preferences/main.js | 18 +++
|
||||
browser/components/shell/moz.build | 2 +
|
||||
.../components/shell/nsKDEShellService.cpp | 109 ++++++++++++++++++
|
||||
browser/components/shell/nsKDEShellService.h | 32 +++++
|
||||
.../components/shell/nsUnixShellService.cpp | 22 ++++
|
||||
browser/components/shell/nsUnixShellService.h | 15 +++
|
||||
6 files changed, 198 insertions(+)
|
||||
create mode 100644 browser/components/shell/nsKDEShellService.cpp
|
||||
create mode 100644 browser/components/shell/nsKDEShellService.h
|
||||
create mode 100644 browser/components/shell/nsUnixShellService.cpp
|
||||
create mode 100644 browser/components/shell/nsUnixShellService.h
|
||||
|
||||
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
|
||||
index 820e46fb006567bfdf93e2a46da5e3c07d42bf10..57d1c21bdecc2d55d0bed30246e684d3b97ad7fa 100644
|
||||
--- a/browser/components/preferences/main.js
|
||||
+++ b/browser/components/preferences/main.js
|
||||
@@ -294,6 +294,13 @@ var gMainPane = {
|
||||
}, backoffTimes[this._backoffIndex]);
|
||||
}
|
||||
|
||||
+ var env = Components.classes["@mozilla.org/process/environment;1"]
|
||||
+ .getService(Components.interfaces.nsIEnvironment);
|
||||
+ var kde_session = 0;
|
||||
+ if (env.get('KDE_FULL_SESSION') == "true") {
|
||||
+ kde_session = 1;
|
||||
+ }
|
||||
+
|
||||
this.initBrowserContainers();
|
||||
this.buildContentProcessCountMenuList();
|
||||
|
||||
@@ -1727,6 +1734,17 @@ var gMainPane = {
|
||||
}
|
||||
try {
|
||||
shellSvc.setDefaultBrowser(true, false);
|
||||
+ if (kde_session == 1) {
|
||||
+ var shellObj = Components.classes["@mozilla.org/file/local;1"]
|
||||
+ .createInstance(Components.interfaces.nsILocalFile);
|
||||
+ shellObj.initWithPath("/usr/bin/kwriteconfig");
|
||||
+ var process = Components.classes["@mozilla.org/process/util;1"]
|
||||
+ .createInstance(Components.interfaces.nsIProcess);
|
||||
+ process.init(shellObj);
|
||||
+ var args = ["--file", "kdeglobals", "--group", "General", "--key",
|
||||
+ "BrowserApplication", "firefox"];
|
||||
+ process.run(false, args, args.length);
|
||||
+ }
|
||||
} catch (ex) {
|
||||
console.error(ex);
|
||||
return;
|
||||
diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build
|
||||
index eb88cb287dc3f04022b74b978666118bbd5fa6b2..95277533781a7224d108e3c45731a6d9a89ba1a0 100644
|
||||
--- a/browser/components/shell/moz.build
|
||||
+++ b/browser/components/shell/moz.build
|
||||
@@ -36,6 +36,8 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
|
||||
|
||||
SOURCES += [
|
||||
"nsGNOMEShellService.cpp",
|
||||
+ "nsKDEShellService.cpp",
|
||||
+ "nsUnixShellService.cpp",
|
||||
]
|
||||
if CONFIG["MOZ_ENABLE_DBUS"]:
|
||||
SOURCES += [
|
||||
diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..152a3aca87ea73477bc75c4e93c01e5a52dda102
|
||||
--- /dev/null
|
||||
+++ b/browser/components/shell/nsKDEShellService.cpp
|
||||
@@ -0,0 +1,109 @@
|
||||
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
+
|
||||
+#include "mozilla/ArrayUtils.h"
|
||||
+
|
||||
+#include "nsCOMPtr.h"
|
||||
+#include "nsKDEShellService.h"
|
||||
+#include "nsShellService.h"
|
||||
+#include "nsKDEUtils.h"
|
||||
+#include "nsIPrefService.h"
|
||||
+#include "nsIProcess.h"
|
||||
+#include "nsIFile.h"
|
||||
+#include "nsServiceManagerUtils.h"
|
||||
+#include "nsComponentManagerUtils.h"
|
||||
+#include "nsIMutableArray.h"
|
||||
+#include "nsISupportsPrimitives.h"
|
||||
+#include "nsArrayUtils.h"
|
||||
+
|
||||
+using namespace mozilla;
|
||||
+
|
||||
+nsresult
|
||||
+nsKDEShellService::Init()
|
||||
+{
|
||||
+ if( !nsKDEUtils::kdeSupport())
|
||||
+ return NS_ERROR_NOT_AVAILABLE;
|
||||
+ return NS_OK;
|
||||
+}
|
||||
+
|
||||
+NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService)
|
||||
+
|
||||
+NS_IMETHODIMP
|
||||
+nsKDEShellService::IsDefaultBrowser(bool aForAllTypes,
|
||||
+ bool* aIsDefaultBrowser)
|
||||
+{
|
||||
+ *aIsDefaultBrowser = false;
|
||||
+
|
||||
+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
|
||||
+ if (!command)
|
||||
+ return NS_ERROR_FAILURE;
|
||||
+
|
||||
+ nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
|
||||
+ if (!str)
|
||||
+ return NS_ERROR_FAILURE;
|
||||
+
|
||||
+ str->SetData("ISDEFAULTBROWSER"_ns);
|
||||
+ command->AppendElement( str );
|
||||
+
|
||||
+ if( nsKDEUtils::command( command ))
|
||||
+ *aIsDefaultBrowser = true;
|
||||
+ return NS_OK;
|
||||
+}
|
||||
+
|
||||
+NS_IMETHODIMP
|
||||
+nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes,
|
||||
+ bool aForAllUsers)
|
||||
+{
|
||||
+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
|
||||
+ if (!command)
|
||||
+ return NS_ERROR_FAILURE;
|
||||
+
|
||||
+ nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
|
||||
+ nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
|
||||
+ if (!cmdstr || !paramstr)
|
||||
+ return NS_ERROR_FAILURE;
|
||||
+
|
||||
+ cmdstr->SetData("SETDEFAULTBROWSER"_ns);
|
||||
+ command->AppendElement( cmdstr );
|
||||
+
|
||||
+ paramstr->SetData( aClaimAllTypes ? "ALLTYPES"_ns : "NORMAL"_ns );
|
||||
+ command->AppendElement( paramstr );
|
||||
+
|
||||
+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
|
||||
+}
|
||||
+
|
||||
+NS_IMETHODIMP
|
||||
+nsKDEShellService::GetCanSetDesktopBackground(bool* aResult)
|
||||
+{
|
||||
+ *aResult = true;
|
||||
+ return NS_OK;
|
||||
+}
|
||||
+
|
||||
+NS_IMETHODIMP
|
||||
+nsKDEShellService::SetDesktopBackground(dom::Element* aElement,
|
||||
+ int32_t aPosition,
|
||||
+ const nsACString& aImageName)
|
||||
+{
|
||||
+ return NS_ERROR_NOT_IMPLEMENTED;
|
||||
+}
|
||||
+
|
||||
+NS_IMETHODIMP
|
||||
+nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor)
|
||||
+{
|
||||
+ return NS_ERROR_NOT_IMPLEMENTED;
|
||||
+}
|
||||
+
|
||||
+NS_IMETHODIMP
|
||||
+nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor)
|
||||
+{
|
||||
+ return NS_ERROR_NOT_IMPLEMENTED;
|
||||
+}
|
||||
+
|
||||
+NS_IMETHODIMP
|
||||
+nsKDEShellService::IsDefaultForScheme(nsTSubstring<char> const& aScheme, bool* aIsDefaultBrowser)
|
||||
+{
|
||||
+ return NS_ERROR_NOT_IMPLEMENTED;
|
||||
+}
|
||||
+
|
||||
diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..8b0bb19164352453cfa453dd87c19263160b9ad8
|
||||
--- /dev/null
|
||||
+++ b/browser/components/shell/nsKDEShellService.h
|
||||
@@ -0,0 +1,32 @@
|
||||
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
+
|
||||
+#ifndef nskdeshellservice_h____
|
||||
+#define nskdeshellservice_h____
|
||||
+
|
||||
+#include "nsIGNOMEShellService.h"
|
||||
+#include "nsToolkitShellService.h"
|
||||
+#include "nsString.h"
|
||||
+#include "mozilla/Attributes.h"
|
||||
+
|
||||
+class nsKDEShellService final : public nsIGNOMEShellService,
|
||||
+ public nsToolkitShellService
|
||||
+{
|
||||
+public:
|
||||
+ nsKDEShellService() : mCheckedThisSession(false) { }
|
||||
+
|
||||
+ NS_DECL_ISUPPORTS
|
||||
+ NS_DECL_NSISHELLSERVICE
|
||||
+ NS_DECL_NSIGNOMESHELLSERVICE
|
||||
+
|
||||
+ nsresult Init();
|
||||
+
|
||||
+private:
|
||||
+ ~nsKDEShellService() {}
|
||||
+
|
||||
+ bool mCheckedThisSession;
|
||||
+};
|
||||
+
|
||||
+#endif // nskdeshellservice_h____
|
||||
diff --git a/browser/components/shell/nsUnixShellService.cpp b/browser/components/shell/nsUnixShellService.cpp
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..abf266ebdc52e136f495911da3454e69c770c6db
|
||||
--- /dev/null
|
||||
+++ b/browser/components/shell/nsUnixShellService.cpp
|
||||
@@ -0,0 +1,22 @@
|
||||
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
+
|
||||
+
|
||||
+#include "nsUnixShellService.h"
|
||||
+#include "nsGNOMEShellService.h"
|
||||
+#include "nsKDEShellService.h"
|
||||
+#include "nsKDEUtils.h"
|
||||
+#include "mozilla/ModuleUtils.h"
|
||||
+
|
||||
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init)
|
||||
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init)
|
||||
+
|
||||
+NS_IMETHODIMP
|
||||
+nsUnixShellServiceConstructor(REFNSIID aIID, void **aResult)
|
||||
+{
|
||||
+ if( nsKDEUtils::kdeSupport())
|
||||
+ return nsKDEShellServiceConstructor( aIID, aResult );
|
||||
+ return nsGNOMEShellServiceConstructor( aIID, aResult );
|
||||
+}
|
||||
diff --git a/browser/components/shell/nsUnixShellService.h b/browser/components/shell/nsUnixShellService.h
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..26b5dbac47dd9a8ec1fcb6c93575cca750692735
|
||||
--- /dev/null
|
||||
+++ b/browser/components/shell/nsUnixShellService.h
|
||||
@@ -0,0 +1,15 @@
|
||||
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
+
|
||||
+
|
||||
+#ifndef nsunixshellservice_h____
|
||||
+#define nsunixshellservice_h____
|
||||
+
|
||||
+#include "nsIGNOMEShellService.h"
|
||||
+
|
||||
+NS_IMETHODIMP
|
||||
+nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult);
|
||||
+
|
||||
+#endif // nsunixshellservice_h____
|
||||
19
Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch
Normal file
19
Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
diff -up firefox-60.0/mfbt/LinuxSignal.h.mozilla-1238661 firefox-60.0/mfbt/LinuxSignal.h
|
||||
--- firefox-60.0/mfbt/LinuxSignal.h.mozilla-1238661 2018-04-27 08:55:38.848241768 +0200
|
||||
+++ firefox-60.0/mfbt/LinuxSignal.h 2018-04-27 09:06:47.946769859 +0200
|
||||
@@ -25,10 +25,13 @@ SignalTrampoline(int aSignal, siginfo_t*
|
||||
"nop; nop; nop; nop"
|
||||
: : : "memory");
|
||||
|
||||
+ // Because the assembler may generate additional insturctions below, we
|
||||
+ // need to ensure NOPs are inserted first by separating them out above.
|
||||
+
|
||||
asm volatile (
|
||||
- "b %0"
|
||||
+ "bx %0"
|
||||
:
|
||||
- : "X"(H)
|
||||
+ : "r"(H), "l"(aSignal), "l"(aInfo), "l"(aContext)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
74
bug1375074-save-restore-x28.patch
Normal file
74
bug1375074-save-restore-x28.patch
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
# HG changeset patch
|
||||
# User Lars T Hansen <lhansen@mozilla.com>
|
||||
# Date 1519822672 -3600
|
||||
# Wed Feb 28 13:57:52 2018 +0100
|
||||
# Node ID 672f0415217b202ae59a930769dffd9d6ba6b87c
|
||||
# Parent 825fd04dacc6297d3a980ec4184079405950b35d
|
||||
Bug 1375074 - Save and restore non-volatile x28 on ARM64 for generated unboxed object constructor.
|
||||
|
||||
diff --git a/js/src/jit-test/tests/bug1375074.js b/js/src/jit-test/tests/bug1375074.js
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/js/src/jit-test/tests/bug1375074.js
|
||||
@@ -0,0 +1,18 @@
|
||||
+// This forces the VM to start creating unboxed objects and thus stresses a
|
||||
+// particular path into generated code for a specialized unboxed object
|
||||
+// constructor.
|
||||
+
|
||||
+var K = 2000; // 2000 should be plenty
|
||||
+var s = "[";
|
||||
+var i;
|
||||
+for ( i=0; i < K-1; i++ )
|
||||
+ s = s + `{"i":${i}},`;
|
||||
+s += `{"i":${i}}]`;
|
||||
+var v = JSON.parse(s);
|
||||
+
|
||||
+assertEq(v.length == K, true);
|
||||
+
|
||||
+for ( i=0; i < K; i++) {
|
||||
+ assertEq(v[i] instanceof Object, true);
|
||||
+ assertEq(v[i].i, i);
|
||||
+}
|
||||
diff --git a/js/src/vm/UnboxedObject.cpp b/js/src/vm/UnboxedObject.cpp
|
||||
--- a/js/src/vm/UnboxedObject.cpp
|
||||
+++ b/js/src/vm/UnboxedObject.cpp
|
||||
@@ -95,7 +95,15 @@ UnboxedLayout::makeConstructorCode(JSCon
|
||||
#endif
|
||||
|
||||
#ifdef JS_CODEGEN_ARM64
|
||||
- // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing.
|
||||
+ // ARM64 communicates stack address via sp, but uses a pseudo-sp (PSP) for
|
||||
+ // addressing. The register we use for PSP may however also be used by
|
||||
+ // calling code, and it is nonvolatile, so save it. Do this as a special
|
||||
+ // case first because the generic save/restore code needs the PSP to be
|
||||
+ // initialized already.
|
||||
+ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64()));
|
||||
+ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex));
|
||||
+
|
||||
+ // Initialize the PSP from the SP.
|
||||
masm.initStackPtr();
|
||||
#endif
|
||||
|
||||
@@ -233,7 +241,22 @@ UnboxedLayout::makeConstructorCode(JSCon
|
||||
masm.pop(ScratchDoubleReg);
|
||||
masm.PopRegsInMask(savedNonVolatileRegisters);
|
||||
|
||||
+#ifdef JS_CODEGEN_ARM64
|
||||
+ // Now restore the value that was in the PSP register on entry, and return.
|
||||
+
|
||||
+ // Obtain the correct SP from the PSP.
|
||||
+ masm.Mov(sp, PseudoStackPointer64);
|
||||
+
|
||||
+ // Restore the saved value of the PSP register, this value is whatever the
|
||||
+ // caller had saved in it, not any actual SP value, and it must not be
|
||||
+ // overwritten subsequently.
|
||||
+ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex));
|
||||
+
|
||||
+ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong.
|
||||
+ masm.Ret(vixl::lr);
|
||||
+#else
|
||||
masm.abiret();
|
||||
+#endif
|
||||
|
||||
masm.bind(&failureStoreOther);
|
||||
|
||||
|
|
@ -1,33 +1,12 @@
|
|||
diff -up firefox-134.0-build/firefox-134.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h.aarch64-skia firefox-134.0-build/firefox-134.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h
|
||||
--- firefox-134.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h.aarch64-skia 2024-12-30 19:30:46.000000000 +0100
|
||||
+++ firefox-134.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h 2025-01-02 20:51:07.855087265 +0100
|
||||
@@ -151,7 +151,7 @@ SI U32 to_fixed(F f) { return (U32)cast
|
||||
|
||||
|
||||
SI F F_from_Half(U16 half) {
|
||||
-#if defined(USING_NEON_F16C)
|
||||
+#if 0 // defined(USING_NEON_F16C)
|
||||
return vcvt_f32_f16((float16x4_t)half);
|
||||
#elif defined(USING_AVX512F)
|
||||
return (F)_mm512_cvtph_ps((__m256i)half);
|
||||
@@ -178,7 +178,7 @@ SI F F_from_Half(U16 half) {
|
||||
__attribute__((no_sanitize("unsigned-integer-overflow")))
|
||||
#endif
|
||||
SI U16 Half_from_F(F f) {
|
||||
-#if defined(USING_NEON_F16C)
|
||||
+#if 0 //defined(USING_NEON_F16C)
|
||||
return (U16)vcvt_f16_f32(f);
|
||||
#elif defined(USING_AVX512F)
|
||||
return (U16)_mm512_cvtps_ph((__m512 )f, _MM_FROUND_CUR_DIRECTION );
|
||||
diff -up firefox-134.0-build/firefox-134.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia firefox-134.0-build/firefox-134.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h
|
||||
--- firefox-134.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia 2025-01-02 20:51:07.856087299 +0100
|
||||
+++ firefox-134.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h 2025-01-02 23:09:47.802283444 +0100
|
||||
@@ -1421,7 +1421,7 @@ SI F from_half(U16 h) {
|
||||
diff -up firefox-61.0/gfx/skia/skia/src/jumper/SkJumper_stages.cpp.aarch64-skia firefox-61.0/gfx/skia/skia/src/jumper/SkJumper_stages.cpp
|
||||
--- firefox-61.0/gfx/skia/skia/src/jumper/SkJumper_stages.cpp.aarch64-skia 2018-06-20 09:19:11.411939714 +0200
|
||||
+++ firefox-61.0/gfx/skia/skia/src/jumper/SkJumper_stages.cpp 2018-06-20 09:23:36.831919894 +0200
|
||||
@@ -686,7 +686,7 @@ SI F from_half(U16 h) {
|
||||
}
|
||||
|
||||
SI U16 to_half(F f) {
|
||||
-#if defined(SKRP_CPU_NEON) && defined(SK_CPU_ARM64)
|
||||
+#if 0 // defined(SKRP_CPU_NEON) && defined(SK_CPU_ARM64)
|
||||
return (U16)vcvt_f16_f32(f);
|
||||
-#if defined(JUMPER_IS_NEON) && defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
|
||||
+#if 0 && defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
|
||||
return vcvt_f16_f32(f);
|
||||
|
||||
#elif defined(SKRP_CPU_SKX)
|
||||
#elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
13
build-cacheFlush-missing.patch
Normal file
13
build-cacheFlush-missing.patch
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
diff -up firefox-55.0.3/js/src/jit/ExecutableAllocator.h.wasm firefox-55.0.3/js/src/jit/ExecutableAllocator.h
|
||||
--- firefox-55.0.3/js/src/jit/ExecutableAllocator.h.wasm 2017-09-05 11:32:12.235909468 +0200
|
||||
+++ firefox-55.0.3/js/src/jit/ExecutableAllocator.h 2017-09-05 11:32:46.157916575 +0200
|
||||
@@ -219,7 +219,7 @@ class ExecutableAllocator
|
||||
|
||||
static void poisonCode(JSRuntime* rt, JitPoisonRangeVector& ranges);
|
||||
|
||||
-#if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64) || defined(JS_SIMULATOR_ARM64)
|
||||
+#if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64) || defined(JS_SIMULATOR_ARM64) || defined(JS_CODEGEN_NONE)
|
||||
static void cacheFlush(void*, size_t)
|
||||
{
|
||||
}
|
||||
diff -up firefox-55.0.3/js/src/jit-test/tests/wasm/bench/wasm_box2d.wasm firefox-55.0.3/js/src/jit-test/tests/wasm/bench/wasm_box2d
|
||||
4946
build-cubeb-pulse-arm.patch
Normal file
4946
build-cubeb-pulse-arm.patch
Normal file
File diff suppressed because it is too large
Load diff
12
build-disable-elfhack.patch
Normal file
12
build-disable-elfhack.patch
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
diff -up firefox-65.0/toolkit/moz.configure.disable-elfhack firefox-65.0/toolkit/moz.configure
|
||||
--- firefox-65.0/toolkit/moz.configure.disable-elfhack 2019-01-28 14:16:48.530345132 +0100
|
||||
+++ firefox-65.0/toolkit/moz.configure 2019-01-28 14:18:03.231029682 +0100
|
||||
@@ -1036,7 +1036,7 @@ with only_when('--enable-compile-environ
|
||||
help='{Enable|Disable} elf hacks')
|
||||
|
||||
set_config('USE_ELF_HACK',
|
||||
- depends_if('--enable-elf-hack')(lambda _: True))
|
||||
+ depends_if('--enable-elf-hack')(lambda _: False))
|
||||
|
||||
|
||||
@depends(check_build_environment)
|
||||
12
build-icu-big-endian.patch
Normal file
12
build-icu-big-endian.patch
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
diff -up firefox-61.0/build/autoconf/icu.m4.icu firefox-61.0/build/autoconf/icu.m4
|
||||
--- firefox-61.0/build/autoconf/icu.m4.icu 2018-06-20 09:03:17.957565445 +0200
|
||||
+++ firefox-61.0/build/autoconf/icu.m4 2018-06-20 09:08:28.159403451 +0200
|
||||
@@ -77,7 +77,7 @@ if test -n "$USE_ICU"; then
|
||||
# TODO: the l is actually endian-dependent
|
||||
# We could make this set as 'l' or 'b' for little or big, respectively,
|
||||
# but we'd need to check in a big-endian version of the file.
|
||||
- ICU_DATA_FILE="icudt${version}l.dat"
|
||||
+ ICU_DATA_FILE="icudt${version}b.dat"
|
||||
fi
|
||||
|
||||
AC_SUBST(MOZ_ICU_VERSION)
|
||||
12
build-jit-atomic-always-lucky.patch
Normal file
12
build-jit-atomic-always-lucky.patch
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
diff -up firefox-60.5.0/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-60.5.0/js/src/jit/AtomicOperations.h
|
||||
--- firefox-60.5.0/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2019-01-22 10:20:27.993697161 +0100
|
||||
+++ firefox-60.5.0/js/src/jit/AtomicOperations.h 2019-01-22 10:23:15.337873762 +0100
|
||||
@@ -394,7 +394,7 @@ inline bool AtomicOperations::isLockfree
|
||||
#elif defined(__s390__) || defined(__s390x__)
|
||||
#include "jit/none/AtomicOperations-feeling-lucky.h"
|
||||
#else
|
||||
-#error "No AtomicOperations support provided for this platform"
|
||||
+#include "jit/none/AtomicOperations-feeling-lucky.h"
|
||||
#endif
|
||||
|
||||
#endif // jit_AtomicOperations_h
|
||||
51
build-ppc-jit.patch
Normal file
51
build-ppc-jit.patch
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
diff -up firefox-55.0/js/src/jit/MIR.h.old firefox-55.0/js/src/jit/MIR.h
|
||||
--- firefox-55.0/js/src/jit/MIR.h.old 2017-08-08 14:04:44.528460099 +0200
|
||||
+++ firefox-55.0/js/src/jit/MIR.h 2017-08-08 14:05:11.045364831 +0200
|
||||
@@ -12434,7 +12434,7 @@ class MNearbyInt
|
||||
TRIVIAL_NEW_WRAPPERS
|
||||
|
||||
static bool HasAssemblerSupport(RoundingMode mode) {
|
||||
- return Assembler::HasRoundInstruction(mode);
|
||||
+ return false;
|
||||
}
|
||||
|
||||
RoundingMode roundingMode() const { return roundingMode_; }
|
||||
diff -up firefox-55.0/js/src/jit/ExecutableAllocator.h.old firefox-55.0/js/src/jit/ExecutableAllocator.h
|
||||
--- firefox-55.0/js/src/jit/ExecutableAllocator.h.old 2017-08-09 09:24:18.784983505 +0200
|
||||
+++ firefox-55.0/js/src/jit/ExecutableAllocator.h 2017-08-09 09:28:01.471100075 +0200
|
||||
@@ -307,6 +307,10 @@ class ExecutableAllocator
|
||||
{
|
||||
sync_instruction_memory((caddr_t)code, size);
|
||||
}
|
||||
+#else
|
||||
+ static void cacheFlush(void*, size_t)
|
||||
+ {
|
||||
+ }
|
||||
#endif
|
||||
|
||||
private:
|
||||
diff -up firefox-55.0/js/src/wasm/WasmBuiltins.cpp.old firefox-55.0/js/src/wasm/WasmBuiltins.cpp
|
||||
--- firefox-55.0/js/src/wasm/WasmBuiltins.cpp.old 2017-08-09 12:50:46.877450765 +0200
|
||||
+++ firefox-55.0/js/src/wasm/WasmBuiltins.cpp 2017-08-09 12:50:59.725406974 +0200
|
||||
@@ -881,7 +881,6 @@ wasm::EnsureBuiltinThunksInitialized()
|
||||
MOZ_ASSERT(!masm.numSymbolicAccesses());
|
||||
#endif
|
||||
|
||||
- ExecutableAllocator::cacheFlush(thunks->codeBase, thunks->codeSize);
|
||||
if (!ExecutableAllocator::makeExecutable(thunks->codeBase, thunks->codeSize))
|
||||
return false;
|
||||
|
||||
diff -up firefox-55.0/js/src/wasm/WasmCode.cpp.old firefox-55.0/js/src/wasm/WasmCode.cpp
|
||||
--- firefox-55.0/js/src/wasm/WasmCode.cpp.old 2017-08-09 12:50:37.205483731 +0200
|
||||
+++ firefox-55.0/js/src/wasm/WasmCode.cpp 2017-08-09 12:51:10.365370708 +0200
|
||||
@@ -287,8 +287,6 @@ CodeSegment::initialize(Tier tier,
|
||||
if (!StaticallyLink(*this, linkData))
|
||||
return false;
|
||||
|
||||
- ExecutableAllocator::cacheFlush(bytes_.get(), RoundupCodeLength(codeLength));
|
||||
-
|
||||
// Reprotect the whole region to avoid having separate RW and RX mappings.
|
||||
if (!ExecutableAllocator::makeExecutable(bytes_.get(), RoundupCodeLength(codeLength)))
|
||||
return false;
|
||||
diff -up firefox-55.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-55.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
|
||||
diff -up firefox-55.0/media/webrtc/trunk/Makefile.old firefox-55.0/media/webrtc/trunk/Makefile
|
||||
25
build-rust-ppc64le.patch
Normal file
25
build-rust-ppc64le.patch
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
diff -up firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le firefox-55.0/build/moz.configure/rust.configure
|
||||
--- firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le 2017-07-31 18:20:49.000000000 +0200
|
||||
+++ firefox-55.0/build/moz.configure/rust.configure 2017-08-02 10:19:03.254220003 +0200
|
||||
@@ -151,6 +151,9 @@ def rust_triple_alias(host_or_target):
|
||||
('sparc64', 'Linux'): 'sparc64-unknown-linux-gnu',
|
||||
('x86', 'Linux'): 'i686-unknown-linux-gnu',
|
||||
('x86_64', 'Linux'): 'x86_64-unknown-linux-gnu',
|
||||
+ ('ppc64le', 'Linux'): 'powerpc64le-unknown-linux-gnu',
|
||||
+ ('ppc64', 'Linux'): 'powerpc64-unknown-linux-gnu',
|
||||
+ ('s390x', 'Linux'): 's390x-unknown-linux-gnu',
|
||||
# OS X
|
||||
('x86', 'OSX'): 'i686-apple-darwin',
|
||||
('x86_64', 'OSX'): 'x86_64-apple-darwin',
|
||||
@@ -174,8 +177,10 @@ def rust_triple_alias(host_or_target):
|
||||
('sparc64', 'SunOS'): 'sparcv9-sun-solaris',
|
||||
}.get((host_or_target.cpu, os_or_kernel), None)
|
||||
|
||||
+ if (rustc_target == 'powerpc64-unknown-linux-gnu' and host_or_target.endianness == 'little'):
|
||||
+ rustc_target = 'powerpc64le-unknown-linux-gnu'
|
||||
if rustc_target is None:
|
||||
- die("Don't know how to translate {} for rustc".format(host_or_target.alias))
|
||||
+ die("Don't know how to translate {} for rustc, cpu: {}, os: {}".format(target.alias, target.cpu, os_or_kernel))
|
||||
|
||||
# Check to see whether our rustc has a reasonably functional stdlib
|
||||
# for our chosen target.
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
diff -up thunderbird-145.0/security/sandbox/chromium/sandbox/linux/system_headers/linux_seccomp.h.seccomp thunderbird-145.0/security/sandbox/chromium/sandbox/linux/system_headers/linux_seccomp.h
|
||||
--- thunderbird-145.0/security/sandbox/chromium/sandbox/linux/system_headers/linux_seccomp.h.seccomp 2025-12-09 13:42:31.378958842 +0100
|
||||
+++ thunderbird-145.0/security/sandbox/chromium/sandbox/linux/system_headers/linux_seccomp.h 2025-12-09 13:42:37.886937626 +0100
|
||||
@@ -6,6 +6,7 @@
|
||||
#define SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SECCOMP_H_
|
||||
|
||||
#include <stdint.h>
|
||||
+#include <signal.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include "build/build_config.h"
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
diff -up firefox-121.0/toolkit/content/jar.mn.disable-openh264-download firefox-121.0/toolkit/content/jar.mn
|
||||
--- firefox-121.0/toolkit/content/jar.mn.disable-openh264-download 2023-12-18 20:15:04.352014249 +0100
|
||||
+++ firefox-121.0/toolkit/content/jar.mn 2023-12-18 20:19:26.857929200 +0100
|
||||
@@ -130,7 +130,6 @@ toolkit.jar:
|
||||
#ifdef XP_MACOSX
|
||||
content/global/macWindowMenu.js
|
||||
#endif
|
||||
- content/global/gmp-sources/openh264.json (gmp-sources/openh264.json)
|
||||
content/global/gmp-sources/widevinecdm.json (gmp-sources/widevinecdm.json)
|
||||
content/global/gmp-sources/widevinecdm_l1.json (gmp-sources/widevinecdm_l1.json)
|
||||
|
||||
diff -up firefox-121.0/toolkit/modules/GMPInstallManager.sys.mjs.disable-openh264-download firefox-121.0/toolkit/modules/GMPInstallManager.sys.mjs
|
||||
--- firefox-121.0/toolkit/modules/GMPInstallManager.sys.mjs.disable-openh264-download 2023-12-11 21:42:21.000000000 +0100
|
||||
+++ firefox-121.0/toolkit/modules/GMPInstallManager.sys.mjs 2023-12-18 20:18:52.665768579 +0100
|
||||
@@ -35,11 +35,6 @@ function getScopedLogger(prefix) {
|
||||
|
||||
const LOCAL_GMP_SOURCES = [
|
||||
{
|
||||
- id: "gmp-gmpopenh264",
|
||||
- src: "chrome://global/content/gmp-sources/openh264.json",
|
||||
- installByDefault: true,
|
||||
- },
|
||||
- {
|
||||
id: "gmp-widevinecdm",
|
||||
src: "chrome://global/content/gmp-sources/widevinecdm.json",
|
||||
installByDefault: true,
|
||||
@@ -421,6 +416,9 @@ GMPInstallManager.prototype = {
|
||||
* downloaderr, verifyerr or previouserrorencountered
|
||||
*/
|
||||
installAddon(gmpAddon) {
|
||||
+ if (gmpAddon.isOpenH264) {
|
||||
+ return Promise.reject({ type: "disabled" });
|
||||
+ }
|
||||
if (this._deferred) {
|
||||
let log = getScopedLogger("GMPInstallManager.installAddon");
|
||||
log.error("previous error encountered");
|
||||
9
distribution.ini
Normal file
9
distribution.ini
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
[Global]
|
||||
id=fedora
|
||||
version=1.0
|
||||
about=Mozilla Firefox for Fedora
|
||||
|
||||
[Preferences]
|
||||
app.distributor=fedora
|
||||
app.distributor.channel=fedora
|
||||
app.partner.fedora=fedora
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
[Global]
|
||||
id=__ID__
|
||||
version=1.0
|
||||
about=Mozilla Firefox for __NAME__
|
||||
|
||||
[Preferences]
|
||||
app.distributor=__ID__
|
||||
app.distributor.channel=__ID__
|
||||
app.partner.fedora=__ID__
|
||||
23
fedora-build.patch
Normal file
23
fedora-build.patch
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
diff -up firefox-54.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-54.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
|
||||
diff -up firefox-54.0/media/mtransport/third_party/nICEr/nicer.gyp.old firefox-54.0/media/mtransport/third_party/nICEr/nicer.gyp
|
||||
--- firefox-54.0/media/mtransport/third_party/nICEr/nicer.gyp.old 2017-06-08 14:59:08.786996664 +0200
|
||||
+++ firefox-54.0/media/mtransport/third_party/nICEr/nicer.gyp 2017-06-08 14:59:22.642946570 +0200
|
||||
@@ -211,7 +211,6 @@
|
||||
'-Wno-parentheses',
|
||||
'-Wno-strict-prototypes',
|
||||
'-Wmissing-prototypes',
|
||||
- '-Wno-format',
|
||||
],
|
||||
'defines' : [
|
||||
'LINUX',
|
||||
diff -up firefox-54.0/media/mtransport/third_party/nrappkit/nrappkit.gyp.build firefox-54.0/media/mtransport/third_party/nrappkit/nrappkit.gyp
|
||||
--- firefox-54.0/media/mtransport/third_party/nrappkit/nrappkit.gyp.build 2017-06-08 15:08:03.627063097 +0200
|
||||
+++ firefox-54.0/media/mtransport/third_party/nrappkit/nrappkit.gyp 2017-06-08 15:08:15.657019606 +0200
|
||||
@@ -206,7 +206,6 @@
|
||||
'-Wno-parentheses',
|
||||
'-Wno-strict-prototypes',
|
||||
'-Wmissing-prototypes',
|
||||
- '-Wno-format',
|
||||
],
|
||||
'defines' : [
|
||||
'LINUX',
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
diff -up firefox-124.0/toolkit/xre/nsAppRunner.cpp.fedora-customization firefox-124.0/toolkit/xre/nsAppRunner.cpp
|
||||
diff -up firefox-124.0/widget/gtk/nsWindow.cpp.fedora-customization firefox-124.0/widget/gtk/nsWindow.cpp
|
||||
--- firefox-124.0/widget/gtk/nsWindow.cpp.fedora-customization 2024-03-13 12:35:57.098591719 +0100
|
||||
+++ firefox-124.0/widget/gtk/nsWindow.cpp 2024-03-13 12:43:17.375928494 +0100
|
||||
@@ -3459,6 +3459,12 @@ nsresult nsWindow::SetTitle(const nsAStr
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
+ const char* appTitle = getenv("MOZ_APP_TITLE");
|
||||
+ if (appTitle) {
|
||||
+ gtk_window_set_title(GTK_WINDOW(mShell), appTitle);
|
||||
+ return NS_OK;
|
||||
+ }
|
||||
+
|
||||
// convert the string into utf8 and set the title.
|
||||
#define UTF8_FOLLOWBYTE(ch) (((ch) & 0xC0) == 0x80)
|
||||
NS_ConvertUTF16toUTF8 titleUTF8(aTitle);
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
diff -up firefox-125.0/browser/app/profile/firefox.js.addons firefox-125.0/browser/app/profile/firefox.js
|
||||
--- firefox-125.0/browser/app/profile/firefox.js.addons 2024-04-09 10:34:30.728405003 +0200
|
||||
+++ firefox-125.0/browser/app/profile/firefox.js 2024-04-09 10:36:01.444584632 +0200
|
||||
@@ -58,7 +58,8 @@ pref("extensions.systemAddon.update.enab
|
||||
diff -up firefox-55.0/browser/app/profile/firefox.js.addons firefox-55.0/browser/app/profile/firefox.js
|
||||
--- firefox-55.0/browser/app/profile/firefox.js.addons 2017-08-02 10:58:30.566363833 +0200
|
||||
+++ firefox-55.0/browser/app/profile/firefox.js 2017-08-02 10:59:15.377216959 +0200
|
||||
@@ -65,7 +65,8 @@ pref("extensions.systemAddon.update.url"
|
||||
|
||||
// Disable add-ons that are not installed by the user in all scopes by default.
|
||||
// See the SCOPE constants in AddonManager.sys.mjs for values to use here.
|
||||
// See the SCOPE constants in AddonManager.jsm for values to use here.
|
||||
-pref("extensions.autoDisableScopes", 15);
|
||||
+pref("extensions.autoDisableScopes", 0);
|
||||
+pref("extensions.showMismatchUI", false);
|
||||
|
|
|
|||
19
firefox-fedora-ua.patch
Normal file
19
firefox-fedora-ua.patch
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
diff -up firefox-65.0/netwerk/protocol/http/nsHttpHandler.cpp.fedora-ua firefox-65.0/netwerk/protocol/http/nsHttpHandler.cpp
|
||||
--- firefox-65.0/netwerk/protocol/http/nsHttpHandler.cpp.fedora-ua 2019-01-28 14:28:35.806375063 +0100
|
||||
+++ firefox-65.0/netwerk/protocol/http/nsHttpHandler.cpp 2019-01-28 14:30:25.886917219 +0100
|
||||
@@ -873,6 +873,7 @@ void nsHttpHandler::BuildUserAgent() {
|
||||
mUserAgent.SetCapacity(mLegacyAppName.Length() + mLegacyAppVersion.Length() +
|
||||
#ifndef UA_SPARE_PLATFORM
|
||||
mPlatform.Length() +
|
||||
+ mPlatform.Length() + 8 +
|
||||
#endif
|
||||
mOscpu.Length() + mMisc.Length() + mProduct.Length() +
|
||||
mProductSub.Length() + mAppName.Length() +
|
||||
@@ -891,6 +892,7 @@ void nsHttpHandler::BuildUserAgent() {
|
||||
if (!mPlatform.IsEmpty()) {
|
||||
mUserAgent += mPlatform;
|
||||
mUserAgent.AppendLiteral("; ");
|
||||
+ mUserAgent.AppendLiteral("Fedora; ");
|
||||
}
|
||||
#endif
|
||||
if (!mCompatDevice.IsEmpty()) {
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
--- firefox-109.0.1/gfx/2d/Rect.h.old 2023-02-07 09:44:24.946279843 +0100
|
||||
+++ firefox-109.0.1/gfx/2d/Rect.h 2023-02-07 09:44:47.969032049 +0100
|
||||
@@ -324,8 +324,8 @@ IntRectTyped<Units> RoundedToInt(const R
|
||||
|
||||
template <class Units>
|
||||
bool RectIsInt32Safe(const RectTyped<Units>& aRect) {
|
||||
- float min = (float)std::numeric_limits<std::int32_t>::min();
|
||||
- float max = (float)std::numeric_limits<std::int32_t>::max();
|
||||
+ float min = (float)std::numeric_limits<int32_t>::min();
|
||||
+ float max = (float)std::numeric_limits<int32_t>::max();
|
||||
return aRect.x > min && aRect.y > min && aRect.width < max &&
|
||||
aRect.height < max && aRect.XMost() < max && aRect.YMost() < max;
|
||||
}
|
||||
diff -up firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp.old firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp
|
||||
--- firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp.old 2023-02-07 11:03:41.788720090 +0100
|
||||
+++ firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp 2023-02-07 11:04:29.195345659 +0100
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <iomanip>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
+#include <cstdint>
|
||||
|
||||
#include <zlib.h>
|
||||
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
diff -up firefox-137.0.2/toolkit/components/protobuf/src/google/protobuf/port_def.inc.s390 firefox-137.0.2/toolkit/components/protobuf/src/google/protobuf/port_def.inc
|
||||
--- firefox-137.0.2/toolkit/components/protobuf/src/google/protobuf/port_def.inc.s390 2025-04-22 11:42:00.650759505 +0200
|
||||
+++ firefox-137.0.2/toolkit/components/protobuf/src/google/protobuf/port_def.inc 2025-04-22 11:46:02.522031338 +0200
|
||||
@@ -257,12 +257,14 @@
|
||||
#if __has_cpp_attribute(clang::musttail) && !defined(__arm__) && \
|
||||
!defined(_ARCH_PPC) && !defined(__wasm__) && \
|
||||
!(defined(_MSC_VER) && defined(_M_IX86)) && \
|
||||
- !(defined(__NDK_MAJOR__) && __NDK_MAJOR <= 24)
|
||||
+ !(defined(__NDK_MAJOR__) && __NDK_MAJOR <= 24) && \
|
||||
+ !defined(__s390__)
|
||||
# ifndef PROTO2_OPENSOURCE
|
||||
// Compilation fails on ARM32: b/195943306
|
||||
// Compilation fails on powerpc64le: b/187985113
|
||||
// Compilation fails on X86 Windows:
|
||||
// https://github.com/llvm/llvm-project/issues/53271
|
||||
+// Compilation fails on S390 for calls with more than 4 arguments
|
||||
# endif
|
||||
#define PROTOBUF_MUSTTAIL [[clang::musttail]]
|
||||
#define PROTOBUF_TAILCALL true
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
diff -up firefox-114.0.2/gfx/wr/swgl/src/gl.cc.inline firefox-114.0.2/gfx/wr/swgl/src/gl.cc
|
||||
--- firefox-114.0.2/gfx/wr/swgl/src/gl.cc.inline 2023-06-22 11:08:53.294593327 +0200
|
||||
+++ firefox-114.0.2/gfx/wr/swgl/src/gl.cc 2023-06-22 11:12:43.663486734 +0200
|
||||
@@ -58,9 +58,7 @@ WINBASEAPI BOOL WINAPI QueryPerformanceF
|
||||
}
|
||||
|
||||
#else
|
||||
-// GCC is slower when dealing with always_inline, especially in debug builds.
|
||||
-// When using Clang, use always_inline more aggressively.
|
||||
-# if defined(__clang__) || defined(NDEBUG)
|
||||
+# if defined(__clang__) || defined (__GNUC__) || defined(NDEBUG)
|
||||
# define ALWAYS_INLINE __attribute__((always_inline)) inline
|
||||
# else
|
||||
# define ALWAYS_INLINE inline
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
--- firefox-80.0.1/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h 2020-08-31 10:04:19.000000000 -0400
|
||||
+++ firefox-80.0.1/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h 2020-09-12 07:24:35.298931628 -0400
|
||||
@@ -1962,7 +1962,7 @@ struct kernel_statfs {
|
||||
LSS_ENTRYPOINT \
|
||||
"pop %%ebx" \
|
||||
args \
|
||||
- : "esp", "memory"); \
|
||||
+ : "memory"); \
|
||||
LSS_RETURN(type,__res)
|
||||
#undef _syscall0
|
||||
#define _syscall0(type,name) \
|
||||
@@ -2019,7 +2019,7 @@ struct kernel_statfs {
|
||||
: "i" (__NR_##name), "ri" ((long)(arg1)), \
|
||||
"c" ((long)(arg2)), "d" ((long)(arg3)), \
|
||||
"S" ((long)(arg4)), "D" ((long)(arg5)) \
|
||||
- : "esp", "memory"); \
|
||||
+ : "memory"); \
|
||||
LSS_RETURN(type,__res); \
|
||||
}
|
||||
#undef _syscall6
|
||||
@@ -2041,7 +2041,7 @@ struct kernel_statfs {
|
||||
: "i" (__NR_##name), "0" ((long)(&__s)), \
|
||||
"c" ((long)(arg2)), "d" ((long)(arg3)), \
|
||||
"S" ((long)(arg4)), "D" ((long)(arg5)) \
|
||||
- : "esp", "memory"); \
|
||||
+ : "memory"); \
|
||||
LSS_RETURN(type,__res); \
|
||||
}
|
||||
LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack,
|
||||
@@ -2127,7 +2127,7 @@ struct kernel_statfs {
|
||||
: "0"(-EINVAL), "i"(__NR_clone),
|
||||
"m"(fn), "m"(child_stack), "m"(flags), "m"(arg),
|
||||
"m"(parent_tidptr), "m"(newtls), "m"(child_tidptr)
|
||||
- : "esp", "memory", "ecx", "edx", "esi", "edi");
|
||||
+ : "memory", "ecx", "edx", "esi", "edi");
|
||||
LSS_RETURN(int, __res);
|
||||
}
|
||||
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
diff -up firefox-105.0/mozglue/misc/SIMD_avx2.cpp.old firefox-105.0/mozglue/misc/SIMD_avx2.cpp
|
||||
--- firefox-105.0/mozglue/misc/SIMD_avx2.cpp.old 2022-09-22 21:35:07.006221995 +0200
|
||||
+++ firefox-105.0/mozglue/misc/SIMD_avx2.cpp 2022-09-22 21:36:12.972480517 +0200
|
||||
@@ -55,7 +55,7 @@ __m256i CmpEq256(__m256i a, __m256i b) {
|
||||
return _mm256_cmpeq_epi64(a, b);
|
||||
}
|
||||
|
||||
-# if defined(__GNUC__) && !defined(__clang__)
|
||||
+# if 0
|
||||
|
||||
// See the comment in SIMD.cpp over Load32BitsIntoXMM. This is just adapted
|
||||
// from that workaround. Testing this, it also yields the correct instructions
|
||||
11
firefox-locale-debug.patch
Normal file
11
firefox-locale-debug.patch
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
diff -up firefox-63.0.1/intl/locale/LocaleService.cpp.old firefox-63.0.1/intl/locale/LocaleService.cpp
|
||||
--- firefox-63.0.1/intl/locale/LocaleService.cpp.old 2018-11-14 13:34:16.338285161 +0100
|
||||
+++ firefox-63.0.1/intl/locale/LocaleService.cpp 2018-11-14 13:34:21.438270308 +0100
|
||||
@@ -708,7 +708,6 @@ LocaleService::GetDefaultLocale(nsACStri
|
||||
GetGREFileContents("update.locale", &locale);
|
||||
locale.Trim(" \t\n\r");
|
||||
// This should never be empty.
|
||||
- MOZ_ASSERT(!locale.IsEmpty());
|
||||
if (SanitizeForBCP47(locale, true)) {
|
||||
mDefaultLocale.Assign(locale);
|
||||
}
|
||||
|
|
@ -1,20 +1,26 @@
|
|||
. $topsrcdir/browser/config/mozconfig
|
||||
|
||||
ac_add_options --prefix="$PREFIX"
|
||||
ac_add_options --libdir="$LIBDIR"
|
||||
ac_add_options --with-system-zlib
|
||||
ac_add_options --with-system-bz2
|
||||
ac_add_options --disable-strip
|
||||
#ac_add_options --enable-libnotify
|
||||
ac_add_options --enable-necko-wifi
|
||||
ac_add_options --enable-startup-notification
|
||||
ac_add_options --disable-updater
|
||||
ac_add_options --enable-chrome-format=omni
|
||||
ac_add_options --enable-pulseaudio
|
||||
ac_add_options --enable-av1
|
||||
ac_add_options --without-system-icu
|
||||
ac_add_options --with-mozilla-api-keyfile=../mozilla-api-key
|
||||
ac_add_options --with-google-location-service-api-keyfile=../google-api-key
|
||||
ac_add_options --with-google-safebrowsing-api-keyfile=../google-api-key
|
||||
ac_add_options --enable-release
|
||||
ac_add_options --update-channel=release
|
||||
ac_add_options --allow-addon-sideload
|
||||
ac_add_options --with-system-fdk-aac
|
||||
ac_add_options --enable-js-shell
|
||||
ac_add_options --with-unsigned-addon-scopes=app,system
|
||||
ac_add_options --disable-bootstrap
|
||||
ac_add_options --disable-system-sqlite
|
||||
# Workaround for mozbz#1341234
|
||||
ac_add_options BINDGEN_CFLAGS="$(pkg-config nspr pixman-1 --cflags)"
|
||||
ac_add_options --enable-av1
|
||||
|
||||
export BUILD_OFFICIAL=1
|
||||
export MOZILLA_OFFICIAL=1
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
diff -up firefox-84.0.2/security/certverifier/NSSCertDBTrustDomain.cpp.nss-hack firefox-84.0.2/security/certverifier/NSSCertDBTrustDomain.cpp
|
||||
--- firefox-84.0.2/security/certverifier/NSSCertDBTrustDomain.cpp.nss-hack 2021-01-11 12:12:02.585514543 +0100
|
||||
+++ firefox-84.0.2/security/certverifier/NSSCertDBTrustDomain.cpp 2021-01-11 12:47:50.345984582 +0100
|
||||
@@ -1619,6 +1619,15 @@ SECStatus InitializeNSS(const nsACString
|
||||
return srv;
|
||||
}
|
||||
|
||||
+ /* Sets the NSS_USE_ALG_IN_ANY_SIGNATURE bit.
|
||||
+ * does not change NSS_USE_ALG_IN_CERT_SIGNATURE,
|
||||
+ * so policy will still disable use of sha1 in
|
||||
+ * certificate related signature processing. */
|
||||
+ srv = NSS_SetAlgorithmPolicy(SEC_OID_SHA1, NSS_USE_ALG_IN_ANY_SIGNATURE, 0);
|
||||
+ if (srv != SECSuccess) {
|
||||
+ NS_WARNING("Unable to use SHA1 for Add-ons, expect broken/disabled Add-ons. See https://bugzilla.redhat.com/show_bug.cgi?id=1908018 for details.");
|
||||
+ }
|
||||
+
|
||||
if (nssDbConfig == NSSDBConfig::ReadWrite) {
|
||||
UniquePK11SlotInfo slot(PK11_GetInternalKeySlot());
|
||||
if (!slot) {
|
||||
2508
firefox-pipewire.patch
Normal file
2508
firefox-pipewire.patch
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -2,11 +2,13 @@ pref("app.update.auto", false);
|
|||
pref("app.update.enabled", false);
|
||||
pref("app.update.autoInstallEnabled", false);
|
||||
pref("general.smoothScroll", true);
|
||||
pref("intl.locale.matchOS", true);
|
||||
pref("intl.locale.requested", "");
|
||||
pref("toolkit.storage.synchronous", 0);
|
||||
pref("toolkit.networkmanager.disable", false);
|
||||
pref("offline.autoDetect", true);
|
||||
pref("browser.backspace_action", 2);
|
||||
pref("browser.display.use_system_colors", true);
|
||||
pref("browser.download.folderList", 1);
|
||||
pref("browser.link.open_external", 3);
|
||||
pref("browser.shell.checkDefaultBrowser", false);
|
||||
|
|
@ -16,18 +18,15 @@ pref("ui.SpellCheckerUnderlineStyle", 1);
|
|||
pref("startup.homepage_override_url", "");
|
||||
pref("browser.startup.homepage", "data:text/plain,browser.startup.homepage=https://start.fedoraproject.org/");
|
||||
pref("browser.newtabpage.pinned", '[{"url":"https://start.fedoraproject.org/","title":"Fedora Project - Start Page"}]');
|
||||
pref("geo.wifi.uri", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%");
|
||||
pref("media.gmp-gmpopenh264.provider.enabled",false);
|
||||
pref("media.gmp-gmpopenh264.autoupdate",false);
|
||||
pref("media.gmp-gmpopenh264.enabled",false);
|
||||
pref("media.gmp.decoder.enabled", true);
|
||||
pref("media.gmp-gmpopenh264.enabled",false);
|
||||
pref("plugins.notifyMissingFlash", false);
|
||||
/* See https://bugzilla.redhat.com/show_bug.cgi?id=1226489 */
|
||||
pref("browser.display.use_system_colors", false);
|
||||
pref("layers.use-image-offscreen-surfaces", false);
|
||||
/* Allow sending credetials to all https:// sites */
|
||||
pref("network.negotiate-auth.trusted-uris", "https://");
|
||||
pref("spellchecker.dictionary_path","/usr/share/hunspell");
|
||||
/* Disable DoH by default */
|
||||
pref("network.trr.mode", 5);
|
||||
/* Enable per-user policy dir, see mozbz#1583466 */
|
||||
pref("browser.policies.perUserDir", true);
|
||||
pref("browser.gnome-search-provider.enabled",true);
|
||||
/* Enable ffvpx playback for WebRTC */
|
||||
pref("media.navigator.mediadatadecoder_vpx_enabled", true);
|
||||
pref("spellchecker.dictionary_path","/usr/share/myspell");
|
||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 7.3 KiB |
|
|
@ -11,7 +11,7 @@ MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xm
|
|||
StartupNotify=true
|
||||
Categories=Network;WebBrowser;
|
||||
Keywords=web;browser;internet;
|
||||
Actions=new-window;new-private-window;profile-manager-window;
|
||||
Actions=new-window;new-private-window;
|
||||
|
||||
[Desktop Action new-window]
|
||||
Name=Open a New Window
|
||||
|
|
@ -24,8 +24,8 @@ Name[ast]=Ventana nueva
|
|||
Name[az]=Yeni Pəncərə
|
||||
Name[be]=Новае акно
|
||||
Name[bg]=Нов прозорец
|
||||
Name[bn_BD]=নতুন উইন্ডো (N)
|
||||
Name[bn_IN]=নতুন উইন্ডো
|
||||
Name[bn-BD]=নতুন উইন্ডো (N)
|
||||
Name[bn-IN]=নতুন উইন্ডো
|
||||
Name[br]=Prenestr nevez
|
||||
Name[brx]=गोदान उइन्ड'(N)
|
||||
Name[bs]=Novi prozor
|
||||
|
|
@ -37,37 +37,37 @@ 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[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[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[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[gu-IN]=નવી વિન્ડો
|
||||
Name[he]=חלון חדש
|
||||
Name[hi_IN]=नया विंडो
|
||||
Name[hi-IN]=नया विंडो
|
||||
Name[hr]=Novi prozor
|
||||
Name[hsb]=Nowe wokno
|
||||
Name[hu]=Új ablak
|
||||
Name[hy_AM]=Նոր Պատուհան
|
||||
Name[hy-AM]=Նոր Պատուհան
|
||||
Name[id]=Jendela Baru
|
||||
Name[is]=Nýr gluggi
|
||||
Name[it]=Nuova finestra
|
||||
Name[ja]=新しいウィンドウ
|
||||
Name[ja_JP-mac]=新規ウインドウ
|
||||
Name[ja-JP-mac]=新規ウインドウ
|
||||
Name[ka]=ახალი ფანჯარა
|
||||
Name[kk]=Жаңа терезе
|
||||
Name[km]=បង្អួចថ្មី
|
||||
|
|
@ -86,15 +86,15 @@ Name[ml]=പുതിയ ജാലകം
|
|||
Name[mr]=नवीन पटल
|
||||
Name[ms]=Tetingkap Baru
|
||||
Name[my]=ဝင်းဒိုးအသစ်
|
||||
Name[nb_NO]=Nytt vindu
|
||||
Name[ne_NP]=नयाँ सञ्झ्याल
|
||||
Name[nb-NO]=Nytt vindu
|
||||
Name[ne-NP]=नयाँ सञ्झ्याल
|
||||
Name[nl]=Nieuw venster
|
||||
Name[nn_NO]=Nytt vindauge
|
||||
Name[nn-NO]=Nytt vindauge
|
||||
Name[or]=ନୂତନ ୱିଣ୍ଡୋ
|
||||
Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
|
||||
Name[pa-IN]=ਨਵੀਂ ਵਿੰਡੋ
|
||||
Name[pl]=Nowe okno
|
||||
Name[pt_BR]=Nova janela
|
||||
Name[pt_PT]=Nova janela
|
||||
Name[pt-BR]=Nova janela
|
||||
Name[pt-PT]=Nova janela
|
||||
Name[rm]=Nova fanestra
|
||||
Name[ro]=Fereastră nouă
|
||||
Name[ru]=Новое окно
|
||||
|
|
@ -105,7 +105,7 @@ Name[sl]=Novo okno
|
|||
Name[son]=Zanfun taaga
|
||||
Name[sq]=Dritare e Re
|
||||
Name[sr]=Нови прозор
|
||||
Name[sv_SE]=Nytt fönster
|
||||
Name[sv-SE]=Nytt fönster
|
||||
Name[ta]=புதிய சாளரம்
|
||||
Name[te]=కొత్త విండో
|
||||
Name[th]=หน้าต่างใหม่
|
||||
|
|
@ -117,8 +117,8 @@ 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]=開新視窗
|
||||
Name[zh-CN]=新建窗口
|
||||
Name[zh-TW]=開新視窗
|
||||
Exec=firefox-wayland --name firefox-wayland --new-window %u
|
||||
|
||||
[Desktop Action new-private-window]
|
||||
|
|
@ -132,8 +132,8 @@ Name[ast]=Ventana privada nueva
|
|||
Name[az]=Yeni Məxfi Pəncərə
|
||||
Name[be]=Новае акно адасаблення
|
||||
Name[bg]=Нов прозорец за поверително сърфиране
|
||||
Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[bn-BD]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[bn-IN]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[br]=Prenestr merdeiñ prevez nevez
|
||||
Name[brx]=गोदान प्राइभेट उइन्ड'
|
||||
Name[bs]=Novi privatni prozor
|
||||
|
|
@ -145,37 +145,37 @@ 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[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[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[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[gu-IN]=નવી ખાનગી વિન્ડો
|
||||
Name[he]=חלון פרטי חדש
|
||||
Name[hi_IN]=नयी निजी विंडो
|
||||
Name[hi-IN]=नयी निजी विंडो
|
||||
Name[hr]=Novi privatni prozor
|
||||
Name[hsb]=Nowe priwatne wokno
|
||||
Name[hu]=Új privát ablak
|
||||
Name[hy_AM]=Սկսել Գաղտնի դիտարկում
|
||||
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[ja-JP-mac]=新規プライベートウインドウ
|
||||
Name[ka]=ახალი პირადი ფანჯარა
|
||||
Name[kk]=Жаңа жекелік терезе
|
||||
Name[km]=បង្អួចឯកជនថ្មី
|
||||
|
|
@ -194,15 +194,15 @@ Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
|
|||
Name[mr]=नवीन वैयक्तिक पटल
|
||||
Name[ms]=Tetingkap Persendirian Baharu
|
||||
Name[my]=New Private Window
|
||||
Name[nb_NO]=Nytt privat vindu
|
||||
Name[ne_NP]=नयाँ निजी सञ्झ्याल
|
||||
Name[nb-NO]=Nytt privat vindu
|
||||
Name[ne-NP]=नयाँ निजी सञ्झ्याल
|
||||
Name[nl]=Nieuw privévenster
|
||||
Name[nn_NO]=Nytt privat vindauge
|
||||
Name[nn-NO]=Nytt privat vindauge
|
||||
Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
|
||||
Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
|
||||
Name[pa-IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
|
||||
Name[pl]=Nowe okno prywatne
|
||||
Name[pt_BR]=Nova janela privativa
|
||||
Name[pt_PT]=Nova janela privada
|
||||
Name[pt-BR]=Nova janela privativa
|
||||
Name[pt-PT]=Nova janela privada
|
||||
Name[rm]=Nova fanestra privata
|
||||
Name[ro]=Fereastră privată nouă
|
||||
Name[ru]=Новое приватное окно
|
||||
|
|
@ -213,7 +213,7 @@ 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[sv-SE]=Nytt privat fönster
|
||||
Name[ta]=புதிய தனிப்பட்ட சாளரம்
|
||||
Name[te]=కొత్త ఆంతరంగిక విండో
|
||||
Name[th]=หน้าต่างส่วนตัวใหม่
|
||||
|
|
@ -225,11 +225,7 @@ 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]=新增隱私視窗
|
||||
Name[zh-CN]=新建隐私浏览窗口
|
||||
Name[zh-TW]=新增隱私視窗
|
||||
Exec=firefox-wayland --private-window --name firefox-wayland %u
|
||||
|
||||
[Desktop Action profile-manager-window]
|
||||
Name=Open the Profile Manager
|
||||
Name[cs]=Správa profilů
|
||||
Exec=firefox-wayland --name firefox-wayland --ProfileManager
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/bash
|
||||
#!/bin/bash
|
||||
#
|
||||
# Run Firefox under Wayland
|
||||
#
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xm
|
|||
StartupNotify=true
|
||||
Categories=Network;WebBrowser;
|
||||
Keywords=web;browser;internet;
|
||||
Actions=new-window;new-private-window;profile-manager-window;
|
||||
Actions=new-window;new-private-window;
|
||||
|
||||
[Desktop Action new-window]
|
||||
Name=Open a New Window
|
||||
|
|
@ -24,8 +24,8 @@ Name[ast]=Ventana nueva
|
|||
Name[az]=Yeni Pəncərə
|
||||
Name[be]=Новае акно
|
||||
Name[bg]=Нов прозорец
|
||||
Name[bn_BD]=নতুন উইন্ডো (N)
|
||||
Name[bn_IN]=নতুন উইন্ডো
|
||||
Name[bn-BD]=নতুন উইন্ডো (N)
|
||||
Name[bn-IN]=নতুন উইন্ডো
|
||||
Name[br]=Prenestr nevez
|
||||
Name[brx]=गोदान उइन्ड'(N)
|
||||
Name[bs]=Novi prozor
|
||||
|
|
@ -37,37 +37,37 @@ 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[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[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[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[gu-IN]=નવી વિન્ડો
|
||||
Name[he]=חלון חדש
|
||||
Name[hi_IN]=नया विंडो
|
||||
Name[hi-IN]=नया विंडो
|
||||
Name[hr]=Novi prozor
|
||||
Name[hsb]=Nowe wokno
|
||||
Name[hu]=Új ablak
|
||||
Name[hy_AM]=Նոր Պատուհան
|
||||
Name[hy-AM]=Նոր Պատուհան
|
||||
Name[id]=Jendela Baru
|
||||
Name[is]=Nýr gluggi
|
||||
Name[it]=Nuova finestra
|
||||
Name[ja]=新しいウィンドウ
|
||||
Name[ja_JP-mac]=新規ウインドウ
|
||||
Name[ja-JP-mac]=新規ウインドウ
|
||||
Name[ka]=ახალი ფანჯარა
|
||||
Name[kk]=Жаңа терезе
|
||||
Name[km]=បង្អួចថ្មី
|
||||
|
|
@ -86,15 +86,15 @@ Name[ml]=പുതിയ ജാലകം
|
|||
Name[mr]=नवीन पटल
|
||||
Name[ms]=Tetingkap Baru
|
||||
Name[my]=ဝင်းဒိုးအသစ်
|
||||
Name[nb_NO]=Nytt vindu
|
||||
Name[ne_NP]=नयाँ सञ्झ्याल
|
||||
Name[nb-NO]=Nytt vindu
|
||||
Name[ne-NP]=नयाँ सञ्झ्याल
|
||||
Name[nl]=Nieuw venster
|
||||
Name[nn_NO]=Nytt vindauge
|
||||
Name[nn-NO]=Nytt vindauge
|
||||
Name[or]=ନୂତନ ୱିଣ୍ଡୋ
|
||||
Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
|
||||
Name[pa-IN]=ਨਵੀਂ ਵਿੰਡੋ
|
||||
Name[pl]=Nowe okno
|
||||
Name[pt_BR]=Nova janela
|
||||
Name[pt_PT]=Nova janela
|
||||
Name[pt-BR]=Nova janela
|
||||
Name[pt-PT]=Nova janela
|
||||
Name[rm]=Nova fanestra
|
||||
Name[ro]=Fereastră nouă
|
||||
Name[ru]=Новое окно
|
||||
|
|
@ -105,7 +105,7 @@ Name[sl]=Novo okno
|
|||
Name[son]=Zanfun taaga
|
||||
Name[sq]=Dritare e Re
|
||||
Name[sr]=Нови прозор
|
||||
Name[sv_SE]=Nytt fönster
|
||||
Name[sv-SE]=Nytt fönster
|
||||
Name[ta]=புதிய சாளரம்
|
||||
Name[te]=కొత్త విండో
|
||||
Name[th]=หน้าต่างใหม่
|
||||
|
|
@ -117,8 +117,8 @@ 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]=開新視窗
|
||||
Name[zh-CN]=新建窗口
|
||||
Name[zh-TW]=開新視窗
|
||||
Exec=firefox-x11 --name firefox-x11 --new-window %u
|
||||
|
||||
[Desktop Action new-private-window]
|
||||
|
|
@ -132,8 +132,8 @@ Name[ast]=Ventana privada nueva
|
|||
Name[az]=Yeni Məxfi Pəncərə
|
||||
Name[be]=Новае акно адасаблення
|
||||
Name[bg]=Нов прозорец за поверително сърфиране
|
||||
Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[bn-BD]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[bn-IN]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[br]=Prenestr merdeiñ prevez nevez
|
||||
Name[brx]=गोदान प्राइभेट उइन्ड'
|
||||
Name[bs]=Novi privatni prozor
|
||||
|
|
@ -145,37 +145,37 @@ 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[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[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[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[gu-IN]=નવી ખાનગી વિન્ડો
|
||||
Name[he]=חלון פרטי חדש
|
||||
Name[hi_IN]=नयी निजी विंडो
|
||||
Name[hi-IN]=नयी निजी विंडो
|
||||
Name[hr]=Novi privatni prozor
|
||||
Name[hsb]=Nowe priwatne wokno
|
||||
Name[hu]=Új privát ablak
|
||||
Name[hy_AM]=Սկսել Գաղտնի դիտարկում
|
||||
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[ja-JP-mac]=新規プライベートウインドウ
|
||||
Name[ka]=ახალი პირადი ფანჯარა
|
||||
Name[kk]=Жаңа жекелік терезе
|
||||
Name[km]=បង្អួចឯកជនថ្មី
|
||||
|
|
@ -194,15 +194,15 @@ Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
|
|||
Name[mr]=नवीन वैयक्तिक पटल
|
||||
Name[ms]=Tetingkap Persendirian Baharu
|
||||
Name[my]=New Private Window
|
||||
Name[nb_NO]=Nytt privat vindu
|
||||
Name[ne_NP]=नयाँ निजी सञ्झ्याल
|
||||
Name[nb-NO]=Nytt privat vindu
|
||||
Name[ne-NP]=नयाँ निजी सञ्झ्याल
|
||||
Name[nl]=Nieuw privévenster
|
||||
Name[nn_NO]=Nytt privat vindauge
|
||||
Name[nn-NO]=Nytt privat vindauge
|
||||
Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
|
||||
Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
|
||||
Name[pa-IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
|
||||
Name[pl]=Nowe okno prywatne
|
||||
Name[pt_BR]=Nova janela privativa
|
||||
Name[pt_PT]=Nova janela privada
|
||||
Name[pt-BR]=Nova janela privativa
|
||||
Name[pt-PT]=Nova janela privada
|
||||
Name[rm]=Nova fanestra privata
|
||||
Name[ro]=Fereastră privată nouă
|
||||
Name[ru]=Новое приватное окно
|
||||
|
|
@ -213,7 +213,7 @@ 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[sv-SE]=Nytt privat fönster
|
||||
Name[ta]=புதிய தனிப்பட்ட சாளரம்
|
||||
Name[te]=కొత్త ఆంతరంగిక విండో
|
||||
Name[th]=หน้าต่างส่วนตัวใหม่
|
||||
|
|
@ -225,11 +225,7 @@ 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]=新增隱私視窗
|
||||
Name[zh-CN]=新建隐私浏览窗口
|
||||
Name[zh-TW]=新增隱私視窗
|
||||
Exec=firefox-x11 --private-window --name firefox-x11 %u
|
||||
|
||||
[Desktop Action profile-manager-window]
|
||||
Name=Open the Profile Manager
|
||||
Name[cs]=Správa profilů
|
||||
Exec=firefox-x11 --name firefox-x11 --ProfileManager
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/bash
|
||||
#!/bin/bash
|
||||
#
|
||||
# Run Firefox on X11 backend
|
||||
#
|
||||
|
|
|
|||
40
firefox.1
40
firefox.1
|
|
@ -1,4 +1,4 @@
|
|||
.TH FIREFOX 1 "July 10, 2019" firefox "Linux User's Manual"
|
||||
.TH FIREFOX 1 "November 30, 2017" firefox "Linux User's Manual"
|
||||
.SH NAME
|
||||
firefox \- a Web browser for X11 derived from the Mozilla browser
|
||||
|
||||
|
|
@ -6,10 +6,17 @@ firefox \- a Web browser for X11 derived from the Mozilla browser
|
|||
.B firefox
|
||||
[\fIOPTIONS\fR ...] [\fIURL\fR]
|
||||
|
||||
.B firefox-bin
|
||||
[\fIOPTIONS\fR] [\fIURL\fR]
|
||||
|
||||
.SH DESCRIPTION
|
||||
\fBMozilla Firefox\fR is an open-source web browser, designed for
|
||||
standards compliance, performance and portability.
|
||||
|
||||
.SH USAGE
|
||||
\fBfirefox\fR is a simple shell script that will set up the
|
||||
environment for the actual executable, \fBfirefox-bin\fR.
|
||||
|
||||
.SH OPTIONS
|
||||
A summary of the options supported by \fBfirefox\fR is included below.
|
||||
|
||||
|
|
@ -26,10 +33,10 @@ Make all warnings fatal
|
|||
|
||||
.SS "Firefox options"
|
||||
.TP
|
||||
.B \-h, \--help
|
||||
.B \-h, \-help
|
||||
Show summary of options.
|
||||
.TP
|
||||
.B \-v, \--version
|
||||
.B \-v, \-version
|
||||
Print Firefox version.
|
||||
.TP
|
||||
\fB\-P\fR \fIprofile\fR
|
||||
|
|
@ -56,22 +63,11 @@ Start with \fIlocale\fR resources as UI Locale.
|
|||
\fB\-\-safe\-mode\fR
|
||||
Disables extensions and themes for this session.
|
||||
.TP
|
||||
\fB\--allow-downgrade\fR
|
||||
Allows downgrading a profile.
|
||||
.TP
|
||||
\fB\--MOZ_LOG\fR=\fImodules\fR
|
||||
Treated as \fBMOZ_LOG\fR=\fImodules\fR environment variable, overrides it.
|
||||
.TP
|
||||
\fB\--MOZ_LOG_FILE\fR=\fIfile\fR
|
||||
Treated as \fBMOZ_LOG_FILE\fR=\fIfile\fR environment variable, overrides it. If
|
||||
MOZ_LOG_FILE is not specified as an argument or as an environment variable,
|
||||
logging will be written to stdout.
|
||||
.TP
|
||||
\fB\-\-headless\fR
|
||||
Run without a GUI.
|
||||
.TP
|
||||
\fB\-\-save-recordings\fR
|
||||
Save recordings for all content processes to a directory.
|
||||
\fB\-\-marionette\fR
|
||||
Enable remote control server.
|
||||
.TP
|
||||
\fB\-\-browser\fR
|
||||
Open a browser window.
|
||||
|
|
@ -97,9 +93,8 @@ Width and optionally height of screenshot.
|
|||
\fB\-\-search\fR \fIterm\fR
|
||||
Search \fIterm\fR with your default search engine.
|
||||
.TP
|
||||
\fB\-\-setDefaultBrowser\fR
|
||||
Set this app as the default browser.
|
||||
.TP
|
||||
|
||||
|
||||
\fB\-\-jsconsole\fR
|
||||
Open the Browser Console.
|
||||
.TP
|
||||
|
|
@ -120,16 +115,19 @@ Record drawing for a given URL.
|
|||
.TP
|
||||
\fB\-\-recording-output\fR \fIfile\fR
|
||||
Specify destination file for a drawing recording.
|
||||
.TP
|
||||
\fB\-\-setDefaultBrowser\fR
|
||||
Set this app as the default browser.
|
||||
|
||||
.SH FILES
|
||||
\fI/usr/bin/firefox\fR - shell script wrapping
|
||||
\fBfirefox\fR
|
||||
.br
|
||||
\fI/usr/lib64/firefox/firefox\fR - \fBfirefox\fR
|
||||
\fI/usr/lib64/firefox/firefox-bin\fR - \fBfirefox\fR
|
||||
executable
|
||||
|
||||
.SH VERSION
|
||||
68.0
|
||||
57.0
|
||||
|
||||
.SH BUGS
|
||||
To report a bug, please visit \fIhttp://bugzilla.mozilla.org/\fR
|
||||
|
|
|
|||
|
|
@ -1,59 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright 2019 Firefox contributors -->
|
||||
<component type="desktop">
|
||||
<id>firefox.desktop</id>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<name>Firefox</name>
|
||||
<summary>Web Browser</summary>
|
||||
<summary xml:lang="ca">Navegador web</summary>
|
||||
<summary xml:lang="cs">Webový prohlížeč</summary>
|
||||
<summary xml:lang="es">Navegador web</summary>
|
||||
<summary xml:lang="fa">مرورگر اینترنتی</summary>
|
||||
<summary xml:lang="fi">WWW-selain</summary>
|
||||
<summary xml:lang="fr">Navigateur Web</summary>
|
||||
<summary xml:lang="hu">Webböngésző</summary>
|
||||
<summary xml:lang="it">Browser Web</summary>
|
||||
<summary xml:lang="ja">ウェブ・ブラウザ</summary>
|
||||
<summary xml:lang="ko">웹 브라우저</summary>
|
||||
<summary xml:lang="nb">Nettleser</summary>
|
||||
<summary xml:lang="nl">Webbrowser</summary>
|
||||
<summary xml:lang="nn">Nettlesar</summary>
|
||||
<summary xml:lang="no">Nettleser</summary>
|
||||
<summary xml:lang="pl">Przeglądarka WWW</summary>
|
||||
<summary xml:lang="pt">Navegador Web</summary>
|
||||
<summary xml:lang="pt_BR">Navegador Web</summary>
|
||||
<summary xml:lang="sk">Internetový prehliadač</summary>
|
||||
<summary xml:lang="sv">Webbläsare</summary>
|
||||
<description>
|
||||
<p>
|
||||
Bringing together all kinds of awesomeness to make browsing better for you.
|
||||
Get to your favorite sites quickly – even if you don’t remember the URLs.
|
||||
Type your term into the location bar (aka the Awesome Bar) and the autocomplete
|
||||
function will include possible matches from your browsing history, bookmarked
|
||||
sites and open tabs.
|
||||
</p>
|
||||
</description>
|
||||
<url type="homepage">https://www.mozilla.org</url>
|
||||
<update_contact>stransky@redhat.com</update_contact>
|
||||
<kudos>
|
||||
<kudo>ModernToolkit</kudo>
|
||||
<kudo>SearchProvider</kudo>
|
||||
</kudos>
|
||||
<project_group>Mozilla</project_group>
|
||||
<project_license>GPL-3.0+</project_license>
|
||||
<developer_name>Mozilla Corporation</developer_name>
|
||||
<url type="bugtracker">https://bugzilla.mozilla.org/</url>
|
||||
<url type="help">https://support.mozilla.org/</url>
|
||||
<translation type="gettext">firefox</translation>
|
||||
<provides>
|
||||
<id>firefox.desktop</id>
|
||||
</provides>
|
||||
<screenshots>
|
||||
<screenshot type="default">https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/firefox/a.png</screenshot>
|
||||
<screenshot>https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/firefox/b.png</screenshot>
|
||||
<screenshot>https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/firefox/c.png</screenshot>
|
||||
</screenshots>
|
||||
<releases>
|
||||
<release version="__VERSION__" date="__DATE__"/>
|
||||
</releases>
|
||||
</component>
|
||||
909
firefox.desktop
909
firefox.desktop
File diff suppressed because it is too large
Load diff
101
firefox.sh.in
101
firefox.sh.in
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/bash
|
||||
#!/bin/bash
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (the "License"); you may not use this file
|
||||
|
|
@ -64,13 +64,15 @@ MOZ_DIST_BIN="$MOZ_LIB_DIR/firefox"
|
|||
MOZ_LANGPACKS_DIR="$MOZ_DIST_BIN/langpacks"
|
||||
MOZ_EXTENSIONS_PROFILE_DIR="$HOME/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
|
||||
MOZ_PROGRAM="$MOZ_DIST_BIN/$MOZ_FIREFOX_FILE"
|
||||
GETENFORCE_FILE="/usr/sbin/getenforce"
|
||||
MOZ_LAUNCHER="$MOZ_DIST_BIN/run-mozilla.sh"
|
||||
|
||||
##
|
||||
## Use D-Bus remote exclusively when there's Wayland display.
|
||||
## Enable Wayland backend?
|
||||
##
|
||||
if [ "$WAYLAND_DISPLAY" ]; then
|
||||
export MOZ_DBUS_REMOTE=1
|
||||
if __DEFAULT_WAYLAND__ && ! [ $MOZ_DISABLE_WAYLAND ]; then
|
||||
if [ "$XDG_CURRENT_DESKTOP" == "GNOME" ]; then
|
||||
export MOZ_ENABLE_WAYLAND=1
|
||||
fi
|
||||
fi
|
||||
|
||||
##
|
||||
|
|
@ -108,14 +110,10 @@ export MOZ_PLUGIN_PATH
|
|||
export MOZ_APP_LAUNCHER="/__PREFIX__/bin/firefox"
|
||||
|
||||
##
|
||||
## We want Firefox to use Openh264 provided by Fedora.
|
||||
##
|
||||
## We used to configure it here but It's set by /etc/profile.d/gmpopenh264.sh
|
||||
## script from mozilla-openh264 package now. Let's keep it here just
|
||||
## for the record.
|
||||
##
|
||||
## export MOZ_GMP_PATH=$MOZ_LIB_DIR/mozilla/plugins/gmp-gmpopenh264/system-installed
|
||||
## Set FONTCONFIG_PATH for Xft/fontconfig
|
||||
##
|
||||
FONTCONFIG_PATH="/etc/fonts:${MOZILLA_FIVE_HOME}/res/Xft"
|
||||
export FONTCONFIG_PATH
|
||||
|
||||
##
|
||||
## In order to better support certain scripts (such as Indic and some CJK
|
||||
|
|
@ -130,10 +128,21 @@ export MOZ_APP_LAUNCHER="/__PREFIX__/bin/firefox"
|
|||
# export MOZ_DISABLE_PANGO
|
||||
#
|
||||
|
||||
##
|
||||
## Disable the GNOME crash dialog, Moz has it's own
|
||||
##
|
||||
GNOME_DISABLE_CRASH_DIALOG=1
|
||||
export GNOME_DISABLE_CRASH_DIALOG
|
||||
|
||||
##
|
||||
## Disable the SLICE allocator (rhbz#1014858)
|
||||
##
|
||||
export G_SLICE=always-malloc
|
||||
|
||||
##
|
||||
## Enable Xinput2 (mozbz#1207973)
|
||||
##
|
||||
export MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2-1}
|
||||
export MOZ_USE_XINPUT2=1
|
||||
|
||||
# OK, here's where all the real work gets done
|
||||
|
||||
|
|
@ -158,19 +167,11 @@ MOZILLA_DOWN=0
|
|||
if ! [ $MOZ_DISABLE_LANGPACKS ] || [ $MOZ_DISABLE_LANGPACKS -eq 0 ]; then
|
||||
if [ -x $MOZ_DIST_BIN/$MOZ_FIREFOX_FILE ]; then
|
||||
# Is firefox running?
|
||||
/__PREFIX__/bin/pidof $MOZ_PROGRAM > /dev/null 2>&1
|
||||
/__PREFIX__/bin/pidof firefox > /dev/null 2>&1
|
||||
MOZILLA_DOWN=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
# When Firefox is not running, restore SELinux labels for profile files
|
||||
# (rhbz#1731371)
|
||||
if [ $MOZILLA_DOWN -ne 0 ]; then
|
||||
if [ -x $GETENFORCE_FILE ] && [ `$GETENFORCE_FILE` != "Disabled" ]; then
|
||||
(restorecon -vr ~/.mozilla/firefox/*/gmp-widevinecdm/* &)
|
||||
fi
|
||||
fi
|
||||
|
||||
# Modify language pack configuration only when firefox is not running
|
||||
# and language packs are not disabled
|
||||
if [ $MOZILLA_DOWN -ne 0 ]; then
|
||||
|
|
@ -203,17 +204,8 @@ if [ $MOZILLA_DOWN -ne 0 ]; then
|
|||
if [ -h $MOZ_LANGPACKS_DIR/$langpack ]; then
|
||||
langpack=`readlink $MOZ_LANGPACKS_DIR/$langpack`
|
||||
fi
|
||||
if [ -e "/run/ostree-booted" ]; then
|
||||
# Files on Silverblue has file create time set to 0,
|
||||
# so in case the langpack is updated Firefox does not
|
||||
# check for changes because it compares the file
|
||||
# creation date to do so.
|
||||
cp -f $MOZ_LANGPACKS_DIR/$langpack \
|
||||
$MOZ_EXTENSIONS_PROFILE_DIR/$langpack
|
||||
else
|
||||
ln -s $MOZ_LANGPACKS_DIR/$langpack \
|
||||
$MOZ_EXTENSIONS_PROFILE_DIR/$langpack
|
||||
fi
|
||||
ln -s $MOZ_LANGPACKS_DIR/$langpack \
|
||||
$MOZ_EXTENSIONS_PROFILE_DIR/$langpack
|
||||
echo $MOZ_EXTENSIONS_PROFILE_DIR/$langpack > $FEDORA_LANGPACK_CONFIG
|
||||
return 0
|
||||
fi
|
||||
|
|
@ -227,23 +219,40 @@ fi
|
|||
NSS_SSL_CBC_RANDOM_IV=${NSS_SSL_CBC_RANDOM_IV-1}
|
||||
export NSS_SSL_CBC_RANDOM_IV
|
||||
|
||||
# MOZ_APP_REMOTINGNAME links Firefox with desktop file name
|
||||
if [ -z "$MOZ_APP_REMOTINGNAME" ]
|
||||
then
|
||||
export MOZ_APP_REMOTINGNAME=__APP_NAME__
|
||||
fi
|
||||
|
||||
# Flatpak specific environment variables
|
||||
%FLATPAK_ENV_VARS%
|
||||
|
||||
# Don't throw "old profile" dialog box.
|
||||
export MOZ_ALLOW_DOWNGRADE=1
|
||||
# Prepare command line arguments
|
||||
script_args=""
|
||||
pass_arg_count=0
|
||||
while [ $# -gt $pass_arg_count ]
|
||||
do
|
||||
case "$1" in
|
||||
-g | --debug)
|
||||
script_args="$script_args -g"
|
||||
debugging=1
|
||||
shift
|
||||
;;
|
||||
-d | --debugger)
|
||||
if [ $# -gt 1 ]; then
|
||||
script_args="$script_args -d $2"
|
||||
shift 2
|
||||
else
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
# Move the unrecognized argument to the end of the list.
|
||||
arg="$1"
|
||||
shift
|
||||
set -- "$@" "$arg"
|
||||
pass_arg_count=`expr $pass_arg_count + 1`
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Run the browser
|
||||
debugging=0
|
||||
if [ $debugging = 1 ]
|
||||
then
|
||||
echo $MOZ_PROGRAM "$@"
|
||||
echo $MOZ_LAUNCHER $script_args $MOZ_PROGRAM "$@"
|
||||
fi
|
||||
|
||||
exec $MOZ_PROGRAM "$@"
|
||||
exec $MOZ_LAUNCHER $script_args $MOZ_PROGRAM "$@"
|
||||
|
|
|
|||
2892
firefox.spec
2892
firefox.spec
File diff suppressed because it is too large
Load diff
|
|
@ -1,21 +0,0 @@
|
|||
#!/bin/bash
|
||||
if [ -z $1 ]; then
|
||||
echo "Fixes .cargo-checksum.json by removing deleted files and recompute sha256sum"
|
||||
echo "Usage: $0 .cargo-checksum.json"
|
||||
exit
|
||||
fi
|
||||
|
||||
FILE=$1
|
||||
#set -x
|
||||
cp $FILE $1.backup
|
||||
for i in $(cat .cargo-checksum.json|jq -r '.files| keys[]'); do
|
||||
if [ ! -f $i ]; then
|
||||
#echo $i non exist
|
||||
sed -ie "s|\"$i\":\"[^\"]*\",||" $FILE
|
||||
else
|
||||
SHA=`sha256sum $i | cut -d " " -f1`
|
||||
sed -ie "s|\"$i\":\"[^\"]*\"|\"$i\":\"$SHA\"|" $FILE
|
||||
fi
|
||||
|
||||
#echo $i
|
||||
done
|
||||
|
|
@ -12,7 +12,7 @@ to be used with 'cargo vendor' commmand.
|
|||
"""
|
||||
|
||||
[dependencies]
|
||||
cbindgen = "0.29.1"
|
||||
cbindgen = "0.8.2"
|
||||
|
||||
[[bin]]
|
||||
name = "dummy"
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
# Dummy Cargo.toml file with cbindgen dependency
|
||||
cat > Cargo.toml <<EOL
|
||||
[package]
|
||||
name = "dummy"
|
||||
version = "0.0.1"
|
||||
description = """
|
||||
This is a dummy package which contains dependency on cbindgen
|
||||
to be used with 'cargo vendor' commmand.
|
||||
"""
|
||||
|
||||
[dependencies]
|
||||
dump_syms = "=2.3.2"
|
||||
time = "0.3.36"
|
||||
|
||||
[[bin]]
|
||||
name = "dummy"
|
||||
path = "dummy.rs"
|
||||
doc = false
|
||||
EOL
|
||||
|
||||
cargo install cargo-vendor
|
||||
cargo vendor
|
||||
|
||||
cd vendor
|
||||
tar -cJf ../dump_syms-vendor.tar.xz *
|
||||
cd ..
|
||||
|
||||
rm -f Cargo.toml
|
||||
rm -rf vendor
|
||||
|
||||
|
|
@ -1 +0,0 @@
|
|||
AIzaSyB2h2OuRcUgy5N-5hsZqiPW6sH3n_rptiQ
|
||||
99
mozilla-1170092.patch
Normal file
99
mozilla-1170092.patch
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
diff -up firefox-67.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 firefox-67.0/extensions/pref/autoconfig/src/nsReadConfig.cpp
|
||||
--- firefox-67.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 2019-05-14 01:08:09.000000000 +0200
|
||||
+++ firefox-67.0/extensions/pref/autoconfig/src/nsReadConfig.cpp 2019-05-15 15:10:23.860653275 +0200
|
||||
@@ -246,8 +246,20 @@ nsresult nsReadConfig::openAndEvaluateJS
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile);
|
||||
- if (NS_FAILED(rv)) return rv;
|
||||
+ if (NS_FAILED(rv)) {
|
||||
+ // Look for cfg file in /etc/<application>/pref
|
||||
+ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR,
|
||||
+ getter_AddRefs(jsFile));
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+
|
||||
+ rv = jsFile->AppendNative(NS_LITERAL_CSTRING("pref"));
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+ rv = jsFile->AppendNative(nsDependentCString(aFileName));
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
+ rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+ }
|
||||
} else {
|
||||
nsAutoCString location("resource://gre/defaults/autoconfig/");
|
||||
location += aFileName;
|
||||
diff -up firefox-67.0/modules/libpref/Preferences.cpp.1170092 firefox-67.0/modules/libpref/Preferences.cpp
|
||||
--- firefox-67.0/modules/libpref/Preferences.cpp.1170092 2019-05-15 15:10:23.860653275 +0200
|
||||
+++ firefox-67.0/modules/libpref/Preferences.cpp 2019-05-15 15:11:58.160110320 +0200
|
||||
@@ -4417,6 +4417,9 @@ float MOZ_MAYBE_UNUSED GetPref<float>(co
|
||||
//
|
||||
// Thus, in the omni.jar case, we always load app-specific default
|
||||
// preferences from omni.jar, whether or not `$app == $gre`.
|
||||
+ //
|
||||
+ // At very end load configuration from system config location:
|
||||
+ // - /etc/firefox/pref/*.js
|
||||
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
nsZipFind* findPtr;
|
||||
diff -up firefox-67.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-67.0/toolkit/xre/nsXREDirProvider.cpp
|
||||
--- firefox-67.0/toolkit/xre/nsXREDirProvider.cpp.1170092 2019-05-14 01:08:35.000000000 +0200
|
||||
+++ firefox-67.0/toolkit/xre/nsXREDirProvider.cpp 2019-05-15 15:10:23.861653269 +0200
|
||||
@@ -60,6 +60,7 @@
|
||||
#endif
|
||||
#ifdef XP_UNIX
|
||||
# include <ctype.h>
|
||||
+# include "nsIXULAppInfo.h"
|
||||
#endif
|
||||
#ifdef XP_IOS
|
||||
# include "UIKitDirProvider.h"
|
||||
@@ -524,6 +525,21 @@ nsXREDirProvider::GetFile(const char* aP
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+#if defined(XP_UNIX)
|
||||
+ if (!strcmp(aProperty, NS_APP_PREFS_SYSTEM_CONFIG_DIR)) {
|
||||
+ nsCString sysConfigDir = NS_LITERAL_CSTRING("/etc/");
|
||||
+ nsCOMPtr<nsIXULAppInfo> appInfo = do_GetService("@mozilla.org/xre/app-info;1");
|
||||
+ if (!appInfo)
|
||||
+ return NS_ERROR_NOT_AVAILABLE;
|
||||
+ nsCString appName;
|
||||
+ appInfo->GetName(appName);
|
||||
+ ToLowerCase(appName);
|
||||
+ sysConfigDir.Append(appName);
|
||||
+ return NS_NewNativeLocalFile(sysConfigDir, false, aFile);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
if (NS_FAILED(rv) || !file) return NS_ERROR_FAILURE;
|
||||
|
||||
if (ensureFilePermissions) {
|
||||
@@ -880,6 +896,16 @@ nsresult nsXREDirProvider::GetFilesInter
|
||||
LoadDirIntoArray(mXULAppDir, kAppendPrefDir, directories);
|
||||
LoadDirsIntoArray(mAppBundleDirectories, kAppendPrefDir, directories);
|
||||
|
||||
+ // Add /etc/<application>/pref/ directory if it exists
|
||||
+ nsCOMPtr<nsIFile> systemPrefDir;
|
||||
+ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR,
|
||||
+ getter_AddRefs(systemPrefDir));
|
||||
+ if (NS_SUCCEEDED(rv)) {
|
||||
+ rv = systemPrefDir->AppendNative(NS_LITERAL_CSTRING("pref"));
|
||||
+ if (NS_SUCCEEDED(rv))
|
||||
+ directories.AppendObject(systemPrefDir);
|
||||
+ }
|
||||
+
|
||||
rv = NS_NewArrayEnumerator(aResult, directories, NS_GET_IID(nsIFile));
|
||||
} else if (!strcmp(aProperty, NS_APP_CHROME_DIR_LIST)) {
|
||||
// NS_APP_CHROME_DIR_LIST is only used to get default (native) icons
|
||||
diff -up firefox-67.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 firefox-67.0/xpcom/io/nsAppDirectoryServiceDefs.h
|
||||
--- firefox-67.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 2019-05-14 01:08:28.000000000 +0200
|
||||
+++ firefox-67.0/xpcom/io/nsAppDirectoryServiceDefs.h 2019-05-15 15:10:24.044652216 +0200
|
||||
@@ -62,6 +62,7 @@
|
||||
#define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL"
|
||||
#define NS_APP_PREFS_OVERRIDE_DIR \
|
||||
"PrefDOverride" // Directory for per-profile defaults
|
||||
+#define NS_APP_PREFS_SYSTEM_CONFIG_DIR "PrefSysConf" // Directory with system-wide configuration
|
||||
|
||||
#define NS_APP_USER_PROFILE_50_DIR "ProfD"
|
||||
#define NS_APP_USER_PROFILE_LOCAL_50_DIR "ProfLD"
|
||||
|
|
@ -1,12 +1,13 @@
|
|||
diff -up firefox-133.0/widget/gtk/nsWindow.cpp.1196777 firefox-133.0/widget/gtk/nsWindow.cpp
|
||||
--- firefox-133.0/widget/gtk/nsWindow.cpp.1196777 2024-11-22 09:32:52.293470407 +0100
|
||||
+++ firefox-133.0/widget/gtk/nsWindow.cpp 2024-11-22 10:21:54.996441520 +0100
|
||||
@@ -191,7 +191,7 @@ constexpr gint kEvents =
|
||||
GDK_VISIBILITY_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK |
|
||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_SMOOTH_SCROLL_MASK |
|
||||
GDK_TOUCH_MASK | GDK_SCROLL_MASK | GDK_POINTER_MOTION_MASK |
|
||||
- GDK_PROPERTY_CHANGE_MASK;
|
||||
+ GDK_PROPERTY_CHANGE_MASK | GDK_FOCUS_CHANGE_MASK;
|
||||
diff -up firefox-65.0/widget/gtk/nsWindow.cpp.1196777 firefox-65.0/widget/gtk/nsWindow.cpp
|
||||
--- firefox-65.0/widget/gtk/nsWindow.cpp.1196777 2019-01-28 14:37:27.470163867 +0100
|
||||
+++ firefox-65.0/widget/gtk/nsWindow.cpp 2019-01-28 14:41:52.479064393 +0100
|
||||
@@ -156,7 +156,8 @@ const gint kEvents =
|
||||
#if GTK_CHECK_VERSION(3, 4, 0)
|
||||
GDK_SMOOTH_SCROLL_MASK | GDK_TOUCH_MASK |
|
||||
#endif
|
||||
- GDK_SCROLL_MASK | GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK;
|
||||
+ GDK_SCROLL_MASK | GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK |
|
||||
+ GDK_FOCUS_CHANGE_MASK;
|
||||
|
||||
/* utility functions */
|
||||
static bool is_mouse_in_window(GdkWindow* aWindow, gdouble aMouseX,
|
||||
static bool is_mouse_in_window(GdkWindow *aWindow, gdouble aMouseX,
|
||||
|
|
|
|||
496
mozilla-1337988.patch
Normal file
496
mozilla-1337988.patch
Normal file
|
|
@ -0,0 +1,496 @@
|
|||
diff -up firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp.1337988 firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp
|
||||
--- firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp.1337988 2017-09-14 22:15:56.000000000 +0200
|
||||
+++ firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp 2017-09-25 10:34:11.205611698 +0200
|
||||
@@ -1719,7 +1719,7 @@ NPObjWrapper_ObjectMoved(JSObject *obj,
|
||||
auto entry =
|
||||
static_cast<NPObjWrapperHashEntry*>(sNPObjWrappers->Search(npobj));
|
||||
MOZ_ASSERT(entry && entry->mJSObj);
|
||||
- MOZ_ASSERT(entry->mJSObj == old);
|
||||
+ MOZ_ASSERT(entry->mJSObj.unbarrieredGetPtr() == old);
|
||||
entry->mJSObj = obj;
|
||||
}
|
||||
|
||||
diff -up firefox-56.0/js/ipc/JavaScriptShared.cpp.1337988 firefox-56.0/js/ipc/JavaScriptShared.cpp
|
||||
--- firefox-56.0/js/ipc/JavaScriptShared.cpp.1337988 2017-07-31 18:20:47.000000000 +0200
|
||||
+++ firefox-56.0/js/ipc/JavaScriptShared.cpp 2017-09-25 10:34:11.205611698 +0200
|
||||
@@ -101,7 +101,7 @@ IdToObjectMap::has(const ObjectId& id, c
|
||||
auto p = table_.lookup(id);
|
||||
if (!p)
|
||||
return false;
|
||||
- return p->value() == obj;
|
||||
+ return p->value().unbarrieredGet() == obj;
|
||||
}
|
||||
#endif
|
||||
|
||||
diff -up firefox-56.0/js/public/RootingAPI.h.1337988 firefox-56.0/js/public/RootingAPI.h
|
||||
--- firefox-56.0/js/public/RootingAPI.h.1337988 2017-07-31 18:20:47.000000000 +0200
|
||||
+++ firefox-56.0/js/public/RootingAPI.h 2017-09-25 10:34:11.206611695 +0200
|
||||
@@ -148,6 +148,10 @@ template<typename T>
|
||||
struct PersistentRootedMarker;
|
||||
} /* namespace gc */
|
||||
|
||||
+#define DECLARE_POINTER_COMPARISON_OPS(T) \
|
||||
+ bool operator==(const T& other) const { return get() == other; } \
|
||||
+ bool operator!=(const T& other) const { return get() != other; }
|
||||
+
|
||||
// Important: Return a reference so passing a Rooted<T>, etc. to
|
||||
// something that takes a |const T&| is not a GC hazard.
|
||||
#define DECLARE_POINTER_CONSTREF_OPS(T) \
|
||||
@@ -237,8 +241,6 @@ class Heap : public js::HeapBase<T, Heap
|
||||
static_assert(js::IsHeapConstructibleType<T>::value,
|
||||
"Type T must be a public GC pointer type");
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
Heap() {
|
||||
static_assert(sizeof(T) == sizeof(Heap<T>),
|
||||
"Heap<T> must be binary compatible with T.");
|
||||
@@ -385,8 +387,6 @@ template <typename T>
|
||||
class TenuredHeap : public js::HeapBase<T, TenuredHeap<T>>
|
||||
{
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
TenuredHeap() : bits(0) {
|
||||
static_assert(sizeof(T) == sizeof(TenuredHeap<T>),
|
||||
"TenuredHeap<T> must be binary compatible with T.");
|
||||
@@ -394,6 +394,9 @@ class TenuredHeap : public js::HeapBase<
|
||||
explicit TenuredHeap(T p) : bits(0) { setPtr(p); }
|
||||
explicit TenuredHeap(const TenuredHeap<T>& p) : bits(0) { setPtr(p.getPtr()); }
|
||||
|
||||
+ bool operator==(const TenuredHeap<T>& other) { return bits == other.bits; }
|
||||
+ bool operator!=(const TenuredHeap<T>& other) { return bits != other.bits; }
|
||||
+
|
||||
void setPtr(T newPtr) {
|
||||
MOZ_ASSERT((reinterpret_cast<uintptr_t>(newPtr) & flagsMask) == 0);
|
||||
if (newPtr)
|
||||
@@ -470,8 +473,6 @@ class MOZ_NONHEAP_CLASS Handle : public
|
||||
friend class JS::MutableHandle<T>;
|
||||
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
/* Creates a handle from a handle of a type convertible to T. */
|
||||
template <typename S>
|
||||
MOZ_IMPLICIT Handle(Handle<S> handle,
|
||||
@@ -533,6 +534,7 @@ class MOZ_NONHEAP_CLASS Handle : public
|
||||
MOZ_IMPLICIT Handle(MutableHandle<S>& root,
|
||||
typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy = 0);
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
DECLARE_NONPOINTER_ACCESSOR_METHODS(*ptr);
|
||||
|
||||
@@ -559,8 +561,6 @@ template <typename T>
|
||||
class MOZ_STACK_CLASS MutableHandle : public js::MutableHandleBase<T, MutableHandle<T>>
|
||||
{
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
inline MOZ_IMPLICIT MutableHandle(Rooted<T>* root);
|
||||
inline MOZ_IMPLICIT MutableHandle(PersistentRooted<T>* root);
|
||||
|
||||
@@ -589,6 +589,7 @@ class MOZ_STACK_CLASS MutableHandle : pu
|
||||
return h;
|
||||
}
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
DECLARE_NONPOINTER_ACCESSOR_METHODS(*ptr);
|
||||
DECLARE_NONPOINTER_MUTABLE_ACCESSOR_METHODS(*ptr);
|
||||
@@ -805,8 +806,6 @@ class MOZ_RAII Rooted : public js::Roote
|
||||
}
|
||||
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
template <typename RootingContext>
|
||||
explicit Rooted(const RootingContext& cx)
|
||||
: ptr(GCPolicy<T>::initial())
|
||||
@@ -839,6 +838,7 @@ class MOZ_RAII Rooted : public js::Roote
|
||||
ptr = mozilla::Move(value);
|
||||
}
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
DECLARE_POINTER_ASSIGN_OPS(Rooted, T);
|
||||
DECLARE_NONPOINTER_ACCESSOR_METHODS(ptr);
|
||||
@@ -903,14 +903,13 @@ template <typename T>
|
||||
class MOZ_RAII FakeRooted : public RootedBase<T, FakeRooted<T>>
|
||||
{
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
template <typename CX>
|
||||
explicit FakeRooted(CX* cx) : ptr(JS::GCPolicy<T>::initial()) {}
|
||||
|
||||
template <typename CX>
|
||||
FakeRooted(CX* cx, T initial) : ptr(initial) {}
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
DECLARE_POINTER_ASSIGN_OPS(FakeRooted, T);
|
||||
DECLARE_NONPOINTER_ACCESSOR_METHODS(ptr);
|
||||
@@ -931,8 +930,6 @@ template <typename T>
|
||||
class FakeMutableHandle : public js::MutableHandleBase<T, FakeMutableHandle<T>>
|
||||
{
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
MOZ_IMPLICIT FakeMutableHandle(T* t) {
|
||||
ptr = t;
|
||||
}
|
||||
@@ -1124,8 +1121,6 @@ class PersistentRooted : public js::Root
|
||||
}
|
||||
|
||||
public:
|
||||
- using ElementType = T;
|
||||
-
|
||||
PersistentRooted() : ptr(GCPolicy<T>::initial()) {}
|
||||
|
||||
explicit PersistentRooted(RootingContext* cx)
|
||||
@@ -1203,6 +1198,7 @@ class PersistentRooted : public js::Root
|
||||
}
|
||||
}
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
DECLARE_POINTER_ASSIGN_OPS(PersistentRooted, T);
|
||||
DECLARE_NONPOINTER_ACCESSOR_METHODS(ptr);
|
||||
@@ -1234,8 +1230,6 @@ class JS_PUBLIC_API(ObjectPtr)
|
||||
Heap<JSObject*> value;
|
||||
|
||||
public:
|
||||
- using ElementType = JSObject*;
|
||||
-
|
||||
ObjectPtr() : value(nullptr) {}
|
||||
|
||||
explicit ObjectPtr(JSObject* obj) : value(obj) {}
|
||||
@@ -1342,177 +1336,6 @@ Swap(JS::TenuredHeap<T>& aX, JS::Tenured
|
||||
|
||||
} /* namespace mozilla */
|
||||
|
||||
-namespace js {
|
||||
-namespace detail {
|
||||
-
|
||||
-// DefineComparisonOps is a trait which selects which wrapper classes to define
|
||||
-// operator== and operator!= for. It supplies a getter function to extract the
|
||||
-// value to compare. This is used to avoid triggering the automatic read
|
||||
-// barriers where appropriate.
|
||||
-//
|
||||
-// If DefineComparisonOps is not specialized for a particular wrapper you may
|
||||
-// get errors such as 'invalid operands to binary expression' or 'no match for
|
||||
-// operator==' when trying to compare against instances of the wrapper.
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps : mozilla::FalseType {};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::Heap<T>> : mozilla::TrueType {
|
||||
- static const T& get(const JS::Heap<T>& v) { return v.unbarrieredGet(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::TenuredHeap<T>> : mozilla::TrueType {
|
||||
- static const T get(const JS::TenuredHeap<T>& v) { return v.unbarrieredGetPtr(); }
|
||||
-};
|
||||
-
|
||||
-template <>
|
||||
-struct DefineComparisonOps<JS::ObjectPtr> : mozilla::TrueType {
|
||||
- static const JSObject* get(const JS::ObjectPtr& v) { return v.unbarrieredGet(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::Rooted<T>> : mozilla::TrueType {
|
||||
- static const T& get(const JS::Rooted<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::Handle<T>> : mozilla::TrueType {
|
||||
- static const T& get(const JS::Handle<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::MutableHandle<T>> : mozilla::TrueType {
|
||||
- static const T& get(const JS::MutableHandle<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<JS::PersistentRooted<T>> : mozilla::TrueType {
|
||||
- static const T& get(const JS::PersistentRooted<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<js::FakeRooted<T>> : mozilla::TrueType {
|
||||
- static const T& get(const js::FakeRooted<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<js::FakeMutableHandle<T>> : mozilla::TrueType {
|
||||
- static const T& get(const js::FakeMutableHandle<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-} /* namespace detail */
|
||||
-} /* namespace js */
|
||||
-
|
||||
-// Overload operator== and operator!= for all types with the DefineComparisonOps
|
||||
-// trait using the supplied getter.
|
||||
-//
|
||||
-// There are four cases:
|
||||
-
|
||||
-// Case 1: comparison between two wrapper objects.
|
||||
-
|
||||
-template <typename T, typename U>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- js::detail::DefineComparisonOps<U>::value, bool>::Type
|
||||
-operator==(const T& a, const U& b) {
|
||||
- return js::detail::DefineComparisonOps<T>::get(a) == js::detail::DefineComparisonOps<U>::get(b);
|
||||
-}
|
||||
-
|
||||
-template <typename T, typename U>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- js::detail::DefineComparisonOps<U>::value, bool>::Type
|
||||
-operator!=(const T& a, const U& b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-// Case 2: comparison between a wrapper object and its unwrapped element type.
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
|
||||
-operator==(const T& a, const typename T::ElementType& b) {
|
||||
- return js::detail::DefineComparisonOps<T>::get(a) == b;
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
|
||||
-operator!=(const T& a, const typename T::ElementType& b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
|
||||
-operator==(const typename T::ElementType& a, const T& b) {
|
||||
- return a == js::detail::DefineComparisonOps<T>::get(b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
|
||||
-operator!=(const typename T::ElementType& a, const T& b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-// Case 3: For pointer wrappers, comparison between the wrapper and a const
|
||||
-// element pointer.
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator==(const typename mozilla::RemovePointer<typename T::ElementType>::Type* a, const T& b) {
|
||||
- return a == js::detail::DefineComparisonOps<T>::get(b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator!=(const typename mozilla::RemovePointer<typename T::ElementType>::Type* a, const T& b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator==(const T& a, const typename mozilla::RemovePointer<typename T::ElementType>::Type* b) {
|
||||
- return js::detail::DefineComparisonOps<T>::get(a) == b;
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator!=(const T& a, const typename mozilla::RemovePointer<typename T::ElementType>::Type* b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-// Case 4: For pointer wrappers, comparison between the wrapper and nullptr.
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator==(std::nullptr_t a, const T& b) {
|
||||
- return a == js::detail::DefineComparisonOps<T>::get(b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator!=(std::nullptr_t a, const T& b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator==(const T& a, std::nullptr_t b) {
|
||||
- return js::detail::DefineComparisonOps<T>::get(a) == b;
|
||||
-}
|
||||
-
|
||||
-template <typename T>
|
||||
-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
|
||||
- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
|
||||
-operator!=(const T& a, std::nullptr_t b) {
|
||||
- return !(a == b);
|
||||
-}
|
||||
-
|
||||
#undef DELETE_ASSIGNMENT_OPS
|
||||
|
||||
#endif /* js_RootingAPI_h */
|
||||
diff -up firefox-56.0/js/src/gc/Barrier.h.1337988 firefox-56.0/js/src/gc/Barrier.h
|
||||
--- firefox-56.0/js/src/gc/Barrier.h.1337988 2017-09-14 22:16:01.000000000 +0200
|
||||
+++ firefox-56.0/js/src/gc/Barrier.h 2017-09-25 10:34:11.206611695 +0200
|
||||
@@ -353,8 +353,8 @@ class WriteBarrieredBase : public Barrie
|
||||
explicit WriteBarrieredBase(const T& v) : BarrieredBase<T>(v) {}
|
||||
|
||||
public:
|
||||
- using ElementType = T;
|
||||
|
||||
+ DECLARE_POINTER_COMPARISON_OPS(T);
|
||||
DECLARE_POINTER_CONSTREF_OPS(T);
|
||||
|
||||
// Use this if the automatic coercion to T isn't working.
|
||||
@@ -612,13 +612,14 @@ class ReadBarriered : public ReadBarrier
|
||||
return *this;
|
||||
}
|
||||
|
||||
- const T& get() const {
|
||||
- if (InternalBarrierMethods<T>::isMarkable(this->value))
|
||||
- this->read();
|
||||
+ const T get() const {
|
||||
+ if (!InternalBarrierMethods<T>::isMarkable(this->value))
|
||||
+ return JS::GCPolicy<T>::initial();
|
||||
+ this->read();
|
||||
return this->value;
|
||||
}
|
||||
|
||||
- const T& unbarrieredGet() const {
|
||||
+ const T unbarrieredGet() const {
|
||||
return this->value;
|
||||
}
|
||||
|
||||
@@ -626,9 +627,9 @@ class ReadBarriered : public ReadBarrier
|
||||
return bool(this->value);
|
||||
}
|
||||
|
||||
- operator const T&() const { return get(); }
|
||||
+ operator const T() const { return get(); }
|
||||
|
||||
- const T& operator->() const { return get(); }
|
||||
+ const T operator->() const { return get(); }
|
||||
|
||||
T* unsafeGet() { return &this->value; }
|
||||
T const* unsafeGet() const { return &this->value; }
|
||||
@@ -955,35 +956,6 @@ typedef ReadBarriered<WasmTableObject*>
|
||||
|
||||
typedef ReadBarriered<Value> ReadBarrieredValue;
|
||||
|
||||
-namespace detail {
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<PreBarriered<T>> : mozilla::TrueType {
|
||||
- static const T& get(const PreBarriered<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<GCPtr<T>> : mozilla::TrueType {
|
||||
- static const T& get(const GCPtr<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<HeapPtr<T>> : mozilla::TrueType {
|
||||
- static const T& get(const HeapPtr<T>& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-template <typename T>
|
||||
-struct DefineComparisonOps<ReadBarriered<T>> : mozilla::TrueType {
|
||||
- static const T& get(const ReadBarriered<T>& v) { return v.unbarrieredGet(); }
|
||||
-};
|
||||
-
|
||||
-template <>
|
||||
-struct DefineComparisonOps<HeapSlot> : mozilla::TrueType {
|
||||
- static const Value& get(const HeapSlot& v) { return v.get(); }
|
||||
-};
|
||||
-
|
||||
-} /* namespace detail */
|
||||
-
|
||||
} /* namespace js */
|
||||
|
||||
#endif /* gc_Barrier_h */
|
||||
diff -up firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp.1337988 firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp
|
||||
--- firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp.1337988 2017-09-14 22:16:02.000000000 +0200
|
||||
+++ firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp 2017-09-25 10:34:11.206611695 +0200
|
||||
@@ -5,7 +5,6 @@
|
||||
* 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/. */
|
||||
|
||||
-#include "mozilla/TypeTraits.h"
|
||||
#include "mozilla/UniquePtr.h"
|
||||
|
||||
#include "js/RootingAPI.h"
|
||||
diff -up firefox-56.0/js/src/vm/SharedMem.h.1337988 firefox-56.0/js/src/vm/SharedMem.h
|
||||
--- firefox-56.0/js/src/vm/SharedMem.h.1337988 2017-06-15 22:52:29.000000000 +0200
|
||||
+++ firefox-56.0/js/src/vm/SharedMem.h 2017-09-25 10:34:11.206611695 +0200
|
||||
@@ -12,8 +12,8 @@
|
||||
template<typename T>
|
||||
class SharedMem
|
||||
{
|
||||
- // static_assert(mozilla::IsPointer<T>::value,
|
||||
- // "SharedMem encapsulates pointer types");
|
||||
+ static_assert(mozilla::IsPointer<T>::value,
|
||||
+ "SharedMem encapsulates pointer types");
|
||||
|
||||
enum Sharedness {
|
||||
IsUnshared,
|
||||
diff -up firefox-56.0/js/xpconnect/src/XPCInlines.h.1337988 firefox-56.0/js/xpconnect/src/XPCInlines.h
|
||||
--- firefox-56.0/js/xpconnect/src/XPCInlines.h.1337988 2017-09-14 22:16:03.000000000 +0200
|
||||
+++ firefox-56.0/js/xpconnect/src/XPCInlines.h 2017-09-25 10:34:11.206611695 +0200
|
||||
@@ -465,7 +465,7 @@ inline
|
||||
void XPCWrappedNativeTearOff::JSObjectMoved(JSObject* obj, const JSObject* old)
|
||||
{
|
||||
MOZ_ASSERT(!IsMarked());
|
||||
- MOZ_ASSERT(mJSObject == old);
|
||||
+ MOZ_ASSERT(mJSObject.unbarrieredGetPtr() == old);
|
||||
mJSObject = obj;
|
||||
}
|
||||
|
||||
diff -up firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp.1337988 firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp
|
||||
--- firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp.1337988 2017-09-14 22:16:03.000000000 +0200
|
||||
+++ firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp 2017-09-25 10:34:11.207611692 +0200
|
||||
@@ -874,7 +874,7 @@ void
|
||||
XPCWrappedNative::FlatJSObjectMoved(JSObject* obj, const JSObject* old)
|
||||
{
|
||||
JS::AutoAssertGCCallback inCallback;
|
||||
- MOZ_ASSERT(mFlatJSObject == old);
|
||||
+ MOZ_ASSERT(mFlatJSObject.unbarrieredGetPtr() == old);
|
||||
|
||||
nsWrapperCache* cache = nullptr;
|
||||
CallQueryInterface(mIdentity, &cache);
|
||||
diff -up firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp.1337988 firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp
|
||||
--- firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp.1337988 2017-07-31 18:20:47.000000000 +0200
|
||||
+++ firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp 2017-09-25 10:34:11.207611692 +0200
|
||||
@@ -101,7 +101,7 @@ XPCWrappedNativeProto::CallPostCreatePro
|
||||
void
|
||||
XPCWrappedNativeProto::JSProtoObjectFinalized(js::FreeOp* fop, JSObject* obj)
|
||||
{
|
||||
- MOZ_ASSERT(obj == mJSProtoObject, "huh?");
|
||||
+ MOZ_ASSERT(obj == mJSProtoObject.unbarrieredGet(), "huh?");
|
||||
|
||||
#ifdef DEBUG
|
||||
// Check that this object has already been swept from the map.
|
||||
@@ -117,7 +117,7 @@ XPCWrappedNativeProto::JSProtoObjectFina
|
||||
void
|
||||
XPCWrappedNativeProto::JSProtoObjectMoved(JSObject* obj, const JSObject* old)
|
||||
{
|
||||
- MOZ_ASSERT(mJSProtoObject == old);
|
||||
+ MOZ_ASSERT(mJSProtoObject.unbarrieredGet() == old);
|
||||
mJSProtoObject.init(obj); // Update without triggering barriers.
|
||||
}
|
||||
|
||||
27
mozilla-1353817.patch
Normal file
27
mozilla-1353817.patch
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
From 1cc652f5525f458b0b4ceb12af24bf5a4367db32 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Tue, 23 May 2017 13:09:48 -0400
|
||||
Subject: [PATCH] Bug 1353817: Include SkNx_neon.h for ARM64 too
|
||||
|
||||
This fixes build errors as arm_neon.h was missing along with some
|
||||
missing converters.
|
||||
---
|
||||
gfx/skia/skia/src/core/SkNx.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/gfx/skia/skia/src/core/SkNx.h b/gfx/skia/skia/src/core/SkNx.h
|
||||
index 6bca856..b0427aa 100644
|
||||
--- a/gfx/skia/skia/src/core/SkNx.h
|
||||
+++ b/gfx/skia/skia/src/core/SkNx.h
|
||||
@@ -299,7 +299,7 @@ typedef SkNx<4, uint32_t> Sk4u;
|
||||
// Include platform specific specializations if available.
|
||||
#if !defined(SKNX_NO_SIMD) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
|
||||
#include "../opts/SkNx_sse.h"
|
||||
-#elif !defined(SKNX_NO_SIMD) && defined(SK_ARM_HAS_NEON)
|
||||
+#elif !defined(SKNX_NO_SIMD) && (defined(SK_ARM_HAS_NEON) || defined(SK_CPU_ARM64))
|
||||
#include "../opts/SkNx_neon.h"
|
||||
#else
|
||||
|
||||
--
|
||||
2.9.4
|
||||
|
||||
203
mozilla-1423598-popup.patch
Normal file
203
mozilla-1423598-popup.patch
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
diff -up firefox-67.0/widget/gtk/nsWindow.cpp.mozilla-1423598-popup firefox-67.0/widget/gtk/nsWindow.cpp
|
||||
--- firefox-67.0/widget/gtk/nsWindow.cpp.mozilla-1423598-popup 2019-05-15 15:21:25.590222702 +0200
|
||||
+++ firefox-67.0/widget/gtk/nsWindow.cpp 2019-05-15 15:24:26.925439991 +0200
|
||||
@@ -1115,13 +1115,89 @@ void nsWindow::Move(double aX, double aY
|
||||
NotifyRollupGeometryChange();
|
||||
}
|
||||
|
||||
+#ifdef DEBUG
|
||||
+static void NativeMoveResizeWaylandPopupCallback(GdkWindow *window,
|
||||
+ const GdkRectangle *flipped_rect, const GdkRectangle *final_rect,
|
||||
+ gboolean flipped_x, gboolean flipped_y, void *unused)
|
||||
+{
|
||||
+ LOG(("NativeMoveResizeWaylandPopupCallback flipped %d %d\n",
|
||||
+ flipped_rect->x, flipped_rect->y));
|
||||
+ LOG(("NativeMoveResizeWaylandPopupCallback final %d %d\n",
|
||||
+ final_rect->x, final_rect->y));
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+void nsWindow::NativeMoveResizeWaylandPopup(GdkPoint* aPosition, GdkRectangle* aSize) {
|
||||
+ // Available as of GTK 3.24+
|
||||
+ static auto sGdkWindowMoveToRect =
|
||||
+ (void (*)(GdkWindow *, const GdkRectangle *, GdkGravity, GdkGravity,
|
||||
+ GdkAnchorHints, gint, gint))
|
||||
+ dlsym(RTLD_DEFAULT, "gdk_window_move_to_rect");
|
||||
+
|
||||
+ if (aSize) {
|
||||
+ gtk_window_resize(GTK_WINDOW(mShell), aSize->width, aSize->height);
|
||||
+ }
|
||||
+ if (!sGdkWindowMoveToRect) {
|
||||
+ gtk_window_move(GTK_WINDOW(mShell), aPosition->x, aPosition->y);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ GdkWindow *gdkWindow = gtk_widget_get_window(GTK_WIDGET(mShell));
|
||||
+ if (!gdkWindow) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ GtkWidget* parentWidget =
|
||||
+ GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
|
||||
+
|
||||
+ int x_parent, y_parent;
|
||||
+ gdk_window_get_origin(gtk_widget_get_window(parentWidget), &x_parent, &y_parent);
|
||||
+
|
||||
+ GdkRectangle rect = { aPosition->x - x_parent,
|
||||
+ aPosition->y - y_parent,
|
||||
+ 1, 1};
|
||||
+ if (aSize) {
|
||||
+ rect.width = aSize->width;
|
||||
+ rect.height = aSize->height;
|
||||
+ }
|
||||
+
|
||||
+#ifdef DEBUG
|
||||
+ LOG(("NativeMoveResizeWaylandPopup request position %d,%d\n",
|
||||
+ aPosition->x, aPosition->y));
|
||||
+ if (aSize) {
|
||||
+ LOG(("NativeMoveResizeWaylandPopup request size %d,%d\n",
|
||||
+ aSize->width, aSize->height));
|
||||
+ }
|
||||
+ LOG(("NativeMoveResizeWaylandPopup result %d %d\n", rect.x, rect.y));
|
||||
+ g_signal_connect(gdkWindow, "moved-to-rect",
|
||||
+ G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
|
||||
+#endif
|
||||
+
|
||||
+ GdkGravity rectAnchor = GDK_GRAVITY_NORTH_WEST;
|
||||
+ GdkGravity menuAnchor = GDK_GRAVITY_NORTH_WEST;
|
||||
+ if (GetTextDirection() == GTK_TEXT_DIR_RTL) {
|
||||
+ rectAnchor = GDK_GRAVITY_NORTH_EAST;
|
||||
+ menuAnchor = GDK_GRAVITY_NORTH_EAST;
|
||||
+ }
|
||||
+
|
||||
+ GdkAnchorHints hints = GdkAnchorHints(GDK_ANCHOR_SLIDE | GDK_ANCHOR_FLIP);
|
||||
+ if (aSize) {
|
||||
+ hints = GdkAnchorHints(hints|GDK_ANCHOR_RESIZE);
|
||||
+ }
|
||||
+
|
||||
+ sGdkWindowMoveToRect(gdkWindow, &rect, rectAnchor, menuAnchor, hints, 0, 0);
|
||||
+}
|
||||
+
|
||||
void nsWindow::NativeMove() {
|
||||
GdkPoint point = DevicePixelsToGdkPointRoundDown(mBounds.TopLeft());
|
||||
-
|
||||
- if (mIsTopLevel) {
|
||||
- gtk_window_move(GTK_WINDOW(mShell), point.x, point.y);
|
||||
- } else if (mGdkWindow) {
|
||||
- gdk_window_move(mGdkWindow, point.x, point.y);
|
||||
+ if (!mIsX11Display && mIsTopLevel && mWindowType == eWindowType_popup) {
|
||||
+ NativeMoveResizeWaylandPopup(&point, nullptr);
|
||||
+ } else {
|
||||
+ if (mIsTopLevel) {
|
||||
+ gtk_window_move(GTK_WINDOW(mShell), point.x, point.y);
|
||||
+ } else if (mGdkWindow) {
|
||||
+ gdk_window_move(mGdkWindow, point.x, point.y);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3412,11 +3488,6 @@ nsresult nsWindow::Create(nsIWidget *aPa
|
||||
GDK_WINDOW_TYPE_HINT_DIALOG);
|
||||
gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
|
||||
} else if (mWindowType == eWindowType_popup) {
|
||||
- // With popup windows, we want to control their position, so don't
|
||||
- // wait for the window manager to place them (which wouldn't
|
||||
- // happen with override-redirect windows anyway).
|
||||
- NativeMove();
|
||||
-
|
||||
gtk_window_set_wmclass(GTK_WINDOW(mShell), "Popup",
|
||||
gdk_get_program_class());
|
||||
|
||||
@@ -3475,6 +3546,14 @@ nsresult nsWindow::Create(nsIWidget *aPa
|
||||
if (topLevelParent) {
|
||||
gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
|
||||
}
|
||||
+
|
||||
+ // We need realized mShell at NativeMove().
|
||||
+ gtk_widget_realize(mShell);
|
||||
+
|
||||
+ // With popup windows, we want to control their position, so don't
|
||||
+ // wait for the window manager to place them (which wouldn't
|
||||
+ // happen with override-redirect windows anyway).
|
||||
+ NativeMove();
|
||||
} else { // must be eWindowType_toplevel
|
||||
SetDefaultIcon();
|
||||
gtk_window_set_wmclass(GTK_WINDOW(mShell), "Toplevel",
|
||||
@@ -3918,23 +3997,27 @@ void nsWindow::NativeMoveResize() {
|
||||
LOG(("nsWindow::NativeMoveResize [%p] %d %d %d %d\n", (void *)this, topLeft.x,
|
||||
topLeft.y, size.width, size.height));
|
||||
|
||||
- if (mIsTopLevel) {
|
||||
- // x and y give the position of the window manager frame top-left.
|
||||
- gtk_window_move(GTK_WINDOW(mShell), topLeft.x, topLeft.y);
|
||||
- // This sets the client window size.
|
||||
- MOZ_ASSERT(size.width > 0 && size.height > 0,
|
||||
- "Can't resize window smaller than 1x1.");
|
||||
- gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
|
||||
- } else if (mContainer) {
|
||||
- GtkAllocation allocation;
|
||||
- allocation.x = topLeft.x;
|
||||
- allocation.y = topLeft.y;
|
||||
- allocation.width = size.width;
|
||||
- allocation.height = size.height;
|
||||
- gtk_widget_size_allocate(GTK_WIDGET(mContainer), &allocation);
|
||||
- } else if (mGdkWindow) {
|
||||
- gdk_window_move_resize(mGdkWindow, topLeft.x, topLeft.y, size.width,
|
||||
- size.height);
|
||||
+ if (!mIsX11Display && mIsTopLevel && mWindowType == eWindowType_popup) {
|
||||
+ NativeMoveResizeWaylandPopup(&topLeft, &size);
|
||||
+ } else {
|
||||
+ if (mIsTopLevel) {
|
||||
+ // x and y give the position of the window manager frame top-left.
|
||||
+ gtk_window_move(GTK_WINDOW(mShell), topLeft.x, topLeft.y);
|
||||
+ // This sets the client window size.
|
||||
+ MOZ_ASSERT(size.width > 0 && size.height > 0,
|
||||
+ "Can't resize window smaller than 1x1.");
|
||||
+ gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
|
||||
+ } else if (mContainer) {
|
||||
+ GtkAllocation allocation;
|
||||
+ allocation.x = topLeft.x;
|
||||
+ allocation.y = topLeft.y;
|
||||
+ allocation.width = size.width;
|
||||
+ allocation.height = size.height;
|
||||
+ gtk_widget_size_allocate(GTK_WIDGET(mContainer), &allocation);
|
||||
+ } else if (mGdkWindow) {
|
||||
+ gdk_window_move_resize(mGdkWindow, topLeft.x, topLeft.y, size.width,
|
||||
+ size.height);
|
||||
+ }
|
||||
}
|
||||
|
||||
#ifdef MOZ_X11
|
||||
@@ -6818,3 +6901,18 @@ void nsWindow::ForceTitlebarRedraw(void)
|
||||
RestyleHint{0}, nsChangeHint_RepaintFrame);
|
||||
}
|
||||
}
|
||||
+
|
||||
+GtkTextDirection nsWindow::GetTextDirection() {
|
||||
+ nsView *view = nsView::GetViewFor(this);
|
||||
+ if (!view) {
|
||||
+ return GTK_TEXT_DIR_LTR;
|
||||
+ }
|
||||
+ nsIFrame *frame = view->GetFrame();
|
||||
+ if (!frame) {
|
||||
+ return GTK_TEXT_DIR_LTR;
|
||||
+ }
|
||||
+
|
||||
+ WritingMode wm = frame->GetWritingMode();
|
||||
+ bool isFrameRTL = !(wm.IsVertical() ? wm.IsVerticalLR() : wm.IsBidiLTR());
|
||||
+ return isFrameRTL ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR;
|
||||
+}
|
||||
diff -up firefox-67.0/widget/gtk/nsWindow.h.mozilla-1423598-popup firefox-67.0/widget/gtk/nsWindow.h
|
||||
--- firefox-67.0/widget/gtk/nsWindow.h.mozilla-1423598-popup 2019-05-14 01:08:37.000000000 +0200
|
||||
+++ firefox-67.0/widget/gtk/nsWindow.h 2019-05-15 15:21:25.890221541 +0200
|
||||
@@ -460,6 +460,10 @@ class nsWindow final : public nsBaseWidg
|
||||
nsWindow* GetTransientForWindowIfPopup();
|
||||
bool IsHandlingTouchSequence(GdkEventSequence* aSequence);
|
||||
|
||||
+ void NativeMoveResizeWaylandPopup(GdkPoint* aPosition, GdkRectangle* aSize);
|
||||
+
|
||||
+ GtkTextDirection GetTextDirection();
|
||||
+
|
||||
#ifdef MOZ_X11
|
||||
typedef enum {GTK_WIDGET_COMPOSIDED_DEFAULT = 0,
|
||||
GTK_WIDGET_COMPOSIDED_DISABLED = 1,
|
||||
256
mozilla-1467127.patch
Normal file
256
mozilla-1467127.patch
Normal file
|
|
@ -0,0 +1,256 @@
|
|||
diff --git a/gfx/thebes/gfxPlatform.cpp b/gfx/thebes/gfxPlatform.cpp
|
||||
--- a/gfx/thebes/gfxPlatform.cpp
|
||||
+++ b/gfx/thebes/gfxPlatform.cpp
|
||||
@@ -70,6 +70,10 @@
|
||||
# include "mozilla/gfx/DeviceManagerDx.h"
|
||||
#endif
|
||||
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+# include "mozilla/widget/nsWaylandDisplayShutdown.h"
|
||||
+#endif
|
||||
+
|
||||
#include "nsGkAtoms.h"
|
||||
#include "gfxPlatformFontList.h"
|
||||
#include "gfxContext.h"
|
||||
@@ -1276,6 +1280,9 @@
|
||||
layers::PaintThread::Shutdown();
|
||||
}
|
||||
} else if (XRE_IsParentProcess()) {
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ widget::WaylandDisplayShutdown();
|
||||
+#endif
|
||||
gfx::VRManagerChild::ShutDown();
|
||||
layers::CompositorManagerChild::Shutdown();
|
||||
layers::ImageBridgeChild::ShutDown();
|
||||
diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
|
||||
--- a/widget/gtk/WindowSurfaceWayland.cpp
|
||||
+++ b/widget/gtk/WindowSurfaceWayland.cpp
|
||||
@@ -144,6 +144,8 @@
|
||||
(wl_buffer/wl_surface).
|
||||
*/
|
||||
|
||||
+#define EVENT_LOOP_DELAY (1000 / 240)
|
||||
+
|
||||
#define BUFFER_BPP 4
|
||||
gfx::SurfaceFormat WindowBackBuffer::mFormat = gfx::SurfaceFormat::B8G8R8A8;
|
||||
|
||||
diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
|
||||
--- a/widget/gtk/moz.build
|
||||
+++ b/widget/gtk/moz.build
|
||||
@@ -101,6 +101,9 @@
|
||||
'nsWaylandDisplay.cpp',
|
||||
'WindowSurfaceWayland.cpp',
|
||||
]
|
||||
+ EXPORTS.mozilla.widget += [
|
||||
+ 'nsWaylandDisplayShutdown.h'
|
||||
+ ]
|
||||
|
||||
if CONFIG['ACCESSIBILITY']:
|
||||
UNIFIED_SOURCES += [
|
||||
diff --git a/widget/gtk/nsAppShell.cpp b/widget/gtk/nsAppShell.cpp
|
||||
--- a/widget/gtk/nsAppShell.cpp
|
||||
+++ b/widget/gtk/nsAppShell.cpp
|
||||
@@ -27,6 +27,9 @@
|
||||
#include "ScreenHelperGTK.h"
|
||||
#include "HeadlessScreenHelper.h"
|
||||
#include "mozilla/widget/ScreenManager.h"
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+# include "nsWaylandDisplay.h"
|
||||
+#endif
|
||||
|
||||
using mozilla::LazyLogModule;
|
||||
using mozilla::Unused;
|
||||
@@ -267,5 +270,9 @@
|
||||
}
|
||||
|
||||
bool nsAppShell::ProcessNextNativeEvent(bool mayWait) {
|
||||
- return g_main_context_iteration(nullptr, mayWait);
|
||||
+ bool ret = g_main_context_iteration(nullptr, mayWait);
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ WaylandDispatchDisplays();
|
||||
+#endif
|
||||
+ return ret;
|
||||
}
|
||||
diff --git a/widget/gtk/nsWaylandDisplay.h b/widget/gtk/nsWaylandDisplay.h
|
||||
--- a/widget/gtk/nsWaylandDisplay.h
|
||||
+++ b/widget/gtk/nsWaylandDisplay.h
|
||||
@@ -14,10 +14,6 @@
|
||||
namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
-// TODO: Bug 1467125 - We need to integrate wl_display_dispatch_queue_pending()
|
||||
-// with compositor event loop.
|
||||
-#define EVENT_LOOP_DELAY (1000 / 240)
|
||||
-
|
||||
// Our general connection to Wayland display server,
|
||||
// holds our display connection and runs event loop.
|
||||
class nsWaylandDisplay {
|
||||
@@ -25,9 +21,10 @@
|
||||
explicit nsWaylandDisplay(wl_display* aDisplay);
|
||||
virtual ~nsWaylandDisplay();
|
||||
|
||||
- bool DisplayLoop();
|
||||
+ bool DispatchEventQueue();
|
||||
bool Matches(wl_display* aDisplay);
|
||||
|
||||
+ MessageLoop* GetDispatcherThreadLoop() { return mDispatcherThreadLoop; }
|
||||
wl_display* GetDisplay() { return mDisplay; };
|
||||
wl_event_queue* GetEventQueue() { return mEventQueue; };
|
||||
wl_subcompositor* GetSubcompositor(void) { return mSubcompositor; };
|
||||
@@ -47,7 +44,10 @@
|
||||
void SetPrimarySelectionDeviceManager(
|
||||
gtk_primary_selection_device_manager* aPrimarySelectionDeviceManager);
|
||||
|
||||
+ void Shutdown();
|
||||
+
|
||||
private:
|
||||
+ MessageLoop* mDispatcherThreadLoop;
|
||||
PRThread* mThreadId;
|
||||
wl_display* mDisplay;
|
||||
wl_event_queue* mEventQueue;
|
||||
@@ -59,6 +59,7 @@
|
||||
wl_registry* mRegistry;
|
||||
};
|
||||
|
||||
+void WaylandDispatchDisplays();
|
||||
nsWaylandDisplay* WaylandDisplayGet(GdkDisplay* aGdkDisplay = nullptr);
|
||||
|
||||
} // namespace widget
|
||||
diff --git a/widget/gtk/nsWaylandDisplay.cpp b/widget/gtk/nsWaylandDisplay.cpp
|
||||
--- a/widget/gtk/nsWaylandDisplay.cpp
|
||||
+++ b/widget/gtk/nsWaylandDisplay.cpp
|
||||
@@ -21,6 +21,15 @@
|
||||
static nsWaylandDisplay *gWaylandDisplays[MAX_DISPLAY_CONNECTIONS];
|
||||
static StaticMutex gWaylandDisplaysMutex;
|
||||
|
||||
+void WaylandDisplayShutdown() {
|
||||
+ StaticMutexAutoLock lock(gWaylandDisplaysMutex);
|
||||
+ for (auto &display : gWaylandDisplays) {
|
||||
+ if (display) {
|
||||
+ display->Shutdown();
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void ReleaseDisplaysAtExit() {
|
||||
for (int i = 0; i < MAX_DISPLAY_CONNECTIONS; i++) {
|
||||
delete gWaylandDisplays[i];
|
||||
@@ -28,6 +37,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
+static void DispatchDisplay(nsWaylandDisplay *aDisplay) {
|
||||
+ aDisplay->DispatchEventQueue();
|
||||
+}
|
||||
+
|
||||
// Each thread which is using wayland connection (wl_display) has to operate
|
||||
// its own wl_event_queue. Main Firefox thread wl_event_queue is handled
|
||||
// by Gtk main loop, other threads/wl_event_queue has to be handled by us.
|
||||
@@ -35,7 +48,15 @@
|
||||
// nsWaylandDisplay is our interface to wayland compositor. It provides wayland
|
||||
// global objects as we need (wl_display, wl_shm) and operates wl_event_queue on
|
||||
// compositor (not the main) thread.
|
||||
-static void WaylandDisplayLoop(wl_display *aDisplay);
|
||||
+void WaylandDispatchDisplays() {
|
||||
+ StaticMutexAutoLock lock(gWaylandDisplaysMutex);
|
||||
+ for (auto &display : gWaylandDisplays) {
|
||||
+ if (display && display->GetDispatcherThreadLoop()) {
|
||||
+ display->GetDispatcherThreadLoop()->PostTask(NewRunnableFunction(
|
||||
+ "WaylandDisplayDispatch", &DispatchDisplay, display));
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
|
||||
// Get WaylandDisplay for given wl_display and actual calling thread.
|
||||
static nsWaylandDisplay *WaylandDisplayGetLocked(GdkDisplay *aGdkDisplay,
|
||||
@@ -73,27 +94,6 @@
|
||||
return WaylandDisplayGetLocked(aGdkDisplay, lock);
|
||||
}
|
||||
|
||||
-static void WaylandDisplayLoopLocked(wl_display *aDisplay,
|
||||
- const StaticMutexAutoLock &) {
|
||||
- for (auto &display : gWaylandDisplays) {
|
||||
- if (display && display->Matches(aDisplay)) {
|
||||
- if (display->DisplayLoop()) {
|
||||
- MessageLoop::current()->PostDelayedTask(
|
||||
- NewRunnableFunction("WaylandDisplayLoop", &WaylandDisplayLoop,
|
||||
- aDisplay),
|
||||
- EVENT_LOOP_DELAY);
|
||||
- }
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static void WaylandDisplayLoop(wl_display *aDisplay) {
|
||||
- MOZ_ASSERT(!NS_IsMainThread());
|
||||
- StaticMutexAutoLock lock(gWaylandDisplaysMutex);
|
||||
- WaylandDisplayLoopLocked(aDisplay, lock);
|
||||
-}
|
||||
-
|
||||
void nsWaylandDisplay::SetShm(wl_shm *aShm) { mShm = aShm; }
|
||||
|
||||
void nsWaylandDisplay::SetSubcompositor(wl_subcompositor *aSubcompositor) {
|
||||
@@ -158,7 +158,7 @@
|
||||
static const struct wl_registry_listener registry_listener = {
|
||||
global_registry_handler, global_registry_remover};
|
||||
|
||||
-bool nsWaylandDisplay::DisplayLoop() {
|
||||
+bool nsWaylandDisplay::DispatchEventQueue() {
|
||||
wl_display_dispatch_queue_pending(mDisplay, mEventQueue);
|
||||
return true;
|
||||
}
|
||||
@@ -168,7 +168,8 @@
|
||||
}
|
||||
|
||||
nsWaylandDisplay::nsWaylandDisplay(wl_display *aDisplay)
|
||||
- : mThreadId(PR_GetCurrentThread()),
|
||||
+ : mDispatcherThreadLoop(nullptr),
|
||||
+ mThreadId(PR_GetCurrentThread()),
|
||||
mDisplay(aDisplay),
|
||||
mEventQueue(nullptr),
|
||||
mDataDeviceManager(nullptr),
|
||||
@@ -186,15 +187,16 @@
|
||||
wl_display_roundtrip(mDisplay);
|
||||
wl_display_roundtrip(mDisplay);
|
||||
} else {
|
||||
+ mDispatcherThreadLoop = MessageLoop::current();
|
||||
mEventQueue = wl_display_create_queue(mDisplay);
|
||||
- MessageLoop::current()->PostTask(NewRunnableFunction(
|
||||
- "WaylandDisplayLoop", &WaylandDisplayLoop, mDisplay));
|
||||
wl_proxy_set_queue((struct wl_proxy *)mRegistry, mEventQueue);
|
||||
wl_display_roundtrip_queue(mDisplay, mEventQueue);
|
||||
wl_display_roundtrip_queue(mDisplay, mEventQueue);
|
||||
}
|
||||
}
|
||||
|
||||
+void nsWaylandDisplay::Shutdown() { mDispatcherThreadLoop = nullptr; }
|
||||
+
|
||||
nsWaylandDisplay::~nsWaylandDisplay() {
|
||||
// Owned by Gtk+, we don't need to release
|
||||
mDisplay = nullptr;
|
||||
diff --git a/widget/gtk/nsWaylandDisplayShutdown.h b/widget/gtk/nsWaylandDisplayShutdown.h
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/widget/gtk/nsWaylandDisplayShutdown.h
|
||||
@@ -0,0 +1,19 @@
|
||||
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
+/* vim:expandtab:shiftwidth=4:tabstop=4:
|
||||
+ */
|
||||
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
+
|
||||
+#ifndef __MOZ_WAYLAND_DISPLAY_SHUTDOWN_H__
|
||||
+#define __MOZ_WAYLAND_DISPLAY_SHUTDOWN_H__
|
||||
+
|
||||
+namespace mozilla {
|
||||
+namespace widget {
|
||||
+
|
||||
+void WaylandDisplayShutdown();
|
||||
+
|
||||
+} // namespace widget
|
||||
+} // namespace mozilla
|
||||
+
|
||||
+#endif // __MOZ_WAYLAND_DISPLAY_SHUTDOWN_H__
|
||||
|
||||
276
mozilla-1468911.patch
Normal file
276
mozilla-1468911.patch
Normal file
|
|
@ -0,0 +1,276 @@
|
|||
changeset: 465236:be9a6c98a4a7
|
||||
tag: tip
|
||||
user: Martin Stransky <stransky@redhat.com>
|
||||
date: Mon Mar 18 10:42:48 2019 +0100
|
||||
summary: tearing
|
||||
|
||||
|
||||
diff --git a/widget/gtk/nsAppShell.cpp b/widget/gtk/nsAppShell.cpp
|
||||
--- a/widget/gtk/nsAppShell.cpp
|
||||
+++ b/widget/gtk/nsAppShell.cpp
|
||||
@@ -35,16 +35,17 @@ using mozilla::widget::ScreenHelperGTK;
|
||||
using mozilla::widget::ScreenManager;
|
||||
|
||||
#define NOTIFY_TOKEN 0xFA
|
||||
|
||||
LazyLogModule gWidgetLog("Widget");
|
||||
LazyLogModule gWidgetFocusLog("WidgetFocus");
|
||||
LazyLogModule gWidgetDragLog("WidgetDrag");
|
||||
LazyLogModule gWidgetDrawLog("WidgetDraw");
|
||||
+LazyLogModule gWidgetWaylandLog("WidgetWayland");
|
||||
|
||||
static GPollFunc sPollFunc;
|
||||
|
||||
// Wrapper function to disable hang monitoring while waiting in poll().
|
||||
static gint PollWrapper(GPollFD* ufds, guint nfsd, gint timeout_) {
|
||||
mozilla::BackgroundHangMonitor().NotifyWait();
|
||||
gint result;
|
||||
{
|
||||
|
||||
diff -up firefox-66.0/widget/gtk/WindowSurfaceWayland.cpp.old firefox-66.0/widget/gtk/WindowSurfaceWayland.cpp
|
||||
--- firefox-66.0/widget/gtk/WindowSurfaceWayland.cpp.old 2019-03-20 15:48:52.265966904 +0100
|
||||
+++ firefox-66.0/widget/gtk/WindowSurfaceWayland.cpp 2019-03-20 14:48:21.082035284 +0100
|
||||
@@ -20,6 +20,18 @@
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
||||
+#undef LOG
|
||||
+#ifdef MOZ_LOGGING
|
||||
+# include "mozilla/Logging.h"
|
||||
+# include "nsTArray.h"
|
||||
+# include "Units.h"
|
||||
+extern mozilla::LazyLogModule gWidgetWaylandLog;
|
||||
+# define LOGWAYLAND(args) \
|
||||
+ MOZ_LOG(gWidgetWaylandLog, mozilla::LogLevel::Debug, args)
|
||||
+#else
|
||||
+# define LOGWAYLAND(args)
|
||||
+#endif /* MOZ_LOGGING */
|
||||
+
|
||||
namespace mozilla {
|
||||
namespace widget {
|
||||
|
||||
@@ -241,7 +253,7 @@ WaylandShmPool::~WaylandShmPool() {
|
||||
|
||||
static void buffer_release(void* data, wl_buffer* buffer) {
|
||||
auto surface = reinterpret_cast<WindowBackBuffer*>(data);
|
||||
- surface->Detach();
|
||||
+ surface->Detach(buffer);
|
||||
}
|
||||
|
||||
static const struct wl_buffer_listener buffer_listener = {buffer_release};
|
||||
@@ -261,9 +273,16 @@ void WindowBackBuffer::Create(int aWidth
|
||||
|
||||
mWidth = aWidth;
|
||||
mHeight = aHeight;
|
||||
+
|
||||
+ LOGWAYLAND((
|
||||
+ "%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
|
||||
+ (void*)mWaylandBuffer,
|
||||
+ mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
|
||||
}
|
||||
|
||||
void WindowBackBuffer::Release() {
|
||||
+ LOGWAYLAND(("%s [%p]\n", __PRETTY_FUNCTION__, (void*)this));
|
||||
+
|
||||
wl_buffer_destroy(mWaylandBuffer);
|
||||
mWidth = mHeight = 0;
|
||||
}
|
||||
@@ -288,6 +307,9 @@ WindowBackBuffer::~WindowBackBuffer() {
|
||||
bool WindowBackBuffer::Resize(int aWidth, int aHeight) {
|
||||
if (aWidth == mWidth && aHeight == mHeight) return true;
|
||||
|
||||
+ LOGWAYLAND(
|
||||
+ ("%s [%p] %d %d\n", __PRETTY_FUNCTION__, (void*)this, aWidth, aHeight));
|
||||
+
|
||||
Release();
|
||||
Create(aWidth, aHeight);
|
||||
|
||||
@@ -295,13 +317,26 @@ bool WindowBackBuffer::Resize(int aWidth
|
||||
}
|
||||
|
||||
void WindowBackBuffer::Attach(wl_surface* aSurface) {
|
||||
+ LOGWAYLAND((
|
||||
+ "%s [%p] wl_surface %p ID %d wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
|
||||
+ (void*)this, (void*)aSurface,
|
||||
+ aSurface ? wl_proxy_get_id((struct wl_proxy*)aSurface) : -1,
|
||||
+ (void*)mWaylandBuffer,
|
||||
+ mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
|
||||
+
|
||||
wl_surface_attach(aSurface, mWaylandBuffer, 0, 0);
|
||||
wl_surface_commit(aSurface);
|
||||
wl_display_flush(mWaylandDisplay->GetDisplay());
|
||||
mAttached = true;
|
||||
}
|
||||
|
||||
-void WindowBackBuffer::Detach() { mAttached = false; }
|
||||
+void WindowBackBuffer::Detach(wl_buffer* aBuffer) {
|
||||
+ LOGWAYLAND(("%s [%p] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__, (void*)this,
|
||||
+ (void*)aBuffer,
|
||||
+ aBuffer ? wl_proxy_get_id((struct wl_proxy*)aBuffer) : -1));
|
||||
+
|
||||
+ mAttached = false;
|
||||
+}
|
||||
|
||||
bool WindowBackBuffer::SetImageDataFromBuffer(
|
||||
class WindowBackBuffer* aSourceBuffer) {
|
||||
@@ -316,6 +351,11 @@ bool WindowBackBuffer::SetImageDataFromB
|
||||
}
|
||||
|
||||
already_AddRefed<gfx::DrawTarget> WindowBackBuffer::Lock() {
|
||||
+ LOGWAYLAND((
|
||||
+ "%s [%p] [%d x %d] wl_buffer %p ID %d\n", __PRETTY_FUNCTION__,
|
||||
+ (void*)this, mWidth, mHeight, (void*)mWaylandBuffer,
|
||||
+ mWaylandBuffer ? wl_proxy_get_id((struct wl_proxy*)mWaylandBuffer) : -1));
|
||||
+
|
||||
gfx::IntSize lockSize(mWidth, mHeight);
|
||||
return gfxPlatform::CreateDrawTargetForData(
|
||||
static_cast<unsigned char*>(mShmPool.GetImageData()), lockSize,
|
||||
@@ -345,7 +385,8 @@ WindowSurfaceWayland::WindowSurfaceWayla
|
||||
mPendingCommit(false),
|
||||
mWaylandBufferFullScreenDamage(false),
|
||||
mIsMainThread(NS_IsMainThread()),
|
||||
- mNeedScaleFactorUpdate(true) {
|
||||
+ mNeedScaleFactorUpdate(true),
|
||||
+ mWaitToFullScreenUpdate(true) {
|
||||
for (int i = 0; i < BACK_BUFFER_NUM; i++) mBackupBuffer[i] = nullptr;
|
||||
}
|
||||
|
||||
@@ -387,7 +428,11 @@ WindowSurfaceWayland::~WindowSurfaceWayl
|
||||
WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(int aWidth,
|
||||
int aHeight) {
|
||||
if (!mWaylandBuffer) {
|
||||
+ LOGWAYLAND(("%s [%p] Create [%d x %d]\n", __PRETTY_FUNCTION__, (void*)this,
|
||||
+ aWidth, aHeight));
|
||||
+
|
||||
mWaylandBuffer = new WindowBackBuffer(mWaylandDisplay, aWidth, aHeight);
|
||||
+ mWaitToFullScreenUpdate = true;
|
||||
return mWaylandBuffer;
|
||||
}
|
||||
|
||||
@@ -396,8 +441,11 @@ WindowBackBuffer* WindowSurfaceWayland::
|
||||
mWaylandBuffer->Resize(aWidth, aHeight);
|
||||
// There's a chance that scale factor has been changed
|
||||
// when buffer size changed
|
||||
- mNeedScaleFactorUpdate = true;
|
||||
+ mWaitToFullScreenUpdate = true;
|
||||
}
|
||||
+ LOGWAYLAND(("%s [%p] Reuse buffer [%d x %d]\n", __PRETTY_FUNCTION__,
|
||||
+ (void*)this, aWidth, aHeight));
|
||||
+
|
||||
return mWaylandBuffer;
|
||||
}
|
||||
|
||||
@@ -420,6 +468,8 @@ WindowBackBuffer* WindowSurfaceWayland::
|
||||
}
|
||||
|
||||
if (MOZ_UNLIKELY(availableBuffer == BACK_BUFFER_NUM)) {
|
||||
+ LOGWAYLAND(("%s [%p] No drawing buffer available!\n", __PRETTY_FUNCTION__,
|
||||
+ (void*)this));
|
||||
NS_WARNING("No drawing buffer available");
|
||||
return nullptr;
|
||||
}
|
||||
@@ -429,6 +479,8 @@ WindowBackBuffer* WindowSurfaceWayland::
|
||||
mBackupBuffer[availableBuffer] = lastWaylandBuffer;
|
||||
|
||||
if (lastWaylandBuffer->IsMatchingSize(aWidth, aHeight)) {
|
||||
+ LOGWAYLAND(("%s [%p] Copy from old buffer [%d x %d]\n", __PRETTY_FUNCTION__,
|
||||
+ (void*)this, aWidth, aHeight));
|
||||
// Former front buffer has the same size as a requested one.
|
||||
// Gecko may expect a content already drawn on screen so copy
|
||||
// existing data to the new buffer.
|
||||
@@ -437,9 +489,12 @@ WindowBackBuffer* WindowSurfaceWayland::
|
||||
// (https://bugzilla.redhat.com/show_bug.cgi?id=1418260)
|
||||
mWaylandBufferFullScreenDamage = true;
|
||||
} else {
|
||||
+ LOGWAYLAND(("%s [%p] Resize to [%d x %d]\n", __PRETTY_FUNCTION__,
|
||||
+ (void*)this, aWidth, aHeight));
|
||||
// Former buffer has different size from the new request. Only resize
|
||||
// the new buffer and leave gecko to render new whole content.
|
||||
mWaylandBuffer->Resize(aWidth, aHeight);
|
||||
+ mWaitToFullScreenUpdate = true;
|
||||
}
|
||||
|
||||
return mWaylandBuffer;
|
||||
@@ -499,6 +554,10 @@ already_AddRefed<gfx::DrawTarget> Window
|
||||
gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
|
||||
gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
|
||||
|
||||
+ LOGWAYLAND(("%s [%p] lockSize [%d x %d] screenSize [%d x %d]\n",
|
||||
+ __PRETTY_FUNCTION__, (void*)this, lockSize.width, lockSize.height,
|
||||
+ screenRect.width, lockSize.height));
|
||||
+
|
||||
// Are we asked for entire nsWindow to draw?
|
||||
mDrawToWaylandBufferDirectly =
|
||||
(aRegion.GetNumRects() == 1 && bounds.x == 0 && bounds.y == 0 &&
|
||||
@@ -510,6 +569,13 @@ already_AddRefed<gfx::DrawTarget> Window
|
||||
LockWaylandBuffer(screenRect.width, screenRect.height,
|
||||
mWindow->WaylandSurfaceNeedsClear());
|
||||
if (dt) {
|
||||
+ // When we have a request to update whole screen at once
|
||||
+ // (surface was created, resized or changed somehow)
|
||||
+ // we also need update scale factor of the screen.
|
||||
+ if (mWaitToFullScreenUpdate) {
|
||||
+ mWaitToFullScreenUpdate = false;
|
||||
+ mNeedScaleFactorUpdate = true;
|
||||
+ }
|
||||
return dt.forget();
|
||||
}
|
||||
|
||||
@@ -576,6 +642,10 @@ static void WaylandBufferDelayCommitHand
|
||||
void WindowSurfaceWayland::CommitWaylandBuffer() {
|
||||
MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
|
||||
|
||||
+ if (mWaitToFullScreenUpdate) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
wl_surface* waylandSurface = mWindow->GetWaylandSurface();
|
||||
if (!waylandSurface) {
|
||||
// Target window is not created yet - delay the commit. This can happen only
|
||||
@@ -619,6 +689,7 @@ void WindowSurfaceWayland::CommitWayland
|
||||
LayoutDeviceIntRect rect = mWindow->GetBounds();
|
||||
wl_surface_damage(waylandSurface, 0, 0, rect.width, rect.height);
|
||||
mWaylandBufferFullScreenDamage = false;
|
||||
+ mNeedScaleFactorUpdate = true;
|
||||
} else {
|
||||
gint scaleFactor = mWindow->GdkScaleFactor();
|
||||
for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
|
||||
@@ -653,6 +724,18 @@ void WindowSurfaceWayland::CommitWayland
|
||||
void WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion) {
|
||||
MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
|
||||
|
||||
+#ifdef DEBUG
|
||||
+ {
|
||||
+ LayoutDeviceIntRect screenRect = mWindow->GetBounds();
|
||||
+ gfx::IntRect bounds = aInvalidRegion.GetBounds().ToUnknownRect();
|
||||
+ gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
|
||||
+
|
||||
+ LOGWAYLAND(("%s [%p] lockSize [%d x %d] screenSize [%d x %d]\n",
|
||||
+ __PRETTY_FUNCTION__, (void*)this, lockSize.width,
|
||||
+ lockSize.height, screenRect.width, lockSize.height));
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
// We have new content at mImageSurface - copy data to mWaylandBuffer first.
|
||||
if (!mDrawToWaylandBufferDirectly) {
|
||||
CommitImageSurfaceToWaylandBuffer(aInvalidRegion);
|
||||
diff -up firefox-66.0/widget/gtk/WindowSurfaceWayland.h.old firefox-66.0/widget/gtk/WindowSurfaceWayland.h
|
||||
--- firefox-66.0/widget/gtk/WindowSurfaceWayland.h.old 2019-03-20 15:48:56.218949138 +0100
|
||||
+++ firefox-66.0/widget/gtk/WindowSurfaceWayland.h 2019-03-20 14:48:21.082035284 +0100
|
||||
@@ -46,7 +46,7 @@ class WindowBackBuffer {
|
||||
already_AddRefed<gfx::DrawTarget> Lock();
|
||||
|
||||
void Attach(wl_surface* aSurface);
|
||||
- void Detach();
|
||||
+ void Detach(wl_buffer* aBuffer);
|
||||
bool IsAttached() { return mAttached; }
|
||||
|
||||
void Clear();
|
||||
@@ -118,6 +118,7 @@ class WindowSurfaceWayland : public Wind
|
||||
bool mWaylandBufferFullScreenDamage;
|
||||
bool mIsMainThread;
|
||||
bool mNeedScaleFactorUpdate;
|
||||
+ bool mWaitToFullScreenUpdate;
|
||||
};
|
||||
|
||||
} // namespace widget
|
||||
92
mozilla-1508378.patch
Normal file
92
mozilla-1508378.patch
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
changeset: 468935:3b964face103
|
||||
tag: tip
|
||||
user: Martin Stransky <stransky@redhat.com>
|
||||
date: Wed Apr 10 15:14:32 2019 +0200
|
||||
summary: Bug 1508378 - Fix round error when damage rect size/position is odd number and scale factor is used, r=lsalzman
|
||||
|
||||
diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
|
||||
--- a/widget/gtk/WindowSurfaceWayland.cpp
|
||||
+++ b/widget/gtk/WindowSurfaceWayland.cpp
|
||||
@@ -624,16 +624,33 @@ static void WaylandBufferDelayCommitHand
|
||||
} else {
|
||||
// Referenced WindowSurfaceWayland is already deleted.
|
||||
// Do nothing but just release the mDelayedCommitHandle allocated at
|
||||
// WindowSurfaceWayland::CommitWaylandBuffer().
|
||||
free(aSurface);
|
||||
}
|
||||
}
|
||||
|
||||
+void WindowSurfaceWayland::CalcRectScale(LayoutDeviceIntRect& aRect, int aScale) {
|
||||
+ if (aRect.x & 0x1) {
|
||||
+ aRect.width += 1;
|
||||
+ }
|
||||
+ aRect.x = aRect.x / aScale;
|
||||
+
|
||||
+ if (aRect.y & 0x1) {
|
||||
+ aRect.height += 1;
|
||||
+ }
|
||||
+ aRect.y = aRect.y / aScale;
|
||||
+
|
||||
+ aRect.width = (aRect.width & 0x1) ? aRect.width / aScale + 1 :
|
||||
+ aRect.width / aScale;
|
||||
+ aRect.height = (aRect.height & 0x1) ? aRect.height / aScale + 1 :
|
||||
+ aRect.height / aScale;
|
||||
+}
|
||||
+
|
||||
void WindowSurfaceWayland::CommitWaylandBuffer() {
|
||||
MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
|
||||
|
||||
if (mWaitToFullScreenUpdate) {
|
||||
return;
|
||||
}
|
||||
|
||||
wl_surface* waylandSurface = mWindow->GetWaylandSurface();
|
||||
@@ -679,21 +696,23 @@ void WindowSurfaceWayland::CommitWayland
|
||||
LayoutDeviceIntRect rect = mWindow->GetBounds();
|
||||
wl_surface_damage(waylandSurface, 0, 0, rect.width, rect.height);
|
||||
mWaylandBufferFullScreenDamage = false;
|
||||
mNeedScaleFactorUpdate = true;
|
||||
} else {
|
||||
gint scaleFactor = mWindow->GdkScaleFactor();
|
||||
for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
|
||||
iter.Next()) {
|
||||
- const mozilla::LayoutDeviceIntRect& r = iter.Get();
|
||||
+ mozilla::LayoutDeviceIntRect r = iter.Get();
|
||||
// We need to remove the scale factor because the wl_surface_damage
|
||||
// also multiplies by current scale factor.
|
||||
- wl_surface_damage(waylandSurface, r.x / scaleFactor, r.y / scaleFactor,
|
||||
- r.width / scaleFactor, r.height / scaleFactor);
|
||||
+ if (scaleFactor > 1) {
|
||||
+ CalcRectScale(r, scaleFactor);
|
||||
+ }
|
||||
+ wl_surface_damage(waylandSurface, r.x, r.y, r.width, r.height);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear all back buffer damage as we're committing
|
||||
// all requested regions.
|
||||
mWaylandBufferDamage.SetEmpty();
|
||||
|
||||
mFrameCallback = wl_surface_frame(waylandSurface);
|
||||
diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
|
||||
--- a/widget/gtk/WindowSurfaceWayland.h
|
||||
+++ b/widget/gtk/WindowSurfaceWayland.h
|
||||
@@ -96,16 +96,17 @@ class WindowSurfaceWayland : public Wind
|
||||
WindowBackBuffer* GetWaylandBufferToDraw(int aWidth, int aHeight);
|
||||
|
||||
already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(int aWidth, int aHeight,
|
||||
bool aClearBuffer);
|
||||
already_AddRefed<gfx::DrawTarget> LockImageSurface(
|
||||
const gfx::IntSize& aLockSize);
|
||||
bool CommitImageSurfaceToWaylandBuffer(const LayoutDeviceIntRegion& aRegion);
|
||||
void CommitWaylandBuffer();
|
||||
+ void CalcRectScale(LayoutDeviceIntRect& aRect, int scale);
|
||||
|
||||
// TODO: Do we need to hold a reference to nsWindow object?
|
||||
nsWindow* mWindow;
|
||||
nsWaylandDisplay* mWaylandDisplay;
|
||||
WindowBackBuffer* mWaylandBuffer;
|
||||
LayoutDeviceIntRegion mWaylandBufferDamage;
|
||||
WindowBackBuffer* mBackupBuffer[BACK_BUFFER_NUM];
|
||||
RefPtr<gfxImageSurface> mImageSurface;
|
||||
|
||||
38
mozilla-1516081.patch
Normal file
38
mozilla-1516081.patch
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
diff -up firefox-65.0/build/moz.configure/toolchain.configure.1516081 firefox-65.0/build/moz.configure/toolchain.configure
|
||||
--- firefox-65.0/build/moz.configure/toolchain.configure.1516081 2019-01-24 19:48:38.000000000 +0100
|
||||
+++ firefox-65.0/build/moz.configure/toolchain.configure 2019-01-28 14:09:00.813320242 +0100
|
||||
@@ -1364,7 +1364,7 @@ def pgo_flags(compiler, build_env, targe
|
||||
|
||||
if compiler.type == 'gcc':
|
||||
return namespace(
|
||||
- gen_cflags=['-fprofile-generate'],
|
||||
+ gen_cflags=['-fprofile-generate', '-DMOZ_PROFILE_INSTRUMENTATION'],
|
||||
gen_ldflags=['-fprofile-generate'],
|
||||
use_cflags=['-fprofile-use', '-fprofile-correction',
|
||||
'-Wcoverage-mismatch'],
|
||||
@@ -1385,7 +1385,8 @@ def pgo_flags(compiler, build_env, targe
|
||||
|
||||
if gen_ldflags:
|
||||
return namespace(
|
||||
- gen_cflags=['-fprofile-instr-generate'],
|
||||
+ gen_cflags=['-fprofile-instr-generate',
|
||||
+ '-DMOZ_PROFILE_INSTRUMENTATION'],
|
||||
gen_ldflags=gen_ldflags,
|
||||
use_cflags=['-fprofile-instr-use=%s' % profdata,
|
||||
'-Wno-error=profile-instr-out-of-date',
|
||||
diff -up firefox-65.0/toolkit/components/terminator/nsTerminator.cpp.1516081 firefox-65.0/toolkit/components/terminator/nsTerminator.cpp
|
||||
--- firefox-65.0/toolkit/components/terminator/nsTerminator.cpp.1516081 2019-01-28 14:09:00.813320242 +0100
|
||||
+++ firefox-65.0/toolkit/components/terminator/nsTerminator.cpp 2019-01-28 14:11:56.745577302 +0100
|
||||
@@ -419,6 +419,12 @@ void nsTerminator::StartWatchdog() {
|
||||
}
|
||||
}
|
||||
#endif
|
||||
+ // Disable watchdog for PGO train builds - writting profile information at
|
||||
+ // exit may take time and it is better to make build hang rather than
|
||||
+ // silently produce poorly performing binary.
|
||||
+#ifdef MOZ_PROFILE_INSTRUMENTATION
|
||||
+ crashAfterMS = INT32_MAX;
|
||||
+#endif
|
||||
|
||||
UniquePtr<Options> options(new Options());
|
||||
const PRIntervalTime ticksDuration = PR_MillisecondsToInterval(1000);
|
||||
|
|
@ -1,15 +1,16 @@
|
|||
diff -up firefox-84.0/security/sandbox/linux/moz.build.1516803 firefox-84.0/security/sandbox/linux/moz.build
|
||||
--- firefox-84.0/security/sandbox/linux/moz.build.1516803 2020-12-10 16:17:55.425139545 +0100
|
||||
+++ firefox-84.0/security/sandbox/linux/moz.build 2020-12-10 16:29:21.945860841 +0100
|
||||
@@ -114,9 +114,8 @@ if CONFIG["CC_TYPE"] in ("clang", "gcc")
|
||||
diff --git a/security/sandbox/linux/moz.build b/security/sandbox/linux/moz.build
|
||||
--- a/security/sandbox/linux/moz.build
|
||||
+++ b/security/sandbox/linux/moz.build
|
||||
@@ -99,9 +99,8 @@
|
||||
# gcc lto likes to put the top level asm in syscall.cc in a different partition
|
||||
# from the function using it which breaks the build. Work around that by
|
||||
# forcing there to be only one partition.
|
||||
-for f in CONFIG["OS_CXXFLAGS"]:
|
||||
- if f.startswith("-flto") and CONFIG["CC_TYPE"] != "clang":
|
||||
- LDFLAGS += ["--param lto-partitions=1"]
|
||||
-for f in CONFIG['OS_CXXFLAGS']:
|
||||
- if f.startswith('-flto') and CONFIG['CC_TYPE'] != 'clang':
|
||||
- LDFLAGS += ['--param lto-partitions=1']
|
||||
+if CONFIG['CC_TYPE'] != 'clang':
|
||||
+ LDFLAGS += ['--param', 'lto-partitions=1']
|
||||
|
||||
DEFINES["NS_NO_XPCOM"] = True
|
||||
DEFINES['NS_NO_XPCOM'] = True
|
||||
DisableStlWrapping()
|
||||
|
||||
|
|
|
|||
209
mozilla-1517205.patch
Normal file
209
mozilla-1517205.patch
Normal file
|
|
@ -0,0 +1,209 @@
|
|||
diff -up firefox-67.0/widget/gtk/mozcontainer.cpp.mozilla-1517205 firefox-67.0/widget/gtk/mozcontainer.cpp
|
||||
--- firefox-67.0/widget/gtk/mozcontainer.cpp.mozilla-1517205 2019-05-15 16:00:23.366366060 +0200
|
||||
+++ firefox-67.0/widget/gtk/mozcontainer.cpp 2019-05-15 16:02:01.596967825 +0200
|
||||
@@ -567,8 +567,7 @@ struct wl_surface *moz_container_get_wl_
|
||||
moz_container_get_scale(container));
|
||||
|
||||
wl_surface_commit(container->surface);
|
||||
- wl_display_flush(waylandDisplay->GetDisplay());
|
||||
- WaylandDisplayRelease(waylandDisplay);
|
||||
+ wl_display_flush(waylandDisplay->GetDisplay());
|
||||
}
|
||||
|
||||
return container->surface;
|
||||
diff -up firefox-67.0/widget/gtk/nsClipboardWayland.cpp.mozilla-1517205 firefox-67.0/widget/gtk/nsClipboardWayland.cpp
|
||||
--- firefox-67.0/widget/gtk/nsClipboardWayland.cpp.mozilla-1517205 2019-05-14 01:08:37.000000000 +0200
|
||||
+++ firefox-67.0/widget/gtk/nsClipboardWayland.cpp 2019-05-15 16:00:23.367366056 +0200
|
||||
@@ -639,7 +639,6 @@ static gboolean offer_hash_remove(gpoint
|
||||
nsRetrievalContextWayland::~nsRetrievalContextWayland(void) {
|
||||
g_hash_table_foreach_remove(mActiveOffers, offer_hash_remove, nullptr);
|
||||
g_hash_table_destroy(mActiveOffers);
|
||||
- WaylandDisplayRelease(mDisplay);
|
||||
}
|
||||
|
||||
GdkAtom *nsRetrievalContextWayland::GetTargets(int32_t aWhichClipboard,
|
||||
diff -up firefox-67.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1517205 firefox-67.0/widget/gtk/nsWaylandDisplay.cpp
|
||||
--- firefox-67.0/widget/gtk/nsWaylandDisplay.cpp.mozilla-1517205 2019-05-14 01:08:37.000000000 +0200
|
||||
+++ firefox-67.0/widget/gtk/nsWaylandDisplay.cpp 2019-05-15 16:00:23.368366052 +0200
|
||||
@@ -21,6 +21,13 @@ namespace widget {
|
||||
static nsWaylandDisplay *gWaylandDisplays[MAX_DISPLAY_CONNECTIONS];
|
||||
static StaticMutex gWaylandDisplaysMutex;
|
||||
|
||||
+static void ReleaseDisplaysAtExit() {
|
||||
+ for (int i = 0; i < MAX_DISPLAY_CONNECTIONS; i++) {
|
||||
+ delete gWaylandDisplays[i];
|
||||
+ gWaylandDisplays[i] = nullptr;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
// Each thread which is using wayland connection (wl_display) has to operate
|
||||
// its own wl_event_queue. Main Firefox thread wl_event_queue is handled
|
||||
// by Gtk main loop, other threads/wl_event_queue has to be handled by us.
|
||||
@@ -35,7 +42,6 @@ static nsWaylandDisplay *WaylandDisplayG
|
||||
const StaticMutexAutoLock &) {
|
||||
for (auto &display : gWaylandDisplays) {
|
||||
if (display && display->Matches(aDisplay)) {
|
||||
- NS_ADDREF(display);
|
||||
return display;
|
||||
}
|
||||
}
|
||||
@@ -43,7 +49,7 @@ static nsWaylandDisplay *WaylandDisplayG
|
||||
for (auto &display : gWaylandDisplays) {
|
||||
if (display == nullptr) {
|
||||
display = new nsWaylandDisplay(aDisplay);
|
||||
- NS_ADDREF(display);
|
||||
+ atexit(ReleaseDisplaysAtExit);
|
||||
return display;
|
||||
}
|
||||
}
|
||||
@@ -67,26 +73,6 @@ nsWaylandDisplay *WaylandDisplayGet(GdkD
|
||||
return WaylandDisplayGetLocked(display, lock);
|
||||
}
|
||||
|
||||
-static bool WaylandDisplayReleaseLocked(nsWaylandDisplay *aDisplay,
|
||||
- const StaticMutexAutoLock &) {
|
||||
- for (auto &display : gWaylandDisplays) {
|
||||
- if (display == aDisplay) {
|
||||
- int rc = display->Release();
|
||||
- if (rc == 0) {
|
||||
- display = nullptr;
|
||||
- }
|
||||
- return true;
|
||||
- }
|
||||
- }
|
||||
- MOZ_ASSERT(false, "Missing nsWaylandDisplay for this thread!");
|
||||
- return false;
|
||||
-}
|
||||
-
|
||||
-void WaylandDisplayRelease(nsWaylandDisplay *aDisplay) {
|
||||
- StaticMutexAutoLock lock(gWaylandDisplaysMutex);
|
||||
- WaylandDisplayReleaseLocked(aDisplay, lock);
|
||||
-}
|
||||
-
|
||||
static void WaylandDisplayLoopLocked(wl_display *aDisplay,
|
||||
const StaticMutexAutoLock &) {
|
||||
for (auto &display : gWaylandDisplays) {
|
||||
@@ -130,6 +116,8 @@ static void global_registry_handler(void
|
||||
uint32_t id, const char *interface,
|
||||
uint32_t version) {
|
||||
auto display = reinterpret_cast<nsWaylandDisplay *>(data);
|
||||
+ if (!display)
|
||||
+ return;
|
||||
|
||||
if (strcmp(interface, "wl_shm") == 0) {
|
||||
auto shm = static_cast<wl_shm *>(
|
||||
@@ -180,9 +168,7 @@ bool nsWaylandDisplay::Matches(wl_displa
|
||||
return mThreadId == PR_GetCurrentThread() && aDisplay == mDisplay;
|
||||
}
|
||||
|
||||
-NS_IMPL_ISUPPORTS(nsWaylandDisplay, nsISupports);
|
||||
-
|
||||
-nsWaylandDisplay::nsWaylandDisplay(wl_display *aDisplay)
|
||||
+nsWaylandDisplay::nsWaylandDisplay(wl_display* aDisplay)
|
||||
: mThreadId(PR_GetCurrentThread()),
|
||||
mDisplay(aDisplay),
|
||||
mEventQueue(nullptr),
|
||||
@@ -190,9 +176,10 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di
|
||||
mSubcompositor(nullptr),
|
||||
mSeat(nullptr),
|
||||
mShm(nullptr),
|
||||
- mPrimarySelectionDeviceManager(nullptr) {
|
||||
- wl_registry *registry = wl_display_get_registry(mDisplay);
|
||||
- wl_registry_add_listener(registry, ®istry_listener, this);
|
||||
+ mPrimarySelectionDeviceManager(nullptr),
|
||||
+ mRegistry(nullptr) {
|
||||
+ mRegistry = wl_display_get_registry(mDisplay);
|
||||
+ wl_registry_add_listener(mRegistry, ®istry_listener, this);
|
||||
|
||||
if (NS_IsMainThread()) {
|
||||
// Use default event queue in main thread operated by Gtk+.
|
||||
@@ -203,17 +190,19 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di
|
||||
mEventQueue = wl_display_create_queue(mDisplay);
|
||||
MessageLoop::current()->PostTask(NewRunnableFunction(
|
||||
"WaylandDisplayLoop", &WaylandDisplayLoop, mDisplay));
|
||||
- wl_proxy_set_queue((struct wl_proxy *)registry, mEventQueue);
|
||||
+ wl_proxy_set_queue((struct wl_proxy *)mRegistry, mEventQueue);
|
||||
wl_display_roundtrip_queue(mDisplay, mEventQueue);
|
||||
wl_display_roundtrip_queue(mDisplay, mEventQueue);
|
||||
}
|
||||
}
|
||||
|
||||
nsWaylandDisplay::~nsWaylandDisplay() {
|
||||
- MOZ_ASSERT(mThreadId == PR_GetCurrentThread());
|
||||
// Owned by Gtk+, we don't need to release
|
||||
mDisplay = nullptr;
|
||||
|
||||
+ wl_registry_destroy(mRegistry);
|
||||
+ mRegistry = nullptr;
|
||||
+
|
||||
if (mEventQueue) {
|
||||
wl_event_queue_destroy(mEventQueue);
|
||||
mEventQueue = nullptr;
|
||||
diff -up firefox-67.0/widget/gtk/nsWaylandDisplay.h.mozilla-1517205 firefox-67.0/widget/gtk/nsWaylandDisplay.h
|
||||
--- firefox-67.0/widget/gtk/nsWaylandDisplay.h.mozilla-1517205 2019-05-14 01:08:27.000000000 +0200
|
||||
+++ firefox-67.0/widget/gtk/nsWaylandDisplay.h 2019-05-15 16:00:23.368366052 +0200
|
||||
@@ -20,11 +20,10 @@ namespace widget {
|
||||
|
||||
// Our general connection to Wayland display server,
|
||||
// holds our display connection and runs event loop.
|
||||
-class nsWaylandDisplay : public nsISupports {
|
||||
- NS_DECL_THREADSAFE_ISUPPORTS
|
||||
-
|
||||
+class nsWaylandDisplay {
|
||||
public:
|
||||
explicit nsWaylandDisplay(wl_display* aDisplay);
|
||||
+ virtual ~nsWaylandDisplay();
|
||||
|
||||
bool DisplayLoop();
|
||||
bool Matches(wl_display* aDisplay);
|
||||
@@ -41,7 +40,6 @@ class nsWaylandDisplay : public nsISuppo
|
||||
return mPrimarySelectionDeviceManager;
|
||||
};
|
||||
|
||||
- public:
|
||||
void SetShm(wl_shm* aShm);
|
||||
void SetSubcompositor(wl_subcompositor* aSubcompositor);
|
||||
void SetDataDeviceManager(wl_data_device_manager* aDataDeviceManager);
|
||||
@@ -49,9 +47,7 @@ class nsWaylandDisplay : public nsISuppo
|
||||
void SetPrimarySelectionDeviceManager(
|
||||
gtk_primary_selection_device_manager* aPrimarySelectionDeviceManager);
|
||||
|
||||
- private:
|
||||
- virtual ~nsWaylandDisplay();
|
||||
-
|
||||
+private:
|
||||
PRThread* mThreadId;
|
||||
wl_display* mDisplay;
|
||||
wl_event_queue* mEventQueue;
|
||||
@@ -60,10 +56,10 @@ class nsWaylandDisplay : public nsISuppo
|
||||
wl_seat* mSeat;
|
||||
wl_shm* mShm;
|
||||
gtk_primary_selection_device_manager* mPrimarySelectionDeviceManager;
|
||||
+ wl_registry *mRegistry;
|
||||
};
|
||||
|
||||
nsWaylandDisplay* WaylandDisplayGet(GdkDisplay* aGdkDisplay = nullptr);
|
||||
-void WaylandDisplayRelease(nsWaylandDisplay* aDisplay);
|
||||
|
||||
} // namespace widget
|
||||
} // namespace mozilla
|
||||
diff -up firefox-67.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1517205 firefox-67.0/widget/gtk/WindowSurfaceWayland.cpp
|
||||
--- firefox-67.0/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1517205 2019-05-15 16:00:23.335366185 +0200
|
||||
+++ firefox-67.0/widget/gtk/WindowSurfaceWayland.cpp 2019-05-15 16:00:23.368366052 +0200
|
||||
@@ -413,16 +413,6 @@ WindowSurfaceWayland::~WindowSurfaceWayl
|
||||
delete mBackupBuffer[i];
|
||||
}
|
||||
}
|
||||
-
|
||||
- if (!mIsMainThread) {
|
||||
- // We can be destroyed from main thread even though we was created/used
|
||||
- // in compositor thread. We have to unref/delete WaylandDisplay in
|
||||
- // compositor thread then and we can't use MessageLoop::current() here.
|
||||
- mDisplayThreadMessageLoop->PostTask(NewRunnableFunction(
|
||||
- "WaylandDisplayRelease", &WaylandDisplayRelease, mWaylandDisplay));
|
||||
- } else {
|
||||
- WaylandDisplayRelease(mWaylandDisplay);
|
||||
- }
|
||||
}
|
||||
|
||||
WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(int aWidth,
|
||||
340
mozilla-1526243.patch
Normal file
340
mozilla-1526243.patch
Normal file
|
|
@ -0,0 +1,340 @@
|
|||
changeset: 465480:a86f3560fb17
|
||||
parent: 465477:26d9b7ffbd6b
|
||||
user: Martin Stransky <stransky@redhat.com>
|
||||
date: Fri Mar 29 15:30:15 2019 +0100
|
||||
summary: Bug 1526243 - [Linux] Don't use nsGConfService in nsGNOMEShellService.cpp, r=glandium
|
||||
|
||||
diff --git a/browser/components/shell/nsGNOMEShellService.cpp b/browser/components/shell/nsGNOMEShellService.cpp
|
||||
--- a/browser/components/shell/nsGNOMEShellService.cpp
|
||||
+++ b/browser/components/shell/nsGNOMEShellService.cpp
|
||||
@@ -10,17 +10,16 @@
|
||||
#include "nsShellService.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIFile.h"
|
||||
#include "nsIProperties.h"
|
||||
#include "nsDirectoryServiceDefs.h"
|
||||
#include "nsIPrefService.h"
|
||||
#include "prenv.h"
|
||||
#include "nsString.h"
|
||||
-#include "nsIGConfService.h"
|
||||
#include "nsIGIOService.h"
|
||||
#include "nsIGSettingsService.h"
|
||||
#include "nsIStringBundle.h"
|
||||
#include "nsIOutputStream.h"
|
||||
#include "nsIProcess.h"
|
||||
#include "nsServiceManagerUtils.h"
|
||||
#include "nsComponentManagerUtils.h"
|
||||
#include "nsIImageLoadingContent.h"
|
||||
@@ -65,48 +64,39 @@ static const ProtocolAssociation appProt
|
||||
|
||||
static const MimeTypeAssociation appTypes[] = {
|
||||
// clang-format off
|
||||
{ "text/html", "htm html shtml" },
|
||||
{ "application/xhtml+xml", "xhtml xht" }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
-// GConf registry key constants
|
||||
-#define DG_BACKGROUND "/desktop/gnome/background"
|
||||
-
|
||||
-#define kDesktopImageKey DG_BACKGROUND "/picture_filename"
|
||||
-#define kDesktopOptionsKey DG_BACKGROUND "/picture_options"
|
||||
-#define kDesktopDrawBGKey DG_BACKGROUND "/draw_background"
|
||||
-#define kDesktopColorKey DG_BACKGROUND "/primary_color"
|
||||
-
|
||||
#define kDesktopBGSchema "org.gnome.desktop.background"
|
||||
#define kDesktopImageGSKey "picture-uri"
|
||||
#define kDesktopOptionGSKey "picture-options"
|
||||
#define kDesktopDrawBGGSKey "draw-background"
|
||||
#define kDesktopColorGSKey "primary-color"
|
||||
|
||||
static bool IsRunningAsASnap() { return (PR_GetEnv("SNAP") != nullptr); }
|
||||
|
||||
nsresult nsGNOMEShellService::Init() {
|
||||
nsresult rv;
|
||||
|
||||
if (gfxPlatform::IsHeadless()) {
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
- // GConf, GSettings or GIO _must_ be available, or we do not allow
|
||||
+ // GSettings or GIO _must_ be available, or we do not allow
|
||||
// CreateInstance to succeed.
|
||||
|
||||
- nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
|
||||
nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
|
||||
nsCOMPtr<nsIGSettingsService> gsettings =
|
||||
do_GetService(NS_GSETTINGSSERVICE_CONTRACTID);
|
||||
|
||||
- if (!gconf && !giovfs && !gsettings) return NS_ERROR_NOT_AVAILABLE;
|
||||
+ if (!giovfs && !gsettings) return NS_ERROR_NOT_AVAILABLE;
|
||||
|
||||
// Check G_BROKEN_FILENAMES. If it's set, then filenames in glib use
|
||||
// the locale encoding. If it's not set, they use UTF-8.
|
||||
mUseLocaleFilenames = PR_GetEnv("G_BROKEN_FILENAMES") != nullptr;
|
||||
|
||||
if (GetAppPathFromLauncher()) return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIProperties> dirSvc(
|
||||
@@ -212,35 +202,23 @@ nsGNOMEShellService::IsDefaultBrowser(bo
|
||||
}
|
||||
if (strcmp(output, "yes\n") == 0) {
|
||||
*aIsDefaultBrowser = true;
|
||||
}
|
||||
g_free(output);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
- nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
|
||||
nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
|
||||
-
|
||||
- bool enabled;
|
||||
nsAutoCString handler;
|
||||
nsCOMPtr<nsIGIOMimeApp> gioApp;
|
||||
|
||||
for (unsigned int i = 0; i < ArrayLength(appProtocols); ++i) {
|
||||
if (!appProtocols[i].essential) continue;
|
||||
|
||||
- if (gconf) {
|
||||
- handler.Truncate();
|
||||
- gconf->GetAppForProtocol(nsDependentCString(appProtocols[i].name),
|
||||
- &enabled, handler);
|
||||
-
|
||||
- if (!CheckHandlerMatchesAppName(handler) || !enabled)
|
||||
- return NS_OK; // the handler is disabled or set to another app
|
||||
- }
|
||||
-
|
||||
if (giovfs) {
|
||||
handler.Truncate();
|
||||
nsCOMPtr<nsIHandlerApp> handlerApp;
|
||||
giovfs->GetAppForURIScheme(nsDependentCString(appProtocols[i].name),
|
||||
getter_AddRefs(handlerApp));
|
||||
gioApp = do_QueryInterface(handlerApp);
|
||||
if (!gioApp) return NS_OK;
|
||||
|
||||
@@ -270,39 +248,17 @@ nsGNOMEShellService::SetDefaultBrowser(b
|
||||
GSpawnFlags flags = static_cast<GSpawnFlags>(G_SPAWN_SEARCH_PATH |
|
||||
G_SPAWN_STDOUT_TO_DEV_NULL |
|
||||
G_SPAWN_STDERR_TO_DEV_NULL);
|
||||
g_spawn_sync(nullptr, (gchar **)argv, nullptr, flags, nullptr, nullptr,
|
||||
nullptr, nullptr, nullptr, nullptr);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
- nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
|
||||
nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
|
||||
- if (gconf) {
|
||||
- nsAutoCString appKeyValue;
|
||||
- if (mAppIsInPath) {
|
||||
- // mAppPath is in the users path, so use only the basename as the launcher
|
||||
- gchar *tmp = g_path_get_basename(mAppPath.get());
|
||||
- appKeyValue = tmp;
|
||||
- g_free(tmp);
|
||||
- } else {
|
||||
- appKeyValue = mAppPath;
|
||||
- }
|
||||
-
|
||||
- appKeyValue.AppendLiteral(" %s");
|
||||
-
|
||||
- for (unsigned int i = 0; i < ArrayLength(appProtocols); ++i) {
|
||||
- if (appProtocols[i].essential || aClaimAllTypes) {
|
||||
- gconf->SetAppForProtocol(nsDependentCString(appProtocols[i].name),
|
||||
- appKeyValue);
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
if (giovfs) {
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIStringBundleService> bundleService =
|
||||
do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIStringBundle> brandBundle;
|
||||
rv = bundleService->CreateBundle(BRAND_PROPERTIES,
|
||||
@@ -353,19 +309,21 @@ nsGNOMEShellService::SetDefaultBrowser(b
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGNOMEShellService::GetCanSetDesktopBackground(bool *aResult) {
|
||||
// setting desktop background is currently only supported
|
||||
- // for Gnome or desktops using the same GSettings and GConf keys
|
||||
- const char *gnomeSession = getenv("GNOME_DESKTOP_SESSION_ID");
|
||||
- if (gnomeSession) {
|
||||
+ // for Gnome or desktops using the same GSettings keys
|
||||
+ const char *currentDesktop = getenv("XDG_CURRENT_DESKTOP");
|
||||
+ if (currentDesktop &&
|
||||
+ (strstr(currentDesktop, "GNOME-Flashback:GNOME") != nullptr ||
|
||||
+ strstr(currentDesktop, "GNOME") != nullptr)) {
|
||||
*aResult = true;
|
||||
} else {
|
||||
*aResult = false;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -439,20 +397,16 @@ nsGNOMEShellService::SetDesktopBackgroun
|
||||
filePath.Append('/');
|
||||
filePath.Append(NS_ConvertUTF16toUTF8(brandName));
|
||||
filePath.AppendLiteral("_wallpaper.png");
|
||||
|
||||
// write the image to a file in the home dir
|
||||
rv = WriteImage(filePath, container);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
- // Try GSettings first. If we don't have GSettings or the right schema, fall
|
||||
- // back to using GConf instead. Note that if GSettings works ok, the changes
|
||||
- // get mirrored to GConf by the gsettings->gconf bridge in
|
||||
- // gnome-settings-daemon
|
||||
nsCOMPtr<nsIGSettingsService> gsettings =
|
||||
do_GetService(NS_GSETTINGSSERVICE_CONTRACTID);
|
||||
if (gsettings) {
|
||||
nsCOMPtr<nsIGSettingsCollection> background_settings;
|
||||
gsettings->GetCollectionForSchema(NS_LITERAL_CSTRING(kDesktopBGSchema),
|
||||
getter_AddRefs(background_settings));
|
||||
if (background_settings) {
|
||||
gchar *file_uri = g_filename_to_uri(filePath.get(), nullptr, nullptr);
|
||||
@@ -465,32 +419,17 @@ nsGNOMEShellService::SetDesktopBackgroun
|
||||
nsDependentCString(file_uri));
|
||||
g_free(file_uri);
|
||||
background_settings->SetBoolean(NS_LITERAL_CSTRING(kDesktopDrawBGGSKey),
|
||||
true);
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
- // if the file was written successfully, set it as the system wallpaper
|
||||
- nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
|
||||
-
|
||||
- if (gconf) {
|
||||
- gconf->SetString(NS_LITERAL_CSTRING(kDesktopOptionsKey), options);
|
||||
-
|
||||
- // Set the image to an empty string first to force a refresh
|
||||
- // (since we could be writing a new image on top of an existing
|
||||
- // Firefox_wallpaper.png and nautilus doesn't monitor the file for changes)
|
||||
- gconf->SetString(NS_LITERAL_CSTRING(kDesktopImageKey), EmptyCString());
|
||||
-
|
||||
- gconf->SetString(NS_LITERAL_CSTRING(kDesktopImageKey), filePath);
|
||||
- gconf->SetBool(NS_LITERAL_CSTRING(kDesktopDrawBGKey), true);
|
||||
- }
|
||||
-
|
||||
- return rv;
|
||||
+ return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
#define COLOR_16_TO_8_BIT(_c) ((_c) >> 8)
|
||||
#define COLOR_8_TO_16_BIT(_c) ((_c) << 8 | (_c))
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGNOMEShellService::GetDesktopBackgroundColor(uint32_t *aColor) {
|
||||
nsCOMPtr<nsIGSettingsService> gsettings =
|
||||
@@ -502,22 +441,16 @@ nsGNOMEShellService::GetDesktopBackgroun
|
||||
gsettings->GetCollectionForSchema(NS_LITERAL_CSTRING(kDesktopBGSchema),
|
||||
getter_AddRefs(background_settings));
|
||||
if (background_settings) {
|
||||
background_settings->GetString(NS_LITERAL_CSTRING(kDesktopColorGSKey),
|
||||
background);
|
||||
}
|
||||
}
|
||||
|
||||
- if (!background_settings) {
|
||||
- nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
|
||||
- if (gconf)
|
||||
- gconf->GetString(NS_LITERAL_CSTRING(kDesktopColorKey), background);
|
||||
- }
|
||||
-
|
||||
if (background.IsEmpty()) {
|
||||
*aColor = 0;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
GdkColor color;
|
||||
gboolean success = gdk_color_parse(background.get(), &color);
|
||||
|
||||
@@ -555,23 +488,17 @@ nsGNOMEShellService::SetDesktopBackgroun
|
||||
getter_AddRefs(background_settings));
|
||||
if (background_settings) {
|
||||
background_settings->SetString(NS_LITERAL_CSTRING(kDesktopColorGSKey),
|
||||
colorString);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
- nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
|
||||
-
|
||||
- if (gconf) {
|
||||
- gconf->SetString(NS_LITERAL_CSTRING(kDesktopColorKey), colorString);
|
||||
- }
|
||||
-
|
||||
- return NS_OK;
|
||||
+ return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGNOMEShellService::OpenApplication(int32_t aApplication) {
|
||||
nsAutoCString scheme;
|
||||
if (aApplication == APPLICATION_MAIL)
|
||||
scheme.AssignLiteral("mailto");
|
||||
else if (aApplication == APPLICATION_NEWS)
|
||||
@@ -581,55 +508,17 @@ nsGNOMEShellService::OpenApplication(int
|
||||
|
||||
nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
|
||||
if (giovfs) {
|
||||
nsCOMPtr<nsIHandlerApp> handlerApp;
|
||||
giovfs->GetAppForURIScheme(scheme, getter_AddRefs(handlerApp));
|
||||
if (handlerApp) return handlerApp->LaunchWithURI(nullptr, nullptr);
|
||||
}
|
||||
|
||||
- nsCOMPtr<nsIGConfService> gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
|
||||
- if (!gconf) return NS_ERROR_FAILURE;
|
||||
-
|
||||
- bool enabled;
|
||||
- nsAutoCString appCommand;
|
||||
- gconf->GetAppForProtocol(scheme, &enabled, appCommand);
|
||||
-
|
||||
- if (!enabled) return NS_ERROR_FAILURE;
|
||||
-
|
||||
- // XXX we don't currently handle launching a terminal window.
|
||||
- // If the handler requires a terminal, bail.
|
||||
- bool requiresTerminal;
|
||||
- gconf->HandlerRequiresTerminal(scheme, &requiresTerminal);
|
||||
- if (requiresTerminal) return NS_ERROR_FAILURE;
|
||||
-
|
||||
- // Perform shell argument expansion
|
||||
- int argc;
|
||||
- char **argv;
|
||||
- if (!g_shell_parse_argv(appCommand.get(), &argc, &argv, nullptr))
|
||||
- return NS_ERROR_FAILURE;
|
||||
-
|
||||
- char **newArgv = new char *[argc + 1];
|
||||
- int newArgc = 0;
|
||||
-
|
||||
- // Run through the list of arguments. Copy all of them to the new
|
||||
- // argv except for %s, which we skip.
|
||||
- for (int i = 0; i < argc; ++i) {
|
||||
- if (strcmp(argv[i], "%s") != 0) newArgv[newArgc++] = argv[i];
|
||||
- }
|
||||
-
|
||||
- newArgv[newArgc] = nullptr;
|
||||
-
|
||||
- gboolean err = g_spawn_async(nullptr, newArgv, nullptr, G_SPAWN_SEARCH_PATH,
|
||||
- nullptr, nullptr, nullptr, nullptr);
|
||||
-
|
||||
- g_strfreev(argv);
|
||||
- delete[] newArgv;
|
||||
-
|
||||
- return err ? NS_OK : NS_ERROR_FAILURE;
|
||||
+ return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGNOMEShellService::OpenApplicationWithURI(nsIFile *aApplication,
|
||||
const nsACString &aURI) {
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIProcess> process =
|
||||
do_CreateInstance("@mozilla.org/process/util;1", &rv);
|
||||
|
||||
71
mozilla-1532643-popup.patch
Normal file
71
mozilla-1532643-popup.patch
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
diff -up firefox-67.0/layout/xul/moz.build.mozilla-1532643-popup firefox-67.0/layout/xul/moz.build
|
||||
--- firefox-67.0/layout/xul/moz.build.mozilla-1532643-popup 2019-05-14 01:08:24.000000000 +0200
|
||||
+++ firefox-67.0/layout/xul/moz.build 2019-05-15 15:31:39.714299754 +0200
|
||||
@@ -88,3 +88,6 @@ LOCAL_INCLUDES += [
|
||||
|
||||
if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
|
||||
CXXFLAGS += ['-Wno-error=shadow']
|
||||
+
|
||||
+CFLAGS += CONFIG['TK_CFLAGS']
|
||||
+CXXFLAGS += CONFIG['TK_CFLAGS']
|
||||
diff -up firefox-67.0/layout/xul/nsMenuPopupFrame.cpp.mozilla-1532643-popup firefox-67.0/layout/xul/nsMenuPopupFrame.cpp
|
||||
--- firefox-67.0/layout/xul/nsMenuPopupFrame.cpp.mozilla-1532643-popup 2019-05-14 01:08:24.000000000 +0200
|
||||
+++ firefox-67.0/layout/xul/nsMenuPopupFrame.cpp 2019-05-15 15:37:01.121215863 +0200
|
||||
@@ -55,6 +55,10 @@
|
||||
#include "mozilla/dom/KeyboardEvent.h"
|
||||
#include "mozilla/dom/KeyboardEventBinding.h"
|
||||
#include <algorithm>
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+#include <gdk/gdk.h>
|
||||
+#include <gdk/gdkx.h>
|
||||
+#endif /* MOZ_WAYLAND */
|
||||
|
||||
using namespace mozilla;
|
||||
using mozilla::dom::Document;
|
||||
@@ -301,11 +305,29 @@ nsresult nsMenuPopupFrame::CreateWidgetF
|
||||
!(mode == eTransparencyTransparent || tag == nsGkAtoms::menulist);
|
||||
widgetData.mPopupLevel = PopupLevel(widgetData.mNoAutoHide);
|
||||
|
||||
+ static bool waylandBackend =
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ !GDK_IS_X11_DISPLAY(gdk_display_get_default());
|
||||
+#else
|
||||
+ false;
|
||||
+#endif
|
||||
+
|
||||
// panels which have a parent level need a parent widget. This allows them to
|
||||
// always appear in front of the parent window but behind other windows that
|
||||
// should be in front of it.
|
||||
nsCOMPtr<nsIWidget> parentWidget;
|
||||
- if (widgetData.mPopupLevel != ePopupLevelTop) {
|
||||
+ if (waylandBackend) {
|
||||
+ // On Wayland we always need to connect menu to its parent menu widget
|
||||
+ // otherwise it's not shown.
|
||||
+ nsMenuFrame* menuFrame = do_QueryFrame(GetParent());
|
||||
+ if (menuFrame) {
|
||||
+ nsMenuParent* parentPopup = menuFrame->GetMenuParent();
|
||||
+ if (parentPopup && parentPopup->IsMenu()) {
|
||||
+ parentWidget =
|
||||
+ static_cast<nsMenuPopupFrame*>(parentPopup)->GetWidget();
|
||||
+ }
|
||||
+ }
|
||||
+ } else if (widgetData.mPopupLevel != ePopupLevelTop) {
|
||||
nsCOMPtr<nsIDocShellTreeItem> dsti = PresContext()->GetDocShell();
|
||||
if (!dsti) return NS_ERROR_FAILURE;
|
||||
|
||||
diff -up firefox-67.0/widget/gtk/nsWindow.cpp.mozilla-1532643-popup firefox-67.0/widget/gtk/nsWindow.cpp
|
||||
--- firefox-67.0/widget/gtk/nsWindow.cpp.mozilla-1532643-popup 2019-05-15 15:31:39.712299764 +0200
|
||||
+++ firefox-67.0/widget/gtk/nsWindow.cpp 2019-05-15 15:31:39.716299744 +0200
|
||||
@@ -3527,11 +3527,7 @@ nsresult nsWindow::Create(nsIWidget *aPa
|
||||
} else {
|
||||
switch (aInitData->mPopupHint) {
|
||||
case ePopupTypeMenu:
|
||||
- // Use GDK_WINDOW_TYPE_HINT_UTILITY on Wayland which
|
||||
- // guides Gtk to create the popup as subsurface
|
||||
- // instead of xdg_shell popup (see Bug 1423598).
|
||||
- gtkTypeHint = mIsX11Display ? GDK_WINDOW_TYPE_HINT_POPUP_MENU
|
||||
- : GDK_WINDOW_TYPE_HINT_UTILITY;
|
||||
+ gtkTypeHint = GDK_WINDOW_TYPE_HINT_POPUP_MENU;
|
||||
break;
|
||||
case ePopupTypeTooltip:
|
||||
gtkTypeHint = GDK_WINDOW_TYPE_HINT_TOOLTIP;
|
||||
136
mozilla-1535567.patch
Normal file
136
mozilla-1535567.patch
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
diff -up firefox-67.0/widget/gtk/mozcontainer.cpp.mozilla-1535567 firefox-67.0/widget/gtk/mozcontainer.cpp
|
||||
--- firefox-67.0/widget/gtk/mozcontainer.cpp.mozilla-1535567 2019-05-14 01:08:37.000000000 +0200
|
||||
+++ firefox-67.0/widget/gtk/mozcontainer.cpp 2019-05-15 15:56:19.645336209 +0200
|
||||
@@ -157,6 +157,7 @@ void moz_container_init(MozContainer *co
|
||||
container->subsurface = nullptr;
|
||||
container->eglwindow = nullptr;
|
||||
container->frame_callback_handler = nullptr;
|
||||
+ container->frame_callback_handler_surface_id = -1;
|
||||
// We can draw to x11 window any time.
|
||||
container->ready_to_draw = GDK_IS_X11_DISPLAY(gdk_display_get_default());
|
||||
container->surface_needs_clear = true;
|
||||
@@ -165,6 +166,11 @@ void moz_container_init(MozContainer *co
|
||||
}
|
||||
|
||||
#if defined(MOZ_WAYLAND)
|
||||
+void moz_container_set_initial_draw_callback(
|
||||
+ MozContainer *container, std::function<void(void)> inital_draw_cb) {
|
||||
+ container->inital_draw_cb = inital_draw_cb;
|
||||
+}
|
||||
+
|
||||
static wl_surface *moz_container_get_gtk_container_surface(
|
||||
MozContainer *container) {
|
||||
static auto sGdkWaylandWindowGetWlSurface = (wl_surface * (*)(GdkWindow *))
|
||||
@@ -178,37 +184,61 @@ static void frame_callback_handler(void
|
||||
uint32_t time) {
|
||||
MozContainer *container = MOZ_CONTAINER(data);
|
||||
g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy);
|
||||
+ container->frame_callback_handler_surface_id = -1;
|
||||
if (!container->ready_to_draw && container->inital_draw_cb) {
|
||||
container->inital_draw_cb();
|
||||
}
|
||||
container->ready_to_draw = true;
|
||||
}
|
||||
|
||||
-void moz_container_set_initial_draw_callback(
|
||||
- MozContainer *container, std::function<void(void)> inital_draw_cb) {
|
||||
- container->inital_draw_cb = inital_draw_cb;
|
||||
-}
|
||||
-
|
||||
static const struct wl_callback_listener frame_listener = {
|
||||
frame_callback_handler};
|
||||
|
||||
-static gboolean moz_container_map_wayland(GtkWidget *widget,
|
||||
- GdkEventAny *event) {
|
||||
- MozContainer *container = MOZ_CONTAINER(widget);
|
||||
-
|
||||
- if (container->ready_to_draw || container->frame_callback_handler) {
|
||||
- return FALSE;
|
||||
- }
|
||||
-
|
||||
+static void moz_container_request_parent_frame_callback(
|
||||
+ MozContainer *container) {
|
||||
wl_surface *gtk_container_surface =
|
||||
moz_container_get_gtk_container_surface(container);
|
||||
+ int gtk_container_surface_id =
|
||||
+ gtk_container_surface
|
||||
+ ? wl_proxy_get_id((struct wl_proxy *)gtk_container_surface)
|
||||
+ : -1;
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+ if (container->frame_callback_handler &&
|
||||
+ container->frame_callback_handler_surface_id ==
|
||||
+ gtk_container_surface_id) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ // If there's pending frame callback, delete it.
|
||||
+ if (container->frame_callback_handler) {
|
||||
+ g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy);
|
||||
+ }
|
||||
|
||||
if (gtk_container_surface) {
|
||||
+ container->frame_callback_handler_surface_id = gtk_container_surface_id;
|
||||
container->frame_callback_handler = wl_surface_frame(gtk_container_surface);
|
||||
wl_callback_add_listener(container->frame_callback_handler, &frame_listener,
|
||||
container);
|
||||
+ } else {
|
||||
+ container->frame_callback_handler_surface_id = -1;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static gboolean moz_container_map_wayland(GtkWidget *widget,
|
||||
+ GdkEventAny *event) {
|
||||
+ MozContainer *container = MOZ_CONTAINER(widget);
|
||||
+
|
||||
+ if (container->ready_to_draw) {
|
||||
+ return FALSE;
|
||||
}
|
||||
|
||||
+ moz_container_request_parent_frame_callback(MOZ_CONTAINER(widget));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -217,6 +247,7 @@ static void moz_container_unmap_wayland(
|
||||
g_clear_pointer(&container->subsurface, wl_subsurface_destroy);
|
||||
g_clear_pointer(&container->surface, wl_surface_destroy);
|
||||
g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy);
|
||||
+ container->frame_callback_handler_surface_id = -1;
|
||||
|
||||
container->surface_needs_clear = true;
|
||||
container->ready_to_draw = false;
|
||||
@@ -329,6 +360,10 @@ void moz_container_realize(GtkWidget *wi
|
||||
: gtk_widget_get_visual(widget);
|
||||
|
||||
window = gdk_window_new(parent, &attributes, attributes_mask);
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
gdk_window_set_user_data(window, widget);
|
||||
} else {
|
||||
window = parent;
|
||||
@@ -498,6 +533,7 @@ static void moz_container_add(GtkContain
|
||||
struct wl_surface *moz_container_get_wl_surface(MozContainer *container) {
|
||||
if (!container->surface) {
|
||||
if (!container->ready_to_draw) {
|
||||
+ moz_container_request_parent_frame_callback(container);
|
||||
return nullptr;
|
||||
}
|
||||
GdkDisplay *display = gtk_widget_get_display(GTK_WIDGET(container));
|
||||
diff -up firefox-67.0/widget/gtk/mozcontainer.h.mozilla-1535567 firefox-67.0/widget/gtk/mozcontainer.h
|
||||
--- firefox-67.0/widget/gtk/mozcontainer.h.mozilla-1535567 2019-05-14 01:08:37.000000000 +0200
|
||||
+++ firefox-67.0/widget/gtk/mozcontainer.h 2019-05-15 15:50:59.440570372 +0200
|
||||
@@ -77,6 +77,7 @@ struct _MozContainer {
|
||||
struct wl_subsurface *subsurface;
|
||||
struct wl_egl_window *eglwindow;
|
||||
struct wl_callback *frame_callback_handler;
|
||||
+ int frame_callback_handler_surface_id;
|
||||
gboolean surface_needs_clear;
|
||||
gboolean ready_to_draw;
|
||||
std::function<void(void)> inital_draw_cb;
|
||||
206
mozilla-1539471.patch
Normal file
206
mozilla-1539471.patch
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
diff -up firefox-66.0.1/widget/gtk/nsWindow.cpp.mozilla-1539471 firefox-66.0.1/widget/gtk/nsWindow.cpp
|
||||
--- firefox-66.0.1/widget/gtk/nsWindow.cpp.mozilla-1539471 2019-03-28 14:08:42.351128620 +0100
|
||||
+++ firefox-66.0.1/widget/gtk/nsWindow.cpp 2019-03-28 14:20:23.282890178 +0100
|
||||
@@ -312,6 +312,9 @@ static nsWindow *gFocusWindow = nullptr;
|
||||
static bool gBlockActivateEvent = false;
|
||||
static bool gGlobalsInitialized = false;
|
||||
static bool gRaiseWindows = true;
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+static GList *gCurrentPopupWindows = nullptr;
|
||||
+#endif
|
||||
|
||||
#if GTK_CHECK_VERSION(3, 4, 0)
|
||||
static uint32_t gLastTouchID = 0;
|
||||
@@ -1136,8 +1139,16 @@ void nsWindow::NativeMoveResizeWaylandPo
|
||||
return;
|
||||
}
|
||||
|
||||
- GtkWidget* parentWidget =
|
||||
- GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
|
||||
+ GtkWidget *parentWidget;
|
||||
+ if (mPopupType == ePopupTypeTooltip && gCurrentPopupWindows) {
|
||||
+ // Attach tooltip window to the latest popup window
|
||||
+ // to have both visible.
|
||||
+ parentWidget = GTK_WIDGET(gCurrentPopupWindows->data);
|
||||
+ gtk_window_set_transient_for(GTK_WINDOW(mShell),
|
||||
+ GTK_WINDOW(parentWidget));
|
||||
+ } else {
|
||||
+ parentWidget = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
|
||||
+ }
|
||||
|
||||
int x_parent, y_parent;
|
||||
gdk_window_get_origin(gtk_widget_get_window(parentWidget), &x_parent, &y_parent);
|
||||
@@ -3489,7 +3500,7 @@ nsresult nsWindow::Create(nsIWidget *aPa
|
||||
gtkTypeHint = GDK_WINDOW_TYPE_HINT_DND;
|
||||
mIsDragPopup = true;
|
||||
} else {
|
||||
- switch (aInitData->mPopupHint) {
|
||||
+ switch (mPopupType) {
|
||||
case ePopupTypeMenu:
|
||||
gtkTypeHint = GDK_WINDOW_TYPE_HINT_POPUP_MENU;
|
||||
break;
|
||||
@@ -3610,6 +3621,8 @@ nsresult nsWindow::Create(nsIWidget *aPa
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
case eWindowType_child: {
|
||||
+ MOZ_ASSERT(mIsX11Display,
|
||||
+ "eWindowType_child is not supported on Wayland!");
|
||||
if (parentMozContainer) {
|
||||
mGdkWindow = CreateGdkWindow(parentGdkWindow, parentMozContainer);
|
||||
mHasMappedToplevel = parentnsWindow->mHasMappedToplevel;
|
||||
@@ -3979,6 +3992,49 @@ void nsWindow::NativeMoveResize() {
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+void nsWindow::OpenToplevelWaylandWindow() {
|
||||
+ // Wayland keeps strong popup window hierarchy. We need to track active
|
||||
+ // (visible) popup windows and make sure we hide popup on the same level
|
||||
+ // before we open another one on that level. It means that every open
|
||||
+ // popup needs to have an unique parent.
|
||||
+ if (mWindowType == eWindowType_popup) {
|
||||
+ GtkWidget *parentWidget =
|
||||
+ GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
|
||||
+
|
||||
+ if (gCurrentPopupWindows) {
|
||||
+ do {
|
||||
+ GtkWidget *widget = GTK_WIDGET(gCurrentPopupWindows->data);
|
||||
+ if (widget == parentWidget) {
|
||||
+ break;
|
||||
+ }
|
||||
+ nsWindow* window = get_window_for_gtk_widget(widget);
|
||||
+ NS_ASSERTION(window, "Unknown window in popup widget list!");
|
||||
+ window->CloseToplevelWaylandWindow();
|
||||
+
|
||||
+ } while (gCurrentPopupWindows != nullptr);
|
||||
+ }
|
||||
+ gCurrentPopupWindows = g_list_prepend(gCurrentPopupWindows, mShell);
|
||||
+ }
|
||||
+
|
||||
+ gtk_widget_show(mShell);
|
||||
+}
|
||||
+
|
||||
+void nsWindow::CloseToplevelWaylandWindow() {
|
||||
+ if (mContainer && moz_container_has_wl_egl_window(mContainer)) {
|
||||
+ // Because wl_egl_window is destroyed on moz_container_unmap(),
|
||||
+ // the current compositor cannot use it anymore. To avoid crash,
|
||||
+ // destroy the compositor & recreate a new compositor on next
|
||||
+ // expose event.
|
||||
+ DestroyLayerManager();
|
||||
+ }
|
||||
+ if (mWindowType == eWindowType_popup) {
|
||||
+ gCurrentPopupWindows = g_list_remove(gCurrentPopupWindows, mShell);
|
||||
+ }
|
||||
+ gtk_widget_hide(mShell);
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
void nsWindow::NativeShow(bool aAction) {
|
||||
if (aAction) {
|
||||
// unset our flag now that our window has been shown
|
||||
@@ -3990,51 +4046,55 @@ void nsWindow::NativeShow(bool aAction)
|
||||
SetUserTimeAndStartupIDForActivatedWindow(mShell);
|
||||
}
|
||||
|
||||
- gtk_widget_show(mShell);
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ if (!mIsX11Display) {
|
||||
+ OpenToplevelWaylandWindow();
|
||||
+ } else
|
||||
+#endif
|
||||
+ {
|
||||
+ gtk_widget_show(mShell);
|
||||
+ }
|
||||
} else if (mContainer) {
|
||||
gtk_widget_show(GTK_WIDGET(mContainer));
|
||||
} else if (mGdkWindow) {
|
||||
gdk_window_show_unraised(mGdkWindow);
|
||||
}
|
||||
} else {
|
||||
-#ifdef MOZ_WAYLAND
|
||||
- if (mContainer && moz_container_has_wl_egl_window(mContainer)) {
|
||||
- // Because wl_egl_window is destroyed on moz_container_unmap(),
|
||||
- // the current compositor cannot use it anymore. To avoid crash,
|
||||
- // destroy the compositor & recreate a new compositor on next
|
||||
- // expose event.
|
||||
- DestroyLayerManager();
|
||||
- }
|
||||
-#endif
|
||||
-
|
||||
if (mIsTopLevel) {
|
||||
- // Workaround window freezes on GTK versions before 3.21.2 by
|
||||
- // ensuring that configure events get dispatched to windows before
|
||||
- // they are unmapped. See bug 1225044.
|
||||
- if (gtk_check_version(3, 21, 2) != nullptr && mPendingConfigures > 0) {
|
||||
- GtkAllocation allocation;
|
||||
- gtk_widget_get_allocation(GTK_WIDGET(mShell), &allocation);
|
||||
-
|
||||
- GdkEventConfigure event;
|
||||
- PodZero(&event);
|
||||
- event.type = GDK_CONFIGURE;
|
||||
- event.window = mGdkWindow;
|
||||
- event.send_event = TRUE;
|
||||
- event.x = allocation.x;
|
||||
- event.y = allocation.y;
|
||||
- event.width = allocation.width;
|
||||
- event.height = allocation.height;
|
||||
-
|
||||
- auto shellClass = GTK_WIDGET_GET_CLASS(mShell);
|
||||
- for (unsigned int i = 0; i < mPendingConfigures; i++) {
|
||||
- Unused << shellClass->configure_event(mShell, &event);
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ if (!mIsX11Display) {
|
||||
+ CloseToplevelWaylandWindow();
|
||||
+ } else
|
||||
+#endif
|
||||
+ {
|
||||
+ // Workaround window freezes on GTK versions before 3.21.2 by
|
||||
+ // ensuring that configure events get dispatched to windows before
|
||||
+ // they are unmapped. See bug 1225044.
|
||||
+ if (gtk_check_version(3, 21, 2) != nullptr && mPendingConfigures > 0) {
|
||||
+ GtkAllocation allocation;
|
||||
+ gtk_widget_get_allocation(GTK_WIDGET(mShell), &allocation);
|
||||
+
|
||||
+ GdkEventConfigure event;
|
||||
+ PodZero(&event);
|
||||
+ event.type = GDK_CONFIGURE;
|
||||
+ event.window = mGdkWindow;
|
||||
+ event.send_event = TRUE;
|
||||
+ event.x = allocation.x;
|
||||
+ event.y = allocation.y;
|
||||
+ event.width = allocation.width;
|
||||
+ event.height = allocation.height;
|
||||
+
|
||||
+ auto shellClass = GTK_WIDGET_GET_CLASS(mShell);
|
||||
+ for (unsigned int i = 0; i < mPendingConfigures; i++) {
|
||||
+ Unused << shellClass->configure_event(mShell, &event);
|
||||
+ }
|
||||
+ mPendingConfigures = 0;
|
||||
}
|
||||
- mPendingConfigures = 0;
|
||||
- }
|
||||
|
||||
- gtk_widget_hide(mShell);
|
||||
+ gtk_widget_hide(mShell);
|
||||
|
||||
- ClearTransparencyBitmap(); // Release some resources
|
||||
+ ClearTransparencyBitmap(); // Release some resources
|
||||
+ }
|
||||
} else if (mContainer) {
|
||||
gtk_widget_hide(GTK_WIDGET(mContainer));
|
||||
} else if (mGdkWindow) {
|
||||
diff -up firefox-66.0.1/widget/gtk/nsWindow.h.mozilla-1539471 firefox-66.0.1/widget/gtk/nsWindow.h
|
||||
--- firefox-66.0.1/widget/gtk/nsWindow.h.mozilla-1539471 2019-03-28 14:08:42.345128639 +0100
|
||||
+++ firefox-66.0.1/widget/gtk/nsWindow.h 2019-03-28 14:08:42.355128607 +0100
|
||||
@@ -603,6 +603,11 @@ class nsWindow final : public nsBaseWidg
|
||||
|
||||
void ForceTitlebarRedraw();
|
||||
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ void OpenToplevelWaylandWindow();
|
||||
+ void CloseToplevelWaylandWindow();
|
||||
+#endif
|
||||
+
|
||||
/**
|
||||
* |mIMContext| takes all IME related stuff.
|
||||
*
|
||||
156
mozilla-1540145.patch
Normal file
156
mozilla-1540145.patch
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
diff -up firefox-67.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp.mozilla-1540145 firefox-67.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
|
||||
--- firefox-67.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp.mozilla-1540145 2019-05-14 01:08:35.000000000 +0200
|
||||
+++ firefox-67.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp 2019-05-15 15:20:13.365502186 +0200
|
||||
@@ -34,16 +34,10 @@ class nsUnixSystemProxySettings final :
|
||||
private:
|
||||
~nsUnixSystemProxySettings() = default;
|
||||
|
||||
- nsCOMPtr<nsIGConfService> mGConf;
|
||||
- nsCOMPtr<nsIGSettingsService> mGSettings;
|
||||
+ nsCOMPtr<nsIGSettingsService> mGSettings;
|
||||
nsCOMPtr<nsIGSettingsCollection> mProxySettings;
|
||||
nsInterfaceHashtable<nsCStringHashKey, nsIGSettingsCollection>
|
||||
mSchemeProxySettings;
|
||||
- bool IsProxyMode(const char* aMode);
|
||||
- nsresult SetProxyResultFromGConf(const char* aKeyBase, const char* aType,
|
||||
- nsACString& aResult);
|
||||
- nsresult GetProxyFromGConf(const nsACString& aScheme, const nsACString& aHost,
|
||||
- int32_t aPort, nsACString& aResult);
|
||||
nsresult GetProxyFromGSettings(const nsACString& aScheme,
|
||||
const nsACString& aHost, int32_t aPort,
|
||||
nsACString& aResult);
|
||||
@@ -68,16 +62,6 @@ void nsUnixSystemProxySettings::Init() {
|
||||
NS_LITERAL_CSTRING("org.gnome.system.proxy"),
|
||||
getter_AddRefs(mProxySettings));
|
||||
}
|
||||
- if (!mProxySettings) {
|
||||
- mGConf = do_GetService(NS_GCONFSERVICE_CONTRACTID);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-bool nsUnixSystemProxySettings::IsProxyMode(const char* aMode) {
|
||||
- nsAutoCString mode;
|
||||
- return NS_SUCCEEDED(mGConf->GetString(
|
||||
- NS_LITERAL_CSTRING("/system/proxy/mode"), mode)) &&
|
||||
- mode.EqualsASCII(aMode);
|
||||
}
|
||||
|
||||
nsresult nsUnixSystemProxySettings::GetPACURI(nsACString& aResult) {
|
||||
@@ -92,14 +76,8 @@ nsresult nsUnixSystemProxySettings::GetP
|
||||
}
|
||||
/* The org.gnome.system.proxy schema has been found, but auto mode is not
|
||||
* set. Don't try the GConf and return empty string. */
|
||||
- aResult.Truncate();
|
||||
- return NS_OK;
|
||||
}
|
||||
|
||||
- if (mGConf && IsProxyMode("auto")) {
|
||||
- return mGConf->GetString(NS_LITERAL_CSTRING("/system/proxy/autoconfig_url"),
|
||||
- aResult);
|
||||
- }
|
||||
// Return an empty string when auto mode is not set.
|
||||
aResult.Truncate();
|
||||
return NS_OK;
|
||||
@@ -217,30 +195,6 @@ static nsresult GetProxyFromEnvironment(
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
-nsresult nsUnixSystemProxySettings::SetProxyResultFromGConf(
|
||||
- const char* aKeyBase, const char* aType, nsACString& aResult) {
|
||||
- nsAutoCString hostKey;
|
||||
- hostKey.AppendASCII(aKeyBase);
|
||||
- hostKey.AppendLiteral("host");
|
||||
- nsAutoCString host;
|
||||
- nsresult rv = mGConf->GetString(hostKey, host);
|
||||
- NS_ENSURE_SUCCESS(rv, rv);
|
||||
- if (host.IsEmpty()) return NS_ERROR_FAILURE;
|
||||
-
|
||||
- nsAutoCString portKey;
|
||||
- portKey.AppendASCII(aKeyBase);
|
||||
- portKey.AppendLiteral("port");
|
||||
- int32_t port;
|
||||
- rv = mGConf->GetInt(portKey, &port);
|
||||
- NS_ENSURE_SUCCESS(rv, rv);
|
||||
-
|
||||
- /* When port is 0, proxy is not considered as enabled even if host is set. */
|
||||
- if (port == 0) return NS_ERROR_FAILURE;
|
||||
-
|
||||
- SetProxyResult(aType, host, port, aResult);
|
||||
- return NS_OK;
|
||||
-}
|
||||
-
|
||||
nsresult nsUnixSystemProxySettings::SetProxyResultFromGSettings(
|
||||
const char* aKeyBase, const char* aType, nsACString& aResult) {
|
||||
nsDependentCString key(aKeyBase);
|
||||
@@ -366,63 +320,6 @@ static bool HostIgnoredByProxy(const nsA
|
||||
return memcmp(&ignoreAddr, &hostAddr, sizeof(PRIPv6Addr)) == 0;
|
||||
}
|
||||
|
||||
-nsresult nsUnixSystemProxySettings::GetProxyFromGConf(const nsACString& aScheme,
|
||||
- const nsACString& aHost,
|
||||
- int32_t aPort,
|
||||
- nsACString& aResult) {
|
||||
- bool masterProxySwitch = false;
|
||||
- mGConf->GetBool(NS_LITERAL_CSTRING("/system/http_proxy/use_http_proxy"),
|
||||
- &masterProxySwitch);
|
||||
- // if no proxy is set in GConf return NS_ERROR_FAILURE
|
||||
- if (!(IsProxyMode("manual") || masterProxySwitch)) {
|
||||
- return NS_ERROR_FAILURE;
|
||||
- }
|
||||
-
|
||||
- nsCOMPtr<nsIArray> ignoreList;
|
||||
- if (NS_SUCCEEDED(mGConf->GetStringList(
|
||||
- NS_LITERAL_CSTRING("/system/http_proxy/ignore_hosts"),
|
||||
- getter_AddRefs(ignoreList))) &&
|
||||
- ignoreList) {
|
||||
- uint32_t len = 0;
|
||||
- ignoreList->GetLength(&len);
|
||||
- for (uint32_t i = 0; i < len; ++i) {
|
||||
- nsCOMPtr<nsISupportsString> str = do_QueryElementAt(ignoreList, i);
|
||||
- if (str) {
|
||||
- nsAutoString s;
|
||||
- if (NS_SUCCEEDED(str->GetData(s)) && !s.IsEmpty()) {
|
||||
- if (HostIgnoredByProxy(NS_ConvertUTF16toUTF8(s), aHost)) {
|
||||
- aResult.AppendLiteral("DIRECT");
|
||||
- return NS_OK;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- bool useHttpProxyForAll = false;
|
||||
- // This setting sometimes doesn't exist, don't bail on failure
|
||||
- mGConf->GetBool(NS_LITERAL_CSTRING("/system/http_proxy/use_same_proxy"),
|
||||
- &useHttpProxyForAll);
|
||||
-
|
||||
- nsresult rv;
|
||||
- if (!useHttpProxyForAll) {
|
||||
- rv = SetProxyResultFromGConf("/system/proxy/socks_", "SOCKS", aResult);
|
||||
- if (NS_SUCCEEDED(rv)) return rv;
|
||||
- }
|
||||
-
|
||||
- if (aScheme.LowerCaseEqualsLiteral("http") || useHttpProxyForAll) {
|
||||
- rv = SetProxyResultFromGConf("/system/http_proxy/", "PROXY", aResult);
|
||||
- } else if (aScheme.LowerCaseEqualsLiteral("https")) {
|
||||
- rv = SetProxyResultFromGConf("/system/proxy/secure_", "PROXY", aResult);
|
||||
- } else if (aScheme.LowerCaseEqualsLiteral("ftp")) {
|
||||
- rv = SetProxyResultFromGConf("/system/proxy/ftp_", "PROXY", aResult);
|
||||
- } else {
|
||||
- rv = NS_ERROR_FAILURE;
|
||||
- }
|
||||
-
|
||||
- return rv;
|
||||
-}
|
||||
-
|
||||
nsresult nsUnixSystemProxySettings::GetProxyFromGSettings(
|
||||
const nsACString& aScheme, const nsACString& aHost, int32_t aPort,
|
||||
nsACString& aResult) {
|
||||
@@ -494,7 +391,6 @@ nsresult nsUnixSystemProxySettings::GetP
|
||||
nsresult rv = GetProxyFromGSettings(aScheme, aHost, aPort, aResult);
|
||||
if (NS_SUCCEEDED(rv)) return rv;
|
||||
}
|
||||
- if (mGConf) return GetProxyFromGConf(aScheme, aHost, aPort, aResult);
|
||||
|
||||
return GetProxyFromEnvironment(aScheme, aHost, aPort, aResult);
|
||||
}
|
||||
2701
mozilla-1552590.patch
Normal file
2701
mozilla-1552590.patch
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,550 +0,0 @@
|
|||
diff -up firefox-127.0/media/ffvpx/libavcodec/codec_list.c.1667096 firefox-127.0/media/ffvpx/libavcodec/codec_list.c
|
||||
--- firefox-127.0/media/ffvpx/libavcodec/codec_list.c.1667096 2024-06-06 23:33:57.000000000 +0200
|
||||
+++ firefox-127.0/media/ffvpx/libavcodec/codec_list.c 2024-06-10 12:42:39.353913204 +0200
|
||||
@@ -11,6 +11,9 @@ static const FFCodec * const codec_list[
|
||||
#if CONFIG_MP3_DECODER
|
||||
&ff_mp3_decoder,
|
||||
#endif
|
||||
+#ifdef CONFIG_LIBFDK_AAC
|
||||
+ &ff_libfdk_aac_decoder,
|
||||
+#endif
|
||||
#if CONFIG_LIBDAV1D
|
||||
&ff_libdav1d_decoder,
|
||||
#endif
|
||||
diff -up firefox-127.0/media/ffvpx/libavcodec/libfdk-aacdec.c.1667096 firefox-127.0/media/ffvpx/libavcodec/libfdk-aacdec.c
|
||||
--- firefox-127.0/media/ffvpx/libavcodec/libfdk-aacdec.c.1667096 2024-06-10 12:42:39.354913201 +0200
|
||||
+++ firefox-127.0/media/ffvpx/libavcodec/libfdk-aacdec.c 2024-06-10 16:28:30.332367814 +0200
|
||||
@@ -0,0 +1,498 @@
|
||||
+/*
|
||||
+ * AAC decoder wrapper
|
||||
+ * Copyright (c) 2012 Martin Storsjo
|
||||
+ *
|
||||
+ * This file is part of FFmpeg.
|
||||
+ *
|
||||
+ * Permission to use, copy, modify, and/or distribute this software for any
|
||||
+ * purpose with or without fee is hereby granted, provided that the above
|
||||
+ * copyright notice and this permission notice appear in all copies.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+#include <fdk-aac/aacdecoder_lib.h>
|
||||
+
|
||||
+#include "libavutil/channel_layout.h"
|
||||
+#include "libavutil/common.h"
|
||||
+#include "libavutil/opt.h"
|
||||
+#include "libavutil/mem.h"
|
||||
+#include "avcodec.h"
|
||||
+#include "codec_internal.h"
|
||||
+#include "decode.h"
|
||||
+
|
||||
+#ifdef AACDECODER_LIB_VL0
|
||||
+#define FDKDEC_VER_AT_LEAST(vl0, vl1) \
|
||||
+ ((AACDECODER_LIB_VL0 > vl0) || \
|
||||
+ (AACDECODER_LIB_VL0 == vl0 && AACDECODER_LIB_VL1 >= vl1))
|
||||
+#else
|
||||
+#define FDKDEC_VER_AT_LEAST(vl0, vl1) 0
|
||||
+#endif
|
||||
+
|
||||
+#if !FDKDEC_VER_AT_LEAST(2, 5) // < 2.5.10
|
||||
+#define AAC_PCM_MAX_OUTPUT_CHANNELS AAC_PCM_OUTPUT_CHANNELS
|
||||
+#endif
|
||||
+
|
||||
+enum ConcealMethod {
|
||||
+ CONCEAL_METHOD_SPECTRAL_MUTING = 0,
|
||||
+ CONCEAL_METHOD_NOISE_SUBSTITUTION = 1,
|
||||
+ CONCEAL_METHOD_ENERGY_INTERPOLATION = 2,
|
||||
+ CONCEAL_METHOD_NB,
|
||||
+};
|
||||
+
|
||||
+typedef struct FDKAACDecContext {
|
||||
+ const AVClass *class;
|
||||
+ HANDLE_AACDECODER handle;
|
||||
+ uint8_t *decoder_buffer;
|
||||
+ int decoder_buffer_size;
|
||||
+ uint8_t *anc_buffer;
|
||||
+ int conceal_method;
|
||||
+ int drc_level;
|
||||
+ int drc_boost;
|
||||
+ int drc_heavy;
|
||||
+ int drc_effect;
|
||||
+ int drc_cut;
|
||||
+ int album_mode;
|
||||
+ int level_limit;
|
||||
+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10
|
||||
+ int output_delay_set;
|
||||
+ int flush_samples;
|
||||
+ int delay_samples;
|
||||
+#endif
|
||||
+ AVChannelLayout downmix_layout;
|
||||
+} FDKAACDecContext;
|
||||
+
|
||||
+
|
||||
+#define DMX_ANC_BUFFSIZE 128
|
||||
+#define DECODER_MAX_CHANNELS 8
|
||||
+#define DECODER_BUFFSIZE 2048 * sizeof(INT_PCM)
|
||||
+
|
||||
+#define OFFSET(x) offsetof(FDKAACDecContext, x)
|
||||
+#define AD AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM
|
||||
+static const AVOption fdk_aac_dec_options[] = {
|
||||
+ { "conceal", "Error concealment method", OFFSET(conceal_method), AV_OPT_TYPE_INT, { .i64 = CONCEAL_METHOD_NOISE_SUBSTITUTION }, CONCEAL_METHOD_SPECTRAL_MUTING, CONCEAL_METHOD_NB - 1, AD, "conceal" },
|
||||
+ { "spectral", "Spectral muting", 0, AV_OPT_TYPE_CONST, { .i64 = CONCEAL_METHOD_SPECTRAL_MUTING }, INT_MIN, INT_MAX, AD, "conceal" },
|
||||
+ { "noise", "Noise Substitution", 0, AV_OPT_TYPE_CONST, { .i64 = CONCEAL_METHOD_NOISE_SUBSTITUTION }, INT_MIN, INT_MAX, AD, "conceal" },
|
||||
+ { "energy", "Energy Interpolation", 0, AV_OPT_TYPE_CONST, { .i64 = CONCEAL_METHOD_ENERGY_INTERPOLATION }, INT_MIN, INT_MAX, AD, "conceal" },
|
||||
+ { "drc_boost", "Dynamic Range Control: boost, where [0] is none and [127] is max boost",
|
||||
+ OFFSET(drc_boost), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 127, AD, NULL },
|
||||
+ { "drc_cut", "Dynamic Range Control: attenuation factor, where [0] is none and [127] is max compression",
|
||||
+ OFFSET(drc_cut), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 127, AD, NULL },
|
||||
+ { "drc_level", "Dynamic Range Control: reference level, quantized to 0.25dB steps where [0] is 0dB and [127] is -31.75dB, -1 for auto, and -2 for disabled",
|
||||
+ OFFSET(drc_level), AV_OPT_TYPE_INT, { .i64 = -1}, -2, 127, AD, NULL },
|
||||
+ { "drc_heavy", "Dynamic Range Control: heavy compression, where [1] is on (RF mode) and [0] is off",
|
||||
+ OFFSET(drc_heavy), AV_OPT_TYPE_INT, { .i64 = -1}, -1, 1, AD, NULL },
|
||||
+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10
|
||||
+ { "level_limit", "Signal level limiting",
|
||||
+ OFFSET(level_limit), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, AD },
|
||||
+#endif
|
||||
+#if FDKDEC_VER_AT_LEAST(3, 0) // 3.0.0
|
||||
+ { "drc_effect","Dynamic Range Control: effect type, where e.g. [0] is none and [6] is general",
|
||||
+ OFFSET(drc_effect), AV_OPT_TYPE_INT, { .i64 = -1}, -1, 8, AD, NULL },
|
||||
+#endif
|
||||
+#if FDKDEC_VER_AT_LEAST(3, 1) // 3.1.0
|
||||
+ { "album_mode","Dynamic Range Control: album mode, where [0] is off and [1] is on",
|
||||
+ OFFSET(album_mode), AV_OPT_TYPE_INT, { .i64 = -1}, -1, 1, AD, NULL },
|
||||
+#endif
|
||||
+ { "downmix", "Request a specific channel layout from the decoder", OFFSET(downmix_layout), AV_OPT_TYPE_CHLAYOUT, {.str = NULL}, .flags = AD },
|
||||
+ { NULL }
|
||||
+};
|
||||
+
|
||||
+static const AVClass fdk_aac_dec_class = {
|
||||
+ .class_name = "libfdk-aac decoder",
|
||||
+ .item_name = av_default_item_name,
|
||||
+ .option = fdk_aac_dec_options,
|
||||
+ .version = LIBAVUTIL_VERSION_INT,
|
||||
+};
|
||||
+
|
||||
+static int get_stream_info(AVCodecContext *avctx)
|
||||
+{
|
||||
+ FDKAACDecContext *s = avctx->priv_data;
|
||||
+ CStreamInfo *info = aacDecoder_GetStreamInfo(s->handle);
|
||||
+ int channel_counts[0x24] = { 0 };
|
||||
+ int i, ch_error = 0;
|
||||
+ uint64_t ch_layout = 0;
|
||||
+
|
||||
+ if (!info) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to get stream info\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+
|
||||
+ if (info->sampleRate <= 0) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Stream info not initialized\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+ avctx->sample_rate = info->sampleRate;
|
||||
+ avctx->frame_size = info->frameSize;
|
||||
+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10
|
||||
+ if (!s->output_delay_set && info->outputDelay) {
|
||||
+ // Set this only once.
|
||||
+ s->flush_samples = info->outputDelay;
|
||||
+ s->delay_samples = info->outputDelay;
|
||||
+ s->output_delay_set = 1;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ for (i = 0; i < info->numChannels; i++) {
|
||||
+ AUDIO_CHANNEL_TYPE ctype = info->pChannelType[i];
|
||||
+ if (ctype <= ACT_NONE || ctype >= FF_ARRAY_ELEMS(channel_counts)) {
|
||||
+ av_log(avctx, AV_LOG_WARNING, "unknown channel type\n");
|
||||
+ break;
|
||||
+ }
|
||||
+ channel_counts[ctype]++;
|
||||
+ }
|
||||
+ av_log(avctx, AV_LOG_DEBUG,
|
||||
+ "%d channels - front:%d side:%d back:%d lfe:%d top:%d\n",
|
||||
+ info->numChannels,
|
||||
+ channel_counts[ACT_FRONT], channel_counts[ACT_SIDE],
|
||||
+ channel_counts[ACT_BACK], channel_counts[ACT_LFE],
|
||||
+ channel_counts[ACT_FRONT_TOP] + channel_counts[ACT_SIDE_TOP] +
|
||||
+ channel_counts[ACT_BACK_TOP] + channel_counts[ACT_TOP]);
|
||||
+
|
||||
+ switch (channel_counts[ACT_FRONT]) {
|
||||
+ case 4:
|
||||
+ ch_layout |= AV_CH_LAYOUT_STEREO | AV_CH_FRONT_LEFT_OF_CENTER |
|
||||
+ AV_CH_FRONT_RIGHT_OF_CENTER;
|
||||
+ break;
|
||||
+ case 3:
|
||||
+ ch_layout |= AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER;
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ ch_layout |= AV_CH_LAYOUT_STEREO;
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ ch_layout |= AV_CH_FRONT_CENTER;
|
||||
+ break;
|
||||
+ default:
|
||||
+ av_log(avctx, AV_LOG_WARNING,
|
||||
+ "unsupported number of front channels: %d\n",
|
||||
+ channel_counts[ACT_FRONT]);
|
||||
+ ch_error = 1;
|
||||
+ break;
|
||||
+ }
|
||||
+ if (channel_counts[ACT_SIDE] > 0) {
|
||||
+ if (channel_counts[ACT_SIDE] == 2) {
|
||||
+ ch_layout |= AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT;
|
||||
+ } else {
|
||||
+ av_log(avctx, AV_LOG_WARNING,
|
||||
+ "unsupported number of side channels: %d\n",
|
||||
+ channel_counts[ACT_SIDE]);
|
||||
+ ch_error = 1;
|
||||
+ }
|
||||
+ }
|
||||
+ if (channel_counts[ACT_BACK] > 0) {
|
||||
+ switch (channel_counts[ACT_BACK]) {
|
||||
+ case 3:
|
||||
+ ch_layout |= AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT | AV_CH_BACK_CENTER;
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ ch_layout |= AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT;
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ ch_layout |= AV_CH_BACK_CENTER;
|
||||
+ break;
|
||||
+ default:
|
||||
+ av_log(avctx, AV_LOG_WARNING,
|
||||
+ "unsupported number of back channels: %d\n",
|
||||
+ channel_counts[ACT_BACK]);
|
||||
+ ch_error = 1;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ if (channel_counts[ACT_LFE] > 0) {
|
||||
+ if (channel_counts[ACT_LFE] == 1) {
|
||||
+ ch_layout |= AV_CH_LOW_FREQUENCY;
|
||||
+ } else {
|
||||
+ av_log(avctx, AV_LOG_WARNING,
|
||||
+ "unsupported number of LFE channels: %d\n",
|
||||
+ channel_counts[ACT_LFE]);
|
||||
+ ch_error = 1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ av_channel_layout_uninit(&avctx->ch_layout);
|
||||
+ av_channel_layout_from_mask(&avctx->ch_layout, ch_layout);
|
||||
+ if (!ch_error && avctx->ch_layout.nb_channels != info->numChannels) {
|
||||
+ av_log(avctx, AV_LOG_WARNING, "unsupported channel configuration\n");
|
||||
+ ch_error = 1;
|
||||
+ }
|
||||
+ if (ch_error)
|
||||
+ avctx->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static av_cold int fdk_aac_decode_close(AVCodecContext *avctx)
|
||||
+{
|
||||
+ FDKAACDecContext *s = avctx->priv_data;
|
||||
+
|
||||
+ if (s->handle)
|
||||
+ aacDecoder_Close(s->handle);
|
||||
+ av_freep(&s->decoder_buffer);
|
||||
+ av_freep(&s->anc_buffer);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static av_cold int fdk_aac_decode_init(AVCodecContext *avctx)
|
||||
+{
|
||||
+ FDKAACDecContext *s = avctx->priv_data;
|
||||
+ AAC_DECODER_ERROR err;
|
||||
+
|
||||
+ s->handle = aacDecoder_Open(avctx->extradata_size ? TT_MP4_RAW : TT_MP4_ADTS, 1);
|
||||
+ if (!s->handle) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Error opening decoder\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+
|
||||
+ if (avctx->extradata_size) {
|
||||
+ if ((err = aacDecoder_ConfigRaw(s->handle, &avctx->extradata,
|
||||
+ &avctx->extradata_size)) != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to set extradata\n");
|
||||
+ return AVERROR_INVALIDDATA;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if ((err = aacDecoder_SetParam(s->handle, AAC_CONCEAL_METHOD,
|
||||
+ s->conceal_method)) != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to set error concealment method\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+
|
||||
+#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
+FF_DISABLE_DEPRECATION_WARNINGS
|
||||
+ if (avctx->request_channel_layout) {
|
||||
+ av_channel_layout_uninit(&s->downmix_layout);
|
||||
+ av_channel_layout_from_mask(&s->downmix_layout, avctx->request_channel_layout);
|
||||
+ }
|
||||
+FF_ENABLE_DEPRECATION_WARNINGS
|
||||
+#endif
|
||||
+ if (s->downmix_layout.nb_channels > 0 &&
|
||||
+ s->downmix_layout.order != AV_CHANNEL_ORDER_NATIVE) {
|
||||
+ int downmix_channels = -1;
|
||||
+
|
||||
+ switch (s->downmix_layout.u.mask) {
|
||||
+ case AV_CH_LAYOUT_STEREO:
|
||||
+ case AV_CH_LAYOUT_STEREO_DOWNMIX:
|
||||
+ downmix_channels = 2;
|
||||
+ break;
|
||||
+ case AV_CH_LAYOUT_MONO:
|
||||
+ downmix_channels = 1;
|
||||
+ break;
|
||||
+ default:
|
||||
+ av_log(avctx, AV_LOG_WARNING, "Invalid downmix option\n");
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (downmix_channels != -1) {
|
||||
+ if (aacDecoder_SetParam(s->handle, AAC_PCM_MAX_OUTPUT_CHANNELS,
|
||||
+ downmix_channels) != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_WARNING, "Unable to set output channels in the decoder\n");
|
||||
+ } else {
|
||||
+ s->anc_buffer = av_malloc(DMX_ANC_BUFFSIZE);
|
||||
+ if (!s->anc_buffer) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to allocate ancillary buffer for the decoder\n");
|
||||
+ return AVERROR(ENOMEM);
|
||||
+ }
|
||||
+ if (aacDecoder_AncDataInit(s->handle, s->anc_buffer, DMX_ANC_BUFFSIZE)) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to register downmix ancillary buffer in the decoder\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (s->drc_boost != -1) {
|
||||
+ if (aacDecoder_SetParam(s->handle, AAC_DRC_BOOST_FACTOR, s->drc_boost) != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to set DRC boost factor in the decoder\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (s->drc_cut != -1) {
|
||||
+ if (aacDecoder_SetParam(s->handle, AAC_DRC_ATTENUATION_FACTOR, s->drc_cut) != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to set DRC attenuation factor in the decoder\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (s->drc_level != -1) {
|
||||
+ // This option defaults to -1, i.e. not calling
|
||||
+ // aacDecoder_SetParam(AAC_DRC_REFERENCE_LEVEL) at all, which defaults
|
||||
+ // to the level from DRC metadata, if available. The user can set
|
||||
+ // -drc_level -2, which calls aacDecoder_SetParam(
|
||||
+ // AAC_DRC_REFERENCE_LEVEL) with a negative value, which then
|
||||
+ // explicitly disables the feature.
|
||||
+ if (aacDecoder_SetParam(s->handle, AAC_DRC_REFERENCE_LEVEL, s->drc_level) != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to set DRC reference level in the decoder\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (s->drc_heavy != -1) {
|
||||
+ if (aacDecoder_SetParam(s->handle, AAC_DRC_HEAVY_COMPRESSION, s->drc_heavy) != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to set DRC heavy compression in the decoder\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10
|
||||
+ // Setting this parameter to -1 enables the auto behaviour in the library.
|
||||
+ if (aacDecoder_SetParam(s->handle, AAC_PCM_LIMITER_ENABLE, s->level_limit) != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to set in signal level limiting in the decoder\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+#if FDKDEC_VER_AT_LEAST(3, 0) // 3.0.0
|
||||
+ if (s->drc_effect != -1) {
|
||||
+ if (aacDecoder_SetParam(s->handle, AAC_UNIDRC_SET_EFFECT, s->drc_effect) != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to set DRC effect type in the decoder\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+#if FDKDEC_VER_AT_LEAST(3, 1) // 3.1.0
|
||||
+ if (s->album_mode != -1) {
|
||||
+ if (aacDecoder_SetParam(s->handle, AAC_UNIDRC_ALBUM_MODE, s->album_mode) != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "Unable to set album mode in the decoder\n");
|
||||
+ return AVERROR_UNKNOWN;
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
||||
+
|
||||
+ s->decoder_buffer_size = DECODER_BUFFSIZE * DECODER_MAX_CHANNELS;
|
||||
+ s->decoder_buffer = av_malloc(s->decoder_buffer_size);
|
||||
+ if (!s->decoder_buffer)
|
||||
+ return AVERROR(ENOMEM);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int fdk_aac_decode_frame(AVCodecContext *avctx, AVFrame *frame,
|
||||
+ int *got_frame_ptr, AVPacket *avpkt)
|
||||
+{
|
||||
+ FDKAACDecContext *s = avctx->priv_data;
|
||||
+ int ret;
|
||||
+ AAC_DECODER_ERROR err;
|
||||
+ UINT valid = avpkt->size;
|
||||
+ UINT flags = 0;
|
||||
+ int input_offset = 0;
|
||||
+
|
||||
+ if (avpkt->size) {
|
||||
+ err = aacDecoder_Fill(s->handle, &avpkt->data, &avpkt->size, &valid);
|
||||
+ if (err != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR, "aacDecoder_Fill() failed: %x\n", err);
|
||||
+ return AVERROR_INVALIDDATA;
|
||||
+ }
|
||||
+ } else {
|
||||
+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10
|
||||
+ /* Handle decoder draining */
|
||||
+ if (s->flush_samples > 0) {
|
||||
+ flags |= AACDEC_FLUSH;
|
||||
+ } else {
|
||||
+ return AVERROR_EOF;
|
||||
+ }
|
||||
+#else
|
||||
+ return AVERROR_EOF;
|
||||
+#endif
|
||||
+ }
|
||||
+
|
||||
+ err = aacDecoder_DecodeFrame(s->handle, (INT_PCM *) s->decoder_buffer,
|
||||
+ s->decoder_buffer_size / sizeof(INT_PCM),
|
||||
+ flags);
|
||||
+ if (err == AAC_DEC_NOT_ENOUGH_BITS) {
|
||||
+ ret = avpkt->size - valid;
|
||||
+ goto end;
|
||||
+ }
|
||||
+ if (err != AAC_DEC_OK) {
|
||||
+ av_log(avctx, AV_LOG_ERROR,
|
||||
+ "aacDecoder_DecodeFrame() failed: %x\n", err);
|
||||
+ ret = AVERROR_UNKNOWN;
|
||||
+ goto end;
|
||||
+ }
|
||||
+
|
||||
+ if ((ret = get_stream_info(avctx)) < 0)
|
||||
+ goto end;
|
||||
+ frame->nb_samples = avctx->frame_size;
|
||||
+
|
||||
+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10
|
||||
+ if (flags & AACDEC_FLUSH) {
|
||||
+ // Only return the right amount of samples at the end; if calling the
|
||||
+ // decoder with AACDEC_FLUSH, it will keep returning frames indefinitely.
|
||||
+ frame->nb_samples = FFMIN(s->flush_samples, frame->nb_samples);
|
||||
+ av_log(s, AV_LOG_DEBUG, "Returning %d/%d delayed samples.\n",
|
||||
+ frame->nb_samples, s->flush_samples);
|
||||
+ s->flush_samples -= frame->nb_samples;
|
||||
+ } else {
|
||||
+ // Trim off samples from the start to compensate for extra decoder
|
||||
+ // delay. We could also just adjust the pts, but this avoids
|
||||
+ // including the extra samples in the output altogether.
|
||||
+ if (s->delay_samples) {
|
||||
+ int drop_samples = FFMIN(s->delay_samples, frame->nb_samples);
|
||||
+ av_log(s, AV_LOG_DEBUG, "Dropping %d/%d delayed samples.\n",
|
||||
+ drop_samples, s->delay_samples);
|
||||
+ s->delay_samples -= drop_samples;
|
||||
+ frame->nb_samples -= drop_samples;
|
||||
+ input_offset = drop_samples * avctx->ch_layout.nb_channels;
|
||||
+ if (frame->nb_samples <= 0)
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
|
||||
+ goto end;
|
||||
+
|
||||
+ memcpy(frame->extended_data[0], s->decoder_buffer + input_offset,
|
||||
+ avctx->ch_layout.nb_channels * frame->nb_samples *
|
||||
+ av_get_bytes_per_sample(avctx->sample_fmt));
|
||||
+
|
||||
+ *got_frame_ptr = 1;
|
||||
+ ret = avpkt->size - valid;
|
||||
+
|
||||
+end:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static av_cold void fdk_aac_decode_flush(AVCodecContext *avctx)
|
||||
+{
|
||||
+ FDKAACDecContext *s = avctx->priv_data;
|
||||
+ AAC_DECODER_ERROR err;
|
||||
+
|
||||
+ if (!s->handle)
|
||||
+ return;
|
||||
+
|
||||
+ if ((err = aacDecoder_SetParam(s->handle,
|
||||
+ AAC_TPDEC_CLEAR_BUFFER, 1)) != AAC_DEC_OK)
|
||||
+ av_log(avctx, AV_LOG_WARNING, "failed to clear buffer when flushing\n");
|
||||
+}
|
||||
+
|
||||
+const FFCodec ff_libfdk_aac_decoder = {
|
||||
+ .p.name = "libfdk_aac",
|
||||
+ CODEC_LONG_NAME("Fraunhofer FDK AAC"),
|
||||
+ .p.type = AVMEDIA_TYPE_AUDIO,
|
||||
+ .p.id = AV_CODEC_ID_AAC,
|
||||
+ .priv_data_size = sizeof(FDKAACDecContext),
|
||||
+ .init = fdk_aac_decode_init,
|
||||
+ FF_CODEC_DECODE_CB(fdk_aac_decode_frame),
|
||||
+ .close = fdk_aac_decode_close,
|
||||
+ .flush = fdk_aac_decode_flush,
|
||||
+ .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF
|
||||
+#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10
|
||||
+ | AV_CODEC_CAP_DELAY
|
||||
+#endif
|
||||
+ ,
|
||||
+ .p.priv_class = &fdk_aac_dec_class,
|
||||
+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
|
||||
+ .p.wrapper_name = "libfdk",
|
||||
+};
|
||||
diff -up firefox-127.0/media/ffvpx/libavcodec/moz.build.1667096 firefox-127.0/media/ffvpx/libavcodec/moz.build
|
||||
--- firefox-127.0/media/ffvpx/libavcodec/moz.build.1667096 2024-06-06 23:33:58.000000000 +0200
|
||||
+++ firefox-127.0/media/ffvpx/libavcodec/moz.build 2024-06-10 12:42:39.354913201 +0200
|
||||
@@ -151,6 +151,12 @@ else:
|
||||
CXXFLAGS += CONFIG["MOZ_LIBVPX_CFLAGS"]
|
||||
OS_LIBS += CONFIG["MOZ_LIBVPX_LIBS"]
|
||||
|
||||
+if CONFIG['MOZ_FDK_AAC']:
|
||||
+ SOURCES += [
|
||||
+ 'libfdk-aacdec.c',
|
||||
+ ]
|
||||
+ OS_LIBS += CONFIG['MOZ_FDK_AAC_LIBS']
|
||||
+
|
||||
SYMBOLS_FILE = 'avcodec.symbols'
|
||||
NoVisibilityFlags()
|
||||
|
||||
diff -up firefox-127.0/toolkit/moz.configure.1667096 firefox-127.0/toolkit/moz.configure
|
||||
--- firefox-127.0/toolkit/moz.configure.1667096 2024-06-10 12:42:39.312913316 +0200
|
||||
+++ firefox-127.0/toolkit/moz.configure 2024-06-10 12:42:39.355913199 +0200
|
||||
@@ -2412,6 +2412,15 @@ with only_when(compile_environment):
|
||||
|
||||
set_config("MOZ_SYSTEM_PNG", True, when="--with-system-png")
|
||||
|
||||
+# FDK AAC support
|
||||
+# ==============================================================
|
||||
+option('--with-system-fdk-aac',
|
||||
+ help='Use system libfdk-aac (located with pkgconfig)')
|
||||
+
|
||||
+system_fdk_aac = pkg_check_modules('MOZ_FDK_AAC', 'fdk-aac',
|
||||
+ when='--with-system-fdk-aac')
|
||||
+
|
||||
+set_config('MOZ_FDK_AAC', depends(when=system_fdk_aac)(lambda: True))
|
||||
|
||||
# FFmpeg's ffvpx configuration
|
||||
# ==============================================================
|
||||
111
mozilla-440908.patch
Normal file
111
mozilla-440908.patch
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
diff -up firefox-56.0/modules/libpref/prefapi.cpp.440908 firefox-56.0/modules/libpref/prefapi.cpp
|
||||
--- firefox-56.0/modules/libpref/prefapi.cpp.440908 2017-09-14 22:15:52.000000000 +0200
|
||||
+++ firefox-56.0/modules/libpref/prefapi.cpp 2017-09-25 10:39:39.266572792 +0200
|
||||
@@ -1036,8 +1036,8 @@ void PREF_ReaderCallback(void *clo
|
||||
PrefValue value,
|
||||
PrefType type,
|
||||
bool isDefault,
|
||||
- bool isStickyDefault)
|
||||
-
|
||||
+ bool isStickyDefault,
|
||||
+ bool isLocked)
|
||||
{
|
||||
uint32_t flags = 0;
|
||||
if (isDefault) {
|
||||
@@ -1049,4 +1049,6 @@ void PREF_ReaderCallback(void *clo
|
||||
flags |= kPrefForceSet;
|
||||
}
|
||||
pref_HashPref(pref, value, type, flags);
|
||||
+ if (isLocked)
|
||||
+ PREF_LockPref(pref, true);
|
||||
}
|
||||
diff -up firefox-56.0/modules/libpref/prefapi.h.440908 firefox-56.0/modules/libpref/prefapi.h
|
||||
--- firefox-56.0/modules/libpref/prefapi.h.440908 2017-07-31 18:20:51.000000000 +0200
|
||||
+++ firefox-56.0/modules/libpref/prefapi.h 2017-09-25 10:39:39.267572789 +0200
|
||||
@@ -246,8 +246,8 @@ void PREF_ReaderCallback( void *closure,
|
||||
PrefValue value,
|
||||
PrefType type,
|
||||
bool isDefault,
|
||||
- bool isStickyDefault);
|
||||
-
|
||||
+ bool isStickyDefault,
|
||||
+ bool isLocked);
|
||||
|
||||
/*
|
||||
* Callback whenever we change a preference
|
||||
diff -up firefox-56.0/modules/libpref/prefread.cpp.440908 firefox-56.0/modules/libpref/prefread.cpp
|
||||
--- firefox-56.0/modules/libpref/prefread.cpp.440908 2017-09-14 22:15:52.000000000 +0200
|
||||
+++ firefox-56.0/modules/libpref/prefread.cpp 2017-09-25 10:39:39.267572789 +0200
|
||||
@@ -43,6 +43,7 @@ enum {
|
||||
#define BITS_PER_HEX_DIGIT 4
|
||||
|
||||
static const char kUserPref[] = "user_pref";
|
||||
+static const char kLockPref[] = "lockPref";
|
||||
static const char kPref[] = "pref";
|
||||
static const char kPrefSticky[] = "sticky_pref";
|
||||
static const char kTrue[] = "true";
|
||||
@@ -146,7 +147,7 @@ pref_DoCallback(PrefParseState *ps)
|
||||
break;
|
||||
}
|
||||
(*ps->reader)(ps->closure, ps->lb, value, ps->vtype, ps->fdefault,
|
||||
- ps->fstickydefault);
|
||||
+ ps->fstickydefault, ps->flock);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -215,6 +216,7 @@ PREF_ParseBuf(PrefParseState *ps, const
|
||||
ps->vtype = PrefType::Invalid;
|
||||
ps->fdefault = false;
|
||||
ps->fstickydefault = false;
|
||||
+ ps->flock = false;
|
||||
}
|
||||
switch (c) {
|
||||
case '/': /* begin comment block or line? */
|
||||
@@ -225,11 +227,14 @@ PREF_ParseBuf(PrefParseState *ps, const
|
||||
break;
|
||||
case 'u': /* indicating user_pref */
|
||||
case 's': /* indicating sticky_pref */
|
||||
+ case 'l': /* indicating lockPref */
|
||||
case 'p': /* indicating pref */
|
||||
if (c == 'u') {
|
||||
ps->smatch = kUserPref;
|
||||
} else if (c == 's') {
|
||||
ps->smatch = kPrefSticky;
|
||||
+ } else if (c == 'l') {
|
||||
+ ps->smatch = kLockPref;
|
||||
} else {
|
||||
ps->smatch = kPref;
|
||||
}
|
||||
@@ -277,8 +282,10 @@ PREF_ParseBuf(PrefParseState *ps, const
|
||||
/* name parsing */
|
||||
case PREF_PARSE_UNTIL_NAME:
|
||||
if (c == '\"' || c == '\'') {
|
||||
- ps->fdefault = (ps->smatch == kPref || ps->smatch == kPrefSticky);
|
||||
+ ps->fdefault = (ps->smatch == kPref || ps->smatch == kPrefSticky
|
||||
+ || ps->smatch == kLockPref);
|
||||
ps->fstickydefault = (ps->smatch == kPrefSticky);
|
||||
+ ps->flock = (ps->smatch == kLockPref);
|
||||
ps->quotechar = c;
|
||||
ps->nextstate = PREF_PARSE_UNTIL_COMMA; /* return here when done */
|
||||
state = PREF_PARSE_QUOTED_STRING;
|
||||
diff -up firefox-56.0/modules/libpref/prefread.h.440908 firefox-56.0/modules/libpref/prefread.h
|
||||
--- firefox-56.0/modules/libpref/prefread.h.440908 2017-09-14 22:15:52.000000000 +0200
|
||||
+++ firefox-56.0/modules/libpref/prefread.h 2017-09-25 10:39:39.267572789 +0200
|
||||
@@ -34,7 +34,8 @@ typedef void (*PrefReader)(void *c
|
||||
PrefValue val,
|
||||
PrefType type,
|
||||
bool defPref,
|
||||
- bool stickyPref);
|
||||
+ bool stickyPref,
|
||||
+ bool lockPref);
|
||||
|
||||
/**
|
||||
* Report any errors or warnings we encounter during parsing.
|
||||
@@ -62,6 +63,7 @@ typedef struct PrefParseState {
|
||||
PrefType vtype; /* PREF_STRING,INT,BOOL */
|
||||
bool fdefault; /* true if (default) pref */
|
||||
bool fstickydefault; /* true if (sticky) pref */
|
||||
+ bool flock; /* true if pref to be locked */
|
||||
} PrefParseState;
|
||||
|
||||
/**
|
||||
14
mozilla-build-arm.patch
Normal file
14
mozilla-build-arm.patch
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
diff -up firefox-52.0/gfx/skia/skia/include/core/SkPreConfig.h.arm firefox-52.0/gfx/skia/skia/include/core/SkPreConfig.h
|
||||
--- firefox-52.0/gfx/skia/skia/include/core/SkPreConfig.h.arm 2017-03-03 13:53:52.480754536 +0100
|
||||
+++ firefox-52.0/gfx/skia/skia/include/core/SkPreConfig.h 2017-03-03 13:56:01.476018102 +0100
|
||||
@@ -203,6 +203,10 @@
|
||||
#define SK_ARM_HAS_CRC32
|
||||
#endif
|
||||
|
||||
+#if defined(__aarch64__)
|
||||
+ #undef SK_ARM_HAS_NEON
|
||||
+#endif
|
||||
+
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if !defined(SKIA_IMPLEMENTATION)
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
#!/bin/sh
|
||||
exec /usr/bin/node "$@" 2>&1 | cat -
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
[D-BUS Service]
|
||||
Name=org.mozilla.firefox.SearchProvider
|
||||
Exec=/usr/lib64/firefox/firefox --dbus-service /usr/bin/firefox
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright 2019 Firefox contributors -->
|
||||
<component type="desktop-application">
|
||||
<id>org.mozilla.firefox</id>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<name>Firefox</name>
|
||||
<summary>Web Browser</summary>
|
||||
<summary xml:lang="ca">Navegador web</summary>
|
||||
<summary xml:lang="cs">Webový prohlížeč</summary>
|
||||
<summary xml:lang="es">Navegador web</summary>
|
||||
<summary xml:lang="fa">مرورگر اینترنتی</summary>
|
||||
<summary xml:lang="fi">WWW-selain</summary>
|
||||
<summary xml:lang="fr">Navigateur Web</summary>
|
||||
<summary xml:lang="hu">Webböngésző</summary>
|
||||
<summary xml:lang="it">Browser Web</summary>
|
||||
<summary xml:lang="ja">ウェブ・ブラウザ</summary>
|
||||
<summary xml:lang="ko">웹 브라우저</summary>
|
||||
<summary xml:lang="nb">Nettleser</summary>
|
||||
<summary xml:lang="nl">Webbrowser</summary>
|
||||
<summary xml:lang="nn">Nettlesar</summary>
|
||||
<summary xml:lang="no">Nettleser</summary>
|
||||
<summary xml:lang="pl">Przeglądarka WWW</summary>
|
||||
<summary xml:lang="pt">Navegador Web</summary>
|
||||
<summary xml:lang="pt_BR">Navegador Web</summary>
|
||||
<summary xml:lang="sk">Internetový prehliadač</summary>
|
||||
<summary xml:lang="sv">Webbläsare</summary>
|
||||
<description>
|
||||
<p>
|
||||
Bringing together all kinds of awesomeness to make browsing better for you.
|
||||
Get to your favorite sites quickly – even if you don’t remember the URLs.
|
||||
Type your term into the location bar (aka the Awesome Bar) and the autocomplete
|
||||
function will include possible matches from your browsing history, bookmarked
|
||||
sites and open tabs.
|
||||
</p>
|
||||
</description>
|
||||
<url type="homepage">https://www.mozilla.org</url>
|
||||
<update_contact>stransky@redhat.com</update_contact>
|
||||
<kudos>
|
||||
<kudo>ModernToolkit</kudo>
|
||||
<kudo>SearchProvider</kudo>
|
||||
</kudos>
|
||||
<project_group>Mozilla</project_group>
|
||||
<project_license>GPL-3.0+</project_license>
|
||||
<developer_name>Mozilla Corporation</developer_name>
|
||||
<url type="bugtracker">https://bugzilla.mozilla.org/</url>
|
||||
<url type="help">https://support.mozilla.org/</url>
|
||||
<translation type="gettext">firefox</translation>
|
||||
<launchable type="desktop-id">org.mozilla.firefox.desktop</launchable>
|
||||
<provides>
|
||||
<id>firefox.desktop</id>
|
||||
</provides>
|
||||
<screenshots>
|
||||
<screenshot type="default">https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/firefox/a.png</screenshot>
|
||||
<screenshot>https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/firefox/b.png</screenshot>
|
||||
<screenshot>https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/firefox/c.png</screenshot>
|
||||
</screenshots>
|
||||
<content_rating type="oars-1.1"/>
|
||||
<releases>
|
||||
<release version="__VERSION__" date="__DATE__"/>
|
||||
</releases>
|
||||
</component>
|
||||
|
|
@ -1,276 +0,0 @@
|
|||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=Firefox
|
||||
GenericName=Web Browser
|
||||
GenericName[ca]=Navegador web
|
||||
GenericName[cs]=Webový prohlížeč
|
||||
GenericName[es]=Navegador web
|
||||
GenericName[fa]=مرورگر اینترنتی
|
||||
GenericName[fi]=WWW-selain
|
||||
GenericName[fr]=Navigateur Web
|
||||
GenericName[hu]=Webböngésző
|
||||
GenericName[it]=Browser Web
|
||||
GenericName[ja]=ウェブ・ブラウザ
|
||||
GenericName[ko]=웹 브라우저
|
||||
GenericName[nb]=Nettleser
|
||||
GenericName[nl]=Webbrowser
|
||||
GenericName[nn]=Nettlesar
|
||||
GenericName[no]=Nettleser
|
||||
GenericName[pl]=Przeglądarka WWW
|
||||
GenericName[pt]=Navegador Web
|
||||
GenericName[pt_BR]=Navegador Web
|
||||
GenericName[sk]=Internetový prehliadač
|
||||
GenericName[sv]=Webbläsare
|
||||
Comment=Browse the Web
|
||||
Comment[ca]=Navegueu per el web
|
||||
Comment[cs]=Prohlížení stránek World Wide Webu
|
||||
Comment[de]=Im Internet surfen
|
||||
Comment[es]=Navegue por la web
|
||||
Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
|
||||
Comment[fi]=Selaa Internetin WWW-sivuja
|
||||
Comment[fr]=Navigue sur Internet
|
||||
Comment[hu]=A világháló böngészése
|
||||
Comment[it]=Esplora il web
|
||||
Comment[ja]=ウェブを閲覧します
|
||||
Comment[ko]=웹을 돌아 다닙니다
|
||||
Comment[nb]=Surf på nettet
|
||||
Comment[nl]=Verken het internet
|
||||
Comment[nn]=Surf på nettet
|
||||
Comment[no]=Surf på nettet
|
||||
Comment[pl]=Przeglądanie stron WWW
|
||||
Comment[pt]=Navegue na Internet
|
||||
Comment[pt_BR]=Navegue na Internet
|
||||
Comment[sk]=Prehliadanie internetu
|
||||
Comment[sv]=Surfa på webben
|
||||
Exec=firefox %u
|
||||
Icon=firefox
|
||||
Terminal=false
|
||||
Type=Application
|
||||
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
|
||||
StartupNotify=true
|
||||
Categories=Network;WebBrowser;
|
||||
Keywords=web;browser;internet;
|
||||
Actions=new-window;new-private-window;profile-manager-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=firefox --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=firefox --private-window %u
|
||||
|
||||
[Desktop Action profile-manager-window]
|
||||
Name=Open the Profile Manager
|
||||
Name[cs]=Správa profilů
|
||||
Name[de]=Profilverwaltung öffnen
|
||||
Name[fr]=Ouvrir le gestionnaire de profils
|
||||
Exec=firefox --ProfileManager
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[Shell Search Provider]
|
||||
DesktopId=org.mozilla.firefox.desktop
|
||||
BusName=org.mozilla.firefox.SearchProvider
|
||||
ObjectPath=/org/mozilla/firefox/SearchProvider
|
||||
Version=2
|
||||
149
pgo.patch
149
pgo.patch
|
|
@ -1,128 +1,29 @@
|
|||
diff -up firefox-145.0/build/moz.configure/lto-pgo.configure.pgo firefox-145.0/build/moz.configure/lto-pgo.configure
|
||||
--- firefox-145.0/build/moz.configure/lto-pgo.configure.pgo 2025-11-03 16:56:55.000000000 +0100
|
||||
+++ firefox-145.0/build/moz.configure/lto-pgo.configure 2025-11-05 13:59:53.477443914 +0100
|
||||
@@ -96,12 +96,16 @@ set_config("PGO_PROFILE_PATH", pgo_profi
|
||||
diff -up firefox-64.0/build/unix/mozconfig.unix.pgo firefox-64.0/build/unix/mozconfig.unix
|
||||
--- firefox-64.0/build/unix/mozconfig.unix.pgo 2019-01-03 15:23:16.792980384 +0100
|
||||
+++ firefox-64.0/build/unix/mozconfig.unix 2019-01-03 15:24:29.978693550 +0100
|
||||
@@ -6,6 +6,15 @@ if [ -n "$FORCE_GCC" ]; then
|
||||
CC="$TOOLTOOL_DIR/gcc/bin/gcc"
|
||||
CXX="$TOOLTOOL_DIR/gcc/bin/g++"
|
||||
|
||||
@depends(
|
||||
"--enable-profile-use",
|
||||
+ c_compiler,
|
||||
pgo_profile_path,
|
||||
llvm_profdata,
|
||||
llvm_profdata_order,
|
||||
build_environment,
|
||||
)
|
||||
-def orderfile_path(profile_use, path, profdata, profdata_order, build_env):
|
||||
+def orderfile_path(profile_use, compiler, path, profdata, profdata_order, build_env):
|
||||
+ if compiler.type == "gcc":
|
||||
+ return None
|
||||
+ if [ -n "$MOZ_PGO" ]; then
|
||||
+ if [ -z "$USE_ARTIFACT" ]; then
|
||||
+ ac_add_options --enable-lto
|
||||
+ fi
|
||||
+ export AR="$topsrcdir/gcc/bin/gcc-ar"
|
||||
+ export NM="$topsrcdir/gcc/bin/gcc-nm"
|
||||
+ export RANLIB="$topsrcdir/gcc/bin/gcc-ranlib"
|
||||
+ fi
|
||||
+
|
||||
if not profile_use:
|
||||
return None
|
||||
# We want to make sure we use binutils and other binaries in the tooltool
|
||||
# package.
|
||||
mk_add_options "export PATH=$TOOLTOOL_DIR/gcc/bin:$PATH"
|
||||
diff -up firefox-64.0/extensions/spellcheck/src/moz.build.pgo firefox-64.0/extensions/spellcheck/src/moz.build
|
||||
--- firefox-64.0/extensions/spellcheck/src/moz.build.pgo 2018-12-07 03:56:27.000000000 +0100
|
||||
+++ firefox-64.0/extensions/spellcheck/src/moz.build 2019-01-03 15:21:32.793385074 +0100
|
||||
@@ -28,3 +28,5 @@ EXPORTS.mozilla += [
|
||||
|
||||
@@ -145,7 +149,7 @@ def pgo_flags(
|
||||
return namespace(
|
||||
gen_cflags=["-fprofile-generate"],
|
||||
gen_ldflags=["-fprofile-generate"],
|
||||
- use_cflags=["-fprofile-use", "-fprofile-correction", "-Wcoverage-mismatch"],
|
||||
+ use_cflags=["-fprofile-use", "-fprofile-correction", "-Wno-coverage-mismatch"],
|
||||
use_ldflags=["-fprofile-use"],
|
||||
)
|
||||
|
||||
diff -up firefox-145.0/build/pgo/profileserver.py.pgo firefox-145.0/build/pgo/profileserver.py
|
||||
--- firefox-145.0/build/pgo/profileserver.py.pgo 2025-11-03 16:56:55.000000000 +0100
|
||||
+++ firefox-145.0/build/pgo/profileserver.py 2025-11-05 13:59:53.477602066 +0100
|
||||
@@ -10,7 +10,7 @@ import subprocess
|
||||
import sys
|
||||
|
||||
import mozcrash
|
||||
-from mozbuild.base import BinaryNotFoundException, MozbuildObject
|
||||
+from mozbuild.base import BinaryNotFoundException, MozbuildObject, BuildEnvironmentNotFoundException
|
||||
from mozfile import TemporaryDirectory, json
|
||||
from mozhttpd import MozHttpd
|
||||
from mozprofile import FirefoxProfile, Preferences
|
||||
@@ -96,9 +96,22 @@ if __name__ == "__main__":
|
||||
locations = ServerLocations()
|
||||
locations.add_host(host="127.0.0.1", port=PORT, options="primary,privileged")
|
||||
|
||||
- old_profraw_files = glob.glob("*.profraw")
|
||||
- for f in old_profraw_files:
|
||||
- os.remove(f)
|
||||
+ using_gcc = False
|
||||
+ try:
|
||||
+ if build.config_environment.substs.get('CC_TYPE') == 'gcc':
|
||||
+ using_gcc = True
|
||||
+ except BuildEnvironmentNotFoundException:
|
||||
+ pass
|
||||
if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
|
||||
CXXFLAGS += ['-Wno-error=shadow']
|
||||
+
|
||||
+ if using_gcc:
|
||||
+ for dirpath, _, filenames in os.walk('.'):
|
||||
+ for f in filenames:
|
||||
+ if f.endswith('.gcda'):
|
||||
+ os.remove(os.path.join(dirpath, f))
|
||||
+ else:
|
||||
+ old_profraw_files = glob.glob('*.profraw')
|
||||
+ for f in old_profraw_files:
|
||||
+ os.remove(f)
|
||||
|
||||
with TemporaryDirectory() as profilePath:
|
||||
# TODO: refactor this into mozprofile
|
||||
diff -up firefox-145.0/gfx/2d/moz.build.pgo firefox-145.0/gfx/2d/moz.build
|
||||
--- firefox-145.0/gfx/2d/moz.build.pgo 2025-11-03 16:56:57.000000000 +0100
|
||||
+++ firefox-145.0/gfx/2d/moz.build 2025-11-05 14:21:20.485610837 +0100
|
||||
@@ -137,11 +137,11 @@ if CONFIG["INTEL_ARCHITECTURE"]:
|
||||
DEFINES["USE_SSE2"] = True
|
||||
# The file uses SSE2 intrinsics, so it needs special compile flags on some
|
||||
# compilers.
|
||||
- SOURCES["ConvolutionFilterAVX2.cpp"].flags += ["-mavx2"]
|
||||
+ SOURCES["ConvolutionFilterAVX2.cpp"].flags += ["-mavx2", "-fno-lto"]
|
||||
SOURCES["ConvolutionFilterSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
|
||||
SOURCES["FilterProcessingSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
|
||||
SOURCES["ImageScalingSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
|
||||
- SOURCES["SwizzleAVX2.cpp"].flags += ["-mavx2"]
|
||||
+ SOURCES["SwizzleAVX2.cpp"].flags += ["-mavx2", "-fno-lto"]
|
||||
SOURCES["SwizzleSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
|
||||
SOURCES["SwizzleSSSE3.cpp"].flags += CONFIG["SSSE3_FLAGS"]
|
||||
|
||||
diff -up firefox-145.0/gfx/skia/generate_mozbuild.py.pgo firefox-145.0/gfx/skia/generate_mozbuild.py
|
||||
--- firefox-145.0/gfx/skia/generate_mozbuild.py.pgo 2025-11-03 16:56:57.000000000 +0100
|
||||
+++ firefox-145.0/gfx/skia/generate_mozbuild.py 2025-11-05 13:59:53.477947055 +0100
|
||||
@@ -50,8 +50,8 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
|
||||
if CONFIG['INTEL_ARCHITECTURE']:
|
||||
SOURCES['skia/modules/skcms/skcms.cc'].flags += ['-DSKCMS_DISABLE_SKX']
|
||||
skia_ssse3_flags = ['-Dskvx=skvx_ssse3', '-mssse3']
|
||||
- skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx']
|
||||
- skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma']
|
||||
+ skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx', '-fno-lto']
|
||||
+ skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma', '-fno-lto']
|
||||
SOURCES['skia/src/core/SkBitmapProcState_opts_ssse3.cpp'].flags += skia_ssse3_flags
|
||||
SOURCES['skia/src/core/SkBlitMask_opts_ssse3.cpp'].flags += skia_ssse3_flags
|
||||
SOURCES['skia/src/core/SkSwizzler_opts_ssse3.cpp'].flags += ['-Dskvx=skvx_ssse3']
|
||||
diff -up firefox-145.0/gfx/skia/moz.build.pgo firefox-145.0/gfx/skia/moz.build
|
||||
--- firefox-145.0/gfx/skia/moz.build.pgo 2025-11-03 16:56:57.000000000 +0100
|
||||
+++ firefox-145.0/gfx/skia/moz.build 2025-11-05 13:59:53.478077484 +0100
|
||||
@@ -597,8 +597,8 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
|
||||
if CONFIG['INTEL_ARCHITECTURE']:
|
||||
SOURCES['skia/modules/skcms/skcms.cc'].flags += ['-DSKCMS_DISABLE_SKX']
|
||||
skia_ssse3_flags = ['-Dskvx=skvx_ssse3', '-mssse3']
|
||||
- skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx']
|
||||
- skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma']
|
||||
+ skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx', '-fno-lto']
|
||||
+ skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma', '-fno-lto']
|
||||
SOURCES['skia/src/core/SkBitmapProcState_opts_ssse3.cpp'].flags += skia_ssse3_flags
|
||||
SOURCES['skia/src/core/SkBlitMask_opts_ssse3.cpp'].flags += skia_ssse3_flags
|
||||
SOURCES['skia/src/core/SkSwizzler_opts_ssse3.cpp'].flags += ['-Dskvx=skvx_ssse3']
|
||||
diff -up firefox-145.0/toolkit/components/terminator/nsTerminator.cpp.pgo firefox-145.0/toolkit/components/terminator/nsTerminator.cpp
|
||||
--- firefox-145.0/toolkit/components/terminator/nsTerminator.cpp.pgo 2025-11-03 16:57:15.000000000 +0100
|
||||
+++ firefox-145.0/toolkit/components/terminator/nsTerminator.cpp 2025-11-05 13:59:53.478238011 +0100
|
||||
@@ -330,6 +330,11 @@ void nsTerminator::StartWatchdog() {
|
||||
}
|
||||
#endif
|
||||
|
||||
+ // Disable watchdog for PGO train builds - writting profile information at
|
||||
+ // exit may take time and it is better to make build hang rather than
|
||||
+ // silently produce poorly performing binary.
|
||||
+ crashAfterMS = INT32_MAX;
|
||||
+
|
||||
UniquePtr<Options> options(new Options());
|
||||
// crashAfterTicks is guaranteed to be > 0 as
|
||||
// crashAfterMS >= ADDITIONAL_WAIT_BEFORE_CRASH_MS >> HEARTBEAT_INTERVAL_MS
|
||||
+CXXFLAGS += ['-fno-devirtualize']
|
||||
\ No newline at end of file
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
#!/usr/bin/bash
|
||||
# Print reftest failures and compose them to html
|
||||
|
||||
TEST_DIR="$1"
|
||||
TEST_FLAVOUR="$2"
|
||||
OUTPUT_FILE="failures-reftest$TEST_FLAVOUR.html"
|
||||
|
||||
grep --text -e "REFTEST TEST-UNEXPECTED-PASS" -e "REFTEST TEST-UNEXPECTED-FAIL" -e "IMAGE 1 (TEST):" -e "IMAGE 2 (REFERENCE):" $TEST_DIR/reftest$TEST_FLAVOUR 2>&1 > $OUTPUT_FILE
|
||||
sed -i '/REFTEST IMAGE 1/a ">' $OUTPUT_FILE
|
||||
sed -i '/REFTEST IMAGE 2/a "><BR><BR>' $OUTPUT_FILE
|
||||
sed -i '/REFTEST TEST/a <BR>' $OUTPUT_FILE
|
||||
sed -i -e 's/^REFTEST IMAGE 1 (TEST): /<img border=2 src="/' $OUTPUT_FILE
|
||||
sed -i -e 's/^REFTEST IMAGE 2 (REFERENCE): /<img border=2 src="/' $OUTPUT_FILE
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
#!/usr/bin/bash
|
||||
# Print failed tests
|
||||
|
||||
TEST_DIR=$1
|
||||
TEST_FLAVOUR=$2
|
||||
|
||||
grep "TEST-UNEXPECTED-FAIL" $TEST_DIR/mochitest$TEST_FLAVOUR 2>&1 > failures-mochitest$TEST_FLAVOUR.txt
|
||||
grep --text -e " FAIL " -e " TIMEOUT " $TEST_DIR/xpcshell$TEST_FLAVOUR 2>&1 > failures-xpcshell$TEST_FLAVOUR.txt
|
||||
grep --text -e "REFTEST TEST-UNEXPECTED-PASS" -e "REFTEST TEST-UNEXPECTED-FAIL" $TEST_DIR/reftest$TEST_FLAVOUR 2>&1 > failures-reftest$TEST_FLAVOUR.txt
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
#!/usr/bin/bash
|
||||
# Analyze and print test failures
|
||||
|
||||
export TEST_DIR="test_results"
|
||||
|
||||
#./print-errors $TEST_DIR ""
|
||||
./print-errors $TEST_DIR "-wr"
|
||||
#./print-error-reftest $TEST_DIR ""
|
||||
./print-error-reftest $TEST_DIR "-wr"
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
#!/usr/bin/bash
|
||||
# Analyze and print general test results
|
||||
|
||||
export TEST_DIR="test_results"
|
||||
|
||||
echo "Test results"
|
||||
#echo "Basic compositor"
|
||||
#./psummary $TEST_DIR ""
|
||||
echo "WebRender"
|
||||
./psummary $TEST_DIR "-wr"
|
||||
23
psummary
23
psummary
|
|
@ -1,23 +0,0 @@
|
|||
#!/usr/bin/bash
|
||||
# Analyze and print specialized (basic/webrender) test results
|
||||
|
||||
TEST_DIR=$1
|
||||
TEST_FLAVOUR=$2
|
||||
|
||||
MPASS=`grep "TEST_END: Test OK" $TEST_DIR/mochitest$TEST_FLAVOUR | wc -l`
|
||||
MERR=`grep "TEST_END: Test ERROR" $TEST_DIR/mochitest$TEST_FLAVOUR | wc -l`
|
||||
MUNEX=`grep "TEST-UNEXPECTED-FAIL" $TEST_DIR/mochitest$TEST_FLAVOUR | wc -l`
|
||||
echo "Mochitest PASSED: $MPASS FAILED: $MERR UNEXPECTED-FAILURES: $MUNEX"
|
||||
|
||||
XPCPASS=`grep --text "Expected results:" $TEST_DIR/xpcshell$TEST_FLAVOUR | cut -d ' ' -f 3`
|
||||
XPCFAIL=`grep --text "Unexpected results:" $TEST_DIR/xpcshell$TEST_FLAVOUR | cut -d ' ' -f 3`
|
||||
echo "XPCShell: PASSED: $XPCPASS FAILED: $XPCFAIL"
|
||||
|
||||
CRPASS=`grep "REFTEST INFO | Successful:" $TEST_DIR/crashtest$TEST_FLAVOUR | cut -d ' ' -f 5`
|
||||
CRFAIL=`grep "^REFTEST INFO | Unexpected:" $TEST_DIR/crashtest$TEST_FLAVOUR | cut -d ' ' -f 5`
|
||||
echo "Crashtest: PASSED: $CRPASS FAILED: $CRFAIL"
|
||||
|
||||
RFPASS=`grep --text "REFTEST INFO | Successful:" $TEST_DIR/reftest$TEST_FLAVOUR | cut -d ' ' -f 5`
|
||||
RFUN=`grep --text "^REFTEST INFO | Unexpected:" $TEST_DIR/reftest$TEST_FLAVOUR | cut -d ' ' -f 5`
|
||||
RFKNOWN=`grep --text "REFTEST INFO | Known problems:" $TEST_DIR/reftest$TEST_FLAVOUR | cut -d ' ' -f 6`
|
||||
echo "Reftest: PASSED: $RFPASS FAILED: $RFUN Known issues: $RFKNOWN"
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
diff -up firefox-132.0/extensions/auth/nsAuthSambaNTLM.cpp.rhbz-1173156 firefox-132.0/extensions/auth/nsAuthSambaNTLM.cpp
|
||||
--- firefox-132.0/extensions/auth/nsAuthSambaNTLM.cpp.rhbz-1173156 2024-10-23 09:26:41.433895188 +0200
|
||||
+++ firefox-132.0/extensions/auth/nsAuthSambaNTLM.cpp 2024-10-23 10:05:11.025801336 +0200
|
||||
@@ -153,7 +153,7 @@ nsresult nsAuthSambaNTLM::SpawnNTLMAuthH
|
||||
options.fds_to_remap.push_back(
|
||||
std::pair{fromChildPipeWrite.get(), STDOUT_FILENO});
|
||||
|
||||
- std::vector<std::string> argvVec{"ntlm_auth", "--helper-protocol",
|
||||
+ std::vector<std::string> argvVec{"/usr/bin/ntlm_auth", "--helper-protocol",
|
||||
"ntlmssp-client-1", "--use-cached-creds",
|
||||
"--username", username};
|
||||
diff -up firefox-60.5.0/extensions/auth/nsAuthSambaNTLM.cpp.rhbz-1173156 firefox-60.5.0/extensions/auth/nsAuthSambaNTLM.cpp
|
||||
--- firefox-60.5.0/extensions/auth/nsAuthSambaNTLM.cpp.rhbz-1173156 2019-01-22 10:36:09.284069020 +0100
|
||||
+++ firefox-60.5.0/extensions/auth/nsAuthSambaNTLM.cpp 2019-01-22 10:37:12.669757744 +0100
|
||||
@@ -161,7 +161,7 @@ nsresult nsAuthSambaNTLM::SpawnNTLMAuthH
|
||||
const char* username = PR_GetEnv("USER");
|
||||
if (!username) return NS_ERROR_FAILURE;
|
||||
|
||||
- const char* const args[] = {"ntlm_auth",
|
||||
+ const char* const args[] = {"/usr/bin/ntlm_auth",
|
||||
"--helper-protocol",
|
||||
"ntlmssp-client-1",
|
||||
"--use-cached-creds",
|
||||
|
|
|
|||
23
rhbz-1219542-s390-build.patch
Normal file
23
rhbz-1219542-s390-build.patch
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
diff -up firefox-55.0/js/src/old-configure.in.rhbz-1219542-s390 firefox-55.0/js/src/old-configure.in
|
||||
--- firefox-55.0/js/src/old-configure.in.rhbz-1219542-s390 2017-07-31 18:20:48.000000000 +0200
|
||||
+++ firefox-55.0/js/src/old-configure.in 2017-08-02 14:31:32.190243669 +0200
|
||||
@@ -541,7 +541,7 @@ case "$host" in
|
||||
|
||||
*-linux*|*-kfreebsd*-gnu|*-gnu*)
|
||||
HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX"
|
||||
- HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}"
|
||||
+ HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O1}"
|
||||
;;
|
||||
|
||||
*)
|
||||
@@ -617,8 +617,8 @@ case "$target" in
|
||||
|
||||
*-*linux*)
|
||||
if test "$GNU_CC" -o "$GNU_CXX"; then
|
||||
- MOZ_PGO_OPTIMIZE_FLAGS="-O3"
|
||||
- MOZ_OPTIMIZE_FLAGS="-O3"
|
||||
+ MOZ_PGO_OPTIMIZE_FLAGS="-O1"
|
||||
+ MOZ_OPTIMIZE_FLAGS="-O1"
|
||||
if test -z "$CLANG_CC"; then
|
||||
MOZ_OPTIMIZE_FLAGS="-freorder-blocks $MOZ_OPTIMIZE_FLAGS"
|
||||
fi
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
diff -up firefox-70.0/layout/base/PresShell.h.1354671 firefox-70.0/layout/base/PresShell.h
|
||||
--- firefox-70.0/layout/base/PresShell.h.1354671 2019-10-22 12:33:12.987775587 +0200
|
||||
+++ firefox-70.0/layout/base/PresShell.h 2019-10-22 12:36:39.999366086 +0200
|
||||
@@ -257,7 +257,7 @@ class PresShell final : public nsStubDoc
|
||||
diff -up firefox-65.0/layout/base/nsIPresShell.h.1354671 firefox-65.0/layout/base/nsIPresShell.h
|
||||
--- firefox-65.0/layout/base/nsIPresShell.h.1354671 2019-01-29 11:50:08.516649643 +0100
|
||||
+++ firefox-65.0/layout/base/nsIPresShell.h 2019-01-29 11:51:48.930258629 +0100
|
||||
@@ -205,7 +205,7 @@ class nsIPresShell : public nsStubDocume
|
||||
* to the same aSize value. AllocateFrame is infallible and will abort
|
||||
* on out-of-memory.
|
||||
*/
|
||||
- void* AllocateFrame(nsQueryFrame::FrameIID aID, size_t aSize) {
|
||||
+ void* __attribute__((optimize("no-lifetime-dse"))) AllocateFrame(nsQueryFrame::FrameIID aID, size_t aSize) {
|
||||
#define FRAME_ID(classname, ...) \
|
||||
static_assert(size_t(nsQueryFrame::FrameIID::classname##_id) == \
|
||||
size_t(eArenaObjectID_##classname), \
|
||||
void* result = mFrameArena.AllocateByFrameID(aID, aSize);
|
||||
RecordAlloc(result);
|
||||
return result;
|
||||
|
|
|
|||
72
rhbz-1400293-fix-mozilla-1324096.patch
Normal file
72
rhbz-1400293-fix-mozilla-1324096.patch
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
diff --git a/security/certverifier/CertVerifier.cpp b/security/certverifier/CertVerifier.cpp
|
||||
--- a/security/certverifier/CertVerifier.cpp
|
||||
+++ b/security/certverifier/CertVerifier.cpp
|
||||
@@ -120,16 +120,20 @@ IsCertChainRootBuiltInRoot(const UniqueC
|
||||
}
|
||||
CERTCertificate* root = rootNode->cert;
|
||||
if (!root) {
|
||||
return Result::FATAL_ERROR_LIBRARY_FAILURE;
|
||||
}
|
||||
return IsCertBuiltInRoot(root, result);
|
||||
}
|
||||
|
||||
+// The term "builtin root" traditionally refers to a root CA certificate that
|
||||
+// has been added to the NSS trust store, because it has been approved
|
||||
+// for inclusion according to the Mozilla CA policy, and might be accepted
|
||||
+// by Mozilla applications as an issuer for certificates seen on the public web.
|
||||
Result
|
||||
IsCertBuiltInRoot(CERTCertificate* cert, bool& result)
|
||||
{
|
||||
result = false;
|
||||
#ifdef DEBUG
|
||||
nsCOMPtr<nsINSSComponent> component(do_GetService(PSM_COMPONENT_CONTRACTID));
|
||||
if (!component) {
|
||||
return Result::FATAL_ERROR_LIBRARY_FAILURE;
|
||||
@@ -142,25 +146,38 @@ IsCertBuiltInRoot(CERTCertificate* cert,
|
||||
return Success;
|
||||
}
|
||||
#endif // DEBUG
|
||||
AutoSECMODListReadLock lock;
|
||||
for (SECMODModuleList* list = SECMOD_GetDefaultModuleList(); list;
|
||||
list = list->next) {
|
||||
for (int i = 0; i < list->module->slotCount; i++) {
|
||||
PK11SlotInfo* slot = list->module->slots[i];
|
||||
- // PK11_HasRootCerts should return true if and only if the given slot has
|
||||
- // an object with a CKA_CLASS of CKO_NETSCAPE_BUILTIN_ROOT_LIST, which
|
||||
- // should be true only of the builtin root list.
|
||||
- // If we can find a copy of the given certificate on the slot with the
|
||||
- // builtin root list, that certificate must be a builtin.
|
||||
- if (PK11_IsPresent(slot) && PK11_HasRootCerts(slot) &&
|
||||
- PK11_FindCertInSlot(slot, cert, nullptr) != CK_INVALID_HANDLE) {
|
||||
- result = true;
|
||||
- return Success;
|
||||
+ // We're searching for the "builtin root module", which is a module that
|
||||
+ // contains an object with a CKA_CLASS of CKO_NETSCAPE_BUILTIN_ROOT_LIST.
|
||||
+ // We use PK11_HasRootCerts() to identify a module with that property.
|
||||
+ // In the past, we exclusively used the PKCS#11 module named nssckbi,
|
||||
+ // which is provided by the NSS library.
|
||||
+ // Nowadays, some distributions use a replacement module, which contains
|
||||
+ // the builtin roots, but which also contains additional CA certificates,
|
||||
+ // such as CAs trusted in a local deployment.
|
||||
+ // We want to be able to distinguish between these two categories,
|
||||
+ // because a CA, which may issue certificates for the public web,
|
||||
+ // is expected to comply with additional requirements.
|
||||
+ // If the certificate has attribute CKA_NSS_MOZILLA_CA_POLICY set to true,
|
||||
+ // then we treat it as a "builtin root".
|
||||
+ if (PK11_IsPresent(slot) && PK11_HasRootCerts(slot)) {
|
||||
+ CK_OBJECT_HANDLE handle = PK11_FindCertInSlot(slot, cert, nullptr);
|
||||
+ if (handle != CK_INVALID_HANDLE &&
|
||||
+ PK11_HasAttributeSet(slot, handle, CKA_NSS_MOZILLA_CA_POLICY,
|
||||
+ false)) {
|
||||
+ // Attribute was found, and is set to true
|
||||
+ result = true;
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
return Success;
|
||||
}
|
||||
|
||||
static Result
|
||||
BuildCertChainForOneKeyUsage(NSSCertDBTrustDomain& trustDomain, Input certDER,
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
#!/usr/bin/bash
|
||||
# usage: run-tests-wayland [test flavour]
|
||||
|
||||
set -x
|
||||
|
||||
RUN_XPCSHELL_TEST=1
|
||||
RUN_REFTEST=1
|
||||
RUN_MOCHITEST=1
|
||||
RUN_CRASHTEST=1
|
||||
|
||||
while (( "$#" )); do
|
||||
SELECTED_TEST=$1
|
||||
if [ "$SELECTED_TEST" = "xpcshell" ] ; then
|
||||
RUN_XPCSHELL_TEST=1
|
||||
elif [ "$SELECTED_TEST" = "reftest" ] ; then
|
||||
RUN_REFTEST=1
|
||||
elif [ "$SELECTED_TEST" = "mochitest" ] ; then
|
||||
RUN_MOCHITEST=1
|
||||
elif [ "$SELECTED_TEST" = "crashtest" ] ; then
|
||||
RUN_CRASHTEST=1
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
export MACH_USE_SYSTEM_PYTHON=1
|
||||
export MOZ_NODE_PATH=/usr/bin/node
|
||||
|
||||
MOCHITEST_PARAMS="--timeout 1 --chunk-by-dir 4"
|
||||
TEST_DIR="test_results"
|
||||
mkdir $TEST_DIR
|
||||
|
||||
env | grep "DISPLAY"
|
||||
|
||||
# Fix for system nss
|
||||
ln -s /usr/bin/certutil objdir/dist/bin/certutil
|
||||
ln -s /usr/bin/pk12util objdir/dist/bin/pk12util
|
||||
|
||||
NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"
|
||||
|
||||
export MOZ_ENABLE_WAYLAND=1
|
||||
|
||||
if [ $RUN_XPCSHELL_TEST -ne 0 ] ; then
|
||||
# ./mach xpcshell-test 2>&1 | cat - | tee $TEST_DIR/xpcshell
|
||||
./mach xpcshell-test --enable-webrender 2>&1 | cat - | tee $TEST_DIR/xpcshell-wr
|
||||
sleep 60
|
||||
fi
|
||||
|
||||
# Basic render testing
|
||||
export TEST_PARAMS="--setpref reftest.ignoreWindowSize=true --setpref widget.wayland.test-workarounds.enabled=true"
|
||||
#export TEST_FLAVOUR=""
|
||||
#if [ $RUN_REFTEST -ne 0 ] ; then
|
||||
# ./mach reftest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR
|
||||
#fi
|
||||
#if [ $RUN_CRASHTEST -ne 0 ] ; then
|
||||
# ./mach crashtest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR
|
||||
#fi
|
||||
#if [ $RUN_MOCHITEST -ne 0 ] ; then
|
||||
# ./mach mochitest --marionette localhost:$(($(($RANDOM))+2000)) $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR
|
||||
#fi
|
||||
|
||||
# WebRender testing
|
||||
export TEST_PARAMS="--enable-webrender $TEST_PARAMS"
|
||||
export TEST_FLAVOUR="-wr"
|
||||
# Use dom/base/test or dom/base/test/chrome for short version
|
||||
export MOCHITEST_DIR='dom'
|
||||
if [ $RUN_REFTEST -ne 0 ] ; then
|
||||
./mach reftest $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR
|
||||
sleep 60
|
||||
fi
|
||||
if [ $RUN_CRASHTEST -ne 0 ] ; then
|
||||
./mach crashtest $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR
|
||||
sleep 60
|
||||
fi
|
||||
if [ $RUN_MOCHITEST -ne 0 ] ; then
|
||||
./mach mochitest $MOCHITEST_DIR $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR
|
||||
sleep 60
|
||||
fi
|
||||
|
||||
rm -f objdir/dist/bin/certutil
|
||||
rm -f objdir/dist/bin/pk12util
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
#!/usr/bin/bash
|
||||
set -x
|
||||
|
||||
export MACH_USE_SYSTEM_PYTHON=1
|
||||
export MOZ_NODE_PATH=/usr/bin/node
|
||||
export X_PARAMS="-screen 0 1600x1200x24"
|
||||
export MOCHITEST_PARAMS="--timeout 1 --chunk-by-dir 4"
|
||||
export TEST_DIR="test_results"
|
||||
|
||||
# Fix for system nss
|
||||
ln -s /usr/bin/certutil objdir/dist/bin/certutil
|
||||
ln -s /usr/bin/pk12util objdir/dist/bin/pk12util
|
||||
|
||||
NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"
|
||||
|
||||
# Basic render testing
|
||||
export TEST_PARAMS=""
|
||||
export TEST_FLAVOUR=""
|
||||
#xvfb-run -s "$X_PARAMS" -n 91 ./mach xpcshell-test --sequential $TEST_PARAMS 2>&1 | cat - | tee $TEST_DIR/xpcshell
|
||||
#xvfb-run -s "$X_PARAMS" -n 92 ./mach reftest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR
|
||||
#xvfb-run -s "$X_PARAMS" -n 93 ./mach crashtest --marionette localhost:$(($(($RANDOM))+2000)) $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR
|
||||
#xvfb-run -s "$X_PARAMS" -n 94 ./mach mochitest --marionette localhost:$(($(($RANDOM))+2000)) $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR
|
||||
|
||||
# WebRender testing
|
||||
export TEST_PARAMS="--enable-webrender $TEST_PARAMS"
|
||||
export TEST_FLAVOUR="-wr"
|
||||
#xvfb-run -s "$X_PARAMS" -n 95 ./mach xpcshell-test --sequential $TEST_PARAMS 2>&1 | cat - | tee $TEST_DIR/xpcshell-wr
|
||||
#sleep 60
|
||||
#xvfb-run -s "$X_PARAMS" -n 96 ./mach reftest $TEST_PARAMS 2>&1 | tee $TEST_DIR/reftest$TEST_FLAVOUR
|
||||
#sleep 60
|
||||
#xvfb-run -s "$X_PARAMS" -n 97 ./mach crashtest $TEST_PARAMS 2>&1 | tee $TEST_DIR/crashtest$TEST_FLAVOUR
|
||||
#sleep 60
|
||||
#export DISPLAY=:0
|
||||
#./mach mochitest dom/base/test/ $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR
|
||||
export DISPLAY=:98
|
||||
xvfb-run -s "$X_PARAMS" -n 98 ./mach mochitest dom/base/test/ $MOCHITEST_PARAMS $TEST_PARAMS 2>&1 | tee $TEST_DIR/mochitest$TEST_FLAVOUR
|
||||
|
||||
rm -f objdir/dist/bin/certutil
|
||||
rm -f objdir/dist/bin/pk12util
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
#!/usr/bin/bash
|
||||
# Run wayland compositor and set WAYLAND_DISPLAY env variable
|
||||
|
||||
set -x
|
||||
|
||||
echo export DESKTOP_SESSION=gnome > $HOME/.xsessionrc
|
||||
echo export XDG_CURRENT_DESKTOP=GNOME > $HOME/.xsessionrc
|
||||
echo export XDG_SESSION_TYPE=wayland >> $HOME/.xsessionrc
|
||||
|
||||
# Turn off the screen saver and screen locking
|
||||
gsettings set org.gnome.desktop.screensaver idle-activation-enabled false
|
||||
gsettings set org.gnome.desktop.screensaver lock-enabled false
|
||||
gsettings set org.gnome.desktop.screensaver lock-delay 3600
|
||||
|
||||
# Disable the screen saver
|
||||
# This starts the gnome-keyring-daemon with an unlocked login keyring. libsecret uses this to
|
||||
# store secrets. Firefox uses libsecret to store a key that protects sensitive information like
|
||||
# credit card numbers.
|
||||
if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
|
||||
# if not found, launch a new one
|
||||
eval `dbus-launch --sh-syntax`
|
||||
fi
|
||||
|
||||
if [ -z "$XDG_RUNTIME_DIR" ]; then
|
||||
export XDG_RUNTIME_DIR=$HOME
|
||||
fi
|
||||
|
||||
export WAYLAND_DISPLAY=firefox-pgo-wayland-0
|
||||
if [ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ]; then
|
||||
rm -f $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY
|
||||
rm -f $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY.lock
|
||||
fi
|
||||
|
||||
echo "Launch mutter for $WAYLAND_DISPLAY"
|
||||
mutter --headless --virtual-monitor 1920x1080 --wayland-display=$WAYLAND_DISPLAY --no-x11 & MUTTER_PID=$!
|
||||
export MUTTER_PID
|
||||
echo "Mutter PID $MUTTER_PID"
|
||||
|
||||
echo "Waiting for mutter to start..."
|
||||
sleep 5
|
||||
retry_count=0
|
||||
max_retries=5
|
||||
until [ $retry_count -gt $max_retries ]; do
|
||||
if [ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ]; then
|
||||
retry_count=$(($max_retries + 1))
|
||||
else
|
||||
retry_count=$(($retry_count + 1))
|
||||
echo "Waiting for Mutter, retry: $retry_count"
|
||||
sleep 2
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ! -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ]; then
|
||||
echo "Mutter failed to start!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Mutter is running, $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY is here."
|
||||
|
||||
10
sources
10
sources
|
|
@ -1,7 +1,3 @@
|
|||
SHA512 (mochitest-python.tar.gz) = 089b1593068b76f4572af0086eaccf52a6a1299bfffb58593206d19bf021ae381f2380bbfeb4371586cd53706ff6dde3d240238b2caf19b96c57dfc2f4524e36
|
||||
SHA512 (dump_syms-vendor.tar.xz) = ee0ea52aac781b8dd48936a3d13b140bd725a48cc488d23693b68edbe3bcfba5723022dba3c3849d0da1bacf0e37ddd307cfc56304159f91b71495ce8a08b54a
|
||||
SHA512 (wasi-sdk-25.tar.gz) = 1285981d26aa5eff27f08ed4b409909639ddcd62c94ee0cff7093ef68722f4b024c099ca3aa3ab50411e9aace13b86f1f30c5e08a3fc58b6a46b87369d6904aa
|
||||
SHA512 (wasm-component-ld-vendor.tar.xz) = 707d942d31455ae0a4f68bf419fb09a20407b6747f831ca554dcd00925b7ea98ef4d03a8652b6d2ae54cf48d7ad15d85aa7eb8d0778ef66b89593eaa8b5c3465
|
||||
SHA512 (cbindgen-vendor.tar.xz) = bea420e66bdd1c7c944655dd3e01abd6e7d6ac4b245c7ee190f31d800f7786f21e5cae11715b479bf795f4369d18c40dc12df19e0b643664f2f78e5c8a681415
|
||||
SHA512 (firefox-langpacks-147.0-20260106.tar.xz) = 4006c6e8dda8722509c1d1756807373d431d75b20d5a0c3f19e72a2a0dc76df62b15ef871e3fff2d30b2682e6a56b4a4541d8445ea1b83641559a3270e0057b7
|
||||
SHA512 (firefox-147.0.source.tar.xz) = ac9017b1a2da7b2f139392c394c36341fd3476e3d4ea1a3c7e5e7bf100dc30d185132ef9256be7e6b0f9dbfc69234ac571ea1fc6db9d84543b15772f4ec85161
|
||||
SHA512 (cbindgen-vendor.tar.xz) = bdd1535c9923a082cdca263ff2c1765814b00b6a1c74be95bac4dbf7d0b7b29c1c27f0fed6feae99c88521c96e2865f0ea3cf784bd9a32a44cec6ee4df850662
|
||||
SHA512 (firefox-67.0.source.tar.xz) = a1000d6ca8146a9a3c74a3f69041b755c0c5014c8a608298d9c4cbe39577939d43139a7ad742983697ae90b635d3f5d8f9a008fcc2b3778adaadc25acc49ca29
|
||||
SHA512 (firefox-langpacks-67.0-20190517.tar.xz) = f8406332e5bf841ae78b1ff57a4eebb11110f94b0ecdac629ac6935c9f0feddfde4de33b18310b7693015b7ae5b438df86a67f7a0bdf8fa36a3bcccbea15d13e
|
||||
|
|
|
|||
35
wasi.patch
35
wasi.patch
|
|
@ -1,35 +0,0 @@
|
|||
diff -up firefox-134.0.1/toolkit/moz.configure.wasi firefox-134.0.1/toolkit/moz.configure
|
||||
--- firefox-134.0.1/toolkit/moz.configure.wasi 2025-01-13 14:46:04.000000000 +0100
|
||||
+++ firefox-134.0.1/toolkit/moz.configure 2025-01-17 08:39:38.870092763 +0100
|
||||
@@ -2767,7 +2776,7 @@ with only_when(requires_wasm_sandboxing
|
||||
def wasi_sysroot_flags(wasi_sysroot):
|
||||
if wasi_sysroot:
|
||||
log.info("Using wasi sysroot in %s", wasi_sysroot)
|
||||
- return ["--sysroot=%s" % wasi_sysroot]
|
||||
+ return ["--sysroot=%s" % wasi_sysroot, "-nodefaultlibs", "-lc", "-lwasi-emulated-process-clocks", "-lc++", "-lc++abi", "/raid/CVS/firefox/firefox-147.0-build/firefox-147.0/wasi-sdk-25/build/sysroot/install/wasi-resource-dir/lib/wasi/libclang_rt.builtins-wasm32.a"]
|
||||
return []
|
||||
|
||||
set_config("WASI_SYSROOT", wasi_sysroot)
|
||||
diff -up firefox-134.0.1/wasi-sdk-25/cmake/wasi-sdk-toolchain.cmake.wasi firefox-134.0.1/wasi-sdk-25/cmake/wasi-sdk-toolchain.cmake
|
||||
--- firefox-134.0.1/wasi-sdk-25/cmake/wasi-sdk-toolchain.cmake.wasi 2025-01-17 08:40:23.004159900 +0100
|
||||
+++ firefox-134.0.1/wasi-sdk-25/cmake/wasi-sdk-toolchain.cmake 2025-01-17 08:40:35.478178790 +0100
|
||||
@@ -126,7 +126,7 @@ endif()
|
||||
add_custom_command(
|
||||
OUTPUT ${wasm_component_ld}
|
||||
COMMAND
|
||||
- cargo install --root ${wasm_component_ld_root} ${rust_target_flag}
|
||||
+ cargo install --offline --root ${wasm_component_ld_root} ${rust_target_flag}
|
||||
wasm-component-ld@${wasm_component_ld_version}
|
||||
COMMAND
|
||||
cmake -E make_directory ${wasi_tmp_install}/bin
|
||||
diff -up firefox-134.0.2/wasi-sdk-25/version.py.wasi firefox-134.0.2/wasi-sdk-25/version.py
|
||||
--- firefox-134.0.2/wasi-sdk-25/version.py.wasi 2025-01-16 08:03:26.042654800 +0100
|
||||
+++ firefox-134.0.2/wasi-sdk-25/version.py 2025-01-22 14:08:34.563909971 +0100
|
||||
@@ -60,6 +60,7 @@ assert parse_git_version(
|
||||
|
||||
|
||||
def git_version():
|
||||
+ return 25
|
||||
version = exec(['git', 'describe', '--long', '--candidates=999',
|
||||
'--match=wasi-sdk-*', '--dirty=+m', f'--abbrev={GIT_REF_LEN}'],
|
||||
os.path.dirname(sys.argv[0]))
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
diff -up firefox-134.0.1/toolkit/moz.configure.wasi firefox-134.0.1/toolkit/moz.configure
|
||||
--- firefox-134.0.1/toolkit/moz.configure.wasi 2025-01-13 14:46:04.000000000 +0100
|
||||
+++ firefox-134.0.1/toolkit/moz.configure 2025-01-17 08:39:38.870092763 +0100
|
||||
@@ -2767,7 +2776,7 @@ with only_when(requires_wasm_sandboxing
|
||||
def wasi_sysroot_flags(wasi_sysroot):
|
||||
if wasi_sysroot:
|
||||
log.info("Using wasi sysroot in %s", wasi_sysroot)
|
||||
- return ["--sysroot=%s" % wasi_sysroot]
|
||||
+ return ["--sysroot=%s" % wasi_sysroot, "-nodefaultlibs", "-lc", "-lwasi-emulated-process-clocks", "-lc++", "-lc++abi", "LIBCLANG_RT_PLACEHOLDER"]
|
||||
return []
|
||||
|
||||
set_config("WASI_SYSROOT", wasi_sysroot)
|
||||
diff -up firefox-134.0.1/wasi-sdk-25/cmake/wasi-sdk-toolchain.cmake.wasi firefox-134.0.1/wasi-sdk-25/cmake/wasi-sdk-toolchain.cmake
|
||||
--- firefox-134.0.1/wasi-sdk-25/cmake/wasi-sdk-toolchain.cmake.wasi 2025-01-17 08:40:23.004159900 +0100
|
||||
+++ firefox-134.0.1/wasi-sdk-25/cmake/wasi-sdk-toolchain.cmake 2025-01-17 08:40:35.478178790 +0100
|
||||
@@ -126,7 +126,7 @@ endif()
|
||||
add_custom_command(
|
||||
OUTPUT ${wasm_component_ld}
|
||||
COMMAND
|
||||
- cargo install --root ${wasm_component_ld_root} ${rust_target_flag}
|
||||
+ cargo install --offline --root ${wasm_component_ld_root} ${rust_target_flag}
|
||||
wasm-component-ld@${wasm_component_ld_version}
|
||||
COMMAND
|
||||
cmake -E make_directory ${wasi_tmp_install}/bin
|
||||
diff -up firefox-134.0.2/wasi-sdk-25/version.py.wasi firefox-134.0.2/wasi-sdk-25/version.py
|
||||
--- firefox-134.0.2/wasi-sdk-25/version.py.wasi 2025-01-16 08:03:26.042654800 +0100
|
||||
+++ firefox-134.0.2/wasi-sdk-25/version.py 2025-01-22 14:08:34.563909971 +0100
|
||||
@@ -60,6 +60,7 @@ assert parse_git_version(
|
||||
|
||||
|
||||
def git_version():
|
||||
+ return 25
|
||||
version = exec(['git', 'describe', '--long', '--candidates=999',
|
||||
'--match=wasi-sdk-*', '--dirty=+m', f'--abbrev={GIT_REF_LEN}'],
|
||||
os.path.dirname(sys.argv[0]))
|
||||
Loading…
Add table
Add a link
Reference in a new issue