diff --git a/helpers/DATA/firefox/abouthome/aboutHome.css b/helpers/DATA/firefox/abouthome/aboutHome.css
new file mode 100644
index 0000000..8635239
--- /dev/null
+++ b/helpers/DATA/firefox/abouthome/aboutHome.css
@@ -0,0 +1,429 @@
+%if 0
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+%endif
+
+html {
+ font: message-box;
+ font-size: 100%;
+ background-color: hsl(0,0%,95%);
+ color: #000;
+ height: 100%;
+}
+
+body {
+ margin: 0;
+ display: -moz-box;
+ -moz-box-orient: vertical;
+ width: 100%;
+ height: 100%;
+}
+
+input,
+button {
+ font-size: inherit;
+ font-family: inherit;
+}
+
+a {
+ color: -moz-nativehyperlinktext;
+ text-decoration: none;
+}
+
+.spacer {
+ -moz-box-flex: 1;
+}
+
+#topSection {
+ text-align: center;
+}
+
+#brandLogo {
+ height: 420px;
+ width: 150px;
+ margin: 22px auto 31px;
+ background-image: url("chrome://branding/content/about-logo.png");
+ background-size: 420px 150px;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+
+#searchForm,
+#snippets {
+ width: 470px;
+}
+
+#searchForm {
+ display: -moz-box;
+}
+
+#searchLogoContainer {
+ display: -moz-box;
+ -moz-box-align: center;
+ padding-top: 2px;
+ -moz-padding-end: 8px;
+}
+
+#searchLogoContainer[hidden] {
+ display: none;
+}
+
+#searchEngineLogo {
+ display: inline-block;
+ height: 28px;
+ width: 70px;
+ min-width: 70px;
+}
+
+#searchText {
+ -moz-box-flex: 1;
+ padding: 6px 8px;
+ background: hsla(0,0%,100%,.9) padding-box;
+ border: 1px solid;
+ border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2);
+ box-shadow: 0 1px 0 hsla(210,65%,9%,.02) inset,
+ 0 0 2px hsla(210,65%,9%,.1) inset,
+ 0 1px 0 hsla(0,0%,100%,.2);
+ border-radius: 2.5px 0 0 2.5px;
+}
+
+#searchText:-moz-dir(rtl) {
+ border-radius: 0 2.5px 2.5px 0;
+}
+
+#searchText:focus,
+#searchText[autofocus] {
+ border-color: hsla(206,100%,60%,.6) hsla(206,76%,52%,.6) hsla(204,100%,40%,.6);
+}
+
+#searchSubmit {
+ -moz-margin-start: -1px;
+ background: linear-gradient(hsla(0,0%,100%,.8), hsla(0,0%,100%,.1)) padding-box;
+ padding: 0 9px;
+ border: 1px solid;
+ border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2);
+ -moz-border-start: 1px solid transparent;
+ border-radius: 0 2.5px 2.5px 0;
+ box-shadow: 0 0 2px hsla(0,0%,100%,.5) inset,
+ 0 1px 0 hsla(0,0%,100%,.2);
+ cursor: pointer;
+ transition-property: background-color, border-color, box-shadow;
+ transition-duration: 150ms;
+}
+
+#searchSubmit:-moz-dir(rtl) {
+ border-radius: 2.5px 0 0 2.5px;
+}
+
+#searchText:focus + #searchSubmit,
+#searchText + #searchSubmit:hover,
+#searchText[autofocus] + #searchSubmit {
+ border-color: #59b5fc #45a3e7 #3294d5;
+ color: white;
+}
+
+#searchText:focus + #searchSubmit,
+#searchText[autofocus] + #searchSubmit {
+ background-image: linear-gradient(#4cb1ff, #1793e5);
+ box-shadow: 0 1px 0 hsla(0,0%,100%,.2) inset,
+ 0 0 0 1px hsla(0,0%,100%,.1) inset,
+ 0 1px 0 hsla(210,54%,20%,.03);
+}
+
+#searchText + #searchSubmit:hover {
+ background-image: linear-gradient(#66bdff, #0d9eff);
+ box-shadow: 0 1px 0 hsla(0,0%,100%,.2) inset,
+ 0 0 0 1px hsla(0,0%,100%,.1) inset,
+ 0 1px 0 hsla(210,54%,20%,.03),
+ 0 0 4px hsla(206,100%,20%,.2);
+}
+
+#searchText + #searchSubmit:hover:active {
+ box-shadow: 0 1px 1px hsla(211,79%,6%,.1) inset,
+ 0 0 1px hsla(211,79%,6%,.2) inset;
+ transition-duration: 0ms;
+}
+
+#defaultSnippet1,
+#defaultSnippet2,
+#rightsSnippet {
+ display: block;
+ min-height: 38px;
+ background: 30px center no-repeat;
+ padding: 6px 0;
+ -moz-padding-start: 79px;
+}
+
+#rightsSnippet[hidden] {
+ display: none;
+}
+
+#defaultSnippet1:-moz-dir(rtl),
+#defaultSnippet2:-moz-dir(rtl),
+#rightsSnippet:-moz-dir(rtl) {
+ background-position: right 30px center;
+}
+
+#defaultSnippet1 {
+ background-image: url("chrome://browser/content/abouthome/snippet1.png");
+}
+
+#defaultSnippet2 {
+ background-image: url("chrome://browser/content/abouthome/snippet2.png");
+}
+
+#snippets {
+ display: inline-block;
+ text-align: start;
+ margin: 12px 0;
+ color: #3c3c3c;
+ font-size: 75%;
+ /* 12px is the computed font size, 15px the computed line height of the snippets
+ with Segoe UI on a default Windows 7 setup. The 15/12 multiplier approximately
+ converts em from units of font-size to units of line-height. The goal is to
+ preset the height of a three-line snippet to avoid visual moving/flickering as
+ the snippets load. */
+ min-height: calc(15/12 * 3em);
+}
+
+#launcher {
+ display: -moz-box;
+ -moz-box-align: center;
+ -moz-box-pack: center;
+ width: 100%;
+ background-color: hsla(0,0%,0%,.03);
+ border-top: 1px solid hsla(0,0%,0%,.03);
+ box-shadow: 0 1px 2px hsla(0,0%,0%,.02) inset,
+ 0 -1px 0 hsla(0,0%,100%,.25);
+}
+
+#launcher:not([session]),
+body[narrow] #launcher[session] {
+ display: block; /* display separator and restore button on separate lines */
+ text-align: center;
+ white-space: nowrap; /* prevent navigational buttons from wrapping */
+}
+
+.launchButton {
+ display: -moz-box;
+ -moz-box-orient: vertical;
+ margin: 16px 1px;
+ padding: 14px 6px;
+ min-width: 88px;
+ max-width: 176px;
+ max-height: 85px;
+ vertical-align: top;
+ white-space: normal;
+ background: transparent padding-box;
+ border: 1px solid transparent;
+ border-radius: 2.5px;
+ color: #525c66;
+ font-size: 75%;
+ cursor: pointer;
+ transition-property: background-color, border-color, box-shadow;
+ transition-duration: 150ms;
+}
+
+body[narrow] #launcher[session] > .launchButton {
+ margin: 4px 1px;
+}
+
+.launchButton:hover {
+ background-color: hsla(211,79%,6%,.03);
+ border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2);
+}
+
+.launchButton:hover:active {
+ background-image: linear-gradient(hsla(211,79%,6%,.02), hsla(211,79%,6%,.05));
+ border-color: hsla(210,54%,20%,.2) hsla(210,54%,20%,.23) hsla(210,54%,20%,.25);
+ box-shadow: 0 1px 1px hsla(211,79%,6%,.05) inset,
+ 0 0 1px hsla(211,79%,6%,.1) inset;
+ transition-duration: 0ms;
+}
+
+.launchButton[hidden],
+#launcher:not([session]) > #restorePreviousSessionSeparator,
+#launcher:not([session]) > #restorePreviousSession {
+ display: none;
+}
+
+#restorePreviousSessionSeparator {
+ width: 3px;
+ height: 116px;
+ margin: 0 10px;
+ background-image: linear-gradient(hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0)),
+ linear-gradient(hsla(211,79%,6%,0), hsla(211,79%,6%,.2), hsla(211,79%,6%,0)),
+ linear-gradient(hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0));
+ background-position: left top, center, right bottom;
+ background-size: 1px auto;
+ background-repeat: no-repeat;
+}
+
+body[narrow] #restorePreviousSessionSeparator {
+ margin: 0 auto;
+ width: 512px;
+ height: 3px;
+ background-image: linear-gradient(to right, hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0)),
+ linear-gradient(to right, hsla(211,79%,6%,0), hsla(211,79%,6%,.2), hsla(211,79%,6%,0)),
+ linear-gradient(to right, hsla(0,0%,100%,0), hsla(0,0%,100%,.35), hsla(0,0%,100%,0));
+ background-size: auto 1px;
+}
+
+#restorePreviousSession {
+ max-width: none;
+ font-size: 90%;
+}
+
+body[narrow] #restorePreviousSession {
+ font-size: 80%;
+}
+
+.launchButton::before {
+ display: block;
+ width: 32px;
+ height: 32px;
+ margin: 0 auto 6px;
+ line-height: 0; /* remove extra vertical space due to non-zero font-size */
+}
+
+#downloads::before {
+ content: url("chrome://browser/content/abouthome/downloads.png");
+}
+
+#bookmarks::before {
+ content: url("chrome://browser/content/abouthome/bookmarks.png");
+}
+
+#history::before {
+ content: url("chrome://browser/content/abouthome/history.png");
+}
+
+#apps::before {
+ content: url("chrome://browser/content/abouthome/apps.png");
+}
+
+#addons::before {
+ content: url("chrome://browser/content/abouthome/addons.png");
+}
+
+#sync::before {
+ content: url("chrome://browser/content/abouthome/sync.png");
+}
+
+#settings::before {
+ content: url("chrome://browser/content/abouthome/settings.png");
+}
+
+#restorePreviousSession::before {
+ content: url("chrome://browser/content/abouthome/restore-large.png");
+ height: 48px;
+ width: 48px;
+ display: inline-block; /* display on same line as text label */
+ vertical-align: middle;
+ margin-bottom: 0;
+ -moz-margin-end: 8px;
+}
+
+#restorePreviousSession:-moz-dir(rtl)::before {
+ transform: scaleX(-1);
+}
+
+body[narrow] #restorePreviousSession::before {
+ content: url("chrome://browser/content/abouthome/restore.png");
+ height: 32px;
+ width: 32px;
+}
+
+#aboutMozilla {
+ 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 {
+ opacity: 1;
+}
+
+#aboutMozilla::before {
+ content: url("chrome://browser/content/abouthome/mozilla.png");
+ display: block;
+ position: absolute;
+ top: 12px;
+ right: 12px;
+ width: 69px;
+ height: 19px;
+}
+
+/* [HiDPI]
+ * At resolutions above 1dppx, prefer downscaling the 2x Retina graphics
+ * rather than upscaling the original-size ones (bug 818940).
+ */
+@media not all and (max-resolution: 1dppx) {
+ #brandLogo {
+ background-image: url("chrome://branding/content/about-logo@2x.png");
+ }
+
+ #defaultSnippet1,
+ #defaultSnippet2,
+ #rightsSnippet {
+ background-size: 40px;
+ }
+
+ #defaultSnippet1 {
+ background-image: url("chrome://browser/content/abouthome/snippet1@2x.png");
+ }
+
+ #defaultSnippet2 {
+ background-image: url("chrome://browser/content/abouthome/snippet2@2x.png");
+ }
+
+ .launchButton::before,
+ #aboutMozilla::before {
+ transform: scale(.5);
+ transform-origin: 0 0;
+ }
+
+ #downloads::before {
+ content: url("chrome://browser/content/abouthome/downloads@2x.png");
+ }
+
+ #bookmarks::before {
+ content: url("chrome://browser/content/abouthome/bookmarks@2x.png");
+ }
+
+ #history::before {
+ content: url("chrome://browser/content/abouthome/history@2x.png");
+ }
+
+ #apps::before {
+ content: url("chrome://browser/content/abouthome/apps@2x.png");
+ }
+
+ #addons::before {
+ content: url("chrome://browser/content/abouthome/addons@2x.png");
+ }
+
+ #sync::before {
+ content: url("chrome://browser/content/abouthome/sync@2x.png");
+ }
+
+ #settings::before {
+ content: url("chrome://browser/content/abouthome/settings@2x.png");
+ }
+
+ #restorePreviousSession::before {
+ content: url("chrome://browser/content/abouthome/restore-large@2x.png");
+ }
+
+ 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/helpers/DATA/firefox/abouthome/aboutHome.js b/helpers/DATA/firefox/abouthome/aboutHome.js
new file mode 100644
index 0000000..d3b4aa9
--- /dev/null
+++ b/helpers/DATA/firefox/abouthome/aboutHome.js
@@ -0,0 +1,502 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const SEARCH_ENGINES = {
+ "Google": {
+ // This is the "2x" image designed for OS X retina resolution, Windows at 192dpi, etc.;
+ // it will be scaled down as necessary on lower-dpi displays.
+ image: "data:image/png;base64," +
+ "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"
+ }
+};
+
+// The process of adding a new default snippet involves:
+// * add a new entity to aboutHome.dtd
+// * add a for it in aboutHome.xhtml
+// * add an entry here in the proper ordering (based on spans)
+// The part of the snippet will be linked to the corresponding url.
+const DEFAULT_SNIPPETS_URLS = [ "" ];
+
+const SNIPPETS_UPDATE_INTERVAL_MS = 86400000; // 1 Day.
+
+// 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) {
+ for (let mutation of mutations) {
+ if (mutation.attributeName == "searchEngineName") {
+ setupSearchEngine();
+ if (!gInitialized) {
+// ensureSnippetsMapThen(loadSnippets);
+ 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);
+});
+
+// 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.
+ *
+ * @param aCallback
+ * Invoked once the map has been initialized, gets the map as argument.
+ * @note Snippets should never directly manage the underlying storage, since
+ * it may change inadvertently.
+ */
+function ensureSnippetsMapThen(aCallback)
+{
+return;
+ if (gSnippetsMap) {
+ aCallback(gSnippetsMap);
+ return;
+ }
+
+ // Handle multiple requests during the async initialization.
+ gSnippetsMapCallbacks.push(aCallback);
+ if (gSnippetsMapCallbacks.length > 1) {
+ // We are already updating, the callbacks will be invoked when done.
+ return;
+ }
+
+ let invokeCallbacks = function () {
+ if (!gSnippetsMap) {
+ gSnippetsMap = Object.freeze(new Map());
+ }
+
+ for (let callback of gSnippetsMapCallbacks) {
+ callback(gSnippetsMap);
+ }
+ gSnippetsMapCallbacks.length = 0;
+ }
+
+ let openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);
+
+ 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);
+ }
+ }
+
+ openRequest.onsuccess = function (event) {
+ let db = event.target.result;
+
+ db.onerror = function (event) {
+ invokeCallbacks();
+ }
+
+ db.onversionchange = function (event) {
+ event.target.close();
+ invokeCallbacks();
+ }
+
+ let cache = new Map();
+ let cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)
+ .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();
+ cursorRequest.onerror = function (event) {
+ invokeCallbacks();
+ }
+
+ cursorRequest.onsuccess = function(event) {
+ let cursor = event.target.result;
+
+ // Populate the cache from the persistent storage.
+ if (cursor) {
+ cache.set(cursor.key, cursor.value);
+ cursor.continue();
+ return;
+ }
+
+ // The cache has been filled up, create the snippets map.
+ gSnippetsMap = Object.freeze({
+ get: function (aKey) cache.get(aKey),
+ set: function (aKey, aValue) {
+ db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite")
+ .objectStore(SNIPPETS_OBJECTSTORE_NAME).put(aValue, aKey);
+ return cache.set(aKey, aValue);
+ },
+ has: function (aKey) cache.has(aKey),
+ delete: function (aKey) {
+ db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite")
+ .objectStore(SNIPPETS_OBJECTSTORE_NAME).delete(aKey);
+ return cache.delete(aKey);
+ },
+ clear: function () {
+ db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite")
+ .objectStore(SNIPPETS_OBJECTSTORE_NAME).clear();
+ return cache.clear();
+ },
+ get size() cache.size
+ });
+
+ setTimeout(invokeCallbacks, 0);
+ }
+ }
+}
+
+function onSearchSubmit(aEvent)
+{
+ let searchTerms = document.getElementById("searchText").value;
+ let engineName = document.documentElement.getAttribute("searchEngineName");
+
+ 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);
+ }
+
+ 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.
+ let searchText = document.getElementById("searchText");
+ searchText.addEventListener("blur", function searchText_onBlur() {
+ 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.
+ */
+function loadSucceeded()
+{
+ var event = new CustomEvent("AboutHomeLoadSnippetsSucceeded", {bubbles:true});
+ document.dispatchEvent(event);
+}
+
+/**
+ * Update the local snippets from the remote storage, then show them through
+ * showSnippets.
+ */
+function loadSnippets()
+{
+return;
+ if (!gSnippetsMap)
+ throw new Error("Snippets map has not properly been initialized");
+
+ // Allow tests to modify the snippets map before using it.
+ var event = new CustomEvent("AboutHomeLoadSnippets", {bubbles:true});
+ document.dispatchEvent(event);
+
+ // Check cached snippets version.
+ let cachedVersion = gSnippetsMap.get("snippets-cached-version") || 0;
+ let currentVersion = document.documentElement.getAttribute("snippetsVersion");
+ if (cachedVersion < currentVersion) {
+ // The cached snippets are old and unsupported, restart from scratch.
+ gSnippetsMap.clear();
+ }
+
+ // Check last snippets update.
+ let lastUpdate = gSnippetsMap.get("snippets-last-update");
+ let updateURL = document.documentElement.getAttribute("snippetsURL");
+ let shouldUpdate = !lastUpdate ||
+ Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;
+ if (updateURL && shouldUpdate) {
+ // Try to update from network.
+ let xhr = new XMLHttpRequest();
+ try {
+ xhr.open("GET", updateURL, true);
+ } catch (ex) {
+ showSnippets();
+ loadSucceeded();
+ return;
+ }
+ // Even if fetching should fail we don't want to spam the server, thus
+ // set the last update time regardless its results. Will retry tomorrow.
+ gSnippetsMap.set("snippets-last-update", Date.now());
+ xhr.onerror = function (event) {
+ showSnippets();
+ };
+ xhr.onload = function (event)
+ {
+ if (xhr.status == 200) {
+ gSnippetsMap.set("snippets", xhr.responseText);
+ gSnippetsMap.set("snippets-cached-version", currentVersion);
+ }
+ showSnippets();
+ loadSucceeded();
+ };
+ xhr.send(null);
+ } else {
+ showSnippets();
+ loadSucceeded();
+ }
+}
+
+/**
+ * Shows locally cached remote snippets, or default ones when not available.
+ *
+ * @note: snippets should never invoke showSnippets(), or they may cause
+ * a "too much recursion" exception.
+ */
+let _snippetsShown = false;
+function showSnippets()
+{
+return;
+ let snippetsElt = document.getElementById("snippets");
+
+ // Show about:rights notification, if needed.
+ let showRights = document.documentElement.getAttribute("showKnowYourRights");
+ if (showRights) {
+ let rightsElt = document.getElementById("rightsSnippet");
+ let anchor = rightsElt.getElementsByTagName("a")[0];
+ anchor.href = "about:rights";
+ snippetsElt.appendChild(rightsElt);
+ rightsElt.removeAttribute("hidden");
+ return;
+ }
+
+ if (!gSnippetsMap)
+ throw new Error("Snippets map has not properly been initialized");
+ if (_snippetsShown) {
+ // There's something wrong with the remote snippets, just in case fall back
+ // to the default snippets.
+ showDefaultSnippets();
+ throw new Error("showSnippets should never be invoked multiple times");
+ }
+ _snippetsShown = true;
+
+ let snippets = gSnippetsMap.get("snippets");
+ // If there are remotely fetched snippets, try to to show them.
+ if (snippets) {
+ // Injecting snippets can throw if they're invalid XML.
+ try {
+ snippetsElt.innerHTML = snippets;
+ // Scripts injected by innerHTML are inactive, so we have to relocate them
+ // through DOM manipulation to activate their contents.
+ Array.forEach(snippetsElt.getElementsByTagName("script"), function(elt) {
+ let relocatedScript = document.createElement("script");
+ relocatedScript.type = "text/javascript;version=1.8";
+ relocatedScript.text = elt.text;
+ elt.parentNode.replaceChild(relocatedScript, elt);
+ });
+ return;
+ } catch (ex) {
+ // Bad content, continue to show default snippets.
+ }
+ }
+
+ showDefaultSnippets();
+}
+
+/**
+ * Clear snippets element contents and show default snippets.
+ */
+function showDefaultSnippets()
+{
+return;
+ // Clear eventual contents...
+ let snippetsElt = document.getElementById("snippets");
+ snippetsElt.innerHTML = "";
+
+ // ...then show default snippets.
+ let defaultSnippetsElt = document.getElementById("defaultSnippets");
+ let entries = defaultSnippetsElt.querySelectorAll("span");
+ // Choose a random snippet. Assume there is always at least one.
+ let randIndex = Math.floor(Math.random() * entries.length);
+ let entry = entries[randIndex];
+ // Inject url in the eventual link.
+ if (DEFAULT_SNIPPETS_URLS[randIndex]) {
+ let links = entry.getElementsByTagName("a");
+ // Default snippets can have only one link, otherwise something is messed
+ // up in the translation.
+ if (links.length == 1) {
+ links[0].href = DEFAULT_SNIPPETS_URLS[randIndex];
+ }
+ }
+ // Move the default snippet to the snippets element.
+ snippetsElt.appendChild(entry);
+}
+
+function fitToWidth() {
+ if (window.scrollMaxX) {
+ document.body.setAttribute("narrow", "true");
+ } else if (document.body.hasAttribute("narrow")) {
+ document.body.removeAttribute("narrow");
+ fitToWidth();
+ }
+}
diff --git a/helpers/DATA/firefox/abouthome/aboutHome.xhtml b/helpers/DATA/firefox/abouthome/aboutHome.xhtml
new file mode 100644
index 0000000..3115a48
--- /dev/null
+++ b/helpers/DATA/firefox/abouthome/aboutHome.xhtml
@@ -0,0 +1,80 @@
+
+
+
+
+
+ %htmlDTD;
+
+ %globalDTD;
+
+ %aboutHomeDTD;
+
+ %browserDTD;
+]>
+
+
+
+ &abouthome.pageTitle;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/helpers/DATA/firefox/abouthome/addons.png b/helpers/DATA/firefox/abouthome/addons.png
new file mode 100644
index 0000000..41519ce
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/addons.png differ
diff --git a/helpers/DATA/firefox/abouthome/addons@2x.png b/helpers/DATA/firefox/abouthome/addons@2x.png
new file mode 100644
index 0000000..d4d04ee
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/addons@2x.png differ
diff --git a/helpers/DATA/firefox/abouthome/apps.png b/helpers/DATA/firefox/abouthome/apps.png
new file mode 100644
index 0000000..79fc95d
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/apps.png differ
diff --git a/helpers/DATA/firefox/abouthome/apps@2x.png b/helpers/DATA/firefox/abouthome/apps@2x.png
new file mode 100644
index 0000000..cbe7a6d
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/apps@2x.png differ
diff --git a/helpers/DATA/firefox/abouthome/bookmarks.png b/helpers/DATA/firefox/abouthome/bookmarks.png
new file mode 100644
index 0000000..5c7e194
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/bookmarks.png differ
diff --git a/helpers/DATA/firefox/abouthome/bookmarks@2x.png b/helpers/DATA/firefox/abouthome/bookmarks@2x.png
new file mode 100644
index 0000000..7ede007
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/bookmarks@2x.png differ
diff --git a/helpers/DATA/firefox/abouthome/downloads.png b/helpers/DATA/firefox/abouthome/downloads.png
new file mode 100644
index 0000000..3d4d10e
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/downloads.png differ
diff --git a/helpers/DATA/firefox/abouthome/downloads@2x.png b/helpers/DATA/firefox/abouthome/downloads@2x.png
new file mode 100644
index 0000000..d384a22
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/downloads@2x.png differ
diff --git a/helpers/DATA/firefox/abouthome/history.png b/helpers/DATA/firefox/abouthome/history.png
new file mode 100644
index 0000000..ae742b1
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/history.png differ
diff --git a/helpers/DATA/firefox/abouthome/history@2x.png b/helpers/DATA/firefox/abouthome/history@2x.png
new file mode 100644
index 0000000..696902e
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/history@2x.png differ
diff --git a/helpers/DATA/firefox/abouthome/restore-large.png b/helpers/DATA/firefox/abouthome/restore-large.png
new file mode 100644
index 0000000..ef593e6
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/restore-large.png differ
diff --git a/helpers/DATA/firefox/abouthome/restore-large@2x.png b/helpers/DATA/firefox/abouthome/restore-large@2x.png
new file mode 100644
index 0000000..d5c71d0
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/restore-large@2x.png differ
diff --git a/helpers/DATA/firefox/abouthome/restore.png b/helpers/DATA/firefox/abouthome/restore.png
new file mode 100644
index 0000000..5c3d6f4
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/restore.png differ
diff --git a/helpers/DATA/firefox/abouthome/restore@2x.png b/helpers/DATA/firefox/abouthome/restore@2x.png
new file mode 100644
index 0000000..5acb630
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/restore@2x.png differ
diff --git a/helpers/DATA/firefox/abouthome/settings.png b/helpers/DATA/firefox/abouthome/settings.png
new file mode 100644
index 0000000..4b0c309
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/settings.png differ
diff --git a/helpers/DATA/firefox/abouthome/settings@2x.png b/helpers/DATA/firefox/abouthome/settings@2x.png
new file mode 100644
index 0000000..c77cb9a
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/settings@2x.png differ
diff --git a/helpers/DATA/firefox/abouthome/snippet1.png b/helpers/DATA/firefox/abouthome/snippet1.png
new file mode 100644
index 0000000..ce2ec55
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/snippet1.png differ
diff --git a/helpers/DATA/firefox/abouthome/snippet1@2x.png b/helpers/DATA/firefox/abouthome/snippet1@2x.png
new file mode 100644
index 0000000..f57cd0a
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/snippet1@2x.png differ
diff --git a/helpers/DATA/firefox/abouthome/snippet2.png b/helpers/DATA/firefox/abouthome/snippet2.png
new file mode 100644
index 0000000..e0724fb
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/snippet2.png differ
diff --git a/helpers/DATA/firefox/abouthome/snippet2@2x.png b/helpers/DATA/firefox/abouthome/snippet2@2x.png
new file mode 100644
index 0000000..40577f5
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/snippet2@2x.png differ
diff --git a/helpers/DATA/firefox/abouthome/sync.png b/helpers/DATA/firefox/abouthome/sync.png
new file mode 100644
index 0000000..11e40cc
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/sync.png differ
diff --git a/helpers/DATA/firefox/abouthome/sync@2x.png b/helpers/DATA/firefox/abouthome/sync@2x.png
new file mode 100644
index 0000000..6354f5b
Binary files /dev/null and b/helpers/DATA/firefox/abouthome/sync@2x.png differ
diff --git a/helpers/DATA/firefox/bookmarks.html.in b/helpers/DATA/firefox/bookmarks.html.in
index 98fff6f..9767e59 100644
--- a/helpers/DATA/firefox/bookmarks.html.in
+++ b/helpers/DATA/firefox/bookmarks.html.in
@@ -15,7 +15,6 @@
Wiki
Donate
Store
- @identi.ca
GNU's not UNIX!
GNU Planet
diff --git a/helpers/DATA/firefox/branding/LICENSE b/helpers/DATA/firefox/branding/LICENSE
new file mode 100644
index 0000000..32d55b9
--- /dev/null
+++ b/helpers/DATA/firefox/branding/LICENSE
@@ -0,0 +1,10 @@
+These files are under the MPL 2, as below. However, please note that you
+are not granted any trademark rights or licenses to the trademarks of the
+Mozilla Foundation or any party, including without limitation the
+Firefox name or logo.
+
+For more information, see: http://www.mozilla.org/foundation/licensing.html
+
+This Source Code Form is subject to the terms of the Mozilla Public
+License, v. 2.0. If a copy of the MPL was not distributed with this
+file, You can obtain one at http://mozilla.org/MPL/2.0/.
diff --git a/helpers/DATA/firefox/branding/Makefile.in b/helpers/DATA/firefox/branding/Makefile.in
index 25578dc..0d21270 100644
--- a/helpers/DATA/firefox/branding/Makefile.in
+++ b/helpers/DATA/firefox/branding/Makefile.in
@@ -2,12 +2,6 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-DEPTH = @DEPTH@
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
include $(topsrcdir)/config/config.mk
PREF_JS_EXPORTS = $(srcdir)/pref/abrowser-branding.js
@@ -44,7 +38,7 @@ BRANDING_FILES := \
$(NULL)
endif
-ifeq ($(MOZ_WIDGET_TOOLKIT),gtk2)
+ifdef MOZ_WIDGET_GTK
BRANDING_FILES := \
default16.png \
default32.png \
@@ -70,5 +64,3 @@ VISUALMANIFEST_FLAGS := -Fsubstitution -DMOZ_APP_DISPLAYNAME=${MOZ_APP_DISPLAYNA
VISUALMANIFEST_PATH := $(DIST)/bin
PP_TARGETS += VISUALMANIFEST
endif
-
-include $(topsrcdir)/config/rules.mk
diff --git a/helpers/DATA/firefox/branding/VisualElementsManifest.xml b/helpers/DATA/firefox/branding/VisualElementsManifest.xml
index 5e97c80..f763409 100644
--- a/helpers/DATA/firefox/branding/VisualElementsManifest.xml
+++ b/helpers/DATA/firefox/branding/VisualElementsManifest.xml
@@ -5,7 +5,7 @@
Logo="tileresources\VisualElements_logo.png"
SmallLogo="tileresources\VisualElements_smalllogo.png"
ForegroundText="light"
- BackgroundColor="#001226">
+ BackgroundColor="#0a1833">
+image/svg+xml
+
+
+
+Abrowser
+
+
\ No newline at end of file
diff --git a/helpers/DATA/firefox/branding/content/aboutDialog.css b/helpers/DATA/firefox/branding/content/aboutDialog.css
index 1113fd1..4c2a7b6 100644
--- a/helpers/DATA/firefox/branding/content/aboutDialog.css
+++ b/helpers/DATA/firefox/branding/content/aboutDialog.css
@@ -11,6 +11,7 @@
.text-link {
color: #fff !important;
+ text-decoration: underline;
}
#rightBox {
diff --git a/helpers/DATA/firefox/branding/content/icon48.png b/helpers/DATA/firefox/branding/content/icon48.png
index c648f72..5fc7861 100644
Binary files a/helpers/DATA/firefox/branding/content/icon48.png and b/helpers/DATA/firefox/branding/content/icon48.png differ
diff --git a/helpers/DATA/firefox/branding/content/icon64.png b/helpers/DATA/firefox/branding/content/icon64.png
index ad1dd7f..83f7016 100644
Binary files a/helpers/DATA/firefox/branding/content/icon64.png and b/helpers/DATA/firefox/branding/content/icon64.png differ
diff --git a/helpers/DATA/firefox/branding/content/identity-icons-brand.png b/helpers/DATA/firefox/branding/content/identity-icons-brand.png
new file mode 100644
index 0000000..feba160
Binary files /dev/null and b/helpers/DATA/firefox/branding/content/identity-icons-brand.png differ
diff --git a/helpers/DATA/firefox/branding/content/identity-icons-brand@2x.png b/helpers/DATA/firefox/branding/content/identity-icons-brand@2x.png
new file mode 100644
index 0000000..9b2d6bc
Binary files /dev/null and b/helpers/DATA/firefox/branding/content/identity-icons-brand@2x.png differ
diff --git a/helpers/DATA/firefox/branding/content/jar.mn b/helpers/DATA/firefox/branding/content/jar.mn
index abe651b..dc07b3d 100644
--- a/helpers/DATA/firefox/branding/content/jar.mn
+++ b/helpers/DATA/firefox/branding/content/jar.mn
@@ -7,9 +7,21 @@ browser.jar:
content/branding/about.png (about.png)
content/branding/about-background.png (about-background.png)
content/branding/about-logo.png (about-logo.png)
- content/branding/about-wordmark.png (about-wordmark.png)
+ content/branding/about-logo@2x.png (about-logo@2x.png)
+ content/branding/about-wordmark.svg (about-wordmark.svg)
content/branding/icon48.png (icon48.png)
content/branding/icon64.png (icon64.png)
content/branding/icon16.png (../default16.png)
content/branding/icon32.png (../default32.png)
+ content/branding/icon128.png (../mozicon128.png)
+ content/branding/identity-icons-brand.png (identity-icons-brand.png)
+ content/branding/identity-icons-brand@2x.png (identity-icons-brand@2x.png)
content/branding/aboutDialog.css (aboutDialog.css)
+#ifdef MOZ_METRO
+ content/branding/metro-about.css (metro-about.css)
+ content/branding/metro-about-footer.png (metro-about-footer.png)
+ content/branding/metro-about-wordmark.png (metro-about-wordmark.png)
+ content/branding/metro_firstrun_logo.png (metro_firstrun_logo.png)
+ content/branding/metro_firstrun_logo@1.4x.png (metro_firstrun_logo@1.4x.png)
+ content/branding/metro_firstrun_logo@1.8x.png (metro_firstrun_logo@1.8x.png)
+#endif
diff --git a/helpers/DATA/firefox/branding/content/metro-about-footer.png b/helpers/DATA/firefox/branding/content/metro-about-footer.png
new file mode 100644
index 0000000..8e507f1
Binary files /dev/null and b/helpers/DATA/firefox/branding/content/metro-about-footer.png differ
diff --git a/helpers/DATA/firefox/branding/content/metro-about-wordmark.png b/helpers/DATA/firefox/branding/content/metro-about-wordmark.png
new file mode 100644
index 0000000..8b51896
Binary files /dev/null and b/helpers/DATA/firefox/branding/content/metro-about-wordmark.png differ
diff --git a/helpers/DATA/firefox/branding/content/metro-about.css b/helpers/DATA/firefox/branding/content/metro-about.css
new file mode 100644
index 0000000..ae59ca7
--- /dev/null
+++ b/helpers/DATA/firefox/branding/content/metro-about.css
@@ -0,0 +1,14 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#about-flyoutpanel {
+ background-color: #002147;
+ color: white;
+}
+
+#about-policy-label:hover,
+#about-policy-label:active {
+ background: #0a111c;
+}
+
diff --git a/helpers/DATA/firefox/branding/content/metro_firstrun_logo.png b/helpers/DATA/firefox/branding/content/metro_firstrun_logo.png
new file mode 100644
index 0000000..d54fb00
Binary files /dev/null and b/helpers/DATA/firefox/branding/content/metro_firstrun_logo.png differ
diff --git a/helpers/DATA/firefox/branding/content/metro_firstrun_logo@1.4x.png b/helpers/DATA/firefox/branding/content/metro_firstrun_logo@1.4x.png
new file mode 100644
index 0000000..d2a2fff
Binary files /dev/null and b/helpers/DATA/firefox/branding/content/metro_firstrun_logo@1.4x.png differ
diff --git a/helpers/DATA/firefox/branding/content/metro_firstrun_logo@1.8x.png b/helpers/DATA/firefox/branding/content/metro_firstrun_logo@1.8x.png
new file mode 100644
index 0000000..2d5297f
Binary files /dev/null and b/helpers/DATA/firefox/branding/content/metro_firstrun_logo@1.8x.png differ
diff --git a/helpers/DATA/firefox/branding/content/moz.build b/helpers/DATA/firefox/branding/content/moz.build
index 58ce5e2..c97072b 100644
--- a/helpers/DATA/firefox/branding/content/moz.build
+++ b/helpers/DATA/firefox/branding/content/moz.build
@@ -1,5 +1,7 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
diff --git a/helpers/DATA/firefox/branding/default128.png b/helpers/DATA/firefox/branding/default128.png
deleted file mode 100644
index 0954708..0000000
Binary files a/helpers/DATA/firefox/branding/default128.png and /dev/null differ
diff --git a/helpers/DATA/firefox/branding/default22.png b/helpers/DATA/firefox/branding/default22.png
deleted file mode 100644
index b1ee5e3..0000000
Binary files a/helpers/DATA/firefox/branding/default22.png and /dev/null differ
diff --git a/helpers/DATA/firefox/branding/default24.png b/helpers/DATA/firefox/branding/default24.png
deleted file mode 100644
index 6082f17..0000000
Binary files a/helpers/DATA/firefox/branding/default24.png and /dev/null differ
diff --git a/helpers/DATA/firefox/branding/default256.png b/helpers/DATA/firefox/branding/default256.png
deleted file mode 100644
index 4dbec8c..0000000
Binary files a/helpers/DATA/firefox/branding/default256.png and /dev/null differ
diff --git a/helpers/DATA/firefox/branding/disk.icns b/helpers/DATA/firefox/branding/disk.icns
index e97e490..718f1a3 100644
Binary files a/helpers/DATA/firefox/branding/disk.icns and b/helpers/DATA/firefox/branding/disk.icns differ
diff --git a/helpers/DATA/firefox/branding/document.icns b/helpers/DATA/firefox/branding/document.icns
index f5af7a7..ff419f2 100644
Binary files a/helpers/DATA/firefox/branding/document.icns and b/helpers/DATA/firefox/branding/document.icns differ
diff --git a/helpers/DATA/firefox/branding/document.ico b/helpers/DATA/firefox/branding/document.ico
index 3111163..584a0a1 100644
Binary files a/helpers/DATA/firefox/branding/document.ico and b/helpers/DATA/firefox/branding/document.ico differ
diff --git a/helpers/DATA/firefox/branding/document.png b/helpers/DATA/firefox/branding/document.png
deleted file mode 100644
index be4a022..0000000
Binary files a/helpers/DATA/firefox/branding/document.png and /dev/null differ
diff --git a/helpers/DATA/firefox/branding/dsstore b/helpers/DATA/firefox/branding/dsstore
index bbba9ec..2d11482 100644
Binary files a/helpers/DATA/firefox/branding/dsstore and b/helpers/DATA/firefox/branding/dsstore differ
diff --git a/helpers/DATA/firefox/branding/locales/Makefile.in b/helpers/DATA/firefox/branding/locales/Makefile.in
index d199ba2..82f614e 100644
--- a/helpers/DATA/firefox/branding/locales/Makefile.in
+++ b/helpers/DATA/firefox/branding/locales/Makefile.in
@@ -2,14 +2,4 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-DEPTH = @DEPTH@
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-relativesrcdir = @relativesrcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-DEFINES += -DAB_CD=$(AB_CD) -DMOZ_DISTRIBUTION_ID_UNQUOTED=$(MOZ_DISTRIBUTION_ID)
-
-include $(topsrcdir)/config/rules.mk
+DEFINES += -DAB_CD=$(AB_CD)
diff --git a/helpers/DATA/firefox/branding/locales/browserconfig.properties b/helpers/DATA/firefox/branding/locales/browserconfig.properties
index 2cfd1ea..06cefec 100644
--- a/helpers/DATA/firefox/branding/locales/browserconfig.properties
+++ b/helpers/DATA/firefox/branding/locales/browserconfig.properties
@@ -3,4 +3,4 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# Do NOT localize or otherwise change these values
-browser.startup.homepage=http://trisquel.info
+browser.startup.homepage=about:home
diff --git a/helpers/DATA/firefox/branding/locales/en-US/brand.dtd b/helpers/DATA/firefox/branding/locales/en-US/brand.dtd
index c2e72f4..b1b0eb7 100644
--- a/helpers/DATA/firefox/branding/locales/en-US/brand.dtd
+++ b/helpers/DATA/firefox/branding/locales/en-US/brand.dtd
@@ -5,4 +5,4 @@
-
+
diff --git a/helpers/DATA/firefox/branding/locales/en-US/brand.properties b/helpers/DATA/firefox/branding/locales/en-US/brand.properties
index 7f82b88..a24cc63 100644
--- a/helpers/DATA/firefox/branding/locales/en-US/brand.properties
+++ b/helpers/DATA/firefox/branding/locales/en-US/brand.properties
@@ -6,4 +6,10 @@ brandShortName=Abrowser
brandFullName=Abrowser
vendorShortName=Trisquel
+homePageSingleStartMain=Abrowser Start, a fast home page with built-in search
+homePageImport=Import your home page from %S
+
+homePageMigrationPageTitle=Home Page Selection
+homePageMigrationDescription=Please select the home page you wish to use:
+
syncBrandShortName=Sync
diff --git a/helpers/DATA/firefox/branding/locales/moz.build b/helpers/DATA/firefox/branding/locales/moz.build
index 58ce5e2..3a54c0c 100644
--- a/helpers/DATA/firefox/branding/locales/moz.build
+++ b/helpers/DATA/firefox/branding/locales/moz.build
@@ -1,5 +1,9 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+DEFINES['MOZ_DISTRIBUTION_ID_UNQUOTED'] = CONFIG['MOZ_DISTRIBUTION_ID']
+
+JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
diff --git a/helpers/DATA/firefox/branding/moz.build b/helpers/DATA/firefox/branding/moz.build
index f179404..3e2f88f 100644
--- a/helpers/DATA/firefox/branding/moz.build
+++ b/helpers/DATA/firefox/branding/moz.build
@@ -1,3 +1,4 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -5,3 +6,5 @@
DIRS += ['content', 'locales']
+DIST_SUBDIR = 'browser'
+export('DIST_SUBDIR')
diff --git a/helpers/DATA/firefox/branding/particles.bmp b/helpers/DATA/firefox/branding/particles.bmp
index 12578c6..ab74ce0 100644
Binary files a/helpers/DATA/firefox/branding/particles.bmp and b/helpers/DATA/firefox/branding/particles.bmp differ
diff --git a/helpers/DATA/firefox/branding/pencil-rtl.bmp b/helpers/DATA/firefox/branding/pencil-rtl.bmp
index 2920511..e50d92d 100644
Binary files a/helpers/DATA/firefox/branding/pencil-rtl.bmp and b/helpers/DATA/firefox/branding/pencil-rtl.bmp differ
diff --git a/helpers/DATA/firefox/branding/pencil.bmp b/helpers/DATA/firefox/branding/pencil.bmp
index ef65392..252c10f 100644
Binary files a/helpers/DATA/firefox/branding/pencil.bmp and b/helpers/DATA/firefox/branding/pencil.bmp differ
diff --git a/helpers/DATA/firefox/branding/splash.bmp b/helpers/DATA/firefox/branding/splash.bmp
deleted file mode 100644
index d2afefd..0000000
Binary files a/helpers/DATA/firefox/branding/splash.bmp and /dev/null differ
diff --git a/helpers/DATA/firefox/branding/wizHeader.bmp b/helpers/DATA/firefox/branding/wizHeader.bmp
index 0800023..f67b452 100644
Binary files a/helpers/DATA/firefox/branding/wizHeader.bmp and b/helpers/DATA/firefox/branding/wizHeader.bmp differ
diff --git a/helpers/DATA/firefox/branding/wizHeaderRTL.bmp b/helpers/DATA/firefox/branding/wizHeaderRTL.bmp
index 03d984f..7c57e46 100644
Binary files a/helpers/DATA/firefox/branding/wizHeaderRTL.bmp and b/helpers/DATA/firefox/branding/wizHeaderRTL.bmp differ
diff --git a/helpers/DATA/firefox/branding/wizWatermark.bmp b/helpers/DATA/firefox/branding/wizWatermark.bmp
index c54ee6a..05f0e7f 100644
Binary files a/helpers/DATA/firefox/branding/wizWatermark.bmp and b/helpers/DATA/firefox/branding/wizWatermark.bmp differ
diff --git a/helpers/DATA/firefox/enable-js-options.patch b/helpers/DATA/firefox/enable-js-options.patch
new file mode 100644
index 0000000..9cca7a9
--- /dev/null
+++ b/helpers/DATA/firefox/enable-js-options.patch
@@ -0,0 +1,310 @@
+# HG changeset patch
+# User Gijs Kruitbosch
+# Date 1365155574 -7200
+# Node ID 444b9baa31d6065d37edbd61a2dcb892c989e0e2
+# Parent 99121d529b47ec285d61f64988335e60ac120cf7
+Bug 851702 - Remove JS load and advanced preferences from the UI
+
+diff --git a/browser/components/preferences/advanced-scripts.xul b/browser/components/preferences/advanced-scripts.xul
+deleted file mode 100644
+--- a/browser/components/preferences/advanced-scripts.xul
++++ /dev/null
+@@ -1,46 +0,0 @@
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+diff --git a/browser/components/preferences/content.xul b/browser/components/preferences/content.xul
+--- a/browser/components/preferences/content.xul
++++ b/browser/components/preferences/content.xul
+@@ -17,23 +17,18 @@
+
+
+
+
+
+
+-
++
+
+-
+-
+-
+
+
+
+
+
+@@ -56,30 +51,16 @@
+ label="&blockPopups.label;" accesskey="&blockPopups.accesskey;"
+ onsyncfrompreference="return gContentPane.updateButtons('popupPolicyButton',
+ 'dom.disable_open_during_load');"/>
+
+
+
+-
+-
+-
+-
+-
+-
+-
+-
+
+
+
+
+
+
+
+
+diff --git a/browser/components/preferences/in-content/content.xul b/browser/components/preferences/in-content/content.xul
+--- a/browser/components/preferences/in-content/content.xul
++++ b/browser/components/preferences/in-content/content.xul
+@@ -1,24 +1,18 @@
+
+
+
+
+-
++
+
+-
+-
+
+
+
+
+
+@@ -45,30 +39,16 @@
+ label="&blockPopups.label;" accesskey="&blockPopups.accesskey;"
+ onsyncfrompreference="return gContentPane.updateButtons('popupPolicyButton',
+ 'dom.disable_open_during_load');"/>
+
+
+
+-
+-
+-
+-
+-
+-
+-
+-
+
+
+
+
+
+
+
+
+diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
+--- a/browser/components/preferences/jar.mn
++++ b/browser/components/preferences/jar.mn
+@@ -4,17 +4,16 @@
+
+ browser.jar:
+ content/browser/preferences/aboutPermissions.xul
+ content/browser/preferences/aboutPermissions.js
+ content/browser/preferences/aboutPermissions.css
+ content/browser/preferences/aboutPermissions.xml
+ * content/browser/preferences/advanced.xul
+ * content/browser/preferences/advanced.js
+- content/browser/preferences/advanced-scripts.xul
+ content/browser/preferences/applications.xul
+ * content/browser/preferences/applications.js
+ content/browser/preferences/applicationManager.xul
+ * content/browser/preferences/applicationManager.js
+ * content/browser/preferences/colors.xul
+ * content/browser/preferences/cookies.xul
+ content/browser/preferences/cookies.js
+ content/browser/preferences/content.xul
+diff --git a/browser/locales/en-US/chrome/browser/preferences/advanced-scripts.dtd b/browser/locales/en-US/chrome/browser/preferences/advanced-scripts.dtd
+deleted file mode 100644
+--- a/browser/locales/en-US/chrome/browser/preferences/advanced-scripts.dtd
++++ /dev/null
+@@ -1,15 +0,0 @@
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+diff --git a/browser/locales/en-US/chrome/browser/preferences/content.dtd b/browser/locales/en-US/chrome/browser/preferences/content.dtd
+--- a/browser/locales/en-US/chrome/browser/preferences/content.dtd
++++ b/browser/locales/en-US/chrome/browser/preferences/content.dtd
+@@ -2,25 +2,16 @@
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+
+
+
+
+
+-
+-
+-
+-
+-
+-
+-
+-
+-
+
+
+
+
+
+
+
+
+diff --git a/browser/locales/jar.mn b/browser/locales/jar.mn
+--- a/browser/locales/jar.mn
++++ b/browser/locales/jar.mn
+@@ -81,17 +81,16 @@
+ #endif
+ locale/browser/feeds/subscribe.dtd (%chrome/browser/feeds/subscribe.dtd)
+ locale/browser/feeds/subscribe.properties (%chrome/browser/feeds/subscribe.properties)
+ locale/browser/migration/migration.dtd (%chrome/browser/migration/migration.dtd)
+ locale/browser/migration/migration.properties (%chrome/browser/migration/migration.properties)
+ locale/browser/preferences/aboutPermissions.dtd (%chrome/browser/preferences/aboutPermissions.dtd)
+ locale/browser/preferences/aboutPermissions.properties (%chrome/browser/preferences/aboutPermissions.properties)
+ locale/browser/preferences/advanced.dtd (%chrome/browser/preferences/advanced.dtd)
+- locale/browser/preferences/advanced-scripts.dtd (%chrome/browser/preferences/advanced-scripts.dtd)
+ locale/browser/preferences/applicationManager.dtd (%chrome/browser/preferences/applicationManager.dtd)
+ locale/browser/preferences/applicationManager.properties (%chrome/browser/preferences/applicationManager.properties)
+ locale/browser/preferences/colors.dtd (%chrome/browser/preferences/colors.dtd)
+ locale/browser/preferences/cookies.dtd (%chrome/browser/preferences/cookies.dtd)
+ locale/browser/preferences/content.dtd (%chrome/browser/preferences/content.dtd)
+ locale/browser/preferences/connection.dtd (%chrome/browser/preferences/connection.dtd)
+ locale/browser/preferences/applications.dtd (%chrome/browser/preferences/applications.dtd)
+ locale/browser/preferences/fonts.dtd (%chrome/browser/preferences/fonts.dtd)
+--- a/browser/components/preferences/content.js 2014-04-28 01:52:01.000000000 +0200
++++ b/browser/components/preferences/content.js 2014-05-07 17:02:34.000000000 +0200
+@@ -57,18 +57,7 @@
+ "chrome://browser/content/preferences/permissions.xul",
+ "", params);
+ },
+-
+- // JAVASCRIPT
+
+- /**
+- * Displays the advanced JavaScript preferences for enabling or disabling
+- * various annoying behaviors.
+- */
+- showAdvancedJS: function ()
+- {
+- openDialog("chrome://browser/content/preferences/advanced-scripts.xul",
+- "Browser:AdvancedScripts", null);
+- },
+
+ // FONTS
+
+--- a/browser/components/preferences/in-content/content.js 2014-05-07 17:01:48.000000000 +0200
++++ b/browser/components/preferences/in-content/content.js 2014-04-28 01:52:01.000000000 +0200
+@@ -58,18 +58,6 @@
+ "Browser:Permissions", "resizable=yes", params);
+ },
+
+- // JAVASCRIPT
+-
+- /**
+- * Displays the advanced JavaScript preferences for enabling or disabling
+- * various annoying behaviors.
+- */
+- showAdvancedJS: function ()
+- {
+- openDialog("chrome://browser/content/preferences/advanced-scripts.xul",
+- "Browser:AdvancedScripts", null);
+- },
+-
+ // FONTS
+
+ /**
diff --git a/helpers/DATA/firefox/settings.js b/helpers/DATA/firefox/settings.js
index c74b12c..fed5df1 100644
--- a/helpers/DATA/firefox/settings.js
+++ b/helpers/DATA/firefox/settings.js
@@ -49,8 +49,8 @@ pref("general.useragent.compatMode.abrowser",true);
// Startup pages
pref ("browser.startup.page" , 3);
-//pref ("browser.startup.homepage" , "http://trisquel.info");
-//pref ("startup.homepage_welcome_url", "http://trisquel.info/welcome");
+pref ("browser.startup.homepage" , "http://trisquel.info");
+pref ("startup.homepage_welcome_url", "http://trisquel.info/welcome");
//pref ("startup.homepage_override_url" , "http://trisquel.info/newbrowser");
// Preferences for the Get Add-ons panel
@@ -59,6 +59,9 @@ pref ("extensions.getAddons.search.url", "http://trisquel.info");
// Help URL
pref ("app.support.baseURL", "http://trisquel.info/wiki/");
+pref ("browser.uitour.url", "http://trisquel.info/browser");
+pref ("plugins.update.url", "http://trisquel.info/browser");
+pref ("browser.customizemode.tip0.learnMoreUrl", "http://trisquel.info/browser");
// Dictionary download preference
pref("browser.dictionaries.download.url", "http://dictionaries.mozdev.org/");
diff --git a/helpers/make-firefox b/helpers/make-firefox
index c5d4030..0aff299 100644
--- a/helpers/make-firefox
+++ b/helpers/make-firefox
@@ -17,12 +17,15 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=1
+VERSION=19
. ./config
rm debian/control
+# revert https://bug851702.bugzilla.mozilla.org/attachment.cgi?id=733785
+patch -p1 -R < $DATA/enable-js-options.patch
+
# js settings
cat $DATA/settings.js >> debian/vendor-firefox.js
@@ -30,23 +33,35 @@ cat $DATA/settings.js >> debian/vendor-firefox.js
#sed 's/Depends: lsb-release,/Depends: lsb-release, xul-ext-ubufox,/' -i debian/control.in
#sed 's/iceweasel,/iceweasel, firefox, icecat,/' -i debian/control.in
+
+sed '/mozilla.org\/legal/d' -i services/healthreport/healthreport-prefs.js
+cat << EOF >>services/healthreport/healthreport-prefs.js
+pref("datareporting.healthreport.infoURL", "https://trisquel.info/legal");
+EOF
+
+sed 's%https://www.mozilla.org/legal/privacy/%https://trisquel.info/legal%' -i ./modules/libpref/src/init/all.js ./browser/app/profile/firefox.js ./browser/base/content/aboutDialog.xul ./toolkit/content/aboutRights.xhtml
+
+#sed 's%https://www.mozilla.org/firefox/central/%https://trisquel.info/browser%' -i browser/base/content/browser-appmenu.inc
+
# Enable gst support
apt-get install -y --force-yes libgstreamermm-0.10-dev
echo "ac_add_options --enable-gstreamer" >> debian/config/mozconfig.in
+sed 's/com.ubuntu/org.trisquel/' -i debian/config/mozconfig.in
+
# Locale packages should provide firefox-locale-$LANG
sed "s/Provides.*/Provides: firefox-locale-@LANGCODE@/" -i debian/control.langpacks
-# Remove extra firefox metapackages
-sed '/Package: firefox/,/It can be safely removed/d' -i debian/control.in
-
# Remove Ubuntu bookmarks
sed -i /ubuntu-bookmarks/d debian/patches/series
rm debian/patches/ubuntu-bookmarks*
#Unbrand url codes for google and amazon
-#rm debian/patches/ubuntu-codes*
-#sed /ubuntu-codes/d debian/patches/series.in -i
+find debian/searchplugins |grep google| xargs -i /bin/sed '/ubuntu/d; /channel/d' -i {}
+find debian/searchplugins |grep duck| xargs -i /bin/sed 's/canonical/trisquel/' -i {}
+find debian/searchplugins |grep amazon| xargs -i /bin/sed '/canoniccom/d;' -i {}
+
+replace "mozilla.com/plugincheck" "trisquel.info/browser" .
# contact link
sed 's_https://input.mozilla.org/feedback_https://trisquel.info/contact_' -i browser/base/content/utilityOverlay.js
@@ -63,37 +78,22 @@ app.distributor.channel = "trisquel"
app.partner.ubuntu = "trisquel"
EOF
-# speed up build process
-#sed 's/\(^MOZ_WANT_UNIT_TESTS.*\)1/\1 0/' -i debian/rules
-#sed 's/\(^MOZ_ENABLE_BREAKPAD.*\)1/\1 0/' -i debian/rules
-
-# Set release to unofficial
-sed '/MOZ_BUILD_OFFICIAL/d' debian/config/branch.mk -i
-echo 'MOZ_BUILD_OFFICIAL = 0' >> debian/config/branch.mk
-#sed "s/release$/$CODENAME/" -i debian/rules
-
-#TARBALL=$(ls *.tar.bz2)
-#tar -jxf $TARBALL
-#rm $TARBALL
-#sed '1s/^/\nMOZ_APP_NAME\t\t:= abrowser/' -i debian/build/mozbuild.mk
sed "s/^MOZ_APP_NAME\t.*/MOZ_APP_NAME\t\t:= abrowser/;" debian/build/config.mk -i
sed "s/^MOZ_PKG_NAME\t.*/MOZ_PKG_NAME\t\t:= abrowser/;" debian/build/config.mk -i
-# Hack to avoid compilation to fail on 3.0x kernel
-#cp mozilla/security/coreconf/Linux2.6.mk mozilla/security/coreconf/Linux3.0.mk
-
############################################################################3
############################################################################3
############################################################################3
-sed -i s/abrowser/abrowser-old/ debian/control.in
sed "s_^Maintainer.*_Maintainer: $DEBFULLNAME <$DEBEMAIL>_g" -i debian/control.in
# Replace Firefox branding
find -type d | grep firefox | xargs rename s/firefox/abrowser/
find -type f | grep firefox | xargs rename s/firefox/abrowser/
+find -type f | grep Firefox | xargs rename s/Firefox/Abrowser/
replace(){
find $3 -type f |grep -v changelog |grep -v copyright | xargs -i sed -i s^"$1"^"$2"^g "{}"
}
+replace "Mozilla Firefox" "Abrowser" .
replace firefox abrowser .
replace Firefox Abrowser .
replace FIREFOX ABROWSER .
@@ -105,76 +105,36 @@ sed s/Trisquel/Mozilla/ python/compare-locales/setup.py -i
replace "iceweasel, abrowser" "iceweasel, firefox" .
replace "Replaces: abrowser" "Replaces: firefox" .
#sed s/Ubuntu/Trisquel/g debian/rules -i
-sed s/ubuntu/trisquel/g debian/distribution.ini debian/config/mozconfig.in -i
+sed s/ubuntu/trisquel/g debian/distribution.ini -i
sed 's/ubuntu_version/trisquel_version/; s/Ubuntu 10.10/Trisquel 4.0/; s/1010/40/' -i debian/abrowser.postinst.in
# abrowser-dev should provide firefox-dev
sed '/Package: @MOZ_PKG_NAME@-dev/,/Description:/ s/Provides:/Provides:firefox-dev, /' debian/control.in -i
-# Redirect feedback menu
-#sed s:input.mozilla.com/feedback:trisquel.info/contact: b2g/app/b2g.js -i
-
-# Make abrowser-locale-$lang provide firefox-locale-$lang
-#sed 's/Package:\(.*\)/Package:\1\nProvides: firefox-locale-@LANGCODE@/g' debian/control.langpacks* -i
-
# Branding files
rm browser/branding/* -rf
-cp -a $DATA/branding/ browser/branding/$CODENAME
+cp -a $DATA/branding/ browser/branding/official
cat << EOF > debian/config/branch.mk
-CHANNEL = $CODENAME
+CHANNEL = release
MOZ_WANT_UNIT_TESTS = 0
-MOZ_BUILD_UNOFFICIAL = 1
+# MOZ_BUILD_OFFICIAL = 1
MOZ_ENABLE_BREAKPAD = 0
MOZILLA_REPO = http://hg.mozilla.org/releases/mozilla-release
L10N_REPO = http://hg.mozilla.org/releases/l10n/mozilla-release
EOF
-#set default layout
-cat << EOF |patch -p1 -N -r /dev/null
---- mozilla/browser/base/content/browser.xul.old 2011-07-18 02:35:10.000000000 +0000
-+++ mozilla/browser/base/content/browser.xul 2011-07-18 02:40:51.000000000 +0000
-@@ -477,6 +477,7 @@
- defaultset="menubar-items"
- mode="icons" iconsize="small" defaulticonsize="small"
- lockiconsize="true"
-+ autohide="true"
- #ifdef MENUBAR_CAN_AUTOHIDE
- toolbarname="&menubarCmd.label;"
- accesskey="&menubarCmd.accesskey;"
-@@ -493,7 +493,7 @@
- toolbarname="&navbarCmd.label;" accesskey="&navbarCmd.accesskey;"
- fullscreentoolbar="true" mode="icons" customizable="true"
- iconsize="large"
-- defaultset="unified-back-forward-button,urlbar-container,reload-button,stop-button,search-container,webrtc-status-button,bookmarks-menu-button,downloads-button,home-button,window-controls"
-+ defaultset="unified-back-forward-button,reload-button,stop-button,home-button,urlbar-container,search-container,fullscreenflex,window-controls"
- context="toolbar-context-menu">
-
-
-
-@@ -801,7 +802,7 @@
- aria-label="&tabsToolbar.label;"
- context="toolbar-context-menu"
- #ifdef APPMENU_ON_TABBAR
-- defaultset="appmenu-toolbar-button,tabbrowser-tabs,new-tab-button,alltabs-button,tabs-closebutton"
-+ defaultset="appmenu-toolbar-button,tabbrowser-tabs,new-tab-button,flvideoreplacer-toolbar-button,downloads-button,feed-button,alltabs-button,tabs-closebutton"
- #else
- defaultset="tabbrowser-tabs,new-tab-button,alltabs-button,tabs-closebutton"
- #endif
-EOF
+# Replace about:home
+rm browser/base/content/abouthome -rf
+cp $DATA/abouthome -a browser/base/content
+sed '/mozilla.*png/d' -i ./browser/base/jar.mn
+
+# Delete stuff we don't use and that may contain trademaked logos
+rm -rf ./browser/metro ./mobile ./addon-sdk/source/doc/static-files/media ./browser/themes/windows ./browser/themes/osx ./b2b
#Trisquel custom bookmarks
cp $DATA/bookmarks.html.in browser/locales/generic/profile/bookmarks.html.in
-
mkdir debian/search
# Add DDG to search plugins
cat << EOF > debian/search/duckduckgo.xml
@@ -232,7 +192,7 @@ cat << EOF >> toolkit/mozapps/extensions/content/extensions.css
}
EOF
-find -wholename '*branding/brand.dtd' |xargs sed 's/trademarkInfo.part1.*/trademarkInfo.part1 "">/' -i
+find -wholename '*/brand.dtd' |xargs /bin/sed 's/trademarkInfo.part1.*/trademarkInfo.part1 "">/' -i
for STRING in community.end3 community.exp.end community.start2 community.mozillaLink community.middle2 community.creditsLink community.end2 contribute.start contribute.getInvolvedLink contribute.end channel.description.start channel.description.end
do
@@ -260,12 +220,7 @@ sed '/Provides/s/abrowser-locale/firefox-locale/' -i debian/control.langpacks
sed '/MOZILLA_UAVERSION/ s:Abrowser/:Firefox/:' -i netwerk/protocol/http/nsHttpHandler.cpp
# Set migrator scripts
-cp browser/components/migration/src/FirefoxProfileMigrator.js browser/components/migration/src/AbrowserProfileMigrator.js
-sed 's/Abrowser/Firefox/g; s/abrowser/firefox/g' -i browser/components/migration/src/FirefoxProfileMigrator.js
-
-#tar -cjf $TARBALL mozilla
-#rm mozilla -rf
-#cp $DATA/control debian/control
+sed 's/Abrowser/Firefox/g; s/abrowser/firefox/g' -i browser/components/migration/src/AbrowserProfileMigrator.js
# Postinst script to manage profile migration and system links
echo '