Updated to 63.0
This commit is contained in:
parent
a32c4f15e8
commit
fdd51631aa
2
.gitignore
vendored
2
.gitignore
vendored
@ -312,3 +312,5 @@ firefox-3.6.4.source.tar.bz2
|
||||
/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
|
||||
|
@ -1,12 +1,12 @@
|
||||
diff -up firefox-62.0.2/toolkit/moz.configure.elfhack firefox-62.0.2/toolkit/moz.configure
|
||||
--- firefox-62.0.2/toolkit/moz.configure.elfhack 2018-09-27 14:32:56.549507561 +0200
|
||||
+++ firefox-62.0.2/toolkit/moz.configure 2018-09-27 14:33:08.219532121 +0200
|
||||
@@ -1195,7 +1195,7 @@ with only_when(has_elfhack):
|
||||
option('--disable-elf-hack', help='Disable elf hacks')
|
||||
diff -up firefox-63.0/toolkit/moz.configure.disable-elfhack firefox-63.0/toolkit/moz.configure
|
||||
--- firefox-63.0/toolkit/moz.configure.disable-elfhack 2018-10-18 13:35:35.870039190 +0200
|
||||
+++ firefox-63.0/toolkit/moz.configure 2018-10-18 13:36:41.682515492 +0200
|
||||
@@ -1010,7 +1010,7 @@ with only_when('--enable-compile-environ
|
||||
help='Disable elf hacks')
|
||||
|
||||
set_config('USE_ELF_HACK',
|
||||
- depends_if('--enable-elf-hack')(lambda _: True))
|
||||
+ depends_if('--enable-elf-hack')(lambda _: False))
|
||||
set_config('USE_ELF_HACK',
|
||||
- depends_if('--enable-elf-hack')(lambda _: True))
|
||||
+ depends_if('--enable-elf-hack')(lambda _: False))
|
||||
|
||||
|
||||
@depends(check_build_environment)
|
||||
|
531
firefox.spec
531
firefox.spec
@ -100,13 +100,13 @@
|
||||
|
||||
Summary: Mozilla Firefox Web browser
|
||||
Name: firefox
|
||||
Version: 62.0.3
|
||||
Release: 4%{?pre_tag}%{?dist}
|
||||
Version: 63.0
|
||||
Release: 1%{?pre_tag}%{?dist}
|
||||
URL: https://www.mozilla.org/firefox/
|
||||
License: MPLv1.1 or GPLv2+ or LGPLv2+
|
||||
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz
|
||||
%if %{with langpacks}
|
||||
Source1: firefox-langpacks-%{version}%{?pre_version}-20181002.tar.xz
|
||||
Source1: firefox-langpacks-%{version}%{?pre_version}-20181018.tar.xz
|
||||
%endif
|
||||
Source10: firefox-mozconfig
|
||||
Source12: firefox-redhat-default-prefs.js
|
||||
@ -157,16 +157,11 @@ Patch414: mozilla-1435212-ffmpeg-4.0.patch
|
||||
Patch415: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch
|
||||
Patch416: mozilla-1424422.patch
|
||||
Patch417: bug1375074-save-restore-x28.patch
|
||||
Patch419: rb244676.patch
|
||||
Patch420: rb246462.patch
|
||||
Patch421: mozilla-1447775.patch
|
||||
|
||||
# Wayland specific upstream patches
|
||||
Patch572: mozilla-1467128.patch
|
||||
Patch573: mozilla-1415078.patch
|
||||
Patch574: firefox-pipewire.patch
|
||||
Patch577: mozilla-1444437.patch
|
||||
Patch580: mozilla-wayland-trunk.patch
|
||||
Patch581: mozilla-1493081.patch
|
||||
|
||||
# Debian patches
|
||||
@ -357,8 +352,6 @@ This package contains results of tests executed during build.
|
||||
%ifarch %{arm}
|
||||
%patch415 -p1 -b .1238661
|
||||
%endif
|
||||
%patch419 -p1 -b .rb244676
|
||||
%patch420 -p1 -b .rb246462
|
||||
# Patch for big endian platforms only
|
||||
%if 0%{?big_endian}
|
||||
%patch26 -p1 -b .icu
|
||||
@ -366,13 +359,10 @@ This package contains results of tests executed during build.
|
||||
%patch421 -p1 -b .1447775
|
||||
|
||||
# Wayland specific upstream patches
|
||||
%patch572 -p1 -b .1467128
|
||||
%patch573 -p1 -b .1415078
|
||||
%if 0%{?fedora} > 27
|
||||
%patch574 -p1 -b .firefox-pipewire
|
||||
%endif
|
||||
%patch577 -p1 -b .1444437
|
||||
%patch580 -p1 -b .mozilla-wayland-trunk
|
||||
%patch581 -p1 -b .mozilla-1493081
|
||||
|
||||
%{__rm} -f .mozconfig
|
||||
@ -897,6 +887,10 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
%changelog
|
||||
* Thu Oct 18 2018 Martin Stransky <stransky@redhat.com> - 63.0-1
|
||||
- Updated to latest upstream (63.0)
|
||||
- Updated PipeWire patch
|
||||
|
||||
* Tue Oct 9 2018 Martin Stransky <stransky@redhat.com> - 62.0.3-4
|
||||
- Added fix for mozbz#1447775 - wrong dropspace sizing.
|
||||
|
||||
@ -1023,514 +1017,3 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
||||
* Tue Apr 24 2018 Martin Stransky <stransky@redhat.com> - 60.0-0.1
|
||||
- Update to 60.0 Beta 15
|
||||
|
||||
* Tue Mar 27 2018 Jan Horak <jhorak@redhat.com> - 59.0.2-1
|
||||
- Update to 59.0.2
|
||||
|
||||
* Sat Mar 17 2018 Martin Stransky <stransky@redhat.com> - 59.0.1-1
|
||||
- Updated to 59.0.1
|
||||
|
||||
* Wed Mar 14 2018 Martin Stransky <stransky@redhat.com> - 59.0-4
|
||||
- Fixed broken langpacks.
|
||||
|
||||
* Tue Mar 13 2018 Martin Stransky <stransky@redhat.com> - 59.0-3
|
||||
- Enabled rendering to titlebar.
|
||||
|
||||
* Mon Mar 12 2018 Martin Stransky <stransky@redhat.com> - 59.0-2
|
||||
- Updated to 59.0 build c61f5f5ead48c78a80c80db5c489bdc7cfaf8175
|
||||
|
||||
* Tue Mar 6 2018 Martin Stransky <stransky@redhat.com> - 59.0-1
|
||||
- Updated to 59.0
|
||||
|
||||
* Tue Feb 13 2018 Martin Stransky <stransky@redhat.com> - 58.0.1-3
|
||||
- Added build fix for gcc8 by Tom Callaway
|
||||
|
||||
* Wed Jan 24 2018 Martin Stransky <stransky@redhat.com> - 58.0-4
|
||||
- Enabled second arches
|
||||
|
||||
* Wed Jan 24 2018 Martin Stransky <stransky@redhat.com> - 58.0-3
|
||||
- Enabled titlebar/csd drawing patch again (mozbz#1399611).
|
||||
|
||||
* Wed Jan 24 2018 Martin Stransky <stransky@redhat.com> - 58.0-2
|
||||
- Ship run-mozilla.sh script.
|
||||
|
||||
* Tue Jan 23 2018 Martin Stransky <stransky@redhat.com> - 58.0-1
|
||||
- Update to 58.0
|
||||
|
||||
* Tue Jan 9 2018 Martin Stransky <stransky@redhat.com> - 57.0.4-2
|
||||
- Try to disable rust debuginfo on arm to have arm builds again (rhbz#1523912)
|
||||
|
||||
* Thu Jan 4 2018 Martin Stransky <stransky@redhat.com> - 57.0.4-1
|
||||
- Update to 57.0.4
|
||||
- Require nss 3.34 (rhbz#1531031)
|
||||
- Disabled ARM on all Fedoras due to rhbz#1523912
|
||||
|
||||
* Tue Jan 2 2018 Jan Horak <jhorak@redhat.com> - 57.0.3-1
|
||||
- Exclude armv7hl due to OOM during build on koji
|
||||
- Update to 57.0.3
|
||||
|
||||
* Fri Dec 08 2017 Kevin Fenzi <kevin@scrye.com> - 57.0.1-3
|
||||
- Temp disable armv7 for rawhide to get composes working again. rhbz#1523912
|
||||
|
||||
* Mon Dec 4 2017 Martin Stransky <stransky@redhat.com> - 57.0.1-2
|
||||
- Added new man page by Tobias Girstmair (rhbz#1334025)
|
||||
|
||||
* Thu Nov 30 2017 Jan Horak <jhorak@redhat.com> - 57.0.1-1
|
||||
- Update to 57.0.1
|
||||
|
||||
* Wed Nov 22 2017 Martin Stransky <stransky@redhat.com> - 57.0-3
|
||||
- Enabled titlebar drawing for MATE
|
||||
- Fix for rhbz#1513968 - added missing u2f-hidraw-policy require
|
||||
|
||||
* Mon Nov 13 2017 Martin Stransky <stransky@redhat.com> - 57.0-2
|
||||
- Updated to 57.0 RC4
|
||||
|
||||
* Thu Nov 9 2017 Martin Stransky <stransky@redhat.com> - 57.0-1
|
||||
- Updated to 57.0
|
||||
|
||||
* Mon Nov 6 2017 Martin Stransky <stransky@redhat.com> - 57.0-0.9
|
||||
- Updated to 57.0 Beta 14
|
||||
|
||||
* Mon Oct 30 2017 Martin Stransky <stransky@redhat.com> - 57.0-0.8
|
||||
- Updated to 57.0 Beta 12
|
||||
|
||||
* Tue Oct 24 2017 Kai Engert <kaie@redhat.com> - 57.0-0.7
|
||||
- Backport mozbz#730495 for rhbz#1496563
|
||||
|
||||
* Tue Oct 24 2017 Martin Stransky <stransky@redhat.com> - 57.0-0.6
|
||||
- Updated to 57.0 Beta 11
|
||||
|
||||
* Thu Oct 19 2017 Martin Stransky <stransky@redhat.com> - 57.0-0.5
|
||||
- Updated to 57.0 Beta 9
|
||||
|
||||
* Mon Oct 16 2017 Martin Stransky <stransky@redhat.com> - 57.0-0.4
|
||||
- Updated to 57.0 Beta 8
|
||||
|
||||
* Wed Oct 11 2017 Martin Stransky <stransky@redhat.com> - 57.0-0.3
|
||||
- Updated to 57.0 Beta 7
|
||||
|
||||
* Mon Oct 9 2017 Martin Stransky <stransky@redhat.com> - 57.0-0.2
|
||||
- Updated to 57.0 Beta 6
|
||||
|
||||
* Thu Oct 5 2017 Martin Stransky <stransky@redhat.com> - 57.0-0.1
|
||||
- Updated to 57.0 Beta 5
|
||||
- Added patch for mozbz#1399611 - CSD emulation
|
||||
|
||||
* Wed Oct 4 2017 Martin Stransky <stransky@redhat.com> - 56.0-4
|
||||
- Fixed rhbz#1497932 - Plug-Ins for example flash fails
|
||||
because of unresolved symbols
|
||||
|
||||
* Fri Sep 29 2017 Martin Stransky <stransky@redhat.com> - 56.0-3
|
||||
- Enabled second arches.
|
||||
|
||||
* Mon Sep 25 2017 Martin Stransky <stransky@redhat.com> - 56.0-2
|
||||
- Update to 56.0 (B6)
|
||||
|
||||
* Fri Sep 15 2017 Martin Stransky <stransky@redhat.com> - 55.0.3-4
|
||||
- Added switch to build mozbz#1399611 and disable it now
|
||||
for various regressions.
|
||||
|
||||
* Thu Sep 14 2017 Martin Stransky <stransky@redhat.com> - 55.0.3-3
|
||||
- Added experimental patch for mozbz#1399611
|
||||
|
||||
* Thu Sep 14 2017 Ville Skyttä <ville.skytta@iki.fi> - 55.0.3-2
|
||||
- Own the %%{_sysconfdir}/%%{name} dir
|
||||
|
||||
* Fri Sep 1 2017 Jan Horak <jhorak@redhat.com> - 55.0.3-1
|
||||
- Update to 55.0.3
|
||||
|
||||
* Thu Aug 24 2017 Martin Stransky <stransky@redhat.com> - 55.0.2-3
|
||||
- Enable to build with nspr-4.16.
|
||||
|
||||
* Wed Aug 23 2017 Martin Stransky <stransky@redhat.com> - 55.0.2-2
|
||||
- Rebuilt to remove wrong dependency to nspr-4.16.
|
||||
|
||||
* Fri Aug 18 2017 Martin Stransky <stransky@redhat.com> - 55.0.2-1
|
||||
- Updated to 55.0.2
|
||||
|
||||
* Mon Aug 14 2017 Jan Horak <jhorak@redhat.com> - 55.0.1-1
|
||||
- Update to 55.0.1
|
||||
|
||||
* Fri Aug 11 2017 Jan Horak <jhorak@redhat.com> - 55.0-6
|
||||
- Do not require nss and nspr which we build package against
|
||||
|
||||
* Tue Aug 8 2017 Martin Stransky <stransky@redhat.com> - 55.0-5
|
||||
- Rebuild
|
||||
|
||||
* Mon Aug 7 2017 Martin Stransky <stransky@redhat.com> - 55.0-2
|
||||
- Updated to 55.0 (B3)
|
||||
|
||||
* Wed Aug 2 2017 Martin Stransky <stransky@redhat.com> - 55.0-1
|
||||
- Updated to 55.0 (B1)
|
||||
|
||||
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 54.0.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||
|
||||
* Tue Jul 25 2017 Jan Horak <jhorak@redhat.com> - 54.0.1-1
|
||||
- Update to 54.0.1
|
||||
|
||||
* Tue Jun 13 2017 Jan Horak <jhorak@redhat.com> - 54.0-2
|
||||
- Update to 54.0 (B3)
|
||||
|
||||
* Thu Jun 8 2017 Jan Horak <jhorak@redhat.com> - 54.0-1
|
||||
- Update to 54.0
|
||||
|
||||
* Wed May 31 2017 Jan Horak <jhorak@redhat.com> - 53.0.3-2
|
||||
- Added patch for big endian platforms
|
||||
- Do not restrict architectures in older Fedoras
|
||||
|
||||
* Fri May 26 2017 Jan Horak <jhorak@redhat.com> - 53.0.3-1
|
||||
- Update to 53.0.3
|
||||
|
||||
* Wed May 24 2017 Martin Stransky <stransky@redhat.com> - 53.0.2-8
|
||||
- Disabled Rust on ppc64 ppc64le s390x
|
||||
|
||||
* Wed May 24 2017 Martin Stransky <stransky@redhat.com> - 53.0.2-7
|
||||
- Enabled aarch64 on all Fedoras
|
||||
- Enabled Rust on all arches
|
||||
|
||||
* Wed May 24 2017 Martin Stransky <stransky@redhat.com> - 53.0.2-6
|
||||
- Added aarch64 patch (mozbz#1353817)
|
||||
|
||||
* Tue May 16 2017 Martin Stransky <stransky@redhat.com> - 53.0.2-5
|
||||
- Arm gcc6 build fix (mozbz#1337988)
|
||||
|
||||
* Fri May 12 2017 Martin Stransky <stransky@redhat.com> - 53.0.2-4
|
||||
- Enabled rust on ix86
|
||||
|
||||
* Thu May 11 2017 Martin Stransky <stransky@redhat.com> - 53.0.2-3
|
||||
- Enabled Rust on Arm builds
|
||||
|
||||
* Thu May 11 2017 Martin Stransky <stransky@redhat.com> - 53.0.2-2
|
||||
- Enabled Arm builds
|
||||
|
||||
* Fri May 5 2017 Jan Horak <jhorak@redhat.com> - 53.0.2-1
|
||||
- Update to 53.0.2
|
||||
- Cannot use disable-skia for any architecture now
|
||||
|
||||
* Thu Apr 27 2017 Jan Horak <jhorak@redhat.com> - 53.0-4
|
||||
- Added patch from rhbz#1400293
|
||||
|
||||
* Thu Apr 20 2017 Martin Stransky <stransky@redhat.com> - 53.0-3
|
||||
- Enabled second arches
|
||||
|
||||
* Tue Apr 18 2017 Martin Stransky <stransky@redhat.com> - 53.0-2
|
||||
- Disable system hunspell library when necessary
|
||||
|
||||
* Tue Apr 18 2017 Martin Stransky <stransky@redhat.com> - 53.0-1
|
||||
- Updated to 53.0 (B6)
|
||||
|
||||
* Tue Apr 18 2017 Jan Horak <jhorak@redhat.com> - 52.0.2-3
|
||||
- Do not use color management until it is fixed for some broken profiles,
|
||||
ie. don't set gfx.color_management.enablev4 to true (rhbz#1403970).
|
||||
- Added distribution.ini file to fix mozbz#1354489
|
||||
|
||||
* Fri Mar 31 2017 Martin Stransky <stransky@redhat.com> - 52.0.2-2
|
||||
- Added patch for mozbz#1348576 - enable e10s by default
|
||||
- Added patch for mozbz#1158076 - enable dark theme by pref
|
||||
|
||||
* Wed Mar 29 2017 Jan Horak <jhorak@redhat.com> - 52.0.2-1
|
||||
- Update to 52.0.2
|
||||
|
||||
* Mon Mar 27 2017 Martin Stransky <stransky@redhat.com> - 52.0-7
|
||||
- Reverted mozbz#1158076 due to rhbz#1435964
|
||||
|
||||
* Wed Mar 22 2017 Martin Stransky <stransky@redhat.com> - 52.0-6
|
||||
- Added fix for CVE-2017-5428
|
||||
- Added fix for mozbz#1158076
|
||||
|
||||
* Mon Mar 13 2017 Martin Stransky <stransky@redhat.com> - 52.0-5
|
||||
- Enable ALSA backend behind pref (rhbz#1431371)
|
||||
|
||||
* Fri Mar 10 2017 Martin Stransky <stransky@redhat.com> - 52.0-4
|
||||
- Fixed e10s enablement (rhbz#1398717)
|
||||
|
||||
* Tue Mar 7 2017 Jan Horak <jhorak@redhat.com> - 52.0-3
|
||||
- Added s390x to big endian platforms
|
||||
|
||||
* Tue Mar 7 2017 Jan Horak <jhorak@redhat.com> - 52.0-2
|
||||
- Added fix for libicu on big endian platforms
|
||||
|
||||
* Fri Mar 3 2017 Martin Stransky <stransky@redhat.com> - 52.0-1
|
||||
- Update to 52.0 (B2)
|
||||
|
||||
* Thu Mar 02 2017 Kai Engert <kaie@redhat.com> - 51.0.1-11
|
||||
- Enable upstream fix for rhbz#1400293 mozbz#1324096 on F26 and Rawhide.
|
||||
Keep the old workaround on F24/F25, required base packages aren't
|
||||
available yet.
|
||||
|
||||
* Thu Mar 2 2017 Martin Stransky <stransky@redhat.com> - 51.0.1-10
|
||||
- Test another ARMv7 build setup (rhbz#1426850)
|
||||
|
||||
* Mon Feb 27 2017 Martin Stransky <stransky@redhat.com> - 51.0.1-9
|
||||
- Disabled ARMv7 due to build failures (rhbz#1426850)
|
||||
|
||||
* Mon Feb 27 2017 Martin Stransky <stransky@redhat.com> - 51.0.1-8
|
||||
- Enabled ARMv7 (rhbz#1426850)
|
||||
|
||||
* Mon Feb 27 2017 Martin Stransky <stransky@redhat.com> - 51.0.1-7
|
||||
- Added fix for rhbz#1414535
|
||||
|
||||
* Thu Feb 23 2017 Martin Stransky <stransky@redhat.com> - 51.0.1-6
|
||||
- Added fix for mozbz#1321579
|
||||
|
||||
* Thu Feb 23 2017 Martin Stransky <stransky@redhat.com> - 51.0.1-5
|
||||
- Disabled -O3 optimization on rawhide to make FF usable (rhbz#1422532)
|
||||
|
||||
* Wed Feb 15 2017 Jan Horak <jhorak@redhat.com> - 51.0.1-4
|
||||
- Fixed bug 1421334 - translations for "New window"
|
||||
|
||||
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 51.0.1-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||
|
||||
* Wed Jan 25 2017 Jan Horak <jhorak@redhat.com> - 51.0.1-2
|
||||
- Update to 51.0.1
|
||||
|
||||
* Tue Jan 24 2017 Martin Stransky <stransky@redhat.com> - 51.0-3
|
||||
- Added fix for aarch64 crashes (rhbz#1354671)
|
||||
|
||||
* Thu Jan 19 2017 Martin Stransky <stransky@redhat.com> - 51.0-2
|
||||
- Update to 51.0 (B2)
|
||||
|
||||
* Wed Jan 18 2017 Martin Stransky <stransky@redhat.com> - 51.0-1
|
||||
- Update to 51.0 (B1)
|
||||
|
||||
* Tue Jan 17 2017 Jan Horak <jhorak@redhat.com> - 50.1.0-4
|
||||
- Enable telemetry (rhbz#1412971)
|
||||
|
||||
* Mon Jan 16 2017 Martin Stransky <stransky@redhat.com> - 50.1.0-3
|
||||
- Added patch for nss 3.28.1 (mozbz#1290037)
|
||||
|
||||
* Wed Dec 21 2016 Martin Stransky <stransky@redhat.com> - 50.1.0-2
|
||||
- Enabled Mozilla crash reporter
|
||||
|
||||
* Tue Dec 13 2016 Martin Stransky <stransky@redhat.com> - 50.1.0-1
|
||||
- Updated to 50.1.0
|
||||
|
||||
* Wed Nov 30 2016 Martin Stransky <stransky@redhat.com> - 50.0.2-2
|
||||
- Added fix for "ABORT: X_ShmAttach: BadAccess" crashes
|
||||
(mozbz#1271100)
|
||||
|
||||
* Wed Nov 30 2016 Martin Stransky <stransky@redhat.com> - 50.0.2-1
|
||||
- Update to latest upstream (50.0.2)
|
||||
|
||||
* Mon Nov 28 2016 Martin Stransky <stransky@redhat.com> - 50.0.1-1
|
||||
- Update to latest upstream (50.0.1)
|
||||
|
||||
* Thu Nov 24 2016 Martin Stransky <stransky@redhat.com> - 50.0-2
|
||||
- Rebase Gtk3 widget code to latest trunk to fix
|
||||
various rendering problems (rhbz#1397290)
|
||||
|
||||
* Thu Nov 10 2016 Martin Stransky <stransky@redhat.com> - 50.0-1
|
||||
- Update to 50.0
|
||||
|
||||
* Mon Oct 31 2016 Jan Horak <jhorak@redhat.com> - 49.0.2-1
|
||||
- Update to 49.0.2
|
||||
|
||||
* Mon Sep 26 2016 Jan Horak <jhorak@redhat.com> - 49.0-3
|
||||
- Build with rust where possible
|
||||
- Added fix for wrong accept-language headers when running with non-english locales
|
||||
|
||||
* Mon Sep 19 2016 Martin Stransky <stransky@redhat.com> - 49.0-2
|
||||
- Update to Firefox 49 (B4)
|
||||
|
||||
* Tue Sep 6 2016 Martin Stransky <stransky@redhat.com> - 49.0-1
|
||||
- Update to Firefox 49
|
||||
|
||||
* Mon Aug 22 2016 Jan Horak <jhorak@redhat.com> - 48.0.1-2
|
||||
- Added translations for .desktop file actions
|
||||
|
||||
* Fri Aug 19 2016 Martin Stransky <stransky@redhat.com> - 48.0.1-1
|
||||
- Update to 48.0.1
|
||||
- Added fix for mozbz#1291700 - Since latest release NTLM/SPNEGO
|
||||
no longer works
|
||||
|
||||
* Wed Aug 17 2016 Martin Stransky <stransky@redhat.com> - 48.0-6
|
||||
- Added patch for mozbz#1225044 - gtk3 rendering glitches
|
||||
|
||||
* Fri Jul 29 2016 Martin Stransky <stransky@redhat.com> - 48.0-5
|
||||
- Added fix for mozbz#1250704 - tooltips text color
|
||||
- Disable system sqlite on F23
|
||||
- Package in-tree icu file
|
||||
|
||||
* Thu Jul 28 2016 Martin Stransky <stransky@redhat.com> - 48.0-4
|
||||
- Enable dark themes by pref in about:config (Bug 1272332)
|
||||
- Backported gtk3.20 upstream fixes
|
||||
|
||||
* Wed Jul 27 2016 Martin Stransky <stransky@redhat.com> - 48.0-3
|
||||
- Updated to 48.0 (B2)
|
||||
|
||||
* Wed Jul 27 2016 Jan Horak <jhorak@redhat.com> - 48.0-2
|
||||
- Negotiate authentication is made off the main thread again (mozbz#890908)
|
||||
- Fixed default prerefences (rhbz#1349489)
|
||||
|
||||
* Tue Jul 26 2016 Martin Stransky <stransky@redhat.com> - 48.0-1
|
||||
- Updated to 48.0
|
||||
|
||||
* Fri Jul 22 2016 Tom Callaway <spot@fedoraproject.org> - 47.0.1-3
|
||||
- rebuild for libvpx 1.6.0
|
||||
|
||||
* Mon Jul 11 2016 Martin Stransky <stransky@redhat.com> - 47.0.1-2
|
||||
- Added fix for mozbz#256180 - gmail paste issues
|
||||
|
||||
* Mon Jul 11 2016 Martin Stransky <stransky@redhat.com> - 47.0.1-1
|
||||
- Updated to 47.0.1
|
||||
|
||||
* Wed Jun 22 2016 Martin Stransky <stransky@redhat.com> - 47.0-6
|
||||
- Updated tooltip patch for 3.20
|
||||
|
||||
* Mon Jun 6 2016 Martin Stransky <stransky@redhat.com> - 47.0-4
|
||||
- Updated to 47.0 (B3)
|
||||
- Should fix rhbz#1338010 (rebuilt against new astronomy-bookmarks)
|
||||
|
||||
* Fri Jun 3 2016 Martin Stransky <stransky@redhat.com> - 47.0-3
|
||||
- Updated to 47.0 (B2)
|
||||
|
||||
* Thu Jun 2 2016 Martin Stransky <stransky@redhat.com> - 47.0-2
|
||||
- Updated to 47.0
|
||||
- Backout of negotiate authentication patch
|
||||
|
||||
* Thu May 26 2016 Jan Horak <jhorak@redhat.com> - 46.0.1-9
|
||||
- Negotiate authentication is made off the main thread (mozbz#890908)
|
||||
|
||||
* Mon May 23 2016 Martin Stransky <stransky@redhat.com> - 46.0.1-8
|
||||
- Rebuilt for new bookmarks (rhbz#1338010)
|
||||
- Fixed build issue in Gtk3.20 patch
|
||||
|
||||
* Fri May 20 2016 Martin Stransky <stransky@redhat.com> - 46.0.1-6
|
||||
- Updated Gtk3.20 patch - fixed tooltips
|
||||
|
||||
* Thu May 19 2016 Martin Stransky <stransky@redhat.com> - 46.0.1-5
|
||||
- Added a fix for mozbz#1245783 - gcc6.1 crashes in JIT
|
||||
|
||||
* Thu May 12 2016 Martin Stransky <stransky@redhat.com> - 46.0.1-4
|
||||
- Added fix for rhbz#1332821 - Crash on "Select" in "Open with" dialog
|
||||
|
||||
* Tue May 10 2016 Martin Stransky <stransky@redhat.com> - 46.0.1-3
|
||||
- Added patch for rhbz#1332875 - new Samba auth reponse
|
||||
|
||||
* Thu May 5 2016 Martin Stransky <stransky@redhat.com> - 46.0.1-2
|
||||
- Disable dark theme until we support it correctly (mozbz#1216658)
|
||||
|
||||
* Tue May 3 2016 Martin Stransky <stransky@redhat.com> - 46.0.1-1
|
||||
- Updated to 46.0.1
|
||||
|
||||
* Mon May 2 2016 Martin Stransky <stransky@redhat.com> - 46.0-6
|
||||
- Removed gstreamer config as it's no longer used.
|
||||
See rhbz#1331496 for details.
|
||||
- Updated Firefox project URL (rhbz#1329014)
|
||||
|
||||
* Thu Apr 28 2016 Martin Stransky <stransky@redhat.com> - 46.0-5
|
||||
- Added fix for rhbz#1322626 - wrong focused window
|
||||
|
||||
* Wed Apr 27 2016 Martin Stransky <stransky@redhat.com> - 46.0-4
|
||||
- Added fix for rhbz#1315225 - ppc64le/aarch64 build fixes
|
||||
|
||||
* Wed Apr 27 2016 Martin Stransky <stransky@redhat.com> - 46.0-3
|
||||
- Fixed missing langpacks
|
||||
|
||||
* Tue Apr 26 2016 Martin Stransky <stransky@redhat.com> - 46.0-2
|
||||
- Disabled system libicu on Fedora 22/23
|
||||
|
||||
* Mon Apr 25 2016 Martin Stransky <stransky@redhat.com> - 46.0-1
|
||||
- Updated to 46.0 (B5)
|
||||
|
||||
* Thu Apr 21 2016 Martin Stransky <stransky@redhat.com> - 45.0.2-5
|
||||
- Added patch for mozbz#1263145
|
||||
|
||||
* Wed Apr 20 2016 Martin Stransky <stransky@redhat.com> - 45.0.2-4
|
||||
- Updated scrollbar code for Gtk 3.20
|
||||
|
||||
* Mon Apr 18 2016 Martin Stransky <stransky@redhat.com> - 45.0.2-2
|
||||
- Disabled gcc6 null this optimization (rhbz#1328045)
|
||||
|
||||
* Mon Apr 11 2016 Martin Stransky <stransky@redhat.com> - 45.0.2-1
|
||||
- New upstream (45.0.2)
|
||||
|
||||
* Tue Apr 5 2016 Martin Stransky <stransky@redhat.com> - 45.0.1-6
|
||||
- Fixed rhbz#1322669 - Flash widgets are not displayed
|
||||
|
||||
* Tue Apr 5 2016 Martin Stransky <stransky@redhat.com> - 45.0.1-5
|
||||
- Polished gcc6 patches
|
||||
|
||||
* Tue Mar 22 2016 Martin Stransky <stransky@redhat.com> - 45.0.1-4
|
||||
- Fixed rhbz#1321355 - broken flash plugin
|
||||
- Added /etc/firefox/pref dir for easy configuration
|
||||
|
||||
* Mon Mar 21 2016 Martin Stransky <stransky@redhat.com> - 45.0.1-3
|
||||
- Provide system wide config dir (mozbz#1170092)
|
||||
- Allow lock preferences from .js files (mozbz#440908)
|
||||
|
||||
* Mon Mar 21 2016 Martin Stransky <stransky@redhat.com> - 45.0.1-2
|
||||
- Fixed rhbz#1293874 - use a Debian patch for disabled extension
|
||||
signing
|
||||
|
||||
* Wed Mar 16 2016 Martin Stransky <stransky@redhat.com> - 45.0.1-1
|
||||
- Update to 45.0.1
|
||||
|
||||
* Tue Mar 15 2016 Martin Stransky <stransky@redhat.com> - 45.0-5
|
||||
- Updated gtk3.20 patch
|
||||
|
||||
* Fri Mar 4 2016 Martin Stransky <stransky@redhat.com> - 45.0-4
|
||||
- Update to 45.0 (B2)
|
||||
|
||||
* Thu Mar 3 2016 Martin Stransky <stransky@redhat.com> - 45.0-3
|
||||
- Added run-time fix for JIT (mozbz#1253216)
|
||||
|
||||
* Wed Mar 2 2016 Martin Stransky <stransky@redhat.com> - 45.0-2
|
||||
- Disabled system libvpx on Fedora 22 where is 1.3.0
|
||||
|
||||
* Wed Mar 2 2016 Martin Stransky <stransky@redhat.com> - 45.0-1
|
||||
- Update to 45.0
|
||||
|
||||
* Thu Feb 11 2016 Martin Stransky <stransky@redhat.com> - 44.0.2-3
|
||||
- Added patch for mozbz#1205199
|
||||
|
||||
* Thu Feb 11 2016 Martin Stransky <stransky@redhat.com> - 44.0.2-2
|
||||
- Update to 44.0.2 (B3)
|
||||
|
||||
* Wed Feb 10 2016 Martin Stransky <stransky@redhat.com> - 44.0.2-1
|
||||
- Update to 44.0.2 (B2)
|
||||
|
||||
* Mon Feb 8 2016 Martin Stransky <stransky@redhat.com> - 44.0.1-2
|
||||
- Update to 44.0.1 (B2)
|
||||
|
||||
* Fri Feb 5 2016 Martin Stransky <stransky@redhat.com> - 44.0.1-1
|
||||
- Update to 44.0.1
|
||||
|
||||
* Thu Feb 4 2016 Jan Horak <jhorak@redhat.com> - 44.0-6
|
||||
- Workaround for crash when closing application chooser and Fedora 23
|
||||
(rhbz#1291190)
|
||||
|
||||
* Tue Feb 2 2016 Martin Stransky <stransky@redhat.com> - 44.0-5
|
||||
- GCC 6.0 build patch
|
||||
- Disabled mozilla crashreporter to catch Gtk3 crashes
|
||||
|
||||
* Mon Feb 1 2016 Martin Stransky <stransky@redhat.com> - 44.0-4
|
||||
- Removed pulseaudio hard dependency (rhbz#1303620)
|
||||
|
||||
* Tue Jan 26 2016 Ralph Giles <giles@mozilla.com> - 44.0-3
|
||||
- Medadata update, require pulseaudio
|
||||
|
||||
* Mon Jan 25 2016 Martin Stransky <stransky@redhat.com> - 44.0-2
|
||||
- Update to 44.0 B3
|
||||
|
||||
* Thu Jan 21 2016 Jan Horak <jhorak@redhat.com> - 44.0-1
|
||||
- Update to 44.0
|
||||
|
||||
* Thu Jan 14 2016 Martin Stransky <stransky@redhat.com> - 43.0.4-2
|
||||
- Fixed the progress bar rendering
|
||||
|
||||
* Thu Jan 14 2016 Martin Stransky <stransky@redhat.com> - 43.0.4-1
|
||||
- Update to 43.0.4
|
||||
|
||||
* Wed Jan 13 2016 Martin Stransky <stransky@redhat.com> - 43.0.3-5
|
||||
- Updated progress bars rendering for Gtk 3.20
|
||||
|
||||
* Thu Jan 7 2016 Martin Stransky <stransky@redhat.com> - 43.0.3-4
|
||||
- Added fix for mozbz#1234026 - crashes on XWayland
|
||||
|
||||
* Tue Jan 05 2016 Marcin Juszkiewicz <mjuszkiewicz@redhat.com> - 43.0.3-3
|
||||
- Fix build on AArch64.
|
||||
|
||||
* Mon Jan 4 2016 Martin Stransky <stransky@redhat.com> - 43.0.3-2
|
||||
- Enabled Skia (rhbz#1282134)
|
||||
|
@ -1,7 +1,7 @@
|
||||
diff -up firefox-58.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 firefox-58.0/extensions/pref/autoconfig/src/nsReadConfig.cpp
|
||||
--- firefox-58.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 2018-01-11 21:17:03.000000000 +0100
|
||||
+++ firefox-58.0/extensions/pref/autoconfig/src/nsReadConfig.cpp 2018-01-23 13:59:45.446495820 +0100
|
||||
@@ -239,9 +239,20 @@ nsresult nsReadConfig::openAndEvaluateJS
|
||||
diff -up firefox-63.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 firefox-63.0/extensions/pref/autoconfig/src/nsReadConfig.cpp
|
||||
--- firefox-63.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 2018-10-15 21:20:45.000000000 +0200
|
||||
+++ firefox-63.0/extensions/pref/autoconfig/src/nsReadConfig.cpp 2018-10-18 13:37:55.993001292 +0200
|
||||
@@ -265,9 +265,20 @@ nsresult nsReadConfig::openAndEvaluateJS
|
||||
return rv;
|
||||
|
||||
rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile);
|
||||
@ -24,10 +24,10 @@ diff -up firefox-58.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 fi
|
||||
} else {
|
||||
nsAutoCString location("resource://gre/defaults/autoconfig/");
|
||||
location += aFileName;
|
||||
diff -up firefox-58.0/modules/libpref/Preferences.cpp.1170092 firefox-58.0/modules/libpref/Preferences.cpp
|
||||
--- firefox-58.0/modules/libpref/Preferences.cpp.1170092 2018-01-23 13:59:45.447495817 +0100
|
||||
+++ firefox-58.0/modules/libpref/Preferences.cpp 2018-01-23 14:02:51.456987774 +0100
|
||||
@@ -4402,6 +4402,8 @@ pref_InitInitialObjects()
|
||||
diff -up firefox-63.0/modules/libpref/Preferences.cpp.1170092 firefox-63.0/modules/libpref/Preferences.cpp
|
||||
--- firefox-63.0/modules/libpref/Preferences.cpp.1170092 2018-10-15 21:20:49.000000000 +0200
|
||||
+++ firefox-63.0/modules/libpref/Preferences.cpp 2018-10-18 13:37:55.994001285 +0200
|
||||
@@ -4873,6 +4873,8 @@ Preferences::InitInitialObjects(bool aIs
|
||||
//
|
||||
// Thus, in the omni.jar case, we always load app-specific default
|
||||
// preferences from omni.jar, whether or not `$app == $gre`.
|
||||
@ -36,10 +36,10 @@ diff -up firefox-58.0/modules/libpref/Preferences.cpp.1170092 firefox-58.0/modul
|
||||
|
||||
nsresult rv;
|
||||
nsZipFind* findPtr;
|
||||
diff -up firefox-58.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-58.0/toolkit/xre/nsXREDirProvider.cpp
|
||||
--- firefox-58.0/toolkit/xre/nsXREDirProvider.cpp.1170092 2018-01-11 21:17:06.000000000 +0100
|
||||
+++ firefox-58.0/toolkit/xre/nsXREDirProvider.cpp 2018-01-23 13:59:45.447495817 +0100
|
||||
@@ -59,6 +59,7 @@
|
||||
diff -up firefox-63.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-63.0/toolkit/xre/nsXREDirProvider.cpp
|
||||
--- firefox-63.0/toolkit/xre/nsXREDirProvider.cpp.1170092 2018-10-15 21:20:52.000000000 +0200
|
||||
+++ firefox-63.0/toolkit/xre/nsXREDirProvider.cpp 2018-10-18 13:41:06.969581700 +0200
|
||||
@@ -57,6 +57,7 @@
|
||||
#endif
|
||||
#ifdef XP_UNIX
|
||||
#include <ctype.h>
|
||||
@ -47,7 +47,7 @@ diff -up firefox-58.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-58.0/tool
|
||||
#endif
|
||||
#ifdef XP_IOS
|
||||
#include "UIKitDirProvider.h"
|
||||
@@ -554,6 +555,20 @@ nsXREDirProvider::GetFile(const char* aP
|
||||
@@ -527,6 +528,20 @@ nsXREDirProvider::GetFile(const char* aP
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -68,24 +68,25 @@ diff -up firefox-58.0/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-58.0/tool
|
||||
if (NS_FAILED(rv) || !file)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
@@ -887,6 +902,14 @@ nsXREDirProvider::GetFilesInternal(const
|
||||
LoadDirIntoArray(mXULAppDir, kAppendPrefDir, directories);
|
||||
@@ -863,6 +878,15 @@ nsXREDirProvider::GetFilesInternal(const
|
||||
LoadDirsIntoArray(mAppBundleDirectories,
|
||||
kAppendPrefDir, directories);
|
||||
|
||||
+ // Add /etc/<application>/pref/ directory if it exists
|
||||
+ nsCOMPtr<nsIFile> systemPrefDir;
|
||||
+ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR, getter_AddRefs(systemPrefDir));
|
||||
+ if (NS_SUCCEEDED(rv)) {
|
||||
+ rv = systemPrefDir->AppendNative(NS_LITERAL_CSTRING("pref"));
|
||||
+ if (NS_SUCCEEDED(rv))
|
||||
+ directories.AppendObject(systemPrefDir);
|
||||
+ directories.AppendObject(systemPrefDir);
|
||||
+ }
|
||||
|
||||
rv = NS_NewArrayEnumerator(aResult, directories);
|
||||
+
|
||||
rv = NS_NewArrayEnumerator(aResult, directories, NS_GET_IID(nsIFile));
|
||||
}
|
||||
diff -up firefox-58.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 firefox-58.0/xpcom/io/nsAppDirectoryServiceDefs.h
|
||||
--- firefox-58.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 2018-01-23 13:59:45.447495817 +0100
|
||||
+++ firefox-58.0/xpcom/io/nsAppDirectoryServiceDefs.h 2018-01-23 14:02:02.871120476 +0100
|
||||
else if (!strcmp(aProperty, NS_APP_CHROME_DIR_LIST)) {
|
||||
diff -up firefox-63.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 firefox-63.0/xpcom/io/nsAppDirectoryServiceDefs.h
|
||||
--- firefox-63.0/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 2018-10-15 21:20:52.000000000 +0200
|
||||
+++ firefox-63.0/xpcom/io/nsAppDirectoryServiceDefs.h 2018-10-18 13:37:55.994001285 +0200
|
||||
@@ -59,6 +59,7 @@
|
||||
#define NS_APP_PREFS_50_FILE "PrefF"
|
||||
#define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL"
|
||||
|
@ -1,183 +0,0 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Martin Stransky <stransky@redhat.com>
|
||||
# Date 1530185851 -7200
|
||||
# Node ID 7dc09bb0f57c3397f68c424b2a4e781e89069517
|
||||
# Parent 15c95df467be553beb39f2e8102c206639e05fde
|
||||
Bug 1444437 - [Wayland] Don't map mozcontainer subsurface until parent surface is commited, r?ashie
|
||||
|
||||
MozReview-Commit-ID: 4qoyGH8VCAU
|
||||
|
||||
diff --git a/widget/gtk/mozcontainer.cpp b/widget/gtk/mozcontainer.cpp
|
||||
--- a/widget/gtk/mozcontainer.cpp
|
||||
+++ b/widget/gtk/mozcontainer.cpp
|
||||
@@ -207,17 +207,17 @@ moz_container_init (MozContainer *contai
|
||||
gtk_widget_set_redraw_on_allocate(GTK_WIDGET(container), FALSE);
|
||||
|
||||
#if defined(MOZ_WAYLAND)
|
||||
{
|
||||
container->subcompositor = nullptr;
|
||||
container->surface = nullptr;
|
||||
container->subsurface = nullptr;
|
||||
container->eglwindow = nullptr;
|
||||
- container->committed = false;
|
||||
+ container->parent_surface_committed = false;
|
||||
|
||||
GdkDisplay *gdk_display = gtk_widget_get_display(GTK_WIDGET(container));
|
||||
if (GDK_IS_WAYLAND_DISPLAY (gdk_display)) {
|
||||
// Available as of GTK 3.8+
|
||||
static auto sGdkWaylandDisplayGetWlDisplay =
|
||||
(wl_display *(*)(GdkDisplay *))
|
||||
dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_display");
|
||||
|
||||
@@ -228,21 +228,22 @@ moz_container_init (MozContainer *contai
|
||||
wl_display_roundtrip(display);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(MOZ_WAYLAND)
|
||||
static void
|
||||
-moz_container_after_paint(GdkFrameClock *clock, MozContainer *container)
|
||||
+moz_container_commited_handler(GdkFrameClock *clock, MozContainer *container)
|
||||
{
|
||||
- container->committed = true;
|
||||
- g_signal_handlers_disconnect_by_func(clock,
|
||||
- reinterpret_cast<gpointer>(moz_container_after_paint), container);
|
||||
+ container->parent_surface_committed = true;
|
||||
+ g_signal_handler_disconnect(clock,
|
||||
+ container->parent_surface_committed_handler);
|
||||
+ container->parent_surface_committed_handler = 0;
|
||||
}
|
||||
|
||||
/* We want to draw to GdkWindow owned by mContainer from Compositor thread but
|
||||
* Gtk+ can be used in main thread only. So we create wayland wl_surface
|
||||
* and attach it as an overlay to GdkWindow.
|
||||
*
|
||||
* see gtk_clutter_embed_ensure_subsurface() at gtk-clutter-embed.c
|
||||
* for reference.
|
||||
@@ -263,37 +264,44 @@ moz_container_map_surface(MozContainer *
|
||||
|
||||
GdkDisplay *display = gtk_widget_get_display(GTK_WIDGET(container));
|
||||
if (GDK_IS_X11_DISPLAY(display))
|
||||
return false;
|
||||
|
||||
if (container->subsurface && container->surface)
|
||||
return true;
|
||||
|
||||
+ if (!container->parent_surface_committed) {
|
||||
+ if (!container->parent_surface_committed_handler) {
|
||||
+ GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(container));
|
||||
+ GdkFrameClock *clock = sGdkWindowGetFrameClock(window);
|
||||
+ container->parent_surface_committed_handler =
|
||||
+ g_signal_connect_after(clock, "after-paint",
|
||||
+ G_CALLBACK(moz_container_commited_handler),
|
||||
+ container);
|
||||
+ }
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
if (!container->surface) {
|
||||
struct wl_compositor *compositor;
|
||||
compositor = sGdkWaylandDisplayGetWlCompositor(display);
|
||||
container->surface = wl_compositor_create_surface(compositor);
|
||||
}
|
||||
|
||||
if (!container->subsurface) {
|
||||
GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(container));
|
||||
wl_surface* gtk_surface = sGdkWaylandWindowGetWlSurface(window);
|
||||
if (!gtk_surface) {
|
||||
// We requested the underlying wl_surface too early when container
|
||||
// is not realized yet. We'll try again before first rendering
|
||||
// to mContainer.
|
||||
return false;
|
||||
}
|
||||
|
||||
- GdkFrameClock *clock = sGdkWindowGetFrameClock(window);
|
||||
- g_signal_connect_after(clock, "after-paint",
|
||||
- G_CALLBACK(moz_container_after_paint),
|
||||
- container);
|
||||
-
|
||||
container->subsurface =
|
||||
wl_subcompositor_get_subsurface (container->subcompositor,
|
||||
container->surface,
|
||||
gtk_surface);
|
||||
gint x, y;
|
||||
gdk_window_get_position(window, &x, &y);
|
||||
wl_subsurface_set_position(container->subsurface, x, y);
|
||||
wl_subsurface_set_desync(container->subsurface);
|
||||
@@ -310,17 +318,29 @@ moz_container_map_surface(MozContainer *
|
||||
}
|
||||
|
||||
static void
|
||||
moz_container_unmap_surface(MozContainer *container)
|
||||
{
|
||||
g_clear_pointer(&container->eglwindow, wl_egl_window_destroy);
|
||||
g_clear_pointer(&container->subsurface, wl_subsurface_destroy);
|
||||
g_clear_pointer(&container->surface, wl_surface_destroy);
|
||||
- container->committed = false;
|
||||
+
|
||||
+ if (container->parent_surface_committed_handler) {
|
||||
+ static auto sGdkWindowGetFrameClock =
|
||||
+ (GdkFrameClock *(*)(GdkWindow *))
|
||||
+ dlsym(RTLD_DEFAULT, "gdk_window_get_frame_clock");
|
||||
+ GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(container));
|
||||
+ GdkFrameClock *clock = sGdkWindowGetFrameClock(window);
|
||||
+
|
||||
+ g_signal_handler_disconnect(clock,
|
||||
+ container->parent_surface_committed_handler);
|
||||
+ container->parent_surface_committed_handler = 0;
|
||||
+ }
|
||||
+ container->parent_surface_committed = false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void
|
||||
moz_container_map (GtkWidget *widget)
|
||||
{
|
||||
MozContainer *container;
|
||||
@@ -582,17 +602,17 @@ moz_container_get_wl_surface(MozContaine
|
||||
if (!container->subsurface || !container->surface) {
|
||||
GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(container));
|
||||
if (!gdk_window_is_visible(window))
|
||||
return nullptr;
|
||||
|
||||
moz_container_map_surface(container);
|
||||
}
|
||||
|
||||
- return container->committed ? container->surface : nullptr;
|
||||
+ return container->surface;
|
||||
}
|
||||
|
||||
struct wl_egl_window *
|
||||
moz_container_get_wl_egl_window(MozContainer *container)
|
||||
{
|
||||
if (!container->eglwindow) {
|
||||
struct wl_surface *wlsurf = moz_container_get_wl_surface(container);
|
||||
if (!wlsurf)
|
||||
diff --git a/widget/gtk/mozcontainer.h b/widget/gtk/mozcontainer.h
|
||||
--- a/widget/gtk/mozcontainer.h
|
||||
+++ b/widget/gtk/mozcontainer.h
|
||||
@@ -68,17 +68,18 @@ struct _MozContainer
|
||||
GtkContainer container;
|
||||
GList *children;
|
||||
|
||||
#ifdef MOZ_WAYLAND
|
||||
struct wl_subcompositor *subcompositor;
|
||||
struct wl_surface *surface;
|
||||
struct wl_subsurface *subsurface;
|
||||
struct wl_egl_window *eglwindow;
|
||||
- gboolean committed;
|
||||
+ gboolean parent_surface_committed;
|
||||
+ gulong parent_surface_committed_handler;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct _MozContainerClass
|
||||
{
|
||||
GtkContainerClass parent_class;
|
||||
};
|
||||
|
||||
|
@ -1,352 +0,0 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Martin Stransky <stransky@redhat.com>
|
||||
# Date 1530270941 -7200
|
||||
# Node ID 338c0093263be6440a33b79a92801bd2b4658f79
|
||||
# Parent 84a6d5a0b551f5da116aab702dd38bb725bc8a08
|
||||
Bug 1467128 - [Wayland] Get VSync from Gtk/Wayland, r?lsalzman
|
||||
|
||||
VSync on Wayland is a bit tricky as we can get only "last VSync" event signal with
|
||||
CLOCK_MONOTONIC timestamp or none (if application is hidden/minimized).
|
||||
|
||||
That means we should draw a next frame at "last Vsync + frame delay" time and also
|
||||
approximate next VSync event when we don't get any.
|
||||
|
||||
MozReview-Commit-ID: FI3Z4nkmDNK
|
||||
|
||||
diff --git a/gfx/thebes/gfxPlatformGtk.cpp b/gfx/thebes/gfxPlatformGtk.cpp
|
||||
--- a/gfx/thebes/gfxPlatformGtk.cpp
|
||||
+++ b/gfx/thebes/gfxPlatformGtk.cpp
|
||||
@@ -46,16 +46,20 @@
|
||||
#include "GLContextGLX.h"
|
||||
#include "GLXLibrary.h"
|
||||
|
||||
/* Undefine the Status from Xlib since it will conflict with system headers on OSX */
|
||||
#if defined(__APPLE__) && defined(Status)
|
||||
#undef Status
|
||||
#endif
|
||||
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+#include <gdk/gdkwayland.h>
|
||||
+#endif
|
||||
+
|
||||
#endif /* MOZ_X11 */
|
||||
|
||||
#include <fontconfig/fontconfig.h>
|
||||
|
||||
#include "nsMathUtils.h"
|
||||
|
||||
#define GDK_PIXMAP_SIZE_MAX 32767
|
||||
|
||||
@@ -89,16 +93,22 @@ gfxPlatformGtk::gfxPlatformGtk()
|
||||
#ifdef MOZ_X11
|
||||
if (gfxPlatform::IsHeadless() && GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
|
||||
mCompositorDisplay = XOpenDisplay(nullptr);
|
||||
MOZ_ASSERT(mCompositorDisplay, "Failed to create compositor display!");
|
||||
} else {
|
||||
mCompositorDisplay = nullptr;
|
||||
}
|
||||
#endif // MOZ_X11
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ // Wayland compositors use g_get_monotonic_time() to get timestamps.
|
||||
+ mWaylandLastVsyncTimestamp = (g_get_monotonic_time() / 1000);
|
||||
+ // Set default display fps to 60
|
||||
+ mWaylandFrameDelay = 1000/60;
|
||||
+#endif
|
||||
}
|
||||
|
||||
gfxPlatformGtk::~gfxPlatformGtk()
|
||||
{
|
||||
#ifdef MOZ_X11
|
||||
if (mCompositorDisplay) {
|
||||
XCloseDisplay(mCompositorDisplay);
|
||||
}
|
||||
@@ -505,26 +515,26 @@ gfxPlatformGtk::CheckVariationFontSuppor
|
||||
// until at least 2.7.1.
|
||||
FT_Int major, minor, patch;
|
||||
FT_Library_Version(GetFTLibrary(), &major, &minor, &patch);
|
||||
return major * 1000000 + minor * 1000 + patch >= 2007001;
|
||||
}
|
||||
|
||||
#ifdef MOZ_X11
|
||||
|
||||
-class GLXVsyncSource final : public VsyncSource
|
||||
+class GtkVsyncSource final : public VsyncSource
|
||||
{
|
||||
public:
|
||||
- GLXVsyncSource()
|
||||
+ GtkVsyncSource()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
mGlobalDisplay = new GLXDisplay();
|
||||
}
|
||||
|
||||
- virtual ~GLXVsyncSource()
|
||||
+ virtual ~GtkVsyncSource()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
}
|
||||
|
||||
virtual Display& GetGlobalDisplay() override
|
||||
{
|
||||
return *mGlobalDisplay;
|
||||
}
|
||||
@@ -536,39 +546,52 @@ public:
|
||||
public:
|
||||
GLXDisplay() : mGLContext(nullptr)
|
||||
, mXDisplay(nullptr)
|
||||
, mSetupLock("GLXVsyncSetupLock")
|
||||
, mVsyncThread("GLXVsyncThread")
|
||||
, mVsyncTask(nullptr)
|
||||
, mVsyncEnabledLock("GLXVsyncEnabledLock")
|
||||
, mVsyncEnabled(false)
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ , mIsWaylandDisplay(false)
|
||||
+#endif
|
||||
{
|
||||
}
|
||||
|
||||
// Sets up the display's GL context on a worker thread.
|
||||
// Required as GLContexts may only be used by the creating thread.
|
||||
// Returns true if setup was a success.
|
||||
bool Setup()
|
||||
{
|
||||
MonitorAutoLock lock(mSetupLock);
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
if (!mVsyncThread.Start())
|
||||
return false;
|
||||
|
||||
RefPtr<Runnable> vsyncSetup =
|
||||
- NewRunnableMethod("GLXVsyncSource::GLXDisplay::SetupGLContext",
|
||||
+ NewRunnableMethod("GtkVsyncSource::GLXDisplay::SetupGLContext",
|
||||
this,
|
||||
&GLXDisplay::SetupGLContext);
|
||||
mVsyncThread.message_loop()->PostTask(vsyncSetup.forget());
|
||||
// Wait until the setup has completed.
|
||||
lock.Wait();
|
||||
return mGLContext != nullptr;
|
||||
}
|
||||
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ bool SetupWayland()
|
||||
+ {
|
||||
+ MonitorAutoLock lock(mSetupLock);
|
||||
+ MOZ_ASSERT(NS_IsMainThread());
|
||||
+ mIsWaylandDisplay = true;
|
||||
+ return mVsyncThread.Start();
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
// Called on the Vsync thread to setup the GL context.
|
||||
void SetupGLContext()
|
||||
{
|
||||
MonitorAutoLock lock(mSetupLock);
|
||||
MOZ_ASSERT(!NS_IsMainThread());
|
||||
MOZ_ASSERT(!mGLContext, "GLContext already setup!");
|
||||
|
||||
// Create video sync timer on a separate Display to prevent locking the
|
||||
@@ -613,29 +636,35 @@ public:
|
||||
}
|
||||
|
||||
lock.NotifyAll();
|
||||
}
|
||||
|
||||
virtual void EnableVsync() override
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
+#if !defined(MOZ_WAYLAND)
|
||||
MOZ_ASSERT(mGLContext, "GLContext not setup!");
|
||||
+#endif
|
||||
|
||||
MonitorAutoLock lock(mVsyncEnabledLock);
|
||||
if (mVsyncEnabled) {
|
||||
return;
|
||||
}
|
||||
mVsyncEnabled = true;
|
||||
|
||||
// If the task has not nulled itself out, it hasn't yet realized
|
||||
// that vsync was disabled earlier, so continue its execution.
|
||||
if (!mVsyncTask) {
|
||||
mVsyncTask = NewRunnableMethod(
|
||||
- "GLXVsyncSource::GLXDisplay::RunVsync", this, &GLXDisplay::RunVsync);
|
||||
+ "GtkVsyncSource::GLXDisplay::RunVsync", this,
|
||||
+#if defined(MOZ_WAYLAND)
|
||||
+ mIsWaylandDisplay ? &GLXDisplay::RunVsyncWayland :
|
||||
+#endif
|
||||
+ &GLXDisplay::RunVsync);
|
||||
RefPtr<Runnable> addrefedTask = mVsyncTask;
|
||||
mVsyncThread.message_loop()->PostTask(addrefedTask.forget());
|
||||
}
|
||||
}
|
||||
|
||||
virtual void DisableVsync() override
|
||||
{
|
||||
MonitorAutoLock lock(mVsyncEnabledLock);
|
||||
@@ -650,17 +679,17 @@ public:
|
||||
|
||||
virtual void Shutdown() override
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
DisableVsync();
|
||||
|
||||
// Cleanup thread-specific resources before shutting down.
|
||||
RefPtr<Runnable> shutdownTask = NewRunnableMethod(
|
||||
- "GLXVsyncSource::GLXDisplay::Cleanup", this, &GLXDisplay::Cleanup);
|
||||
+ "GtkVsyncSource::GLXDisplay::Cleanup", this, &GLXDisplay::Cleanup);
|
||||
mVsyncThread.message_loop()->PostTask(shutdownTask.forget());
|
||||
|
||||
// Stop, waiting for the cleanup task to finish execution.
|
||||
mVsyncThread.Stop();
|
||||
}
|
||||
|
||||
private:
|
||||
virtual ~GLXDisplay()
|
||||
@@ -709,50 +738,96 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
lastVsync = TimeStamp::Now();
|
||||
NotifyVsync(lastVsync);
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ /* VSync on Wayland is tricky as we can get only "last VSync" event signal.
|
||||
+ * That means we should draw next frame at "last Vsync + frame delay" time.
|
||||
+ */
|
||||
+ void RunVsyncWayland()
|
||||
+ {
|
||||
+ MOZ_ASSERT(!NS_IsMainThread());
|
||||
+
|
||||
+ for (;;) {
|
||||
+ {
|
||||
+ MonitorAutoLock lock(mVsyncEnabledLock);
|
||||
+ if (!mVsyncEnabled) {
|
||||
+ mVsyncTask = nullptr;
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ gint64 lastVsync = gfxPlatformGtk::GetPlatform()->GetWaylandLastVsync();
|
||||
+ gint64 currTime = (g_get_monotonic_time() / 1000);
|
||||
+
|
||||
+ gint64 remaining = gfxPlatformGtk::GetPlatform()->GetWaylandFrameDelay() -
|
||||
+ (currTime - lastVsync);
|
||||
+ if (remaining > 0) {
|
||||
+ PlatformThread::Sleep(remaining);
|
||||
+ } else {
|
||||
+ // Time from last HW Vsync is longer than our frame delay,
|
||||
+ // use our approximation then.
|
||||
+ gfxPlatformGtk::GetPlatform()->SetWaylandLastVsync(currTime);
|
||||
+ }
|
||||
+
|
||||
+ NotifyVsync(TimeStamp::Now());
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
void Cleanup() {
|
||||
MOZ_ASSERT(!NS_IsMainThread());
|
||||
|
||||
mGLContext = nullptr;
|
||||
- XCloseDisplay(mXDisplay);
|
||||
+ if (mXDisplay)
|
||||
+ XCloseDisplay(mXDisplay);
|
||||
}
|
||||
|
||||
// Owned by the vsync thread.
|
||||
RefPtr<gl::GLContextGLX> mGLContext;
|
||||
_XDisplay* mXDisplay;
|
||||
Monitor mSetupLock;
|
||||
base::Thread mVsyncThread;
|
||||
RefPtr<Runnable> mVsyncTask;
|
||||
Monitor mVsyncEnabledLock;
|
||||
bool mVsyncEnabled;
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ bool mIsWaylandDisplay;
|
||||
+#endif
|
||||
};
|
||||
private:
|
||||
// We need a refcounted VsyncSource::Display to use chromium IPC runnables.
|
||||
RefPtr<GLXDisplay> mGlobalDisplay;
|
||||
};
|
||||
|
||||
already_AddRefed<gfx::VsyncSource>
|
||||
gfxPlatformGtk::CreateHardwareVsyncSource()
|
||||
{
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ if (GDK_IS_WAYLAND_DISPLAY(gdk_display_get_default())) {
|
||||
+ RefPtr<VsyncSource> vsyncSource = new GtkVsyncSource();
|
||||
+ VsyncSource::Display& display = vsyncSource->GetGlobalDisplay();
|
||||
+ static_cast<GtkVsyncSource::GLXDisplay&>(display).SetupWayland();
|
||||
+ return vsyncSource.forget();
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
// Only use GLX vsync when the OpenGL compositor is being used.
|
||||
// The extra cost of initializing a GLX context while blocking the main
|
||||
// thread is not worth it when using basic composition.
|
||||
- // Also don't use it on non-X11 displays.
|
||||
if (gfxConfig::IsEnabled(Feature::HW_COMPOSITING)) {
|
||||
- if (GDK_IS_X11_DISPLAY(gdk_display_get_default()) &&
|
||||
- gl::sGLXLibrary.SupportsVideoSync()) {
|
||||
- RefPtr<VsyncSource> vsyncSource = new GLXVsyncSource();
|
||||
+ if (gl::sGLXLibrary.SupportsVideoSync()) {
|
||||
+ RefPtr<VsyncSource> vsyncSource = new GtkVsyncSource();
|
||||
VsyncSource::Display& display = vsyncSource->GetGlobalDisplay();
|
||||
- if (!static_cast<GLXVsyncSource::GLXDisplay&>(display).Setup()) {
|
||||
+ if (!static_cast<GtkVsyncSource::GLXDisplay&>(display).Setup()) {
|
||||
NS_WARNING("Failed to setup GLContext, falling back to software vsync.");
|
||||
return gfxPlatform::CreateHardwareVsyncSource();
|
||||
}
|
||||
return vsyncSource.forget();
|
||||
}
|
||||
NS_WARNING("SGI_video_sync unsupported. Falling back to software vsync.");
|
||||
}
|
||||
return gfxPlatform::CreateHardwareVsyncSource();
|
||||
diff --git a/gfx/thebes/gfxPlatformGtk.h b/gfx/thebes/gfxPlatformGtk.h
|
||||
--- a/gfx/thebes/gfxPlatformGtk.h
|
||||
+++ b/gfx/thebes/gfxPlatformGtk.h
|
||||
@@ -102,23 +102,42 @@ public:
|
||||
#endif
|
||||
|
||||
#ifdef MOZ_X11
|
||||
Display* GetCompositorDisplay() {
|
||||
return mCompositorDisplay;
|
||||
}
|
||||
#endif // MOZ_X11
|
||||
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ void SetWaylandLastVsync(uint32_t aVsyncTimestamp) {
|
||||
+ mWaylandLastVsyncTimestamp = aVsyncTimestamp;
|
||||
+ }
|
||||
+ int64_t GetWaylandLastVsync() {
|
||||
+ return mWaylandLastVsyncTimestamp;
|
||||
+ }
|
||||
+ void SetWaylandFrameDelay(int64_t aFrameDelay) {
|
||||
+ mWaylandFrameDelay = aFrameDelay;
|
||||
+ }
|
||||
+ int64_t GetWaylandFrameDelay() {
|
||||
+ return mWaylandFrameDelay;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
protected:
|
||||
bool CheckVariationFontSupport() override;
|
||||
|
||||
int8_t mMaxGenericSubstitutions;
|
||||
|
||||
private:
|
||||
virtual void GetPlatformCMSOutputProfile(void *&mem,
|
||||
size_t &size) override;
|
||||
|
||||
#ifdef MOZ_X11
|
||||
Display* mCompositorDisplay;
|
||||
#endif
|
||||
+#ifdef MOZ_WAYLAND
|
||||
+ int64_t mWaylandLastVsyncTimestamp;
|
||||
+ int64_t mWaylandFrameDelay;
|
||||
+#endif
|
||||
};
|
||||
|
||||
#endif /* GFX_PLATFORM_GTK_H */
|
@ -1,519 +0,0 @@
|
||||
Wayland patches from Firefox 63.
|
||||
|
||||
diff -up firefox-62.0.3/widget/gtk/mozcontainer.cpp.old firefox-62.0.3/widget/gtk/mozcontainer.cpp
|
||||
--- firefox-62.0.3/widget/gtk/mozcontainer.cpp.old 2018-10-08 11:52:33.442449788 +0200
|
||||
+++ firefox-62.0.3/widget/gtk/mozcontainer.cpp 2018-08-21 14:22:12.668885853 +0200
|
||||
@@ -605,6 +605,15 @@ moz_container_get_wl_surface(MozContaine
|
||||
return nullptr;
|
||||
|
||||
moz_container_map_surface(container);
|
||||
+ // Set the scale factor for the buffer right after we create it.
|
||||
+ if (container->surface) {
|
||||
+ static auto sGdkWindowGetScaleFactorPtr = (gint (*)(GdkWindow*))
|
||||
+ dlsym(RTLD_DEFAULT, "gdk_window_get_scale_factor");
|
||||
+ if (sGdkWindowGetScaleFactorPtr && window) {
|
||||
+ gint scaleFactor = (*sGdkWindowGetScaleFactorPtr)(window);
|
||||
+ wl_surface_set_buffer_scale(container->surface, scaleFactor);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
return container->surface;
|
||||
diff -up firefox-62.0.3/widget/gtk/WindowSurfaceWayland.cpp.old firefox-62.0.3/widget/gtk/WindowSurfaceWayland.cpp
|
||||
--- firefox-62.0.3/widget/gtk/WindowSurfaceWayland.cpp.old 2018-10-08 11:52:47.907392869 +0200
|
||||
+++ firefox-62.0.3/widget/gtk/WindowSurfaceWayland.cpp 2018-09-06 11:01:18.801964790 +0200
|
||||
@@ -151,8 +151,9 @@ static nsWaylandDisplay* WaylandDisplayG
|
||||
static void WaylandDisplayRelease(wl_display *aDisplay);
|
||||
static void WaylandDisplayLoop(wl_display *aDisplay);
|
||||
|
||||
-// TODO: is the 60pfs loop correct?
|
||||
-#define EVENT_LOOP_DELAY (1000/60)
|
||||
+// TODO: Bug 1467125 - We need to integrate wl_display_dispatch_queue_pending() with
|
||||
+// compositor event loop.
|
||||
+#define EVENT_LOOP_DELAY (1000/240)
|
||||
|
||||
// Get WaylandDisplay for given wl_display and actual calling thread.
|
||||
static nsWaylandDisplay*
|
||||
@@ -523,7 +524,7 @@ WindowBackBuffer::Detach()
|
||||
}
|
||||
|
||||
bool
|
||||
-WindowBackBuffer::SetImageDataFromBackBuffer(
|
||||
+WindowBackBuffer::SetImageDataFromBuffer(
|
||||
class WindowBackBuffer* aSourceBuffer)
|
||||
{
|
||||
if (!IsMatchingSize(aSourceBuffer)) {
|
||||
@@ -550,6 +551,8 @@ frame_callback_handler(void *data, struc
|
||||
{
|
||||
auto surface = reinterpret_cast<WindowSurfaceWayland*>(data);
|
||||
surface->FrameCallbackHandler();
|
||||
+
|
||||
+ gfxPlatformGtk::GetPlatform()->SetWaylandLastVsync(time);
|
||||
}
|
||||
|
||||
static const struct wl_callback_listener frame_listener = {
|
||||
@@ -559,27 +562,40 @@ static const struct wl_callback_listener
|
||||
WindowSurfaceWayland::WindowSurfaceWayland(nsWindow *aWindow)
|
||||
: mWindow(aWindow)
|
||||
, mWaylandDisplay(WaylandDisplayGet(aWindow->GetWaylandDisplay()))
|
||||
- , mFrontBuffer(nullptr)
|
||||
- , mBackBuffer(nullptr)
|
||||
+ , mWaylandBuffer(nullptr)
|
||||
+ , mBackupBuffer(nullptr)
|
||||
, mFrameCallback(nullptr)
|
||||
- , mFrameCallbackSurface(nullptr)
|
||||
+ , mLastCommittedSurface(nullptr)
|
||||
, mDisplayThreadMessageLoop(MessageLoop::current())
|
||||
- , mDirectWlBufferDraw(true)
|
||||
- , mDelayedCommit(false)
|
||||
- , mFullScreenDamage(false)
|
||||
+ , mDelayedCommitHandle(nullptr)
|
||||
+ , mDrawToWaylandBufferDirectly(true)
|
||||
+ , mPendingCommit(false)
|
||||
+ , mWaylandBufferFullScreenDamage(false)
|
||||
, mIsMainThread(NS_IsMainThread())
|
||||
+ , mNeedScaleFactorUpdate(true)
|
||||
{
|
||||
}
|
||||
|
||||
WindowSurfaceWayland::~WindowSurfaceWayland()
|
||||
{
|
||||
- delete mFrontBuffer;
|
||||
- delete mBackBuffer;
|
||||
+ if (mPendingCommit) {
|
||||
+ 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;
|
||||
+ }
|
||||
|
||||
if (mFrameCallback) {
|
||||
wl_callback_destroy(mFrameCallback);
|
||||
}
|
||||
|
||||
+ delete mWaylandBuffer;
|
||||
+ delete mBackupBuffer;
|
||||
+
|
||||
if (!mIsMainThread) {
|
||||
// We can be destroyed from main thread even though we was created/used
|
||||
// in compositor thread. We have to unref/delete WaylandDisplay in compositor
|
||||
@@ -593,73 +609,64 @@ WindowSurfaceWayland::~WindowSurfaceWayl
|
||||
}
|
||||
}
|
||||
|
||||
-void
|
||||
-WindowSurfaceWayland::UpdateScaleFactor()
|
||||
-{
|
||||
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
|
||||
- if (waylandSurface) {
|
||||
- wl_surface_set_buffer_scale(waylandSurface, mWindow->GdkScaleFactor());
|
||||
- }
|
||||
-}
|
||||
-
|
||||
WindowBackBuffer*
|
||||
-WindowSurfaceWayland::GetFrontBufferToDraw(int aWidth, int aHeight)
|
||||
+WindowSurfaceWayland::GetWaylandBufferToDraw(int aWidth, int aHeight)
|
||||
{
|
||||
- if (!mFrontBuffer) {
|
||||
- mFrontBuffer = new WindowBackBuffer(mWaylandDisplay, aWidth, aHeight);
|
||||
- mBackBuffer = new WindowBackBuffer(mWaylandDisplay, aWidth, aHeight);
|
||||
- return mFrontBuffer;
|
||||
+ if (!mWaylandBuffer) {
|
||||
+ mWaylandBuffer = new WindowBackBuffer(mWaylandDisplay, aWidth, aHeight);
|
||||
+ mBackupBuffer = new WindowBackBuffer(mWaylandDisplay, aWidth, aHeight);
|
||||
+ return mWaylandBuffer;
|
||||
}
|
||||
|
||||
- if (!mFrontBuffer->IsAttached()) {
|
||||
- if (!mFrontBuffer->IsMatchingSize(aWidth, aHeight)) {
|
||||
- mFrontBuffer->Resize(aWidth, aHeight);
|
||||
+ if (!mWaylandBuffer->IsAttached()) {
|
||||
+ if (!mWaylandBuffer->IsMatchingSize(aWidth, aHeight)) {
|
||||
+ mWaylandBuffer->Resize(aWidth, aHeight);
|
||||
// There's a chance that scale factor has been changed
|
||||
// when buffer size changed
|
||||
- UpdateScaleFactor();
|
||||
+ mNeedScaleFactorUpdate = true;
|
||||
}
|
||||
- return mFrontBuffer;
|
||||
+ return mWaylandBuffer;
|
||||
}
|
||||
|
||||
// Front buffer is used by compositor, draw to back buffer
|
||||
- if (mBackBuffer->IsAttached()) {
|
||||
+ if (mBackupBuffer->IsAttached()) {
|
||||
NS_WARNING("No drawing buffer available");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
- MOZ_ASSERT(!mDelayedCommit,
|
||||
+ MOZ_ASSERT(!mPendingCommit,
|
||||
"Uncommitted buffer switch, screen artifacts ahead.");
|
||||
|
||||
- WindowBackBuffer *tmp = mFrontBuffer;
|
||||
- mFrontBuffer = mBackBuffer;
|
||||
- mBackBuffer = tmp;
|
||||
+ WindowBackBuffer *tmp = mWaylandBuffer;
|
||||
+ mWaylandBuffer = mBackupBuffer;
|
||||
+ mBackupBuffer = tmp;
|
||||
|
||||
- if (mBackBuffer->IsMatchingSize(aWidth, aHeight)) {
|
||||
+ if (mBackupBuffer->IsMatchingSize(aWidth, aHeight)) {
|
||||
// Former front buffer has the same size as a requested one.
|
||||
// Gecko may expect a content already drawn on screen so copy
|
||||
// existing data to the new buffer.
|
||||
- mFrontBuffer->SetImageDataFromBackBuffer(mBackBuffer);
|
||||
+ mWaylandBuffer->SetImageDataFromBuffer(mBackupBuffer);
|
||||
// When buffer switches we need to damage whole screen
|
||||
// (https://bugzilla.redhat.com/show_bug.cgi?id=1418260)
|
||||
- mFullScreenDamage = true;
|
||||
+ mWaylandBufferFullScreenDamage = true;
|
||||
} else {
|
||||
// Former buffer has different size from the new request. Only resize
|
||||
// the new buffer and leave gecko to render new whole content.
|
||||
- mFrontBuffer->Resize(aWidth, aHeight);
|
||||
+ mWaylandBuffer->Resize(aWidth, aHeight);
|
||||
}
|
||||
|
||||
- return mFrontBuffer;
|
||||
+ return mWaylandBuffer;
|
||||
}
|
||||
|
||||
already_AddRefed<gfx::DrawTarget>
|
||||
-WindowSurfaceWayland::LockFrontBuffer(int aWidth, int aHeight)
|
||||
+WindowSurfaceWayland::LockWaylandBuffer(int aWidth, int aHeight)
|
||||
{
|
||||
- WindowBackBuffer* buffer = GetFrontBufferToDraw(aWidth, aHeight);
|
||||
+ WindowBackBuffer* buffer = GetWaylandBufferToDraw(aWidth, aHeight);
|
||||
if (buffer) {
|
||||
return buffer->Lock();
|
||||
}
|
||||
|
||||
- NS_WARNING("WindowSurfaceWayland::LockFrontBuffer(): No buffer available");
|
||||
+ NS_WARNING("WindowSurfaceWayland::LockWaylandBuffer(): No buffer available");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -687,8 +694,8 @@ WindowSurfaceWayland::LockImageSurface(c
|
||||
A) Lock() is called to whole surface. In that case we don't need
|
||||
to clip/buffer the drawing and we can return wl_buffer directly
|
||||
for drawing.
|
||||
- - mFrontBuffer is available - that's an ideal situation.
|
||||
- - mFrontBuffer is locked by compositor - flip buffers and draw.
|
||||
+ - mWaylandBuffer is available - that's an ideal situation.
|
||||
+ - mWaylandBuffer is locked by compositor - flip buffers and draw.
|
||||
- if we can't flip buffers - go B)
|
||||
|
||||
B) Lock() is requested for part(s) of screen. We need to provide temporary
|
||||
@@ -704,30 +711,30 @@ WindowSurfaceWayland::Lock(const LayoutD
|
||||
gfx::IntSize lockSize(bounds.XMost(), bounds.YMost());
|
||||
|
||||
// Are we asked for entire nsWindow to draw?
|
||||
- mDirectWlBufferDraw = (aRegion.GetNumRects() == 1 &&
|
||||
- bounds.x == 0 && bounds.y == 0 &&
|
||||
- lockSize.width == screenRect.width &&
|
||||
- lockSize.height == screenRect.height);
|
||||
-
|
||||
- if (mDirectWlBufferDraw) {
|
||||
- RefPtr<gfx::DrawTarget> dt = LockFrontBuffer(screenRect.width,
|
||||
- screenRect.height);
|
||||
+ mDrawToWaylandBufferDirectly = (aRegion.GetNumRects() == 1 &&
|
||||
+ bounds.x == 0 && bounds.y == 0 &&
|
||||
+ lockSize.width == screenRect.width &&
|
||||
+ lockSize.height == screenRect.height);
|
||||
+
|
||||
+ if (mDrawToWaylandBufferDirectly) {
|
||||
+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(screenRect.width,
|
||||
+ screenRect.height);
|
||||
if (dt) {
|
||||
return dt.forget();
|
||||
}
|
||||
|
||||
// We don't have any front buffer available. Try indirect drawing
|
||||
// to mImageSurface which is mirrored to front buffer at commit.
|
||||
- mDirectWlBufferDraw = false;
|
||||
+ mDrawToWaylandBufferDirectly = false;
|
||||
}
|
||||
|
||||
return LockImageSurface(lockSize);
|
||||
}
|
||||
|
||||
bool
|
||||
-WindowSurfaceWayland::CommitImageSurface(const LayoutDeviceIntRegion& aRegion)
|
||||
+WindowSurfaceWayland::CommitImageSurfaceToWaylandBuffer(const LayoutDeviceIntRegion& aRegion)
|
||||
{
|
||||
- MOZ_ASSERT(!mDirectWlBufferDraw);
|
||||
+ MOZ_ASSERT(!mDrawToWaylandBufferDirectly);
|
||||
|
||||
LayoutDeviceIntRect screenRect = mWindow->GetBounds();
|
||||
gfx::IntRect bounds = aRegion.GetBounds().ToUnknownRect();
|
||||
@@ -737,8 +744,8 @@ WindowSurfaceWayland::CommitImageSurface
|
||||
return false;
|
||||
}
|
||||
|
||||
- RefPtr<gfx::DrawTarget> dt = LockFrontBuffer(screenRect.width,
|
||||
- screenRect.height);
|
||||
+ RefPtr<gfx::DrawTarget> dt = LockWaylandBuffer(screenRect.width,
|
||||
+ screenRect.height);
|
||||
RefPtr<gfx::SourceSurface> surf =
|
||||
gfx::Factory::CreateSourceSurfaceForCairoSurface(mImageSurface->CairoSurface(),
|
||||
mImageSurface->GetSize(),
|
||||
@@ -766,92 +773,145 @@ WindowSurfaceWayland::CommitImageSurface
|
||||
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::Commit(const LayoutDeviceIntRegion& aInvalidRegion)
|
||||
+WindowSurfaceWayland::CommitWaylandBuffer()
|
||||
{
|
||||
- MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
|
||||
+ MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
|
||||
|
||||
wl_surface* waylandSurface = mWindow->GetWaylandSurface();
|
||||
if (!waylandSurface) {
|
||||
- // Target window is already destroyed - don't bother to render there.
|
||||
- NS_WARNING("WindowSurfaceWayland::Commit(): parent wl_surface is already hidden/deleted.");
|
||||
+ // Target window is not created yet - delay the commit. This can happen only
|
||||
+ // when the window is newly created and there's no active
|
||||
+ // frame callback pending.
|
||||
+ 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;
|
||||
+
|
||||
+ MessageLoop::current()->PostDelayedTask(
|
||||
+ NewRunnableFunction("WaylandBackBufferCommit",
|
||||
+ &WaylandBufferDelayCommitHandler,
|
||||
+ mDelayedCommitHandle),
|
||||
+ EVENT_LOOP_DELAY);
|
||||
+ }
|
||||
return;
|
||||
}
|
||||
wl_proxy_set_queue((struct wl_proxy *)waylandSurface,
|
||||
mWaylandDisplay->GetEventQueue());
|
||||
|
||||
- if (!mDirectWlBufferDraw) {
|
||||
- // We have new content at mImageSurface - copy data to mFrontBuffer first.
|
||||
- CommitImageSurface(aInvalidRegion);
|
||||
+ // We have an active frame callback request so handle it.
|
||||
+ if (mFrameCallback) {
|
||||
+ if (waylandSurface == mLastCommittedSurface) {
|
||||
+ // We have an active frame callback pending from our recent surface.
|
||||
+ // It means we should defer the commit to FrameCallbackHandler().
|
||||
+ 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.
|
||||
+ wl_callback_destroy(mFrameCallback);
|
||||
+ mFrameCallback = nullptr;
|
||||
+ mLastCommittedSurface = nullptr;
|
||||
}
|
||||
|
||||
- if (mFullScreenDamage) {
|
||||
+ if (mWaylandBufferFullScreenDamage) {
|
||||
LayoutDeviceIntRect rect = mWindow->GetBounds();
|
||||
wl_surface_damage(waylandSurface, 0, 0, rect.width, rect.height);
|
||||
- mFullScreenDamage = false;
|
||||
+ mWaylandBufferFullScreenDamage = false;
|
||||
} else {
|
||||
- for (auto iter = aInvalidRegion.RectIter(); !iter.Done(); iter.Next()) {
|
||||
+ gint scaleFactor = mWindow->GdkScaleFactor();
|
||||
+ for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done(); iter.Next()) {
|
||||
const mozilla::LayoutDeviceIntRect &r = iter.Get();
|
||||
- wl_surface_damage(waylandSurface, r.x, r.y, r.width, r.height);
|
||||
+ // We need to remove the scale factor because the wl_surface_damage
|
||||
+ // also multiplies by current scale factor.
|
||||
+ wl_surface_damage(waylandSurface, r.x/scaleFactor, r.y/scaleFactor,
|
||||
+ r.width/scaleFactor, r.height/scaleFactor);
|
||||
}
|
||||
}
|
||||
|
||||
- // Frame callback is always connected to actual wl_surface. When the surface
|
||||
- // is unmapped/deleted the frame callback is never called. Unfortunatelly
|
||||
- // we don't know if the frame callback is not going to be called.
|
||||
- // But our mozcontainer code deletes wl_surface when the GdkWindow is hidden
|
||||
- // creates a new one when is visible.
|
||||
- if (mFrameCallback && mFrameCallbackSurface == waylandSurface) {
|
||||
- // Do nothing here - we have a valid wl_surface and the buffer will be
|
||||
- // commited to compositor in next frame callback event.
|
||||
- mDelayedCommit = true;
|
||||
- return;
|
||||
- } else {
|
||||
- if (mFrameCallback) {
|
||||
- // Delete frame callback connected to obsoleted wl_surface.
|
||||
- wl_callback_destroy(mFrameCallback);
|
||||
- }
|
||||
+ // Clear all back buffer damage as we're committing
|
||||
+ // all requested regions.
|
||||
+ mWaylandBufferDamage.SetEmpty();
|
||||
+
|
||||
+ mFrameCallback = wl_surface_frame(waylandSurface);
|
||||
+ wl_callback_add_listener(mFrameCallback, &frame_listener, this);
|
||||
|
||||
- mFrameCallback = wl_surface_frame(waylandSurface);
|
||||
- wl_callback_add_listener(mFrameCallback, &frame_listener, this);
|
||||
- mFrameCallbackSurface = waylandSurface;
|
||||
-
|
||||
- // There's no pending frame callback so we can draw immediately
|
||||
- // and create frame callback for possible subsequent drawing.
|
||||
- mFrontBuffer->Attach(waylandSurface);
|
||||
- mDelayedCommit = false;
|
||||
+ if (mNeedScaleFactorUpdate || mLastCommittedSurface != waylandSurface) {
|
||||
+ wl_surface_set_buffer_scale(waylandSurface, mWindow->GdkScaleFactor());
|
||||
+ mNeedScaleFactorUpdate = false;
|
||||
}
|
||||
+
|
||||
+ mWaylandBuffer->Attach(waylandSurface);
|
||||
+ mLastCommittedSurface = waylandSurface;
|
||||
+
|
||||
+ // There's no pending commit, all changes are sent to compositor.
|
||||
+ mPendingCommit = false;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+WindowSurfaceWayland::Commit(const LayoutDeviceIntRegion& aInvalidRegion)
|
||||
+{
|
||||
+ MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
|
||||
+
|
||||
+ // We have new content at mImageSurface - copy data to mWaylandBuffer first.
|
||||
+ if (!mDrawToWaylandBufferDirectly) {
|
||||
+ CommitImageSurfaceToWaylandBuffer(aInvalidRegion);
|
||||
+ }
|
||||
+
|
||||
+ // If we're not at fullscreen damage add drawing area from aInvalidRegion
|
||||
+ if (!mWaylandBufferFullScreenDamage) {
|
||||
+ mWaylandBufferDamage.OrWith(aInvalidRegion);
|
||||
+ }
|
||||
+
|
||||
+ // We're ready to commit.
|
||||
+ mPendingCommit = true;
|
||||
+ CommitWaylandBuffer();
|
||||
}
|
||||
|
||||
void
|
||||
WindowSurfaceWayland::FrameCallbackHandler()
|
||||
{
|
||||
MOZ_ASSERT(mIsMainThread == NS_IsMainThread());
|
||||
+ MOZ_ASSERT(mFrameCallback != nullptr,
|
||||
+ "FrameCallbackHandler() called without valid frame callback!");
|
||||
+ MOZ_ASSERT(mLastCommittedSurface != nullptr,
|
||||
+ "FrameCallbackHandler() called without valid wl_surface!");
|
||||
|
||||
- if (mFrameCallback) {
|
||||
- wl_callback_destroy(mFrameCallback);
|
||||
- mFrameCallback = nullptr;
|
||||
- mFrameCallbackSurface = nullptr;
|
||||
+ wl_callback_destroy(mFrameCallback);
|
||||
+ mFrameCallback = nullptr;
|
||||
+
|
||||
+ if (mPendingCommit) {
|
||||
+ CommitWaylandBuffer();
|
||||
}
|
||||
+}
|
||||
|
||||
- if (mDelayedCommit) {
|
||||
- wl_surface* waylandSurface = mWindow->GetWaylandSurface();
|
||||
- if (!waylandSurface) {
|
||||
- // Target window is already destroyed - don't bother to render there.
|
||||
- NS_WARNING("WindowSurfaceWayland::FrameCallbackHandler(): parent wl_surface is already hidden/deleted.");
|
||||
- return;
|
||||
- }
|
||||
- wl_proxy_set_queue((struct wl_proxy *)waylandSurface,
|
||||
- mWaylandDisplay->GetEventQueue());
|
||||
+void
|
||||
+WindowSurfaceWayland::DelayedCommitHandler()
|
||||
+{
|
||||
+ MOZ_ASSERT(mDelayedCommitHandle != nullptr, "Missing mDelayedCommitHandle!");
|
||||
|
||||
- // Send pending surface to compositor and register frame callback
|
||||
- // for possible subsequent drawing.
|
||||
- mFrameCallback = wl_surface_frame(waylandSurface);
|
||||
- wl_callback_add_listener(mFrameCallback, &frame_listener, this);
|
||||
- mFrameCallbackSurface = waylandSurface;
|
||||
+ *mDelayedCommitHandle = nullptr;
|
||||
+ free(mDelayedCommitHandle);
|
||||
+ mDelayedCommitHandle = nullptr;
|
||||
|
||||
- mFrontBuffer->Attach(waylandSurface);
|
||||
- mDelayedCommit = false;
|
||||
+ if (mPendingCommit) {
|
||||
+ CommitWaylandBuffer();
|
||||
}
|
||||
}
|
||||
|
||||
diff -up firefox-62.0.3/widget/gtk/WindowSurfaceWayland.h.old firefox-62.0.3/widget/gtk/WindowSurfaceWayland.h
|
||||
--- firefox-62.0.3/widget/gtk/WindowSurfaceWayland.h.old 2018-10-08 11:52:52.154376159 +0200
|
||||
+++ firefox-62.0.3/widget/gtk/WindowSurfaceWayland.h 2018-09-06 11:01:18.802964787 +0200
|
||||
@@ -74,7 +74,7 @@ public:
|
||||
bool IsAttached() { return mAttached; }
|
||||
|
||||
bool Resize(int aWidth, int aHeight);
|
||||
- bool SetImageDataFromBackBuffer(class WindowBackBuffer* aSourceBuffer);
|
||||
+ bool SetImageDataFromBuffer(class WindowBackBuffer* aSourceBuffer);
|
||||
|
||||
bool IsMatchingSize(int aWidth, int aHeight)
|
||||
{
|
||||
@@ -111,28 +111,32 @@ public:
|
||||
already_AddRefed<gfx::DrawTarget> Lock(const LayoutDeviceIntRegion& aRegion) override;
|
||||
void Commit(const LayoutDeviceIntRegion& aInvalidRegion) final;
|
||||
void FrameCallbackHandler();
|
||||
+ void DelayedCommitHandler();
|
||||
|
||||
private:
|
||||
- WindowBackBuffer* GetFrontBufferToDraw(int aWidth, int aHeight);
|
||||
- void UpdateScaleFactor();
|
||||
+ WindowBackBuffer* GetWaylandBufferToDraw(int aWidth, int aHeight);
|
||||
|
||||
- already_AddRefed<gfx::DrawTarget> LockFrontBuffer(int aWidth, int aHeight);
|
||||
+ already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(int aWidth, int aHeight);
|
||||
already_AddRefed<gfx::DrawTarget> LockImageSurface(const gfx::IntSize& aLockSize);
|
||||
- bool CommitImageSurface(const LayoutDeviceIntRegion& aRegion);
|
||||
+ bool CommitImageSurfaceToWaylandBuffer(const LayoutDeviceIntRegion& aRegion);
|
||||
+ void CommitWaylandBuffer();
|
||||
|
||||
// TODO: Do we need to hold a reference to nsWindow object?
|
||||
nsWindow* mWindow;
|
||||
nsWaylandDisplay* mWaylandDisplay;
|
||||
- WindowBackBuffer* mFrontBuffer;
|
||||
- WindowBackBuffer* mBackBuffer;
|
||||
+ WindowBackBuffer* mWaylandBuffer;
|
||||
+ LayoutDeviceIntRegion mWaylandBufferDamage;
|
||||
+ WindowBackBuffer* mBackupBuffer;
|
||||
RefPtr<gfxImageSurface> mImageSurface;
|
||||
wl_callback* mFrameCallback;
|
||||
- wl_surface* mFrameCallbackSurface;
|
||||
+ wl_surface* mLastCommittedSurface;
|
||||
MessageLoop* mDisplayThreadMessageLoop;
|
||||
- bool mDirectWlBufferDraw;
|
||||
- bool mDelayedCommit;
|
||||
- bool mFullScreenDamage;
|
||||
+ WindowSurfaceWayland** mDelayedCommitHandle;
|
||||
+ bool mDrawToWaylandBufferDirectly;
|
||||
+ bool mPendingCommit;
|
||||
+ bool mWaylandBufferFullScreenDamage;
|
||||
bool mIsMainThread;
|
||||
+ bool mNeedScaleFactorUpdate;
|
||||
};
|
||||
|
||||
} // namespace widget
|
@ -1,27 +0,0 @@
|
||||
diff --git a/toolkit/system/gnome/nsGIOService.cpp b/toolkit/system/gnome/nsGIOService.cpp
|
||||
--- a/toolkit/system/gnome/nsGIOService.cpp
|
||||
+++ b/toolkit/system/gnome/nsGIOService.cpp
|
||||
@@ -521,16 +521,22 @@ nsGIOService::GetAppForMimeType(const ns
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
char *content_type =
|
||||
g_content_type_from_mime_type(PromiseFlatCString(aMimeType).get());
|
||||
if (!content_type)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
+ // GIO returns "unknown" appinfo for the application/octet-stream, which is
|
||||
+ // useless. It's better to fallback to create appinfo from file extension later.
|
||||
+ if (g_content_type_is_unknown(content_type)) {
|
||||
+ return NS_ERROR_NOT_AVAILABLE;
|
||||
+ }
|
||||
+
|
||||
GAppInfo *app_info = g_app_info_get_default_for_type(content_type, false);
|
||||
if (app_info) {
|
||||
nsGIOMimeApp *mozApp = new nsGIOMimeApp(app_info);
|
||||
NS_ENSURE_TRUE(mozApp, NS_ERROR_OUT_OF_MEMORY);
|
||||
NS_ADDREF(*aApp = mozApp);
|
||||
} else {
|
||||
g_free(content_type);
|
||||
return NS_ERROR_FAILURE;
|
||||
|
@ -1,80 +0,0 @@
|
||||
diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp
|
||||
--- a/uriloader/exthandler/nsExternalHelperAppService.cpp
|
||||
+++ b/uriloader/exthandler/nsExternalHelperAppService.cpp
|
||||
@@ -2590,26 +2590,21 @@ NS_IMETHODIMP nsExternalHelperAppService
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// (3) No match yet. Ask extras.
|
||||
if (!found) {
|
||||
rv = NS_ERROR_FAILURE;
|
||||
-#ifdef XP_WIN
|
||||
- /* XXX Gross hack to wallpaper over the most common Win32
|
||||
- * extension issues caused by the fix for bug 116938. See bug
|
||||
- * 120327, comment 271 for why this is needed. Not even sure we
|
||||
- * want to remove this once we have fixed all this stuff to work
|
||||
- * right; any info we get from extras on this type is pretty much
|
||||
- * useless....
|
||||
- */
|
||||
+ // Getting info for application/octet-stream content-type from extras
|
||||
+ // does not make a sense because this tends to open all octet-streams
|
||||
+ // as Binary file with exe, com or bin extension regardless the real
|
||||
+ // extension.
|
||||
if (!typeToUse.Equals(APPLICATION_OCTET_STREAM, nsCaseInsensitiveCStringComparator()))
|
||||
-#endif
|
||||
rv = FillMIMEInfoForMimeTypeFromExtras(typeToUse, *_retval);
|
||||
LOG(("Searched extras (by type), rv 0x%08" PRIX32 "\n", static_cast<uint32_t>(rv)));
|
||||
// If that didn't work out, try file extension from extras
|
||||
if (NS_FAILED(rv) && !aFileExt.IsEmpty()) {
|
||||
rv = FillMIMEInfoForExtensionFromExtras(aFileExt, *_retval);
|
||||
LOG(("Searched extras (by ext), rv 0x%08" PRIX32 "\n", static_cast<uint32_t>(rv)));
|
||||
}
|
||||
// If that still didn't work, set the file description to "ext File"
|
||||
diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exthandler/unix/nsOSHelperAppService.cpp
|
||||
--- a/uriloader/exthandler/unix/nsOSHelperAppService.cpp
|
||||
+++ b/uriloader/exthandler/unix/nsOSHelperAppService.cpp
|
||||
@@ -26,16 +26,17 @@
|
||||
#include "nsISupportsPrimitives.h"
|
||||
#include "nsCRT.h"
|
||||
#include "nsDirectoryServiceDefs.h"
|
||||
#include "nsDirectoryServiceUtils.h"
|
||||
#include "ContentHandlerService.h"
|
||||
#include "prenv.h" // for PR_GetEnv()
|
||||
#include "nsAutoPtr.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
+#include "nsMimeTypes.h"
|
||||
|
||||
using namespace mozilla;
|
||||
|
||||
#define LOG(args) MOZ_LOG(mLog, mozilla::LogLevel::Debug, args)
|
||||
#define LOG_ENABLED() MOZ_LOG_TEST(mLog, mozilla::LogLevel::Debug)
|
||||
|
||||
static nsresult
|
||||
FindSemicolon(nsAString::const_iterator& aSemicolon_iter,
|
||||
@@ -1445,17 +1446,22 @@ nsOSHelperAppService::GetFromType(const
|
||||
}
|
||||
|
||||
|
||||
already_AddRefed<nsIMIMEInfo>
|
||||
nsOSHelperAppService::GetMIMEInfoFromOS(const nsACString& aType,
|
||||
const nsACString& aFileExt,
|
||||
bool *aFound) {
|
||||
*aFound = true;
|
||||
- RefPtr<nsMIMEInfoBase> retval = GetFromType(PromiseFlatCString(aType));
|
||||
+ RefPtr<nsMIMEInfoBase> retval;
|
||||
+ // Fallback to lookup by extension when generic 'application/octet-stream'
|
||||
+ // content type is received.
|
||||
+ if (!aType.EqualsLiteral(APPLICATION_OCTET_STREAM)) {
|
||||
+ retval = GetFromType(PromiseFlatCString(aType));
|
||||
+ }
|
||||
bool hasDefault = false;
|
||||
if (retval)
|
||||
retval->GetHasDefaultHandler(&hasDefault);
|
||||
if (!retval || !hasDefault) {
|
||||
RefPtr<nsMIMEInfoBase> miByExt = GetFromExtension(PromiseFlatCString(aFileExt));
|
||||
// If we had no extension match, but a type match, use that
|
||||
if (!miByExt && retval)
|
||||
return retval.forget();
|
||||
|
4
sources
4
sources
@ -1,2 +1,2 @@
|
||||
SHA512 (firefox-62.0.3.source.tar.xz) = 487bb7791284367158c79cf7918fecf3d598627a6416e679aeb5d22626089aeffe07762fa2389819ba881c90ece1c5a83cf2d85b2def15b8d5ba0ed1c498b527
|
||||
SHA512 (firefox-langpacks-62.0.3-20181002.tar.xz) = 3a5347689753edf7bc8ba8190597e5a147347a26eacedb4dde811e9b0e75f56d4c011188bdd025f55843f318a652ce1d536d5c35c40a848867b12b0e286035a3
|
||||
SHA512 (firefox-63.0.source.tar.xz) = 1e2cd61f84e5a9cdf0eee6fb7b84986a0a7f8bcdf72aa1eb491e178920e8ef80f158c7421cdc973acaff5e27b9901838c4d564f7d8235f428391241144794952
|
||||
SHA512 (firefox-langpacks-63.0-20181018.tar.xz) = 340d4b40181cfe8aa0c0a5988651d982836dc5292b70e9942235219497ce36af099a733b00934d5c494134b29a971752da30166472e1e919d9419025f4cc5f94
|
||||
|
Loading…
Reference in New Issue
Block a user