summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorw2016-03-09 10:02:39 +0100
committerw2016-03-09 10:02:39 +0100
commit8ecd837fbcedd559a5fd9afc566b9696f030bf86 (patch)
treec48349b4ce6e2e1b4c170f54f8b4b531bc8d0504
downloadaur-8ecd837fbcedd559a5fd9afc566b9696f030bf86.tar.gz
Initial commit
-rw-r--r--.SRCINFO58
-rw-r--r--PKGBUILD76
-rw-r--r--firefox-38-disable-location.services.mozilla.com.patch25
-rw-r--r--firefox-38-disable-loop.patch757
-rw-r--r--firefox-38-disable-sponsored-tiles.patch181
-rw-r--r--firefox-38-prefs.patch107
-rw-r--r--firefox-fixed-loading-icon.pngbin0 -> 12184 bytes
-rw-r--r--firefox-install-dir.patch12
-rw-r--r--firefox.desktop12
-rw-r--r--firefox.install13
-rw-r--r--mozconfig43
11 files changed, 1284 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..2c55165532f4
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,58 @@
+# Generated by makepkg 5.0.0
+# Wed Mar 9 09:01:22 UTC 2016
+pkgbase = firefox-esr-privacy
+ pkgdesc = Standalone web browser from mozilla.org
+ pkgver = 38.6.1
+ pkgrel = 1
+ url = https://www.mozilla.org/firefox/
+ install = firefox.install
+ arch = i686
+ arch = x86_64
+ license = MPL
+ license = GPL
+ license = LGPL
+ makedepends = unzip
+ makedepends = zip
+ makedepends = diffutils
+ makedepends = python2
+ makedepends = yasm
+ makedepends = mesa
+ makedepends = xorg-server
+ makedepends = inetutils
+ depends = gtk3
+ depends = gtk2
+ depends = libxt
+ depends = startup-notification
+ depends = dbus-glib
+ depends = alsa-lib
+ depends = desktop-file-utils
+ depends = hicolor-icon-theme
+ depends = libvpx
+ depends = icu
+ depends = libevent
+ depends = nss
+ depends = hunspell
+ depends = sqlite
+ options = !emptydirs
+ source = https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/38.6.1esr/source/firefox-38.6.1esr.source.tar.bz2
+ source = firefox-install-dir.patch
+ source = firefox-38-disable-location.services.mozilla.com.patch
+ source = firefox-38-disable-loop.patch
+ source = firefox-38-disable-sponsored-tiles.patch
+ source = firefox-38-prefs.patch
+ source = firefox.desktop
+ source = firefox-fixed-loading-icon.png
+ source = mozconfig
+ validpgpkeys = 2B90598A745E992F315E22C58AB132963A06537A
+ sha256sums = 91174d0118ac7178b5902bd6e82743b4eab5d567ec6431abebf4da093ffbd0ff
+ sha256sums = d86e41d87363656ee62e12543e2f5181aadcff448e406ef3218e91865ae775cd
+ sha256sums = 67a3aa79643837965902118927a37cecd098a83696d7e1b58e2040ce82b823df
+ sha256sums = 1579b3221638ab012782d898c26014024ccae02363b7be674c3192e1b8031608
+ sha256sums = 6e0dcac677bf2e47df6a56b30c153e8bbd712fab7d4f7c05fc27c83bf60afbd9
+ sha256sums = c618470c7cc8e42fd8b582980d94a132efad8a3533093703cbfc10169f036f70
+ sha256sums = 0bcfe168964338ec9c6e781479f2f8d06aa44f2262d6405ff8fa42983be89630
+ sha256sums = 68e3a5b47c6d175cc95b98b069a15205f027cab83af9e075818d38610feb6213
+ sha256sums = 7b6729423fba99e45c022c1d5638554c0e6f19ff5ef79c466861a9418062ce4c
+
+pkgname = firefox-esr-privacy
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..c202243c9218
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,76 @@
+pkgname=firefox-esr-privacy
+_basever=38
+_pkgdir=mozilla-esr${_basever}
+pkgver=38.6.1
+pkgrel=1
+pkgdesc="Standalone web browser from mozilla.org"
+arch=('i686' 'x86_64')
+license=('MPL' 'GPL' 'LGPL')
+url="https://www.mozilla.org/firefox/"
+depends=('gtk3' 'gtk2' 'libxt' 'startup-notification'
+ 'dbus-glib' 'alsa-lib' 'desktop-file-utils' 'hicolor-icon-theme'
+ 'libvpx' 'icu' 'libevent' 'nss' 'hunspell' 'sqlite')
+makedepends=('unzip' 'zip' 'diffutils' 'python2' 'yasm' 'mesa' 'xorg-server' 'inetutils')
+install=firefox.install
+options=('!emptydirs')
+source=(https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${pkgver}esr/source/firefox-${pkgver}esr.source.tar.bz2
+ firefox-install-dir.patch
+ firefox-${_basever}-disable-location.services.mozilla.com.patch
+ firefox-${_basever}-disable-loop.patch
+ firefox-${_basever}-disable-sponsored-tiles.patch
+ firefox-${_basever}-prefs.patch
+ firefox.desktop
+ firefox-fixed-loading-icon.png
+ mozconfig)
+sha256sums=('91174d0118ac7178b5902bd6e82743b4eab5d567ec6431abebf4da093ffbd0ff'
+ 'd86e41d87363656ee62e12543e2f5181aadcff448e406ef3218e91865ae775cd'
+ '67a3aa79643837965902118927a37cecd098a83696d7e1b58e2040ce82b823df'
+ '1579b3221638ab012782d898c26014024ccae02363b7be674c3192e1b8031608'
+ '6e0dcac677bf2e47df6a56b30c153e8bbd712fab7d4f7c05fc27c83bf60afbd9'
+ 'c618470c7cc8e42fd8b582980d94a132efad8a3533093703cbfc10169f036f70'
+ '0bcfe168964338ec9c6e781479f2f8d06aa44f2262d6405ff8fa42983be89630'
+ '68e3a5b47c6d175cc95b98b069a15205f027cab83af9e075818d38610feb6213'
+ '7b6729423fba99e45c022c1d5638554c0e6f19ff5ef79c466861a9418062ce4c')
+validpgpkeys=('2B90598A745E992F315E22C58AB132963A06537A')
+
+prepare() {
+ cd ${_pkgdir}
+
+ cp ${srcdir}/mozconfig mozconfig
+
+ # Disable sponsored tiles
+ patch -Np1 -i ${srcdir}/firefox-${_basever}-disable-sponsored-tiles.patch
+ # Disable Loop (Firefox Hello)
+ patch -Np1 -i ${srcdir}/firefox-${_basever}-disable-loop.patch
+ # Disable geo IP lookup on first run
+ patch -Np1 -i ${srcdir}/firefox-${_basever}-disable-location.services.mozilla.com.patch
+ # Set some sensible defaults
+ patch -Np1 -i ${srcdir}/firefox-${_basever}-prefs.patch
+ # Fix build with Fontconfig 2.6
+ sed -i '/^ftcache.h/a ftfntfmt.h' config/system-headers
+ # Fix tab loading icon not working with libpng 1.6
+ cp ${srcdir}/firefox-fixed-loading-icon.png browser/themes/linux/tabbrowser/loading.png
+ # Install in /usr/lib/firefox without version number
+ patch -Np1 -i ${srcdir}/firefox-install-dir.patch
+}
+
+build() {
+ cd ${_pkgdir}
+
+ # Fix configure: error: Your toolchain does not support C++0x/C++11 mode properly. Please upgrade your toolchain
+ unset CPPFLAGS
+
+ make -f client.mk
+}
+
+package() {
+ cd ${_pkgdir}
+ make -f client.mk DESTDIR="$pkgdir" INSTALL_SDK= install
+
+ install -Dm644 ${srcdir}/firefox.desktop "$pkgdir/usr/share/applications/firefox.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"
+}
diff --git a/firefox-38-disable-location.services.mozilla.com.patch b/firefox-38-disable-location.services.mozilla.com.patch
new file mode 100644
index 000000000000..241df5b52b91
--- /dev/null
+++ b/firefox-38-disable-location.services.mozilla.com.patch
@@ -0,0 +1,25 @@
+--- mozilla-esr38.bak/toolkit/components/search/nsSearchService.js 2015-11-05
++++ mozilla-esr38/toolkit/components/search/nsSearchService.js 2015-11-05
+@@ -442,6 +442,10 @@
+ if (Services.prefs.prefHasUserValue("browser.search.region")) {
+ 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
+@@ -528,6 +532,11 @@
+ Services.prefs.getCharPref("browser.search.countryCode");
+ return; // pref exists, so we've done this before.
+ } catch(e) {}
++
++ // No countryCode set, use US as default, don't contact location.services.mozilla.com
++ Services.prefs.setCharPref("browser.search.countryCode", "US");
++ return;
++
+ // We don't have it cached, so fetch it. fetchCountryCode() will call
+ // storeCountryCode if it gets a result (even if that happens after the
+ // promise resolves)
diff --git a/firefox-38-disable-loop.patch b/firefox-38-disable-loop.patch
new file mode 100644
index 000000000000..3ef2fbd3b92e
--- /dev/null
+++ b/firefox-38-disable-loop.patch
@@ -0,0 +1,757 @@
+diff -Naur mozilla-esr38.bak/browser/app/profile/firefox.js mozilla-esr38/browser/app/profile/firefox.js
+--- mozilla-esr38.bak/browser/app/profile/firefox.js 2015-09-16 18:44:17.000000000 +0200
++++ mozilla-esr38/browser/app/profile/firefox.js 2015-10-01 23:03:06.769052088 +0200
+@@ -1687,43 +1687,6 @@
+ // (This is intentionally on the high side; see bug 746055.)
+ pref("image.mem.max_decoded_image_kb", 256000);
+
+-pref("loop.enabled", false);
+-pref("loop.screenshare.enabled", false);
+-pref("loop.server", "https://loop.services.mozilla.com/v0");
+-pref("loop.seenToS", "unseen");
+-pref("loop.showPartnerLogo", true);
+-pref("loop.gettingStarted.seen", false);
+-pref("loop.gettingStarted.url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/hello/start/");
+-pref("loop.gettingStarted.resumeOnFirstJoin", false);
+-pref("loop.learnMoreUrl", "https://www.firefox.com/hello/");
+-pref("loop.legal.ToS_url", "https://www.mozilla.org/about/legal/terms/firefox-hello/");
+-pref("loop.legal.privacy_url", "https://www.mozilla.org/privacy/firefox-hello/");
+-pref("loop.do_not_disturb", false);
+-pref("loop.ringtone", "chrome://browser/content/loop/shared/sounds/ringtone.ogg");
+-pref("loop.retry_delay.start", 60000);
+-pref("loop.retry_delay.limit", 300000);
+-pref("loop.ping.interval", 1800000);
+-pref("loop.ping.timeout", 10000);
+-pref("loop.feedback.baseUrl", "https://input.mozilla.org/api/v1/feedback");
+-pref("loop.feedback.product", "Loop");
+-pref("loop.debug.loglevel", "Error");
+-pref("loop.debug.dispatcher", false);
+-pref("loop.debug.websocket", false);
+-pref("loop.debug.sdk", false);
+-#ifdef DEBUG
+-pref("loop.CSP", "default-src 'self' about: file: chrome: http://localhost:*; img-src 'self' data: https://www.gravatar.com/ about: file: chrome:; font-src 'none'; connect-src wss://*.tokbox.com https://*.opentok.com https://*.tokbox.com wss://*.mozilla.com https://*.mozilla.org wss://*.mozaws.net http://localhost:* ws://localhost:*; media-src blob:");
+-#else
+-pref("loop.CSP", "default-src 'self' about: file: chrome:; img-src 'self' data: https://www.gravatar.com/ about: file: chrome:; font-src 'none'; connect-src wss://*.tokbox.com https://*.opentok.com https://*.tokbox.com wss://*.mozilla.com https://*.mozilla.org wss://*.mozaws.net; media-src blob:");
+-#endif
+-pref("loop.oauth.google.redirect_uri", "urn:ietf:wg:oauth:2.0:oob:auto");
+-pref("loop.oauth.google.scope", "https://www.google.com/m8/feeds");
+-pref("loop.fxa_oauth.tokendata", "");
+-pref("loop.fxa_oauth.profile", "");
+-pref("loop.support_url", "https://support.mozilla.org/kb/group-conversations-firefox-hello-webrtc");
+-pref("loop.contacts.gravatars.show", false);
+-pref("loop.contacts.gravatars.promo", true);
+-pref("loop.browserSharing.showInfoBar", true);
+-
+ // serverURL to be assigned by services team
+ pref("services.push.serverURL", "wss://push.services.mozilla.com/");
+
+diff -Naur mozilla-esr38.bak/browser/base/content/browser.css mozilla-esr38/browser/base/content/browser.css
+--- mozilla-esr38.bak/browser/base/content/browser.css 2015-09-16 18:44:17.000000000 +0200
++++ mozilla-esr38/browser/base/content/browser.css 2015-10-01 23:04:52.384053457 +0200
+@@ -14,30 +14,6 @@
+ %endif
+ }
+
+-/* These values are chosen to keep the Loop detached chat window from
+- * getting too small. When it's too small, three bad things happen:
+- *
+- * - It looks terrible
+- * - It's not really usable
+- * - It's possible for the user to be transmitting video that's cropped by the
+- * the edge of the window, so that they're not aware of it, which is a
+- * privacy problem
+- *
+- * Note that if the chat window grows more users than Loop who want this
+- * ability, we'll need to generalize. A partial patch for this is in
+- * bug 1112264.
+- */
+-
+-#chat-window {
+- /*
+- * In some ideal world, we'd have a simple way to express "block resizing
+- * along any dimension beyond the point at which an overflow event would
+- * occur". But none of -moz-{fit,max,min}-content do what we want here. So..
+- */
+- min-width: 320px;
+- min-height: 280px;
+-}
+-
+ #main-window[customize-entered] {
+ min-width: -moz-fit-content;
+ }
+@@ -899,11 +875,6 @@
+ -moz-binding: url("chrome://browser/content/translation-infobar.xml#translationbar");
+ }
+
+-/* Loop/ Hello */
+-notification[value="loop-sharing-notification"] .close-icon {
+- display: none;
+-}
+-
+ /* Social */
+ /* Note the chatbox 'width' values are duplicated in socialchat.xml */
+ chatbox {
+--- mozilla-esr38.bak/browser/base/content/browser.js 2015-10-02 10:25:01.208060687 +0200
++++ mozilla-esr38/browser/base/content/browser.js 2015-10-02 10:30:54.430065264 +0200
+@@ -232,7 +232,6 @@
+ #include browser-fullScreen.js
+ #include browser-fullZoom.js
+ #include browser-gestureSupport.js
+-#include browser-loop.js
+ #include browser-places.js
+ #include browser-plugins.js
+ #include browser-readinglist.js
+@@ -1356,8 +1355,6 @@
+ gDataNotificationInfoBar.init();
+ #endif
+
+- LoopUI.init();
+-
+ gBrowserThumbnails.init();
+
+ // Add Devtools menuitems and listeners
+@@ -1530,7 +1527,6 @@
+ TabView.uninit();
+ SocialUI.uninit();
+ gBrowserThumbnails.uninit();
+- LoopUI.uninit();
+ FullZoom.destroy();
+
+ Services.obs.removeObserver(gSessionHistoryObserver, "browser:purge-session-history");
+diff -Naur mozilla-esr38.bak/browser/base/content/browser.xul mozilla-esr38/browser/base/content/browser.xul
+--- mozilla-esr38.bak/browser/base/content/browser.xul 2015-09-16 18:44:17.000000000 +0200
++++ mozilla-esr38/browser/base/content/browser.xul 2015-10-01 23:06:27.242054686 +0200
+@@ -292,18 +292,6 @@
+ noautofocus="true"
+ position="topcenter topright"/>
+
+- <panel id="loop-notification-panel"
+- class="loop-panel social-panel"
+- type="arrow"
+- hidden="true"
+- noautofocus="true"/>
+-
+- <panel id="loop-panel"
+- class="loop-panel social-panel"
+- type="arrow"
+- orient="horizontal"
+- hidden="true"/>
+-
+ <menupopup id="processHangOptions"
+ onpopupshowing="ProcessHangMonitor.refreshMenu(window);">
+ <menuitem id="processHangTerminateScript"
+@@ -730,9 +718,9 @@
+ fullscreentoolbar="true" mode="icons" customizable="true"
+ iconsize="small"
+ #ifdef MOZ_DEV_EDITION
+- defaultset="urlbar-container,search-container,developer-button,bookmarks-menu-button,downloads-button,home-button,loop-button"
++ defaultset="urlbar-container,search-container,developer-button,bookmarks-menu-button,downloads-button,home-button"
+ #else
+- defaultset="urlbar-container,search-container,bookmarks-menu-button,downloads-button,home-button,loop-button"
++ defaultset="urlbar-container,search-container,bookmarks-menu-button,downloads-button,home-button"
+ #endif
+ customizationtarget="nav-bar-customization-target"
+ overflowable="true"
+diff -Naur mozilla-esr38.bak/browser/components/customizableui/content/panelUI.inc.xul mozilla-esr38/browser/components/customizableui/content/panelUI.inc.xul
+--- mozilla-esr38.bak/browser/components/customizableui/content/panelUI.inc.xul 2015-09-16 18:44:18.000000000 +0200
++++ mozilla-esr38/browser/components/customizableui/content/panelUI.inc.xul 2015-10-01 23:07:14.215055294 +0200
+@@ -157,8 +157,6 @@
+
+ <panelview id="PanelUI-socialapi" flex="1"/>
+
+- <panelview id="PanelUI-loopapi" flex="1"/>
+-
+ <panelview id="PanelUI-feeds" flex="1" oncommand="FeedHandler.subscribeToFeed(null, event);">
+ <label value="&feedsMenu.label;" class="panel-subview-header"/>
+ </panelview>
+diff -Naur mozilla-esr38.bak/browser/components/customizableui/CustomizableUI.jsm mozilla-esr38/browser/components/customizableui/CustomizableUI.jsm
+--- mozilla-esr38.bak/browser/components/customizableui/CustomizableUI.jsm 2015-09-16 18:44:18.000000000 +0200
++++ mozilla-esr38/browser/components/customizableui/CustomizableUI.jsm 2015-10-01 23:07:47.877055731 +0200
+@@ -210,7 +210,6 @@
+ "bookmarks-menu-button",
+ "downloads-button",
+ "home-button",
+- "loop-button",
+ ];
+
+ if (Services.prefs.getBoolPref(kPrefWebIDEInNavbar)) {
+@@ -308,15 +307,6 @@
+ }
+ }
+ }
+-
+- if (currentVersion < 2) {
+- // Nuke the old 'loop-call-button' out of orbit.
+- CustomizableUI.removeWidgetFromArea("loop-call-button");
+- }
+-
+- if (currentVersion < 4) {
+- CustomizableUI.removeWidgetFromArea("loop-button-throttled");
+- }
+ },
+
+ wrapWidget: function(aWidgetId) {
+diff -Naur mozilla-esr38.bak/browser/components/customizableui/CustomizableWidgets.jsm mozilla-esr38/browser/components/customizableui/CustomizableWidgets.jsm
+--- mozilla-esr38.bak/browser/components/customizableui/CustomizableWidgets.jsm 2015-09-16 18:44:18.000000000 +0200
++++ mozilla-esr38/browser/components/customizableui/CustomizableWidgets.jsm 2015-10-01 23:08:18.342056125 +0200
+@@ -925,35 +925,6 @@
+ win.MailIntegration.sendLinkForBrowser(win.gBrowser.selectedBrowser)
+ }
+ }, {
+- id: "loop-button",
+- type: "custom",
+- label: "loop-call-button3.label",
+- tooltiptext: "loop-call-button3.tooltiptext",
+- defaultArea: CustomizableUI.AREA_NAVBAR,
+- // Not in private browsing, see bug 1108187.
+- showInPrivateBrowsing: false,
+- introducedInVersion: 4,
+- onBuild: function(aDocument) {
+- // If we're not supposed to see the button, return zip.
+- if (!Services.prefs.getBoolPref("loop.enabled")) {
+- return null;
+- }
+-
+- let node = aDocument.createElementNS(kNSXUL, "toolbarbutton");
+- node.setAttribute("id", this.id);
+- node.classList.add("toolbarbutton-1");
+- node.classList.add("chromeclass-toolbar-additional");
+- node.classList.add("badged-button");
+- node.setAttribute("label", CustomizableUI.getLocalizedProperty(this, "label"));
+- node.setAttribute("tooltiptext", CustomizableUI.getLocalizedProperty(this, "tooltiptext"));
+- node.setAttribute("removable", "true");
+- node.addEventListener("command", function(event) {
+- aDocument.defaultView.LoopUI.togglePanel(event);
+- });
+-
+- return node;
+- }
+- }, {
+ id: "web-apps-button",
+ label: "web-apps-button.label",
+ tooltiptext: "web-apps-button.tooltiptext",
+diff -Naur mozilla-esr38.bak/browser/components/moz.build mozilla-esr38/browser/components/moz.build
+--- mozilla-esr38.bak/browser/components/moz.build 2015-09-16 18:44:18.000000000 +0200
++++ mozilla-esr38/browser/components/moz.build 2015-10-01 23:08:39.447056399 +0200
+@@ -10,7 +10,6 @@
+ 'dirprovider',
+ 'downloads',
+ 'feeds',
+- 'loop',
+ 'migration',
+ 'places',
+ 'preferences',
+diff -Naur mozilla-esr38.bak/browser/components/uitour/UITour.jsm mozilla-esr38/browser/components/uitour/UITour.jsm
+--- mozilla-esr38.bak/browser/components/uitour/UITour.jsm 2015-09-16 18:44:19.000000000 +0200
++++ mozilla-esr38/browser/components/uitour/UITour.jsm 2015-10-01 23:11:24.277058535 +0200
+@@ -134,60 +134,6 @@
+ query: "#panic-button",
+ widgetName: "panic-button",
+ }],
+- ["loop", {
+- allowAdd: true,
+- query: "#loop-button",
+- widgetName: "loop-button",
+- }],
+- ["loop-newRoom", {
+- infoPanelPosition: "leftcenter topright",
+- query: (aDocument) => {
+- let loopUI = aDocument.defaultView.LoopUI;
+- if (loopUI.selectedTab != "rooms") {
+- return null;
+- }
+- // Use the parentElement full-width container of the button so our arrow
+- // doesn't overlap the panel contents much.
+- return loopUI.browser.contentDocument.querySelector(".new-room-button").parentElement;
+- },
+- }],
+- ["loop-roomList", {
+- infoPanelPosition: "leftcenter topright",
+- query: (aDocument) => {
+- let loopUI = aDocument.defaultView.LoopUI;
+- if (loopUI.selectedTab != "rooms") {
+- return null;
+- }
+- return loopUI.browser.contentDocument.querySelector(".room-list");
+- },
+- }],
+- ["loop-selectedRoomButtons", {
+- infoPanelOffsetY: -20,
+- infoPanelPosition: "start_after",
+- query: (aDocument) => {
+- let chatbox = aDocument.querySelector("chatbox[src^='about\:loopconversation'][selected]");
+-
+- // Check that the real target actually exists
+- if (!chatbox || !chatbox.contentDocument ||
+- !chatbox.contentDocument.querySelector(".call-action-group")) {
+- return null;
+- }
+-
+- // But anchor on the <browser> in the chatbox so the panel doesn't jump to undefined
+- // positions when the copy/email buttons disappear e.g. when the feedback form opens or
+- // somebody else joins the room.
+- return chatbox.content;
+- },
+- }],
+- ["loop-signInUpLink", {
+- query: (aDocument) => {
+- let loopBrowser = aDocument.defaultView.LoopUI.browser;
+- if (!loopBrowser) {
+- return null;
+- }
+- return loopBrowser.contentDocument.querySelector(".signin-link");
+- },
+- }],
+ ["privateWindow", {query: "#privatebrowsing-button"}],
+ ["quit", {query: "#PanelUI-quit"}],
+ ["readerMode-urlBar", {query: "#reader-mode-button"}],
+@@ -830,15 +776,11 @@
+ this.hideInfo(aWindow);
+ // Ensure the menu panel is hidden before calling recreatePopup so popup events occur.
+ this.hideMenu(aWindow, "appMenu");
+- this.hideMenu(aWindow, "loop");
+
+ // Clean up panel listeners after calling hideMenu above.
+ aWindow.PanelUI.panel.removeEventListener("popuphiding", this.hideAppMenuAnnotations);
+ aWindow.PanelUI.panel.removeEventListener("ViewShowing", this.hideAppMenuAnnotations);
+ aWindow.PanelUI.panel.removeEventListener("popuphidden", this.onPanelHidden);
+- let loopPanel = aWindow.document.getElementById("loop-notification-panel");
+- loopPanel.removeEventListener("popuphidden", this.onPanelHidden);
+- loopPanel.removeEventListener("popuphiding", this.hideLoopPanelAnnotations);
+
+ this.endUrlbarCapture(aWindow);
+ this.resetTheme();
+@@ -1506,31 +1448,6 @@
+ } else if (aMenuName == "bookmarks") {
+ let menuBtn = aWindow.document.getElementById("bookmarks-menu-button");
+ openMenuButton(menuBtn);
+- } else if (aMenuName == "loop") {
+- let toolbarButton = aWindow.LoopUI.toolbarButton;
+- // It's possible to have a node that isn't placed anywhere
+- if (!toolbarButton || !toolbarButton.node ||
+- !CustomizableUI.getPlacementOfWidget(toolbarButton.node.id)) {
+- log.debug("Can't show the Loop menu since the toolbarButton isn't placed");
+- return;
+- }
+-
+- let panel = aWindow.document.getElementById("loop-notification-panel");
+- panel.setAttribute("noautohide", true);
+- if (panel.state != "open") {
+- this.recreatePopup(panel);
+- this.availableTargetsCache.clear();
+- }
+-
+- // An event object is expected but we don't want to toggle the panel with a click if the panel
+- // is already open.
+- aWindow.LoopUI.openCallPanel({ target: toolbarButton.node, }, "rooms").then(() => {
+- if (aOpenCallback) {
+- aOpenCallback();
+- }
+- });
+- panel.addEventListener("popuphidden", this.onPanelHidden);
+- panel.addEventListener("popuphiding", this.hideLoopPanelAnnotations);
+ } else if (aMenuName == "searchEngines") {
+ this.getTarget(aWindow, "searchProvider").then(target => {
+ openMenuButton(target.node);
+@@ -1550,9 +1467,6 @@
+ } else if (aMenuName == "bookmarks") {
+ let menuBtn = aWindow.document.getElementById("bookmarks-menu-button");
+ closeMenuButton(menuBtn);
+- } else if (aMenuName == "loop") {
+- let panel = aWindow.document.getElementById("loop-notification-panel");
+- panel.hidePopup();
+ } else if (aMenuName == "searchEngines") {
+ let menuBtn = this.targets.get("searchProvider").query(aWindow.document);
+ closeMenuButton(menuBtn);
+@@ -1588,12 +1502,6 @@
+ UITour.hideAnnotationsForPanel(aEvent, UITour.targetIsInAppMenu);
+ },
+
+- hideLoopPanelAnnotations: function(aEvent) {
+- UITour.hideAnnotationsForPanel(aEvent, (aTarget) => {
+- return aTarget.targetName.startsWith("loop-") && aTarget.targetName != "loop-selectedRoomButtons";
+- });
+- },
+-
+ onPanelHidden: function(aEvent) {
+ aEvent.target.removeAttribute("noautohide");
+ UITour.recreatePopup(aEvent.target);
+@@ -1659,11 +1567,6 @@
+ case "availableTargets":
+ this.getAvailableTargets(aMessageManager, aWindow, aCallbackID);
+ break;
+- case "loop":
+- this.sendPageCallback(aMessageManager, aCallbackID, {
+- gettingStartedSeen: Services.prefs.getBoolPref("loop.gettingStarted.seen"),
+- });
+- break;
+ case "selectedSearchEngine":
+ Services.search.init(rv => {
+ let engine;
+@@ -1690,10 +1593,6 @@
+
+ setConfiguration: function(aConfiguration, aValue) {
+ switch (aConfiguration) {
+- case "Loop:ResumeTourOnFirstJoin":
+- // Ignore aValue in this case to avoid accidentally setting it to false.
+- Services.prefs.setBoolPref("loop.gettingStarted.resumeOnFirstJoin", true);
+- break;
+ default:
+ log.error("setConfiguration: Unknown configuration requested: " + aConfiguration);
+ break;
+diff -Naur mozilla-esr38.bak/browser/locales/jar.mn mozilla-esr38/browser/locales/jar.mn
+--- mozilla-esr38.bak/browser/locales/jar.mn 2015-09-16 18:44:21.000000000 +0200
++++ mozilla-esr38/browser/locales/jar.mn 2015-10-01 23:11:56.637058954 +0200
+@@ -77,7 +77,6 @@
+ locale/browser/devtools/webide.dtd (%chrome/browser/devtools/webide.dtd)
+ locale/browser/devtools/webide.properties (%chrome/browser/devtools/webide.properties)
+ locale/browser/lightweightThemes.properties (%chrome/browser/lightweightThemes.properties)
+- locale/browser/loop/loop.properties (%chrome/browser/loop/loop.properties)
+ locale/browser/newTab.dtd (%chrome/browser/newTab.dtd)
+ locale/browser/newTab.properties (%chrome/browser/newTab.properties)
+ locale/browser/pageInfo.dtd (%chrome/browser/pageInfo.dtd)
+diff -Naur mozilla-esr38.bak/browser/themes/linux/browser.css mozilla-esr38/browser/themes/linux/browser.css
+--- mozilla-esr38.bak/browser/themes/linux/browser.css 2015-09-16 18:44:21.000000000 +0200
++++ mozilla-esr38/browser/themes/linux/browser.css 2015-10-01 23:12:11.744059150 +0200
+@@ -1485,16 +1485,6 @@
+ -moz-image-region: rect(0px, 32px, 16px, 16px);
+ }
+
+-/* Loop/ Hello browser styles */
+-
+-notification[value="loop-sharing-notification"] .button-menubutton-button {
+- min-width: 0;
+-}
+-
+-notification[value="loop-sharing-notification"] .messageImage {
+- list-style-image: url(chrome://browser/skin/webRTC-shareScreen-16.png);
+-}
+-
+ #treecolAutoCompleteImage {
+ max-width : 36px;
+ }
+diff -Naur mozilla-esr38.bak/browser/themes/linux/jar.mn mozilla-esr38/browser/themes/linux/jar.mn
+--- mozilla-esr38.bak/browser/themes/linux/jar.mn 2015-09-16 18:44:21.000000000 +0200
++++ mozilla-esr38/browser/themes/linux/jar.mn 2015-10-01 23:12:39.757059513 +0200
+@@ -109,9 +109,6 @@
+ skin/classic/browser/webRTC-camera-white-16.png (../shared/webrtc/camera-white-16.png)
+ skin/classic/browser/webRTC-microphone-white-16.png (../shared/webrtc/microphone-white-16.png)
+ skin/classic/browser/webRTC-screen-white-16.png (../shared/webrtc/screen-white-16.png)
+- skin/classic/browser/loop/menuPanel.png (loop/menuPanel.png)
+- skin/classic/browser/loop/toolbar.png (loop/toolbar.png)
+- skin/classic/browser/loop/toolbar-inverted.png (loop/toolbar-inverted.png)
+ skin/classic/browser/customizableui/background-noise-toolbar.png (customizableui/background-noise-toolbar.png)
+ skin/classic/browser/customizableui/customize-illustration.png (../shared/customizableui/customize-illustration.png)
+ skin/classic/browser/customizableui/customize-illustration-rtl.png (../shared/customizableui/customize-illustration-rtl.png)
+diff -Naur mozilla-esr38.bak/browser/themes/osx/browser.css mozilla-esr38/browser/themes/osx/browser.css
+--- mozilla-esr38.bak/browser/themes/osx/browser.css 2015-09-16 18:44:21.000000000 +0200
++++ mozilla-esr38/browser/themes/osx/browser.css 2015-10-01 23:13:36.994060255 +0200
+@@ -1441,76 +1441,6 @@
+ list-style-image: url(chrome://browser/skin/menuPanel-small@2x.png);
+ -moz-image-region: rect(0px, 192px, 32px, 160px);
+ }
+-
+- #loop-button > .toolbarbutton-badge-container {
+- list-style-image: url("chrome://browser/skin/loop/toolbar@2x.png");
+- -moz-image-region: rect(0, 36px, 36px, 0);
+- }
+-
+- toolbar[brighttext] #loop-button > .toolbarbutton-badge-container {
+- list-style-image: url("chrome://browser/skin/loop/toolbar-inverted@2x.png");
+- }
+-
+- #loop-button[state="disabled"] > .toolbarbutton-badge-container,
+- #loop-button[disabled="true"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 72px, 36px, 36px);
+- }
+-
+- #loop-button:not([disabled="true"])[state="error"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 108px, 36px, 72px);
+- }
+-
+- #loop-button:not([disabled="true"])[state="action"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 144px, 36px, 108px);
+- }
+-
+- #loop-button:not([disabled="true"])[state="action"]:-moz-any(:hover,:hover:active,[open]) > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 180px, 36px, 144px);
+- }
+-
+- #loop-button:not([disabled="true"])[state="active"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 216px, 36px, 180px);
+- }
+-
+- #loop-button:not([disabled="true"])[state="active"]:-moz-any(:hover,:hover:active,[open]) > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 252px, 36px, 216px);
+- }
+-
+- #loop-button[cui-areatype="menu-panel"] > .toolbarbutton-badge-container,
+- toolbarpaletteitem[place="palette"] > #loop-button > .toolbarbutton-badge-container {
+- list-style-image: url(chrome://browser/skin/loop/menuPanel@2x.png);
+- -moz-image-region: rect(0, 64px, 64px, 0);
+- }
+-
+- /* Make sure that the state icons are not shown in the customization palette. */
+- toolbarpaletteitem[place="palette"] > #loop-button > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 64px, 64px, 0) !important;
+- }
+-
+- #loop-button[cui-areatype="menu-panel"][state="disabled"] > .toolbarbutton-badge-container,
+- #loop-button[cui-areatype="menu-panel"][disabled="true"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 128px, 64px, 64px);
+- }
+-
+- #loop-button[cui-areatype="menu-panel"]:not([disabled="true"])[state="error"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 192px, 64px, 128px);
+- }
+-
+- #loop-button[cui-areatype="menu-panel"]:not([disabled="true"])[state="action"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 256px, 64px, 192px);
+- }
+-
+- #loop-button[cui-areatype="menu-panel"]:not([disabled="true"])[state="action"]:-moz-any(:hover,:hover:active,[open]) > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 320px, 64px, 256px);
+- }
+-
+- #loop-button[cui-areatype="menu-panel"]:not([disabled="true"])[state="active"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 384px, 64px, 320px);
+- }
+-
+- #loop-button[cui-areatype="menu-panel"]:not([disabled="true"])[state="active"]:-moz-any(:hover,:hover:active,[open]) > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 448px, 64px, 384px);
+- }
+ }
+
+ toolbar .toolbarbutton-1:not([type="menu-button"]),
+@@ -4098,28 +4028,6 @@
+ }
+ }
+
+-/* Loop/ Hello browser styles */
+-
+-notification[value="loop-sharing-notification"] .notification-button {
+- padding: 1px 5px;
+-}
+-
+-notification[value="loop-sharing-notification"] .button-menubutton-button {
+- -moz-appearance: none;
+- min-width: 0;
+- margin: 0;
+-}
+-
+-notification[value="loop-sharing-notification"] .messageImage {
+- list-style-image: url(chrome://browser/skin/webRTC-sharingScreen-menubar.png);
+-}
+-@media (min-resolution: 2dppx) {
+- notification[value="loop-sharing-notification"] .messageImage {
+- list-style-image: url(chrome://browser/skin/webRTC-sharingScreen-menubar@2x.png);
+- }
+-}
+-
+-
+ .popup-notification-icon {
+ width: 64px;
+ height: 64px;
+diff -Naur mozilla-esr38.bak/browser/themes/osx/jar.mn mozilla-esr38/browser/themes/osx/jar.mn
+--- mozilla-esr38.bak/browser/themes/osx/jar.mn 2015-09-16 18:44:21.000000000 +0200
++++ mozilla-esr38/browser/themes/osx/jar.mn 2015-10-01 23:13:56.447060507 +0200
+@@ -171,16 +171,6 @@
+ skin/classic/browser/webRTC-sharingScreen-menubar.png
+ skin/classic/browser/webRTC-sharingScreen-menubar@2x.png
+ skin/classic/browser/webRTC-indicator.css
+- skin/classic/browser/loop/menuPanel.png (loop/menuPanel.png)
+- skin/classic/browser/loop/menuPanel@2x.png (loop/menuPanel@2x.png)
+- skin/classic/browser/loop/toolbar.png (loop/toolbar.png)
+- skin/classic/browser/loop/toolbar@2x.png (loop/toolbar@2x.png)
+- skin/classic/browser/loop/toolbar-inverted.png (loop/toolbar-inverted.png)
+- skin/classic/browser/loop/toolbar-inverted@2x.png (loop/toolbar-inverted@2x.png)
+- skin/classic/browser/yosemite/loop/menuPanel.png (loop/menuPanel-yosemite.png)
+- skin/classic/browser/yosemite/loop/menuPanel@2x.png (loop/menuPanel-yosemite@2x.png)
+- skin/classic/browser/yosemite/loop/toolbar.png (loop/toolbar-yosemite.png)
+- skin/classic/browser/yosemite/loop/toolbar@2x.png (loop/toolbar-yosemite@2x.png)
+ skin/classic/browser/customizableui/background-noise-toolbar.png (customizableui/background-noise-toolbar.png)
+ skin/classic/browser/customizableui/customize-titleBar-toggle.png (customizableui/customize-titleBar-toggle.png)
+ skin/classic/browser/customizableui/customize-titleBar-toggle@2x.png (customizableui/customize-titleBar-toggle@2x.png)
+@@ -602,10 +592,6 @@
+ % override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/yosemite/Toolbar@2x.png os=Darwin osversion>=10.10
+ % override chrome://browser/skin/menuPanel.png chrome://browser/skin/yosemite/menuPanel.png os=Darwin osversion>=10.10
+ % override chrome://browser/skin/menuPanel@2x.png chrome://browser/skin/yosemite/menuPanel@2x.png os=Darwin osversion>=10.10
+-% override chrome://browser/skin/loop/menuPanel.png chrome://browser/skin/yosemite/loop/menuPanel.png os=Darwin osversion>=10.10
+-% override chrome://browser/skin/loop/menuPanel@2x.png chrome://browser/skin/yosemite/loop/menuPanel@2x.png os=Darwin osversion>=10.10
+-% override chrome://browser/skin/loop/toolbar.png chrome://browser/skin/yosemite/loop/toolbar.png os=Darwin osversion>=10.10
+-% override chrome://browser/skin/loop/toolbar@2x.png chrome://browser/skin/yosemite/loop/toolbar@2x.png os=Darwin osversion>=10.10
+ % override chrome://browser/skin/menuPanel-customize.png chrome://browser/skin/yosemite/menuPanel-customize.png os=Darwin osversion>=10.10
+ % override chrome://browser/skin/menuPanel-customize@2x.png chrome://browser/skin/yosemite/menuPanel-customize@2x.png os=Darwin osversion>=10.10
+ % override chrome://browser/skin/menuPanel-exit.png chrome://browser/skin/yosemite/menuPanel-exit.png os=Darwin osversion>=10.10
+diff -Naur mozilla-esr38.bak/browser/themes/shared/browser.inc mozilla-esr38/browser/themes/shared/browser.inc
+--- mozilla-esr38.bak/browser/themes/shared/browser.inc 2015-09-16 18:44:21.000000000 +0200
++++ mozilla-esr38/browser/themes/shared/browser.inc 2015-10-01 23:14:24.276060867 +0200
+@@ -2,7 +2,7 @@
+
+ % Note that zoom-reset-button is a bit different since it doesn't use an image and thus has the image with display: none.
+ %define nestedButtons #zoom-out-button, #zoom-reset-button, #zoom-in-button, #cut-button, #copy-button, #paste-button
+-%define primaryToolbarButtons #back-button, #forward-button, #home-button, #print-button, #downloads-button, #bookmarks-menu-button, #new-tab-button, #new-window-button, #fullscreen-button, #sync-button, #feed-button, #tabview-button, #social-share-button, #open-file-button, #find-button, #developer-button, #preferences-button, #privatebrowsing-button, #save-page-button, #switch-to-metro-button, #add-ons-button, #history-panelmenu, #nav-bar-overflow-button, #PanelUI-menu-button, #characterencoding-button, #email-link-button, #sidebar-button, @nestedButtons@, #e10s-button, #panic-button, #web-apps-button, #webide-button, #loop-button
++%define primaryToolbarButtons #back-button, #forward-button, #home-button, #print-button, #downloads-button, #bookmarks-menu-button, #new-tab-button, #new-window-button, #fullscreen-button, #sync-button, #feed-button, #tabview-button, #social-share-button, #open-file-button, #find-button, #developer-button, #preferences-button, #privatebrowsing-button, #save-page-button, #switch-to-metro-button, #add-ons-button, #history-panelmenu, #nav-bar-overflow-button, #PanelUI-menu-button, #characterencoding-button, #email-link-button, #sidebar-button, @nestedButtons@, #e10s-button, #panic-button, #web-apps-button, #webide-button
+
+ %ifdef XP_MACOSX
+ % Prior to 10.7 there wasn't a native fullscreen button so we use #restore-button to exit fullscreen
+diff -Naur mozilla-esr38.bak/browser/themes/shared/menupanel.inc.css mozilla-esr38/browser/themes/shared/menupanel.inc.css
+--- mozilla-esr38.bak/browser/themes/shared/menupanel.inc.css 2015-09-16 18:44:22.000000000 +0200
++++ mozilla-esr38/browser/themes/shared/menupanel.inc.css 2015-10-01 23:14:43.060061111 +0200
+@@ -175,42 +175,6 @@
+ -moz-image-region: rect(0, 832px, 32px, 800px);
+ }
+
+-#loop-button[cui-areatype="menu-panel"] > .toolbarbutton-badge-container,
+-toolbarpaletteitem[place="palette"] > #loop-button > .toolbarbutton-badge-container {
+- list-style-image: url(chrome://browser/skin/loop/menuPanel.png);
+- -moz-image-region: rect(0, 32px, 32px, 0);
+-}
+-
+-/* Make sure that the state icons are not shown in the customization palette. */
+-toolbarpaletteitem[place="palette"] > #loop-button > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 32px, 32px, 0) !important;
+-}
+-
+-#loop-button[cui-areatype="menu-panel"][state="disabled"] > .toolbarbutton-badge-container,
+-#loop-button[cui-areatype="menu-panel"][disabled="true"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 64px, 32px, 32px);
+-}
+-
+-#loop-button[cui-areatype="menu-panel"]:not([disabled="true"])[state="error"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 96px, 32px, 64px);
+-}
+-
+-#loop-button[cui-areatype="menu-panel"]:not([disabled="true"])[state="action"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 128px, 32px, 96px);
+-}
+-
+-#loop-button[cui-areatype="menu-panel"]:not([disabled="true"])[state="action"]:-moz-any(:hover,:hover:active,[open]) > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 160px, 32px, 128px);
+-}
+-
+-#loop-button[cui-areatype="menu-panel"]:not([disabled="true"])[state="active"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 192px, 32px, 160px);
+-}
+-
+-#loop-button[cui-areatype="menu-panel"]:not([disabled="true"])[state="active"]:-moz-any(:hover,:hover:active,[open]) > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 224px, 32px, 192px);
+-}
+-
+ /* Wide panel control icons */
+
+ #edit-controls@inAnyPanel@ > toolbarbutton,
+diff -Naur mozilla-esr38.bak/browser/themes/shared/toolbarbuttons.inc.css mozilla-esr38/browser/themes/shared/toolbarbuttons.inc.css
+--- mozilla-esr38.bak/browser/themes/shared/toolbarbuttons.inc.css 2015-09-16 18:44:22.000000000 +0200
++++ mozilla-esr38/browser/themes/shared/toolbarbuttons.inc.css 2015-10-01 23:15:01.476061349 +0200
+@@ -200,40 +200,6 @@
+ }
+ %endif
+
+-#loop-button > .toolbarbutton-badge-container {
+- list-style-image: url(chrome://browser/skin/loop/toolbar.png);
+- -moz-image-region: rect(0, 18px, 18px, 0);
+-}
+-
+-toolbar[brighttext] #loop-button > .toolbarbutton-badge-container {
+- list-style-image: url(chrome://browser/skin/loop/toolbar-inverted.png);
+-}
+-
+-#loop-button[state="disabled"] > .toolbarbutton-badge-container,
+-#loop-button[disabled="true"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 36px, 18px, 18px);
+-}
+-
+-#loop-button:not([disabled="true"])[state="error"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 54px, 18px, 36px);
+-}
+-
+-#loop-button:not([disabled="true"])[state="action"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 72px, 18px, 54px);
+-}
+-
+-#loop-button:not([disabled="true"])[state="action"]:-moz-any(:hover,:hover:active,[open]) > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 90px, 18px, 72px);
+-}
+-
+-#loop-button:not([disabled="true"])[state="active"] > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 108px, 18px, 90px);
+-}
+-
+-#loop-button:not([disabled="true"])[state="active"]:-moz-any(:hover,:hover:active,[open]) > .toolbarbutton-badge-container {
+- -moz-image-region: rect(0, 126px, 18px, 108px);
+-}
+-
+ #webide-button[cui-areatype="toolbar"] {
+ -moz-image-region: rect(0, 738px, 18px, 720px);
+ }
+diff -Naur mozilla-esr38.bak/browser/themes/windows/browser.css mozilla-esr38/browser/themes/windows/browser.css
+--- mozilla-esr38.bak/browser/themes/windows/browser.css 2015-09-16 18:44:22.000000000 +0200
++++ mozilla-esr38/browser/themes/windows/browser.css 2015-10-01 23:15:21.836061613 +0200
+@@ -595,10 +595,6 @@
+ #bookmarks-menu-button.toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon {
+ list-style-image: url("chrome://browser/skin/Toolbar-lunaSilver.png");
+ }
+-
+- #loop-button > .toolbarbutton-badge-container {
+- list-style-image: url(chrome://browser/skin/loop/toolbar-lunaSilver.png)
+- }
+ }
+ %endif
+
+@@ -2503,19 +2499,6 @@
+ -moz-appearance: none;
+ }
+
+-/* Loop/ Hello browser styles */
+-
+-notification[value="loop-sharing-notification"] .button-menubutton-button {
+- -moz-appearance: none;
+- min-width: 0;
+- border: 0;
+- margin: 0;
+-}
+-
+-notification[value="loop-sharing-notification"] .messageImage {
+- list-style-image: url(chrome://browser/skin/webRTC-shareScreen-16.png);
+-}
+-
+ /* Bookmarks roots menu-items */
+ #subscribeToPageMenuitem:not([disabled]),
+ #subscribeToPageMenupopup,
+diff -Naur mozilla-esr38.bak/browser/themes/windows/jar.mn mozilla-esr38/browser/themes/windows/jar.mn
+--- mozilla-esr38.bak/browser/themes/windows/jar.mn 2015-09-16 18:44:22.000000000 +0200
++++ mozilla-esr38/browser/themes/windows/jar.mn 2015-10-01 23:15:51.276061995 +0200
+@@ -131,10 +131,6 @@
+ skin/classic/browser/webRTC-camera-white-16.png (../shared/webrtc/camera-white-16.png)
+ skin/classic/browser/webRTC-microphone-white-16.png (../shared/webrtc/microphone-white-16.png)
+ skin/classic/browser/webRTC-screen-white-16.png (../shared/webrtc/screen-white-16.png)
+- skin/classic/browser/loop/menuPanel.png (loop/menuPanel.png)
+- skin/classic/browser/loop/toolbar.png (loop/toolbar-XP.png)
+- skin/classic/browser/loop/toolbar-inverted.png (loop/toolbar-inverted.png)
+- skin/classic/browser/loop/toolbar-lunaSilver.png (loop/toolbar-lunaSilver.png)
+ skin/classic/browser/customizableui/background-noise-toolbar.png (customizableui/background-noise-toolbar.png)
+ skin/classic/browser/customizableui/customizeFavicon.ico (../shared/customizableui/customizeFavicon.ico)
+ skin/classic/browser/customizableui/customize-illustration.png (../shared/customizableui/customize-illustration.png)
+@@ -600,11 +596,6 @@
+ skin/classic/aero/browser/webRTC-camera-white-16.png (../shared/webrtc/camera-white-16.png)
+ skin/classic/aero/browser/webRTC-microphone-white-16.png (../shared/webrtc/microphone-white-16.png)
+ skin/classic/aero/browser/webRTC-screen-white-16.png (../shared/webrtc/screen-white-16.png)
+- skin/classic/aero/browser/loop/menuPanel.png (loop/menuPanel.png)
+- skin/classic/aero/browser/loop/menuPanel-aero.png (loop/menuPanel-aero.png)
+- skin/classic/aero/browser/loop/toolbar.png (loop/toolbar.png)
+- skin/classic/aero/browser/loop/toolbar-aero.png (loop/toolbar-aero.png)
+- skin/classic/aero/browser/loop/toolbar-inverted.png (loop/toolbar-inverted.png)
+ skin/classic/aero/browser/customizableui/background-noise-toolbar.png (customizableui/background-noise-toolbar.png)
+ skin/classic/aero/browser/customizableui/customize-illustration.png (../shared/customizableui/customize-illustration.png)
+ skin/classic/aero/browser/customizableui/customize-illustration-rtl.png (../shared/customizableui/customize-illustration-rtl.png)
+@@ -968,9 +959,3 @@
+
+ % override chrome://browser/skin/tabbrowser/tab-arrow-left.png chrome://browser/skin/tabbrowser/tab-arrow-left-XPVista7.png os=WINNT osversion=6
+ % override chrome://browser/skin/tabbrowser/tab-arrow-left.png chrome://browser/skin/tabbrowser/tab-arrow-left-XPVista7.png os=WINNT osversion=6.1
+-
+-% override chrome://browser/skin/loop/toolbar.png chrome://browser/skin/loop/toolbar-aero.png os=WINNT osversion=6
+-% override chrome://browser/skin/loop/toolbar.png chrome://browser/skin/loop/toolbar-aero.png os=WINNT osversion=6.1
+-
+-% override chrome://browser/skin/loop/menuPanel.png chrome://browser/skin/loop/menuPanel-aero.png os=WINNT osversion=6
+-% override chrome://browser/skin/loop/menuPanel.png chrome://browser/skin/loop/menuPanel-aero.png os=WINNT osversion=6.1
diff --git a/firefox-38-disable-sponsored-tiles.patch b/firefox-38-disable-sponsored-tiles.patch
new file mode 100644
index 000000000000..d83365fc4ab0
--- /dev/null
+++ b/firefox-38-disable-sponsored-tiles.patch
@@ -0,0 +1,181 @@
+--- mozilla-esr38.bak/browser/modules/DirectoryLinksProvider.jsm 2015-10-01 22:55:45.276046367 +0200
++++ mozilla-esr38/browser/modules/DirectoryLinksProvider.jsm 2015-10-01 22:57:17.964047568 +0200
+@@ -33,16 +33,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";
+@@ -108,30 +108,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";
+ },
+
+@@ -188,43 +164,6 @@
+ },
+
+ _fetchAndCacheLinks: function DirectoryLinksProvider_fetchAndCacheLinks(uri) {
+- // Replace with the same display locale used for selecting links data
+- uri = uri.replace("%LOCALE%", this.locale);
+-
+- let deferred = Promise.defer();
+- let xmlHttp = new XMLHttpRequest();
+-
+- let self = this;
+- xmlHttp.onload = function(aResponse) {
+- let json = this.responseText;
+- if (this.status && this.status != 200) {
+- json = "{}";
+- }
+- OS.File.writeAtomic(self._directoryFilePath, json, {tmpPath: self._directoryFilePath + ".tmp"})
+- .then(() => {
+- deferred.resolve();
+- },
+- () => {
+- deferred.reject("Error writing uri data in profD.");
+- });
+- };
+-
+- 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;
+ },
+
+ /**
+@@ -232,30 +171,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();
+ },
+
+ /**
+@@ -309,51 +224,6 @@
+ }
+ catch (ex) {}
+
+- // Only send pings when enhancing tiles with an endpoint and valid action
+- let invalidAction = PING_ACTIONS.indexOf(action) == -1;
+- if (!newtabEnhanced || pingEndPoint == "" || invalidAction) {
+- return Promise.resolve();
+- }
+-
+- let actionIndex;
+- let data = {
+- locale: this.locale,
+- tiles: sites.reduce((tiles, site, pos) => {
+- // Only add data for non-empty tiles
+- if (site) {
+- // Remember which tiles data triggered the action
+- let {link} = site;
+- let tilesIndex = tiles.length;
+- if (triggeringSiteIndex == pos) {
+- actionIndex = tilesIndex;
+- }
+-
+- // Make the payload in a way so keys can be excluded when stringified
+- let id = link.directoryId;
+- tiles.push({
+- id: id || site.enhancedId,
+- pin: site.isPinned() ? 1 : undefined,
+- pos: pos != tilesIndex ? pos : undefined,
+- score: Math.round(link.frecency / PING_SCORE_DIVISOR) || undefined,
+- url: site.enhancedId && "",
+- });
+- }
+- return tiles;
+- }, []),
+- };
+-
+- // Provide a direct index to the tile triggering the action
+- if (actionIndex !== undefined) {
+- data[action] = actionIndex;
+- }
+-
+- // Package the data to be sent with the ping
+- let ping = new XMLHttpRequest();
+- ping.open("POST", pingEndPoint + (action == "view" ? "view" : "click"));
+- ping.send(JSON.stringify(data));
+-
+- // Use this as an opportunity to potentially fetch new links
+- return this._fetchAndCacheLinksIfNecessary();
+ },
+
+ /**
diff --git a/firefox-38-prefs.patch b/firefox-38-prefs.patch
new file mode 100644
index 000000000000..0d1dd3bed6ee
--- /dev/null
+++ b/firefox-38-prefs.patch
@@ -0,0 +1,107 @@
+--- mozilla-esr38.bak/browser/branding/official/pref/firefox-branding.js 2015-10-27 10:35:06.279469072 +0100
++++ mozilla-esr38/browser/branding/official/pref/firefox-branding.js 2015-10-27 11:45:37.837884736 +0100
+@@ -3,7 +3,7 @@
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ pref("startup.homepage_override_url","");
+-pref("startup.homepage_welcome_url","");
++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
+--- mozilla-esr38.bak/services/healthreport/healthreport-prefs.js 2015-10-27 10:35:06.443469088 +0100
++++ mozilla-esr38/services/healthreport/healthreport-prefs.js 2015-10-27 11:57:35.057955188 +0100
+@@ -18,9 +18,9 @@
+ pref("datareporting.healthreport.pendingDeleteRemoteData", false);
+
+ // Health Report is enabled by default on all channels.
+-pref("datareporting.healthreport.uploadEnabled", true);
++pref("datareporting.healthreport.uploadEnabled", false);
+
+-pref("datareporting.healthreport.service.enabled", true);
++pref("datareporting.healthreport.service.enabled", false);
+ pref("datareporting.healthreport.service.loadDelayMsec", 10000);
+ pref("datareporting.healthreport.service.loadDelayFirstRunMsec", 60000);
+
+--- mozilla-esr38.bak/browser/app/profile/firefox.js 2015-10-27 10:35:06.353469080 +0100
++++ mozilla-esr38/browser/app/profile/firefox.js 2015-10-27 11:51:27.217919055 +0100
+@@ -267,12 +267,12 @@
+ #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);
+
+ // 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");
+
+ pref("browser.slowStartup.notificationDisabled", false);
+@@ -442,7 +442,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);
+@@ -1629,7 +1629,7 @@
+ pref("browser.newtab.preload", true);
+
+ // Remembers if the about:newtab intro has been shown
+-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);
+--- mozilla-esr38.bak/modules/libpref/init/all.js 2015-10-27 10:35:06.654469109 +0100
++++ mozilla-esr38/modules/libpref/init/all.js 2015-10-27 11:57:53.203956970 +0100
+@@ -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);
+@@ -449,7 +449,7 @@
+ #if defined(XP_WIN) || defined(XP_MACOSX)
+ pref("media.mediasource.enabled", true);
+ #else
+-pref("media.mediasource.enabled", false);
++pref("media.mediasource.enabled", true);
+ #endif
+
+ #ifdef RELEASE_BUILD
+@@ -2312,7 +2312,7 @@
+ // Player ("Shockwave for Director"). To hide all plugins from enumeration, use
+ // the empty string "" to match no plugin names. To allow all plugins to be
+ // enumerated, use the string "*" to match all plugin names.
+-pref("plugins.enumerable_names", "*");
++pref("plugins.enumerable_names", "");
+
+ // The default value for nsIPluginTag.enabledState (STATE_ENABLED = 2)
+ pref("plugin.default.state", 2);
+@@ -3400,7 +3400,7 @@
+
+ // Middle-mouse handling
+ pref("middlemouse.paste", true);
+-pref("middlemouse.contentLoadURL", true);
++pref("middlemouse.contentLoadURL", false);
+ pref("middlemouse.openNewWindow", true);
+ pref("middlemouse.scrollbarPosition", true);
+
+@@ -3712,7 +3712,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);
diff --git a/firefox-fixed-loading-icon.png b/firefox-fixed-loading-icon.png
new file mode 100644
index 000000000000..55f25e591ff5
--- /dev/null
+++ b/firefox-fixed-loading-icon.png
Binary files differ
diff --git a/firefox-install-dir.patch b/firefox-install-dir.patch
new file mode 100644
index 000000000000..51fe4ba0a855
--- /dev/null
+++ b/firefox-install-dir.patch
@@ -0,0 +1,12 @@
+diff -up firefox-29.0/mozilla-release/config/baseconfig.mk.orig firefox-29.0/mozilla-release/config/baseconfig.mk
+--- mozilla-release/config/baseconfig.mk.orig 2014-04-22 15:38:52.948165295 +0200
++++ mozilla-release/config/baseconfig.mk 2014-04-22 15:42:20.387481673 +0200
+@@ -4,7 +4,7 @@
+ # whether a normal build is happening or whether the check is running.
+ includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
+ idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
+-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
++installdir = $(libdir)/$(MOZ_APP_NAME)
+ sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION)
+ ifndef TOP_DIST
+ TOP_DIST = dist
diff --git a/firefox.desktop b/firefox.desktop
new file mode 100644
index 000000000000..22515aa72c79
--- /dev/null
+++ b/firefox.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Firefox Web Browser
+Comment=Browse the World Wide Web
+GenericName=Web Browser
+Exec=firefox %u
+Terminal=false
+Type=Application
+Icon=firefox
+Categories=GNOME;GTK;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;
+StartupNotify=true
diff --git a/firefox.install b/firefox.install
new file mode 100644
index 000000000000..1a1f4b16b5d2
--- /dev/null
+++ b/firefox.install
@@ -0,0 +1,13 @@
+post_install() {
+ update-desktop-database -q
+ gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
+
diff --git a/mozconfig b/mozconfig
new file mode 100644
index 000000000000..947067e1f571
--- /dev/null
+++ b/mozconfig
@@ -0,0 +1,43 @@
+# Disable geolocation web services
+ac_add_options --disable-necko-wifi
+
+# Disable webrtc, dangerous, leaks internal IP address (and external on Win)
+ac_add_options --disable-webrtc
+
+# Disable safe browsing, prevent sending visited URLs to other parties
+ac_add_options --disable-safe-browsing
+
+# Disable contacting Mozilla
+ac_add_options --disable-crashreporter
+ac_add_options --disable-updater
+ac_add_options --disable-tests
+
+# Various options, mostly unrelated to privacy settings, change as needed
+ac_add_options --enable-url-classifier
+ac_add_options --prefix=/usr
+ac_add_options --libdir=/usr/lib
+ac_add_options --enable-application=browser
+ac_add_options --enable-optimize
+ac_add_options --enable-strip
+ac_add_options --enable-install-strip
+ac_add_options --enable-gio
+ac_add_options --enable-official-branding
+ac_add_options --enable-system-ffi
+ac_add_options --enable-system-pixman
+ac_add_options --with-pthreads
+ac_add_options --with-system-bz2
+ac_add_options --with-system-jpeg
+ac_add_options --with-system-png
+ac_add_options --with-system-zlib
+ac_add_options --enable-gstreamer=1.0
+ac_add_options --enable-system-hunspell
+ac_add_options --enable-startup-notification
+ac_add_options --disable-pulseaudio
+ac_add_options --enable-system-sqlite
+ac_add_options --with-system-libevent
+ac_add_options --with-system-libvpx
+ac_add_options --with-system-nspr
+ac_add_options --with-system-nss
+ac_add_options --with-system-icu
+
+mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/firefox-build-dir