summaryrefslogtreecommitdiff
path: root/libre/iceweasel-libre/libre.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libre/iceweasel-libre/libre.patch')
-rw-r--r--libre/iceweasel-libre/libre.patch697
1 files changed, 585 insertions, 112 deletions
diff --git a/libre/iceweasel-libre/libre.patch b/libre/iceweasel-libre/libre.patch
index a4eb23831..ced25fcc5 100644
--- a/libre/iceweasel-libre/libre.patch
+++ b/libre/iceweasel-libre/libre.patch
@@ -1,8 +1,20 @@
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index 331edc8..e18bd20 100644
+index 331edc8..226508d 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
-@@ -1283,14 +1283,6 @@ pref("pdfjs.previousHandler.alwaysAskBeforeHandling", false);
+@@ -242,11 +242,6 @@ pref("browser.slowStartup.notificationDisabled", false);
+ pref("browser.slowStartup.timeThreshold", 60000);
+ pref("browser.slowStartup.maxSamples", 5);
+
+-// This url, if changed, MUST continue to point to an https url. Pulling arbitrary content to inject into
+-// this page over http opens us up to a man-in-the-middle attack that we'd rather not face. If you are a downstream
+-// repackager of this code using an alternate snippet url, please keep your users safe
+-pref("browser.aboutHomeSnippets.updateUrl", "https://snippets.mozilla.com/%STARTPAGE_VERSION%/%NAME%/%VERSION%/%APPBUILDID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/");
+-
+ pref("browser.enable_automatic_image_resizing", true);
+ pref("browser.chrome.site_icons", true);
+ pref("browser.chrome.favicons", true);
+@@ -1283,11 +1278,7 @@ pref("pdfjs.previousHandler.alwaysAskBeforeHandling", false);
// (This is intentionally on the high side; see bug 746055.)
pref("image.mem.max_decoded_image_kb", 256000);
@@ -11,17 +23,15 @@ index 331edc8..e18bd20 100644
-
-pref("social.sidebar.open", true);
-pref("social.sidebar.unload_timeout_ms", 10000);
--
--pref("dom.identity.enabled", false);
--
- // Turn on the CSP 1.0 parser for Content Security Policy headers
- pref("security.csp.speccompliant", true);
++// removed facebook sidebar with Iceweasel.
+
+ pref("dom.identity.enabled", false);
diff --git a/browser/base/content/abouthome/aboutHome.css b/browser/base/content/abouthome/aboutHome.css
-index c270318..8a647c7 100644
+index c270318..d4ecde0 100644
--- a/browser/base/content/abouthome/aboutHome.css
+++ b/browser/base/content/abouthome/aboutHome.css
-@@ -49,11 +49,6 @@ a {
+@@ -49,15 +49,6 @@ a {
background-repeat: no-repeat;
}
@@ -30,10 +40,14 @@ index c270318..8a647c7 100644
- width: 470px;
-}
-
- #searchForm {
+-#searchForm {
+- display: -moz-box;
+-}
+-
+ #searchLogoContainer {
display: -moz-box;
- }
-@@ -72,8 +67,7 @@ a {
+ -moz-box-align: center;
+@@ -72,8 +63,7 @@ a {
#searchEngineLogo {
display: inline-block;
height: 28px;
@@ -43,7 +57,7 @@ index c270318..8a647c7 100644
}
#searchText {
-@@ -145,48 +139,6 @@ a {
+@@ -145,48 +135,6 @@ a {
transition-duration: 0ms;
}
@@ -92,7 +106,40 @@ index c270318..8a647c7 100644
#launcher {
display: -moz-box;
-moz-box-align: center;
-@@ -366,20 +318,6 @@ body[narrow] #restorePreviousSession::before {
+@@ -335,26 +283,25 @@ body[narrow] #restorePreviousSession::before {
+ width: 32px;
+ }
+
+-#aboutMozilla {
++#aboutGNU {
+ display: block;
+- position: relative; /* pin wordmark to edge of document, not of viewport */
+ -moz-box-ordinal-group: 0;
+ opacity: .5;
+ transition: opacity 150ms;
+ }
+
+-#aboutMozilla:hover {
++#aboutGNU:hover {
+ opacity: 1;
+ }
+
+-#aboutMozilla::before {
+- content: url("chrome://browser/content/abouthome/mozilla.png");
++#aboutGNU::before {
++ content: url("chrome://browser/content/abouthome/gnu_headshadow.png");
+ display: block;
+ position: absolute;
+ top: 12px;
+ right: 12px;
+- width: 69px;
+- height: 19px;
++ width: 200px;
++ height: 110px;
+ }
+
+ /* [HiDPI]
+@@ -366,26 +313,6 @@ body[narrow] #restorePreviousSession::before {
background-image: url("chrome://branding/content/about-logo@2x.png");
}
@@ -110,14 +157,30 @@ index c270318..8a647c7 100644
- background-image: url("chrome://browser/content/abouthome/snippet2@2x.png");
- }
-
- .launchButton::before,
- #aboutMozilla::before {
- transform: scale(.5);
+- .launchButton::before,
+- #aboutMozilla::before {
+- transform: scale(.5);
+- transform-origin: 0 0;
+- }
+-
+ #downloads::before {
+ content: url("chrome://browser/content/abouthome/downloads@2x.png");
+ }
+@@ -421,9 +348,5 @@ body[narrow] #restorePreviousSession::before {
+ body[narrow] #restorePreviousSession::before {
+ content: url("chrome://browser/content/abouthome/restore@2x.png");
+ }
+-
+- #aboutMozilla::before {
+- content: url("chrome://browser/content/abouthome/mozilla@2x.png");
+- }
+ }
+
diff --git a/browser/base/content/abouthome/aboutHome.js b/browser/base/content/abouthome/aboutHome.js
-index 432fcdc..0d81017 100644
+index 432fcdc..8e85f1f 100644
--- a/browser/base/content/abouthome/aboutHome.js
+++ b/browser/base/content/abouthome/aboutHome.js
-@@ -3,152 +3,44 @@
+@@ -3,317 +3,99 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const SEARCH_ENGINES = {
@@ -293,46 +356,59 @@ index 432fcdc..0d81017 100644
- "https://www.mozilla.org/firefox/features/?utm_source=snippet&utm_medium=snippet&utm_campaign=default+feature+snippet"
-, "https://addons.mozilla.org/firefox/?utm_source=snippet&utm_medium=snippet&utm_campaign=addons"
-];
--
+
-const SNIPPETS_UPDATE_INTERVAL_MS = 86400000; // 1 Day.
--
++// Bug with dom.storage.enabled set as false
++// We are using DDG as a default in this case.
++let gSearchEngine = {"name": "DuckDuckGo HTML", "searchUrl": "https://duckduckgo.com/html/?t=iceweasel&q=_searchTerms_"};
+
-// IndexedDB storage constants.
-const DATABASE_NAME = "abouthome";
-const DATABASE_VERSION = 1;
-const SNIPPETS_OBJECTSTORE_NAME = "snippets";
-
- // This global tracks if the page has been set up before, to prevent double inits
- let gInitialized = false;
- let gObserver = new MutationObserver(function (mutations) {
-@@ -156,7 +48,6 @@ let gObserver = new MutationObserver(function (mutations) {
- if (mutation.attributeName == "searchEngineName") {
- setupSearchEngine();
- if (!gInitialized) {
+-// This global tracks if the page has been set up before, to prevent double inits
+-let gInitialized = false;
+-let gObserver = new MutationObserver(function (mutations) {
+- for (let mutation of mutations) {
+- if (mutation.attributeName == "searchEngineName") {
+- setupSearchEngine();
+- if (!gInitialized) {
- ensureSnippetsMapThen(loadSnippets);
- gInitialized = true;
- }
- return;
-@@ -170,10 +61,6 @@ window.addEventListener("pageshow", function () {
- window.gObserver.observe(document.documentElement, { attributes: true });
- fitToWidth();
- window.addEventListener("resize", fitToWidth);
+- gInitialized = true;
+- }
+- return;
+- }
+- }
+-});
+-
+-window.addEventListener("pageshow", function () {
+- // Delay search engine setup, cause browser.js::BrowserOnAboutPageLoad runs
+- // later and may use asynchronous getters.
+- window.gObserver.observe(document.documentElement, { attributes: true });
+- fitToWidth();
+- window.addEventListener("resize", fitToWidth);
-
- // Ask chrome to update snippets.
- var event = new CustomEvent("AboutHomeLoad", {bubbles:true});
- document.dispatchEvent(event);
+-});
+-
+-window.addEventListener("pagehide", function() {
+- window.gObserver.disconnect();
+- window.removeEventListener("resize", fitToWidth);
++document.addEventListener("DOMContentLoaded", function init() {
++ setupSearchEngine();
});
-
- window.addEventListener("pagehide", function() {
-@@ -181,117 +68,6 @@ window.addEventListener("pagehide", function() {
- window.removeEventListener("resize", fitToWidth);
- });
++window.addEventListener("load", fitToWidth);
++window.addEventListener("resize", fitToWidth);
-// This object has the same interface as Map and is used to store and retrieve
-// the snippets data. It is lazily initialized by ensureSnippetsMapThen(), so
-// be sure its callback returned before trying to use it.
-let gSnippetsMap;
-let gSnippetsMapCallbacks = [];
--
+
-/**
- * Ensure the snippets map is properly initialized.
- *
@@ -342,7 +418,8 @@ index 432fcdc..0d81017 100644
- * it may change inadvertently.
- */
-function ensureSnippetsMapThen(aCallback)
--{
++function onSearchSubmit(aEvent)
+ {
- if (gSnippetsMap) {
- aCallback(gSnippetsMap);
- return;
@@ -358,30 +435,44 @@ index 432fcdc..0d81017 100644
- let invokeCallbacks = function () {
- if (!gSnippetsMap) {
- gSnippetsMap = Object.freeze(new Map());
-- }
++ let searchTerms = document.getElementById("searchText").value;
++ if (gSearchEngine && searchTerms.length > 0) {
++ const SEARCH_TOKENS = {
++ "_searchTerms_": encodeURIComponent(searchTerms)
+ }
-
- for (let callback of gSnippetsMapCallbacks) {
- callback(gSnippetsMap);
-- }
++ let url = gSearchEngine.searchUrl;
++ for (let key in SEARCH_TOKENS) {
++ url = url.replace(key, SEARCH_TOKENS[key]);
+ }
- gSnippetsMapCallbacks.length = 0;
-- }
--
++ window.location.href = url;
+ }
+
- let openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);
--
++ aEvent.preventDefault();
++}
+
- openRequest.onerror = function (event) {
- // Try to delete the old database so that we can start this process over
- // next time.
- indexedDB.deleteDatabase(DATABASE_NAME);
- invokeCallbacks();
- };
--
+
- openRequest.onupgradeneeded = function (event) {
- let db = event.target.result;
- if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {
- db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);
- }
-- }
--
++function setupSearchEngine()
++{
++ if (localStorage && localStorage["search-engine"]) {
++ gSearchEngine = JSON.parse(localStorage["search-engine"]);
+ }
+
- openRequest.onsuccess = function (event) {
- let db = event.target.result;
-
@@ -435,16 +526,71 @@ index 432fcdc..0d81017 100644
-
- setTimeout(invokeCallbacks, 0);
- }
-- }
++
++ // Look for extended information, like logo and links.
++ var searchEngineInfo = SEARCH_ENGINES[gSearchEngine.name];
++ if (searchEngineInfo) {
++ for (let prop in searchEngineInfo)
++ gSearchEngine[prop] = searchEngineInfo[prop];
+ }
-}
--
- function onSearchSubmit(aEvent)
- {
- let searchTerms = document.getElementById("searchText").value;
-@@ -341,156 +117,6 @@ function setupSearchEngine()
- }
+-function onSearchSubmit(aEvent)
+-{
+- let searchTerms = document.getElementById("searchText").value;
+- let engineName = document.documentElement.getAttribute("searchEngineName");
++ // Enqueue additional params if required by the engine definition.
++ if (gSearchEngine.params)
++ gSearchEngine.searchUrl += "&" + gSearchEngine.params;
+
+- if (engineName && searchTerms.length > 0) {
+- // Send an event that will perform a search and Firefox Health Report will
+- // record that a search from about:home has occurred.
+- let eventData = JSON.stringify({
+- engineName: engineName,
+- searchTerms: searchTerms
+- });
+- let event = new CustomEvent("AboutHomeSearchEvent", {detail: eventData});
+- document.dispatchEvent(event);
++ // Add search engine logo.
++ if (gSearchEngine.image) {
++ let logoElt = document.getElementById("searchEngineLogo");
++ logoElt.src = gSearchEngine.image;
++ logoElt.alt = gSearchEngine.name;
+ }
+- aEvent.preventDefault();
+-}
+-
+-
+-function setupSearchEngine()
+-{
+ // The "autofocus" attribute doesn't focus the form element
+ // immediately when the element is first drawn, so the
+ // attribute is also used for styling when the page first loads.
+@@ -322,173 +104,6 @@ function setupSearchEngine()
+ searchText.removeEventListener("blur", searchText_onBlur);
+ searchText.removeAttribute("autofocus");
+ });
+-
+- let searchEngineName = document.documentElement.getAttribute("searchEngineName");
+- let searchEngineInfo = SEARCH_ENGINES[searchEngineName];
+- let logoElt = document.getElementById("searchEngineLogo");
+-
+- // Add search engine logo.
+- if (searchEngineInfo && searchEngineInfo.image) {
+- logoElt.parentNode.hidden = false;
+- logoElt.src = searchEngineInfo.image;
+- logoElt.alt = searchEngineName;
+- searchText.placeholder = "";
+- }
+- else {
+- logoElt.parentNode.hidden = true;
+- searchText.placeholder = searchEngineName;
+- }
+-
+-}
+-
-/**
- * Inform the test harness that we're done loading the page.
- */
@@ -593,16 +739,14 @@ index 432fcdc..0d81017 100644
- }
- // Move the default snippet to the snippets element.
- snippetsElt.appendChild(entry);
--}
--
+ }
+
function fitToWidth() {
- if (window.scrollMaxX) {
- document.body.setAttribute("narrow", "true");
diff --git a/browser/base/content/abouthome/aboutHome.xhtml b/browser/base/content/abouthome/aboutHome.xhtml
-index 1d03d38..e3cd254 100644
+index 1d03d38..fda3095 100644
--- a/browser/base/content/abouthome/aboutHome.xhtml
+++ b/browser/base/content/abouthome/aboutHome.xhtml
-@@ -43,15 +43,6 @@
+@@ -43,30 +43,9 @@
<input id="searchSubmit" type="submit" value="&abouthome.searchEngineButton.label;"/>
</form>
</div>
@@ -618,6 +762,286 @@ index 1d03d38..e3cd254 100644
</div>
<div class="spacer"/>
+- <div id="launcher">
+- <button class="launchButton" id="downloads">&abouthome.downloadsButton.label;</button>
+- <button class="launchButton" id="bookmarks">&abouthome.bookmarksButton.label;</button>
+- <button class="launchButton" id="history">&abouthome.historyButton.label;</button>
+- <button class="launchButton" id="apps" hidden="true">&abouthome.appsButton.label;</button>
+- <button class="launchButton" id="addons">&abouthome.addonsButton.label;</button>
+- <button class="launchButton" id="sync">&abouthome.syncButton.label;</button>
+- <button class="launchButton" id="settings">&abouthome.settingsButton.label;</button>
+- <div id="restorePreviousSessionSeparator"/>
+- <button class="launchButton" id="restorePreviousSession">&historyRestoreLastSession.label;</button>
+- </div>
+-
+- <a id="aboutMozilla" href="https://www.mozilla.org/about/?utm_source=about-home&amp;utm_medium=Referral"/>
++ <a id="aboutGNU" href="http://gnu.org"></a>
+ </body>
+ </html>
+diff --git a/browser/base/content/content.js b/browser/base/content/content.js
+index 9428613..fc3c00a 100644
+--- a/browser/base/content/content.js
++++ b/browser/base/content/content.js
+@@ -50,216 +50,3 @@ if (Services.prefs.getBoolPref("browser.tabs.remote")) {
+ LoginManagerContent.onUsernameInput(event);
+ });
+ }
+-
+-let AboutHomeListener = {
+- init: function(chromeGlobal) {
+- chromeGlobal.addEventListener('AboutHomeLoad', () => this.onPageLoad(), false, true);
+- },
+-
+- handleEvent: function(aEvent) {
+- switch (aEvent.type) {
+- case "AboutHomeLoad":
+- this.onPageLoad();
+- break;
+- }
+- },
+-
+- receiveMessage: function(aMessage) {
+- switch (aMessage.name) {
+- case "AboutHome:Update":
+- this.onUpdate(aMessage.data);
+- break;
+- }
+- },
+-
+- onUpdate: function(aData) {
+- let doc = content.document;
+- if (doc.documentURI.toLowerCase() != "about:home")
+- return;
+-
+- if (aData.showRestoreLastSession && !PrivateBrowsingUtils.isWindowPrivate(content))
+- doc.getElementById("launcher").setAttribute("session", "true");
+-
+- // Inject search engine and snippets URL.
+- let docElt = doc.documentElement;
+- // set the following attributes BEFORE searchEngineName, which triggers to
+- // show the snippets when it's set.
+- docElt.setAttribute("snippetsURL", aData.snippetsURL);
+- if (aData.showKnowYourRights)
+- docElt.setAttribute("showKnowYourRights", "true");
+- docElt.setAttribute("snippetsVersion", aData.snippetsVersion);
+- docElt.setAttribute("searchEngineName", Services.search.defaultEngine.name);
+- },
+-
+- onPageLoad: function() {
+- let doc = content.document;
+- if (doc.documentURI.toLowerCase() != "about:home" ||
+- doc.documentElement.hasAttribute("hasBrowserHandlers")) {
+- return;
+- }
+-
+- doc.documentElement.setAttribute("hasBrowserHandlers", "true");
+- let updateListener = this;
+- addMessageListener("AboutHome:Update", updateListener);
+- addEventListener("click", this.onClick, true);
+- addEventListener("pagehide", function onPageHide(event) {
+- if (event.target.defaultView.frameElement)
+- return;
+- removeMessageListener("AboutHome:Update", updateListener);
+- removeEventListener("click", this.onClick, true);
+- removeEventListener("pagehide", onPageHide, true);
+- if (event.target.documentElement)
+- event.target.documentElement.removeAttribute("hasBrowserHandlers");
+- }, true);
+-
+- // XXX bug 738646 - when Marketplace is launched, remove this statement and
+- // the hidden attribute set on the apps button in aboutHome.xhtml
+- if (Services.prefs.getPrefType("browser.aboutHome.apps") == Services.prefs.PREF_BOOL &&
+- Services.prefs.getBoolPref("browser.aboutHome.apps"))
+- doc.getElementById("apps").removeAttribute("hidden");
+-
+- sendAsyncMessage("AboutHome:RequestUpdate");
+-
+- doc.addEventListener("AboutHomeSearchEvent", function onSearch(e) {
+- sendAsyncMessage("AboutHome:Search", { searchData: e.detail });
+- }, true, true);
+- },
+-
+- onClick: function(aEvent) {
+- if (!aEvent.isTrusted || // Don't trust synthetic events
+- aEvent.button == 2 || aEvent.target.localName != "button") {
+- return;
+- }
+-
+- let originalTarget = aEvent.originalTarget;
+- let ownerDoc = originalTarget.ownerDocument;
+- let elmId = originalTarget.getAttribute("id");
+-
+- switch (elmId) {
+- case "restorePreviousSession":
+- sendAsyncMessage("AboutHome:RestorePreviousSession");
+- ownerDoc.getElementById("launcher").removeAttribute("session");
+- break;
+-
+- case "downloads":
+- sendAsyncMessage("AboutHome:Downloads");
+- break;
+-
+- case "bookmarks":
+- sendAsyncMessage("AboutHome:Bookmarks");
+- break;
+-
+- case "history":
+- sendAsyncMessage("AboutHome:History");
+- break;
+-
+- case "apps":
+- sendAsyncMessage("AboutHome:Apps");
+- break;
+-
+- case "addons":
+- sendAsyncMessage("AboutHome:Addons");
+- break;
+-
+- case "sync":
+- sendAsyncMessage("AboutHome:Sync");
+- break;
+-
+- case "settings":
+- sendAsyncMessage("AboutHome:Settings");
+- break;
+- }
+- },
+-};
+-AboutHomeListener.init(this);
+-
+-
+-var global = this;
+-
+-let ClickEventHandler = {
+- init: function init() {
+- Cc["@mozilla.org/eventlistenerservice;1"]
+- .getService(Ci.nsIEventListenerService)
+- .addSystemEventListener(global, "click", this, true);
+- },
+-
+- handleEvent: function(event) {
+- // Bug 903016: Most of this code is an unfortunate duplication from
+- // contentAreaClick in browser.js.
+- if (!event.isTrusted || event.defaultPrevented || event.button == 2)
+- return;
+-
+- let [href, node] = this._hrefAndLinkNodeForClickEvent(event);
+-
+- let json = { button: event.button, shiftKey: event.shiftKey,
+- ctrlKey: event.ctrlKey, metaKey: event.metaKey,
+- altKey: event.altKey, href: null, title: null,
+- bookmark: false };
+-
+- if (href) {
+- json.href = href;
+- if (node) {
+- json.title = node.getAttribute("title");
+-
+- if (event.button == 0 && !event.ctrlKey && !event.shiftKey &&
+- !event.altKey && !event.metaKey) {
+- json.bookmark = node.getAttribute("rel") == "sidebar";
+- if (json.bookmark)
+- event.preventDefault(); // Need to prevent the pageload.
+- }
+- }
+-
+- sendAsyncMessage("Content:Click", json);
+- return;
+- }
+-
+- // This might be middle mouse navigation.
+- if (event.button == 1)
+- sendAsyncMessage("Content:Click", json);
+- },
+-
+- /**
+- * Extracts linkNode and href for the current click target.
+- *
+- * @param event
+- * The click event.
+- * @return [href, linkNode].
+- *
+- * @note linkNode will be null if the click wasn't on an anchor
+- * element (or XLink).
+- */
+- _hrefAndLinkNodeForClickEvent: function(event) {
+- function isHTMLLink(aNode) {
+- // Be consistent with what nsContextMenu.js does.
+- return ((aNode instanceof content.HTMLAnchorElement && aNode.href) ||
+- (aNode instanceof content.HTMLAreaElement && aNode.href) ||
+- aNode instanceof content.HTMLLinkElement);
+- }
+-
+- let node = event.target;
+- while (node && !isHTMLLink(node)) {
+- node = node.parentNode;
+- }
+-
+- if (node)
+- return [node.href, node];
+-
+- // If there is no linkNode, try simple XLink.
+- let href, baseURI;
+- node = event.target;
+- while (node && !href) {
+- if (node.nodeType == content.Node.ELEMENT_NODE) {
+- href = node.getAttributeNS("http://www.w3.org/1999/xlink", "href");
+- if (href)
+- baseURI = node.ownerDocument.baseURIObject;
+- }
+- node = node.parentNode;
+- }
+-
+- // In case of XLink, we don't return the node we got href from since
+- // callers expect <a>-like elements.
+- // Note: makeURI() will throw if aUri is not a valid URI.
+- return [href ? makeURI(href, null, baseURI).spec : null, null];
+- }
+-};
+-ClickEventHandler.init();
+diff --git a/browser/base/jar.mn b/browser/base/jar.mn
+index f2a820c..9478039 100644
+--- a/browser/base/jar.mn
++++ b/browser/base/jar.mn
+@@ -33,7 +33,7 @@ browser.jar:
+ content/browser/abouthome/settings.png (content/abouthome/settings.png)
+ content/browser/abouthome/restore.png (content/abouthome/restore.png)
+ content/browser/abouthome/restore-large.png (content/abouthome/restore-large.png)
+- content/browser/abouthome/mozilla.png (content/abouthome/mozilla.png)
++ content/browser/abouthome/gnu_headshadow.png (content/abouthome/gnu_headshadow.png)
+ content/browser/abouthome/snippet1@2x.png (content/abouthome/snippet1@2x.png)
+ content/browser/abouthome/snippet2@2x.png (content/abouthome/snippet2@2x.png)
+ content/browser/abouthome/downloads@2x.png (content/abouthome/downloads@2x.png)
+@@ -45,7 +45,6 @@ browser.jar:
+ content/browser/abouthome/settings@2x.png (content/abouthome/settings@2x.png)
+ content/browser/abouthome/restore@2x.png (content/abouthome/restore@2x.png)
+ content/browser/abouthome/restore-large@2x.png (content/abouthome/restore-large@2x.png)
+- content/browser/abouthome/mozilla@2x.png (content/abouthome/mozilla@2x.png)
+ #ifdef MOZ_SERVICES_HEALTHREPORT
+ content/browser/abouthealthreport/abouthealth.xhtml (content/abouthealthreport/abouthealth.xhtml)
+ content/browser/abouthealthreport/abouthealth.js (content/abouthealthreport/abouthealth.js)
+diff --git a/browser/locales/en-US/chrome/browser/aboutHome.dtd b/browser/locales/en-US/chrome/browser/aboutHome.dtd
+index e84341f..5476d32 100644
+--- a/browser/locales/en-US/chrome/browser/aboutHome.dtd
++++ b/browser/locales/en-US/chrome/browser/aboutHome.dtd
+@@ -13,17 +13,6 @@
+
+ <!ENTITY abouthome.searchEngineButton.label "Search">
+
+-<!-- LOCALIZATION NOTE (abouthome.defaultSnippet1.v1):
+- text in <a/> will be linked to the Firefox features page on mozilla.com
+--->
+-<!ENTITY abouthome.defaultSnippet1.v1 "Thanks for choosing Firefox! To get the most out of your browser, learn more about the <a>latest features</a>.">
+-<!-- LOCALIZATION NOTE (abouthome.defaultSnippet2.v1):
+- text in <a/> will be linked to the featured add-ons on addons.mozilla.org
+--->
+-<!ENTITY abouthome.defaultSnippet2.v1 "It's easy to customize your Firefox exactly the way you want it. <a>Choose from thousands of add-ons</a>.">
+-<!-- LOCALIZATION NOTE (abouthome.rightsSnippet): text in <a/> will be linked to about:rights -->
+-<!ENTITY abouthome.rightsSnippet "&brandFullName; is free and open source software from the non-profit Mozilla Foundation. <a>Know your rights…</a>">
+-
+ <!ENTITY abouthome.bookmarksButton.label "Bookmarks">
+ <!ENTITY abouthome.historyButton.label "History">
+ <!ENTITY abouthome.settingsButton.label "Settings">
diff --git a/browser/locales/en-US/chrome/browser-region/region.properties b/browser/locales/en-US/chrome/browser-region/region.properties
index 087cc50..5654eb9 100644
--- a/browser/locales/en-US/chrome/browser-region/region.properties
@@ -700,52 +1124,101 @@ index e925c1e..5101035 100644
+ <DT><A HREF="http://www.h-node.org/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABgElEQVQ4jaXRz2uSARzHcb0vlRGEzTVWISU1BVkFYTIyjNK1pKcxHA+yhWMWIamHYikFgpoLIi9jwegi3QbL9SzdLmMbM9J+DkJBgm5RDvEPeHeQHOyQz0OH9+V7ePGBr0pqpPmfVPsP8a0AR4MnMEwf48x9K0s/E8oAY9iEMOvD+8yP2qVjrhhRBnSN61n5sIpULqC+pGHh8wNlgEY8jPQXcGh4VXukDND5evYAl46odIuXtYdKAANSudAChO52/XeMZMohecCbcoGdH99Y+7LO72adT9+/4nh8nYOjBl7/SsoB8gBkpHk8T0S2K++pN3fRin3cfnFDHvCuWkI9rEMvHGEo5gbAHnXhnLF1BpZLeRaLOVT2A8Q3A5wMngXgWtKLxX9KPqC+rCWQvYkpeK4NWKcGOgO50ts2MJJ0cPreeQDciTHMchZYIhcwh2wcuqjn+ccwGm9v6wsTxxn0dVgQXZ7Ek3Agpq6QrcaQGmmebtxFSDkRU1fJVmL/BpT2ByV/3eDMhinRAAAAAElFTkSuQmCC">h-node</A>
</DL><p>
</DL><p>
-diff --git a/dom/ipc/test.xul b/dom/ipc/test.xul
-index 3eede17..1b47a70 100644
---- a/dom/ipc/test.xul
-+++ b/dom/ipc/test.xul
-@@ -302,6 +302,6 @@
- oncommand="document.getElementById('page').QueryInterface(Components.interfaces.nsIFrameLoaderOwner).frameLoader.delayRemoteDialogs = this.checked;"/>
- </toolbar>
-
-- <browser type="content" src="http://www.google.com/" flex="1" id="page" remote="true"/>
-+ <browser type="content" src="https://duckduckgo.com/html" flex="1" id="page" remote="true"/>
- <label id="messageLog" value="" crop="center"/>
- </window>
-diff --git a/layout/ipc/test-ipcbrowser.xul b/layout/ipc/test-ipcbrowser.xul
-index 237ba61..7603d7d 100644
---- a/layout/ipc/test-ipcbrowser.xul
-+++ b/layout/ipc/test-ipcbrowser.xul
-@@ -73,6 +73,6 @@
- label="setViewportScale"/>
- </toolbar>
-
-- <browser type="content" src="http://www.google.com/" flex="1" id="content"
-+ <browser type="content" src="https://duckduckgo.com/html" flex="1" id="content"
- remote="true"/>
- </window>
-diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js
-index 346c819..0605f34 100644
---- a/modules/libpref/src/init/all.js
-+++ b/modules/libpref/src/init/all.js
-@@ -4304,20 +4304,6 @@ pref("memory.ghost_window_timeout_seconds", 60);
- // Disable freeing dirty pages when minimizing memory.
- pref("memory.free_dirty_pages", false);
-
--pref("social.enabled", false);
--// comma separated list of domain origins (e.g. https://domain.com) for
--// providers that can install from their own website without user warnings.
--// entries are
--pref("social.whitelist", "https://mozsocial.cliqz.com,https://now.msn.com,https://mixi.jp");
--// omma separated list of domain origins (e.g. https://domain.com) for directory
--// websites (e.g. AMO) that can install providers for other sites
--pref("social.directories", "https://addons.mozilla.org");
--// remote-install allows any website to activate a provider, with extended UI
--// notifying user of installation. we can later pref off remote install if
--// necessary. This does not affect whitelisted and directory installs.
--pref("social.remote-install.enabled", true);
--pref("social.toast-notifications.enabled", true);
--
- // Disable idle observer fuzz, because only privileged content can access idle
- // observers (bug 780507).
- pref("dom.idle-observers-api.fuzz_time.disabled", true);
+diff --git a/browser/modules/AboutHome.jsm b/browser/modules/AboutHome.jsm
+index 98c443d..0173762 100644
+--- a/browser/modules/AboutHome.jsm
++++ b/browser/modules/AboutHome.jsm
+@@ -8,7 +8,7 @@ let Cc = Components.classes;
+ let Ci = Components.interfaces;
+ let Cu = Components.utils;
+
+-this.EXPORTED_SYMBOLS = [ "AboutHomeUtils", "AboutHome" ];
++this.EXPORTED_SYMBOLS = [ "AboutHome" ];
+
+ Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+ Components.utils.import("resource://gre/modules/Services.jsm");
+@@ -16,66 +16,6 @@ Components.utils.import("resource://gre/modules/Services.jsm");
+ XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
+ "resource://gre/modules/PrivateBrowsingUtils.jsm");
+
+-// Url to fetch snippets, in the urlFormatter service format.
+-const SNIPPETS_URL_PREF = "browser.aboutHomeSnippets.updateUrl";
+-
+-// Should be bumped up if the snippets content format changes.
+-const STARTPAGE_VERSION = 4;
+-
+-this.AboutHomeUtils = {
+- get snippetsVersion() STARTPAGE_VERSION,
+-
+- /*
+- * showKnowYourRights - Determines if the user should be shown the
+- * about:rights notification. The notification should *not* be shown if
+- * we've already shown the current version, or if the override pref says to
+- * never show it. The notification *should* be shown if it's never been seen
+- * before, if a newer version is available, or if the override pref says to
+- * always show it.
+- */
+- get showKnowYourRights() {
+- // Look for an unconditional override pref. If set, do what it says.
+- // (true --> never show, false --> always show)
+- try {
+- return !Services.prefs.getBoolPref("browser.rights.override");
+- } catch (e) { }
+- // Ditto, for the legacy EULA pref.
+- try {
+- return !Services.prefs.getBoolPref("browser.EULA.override");
+- } catch (e) { }
+-
+-#ifndef MOZILLA_OFFICIAL
+- // Non-official builds shouldn't show the notification.
+- return false;
+-#endif
+-
+- // Look to see if the user has seen the current version or not.
+- var currentVersion = Services.prefs.getIntPref("browser.rights.version");
+- try {
+- return !Services.prefs.getBoolPref("browser.rights." + currentVersion + ".shown");
+- } catch (e) { }
+-
+- // Legacy: If the user accepted a EULA, we won't annoy them with the
+- // equivalent about:rights page until the version changes.
+- try {
+- return !Services.prefs.getBoolPref("browser.EULA." + currentVersion + ".accepted");
+- } catch (e) { }
+-
+- // We haven't shown the notification before, so do so now.
+- return true;
+- }
+-};
+-
+-/**
+- * Returns the URL to fetch snippets from, in the urlFormatter service format.
+- */
+-XPCOMUtils.defineLazyGetter(AboutHomeUtils, "snippetsURL", function() {
+- let updateURL = Services.prefs
+- .getCharPref(SNIPPETS_URL_PREF)
+- .replace("%STARTPAGE_VERSION%", STARTPAGE_VERSION);
+- return Services.urlFormatter.formatURL(updateURL);
+-});
+-
+ /**
+ * This code provides services to the about:home page. Whenever
+ * about:home needs to do something chrome-privileged, it sends a
+@@ -185,17 +125,8 @@ let AboutHome = {
+ ss.promiseInitialized.then(function() {
+ let data = {
+ showRestoreLastSession: ss.canRestoreLastSession,
+- snippetsURL: AboutHomeUtils.snippetsURL,
+- showKnowYourRights: AboutHomeUtils.showKnowYourRights,
+- snippetsVersion: AboutHomeUtils.snippetsVersion
+ };
+
+- if (AboutHomeUtils.showKnowYourRights) {
+- // Set pref to indicate we've shown the notification.
+- let currentVersion = Services.prefs.getIntPref("browser.rights.version");
+- Services.prefs.setBoolPref("browser.rights." + currentVersion + ".shown", true);
+- }
+-
+ if (target) {
+ target.messageManager.sendAsyncMessage("AboutHome:Update", data);
+ } else {