Sync to 8.3.0 branch
This commit is contained in:
parent
7264c8ccf5
commit
cfd948c871
668
.gitignore
vendored
668
.gitignore
vendored
@ -1,426 +1,260 @@
|
|||||||
firefox-langpacks-3.6.4-20100622.tar.bz2
|
/firefox-7.0b6.source.tar.bz2
|
||||||
firefox-3.6.4.source.tar.bz2
|
/firefox-langpacks-7.0b6-20110919.tar.bz2
|
||||||
/firefox-3.6.9.source.tar.bz2
|
/firefox-langpacks-8.0-20111004.tar.bz2
|
||||||
/firefox-langpacks-3.6.9-20100906.tar.bz2
|
/firefox-langpacks-8.0-20111007.tar.bz2
|
||||||
/firefox-3.6.11.source.tar.bz2
|
/firefox-8.0b2.source.tar.bz2
|
||||||
/firefox-langpacks-3.6.11-20101019.tar.bz2
|
/firefox-8.0b3.source.tar.bz2
|
||||||
/firefox-3.6.12.source.tar.bz2
|
/firefox-langpacks-8.0-20111014.tar.bz2
|
||||||
/firefox-langpacks-3.6.12-20101027.tar.bz2
|
|
||||||
/firefox-3.6.13.source.tar.bz2
|
|
||||||
/firefox-langpacks-3.6.13-20101210.tar.bz2
|
|
||||||
/firefox-3.6.14.source.tar.bz2
|
|
||||||
/firefox-langpacks-3.6.14-20110301.tar.bz2
|
|
||||||
/firefox-3.6.15.source.tar.bz2
|
|
||||||
/firefox-langpacks-3.6.15-20110307.tar.bz2
|
|
||||||
/firefox-3.6.16.source.tar.bz2
|
|
||||||
/firefox-langpacks-3.6.16-20110322.tar.xz
|
|
||||||
/firefox-langpacks-3.6.17-20110428.tar.xz
|
|
||||||
/firefox-3.6.17.source.tar.bz2
|
|
||||||
/firefox-3.6.18.source.tar.bz2
|
|
||||||
/firefox-langpacks-3.6.18-20110621.tar.xz
|
|
||||||
/firefox-3.6.22.source.tar.bz2
|
|
||||||
/firefox-langpacks-3.6.22-20110906.tar.xz
|
|
||||||
/firefox-langpacks-3.6.20-20110816.tar.xz
|
|
||||||
/firefox-3.6.20.source.tar.bz2
|
|
||||||
/firefox-7.0.source.tar.bz2
|
|
||||||
/firefox-langpacks-7.0-20110927.tar.xz
|
|
||||||
/firefox-7.0.1.source.tar.bz2
|
|
||||||
/firefox-langpacks-7.0.1-20110930.tar.xz
|
|
||||||
/firefox-8.0.source.tar.bz2
|
|
||||||
/firefox-langpacks-8.0-20111108.tar.xz
|
|
||||||
/firefox-9.0b5.source.tar.bz2
|
|
||||||
/firefox-langpacks-9.0b5-20111215.tar.xz
|
|
||||||
/firefox-9.0.source.tar.bz2
|
|
||||||
/firefox-langpacks-9.0-20111220.tar.xz
|
|
||||||
/firefox-9.0.1.source.tar.bz2
|
|
||||||
/firefox-langpacks-9.0.1-20111223.tar.xz
|
|
||||||
/firefox-10.0.source.tar.bz2
|
/firefox-10.0.source.tar.bz2
|
||||||
/firefox-langpacks-10.0-20120131.tar.xz
|
/firefox-langpacks-10-20120128.tar.bz2
|
||||||
/firefox-10.0.1.source.tar.bz2
|
/firefox-langpacks-10.0-20120129.tar.bz2
|
||||||
/firefox-langpacks-10.0.1-20120209.tar.xz
|
/firefox-10.0esr.source.tar.bz2
|
||||||
/firefox-11.0.source.tar.bz2
|
/firefox-langpacks-10-20120207.tar.bz2
|
||||||
/firefox-langpacks-11.0-20120313.tar.xz
|
/firefox-langpacks-10.0-20120207.tar.bz2
|
||||||
/firefox-12.0.source.tar.bz2
|
/firefox-10.0.1esr.source.tar.bz2
|
||||||
/firefox-langpacks-12.0-20120424.tar.xz
|
/firefox-langpacks-10.0.1esr-20120209.tar.bz2
|
||||||
/firefox-13.0.source.tar.bz2
|
/firefox-10.0.3esr.source.tar.bz2
|
||||||
/firefox-langpacks-13.0-20120604.tar.xz
|
/firefox-langpacks-10.0.3-20120306.tar.bz2
|
||||||
/firefox-13.0.1.source.tar.bz2
|
/firefox-langpacks-10.0.3esr-20120306.tar.bz2
|
||||||
/firefox-langpacks-13.0.1-20120616.tar.xz
|
/firefox-10.0.7esr.source.tar.bz2
|
||||||
/firefox-14.0.1.source.tar.bz2
|
/firefox-langpacks-10.0.7esr-20120825.tar.bz2
|
||||||
/firefox-langpacks-14.0.1-20120716.tar.xz
|
/firefox-10.0.8esr.source.tar.bz2
|
||||||
/firefox-15.0.source.tar.bz2
|
/firefox-langpacks-10.0.8esr-20121008.tar.bz2
|
||||||
/firefox-langpacks-15.0-20120827.tar.xz
|
/firefox-17.0.1esr.source.tar.bz2
|
||||||
/firefox-15.0.1.source.tar.bz2
|
/firefox-langpacks-17.0.1esr-20121220.tar.bz2
|
||||||
/firefox-langpacks-15.0.1-20120911.tar.xz
|
/firefox-17.0.2esr.source.tar.bz2
|
||||||
/firefox-16.0.source.tar.bz2
|
/firefox-langpacks-17.0.2esr-20130110.tar.bz2
|
||||||
/firefox-langpacks-16.0-20121008.tar.xz
|
/firefox-langpacks-17.0.4esr-20130313.tar.bz2
|
||||||
/firefox-16.0.1.source.tar.bz2
|
/firefox-17.0.4esr.source.tar.bz2
|
||||||
/firefox-langpacks-16.0.1-20121011.tar.xz
|
/firefox-17.0.5esr.source.tar.bz2
|
||||||
/firefox-16.0.2.source.tar.bz2
|
/firefox-langpacks-17.0.5esr-20130329.tar.bz2
|
||||||
/firefox-langpacks-16.0.2-20121026.tar.xz
|
/firefox-17.0.6esr.source.tar.bz2
|
||||||
/firefox-langpacks-17.0-20121119.tar.xz
|
/firefox-langpacks-17.0.6esr-20130517.tar.bz2
|
||||||
/firefox-17.0.source.tar.bz2
|
/firefox-17.0.7esr.source.tar.bz2
|
||||||
/firefox-17.0.1.source.tar.bz2
|
/firefox-langpacks-17.0.7esr-20130620.tar.bz2
|
||||||
/firefox-langpacks-17.0.1-20121129.tar.xz
|
/firefox-17.0.9esr.source.tar.bz2
|
||||||
/firefox-langpacks-18.0-20130109.tar.xz
|
/firefox-langpacks-17.0.9esr-20130912.tar.bz2
|
||||||
/firefox-18.0.source.tar.bz2
|
/firefox-24.0esr.source.tar.bz2
|
||||||
/firefox-18.0.1.source.tar.bz2
|
/firefox-langpacks-24.0-20131031.tar.bz2
|
||||||
/firefox-langpacks-18.0.1-20130125.tar.xz
|
/firefox-langpacks-24.0esr-20131031.tar.bz2
|
||||||
/firefox-18.0.2.source.tar.bz2
|
/firefox-24.1.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-18.0.2-20130206.tar.xz
|
/firefox-langpacks-24.1.0esr-20131106.tar.bz2
|
||||||
/firefox-19.0.source.tar.bz2
|
/firefox-24.3.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-19.0-20130219.tar.xz
|
/firefox-langpacks-24.3.0esr-20140130.tar.bz2
|
||||||
/firefox-19.0.2.source.tar.bz2
|
/firefox-24.4.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-19.0.2-20130311.tar.xz
|
/firefox-langpacks-24.4.0esr-20140318.tar.bz2
|
||||||
/firefox-langpacks-20.0-20130401.tar.xz
|
/firefox-24.5.0esr.source.tar.bz2
|
||||||
/firefox-20.0.source.tar.bz2
|
/firefox-langpacks-24.5.0esr-20140422.tar.bz2
|
||||||
/firefox-21.0.source.tar.bz2
|
/firefox-24.6.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-21.0-20130514.tar.xz
|
/firefox-langpacks-24.6.0esr-20140604.tar.bz2
|
||||||
/firefox-22.0.source.tar.bz2
|
/firefox-31.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-22.0-20130621.tar.xz
|
/firefox-langpacks-31.0esr-20140721.tar.bz2
|
||||||
/firefox-23.0.source.tar.bz2
|
/firefox-langpacks-31.1.0esr-20140828.tar.bz2
|
||||||
/firefox-langpacks-23.0-20130731.tar.xz
|
/firefox-31.1.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-23.0-20130805.tar.xz
|
/firefox-31.2.0esr.source.tar.bz2
|
||||||
/firefox-23.0.1.source.tar.bz2
|
/firefox-langpacks-31.2.0esr-20141007.tar.bz2
|
||||||
/firefox-langpacks-23.0.1-20130819.tar.xz
|
/firefox-langpacks-31.2.0esr-20141013.tar.bz2
|
||||||
/firefox-langpacks-24.0-20130913.tar.xz
|
/firefox-31.3.0esr.source.tar.bz2
|
||||||
/firefox-24.0.source.tar.bz2
|
/firefox-langpacks-33.3.0esr-20141126.tar.bz2
|
||||||
/firefox-25.0.source.tar.bz2
|
/firefox-langpacks-31.3.0esr-20141126.tar.bz2
|
||||||
/firefox-langpacks-25.0-20131024.tar.xz
|
/firefox-31.4.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-25.0-20131030.tar.xz
|
/firefox-langpacks-31.4.0esr-20150106.tar.bz2
|
||||||
/firefox-26.0.source.tar.bz2
|
/firefox-langpacks-31.5.0esr-20150218.tar.bz2
|
||||||
/firefox-langpacks-26.0-20131209.tar.xz
|
/firefox-31.5.0esr.source.tar.bz2
|
||||||
/firefox-27.0.source.tar.bz2
|
/firefox-langpacks-37.9.0esr-20150218.tar.bz2
|
||||||
/firefox-langpacks-27.0-20140203.tar.xz
|
/firefox-37.9.0esr.source.tar.bz2
|
||||||
/firefox-27.0.1.source.tar.bz2
|
/devhelp-2.28.1-6.el6_6.src.rpm
|
||||||
/firefox-langpacks-27.0.1-20140224.tar.xz
|
/yasm-1.2.0-3.el7_0.src.rpm
|
||||||
/firefox-28.0.source.tar.bz2
|
/firefox-38.0b1.source.tar.bz2
|
||||||
/firefox-langpacks-28.0-20140318.tar.xz
|
/firefox-langpacks-38.0b1-20150401.tar.bz2
|
||||||
/firefox-29.0.source.tar.bz2
|
/firefox-langpacks-38.0b3-20150410.tar.bz2
|
||||||
/firefox-langpacks-29.0-20140422.tar.xz
|
/firefox-38.0b3.source.tar.bz2
|
||||||
/firefox-29.0.1.source.tar.bz2
|
/firefox-langpacks-38.0b5-20150420.tar.bz2
|
||||||
/firefox-langpacks-29.0.1-20140514.tar.xz
|
/firefox-38.0b5.source.tar.bz2
|
||||||
/firefox-30.0.source.tar.bz2
|
/firefox-38.0b6.source.tar.bz2
|
||||||
/firefox-langpacks-30.0-20140604.tar.xz
|
/firefox-langpacks-38.0b6-20150421.tar.bz2
|
||||||
/firefox-31.0.source.tar.bz2
|
/firefox-38.0b8.source.tar.bz2
|
||||||
/firefox-langpacks-31.0-20140717.tar.xz
|
/firefox-langpacks-38.0b8-20150427.tar.bz2
|
||||||
/firefox-32.0.source.tar.bz2
|
|
||||||
/firefox-langpacks-32.0-20140826.tar.xz
|
|
||||||
/firefox-32.0.1.source.tar.bz2
|
|
||||||
/firefox-langpacks-32.0.1-20140915.tar.xz
|
|
||||||
/firefox-32.0.2.source.tar.bz2
|
|
||||||
/firefox-langpacks-32.0.2-20140918.tar.xz
|
|
||||||
/firefox-langpacks-33.0-20141014.tar.xz
|
|
||||||
/firefox-33.0.source.tar.bz2
|
|
||||||
/firefox-33.1.source.tar.bz2
|
|
||||||
/firefox-langpacks-33.1-20141111.tar.xz
|
|
||||||
/firefox-34.0.source.tar.bz2
|
|
||||||
/firefox-langpacks-34.0-20141201.tar.xz
|
|
||||||
/firefox-35.0.source.tar.bz2
|
|
||||||
/firefox-langpacks-35.0-20150106.tar.xz
|
|
||||||
/firefox-langpacks-35.0-20150109.tar.xz
|
|
||||||
/firefox-35.0.1.source.tar.bz2
|
|
||||||
/firefox-langpacks-35.0.1-20150123.tar.xz
|
|
||||||
/firefox-36.0.source.tar.bz2
|
|
||||||
/firefox-langpacks-36.0-20150220.tar.xz
|
|
||||||
/firefox-36.0.1.source.tar.bz2
|
|
||||||
/firefox-langpacks-36.0.1-20150309.tar.xz
|
|
||||||
/firefox-36.0.3.source.tar.bz2
|
|
||||||
/firefox-langpacks-36.0.3-20150320.tar.xz
|
|
||||||
/firefox-36.0.4.source.tar.bz2
|
|
||||||
/firefox-langpacks-36.0.4-20150321.tar.xz
|
|
||||||
/firefox-langpacks-37.0-20150327.tar.xz
|
|
||||||
/firefox-37.0.source.tar.bz2
|
|
||||||
/firefox-langpacks-37.0.1-20150407.tar.xz
|
|
||||||
/firefox-37.0.1.source.tar.bz2
|
|
||||||
/firefox-37.0.2.source.tar.bz2
|
|
||||||
/firefox-langpacks-37.0.2-20150416.tar.xz
|
|
||||||
/firefox-38.0.source.tar.bz2
|
/firefox-38.0.source.tar.bz2
|
||||||
/firefox-langpacks-38.0-20150505.tar.bz2
|
/firefox-langpacks-38.0-20150504.tar.bz2
|
||||||
/firefox-langpacks-38.0-20150505.tar.xz
|
/firefox-38.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-38.0-20150511.tar.xz
|
/firefox-langpacks-38.0esr-20150506.tar.bz2
|
||||||
/firefox-38.0.1.source.tar.bz2
|
/firefox-38.0.1esr.source.tar.bz2
|
||||||
/firefox-langpacks-38.0.1-20150518.tar.xz
|
/firefox-langpacks-38.0.1esr-20150515.tar.bz2
|
||||||
/firefox-38.0.5.source.tar.bz2
|
/firefox-38.1.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-38.0.5-20150603.tar.xz
|
/firefox-langpacks-38.1.0esr-20150625.tar.bz2
|
||||||
/firefox-39.0.source.tar.bz2
|
/firefox-38.2.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-39.0-20150623.tar.xz
|
/firefox-langpacks-38.2.0esr-20150804.tar.bz2
|
||||||
/firefox-langpacks-39.0-20150625.tar.xz
|
/firefox-38.1.1esr.source.tar.bz2
|
||||||
/firefox-langpacks-39.0-20150630.tar.xz
|
/firefox-langpacks-38.1.1esr-20150806.tar.bz2
|
||||||
/firefox-langpacks-39.0-20150702.tar.xz
|
/firefox-langpacks-38.2.0esr-20150807.tar.bz2
|
||||||
/firefox-39.0.3.source.tar.bz2
|
/firefox-38.2.1esr.source.tar.bz2
|
||||||
/firefox-langpacks-39.0.3-20150806.tar.xz
|
/firefox-langpacks-38.2.1-20150826.tar.bz2
|
||||||
/firefox-40.0.source.tar.bz2
|
/firefox-langpacks-38.2.1esr-20150826.tar.bz2
|
||||||
/firefox-langpacks-40.0-20150807.tar.xz
|
/firefox-38.3.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-40.0-20150811.tar.xz
|
/firefox-langpacks-38.3.0esr-20150915.tar.bz2
|
||||||
/firefox-40.0.3.source.tar.bz2
|
/firefox-langpacks-38.3.0esr-20150917.tar.bz2
|
||||||
/firefox-langpacks-40.0.3-20150827.tar.xz
|
/firefox-38.4.0esr.source.tar.bz2
|
||||||
/firefox-41.0.source.tar.xz
|
/firefox-langpacks-38.4.0esr-20151029.tar.bz2
|
||||||
/firefox-langpacks-41.0-20150915.tar.xz
|
/firefox-38.5.0esr.source.tar.bz2
|
||||||
/firefox-langpacks-41.0-20150917.tar.xz
|
/firefox-langpacks-38.5.0esr-20151211.tar.bz2
|
||||||
/firefox-langpacks-41.0-20150918.tar.xz
|
/gcc48-4.8.2-15.el6.src.rpm
|
||||||
/firefox-langpacks-41.0.1-20150929.tar.xz
|
/firefox-langpacks-38.5.0esr-20151215.tar.bz2
|
||||||
/firefox-41.0.1.source.tar.xz
|
/firefox-45.0aurora.source.tar.bz2
|
||||||
/firefox-langpacks-41.0.1-20150930.tar.xz
|
/firefox-langpacks-45.0aurora-20151215.tar.bz2
|
||||||
/firefox-41.0.2.source.tar.xz
|
/yasm-1.2.0.tar.gz
|
||||||
/firefox-langpacks-41.0.2-20151015.tar.xz
|
/yasm-1.2.0-3.el7.src.rpm
|
||||||
/firefox-42.0.source.tar.xz
|
/Python-2.7.8.tgz
|
||||||
/firefox-langpacks-42.0-20151029.tar.xz
|
/devtoolset-2-binutils-2.23.52.0.1-10.el5.src.rpm
|
||||||
/firefox-langpacks-42.0-20151030.tar.xz
|
/yasm-1.2.0-3.el5.src.rpm
|
||||||
/firefox-43.0.source.tar.xz
|
/gcc48-4.8.2-16.el5.src.rpm
|
||||||
/firefox-langpacks-43.0-20151210.tar.xz
|
/firefox-45.0b1.source.tar.xz
|
||||||
/firefox-43.0.3.source.tar.xz
|
/firefox-langpacks-45.0b1-20160129.tar.xz
|
||||||
/firefox-langpacks-43.0.3-20151229.tar.xz
|
/firefox-langpacks-45.0b3-20160208.tar.xz
|
||||||
/firefox-43.0.4.source.tar.xz
|
/firefox-45.0b3.source.tar.xz
|
||||||
/firefox-langpacks-43.0.4-20160114.tar.xz
|
/firefox-langpacks-45.0b5-20160212.tar.xz
|
||||||
/firefox-44.0.source.tar.xz
|
/firefox-45.0b5.source.tar.xz
|
||||||
/firefox-langpacks-44.0-20160121.tar.xz
|
/firefox-langpacks-45.0b8-20160222.tar.xz
|
||||||
/firefox-langpacks-44.0-20160125.tar.xz
|
/firefox-45.0b8.source.tar.xz
|
||||||
/firefox-44.0.1.source.tar.xz
|
/firefox-45.0b10.source.tar.xz
|
||||||
/firefox-langpacks-44.0.1-20160205.tar.xz
|
/firefox-langpacks-45.0b10-20160229.tar.xz
|
||||||
/firefox-langpacks-44.0.1-20160208.tar.xz
|
|
||||||
/firefox-44.0.2.source.tar.xz
|
|
||||||
/firefox-langpacks-44.0.2-20160210.tar.xz
|
|
||||||
/firefox-langpacks-44.0.2-20160211.tar.xz
|
|
||||||
/firefox-45.0.source.tar.xz
|
/firefox-45.0.source.tar.xz
|
||||||
/firefox-langpacks-45.0-20160302.tar.xz
|
/firefox-langpacks-45.0-20160302.tar.xz
|
||||||
/firefox-langpacks-45.0-20160304.tar.xz
|
/firefox-45.0esr.source.tar.xz
|
||||||
/firefox-langpacks-45.0.1-20160316.tar.xz
|
/firefox-langpacks-45.0esr-20160307.tar.xz
|
||||||
/firefox-45.0.1.source.tar.xz
|
/firefox-45.0.1esr.source.tar.xz
|
||||||
/firefox-45.0.2.source.tar.xz
|
/firefox-langpacks-45.0.1esr-20160406.tar.xz
|
||||||
/firefox-langpacks-45.0.2-20160411.tar.xz
|
/firefox-45.0.2esr.source.tar.xz
|
||||||
/firefox-46.0.source.tar.xz
|
/firefox-langpacks-45.0.2esr-20160412.tar.xz
|
||||||
/firefox-langpacks-46.0-20160425.tar.xz
|
/firefox-45.1.0esr.source.tar.xz
|
||||||
/firefox-46.0.1.source.tar.xz
|
/firefox-langpacks-45.1.0esr-20160421.tar.xz
|
||||||
/firefox-langpacks-46.0.1-20160503.tar.xz
|
/firefox-45.1.1esr.source.tar.xz
|
||||||
/firefox-47.0.source.tar.xz
|
/firefox-langpacks-45.1.1esr-20160504.tar.xz
|
||||||
/firefox-langpacks-47.0-20160601.tar.xz
|
/firefox-45.2.0esr.source.tar.xz
|
||||||
/firefox-langpacks-47.0-20160603.tar.xz
|
/firefox-langpacks-45.2.0esr-20160603.tar.xz
|
||||||
/firefox-langpacks-47.0-20160606.tar.xz
|
/firefox-45.3.0esr.source.tar.xz
|
||||||
/firefox-47.0.1.source.tar.xz
|
/firefox-langpacks-45.3.0esr-20160727.tar.xz
|
||||||
/firefox-langpacks-47.0.1-20160711.tar.xz
|
/firefox-45.4.0esr.source.tar.xz
|
||||||
/firefox-langpacks-48.0-20160726.tar.xz
|
/firefox-langpacks-45.4.0esr-20160907.tar.xz
|
||||||
/firefox-48.0.source.tar.xz
|
/firefox-45.5.0esr.source.tar.xz
|
||||||
/firefox-langpacks-48.0-20160727.tar.xz
|
/firefox-langpacks-45.5.0esr-20161108.tar.xz
|
||||||
/firefox-langpacks-48.0.1-20160819.tar.xz
|
/firefox-52.0-0.1.el7.src.rpm
|
||||||
/firefox-48.0.1.source.tar.xz
|
/firefox-langpacks-52.0esr-20161108.tar.xz
|
||||||
/firefox-49.0.source.tar.xz
|
/firefox-52.0esr.source.tar.xz
|
||||||
/firefox-langpacks-49.0-20160906.tar.xz
|
/firefox-52.0b1.source.tar.xz
|
||||||
/firefox-langpacks-49.0-20160908.tar.xz
|
/firefox-langpacks-52.0b1-20170127.tar.xz
|
||||||
/firefox-langpacks-49.0-20160919.tar.xz
|
/firefox-52.0b2.source.tar.xz
|
||||||
/firefox-49.0.2.source.tar.xz
|
/firefox-langpacks-52.0b2-20170131.tar.xz
|
||||||
/firefox-langpacks-49.0.2-20161031.tar.xz
|
/firefox-52.0b3.source.tar.xz
|
||||||
/firefox-50.0.source.tar.xz
|
/firefox-langpacks-52.0b3-20170206.tar.xz
|
||||||
/firefox-langpacks-50.0-20161110.tar.xz
|
/firefox-52.0b8.source.tar.xz
|
||||||
/firefox-50.0.1.source.tar.xz
|
/firefox-langpacks-52.0b8-20170221.tar.xz
|
||||||
/firefox-langpacks-50.0.1-20161128.tar.xz
|
/firefox-52.0b9.source.tar.xz
|
||||||
/firefox-50.0.2.source.tar.xz
|
/firefox-langpacks-52.0b9-20170227.tar.xz
|
||||||
/firefox-langpacks-50.0.2-20161130.tar.xz
|
/firefox-langpacks-52.0esr-20170228.tar.xz
|
||||||
/firefox-50.1.0.source.tar.xz
|
/firefox-langpacks-52.0esr-20170306.tar.xz
|
||||||
/firefox-langpacks-50.1.0-20161213.tar.xz
|
|
||||||
/firefox-51.0.source.tar.xz
|
|
||||||
/firefox-langpacks-51.0-20170118.tar.xz
|
|
||||||
/firefox-langpacks-51.0-20170119.tar.xz
|
|
||||||
/firefox-51.0.1.source.tar.xz
|
|
||||||
/firefox-langpacks-51.0.1-20170125.tar.xz
|
|
||||||
/firefox-langpacks-51.0.1-20170126.tar.xz
|
|
||||||
/firefox-52.0.source.tar.xz
|
|
||||||
/firefox-langpacks-52.0-20170303.tar.xz
|
|
||||||
/firefox-52.0.2.source.tar.xz
|
|
||||||
/firefox-langpacks-52.0.2-20170329.tar.xz
|
|
||||||
/firefox-53.0.2.source.tar.xz
|
|
||||||
/firefox-langpacks-53.0.2-20170505.tar.xz
|
|
||||||
/firefox-53.0.3.source.tar.xz
|
|
||||||
/firefox-langpacks-53.0.3-20170526.tar.xz
|
|
||||||
/firefox-54.0.source.tar.xz
|
|
||||||
/firefox-langpacks-54.0-20170608.tar.xz
|
|
||||||
/firefox-langpacks-54.0-20170613.tar.xz
|
|
||||||
/firefox-54.0.1.source.tar.xz
|
|
||||||
/firefox-langpacks-54.0.1-20170725.tar.xz
|
|
||||||
/firefox-55.0.source.tar.xz
|
|
||||||
/firefox-langpacks-55.0-20170802.tar.xz
|
|
||||||
/firefox-langpacks-55.0-20170807.tar.xz
|
|
||||||
/firefox-55.0.1.source.tar.xz
|
|
||||||
/firefox-langpacks-55.0.1-20170814.tar.xz
|
|
||||||
/firefox-55.0.2.source.tar.xz
|
|
||||||
/firefox-langpacks-55.0.2-20170818.tar.xz
|
|
||||||
/firefox-55.0.3.source.tar.xz
|
|
||||||
/firefox-langpacks-55.0.3-20170901.tar.xz
|
|
||||||
/firefox-56.0.source.tar.xz
|
|
||||||
/firefox-langpacks-56.0-20170925.tar.xz
|
|
||||||
/firefox-langpacks-56.0-20170927.tar.xz
|
|
||||||
/firefox-57.0b5.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0b5-20171005.tar.xz
|
|
||||||
/firefox-57.0b6.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0b6-20171009.tar.xz
|
|
||||||
/firefox-57.0b7.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0b7-20171011.tar.xz
|
|
||||||
/firefox-57.0b8.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0b8-20171016.tar.xz
|
|
||||||
/firefox-57.0b9.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0b9-20171019.tar.xz
|
|
||||||
/firefox-57.0b11.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0b11-20171024.tar.xz
|
|
||||||
/firefox-57.0b12.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0b12-20171030.tar.xz
|
|
||||||
/firefox-57.0b14.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0b14-20171106.tar.xz
|
|
||||||
/firefox-57.0.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0-20171109.tar.xz
|
|
||||||
/firefox-langpacks-57.0-20171113.tar.xz
|
|
||||||
/firefox-57.0.1.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0.1-20171130.tar.xz
|
|
||||||
/firefox-57.0.3.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0.3-20180102.tar.xz
|
|
||||||
/firefox-57.0.4.source.tar.xz
|
|
||||||
/firefox-langpacks-57.0.4-20180104.tar.xz
|
|
||||||
/firefox-58.0.source.tar.xz
|
|
||||||
/firefox-langpacks-58.0-20180123.tar.xz
|
|
||||||
/firefox-58.0.1.source.tar.xz
|
|
||||||
/firefox-langpacks-58.0.1-20180130.tar.xz
|
|
||||||
/2f6a4d2cf42c9d59626061d45c043817cb220814.tar.bz2
|
|
||||||
/firefox-langpacks-59.0-20180306.tar.xz
|
|
||||||
/c61f5f5ead48c78a80c80db5c489bdc7cfaf8175.tar.bz2
|
/c61f5f5ead48c78a80c80db5c489bdc7cfaf8175.tar.bz2
|
||||||
/firefox-langpacks-59.0-20180312.tar.xz
|
/firefox-langpacks-60.0b3-20180313.tar.xz
|
||||||
/firefox-langpacks-59.0.1-20180317.tar.xz
|
/gtk3-private-3.22.26-1.el6.src.rpm
|
||||||
/3db9e3d52b17563efca181ccbb50deb8660c59ae.tar.bz2
|
/Python-2.7.13.tar.xz
|
||||||
/239e434d6d2b8e1e2b697c3416d1e96d48fe98e5.tar.bz2
|
/firefox-60.0b11.source.tar.xz
|
||||||
/firefox-langpacks-59.0.2-20180327.tar.xz
|
/firefox-langpacks-60.0b11-20180411.tar.xz
|
||||||
/firefox-60.0b13.source.tar.xz
|
|
||||||
/firefox-langpacks-60.0b13-20180418.tar.xz
|
|
||||||
/firefox-60.0b15.source.tar.xz
|
/firefox-60.0b15.source.tar.xz
|
||||||
/firefox-langpacks-60.0b15-20180426.tar.xz
|
/firefox-langpacks-60.0b15-20180425.tar.xz
|
||||||
/firefox-60.0b16.source.tar.xz
|
|
||||||
/firefox-langpacks-60.0b16-20180427.tar.xz
|
|
||||||
/firefox-60.0.source.tar.xz
|
/firefox-60.0.source.tar.xz
|
||||||
/firefox-langpacks-60.0-20180502.tar.xz
|
/firefox-langpacks-60.0-20180502.tar.xz
|
||||||
/firefox-langpacks-60.0-20180507.tar.xz
|
/firefox-60.0esr.source.tar.xz
|
||||||
/firefox-60.0.1.source.tar.xz
|
/firefox-langpacks-60.0esr-20180503.tar.xz
|
||||||
/firefox-langpacks-60.0.1-20180523.tar.xz
|
/firefox-langpacks-60.0esr-20180506.tar.xz
|
||||||
/firefox-60.0.2.source.tar.xz
|
/libffi-3.0.13-18.el7_3.src.rpm
|
||||||
/firefox-langpacks-60.0.2-20180611.tar.xz
|
/firefox-60.1.0esr.source.tar.xz
|
||||||
/firefox-61.0.source.tar.xz
|
/firefox-langpacks-60.1.0esr-20180620.tar.xz
|
||||||
/firefox-langpacks-61.0-20180619.tar.xz
|
/firefox-langpacks-60.1.0esr-20180622.tar.xz
|
||||||
/firefox-langpacks-61.0-20180622.tar.xz
|
/firefox-60.2.0esr.source.tar.xz
|
||||||
/firefox-61.0.1.source.tar.xz
|
/firefox-langpacks-60.2.0esr-20180831.tar.xz
|
||||||
/firefox-langpacks-61.0.1-20180710.tar.xz
|
/firefox-nightly.tar.bz2
|
||||||
/firefox-langpacks-61.0.2-20180809.tar.xz
|
/firefox-68.0b3.source.tar.xz
|
||||||
/firefox-61.0.2.source.tar.xz
|
/firefox-langpacks-68.0b3-20190521.tar.xz
|
||||||
/firefox-langpacks-62.0-20180828.tar.xz
|
/Python-3.6.8.tar.xz
|
||||||
/firefox-62.0.source.tar.xz
|
|
||||||
/firefox-62.0.2.source.tar.xz
|
|
||||||
/firefox-langpacks-62.0.2-20180924.tar.xz
|
|
||||||
/firefox-62.0.3.source.tar.xz
|
|
||||||
/firefox-langpacks-62.0.3-20181002.tar.xz
|
|
||||||
/firefox-63.0.source.tar.xz
|
|
||||||
/firefox-langpacks-63.0-20181018.tar.xz
|
|
||||||
/cbindgen-vendor.tar.xz
|
/cbindgen-vendor.tar.xz
|
||||||
/firefox-langpacks-63.0.1-20181101.tar.xz
|
/nodejs-8.11.4-1.fc27.src.rpm
|
||||||
/firefox-63.0.1.source.tar.xz
|
/firefox-68.0b13.source.tar.xz
|
||||||
/firefox-63.0.3.source.tar.xz
|
/firefox-langpacks-68.0b13-20190625.tar.xz
|
||||||
/firefox-langpacks-63.0.3-20181115.tar.xz
|
/firefox-68.0esr.source.tar.xz
|
||||||
/firefox-64.0.source.tar.xz
|
/firefox-langpacks-68.0esr-20190716.tar.xz
|
||||||
/firefox-langpacks-64.0-20181204.tar.xz
|
/addon-751081-latest.xpi
|
||||||
/firefox-64.0.2.source.tar.xz
|
/firefox-68.0.1esr.source.tar.xz
|
||||||
/firefox-langpacks-64.0.2-20190110.tar.xz
|
/firefox-langpacks-68.0.1esr-20190726.tar.xz
|
||||||
/firefox-65.0.source.tar.xz
|
/firefox-68.1.0esr.source.tar.xz
|
||||||
/firefox-langpacks-65.0-20190128.tar.xz
|
/firefox-langpacks-68.1.0esr-20190828.tar.xz
|
||||||
/firefox-65.0.1.source.tar.xz
|
/openssl-1.0.2k-19.el7_7.src.rpm
|
||||||
/firefox-langpacks-65.0.1-20190215.tar.xz
|
/openssl-1.0.2k-19.bundle.el7_7.src.rpm
|
||||||
/firefox-65.0.2.source.tar.xz
|
/openssl-1.0.2k-19.1.bundle.el7_7.src.rpm
|
||||||
/firefox-langpacks-65.0.2-20190301.tar.xz
|
/openssl-1.0.2k-19.2.bundle.el7_7.src.rpm
|
||||||
/firefox-66.0.source.tar.xz
|
/openssl-1.0.2k-19.3.bundle.el7_7.src.rpm
|
||||||
/firefox-langpacks-66.0-20190312.tar.xz
|
/openssl-1.0.2k-19.4.bundle.el7_7.src.rpm
|
||||||
/firefox-langpacks-66.0-20190315.tar.xz
|
/openssl-1.0.2k-19.5.bundle.el7_7.src.rpm
|
||||||
/firefox-66.0.1.source.tar.xz
|
/openssl-1.0.2k-19.6.bundle.el7_7.src.rpm
|
||||||
/firefox-langpacks-66.0.1-20190322.tar.xz
|
/nodejs-8.11.4-1.1.fc27.src.rpm
|
||||||
/firefox-66.0.2.source.tar.xz
|
/nodejs-8.11.4-1.2.fc27.src.rpm
|
||||||
/firefox-langpacks-66.0.2-20190401.tar.xz
|
/nodejs-8.11.4-1.3.fc27.src.rpm
|
||||||
/firefox-langpacks-66.0.3-20190410.tar.xz
|
/firefox-68.2.0esr.source.tar.xz
|
||||||
/firefox-66.0.3.source.tar.xz
|
/firefox-langpacks-68.2.0esr-20191017.tar.xz
|
||||||
/firefox-langpacks-66.0.4-20190505.tar.xz
|
/firefox-68.3.0esr.source.tar.xz
|
||||||
/firefox-66.0.4.source.tar.xz
|
/firefox-langpacks-68.3.0esr-20191127.tar.xz
|
||||||
/firefox-66.0.5.source.tar.xz
|
/firefox-68.4.0esr.source.tar.xz
|
||||||
/firefox-langpacks-66.0.5-20190508.tar.xz
|
/firefox-langpacks-68.4.0esr-20200103.tar.xz
|
||||||
/firefox-67.0.source.tar.xz
|
/firefox-68.4.1esr.source.tar.xz
|
||||||
/firefox-langpacks-67.0-20190515.tar.xz
|
/firefox-langpacks-68.4.1esr-20200108.tar.xz
|
||||||
/firefox-langpacks-67.0-20190517.tar.xz
|
/firefox-68.5.0esr.source.tar.xz
|
||||||
/firefox-67.0.2.source.tar.xz
|
/firefox-langpacks-68.5.0esr-20200205.tar.xz
|
||||||
/firefox-langpacks-67.0.2-20190611.tar.xz
|
/firefox-langpacks-68.5.0esr-20200207.tar.xz
|
||||||
/firefox-langpacks-67.0.3-20190618.tar.xz
|
/firefox-68.6.0esr.source.tar.xz
|
||||||
/firefox-67.0.3.source.tar.xz
|
/firefox-langpacks-68.6.0esr-20200304.tar.xz
|
||||||
/firefox-67.0.4.source.tar.xz
|
/firefox-68.7.0esr.source.tar.xz
|
||||||
/firefox-langpacks-67.0.4-20190620.tar.xz
|
/firefox-langpacks-68.7.0esr-20200402.tar.xz
|
||||||
/firefox-68.0.source.tar.xz
|
/firefox-68.6.1esr.source.tar.xz
|
||||||
/firefox-langpacks-68.0-20190702.tar.xz
|
/firefox-langpacks-68.6.1esr-20200406.tar.xz
|
||||||
/firefox-langpacks-68.0-20190708.tar.xz
|
/firefox-langpacks-68.7.0esr-20200407.tar.xz
|
||||||
/firefox-68.0.1.source.tar.xz
|
/firefox-68.8.0esr.source.tar.xz
|
||||||
/firefox-langpacks-68.0.1-20190722.tar.xz
|
/firefox-langpacks-68.8.0esr-20200429.tar.xz
|
||||||
/firefox-68.0.2.source.tar.xz
|
/firefox-68.9.0esr.source.tar.xz
|
||||||
/firefox-langpacks-68.0.2-20190814.tar.xz
|
/firefox-langpacks-68.9.0esr-20200529.tar.xz
|
||||||
/firefox-69.0.source.tar.xz
|
/firefox-68.10.0esr.source.tar.xz
|
||||||
/firefox-langpacks-69.0-20190829.tar.xz
|
/firefox-langpacks-68.10.0esr-20200626.tar.xz
|
||||||
/firefox-69.0.1.source.tar.xz
|
/firefox-68.11.0esr.source.tar.xz
|
||||||
/firefox-langpacks-69.0.1-20190918.tar.xz
|
/firefox-langpacks-68.11.0esr-20200724.tar.xz
|
||||||
/firefox-langpacks-69.0.2-20191003.tar.xz
|
/firefox-78.0b3.source.tar.xz
|
||||||
/firefox-69.0.2.source.tar.xz
|
/firefox-langpacks-78.0b3-20200605.tar.xz
|
||||||
/firefox-69.0.3.source.tar.xz
|
/firefox-78.0b8.source.tar.xz
|
||||||
/firefox-langpacks-69.0.3-20191010.tar.xz
|
/firefox-langpacks-78.0b8-20200617.tar.xz
|
||||||
/firefox-70.0.source.tar.xz
|
/nodejs-12.16.1-1.fc31.src.rpm
|
||||||
/firefox-langpacks-70.0-20191018.tar.xz
|
/nodejs-12.16.3-1.fc33.src.rpm
|
||||||
/firefox-70.0.1.source.tar.xz
|
/nodejs-10.21.0-3.el8_0.src.rpm
|
||||||
/firefox-langpacks-70.0.1-20191101.tar.xz
|
/firefox-78.0esr.source.tar.xz
|
||||||
/firefox-71.0b12.source.tar.xz
|
/firefox-langpacks-78.0esr-20200626.tar.xz
|
||||||
/firefox-71.0.source.tar.xz
|
/firefox-78.0.1esr.source.tar.xz
|
||||||
/firefox-langpacks-71.0-20191126.tar.xz
|
/firefox-langpacks-78.0.1esr-20200707.tar.xz
|
||||||
/firefox-langpacks-71.0-20191202.tar.xz
|
/nspr-4.25.0-1.el8_0.src.rpm
|
||||||
/firefox-72.0.source.tar.xz
|
/nss-3.53.0-1.el8_0.src.rpm
|
||||||
/firefox-langpacks-72.0-20200103.tar.xz
|
/nss-3.53.1-3.el8_0.src.rpm
|
||||||
/firefox-langpacks-72.0-20200106.tar.xz
|
/firefox-78.1.0esr.source.tar.xz
|
||||||
/firefox-72.0.1.source.tar.xz
|
/firefox-langpacks-78.1.0esr-20200723.tar.xz
|
||||||
/firefox-langpacks-72.0.1-20200108.tar.xz
|
/firefox-78.2.0esr.source.tar.xz
|
||||||
/firefox-72.0.2.source.tar.xz
|
/firefox-langpacks-78.2.0esr-20200818.tar.xz
|
||||||
/firefox-langpacks-72.0.2-20200120.tar.xz
|
/cbindgen-vendor-0.14.3.tar.xz
|
||||||
/firefox-73.0.source.tar.xz
|
/nodejs-10.21.0-4.fc32.src.rpm
|
||||||
/firefox-langpacks-73.0-20200211.tar.xz
|
/nss-3.53.1-3.fc32.src.rpm
|
||||||
/firefox-73.0.1.source.tar.xz
|
/firefox-78.3.0esr.source.tar.xz
|
||||||
/firefox-langpacks-73.0.1-20200220.tar.xz
|
/firefox-langpacks-78.3.0esr-20200918.tar.xz
|
||||||
/firefox-74.0.source.tar.xz
|
/nodejs-10.21.0-5.fc32.src.rpm
|
||||||
/firefox-langpacks-74.0-20200303.tar.xz
|
/firefox-78.4.0esr.source.tar.xz
|
||||||
/firefox-langpacks-74.0-20200309.tar.xz
|
/firefox-langpacks-78.4.0esr-20201016.tar.xz
|
||||||
/firefox-langpacks-74.0-20200310.tar.xz
|
/firefox-78.4.1esr.source.tar.xz
|
||||||
/firefox-74.0.1.source.tar.xz
|
/firefox-langpacks-78.4.1esr-20201109.tar.xz
|
||||||
/firefox-langpacks-74.0.1-20200404.tar.xz
|
/firefox-78.5.0esr.source.tar.xz
|
||||||
/firefox-75.0.source.tar.xz
|
/firefox-langpacks-78.5.0esr-20201118.tar.xz
|
||||||
/firefox-langpacks-75.0-20200406.tar.xz
|
/firefox-78.6.0esr.source.tar.xz
|
||||||
/firefox-76.0.source.tar.xz
|
/firefox-langpacks-78.6.0esr-20201210.tar.xz
|
||||||
/firefox-langpacks-76.0-20200502.tar.xz
|
/firefox-78.6.1esr.source.tar.xz
|
||||||
/firefox-76.0.1.source.tar.xz
|
/firefox-langpacks-78.6.1esr-20210106.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
|
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
diff -up firefox-72.0/gfx/skia/skia/include/private/SkHalf.h.aarch64-skia firefox-72.0/gfx/skia/skia/include/private/SkHalf.h
|
|
||||||
--- firefox-72.0/gfx/skia/skia/include/private/SkHalf.h.aarch64-skia 2020-01-02 22:33:02.000000000 +0100
|
|
||||||
+++ firefox-72.0/gfx/skia/skia/include/private/SkHalf.h 2020-01-03 09:00:37.537296105 +0100
|
|
||||||
@@ -40,7 +40,7 @@ static inline Sk4h SkFloatToHalf_finite_
|
|
||||||
|
|
||||||
static inline Sk4f SkHalfToFloat_finite_ftz(uint64_t rgba) {
|
|
||||||
Sk4h hs = Sk4h::Load(&rgba);
|
|
||||||
-#if !defined(SKNX_NO_SIMD) && defined(SK_CPU_ARM64)
|
|
||||||
+#if 0 // !defined(SKNX_NO_SIMD) && defined(SK_CPU_ARM64)
|
|
||||||
float32x4_t fs;
|
|
||||||
asm ("fcvtl %[fs].4s, %[hs].4h \n" // vcvt_f32_f16(...)
|
|
||||||
: [fs] "=w" (fs) // =w: write-only NEON register
|
|
||||||
@@ -62,7 +62,7 @@ static inline Sk4f SkHalfToFloat_finite_
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline Sk4h SkFloatToHalf_finite_ftz(const Sk4f& fs) {
|
|
||||||
-#if !defined(SKNX_NO_SIMD) && defined(SK_CPU_ARM64)
|
|
||||||
+#if 0 // !defined(SKNX_NO_SIMD) && defined(SK_CPU_ARM64)
|
|
||||||
float32x4_t vec = fs.fVec;
|
|
||||||
asm ("fcvtn %[vec].4h, %[vec].4s \n" // vcvt_f16_f32(vec)
|
|
||||||
: [vec] "+w" (vec)); // +w: read-write NEON register
|
|
||||||
diff -up firefox-72.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia firefox-72.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h
|
|
||||||
--- firefox-72.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia 2020-01-03 09:00:37.538296107 +0100
|
|
||||||
+++ firefox-72.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h 2020-01-03 10:11:41.259219508 +0100
|
|
||||||
@@ -1087,7 +1087,7 @@ SI F from_half(U16 h) {
|
|
||||||
}
|
|
||||||
|
|
||||||
SI U16 to_half(F f) {
|
|
||||||
-#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) \
|
|
||||||
+#if 0 //defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) \
|
|
||||||
&& !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
|
|
||||||
return vcvt_f16_f32(f);
|
|
||||||
|
|
||||||
diff -up firefox-72.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h.aarch64-skia firefox-72.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h
|
|
||||||
--- firefox-72.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h.aarch64-skia 2020-01-03 09:00:37.538296107 +0100
|
|
||||||
+++ firefox-72.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h 2020-01-03 10:11:53.513250979 +0100
|
|
||||||
@@ -183,8 +183,6 @@ SI F F_from_Half(U16 half) {
|
|
||||||
SI U16 Half_from_F(F f) {
|
|
||||||
#if defined(USING_NEON_FP16)
|
|
||||||
return bit_pun<U16>(f);
|
|
||||||
-#elif 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 );
|
|
||||||
#elif defined(USING_AVX_F16C)
|
|
@ -1,12 +0,0 @@
|
|||||||
diff -up firefox-73.0/media/libaom/moz.build.old firefox-73.0/media/libaom/moz.build
|
|
||||||
--- firefox-73.0/media/libaom/moz.build.old 2020-02-07 23:13:28.000000000 +0200
|
|
||||||
+++ firefox-73.0/media/libaom/moz.build 2020-02-17 10:30:08.509805092 +0200
|
|
||||||
@@ -55,7 +55,7 @@ elif CONFIG['CPU_ARCH'] == 'arm':
|
|
||||||
|
|
||||||
for f in SOURCES:
|
|
||||||
if f.endswith('neon.c'):
|
|
||||||
- SOURCES[f].flags += CONFIG['VPX_ASFLAGS']
|
|
||||||
+ SOURCES[f].flags += CONFIG['NEON_FLAGS']
|
|
||||||
|
|
||||||
if CONFIG['OS_TARGET'] == 'Android':
|
|
||||||
# For cpu-features.h
|
|
@ -1,12 +0,0 @@
|
|||||||
diff -up firefox-66.0/media/libopus/silk/arm/arm_silk_map.c.old firefox-66.0/media/libopus/silk/arm/arm_silk_map.c
|
|
||||||
--- firefox-66.0/media/libopus/silk/arm/arm_silk_map.c.old 2019-03-12 21:07:35.356677522 +0100
|
|
||||||
+++ firefox-66.0/media/libopus/silk/arm/arm_silk_map.c 2019-03-12 21:07:42.937693394 +0100
|
|
||||||
@@ -28,7 +28,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
# include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#include "main_FIX.h"
|
|
||||||
+#include "fixed/main_FIX.h"
|
|
||||||
#include "NSQ.h"
|
|
||||||
#include "SigProc_FIX.h"
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
diff -up firefox-72.0.2/js/src/wasm/WasmSignalHandlers.cpp.old firefox-72.0.2/js/src/wasm/WasmSignalHandlers.cpp
|
|
||||||
--- firefox-72.0.2/js/src/wasm/WasmSignalHandlers.cpp.old 2020-01-17 23:34:41.000000000 +0200
|
|
||||||
+++ firefox-72.0.2/js/src/wasm/WasmSignalHandlers.cpp 2020-02-02 08:07:54.670341986 +0200
|
|
||||||
@@ -249,7 +249,16 @@ using mozilla::DebugOnly;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
|
|
||||||
-# include <sys/user.h>
|
|
||||||
+struct user_vfp {
|
|
||||||
+ unsigned long long fpregs[32];
|
|
||||||
+ unsigned long fpscr;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct user_vfp_exc {
|
|
||||||
+ unsigned long fpexc;
|
|
||||||
+ unsigned long fpinst;
|
|
||||||
+ unsigned long fpinst2;
|
|
||||||
+};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(ANDROID)
|
|
@ -1,13 +0,0 @@
|
|||||||
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
|
|
File diff suppressed because it is too large
Load Diff
@ -1,12 +0,0 @@
|
|||||||
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)
|
|
@ -1,51 +0,0 @@
|
|||||||
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
|
|
@ -1,25 +0,0 @@
|
|||||||
diff -up firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le firefox-55.0/build/moz.configure/rust.configure
|
|
||||||
--- firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le 2017-07-31 18:20:49.000000000 +0200
|
|
||||||
+++ firefox-55.0/build/moz.configure/rust.configure 2017-08-02 10:19:03.254220003 +0200
|
|
||||||
@@ -151,6 +151,9 @@ def rust_triple_alias(host_or_target):
|
|
||||||
('sparc64', 'Linux'): 'sparc64-unknown-linux-gnu',
|
|
||||||
('x86', 'Linux'): 'i686-unknown-linux-gnu',
|
|
||||||
('x86_64', 'Linux'): 'x86_64-unknown-linux-gnu',
|
|
||||||
+ ('ppc64le', 'Linux'): 'powerpc64le-unknown-linux-gnu',
|
|
||||||
+ ('ppc64', 'Linux'): 'powerpc64-unknown-linux-gnu',
|
|
||||||
+ ('s390x', 'Linux'): 's390x-unknown-linux-gnu',
|
|
||||||
# OS X
|
|
||||||
('x86', 'OSX'): 'i686-apple-darwin',
|
|
||||||
('x86_64', 'OSX'): 'x86_64-apple-darwin',
|
|
||||||
@@ -174,8 +177,10 @@ def rust_triple_alias(host_or_target):
|
|
||||||
('sparc64', 'SunOS'): 'sparcv9-sun-solaris',
|
|
||||||
}.get((host_or_target.cpu, os_or_kernel), None)
|
|
||||||
|
|
||||||
+ if (rustc_target == 'powerpc64-unknown-linux-gnu' and host_or_target.endianness == 'little'):
|
|
||||||
+ rustc_target = 'powerpc64le-unknown-linux-gnu'
|
|
||||||
if rustc_target is None:
|
|
||||||
- die("Don't know how to translate {} for rustc".format(host_or_target.alias))
|
|
||||||
+ die("Don't know how to translate {} for rustc, cpu: {}, os: {}".format(target.alias, target.cpu, os_or_kernel))
|
|
||||||
|
|
||||||
# Check to see whether our rustc has a reasonably functional stdlib
|
|
||||||
# for our chosen target.
|
|
@ -1,39 +0,0 @@
|
|||||||
diff -up firefox-81.0/toolkit/modules/GMPInstallManager.jsm.old firefox-81.0/toolkit/modules/GMPInstallManager.jsm
|
|
||||||
--- firefox-81.0/toolkit/modules/GMPInstallManager.jsm.old 2020-09-25 10:39:04.769458703 +0200
|
|
||||||
+++ firefox-81.0/toolkit/modules/GMPInstallManager.jsm 2020-09-25 10:39:22.038504747 +0200
|
|
||||||
@@ -54,10 +54,6 @@ function getScopedLogger(prefix) {
|
|
||||||
|
|
||||||
const LOCAL_GMP_SOURCES = [
|
|
||||||
{
|
|
||||||
- id: "gmp-gmpopenh264",
|
|
||||||
- src: "chrome://global/content/gmp-sources/openh264.json",
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
id: "gmp-widevinecdm",
|
|
||||||
src: "chrome://global/content/gmp-sources/widevinecdm.json",
|
|
||||||
},
|
|
||||||
diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
|
|
||||||
--- a/toolkit/content/jar.mn
|
|
||||||
+++ b/toolkit/content/jar.mn
|
|
||||||
@@ -108,7 +108,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)
|
|
||||||
|
|
||||||
# Third party files
|
|
||||||
diff --git a/toolkit/modules/GMPInstallManager.jsm b/toolkit/modules/GMPInstallManager.jsm
|
|
||||||
--- a/toolkit/modules/GMPInstallManager.jsm
|
|
||||||
+++ b/toolkit/modules/GMPInstallManager.jsm
|
|
||||||
@@ -238,6 +234,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");
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
|||||||
[Global]
|
[Global]
|
||||||
id=fedora
|
id=redhat
|
||||||
version=1.0
|
version=1.0
|
||||||
about=Mozilla Firefox for Fedora
|
about=Mozilla Firefox for Red Hat Enterprise Linux
|
||||||
|
|
||||||
[Preferences]
|
[Preferences]
|
||||||
app.distributor=fedora
|
app.distributor=redhat
|
||||||
app.distributor.channel=fedora
|
app.distributor.channel=redhat
|
||||||
app.partner.fedora=fedora
|
app.partner.fedora=redhat
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
diff -up firefox-54.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-54.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
|
|
||||||
diff -up firefox-54.0/media/mtransport/third_party/nICEr/nicer.gyp.old firefox-54.0/media/mtransport/third_party/nICEr/nicer.gyp
|
|
||||||
--- firefox-54.0/media/mtransport/third_party/nICEr/nicer.gyp.old 2017-06-08 14:59:08.786996664 +0200
|
|
||||||
+++ firefox-54.0/media/mtransport/third_party/nICEr/nicer.gyp 2017-06-08 14:59:22.642946570 +0200
|
|
||||||
@@ -211,7 +211,6 @@
|
|
||||||
'-Wno-parentheses',
|
|
||||||
'-Wno-strict-prototypes',
|
|
||||||
'-Wmissing-prototypes',
|
|
||||||
- '-Wno-format',
|
|
||||||
],
|
|
||||||
'defines' : [
|
|
||||||
'LINUX',
|
|
||||||
diff -up firefox-54.0/media/mtransport/third_party/nrappkit/nrappkit.gyp.build firefox-54.0/media/mtransport/third_party/nrappkit/nrappkit.gyp
|
|
||||||
--- firefox-54.0/media/mtransport/third_party/nrappkit/nrappkit.gyp.build 2017-06-08 15:08:03.627063097 +0200
|
|
||||||
+++ firefox-54.0/media/mtransport/third_party/nrappkit/nrappkit.gyp 2017-06-08 15:08:15.657019606 +0200
|
|
||||||
@@ -206,7 +206,6 @@
|
|
||||||
'-Wno-parentheses',
|
|
||||||
'-Wno-strict-prototypes',
|
|
||||||
'-Wmissing-prototypes',
|
|
||||||
- '-Wno-format',
|
|
||||||
],
|
|
||||||
'defines' : [
|
|
||||||
'LINUX',
|
|
@ -1,9 +0,0 @@
|
|||||||
diff -up firefox-73.0/build/unix/run-mozilla.sh.old firefox-73.0/build/unix/run-mozilla.sh
|
|
||||||
--- firefox-73.0/build/unix/run-mozilla.sh.old 2020-02-12 09:58:00.150895904 +0100
|
|
||||||
+++ firefox-73.0/build/unix/run-mozilla.sh 2020-02-12 09:58:06.505860696 +0100
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-#!/bin/sh
|
|
||||||
+#!/usr/bin/sh
|
|
||||||
#
|
|
||||||
# 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
|
|
@ -1,29 +0,0 @@
|
|||||||
diff -up firefox-81.0/dom/media/platforms/PDMFactory.cpp.firefox-disable-ffvpx-with-vapi firefox-81.0/dom/media/platforms/PDMFactory.cpp
|
|
||||||
--- firefox-81.0/dom/media/platforms/PDMFactory.cpp.firefox-disable-ffvpx-with-vapi 2020-09-17 02:32:43.000000000 +0200
|
|
||||||
+++ firefox-81.0/dom/media/platforms/PDMFactory.cpp 2020-09-21 10:30:29.393903183 +0200
|
|
||||||
@@ -371,12 +371,6 @@ void PDMFactory::CreatePDMs() {
|
|
||||||
StartupPDM(m);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
-#ifdef MOZ_FFVPX
|
|
||||||
- if (StaticPrefs::media_ffvpx_enabled()) {
|
|
||||||
- m = FFVPXRuntimeLinker::CreateDecoderModule();
|
|
||||||
- StartupPDM(m);
|
|
||||||
- }
|
|
||||||
-#endif
|
|
||||||
#ifdef MOZ_FFMPEG
|
|
||||||
if (StaticPrefs::media_ffmpeg_enabled()) {
|
|
||||||
m = FFmpegRuntimeLinker::CreateDecoderModule();
|
|
||||||
@@ -385,6 +379,12 @@ void PDMFactory::CreatePDMs() {
|
|
||||||
mFFmpegFailedToLoad = false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
+#ifdef MOZ_FFVPX
|
|
||||||
+ if (StaticPrefs::media_ffvpx_enabled()) {
|
|
||||||
+ m = FFVPXRuntimeLinker::CreateDecoderModule();
|
|
||||||
+ StartupPDM(m);
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
#ifdef MOZ_WIDGET_ANDROID
|
|
||||||
if (StaticPrefs::media_android_media_codec_enabled()) {
|
|
||||||
m = new AndroidDecoderModule();
|
|
@ -1,19 +0,0 @@
|
|||||||
diff -up firefox-65.0/netwerk/protocol/http/nsHttpHandler.cpp.fedora-ua firefox-65.0/netwerk/protocol/http/nsHttpHandler.cpp
|
|
||||||
--- firefox-65.0/netwerk/protocol/http/nsHttpHandler.cpp.fedora-ua 2019-01-28 14:28:35.806375063 +0100
|
|
||||||
+++ firefox-65.0/netwerk/protocol/http/nsHttpHandler.cpp 2019-01-28 14:30:25.886917219 +0100
|
|
||||||
@@ -873,6 +873,7 @@ void nsHttpHandler::BuildUserAgent() {
|
|
||||||
mUserAgent.SetCapacity(mLegacyAppName.Length() + mLegacyAppVersion.Length() +
|
|
||||||
#ifndef UA_SPARE_PLATFORM
|
|
||||||
mPlatform.Length() +
|
|
||||||
+ mPlatform.Length() + 8 +
|
|
||||||
#endif
|
|
||||||
mOscpu.Length() + mMisc.Length() + mProduct.Length() +
|
|
||||||
mProductSub.Length() + mAppName.Length() +
|
|
||||||
@@ -891,6 +892,7 @@ void nsHttpHandler::BuildUserAgent() {
|
|
||||||
if (!mPlatform.IsEmpty()) {
|
|
||||||
mUserAgent += mPlatform;
|
|
||||||
mUserAgent.AppendLiteral("; ");
|
|
||||||
+ mUserAgent.AppendLiteral("Fedora; ");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (!mCompatDevice.IsEmpty()) {
|
|
@ -1,38 +0,0 @@
|
|||||||
--- firefox-80.0.1/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h 2020-08-31 10:04:19.000000000 -0400
|
|
||||||
+++ firefox-80.0.1/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h 2020-09-12 07:24:35.298931628 -0400
|
|
||||||
@@ -1962,7 +1962,7 @@ struct kernel_statfs {
|
|
||||||
LSS_ENTRYPOINT \
|
|
||||||
"pop %%ebx" \
|
|
||||||
args \
|
|
||||||
- : "esp", "memory"); \
|
|
||||||
+ : "memory"); \
|
|
||||||
LSS_RETURN(type,__res)
|
|
||||||
#undef _syscall0
|
|
||||||
#define _syscall0(type,name) \
|
|
||||||
@@ -2019,7 +2019,7 @@ struct kernel_statfs {
|
|
||||||
: "i" (__NR_##name), "ri" ((long)(arg1)), \
|
|
||||||
"c" ((long)(arg2)), "d" ((long)(arg3)), \
|
|
||||||
"S" ((long)(arg4)), "D" ((long)(arg5)) \
|
|
||||||
- : "esp", "memory"); \
|
|
||||||
+ : "memory"); \
|
|
||||||
LSS_RETURN(type,__res); \
|
|
||||||
}
|
|
||||||
#undef _syscall6
|
|
||||||
@@ -2041,7 +2041,7 @@ struct kernel_statfs {
|
|
||||||
: "i" (__NR_##name), "0" ((long)(&__s)), \
|
|
||||||
"c" ((long)(arg2)), "d" ((long)(arg3)), \
|
|
||||||
"S" ((long)(arg4)), "D" ((long)(arg5)) \
|
|
||||||
- : "esp", "memory"); \
|
|
||||||
+ : "memory"); \
|
|
||||||
LSS_RETURN(type,__res); \
|
|
||||||
}
|
|
||||||
LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack,
|
|
||||||
@@ -2127,7 +2127,7 @@ struct kernel_statfs {
|
|
||||||
: "0"(-EINVAL), "i"(__NR_clone),
|
|
||||||
"m"(fn), "m"(child_stack), "m"(flags), "m"(arg),
|
|
||||||
"m"(parent_tidptr), "m"(newtls), "m"(child_tidptr)
|
|
||||||
- : "esp", "memory", "ecx", "edx", "esi", "edi");
|
|
||||||
+ : "memory", "ecx", "edx", "esi", "edi");
|
|
||||||
LSS_RETURN(int, __res);
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
|||||||
diff -up firefox-75.0/intl/locale/LocaleService.cpp.locale-debug firefox-75.0/intl/locale/LocaleService.cpp
|
|
||||||
--- firefox-75.0/intl/locale/LocaleService.cpp.locale-debug 2020-04-06 22:42:20.196799809 +0200
|
|
||||||
+++ firefox-75.0/intl/locale/LocaleService.cpp 2020-04-06 22:43:02.522530317 +0200
|
|
||||||
@@ -372,8 +372,6 @@ LocaleService::GetDefaultLocale(nsACStri
|
|
||||||
// just use our hard-coded default below.
|
|
||||||
GetGREFileContents("update.locale", &locale);
|
|
||||||
locale.Trim(" \t\n\r");
|
|
||||||
- // This should never be empty.
|
|
||||||
- MOZ_ASSERT(!locale.IsEmpty());
|
|
||||||
if (CanonicalizeLanguageId(locale)) {
|
|
||||||
mDefaultLocale.Assign(locale);
|
|
||||||
}
|
|
@ -1,20 +1,23 @@
|
|||||||
. $topsrcdir/browser/config/mozconfig
|
. $topsrcdir/browser/config/mozconfig
|
||||||
|
|
||||||
|
ac_add_options --enable-default-toolkit=cairo-gtk3
|
||||||
|
|
||||||
|
ac_add_options --prefix="$PREFIX"
|
||||||
|
ac_add_options --libdir="$LIBDIR"
|
||||||
ac_add_options --with-system-zlib
|
ac_add_options --with-system-zlib
|
||||||
ac_add_options --disable-strip
|
ac_add_options --disable-strip
|
||||||
|
ac_add_options --disable-tests
|
||||||
#ac_add_options --enable-libnotify
|
#ac_add_options --enable-libnotify
|
||||||
ac_add_options --enable-necko-wifi
|
ac_add_options --enable-necko-wifi
|
||||||
ac_add_options --disable-updater
|
ac_add_options --disable-updater
|
||||||
ac_add_options --enable-chrome-format=omni
|
ac_add_options --enable-chrome-format=omni
|
||||||
ac_add_options --enable-pulseaudio
|
ac_add_options --enable-pulseaudio
|
||||||
ac_add_options --enable-av1
|
ac_add_options --with-system-icu
|
||||||
ac_add_options --without-system-icu
|
ac_add_options --with-mozilla-api-keyfile=../mozilla-api-key
|
||||||
ac_add_options --enable-release
|
ac_add_options --with-google-location-service-api-keyfile=../google-api-key
|
||||||
ac_add_options --update-channel=release
|
ac_add_options --with-google-safebrowsing-api-keyfile=../google-api-key
|
||||||
# Workaround for mozbz#1341234
|
ac_add_options --disable-av1
|
||||||
ac_add_options BINDGEN_CFLAGS="$(pkg-config nspr pixman-1 --cflags)"
|
|
||||||
ac_add_options --allow-addon-sideload
|
ac_add_options --allow-addon-sideload
|
||||||
ac_add_options --with-system-fdk-aac
|
|
||||||
|
|
||||||
export BUILD_OFFICIAL=1
|
export BUILD_OFFICIAL=1
|
||||||
export MOZILLA_OFFICIAL=1
|
export MOZILLA_OFFICIAL=1
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
diff -up firefox-78.0/toolkit/moz.configure.nss-version firefox-78.0/toolkit/moz.configure
|
|
||||||
--- firefox-78.0/toolkit/moz.configure.nss-version 2020-06-30 08:47:09.657501414 +0200
|
|
||||||
+++ firefox-78.0/toolkit/moz.configure 2020-06-30 08:47:12.652510169 +0200
|
|
||||||
@@ -2089,7 +2089,7 @@ option('--with-system-nss', help='Use sy
|
|
||||||
|
|
||||||
imply_option('--with-system-nspr', True, when='--with-system-nss')
|
|
||||||
|
|
||||||
-nss_pkg = pkg_check_modules('NSS', 'nss >= 3.53.1', when='--with-system-nss', config=False)
|
|
||||||
+nss_pkg = pkg_check_modules('NSS', 'nss >= 3.53.0', when='--with-system-nss', config=False)
|
|
||||||
|
|
||||||
set_config('MOZ_SYSTEM_NSS', True, when='--with-system-nss')
|
|
||||||
|
|
@ -1,526 +0,0 @@
|
|||||||
diff -up firefox-79.0/config/system-headers.mozbuild.firefox-pipewire-0-2 firefox-79.0/config/system-headers.mozbuild
|
|
||||||
--- firefox-79.0/config/system-headers.mozbuild.firefox-pipewire-0-2 2020-07-21 00:49:36.000000000 +0200
|
|
||||||
+++ firefox-79.0/config/system-headers.mozbuild 2020-07-29 11:03:51.455284187 +0200
|
|
||||||
@@ -314,6 +314,7 @@ system_headers = [
|
|
||||||
'Gestalt.h',
|
|
||||||
'getopt.h',
|
|
||||||
'gio/gio.h',
|
|
||||||
+ 'gio/gunixfdlist.h',
|
|
||||||
'glibconfig.h',
|
|
||||||
'glib.h',
|
|
||||||
'glib-object.h',
|
|
||||||
@@ -607,6 +608,7 @@ system_headers = [
|
|
||||||
'Pgenerr.h',
|
|
||||||
'PGenErr.h',
|
|
||||||
'Ph.h',
|
|
||||||
+ 'pipewire/pipewire.h',
|
|
||||||
'pixman.h',
|
|
||||||
'pk11func.h',
|
|
||||||
'pk11pqg.h',
|
|
||||||
diff -up firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build.firefox-pipewire-0-2 firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
|
|
||||||
--- firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build.firefox-pipewire-0-2 2020-07-29 11:03:51.455284187 +0200
|
|
||||||
+++ firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build 2020-07-29 11:04:40.898017241 +0200
|
|
||||||
@@ -231,6 +231,27 @@ if CONFIG["OS_TARGET"] == "OpenBSD":
|
|
||||||
"/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc"
|
|
||||||
]
|
|
||||||
|
|
||||||
+# PipeWire specific files
|
|
||||||
+if CONFIG["OS_TARGET"] == "Linux":
|
|
||||||
+
|
|
||||||
+ DEFINES["WEBRTC_USE_PIPEWIRE"] = "1"
|
|
||||||
+
|
|
||||||
+ OS_LIBS += [
|
|
||||||
+ "rt",
|
|
||||||
+ "pipewire-0.2",
|
|
||||||
+ "glib-2.0",
|
|
||||||
+ "gio-2.0",
|
|
||||||
+ "gobject-2.0"
|
|
||||||
+ ]
|
|
||||||
+
|
|
||||||
+ CXXFLAGS += CONFIG['TK_CFLAGS']
|
|
||||||
+
|
|
||||||
+ UNIFIED_SOURCES += [
|
|
||||||
+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc",
|
|
||||||
+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc",
|
|
||||||
+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc"
|
|
||||||
+ ]
|
|
||||||
+
|
|
||||||
if CONFIG["OS_TARGET"] == "WINNT":
|
|
||||||
|
|
||||||
DEFINES["CERT_CHAIN_PARA_HAS_EXTRA_FIELDS"] = True
|
|
||||||
diff -up firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h.firefox-pipewire-0-2 firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
|
|
||||||
--- firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h.firefox-pipewire-0-2 2020-07-20 22:54:16.000000000 +0200
|
|
||||||
+++ firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h 2020-07-29 11:03:51.456284181 +0200
|
|
||||||
@@ -141,7 +141,7 @@ class DesktopCaptureOptions {
|
|
||||||
bool disable_effects_ = true;
|
|
||||||
bool detect_updated_region_ = false;
|
|
||||||
#if defined(WEBRTC_USE_PIPEWIRE)
|
|
||||||
- bool allow_pipewire_ = false;
|
|
||||||
+ bool allow_pipewire_ = true;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
diff -up firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc.firefox-pipewire-0-2 firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
|
||||||
--- firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc.firefox-pipewire-0-2 2020-07-20 22:54:27.000000000 +0200
|
|
||||||
+++ firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc 2020-07-29 11:03:51.618283306 +0200
|
|
||||||
@@ -18,6 +18,11 @@
|
|
||||||
#include <spa/param/video/raw-utils.h>
|
|
||||||
#include <spa/support/type-map.h>
|
|
||||||
|
|
||||||
+#include <linux/dma-buf.h>
|
|
||||||
+#include <sys/mman.h>
|
|
||||||
+#include <sys/ioctl.h>
|
|
||||||
+#include <sys/syscall.h>
|
|
||||||
+
|
|
||||||
#include <memory>
|
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
@@ -36,6 +41,27 @@ const char kSessionInterfaceName[] = "or
|
|
||||||
const char kRequestInterfaceName[] = "org.freedesktop.portal.Request";
|
|
||||||
const char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast";
|
|
||||||
|
|
||||||
+
|
|
||||||
+// static
|
|
||||||
+void BaseCapturerPipeWire::SyncDmaBuf(int fd, uint64_t start_or_end) {
|
|
||||||
+ struct dma_buf_sync sync = { 0 };
|
|
||||||
+
|
|
||||||
+ sync.flags = start_or_end | DMA_BUF_SYNC_READ;
|
|
||||||
+
|
|
||||||
+ while(true) {
|
|
||||||
+ int ret;
|
|
||||||
+ ret = ioctl (fd, DMA_BUF_IOCTL_SYNC, &sync);
|
|
||||||
+ if (ret == -1 && errno == EINTR) {
|
|
||||||
+ continue;
|
|
||||||
+ } else if (ret == -1) {
|
|
||||||
+ RTC_LOG(LS_ERROR) << "Failed to synchronize DMA buffer: " << g_strerror(errno);
|
|
||||||
+ break;
|
|
||||||
+ } else {
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
// static
|
|
||||||
void BaseCapturerPipeWire::OnStateChanged(void* data,
|
|
||||||
pw_remote_state old_state,
|
|
||||||
@@ -108,11 +134,13 @@ void BaseCapturerPipeWire::OnStreamForma
|
|
||||||
auto stride = SPA_ROUND_UP_N(width * kBytesPerPixel, 4);
|
|
||||||
auto size = height * stride;
|
|
||||||
|
|
||||||
+ that->desktop_size_ = DesktopSize(width, height);
|
|
||||||
+
|
|
||||||
uint8_t buffer[1024] = {};
|
|
||||||
auto builder = spa_pod_builder{buffer, sizeof(buffer)};
|
|
||||||
|
|
||||||
// Setup buffers and meta header for new format.
|
|
||||||
- const struct spa_pod* params[2];
|
|
||||||
+ const struct spa_pod* params[3];
|
|
||||||
params[0] = reinterpret_cast<spa_pod*>(spa_pod_builder_object(
|
|
||||||
&builder,
|
|
||||||
// id to enumerate buffer requirements
|
|
||||||
@@ -141,8 +169,14 @@ void BaseCapturerPipeWire::OnStreamForma
|
|
||||||
// Size: size of the metadata, specified as integer (i)
|
|
||||||
":", that->pw_core_type_->param_meta.size, "i",
|
|
||||||
sizeof(struct spa_meta_header)));
|
|
||||||
-
|
|
||||||
- pw_stream_finish_format(that->pw_stream_, /*res=*/0, params, /*n_params=*/2);
|
|
||||||
+ params[2] = reinterpret_cast<spa_pod*>(
|
|
||||||
+ spa_pod_builder_object(&builder, that->pw_core_type_->param.idMeta,
|
|
||||||
+ that->pw_core_type_->param_meta.Meta, ":",
|
|
||||||
+ that->pw_core_type_->param_meta.type, "I",
|
|
||||||
+ that->pw_core_type_->meta.VideoCrop, ":",
|
|
||||||
+ that->pw_core_type_->param_meta.size, "i",
|
|
||||||
+ sizeof(struct spa_meta_video_crop)));
|
|
||||||
+ pw_stream_finish_format(that->pw_stream_, /*res=*/0, params, /*n_params=*/3);
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
@@ -150,15 +184,25 @@ void BaseCapturerPipeWire::OnStreamProce
|
|
||||||
BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
|
|
||||||
RTC_DCHECK(that);
|
|
||||||
|
|
||||||
- pw_buffer* buf = nullptr;
|
|
||||||
+ struct pw_buffer *next_buffer;
|
|
||||||
+ struct pw_buffer *buffer = nullptr;
|
|
||||||
|
|
||||||
- if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) {
|
|
||||||
+ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
|
|
||||||
+ while (next_buffer) {
|
|
||||||
+ buffer = next_buffer;
|
|
||||||
+ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
|
|
||||||
+
|
|
||||||
+ if (next_buffer)
|
|
||||||
+ pw_stream_queue_buffer (that->pw_stream_, buffer);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!buffer) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- that->HandleBuffer(buf);
|
|
||||||
+ that->HandleBuffer(buffer);
|
|
||||||
|
|
||||||
- pw_stream_queue_buffer(that->pw_stream_, buf);
|
|
||||||
+ pw_stream_queue_buffer(that->pw_stream_, buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type)
|
|
||||||
@@ -197,10 +241,6 @@ BaseCapturerPipeWire::~BaseCapturerPipeW
|
|
||||||
pw_loop_destroy(pw_loop_);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (current_frame_) {
|
|
||||||
- free(current_frame_);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
if (start_request_signal_id_) {
|
|
||||||
g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_);
|
|
||||||
}
|
|
||||||
@@ -290,12 +330,7 @@ void BaseCapturerPipeWire::InitPipeWireT
|
|
||||||
|
|
||||||
void BaseCapturerPipeWire::CreateReceivingStream() {
|
|
||||||
spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1};
|
|
||||||
- spa_rectangle pwScreenBounds =
|
|
||||||
- spa_rectangle{static_cast<uint32_t>(desktop_size_.width()),
|
|
||||||
- static_cast<uint32_t>(desktop_size_.height())};
|
|
||||||
-
|
|
||||||
- spa_fraction pwFrameRateMin = spa_fraction{0, 1};
|
|
||||||
- spa_fraction pwFrameRateMax = spa_fraction{60, 1};
|
|
||||||
+ spa_rectangle pwMaxScreenBounds = spa_rectangle{INT32_MAX, INT32_MAX};
|
|
||||||
|
|
||||||
pw_properties* reuseProps = pw_properties_new("pipewire.client.reuse", "1",
|
|
||||||
/*end of varargs*/ nullptr);
|
|
||||||
@@ -313,27 +348,19 @@ void BaseCapturerPipeWire::CreateReceivi
|
|
||||||
// then allowed formats are enumerated (e) and the format is undecided (u)
|
|
||||||
// to allow negotiation
|
|
||||||
":", pw_type_->format_video.format, "Ieu", pw_type_->video_format.BGRx,
|
|
||||||
- SPA_POD_PROP_ENUM(2, pw_type_->video_format.RGBx,
|
|
||||||
- pw_type_->video_format.BGRx),
|
|
||||||
+ SPA_POD_PROP_ENUM(
|
|
||||||
+ 4, pw_type_->video_format.RGBx, pw_type_->video_format.BGRx,
|
|
||||||
+ pw_type_->video_format.RGBA, pw_type_->video_format.BGRA),
|
|
||||||
// Video size: specified as rectangle (R), preferred size is specified as
|
|
||||||
// first parameter, then allowed size is defined as range (r) from min and
|
|
||||||
// max values and the format is undecided (u) to allow negotiation
|
|
||||||
- ":", pw_type_->format_video.size, "Rru", &pwScreenBounds, 2,
|
|
||||||
- &pwMinScreenBounds, &pwScreenBounds,
|
|
||||||
- // Frame rate: specified as fraction (F) and set to minimum frame rate
|
|
||||||
- // value
|
|
||||||
- ":", pw_type_->format_video.framerate, "F", &pwFrameRateMin,
|
|
||||||
- // Max frame rate: specified as fraction (F), preferred frame rate is set
|
|
||||||
- // to maximum value, then allowed frame rate is defined as range (r) from
|
|
||||||
- // min and max values and it is undecided (u) to allow negotiation
|
|
||||||
- ":", pw_type_->format_video.max_framerate, "Fru", &pwFrameRateMax, 2,
|
|
||||||
- &pwFrameRateMin, &pwFrameRateMax));
|
|
||||||
+ ":", pw_type_->format_video.size, "Rru", &pwMinScreenBounds,
|
|
||||||
+ SPA_POD_PROP_MIN_MAX(&pwMinScreenBounds, &pwMaxScreenBounds)));
|
|
||||||
|
|
||||||
pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_,
|
|
||||||
this);
|
|
||||||
pw_stream_flags flags = static_cast<pw_stream_flags>(
|
|
||||||
- PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE |
|
|
||||||
- PW_STREAM_FLAG_MAP_BUFFERS);
|
|
||||||
+ PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE);
|
|
||||||
if (pw_stream_connect(pw_stream_, PW_DIRECTION_INPUT, /*port_path=*/nullptr,
|
|
||||||
flags, params,
|
|
||||||
/*n_params=*/1) != 0) {
|
|
||||||
@@ -344,15 +371,81 @@ void BaseCapturerPipeWire::CreateReceivi
|
|
||||||
}
|
|
||||||
|
|
||||||
void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) {
|
|
||||||
+ struct spa_meta_video_crop* video_crop;
|
|
||||||
spa_buffer* spaBuffer = buffer->buffer;
|
|
||||||
- void* src = nullptr;
|
|
||||||
+ uint8_t *map = nullptr;
|
|
||||||
+ uint8_t* src = nullptr;
|
|
||||||
+ uint8_t* dst = nullptr;
|
|
||||||
+
|
|
||||||
+ if (spaBuffer->datas[0].chunk->size == 0) {
|
|
||||||
+ map = nullptr;
|
|
||||||
+ src = nullptr;
|
|
||||||
+ } else if (spaBuffer->datas[0].type == pw_core_type_->data.MemFd) {
|
|
||||||
+ map = static_cast<uint8_t*>(mmap(
|
|
||||||
+ nullptr, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset,
|
|
||||||
+ PROT_READ, MAP_PRIVATE, spaBuffer->datas[0].fd, 0));
|
|
||||||
+ src = SPA_MEMBER(map, spaBuffer->datas[0].mapoffset, uint8_t);
|
|
||||||
+ } else if (spaBuffer->datas[0].type == pw_core_type_->data.DmaBuf) {
|
|
||||||
+ int fd;
|
|
||||||
+ fd = spaBuffer->datas[0].fd;
|
|
||||||
+
|
|
||||||
+ map = static_cast<uint8_t*>(mmap(
|
|
||||||
+ nullptr, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset,
|
|
||||||
+ PROT_READ, MAP_PRIVATE, fd, 0));
|
|
||||||
+ SyncDmaBuf(fd, DMA_BUF_SYNC_START);
|
|
||||||
+
|
|
||||||
+ src = SPA_MEMBER(map, spaBuffer->datas[0].mapoffset, uint8_t);
|
|
||||||
+ } else if (spaBuffer->datas[0].type == pw_core_type_->data.MemPtr) {
|
|
||||||
+ map = nullptr;
|
|
||||||
+ src = static_cast<uint8_t*>(spaBuffer->datas[0].data);
|
|
||||||
+ } else {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (!(src = spaBuffer->datas[0].data)) {
|
|
||||||
+ if (!src) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- uint32_t maxSize = spaBuffer->datas[0].maxsize;
|
|
||||||
- int32_t srcStride = spaBuffer->datas[0].chunk->stride;
|
|
||||||
+ DesktopSize prev_crop_size = DesktopSize(0, 0);
|
|
||||||
+ if (video_crop_size_initialized_) {
|
|
||||||
+ prev_crop_size = video_crop_size_;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if ((video_crop = static_cast<struct spa_meta_video_crop*>(
|
|
||||||
+ spa_buffer_find_meta(spaBuffer, pw_core_type_->meta.VideoCrop)))) {
|
|
||||||
+ RTC_DCHECK(video_crop->width <= desktop_size_.width() &&
|
|
||||||
+ video_crop->height <= desktop_size_.height());
|
|
||||||
+ if ((video_crop->width != desktop_size_.width() ||
|
|
||||||
+ video_crop->height != desktop_size_.height()) && video_crop->width && video_crop->height) {
|
|
||||||
+ video_crop_size_ = DesktopSize(video_crop->width, video_crop->height);
|
|
||||||
+ video_crop_size_initialized_ = true;
|
|
||||||
+ } else {
|
|
||||||
+ video_crop_size_initialized_ = false;
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ video_crop_size_initialized_ = false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ size_t frame_size;
|
|
||||||
+ if (video_crop_size_initialized_) {
|
|
||||||
+ frame_size =
|
|
||||||
+ video_crop_size_.width() * video_crop_size_.height() * kBytesPerPixel;
|
|
||||||
+ } else {
|
|
||||||
+ frame_size =
|
|
||||||
+ desktop_size_.width() * desktop_size_.height() * kBytesPerPixel;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!current_frame_ ||
|
|
||||||
+ (video_crop_size_initialized_ && !video_crop_size_.equals(prev_crop_size))) {
|
|
||||||
+ current_frame_ = std::make_unique<uint8_t[]>(frame_size);
|
|
||||||
+ }
|
|
||||||
+ RTC_DCHECK(current_frame_ != nullptr);
|
|
||||||
+
|
|
||||||
+ const int32_t dstStride = video_crop_size_initialized_
|
|
||||||
+ ? video_crop_size_.width() * kBytesPerPixel
|
|
||||||
+ : desktop_size_.width() * kBytesPerPixel;
|
|
||||||
+ const int32_t srcStride = spaBuffer->datas[0].chunk->stride;
|
|
||||||
+
|
|
||||||
if (srcStride != (desktop_size_.width() * kBytesPerPixel)) {
|
|
||||||
RTC_LOG(LS_ERROR) << "Got buffer with stride different from screen stride: "
|
|
||||||
<< srcStride
|
|
||||||
@@ -361,21 +454,39 @@ void BaseCapturerPipeWire::HandleBuffer(
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!current_frame_) {
|
|
||||||
- current_frame_ = static_cast<uint8_t*>(malloc(maxSize));
|
|
||||||
+ dst = current_frame_.get();
|
|
||||||
+
|
|
||||||
+ // Adjust source content based on crop video position
|
|
||||||
+ if (video_crop_size_initialized_ &&
|
|
||||||
+ (video_crop->y + video_crop_size_.height() <= desktop_size_.height())) {
|
|
||||||
+ for (int i = 0; i < video_crop->y; ++i) {
|
|
||||||
+ src += srcStride;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ const int xOffset =
|
|
||||||
+ video_crop_size_initialized_ && (video_crop->x + video_crop_size_.width() <=
|
|
||||||
+ desktop_size_.width())
|
|
||||||
+ ? video_crop->x * kBytesPerPixel
|
|
||||||
+ : 0;
|
|
||||||
+ const int height = video_crop_size_initialized_ ? video_crop_size_.height() : desktop_size_.height();
|
|
||||||
+ for (int i = 0; i < height; ++i) {
|
|
||||||
+ // Adjust source content based on crop video position if needed
|
|
||||||
+ src += xOffset;
|
|
||||||
+ std::memcpy(dst, src, dstStride);
|
|
||||||
+ // If both sides decided to go with the RGBx format we need to convert it to
|
|
||||||
+ // BGRx to match color format expected by WebRTC.
|
|
||||||
+ if (spa_video_format_->format == pw_type_->video_format.RGBx) {
|
|
||||||
+ ConvertRGBxToBGRx(dst, dstStride);
|
|
||||||
+ }
|
|
||||||
+ src += srcStride - xOffset;
|
|
||||||
+ dst += dstStride;
|
|
||||||
}
|
|
||||||
- RTC_DCHECK(current_frame_ != nullptr);
|
|
||||||
|
|
||||||
- // If both sides decided to go with the RGBx format we need to convert it to
|
|
||||||
- // BGRx to match color format expected by WebRTC.
|
|
||||||
- if (spa_video_format_->format == pw_type_->video_format.RGBx) {
|
|
||||||
- uint8_t* tempFrame = static_cast<uint8_t*>(malloc(maxSize));
|
|
||||||
- std::memcpy(tempFrame, src, maxSize);
|
|
||||||
- ConvertRGBxToBGRx(tempFrame, maxSize);
|
|
||||||
- std::memcpy(current_frame_, tempFrame, maxSize);
|
|
||||||
- free(tempFrame);
|
|
||||||
- } else {
|
|
||||||
- std::memcpy(current_frame_, src, maxSize);
|
|
||||||
+ if (map) {
|
|
||||||
+ if (spaBuffer->datas[0].type == pw_core_type_->data.DmaBuf) {
|
|
||||||
+ SyncDmaBuf(spaBuffer->datas[0].fd, DMA_BUF_SYNC_END);
|
|
||||||
+ }
|
|
||||||
+ munmap(map, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -725,10 +836,6 @@ void BaseCapturerPipeWire::OnStartReques
|
|
||||||
g_variant_get(variant, "(u@a{sv})", &stream_id, &options);
|
|
||||||
RTC_DCHECK(options != nullptr);
|
|
||||||
|
|
||||||
- g_variant_lookup(options, "size", "(ii)", &width, &height);
|
|
||||||
-
|
|
||||||
- that->desktop_size_.set(width, height);
|
|
||||||
-
|
|
||||||
g_variant_unref(options);
|
|
||||||
g_variant_unref(variant);
|
|
||||||
}
|
|
||||||
@@ -813,10 +920,15 @@ void BaseCapturerPipeWire::CaptureFrame(
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- std::unique_ptr<DesktopFrame> result(new BasicDesktopFrame(desktop_size_));
|
|
||||||
+ DesktopSize frame_size = desktop_size_;
|
|
||||||
+ if (video_crop_size_initialized_) {
|
|
||||||
+ frame_size = video_crop_size_;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ std::unique_ptr<DesktopFrame> result(new BasicDesktopFrame(frame_size));
|
|
||||||
result->CopyPixelsFrom(
|
|
||||||
- current_frame_, (desktop_size_.width() * kBytesPerPixel),
|
|
||||||
- DesktopRect::MakeWH(desktop_size_.width(), desktop_size_.height()));
|
|
||||||
+ current_frame_.get(), (frame_size.width() * kBytesPerPixel),
|
|
||||||
+ DesktopRect::MakeWH(frame_size.width(), frame_size.height()));
|
|
||||||
if (!result) {
|
|
||||||
callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
|
|
||||||
return;
|
|
||||||
@@ -837,4 +949,22 @@ bool BaseCapturerPipeWire::SelectSource(
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
+// static
|
|
||||||
+std::unique_ptr<DesktopCapturer>
|
|
||||||
+BaseCapturerPipeWire::CreateRawScreenCapturer(
|
|
||||||
+ const DesktopCaptureOptions& options) {
|
|
||||||
+ std::unique_ptr<BaseCapturerPipeWire> capturer =
|
|
||||||
+ std::make_unique<BaseCapturerPipeWire>(BaseCapturerPipeWire::CaptureSourceType::kAny);
|
|
||||||
+ return std::move(capturer);}
|
|
||||||
+
|
|
||||||
+// static
|
|
||||||
+std::unique_ptr<DesktopCapturer>
|
|
||||||
+BaseCapturerPipeWire::CreateRawWindowCapturer(
|
|
||||||
+ const DesktopCaptureOptions& options) {
|
|
||||||
+
|
|
||||||
+ std::unique_ptr<BaseCapturerPipeWire> capturer =
|
|
||||||
+ std::make_unique<BaseCapturerPipeWire>(BaseCapturerPipeWire::CaptureSourceType::kAny);
|
|
||||||
+ return std::move(capturer);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
} // namespace webrtc
|
|
||||||
diff -up firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h.firefox-pipewire-0-2 firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
|
|
||||||
--- firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h.firefox-pipewire-0-2 2020-07-20 22:54:40.000000000 +0200
|
|
||||||
+++ firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h 2020-07-29 11:03:51.619283301 +0200
|
|
||||||
@@ -32,7 +32,11 @@ class PipeWireType {
|
|
||||||
|
|
||||||
class BaseCapturerPipeWire : public DesktopCapturer {
|
|
||||||
public:
|
|
||||||
- enum CaptureSourceType { Screen = 1, Window };
|
|
||||||
+ enum CaptureSourceType : uint32_t {
|
|
||||||
+ kScreen = 0b01,
|
|
||||||
+ kWindow = 0b10,
|
|
||||||
+ kAny = 0b11
|
|
||||||
+ };
|
|
||||||
|
|
||||||
explicit BaseCapturerPipeWire(CaptureSourceType source_type);
|
|
||||||
~BaseCapturerPipeWire() override;
|
|
||||||
@@ -43,6 +47,12 @@ class BaseCapturerPipeWire : public Desk
|
|
||||||
bool GetSourceList(SourceList* sources) override;
|
|
||||||
bool SelectSource(SourceId id) override;
|
|
||||||
|
|
||||||
+ static std::unique_ptr<DesktopCapturer> CreateRawScreenCapturer(
|
|
||||||
+ const DesktopCaptureOptions& options);
|
|
||||||
+
|
|
||||||
+ static std::unique_ptr<DesktopCapturer> CreateRawWindowCapturer(
|
|
||||||
+ const DesktopCaptureOptions& options);
|
|
||||||
+
|
|
||||||
private:
|
|
||||||
// PipeWire types -->
|
|
||||||
pw_core* pw_core_ = nullptr;
|
|
||||||
@@ -64,7 +74,7 @@ class BaseCapturerPipeWire : public Desk
|
|
||||||
gint32 pw_fd_ = -1;
|
|
||||||
|
|
||||||
CaptureSourceType capture_source_type_ =
|
|
||||||
- BaseCapturerPipeWire::CaptureSourceType::Screen;
|
|
||||||
+ BaseCapturerPipeWire::CaptureSourceType::kAny;
|
|
||||||
|
|
||||||
// <-- end of PipeWire types
|
|
||||||
|
|
||||||
@@ -78,10 +88,12 @@ class BaseCapturerPipeWire : public Desk
|
|
||||||
guint sources_request_signal_id_ = 0;
|
|
||||||
guint start_request_signal_id_ = 0;
|
|
||||||
|
|
||||||
+ bool video_crop_size_initialized_ = false;
|
|
||||||
+ DesktopSize video_crop_size_;;
|
|
||||||
DesktopSize desktop_size_ = {};
|
|
||||||
DesktopCaptureOptions options_ = {};
|
|
||||||
|
|
||||||
- uint8_t* current_frame_ = nullptr;
|
|
||||||
+ std::unique_ptr<uint8_t[]> current_frame_;
|
|
||||||
Callback* callback_ = nullptr;
|
|
||||||
|
|
||||||
bool portal_init_failed_ = false;
|
|
||||||
@@ -95,6 +107,7 @@ class BaseCapturerPipeWire : public Desk
|
|
||||||
|
|
||||||
void ConvertRGBxToBGRx(uint8_t* frame, uint32_t size);
|
|
||||||
|
|
||||||
+ static void SyncDmaBuf(int fd, uint64_t start_or_end);
|
|
||||||
static void OnStateChanged(void* data,
|
|
||||||
pw_remote_state old_state,
|
|
||||||
pw_remote_state state,
|
|
||||||
diff -up firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc.firefox-pipewire-0-2 firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
|
|
||||||
--- firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc.firefox-pipewire-0-2 2020-07-20 22:53:57.000000000 +0200
|
|
||||||
+++ firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc 2020-07-29 11:03:51.619283301 +0200
|
|
||||||
@@ -15,7 +15,7 @@
|
|
||||||
namespace webrtc {
|
|
||||||
|
|
||||||
ScreenCapturerPipeWire::ScreenCapturerPipeWire()
|
|
||||||
- : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Screen) {}
|
|
||||||
+ : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::kScreen) {}
|
|
||||||
ScreenCapturerPipeWire::~ScreenCapturerPipeWire() {}
|
|
||||||
|
|
||||||
// static
|
|
||||||
diff -up firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc.firefox-pipewire-0-2 firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
|
|
||||||
--- firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc.firefox-pipewire-0-2 2020-07-20 22:54:18.000000000 +0200
|
|
||||||
+++ firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc 2020-07-29 11:03:51.619283301 +0200
|
|
||||||
@@ -15,7 +15,7 @@
|
|
||||||
namespace webrtc {
|
|
||||||
|
|
||||||
WindowCapturerPipeWire::WindowCapturerPipeWire()
|
|
||||||
- : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Window) {}
|
|
||||||
+ : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::kWindow) {}
|
|
||||||
WindowCapturerPipeWire::~WindowCapturerPipeWire() {}
|
|
||||||
|
|
||||||
// static
|
|
||||||
diff -up firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc.firefox-pipewire-0-2 firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
|
|
||||||
--- firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc.firefox-pipewire-0-2 2020-07-20 22:54:40.000000000 +0200
|
|
||||||
+++ firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc 2020-07-29 11:03:51.620283296 +0200
|
|
||||||
@@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> Desktop
|
|
||||||
const DesktopCaptureOptions& options) {
|
|
||||||
#if defined(WEBRTC_USE_PIPEWIRE)
|
|
||||||
if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) {
|
|
||||||
- return ScreenCapturerPipeWire::CreateRawScreenCapturer(options);
|
|
||||||
+ return BaseCapturerPipeWire::CreateRawScreenCapturer(options);
|
|
||||||
}
|
|
||||||
#endif // defined(WEBRTC_USE_PIPEWIRE)
|
|
||||||
|
|
||||||
diff -up firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc.firefox-pipewire-0-2 firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
|
|
||||||
--- firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc.firefox-pipewire-0-2 2020-07-20 22:53:32.000000000 +0200
|
|
||||||
+++ firefox-79.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc 2020-07-29 11:03:51.620283296 +0200
|
|
||||||
@@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> Desktop
|
|
||||||
const DesktopCaptureOptions& options) {
|
|
||||||
#if defined(WEBRTC_USE_PIPEWIRE)
|
|
||||||
if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) {
|
|
||||||
- return WindowCapturerPipeWire::CreateRawWindowCapturer(options);
|
|
||||||
+ return BaseCapturerPipeWire::CreateRawWindowCapturer(options);
|
|
||||||
}
|
|
||||||
#endif // defined(WEBRTC_USE_PIPEWIRE)
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
|||||||
diff -up firefox-81.0/config/system-headers.mozbuild.firefox-pipewire-0-3 firefox-81.0/config/system-headers.mozbuild
|
diff --git a/config/system-headers.mozbuild b/config/system-headers.mozbuild
|
||||||
--- firefox-81.0/config/system-headers.mozbuild.firefox-pipewire-0-3 2020-09-15 03:48:26.000000000 +0200
|
index 2081d0c683a4..641133bf1ea4 100644
|
||||||
+++ firefox-81.0/config/system-headers.mozbuild 2020-09-15 14:40:00.721481417 +0200
|
--- a/config/system-headers.mozbuild
|
||||||
|
+++ b/config/system-headers.mozbuild
|
||||||
@@ -314,6 +314,7 @@ system_headers = [
|
@@ -314,6 +314,7 @@ system_headers = [
|
||||||
'Gestalt.h',
|
'Gestalt.h',
|
||||||
'getopt.h',
|
'getopt.h',
|
||||||
@ -17,9 +18,10 @@ diff -up firefox-81.0/config/system-headers.mozbuild.firefox-pipewire-0-3 firefo
|
|||||||
'pixman.h',
|
'pixman.h',
|
||||||
'pk11func.h',
|
'pk11func.h',
|
||||||
'pk11pqg.h',
|
'pk11pqg.h',
|
||||||
diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn.firefox-pipewire-0-3 firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
|
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn b/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
|
||||||
--- firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn.firefox-pipewire-0-3 2020-09-15 03:48:32.000000000 +0200
|
index ba885217b3ba..201d3b755221 100644
|
||||||
+++ firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn 2020-09-15 14:40:00.721481417 +0200
|
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
|
||||||
|
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
|
||||||
@@ -158,7 +158,7 @@ if (rtc_include_tests) {
|
@@ -158,7 +158,7 @@ if (rtc_include_tests) {
|
||||||
if (is_linux) {
|
if (is_linux) {
|
||||||
if (rtc_use_pipewire) {
|
if (rtc_use_pipewire) {
|
||||||
@ -29,15 +31,17 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
|
|||||||
|
|
||||||
defines = [ "WEBRTC_USE_PIPEWIRE" ]
|
defines = [ "WEBRTC_USE_PIPEWIRE" ]
|
||||||
}
|
}
|
||||||
diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build.firefox-pipewire-0-3 firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
|
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
|
||||||
--- firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build.firefox-pipewire-0-3 2020-09-15 14:40:00.722481420 +0200
|
index 90b40431c7e4..d844aa79d591 100644
|
||||||
+++ firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build 2020-09-15 14:48:47.454733146 +0200
|
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
|
||||||
@@ -193,6 +193,28 @@ if CONFIG["OS_TARGET"] == "Linux":
|
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
|
||||||
|
@@ -194,6 +194,30 @@ if CONFIG["OS_TARGET"] == "Linux":
|
||||||
"/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc"
|
"/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc"
|
||||||
]
|
]
|
||||||
|
|
||||||
+# PipeWire specific files
|
+# PipeWire specific files
|
||||||
+if CONFIG["OS_TARGET"] == "Linux":
|
+if CONFIG["OS_TARGET"] == "Linux":
|
||||||
|
+
|
||||||
+ DEFINES["WEBRTC_USE_PIPEWIRE"] = "1"
|
+ DEFINES["WEBRTC_USE_PIPEWIRE"] = "1"
|
||||||
+
|
+
|
||||||
+ OS_LIBS += [
|
+ OS_LIBS += [
|
||||||
@ -57,13 +61,15 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_
|
|||||||
+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc",
|
+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc",
|
||||||
+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc"
|
+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc"
|
||||||
+ ]
|
+ ]
|
||||||
|
+
|
||||||
+
|
+
|
||||||
if CONFIG["OS_TARGET"] == "NetBSD":
|
if CONFIG["OS_TARGET"] == "NetBSD":
|
||||||
|
|
||||||
DEFINES["USE_X11"] = "1"
|
DEFINES["USE_X11"] = "1"
|
||||||
diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h.firefox-pipewire-0-3 firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
|
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
|
||||||
--- firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h.firefox-pipewire-0-3 2020-09-15 03:48:32.000000000 +0200
|
index 1eb8ead26efa..316468eed1fc 100644
|
||||||
+++ firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h 2020-09-15 14:40:00.722481420 +0200
|
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
|
||||||
|
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
|
||||||
@@ -141,7 +141,7 @@ class DesktopCaptureOptions {
|
@@ -141,7 +141,7 @@ class DesktopCaptureOptions {
|
||||||
bool disable_effects_ = true;
|
bool disable_effects_ = true;
|
||||||
bool detect_updated_region_ = false;
|
bool detect_updated_region_ = false;
|
||||||
@ -73,9 +79,10 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc.firefox-pipewire-0-3 firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
||||||
--- firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc.firefox-pipewire-0-3 2020-09-15 03:48:32.000000000 +0200
|
index 379341c833de..76349f1fbd4d 100644
|
||||||
+++ firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc 2020-09-15 14:40:00.722481420 +0200
|
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
||||||
|
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
||||||
@@ -15,8 +15,11 @@
|
@@ -15,8 +15,11 @@
|
||||||
|
|
||||||
#include <spa/param/format-utils.h>
|
#include <spa/param/format-utils.h>
|
||||||
@ -90,20 +97,17 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
@@ -36,32 +39,37 @@ const char kSessionInterfaceName[] = "or
|
@@ -36,31 +39,36 @@ const char kSessionInterfaceName[] = "org.freedesktop.portal.Session";
|
||||||
const char kRequestInterfaceName[] = "org.freedesktop.portal.Request";
|
const char kRequestInterfaceName[] = "org.freedesktop.portal.Request";
|
||||||
const char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast";
|
const char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast";
|
||||||
|
|
||||||
+
|
-// static
|
||||||
// static
|
|
||||||
-void BaseCapturerPipeWire::OnStateChanged(void* data,
|
-void BaseCapturerPipeWire::OnStateChanged(void* data,
|
||||||
- pw_remote_state old_state,
|
- pw_remote_state old_state,
|
||||||
- pw_remote_state state,
|
- pw_remote_state state,
|
||||||
- const char* error_message) {
|
- const char* error_message) {
|
||||||
- BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
|
- BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
|
||||||
- RTC_DCHECK(that);
|
- RTC_DCHECK(that);
|
||||||
+void BaseCapturerPipeWire::SyncDmaBuf(int fd, uint64_t start_or_end) {
|
|
||||||
+ struct dma_buf_sync sync = { 0 };
|
|
||||||
|
|
||||||
- switch (state) {
|
- switch (state) {
|
||||||
- case PW_REMOTE_STATE_ERROR:
|
- case PW_REMOTE_STATE_ERROR:
|
||||||
@ -115,6 +119,10 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
- break;
|
- break;
|
||||||
- case PW_REMOTE_STATE_CONNECTING:
|
- case PW_REMOTE_STATE_CONNECTING:
|
||||||
- RTC_LOG(LS_INFO) << "PipeWire remote state: connecting.";
|
- RTC_LOG(LS_INFO) << "PipeWire remote state: connecting.";
|
||||||
|
+// static
|
||||||
|
+void BaseCapturerPipeWire::SyncDmaBuf(int fd, uint64_t start_or_end) {
|
||||||
|
+ struct dma_buf_sync sync = { 0 };
|
||||||
|
+
|
||||||
+ sync.flags = start_or_end | DMA_BUF_SYNC_READ;
|
+ sync.flags = start_or_end | DMA_BUF_SYNC_READ;
|
||||||
+
|
+
|
||||||
+ while(true) {
|
+ while(true) {
|
||||||
@ -133,7 +141,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
+// static
|
||||||
+void BaseCapturerPipeWire::OnCoreError(void *data,
|
+void BaseCapturerPipeWire::OnCoreError(void *data,
|
||||||
+ uint32_t id,
|
+ uint32_t id,
|
||||||
+ int seq,
|
+ int seq,
|
||||||
@ -142,11 +150,10 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
+ RTC_LOG(LS_ERROR) << "core error: " << message;
|
+ RTC_LOG(LS_ERROR) << "core error: " << message;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+// static
|
// static
|
||||||
void BaseCapturerPipeWire::OnStreamStateChanged(void* data,
|
void BaseCapturerPipeWire::OnStreamStateChanged(void* data,
|
||||||
pw_stream_state old_state,
|
pw_stream_state old_state,
|
||||||
pw_stream_state state,
|
@@ -73,76 +81,54 @@ void BaseCapturerPipeWire::OnStreamStateChanged(void* data,
|
||||||
@@ -73,76 +81,54 @@ void BaseCapturerPipeWire::OnStreamState
|
|
||||||
case PW_STREAM_STATE_ERROR:
|
case PW_STREAM_STATE_ERROR:
|
||||||
RTC_LOG(LS_ERROR) << "PipeWire stream state error: " << error_message;
|
RTC_LOG(LS_ERROR) << "PipeWire stream state error: " << error_message;
|
||||||
break;
|
break;
|
||||||
@ -249,7 +256,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
@@ -150,15 +136,25 @@ void BaseCapturerPipeWire::OnStreamProce
|
@@ -150,15 +136,25 @@ void BaseCapturerPipeWire::OnStreamProcess(void* data) {
|
||||||
BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
|
BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
|
||||||
RTC_DCHECK(that);
|
RTC_DCHECK(that);
|
||||||
|
|
||||||
@ -261,12 +268,12 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
+ while (next_buffer) {
|
+ while (next_buffer) {
|
||||||
+ buffer = next_buffer;
|
+ buffer = next_buffer;
|
||||||
+ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
|
+ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
|
||||||
+
|
|
||||||
|
- if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) {
|
||||||
+ if (next_buffer)
|
+ if (next_buffer)
|
||||||
+ pw_stream_queue_buffer (that->pw_stream_, buffer);
|
+ pw_stream_queue_buffer (that->pw_stream_, buffer);
|
||||||
+ }
|
+ }
|
||||||
|
+
|
||||||
- if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) {
|
|
||||||
+ if (!buffer) {
|
+ if (!buffer) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -279,7 +286,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
}
|
}
|
||||||
|
|
||||||
BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type)
|
BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type)
|
||||||
@@ -169,38 +165,22 @@ BaseCapturerPipeWire::~BaseCapturerPipeW
|
@@ -169,38 +165,22 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() {
|
||||||
pw_thread_loop_stop(pw_main_loop_);
|
pw_thread_loop_stop(pw_main_loop_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -322,7 +329,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
if (start_request_signal_id_) {
|
if (start_request_signal_id_) {
|
||||||
g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_);
|
g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_);
|
||||||
}
|
}
|
||||||
@@ -250,27 +230,35 @@ void BaseCapturerPipeWire::InitPortal()
|
@@ -250,27 +230,35 @@ void BaseCapturerPipeWire::InitPortal() {
|
||||||
void BaseCapturerPipeWire::InitPipeWire() {
|
void BaseCapturerPipeWire::InitPipeWire() {
|
||||||
pw_init(/*argc=*/nullptr, /*argc=*/nullptr);
|
pw_init(/*argc=*/nullptr, /*argc=*/nullptr);
|
||||||
|
|
||||||
@ -371,33 +378,32 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
|
|
||||||
if (pw_thread_loop_start(pw_main_loop_) < 0) {
|
if (pw_thread_loop_start(pw_main_loop_) < 0) {
|
||||||
RTC_LOG(LS_ERROR) << "Failed to start main PipeWire loop";
|
RTC_LOG(LS_ERROR) << "Failed to start main PipeWire loop";
|
||||||
@@ -278,81 +266,132 @@ void BaseCapturerPipeWire::InitPipeWire(
|
@@ -278,81 +266,132 @@ void BaseCapturerPipeWire::InitPipeWire() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
-void BaseCapturerPipeWire::InitPipeWireTypes() {
|
-void BaseCapturerPipeWire::InitPipeWireTypes() {
|
||||||
- spa_type_map* map = pw_core_type_->map;
|
- spa_type_map* map = pw_core_type_->map;
|
||||||
- pw_type_ = new PipeWireType();
|
- pw_type_ = new PipeWireType();
|
||||||
+pw_stream* BaseCapturerPipeWire::CreateReceivingStream() {
|
-
|
||||||
+ spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1};
|
|
||||||
+ spa_rectangle pwMaxScreenBounds = spa_rectangle{INT32_MAX, INT32_MAX};
|
|
||||||
|
|
||||||
- spa_type_media_type_map(map, &pw_type_->media_type);
|
- spa_type_media_type_map(map, &pw_type_->media_type);
|
||||||
- spa_type_media_subtype_map(map, &pw_type_->media_subtype);
|
- spa_type_media_subtype_map(map, &pw_type_->media_subtype);
|
||||||
- spa_type_format_video_map(map, &pw_type_->format_video);
|
- spa_type_format_video_map(map, &pw_type_->format_video);
|
||||||
- spa_type_video_format_map(map, &pw_type_->video_format);
|
- spa_type_video_format_map(map, &pw_type_->video_format);
|
||||||
-}
|
-}
|
||||||
+ auto stream = pw_stream_new(pw_core_, "webrtc-pipewire-stream", nullptr);
|
-
|
||||||
|
|
||||||
-void BaseCapturerPipeWire::CreateReceivingStream() {
|
-void BaseCapturerPipeWire::CreateReceivingStream() {
|
||||||
- spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1};
|
+pw_stream* BaseCapturerPipeWire::CreateReceivingStream() {
|
||||||
|
spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1};
|
||||||
- spa_rectangle pwScreenBounds =
|
- spa_rectangle pwScreenBounds =
|
||||||
- spa_rectangle{static_cast<uint32_t>(desktop_size_.width()),
|
- spa_rectangle{static_cast<uint32_t>(desktop_size_.width()),
|
||||||
- static_cast<uint32_t>(desktop_size_.height())};
|
- static_cast<uint32_t>(desktop_size_.height())};
|
||||||
-
|
+ spa_rectangle pwMaxScreenBounds = spa_rectangle{INT32_MAX, INT32_MAX};
|
||||||
|
|
||||||
- spa_fraction pwFrameRateMin = spa_fraction{0, 1};
|
- spa_fraction pwFrameRateMin = spa_fraction{0, 1};
|
||||||
- spa_fraction pwFrameRateMax = spa_fraction{60, 1};
|
- spa_fraction pwFrameRateMax = spa_fraction{60, 1};
|
||||||
-
|
+ auto stream = pw_stream_new(pw_core_, "webrtc-pipewire-stream", nullptr);
|
||||||
|
|
||||||
- pw_properties* reuseProps = pw_properties_new("pipewire.client.reuse", "1",
|
- pw_properties* reuseProps = pw_properties_new("pipewire.client.reuse", "1",
|
||||||
- /*end of varargs*/ nullptr);
|
- /*end of varargs*/ nullptr);
|
||||||
- pw_stream_ = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps);
|
- pw_stream_ = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps);
|
||||||
@ -433,6 +439,9 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
- // min and max values and it is undecided (u) to allow negotiation
|
- // min and max values and it is undecided (u) to allow negotiation
|
||||||
- ":", pw_type_->format_video.max_framerate, "Fru", &pwFrameRateMax, 2,
|
- ":", pw_type_->format_video.max_framerate, "Fru", &pwFrameRateMax, 2,
|
||||||
- &pwFrameRateMin, &pwFrameRateMax));
|
- &pwFrameRateMin, &pwFrameRateMax));
|
||||||
|
-
|
||||||
|
- pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_,
|
||||||
|
- this);
|
||||||
+ const spa_pod* params[2];
|
+ const spa_pod* params[2];
|
||||||
+ spa_pod_builder builder = SPA_POD_BUILDER_INIT(buffer, sizeof (buffer));
|
+ spa_pod_builder builder = SPA_POD_BUILDER_INIT(buffer, sizeof (buffer));
|
||||||
+
|
+
|
||||||
@ -447,9 +456,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
+ &pwMaxScreenBounds),
|
+ &pwMaxScreenBounds),
|
||||||
+ 0));
|
+ 0));
|
||||||
+ pw_stream_add_listener(stream, &spa_stream_listener_, &pw_stream_events_, this);
|
+ pw_stream_add_listener(stream, &spa_stream_listener_, &pw_stream_events_, this);
|
||||||
|
+
|
||||||
- pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_,
|
|
||||||
- this);
|
|
||||||
pw_stream_flags flags = static_cast<pw_stream_flags>(
|
pw_stream_flags flags = static_cast<pw_stream_flags>(
|
||||||
- PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE |
|
- PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE |
|
||||||
- PW_STREAM_FLAG_MAP_BUFFERS);
|
- PW_STREAM_FLAG_MAP_BUFFERS);
|
||||||
@ -492,7 +499,8 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
+ } else if (spaBuffer->datas[0].type == SPA_DATA_DmaBuf) {
|
+ } else if (spaBuffer->datas[0].type == SPA_DATA_DmaBuf) {
|
||||||
+ int fd;
|
+ int fd;
|
||||||
+ fd = spaBuffer->datas[0].fd;
|
+ fd = spaBuffer->datas[0].fd;
|
||||||
+
|
|
||||||
|
- if (!(src = spaBuffer->datas[0].data)) {
|
||||||
+ map = static_cast<uint8_t*>(mmap(
|
+ map = static_cast<uint8_t*>(mmap(
|
||||||
+ nullptr, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset,
|
+ nullptr, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset,
|
||||||
+ PROT_READ, MAP_PRIVATE, fd, 0));
|
+ PROT_READ, MAP_PRIVATE, fd, 0));
|
||||||
@ -501,8 +509,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
+ RTC_LOG(LS_ERROR) << "Failed to mmap the memory: " << std::strerror(errno);
|
+ RTC_LOG(LS_ERROR) << "Failed to mmap the memory: " << std::strerror(errno);
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
|
+
|
||||||
- if (!(src = spaBuffer->datas[0].data)) {
|
|
||||||
+ SyncDmaBuf(fd, DMA_BUF_SYNC_START);
|
+ SyncDmaBuf(fd, DMA_BUF_SYNC_START);
|
||||||
+
|
+
|
||||||
+ src = SPA_MEMBER(map, spaBuffer->datas[0].mapoffset, uint8_t);
|
+ src = SPA_MEMBER(map, spaBuffer->datas[0].mapoffset, uint8_t);
|
||||||
@ -562,7 +569,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
if (srcStride != (desktop_size_.width() * kBytesPerPixel)) {
|
if (srcStride != (desktop_size_.width() * kBytesPerPixel)) {
|
||||||
RTC_LOG(LS_ERROR) << "Got buffer with stride different from screen stride: "
|
RTC_LOG(LS_ERROR) << "Got buffer with stride different from screen stride: "
|
||||||
<< srcStride
|
<< srcStride
|
||||||
@@ -361,21 +400,40 @@ void BaseCapturerPipeWire::HandleBuffer(
|
@@ -361,21 +400,40 @@ void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -616,7 +623,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -725,10 +783,7 @@ void BaseCapturerPipeWire::OnStartReques
|
@@ -725,10 +783,7 @@ void BaseCapturerPipeWire::OnStartRequestResponseSignal(
|
||||||
g_variant_get(variant, "(u@a{sv})", &stream_id, &options);
|
g_variant_get(variant, "(u@a{sv})", &stream_id, &options);
|
||||||
RTC_DCHECK(options != nullptr);
|
RTC_DCHECK(options != nullptr);
|
||||||
|
|
||||||
@ -628,7 +635,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
g_variant_unref(options);
|
g_variant_unref(options);
|
||||||
g_variant_unref(variant);
|
g_variant_unref(variant);
|
||||||
}
|
}
|
||||||
@@ -813,10 +868,15 @@ void BaseCapturerPipeWire::CaptureFrame(
|
@@ -813,10 +868,15 @@ void BaseCapturerPipeWire::CaptureFrame() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -647,7 +654,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
if (!result) {
|
if (!result) {
|
||||||
callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
|
callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
|
||||||
return;
|
return;
|
||||||
@@ -837,4 +897,22 @@ bool BaseCapturerPipeWire::SelectSource(
|
@@ -837,4 +897,22 @@ bool BaseCapturerPipeWire::SelectSource(SourceId id) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -670,9 +677,10 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h.firefox-pipewire-0-3 firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
|
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
|
||||||
--- firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h.firefox-pipewire-0-3 2020-09-15 03:48:32.000000000 +0200
|
index 56b101acbaa6..de54157d1a2a 100644
|
||||||
+++ firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h 2020-09-15 14:40:00.722481420 +0200
|
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
|
||||||
|
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
|
||||||
@@ -22,17 +22,13 @@
|
@@ -22,17 +22,13 @@
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@ -696,7 +704,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
|
|
||||||
explicit BaseCapturerPipeWire(CaptureSourceType source_type);
|
explicit BaseCapturerPipeWire(CaptureSourceType source_type);
|
||||||
~BaseCapturerPipeWire() override;
|
~BaseCapturerPipeWire() override;
|
||||||
@@ -43,28 +39,32 @@ class BaseCapturerPipeWire : public Desk
|
@@ -43,28 +39,32 @@ class BaseCapturerPipeWire : public DesktopCapturer {
|
||||||
bool GetSourceList(SourceList* sources) override;
|
bool GetSourceList(SourceList* sources) override;
|
||||||
bool SelectSource(SourceId id) override;
|
bool SelectSource(SourceId id) override;
|
||||||
|
|
||||||
@ -737,7 +745,7 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
|
|
||||||
// <-- end of PipeWire types
|
// <-- end of PipeWire types
|
||||||
|
|
||||||
@@ -78,33 +78,37 @@ class BaseCapturerPipeWire : public Desk
|
@@ -78,33 +78,37 @@ class BaseCapturerPipeWire : public DesktopCapturer {
|
||||||
guint sources_request_signal_id_ = 0;
|
guint sources_request_signal_id_ = 0;
|
||||||
guint start_request_signal_id_ = 0;
|
guint start_request_signal_id_ = 0;
|
||||||
|
|
||||||
@ -784,9 +792,10 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/ba
|
|||||||
static void OnStreamProcess(void* data);
|
static void OnStreamProcess(void* data);
|
||||||
static void OnNewBuffer(void* data, uint32_t id);
|
static void OnNewBuffer(void* data, uint32_t id);
|
||||||
|
|
||||||
diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc.firefox-pipewire-0-3 firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
|
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
|
||||||
--- firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc.firefox-pipewire-0-3 2020-09-15 03:48:32.000000000 +0200
|
index 26956fc67dc8..3813d697bb38 100644
|
||||||
+++ firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc 2020-09-15 14:40:00.722481420 +0200
|
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
|
||||||
|
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
|
||||||
@@ -15,7 +15,7 @@
|
@@ -15,7 +15,7 @@
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
@ -796,9 +805,10 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/sc
|
|||||||
ScreenCapturerPipeWire::~ScreenCapturerPipeWire() {}
|
ScreenCapturerPipeWire::~ScreenCapturerPipeWire() {}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc.firefox-pipewire-0-3 firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
|
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
|
||||||
--- firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc.firefox-pipewire-0-3 2020-09-15 03:48:32.000000000 +0200
|
index 35436475cb4d..c43a1f1a0c4e 100644
|
||||||
+++ firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc 2020-09-15 14:40:00.722481420 +0200
|
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
|
||||||
|
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
|
||||||
@@ -15,7 +15,7 @@
|
@@ -15,7 +15,7 @@
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
@ -808,10 +818,11 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/wi
|
|||||||
WindowCapturerPipeWire::~WindowCapturerPipeWire() {}
|
WindowCapturerPipeWire::~WindowCapturerPipeWire() {}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc.firefox-pipewire-0-3 firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
|
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
|
||||||
--- firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc.firefox-pipewire-0-3 2020-09-15 03:48:32.000000000 +0200
|
index cf8a9dd0e0db..d27fab8d28d9 100644
|
||||||
+++ firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc 2020-09-15 14:40:00.722481420 +0200
|
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
|
||||||
@@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> Desktop
|
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
|
||||||
|
@@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer(
|
||||||
const DesktopCaptureOptions& options) {
|
const DesktopCaptureOptions& options) {
|
||||||
#if defined(WEBRTC_USE_PIPEWIRE)
|
#if defined(WEBRTC_USE_PIPEWIRE)
|
||||||
if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) {
|
if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) {
|
||||||
@ -820,10 +831,11 @@ diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_c
|
|||||||
}
|
}
|
||||||
#endif // defined(WEBRTC_USE_PIPEWIRE)
|
#endif // defined(WEBRTC_USE_PIPEWIRE)
|
||||||
|
|
||||||
diff -up firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc.firefox-pipewire-0-3 firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
|
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
|
||||||
--- firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc.firefox-pipewire-0-3 2020-09-15 03:48:32.000000000 +0200
|
index 82359e50c2db..bb9724cf7cc2 100644
|
||||||
+++ firefox-81.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc 2020-09-15 14:40:00.722481420 +0200
|
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
|
||||||
@@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> Desktop
|
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
|
||||||
|
@@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer(
|
||||||
const DesktopCaptureOptions& options) {
|
const DesktopCaptureOptions& options) {
|
||||||
#if defined(WEBRTC_USE_PIPEWIRE)
|
#if defined(WEBRTC_USE_PIPEWIRE)
|
||||||
if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) {
|
if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) {
|
||||||
|
@ -3,7 +3,6 @@ pref("app.update.enabled", false);
|
|||||||
pref("app.update.autoInstallEnabled", false);
|
pref("app.update.autoInstallEnabled", false);
|
||||||
pref("general.smoothScroll", true);
|
pref("general.smoothScroll", true);
|
||||||
pref("intl.locale.matchOS", true);
|
pref("intl.locale.matchOS", true);
|
||||||
pref("intl.locale.requested", "");
|
|
||||||
pref("toolkit.storage.synchronous", 0);
|
pref("toolkit.storage.synchronous", 0);
|
||||||
pref("toolkit.networkmanager.disable", false);
|
pref("toolkit.networkmanager.disable", false);
|
||||||
pref("offline.autoDetect", true);
|
pref("offline.autoDetect", true);
|
||||||
@ -15,23 +14,22 @@ pref("browser.shell.checkDefaultBrowser", false);
|
|||||||
pref("network.manage-offline-status", true);
|
pref("network.manage-offline-status", true);
|
||||||
pref("extensions.shownSelectionUI", true);
|
pref("extensions.shownSelectionUI", true);
|
||||||
pref("ui.SpellCheckerUnderlineStyle", 1);
|
pref("ui.SpellCheckerUnderlineStyle", 1);
|
||||||
pref("startup.homepage_override_url", "");
|
pref("startup.homepage_override_url", "http://www.redhat.com");
|
||||||
pref("browser.startup.homepage", "data:text/plain,browser.startup.homepage=https://start.fedoraproject.org/");
|
pref("startup.homepage_welcome_url", "http://www.redhat.com");
|
||||||
pref("browser.newtabpage.pinned", '[{"url":"https://start.fedoraproject.org/","title":"Fedora Project - Start Page"}]');
|
pref("browser.startup.homepage", "data:text/plain,browser.startup.homepage=file:///usr/share/doc/HTML/index.html");
|
||||||
pref("geo.wifi.uri", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%");
|
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.provider.enabled",false);
|
||||||
pref("media.gmp-gmpopenh264.autoupdate",false);
|
pref("media.gmp-gmpopenh264.autoupdate",false);
|
||||||
pref("media.gmp-gmpopenh264.enabled",false);
|
pref("media.gmp-gmpopenh264.enabled",false);
|
||||||
pref("media.gmp.decoder.enabled", true);
|
pref("media.gmp-gmpopenh264.enabled",false);
|
||||||
pref("plugins.notifyMissingFlash", false);
|
pref("plugins.notifyMissingFlash", false);
|
||||||
/* See https://bugzilla.redhat.com/show_bug.cgi?id=1226489 */
|
/* See https://bugzilla.redhat.com/show_bug.cgi?id=1226489 */
|
||||||
pref("browser.display.use_system_colors", false);
|
pref("browser.display.use_system_colors", false);
|
||||||
pref("layers.use-image-offscreen-surfaces", false);
|
pref("layers.use-image-offscreen-surfaces", false);
|
||||||
/* Allow sending credetials to all https:// sites */
|
/* Allow sending credetials to all https:// sites */
|
||||||
pref("network.negotiate-auth.trusted-uris", "https://");
|
pref("network.negotiate-auth.trusted-uris", "https://");
|
||||||
pref("spellchecker.dictionary_path","/usr/share/myspell");
|
pref("security.use_sqldb", false);
|
||||||
/* Disable DoH by default */
|
/* Use OS settings for UI language */
|
||||||
pref("network.trr.mode", 5);
|
pref("intl.locale.requested", "");
|
||||||
/* Enable per-user policy dir, see mozbz#1583466 */
|
/* See https://bugzilla.redhat.com/show_bug.cgi?id=1672424 */
|
||||||
pref("browser.policies.perUserDir", true);
|
pref("storage.nfs_filesystem", true);
|
||||||
pref("browser.gnome-search-provider.enabled",true);
|
|
@ -1,5 +0,0 @@
|
|||||||
[Shell Search Provider]
|
|
||||||
DesktopId=firefox.desktop
|
|
||||||
BusName=org.mozilla.Firefox.SearchProvider
|
|
||||||
ObjectPath=/org/mozilla/Firefox/SearchProvider
|
|
||||||
Version=2
|
|
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 6.8 KiB |
@ -1,12 +0,0 @@
|
|||||||
diff -up firefox-76.0.1/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp.old firefox-76.0.1/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
|
|
||||||
--- firefox-76.0.1/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp.old 2020-05-13 14:28:26.556800474 +0200
|
|
||||||
+++ firefox-76.0.1/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp 2020-05-13 14:28:31.562768959 +0200
|
|
||||||
@@ -43,7 +43,7 @@ typedef int VAStatus;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Use some extra HW frames for potential rendering lags.
|
|
||||||
-#define EXTRA_HW_FRAMES 6
|
|
||||||
+#define EXTRA_HW_FRAMES 20
|
|
||||||
|
|
||||||
typedef mozilla::layers::Image Image;
|
|
||||||
typedef mozilla::layers::PlanarYCbCrImage PlanarYCbCrImage;
|
|
@ -1,235 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Version=1.0
|
|
||||||
Name=Firefox on Wayland
|
|
||||||
GenericName=Web Browser
|
|
||||||
Comment=Browse the Web
|
|
||||||
Exec=firefox-wayland --name firefox-wayland %u
|
|
||||||
Icon=firefox
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
|
|
||||||
StartupNotify=true
|
|
||||||
Categories=Network;WebBrowser;
|
|
||||||
Keywords=web;browser;internet;
|
|
||||||
Actions=new-window;new-private-window;profile-manager-window;
|
|
||||||
|
|
||||||
[Desktop Action new-window]
|
|
||||||
Name=Open a New Window
|
|
||||||
Name[ach]=Dirica manyen
|
|
||||||
Name[af]=Nuwe venster
|
|
||||||
Name[an]=Nueva finestra
|
|
||||||
Name[ar]=نافذة جديدة
|
|
||||||
Name[as]=নতুন উইন্ডো
|
|
||||||
Name[ast]=Ventana nueva
|
|
||||||
Name[az]=Yeni Pəncərə
|
|
||||||
Name[be]=Новае акно
|
|
||||||
Name[bg]=Нов прозорец
|
|
||||||
Name[bn_BD]=নতুন উইন্ডো (N)
|
|
||||||
Name[bn_IN]=নতুন উইন্ডো
|
|
||||||
Name[br]=Prenestr nevez
|
|
||||||
Name[brx]=गोदान उइन्ड'(N)
|
|
||||||
Name[bs]=Novi prozor
|
|
||||||
Name[ca]=Finestra nova
|
|
||||||
Name[cak]=K'ak'a' tzuwäch
|
|
||||||
Name[cs]=Nové okno
|
|
||||||
Name[cy]=Ffenestr Newydd
|
|
||||||
Name[da]=Nyt vindue
|
|
||||||
Name[de]=Neues Fenster
|
|
||||||
Name[dsb]=Nowe wokno
|
|
||||||
Name[el]=Νέο παράθυρο
|
|
||||||
Name[en_GB]=New Window
|
|
||||||
Name[en_US]=New Window
|
|
||||||
Name[en_ZA]=New Window
|
|
||||||
Name[eo]=Nova fenestro
|
|
||||||
Name[es_AR]=Nueva ventana
|
|
||||||
Name[es_CL]=Nueva ventana
|
|
||||||
Name[es_ES]=Nueva ventana
|
|
||||||
Name[es_MX]=Nueva ventana
|
|
||||||
Name[et]=Uus aken
|
|
||||||
Name[eu]=Leiho berria
|
|
||||||
Name[fa]=پنجره جدید
|
|
||||||
Name[ff]=Henorde Hesere
|
|
||||||
Name[fi]=Uusi ikkuna
|
|
||||||
Name[fr]=Nouvelle fenêtre
|
|
||||||
Name[fy_NL]=Nij finster
|
|
||||||
Name[ga_IE]=Fuinneog Nua
|
|
||||||
Name[gd]=Uinneag ùr
|
|
||||||
Name[gl]=Nova xanela
|
|
||||||
Name[gn]=Ovetã pyahu
|
|
||||||
Name[gu_IN]=નવી વિન્ડો
|
|
||||||
Name[he]=חלון חדש
|
|
||||||
Name[hi_IN]=नया विंडो
|
|
||||||
Name[hr]=Novi prozor
|
|
||||||
Name[hsb]=Nowe wokno
|
|
||||||
Name[hu]=Új ablak
|
|
||||||
Name[hy_AM]=Նոր Պատուհան
|
|
||||||
Name[id]=Jendela Baru
|
|
||||||
Name[is]=Nýr gluggi
|
|
||||||
Name[it]=Nuova finestra
|
|
||||||
Name[ja]=新しいウィンドウ
|
|
||||||
Name[ja_JP-mac]=新規ウインドウ
|
|
||||||
Name[ka]=ახალი ფანჯარა
|
|
||||||
Name[kk]=Жаңа терезе
|
|
||||||
Name[km]=បង្អួចថ្មី
|
|
||||||
Name[kn]=ಹೊಸ ಕಿಟಕಿ
|
|
||||||
Name[ko]=새 창
|
|
||||||
Name[kok]=नवें जनेल
|
|
||||||
Name[ks]=نئئ وِنڈو
|
|
||||||
Name[lij]=Neuvo barcon
|
|
||||||
Name[lo]=ຫນ້າຕ່າງໃຫມ່
|
|
||||||
Name[lt]=Naujas langas
|
|
||||||
Name[ltg]=Jauns lūgs
|
|
||||||
Name[lv]=Jauns logs
|
|
||||||
Name[mai]=नव विंडो
|
|
||||||
Name[mk]=Нов прозорец
|
|
||||||
Name[ml]=പുതിയ ജാലകം
|
|
||||||
Name[mr]=नवीन पटल
|
|
||||||
Name[ms]=Tetingkap Baru
|
|
||||||
Name[my]=ဝင်းဒိုးအသစ်
|
|
||||||
Name[nb_NO]=Nytt vindu
|
|
||||||
Name[ne_NP]=नयाँ सञ्झ्याल
|
|
||||||
Name[nl]=Nieuw venster
|
|
||||||
Name[nn_NO]=Nytt vindauge
|
|
||||||
Name[or]=ନୂତନ ୱିଣ୍ଡୋ
|
|
||||||
Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
|
|
||||||
Name[pl]=Nowe okno
|
|
||||||
Name[pt_BR]=Nova janela
|
|
||||||
Name[pt_PT]=Nova janela
|
|
||||||
Name[rm]=Nova fanestra
|
|
||||||
Name[ro]=Fereastră nouă
|
|
||||||
Name[ru]=Новое окно
|
|
||||||
Name[sat]=नावा विंडो (N)
|
|
||||||
Name[si]=නව කවුළුවක්
|
|
||||||
Name[sk]=Nové okno
|
|
||||||
Name[sl]=Novo okno
|
|
||||||
Name[son]=Zanfun taaga
|
|
||||||
Name[sq]=Dritare e Re
|
|
||||||
Name[sr]=Нови прозор
|
|
||||||
Name[sv_SE]=Nytt fönster
|
|
||||||
Name[ta]=புதிய சாளரம்
|
|
||||||
Name[te]=కొత్త విండో
|
|
||||||
Name[th]=หน้าต่างใหม่
|
|
||||||
Name[tr]=Yeni pencere
|
|
||||||
Name[tsz]=Eraatarakua jimpani
|
|
||||||
Name[uk]=Нове вікно
|
|
||||||
Name[ur]=نیا دریچہ
|
|
||||||
Name[uz]=Yangi oyna
|
|
||||||
Name[vi]=Cửa sổ mới
|
|
||||||
Name[wo]=Palanteer bu bees
|
|
||||||
Name[xh]=Ifestile entsha
|
|
||||||
Name[zh_CN]=新建窗口
|
|
||||||
Name[zh_TW]=開新視窗
|
|
||||||
Exec=firefox-wayland --name firefox-wayland --new-window %u
|
|
||||||
|
|
||||||
[Desktop Action new-private-window]
|
|
||||||
Name=Open a New Private Window
|
|
||||||
Name[ach]=Dirica manyen me mung
|
|
||||||
Name[af]=Nuwe privaatvenster
|
|
||||||
Name[an]=Nueva finestra privada
|
|
||||||
Name[ar]=نافذة خاصة جديدة
|
|
||||||
Name[as]=নতুন ব্যক্তিগত উইন্ডো
|
|
||||||
Name[ast]=Ventana privada nueva
|
|
||||||
Name[az]=Yeni Məxfi Pəncərə
|
|
||||||
Name[be]=Новае акно адасаблення
|
|
||||||
Name[bg]=Нов прозорец за поверително сърфиране
|
|
||||||
Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
|
|
||||||
Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
|
|
||||||
Name[br]=Prenestr merdeiñ prevez nevez
|
|
||||||
Name[brx]=गोदान प्राइभेट उइन्ड'
|
|
||||||
Name[bs]=Novi privatni prozor
|
|
||||||
Name[ca]=Finestra privada nova
|
|
||||||
Name[cak]=K'ak'a' ichinan tzuwäch
|
|
||||||
Name[cs]=Nové anonymní okno
|
|
||||||
Name[cy]=Ffenestr Breifat Newydd
|
|
||||||
Name[da]=Nyt privat vindue
|
|
||||||
Name[de]=Neues privates Fenster
|
|
||||||
Name[dsb]=Nowe priwatne wokno
|
|
||||||
Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
|
|
||||||
Name[en_GB]=New Private Window
|
|
||||||
Name[en_US]=New Private Window
|
|
||||||
Name[en_ZA]=New Private Window
|
|
||||||
Name[eo]=Nova privata fenestro
|
|
||||||
Name[es_AR]=Nueva ventana privada
|
|
||||||
Name[es_CL]=Nueva ventana privada
|
|
||||||
Name[es_ES]=Nueva ventana privada
|
|
||||||
Name[es_MX]=Nueva ventana privada
|
|
||||||
Name[et]=Uus privaatne aken
|
|
||||||
Name[eu]=Leiho pribatu berria
|
|
||||||
Name[fa]=پنجره ناشناس جدید
|
|
||||||
Name[ff]=Henorde Suturo Hesere
|
|
||||||
Name[fi]=Uusi yksityinen ikkuna
|
|
||||||
Name[fr]=Nouvelle fenêtre de navigation privée
|
|
||||||
Name[fy_NL]=Nij priveefinster
|
|
||||||
Name[ga_IE]=Fuinneog Nua Phríobháideach
|
|
||||||
Name[gd]=Uinneag phrìobhaideach ùr
|
|
||||||
Name[gl]=Nova xanela privada
|
|
||||||
Name[gn]=Ovetã ñemi pyahu
|
|
||||||
Name[gu_IN]=નવી ખાનગી વિન્ડો
|
|
||||||
Name[he]=חלון פרטי חדש
|
|
||||||
Name[hi_IN]=नयी निजी विंडो
|
|
||||||
Name[hr]=Novi privatni prozor
|
|
||||||
Name[hsb]=Nowe priwatne wokno
|
|
||||||
Name[hu]=Új privát ablak
|
|
||||||
Name[hy_AM]=Սկսել Գաղտնի դիտարկում
|
|
||||||
Name[id]=Jendela Mode Pribadi Baru
|
|
||||||
Name[is]=Nýr huliðsgluggi
|
|
||||||
Name[it]=Nuova finestra anonima
|
|
||||||
Name[ja]=新しいプライベートウィンドウ
|
|
||||||
Name[ja_JP-mac]=新規プライベートウインドウ
|
|
||||||
Name[ka]=ახალი პირადი ფანჯარა
|
|
||||||
Name[kk]=Жаңа жекелік терезе
|
|
||||||
Name[km]=បង្អួចឯកជនថ្មី
|
|
||||||
Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
|
|
||||||
Name[ko]=새 사생활 보호 모드
|
|
||||||
Name[kok]=नवो खाजगी विंडो
|
|
||||||
Name[ks]=نْو پرایوٹ وینڈو&
|
|
||||||
Name[lij]=Neuvo barcon privou
|
|
||||||
Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
|
|
||||||
Name[lt]=Naujas privataus naršymo langas
|
|
||||||
Name[ltg]=Jauns privatais lūgs
|
|
||||||
Name[lv]=Jauns privātais logs
|
|
||||||
Name[mai]=नया निज विंडो (W)
|
|
||||||
Name[mk]=Нов приватен прозорец
|
|
||||||
Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
|
|
||||||
Name[mr]=नवीन वैयक्तिक पटल
|
|
||||||
Name[ms]=Tetingkap Persendirian Baharu
|
|
||||||
Name[my]=New Private Window
|
|
||||||
Name[nb_NO]=Nytt privat vindu
|
|
||||||
Name[ne_NP]=नयाँ निजी सञ्झ्याल
|
|
||||||
Name[nl]=Nieuw privévenster
|
|
||||||
Name[nn_NO]=Nytt privat vindauge
|
|
||||||
Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
|
|
||||||
Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
|
|
||||||
Name[pl]=Nowe okno prywatne
|
|
||||||
Name[pt_BR]=Nova janela privativa
|
|
||||||
Name[pt_PT]=Nova janela privada
|
|
||||||
Name[rm]=Nova fanestra privata
|
|
||||||
Name[ro]=Fereastră privată nouă
|
|
||||||
Name[ru]=Новое приватное окно
|
|
||||||
Name[sat]=नावा निजेराक् विंडो (W )
|
|
||||||
Name[si]=නව පුද්ගලික කවුළුව (W)
|
|
||||||
Name[sk]=Nové okno v režime Súkromné prehliadanie
|
|
||||||
Name[sl]=Novo zasebno okno
|
|
||||||
Name[son]=Sutura zanfun taaga
|
|
||||||
Name[sq]=Dritare e Re Private
|
|
||||||
Name[sr]=Нови приватан прозор
|
|
||||||
Name[sv_SE]=Nytt privat fönster
|
|
||||||
Name[ta]=புதிய தனிப்பட்ட சாளரம்
|
|
||||||
Name[te]=కొత్త ఆంతరంగిక విండో
|
|
||||||
Name[th]=หน้าต่างส่วนตัวใหม่
|
|
||||||
Name[tr]=Yeni gizli pencere
|
|
||||||
Name[tsz]=Juchiiti eraatarakua jimpani
|
|
||||||
Name[uk]=Приватне вікно
|
|
||||||
Name[ur]=نیا نجی دریچہ
|
|
||||||
Name[uz]=Yangi maxfiy oyna
|
|
||||||
Name[vi]=Cửa sổ riêng tư mới
|
|
||||||
Name[wo]=Panlanteeru biir bu bees
|
|
||||||
Name[xh]=Ifestile yangasese entsha
|
|
||||||
Name[zh_CN]=新建隐私浏览窗口
|
|
||||||
Name[zh_TW]=新增隱私視窗
|
|
||||||
Exec=firefox-wayland --private-window --name firefox-wayland %u
|
|
||||||
|
|
||||||
[Desktop Action profile-manager-window]
|
|
||||||
Name=Open the Profile Manager
|
|
||||||
Name[cs]=Správa profilů
|
|
||||||
Exec=firefox-wayland --name firefox-wayland --ProfileManager
|
|
@ -1,7 +0,0 @@
|
|||||||
#!/usr/bin/bash
|
|
||||||
#
|
|
||||||
# Run Firefox under Wayland
|
|
||||||
#
|
|
||||||
|
|
||||||
export MOZ_ENABLE_WAYLAND=1
|
|
||||||
exec /__PREFIX__/bin/firefox "$@"
|
|
@ -1,235 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Version=1.0
|
|
||||||
Name=Firefox on X11
|
|
||||||
GenericName=Web Browser
|
|
||||||
Comment=Browse the Web
|
|
||||||
Exec=firefox-x11 --name firefox-x11 %u
|
|
||||||
Icon=firefox
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
|
|
||||||
StartupNotify=true
|
|
||||||
Categories=Network;WebBrowser;
|
|
||||||
Keywords=web;browser;internet;
|
|
||||||
Actions=new-window;new-private-window;profile-manager-window;
|
|
||||||
|
|
||||||
[Desktop Action new-window]
|
|
||||||
Name=Open a New Window
|
|
||||||
Name[ach]=Dirica manyen
|
|
||||||
Name[af]=Nuwe venster
|
|
||||||
Name[an]=Nueva finestra
|
|
||||||
Name[ar]=نافذة جديدة
|
|
||||||
Name[as]=নতুন উইন্ডো
|
|
||||||
Name[ast]=Ventana nueva
|
|
||||||
Name[az]=Yeni Pəncərə
|
|
||||||
Name[be]=Новае акно
|
|
||||||
Name[bg]=Нов прозорец
|
|
||||||
Name[bn_BD]=নতুন উইন্ডো (N)
|
|
||||||
Name[bn_IN]=নতুন উইন্ডো
|
|
||||||
Name[br]=Prenestr nevez
|
|
||||||
Name[brx]=गोदान उइन्ड'(N)
|
|
||||||
Name[bs]=Novi prozor
|
|
||||||
Name[ca]=Finestra nova
|
|
||||||
Name[cak]=K'ak'a' tzuwäch
|
|
||||||
Name[cs]=Nové okno
|
|
||||||
Name[cy]=Ffenestr Newydd
|
|
||||||
Name[da]=Nyt vindue
|
|
||||||
Name[de]=Neues Fenster
|
|
||||||
Name[dsb]=Nowe wokno
|
|
||||||
Name[el]=Νέο παράθυρο
|
|
||||||
Name[en_GB]=New Window
|
|
||||||
Name[en_US]=New Window
|
|
||||||
Name[en_ZA]=New Window
|
|
||||||
Name[eo]=Nova fenestro
|
|
||||||
Name[es_AR]=Nueva ventana
|
|
||||||
Name[es_CL]=Nueva ventana
|
|
||||||
Name[es_ES]=Nueva ventana
|
|
||||||
Name[es_MX]=Nueva ventana
|
|
||||||
Name[et]=Uus aken
|
|
||||||
Name[eu]=Leiho berria
|
|
||||||
Name[fa]=پنجره جدید
|
|
||||||
Name[ff]=Henorde Hesere
|
|
||||||
Name[fi]=Uusi ikkuna
|
|
||||||
Name[fr]=Nouvelle fenêtre
|
|
||||||
Name[fy_NL]=Nij finster
|
|
||||||
Name[ga_IE]=Fuinneog Nua
|
|
||||||
Name[gd]=Uinneag ùr
|
|
||||||
Name[gl]=Nova xanela
|
|
||||||
Name[gn]=Ovetã pyahu
|
|
||||||
Name[gu_IN]=નવી વિન્ડો
|
|
||||||
Name[he]=חלון חדש
|
|
||||||
Name[hi_IN]=नया विंडो
|
|
||||||
Name[hr]=Novi prozor
|
|
||||||
Name[hsb]=Nowe wokno
|
|
||||||
Name[hu]=Új ablak
|
|
||||||
Name[hy_AM]=Նոր Պատուհան
|
|
||||||
Name[id]=Jendela Baru
|
|
||||||
Name[is]=Nýr gluggi
|
|
||||||
Name[it]=Nuova finestra
|
|
||||||
Name[ja]=新しいウィンドウ
|
|
||||||
Name[ja_JP-mac]=新規ウインドウ
|
|
||||||
Name[ka]=ახალი ფანჯარა
|
|
||||||
Name[kk]=Жаңа терезе
|
|
||||||
Name[km]=បង្អួចថ្មី
|
|
||||||
Name[kn]=ಹೊಸ ಕಿಟಕಿ
|
|
||||||
Name[ko]=새 창
|
|
||||||
Name[kok]=नवें जनेल
|
|
||||||
Name[ks]=نئئ وِنڈو
|
|
||||||
Name[lij]=Neuvo barcon
|
|
||||||
Name[lo]=ຫນ້າຕ່າງໃຫມ່
|
|
||||||
Name[lt]=Naujas langas
|
|
||||||
Name[ltg]=Jauns lūgs
|
|
||||||
Name[lv]=Jauns logs
|
|
||||||
Name[mai]=नव विंडो
|
|
||||||
Name[mk]=Нов прозорец
|
|
||||||
Name[ml]=പുതിയ ജാലകം
|
|
||||||
Name[mr]=नवीन पटल
|
|
||||||
Name[ms]=Tetingkap Baru
|
|
||||||
Name[my]=ဝင်းဒိုးအသစ်
|
|
||||||
Name[nb_NO]=Nytt vindu
|
|
||||||
Name[ne_NP]=नयाँ सञ्झ्याल
|
|
||||||
Name[nl]=Nieuw venster
|
|
||||||
Name[nn_NO]=Nytt vindauge
|
|
||||||
Name[or]=ନୂତନ ୱିଣ୍ଡୋ
|
|
||||||
Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
|
|
||||||
Name[pl]=Nowe okno
|
|
||||||
Name[pt_BR]=Nova janela
|
|
||||||
Name[pt_PT]=Nova janela
|
|
||||||
Name[rm]=Nova fanestra
|
|
||||||
Name[ro]=Fereastră nouă
|
|
||||||
Name[ru]=Новое окно
|
|
||||||
Name[sat]=नावा विंडो (N)
|
|
||||||
Name[si]=නව කවුළුවක්
|
|
||||||
Name[sk]=Nové okno
|
|
||||||
Name[sl]=Novo okno
|
|
||||||
Name[son]=Zanfun taaga
|
|
||||||
Name[sq]=Dritare e Re
|
|
||||||
Name[sr]=Нови прозор
|
|
||||||
Name[sv_SE]=Nytt fönster
|
|
||||||
Name[ta]=புதிய சாளரம்
|
|
||||||
Name[te]=కొత్త విండో
|
|
||||||
Name[th]=หน้าต่างใหม่
|
|
||||||
Name[tr]=Yeni pencere
|
|
||||||
Name[tsz]=Eraatarakua jimpani
|
|
||||||
Name[uk]=Нове вікно
|
|
||||||
Name[ur]=نیا دریچہ
|
|
||||||
Name[uz]=Yangi oyna
|
|
||||||
Name[vi]=Cửa sổ mới
|
|
||||||
Name[wo]=Palanteer bu bees
|
|
||||||
Name[xh]=Ifestile entsha
|
|
||||||
Name[zh_CN]=新建窗口
|
|
||||||
Name[zh_TW]=開新視窗
|
|
||||||
Exec=firefox-x11 --name firefox-x11 --new-window %u
|
|
||||||
|
|
||||||
[Desktop Action new-private-window]
|
|
||||||
Name=Open a New Private Window
|
|
||||||
Name[ach]=Dirica manyen me mung
|
|
||||||
Name[af]=Nuwe privaatvenster
|
|
||||||
Name[an]=Nueva finestra privada
|
|
||||||
Name[ar]=نافذة خاصة جديدة
|
|
||||||
Name[as]=নতুন ব্যক্তিগত উইন্ডো
|
|
||||||
Name[ast]=Ventana privada nueva
|
|
||||||
Name[az]=Yeni Məxfi Pəncərə
|
|
||||||
Name[be]=Новае акно адасаблення
|
|
||||||
Name[bg]=Нов прозорец за поверително сърфиране
|
|
||||||
Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
|
|
||||||
Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
|
|
||||||
Name[br]=Prenestr merdeiñ prevez nevez
|
|
||||||
Name[brx]=गोदान प्राइभेट उइन्ड'
|
|
||||||
Name[bs]=Novi privatni prozor
|
|
||||||
Name[ca]=Finestra privada nova
|
|
||||||
Name[cak]=K'ak'a' ichinan tzuwäch
|
|
||||||
Name[cs]=Nové anonymní okno
|
|
||||||
Name[cy]=Ffenestr Breifat Newydd
|
|
||||||
Name[da]=Nyt privat vindue
|
|
||||||
Name[de]=Neues privates Fenster
|
|
||||||
Name[dsb]=Nowe priwatne wokno
|
|
||||||
Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
|
|
||||||
Name[en_GB]=New Private Window
|
|
||||||
Name[en_US]=New Private Window
|
|
||||||
Name[en_ZA]=New Private Window
|
|
||||||
Name[eo]=Nova privata fenestro
|
|
||||||
Name[es_AR]=Nueva ventana privada
|
|
||||||
Name[es_CL]=Nueva ventana privada
|
|
||||||
Name[es_ES]=Nueva ventana privada
|
|
||||||
Name[es_MX]=Nueva ventana privada
|
|
||||||
Name[et]=Uus privaatne aken
|
|
||||||
Name[eu]=Leiho pribatu berria
|
|
||||||
Name[fa]=پنجره ناشناس جدید
|
|
||||||
Name[ff]=Henorde Suturo Hesere
|
|
||||||
Name[fi]=Uusi yksityinen ikkuna
|
|
||||||
Name[fr]=Nouvelle fenêtre de navigation privée
|
|
||||||
Name[fy_NL]=Nij priveefinster
|
|
||||||
Name[ga_IE]=Fuinneog Nua Phríobháideach
|
|
||||||
Name[gd]=Uinneag phrìobhaideach ùr
|
|
||||||
Name[gl]=Nova xanela privada
|
|
||||||
Name[gn]=Ovetã ñemi pyahu
|
|
||||||
Name[gu_IN]=નવી ખાનગી વિન્ડો
|
|
||||||
Name[he]=חלון פרטי חדש
|
|
||||||
Name[hi_IN]=नयी निजी विंडो
|
|
||||||
Name[hr]=Novi privatni prozor
|
|
||||||
Name[hsb]=Nowe priwatne wokno
|
|
||||||
Name[hu]=Új privát ablak
|
|
||||||
Name[hy_AM]=Սկսել Գաղտնի դիտարկում
|
|
||||||
Name[id]=Jendela Mode Pribadi Baru
|
|
||||||
Name[is]=Nýr huliðsgluggi
|
|
||||||
Name[it]=Nuova finestra anonima
|
|
||||||
Name[ja]=新しいプライベートウィンドウ
|
|
||||||
Name[ja_JP-mac]=新規プライベートウインドウ
|
|
||||||
Name[ka]=ახალი პირადი ფანჯარა
|
|
||||||
Name[kk]=Жаңа жекелік терезе
|
|
||||||
Name[km]=បង្អួចឯកជនថ្មី
|
|
||||||
Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
|
|
||||||
Name[ko]=새 사생활 보호 모드
|
|
||||||
Name[kok]=नवो खाजगी विंडो
|
|
||||||
Name[ks]=نْو پرایوٹ وینڈو&
|
|
||||||
Name[lij]=Neuvo barcon privou
|
|
||||||
Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
|
|
||||||
Name[lt]=Naujas privataus naršymo langas
|
|
||||||
Name[ltg]=Jauns privatais lūgs
|
|
||||||
Name[lv]=Jauns privātais logs
|
|
||||||
Name[mai]=नया निज विंडो (W)
|
|
||||||
Name[mk]=Нов приватен прозорец
|
|
||||||
Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
|
|
||||||
Name[mr]=नवीन वैयक्तिक पटल
|
|
||||||
Name[ms]=Tetingkap Persendirian Baharu
|
|
||||||
Name[my]=New Private Window
|
|
||||||
Name[nb_NO]=Nytt privat vindu
|
|
||||||
Name[ne_NP]=नयाँ निजी सञ्झ्याल
|
|
||||||
Name[nl]=Nieuw privévenster
|
|
||||||
Name[nn_NO]=Nytt privat vindauge
|
|
||||||
Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
|
|
||||||
Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
|
|
||||||
Name[pl]=Nowe okno prywatne
|
|
||||||
Name[pt_BR]=Nova janela privativa
|
|
||||||
Name[pt_PT]=Nova janela privada
|
|
||||||
Name[rm]=Nova fanestra privata
|
|
||||||
Name[ro]=Fereastră privată nouă
|
|
||||||
Name[ru]=Новое приватное окно
|
|
||||||
Name[sat]=नावा निजेराक् विंडो (W )
|
|
||||||
Name[si]=නව පුද්ගලික කවුළුව (W)
|
|
||||||
Name[sk]=Nové okno v režime Súkromné prehliadanie
|
|
||||||
Name[sl]=Novo zasebno okno
|
|
||||||
Name[son]=Sutura zanfun taaga
|
|
||||||
Name[sq]=Dritare e Re Private
|
|
||||||
Name[sr]=Нови приватан прозор
|
|
||||||
Name[sv_SE]=Nytt privat fönster
|
|
||||||
Name[ta]=புதிய தனிப்பட்ட சாளரம்
|
|
||||||
Name[te]=కొత్త ఆంతరంగిక విండో
|
|
||||||
Name[th]=หน้าต่างส่วนตัวใหม่
|
|
||||||
Name[tr]=Yeni gizli pencere
|
|
||||||
Name[tsz]=Juchiiti eraatarakua jimpani
|
|
||||||
Name[uk]=Приватне вікно
|
|
||||||
Name[ur]=نیا نجی دریچہ
|
|
||||||
Name[uz]=Yangi maxfiy oyna
|
|
||||||
Name[vi]=Cửa sổ riêng tư mới
|
|
||||||
Name[wo]=Panlanteeru biir bu bees
|
|
||||||
Name[xh]=Ifestile yangasese entsha
|
|
||||||
Name[zh_CN]=新建隐私浏览窗口
|
|
||||||
Name[zh_TW]=新增隱私視窗
|
|
||||||
Exec=firefox-x11 --private-window --name firefox-x11 %u
|
|
||||||
|
|
||||||
[Desktop Action profile-manager-window]
|
|
||||||
Name=Open the Profile Manager
|
|
||||||
Name[cs]=Správa profilů
|
|
||||||
Exec=firefox-x11 --name firefox-x11 --ProfileManager
|
|
@ -1,7 +0,0 @@
|
|||||||
#!/usr/bin/bash
|
|
||||||
#
|
|
||||||
# Run Firefox on X11 backend
|
|
||||||
#
|
|
||||||
|
|
||||||
export MOZ_DISABLE_WAYLAND=1
|
|
||||||
exec /__PREFIX__/bin/firefox "$@"
|
|
@ -60,7 +60,7 @@ Open new instance, not a new window in running instance.
|
|||||||
\fB\-\-UILocale\fR \fIlocale\fR
|
\fB\-\-UILocale\fR \fIlocale\fR
|
||||||
Start with \fIlocale\fR resources as UI Locale.
|
Start with \fIlocale\fR resources as UI Locale.
|
||||||
.TP
|
.TP
|
||||||
\fB\-\-safe\-mode\fR
|
\fB\-\-save\-mode\fR
|
||||||
Disables extensions and themes for this session.
|
Disables extensions and themes for this session.
|
||||||
.TP
|
.TP
|
||||||
\fB\-\-headless\fR
|
\fB\-\-headless\fR
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!-- Copyright 2019 Firefox contributors -->
|
|
||||||
<component type="desktop">
|
|
||||||
<id>firefox.desktop</id>
|
|
||||||
<metadata_license>CC0-1.0</metadata_license>
|
|
||||||
<name>Firefox</name>
|
|
||||||
<summary>Web Browser</summary>
|
|
||||||
<summary xml:lang="ca">Navegador web</summary>
|
|
||||||
<summary xml:lang="cs">Webový prohlížeč</summary>
|
|
||||||
<summary xml:lang="es">Navegador web</summary>
|
|
||||||
<summary xml:lang="fa">مرورگر اینترنتی</summary>
|
|
||||||
<summary xml:lang="fi">WWW-selain</summary>
|
|
||||||
<summary xml:lang="fr">Navigateur Web</summary>
|
|
||||||
<summary xml:lang="hu">Webböngésző</summary>
|
|
||||||
<summary xml:lang="it">Browser Web</summary>
|
|
||||||
<summary xml:lang="ja">ウェブ・ブラウザ</summary>
|
|
||||||
<summary xml:lang="ko">웹 브라우저</summary>
|
|
||||||
<summary xml:lang="nb">Nettleser</summary>
|
|
||||||
<summary xml:lang="nl">Webbrowser</summary>
|
|
||||||
<summary xml:lang="nn">Nettlesar</summary>
|
|
||||||
<summary xml:lang="no">Nettleser</summary>
|
|
||||||
<summary xml:lang="pl">Przeglądarka WWW</summary>
|
|
||||||
<summary xml:lang="pt">Navegador Web</summary>
|
|
||||||
<summary xml:lang="pt_BR">Navegador Web</summary>
|
|
||||||
<summary xml:lang="sk">Internetový prehliadač</summary>
|
|
||||||
<summary xml:lang="sv">Webbläsare</summary>
|
|
||||||
<description>
|
|
||||||
<p>
|
|
||||||
Bringing together all kinds of awesomeness to make browsing better for you.
|
|
||||||
Get to your favorite sites quickly – even if you don’t remember the URLs.
|
|
||||||
Type your term into the location bar (aka the Awesome Bar) and the autocomplete
|
|
||||||
function will include possible matches from your browsing history, bookmarked
|
|
||||||
sites and open tabs.
|
|
||||||
</p>
|
|
||||||
</description>
|
|
||||||
<url type="homepage">https://www.mozilla.org</url>
|
|
||||||
<update_contact>stransky@redhat.com</update_contact>
|
|
||||||
<kudos>
|
|
||||||
<kudo>ModernToolkit</kudo>
|
|
||||||
<kudo>SearchProvider</kudo>
|
|
||||||
</kudos>
|
|
||||||
<project_group>Mozilla</project_group>
|
|
||||||
<project_license>GPL-3.0+</project_license>
|
|
||||||
<developer_name>Mozilla Corporation</developer_name>
|
|
||||||
<url type="bugtracker">https://bugzilla.mozilla.org/</url>
|
|
||||||
<url type="help">https://support.mozilla.org/</url>
|
|
||||||
<translation type="gettext">firefox</translation>
|
|
||||||
<provides>
|
|
||||||
<id>firefox.desktop</id>
|
|
||||||
</provides>
|
|
||||||
<screenshots>
|
|
||||||
<screenshot type="default">https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/firefox/a.png</screenshot>
|
|
||||||
<screenshot>https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/firefox/b.png</screenshot>
|
|
||||||
<screenshot>https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/firefox/c.png</screenshot>
|
|
||||||
</screenshots>
|
|
||||||
<releases>
|
|
||||||
<release version="__VERSION__"/>
|
|
||||||
</releases>
|
|
||||||
</component>
|
|
106
firefox.desktop
106
firefox.desktop
@ -50,7 +50,7 @@ MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xm
|
|||||||
StartupNotify=true
|
StartupNotify=true
|
||||||
Categories=Network;WebBrowser;
|
Categories=Network;WebBrowser;
|
||||||
Keywords=web;browser;internet;
|
Keywords=web;browser;internet;
|
||||||
Actions=new-window;new-private-window;profile-manager-window;
|
Actions=new-window;new-private-window;
|
||||||
|
|
||||||
[Desktop Action new-window]
|
[Desktop Action new-window]
|
||||||
Name=Open a New Window
|
Name=Open a New Window
|
||||||
@ -63,8 +63,8 @@ Name[ast]=Ventana nueva
|
|||||||
Name[az]=Yeni Pəncərə
|
Name[az]=Yeni Pəncərə
|
||||||
Name[be]=Новае акно
|
Name[be]=Новае акно
|
||||||
Name[bg]=Нов прозорец
|
Name[bg]=Нов прозорец
|
||||||
Name[bn_BD]=নতুন উইন্ডো (N)
|
Name[bn-BD]=নতুন উইন্ডো (N)
|
||||||
Name[bn_IN]=নতুন উইন্ডো
|
Name[bn-IN]=নতুন উইন্ডো
|
||||||
Name[br]=Prenestr nevez
|
Name[br]=Prenestr nevez
|
||||||
Name[brx]=गोदान उइन्ड'(N)
|
Name[brx]=गोदान उइन्ड'(N)
|
||||||
Name[bs]=Novi prozor
|
Name[bs]=Novi prozor
|
||||||
@ -76,37 +76,37 @@ Name[da]=Nyt vindue
|
|||||||
Name[de]=Neues Fenster
|
Name[de]=Neues Fenster
|
||||||
Name[dsb]=Nowe wokno
|
Name[dsb]=Nowe wokno
|
||||||
Name[el]=Νέο παράθυρο
|
Name[el]=Νέο παράθυρο
|
||||||
Name[en_GB]=New Window
|
Name[en-GB]=New Window
|
||||||
Name[en_US]=New Window
|
Name[en-US]=New Window
|
||||||
Name[en_ZA]=New Window
|
Name[en-ZA]=New Window
|
||||||
Name[eo]=Nova fenestro
|
Name[eo]=Nova fenestro
|
||||||
Name[es_AR]=Nueva ventana
|
Name[es-AR]=Nueva ventana
|
||||||
Name[es_CL]=Nueva ventana
|
Name[es-CL]=Nueva ventana
|
||||||
Name[es_ES]=Nueva ventana
|
Name[es-ES]=Nueva ventana
|
||||||
Name[es_MX]=Nueva ventana
|
Name[es-MX]=Nueva ventana
|
||||||
Name[et]=Uus aken
|
Name[et]=Uus aken
|
||||||
Name[eu]=Leiho berria
|
Name[eu]=Leiho berria
|
||||||
Name[fa]=پنجره جدید
|
Name[fa]=پنجره جدید
|
||||||
Name[ff]=Henorde Hesere
|
Name[ff]=Henorde Hesere
|
||||||
Name[fi]=Uusi ikkuna
|
Name[fi]=Uusi ikkuna
|
||||||
Name[fr]=Nouvelle fenêtre
|
Name[fr]=Nouvelle fenêtre
|
||||||
Name[fy_NL]=Nij finster
|
Name[fy-NL]=Nij finster
|
||||||
Name[ga_IE]=Fuinneog Nua
|
Name[ga-IE]=Fuinneog Nua
|
||||||
Name[gd]=Uinneag ùr
|
Name[gd]=Uinneag ùr
|
||||||
Name[gl]=Nova xanela
|
Name[gl]=Nova xanela
|
||||||
Name[gn]=Ovetã pyahu
|
Name[gn]=Ovetã pyahu
|
||||||
Name[gu_IN]=નવી વિન્ડો
|
Name[gu-IN]=નવી વિન્ડો
|
||||||
Name[he]=חלון חדש
|
Name[he]=חלון חדש
|
||||||
Name[hi_IN]=नया विंडो
|
Name[hi-IN]=नया विंडो
|
||||||
Name[hr]=Novi prozor
|
Name[hr]=Novi prozor
|
||||||
Name[hsb]=Nowe wokno
|
Name[hsb]=Nowe wokno
|
||||||
Name[hu]=Új ablak
|
Name[hu]=Új ablak
|
||||||
Name[hy_AM]=Նոր Պատուհան
|
Name[hy-AM]=Նոր Պատուհան
|
||||||
Name[id]=Jendela Baru
|
Name[id]=Jendela Baru
|
||||||
Name[is]=Nýr gluggi
|
Name[is]=Nýr gluggi
|
||||||
Name[it]=Nuova finestra
|
Name[it]=Nuova finestra
|
||||||
Name[ja]=新しいウィンドウ
|
Name[ja]=新しいウィンドウ
|
||||||
Name[ja_JP-mac]=新規ウインドウ
|
Name[ja-JP-mac]=新規ウインドウ
|
||||||
Name[ka]=ახალი ფანჯარა
|
Name[ka]=ახალი ფანჯარა
|
||||||
Name[kk]=Жаңа терезе
|
Name[kk]=Жаңа терезе
|
||||||
Name[km]=បង្អួចថ្មី
|
Name[km]=បង្អួចថ្មី
|
||||||
@ -125,15 +125,15 @@ Name[ml]=പുതിയ ജാലകം
|
|||||||
Name[mr]=नवीन पटल
|
Name[mr]=नवीन पटल
|
||||||
Name[ms]=Tetingkap Baru
|
Name[ms]=Tetingkap Baru
|
||||||
Name[my]=ဝင်းဒိုးအသစ်
|
Name[my]=ဝင်းဒိုးအသစ်
|
||||||
Name[nb_NO]=Nytt vindu
|
Name[nb-NO]=Nytt vindu
|
||||||
Name[ne_NP]=नयाँ सञ्झ्याल
|
Name[ne-NP]=नयाँ सञ्झ्याल
|
||||||
Name[nl]=Nieuw venster
|
Name[nl]=Nieuw venster
|
||||||
Name[nn_NO]=Nytt vindauge
|
Name[nn-NO]=Nytt vindauge
|
||||||
Name[or]=ନୂତନ ୱିଣ୍ଡୋ
|
Name[or]=ନୂତନ ୱିଣ୍ଡୋ
|
||||||
Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
|
Name[pa-IN]=ਨਵੀਂ ਵਿੰਡੋ
|
||||||
Name[pl]=Nowe okno
|
Name[pl]=Nowe okno
|
||||||
Name[pt_BR]=Nova janela
|
Name[pt-BR]=Nova janela
|
||||||
Name[pt_PT]=Nova janela
|
Name[pt-PT]=Nova janela
|
||||||
Name[rm]=Nova fanestra
|
Name[rm]=Nova fanestra
|
||||||
Name[ro]=Fereastră nouă
|
Name[ro]=Fereastră nouă
|
||||||
Name[ru]=Новое окно
|
Name[ru]=Новое окно
|
||||||
@ -144,7 +144,7 @@ Name[sl]=Novo okno
|
|||||||
Name[son]=Zanfun taaga
|
Name[son]=Zanfun taaga
|
||||||
Name[sq]=Dritare e Re
|
Name[sq]=Dritare e Re
|
||||||
Name[sr]=Нови прозор
|
Name[sr]=Нови прозор
|
||||||
Name[sv_SE]=Nytt fönster
|
Name[sv-SE]=Nytt fönster
|
||||||
Name[ta]=புதிய சாளரம்
|
Name[ta]=புதிய சாளரம்
|
||||||
Name[te]=కొత్త విండో
|
Name[te]=కొత్త విండో
|
||||||
Name[th]=หน้าต่างใหม่
|
Name[th]=หน้าต่างใหม่
|
||||||
@ -156,9 +156,11 @@ Name[uz]=Yangi oyna
|
|||||||
Name[vi]=Cửa sổ mới
|
Name[vi]=Cửa sổ mới
|
||||||
Name[wo]=Palanteer bu bees
|
Name[wo]=Palanteer bu bees
|
||||||
Name[xh]=Ifestile entsha
|
Name[xh]=Ifestile entsha
|
||||||
Name[zh_CN]=新建窗口
|
Name[zh-CN]=新建窗口
|
||||||
Name[zh_TW]=開新視窗
|
Name[zh-TW]=開新視窗
|
||||||
Exec=firefox --new-window %u
|
|
||||||
|
|
||||||
|
Exec=firefox %u
|
||||||
|
|
||||||
[Desktop Action new-private-window]
|
[Desktop Action new-private-window]
|
||||||
Name=Open a New Private Window
|
Name=Open a New Private Window
|
||||||
@ -171,8 +173,8 @@ Name[ast]=Ventana privada nueva
|
|||||||
Name[az]=Yeni Məxfi Pəncərə
|
Name[az]=Yeni Məxfi Pəncərə
|
||||||
Name[be]=Новае акно адасаблення
|
Name[be]=Новае акно адасаблення
|
||||||
Name[bg]=Нов прозорец за поверително сърфиране
|
Name[bg]=Нов прозорец за поверително сърфиране
|
||||||
Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
|
Name[bn-BD]=নতুন ব্যক্তিগত উইন্ডো
|
||||||
Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
|
Name[bn-IN]=নতুন ব্যক্তিগত উইন্ডো
|
||||||
Name[br]=Prenestr merdeiñ prevez nevez
|
Name[br]=Prenestr merdeiñ prevez nevez
|
||||||
Name[brx]=गोदान प्राइभेट उइन्ड'
|
Name[brx]=गोदान प्राइभेट उइन्ड'
|
||||||
Name[bs]=Novi privatni prozor
|
Name[bs]=Novi privatni prozor
|
||||||
@ -184,37 +186,37 @@ Name[da]=Nyt privat vindue
|
|||||||
Name[de]=Neues privates Fenster
|
Name[de]=Neues privates Fenster
|
||||||
Name[dsb]=Nowe priwatne wokno
|
Name[dsb]=Nowe priwatne wokno
|
||||||
Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
|
Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
|
||||||
Name[en_GB]=New Private Window
|
Name[en-GB]=New Private Window
|
||||||
Name[en_US]=New Private Window
|
Name[en-US]=New Private Window
|
||||||
Name[en_ZA]=New Private Window
|
Name[en-ZA]=New Private Window
|
||||||
Name[eo]=Nova privata fenestro
|
Name[eo]=Nova privata fenestro
|
||||||
Name[es_AR]=Nueva ventana privada
|
Name[es-AR]=Nueva ventana privada
|
||||||
Name[es_CL]=Nueva ventana privada
|
Name[es-CL]=Nueva ventana privada
|
||||||
Name[es_ES]=Nueva ventana privada
|
Name[es-ES]=Nueva ventana privada
|
||||||
Name[es_MX]=Nueva ventana privada
|
Name[es-MX]=Nueva ventana privada
|
||||||
Name[et]=Uus privaatne aken
|
Name[et]=Uus privaatne aken
|
||||||
Name[eu]=Leiho pribatu berria
|
Name[eu]=Leiho pribatu berria
|
||||||
Name[fa]=پنجره ناشناس جدید
|
Name[fa]=پنجره ناشناس جدید
|
||||||
Name[ff]=Henorde Suturo Hesere
|
Name[ff]=Henorde Suturo Hesere
|
||||||
Name[fi]=Uusi yksityinen ikkuna
|
Name[fi]=Uusi yksityinen ikkuna
|
||||||
Name[fr]=Nouvelle fenêtre de navigation privée
|
Name[fr]=Nouvelle fenêtre de navigation privée
|
||||||
Name[fy_NL]=Nij priveefinster
|
Name[fy-NL]=Nij priveefinster
|
||||||
Name[ga_IE]=Fuinneog Nua Phríobháideach
|
Name[ga-IE]=Fuinneog Nua Phríobháideach
|
||||||
Name[gd]=Uinneag phrìobhaideach ùr
|
Name[gd]=Uinneag phrìobhaideach ùr
|
||||||
Name[gl]=Nova xanela privada
|
Name[gl]=Nova xanela privada
|
||||||
Name[gn]=Ovetã ñemi pyahu
|
Name[gn]=Ovetã ñemi pyahu
|
||||||
Name[gu_IN]=નવી ખાનગી વિન્ડો
|
Name[gu-IN]=નવી ખાનગી વિન્ડો
|
||||||
Name[he]=חלון פרטי חדש
|
Name[he]=חלון פרטי חדש
|
||||||
Name[hi_IN]=नयी निजी विंडो
|
Name[hi-IN]=नयी निजी विंडो
|
||||||
Name[hr]=Novi privatni prozor
|
Name[hr]=Novi privatni prozor
|
||||||
Name[hsb]=Nowe priwatne wokno
|
Name[hsb]=Nowe priwatne wokno
|
||||||
Name[hu]=Új privát ablak
|
Name[hu]=Új privát ablak
|
||||||
Name[hy_AM]=Սկսել Գաղտնի դիտարկում
|
Name[hy-AM]=Սկսել Գաղտնի դիտարկում
|
||||||
Name[id]=Jendela Mode Pribadi Baru
|
Name[id]=Jendela Mode Pribadi Baru
|
||||||
Name[is]=Nýr huliðsgluggi
|
Name[is]=Nýr huliðsgluggi
|
||||||
Name[it]=Nuova finestra anonima
|
Name[it]=Nuova finestra anonima
|
||||||
Name[ja]=新しいプライベートウィンドウ
|
Name[ja]=新しいプライベートウィンドウ
|
||||||
Name[ja_JP-mac]=新規プライベートウインドウ
|
Name[ja-JP-mac]=新規プライベートウインドウ
|
||||||
Name[ka]=ახალი პირადი ფანჯარა
|
Name[ka]=ახალი პირადი ფანჯარა
|
||||||
Name[kk]=Жаңа жекелік терезе
|
Name[kk]=Жаңа жекелік терезе
|
||||||
Name[km]=បង្អួចឯកជនថ្មី
|
Name[km]=បង្អួចឯកជនថ្មី
|
||||||
@ -233,15 +235,15 @@ Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
|
|||||||
Name[mr]=नवीन वैयक्तिक पटल
|
Name[mr]=नवीन वैयक्तिक पटल
|
||||||
Name[ms]=Tetingkap Persendirian Baharu
|
Name[ms]=Tetingkap Persendirian Baharu
|
||||||
Name[my]=New Private Window
|
Name[my]=New Private Window
|
||||||
Name[nb_NO]=Nytt privat vindu
|
Name[nb-NO]=Nytt privat vindu
|
||||||
Name[ne_NP]=नयाँ निजी सञ्झ्याल
|
Name[ne-NP]=नयाँ निजी सञ्झ्याल
|
||||||
Name[nl]=Nieuw privévenster
|
Name[nl]=Nieuw privévenster
|
||||||
Name[nn_NO]=Nytt privat vindauge
|
Name[nn-NO]=Nytt privat vindauge
|
||||||
Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
|
Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
|
||||||
Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
|
Name[pa-IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
|
||||||
Name[pl]=Nowe okno prywatne
|
Name[pl]=Nowe okno prywatne
|
||||||
Name[pt_BR]=Nova janela privativa
|
Name[pt-BR]=Nova janela privativa
|
||||||
Name[pt_PT]=Nova janela privada
|
Name[pt-PT]=Nova janela privada
|
||||||
Name[rm]=Nova fanestra privata
|
Name[rm]=Nova fanestra privata
|
||||||
Name[ro]=Fereastră privată nouă
|
Name[ro]=Fereastră privată nouă
|
||||||
Name[ru]=Новое приватное окно
|
Name[ru]=Новое приватное окно
|
||||||
@ -252,7 +254,7 @@ Name[sl]=Novo zasebno okno
|
|||||||
Name[son]=Sutura zanfun taaga
|
Name[son]=Sutura zanfun taaga
|
||||||
Name[sq]=Dritare e Re Private
|
Name[sq]=Dritare e Re Private
|
||||||
Name[sr]=Нови приватан прозор
|
Name[sr]=Нови приватан прозор
|
||||||
Name[sv_SE]=Nytt privat fönster
|
Name[sv-SE]=Nytt privat fönster
|
||||||
Name[ta]=புதிய தனிப்பட்ட சாளரம்
|
Name[ta]=புதிய தனிப்பட்ட சாளரம்
|
||||||
Name[te]=కొత్త ఆంతరంగిక విండో
|
Name[te]=కొత్త ఆంతరంగిక విండో
|
||||||
Name[th]=หน้าต่างส่วนตัวใหม่
|
Name[th]=หน้าต่างส่วนตัวใหม่
|
||||||
@ -264,11 +266,7 @@ Name[uz]=Yangi maxfiy oyna
|
|||||||
Name[vi]=Cửa sổ riêng tư mới
|
Name[vi]=Cửa sổ riêng tư mới
|
||||||
Name[wo]=Panlanteeru biir bu bees
|
Name[wo]=Panlanteeru biir bu bees
|
||||||
Name[xh]=Ifestile yangasese entsha
|
Name[xh]=Ifestile yangasese entsha
|
||||||
Name[zh_CN]=新建隐私浏览窗口
|
Name[zh-CN]=新建隐私浏览窗口
|
||||||
Name[zh_TW]=新增隱私視窗
|
Name[zh-TW]=新增隱私視窗
|
||||||
Exec=firefox --private-window %u
|
Exec=firefox --private-window %u
|
||||||
|
|
||||||
[Desktop Action profile-manager-window]
|
|
||||||
Name=Open the Profile Manager
|
|
||||||
Name[cs]=Správa profilů
|
|
||||||
Exec=firefox --ProfileManager
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# The contents of this file are subject to the Netscape Public
|
# The contents of this file are subject to the Netscape Public
|
||||||
# License Version 1.1 (the "License"); you may not use this file
|
# License Version 1.1 (the "License"); you may not use this file
|
||||||
@ -39,12 +39,12 @@ cmdname=`basename $0`
|
|||||||
MOZ_ARCH=$(uname -m)
|
MOZ_ARCH=$(uname -m)
|
||||||
case $MOZ_ARCH in
|
case $MOZ_ARCH in
|
||||||
x86_64 | s390x | sparc64)
|
x86_64 | s390x | sparc64)
|
||||||
MOZ_LIB_DIR="/__PREFIX__/lib64"
|
MOZ_LIB_DIR="%PREFIX%/lib64"
|
||||||
SECONDARY_LIB_DIR="/__PREFIX__/lib"
|
SECONDARY_LIB_DIR="%PREFIX%/lib"
|
||||||
;;
|
;;
|
||||||
* )
|
* )
|
||||||
MOZ_LIB_DIR="/__PREFIX__/lib"
|
MOZ_LIB_DIR="%PREFIX%/lib"
|
||||||
SECONDARY_LIB_DIR="/__PREFIX__/lib64"
|
SECONDARY_LIB_DIR="%PREFIX%/lib64"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@ -65,29 +65,12 @@ MOZ_LANGPACKS_DIR="$MOZ_DIST_BIN/langpacks"
|
|||||||
MOZ_EXTENSIONS_PROFILE_DIR="$HOME/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
|
MOZ_EXTENSIONS_PROFILE_DIR="$HOME/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
|
||||||
MOZ_PROGRAM="$MOZ_DIST_BIN/$MOZ_FIREFOX_FILE"
|
MOZ_PROGRAM="$MOZ_DIST_BIN/$MOZ_FIREFOX_FILE"
|
||||||
MOZ_LAUNCHER="$MOZ_DIST_BIN/run-mozilla.sh"
|
MOZ_LAUNCHER="$MOZ_DIST_BIN/run-mozilla.sh"
|
||||||
GETENFORCE_FILE="/usr/sbin/getenforce"
|
|
||||||
|
|
||||||
##
|
|
||||||
## Enable Wayland backend?
|
|
||||||
##
|
|
||||||
if __DEFAULT_WAYLAND__ && ! [ $MOZ_DISABLE_WAYLAND ]; then
|
|
||||||
if [ "$XDG_CURRENT_DESKTOP" == "GNOME" ]; then
|
|
||||||
export MOZ_ENABLE_WAYLAND=1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
##
|
|
||||||
## Use D-Bus remote exclusively when there's Wayland display.
|
|
||||||
##
|
|
||||||
if [ "$WAYLAND_DISPLAY" ]; then
|
|
||||||
export MOZ_DBUS_REMOTE=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## Set MOZ_GRE_CONF
|
## Set MOZ_GRE_CONF
|
||||||
##
|
##
|
||||||
MOZ_GRE_CONF=/etc/gre.d/gre.conf
|
MOZ_GRE_CONF=/etc/gre.d/gre.conf
|
||||||
if [ "$MOZ_LIB_DIR" == "/__PREFIX__/lib64" ]; then
|
if [ "$MOZ_LIB_DIR" == "/usr/lib64" ]; then
|
||||||
MOZ_GRE_CONF=/etc/gre.d/gre64.conf
|
MOZ_GRE_CONF=/etc/gre.d/gre64.conf
|
||||||
fi
|
fi
|
||||||
export MOZ_GRE_CONF
|
export MOZ_GRE_CONF
|
||||||
@ -115,7 +98,7 @@ export MOZ_PLUGIN_PATH
|
|||||||
##
|
##
|
||||||
## Set MOZ_APP_LAUNCHER for gnome-session
|
## Set MOZ_APP_LAUNCHER for gnome-session
|
||||||
##
|
##
|
||||||
export MOZ_APP_LAUNCHER="/__PREFIX__/bin/firefox"
|
export MOZ_APP_LAUNCHER="%PREFIX%/bin/firefox"
|
||||||
|
|
||||||
##
|
##
|
||||||
## Set FONTCONFIG_PATH for Xft/fontconfig
|
## Set FONTCONFIG_PATH for Xft/fontconfig
|
||||||
@ -170,24 +153,15 @@ export MOZ_USE_XINPUT2=1
|
|||||||
##
|
##
|
||||||
FEDORA_LANGPACK_CONFIG="$MOZ_EXTENSIONS_PROFILE_DIR/.fedora-langpack-install"
|
FEDORA_LANGPACK_CONFIG="$MOZ_EXTENSIONS_PROFILE_DIR/.fedora-langpack-install"
|
||||||
|
|
||||||
# MOZ_DISABLE_LANGPACKS disables language packs completely
|
|
||||||
MOZILLA_DOWN=0
|
MOZILLA_DOWN=0
|
||||||
if ! [ $MOZ_DISABLE_LANGPACKS ] || [ $MOZ_DISABLE_LANGPACKS -eq 0 ]; then
|
if ! [ $MOZ_DISABLE_LANGPACKS ] || [ $MOZ_DISABLE_LANGPACKS -eq 0 ]; then
|
||||||
if [ -x $MOZ_DIST_BIN/$MOZ_FIREFOX_FILE ]; then
|
if [ -x $MOZ_DIST_BIN/$MOZ_FIREFOX_FILE ]; then
|
||||||
# Is firefox running?
|
# Is firefox running?
|
||||||
/__PREFIX__/bin/pidof $MOZ_PROGRAM > /dev/null 2>&1
|
pidof firefox > /dev/null 2>&1
|
||||||
MOZILLA_DOWN=$?
|
MOZILLA_DOWN=$?
|
||||||
fi
|
fi
|
||||||
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` != "Disabled" ]; then
|
|
||||||
(restorecon -vr ~/.mozilla/firefox/* &)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Modify language pack configuration only when firefox is not running
|
# Modify language pack configuration only when firefox is not running
|
||||||
# and language packs are not disabled
|
# and language packs are not disabled
|
||||||
if [ $MOZILLA_DOWN -ne 0 ]; then
|
if [ $MOZILLA_DOWN -ne 0 ]; then
|
||||||
@ -207,8 +181,8 @@ if [ $MOZILLA_DOWN -ne 0 ]; then
|
|||||||
CURRENT_LOCALE=${CURRENT_LOCALE:-$LANG}
|
CURRENT_LOCALE=${CURRENT_LOCALE:-$LANG}
|
||||||
|
|
||||||
# Try with a local variant first, then without a local variant
|
# Try with a local variant first, then without a local variant
|
||||||
SHORTMOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*||g" | sed "s|\..*||g"`
|
SHORTMOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*||g"`
|
||||||
MOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*|-\1|g" | sed "s|\..*||g"`
|
MOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*|-\1|g"`
|
||||||
|
|
||||||
function create_langpack_link() {
|
function create_langpack_link() {
|
||||||
local language=$*
|
local language=$*
|
||||||
@ -264,12 +238,28 @@ do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
# Flatpak specific environment variables
|
# Linux version specific environment variables
|
||||||
%FLATPAK_ENV_VARS%
|
%RHEL_ENV_VARS%
|
||||||
|
|
||||||
# Don't throw "old profile" dialog box.
|
# Don't throw "old profile" dialog box.
|
||||||
export MOZ_ALLOW_DOWNGRADE=1
|
export MOZ_ALLOW_DOWNGRADE=1
|
||||||
|
|
||||||
|
# Make sure at-spi-bus is running
|
||||||
|
if ! dbus-send --session \
|
||||||
|
--dest=org.freedesktop.DBus \
|
||||||
|
--type=method_call \
|
||||||
|
--print-reply \
|
||||||
|
/org/freedesktop/DBus \
|
||||||
|
org.freedesktop.DBus.ListNames \
|
||||||
|
| grep org.a11y.Bus > /dev/null; then
|
||||||
|
if [ -f "$MOZ_LIB_DIR/firefox/bundled/libexec/at-spi-bus-launcher" ]; then
|
||||||
|
echo "Starting a11y dbus service..."
|
||||||
|
$MOZ_LIB_DIR/firefox/bundled/libexec/at-spi-bus-launcher &
|
||||||
|
else
|
||||||
|
echo "Running without a11y support!"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Run the browser
|
# Run the browser
|
||||||
debugging=0
|
debugging=0
|
||||||
if [ $debugging = 1 ]
|
if [ $debugging = 1 ]
|
||||||
@ -277,4 +267,5 @@ then
|
|||||||
echo $MOZ_LAUNCHER $script_args $MOZ_PROGRAM "$@"
|
echo $MOZ_LAUNCHER $script_args $MOZ_PROGRAM "$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
exec $MOZ_LAUNCHER $script_args $MOZ_PROGRAM "$@"
|
exec $MOZ_LAUNCHER $script_args $MOZ_PROGRAM "$@"
|
||||||
|
2161
firefox.spec
2161
firefox.spec
File diff suppressed because it is too large
Load Diff
@ -13,6 +13,7 @@ to be used with 'cargo vendor' commmand.
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
cbindgen = "0.14.1"
|
cbindgen = "0.14.1"
|
||||||
|
serde = "1.0.104"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "dummy"
|
name = "dummy"
|
||||||
@ -20,7 +21,7 @@ path = "dummy.rs"
|
|||||||
doc = false
|
doc = false
|
||||||
EOL
|
EOL
|
||||||
|
|
||||||
cargo install cargo-vendor
|
cargo install cargo-vendor --locked
|
||||||
cargo vendor
|
cargo vendor
|
||||||
|
|
||||||
cd vendor
|
cd vendor
|
||||||
|
@ -1 +0,0 @@
|
|||||||
AIzaSyB2h2OuRcUgy5N-5hsZqiPW6sH3n_rptiQ
|
|
@ -1,6 +1,6 @@
|
|||||||
diff -up firefox-75.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 firefox-75.0/extensions/pref/autoconfig/src/nsReadConfig.cpp
|
diff -up firefox-78.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 firefox-78.0/extensions/pref/autoconfig/src/nsReadConfig.cpp
|
||||||
--- firefox-75.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 2020-04-03 21:34:41.000000000 +0200
|
--- firefox-78.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 2020-06-17 04:18:58.000000000 +0200
|
||||||
+++ firefox-75.0/extensions/pref/autoconfig/src/nsReadConfig.cpp 2020-04-06 22:40:02.760674871 +0200
|
+++ firefox-78.0/extensions/pref/autoconfig/src/nsReadConfig.cpp 2020-06-25 13:45:28.816999491 +0200
|
||||||
@@ -244,8 +244,20 @@ nsresult nsReadConfig::openAndEvaluateJS
|
@@ -244,8 +244,20 @@ nsresult nsReadConfig::openAndEvaluateJS
|
||||||
if (NS_FAILED(rv)) return rv;
|
if (NS_FAILED(rv)) return rv;
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ diff -up firefox-75.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 fi
|
|||||||
+ getter_AddRefs(jsFile));
|
+ getter_AddRefs(jsFile));
|
||||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||||
+
|
+
|
||||||
+ rv = jsFile->AppendNative(nsLiteralCString("pref"));
|
+ rv = jsFile->AppendNative(NS_LITERAL_CSTRING("pref"));
|
||||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||||
+ rv = jsFile->AppendNative(nsDependentCString(aFileName));
|
+ rv = jsFile->AppendNative(nsDependentCString(aFileName));
|
||||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||||
@ -23,22 +23,21 @@ diff -up firefox-75.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 fi
|
|||||||
} else {
|
} else {
|
||||||
nsAutoCString location("resource://gre/defaults/autoconfig/");
|
nsAutoCString location("resource://gre/defaults/autoconfig/");
|
||||||
location += aFileName;
|
location += aFileName;
|
||||||
diff -up firefox-75.0/modules/libpref/Preferences.cpp.1170092 firefox-75.0/modules/libpref/Preferences.cpp
|
diff -up firefox-78.0/modules/libpref/Preferences.cpp.1170092 firefox-78.0/modules/libpref/Preferences.cpp
|
||||||
--- firefox-75.0/modules/libpref/Preferences.cpp.1170092 2020-04-06 22:40:02.761674865 +0200
|
--- firefox-78.0/modules/libpref/Preferences.cpp.1170092 2020-06-25 13:45:28.818999498 +0200
|
||||||
+++ firefox-75.0/modules/libpref/Preferences.cpp 2020-04-06 22:40:57.675325227 +0200
|
+++ firefox-78.0/modules/libpref/Preferences.cpp 2020-06-25 13:48:45.996708102 +0200
|
||||||
@@ -4468,6 +4468,9 @@ nsresult Preferences::InitInitialObjects
|
@@ -4499,6 +4499,8 @@ nsresult Preferences::InitInitialObjects
|
||||||
//
|
//
|
||||||
// Thus, in the omni.jar case, we always load app-specific default
|
// Thus, in the omni.jar case, we always load app-specific default
|
||||||
// preferences from omni.jar, whether or not `$app == $gre`.
|
// preferences from omni.jar, whether or not `$app == $gre`.
|
||||||
+ //
|
|
||||||
+ // At very end load configuration from system config location:
|
+ // At very end load configuration from system config location:
|
||||||
+ // - /etc/firefox/pref/*.js
|
+ // - /etc/firefox/pref/*.js
|
||||||
|
|
||||||
nsresult rv = NS_ERROR_FAILURE;
|
nsresult rv = NS_ERROR_FAILURE;
|
||||||
UniquePtr<nsZipFind> find;
|
UniquePtr<nsZipFind> find;
|
||||||
diff -up firefox-75.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-75.0/toolkit/xre/nsXREDirProvider.cpp
|
diff -up firefox-78.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-78.0/toolkit/xre/nsXREDirProvider.cpp
|
||||||
--- firefox-75.0/toolkit/xre/nsXREDirProvider.cpp.1170092 2020-04-03 21:35:39.000000000 +0200
|
--- firefox-78.0/toolkit/xre/nsXREDirProvider.cpp.1170092 2020-06-17 04:20:11.000000000 +0200
|
||||||
+++ firefox-75.0/toolkit/xre/nsXREDirProvider.cpp 2020-04-06 22:40:02.761674865 +0200
|
+++ firefox-78.0/toolkit/xre/nsXREDirProvider.cpp 2020-06-25 13:48:28.613645633 +0200
|
||||||
@@ -60,6 +60,7 @@
|
@@ -60,6 +60,7 @@
|
||||||
#endif
|
#endif
|
||||||
#ifdef XP_UNIX
|
#ifdef XP_UNIX
|
||||||
@ -54,7 +53,7 @@ diff -up firefox-75.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-75.0/tool
|
|||||||
+
|
+
|
||||||
+#if defined(XP_UNIX)
|
+#if defined(XP_UNIX)
|
||||||
+ if (!strcmp(aProperty, NS_APP_PREFS_SYSTEM_CONFIG_DIR)) {
|
+ if (!strcmp(aProperty, NS_APP_PREFS_SYSTEM_CONFIG_DIR)) {
|
||||||
+ nsCString sysConfigDir = nsLiteralCString("/etc/");
|
+ nsCString sysConfigDir = NS_LITERAL_CSTRING("/etc/");
|
||||||
+ nsCOMPtr<nsIXULAppInfo> appInfo = do_GetService("@mozilla.org/xre/app-info;1");
|
+ nsCOMPtr<nsIXULAppInfo> appInfo = do_GetService("@mozilla.org/xre/app-info;1");
|
||||||
+ if (!appInfo)
|
+ if (!appInfo)
|
||||||
+ return NS_ERROR_NOT_AVAILABLE;
|
+ return NS_ERROR_NOT_AVAILABLE;
|
||||||
@ -69,7 +68,7 @@ diff -up firefox-75.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-75.0/tool
|
|||||||
if (NS_FAILED(rv) || !file) return NS_ERROR_FAILURE;
|
if (NS_FAILED(rv) || !file) return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
if (ensureFilePermissions) {
|
if (ensureFilePermissions) {
|
||||||
@@ -845,6 +861,16 @@ nsresult nsXREDirProvider::GetFilesInter
|
@@ -845,6 +861,17 @@ nsresult nsXREDirProvider::GetFilesInter
|
||||||
|
|
||||||
LoadDirIntoArray(mXULAppDir, kAppendPrefDir, directories);
|
LoadDirIntoArray(mXULAppDir, kAppendPrefDir, directories);
|
||||||
|
|
||||||
@ -78,17 +77,18 @@ diff -up firefox-75.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-75.0/tool
|
|||||||
+ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR,
|
+ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR,
|
||||||
+ getter_AddRefs(systemPrefDir));
|
+ getter_AddRefs(systemPrefDir));
|
||||||
+ if (NS_SUCCEEDED(rv)) {
|
+ if (NS_SUCCEEDED(rv)) {
|
||||||
+ rv = systemPrefDir->AppendNative(nsLiteralCString("pref"));
|
+ rv = systemPrefDir->AppendNative(NS_LITERAL_CSTRING("pref"));
|
||||||
+ if (NS_SUCCEEDED(rv))
|
+ if (NS_SUCCEEDED(rv)) {
|
||||||
+ directories.AppendObject(systemPrefDir);
|
+ directories.AppendObject(systemPrefDir);
|
||||||
+ }
|
+ }
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
rv = NS_NewArrayEnumerator(aResult, directories, NS_GET_IID(nsIFile));
|
rv = NS_NewArrayEnumerator(aResult, directories, NS_GET_IID(nsIFile));
|
||||||
} else if (!strcmp(aProperty, NS_APP_CHROME_DIR_LIST)) {
|
} else if (!strcmp(aProperty, NS_APP_CHROME_DIR_LIST)) {
|
||||||
// NS_APP_CHROME_DIR_LIST is only used to get default (native) icons
|
// NS_APP_CHROME_DIR_LIST is only used to get default (native) icons
|
||||||
diff -up firefox-75.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 firefox-75.0/xpcom/io/nsAppDirectoryServiceDefs.h
|
diff -up firefox-78.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 firefox-78.0/xpcom/io/nsAppDirectoryServiceDefs.h
|
||||||
--- firefox-75.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 2020-04-03 21:35:39.000000000 +0200
|
--- firefox-78.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 2020-06-17 04:20:17.000000000 +0200
|
||||||
+++ firefox-75.0/xpcom/io/nsAppDirectoryServiceDefs.h 2020-04-06 22:40:02.761674865 +0200
|
+++ firefox-78.0/xpcom/io/nsAppDirectoryServiceDefs.h 2020-06-25 13:45:28.819999502 +0200
|
||||||
@@ -60,6 +60,7 @@
|
@@ -60,6 +60,7 @@
|
||||||
#define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL"
|
#define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL"
|
||||||
#define NS_APP_PREFS_OVERRIDE_DIR \
|
#define NS_APP_PREFS_OVERRIDE_DIR \
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
diff -up firefox-80.0/widget/gtk/nsWindow.cpp.1196777 firefox-80.0/widget/gtk/nsWindow.cpp
|
diff -up firefox-68.0/widget/gtk/nsWindow.cpp.1196777 firefox-68.0/widget/gtk/nsWindow.cpp
|
||||||
--- firefox-80.0/widget/gtk/nsWindow.cpp.1196777 2020-08-18 09:47:18.662833910 +0200
|
--- firefox-68.0/widget/gtk/nsWindow.cpp.1196777 2019-05-21 11:29:55.833376744 +0200
|
||||||
+++ firefox-80.0/widget/gtk/nsWindow.cpp 2020-08-18 09:48:19.437478136 +0200
|
+++ firefox-68.0/widget/gtk/nsWindow.cpp 2019-05-21 12:15:35.446089316 +0200
|
||||||
@@ -158,7 +158,8 @@ const gint kEvents =
|
@@ -156,7 +156,8 @@ const gint kEvents =
|
||||||
GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK | GDK_VISIBILITY_NOTIFY_MASK |
|
#if GTK_CHECK_VERSION(3, 4, 0)
|
||||||
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK |
|
GDK_SMOOTH_SCROLL_MASK | GDK_TOUCH_MASK |
|
||||||
GDK_BUTTON_RELEASE_MASK | 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_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;
|
+ GDK_FOCUS_CHANGE_MASK;
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
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']
|
|
||||||
+if CONFIG['CC_TYPE'] != 'clang':
|
|
||||||
+ LDFLAGS += ['--param', 'lto-partitions=1']
|
|
||||||
|
|
||||||
DEFINES['NS_NO_XPCOM'] = True
|
|
||||||
DisableStlWrapping()
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
|||||||
diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
|
|
||||||
--- a/widget/gtk/nsWindow.cpp
|
|
||||||
+++ b/widget/gtk/nsWindow.cpp
|
|
||||||
@@ -1593,7 +1593,14 @@
|
|
||||||
// Get anchor rectangle
|
|
||||||
LayoutDeviceIntRect anchorRect(0, 0, 0, 0);
|
|
||||||
nsMenuPopupFrame* popupFrame = GetMenuPopupFrame(GetFrame());
|
|
||||||
- int32_t p2a = AppUnitsPerCSSPixel() / gfxPlatformGtk::GetFontScaleFactor();
|
|
||||||
+
|
|
||||||
+ int32_t p2a;
|
|
||||||
+ double devPixelsPerCSSPixel = StaticPrefs::layout_css_devPixelsPerPx();
|
|
||||||
+ if (devPixelsPerCSSPixel > 0.0) {
|
|
||||||
+ p2a = AppUnitsPerCSSPixel() / devPixelsPerCSSPixel * GdkScaleFactor();
|
|
||||||
+ } else {
|
|
||||||
+ p2a = AppUnitsPerCSSPixel() / gfxPlatformGtk::GetFontScaleFactor();
|
|
||||||
+ }
|
|
||||||
if (popupFrame) {
|
|
||||||
#ifdef MOZ_WAYLAND
|
|
||||||
anchorRect = LayoutDeviceIntRect::FromAppUnitsToOutside(
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
|||||||
diff --git a/layout/xul/nsMenuPopupFrame.cpp b/layout/xul/nsMenuPopupFrame.cpp
|
|
||||||
--- a/layout/xul/nsMenuPopupFrame.cpp
|
|
||||||
+++ b/layout/xul/nsMenuPopupFrame.cpp
|
|
||||||
@@ -1422,11 +1422,9 @@
|
|
||||||
!GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
|
|
||||||
screenPoint = nsPoint(anchorRect.x, anchorRect.y);
|
|
||||||
mAnchorRect = anchorRect;
|
|
||||||
- } else
|
|
||||||
+ }
|
|
||||||
#endif
|
|
||||||
- {
|
|
||||||
- screenPoint = AdjustPositionForAnchorAlign(anchorRect, hFlip, vFlip);
|
|
||||||
- }
|
|
||||||
+ screenPoint = AdjustPositionForAnchorAlign(anchorRect, hFlip, vFlip);
|
|
||||||
} else {
|
|
||||||
// with no anchor, the popup is positioned relative to the root frame
|
|
||||||
anchorRect = rootScreenRect;
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
|||||||
diff --git a/config/makefiles/rust.mk b/config/makefiles/rust.mk
|
|
||||||
--- a/config/makefiles/rust.mk
|
|
||||||
+++ b/config/makefiles/rust.mk
|
|
||||||
@@ -61,7 +61,11 @@
|
|
||||||
# Enable link-time optimization for release builds, but not when linking
|
|
||||||
# gkrust_gtest.
|
|
||||||
ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE)))
|
|
||||||
+# Pass -Clto for older versions of rust, and CARGO_PROFILE_RELEASE_LTO=true
|
|
||||||
+# for newer ones that support it. Combining the latter with -Clto works, so
|
|
||||||
+# set both everywhere.
|
|
||||||
cargo_rustc_flags += -Clto
|
|
||||||
+export CARGO_PROFILE_RELEASE_LTO=true
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
@ -1,67 +0,0 @@
|
|||||||
changeset: 544864:a8603f131703
|
|
||||||
tag: tip
|
|
||||||
parent: 544861:161920b70ae4
|
|
||||||
user: Martin Stransky <stransky@redhat.com>
|
|
||||||
date: Fri Jul 31 13:39:48 2020 +0200
|
|
||||||
files: dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h
|
|
||||||
description:
|
|
||||||
Bug 1645671 [Linux/VA-API] Create DMABufSurfaceWrapper directly at nsTAttay and disable DMABufSurfaceWrapper class copy and assignment constructors, r?jya
|
|
||||||
|
|
||||||
When DMABufSurfaceWrapper is added to nsTArray, a temporary local DMABufSurfaceWrapper object is created. When the temporary
|
|
||||||
object is deleted after the adding, associated dmabuf data is released which leads to rendering artifact during VA-API video playback.
|
|
||||||
|
|
||||||
As a fix in this patch we create DMABufSurfaceWrapper 'in-place' at nsTAttay.
|
|
||||||
We also disable DMABufSurfaceWrapper class copy and assignment constructors to avoid similar potential issues.
|
|
||||||
|
|
||||||
Differential Revision: https://phabricator.services.mozilla.com/D85152
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
|
|
||||||
--- a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
|
|
||||||
+++ b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
|
|
||||||
@@ -777,17 +777,17 @@ MediaResult FFmpegVideoDecoder<LIBAV_VER
|
|
||||||
RESULT_DETAIL("Unable to get DMABufSurfaceYUV"));
|
|
||||||
}
|
|
||||||
|
|
||||||
# ifdef MOZ_LOGGING
|
|
||||||
static int uid = 0;
|
|
||||||
surface->SetUID(++uid);
|
|
||||||
FFMPEG_LOG("Created new DMABufSurface UID = %d", uid);
|
|
||||||
# endif
|
|
||||||
- mDMABufSurfaces.AppendElement(DMABufSurfaceWrapper(surface, mLib));
|
|
||||||
+ mDMABufSurfaces.EmplaceBack(surface, mLib);
|
|
||||||
surfaceWrapper = &(mDMABufSurfaces[mDMABufSurfaces.Length() - 1]);
|
|
||||||
} else {
|
|
||||||
surface = surfaceWrapper->GetDMABufSurface();
|
|
||||||
bool ret;
|
|
||||||
|
|
||||||
if (mVAAPIDeviceContext) {
|
|
||||||
ret = surface->UpdateYUVData(vaDesc);
|
|
||||||
} else {
|
|
||||||
diff --git a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h
|
|
||||||
--- a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h
|
|
||||||
+++ b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.h
|
|
||||||
@@ -70,16 +70,22 @@ class DMABufSurfaceWrapper final {
|
|
||||||
// Check if DMABufSurface is used by any gecko rendering process
|
|
||||||
// (WebRender or GL compositor) or by DMABUFSurfaceImage/VideoData.
|
|
||||||
bool IsUsed() const { return mSurface->IsGlobalRefSet(); }
|
|
||||||
|
|
||||||
RefPtr<DMABufSurfaceYUV> GetDMABufSurface() const {
|
|
||||||
return mSurface->GetAsDMABufSurfaceYUV();
|
|
||||||
}
|
|
||||||
|
|
||||||
+ // Don't allow DMABufSurfaceWrapper plain copy as it leads to
|
|
||||||
+ // enexpected DMABufSurface/HW buffer releases and we don't want to
|
|
||||||
+ // deep copy them.
|
|
||||||
+ DMABufSurfaceWrapper(const DMABufSurfaceWrapper&) = delete;
|
|
||||||
+ const DMABufSurfaceWrapper& operator=(DMABufSurfaceWrapper const&) = delete;
|
|
||||||
+
|
|
||||||
private:
|
|
||||||
const RefPtr<DMABufSurface> mSurface;
|
|
||||||
const FFmpegLibWrapper* mLib;
|
|
||||||
AVBufferRef* mAVHWFramesContext;
|
|
||||||
AVBufferRef* mHWAVBuffer;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
@ -1,213 +0,0 @@
|
|||||||
diff -up firefox-82.0/widget/gtk/WindowSurfaceWayland.cpp.1656727 firefox-82.0/widget/gtk/WindowSurfaceWayland.cpp
|
|
||||||
--- firefox-82.0/widget/gtk/WindowSurfaceWayland.cpp.1656727 2020-10-15 16:16:53.522050159 +0200
|
|
||||||
+++ firefox-82.0/widget/gtk/WindowSurfaceWayland.cpp 2020-10-15 16:18:24.956289348 +0200
|
|
||||||
@@ -158,7 +158,6 @@ We allocate shared memory (shm) by mmap(
|
|
||||||
between us and wayland compositor. We draw our graphics data to the shm and
|
|
||||||
handle to wayland compositor by WindowBackBuffer/WindowSurfaceWayland
|
|
||||||
(wl_buffer/wl_surface).
|
|
||||||
-
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define EVENT_LOOP_DELAY (1000 / 240)
|
|
||||||
@@ -166,6 +165,44 @@ handle to wayland compositor by WindowBa
|
|
||||||
#define BUFFER_BPP 4
|
|
||||||
gfx::SurfaceFormat WindowBackBuffer::mFormat = gfx::SurfaceFormat::B8G8R8A8;
|
|
||||||
|
|
||||||
+static mozilla::Mutex* gDelayedCommitLock = nullptr;
|
|
||||||
+static GList* gDelayedCommits = nullptr;
|
|
||||||
+
|
|
||||||
+static void DelayedCommitsEnsureMutext() {
|
|
||||||
+ if (!gDelayedCommitLock) {
|
|
||||||
+ gDelayedCommitLock = new mozilla::Mutex("DelayedCommit lock");
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static bool DelayedCommitsCheckAndRemoveSurface(
|
|
||||||
+ WindowSurfaceWayland* aSurface) {
|
|
||||||
+ MutexAutoLock lock(*gDelayedCommitLock);
|
|
||||||
+ GList* foundCommit = g_list_find(gDelayedCommits, aSurface);
|
|
||||||
+ if (foundCommit) {
|
|
||||||
+ gDelayedCommits = g_list_delete_link(gDelayedCommits, foundCommit);
|
|
||||||
+ }
|
|
||||||
+ return foundCommit != nullptr;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static bool DelayedCommitsCheckAndAddSurface(WindowSurfaceWayland* aSurface) {
|
|
||||||
+ MutexAutoLock lock(*gDelayedCommitLock);
|
|
||||||
+ GList* foundCommit = g_list_find(gDelayedCommits, aSurface);
|
|
||||||
+ if (!foundCommit) {
|
|
||||||
+ gDelayedCommits = g_list_prepend(gDelayedCommits, aSurface);
|
|
||||||
+ }
|
|
||||||
+ return foundCommit == nullptr;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+// When a new window is created we may not have a valid wl_surface
|
|
||||||
+// for drawing (Gtk haven't created it yet). All commits are queued
|
|
||||||
+// and CommitWaylandBuffer() is called by timer when wl_surface is ready
|
|
||||||
+// for drawing.
|
|
||||||
+static void WaylandBufferDelayCommitHandler(WindowSurfaceWayland* aSurface) {
|
|
||||||
+ if (DelayedCommitsCheckAndRemoveSurface(aSurface)) {
|
|
||||||
+ aSurface->CommitWaylandBuffer();
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
RefPtr<nsWaylandDisplay> WindowBackBuffer::GetWaylandDisplay() {
|
|
||||||
return mWindowSurfaceWayland->GetWaylandDisplay();
|
|
||||||
}
|
|
||||||
@@ -399,7 +436,6 @@ WindowSurfaceWayland::WindowSurfaceWayla
|
|
||||||
mWaylandFullscreenDamage(false),
|
|
||||||
mFrameCallback(nullptr),
|
|
||||||
mLastCommittedSurface(nullptr),
|
|
||||||
- mDelayedCommitHandle(nullptr),
|
|
||||||
mLastCommitTime(0),
|
|
||||||
mDrawToWaylandBufferDirectly(true),
|
|
||||||
mCanSwitchWaylandBuffer(true),
|
|
||||||
@@ -411,6 +447,7 @@ WindowSurfaceWayland::WindowSurfaceWayla
|
|
||||||
for (int i = 0; i < BACK_BUFFER_NUM; i++) {
|
|
||||||
mShmBackupBuffer[i] = nullptr;
|
|
||||||
}
|
|
||||||
+ DelayedCommitsEnsureMutext();
|
|
||||||
}
|
|
||||||
|
|
||||||
WindowSurfaceWayland::~WindowSurfaceWayland() {
|
|
||||||
@@ -418,12 +455,9 @@ WindowSurfaceWayland::~WindowSurfaceWayl
|
|
||||||
NS_WARNING("Deleted WindowSurfaceWayland with a pending commit!");
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (mDelayedCommitHandle) {
|
|
||||||
- // Delete reference to this to prevent WaylandBufferDelayCommitHandler()
|
|
||||||
- // operate on released this. mDelayedCommitHandle itself will
|
|
||||||
- // be released at WaylandBufferDelayCommitHandler().
|
|
||||||
- *mDelayedCommitHandle = nullptr;
|
|
||||||
- }
|
|
||||||
+ // Delete reference to this to prevent WaylandBufferDelayCommitHandler()
|
|
||||||
+ // operate on released this.
|
|
||||||
+ DelayedCommitsCheckAndRemoveSurface(this);
|
|
||||||
|
|
||||||
if (mFrameCallback) {
|
|
||||||
wl_callback_destroy(mFrameCallback);
|
|
||||||
@@ -864,23 +898,11 @@ bool WindowSurfaceWayland::CommitImageCa
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void WaylandBufferDelayCommitHandler(WindowSurfaceWayland** aSurface) {
|
|
||||||
- if (*aSurface) {
|
|
||||||
- (*aSurface)->DelayedCommitHandler();
|
|
||||||
- } else {
|
|
||||||
- // Referenced WindowSurfaceWayland is already deleted.
|
|
||||||
- // Do nothing but just release the mDelayedCommitHandle allocated at
|
|
||||||
- // WindowSurfaceWayland::CommitWaylandBuffer().
|
|
||||||
- free(aSurface);
|
|
||||||
- }
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
void WindowSurfaceWayland::CommitWaylandBuffer() {
|
|
||||||
LOGWAYLAND(("WindowSurfaceWayland::CommitWaylandBuffer [%p]\n", (void*)this));
|
|
||||||
LOGWAYLAND(
|
|
||||||
(" mDrawToWaylandBufferDirectly = %d\n", mDrawToWaylandBufferDirectly));
|
|
||||||
LOGWAYLAND((" mCanSwitchWaylandBuffer = %d\n", mCanSwitchWaylandBuffer));
|
|
||||||
- LOGWAYLAND((" mDelayedCommitHandle = %p\n", mDelayedCommitHandle));
|
|
||||||
LOGWAYLAND((" mFrameCallback = %p\n", mFrameCallback));
|
|
||||||
LOGWAYLAND((" mLastCommittedSurface = %p\n", mLastCommittedSurface));
|
|
||||||
LOGWAYLAND((" mBufferPendingCommit = %d\n", mBufferPendingCommit));
|
|
||||||
@@ -916,16 +938,10 @@ void WindowSurfaceWayland::CommitWayland
|
|
||||||
MOZ_ASSERT(!mFrameCallback || waylandSurface != mLastCommittedSurface,
|
|
||||||
"Missing wayland surface at frame callback!");
|
|
||||||
|
|
||||||
- // Do nothing if there's already mDelayedCommitHandle pending.
|
|
||||||
- if (!mDelayedCommitHandle) {
|
|
||||||
- mDelayedCommitHandle = static_cast<WindowSurfaceWayland**>(
|
|
||||||
- moz_xmalloc(sizeof(*mDelayedCommitHandle)));
|
|
||||||
- *mDelayedCommitHandle = this;
|
|
||||||
-
|
|
||||||
+ if (DelayedCommitsCheckAndAddSurface(this)) {
|
|
||||||
MessageLoop::current()->PostDelayedTask(
|
|
||||||
NewRunnableFunction("WaylandBackBufferCommit",
|
|
||||||
- &WaylandBufferDelayCommitHandler,
|
|
||||||
- mDelayedCommitHandle),
|
|
||||||
+ &WaylandBufferDelayCommitHandler, this),
|
|
||||||
EVENT_LOOP_DELAY);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
@@ -1037,25 +1053,6 @@ void WindowSurfaceWayland::FrameCallback
|
|
||||||
|
|
||||||
CommitWaylandBuffer();
|
|
||||||
}
|
|
||||||
-
|
|
||||||
-void WindowSurfaceWayland::DelayedCommitHandler() {
|
|
||||||
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
|
|
||||||
- MOZ_ASSERT(mDelayedCommitHandle != nullptr, "Missing mDelayedCommitHandle!");
|
|
||||||
-
|
|
||||||
- LOGWAYLAND(
|
|
||||||
- ("WindowSurfaceWayland::DelayedCommitHandler [%p]\n", (void*)this));
|
|
||||||
-
|
|
||||||
- if (!mDelayedCommitHandle) {
|
|
||||||
- LOGWAYLAND((" We're missing mDelayedCommitHandle!\n"));
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- *mDelayedCommitHandle = nullptr;
|
|
||||||
- free(mDelayedCommitHandle);
|
|
||||||
- mDelayedCommitHandle = nullptr;
|
|
||||||
-
|
|
||||||
- CommitWaylandBuffer();
|
|
||||||
-}
|
|
||||||
|
|
||||||
} // namespace widget
|
|
||||||
} // namespace mozilla
|
|
||||||
diff -up firefox-82.0/widget/gtk/WindowSurfaceWayland.h.1656727 firefox-82.0/widget/gtk/WindowSurfaceWayland.h
|
|
||||||
--- firefox-82.0/widget/gtk/WindowSurfaceWayland.h.1656727 2020-10-14 19:20:27.000000000 +0200
|
|
||||||
+++ firefox-82.0/widget/gtk/WindowSurfaceWayland.h 2020-10-15 16:16:53.528050175 +0200
|
|
||||||
@@ -161,7 +161,7 @@ class WindowSurfaceWayland : public Wind
|
|
||||||
// If we fail (wayland compositor is busy,
|
|
||||||
// wl_surface is not created yet) we queue the painting
|
|
||||||
// and we send it to wayland compositor in FrameCallbackHandler()/
|
|
||||||
- // DelayedCommitHandler/CommitWaylandBuffer().
|
|
||||||
+ // CommitWaylandBuffer().
|
|
||||||
already_AddRefed<gfx::DrawTarget> Lock(
|
|
||||||
const LayoutDeviceIntRegion& aRegion) override;
|
|
||||||
void Commit(const LayoutDeviceIntRegion& aInvalidRegion) final;
|
|
||||||
@@ -171,12 +171,6 @@ class WindowSurfaceWayland : public Wind
|
|
||||||
// queued commits.
|
|
||||||
void FrameCallbackHandler();
|
|
||||||
|
|
||||||
- // When a new window is created we may not have a valid wl_surface
|
|
||||||
- // for drawing (Gtk haven't created it yet). All commits are queued
|
|
||||||
- // and DelayedCommitHandler() is called by timer when wl_surface is ready
|
|
||||||
- // for drawing.
|
|
||||||
- void DelayedCommitHandler();
|
|
||||||
-
|
|
||||||
// Try to commit all queued drawings to Wayland compositor. This is usually
|
|
||||||
// called from other routines but can be used to explicitly flush
|
|
||||||
// all drawings as we do when wl_buffer is released
|
|
||||||
@@ -249,17 +243,14 @@ class WindowSurfaceWayland : public Wind
|
|
||||||
wl_callback* mFrameCallback;
|
|
||||||
wl_surface* mLastCommittedSurface;
|
|
||||||
|
|
||||||
- // Registered reference to pending DelayedCommitHandler() call.
|
|
||||||
- WindowSurfaceWayland** mDelayedCommitHandle;
|
|
||||||
-
|
|
||||||
// Cached drawings. If we can't get WaylandBuffer (wl_buffer) at
|
|
||||||
// WindowSurfaceWayland::Lock() we direct gecko rendering to
|
|
||||||
// mImageSurface.
|
|
||||||
// If we can't get WaylandBuffer at WindowSurfaceWayland::Commit()
|
|
||||||
// time, mImageSurface is moved to mDelayedImageCommits which
|
|
||||||
// holds all cached drawings.
|
|
||||||
- // mDelayedImageCommits can be drawn by FrameCallbackHandler(),
|
|
||||||
- // DelayedCommitHandler() or when WaylandBuffer is detached.
|
|
||||||
+ // mDelayedImageCommits can be drawn by FrameCallbackHandler()
|
|
||||||
+ // or when WaylandBuffer is detached.
|
|
||||||
RefPtr<gfxImageSurface> mImageSurface;
|
|
||||||
AutoTArray<WindowImageSurface, 30> mDelayedImageCommits;
|
|
||||||
|
|
||||||
@@ -282,8 +273,8 @@ class WindowSurfaceWayland : public Wind
|
|
||||||
// We can't send WaylandBuffer (wl_buffer) to compositor when gecko
|
|
||||||
// is rendering into it (i.e. between WindowSurfaceWayland::Lock() /
|
|
||||||
// WindowSurfaceWayland::Commit()).
|
|
||||||
- // Thus we use mBufferCommitAllowed to disable commit by callbacks
|
|
||||||
- // (FrameCallbackHandler(), DelayedCommitHandler())
|
|
||||||
+ // Thus we use mBufferCommitAllowed to disable commit by
|
|
||||||
+ // CommitWaylandBuffer().
|
|
||||||
bool mBufferCommitAllowed;
|
|
||||||
|
|
||||||
// We need to clear WaylandBuffer when entire transparent window is repainted.
|
|
@ -1,25 +0,0 @@
|
|||||||
diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
|
|
||||||
--- a/widget/gtk/nsWindow.cpp
|
|
||||||
+++ b/widget/gtk/nsWindow.cpp
|
|
||||||
@@ -1600,9 +1600,11 @@
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
+ bool hasAnchorRect = true;
|
|
||||||
if (anchorRect.width == 0) {
|
|
||||||
LOG((" No anchor rect given, use aPosition for anchor"));
|
|
||||||
anchorRect.SetRect(aPosition->x, aPosition->y, 1, 1);
|
|
||||||
+ hasAnchorRect = false;
|
|
||||||
}
|
|
||||||
LOG((" anchor x %d y %d width %d height %d (absolute coords)\n",
|
|
||||||
anchorRect.x, anchorRect.y, anchorRect.width, anchorRect.height));
|
|
||||||
@@ -1704,7 +1706,7 @@
|
|
||||||
nsPoint cursorOffset(0, 0);
|
|
||||||
#ifdef MOZ_WAYLAND
|
|
||||||
// Offset is already computed to the tooltips
|
|
||||||
- if (popupFrame && mPopupType != ePopupTypeTooltip) {
|
|
||||||
+ if (hasAnchorRect && popupFrame && mPopupType != ePopupTypeTooltip) {
|
|
||||||
nsMargin margin(0, 0, 0, 0);
|
|
||||||
popupFrame->StyleMargin()->GetMargin(margin);
|
|
||||||
switch (popupFrame->GetPopupAlignment()) {
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
diff --git a/dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp b/dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp
|
|
||||||
--- a/dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp
|
|
||||||
+++ b/dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp
|
|
||||||
@@ -86,7 +86,7 @@ bool GMPDecoderModule::SupportsMimeType(
|
|
||||||
|
|
||||||
bool GMPDecoderModule::SupportsMimeType(
|
|
||||||
const nsACString& aMimeType, DecoderDoctorDiagnostics* aDiagnostics) const {
|
|
||||||
- return false;
|
|
||||||
+ return MP4Decoder::IsH264(aMimeType);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace mozilla
|
|
||||||
diff --git a/dom/media/platforms/agnostic/gmp/GMPVideoDecoder.cpp b/dom/media/platforms/agnostic/gmp/GMPVideoDecoder.cpp
|
|
||||||
--- a/dom/media/platforms/agnostic/gmp/GMPVideoDecoder.cpp
|
|
||||||
+++ b/dom/media/platforms/agnostic/gmp/GMPVideoDecoder.cpp
|
|
||||||
@@ -67,6 +67,8 @@ void GMPVideoDecoder::Decoded(GMPVideoi4
|
|
||||||
RefPtr<GMPVideoDecoder> self = this;
|
|
||||||
if (v) {
|
|
||||||
mDecodedData.AppendElement(std::move(v));
|
|
||||||
+ mDecodePromise.ResolveIfExists(std::move(mDecodedData), __func__);
|
|
||||||
+ mDecodedData = DecodedData();
|
|
||||||
} else {
|
|
||||||
mDecodedData.Clear();
|
|
||||||
mDecodePromise.RejectIfExists(
|
|
||||||
diff -up firefox-81.0.2/dom/media/gmp/GMPSharedMemManager.h.oldd firefox-81.0.2/dom/media/gmp/GMPSharedMemManager.h
|
|
||||||
--- firefox-81.0.2/dom/media/gmp/GMPSharedMemManager.h.oldd 2020-10-12 18:19:09.158070701 +0200
|
|
||||||
+++ firefox-81.0.2/dom/media/gmp/GMPSharedMemManager.h 2020-10-12 18:19:18.398109540 +0200
|
|
||||||
@@ -27,7 +27,7 @@ class GMPSharedMem {
|
|
||||||
// returned to the parent pool (which is not included). If more than
|
|
||||||
// this are needed, we presume the client has either crashed or hung
|
|
||||||
// (perhaps temporarily).
|
|
||||||
- static const uint32_t kGMPBufLimit = 20;
|
|
||||||
+ static const uint32_t kGMPBufLimit = 40;
|
|
||||||
|
|
||||||
GMPSharedMem() {
|
|
||||||
for (size_t i = 0; i < sizeof(mGmpAllocated) / sizeof(mGmpAllocated[0]);
|
|
@ -1,16 +0,0 @@
|
|||||||
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
|
|
||||||
--- a/modules/libpref/init/StaticPrefList.yaml
|
|
||||||
+++ b/modules/libpref/init/StaticPrefList.yaml
|
|
||||||
@@ -7565,11 +7565,7 @@
|
|
||||||
# acceleration for decoding.
|
|
||||||
- name: media.navigator.mediadatadecoder_vpx_enabled
|
|
||||||
type: RelaxedAtomicBool
|
|
||||||
- #if defined(NIGHTLY_BUILD)
|
|
||||||
value: true
|
|
||||||
- #else
|
|
||||||
- value: false
|
|
||||||
- #endif
|
|
||||||
mirror: always
|
|
||||||
|
|
||||||
# Use MediaDataDecoder API for H264 in WebRTC. This includes hardware
|
|
||||||
|
|
@ -1,473 +0,0 @@
|
|||||||
changeset: 551978:40c95986d358
|
|
||||||
tag: tip
|
|
||||||
parent: 551976:daadcfadb2f8
|
|
||||||
user: stransky <stransky@redhat.com>
|
|
||||||
date: Thu Sep 24 15:51:06 2020 +0200
|
|
||||||
files: media/ffvpx/libavcodec/codec_list.c media/ffvpx/libavcodec/libfdk-aacdec.c media/ffvpx/libavcodec/moz.build toolkit/moz.configure
|
|
||||||
description:
|
|
||||||
Bug 1667096 Add libfdk-aacdec.c to bundled ffvpx and allow build Firefox with system fdk-aac-free library, r?jya
|
|
||||||
|
|
||||||
Differential Revision: https://phabricator.services.mozilla.com/D91278
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/media/ffvpx/libavcodec/codec_list.c b/media/ffvpx/libavcodec/codec_list.c
|
|
||||||
--- a/media/ffvpx/libavcodec/codec_list.c
|
|
||||||
+++ b/media/ffvpx/libavcodec/codec_list.c
|
|
||||||
@@ -11,4 +11,8 @@ static const AVCodec * const codec_list[
|
|
||||||
#if CONFIG_MP3_DECODER
|
|
||||||
&ff_mp3_decoder,
|
|
||||||
#endif
|
|
||||||
+#ifdef CONFIG_LIBFDK_AAC
|
|
||||||
+ &ff_libfdk_aac_decoder,
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
NULL };
|
|
||||||
diff --git a/media/ffvpx/libavcodec/libfdk-aacdec.c b/media/ffvpx/libavcodec/libfdk-aacdec.c
|
|
||||||
new file mode 100644
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/media/ffvpx/libavcodec/libfdk-aacdec.c
|
|
||||||
@@ -0,0 +1,409 @@
|
|
||||||
+/*
|
|
||||||
+ * 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 "avcodec.h"
|
|
||||||
+#include "internal.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 level_limit;
|
|
||||||
+} 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",
|
|
||||||
+ OFFSET(drc_level), AV_OPT_TYPE_INT, { .i64 = -1}, -1, 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_INT, { .i64 = 0 }, -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
|
|
||||||
+ { 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;
|
|
||||||
+
|
|
||||||
+ 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;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ if (!ch_error &&
|
|
||||||
+ av_get_channel_layout_nb_channels(ch_layout) != info->numChannels) {
|
|
||||||
+ av_log(avctx, AV_LOG_WARNING, "unsupported channel configuration\n");
|
|
||||||
+ ch_error = 1;
|
|
||||||
+ }
|
|
||||||
+ if (ch_error)
|
|
||||||
+ avctx->channel_layout = 0;
|
|
||||||
+ else
|
|
||||||
+ avctx->channel_layout = ch_layout;
|
|
||||||
+
|
|
||||||
+ avctx->channels = info->numChannels;
|
|
||||||
+
|
|
||||||
+ 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 (avctx->request_channel_layout > 0 &&
|
|
||||||
+ avctx->request_channel_layout != AV_CH_LAYOUT_NATIVE) {
|
|
||||||
+ int downmix_channels = -1;
|
|
||||||
+
|
|
||||||
+ switch (avctx->request_channel_layout) {
|
|
||||||
+ 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 request_channel_layout\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) {
|
|
||||||
+ 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
|
|
||||||
+ 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
|
|
||||||
+
|
|
||||||
+ 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, void *data,
|
|
||||||
+ int *got_frame_ptr, AVPacket *avpkt)
|
|
||||||
+{
|
|
||||||
+ FDKAACDecContext *s = avctx->priv_data;
|
|
||||||
+ AVFrame *frame = data;
|
|
||||||
+ int ret;
|
|
||||||
+ AAC_DECODER_ERROR err;
|
|
||||||
+ UINT valid = 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;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ err = aacDecoder_DecodeFrame(s->handle, (INT_PCM *) s->decoder_buffer, s->decoder_buffer_size / sizeof(INT_PCM), 0);
|
|
||||||
+ 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 ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
|
|
||||||
+ goto end;
|
|
||||||
+
|
|
||||||
+ memcpy(frame->extended_data[0], s->decoder_buffer,
|
|
||||||
+ avctx->channels * avctx->frame_size *
|
|
||||||
+ 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");
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+AVCodec ff_libfdk_aac_decoder = {
|
|
||||||
+ .name = "libfdk_aac",
|
|
||||||
+ .long_name = NULL_IF_CONFIG_SMALL("Fraunhofer FDK AAC"),
|
|
||||||
+ .type = AVMEDIA_TYPE_AUDIO,
|
|
||||||
+ .id = AV_CODEC_ID_AAC,
|
|
||||||
+ .priv_data_size = sizeof(FDKAACDecContext),
|
|
||||||
+ .init = fdk_aac_decode_init,
|
|
||||||
+ .decode = fdk_aac_decode_frame,
|
|
||||||
+ .close = fdk_aac_decode_close,
|
|
||||||
+ .flush = fdk_aac_decode_flush,
|
|
||||||
+ .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
|
|
||||||
+ .priv_class = &fdk_aac_dec_class,
|
|
||||||
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE |
|
|
||||||
+ FF_CODEC_CAP_INIT_CLEANUP,
|
|
||||||
+ .wrapper_name = "libfdk",
|
|
||||||
+};
|
|
||||||
diff --git a/media/ffvpx/libavcodec/moz.build b/media/ffvpx/libavcodec/moz.build
|
|
||||||
--- a/media/ffvpx/libavcodec/moz.build
|
|
||||||
+++ b/media/ffvpx/libavcodec/moz.build
|
|
||||||
@@ -97,6 +97,12 @@ if not CONFIG['MOZ_FFVPX_AUDIOONLY']:
|
|
||||||
'vp9recon.c'
|
|
||||||
]
|
|
||||||
|
|
||||||
+if CONFIG['MOZ_FDK_AAC']:
|
|
||||||
+ SOURCES += [
|
|
||||||
+ 'libfdk-aacdec.c',
|
|
||||||
+ ]
|
|
||||||
+ OS_LIBS += CONFIG['MOZ_FDK_AAC_LIBS']
|
|
||||||
+
|
|
||||||
if CONFIG['MOZ_LIBAV_FFT']:
|
|
||||||
SOURCES += [
|
|
||||||
'avfft.c',
|
|
||||||
diff --git a/toolkit/moz.configure b/toolkit/moz.configure
|
|
||||||
--- a/toolkit/moz.configure
|
|
||||||
+++ b/toolkit/moz.configure
|
|
||||||
@@ -1592,6 +1592,14 @@ with only_when(compile_environment):
|
|
||||||
set_define('MOZ_LIBAV_FFT', depends(when=libav_fft)(lambda: True))
|
|
||||||
set_config('LIBAV_FFT_ASFLAGS', libav_fft.flags)
|
|
||||||
|
|
||||||
+# 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
|
|
||||||
# ==============================================================
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
changeset: 552978:b50cb0696eef
|
|
||||||
tag: tip
|
|
||||||
parent: 552976:2ce12e3e063c
|
|
||||||
user: stransky <stransky@redhat.com>
|
|
||||||
date: Fri Oct 02 12:19:53 2020 +0200
|
|
||||||
files: widget/gtk/WindowSurfaceWayland.cpp
|
|
||||||
description:
|
|
||||||
Bug 1668771 [Wayland] Use timeout for frame callbacks for basic compositor, r?jhorak
|
|
||||||
|
|
||||||
Differential Revision: https://phabricator.services.mozilla.com/D92200
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
|
|
||||||
--- a/widget/gtk/WindowSurfaceWayland.cpp
|
|
||||||
+++ b/widget/gtk/WindowSurfaceWayland.cpp
|
|
||||||
@@ -37,6 +37,9 @@ extern mozilla::LazyLogModule gWidgetWay
|
|
||||||
// Maximal compositing timeout it miliseconds
|
|
||||||
#define COMPOSITING_TIMEOUT 200
|
|
||||||
|
|
||||||
+// Maximal timeout between frame callbacks
|
|
||||||
+#define FRAME_CALLBACK_TIMEOUT 20
|
|
||||||
+
|
|
||||||
namespace mozilla {
|
|
||||||
namespace widget {
|
|
||||||
|
|
||||||
@@ -941,8 +944,12 @@ void WindowSurfaceWayland::CommitWayland
|
|
||||||
if (waylandSurface == mLastCommittedSurface) {
|
|
||||||
LOGWAYLAND((" [%p] wait for frame callback.\n", (void*)this));
|
|
||||||
// We have an active frame callback pending from our recent surface.
|
|
||||||
- // It means we should defer the commit to FrameCallbackHandler().
|
|
||||||
- return;
|
|
||||||
+ // It means we should defer the commit to FrameCallbackHandler(),
|
|
||||||
+ // but only if we're under frame callback timeout range.
|
|
||||||
+ if (mLastCommitTime && (g_get_monotonic_time() / 1000) - mLastCommitTime <
|
|
||||||
+ FRAME_CALLBACK_TIMEOUT) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
// If our stored wl_surface does not match the actual one it means the frame
|
|
||||||
// callback is no longer active and we should release it.
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
|||||||
diff --git a/config/recurse.mk b/config/recurse.mk
|
|
||||||
--- a/config/recurse.mk
|
|
||||||
+++ b/config/recurse.mk
|
|
||||||
@@ -206,7 +206,7 @@
|
|
||||||
# Interdependencies that moz.build world don't know about yet for compilation.
|
|
||||||
# Note some others are hardcoded or "guessed" in recursivemake.py and emitter.py
|
|
||||||
ifeq ($(MOZ_WIDGET_TOOLKIT),gtk)
|
|
||||||
-toolkit/library/target: widget/gtk/mozgtk/gtk3/target
|
|
||||||
+toolkit/library/build/target: widget/gtk/mozgtk/gtk3/target
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef MOZ_FOLD_LIBS
|
|
||||||
|
|
@ -1,130 +0,0 @@
|
|||||||
diff -up firefox-82.0/layout/xul/nsMenuPopupFrame.cpp.1669495 firefox-82.0/layout/xul/nsMenuPopupFrame.cpp
|
|
||||||
--- firefox-82.0/layout/xul/nsMenuPopupFrame.cpp.1669495 2020-10-15 16:13:12.304471453 +0200
|
|
||||||
+++ firefox-82.0/layout/xul/nsMenuPopupFrame.cpp 2020-10-15 16:13:12.308471463 +0200
|
|
||||||
@@ -533,6 +533,26 @@ void nsMenuPopupFrame::LayoutPopup(nsBox
|
|
||||||
}
|
|
||||||
prefSize = XULBoundsCheck(minSize, prefSize, maxSize);
|
|
||||||
|
|
||||||
+#ifdef MOZ_WAYLAND
|
|
||||||
+ static bool inWayland = gdk_display_get_default() &&
|
|
||||||
+ !GDK_IS_X11_DISPLAY(gdk_display_get_default());
|
|
||||||
+#else
|
|
||||||
+ static bool inWayland = false;
|
|
||||||
+#endif
|
|
||||||
+ if (inWayland) {
|
|
||||||
+ // If prefSize it is not a whole number in css pixels we need round it up
|
|
||||||
+ // to avoid reflow of the tooltips/popups and putting the text on two lines
|
|
||||||
+ // (usually happens with 200% scale factor and font scale factor <> 1)
|
|
||||||
+ // because GTK thrown away the decimals.
|
|
||||||
+ int32_t appPerCSS = AppUnitsPerCSSPixel();
|
|
||||||
+ if (prefSize.width % appPerCSS > 0) {
|
|
||||||
+ prefSize.width += appPerCSS;
|
|
||||||
+ }
|
|
||||||
+ if (prefSize.height % appPerCSS > 0) {
|
|
||||||
+ prefSize.height += appPerCSS;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
bool sizeChanged = (mPrefSize != prefSize);
|
|
||||||
// if the size changed then set the bounds to be the preferred size
|
|
||||||
if (sizeChanged) {
|
|
||||||
diff -up firefox-82.0/widget/gtk/nsWindow.cpp.1669495 firefox-82.0/widget/gtk/nsWindow.cpp
|
|
||||||
--- firefox-82.0/widget/gtk/nsWindow.cpp.1669495 2020-10-15 16:13:12.307471461 +0200
|
|
||||||
+++ firefox-82.0/widget/gtk/nsWindow.cpp 2020-10-15 16:15:49.243882006 +0200
|
|
||||||
@@ -1092,11 +1092,13 @@ void nsWindow::Show(bool aState) {
|
|
||||||
|
|
||||||
void nsWindow::ResizeInt(int aX, int aY, int aWidth, int aHeight, bool aMove,
|
|
||||||
bool aRepaint) {
|
|
||||||
- LOG(("nsWindow::ResizeInt [%p] %d %d -> %d %d repaint %d\n", (void*)this, aX,
|
|
||||||
- aY, aWidth, aHeight, aRepaint));
|
|
||||||
+ LOG(("nsWindow::ResizeInt [%p] x:%d y:%d -> w:%d h:%d repaint %d aMove %d\n",
|
|
||||||
+ (void*)this, aX, aY, aWidth, aHeight, aRepaint, aMove));
|
|
||||||
|
|
||||||
ConstrainSize(&aWidth, &aHeight);
|
|
||||||
|
|
||||||
+ LOG((" ConstrainSize: w:%d h;%d\n", aWidth, aHeight));
|
|
||||||
+
|
|
||||||
// If we used to have insane bounds, we may have skipped actually positioning
|
|
||||||
// the widget in NativeMoveResizeWaylandPopup, in which case we need to
|
|
||||||
// actually position it now as well.
|
|
||||||
@@ -1141,8 +1143,7 @@ void nsWindow::ResizeInt(int aX, int aY,
|
|
||||||
}
|
|
||||||
|
|
||||||
void nsWindow::Resize(double aWidth, double aHeight, bool aRepaint) {
|
|
||||||
- LOG(("nsWindow::Resize [%p] %d %d\n", (void*)this, (int)aWidth,
|
|
||||||
- (int)aHeight));
|
|
||||||
+ LOG(("nsWindow::Resize [%p] %f %f\n", (void*)this, aWidth, aHeight));
|
|
||||||
|
|
||||||
double scale =
|
|
||||||
BoundsUseDesktopPixels() ? GetDesktopToDeviceScale().scale : 1.0;
|
|
||||||
@@ -1154,8 +1155,8 @@ void nsWindow::Resize(double aWidth, dou
|
|
||||||
|
|
||||||
void nsWindow::Resize(double aX, double aY, double aWidth, double aHeight,
|
|
||||||
bool aRepaint) {
|
|
||||||
- LOG(("nsWindow::Resize [%p] %d %d repaint %d\n", (void*)this, (int)aWidth,
|
|
||||||
- (int)aHeight, aRepaint));
|
|
||||||
+ LOG(("nsWindow::Resize [%p] %f %f repaint %d\n", (void*)this, aWidth, aHeight,
|
|
||||||
+ aRepaint));
|
|
||||||
|
|
||||||
double scale =
|
|
||||||
BoundsUseDesktopPixels() ? GetDesktopToDeviceScale().scale : 1.0;
|
|
||||||
@@ -1478,14 +1479,15 @@ void nsWindow::NativeMoveResizeWaylandPo
|
|
||||||
|
|
||||||
newBounds.x = GdkCoordToDevicePixels(newBounds.x);
|
|
||||||
newBounds.y = GdkCoordToDevicePixels(newBounds.y);
|
|
||||||
- LOG((" new mBounds x=%d y=%d width=%d height=%d\n", newBounds.x,
|
|
||||||
- newBounds.y, newBounds.width, newBounds.height));
|
|
||||||
|
|
||||||
double scale =
|
|
||||||
BoundsUseDesktopPixels() ? GetDesktopToDeviceScale().scale : 1.0;
|
|
||||||
int32_t newWidth = NSToIntRound(scale * newBounds.width);
|
|
||||||
int32_t newHeight = NSToIntRound(scale * newBounds.height);
|
|
||||||
|
|
||||||
+ LOG((" new mBounds x=%d y=%d width=%d height=%d\n", newBounds.x,
|
|
||||||
+ newBounds.y, newWidth, newHeight));
|
|
||||||
+
|
|
||||||
bool needsPositionUpdate =
|
|
||||||
(newBounds.x != mBounds.x || newBounds.y != mBounds.y);
|
|
||||||
bool needsSizeUpdate =
|
|
||||||
@@ -1493,6 +1495,7 @@ void nsWindow::NativeMoveResizeWaylandPo
|
|
||||||
// Update view
|
|
||||||
|
|
||||||
if (needsSizeUpdate) {
|
|
||||||
+ LOG((" needSizeUpdate\n"));
|
|
||||||
int32_t p2a = AppUnitsPerCSSPixel() / gfxPlatformGtk::GetFontScaleFactor();
|
|
||||||
mPreferredPopupRect = nsRect(NSIntPixelsToAppUnits(newBounds.x, p2a),
|
|
||||||
NSIntPixelsToAppUnits(newBounds.y, p2a),
|
|
||||||
@@ -1511,6 +1514,7 @@ void nsWindow::NativeMoveResizeWaylandPo
|
|
||||||
}
|
|
||||||
|
|
||||||
if (needsPositionUpdate) {
|
|
||||||
+ LOG((" needPositionUpdate\n"));
|
|
||||||
// The newBounds are in coordinates relative to the parent window/popup.
|
|
||||||
// The NotifyWindowMoved requires the coordinates relative to the toplevel.
|
|
||||||
// We use the gdk_window_get_origin to get correct coordinates.
|
|
||||||
@@ -4245,6 +4249,8 @@ nsresult nsWindow::Create(nsIWidget* aPa
|
|
||||||
|
|
||||||
// save our bounds
|
|
||||||
mBounds = aRect;
|
|
||||||
+ LOG((" mBounds: x:%d y:%d w:%d h:%d\n", mBounds.x, mBounds.y, mBounds.width,
|
|
||||||
+ mBounds.height));
|
|
||||||
|
|
||||||
mPreferredPopupRectFlushed = false;
|
|
||||||
|
|
||||||
@@ -5083,13 +5089,16 @@ void nsWindow::NativeShow(bool aAction)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ LOG((" calling gtk_widget_show(mShell)\n"));
|
|
||||||
gtk_widget_show(mShell);
|
|
||||||
if (!mIsX11Display) {
|
|
||||||
WaylandStartVsync();
|
|
||||||
}
|
|
||||||
} else if (mContainer) {
|
|
||||||
+ LOG((" calling gtk_widget_show(mContainer)\n"));
|
|
||||||
gtk_widget_show(GTK_WIDGET(mContainer));
|
|
||||||
} else if (mGdkWindow) {
|
|
||||||
+ LOG((" calling gdk_window_show_unraised\n"));
|
|
||||||
gdk_window_show_unraised(mGdkWindow);
|
|
||||||
}
|
|
||||||
} else {
|
|
@ -1,15 +0,0 @@
|
|||||||
diff -up firefox-81.0.1/build/mach_bootstrap.py.old firefox-81.0.1/build/mach_bootstrap.py
|
|
||||||
--- firefox-81.0.1/build/mach_bootstrap.py.old 2020-10-06 14:16:06.212974910 +0200
|
|
||||||
+++ firefox-81.0.1/build/mach_bootstrap.py 2020-10-06 14:19:03.313179557 +0200
|
|
||||||
@@ -507,7 +507,10 @@ class ImportHook(object):
|
|
||||||
# doesn't happen or because it doesn't matter).
|
|
||||||
if not os.path.exists(module.__file__[:-1]):
|
|
||||||
if os.path.exists(module.__file__):
|
|
||||||
- os.remove(module.__file__)
|
|
||||||
+ try:
|
|
||||||
+ os.remove(module.__file__)
|
|
||||||
+ except:
|
|
||||||
+ pass
|
|
||||||
del sys.modules[module.__name__]
|
|
||||||
module = self(name, globals, locals, fromlist, level)
|
|
||||||
|
|
@ -1,68 +0,0 @@
|
|||||||
diff -up firefox-82.0/dom/media/mp4/MP4Demuxer.cpp.1670333 firefox-82.0/dom/media/mp4/MP4Demuxer.cpp
|
|
||||||
--- firefox-82.0/dom/media/mp4/MP4Demuxer.cpp.1670333 2020-10-14 19:20:18.000000000 +0200
|
|
||||||
+++ firefox-82.0/dom/media/mp4/MP4Demuxer.cpp 2020-10-19 20:56:38.362039524 +0200
|
|
||||||
@@ -31,6 +31,8 @@ mozilla::LogModule* GetDemuxerLog() { re
|
|
||||||
DDMOZ_LOG(gMediaDemuxerLog, mozilla::LogLevel::Debug, "::%s: " arg, \
|
|
||||||
__func__, ##__VA_ARGS__)
|
|
||||||
|
|
||||||
+extern bool gUseKeyframeFromContainer;
|
|
||||||
+
|
|
||||||
namespace mozilla {
|
|
||||||
|
|
||||||
DDLoggedTypeDeclNameAndBase(MP4TrackDemuxer, MediaTrackDemuxer);
|
|
||||||
@@ -394,6 +396,12 @@ already_AddRefed<MediaRawData> MP4TrackD
|
|
||||||
[[fallthrough]];
|
|
||||||
case H264::FrameType::OTHER: {
|
|
||||||
bool keyframe = type == H264::FrameType::I_FRAME;
|
|
||||||
+ if (gUseKeyframeFromContainer) {
|
|
||||||
+ if (sample->mKeyframe && sample->mKeyframe != keyframe) {
|
|
||||||
+ sample->mKeyframe = keyframe;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
if (sample->mKeyframe != keyframe) {
|
|
||||||
NS_WARNING(nsPrintfCString("Frame incorrectly marked as %skeyframe "
|
|
||||||
"@ pts:%" PRId64 " dur:%" PRId64
|
|
||||||
diff -up firefox-82.0/dom/media/platforms/PDMFactory.cpp.1670333 firefox-82.0/dom/media/platforms/PDMFactory.cpp
|
|
||||||
--- firefox-82.0/dom/media/platforms/PDMFactory.cpp.1670333 2020-10-14 19:20:18.000000000 +0200
|
|
||||||
+++ firefox-82.0/dom/media/platforms/PDMFactory.cpp 2020-10-19 20:53:14.631214334 +0200
|
|
||||||
@@ -49,6 +49,8 @@
|
|
||||||
|
|
||||||
#include <functional>
|
|
||||||
|
|
||||||
+bool gUseKeyframeFromContainer = false;
|
|
||||||
+
|
|
||||||
namespace mozilla {
|
|
||||||
|
|
||||||
extern already_AddRefed<PlatformDecoderModule> CreateBlankDecoderModule();
|
|
||||||
@@ -380,7 +382,8 @@ void PDMFactory::CreatePDMs() {
|
|
||||||
#ifdef MOZ_FFMPEG
|
|
||||||
if (StaticPrefs::media_ffmpeg_enabled()) {
|
|
||||||
m = FFmpegRuntimeLinker::CreateDecoderModule();
|
|
||||||
- mFFmpegFailedToLoad = !StartupPDM(m);
|
|
||||||
+ mFFmpegUsed = StartupPDM(m);
|
|
||||||
+ mFFmpegFailedToLoad = !mFFmpegUsed;
|
|
||||||
} else {
|
|
||||||
mFFmpegFailedToLoad = false;
|
|
||||||
}
|
|
||||||
@@ -395,7 +398,8 @@ void PDMFactory::CreatePDMs() {
|
|
||||||
m = new AgnosticDecoderModule();
|
|
||||||
StartupPDM(m);
|
|
||||||
|
|
||||||
- if (StaticPrefs::media_gmp_decoder_enabled()) {
|
|
||||||
+ if (StaticPrefs::media_gmp_decoder_enabled() && !mFFmpegUsed) {
|
|
||||||
+ gUseKeyframeFromContainer = true;
|
|
||||||
m = new GMPDecoderModule();
|
|
||||||
mGMPPDMFailedToStartup = !StartupPDM(m);
|
|
||||||
} else {
|
|
||||||
diff -up firefox-82.0/dom/media/platforms/PDMFactory.h.1670333 firefox-82.0/dom/media/platforms/PDMFactory.h
|
|
||||||
--- firefox-82.0/dom/media/platforms/PDMFactory.h.1670333 2020-10-14 19:20:18.000000000 +0200
|
|
||||||
+++ firefox-82.0/dom/media/platforms/PDMFactory.h 2020-10-19 20:53:14.631214334 +0200
|
|
||||||
@@ -70,6 +70,7 @@ class PDMFactory final {
|
|
||||||
|
|
||||||
bool mWMFFailedToLoad = false;
|
|
||||||
bool mFFmpegFailedToLoad = false;
|
|
||||||
+ bool mFFmpegUsed = false;
|
|
||||||
bool mGMPPDMFailedToStartup = false;
|
|
||||||
|
|
||||||
friend class RemoteVideoDecoderParent;
|
|
@ -1,16 +0,0 @@
|
|||||||
diff -up firefox-82.0/security/sandbox/linux/SandboxFilter.cpp.1673202 firefox-82.0/security/sandbox/linux/SandboxFilter.cpp
|
|
||||||
--- firefox-82.0/security/sandbox/linux/SandboxFilter.cpp.1673202 2020-10-27 10:40:54.903158025 +0100
|
|
||||||
+++ firefox-82.0/security/sandbox/linux/SandboxFilter.cpp 2020-10-27 10:43:19.024883597 +0100
|
|
||||||
@@ -246,7 +246,11 @@ class SandboxPolicyCommon : public Sandb
|
|
||||||
|
|
||||||
if (fd != AT_FDCWD && (flags & AT_EMPTY_PATH) != 0 &&
|
|
||||||
strcmp(path, "") == 0) {
|
|
||||||
- return ConvertError(fstatsyscall(fd, buf));
|
|
||||||
+#ifdef __NR_fstat64
|
|
||||||
+ return DoSyscall(__NR_fstat64, fd, buf);
|
|
||||||
+#else
|
|
||||||
+ return DoSyscall(__NR_fstat, fd, buf);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fd != AT_FDCWD && path[0] != '/') {
|
|
@ -1,351 +0,0 @@
|
|||||||
changeset: 556172:143b4ca96ec9
|
|
||||||
tag: tip
|
|
||||||
parent: 556169:61c35792ca70
|
|
||||||
user: stransky <stransky@redhat.com>
|
|
||||||
date: Mon Oct 26 12:15:49 2020 +0100
|
|
||||||
files: widget/gtk/WindowSurfaceWayland.cpp widget/gtk/WindowSurfaceWayland.h
|
|
||||||
description:
|
|
||||||
Bug 1673313 [Wayland] Don't fail when Shm allocation fails, r?jhorak
|
|
||||||
|
|
||||||
- Make WaylandAllocateShmMemory() fallible.
|
|
||||||
- Implement WaylandReAllocateShmMemory() to re-allocate Shm pool.
|
|
||||||
- Remove WaylandShmPool::Resize() and use WaylandShmPool::Create() only.
|
|
||||||
- Implement and use WaylandShmPool::Release().
|
|
||||||
- Make WindowSurfaceWayland::CreateWaylandBuffer() as fallible.
|
|
||||||
|
|
||||||
Differential Revision: https://phabricator.services.mozilla.com/D94735
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
|
|
||||||
--- a/widget/gtk/WindowSurfaceWayland.cpp
|
|
||||||
+++ b/widget/gtk/WindowSurfaceWayland.cpp
|
|
||||||
@@ -209,14 +209,23 @@ RefPtr<nsWaylandDisplay> WindowBackBuffe
|
|
||||||
}
|
|
||||||
|
|
||||||
static int WaylandAllocateShmMemory(int aSize) {
|
|
||||||
- static int counter = 0;
|
|
||||||
- nsPrintfCString shmName("/wayland.mozilla.ipc.%d", counter++);
|
|
||||||
- int fd = shm_open(shmName.get(), O_CREAT | O_RDWR | O_EXCL, 0600);
|
|
||||||
- if (fd >= 0) {
|
|
||||||
- shm_unlink(shmName.get());
|
|
||||||
- } else {
|
|
||||||
- printf_stderr("Unable to SHM memory segment\n");
|
|
||||||
- MOZ_CRASH();
|
|
||||||
+ int fd = -1;
|
|
||||||
+ do {
|
|
||||||
+ static int counter = 0;
|
|
||||||
+ nsPrintfCString shmName("/wayland.mozilla.ipc.%d", counter++);
|
|
||||||
+ fd = shm_open(shmName.get(), O_CREAT | O_RDWR | O_EXCL, 0600);
|
|
||||||
+ if (fd >= 0) {
|
|
||||||
+ // We don't want to use leaked file
|
|
||||||
+ if (shm_unlink(shmName.get()) != 0) {
|
|
||||||
+ NS_WARNING("shm_unlink failed");
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ } while (fd < 0 && errno == EEXIST);
|
|
||||||
+
|
|
||||||
+ if (fd < 0) {
|
|
||||||
+ NS_WARNING(nsPrintfCString("shm_open failed: %s", strerror(errno)).get());
|
|
||||||
+ return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ret = 0;
|
|
||||||
@@ -225,59 +234,103 @@ static int WaylandAllocateShmMemory(int
|
|
||||||
ret = posix_fallocate(fd, 0, aSize);
|
|
||||||
} while (ret == EINTR);
|
|
||||||
if (ret != 0) {
|
|
||||||
+ NS_WARNING(
|
|
||||||
+ nsPrintfCString("posix_fallocate() fails to allocate shm memory: %s",
|
|
||||||
+ strerror(ret))
|
|
||||||
+ .get());
|
|
||||||
close(fd);
|
|
||||||
- MOZ_CRASH("posix_fallocate() fails to allocate shm memory");
|
|
||||||
+ return -1;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
do {
|
|
||||||
ret = ftruncate(fd, aSize);
|
|
||||||
} while (ret < 0 && errno == EINTR);
|
|
||||||
if (ret < 0) {
|
|
||||||
+ NS_WARNING(nsPrintfCString("ftruncate() fails to allocate shm memory: %s",
|
|
||||||
+ strerror(ret))
|
|
||||||
+ .get());
|
|
||||||
close(fd);
|
|
||||||
- MOZ_CRASH("ftruncate() fails to allocate shm memory");
|
|
||||||
+ fd = -1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
-WaylandShmPool::WaylandShmPool(RefPtr<nsWaylandDisplay> aWaylandDisplay,
|
|
||||||
- int aSize)
|
|
||||||
- : mAllocatedSize(aSize) {
|
|
||||||
- mShmPoolFd = WaylandAllocateShmMemory(mAllocatedSize);
|
|
||||||
- mImageData = mmap(nullptr, mAllocatedSize, PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
||||||
- mShmPoolFd, 0);
|
|
||||||
- MOZ_RELEASE_ASSERT(mImageData != MAP_FAILED,
|
|
||||||
- "Unable to map drawing surface!");
|
|
||||||
+static bool WaylandReAllocateShmMemory(int aFd, int aSize) {
|
|
||||||
+ if (ftruncate(aFd, aSize) < 0) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+#ifdef HAVE_POSIX_FALLOCATE
|
|
||||||
+ do {
|
|
||||||
+ errno = posix_fallocate(aFd, 0, aSize);
|
|
||||||
+ } while (errno == EINTR);
|
|
||||||
+ if (errno != 0) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+ return true;
|
|
||||||
+}
|
|
||||||
|
|
||||||
- mShmPool =
|
|
||||||
- wl_shm_create_pool(aWaylandDisplay->GetShm(), mShmPoolFd, mAllocatedSize);
|
|
||||||
+WaylandShmPool::WaylandShmPool()
|
|
||||||
+ : mShmPool(nullptr),
|
|
||||||
+ mShmPoolFd(-1),
|
|
||||||
+ mAllocatedSize(0),
|
|
||||||
+ mImageData(MAP_FAILED){};
|
|
||||||
|
|
||||||
- // We set our queue to get mShmPool events at compositor thread.
|
|
||||||
- wl_proxy_set_queue((struct wl_proxy*)mShmPool,
|
|
||||||
- aWaylandDisplay->GetEventQueue());
|
|
||||||
+void WaylandShmPool::Release() {
|
|
||||||
+ if (mImageData != MAP_FAILED) {
|
|
||||||
+ munmap(mImageData, mAllocatedSize);
|
|
||||||
+ mImageData = MAP_FAILED;
|
|
||||||
+ }
|
|
||||||
+ if (mShmPool) {
|
|
||||||
+ wl_shm_pool_destroy(mShmPool);
|
|
||||||
+ mShmPool = 0;
|
|
||||||
+ }
|
|
||||||
+ if (mShmPoolFd >= 0) {
|
|
||||||
+ close(mShmPoolFd);
|
|
||||||
+ mShmPoolFd = -1;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
-bool WaylandShmPool::Resize(int aSize) {
|
|
||||||
+bool WaylandShmPool::Create(RefPtr<nsWaylandDisplay> aWaylandDisplay,
|
|
||||||
+ int aSize) {
|
|
||||||
// We do size increase only
|
|
||||||
- if (aSize <= mAllocatedSize) return true;
|
|
||||||
-
|
|
||||||
- if (ftruncate(mShmPoolFd, aSize) < 0) return false;
|
|
||||||
+ if (aSize <= mAllocatedSize) {
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
-#ifdef HAVE_POSIX_FALLOCATE
|
|
||||||
- do {
|
|
||||||
- errno = posix_fallocate(mShmPoolFd, 0, aSize);
|
|
||||||
- } while (errno == EINTR);
|
|
||||||
- if (errno != 0) return false;
|
|
||||||
-#endif
|
|
||||||
+ if (mShmPoolFd < 0) {
|
|
||||||
+ mShmPoolFd = WaylandAllocateShmMemory(aSize);
|
|
||||||
+ if (mShmPoolFd < 0) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ if (!WaylandReAllocateShmMemory(mShmPoolFd, aSize)) {
|
|
||||||
+ Release();
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- wl_shm_pool_resize(mShmPool, aSize);
|
|
||||||
-
|
|
||||||
- munmap(mImageData, mAllocatedSize);
|
|
||||||
-
|
|
||||||
+ if (mImageData != MAP_FAILED) {
|
|
||||||
+ munmap(mImageData, mAllocatedSize);
|
|
||||||
+ }
|
|
||||||
mImageData =
|
|
||||||
mmap(nullptr, aSize, PROT_READ | PROT_WRITE, MAP_SHARED, mShmPoolFd, 0);
|
|
||||||
- if (mImageData == MAP_FAILED) return false;
|
|
||||||
+ if (mImageData == MAP_FAILED) {
|
|
||||||
+ NS_WARNING("Unable to map drawing surface!");
|
|
||||||
+ Release();
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (mShmPool) {
|
|
||||||
+ wl_shm_pool_resize(mShmPool, aSize);
|
|
||||||
+ } else {
|
|
||||||
+ mShmPool = wl_shm_create_pool(aWaylandDisplay->GetShm(), mShmPoolFd, aSize);
|
|
||||||
+ // We set our queue to get mShmPool events at compositor thread.
|
|
||||||
+ wl_proxy_set_queue((struct wl_proxy*)mShmPool,
|
|
||||||
+ aWaylandDisplay->GetEventQueue());
|
|
||||||
+ }
|
|
||||||
|
|
||||||
mAllocatedSize = aSize;
|
|
||||||
return true;
|
|
||||||
@@ -289,11 +342,7 @@ void WaylandShmPool::SetImageDataFromPoo
|
|
||||||
memcpy(mImageData, aSourcePool->GetImageData(), aImageDataSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
-WaylandShmPool::~WaylandShmPool() {
|
|
||||||
- munmap(mImageData, mAllocatedSize);
|
|
||||||
- wl_shm_pool_destroy(mShmPool);
|
|
||||||
- close(mShmPoolFd);
|
|
||||||
-}
|
|
||||||
+WaylandShmPool::~WaylandShmPool() { Release(); }
|
|
||||||
|
|
||||||
static void buffer_release(void* data, wl_buffer* buffer) {
|
|
||||||
auto surface = reinterpret_cast<WindowBackBuffer*>(data);
|
|
||||||
@@ -302,14 +351,14 @@ static void buffer_release(void* data, w
|
|
||||||
|
|
||||||
static const struct wl_buffer_listener buffer_listener = {buffer_release};
|
|
||||||
|
|
||||||
-void WindowBackBufferShm::Create(int aWidth, int aHeight) {
|
|
||||||
+bool WindowBackBufferShm::Create(int aWidth, int aHeight) {
|
|
||||||
MOZ_ASSERT(!IsAttached(), "We can't create attached buffers.");
|
|
||||||
- MOZ_ASSERT(!mWLBuffer, "there is wl_buffer already!");
|
|
||||||
|
|
||||||
- int newBufferSize = aWidth * aHeight * BUFFER_BPP;
|
|
||||||
- if (!mShmPool.Resize(newBufferSize)) {
|
|
||||||
- mWLBuffer = nullptr;
|
|
||||||
- return;
|
|
||||||
+ ReleaseShmSurface();
|
|
||||||
+
|
|
||||||
+ int size = aWidth * aHeight * BUFFER_BPP;
|
|
||||||
+ if (!mShmPool.Create(GetWaylandDisplay(), size)) {
|
|
||||||
+ return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
mWLBuffer =
|
|
||||||
@@ -325,14 +374,16 @@ void WindowBackBufferShm::Create(int aWi
|
|
||||||
LOGWAYLAND(("WindowBackBufferShm::Create [%p] wl_buffer %p ID %d\n",
|
|
||||||
(void*)this, (void*)mWLBuffer,
|
|
||||||
mWLBuffer ? wl_proxy_get_id((struct wl_proxy*)mWLBuffer) : -1));
|
|
||||||
+ return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WindowBackBufferShm::ReleaseShmSurface() {
|
|
||||||
LOGWAYLAND(("WindowBackBufferShm::Release [%p]\n", (void*)this));
|
|
||||||
-
|
|
||||||
- wl_buffer_destroy(mWLBuffer);
|
|
||||||
+ if (mWLBuffer) {
|
|
||||||
+ wl_buffer_destroy(mWLBuffer);
|
|
||||||
+ mWLBuffer = nullptr;
|
|
||||||
+ }
|
|
||||||
mWidth = mHeight = 0;
|
|
||||||
- mWLBuffer = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WindowBackBufferShm::Clear() {
|
|
||||||
@@ -340,16 +391,13 @@ void WindowBackBufferShm::Clear() {
|
|
||||||
}
|
|
||||||
|
|
||||||
WindowBackBufferShm::WindowBackBufferShm(
|
|
||||||
- WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth, int aHeight)
|
|
||||||
+ WindowSurfaceWayland* aWindowSurfaceWayland)
|
|
||||||
: WindowBackBuffer(aWindowSurfaceWayland),
|
|
||||||
- mShmPool(aWindowSurfaceWayland->GetWaylandDisplay(),
|
|
||||||
- aWidth * aHeight * BUFFER_BPP),
|
|
||||||
+ mShmPool(),
|
|
||||||
mWLBuffer(nullptr),
|
|
||||||
- mWidth(aWidth),
|
|
||||||
- mHeight(aHeight),
|
|
||||||
- mAttached(false) {
|
|
||||||
- Create(aWidth, aHeight);
|
|
||||||
-}
|
|
||||||
+ mWidth(0),
|
|
||||||
+ mHeight(0),
|
|
||||||
+ mAttached(false) {}
|
|
||||||
|
|
||||||
WindowBackBufferShm::~WindowBackBufferShm() { ReleaseShmSurface(); }
|
|
||||||
|
|
||||||
@@ -357,13 +405,9 @@ bool WindowBackBufferShm::Resize(int aWi
|
|
||||||
if (aWidth == mWidth && aHeight == mHeight) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
LOGWAYLAND(("WindowBackBufferShm::Resize [%p] %d %d\n", (void*)this, aWidth,
|
|
||||||
aHeight));
|
|
||||||
-
|
|
||||||
- ReleaseShmSurface();
|
|
||||||
Create(aWidth, aHeight);
|
|
||||||
-
|
|
||||||
return (mWLBuffer != nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -488,11 +532,13 @@ WindowBackBuffer* WindowSurfaceWayland::
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
- WindowBackBuffer* buffer = new WindowBackBufferShm(this, aWidth, aHeight);
|
|
||||||
- if (buffer) {
|
|
||||||
- mShmBackupBuffer[availableBuffer] = buffer;
|
|
||||||
+ WindowBackBuffer* buffer = new WindowBackBufferShm(this);
|
|
||||||
+ if (!buffer->Create(aWidth, aHeight)) {
|
|
||||||
+ delete buffer;
|
|
||||||
+ return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ mShmBackupBuffer[availableBuffer] = buffer;
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
|
|
||||||
--- a/widget/gtk/WindowSurfaceWayland.h
|
|
||||||
+++ b/widget/gtk/WindowSurfaceWayland.h
|
|
||||||
@@ -25,14 +25,14 @@ class WindowSurfaceWayland;
|
|
||||||
// Allocates and owns shared memory for Wayland drawing surface
|
|
||||||
class WaylandShmPool {
|
|
||||||
public:
|
|
||||||
- WaylandShmPool(RefPtr<nsWaylandDisplay> aDisplay, int aSize);
|
|
||||||
- ~WaylandShmPool();
|
|
||||||
-
|
|
||||||
- bool Resize(int aSize);
|
|
||||||
+ bool Create(RefPtr<nsWaylandDisplay> aWaylandDisplay, int aSize);
|
|
||||||
+ void Release();
|
|
||||||
wl_shm_pool* GetShmPool() { return mShmPool; };
|
|
||||||
void* GetImageData() { return mImageData; };
|
|
||||||
void SetImageDataFromPool(class WaylandShmPool* aSourcePool,
|
|
||||||
int aImageDataSize);
|
|
||||||
+ WaylandShmPool();
|
|
||||||
+ ~WaylandShmPool();
|
|
||||||
|
|
||||||
private:
|
|
||||||
wl_shm_pool* mShmPool;
|
|
||||||
@@ -53,6 +53,7 @@ class WindowBackBuffer {
|
|
||||||
virtual bool IsAttached() = 0;
|
|
||||||
|
|
||||||
virtual void Clear() = 0;
|
|
||||||
+ virtual bool Create(int aWidth, int aHeight) = 0;
|
|
||||||
virtual bool Resize(int aWidth, int aHeight) = 0;
|
|
||||||
|
|
||||||
virtual int GetWidth() = 0;
|
|
||||||
@@ -87,8 +88,7 @@ class WindowBackBuffer {
|
|
||||||
|
|
||||||
class WindowBackBufferShm : public WindowBackBuffer {
|
|
||||||
public:
|
|
||||||
- WindowBackBufferShm(WindowSurfaceWayland* aWindowSurfaceWayland, int aWidth,
|
|
||||||
- int aHeight);
|
|
||||||
+ WindowBackBufferShm(WindowSurfaceWayland* aWindowSurfaceWayland);
|
|
||||||
~WindowBackBufferShm();
|
|
||||||
|
|
||||||
already_AddRefed<gfx::DrawTarget> Lock();
|
|
||||||
@@ -100,6 +100,7 @@ class WindowBackBufferShm : public Windo
|
|
||||||
void SetAttached() { mAttached = true; };
|
|
||||||
|
|
||||||
void Clear();
|
|
||||||
+ bool Create(int aWidth, int aHeight);
|
|
||||||
bool Resize(int aWidth, int aHeight);
|
|
||||||
bool SetImageDataFromBuffer(class WindowBackBuffer* aSourceBuffer);
|
|
||||||
|
|
||||||
@@ -109,7 +110,6 @@ class WindowBackBufferShm : public Windo
|
|
||||||
wl_buffer* GetWlBuffer() { return mWLBuffer; };
|
|
||||||
|
|
||||||
private:
|
|
||||||
- void Create(int aWidth, int aHeight);
|
|
||||||
void ReleaseShmSurface();
|
|
||||||
|
|
||||||
// WaylandShmPool provides actual shared memory we draw into
|
|
||||||
|
|
@ -1,111 +0,0 @@
|
|||||||
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;
|
|
||||||
|
|
||||||
/**
|
|
@ -1,14 +0,0 @@
|
|||||||
diff -up firefox-52.0/gfx/skia/skia/include/core/SkPreConfig.h.arm firefox-52.0/gfx/skia/skia/include/core/SkPreConfig.h
|
|
||||||
--- firefox-52.0/gfx/skia/skia/include/core/SkPreConfig.h.arm 2017-03-03 13:53:52.480754536 +0100
|
|
||||||
+++ firefox-52.0/gfx/skia/skia/include/core/SkPreConfig.h 2017-03-03 13:56:01.476018102 +0100
|
|
||||||
@@ -203,6 +203,10 @@
|
|
||||||
#define SK_ARM_HAS_CRC32
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if defined(__aarch64__)
|
|
||||||
+ #undef SK_ARM_HAS_NEON
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#if !defined(SKIA_IMPLEMENTATION)
|
|
@ -1,2 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
exec /usr/bin/node "$@" 2>&1 | cat -
|
#exec /usr/bin/node "$@" 2>&1 | cat -
|
||||||
|
exec $MOZ_NODEJS "$@" 2>&1 | cat -
|
||||||
|
153
pgo.patch
153
pgo.patch
@ -1,153 +0,0 @@
|
|||||||
diff -up firefox-81.0.1/build/moz.configure/lto-pgo.configure.pgo firefox-81.0.1/build/moz.configure/lto-pgo.configure
|
|
||||||
--- firefox-81.0.1/build/moz.configure/lto-pgo.configure.pgo 2020-09-30 19:41:10.000000000 +0200
|
|
||||||
+++ firefox-81.0.1/build/moz.configure/lto-pgo.configure 2020-10-07 09:16:44.071786956 +0200
|
|
||||||
@@ -69,12 +69,14 @@ set_config('PGO_PROFILE_PATH', pgo_profi
|
|
||||||
@imports(_from='__builtin__', _import='min')
|
|
||||||
def pgo_flags(compiler, profdata, target_is_windows):
|
|
||||||
if compiler.type == 'gcc':
|
|
||||||
+ #profile_use = '-fprofile-use=$(topobjdir)'
|
|
||||||
+ profile_use = '-fprofile-use'
|
|
||||||
return namespace(
|
|
||||||
gen_cflags=['-fprofile-generate'],
|
|
||||||
gen_ldflags=['-fprofile-generate'],
|
|
||||||
- use_cflags=['-fprofile-use', '-fprofile-correction',
|
|
||||||
+ use_cflags=[profile_use, '-fprofile-correction',
|
|
||||||
'-Wcoverage-mismatch'],
|
|
||||||
- use_ldflags=['-fprofile-use'],
|
|
||||||
+ use_ldflags=[profile_use],
|
|
||||||
)
|
|
||||||
|
|
||||||
if compiler.type in ('clang-cl', 'clang'):
|
|
||||||
@@ -192,13 +194,13 @@ def lto(value, c_compiler, ld64_known_go
|
|
||||||
cflags.append("-flto")
|
|
||||||
ldflags.append("-flto")
|
|
||||||
else:
|
|
||||||
- cflags.append("-flto=thin")
|
|
||||||
- ldflags.append("-flto=thin")
|
|
||||||
+ cflags.append("-flto")
|
|
||||||
+ ldflags.append("-flto")
|
|
||||||
elif c_compiler.type == 'clang-cl':
|
|
||||||
if len(value) and value[0].lower() == 'full':
|
|
||||||
cflags.append("-flto")
|
|
||||||
else:
|
|
||||||
- cflags.append("-flto=thin")
|
|
||||||
+ cflags.append("-flto")
|
|
||||||
# With clang-cl, -flto can only be used with -c or -fuse-ld=lld.
|
|
||||||
# AC_TRY_LINKs during configure don't have -c, so pass -fuse-ld=lld.
|
|
||||||
cflags.append("-fuse-ld=lld");
|
|
||||||
@@ -232,7 +234,7 @@ def lto(value, c_compiler, ld64_known_go
|
|
||||||
if len(value) and value[0].lower() == 'full':
|
|
||||||
cflags.append("-flto")
|
|
||||||
else:
|
|
||||||
- cflags.append("-flto=thin")
|
|
||||||
+ cflags.append("-flto")
|
|
||||||
cflags.append("-flifetime-dse=1")
|
|
||||||
|
|
||||||
ldflags.append("-flto=%s" % num_cores)
|
|
||||||
diff -up firefox-81.0.1/build/pgo/profileserver.py.pgo firefox-81.0.1/build/pgo/profileserver.py
|
|
||||||
--- firefox-81.0.1/build/pgo/profileserver.py.pgo 2020-09-30 19:41:10.000000000 +0200
|
|
||||||
+++ firefox-81.0.1/build/pgo/profileserver.py 2020-10-07 09:16:44.071786956 +0200
|
|
||||||
@@ -11,7 +11,7 @@ import glob
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
import mozcrash
|
|
||||||
-from mozbuild.base import MozbuildObject, BinaryNotFoundException
|
|
||||||
+from mozbuild.base import MozbuildObject, BinaryNotFoundException, BuildEnvironmentNotFoundException
|
|
||||||
from mozfile import TemporaryDirectory
|
|
||||||
from mozhttpd import MozHttpd
|
|
||||||
from mozprofile import FirefoxProfile, Preferences
|
|
||||||
@@ -84,9 +84,22 @@ if __name__ == '__main__':
|
|
||||||
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 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
|
|
||||||
@@ -191,6 +204,11 @@ if __name__ == '__main__':
|
|
||||||
print("Firefox exited successfully, but produced a crashreport")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
+
|
|
||||||
+ print('Copying profile data....')
|
|
||||||
+ os.system('pwd');
|
|
||||||
+ os.system('tar cf profdata.tar.gz `find . -name "*.gcda"`; cd ..; tar xf instrumented/profdata.tar.gz;');
|
|
||||||
+
|
|
||||||
llvm_profdata = env.get('LLVM_PROFDATA')
|
|
||||||
if llvm_profdata:
|
|
||||||
profraw_files = glob.glob('*.profraw')
|
|
||||||
diff -up firefox-81.0.1/build/unix/mozconfig.unix.pgo firefox-81.0.1/build/unix/mozconfig.unix
|
|
||||||
--- firefox-81.0.1/build/unix/mozconfig.unix.pgo 2020-09-30 19:41:10.000000000 +0200
|
|
||||||
+++ firefox-81.0.1/build/unix/mozconfig.unix 2020-10-07 09:16:44.071786956 +0200
|
|
||||||
@@ -6,6 +6,15 @@ if [ -n "$FORCE_GCC" ]; then
|
|
||||||
CC="$MOZ_FETCHES_DIR/gcc/bin/gcc"
|
|
||||||
CXX="$MOZ_FETCHES_DIR/gcc/bin/g++"
|
|
||||||
|
|
||||||
+ 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
|
|
||||||
+
|
|
||||||
# We want to make sure we use binutils and other binaries in the tooltool
|
|
||||||
# package.
|
|
||||||
mk_add_options "export PATH=$MOZ_FETCHES_DIR/gcc/bin:$PATH"
|
|
||||||
diff -up firefox-81.0.1/extensions/spellcheck/src/moz.build.pgo firefox-81.0.1/extensions/spellcheck/src/moz.build
|
|
||||||
--- firefox-81.0.1/extensions/spellcheck/src/moz.build.pgo 2020-09-30 19:41:17.000000000 +0200
|
|
||||||
+++ firefox-81.0.1/extensions/spellcheck/src/moz.build 2020-10-07 09:16:44.071786956 +0200
|
|
||||||
@@ -31,3 +31,5 @@ EXPORTS.mozilla += [
|
|
||||||
|
|
||||||
if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
|
|
||||||
CXXFLAGS += ['-Wno-error=shadow']
|
|
||||||
+
|
|
||||||
+CXXFLAGS += ['-fno-devirtualize']
|
|
||||||
\ No newline at end of file
|
|
||||||
diff -up firefox-81.0.1/python/mozbuild/mozbuild/build_commands.py.pgo firefox-81.0.1/python/mozbuild/mozbuild/build_commands.py
|
|
||||||
--- firefox-81.0.1/python/mozbuild/mozbuild/build_commands.py.pgo 2020-09-30 19:41:46.000000000 +0200
|
|
||||||
+++ firefox-81.0.1/python/mozbuild/mozbuild/build_commands.py 2020-10-07 09:16:44.071786956 +0200
|
|
||||||
@@ -108,7 +108,8 @@ class Build(MachCommandBase):
|
|
||||||
return status
|
|
||||||
|
|
||||||
pgo_env = os.environ.copy()
|
|
||||||
- pgo_env['LLVM_PROFDATA'] = instr.config_environment.substs.get('LLVM_PROFDATA')
|
|
||||||
+ if instr.config_environment.substs.get('CC_TYPE') != 'gcc':
|
|
||||||
+ pgo_env['LLVM_PROFDATA'] = instr.config_environment.substs.get('LLVM_PROFDATA')
|
|
||||||
pgo_env['JARLOG_FILE'] = mozpath.join(orig_topobjdir, 'jarlog/en-US.log')
|
|
||||||
pgo_cmd = [
|
|
||||||
instr.virtualenv_manager.python_path,
|
|
||||||
diff -up firefox-81.0.1/toolkit/components/terminator/nsTerminator.cpp.pgo firefox-81.0.1/toolkit/components/terminator/nsTerminator.cpp
|
|
||||||
--- firefox-81.0.1/toolkit/components/terminator/nsTerminator.cpp.pgo 2020-10-07 09:22:26.698243673 +0200
|
|
||||||
+++ firefox-81.0.1/toolkit/components/terminator/nsTerminator.cpp 2020-10-07 09:22:43.026312999 +0200
|
|
||||||
@@ -418,6 +418,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());
|
|
||||||
const PRIntervalTime ticksDuration = PR_MillisecondsToInterval(1000);
|
|
||||||
options->crashAfterTicks = crashAfterMS / ticksDuration;
|
|
@ -1,23 +0,0 @@
|
|||||||
diff -up firefox-55.0/js/src/old-configure.in.rhbz-1219542-s390 firefox-55.0/js/src/old-configure.in
|
|
||||||
--- firefox-55.0/js/src/old-configure.in.rhbz-1219542-s390 2017-07-31 18:20:48.000000000 +0200
|
|
||||||
+++ firefox-55.0/js/src/old-configure.in 2017-08-02 14:31:32.190243669 +0200
|
|
||||||
@@ -541,7 +541,7 @@ case "$host" in
|
|
||||||
|
|
||||||
*-linux*|*-kfreebsd*-gnu|*-gnu*)
|
|
||||||
HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX"
|
|
||||||
- HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}"
|
|
||||||
+ HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O1}"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
@@ -617,8 +617,8 @@ case "$target" in
|
|
||||||
|
|
||||||
*-*linux*)
|
|
||||||
if test "$GNU_CC" -o "$GNU_CXX"; then
|
|
||||||
- MOZ_PGO_OPTIMIZE_FLAGS="-O3"
|
|
||||||
- MOZ_OPTIMIZE_FLAGS="-O3"
|
|
||||||
+ MOZ_PGO_OPTIMIZE_FLAGS="-O1"
|
|
||||||
+ MOZ_OPTIMIZE_FLAGS="-O1"
|
|
||||||
if test -z "$CLANG_CC"; then
|
|
||||||
MOZ_OPTIMIZE_FLAGS="-freorder-blocks $MOZ_OPTIMIZE_FLAGS"
|
|
||||||
fi
|
|
@ -1,12 +0,0 @@
|
|||||||
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
|
|
||||||
* 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), \
|
|
@ -1,72 +0,0 @@
|
|||||||
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,
|
|
File diff suppressed because one or more lines are too long
15
sources
15
sources
@ -1,3 +1,12 @@
|
|||||||
SHA512 (cbindgen-vendor.tar.xz) = f0425020e2d43a3d28b03f82bdb9719728112a2c94b1d595da384d0674ca21d0940a6f729a690434d670e598fbc6bb5193c89da0a4633a734c70dd786222e711
|
SHA512 (firefox-78.6.1esr.source.tar.xz) = ae6d99fab6e8d9343ad8b0e9e522f20b5c63064598356cd4b31fc02b3b20d62b30590dec42d956e77352559a642157924c2b1c3e887b496962ba305260ed84e7
|
||||||
SHA512 (firefox-82.0.source.tar.xz) = 887bceb0fffe257534b53cd019d35087752042ee7e9db089e01b1a930a30deb0c3dc6b32167552362092bdcec794dd5698046548d3419e17ecd2def366d1bde8
|
SHA512 (firefox-langpacks-78.6.1esr-20210106.tar.xz) = bfca1928675cd8209fd16b0cf40dfdf2b50de153cf7f705e22c714e5b071a1345b5cdff9a0273f731b096767c8843e56979abb26454708256d9d8ed8b82d439c
|
||||||
SHA512 (firefox-langpacks-82.0-20201015.tar.xz) = 8c0cc37ee918bef930feed32aacaed3f7f28f1dd6615d4719d694d6efcd0fb621e03b613f21cd7b34d188b770d8a903568c676d7e3bb4484ab532a45b62a52a8
|
SHA512 (libffi-3.0.13-18.el7_3.src.rpm) = da8ff110c59468f1ef9c861d93afcfa2fcc37409390664859d57113c7e81e54ca0a1a8925c18bb92097bb9710c737361ca36a81bf50fc137b31c2611e4c8a4e4
|
||||||
|
SHA512 (Python-2.7.13.tar.xz) = f37c9a28ce129d01e63c84d7db627a06402854578f62d17927334ea21ede318e04bbf66e890e3f47c85333e6b19f6e5581fb3f3e27efd24be27017d1b6529c4b
|
||||||
|
SHA512 (yasm-1.2.0-3.el5.src.rpm) = bc8ea63ec9e8191fbbf914708b4c89c471ee7cf8ca2e940eedcc8aa0475feade67dd8993cdfbc8949c236b3b36e96fb0748ef8b62e772524340df925533b9bf7
|
||||||
|
SHA512 (gtk3-private-3.22.26-1.el6.src.rpm) = ab1307af3305db38d462015647a5effc24bedbcf1174a2799faf41ae9c33052ec46a0c3d229eb2d472ebe3047ce86e293003ec42d8954342112746430980dc09
|
||||||
|
SHA512 (Python-3.6.8.tar.xz) = b17867e451ebe662f50df83ed112d3656c089e7d750651ea640052b01b713b58e66aac9e082f71fd16f5b5510bc9b797f5ccd30f5399581e9aa406197f02938a
|
||||||
|
SHA512 (openssl-1.0.2k-19.6.bundle.el7_7.src.rpm) = fc00965c1aa7cc8f03a7e739633452fc51925de0dda8da5f21f8805c2b4764033a5211f376182dbab4c42f1f23d3195275f32616c384b54a83df4363ae711c75
|
||||||
|
SHA512 (nspr-4.25.0-1.el8_0.src.rpm) = 7e39e4484b0d504e1b7f1253d7dc1f9f0d45705fbbc3946272acc4c5998b5279004b227485b003e18b48eaee3a2871c98d5c7f94e5dd89b255284599889c8df6
|
||||||
|
SHA512 (cbindgen-vendor-0.14.3.tar.xz) = 33c8d28547674121f690eea0d3ebac33926a39caacac787bf8ed8b346478822e74da5a4a1f57ab4df4105fa8376739a2ece888845a85bc5712aaed20e4a508bc
|
||||||
|
SHA512 (nss-3.53.1-3.fc32.src.rpm) = 368849487aa8f9d602c9e5d9d7c88ebd03318aece12470283ff31744ef9eed27ef1e32031378a5a673bb06a9ebbcf5542afa13f3ad465409449c218922189acb
|
||||||
|
SHA512 (nodejs-10.21.0-5.fc32.src.rpm) = 4d0c212a2609dc10e242a96f63baa8babb91e8aa6696f66f627c562c1ba30cb3632ed01991c98f48b5942fc7fd89ee34b350f41de901339b49a2c19e979593a7
|
||||||
|
Loading…
Reference in New Issue
Block a user