diff options
author | Your Name | 2017-12-03 16:32:18 -0400 |
---|---|---|
committer | Your Name | 2017-12-03 16:32:18 -0400 |
commit | 62b04ff928bf23c2e209d9919ae16de7b62dd518 (patch) | |
tree | f6ee38078c713dae1cc8a5d00f941c8c7af7e626 | |
parent | 2713ef3643f54f7d2357f0dbd87ad2da20a46dee (diff) | |
download | aur-62b04ff928bf23c2e209d9919ae16de7b62dd518.tar.gz |
57
-rw-r--r-- | 0001-Bug-1384062-Make-SystemResourceMonitor.stop-more-res.patch | 117 | ||||
-rw-r--r-- | PKGBUILD | 246 | ||||
-rw-r--r-- | firefox-52-disable-data-sharing-infobar.patch | 7 | ||||
-rw-r--r-- | firefox-52-disable-location.services.mozilla.com.patch | 24 | ||||
-rw-r--r-- | firefox-52-disable-reader.patch | 104 | ||||
-rw-r--r-- | firefox-52-disable-sponsored-tiles.patch | 150 | ||||
-rw-r--r-- | firefox-52-disable-telemetry.patch | 12 | ||||
-rw-r--r-- | firefox-52-prefs.patch | 260 | ||||
-rw-r--r-- | firefox.desktop | 374 | ||||
-rw-r--r-- | glibc-2.26-fix.diff | 258 | ||||
-rw-r--r-- | no-plt.diff | 48 | ||||
-rw-r--r-- | plugin-crash.diff | 50 | ||||
-rwxr-xr-x | upload-symbol-archive | 23 | ||||
-rw-r--r-- | wifi-disentangle.patch | 245 | ||||
-rw-r--r-- | wifi-fix-interface.patch | 26 |
15 files changed, 1653 insertions, 291 deletions
diff --git a/0001-Bug-1384062-Make-SystemResourceMonitor.stop-more-res.patch b/0001-Bug-1384062-Make-SystemResourceMonitor.stop-more-res.patch new file mode 100644 index 000000000000..58d029bde35a --- /dev/null +++ b/0001-Bug-1384062-Make-SystemResourceMonitor.stop-more-res.patch @@ -0,0 +1,117 @@ +From 2874ecd82e9671f774bdfda41fe0857fcb916c13 Mon Sep 17 00:00:00 2001 +Message-Id: <2874ecd82e9671f774bdfda41fe0857fcb916c13.1506634385.git.jan.steffens@gmail.com> +From: Mike Hommey <mh+mozilla@glandium.org> +Date: Wed, 16 Aug 2017 13:16:16 +0900 +Subject: [PATCH] Bug 1384062 - Make SystemResourceMonitor.stop more resilient + to errors. r=ahal,gps + +The poll() call in SystemResourceMonitor.stop might fail even though +there is something to read from the pipe, in some corner cases, and +python won't let us know about it. In that case, an exception is thrown, +leaving the SystemResourceMonitor (and its callers) in a weird state. In +practice, this leads BuildMonitor.__exit__ to recall stop, which then +fails. + +So when poll() throws an exception, we pretend there's still something +to read, and we try to read anyways. If there is something to read, +recv() will return it, otherwise, it will throw an exception of its own, +which we catch, pretending we're done. + +Furthermore, when there is nothing to read from the pipe, poll() simply +returns False, and our loop never sets `done` to True, and we then hit +an assert, which doesn't have its place here, so we remove it. + +Finally, the other end of the pipe might have died at any time, making +sending over the pipe fail, so we also protect against that. + +With all these changes, it feels like the reason to backout bug 1239939 +in bug 1272782 should have been dealt with, and we can drop the timeout +again. + +--HG-- +extra : rebase_source : ac72dd5b2602cf3ffddfb429f95e02380f939893 +--- + .../mozsystemmonitor/resourcemonitor.py | 38 +++++++++++++++------- + 1 file changed, 26 insertions(+), 12 deletions(-) + +diff --git a/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py b/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py +index 8f2ac95cbe505540..38f9bc986ac2a120 100644 +--- a/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py ++++ b/testing/mozbase/mozsystemmonitor/mozsystemmonitor/resourcemonitor.py +@@ -289,47 +289,61 @@ class SystemResourceMonitor(object): + assert self._running + assert not self._stopped + +- self._pipe.send(('terminate',)) ++ try: ++ self._pipe.send(('terminate',)) ++ except Exception: ++ pass + self._running = False + self._stopped = True + + self.measurements = [] + +- done = False +- + # The child process will send each data sample over the pipe + # as a separate data structure. When it has finished sending + # samples, it sends a special "done" message to indicate it + # is finished. +- while self._pipe.poll(1.0): +- start_time, end_time, io_diff, cpu_diff, cpu_percent, virt_mem, \ +- swap_mem = self._pipe.recv() ++ ++ # multiprocessing.Pipe is not actually a pipe on at least Linux. that ++ # has an effect on the expected outcome of reading from it when the ++ # other end of the pipe dies, leading to possibly hanging on revc() ++ # below. So we must poll(). ++ def poll(): ++ try: ++ return self._pipe.poll(0.1) ++ except Exception: ++ # Poll might throw an exception even though there's still ++ # data to read. That happens when the underlying system call ++ # returns both POLLERR and POLLIN, but python doesn't tell us ++ # about it. So assume there is something to read, and we'll ++ # get an exception when trying to read the data. ++ return True ++ while poll(): ++ try: ++ start_time, end_time, io_diff, cpu_diff, cpu_percent, virt_mem, \ ++ swap_mem = self._pipe.recv() ++ except Exception: ++ # Let's assume we're done here ++ break + + # There should be nothing after the "done" message so + # terminate. + if start_time == 'done': +- done = True + break + + io = self._io_type(*io_diff) + virt = self._virt_type(*virt_mem) + swap = self._swap_type(*swap_mem) + cpu_times = [self._cpu_times_type(*v) for v in cpu_diff] + + self.measurements.append(SystemResourceUsage(start_time, end_time, + cpu_times, cpu_percent, io, virt, swap)) + + # We establish a timeout so we don't hang forever if the child + # process has crashed. + self._process.join(10) + if self._process.is_alive(): + self._process.terminate() + self._process.join(10) +- else: +- # We should have received a "done" message from the +- # child indicating it shut down properly. This only +- # happens if the child shuts down cleanly. +- assert done + + if len(self.measurements): + self.start_time = self.measurements[0].start +-- +2.14.2 + @@ -1,139 +1,219 @@ # $Id$ -# Maintainer: Jonas Heinrich <onny@project-insanity.org> -# Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> +# Maintainer: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> # Contributor: Ionut Biru <ibiru@archlinux.org> # Contributor: Jakub Schmidtke <sjakub@gmail.com> pkgname=firefox-eme-free -_pkgname=firefox -pkgver=46.0 +pkgver=57.0.1 pkgrel=1 -pkgdesc="Standalone web browser from mozilla.org" -arch=('i686' 'x86_64') -license=('MPL' 'GPL' 'LGPL') +pkgdesc="Deblobbed and EME free Firefox" +arch=(i686 x86_64) +license=(MPL GPL LGPL) url="https://www.mozilla.org/firefox/" -depends=('gtk3' 'gtk2' 'mozilla-common' 'libxt' 'startup-notification' 'mime-types' - 'dbus-glib' 'alsa-lib' 'ffmpeg' 'desktop-file-utils' 'hicolor-icon-theme' - 'libvpx' 'icu' 'libevent' 'nss' 'hunspell' 'sqlite' 'ttf-font') -makedepends=('unzip' 'zip' 'diffutils' 'python2' 'yasm' 'mesa' 'imake' 'gconf' - 'xorg-server-xvfb' 'libpulse' 'inetutils') +depends=(gtk3 gtk2 mozilla-common libxt startup-notification mime-types dbus-glib ffmpeg + nss hunspell sqlite ttf-font libpulse) +makedepends=(unzip zip diffutils python2 yasm mesa imake gconf inetutils xorg-server-xvfb + autoconf2.13 rust mercurial clang llvm jack) optdepends=('networkmanager: Location detection via available WiFi networks' - 'upower: Battery API') -install=firefox.install -conflicts=('firefox') -provides=('firefox') -options=('!emptydirs' '!makeflags') -source=(https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/$pkgver/source/firefox-$pkgver.source.tar.xz - mozconfig - firefox.desktop - firefox-install-dir.patch - vendor.js - firefox-symbolic.svg - firefox-fixed-loading-icon.png - firefox-gtk3-20.patch - no-libnotify.patch) -sha256sums=('b35aa05162362d73cd308066adca207f7aa40ceae10931fa4819371df6c4f8bf' - '4e79065e0fd20120eaf3de7a57a27f012db6bd69db4f976732c0f04f41a504a0' - 'c202e5e18da1eeddd2e1d81cb3436813f11e44585ca7357c4c5f1bddd4bec826' - 'd86e41d87363656ee62e12543e2f5181aadcff448e406ef3218e91865ae775cd' - '4b50e9aec03432e21b44d18c4c97b2630bace606b033f7d556c9d3e3eb0f4fa4' + 'libnotify: Notification integration' + 'pulseaudio: Audio support' + 'speech-dispatcher: Text-to-Speech') +options=(!emptydirs !makeflags !strip) +_repo=https://hg.mozilla.org/mozilla-unified +source=("hg+$_repo#tag=FIREFOX_${pkgver//./_}_RELEASE" + wifi-disentangle.patch wifi-fix-interface.patch + 0001-Bug-1384062-Make-SystemResourceMonitor.stop-more-res.patch + no-plt.diff plugin-crash.diff glibc-2.26-fix.diff + $pkgname.desktop firefox-symbolic.svg firefox-install-dir.patch +https://raw.githubusercontent.com/bn0785ac/firefox-beta/master/firefox-52-disable-data-sharing-infobar.patch +https://raw.githubusercontent.com/bn0785ac/firefox-beta/master/firefox-52-disable-location.services.mozilla.com.patch +https://raw.githubusercontent.com/bn0785ac/firefox-beta/master/firefox-52-disable-reader.patch +https://raw.githubusercontent.com/bn0785ac/firefox-beta/master/firefox-52-disable-sponsored-tiles.patch +https://raw.githubusercontent.com/bn0785ac/firefox-beta/master/firefox-52-disable-telemetry.patch +https://raw.githubusercontent.com/bn0785ac/firefox-beta/master/firefox-52-prefs.patch) +sha256sums=('SKIP' + 'f068b84ad31556095145d8fefc012dd3d1458948533ed3fff6cbc7250b6e73ed' + 'e98a3453d803cc7ddcb81a7dc83f883230dd8591bdf936fc5a868428979ed1f1' + 'aba767995ffb1a55345e30aaba667f43d469e23bd9b1b68263cf71b8118acc96' + 'ea8e1b871c0f1dd29cdea1b1a2e7f47bf4713e2ae7b947ec832dba7dfcc67daa' + 'a7e5d2430bb562f6367deb07417dad4368317e8e8be5d1cfa842c3356de3cfc0' + 'cd7ff441da66a287f8712e60cdc9e216c30355d521051e2eaae28a66d81915e8' + 'ada313750e6fb14558b37c764409a17c1672a351a46c73b350aa1fe4ea9220ef' 'a2474b32b9b2d7e0fb53a4c89715507ad1c194bef77713d798fa39d507def9e9' - '68e3a5b47c6d175cc95b98b069a15205f027cab83af9e075818d38610feb6213' - '440c3e22d98ecf8c44dcedbe90bbb302da3a059e3fc3fba205d89f0eca329cbf' - 'e4ebdd14096d177d264a7993dbd5df46463605ff45f783732c26d30b9caa53a7') -validpgpkeys=('2B90598A745E992F315E22C58AB132963A06537A') + 'd86e41d87363656ee62e12543e2f5181aadcff448e406ef3218e91865ae775cd' + 'bdad68eafe110b9f94a0e025635e32a6ab53e2f9adcd594c8dd2e3225f6453ab' + '8d9afa1f940a9dac689ead40a57990d1491f34a1787b2222f8f5b5e485d54103' + '7f171b7d69866ac6d8945ab0867b2646964362c791875c6428b4c2c8e3f3fb5b' + 'a72c657784dc5804509456d9ba39ccc8d5e5998c847f49abbcfeb2a547290815' + '24019d3d7e6b169087d4515db9d3a179239d1e4fe726f0906f6f26877c726040' + '80d6181d11c200aca2781f69ffeafb59ea23952304d161c2812a2f5a98b273b0') # Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) # Note: These are for Arch Linux use ONLY. For your own distribution, please # get your own set of keys. Feel free to contact foutrelis@archlinux.org for # more information. -_google_api_key=AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM -_google_default_client_id=413772536636.apps.googleusercontent.com -_google_default_client_secret=0ZChLK6AxeA3Isu96MkwqDR4 + # Mozilla API keys (see https://location.services.mozilla.com/api) # Note: These are for Arch Linux use ONLY. For your own distribution, please # get your own set of keys. Feel free to contact heftig@archlinux.org for # more information. -_mozilla_api_key=16674381-f021-49de-8622-3021c5942aff prepare() { - cd $_pkgname-$pkgver + mkdir path + ln -s /usr/bin/python2 path/python - cp ../mozconfig .mozconfig + cd mozilla-unified patch -Np1 -i ../firefox-install-dir.patch - # https://bugzilla.mozilla.org/show_bug.cgi?id=1234158 - patch -Np1 -i ../firefox-gtk3-20.patch + # https://bugzilla.mozilla.org/show_bug.cgi?id=1314968 + patch -Np1 -i ../wifi-disentangle.patch + patch -Np1 -i ../wifi-fix-interface.patch + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1384062 + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1382942 + patch -Np1 -i ../no-plt.diff + + # https://bugzilla.mozilla.org/show_bug.cgi?id=1400175 + - # Notifications with libnotify are broken - # https://bugzilla.mozilla.org/show_bug.cgi?id=1236150 - patch -Np1 -i ../no-libnotify.patch + # https://bugzilla.mozilla.org/show_bug.cgi?id=1385667 + # https://bugzilla.mozilla.org/show_bug.cgi?id=1394149 - echo -n "$_google_api_key" >google-api-key - echo "ac_add_options --with-google-api-keyfile=\"$PWD/google-api-key\"" >>.mozconfig - echo -n "$_google_default_client_id $_google_default_client_secret" >google-oauth-api-key - echo "ac_add_options --with-google-oauth-api-keyfile=\"$PWD/google-oauth-api-key\"" >>.mozconfig +patch -Np1 -i ../firefox-52-disable-data-sharing-infobar.patch +patch -Np1 -i ../firefox-52-disable-location.services.mozilla.com.patch +patch -Np1 -i ../firefox-52-disable-telemetry.patch - echo -n "$_mozilla_api_key" >mozilla-api-key - echo "ac_add_options --with-mozilla-api-keyfile=\"$PWD/mozilla-api-key\"" >>.mozconfig - mkdir "$srcdir/path" - ln -s /usr/bin/python2 "$srcdir/path/python" - # configure script misdetects the preprocessor without an optimization level - # https://bugs.archlinux.org/task/34644 - sed -i '/ac_cpp=/s/$CPPFLAGS/& -O2/' configure + cat >.mozconfig <<END +ac_add_options --enable-application=browser - # Fix tab loading icon (doesn't work with libpng 1.6) - # https://bugzilla.mozilla.org/show_bug.cgi?id=841734 - cp "$srcdir/firefox-fixed-loading-icon.png" \ - browser/themes/linux/tabbrowser/loading.png +ac_add_options --prefix=/usr +ac_add_options --enable-release +ac_add_options --enable-gold +ac_add_options --enable-pie +ac_add_options --enable-optimize="-O2" +ac_add_options --disable-stylo + +# Branding +ac_add_options --enable-official-branding +ac_add_options --enable-update-channel=release +ac_add_options --with-distribution-id=org.archlinux +export MOZILLA_OFFICIAL=1 +export MOZ_TELEMETRY_REPORTING=0 +export MOZ_ADDON_SIGNING=1 +export MOZ_REQUIRE_SIGNING=0 + +# Keys +# System libraries +ac_add_options --with-system-zlib +ac_add_options --with-system-bz2 +ac_add_options --enable-system-hunspell +ac_add_options --enable-system-sqlite +ac_add_options --enable-system-ffi +ac_add_options --disable-gamepad +ac_add_options --disable-necko-wifi +ac_add_options --disable-webspeech +ac_add_options --disable-webrtc + +# Features +ac_add_options --enable-alsa +ac_add_options --enable-jack +ac_add_options --enable-startup-notification +ac_add_options --enable-crashreporter +ac_add_options --disable-updater +END } build() { - cd $_pkgname-$pkgver + cd mozilla-unified + + # _FORTIFY_SOURCE causes configure failures + CPPFLAGS+=" -O2" export PATH="$srcdir/path:$PATH" - export PYTHON="/usr/bin/python2" + export MOZ_SOURCE_REPO="$_repo" # Do PGO - xvfb-run -a -s "-extension GLX -screen 0 1280x1024x24" \ - make -f client.mk build MOZ_PGO=1 + #xvfb-run -a -n 95 -s "-extension GLX -screen 0 1280x1024x24" \ + # MOZ_PGO=1 ./mach build + ./mach build + ./mach buildsymbols } package() { - cd $_pkgname-$pkgver - make -f client.mk DESTDIR="$pkgdir" INSTALL_SDK= install - - install -Dm644 ../vendor.js "$pkgdir/usr/lib/firefox/browser/defaults/preferences/vendor.js" + cd mozilla-unified + DESTDIR="$pkgdir" ./mach install + find . -name '*crashreporter-symbols-full.zip' -exec cp -fvt "$startdir" {} + + + _vendorjs="$pkgdir/usr/lib/$pkgname/browser/defaults/preferences/vendor.js" + install -Dm644 /dev/stdin "$_vendorjs" <<END +// Use LANG environment variable to choose locale +pref("intl.locale.matchOS", true); + +// Disable default browser checking. +pref("browser.shell.checkDefaultBrowser", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); + +// Opt all of us into e10s, instead of just 50% +pref("browser.tabs.remote.autostart", true); +END + + _distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini" + install -Dm644 /dev/stdin "$_distini" <<END +[Global] +id=archlinux +version=1.0 +about=Mozilla Firefox for Arch Linux + +[Preferences] +app.distributor=archlinux +app.distributor.channel=$pkgname +app.partner.archlinux=archlinux +END for i in 16 22 24 32 48 256; do - install -Dm644 browser/branding/official/default$i.png \ - "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/firefox.png" + install -Dm644 browser/branding/official/default$i.png \ + "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png" done install -Dm644 browser/branding/official/content/icon64.png \ - "$pkgdir/usr/share/icons/hicolor/64x64/apps/firefox.png" + "$pkgdir/usr/share/icons/hicolor/64x64/apps/$pkgname.png" install -Dm644 browser/branding/official/mozicon128.png \ - "$pkgdir/usr/share/icons/hicolor/128x128/apps/firefox.png" + "$pkgdir/usr/share/icons/hicolor/128x128/apps/$pkgname.png" install -Dm644 browser/branding/official/content/about-logo.png \ - "$pkgdir/usr/share/icons/hicolor/192x192/apps/firefox.png" + "$pkgdir/usr/share/icons/hicolor/192x192/apps/$pkgname.png" install -Dm644 browser/branding/official/content/about-logo@2x.png \ - "$pkgdir/usr/share/icons/hicolor/384x384/apps/firefox.png" + "$pkgdir/usr/share/icons/hicolor/384x384/apps/$pkgname.png" install -Dm644 ../firefox-symbolic.svg \ - "$pkgdir/usr/share/icons/hicolor/symbolic/apps/firefox-symbolic.svg" + "$pkgdir/usr/share/icons/hicolor/symbolic/apps/$pkgname-symbolic.svg" - install -Dm644 ../firefox.desktop \ - "$pkgdir/usr/share/applications/firefox.desktop" + install -Dm644 ../$pkgname.desktop \ + "$pkgdir/usr/share/applications/$pkgname.desktop" # Use system-provided dictionaries - rm -rf "$pkgdir"/usr/lib/firefox/{dictionaries,hyphenation} - ln -s /usr/share/hunspell "$pkgdir/usr/lib/firefox/dictionaries" - ln -s /usr/share/hyphen "$pkgdir/usr/lib/firefox/hyphenation" + rm -r "$pkgdir"/usr/lib/$pkgname/dictionaries + ln -Ts /usr/share/hunspell "$pkgdir/usr/lib/$pkgname/dictionaries" + ln -Ts /usr/share/hyphen "$pkgdir/usr/lib/$pkgname/hyphenation" + + # Install a wrapper to avoid confusion about binary path + install -Dm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <<END +#!/bin/sh +exec /usr/lib/$pkgname/firefox "\$@" +END - # Replace duplicate binary with symlink + # Replace duplicate binary with wrapper # https://bugzilla.mozilla.org/show_bug.cgi?id=658850 - ln -sf firefox "$pkgdir/usr/lib/firefox/firefox-bin" + ln -srf "$pkgdir/usr/bin/$pkgname" \ + "$pkgdir/usr/lib/$pkgname/firefox-bin" + + # Use system certificates + ln -srf "$pkgdir/usr/lib/libnssckbi.so" \ + "$pkgdir/usr/lib/$pkgname/libnssckbi.so" } diff --git a/firefox-52-disable-data-sharing-infobar.patch b/firefox-52-disable-data-sharing-infobar.patch new file mode 100644 index 000000000000..8c9c0789868c --- /dev/null +++ b/firefox-52-disable-data-sharing-infobar.patch @@ -0,0 +1,7 @@ +--- firefox-45.0esr.bak/browser/base/content/browser.js 2016-03-15 ++++ firefox-45.0esr/browser/base/content/browser.js 2016-03-15 +@@ -1689,4 +1689,2 @@ + +- if (AppConstants.MOZ_DATA_REPORTING) +- gDataNotificationInfoBar.init(); + diff --git a/firefox-52-disable-location.services.mozilla.com.patch b/firefox-52-disable-location.services.mozilla.com.patch new file mode 100644 index 000000000000..42f25557ec75 --- /dev/null +++ b/firefox-52-disable-location.services.mozilla.com.patch @@ -0,0 +1,24 @@ +--- firefox-45.0esr.bak/toolkit/components/search/nsSearchService.js 2016-03-13 ++++ firefox-45.0esr/toolkit/components/search/nsSearchService.js 2016-03-13 +@@ -436,6 +436,10 @@ + return; + } + ++ // Prevent Firefox from contacting location.services.mozilla.com on a new profile ++ Services.prefs.setCharPref("browser.search.region", "US"); ++ return; ++ + // If we have 'isUS' but no 'countryCode' then we are almost certainly + // a profile from Fx 34/35 that set 'isUS' based purely on a timezone + // check. If this said they were US, we force region to be US. +@@ -522,6 +526,10 @@ + countryCode = Services.prefs.getCharPref("browser.search.countryCode"); + } catch(e) {} + ++ // No countryCode set, use US as default, don't contact location.services.mozilla.com ++ Services.prefs.setCharPref("browser.search.countryCode", "US"); ++ return; ++ + if (!countryCode) { + // We don't have it cached, so fetch it. fetchCountryCode() will call + // storeCountryCode if it gets a result (even if that happens after the diff --git a/firefox-52-disable-reader.patch b/firefox-52-disable-reader.patch new file mode 100644 index 000000000000..5fb85f37950a --- /dev/null +++ b/firefox-52-disable-reader.patch @@ -0,0 +1,104 @@ +--- firefox-52.0esr.bak/browser/base/content/browser.js 2017-03-09 ++++ firefox-52.0esr/browser/base/content/browser.js 2017-03-09 +@@ -38,7 +38,6 @@ + ["ProcessHangMonitor", "resource:///modules/ProcessHangMonitor.jsm"], + ["PromiseUtils", "resource://gre/modules/PromiseUtils.jsm"], + ["ReaderMode", "resource://gre/modules/ReaderMode.jsm"], +- ["ReaderParent", "resource:///modules/ReaderParent.jsm"], + ["RecentWindow", "resource:///modules/RecentWindow.jsm"], + ["SessionStore", "resource:///modules/sessionstore/SessionStore.jsm"], + ["ShortcutUtils", "resource://gre/modules/ShortcutUtils.jsm"], +@@ -4574,7 +4573,6 @@ + } + } + UpdateBackForwardCommands(gBrowser.webNavigation); +- ReaderParent.updateReaderButton(gBrowser.selectedBrowser); + + gGestureSupport.restoreRotationState(); + +--- firefox-52.0esr.bak/browser/base/content/browser-sets.inc 2017-03-09 ++++ firefox-52.0esr/browser/base/content/browser-sets.inc 2017-03-09 +@@ -43,7 +43,6 @@ + <command id="View:PageSource" oncommand="BrowserViewSource(window.gBrowser.selectedBrowser);" observes="canViewSource"/> + <command id="View:PageInfo" oncommand="BrowserPageInfo();"/> + <command id="View:FullScreen" oncommand="BrowserFullScreen();"/> +- <command id="View:ReaderView" oncommand="ReaderParent.toggleReaderMode(event);"/> + <command id="cmd_find" + oncommand="gFindBar.onFindCommand();" + observes="isImage"/> +--- firefox-52.0esr.bak/browser/base/content/browser.xul 2017-03-09 ++++ firefox-52.0esr/browser/base/content/browser.xul 2017-03-09 +@@ -766,10 +766,6 @@ + hidden="true" + tooltiptext="&pageReportIcon.tooltip;" + onmousedown="gPopupBlockerObserver.onReportButtonMousedown(event);"/> +- <image id="reader-mode-button" +- class="urlbar-icon" +- hidden="true" +- onclick="ReaderParent.buttonClick(event);"/> + <toolbarbutton id="urlbar-zoom-button" + onclick="FullZoom.reset();" + tooltiptext="&urlbar.zoomReset.tooltip;" +--- firefox-52.0esr.bak/browser/components/nsBrowserGlue.js 2017-03-09 ++++ firefox-52.0esr/browser/components/nsBrowserGlue.js 2017-03-09 +@@ -53,7 +53,6 @@ + ["PluralForm", "resource://gre/modules/PluralForm.jsm"], + ["PrivateBrowsingUtils", "resource://gre/modules/PrivateBrowsingUtils.jsm"], + ["ProcessHangMonitor", "resource:///modules/ProcessHangMonitor.jsm"], +- ["ReaderParent", "resource:///modules/ReaderParent.jsm"], + ["RecentWindow", "resource:///modules/RecentWindow.jsm"], + ["RemotePrompt", "resource:///modules/RemotePrompt.jsm"], + ["SelfSupportBackend", "resource:///modules/SelfSupportBackend.jsm"], +@@ -670,7 +669,6 @@ + ContentPrefServiceParent.init(); + + LoginManagerParent.init(); +- ReaderParent.init(); + URLBarZoom.init(); + + SelfSupportBackend.init(); +--- firefox-52.0esr.bak/browser/components/uitour/UITour.jsm 2017-03-09 ++++ firefox-52.0esr/browser/components/uitour/UITour.jsm 2017-03-09 +@@ -34,8 +34,6 @@ + "resource://gre/modules/PrivateBrowsingUtils.jsm"); + XPCOMUtils.defineLazyModuleGetter(this, "ReaderMode", + "resource://gre/modules/ReaderMode.jsm"); +-XPCOMUtils.defineLazyModuleGetter(this, "ReaderParent", +- "resource:///modules/ReaderParent.jsm"); + + // See LOG_LEVELS in Console.jsm. Common examples: "All", "Info", "Warn", & "Error". + const PREF_LOG_LEVEL = "browser.uitour.loglevel"; +@@ -661,15 +654,10 @@ + } + + case "forceShowReaderIcon": { +- ReaderParent.forceShowReaderIcon(browser); + break; + } + + case "toggleReaderMode": { +- let targetPromise = this.getTarget(window, "readerMode-urlBar"); +- targetPromise.then(target => { +- ReaderParent.toggleReaderMode({target: target.node}); +- }); + break; + } + +@@ -1948,7 +1896,6 @@ + } + + if (aFeature == "readinglist") { +- ReaderParent.showReaderModeInfoPanel(browser); + } else { + log.error("startSubTour: Unknown feature option specified"); + return; +--- firefox-52.0esr.bak/browser/modules/moz.build 2017-03-09 ++++ firefox-52.0esr/browser/modules/moz.build 2017-03-09 +@@ -35,7 +35,6 @@ + 'PermissionUI.jsm', + 'PluginContent.jsm', + 'ProcessHangMonitor.jsm', +- 'ReaderParent.jsm', + 'RecentWindow.jsm', + 'RemotePrompt.jsm', + 'Sanitizer.jsm', diff --git a/firefox-52-disable-sponsored-tiles.patch b/firefox-52-disable-sponsored-tiles.patch new file mode 100644 index 000000000000..91214c648bd9 --- /dev/null +++ b/firefox-52-disable-sponsored-tiles.patch @@ -0,0 +1,150 @@ +--- firefox-52.0esr.bak/browser/modules/DirectoryLinksProvider.jsm 2017-03-09 ++++ firefox-52.0esr/browser/modules/DirectoryLinksProvider.jsm 2017-03-09 +@@ -50,16 +50,16 @@ + const DIRECTORY_LINKS_TYPE = "application/json"; + + // The preference that tells whether to match the OS locale +-const PREF_MATCH_OS_LOCALE = "intl.locale.matchOS"; ++const PREF_MATCH_OS_LOCALE = ""; + + // The preference that tells what locale the user selected +-const PREF_SELECTED_LOCALE = "general.useragent.locale"; ++const PREF_SELECTED_LOCALE = ""; + + // The preference that tells where to obtain directory links +-const PREF_DIRECTORY_SOURCE = "browser.newtabpage.directory.source"; ++const PREF_DIRECTORY_SOURCE = ""; + + // The preference that tells where to send click/view pings +-const PREF_DIRECTORY_PING = "browser.newtabpage.directory.ping"; ++const PREF_DIRECTORY_PING = ""; + + // The preference that tells if newtab is enhanced + const PREF_NEWTAB_ENHANCED = "browser.newtabpage.enhanced"; +@@ -189,30 +189,6 @@ + * @return the selected locale or "en-US" if none is selected + */ + get locale() { +- let matchOS; +- try { +- matchOS = Services.prefs.getBoolPref(PREF_MATCH_OS_LOCALE); +- } +- catch (e) {} +- +- if (matchOS) { +- return Services.locale.getLocaleComponentForUserAgent(); +- } +- +- try { +- let locale = Services.prefs.getComplexValue(PREF_SELECTED_LOCALE, +- Ci.nsIPrefLocalizedString); +- if (locale) { +- return locale.data; +- } +- } +- catch (e) {} +- +- try { +- return Services.prefs.getCharPref(PREF_SELECTED_LOCALE); +- } +- catch (e) {} +- + return "en-US"; + }, + +@@ -283,13 +259,6 @@ + }, + + _fetchAndCacheLinks: function DirectoryLinksProvider_fetchAndCacheLinks(uri) { +- // Replace with the same display locale used for selecting links data +- uri = uri.replace("%LOCALE%", this.locale); +- uri = uri.replace("%CHANNEL%", UpdateUtils.UpdateChannel); +- +- return this._downloadJsonData(uri).then(json => { +- return OS.File.writeAtomic(this._directoryFilePath, json, {tmpPath: this._directoryFilePath + ".tmp"}); +- }); + }, + + /** +@@ -298,33 +267,6 @@ + * @return promise resolved to json string, "{}" returned if status != 200 + */ + _downloadJsonData: function DirectoryLinksProvider__downloadJsonData(uri) { +- let deferred = Promise.defer(); +- let xmlHttp = this._newXHR(); +- +- xmlHttp.onload = function(aResponse) { +- let json = this.responseText; +- if (this.status && this.status != 200) { +- json = "{}"; +- } +- deferred.resolve(json); +- }; +- +- xmlHttp.onerror = function(e) { +- deferred.reject("Fetching " + uri + " results in error code: " + e.target.status); +- }; +- +- try { +- xmlHttp.open("GET", uri); +- // Override the type so XHR doesn't complain about not well-formed XML +- xmlHttp.overrideMimeType(DIRECTORY_LINKS_TYPE); +- // Set the appropriate request type for servers that require correct types +- xmlHttp.setRequestHeader("Content-Type", DIRECTORY_LINKS_TYPE); +- xmlHttp.send(); +- } catch (e) { +- deferred.reject("Error fetching " + uri); +- Cu.reportError(e); +- } +- return deferred.promise; + }, + + /** +@@ -332,30 +274,6 @@ + * @return promise resolved immediately if no download needed, or upon completion + */ + _fetchAndCacheLinksIfNecessary: function DirectoryLinksProvider_fetchAndCacheLinksIfNecessary(forceDownload=false) { +- if (this._downloadDeferred) { +- // fetching links already - just return the promise +- return this._downloadDeferred.promise; +- } +- +- if (forceDownload || this._needsDownload) { +- this._downloadDeferred = Promise.defer(); +- this._fetchAndCacheLinks(this._linksURL).then(() => { +- // the new file was successfully downloaded and cached, so update a timestamp +- this._lastDownloadMS = Date.now(); +- this._downloadDeferred.resolve(); +- this._downloadDeferred = null; +- this._callObservers("onManyLinksChanged") +- }, +- error => { +- this._downloadDeferred.resolve(); +- this._downloadDeferred = null; +- this._callObservers("onDownloadFail"); +- }); +- return this._downloadDeferred.promise; +- } +- +- // download is not needed +- return Promise.resolve(); + }, + + /** +@@ -962,16 +880,6 @@ + */ + _loadInadjacentSites: function DirectoryLinksProvider_loadInadjacentSites() { + return this._downloadJsonData(this._inadjacentSitesUrl).then(jsonString => { +- let jsonObject = {}; +- try { +- jsonObject = JSON.parse(jsonString); +- } +- catch (e) { +- Cu.reportError(e); +- } +- +- this._inadjacentSites = new Set(jsonObject.domains); +- }); + }, + + /** diff --git a/firefox-52-disable-telemetry.patch b/firefox-52-disable-telemetry.patch new file mode 100644 index 000000000000..76b518f3a27b --- /dev/null +++ b/firefox-52-disable-telemetry.patch @@ -0,0 +1,12 @@ +--- firefox-52.0esr.bak/browser/confvars.sh 2017-03-09 09:11:36.643104656 +0100 ++++ firefox-52.0esr/browser/confvars.sh 2017-03-09 11:13:13.798231732 +0100 +@@ -62,3 +62,9 @@ + + # Include the DevTools client, not just the server (which is the default) + MOZ_DEVTOOLS=all ++ ++# Reduce data sharing with Mozilla ++MOZ_DATA_REPORTING=0 ++MOZ_TELEMETRY_REPORTING=0 ++MOZ_CRASHREPORTER=0 ++MOZ_SERVICES_HEALTHREPORT=0 diff --git a/firefox-52-prefs.patch b/firefox-52-prefs.patch new file mode 100644 index 000000000000..e9406e32f1bc --- /dev/null +++ b/firefox-52-prefs.patch @@ -0,0 +1,260 @@ +--- firefox-52.0esr.bak/browser/app/profile/firefox.js 2017-03-09 ++++ firefox-52.0esr/browser/app/profile/firefox.js 2017-03-09 +@@ -206,7 +206,7 @@ + #endif + + // At startup, check if we're the default browser and prompt user if not. +-pref("browser.shell.checkDefaultBrowser", true); ++pref("browser.shell.checkDefaultBrowser", false); + pref("browser.shell.shortcutFavicons",true); + pref("browser.shell.mostRecentDateSetAsDefault", ""); + #ifdef RELEASE_OR_BETA +@@ -220,7 +220,7 @@ + + // 0 = blank, 1 = home (browser.startup.homepage), 2 = last visited page, 3 = resume previous browser session + // The behavior of option 3 is detailed at: http://wiki.mozilla.org/Session_Restore +-pref("browser.startup.page", 1); ++pref("browser.startup.page", 0); + pref("browser.startup.homepage", "chrome://branding/locale/browserconfig.properties"); + // Whether we should skip the homepage when opening the first-run page + pref("browser.startup.firstrunSkipsHomepage", false); +@@ -294,7 +294,7 @@ + pref("browser.urlbar.suggest.bookmark", true); + pref("browser.urlbar.suggest.openpage", true); + pref("browser.urlbar.suggest.searches", false); +-pref("browser.urlbar.userMadeSearchSuggestionsChoice", false); ++pref("browser.urlbar.userMadeSearchSuggestionsChoice", true); + // 4 here means the suggestion notification will be automatically + // hidden the 4th day, so it will actually be shown on 3 different days. + pref("browser.urlbar.daysBeforeHidingSuggestionsPrompt", 4); +@@ -344,7 +344,7 @@ + pref("browser.download.animateNotifications", true); + + // This records whether or not the panel has been shown at least once. +-pref("browser.download.panel.shown", false); ++pref("browser.download.panel.shown", true); + + #ifndef XP_MACOSX + pref("browser.helperApps.deleteTempFileOnExit", true); +@@ -419,7 +419,7 @@ + // Tabbed browser + pref("browser.tabs.closeWindowWithLastTab", true); + pref("browser.tabs.insertRelatedAfterCurrent", true); +-pref("browser.tabs.warnOnClose", true); ++pref("browser.tabs.warnOnClose", false); + pref("browser.tabs.warnOnCloseOtherTabs", true); + pref("browser.tabs.warnOnOpen", true); + pref("browser.tabs.maxOpenBeforeWarn", 15); +@@ -596,7 +596,7 @@ + pref("browser.xul.error_pages.expert_bad_cert", false); + + // Enable captive portal detection. +-pref("network.captive-portal-service.enabled", true); ++pref("network.captive-portal-service.enabled", false); + + // If true, network link events will change the value of navigator.onLine + pref("network.manage-offline-status", true); +@@ -1155,7 +1155,7 @@ + // Remembers if the about:newtab intro has been shown + // NOTE: This preference is unused but was not removed in case + // this information will be valuable in the future. +-pref("browser.newtabpage.introShown", false); ++pref("browser.newtabpage.introShown", true); + + // Toggles the content of 'about:newtab'. Shows the grid when enabled. + pref("browser.newtabpage.enabled", true); +--- firefox-52.0esr.bak/browser/branding/official/pref/firefox-branding.js 2017-03-09 ++++ firefox-52.0esr/browser/branding/official/pref/firefox-branding.js 2017-03-09 +@@ -3,8 +3,7 @@ + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + pref("startup.homepage_override_url", ""); +-pref("startup.homepage_welcome_url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/firstrun/"); +-pref("startup.homepage_welcome_url.additional", ""); ++pref("startup.homepage_welcome_url", "about:blank"); + // Interval: Time between checks for a new version (in seconds) + pref("app.update.interval", 43200); // 12 hours + // The time interval between the downloading of mar file chunks in the +--- firefox-52.0esr.bak/build/application.ini 2017-03-09 ++++ firefox-52.0esr/build/application.ini 2017-03-09 +@@ -43,7 +43,7 @@ + + [XRE] + #ifdef MOZ_PROFILE_MIGRATOR +-EnableProfileMigrator=1 ++EnableProfileMigrator=0 + #endif + + #if MOZ_CRASHREPORTER +--- firefox-52.0esr.bak/toolkit/components/telemetry/healthreport-prefs.js 2017-03-09 ++++ firefox-52.0esr/toolkit/components/telemetry/healthreport-prefs.js 2017-03-09 +@@ -5,6 +5,6 @@ + pref("datareporting.healthreport.infoURL", "https://www.mozilla.org/legal/privacy/firefox.html#health-report"); + + // Health Report is enabled by default on all channels. +-pref("datareporting.healthreport.uploadEnabled", true); ++pref("datareporting.healthreport.uploadEnabled", false); + + pref("datareporting.healthreport.about.reportUrl", "https://fhr.cdn.mozilla.net/%LOCALE%/v4/"); +--- firefox-52.0esr.bak/modules/libpref/init/all.js 2017-03-09 ++++ firefox-52.0esr/modules/libpref/init/all.js 2017-03-09 +@@ -29,7 +29,7 @@ + + pref("general.config.obscure_value", 13); // for MCD .cfg files + +-pref("general.warnOnAboutConfig", true); ++pref("general.warnOnAboutConfig", false); + + // maximum number of dated backups to keep at any time + pref("browser.bookmarks.max_backups", 5); +@@ -1523,7 +1523,7 @@ + + // The maximum number of current global half open sockets allowable + // when starting a new speculative connection. +-pref("network.http.speculative-parallel-limit", 6); ++pref("network.http.speculative-parallel-limit", 0); + + // Whether or not to block requests for non head js/css items (e.g. media) + // while those elements load. +@@ -1859,7 +1859,7 @@ + pref("network.dir.format", 2); + + // enables the prefetch service (i.e., prefetching of <link rel="next"> URLs). +-pref("network.prefetch-next", true); ++pref("network.prefetch-next", false); + + // enables the predictive service + pref("network.predictor.enabled", true); +@@ -2179,7 +2179,7 @@ + pref("services.settings.server", "https://firefox.settings.services.mozilla.com/v1"); + + // Blocklist preferences +-pref("extensions.blocklist.enabled", true); ++pref("extensions.blocklist.enabled", false); + // OneCRL freshness checking depends on this value, so if you change it, + // please also update security.onecrl.maximum_staleness_in_seconds. + pref("extensions.blocklist.interval", 86400); +@@ -3912,7 +3912,7 @@ + + // Middle-mouse handling + pref("middlemouse.paste", true); +-pref("middlemouse.contentLoadURL", true); ++pref("middlemouse.contentLoadURL", false); + pref("middlemouse.openNewWindow", true); + pref("middlemouse.scrollbarPosition", true); + +@@ -3975,7 +3975,7 @@ + + // Middle-mouse handling + pref("middlemouse.paste", true); +-pref("middlemouse.contentLoadURL", true); ++pref("middlemouse.contentLoadURL", false); + pref("middlemouse.openNewWindow", true); + pref("middlemouse.scrollbarPosition", true); + +@@ -4371,7 +4371,7 @@ + + // Satchel (Form Manager) prefs + pref("browser.formfill.debug", false); +-pref("browser.formfill.enable", true); ++pref("browser.formfill.enable", false); + pref("browser.formfill.expire_days", 180); + pref("browser.formfill.saveHttpsForms", true); + pref("browser.formfill.agedWeight", 2); +@@ -5061,18 +5061,18 @@ + pref("dom.mapped_arraybuffer.enabled", true); + + // The tables used for Safebrowsing phishing and malware checks. +-pref("urlclassifier.malwareTable", "goog-malware-shavar,goog-unwanted-shavar,test-malware-simple,test-unwanted-simple"); ++pref("urlclassifier.malwareTable", ""); + + #ifdef MOZILLA_OFFICIAL + // In the official build, we are allowed to use google's private + // phishing list "goog-phish-shavar". See Bug 1288840. +-pref("urlclassifier.phishTable", "goog-phish-shavar,test-phish-simple"); ++pref("urlclassifier.phishTable", ""); + #else +-pref("urlclassifier.phishTable", "googpub-phish-shavar,test-phish-simple"); ++pref("urlclassifier.phishTable", ""); + #endif + + // Tables for application reputation. +-pref("urlclassifier.downloadBlockTable", "goog-badbinurl-shavar"); ++pref("urlclassifier.downloadBlockTable", ""); + + #ifdef XP_WIN + // Only download the whitelist on Windows, since the whitelist is +@@ -5106,48 +5106,48 @@ + pref("urlclassifier.alternate_error_page", "blocked"); + + // Enable phishing protection +-pref("browser.safebrowsing.phishing.enabled", true); ++pref("browser.safebrowsing.phishing.enabled", false); + + // Enable malware protection +-pref("browser.safebrowsing.malware.enabled", true); ++pref("browser.safebrowsing.malware.enabled", false); + +-pref("browser.safebrowsing.downloads.enabled", true); +-pref("browser.safebrowsing.downloads.remote.enabled", true); ++pref("browser.safebrowsing.downloads.enabled", false); ++pref("browser.safebrowsing.downloads.remote.enabled", false); + pref("browser.safebrowsing.downloads.remote.timeout_ms", 10000); +-pref("browser.safebrowsing.downloads.remote.url", "https://sb-ssl.google.com/safebrowsing/clientreport/download?key=%GOOGLE_API_KEY%"); +-pref("browser.safebrowsing.downloads.remote.block_dangerous", true); +-pref("browser.safebrowsing.downloads.remote.block_dangerous_host", true); +-pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", true); +-pref("browser.safebrowsing.downloads.remote.block_uncommon", true); ++pref("browser.safebrowsing.downloads.remote.url", ""); ++pref("browser.safebrowsing.downloads.remote.block_dangerous", false); ++pref("browser.safebrowsing.downloads.remote.block_dangerous_host", false); ++pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", false); ++pref("browser.safebrowsing.downloads.remote.block_uncommon", false); + pref("browser.safebrowsing.debug", false); + + // The protocol version we communicate with google server. + pref("browser.safebrowsing.provider.google.pver", "2.2"); +-pref("browser.safebrowsing.provider.google.lists", "goog-badbinurl-shavar,goog-downloadwhite-digest256,goog-phish-shavar,googpub-phish-shavar,goog-malware-shavar,goog-unwanted-shavar"); +-pref("browser.safebrowsing.provider.google.updateURL", "https://safebrowsing.google.com/safebrowsing/downloads?client=SAFEBROWSING_ID&appver=%MAJOR_VERSION%&pver=2.2&key=%GOOGLE_API_KEY%"); +-pref("browser.safebrowsing.provider.google.gethashURL", "https://safebrowsing.google.com/safebrowsing/gethash?client=SAFEBROWSING_ID&appver=%MAJOR_VERSION%&pver=2.2"); +-pref("browser.safebrowsing.provider.google.reportURL", "https://safebrowsing.google.com/safebrowsing/diagnostic?client=%NAME%&hl=%LOCALE%&site="); ++pref("browser.safebrowsing.provider.google.lists", ""); ++pref("browser.safebrowsing.provider.google.updateURL", ""); ++pref("browser.safebrowsing.provider.google.gethashURL", ""); ++pref("browser.safebrowsing.provider.google.reportURL", ""); + + // Prefs for v4. + pref("browser.safebrowsing.provider.google4.pver", "4"); +-pref("browser.safebrowsing.provider.google4.lists", "goog-phish-proto,googpub-phish-proto,goog-malware-proto,goog-unwanted-proto"); +-pref("browser.safebrowsing.provider.google4.updateURL", "https://safebrowsing.googleapis.com/v4/threatListUpdates:fetch?$ct=application/x-protobuf&key=%GOOGLE_API_KEY%"); +-pref("browser.safebrowsing.provider.google4.gethashURL", "https://safebrowsing.googleapis.com/v4/fullHashes:find?$req=%REQUEST_BASE64%&$ct=application/x-protobuf&key=%GOOGLE_API_KEY%"); +-pref("browser.safebrowsing.provider.google4.reportURL", "https://safebrowsing.google.com/safebrowsing/diagnostic?client=%NAME%&hl=%LOCALE%&site="); +- +-pref("browser.safebrowsing.reportPhishMistakeURL", "https://%LOCALE%.phish-error.mozilla.com/?hl=%LOCALE%&url="); +-pref("browser.safebrowsing.reportPhishURL", "https://%LOCALE%.phish-report.mozilla.com/?hl=%LOCALE%&url="); +-pref("browser.safebrowsing.reportMalwareMistakeURL", "https://%LOCALE%.malware-error.mozilla.com/?hl=%LOCALE%&url="); ++pref("browser.safebrowsing.provider.google4.lists", ""); ++pref("browser.safebrowsing.provider.google4.updateURL", ""); ++pref("browser.safebrowsing.provider.google4.gethashURL", ""); ++pref("browser.safebrowsing.provider.google4.reportURL", ""); ++ ++pref("browser.safebrowsing.reportPhishMistakeURL", ""); ++pref("browser.safebrowsing.reportPhishURL", ""); ++pref("browser.safebrowsing.reportMalwareMistakeURL", ""); + + // The table and global pref for blocking plugin content +-pref("browser.safebrowsing.blockedURIs.enabled", true); ++pref("browser.safebrowsing.blockedURIs.enabled", false); + pref("urlclassifier.blockedTable", "test-block-simple,mozplugin-block-digest256"); + + // The protocol version we communicate with mozilla server. + pref("browser.safebrowsing.provider.mozilla.pver", "2.2"); +-pref("browser.safebrowsing.provider.mozilla.lists", "base-track-digest256,mozstd-trackwhite-digest256,content-track-digest256,mozplugin-block-digest256,mozplugin2-block-digest256"); +-pref("browser.safebrowsing.provider.mozilla.updateURL", "https://shavar.services.mozilla.com/downloads?client=SAFEBROWSING_ID&appver=%MAJOR_VERSION%&pver=2.2"); +-pref("browser.safebrowsing.provider.mozilla.gethashURL", "https://shavar.services.mozilla.com/gethash?client=SAFEBROWSING_ID&appver=%MAJOR_VERSION%&pver=2.2"); ++pref("browser.safebrowsing.provider.mozilla.lists", ""); ++pref("browser.safebrowsing.provider.mozilla.updateURL", ""); ++pref("browser.safebrowsing.provider.mozilla.gethashURL", ""); + // Set to a date in the past to force immediate download in new profiles. + pref("browser.safebrowsing.provider.mozilla.nextupdatetime", "1"); + // Block lists for tracking protection. The name values will be used as the keys diff --git a/firefox.desktop b/firefox.desktop index 084f126a0430..2014e9ecfba9 100644 --- a/firefox.desktop +++ b/firefox.desktop @@ -1,12 +1,14 @@ [Desktop Entry] +Version=1.0 Name=Firefox GenericName=Web Browser -GenericName[ar]=متصفح ويب +GenericName[ar]=متصفح وِب GenericName[ast]=Restolador Web GenericName[bn]=ওয়েব ব্রাউজার GenericName[ca]=Navegador web GenericName[cs]=Webový prohlížeč GenericName[da]=Webbrowser +GenericName[de]=Webbrowser GenericName[el]=Περιηγητής διαδικτύου GenericName[es]=Navegador web GenericName[et]=Veebibrauser @@ -17,7 +19,7 @@ GenericName[gl]=Navegador Web GenericName[he]=דפדפן אינטרנט GenericName[hr]=Web preglednik GenericName[hu]=Webböngésző -GenericName[it]=Browser web +GenericName[it]=Browser Web GenericName[ja]=ウェブ・ブラウザ GenericName[ko]=웹 브라우저 GenericName[ku]=Geroka torê @@ -40,11 +42,11 @@ GenericName[uk]=Веб-браузер GenericName[vi]=Trình duyệt Web GenericName[zh_CN]=网络浏览器 GenericName[zh_TW]=網路瀏覽器 -Comment=Browse the World Wide Web -Comment[ar]=تصفح الشبكة العنكبوتية العالمية +Comment=Browse the Web +Comment[ar]=تصفح الوِب Comment[ast]=Restola pela Rede Comment[bn]=ইন্টারনেট ব্রাউজ করুন -Comment[ca]=Navegueu per la web +Comment[ca]=Navegueu per el web Comment[cs]=Prohlížení stránek World Wide Webu Comment[da]=Surf på internettet Comment[de]=Im Internet surfen @@ -81,211 +83,151 @@ Comment[uk]=Перегляд сторінок Інтернету Comment[vi]=Để duyệt các trang web Comment[zh_CN]=浏览互联网 Comment[zh_TW]=瀏覽網際網路 -Exec=firefox %u +Exec=/usr/lib/firefox/firefox %u +Icon=firefox Terminal=false Type=Application -Icon=firefox -Categories=Network;WebBrowser; -MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp; +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 -Actions=NewTab;NewWindow;NewPrivateWindow; - -[Desktop Action NewTab] -Name=Open new tab -Name[ach]=Yab dirica matidi manyen -Name[af]=Open nuwe oortjie -Name[an]=Ubrir una pestanya nueva -Name[ar]=افتح لسانًا جديدًا -Name[as]=নতুন টেব খোলক -Name[ast]=Abrir llingüeta nueva -Name[az]=Yeni vərəq aç -Name[be]=Адкрыць новую ўстаўку -Name[bg]=Отваряне на нов подпрозорец -Name[bn_BD]=নতুন ট্যাব খুলুন -Name[bn_IN]=নতুন ট্যাব খুলুন -Name[br]=Digeriñ un ivinell nevez -Name[bs]=Otvori novi tab -Name[ca]=Obre una pestanya nova -Name[cs]=Otevřít nový panel -Name[cy]=Agor tab newydd -Name[da]=Åbn nyt faneblad -Name[de]=Neuen Tab öffnen -Name[dsb]=Nowy rejtark wócyniś -Name[el]=Άνοιγμα νέας καρτέλας -Name[eo]=Malfermi novan langeton -Name[es_AR]=Abrir nueva pestaña -Name[es_CL]=Abrir nueva pestaña -Name[es_ES]=Abrir pestaña nueva -Name[es_MX]=Abrir una pestaña nueva -Name[et]=Ava uus kaart -Name[eu]=Ireki fitxa berria -Name[ff]=Uddit tabbere hesere -Name[fi]=Avaa uusi välilehti -Name[fr]=Ouvrir un nouvel onglet -Name[fy_NL]=Iepenje nij ljepblêd -Name[ga_IE]=Oscail i gcluaisín nua -Name[gd]=Fosgail taba ùr -Name[gl]=Abrir unha nova lapela -Name[gu_IN]=નવી ટૅબને ખોલો -Name[he]=פתיחת לשונית חדשה -Name[hi_IN]=नया टैब खोलें -Name[hr]=Otvori novu karticu -Name[hsb]=Nowy rajtark wočinić -Name[hu]=Új lap megnyitása -Name[hy_AM]=Բացել նոր ներդիր -Name[id]=Buka tab baru -Name[is]=Opna nýjan flipa -Name[it]=Apri nuova scheda -Name[ja]=新しいタブ -Name[kk]=Жаңа бетті ашу -Name[kn]=ಹೊಸ ಹಾಳೆಯನ್ನು ತೆರೆ -Name[ko]=새 탭 열기 -Name[lij]=Àrvi nêuvo féuggio -Name[lt]=Atverti naują kortelę -Name[mai]=नव टैब खोलू -Name[mk]=Отвори ново јазиче -Name[ml]=പുതിയ റ്റാബ് തുറക്കുക -Name[mr]=नवीन टॅब उघडा -Name[ms]=Buka tab baru -Name[nb_NO]=Åpne ny fane -Name[nl]=Nieuw tabblad openen -Name[nn_NO]=Opna ny fane -Name[or]=ନୂତନ ଟ୍ୟାବ ଖୋଲନ୍ତୁ -Name[pa_IN]=ਨਵੀਂ ਟੈਬ ਖੋਲ੍ਹੋ -Name[pl]=Otwórz nową kartę -Name[pt_BR]=Nova aba -Name[pt_PT]=Abrir novo separador -Name[rm]=Avrir in nov tab -Name[ro]=Deschide o filă nouă -Name[ru]=Открыть новую вкладку -Name[si]=නව ටැබය විවෘත කරන්න -Name[sk]=Otvoriť novú kartu -Name[sl]=Odpri nov zavihek -Name[son]=Nor loku taaga feeri -Name[sq]=Hap skedë të re -Name[sr]=Отвори нови језичак -Name[sv_SE]=Öppna ny flik -Name[ta]=புதிய கீற்றைத் திற -Name[te]=కొత్త టాబ్ తెరువుము -Name[th]=เปิดแท็บใหม่ -Name[tr]=Yeni sekme aç -Name[uk]=Відкрити нову вкладку -Name[uz]=Yangi ichki oyna ochish -Name[vi]=Mở thẻ mới -Name[xh]=Vula ithebhu entsha -Name[zh_CN]=打开新标签页 -Name[zh_TW]=開啟新分頁 -Exec=firefox -new-tab about:newtab +Categories=Network;WebBrowser; +Keywords=web;browser;internet; +Actions=new-window;new-private-window; -[Desktop Action NewWindow] -Name=Open new window -Name[ach]=Yab dirica manyen -Name[af]=Open nuwe venster -Name[an]=Ubrir una nueva finestra -Name[ar]=افتح نافذة جديدة -Name[as]=নতুন উইন্ডো খোলক -Name[ast]=Abrir ventana nueva -Name[az]=Yeni pəncərə aç -Name[be]=Адкрыць новае акно -Name[bg]=Отваряне на нов прозорец -Name[bn_BD]=নতুন উইন্ডো খুলুন -Name[bn_IN]=নতুন উইন্ডো খুলুন -Name[br]=Digeriñ ur prenestr nevez -Name[bs]=Otvori novi prozor -Name[ca]=Obre una finestra nova -Name[cs]=Otevřít nové okno -Name[cy]=Agor ffenestr newydd -Name[da]=Åbn nyt vindue -Name[de]=Neues Fenster öffnen -Name[dsb]=Nowe wokno wócyniś -Name[el]=Άνοιγμα νέου παραθύρου -Name[eo]=Malfermi novan fenestron -Name[es_AR]=Abrir nueva ventana -Name[es_CL]=Abrir nueva ventana -Name[es_ES]=Abrir nueva ventana -Name[es_MX]=Abrir nueva ventana -Name[et]=Ava uus aken -Name[eu]=Ireki leiho berria -Name[ff]=Uddit henorde hesere -Name[fi]=Avaa uusi ikkuna -Name[fr]=Ouvrir une nouvelle fenêtre -Name[fy_NL]=Iepenje nij finster -Name[ga_IE]=Oscail fuinneog nua -Name[gd]=Fosgail uinneag ùr -Name[gl]=Abrir unha nova xanela -Name[gu_IN]=નવી વિન્ડોને ખોલો -Name[he]=פתח חלון חדש -Name[hi_IN]=नई विंडो खोलें -Name[hr]=Otvori novi prozor -Name[hsb]=Nowe wokno wočinić -Name[hu]=Új ablak megnyitása -Name[hy_AM]=Բացել նոր պատուհան -Name[id]=Buka jendela baru -Name[is]=Opna nýjan glugga -Name[it]=Apri nuova finestra +[Desktop Action new-window] +Name=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[kk]=Жаңа терезені ашу -Name[kn]=ಹೊಸ ವಿಂಡೊವನ್ನು ತೆರೆ -Name[ko]=새 창 열기 -Name[lij]=Àrvi nêuvo barcón -Name[lt]=Atverti naują langą -Name[mai]=नई विंडो खोलू -Name[mk]=Отвори нов прозорец -Name[ml]=പുതിയ ജാലകം തുറക്കുക -Name[mr]=नवीन पटल उघडा -Name[ms]=Buka tetingkap baru -Name[nb_NO]=Åpne nytt vindu -Name[nl]=Een nieuw venster openen -Name[nn_NO]=Opna nytt vindauge -Name[or]=ନୂତନ ୱିଣ୍ଡୋ ଖୋଲନ୍ତୁ -Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ ਖੋਲ੍ਹੋ -Name[pl]=Otwórz nowe okno +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]=Abrir nova janela -Name[rm]=Avrir ina nova fanestra -Name[ro]=Deschide o nouă fereastră -Name[ru]=Открыть новое окно -Name[si]=නව කවුළුවක් විවෘත කරන්න -Name[sk]=Otvoriť nové okno -Name[sl]=Odpri novo okno -Name[son]=Zanfun taaga feeri -Name[sq]=Hap dritare të re -Name[sr]=Отвори нови прозор -Name[sv_SE]=Öppna nytt fönster -Name[ta]=புதிய சாளரத்தை திற -Name[te]=కొత్త విండో తెరువుము -Name[th]=เปิดหน้าต่างใหม่ -Name[tr]=Yeni pencere aç -Name[uk]=Відкрити нове вікно -Name[uz]=Yangi oyna ochish -Name[vi]=Mở cửa sổ mới -Name[xh]=Vula iwindow entsha -Name[zh_CN]=打开新窗口 -Name[zh_TW]=開啟新視窗 -Exec=firefox -new-window +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=/usr/lib/firefox/firefox --new-window %u -[Desktop Action NewPrivateWindow] -Name=New private window +[Desktop Action new-private-window] +Name=New Private Window Name[ach]=Dirica manyen me mung Name[af]=Nuwe privaatvenster -Name[an]=Nueva finestra de navegación privada +Name[an]=Nueva finestra privada Name[ar]=نافذة خاصة جديدة Name[as]=নতুন ব্যক্তিগত উইন্ডো Name[ast]=Ventana privada nueva -Name[az]=Yeni məxfi pəncərə +Name[az]=Yeni Məxfi Pəncərə Name[be]=Новае акно адасаблення Name[bg]=Нов прозорец за поверително сърфиране Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো -Name[bn_IN]=নতুন ব্যাক্তিগত উইন্ডো +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[cy]=Ffenestr Breifat Newydd Name[da]=Nyt privat vindue -Name[de]=Neues privates Fenster öffnen +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 @@ -293,60 +235,76 @@ Name[es_ES]=Nueva ventana privada Name[es_MX]=Nueva ventana privada Name[et]=Uus privaatne aken Name[eu]=Leiho pribatu berria -Name[ff]=Henorde suturo hesere +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[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[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 einkagluggi +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[ko]=새 사생활 보호 모드 +Name[kok]=नवो खाजगी विंडो +Name[ks]=نْو پرایوٹ وینڈو Name[lij]=Nêuvo barcón privòu -Name[lt]=Atverti privačiojo naršymo langą -Name[mai]=नव निज विंडो -Name[mk]=Нов прозорец за приватно сурфање +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 peribadi baharu +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 w trybie prywatnym +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ă fără urme nouă +Name[ro]=Fereastră privată nouă Name[ru]=Новое приватное окно -Name[si]=නව පුද්ගලික කවුළුව +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[sq]=Dritare e Re Private +Name[sr]=Нови приватан прозор Name[sv_SE]=Nytt privat fönster Name[ta]=புதிய தனிப்பட்ட சாளரம் Name[te]=కొత్త ఆంతరంగిక విండో -Name[th]=หน้าต่างท่องเว็บแบบส่วนตัวใหม่ +Name[th]=หน้าต่างส่วนตัวใหม่ Name[tr]=Yeni gizli pencere -Name[uk]=Нове приватне вікно -Name[uz]=Yangi shaxsiy oyna +Name[tsz]=Juchiiti eraatarakua jimpani +Name[uk]=Приватне вікно +Name[ur]=نیا نجی دریچہ +Name[uz]=Yangi maxfiy oyna Name[vi]=Cửa sổ riêng tư mới +Name[wo]=Panlanteeru biir bu bees Name[xh]=Ifestile yangasese entsha Name[zh_CN]=新建隐私浏览窗口 Name[zh_TW]=新增隱私視窗 -Exec=firefox -private-window +Exec=/usr/lib/firefox/firefox --private-window %u diff --git a/glibc-2.26-fix.diff b/glibc-2.26-fix.diff new file mode 100644 index 000000000000..48733ab899bb --- /dev/null +++ b/glibc-2.26-fix.diff @@ -0,0 +1,258 @@ +From 6a0b7c8ecf0734ba1bcdccf8e0ee97e721fd5420 Mon Sep 17 00:00:00 2001 +Message-Id: <6a0b7c8ecf0734ba1bcdccf8e0ee97e721fd5420.1505113337.git.jan.steffens@gmail.com> +From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= <emilio@crisal.io> +Date: Sat, 19 Aug 2017 20:14:25 +0200 +Subject: [PATCH] Fix use of struct ucontext (squash 2 commits) + +Needed for building with glibc 2.26. + +Bug 1385667: Use ucontext_t consistently in breakpad-client. r=ted +MozReview-Commit-ID: AJhzJdNXP0f + +Bug 1394149: Fix remaining uses of ucontext in breakpad-client. r=ted +MozReview-Commit-ID: 5tP7fXsI7dQ +--- + .../linux/dump_writer_common/ucontext_reader.cc | 30 +++++++++++----------- + .../linux/dump_writer_common/ucontext_reader.h | 10 ++++---- + .../linux/handler/exception_handler.cc | 10 ++++---- + .../linux/handler/exception_handler.h | 2 +- + .../linux/microdump_writer/microdump_writer.cc | 2 +- + .../linux/minidump_writer/minidump_writer.cc | 2 +- + 6 files changed, 28 insertions(+), 28 deletions(-) + +diff --git a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc +index 999960912e459e1b..303c0ebd32b663c4 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.cc +@@ -40,15 +40,15 @@ namespace google_breakpad { + + #if defined(__i386__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_ESP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_EIP]; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fp) { + const greg_t* regs = uc->uc_mcontext.gregs; + +@@ -88,15 +88,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + + #elif defined(__x86_64) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_RSP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[REG_RIP]; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fpregs) { + const greg_t* regs = uc->uc_mcontext.gregs; + +@@ -145,15 +145,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, + + #elif defined(__ARM_EABI__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.arm_sp; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.arm_pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { + out->context_flags = MD_CONTEXT_ARM_FULL; + + out->iregs[0] = uc->uc_mcontext.arm_r0; +@@ -184,41 +184,41 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { + + #elif defined(__aarch64__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.sp; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct fpsimd_context* fpregs) { + out->context_flags = MD_CONTEXT_ARM64_FULL; + + out->cpsr = static_cast<uint32_t>(uc->uc_mcontext.pstate); + for (int i = 0; i < MD_CONTEXT_ARM64_REG_SP; ++i) + out->iregs[i] = uc->uc_mcontext.regs[i]; + out->iregs[MD_CONTEXT_ARM64_REG_SP] = uc->uc_mcontext.sp; + out->iregs[MD_CONTEXT_ARM64_REG_PC] = uc->uc_mcontext.pc; + + out->float_save.fpsr = fpregs->fpsr; + out->float_save.fpcr = fpregs->fpcr; + my_memcpy(&out->float_save.regs, &fpregs->vregs, + MD_FLOATINGSAVEAREA_ARM64_FPR_COUNT * 16); + } + + #elif defined(__mips__) + +-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { + return uc->uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]; + } + +-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { ++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + return uc->uc_mcontext.pc; + } + +-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { ++void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { + #if _MIPS_SIM == _ABI64 + out->context_flags = MD_CONTEXT_MIPS64_FULL; + #elif _MIPS_SIM == _ABIO32 +diff --git a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h +index c533e28ba7441e83..039752a2dfb6e589 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h ++++ b/toolkit/crashreporter/breakpad-client/linux/dump_writer_common/ucontext_reader.h +@@ -41,21 +41,21 @@ namespace google_breakpad { + + // Wraps platform-dependent implementations of accessors to ucontext structs. + struct UContextReader { +- static uintptr_t GetStackPointer(const struct ucontext* uc); ++ static uintptr_t GetStackPointer(const ucontext_t* uc); + +- static uintptr_t GetInstructionPointer(const struct ucontext* uc); ++ static uintptr_t GetInstructionPointer(const ucontext_t* uc); + + // Juggle a arch-specific ucontext into a minidump format + // out: the minidump structure + // info: the collection of register structures. + #if defined(__i386__) || defined(__x86_64) +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc, ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct _libc_fpstate* fp); + #elif defined(__aarch64__) +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc, ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct fpsimd_context* fpregs); + #else +- static void FillCPUContext(RawContextCPU *out, const ucontext *uc); ++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc); + #endif + }; + +diff --git a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc +index 71a51a763938e39d..12df9bc96ec45fea 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.cc +@@ -439,44 +439,44 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) { + // Fill in all the holes in the struct to make Valgrind happy. + memset(&g_crash_context_, 0, sizeof(g_crash_context_)); + memcpy(&g_crash_context_.siginfo, info, sizeof(siginfo_t)); +- memcpy(&g_crash_context_.context, uc, sizeof(struct ucontext)); ++ memcpy(&g_crash_context_.context, uc, sizeof(ucontext_t)); + #if defined(__aarch64__) +- struct ucontext* uc_ptr = (struct ucontext*)uc; ++ ucontext_t* uc_ptr = (ucontext_t*)uc; + struct fpsimd_context* fp_ptr = + (struct fpsimd_context*)&uc_ptr->uc_mcontext.__reserved; + if (fp_ptr->head.magic == FPSIMD_MAGIC) { + memcpy(&g_crash_context_.float_state, fp_ptr, + sizeof(g_crash_context_.float_state)); + } + #elif !defined(__ARM_EABI__) && !defined(__mips__) + // FP state is not part of user ABI on ARM Linux. +- // In case of MIPS Linux FP state is already part of struct ucontext ++ // In case of MIPS Linux FP state is already part of ucontext_t + // and 'float_state' is not a member of CrashContext. +- struct ucontext* uc_ptr = (struct ucontext*)uc; ++ ucontext_t* uc_ptr = (ucontext_t*)uc; + if (uc_ptr->uc_mcontext.fpregs) { + memcpy(&g_crash_context_.float_state, uc_ptr->uc_mcontext.fpregs, + sizeof(g_crash_context_.float_state)); + } + #endif + g_crash_context_.tid = syscall(__NR_gettid); + if (crash_handler_ != NULL) { + if (crash_handler_(&g_crash_context_, sizeof(g_crash_context_), + callback_context_)) { + return true; + } + } + return GenerateDump(&g_crash_context_); + } + + // This is a public interface to HandleSignal that allows the client to + // generate a crash dump. This function may run in a compromised context. + bool ExceptionHandler::SimulateSignalDelivery(int sig) { + siginfo_t siginfo = {}; + // Mimic a trusted signal to allow tracing the process (see + // ExceptionHandler::HandleSignal(). + siginfo.si_code = SI_USER; + siginfo.si_pid = getpid(); +- struct ucontext context; ++ ucontext_t context; + getcontext(&context); + return HandleSignal(sig, &siginfo, &context); + } +diff --git a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h +index 711586fec7ddae59..be1880170e2826b0 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h ++++ b/toolkit/crashreporter/breakpad-client/linux/handler/exception_handler.h +@@ -191,7 +191,7 @@ class ExceptionHandler { + struct CrashContext { + siginfo_t siginfo; + pid_t tid; // the crashing thread. +- struct ucontext context; ++ ucontext_t context; + #if !defined(__ARM_EABI__) && !defined(__mips__) + // #ifdef this out because FP state is not part of user ABI for Linux ARM. + // In case of MIPS Linux FP state is already part of struct +diff --git a/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc b/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc +index ff20bf36584c876b..a0b90e08fc5f0cff 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/microdump_writer/microdump_writer.cc +@@ -571,7 +571,7 @@ class MicrodumpWriter { + + void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); } + +- const struct ucontext* const ucontext_; ++ const ucontext_t* const ucontext_; + #if !defined(__ARM_EABI__) && !defined(__mips__) + const google_breakpad::fpstate_t* const float_state_; + #endif +diff --git a/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc b/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc +index 0650bb95c179464a..6b5304bcd605ca3a 100644 +--- a/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc ++++ b/toolkit/crashreporter/breakpad-client/linux/minidump_writer/minidump_writer.cc +@@ -1247,7 +1247,7 @@ class MinidumpWriter { + const int fd_; // File descriptor where the minidum should be written. + const char* path_; // Path to the file where the minidum should be written. + +- const struct ucontext* const ucontext_; // also from the signal handler ++ const ucontext_t* const ucontext_; // also from the signal handler + #if !defined(__ARM_EABI__) && !defined(__mips__) + const google_breakpad::fpstate_t* const float_state_; // ditto + #endif +-- +2.14.1 + diff --git a/no-plt.diff b/no-plt.diff new file mode 100644 index 000000000000..9014f8b791c7 --- /dev/null +++ b/no-plt.diff @@ -0,0 +1,48 @@ +diff --git i/security/nss/lib/freebl/mpi/mpi_x86.s w/security/nss/lib/freebl/mpi/mpi_x86.s +index 8f7e2130c3264754..b3ca1ce5b41b3771 100644 +--- i/security/nss/lib/freebl/mpi/mpi_x86.s ++++ w/security/nss/lib/freebl/mpi/mpi_x86.s +@@ -22,22 +22,41 @@ is_sse: .long -1 + # + .ifndef NO_PIC + .macro GET var,reg +- movl \var@GOTOFF(%ebx),\reg ++ call thunk.ax ++ addl $_GLOBAL_OFFSET_TABLE_, %eax ++ movl \var@GOTOFF(%eax),\reg + .endm + .macro PUT reg,var +- movl \reg,\var@GOTOFF(%ebx) ++ call thunk.dx ++ addl $_GLOBAL_OFFSET_TABLE_, %edx ++ movl \reg,\var@GOTOFF(%edx) + .endm + .else + .macro GET var,reg + movl \var,\reg + .endm + .macro PUT reg,var + movl \reg,\var + .endm + .endif + + .text + ++.ifndef NO_PIC ++.globl thunk.ax ++.hidden thunk.ax ++.type thunk.ax, @function ++thunk.ax: ++ movl (%esp),%eax ++ ret ++ ++.globl thunk.dx ++.hidden thunk.dx ++.type thunk.dx, @function ++thunk.dx: ++ movl (%esp),%edx ++ ret ++.endif + + # ebp - 36: caller's esi + # ebp - 32: caller's edi diff --git a/plugin-crash.diff b/plugin-crash.diff new file mode 100644 index 000000000000..a9d0ce2e622d --- /dev/null +++ b/plugin-crash.diff @@ -0,0 +1,50 @@ + +# HG changeset patch +# User Jan Steffens <jan.steffens@gmail.com> +# Date 1505475854 -7200 +# Node ID 3cd2263687293a229277037090add3bea2531057 +# Parent 70f5f23a429f3d621e44307c191fa84c77fb2f61 +Bug 1400175 - Stub gdk_screen_get_monitor_workarea in mozgtk2; r?karlt + +MozReview-Commit-ID: 72K6U17JuoK + +diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c +--- a/widget/gtk/mozgtk/mozgtk.c ++++ b/widget/gtk/mozgtk/mozgtk.c +@@ -56,17 +56,16 @@ + STUB(gdk_screen_get_default) + STUB(gdk_screen_get_display) + STUB(gdk_screen_get_font_options) + STUB(gdk_screen_get_height) + STUB(gdk_screen_get_height_mm) + STUB(gdk_screen_get_n_monitors) + STUB(gdk_screen_get_monitor_at_window) + STUB(gdk_screen_get_monitor_geometry) +-STUB(gdk_screen_get_monitor_workarea) + STUB(gdk_screen_get_monitor_height_mm) + STUB(gdk_screen_get_number) + STUB(gdk_screen_get_resolution) + STUB(gdk_screen_get_rgba_visual) + STUB(gdk_screen_get_root_window) + STUB(gdk_screen_get_system_visual) + STUB(gdk_screen_get_width) + STUB(gdk_screen_height) +@@ -514,16 +513,17 @@ + #ifdef GTK3_SYMBOLS + STUB(gdk_device_get_source) + STUB(gdk_device_manager_get_client_pointer) + STUB(gdk_disable_multidevice) + STUB(gdk_device_manager_list_devices) + STUB(gdk_display_get_device_manager) + STUB(gdk_error_trap_pop_ignored) + STUB(gdk_event_get_source_device) ++STUB(gdk_screen_get_monitor_workarea) + STUB(gdk_window_get_type) + STUB(gdk_window_get_window_type) + STUB(gdk_x11_window_get_xid) + STUB(gdk_x11_display_get_type) + STUB(gdk_wayland_display_get_type) + STUB(gtk_box_new) + STUB(gtk_cairo_should_draw_window) + STUB(gtk_cairo_transform_to_window) + diff --git a/upload-symbol-archive b/upload-symbol-archive new file mode 100755 index 000000000000..3a7b45c82277 --- /dev/null +++ b/upload-symbol-archive @@ -0,0 +1,23 @@ +#!/bin/bash -e + +die() { + echo >&2 "$@" + exit 1 +} + +(( $# >= 2 )) || die "Usage: $0 TOKEN-FILE SYMBOL-ARCHIVE..." +token="$1" +shift + +[[ -f $token && -s $token ]] || die "Invalid TOKEN-FILE ${token@Q}" + +for zip; do + [[ $(file -Ebi "$zip") == application/zip* ]] || die "Invalid SYMBOL-ARCHIVE ${zip@Q}" +done + +for zip; do + echo >&2 "Uploading ${zip@Q} ..." + curl -X POST -H "Auth-Token: $(<"$token")" -F "${zip##*/}=@$zip" \ + https://crash-stats.mozilla.com/symbols/upload + echo +done diff --git a/wifi-disentangle.patch b/wifi-disentangle.patch new file mode 100644 index 000000000000..8f474b9c0fec --- /dev/null +++ b/wifi-disentangle.patch @@ -0,0 +1,245 @@ +# HG changeset patch +# Parent 2edd69b245fbc493c3a1cf17c40c63b0280ead12 +Bug 1314968 - Disentangle nsWifiScannerDBus::SendMessage. r?kanru + +Make a copy of the function and specialize it for each message sent. +Avoids the mess of comparing the method name to figure out what to do. + +diff --git a/netwerk/wifi/nsWifiScannerDBus.cpp b/netwerk/wifi/nsWifiScannerDBus.cpp +--- a/netwerk/wifi/nsWifiScannerDBus.cpp ++++ b/netwerk/wifi/nsWifiScannerDBus.cpp +@@ -34,19 +34,47 @@ nsWifiScannerDBus::Scan() + if (!mConnection) { + return NS_ERROR_NOT_AVAILABLE; + } +- return SendMessage("org.freedesktop.NetworkManager", +- "/org/freedesktop/NetworkManager", +- "GetDevices"); ++ return SendGetDevices(); + } + ++// http://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html ++// Refer to function dbus_connection_send_with_reply_and_block. ++static const uint32_t DBUS_DEFAULT_TIMEOUT = -1; ++ + nsresult +-nsWifiScannerDBus::SendMessage(const char* aInterface, +- const char* aPath, +- const char* aFuncCall) +-{ +- RefPtr<DBusMessage> msg = already_AddRefed<DBusMessage>( +- dbus_message_new_method_call("org.freedesktop.NetworkManager", +- aPath, aInterface, aFuncCall)); ++nsWifiScannerDBus::SendGetDevices() ++{ ++ RefPtr<DBusMessage> msg = already_AddRefed<DBusMessage>( ++ dbus_message_new_method_call("org.freedesktop.NetworkManager", ++ "/org/freedesktop/NetworkManager", ++ "org.freedesktop.NetworkManager", ++ "GetDevices")); ++ if (!msg) { ++ return NS_ERROR_FAILURE; ++ } ++ ++ DBusError err; ++ dbus_error_init(&err); ++ ++ RefPtr<DBusMessage> reply = already_AddRefed<DBusMessage>( ++ dbus_connection_send_with_reply_and_block(mConnection, msg, ++ DBUS_DEFAULT_TIMEOUT, &err)); ++ if (dbus_error_is_set(&err)) { ++ dbus_error_free(&err); ++ return NS_ERROR_FAILURE; ++ } ++ ++ return IdentifyDevices(reply); ++} ++ ++nsresult ++nsWifiScannerDBus::SendGetDeviceType(const char* aPath) ++{ ++ RefPtr<DBusMessage> msg = already_AddRefed<DBusMessage>( ++ dbus_message_new_method_call("org.freedesktop.NetworkManager", ++ aPath, ++ "org.freedesktop.DBus.Properties", ++ "Get")); + if (!msg) { + return NS_ERROR_FAILURE; + } +@@ -54,58 +82,92 @@ nsWifiScannerDBus::SendMessage(const cha + DBusMessageIter argsIter; + dbus_message_iter_init_append(msg, &argsIter); + +- if (!strcmp(aFuncCall, "Get")) { +- const char* paramInterface = "org.freedesktop.NetworkManager.Device"; +- if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, +- ¶mInterface)) { +- return NS_ERROR_FAILURE; +- } +- +- const char* paramDeviceType = "DeviceType"; +- if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, +- ¶mDeviceType)) { +- return NS_ERROR_FAILURE; +- } +- } else if (!strcmp(aFuncCall, "GetAll")) { +- const char* param = ""; +- if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, ¶m)) { +- return NS_ERROR_FAILURE; +- } +- } ++ const char* paramInterface = "org.freedesktop.NetworkManager.Device"; ++ if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, ++ ¶mInterface)) { ++ return NS_ERROR_FAILURE; ++ } ++ ++ const char* paramDeviceType = "DeviceType"; ++ if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, ++ ¶mDeviceType)) { ++ return NS_ERROR_FAILURE; ++ } ++ ++ DBusError err; ++ dbus_error_init(&err); ++ ++ RefPtr<DBusMessage> reply = already_AddRefed<DBusMessage>( ++ dbus_connection_send_with_reply_and_block(mConnection, msg, ++ DBUS_DEFAULT_TIMEOUT, &err)); ++ if (dbus_error_is_set(&err)) { ++ dbus_error_free(&err); ++ return NS_ERROR_FAILURE; ++ } ++ ++ return IdentifyDeviceType(reply, aPath); ++} ++ ++nsresult ++nsWifiScannerDBus::SendGetAccessPoints(const char* aPath) ++{ ++ RefPtr<DBusMessage> msg = already_AddRefed<DBusMessage>( ++ dbus_message_new_method_call("org.freedesktop.NetworkManager", ++ aPath, ++ "org.freedesktop.NetworkManager.Device.Wireless", ++ "GetAccessPoints")); ++ if (!msg) { ++ return NS_ERROR_FAILURE; ++ } + + DBusError err; + dbus_error_init(&err); + +- // http://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html +- // Refer to function dbus_connection_send_with_reply_and_block. +- const uint32_t DBUS_DEFAULT_TIMEOUT = -1; + RefPtr<DBusMessage> reply = already_AddRefed<DBusMessage>( + dbus_connection_send_with_reply_and_block(mConnection, msg, + DBUS_DEFAULT_TIMEOUT, &err)); + if (dbus_error_is_set(&err)) { + dbus_error_free(&err); +- + // In the GetAccessPoints case, if there are no access points, error is set. + // We don't want to error out here. +- if (!strcmp(aFuncCall, "GetAccessPoints")) { +- return NS_OK; +- } +- return NS_ERROR_FAILURE; ++ return NS_OK; + } + +- nsresult rv; +- if (!strcmp(aFuncCall, "GetDevices")) { +- rv = IdentifyDevices(reply); +- } else if (!strcmp(aFuncCall, "Get")) { +- rv = IdentifyDeviceType(reply, aPath); +- } else if (!strcmp(aFuncCall, "GetAccessPoints")) { +- rv = IdentifyAccessPoints(reply); +- } else if (!strcmp(aFuncCall, "GetAll")) { +- rv = IdentifyAPProperties(reply); +- } else { +- rv = NS_ERROR_FAILURE; +- } +- return rv; ++ return IdentifyAccessPoints(reply); ++} ++ ++nsresult ++nsWifiScannerDBus::SendGetAPProperties(const char* aPath) ++{ ++ RefPtr<DBusMessage> msg = already_AddRefed<DBusMessage>( ++ dbus_message_new_method_call("org.freedesktop.NetworkManager", ++ aPath, ++ "org.freedesktop.DBus.Properties", ++ "GetAll")); ++ if (!msg) { ++ return NS_ERROR_FAILURE; ++ } ++ ++ DBusMessageIter argsIter; ++ dbus_message_iter_init_append(msg, &argsIter); ++ ++ const char* param = ""; ++ if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, ¶m)) { ++ return NS_ERROR_FAILURE; ++ } ++ ++ DBusError err; ++ dbus_error_init(&err); ++ ++ RefPtr<DBusMessage> reply = already_AddRefed<DBusMessage>( ++ dbus_connection_send_with_reply_and_block(mConnection, msg, ++ DBUS_DEFAULT_TIMEOUT, &err)); ++ if (dbus_error_is_set(&err)) { ++ dbus_error_free(&err); ++ return NS_ERROR_FAILURE; ++ } ++ ++ return IdentifyAPProperties(reply); + } + + nsresult +@@ -126,7 +188,7 @@ nsWifiScannerDBus::IdentifyDevices(DBusM + return NS_ERROR_FAILURE; + } + +- rv = SendMessage("org.freedesktop.DBus.Properties", devicePath, "Get"); ++ rv = SendGetDeviceType(devicePath); + NS_ENSURE_SUCCESS(rv, rv); + } while (dbus_message_iter_next(&iter)); + +@@ -159,8 +221,7 @@ nsWifiScannerDBus::IdentifyDeviceType(DB + const uint32_t NM_DEVICE_TYPE_WIFI = 2; + nsresult rv = NS_OK; + if (deviceType == NM_DEVICE_TYPE_WIFI) { +- rv = SendMessage("org.freedesktop.NetworkManager.Device.Wireless", +- aDevicePath, "GetAccessPoints"); ++ rv = SendGetAccessPoints(aDevicePath); + } + + return rv; +@@ -183,7 +244,7 @@ nsWifiScannerDBus::IdentifyAccessPoints( + return NS_ERROR_FAILURE; + } + +- rv = SendMessage("org.freedesktop.DBus.Properties", path, "GetAll"); ++ rv = SendGetAPProperties(path); + NS_ENSURE_SUCCESS(rv, rv); + } while (dbus_message_iter_next(&iter)); + +diff --git a/netwerk/wifi/nsWifiScannerDBus.h b/netwerk/wifi/nsWifiScannerDBus.h +--- a/netwerk/wifi/nsWifiScannerDBus.h ++++ b/netwerk/wifi/nsWifiScannerDBus.h +@@ -25,9 +25,10 @@ public: + nsresult Scan(); + + private: +- nsresult SendMessage(const char* aInterface, +- const char* aPath, +- const char* aFuncCall); ++ nsresult SendGetDevices(); ++ nsresult SendGetDeviceType(const char* aPath); ++ nsresult SendGetAccessPoints(const char* aPath); ++ nsresult SendGetAPProperties(const char* aPath); + nsresult IdentifyDevices(DBusMessage* aMsg); + nsresult IdentifyDeviceType(DBusMessage* aMsg, const char* aDevicePath); + nsresult IdentifyAccessPoints(DBusMessage* aMsg); diff --git a/wifi-fix-interface.patch b/wifi-fix-interface.patch new file mode 100644 index 000000000000..1980db1837e7 --- /dev/null +++ b/wifi-fix-interface.patch @@ -0,0 +1,26 @@ +# HG changeset patch +# Parent 7a6d836b62779aa61988981c6ca646495574a505 +Bug 1314968 - Explicitly specify the AccessPoint interface name. r?kanru + +The DBus specification allows passing an empty string as the interface to the +org.freedesktop.DBus.Properties.GetAll call to get all properties, throwing away the namespace +(interface) information. + +However, GDBus does not allow this. When NetworkManager moved to using GDBus, Firefox lost the +ability to retrieve access points from NetworkManager. + +Since we're only interested in properties from the org.freedesktop.NetworkManager.AccessPoint +interface, name it explicitly. This works with both the old and the new NetworkManager. + +diff --git a/netwerk/wifi/nsWifiScannerDBus.cpp b/netwerk/wifi/nsWifiScannerDBus.cpp +--- a/netwerk/wifi/nsWifiScannerDBus.cpp ++++ b/netwerk/wifi/nsWifiScannerDBus.cpp +@@ -151,7 +151,7 @@ nsWifiScannerDBus::SendGetAll(const char + DBusMessageIter argsIter; + dbus_message_iter_init_append(msg, &argsIter); + +- const char* param = ""; ++ const char* param = "org.freedesktop.NetworkManager.AccessPoint"; + if (!dbus_message_iter_append_basic(&argsIter, DBUS_TYPE_STRING, ¶m)) { + return NS_ERROR_FAILURE; + } |