Compare commits

..

17 commits

Author SHA1 Message Date
Martin Stransky
1eea2f39af Merge branch 'master' into f28 2019-05-27 15:07:50 +02:00
Martin Stransky
fc7a209334 Merge branch 'master' into f28 2019-05-27 14:20:02 +02:00
Martin Stransky
ff7593c8d6 Merge branch 'master' into f28 2019-05-23 14:24:40 +02:00
Martin Stransky
c1248d7f6d Merge branch 'master' into f28 2019-05-23 10:12:53 +02:00
Martin Stransky
a3cb6b624f Merge branch 'master' into f28 2019-05-17 08:03:11 +02:00
Martin Stransky
01d3f8cb27 Merge branch 'master' into f28 2019-05-17 07:46:34 +02:00
Jan Horak
89f0ddae17 Merge branch 'master' into f28 2019-05-16 16:26:44 +02:00
Martin Stransky
9463d2dc66 Merge branch 'master' into f28 2019-05-16 09:37:01 +02:00
Martin Stransky
24d9697324 Merge branch 'master' into f28 2019-05-15 16:49:25 +02:00
Martin Stransky
20d966d84e Merge branch 'master' into f28 2019-05-15 16:14:20 +02:00
Martin Stransky
2496a29256 Merge branch 'master' into f28 2019-05-08 12:50:33 +02:00
Martin Stransky
2ab88d19bb Merge branch 'master' into f28 2019-05-05 21:55:06 +02:00
Martin Stransky
0851f329d7 Merge branch 'master' into f28 2019-05-03 08:56:25 +02:00
Martin Stransky
f5fe9ba2d0 Merge branch 'master' into f28 2019-05-02 10:52:24 +02:00
Martin Stransky
9fc20240d2 Merge branch 'master' into f28 2019-05-02 10:51:01 +02:00
Martin Stransky
6012642b79 Merge branch 'master' into f28 2019-04-11 13:28:24 +02:00
Martin Stransky
60336f10c4 Rebuild 2019-04-11 13:27:11 +02:00
88 changed files with 14395 additions and 7010 deletions

402
.gitignore vendored
View file

@ -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

View file

@ -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

View file

@ -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____

View 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");
}

View 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);

View file

@ -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

View 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

File diff suppressed because it is too large Load diff

View 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)

View 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)

View 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
View 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
View 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.

View file

@ -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"

View file

@ -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
View 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

View file

@ -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
View 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',

View file

@ -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);

View file

@ -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
View 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()) {

View file

@ -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>

View file

@ -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

View file

@ -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

View file

@ -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);
}

View file

@ -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

View 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);
}

View file

@ -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

View file

@ -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

File diff suppressed because it is too large Load diff

View file

@ -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

Before After
Before After

View file

@ -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]=Ca s mi
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]=Ca s riêng tư mi
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

View file

@ -1,4 +1,4 @@
#!/usr/bin/bash
#!/bin/bash
#
# Run Firefox under Wayland
#

View file

@ -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]=Ca s mi
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]=Ca s riêng tư mi
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

View file

@ -1,4 +1,4 @@
#!/usr/bin/bash
#!/bin/bash
#
# Run Firefox on X11 backend
#

View file

@ -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

View file

@ -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 dont 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>

File diff suppressed because it is too large Load diff

View file

@ -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 "$@"

File diff suppressed because it is too large Load diff

View file

@ -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

View file

@ -12,7 +12,7 @@ to be used with 'cargo vendor' commmand.
"""
[dependencies]
cbindgen = "0.29.1"
cbindgen = "0.8.2"
[[bin]]
name = "dummy"

View file

@ -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

View file

@ -1 +0,0 @@
AIzaSyB2h2OuRcUgy5N-5hsZqiPW6sH3n_rptiQ

99
mozilla-1170092.patch Normal file
View 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"

View file

@ -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
View 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
View 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
View 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
View 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
View 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
View 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
View 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);

View file

@ -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
View 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, &registry_listener, this);
+ mPrimarySelectionDeviceManager(nullptr),
+ mRegistry(nullptr) {
+ mRegistry = wl_display_get_registry(mDisplay);
+ wl_registry_add_listener(mRegistry, &registry_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
View 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);

View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load diff

View file

@ -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
View 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
View 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)

View file

@ -1,2 +0,0 @@
#!/bin/sh
exec /usr/bin/node "$@" 2>&1 | cat -

View file

@ -1,3 +0,0 @@
[D-BUS Service]
Name=org.mozilla.firefox.SearchProvider
Exec=/usr/lib64/firefox/firefox --dbus-service /usr/bin/firefox

View file

@ -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 dont 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>

View file

@ -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]=Ca s mi
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]=نْو پرایوٹ وینڈو&amp;
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]=Ca s riêng tư mi
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

View file

@ -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
View file

@ -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

View 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

View 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

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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",

View 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

View file

@ -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;

View 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,

View file

@ -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

View file

@ -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

View file

@ -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
View file

@ -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

View file

@ -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]))

View file

@ -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]))