ubufox-3.2/locale/af/ubufox-restart.properties000664 001750 001750 00000000316 12200012773 021721 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Jou blaaier is opgedateer en moet herlaai word. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Herlaai restartNotificationKey=h ubufox-3.2/locale/el/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 021735 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/content/overlay.js000664 001750 001750 00000016645 12562363764 016515 0ustar00chr1schr1s000000 000000 /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is distro-mods. * * The Initial Developer of the Original Code is * Canonical Ltd. * Portions created by the Initial Developer are Copyright (C) 2007 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ if (!com) var com = {}; if (!com.ubuntu) com.ubuntu = {}; (function() { const { classes: Cc, utils: Cu } = Components; Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/PopupNotifications.jsm"); Cu.import("resource://ubufox/modules/Distro.jsm"); var UpdateRestartListener = { restartRequested: false, addNotificationToBrowser: function URL_addNotificationToBrowser(aBrowser, aRaised) { PopupNotifications.show(aBrowser, "ubufox-restart-request", this.restartNotificationLabel, "ubufox-restart-notification-icon", {label: this.restartNotificationButton, accessKey: this.restartNotificationKey, callback: (function() { gBrowser.tabContainer.removeEventListener("TabOpen", this.onTabOpen, false); gBrowser.browsers.forEach(function(browser) { let notification = PopupNotifications.getNotification("ubufox-restart-request", browser); if (notification) { PopupNotifications.remove(notification); } }); Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup) .quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); }).bind(this)}, [], {dismissed: aRaised ? false : true, timeout: 8.64e15}); }, onTabOpen: function URL_onTabOpen(aEvent) { window.setTimeout(function() { UpdateRestartListener.addNotificationToBrowser(gBrowser.getBrowserForTab(aEvent.target), false); }, 0); }, displayNotifications: function URL_displayNotifications() { gBrowser.browsers.forEach(function(browser) { this.addNotificationToBrowser(browser, browser == gBrowser.selectedBrowser ? true : false); }, this); }, requestRestart: function URL_requestRestart() { if (!this.restartRequested) { gBrowser.tabContainer.addEventListener("TabOpen", this.onTabOpen, false); this.displayNotifications(); this.restartRequested = true; } }, onAppUpdated: function URL_onAppUpdated() { this.requestRestart(); }, onPluginsUpdated: function URL_onPluginsUpdated() { this.requestRestart(); } }; XPCOMUtils.defineLazyGetter(UpdateRestartListener, "oldRestartNotificationLabel", function() { return document.getElementById("ubufox-restart-strings") .getString("oldRestartNotificationLabel"); }); XPCOMUtils.defineLazyGetter(UpdateRestartListener, "restartNotificationLabel", function() { return document.getElementById("ubufox-restart-strings") .getFormattedString("restartNotificationLabel", [document.getElementById("bundle_brand") .getString("brandShortName")]); }); XPCOMUtils.defineLazyGetter(UpdateRestartListener, "restartNotificationButton", function() { return document.getElementById("ubufox-restart-strings") .getString("restartNotificationButton"); }); XPCOMUtils.defineLazyGetter(UpdateRestartListener, "restartNotificationKey", function() { return document.getElementById("ubufox-restart-strings") .getString("restartNotificationKey"); }); this.Ubufox = { reportBug: function() { distro.reportBug(); }, help: function() { openUILinkIn(distro.helpURL, "tab"); } }; function buildHelpMenu() { document.getElementById("ubufox-reportbug").setAttribute("hidden", !distro.canReportBug); } addEventListener("load", function() { try { removeEventListener("load", arguments.callee, false); Cc["@ubuntu.com/update-notifier;1"].getService() .wrappedJSObject .addListener(UpdateRestartListener); gInitialPages.push("about:startpage"); document.getElementById("menu_HelpPopup").addEventListener("popupshowing", buildHelpMenu, false); } catch(e) { Cu.reportError(e); } }, false); addEventListener("unload", function() { removeEventListener("unload", arguments.callee, false); try { document.getElementById("menu_HelpPopup").removeEventListener("popupshowing", buildHelpMenu, false); } catch(e) {} // Don't remove this call, ever. Without this we will leak the // document as it is in the scope of the callback, which // UpdateRestartNotifier is holding on to Cc["@ubuntu.com/update-notifier;1"].getService() .wrappedJSObject .removeListener(UpdateRestartListener); }, false); }).call(com.ubuntu); ubufox-3.2/locale/cs/ubufox.properties000664 001750 001750 00000000174 12563417707 020302 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/sl/ubufox.properties000664 001750 001750 00000000174 12563423776 020316 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/res/distributions/Ubuntu.jsm000664 001750 001750 00000012536 12543105545 020475 0ustar00chr1schr1s000000 000000 /* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ubufox. * * The Initial Developer of the Original Code is * Canonical Ltd. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Chris Coulson * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ const { classes: Cc, interfaces: Ci, utils: Cu } = Components; Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/FileUtils.jsm"); Cu.import("resource://ubufox/modules/Distro.jsm"); Cu.import("resource://ubufox/modules/utils.jsm"); addLogger(this, "distro.ubuntu"); var EXPORTED_SYMBOLS = [ "DistroImpl" ]; const HOMEPAGE_BASE_URI = "http://start.ubuntu.com/"; const HOMEPAGE_PATH = "%VERSION%/%SEARCH_PROVIDER%"; // This allows us to map search plugins to a startpage search provider const HOMEPAGE_PROVIDER_TABLE = [ {"field": "searchForm", "regex": /.*search\.yahoo\.com\//, "provider": "Yahoo"}, {"field": "searchForm", "regex": /.*google\.com\//, "provider": "Google"}, ]; // This allows us to specify additional query parameters for // a search provider const HOMEPAGE_PROVIDER_QUERY_MAP = { "Google": "sourceid=hp" }; // The default startpage search provider const HOMEPAGE_DEFAULT_PROVIDER = "Google"; function apportExists() { try { let executable = new FileUtils.File("/usr/bin/ubuntu-bug"); return executable.isExecutable(); } catch(e) { return false; } } function getProviderForCurrentSearchEngine() { function buildReturnParams(aProvider) { return {"name": aProvider, "query": HOMEPAGE_PROVIDER_QUERY_MAP[aProvider]}; } let searchEngine = Services.search.currentEngine; try { for each (let entry in HOMEPAGE_PROVIDER_TABLE) { if (searchEngine[entry.field].match(entry.regex) == searchEngine[entry.field]) { return buildReturnParams(entry.provider); } } } catch(e) { ERROR("Failed to build parameters for search engine", e); } return buildReturnParams(HOMEPAGE_DEFAULT_PROVIDER); } var DistroImpl = { get canReportBug() { let dist_id; try { dist_id = Services.prefs.getCharPref("distribution.id"); } catch(e) { } return apportExists() && dist_id == "canonical"; }, reportBug: function Ubuntu_reportBug() { if (!apportExists()) { throw new Error("Apport must be installed in order to report a bug"); } let dist_id; try { dist_id = Services.prefs.getCharPref("distribution.id"); } catch(e) { } if (dist_id != "canonical") { throw new Error("Don't know how to report a bug for non-Ubuntu builds"); } let executable = new FileUtils.File("/usr/bin/ubuntu-bug"); let procUtil = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); procUtil.init(executable); let pkgname = Cc["@mozilla.org/xre/app-info;1"] .getService(Ci.nsIXULAppInfo).name.toLowerCase() if (!pkgname) { pkgname = "firefox"; } let args = new Array(pkgname); procUtil.run(false, args, args.length); }, get startpageURI() { // FIXME: about:home doesn't work when called from our about:startpage // handler //try { // if (Services.prefs.getCharPref("distribution.id") != "canonical") { // return Services.io.newURI("about:home", null, null); // } //} catch(e) { // return Services.io.newURI("about:home", null, null); //} let provider = getProviderForCurrentSearchEngine(); let baseuri = Services.io.newURI(HOMEPAGE_BASE_URI, null, null); let path = HOMEPAGE_PATH; path = path.replace(/%VERSION%/, distro.version.replace(/^([^\.]*)\.([^\.]*).*/, "$1.$2")); path = path.replace(/%SEARCH_PROVIDER%/, provider.name); let query = ""; if (provider.query != null) { query += "?" + provider.query; } return Services.io.newURI(path + "/" + query, null, baseuri); } }; ubufox-3.2/locale/it/ubufox-restart.properties000664 001750 001750 00000000332 12200012773 021745 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Il browser è stato aggiornato ed è necessario riavviarlo. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Riavvia restartNotificationKey=r ubufox-3.2/locale/pt-PT/ubufox.properties000664 001750 001750 00000000174 12563423643 020635 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/fi/ubufox-restart.properties000664 001750 001750 00000000351 12200012773 021730 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Selain on päivitetty ja se täytyy käynnistää uudelleen. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Käynnistä uudelleen restartNotificationKey=u ubufox-3.2/locale/gl/000775 001750 001750 00000000000 12563420504 014634 5ustar00chr1schr1s000000 000000 ubufox-3.2/components/000775 001750 001750 00000000000 12543105300 015150 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/bg/ubufox-restart.properties000664 001750 001750 00000000436 12200012773 021726 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Вашият браузър беше актуализиран и трябва да се рестартира. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Рестартиране restartNotificationKey=р ubufox-3.2/locale/en-CA/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 022220 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/res/000775 001750 001750 00000000000 12431422144 013560 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/bg/ubufox.dtd000664 001750 001750 00000000131 12200012773 016613 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/nl/000775 001750 001750 00000000000 12563421156 014647 5ustar00chr1schr1s000000 000000 ubufox-3.2/install.rdf000664 001750 001750 00000021242 12563427221 015142 0ustar00chr1schr1s000000 000000 ubufox@ubuntu.com Ubuntu Modifications 3.2 Canonical Ltd. 2 Alexander Sack <asac@ubuntu.com> Sasa Bodiroza <jazzva@gmail.com> Daniel Abramov <ex@vingrad.ru> Arzhel Younsi <xionox@gmail.com> Saïvann Carignan <oxmosys@gmail.com> Chris Coulson <chris.coulson@canonical.com> Ubuntu modifications for Firefox chrome://ubufox/content/ubuntulogo32.png af Ubuntu Modifications Ubuntu Firefox Pak Canonical Ltd. ar Ubuntu Modifications حزمة فايرفوكس من أوبونتو. Canonical Ltd. bg Ubuntu Modifications Ubuntu Firefox Pack. Canonical Ltd. ca Ubuntu Modifications Paquet del Firefox de l'Ubuntu. Canonical Ltd. cs Ubuntu Modifications Ubuntu rozšíření pro Firefox. Canonical Ltd. de Ubuntu Modifications Ubuntu Firefox Paket. Canonical Ltd. el Ubuntu Modifications Πακέτο του Ubuntu για το Firefox. Canonical Ltd. es Ubuntu Modifications Paquete de Ubuntu para Firefox. Canonical Ltd. eu Ubuntu Modifications Ubuntu Firefox Pack. Canonical Ltd. fi Ubuntu Modifications Ubuntun Firefox-paketti Canonical Ltd. fr Ubuntu Modifications Paquet Firefox Pour Ubuntu. Canonical Ltd. gl Ubuntu Modifications Paquete de Ubuntu para Firefox. Canonical Ltd. hu Ubuntu Modifications Ubuntu Firefox csomag Canonical Ltd. it Ubuntu Modifications Pacchetto Firefox Ubuntu. Canonical Ltd. ja Ubuntu Modifications Ubuntu Firefoxパック。 Canonical Ltd. lt Ubuntu Modifications Ubuntu Firefox paketas Canonical Ltd. nl Ubuntu Modifications Ubuntu Firefox-pakket. Canonical Ltd. pl Ubuntu Modifications Pakiet Ubuntu Firefox. Canonical Ltd. pt-BR Ubuntu Modifications Pacote para o Firefox do Ubuntu Canonical Ltd. pt-PT Ubuntu Modifications Pacote Ubuntu Firefox Canonical Ltd. ro Ubuntu Modifications Pachetul Ubuntu Firefox. Canonical Ltd. ru Ubuntu Modifications Расширения Firefox для Ubuntu Canonical Ltd. sl Ubuntu Modifications Ubuntu razširitve za Firefox. Canonical Ltd. sv-SE Ubuntu Modifications Ubuntu-paket för Firefox. Canonical Ltd. uk Ubuntu Modifications Убунтівські доповнення до Firefox. Canonical Ltd. zh-CN Ubuntu Modifications Ubuntu 火狐扩展包. Canonical Ltd. zh-TW Ubuntu Modifications Ubuntu Firefox 擴充包。 Canonical Ltd. {ec8030f7-c20a-464f-9b0e-13a3a9e97384} 9.0 37.0a1 ubufox-3.2/locale/af/ubufox.properties000664 001750 001750 00000000174 12563417156 020261 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/fr/000775 001750 001750 00000000000 12563420415 014642 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/zh-TW/ubufox.dtd000664 001750 001750 00000000075 12200012773 017203 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/bg/ubufox.properties000664 001750 001750 00000000174 12563417571 020264 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/ar/ubufox.properties000664 001750 001750 00000000174 12563417522 020272 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/gl/ubufox-restart.properties000664 001750 001750 00000000331 12200012773 021732 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=O seu navegador foi actualizado e é preciso reinicialo. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Reiniciar restartNotificationKey=r ubufox-3.2/locale/fi/000775 001750 001750 00000000000 12563420315 014630 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/pt-PT/ubufox-restart.properties000664 001750 001750 00000000332 12200012773 022275 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=O seu navegador foi actualizado e precisa ser reiniciado. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Reiniciar restartNotificationKey=r ubufox-3.2/locale/ja/ubufox.dtd000664 001750 001750 00000000111 12200012773 016613 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/es/000775 001750 001750 00000000000 12563420173 014643 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/ar/ubufox-restart.properties000664 001750 001750 00000000366 12200012773 021742 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=تم تحديث متصفّحك ويحتاج لإعادة تشغيله. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=أعِد التشغيل restartNotificationKey=ت ubufox-3.2/config_build.sh000664 001750 001750 00000000275 12431422270 015753 0ustar00chr1schr1s000000 000000 #!/bin/bash # Build config for build.sh APP_NAME=ubufox CHROME_PROVIDERS="content locale res" CLEAN_UP=1 ROOT_FILES= ROOT_DIRS="defaults components" BEFORE_BUILD= BEFORE_PACK= AFTER_BUILD= ubufox-3.2/locale/uk/000775 001750 001750 00000000000 12563424123 014652 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/ru/ubufox.dtd000664 001750 001750 00000000127 12200012773 016656 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/fi/ubufox.properties000664 001750 001750 00000000174 12563420315 020260 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/lt/ubufox.properties000664 001750 001750 00000000174 12563421121 020275 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/en-CA/000775 001750 001750 00000000000 12563420124 015113 5ustar00chr1schr1s000000 000000 ubufox-3.2/res/libs/gobject.jsm000664 001750 001750 00000011616 12200012773 016643 0ustar00chr1schr1s000000 000000 /* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ubufox. * * The Initial Developer of the Original Code is * Canonical Ltd. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Chris Coulson * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ const { utils: Cu } = Components; var EXPORTED_SYMBOLS = [ "gobject" ]; const GOBJECT_LIBNAME = "gobject-2.0"; const GOBJECT_ABIS = [ 0 ]; Cu.import("resource://gre/modules/ctypes.jsm"); Cu.import("resource://ubufox/modules/utils.jsm"); Cu.import("resource://ubufox/libs/glib.jsm"); var gSignalHandlers = {}; var gSignals = {}; function gobject_defines(lib) { // Enums CTypesUtils.defineFlags(this, "GConnectFlags", 0, [ "G_CONNECT_AFTER", "G_CONNECT_SWAPPED" ]); // Types CTypesUtils.defineSimple(this, "GObject", ctypes.StructType("GObject")); CTypesUtils.defineSimple(this, "GClosure", ctypes.StructType("GClosure")); CTypesUtils.defineSimple(this, "GCallback", ctypes.voidptr_t); // Templates CTypesUtils.defineSimple(this, "GClosureNotify", ctypes.FunctionType(ctypes.default_abi, ctypes.void_t, [glib.gpointer, this.GClosure.ptr]).ptr); // Functions lib.lazy_bind("g_object_ref", glib.gpointer, [glib.gpointer]); lib.lazy_bind("g_object_unref", ctypes.void_t, [glib.gpointer]); lib.lazy_bind_with_wrapper("g_signal_connect", function(aWrappee, aInstance, aSignal, aHandler) { if (!aInstance.constructor.targetType) { throw Error("Instance must be a pointer type"); } if (!(aInstance.constructor.targetType in gSignals) || !(aSignal in gSignals[aInstance.constructor.targetType])) { throw Error("No prototype available for signal"); } var ccw = CTypesUtils.wrapCallback(aHandler, {type: gSignals[aInstance.constructor.targetType][aSignal], root: false}); var id = aWrappee(aInstance, aSignal, ccw, null, null, 0); // Root the callback gSignalHandlers[id] = ccw; return id; }, glib.gulong, [glib.gpointer, glib.gchar.ptr, this.GCallback, glib.gpointer, this.GClosureNotify, this.GConnectFlags], "g_signal_connect_data"); lib.lazy_bind_with_wrapper("g_signal_handler_disconnect", function(aWrappee, aInstance, aId) { aWrappee(aInstance, aId); // Unroot the callback delete gSignalHandlers[aId]; }, ctypes.void_t, [glib.gpointer, glib.gulong]); Object.defineProperty(this, "createSignal", { value: function(aType, aName, aRetType, aArgTypes) { if (!aType || "targetType" in aType) { throw Error("Must specify a concrete C type"); } if (typeof(aName) != "string") { throw Error("Must specify a signal name"); } if (!(aType in gSignals)) { gSignals[aType] = {}; } if (aName in gSignals[aType]) { throw Error("Cannot redefine signal"); } gSignals[aType][aName] = ctypes.FunctionType(ctypes.default_abi, aRetType, aArgTypes).ptr; }, enumerable: true }); } var gobject = new CTypesUtils.newLibrary(GOBJECT_LIBNAME, GOBJECT_ABIS, gobject_defines); ubufox-3.2/locale/en-AU/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 022242 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/locale/pt-BR/ubufox-restart.properties000664 001750 001750 00000000337 12200012773 022262 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Seu navegador foi atualizado e precisa ser reinicializado. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Reinicializar restartNotificationKey=r ubufox-3.2/components/UpdateNotifier.js000664 001750 001750 00000040172 12543100326 020437 0ustar00chr1schr1s000000 000000 /* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ubufox. * * The Initial Developer of the Original Code is * Canonical Ltd. * Portions created by the Initial Developer are Copyright (C) 2008 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Alexander Sack - Canonical Ltd. * Arzhel Younsi * Chris Coulson * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ const { classes: Cc, interfaces: Ci, utils: Cu } = Components; Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/FileUtils.jsm"); Cu.import("resource://gre/modules/ctypes.jsm"); Cu.import("resource://ubufox/modules/utils.jsm"); Cu.import("resource://ubufox/libs/gio.jsm"); Cu.import("resource://ubufox/libs/gobject.jsm"); Cu.import("resource://ubufox/libs/glib.jsm"); const NS_XPCOM_CURRENT_PROCESS_DIR = "XCurProcD"; const NS_GRE_DIR = "GreD"; const NS_USER_PLUGINS_DIR = "UserPlugins"; const NS_APP_PLUGINS_DIR = "APlugns"; const NS_SYSTEM_PLUGINS_DIR = "SysPlugins"; const XRE_SYS_LOCAL_EXTENSION_PARENT_DIR = "XRESysLExtPD"; const XRE_SYS_SHARE_EXTENSION_PARENT_DIR = "XRESysSExtPD"; const XRE_EXTENSIONS_DIR_LIST = "XREExtDL"; addLogger(this, "update-notifier"); function UpdateNotifier() { LOG("Starting"); this.wrappedJSObject = this; var listeners = []; var watches = {}; var timers = {}; var dispatched = []; var plugins = {}; /** * Add a listener to receive update notifications * Calling this inside a notification may produce undefined results * * @param aListener * The listener object */ this.addListener = function UN_addListener(aListener) { if (!aListener) { throw new Error("A listener must be specified"); } if (typeof(aListener) != "object") { throw new Error("Invalid listener"); } if (listeners.indexOf(aListener) != -1) { throw new Error("Trying to register an observer more than once"); } listeners.push(aListener); for (let event in dispatched) { try { if (event in aListener) { aListener[event].apply(aListener, dispatched[event]); } } catch(e) { ERROR("Listener threw", e); } } }; /** * Remove a listener and don't receive any more notifications. * Calling this inside a notification may produce undefined results * * @param aListener * The listener to remove */ this.removeListener = function UN_removeListener(aListener) { let index = listeners.indexOf(aListener); if (index == -1) { throw new Error("Trying to remove an observer that was never registered"); } listeners.splice(index, 1); }; function dispatchNotification(aEvent) { if (dispatched.indexOf(aEvent) != -1) { return; } dispatched.push(aEvent); listeners.forEach(function(listener) { try { if (aEvent in listener) { listener[aEvent].apply(listener); } } catch(e) { ERROR("Listener threw", e); } }); } function handleAppUpdated() { LOG("Application change detected"); dispatchNotification("onAppUpdated"); } function handlePluginsChanged() { LOG("Plugin change detected"); let ph = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost); try { ph.reloadPlugins(false); } catch(e) { LOG("nsIPluginHost.reloadPlugins failed. No changes?"); return; } // Here's how this works: // - We iterate over the updated list of plugin tags from the plugin host // - For each plugin tag, we check if we have old data for that plugin, // looking up by path // - We then pass over and new plugin data that hasn't been paired with // old data, and see if it matches any old data by name. This is to handle // plugin upgrades where the install path changes. We do this in // a separate pass in case there is more than one plugin with the same // name. In this case, we can still get a match if only one of those // is updated. // - Obviously, if a plugin update changes its path and name, we detect // that as a new install // - For each plugin, we compare the newest mtime with the recorded mtime // from the old plugin data (if it exists). If the old data exists and the // mtime is different, then the plugin was updated let newPlugins = {}; ph.getPluginTags().forEach(function(pluginTag) { LOG("Processing plugin \"" + pluginTag.name + "\" at " + pluginTag.fullpath); if (pluginTag.fullpath in plugins) { var oldPluginData = plugins[pluginTag.fullpath]; delete plugins[pluginTag.fullpath]; } if (oldPluginData) { LOG("Found old data for plugin with the same path (\"" + oldPluginData.name + "\", lastModifiedTime " + oldPluginData.lastModifiedTime + ")"); } if (!(pluginTag.fullpath in newPlugins)) { let plugin = { "pluginData": { "path": pluginTag.fullpath, "name": pluginTag.name }, "oldPluginData": oldPluginData }; newPlugins[pluginTag.fullpath] = plugin; try { plugin.pluginData.lastModifiedTime = (new FileUtils.File(pluginTag.fullpath)) .lastModifiedTime; LOG("Updated lastModifiedTime: " + plugin.pluginData .lastModifiedTime); } catch(e) { LOG("Plugin at path " + pluginTag.fullpath + " was not found"); delete newPlugins[pluginTag.fullpath]; } } }); let pluginPathsByName = {}; for (let path in plugins) { pluginPathsByName[plugins[path].name] = path; } // Try to match new data to old data by name, for plugins // where the install path changed for each (let plugin in newPlugins) { if (plugin.oldPluginData) { continue; } if (plugin.pluginData.name in pluginPathsByName) { let path = pluginPathsByName[plugin.pluginData.name]; plugin.oldPluginData = plugins[path]; delete plugins[path]; LOG("Found old data for plugin \"" + plugin.pluginData.name + "\". Old path: " + path + ", old lastModifiedTime: " + plugin.oldPluginData.lastModifiedTime + ", new path: " + plugin.pluginData.path); } } Object.keys(plugins).forEach(function(path) { LOG("Plugin \"" + plugins[path].name + "\" at " + plugins[path].path + " was removed"); delete plugins[path]; }); let foundUpdated = false; for each (let plugin in newPlugins) { if (plugin.oldPluginData && plugin.oldPluginData.lastModifiedTime != plugin.pluginData.lastModifiedTime) { LOG("Plugin \"" + plugin.pluginData.name + "\" at " + plugin.pluginData.path + " was updated"); foundUpdated = true; } else if (!plugin.oldPluginData) { LOG("Plugin \"" + plugin.pluginData.name + "\" at " + plugin.pluginData.path + " was newly installed"); } else { LOG("Plugin \"" + plugin.pluginData.name + "\" at " + plugin.pluginData.path + " is unchanged"); } plugins[plugin.pluginData.path] = plugin.pluginData; } if (foundUpdated) { dispatchNotification("onPluginsUpdated"); } } function handleAddonsChanged() { // We don't know how to handle addon changes yet } function handler(aFile, aEventType, aIsDir) { if (aEventType == gio.GFileMonitorEventEnums.G_FILE_MONITOR_EVENT_CHANGED || aEventType == gio.GFileMonitorEventEnums.G_FILE_MONITOR_EVENT_DELETED || aEventType == gio.GFileMonitorEventEnums.G_FILE_MONITOR_EVENT_CREATED || aEventType == gio.GFileMonitorEventEnums.G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED) { let path = gio.g_file_get_path(aFile); let type; if (!(path in watches) && aIsDir) { type = watches[(new FileUtils.File(path)).parent.path].type; } else { type = watches[path].type; } if (!type) { ERROR("Got event for a path not in our watch list: " + path); return; } // Wait for the location to settle before dispatching the notification if (!(type in timers)) { timers[type] = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); timers[type].initWithCallback(function() { delete timers[type]; ((new Object({"app" : handleAppUpdated, "plugins": handlePluginsChanged, "addons" : handleAddonsChanged}))[type])(); }, 10000, Ci.nsITimer.TYPE_ONE_SHOT); } else { timers[type].delay = 10000; } } } function watchOneFile(aFile, aType) { if (!aFile.exists() || !aFile.isFile()) { return; } aFile.normalize(); let file = gio.g_file_new_for_path(aFile.path); if (file.isNull()) { ERROR("OOM: Failed to get GFile for path " + aFile.path); return; } let mon = gio.g_file_monitor_file(file, gio.GFileMonitorFlagsFlags.G_FILE_MONITOR_NONE, null, null); gobject.g_object_unref(file); if (mon.isNull()) { ERROR("Failed to create monitor for path " + aFile.path); return; } let id = gobject.g_signal_connect(mon, "changed", function(aMonitor, aFile, aOtherFile, aEventType) { handler(aFile, aEventType, false); }); watches[aFile.path] = {monitor: mon, sig_id: id, type: aType}; LOG("Watching " + aFile.path); } function watchOneDir(aKey, aPaths, aType) { let nsifile; if (aKey instanceof Ci.nsIFile) { nsifile = aKey; aPaths.forEach(function(path) { nsifile.append(path); }); } else { nsifile = FileUtils.getDir(aKey, aPaths); } if (!nsifile.exists() || !nsifile.isDirectory()) { return; } nsifile.normalize(); if (nsifile.path in watches) { return; } let file = gio.g_file_new_for_path(nsifile.path); if (file.isNull()) { ERROR("OOM: Failed to get GFile for path " + nsifile.path); return; } let mon = gio.g_file_monitor_directory(file, gio.GFileMonitorFlagsFlags.G_FILE_MONITOR_NONE, null, null); gobject.g_object_unref(file); if (mon.isNull()) { ERROR("Failed to create monitor for path " + nsifile.path); return; } let id = gobject.g_signal_connect(mon, "changed", function(aMonitor, aFile, aOtherFile, aEventType) { handler(aFile, aEventType, true); }); watches[nsifile.path] = {monitor: mon, sig_id: id, type: aType}; LOG("Watching " + nsifile.path); } function watchList(aKey, aType, aFilterList) { let e = Services.dirsvc.get(aKey, Ci.nsISimpleEnumerator); let files = []; while (e.hasMoreElements()) { files.push(e.getNext().QueryInterface(Ci.nsIFile)); } if (aFilterList) { files = files.filter(function(aValue, aIndex, aArray) { if (aFilterList.indexOf(aValue.parent.path) != -1) { return true; } return false; }); } files.forEach(function(file) { if (!(file.exists())) { return; } if (file.isDirectory()) { watchOneDir(file, [], aType); } else { watchOneFile(file, aType); } }); } Services.obs.addObserver(function(aSubject, aTopic, aData) { if (aSubject == "xpcom-shutdown") { Services.obs.removeObserver(arguments.callee, "xpcom-shutdown", false); for (let path in watches) { gobject.g_signal_handler_disconnect(watches[path].monitor, watches[path].sig_id); gobject.g_object_unref(watches[path].monitor); } } }, "xpcom-shutdown", false); var idle = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); idle.initWithCallback(function() { let anchor = idle; watchOneDir(NS_XPCOM_CURRENT_PROCESS_DIR, [], "app"); watchOneDir(NS_GRE_DIR, [], "app"); watchOneDir(NS_APP_PLUGINS_DIR, [], "plugins"); watchOneDir(NS_SYSTEM_PLUGINS_DIR, [], "plugins"); //watchOneDir(XRE_SYS_LOCAL_EXTENSION_PARENT_DIR, // [Services.appinfo.ID], "addons"); //watchOneDir(XRE_SYS_SHARE_EXTENSION_PARENT_DIR, // [Services.appinfo.ID], "addons"); //watchOneDir(NS_XPCOM_CURRENT_PROCESS_DIR, // ["extensions"], "addons"); //watchList(XRE_EXTENSIONS_DIR_LIST, "addons", // [FileUtils.getDir(XRE_SYS_LOCAL_EXTENSION_PARENT_DIR, // [Services.appinfo.ID]).path, // FileUtils.getDir(XRE_SYS_SHARE_EXTENSION_PARENT_DIR, // [Services.appinfo.ID]).path, // FileUtils.getDir(NS_XPCOM_CURRENT_PROCESS_DIR, // ["extensions"]).path]); idle.initWithCallback(function() { let anchor = idle; // Would use the AddonManager here, but it doesn't expose full paths. // We use a delay here to avoid starting the plugin host at startup // if it isn't otherwise needed LOG("Initializing plugin data"); Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost) .getPluginTags() .forEach(function(aPluginTag) { try { plugins[aPluginTag.fullpath] = { "path": aPluginTag.fullpath, "name": aPluginTag.name, "lastModifiedTime": (new FileUtils.File(aPluginTag.fullpath)) .lastModifiedTime }; LOG("Found plugin \"" + aPluginTag.name + "\" at " + aPluginTag.fullpath + ", lastModifiedTime: " + plugins[aPluginTag.fullpath].lastModifiedTime); } catch(e) { delete plugins[aPluginTag.fullpath]; LOG("Plugin \"" + aPluginTag.name + "\" doesn't exist at " + aPluginTag.fullpath); } }); }, 8000, Ci.nsITimer.TYPE_ONE_SHOT); }, 0, Ci.nsITimer.TYPE_ONE_SHOT); } UpdateNotifier.prototype = { classDescription: "Update Notifier", classID: Components.ID("{799a4700-2085-40e8-853a-05dcf8e95e41}"), contractID: "@ubuntu.com/update-notifier;1", QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports]) }; const NSGetFactory = XPCOMUtils.generateNSGetFactory([UpdateNotifier]); ubufox-3.2/locale/eu/000775 001750 001750 00000000000 12563420246 014646 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/pt-PT/ubufox.dtd000664 001750 001750 00000000105 12200012773 017170 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/fr/ubufox.dtd000664 001750 001750 00000000103 12200012773 016631 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/ja/ubufox-restart.properties000664 001750 001750 00000000340 12200012773 021722 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=ブラウザが更新されたので再起動が必要です。 restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=再起動 restartNotificationKey=r ubufox-3.2/locale/de/ubufox.dtd000664 001750 001750 00000000076 12200012773 016623 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/fr/ubufox.properties000664 001750 001750 00000000174 12563420415 020272 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/el/000775 001750 001750 00000000000 12563420022 014625 5ustar00chr1schr1s000000 000000 ubufox-3.2/content/overlay.css000664 001750 001750 00000000362 12543104767 016651 0ustar00chr1schr1s000000 000000 #ubufox-restart-notification-icon { list-style-image: url(moz-icon://stock/reboot-notifier?size=menu); } .popup-notification-icon[popupid="ubufox-restart-request"] { list-style-image: url(moz-icon://stock/reboot-notifier?size=dialog); } ubufox-3.2/locale/zh-CN/ubufox.dtd000664 001750 001750 00000000075 12200012773 017151 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/ro/ubufox.properties000664 001750 001750 00000000174 12563423664 020314 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/res/distributions/000775 001750 001750 00000000000 12543105545 016471 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/en-CA/ubufox.properties000664 001750 001750 00000000174 12563420124 020543 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/ro/ubufox-restart.properties000664 001750 001750 00000000345 12200012773 021755 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Navigatorul dumneavoastră a fost actualizat și trebuie repornit. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Repornește restartNotificationKey=r ubufox-3.2/res/modules/000775 001750 001750 00000000000 12543110760 015232 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/pl/ubufox.dtd000664 001750 001750 00000000100 12200012773 016632 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/en-CA/ubufox.dtd000664 001750 001750 00000000101 12200012773 017103 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/sl/ubufox.dtd000664 001750 001750 00000000103 12200012773 016640 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/lt/000775 001750 001750 00000000000 12563421121 014645 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/pl/ubufox.properties000664 001750 001750 00000000174 12563421217 020277 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/000775 001750 001750 00000000000 12200012773 014223 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/gl/ubufox.dtd000664 001750 001750 00000000113 12200012773 016625 0ustar00chr1schr1s000000 000000 ubufox-3.2/content/ubuntulogo32.png000664 001750 001750 00000003654 12200012773 017524 0ustar00chr1schr1s000000 000000 PNG  IHDR szzbKGD pHYsHHFk> vpAg IDATXÕ{lTY?;yu. XMXeYEv`D-.D5&+ĘnEhVlbxH&-K[(e =38qftI&{!m0@# eQ` Ȣ%o>6~@+Ā^ň, /u2Φr#q{~h h@*ƫ#Gb@5iyKDSF=Htu m+p&!x+`X"{?GheXÃ$3(3$mWe_\ЃUъpƱ"n{nQ̍g#^Z {,Ao|z ȧ^L9ti[I0*.ڧ/?m?DEpW=vE.7F0k_k#.4S*(LW!DOʥhA HbWg4X#HĨXEQ1}8 {e#fYyv "S#H@/)Dq)9pLE2 0y*`*nX8mJA$ccB̙v[ h_&AVMXSCv60 A\s iiw;7pZ!0 إ USM@)|d.ӭ#SI[E/*t [ TU!>DW%&~<[vL2UfDX#j0BU5ؑp( @)у^$Ooip&GEsV$?ƨX3WIem"-[Yk"D==@ kp᪩řE/X Ĩ\Eّo c =wu@u2!$z-=7E>U_?+Fx1,uc`T"ap!F+]Rwoc J WS״6Z W'Fŀ:5T}i`[޽9t'Ɗ5\gHerSx6=4@݋`Ɓ+z_Zx.7zDWzI%(`ToGOI@ S & bW.W7ZmTf jJ^=1J_ k6{} UO3q5́;wWH-ˤik!on3Ů_p2Cy$d*Id2kFu3 DZ&L.=>{f< MCr0QM'eOn}=X=55cKŲׯZ(; Zi"ͱG9~Lg%X0]S0Gz#<[OVg܄jw۾I$q: ߖ! 8Z!<&{01Ӳ _@ JXvXG3Pr!b[NkQL$*r0< B527cCT]\M0?j ubufox-3.2/locale/sl/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 021753 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/locale/eu/ubufox-restart.properties000664 001750 001750 00000000352 12200012773 021744 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Zure nabigatzailea eguneratu da, eta berrasiarazi egin beharko da. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Berrasiarazi restartNotificationKey=b ubufox-3.2/locale/fi/ubufox.dtd000664 001750 001750 00000000104 12200012773 016621 0ustar00chr1schr1s000000 000000 ubufox-3.2/000775 001750 001750 00000000000 12577043275 013006 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/es/ubufox.properties000664 001750 001750 00000000174 12563420173 020273 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/en-AU/000775 001750 001750 00000000000 12563420114 015134 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/es/ubufox.dtd000664 001750 001750 00000000110 12200012773 016627 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/fr/ubufox-restart.properties000664 001750 001750 00000000350 12200012773 021740 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Votre navigateur a été mis à jour et a besoin d'être redémarré. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Redémarrer restartNotificationKey=r ubufox-3.2/locale/de/000775 001750 001750 00000000000 12563417777 014644 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/sl/000775 001750 001750 00000000000 12563423776 014666 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/pt-BR/ubufox.dtd000664 001750 001750 00000000105 12200012773 017150 0ustar00chr1schr1s000000 000000 ubufox-3.2/defaults/preferences/000775 001750 001750 00000000000 12563417075 017114 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/zh-CN/ubufox.properties000664 001750 001750 00000000174 12563424170 020604 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/zh-TW/000775 001750 001750 00000000000 12563424230 015203 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/en-GB/ubufox.dtd000664 001750 001750 00000000101 12200012773 017110 0ustar00chr1schr1s000000 000000 ubufox-3.2/defaults/preferences/ubuntu-mods.js000664 001750 001750 00000000642 12543107611 021724 0ustar00chr1schr1s000000 000000 // look-and-feel modifications in firefox-branding.js pref("startup.homepage_override_url","chrome://ubufox/locale/ubufox.properties"); pref("startup.homepage_welcome_url","chrome://ubufox/locale/ubufox.properties"); pref("browser.startup.homepage","chrome://ubufox/locale/ubufox.properties"); // See https://lists.ubuntu.com/archives/ubuntu-devel/2004-October/000296.html pref("middlemouse.contentLoadURL", false); ubufox-3.2/locale/en-GB/ubufox.properties000664 001750 001750 00000000174 12563417137 020562 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/uk/ubufox.properties000664 001750 001750 00000000174 12563424123 020302 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/chrome.manifest000664 001750 001750 00000002474 12543110703 016002 0ustar00chr1schr1s000000 000000 content ubufox content/ locale ubufox af locale/af/ locale ubufox ar locale/ar/ locale ubufox ca locale/ca/ locale ubufox cs locale/cs/ locale ubufox de locale/de/ locale ubufox el locale/el/ locale ubufox en-US locale/en-US/ locale ubufox es locale/es/ locale ubufox eu locale/eu/ locale ubufox fi locale/fi/ locale ubufox fr locale/fr/ locale ubufox gl locale/gl/ locale ubufox hu locale/hu/ locale ubufox it locale/it/ locale ubufox ja locale/ja/ locale ubufox lt locale/lt/ locale ubufox nl locale/nl/ locale ubufox pl locale/pl/ locale ubufox pt-BR locale/pt-BR/ locale ubufox pt-PT locale/pt-PT/ locale ubufox ro locale/ro/ locale ubufox ru locale/ru/ locale ubufox sl locale/sl/ locale ubufox sv-SE locale/sv-SE/ locale ubufox uk locale/uk/ locale ubufox zh-CN locale/zh-CN/ locale ubufox zh-TW locale/zh-TW/ overlay chrome://browser/content/browser.xul chrome://ubufox/content/overlay.xul component {7a2a7a56-827f-4b38-bdac-31aa7ec2971d} components/AboutStartpage.js contract @mozilla.org/network/protocol/about;1?what=startpage {7a2a7a56-827f-4b38-bdac-31aa7ec2971d} component {799a4700-2085-40e8-853a-05dcf8e95e41} components/UpdateNotifier.js contract @ubuntu.com/update-notifier;1 {799a4700-2085-40e8-853a-05dcf8e95e41} category profile-after-change UpdateNotifier @ubuntu.com/update-notifier;1 resource ubufox res/ ubufox-3.2/locale/el/ubufox.properties000664 001750 001750 00000000174 12563420022 020255 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/res/modules/utils.jsm000664 001750 001750 00000065565 12200012773 017121 0ustar00chr1schr1s000000 000000 const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components; const NS_PREFBRANCH_PREFCHANGE_TOPIC_ID = "nsPref:changed"; Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/AddonManager.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyGetter(this, "ctypes", function() { Cu.import("resource://gre/modules/ctypes.jsm"); return ctypes; }); var EXPORTED_SYMBOLS = ["CTypesUtils", "addLogger", "SimpleObjectWrapper"]; var gBase; var gLogPrefRoot; var gBindNow = false; var gCallbacks = {}; function formatLogMessage(aType, aDomain, aStr, aException) { let message = aType.toUpperCase() + " " + aDomain + ": " + aStr; if (aException) return message + ": " + aException; return message; } function getStackDetails(aException) { // Defensively wrap all this to ensure that failing to get the message source // doesn't stop the message from being logged try { if (aException) { if (aException instanceof Ci.nsIException) { return { sourceName: aException.filename, lineNumber: aException.lineNumber }; } return { sourceName: aException.fileName, lineNumber: aException.lineNumber }; } let stackFrame = Components.stack.caller.caller.caller; return { sourceName: stackFrame.filename, lineNumber: stackFrame.lineNumber }; } catch (e) { return { sourceName: null, lineNumber: 0 }; } } function Logger(aDomain) { this.domain = aDomain; this.setupPrefObserver(); } Logger.prototype = { branch: null, domain: null, setupPrefObserver: function Logger_setupPrefObserver() { if (!gLogPrefRoot || this.branch) { return; } this.branch = Services.prefs.getBranch(gLogPrefRoot); this.branch.addObserver("", this, false); this.observe(this.branch, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID, null); }, observe: function Logger_observe(aSubject, aTopic, aData) { try { if (aSubject != this.branch) { throw Cr.NS_ERROR_FAILURE; } if (aTopic == NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) { let domains = aSubject.getCharPref("domains").split(/\s*,\s*/); this._debugLogEnabled = (aSubject.getBoolPref("enabled") && (domains.indexOf(this.domain) != -1 || domains.indexOf("all") != -1)); } } catch(e) { this._debugLogEnabled = false; } }, _debugLogEnabled: false, get debugLogEnabled() { if (!this.branch) { this.setupPrefObserver(); if (!this.branch) { return false; } } return this._debugLogEnabled; }, log: function Logger_log(aStr, aException) { if (this.debugLogEnabled) { let message = formatLogMessage("log", this.domain, aStr, aException); Services.console.logStringMessage(message); dump("*** " + message + "\n"); } }, warn: function Logger_warn(aStr, aException) { let message = formatLogMessage("warn", this.domain, aStr, aException); let stack = getStackDetails(aException); let consoleMessage = Cc["@mozilla.org/scripterror;1"]. createInstance(Ci.nsIScriptError); consoleMessage.init(message, stack.sourceName, null, stack.lineNumber, 0, Ci.nsIScriptError.warningFlag, "component javascript"); Services.console.logMessage(consoleMessage); if (this.debugLogEnabled) { dump("*** " + message + "\n"); } }, error: function Logger_error(aStr, aException) { let message = formatLogMessage("error", this.domain, aStr, aException); let stack = getStackDetails(aException); let consoleMessage = Cc["@mozilla.org/scripterror;1"]. createInstance(Ci.nsIScriptError); consoleMessage.init(message, stack.sourceName, null, stack.lineNumber, 0, Ci.nsIScriptError.errorFlag, "component javascript"); Services.console.logMessage(consoleMessage); if (this.debugLogEnabled) { dump("*** " + message + "\n"); } } }; function addLogger(aTarget, aDomain) { if (typeof(aTarget) != "object") { throw Error("Must pass an object on which to add logging functions"); } let domain; if (aDomain) { if (typeof(aDomain) != "string") { throw Error("Invalid type for domain"); } domain = gBase + "." + aDomain; } if (!domain) { domain = gBase; } if (!domain) { throw Error("Must specify a log domain"); } let logger = new Logger(domain); ["log", "warn", "error"].forEach(function(name) { upper = name.toUpperCase(); delete aTarget[upper]; aTarget[upper] = function() { logger[name].apply(logger, arguments); }; }); } function init() { let uri = Services.io.newURI(__URI__, null, null); if (uri.scheme != "resource") { throw Error("This only works properly from resource URI's at the moment"); } gBase = uri.host; gLogPrefRoot = "extensions." + gBase + ".logging."; gBindNow = Cc["@mozilla.org/process/environment;1"] .getService(Ci.nsIEnvironment).exists("CTYPES_UTILS_BIND_NOW"); } function CTypesLibrary(aName, aABIs, aDefines) { LOG("Attempting to load library " + aName); try { if (typeof(aName) != "string") { throw Error("Invalid library name"); } if (typeof(aABIs) == "number") { aABIs = [ aABIs ]; } if (typeof(aABIs) != "object") { throw Error("Invalid range of library ABI's"); } if (typeof(aDefines) != "function") { throw Error("Invalid defines function"); } var library; var abi; for each (let i in aABIs) { let soname = "lib" + aName + ".so." + i.toString(); try { library = ctypes.open(soname); abi = i; LOG("Found lib" + aName + ".so." + i.toString()); break; } catch(e) {} } Object.defineProperty(this, "close", { value: function CTypesUtils_close() { library.close(); abi = -1; }, enumerable: true }); Object.defineProperty(this, "available", { get: function() { return abi != -1; }, enumerable: true }); Object.defineProperty(this, "ABI", { get: function() { return abi; }, enumerable: true }); if (!library) { abi = -1; LOG("Library does not exist"); return; } var self = this; var lazy = {}; function abiMatch(aABIs) { if (typeof(aABIs) == "number") { aABIs = [ aABIs ]; } return aABIs.some(function(aABI) { return abi == aABI; }); } function declare(aSymbol, aRetType, aArgTypes) { try { let args = []; args.push(aSymbol); args.push(ctypes.default_abi); args.push(aRetType); if (aArgTypes) { aArgTypes.forEach(function(type) { args.push(type); }); } let func = library.declare.apply(library, args); LOG("Loaded symbol " + aSymbol + " in lib" + aName + ".so." + abi.toString()); return func; } catch (ex) { LOG("Failed to bind symbol " + aSymbol + " in lib" + aName + ".so." + abi.toString() + ": " + ex); return null; } } function declareWithWrapper(aSymbol, aWrapper, aRetType, aArgTypes, aNativeSymbol) { var wrappee = declare(aNativeSymbol ? aNativeSymbol : aSymbol, aRetType, aArgTypes); if (!wrappee) { return null; } return function() { var args = Array.prototype.slice.call(arguments, 0); args.unshift(wrappee); return aWrapper.apply(self, args); } } var lib = { /** * Bind to a function from the native library. The function is * attached to the resultant JS object using the specified symbol name * * @param aSymbol * The name of the function * @param aRetType * The native function return type * @param aArgTypes (optional) * An array of native argument types */ bind: function CTypesUtils_lib_bind(aSymbol, aRetType, aArgTypes) { Object.defineProperty(self, aSymbol, { value: declare(aSymbol, aRetType, aArgTypes), enumerable: true }); }, /** * Lazily bind to a function from the native library. The function * is attached to the resultant JS object using the specified symbol name * * @param aSymbol * The name of the function * @param aRetType * The native function return type * @param aArgTypes (optional) * An array of native argument types */ lazy_bind: function CTypesUtils_lib_lazy_bind(aSymbol, aRetType, aArgTypes) { if (gBindNow) { this.bind(aSymbol, aRetType, aArgTypes); return; } Object.defineProperty(self, aSymbol, { get: function() { return lazy[aSymbol]; }, enumerable: true }); XPCOMUtils.defineLazyGetter(lazy, aSymbol, function() { return declare(aSymbol, aRetType, aArgTypes); }); }, /** * Lazily bind to a function from the native library, and only allow it * to be called via the specified wrapper function. This results in a * function being attached to the resultant JS object using the specified * symbol name. * * @param aSymbol * The name to use to expose the resulting function to JS * @param aWrapper * A wrapper function, which will invoke the native function. * This is invoked with the native ctypes function as * arguments[0], and the function parameters as arguments[1..n] * @param aRetType * The native function return type * @param aArgTypes (optional) * An array of native argument types * @param aNativeSymbol (optional) * The name of the function exposed by the native library. * If omitted, use aSymbol */ lazy_bind_with_wrapper: function CTypesUtils_lib_lazy_bind_with_wrapper(aSymbol, aWrapper, aRetType, aArgTypes, aNativeSymbol) { if (gBindNow) { this.bind_with_wrapper(aSymbol, aWrapper, aRetType, aArgTypes, aNativeSymbol); return; } Object.defineProperty(self, aSymbol, { get: function() { return lazy[aSymbol]; }, enumerable: true }); XPCOMUtils.defineLazyGetter(lazy, aSymbol, function() { return declareWithWrapper(aSymbol, aWrapper, aRetType, aArgTypes, aNativeSymbol); }); }, /** * Lazily bind to a function from the native library, but only for * the specified ABI versions. The function is attached to the * resultant JS object using the specified symbol name * * @param aSymbol * The name of the function * @param aABIs * The ABI versions for which to bind this function. Can * be a number or list * @param aRetType * The native function return type * @param aArgTypes (optional) * An array of native argument types */ lazy_bind_for_abis: function CTypesUtils_lib_lazy_bind_for_abis(aSymbol, aABIs, aRetType, aArgTypes) { if (abiMatch(aABIs)) { this.lazy_bind(aSymbol, aRetType, aArgTypes); } }, /** * Lazily bind to a function from the native library and only allow it * to be called via the specified wrapper function, but only for the * specified ABI versions. This results in a function being attached to * the resultant JS object using the specified symbol name. * * @param aSymbol * The name to use to expose the resulting function to JS * @param aABIs * The ABI versions for which to bind this function. Can * be a number or list * @param aWrapper * A wrapper function, which will invoke the native function. * This is invoked with the native ctypes function as * arguments[0], and the function parameters as arguments[1..n] * @param aRetType * The native function return type * @param aArgTypes (optional) * An array of native argument types * @param aNativeSymbol (optional) * The name of the function exposed by the native library. * If omitted, use aSymbol */ lazy_bind_for_abis_with_wrapper: function CTypesUtils_lib_lazy_bind_for_abis_with_wrapper(aSymbol, aABIs, aWrapper, aRetType, aArgTypes, aNativeSymbol) { if (abiMatch(aABIs)) { this.lazy_bind_with_wrapper(aSymbol, aWrapper, aRetType, aArgTypes, aNativeSymbol); } }, /** * Bind to a function from the native library, and only allow it * to be called via the specified wrapper function. This results in a * function being attached to the resultant JS object using the specified * symbol name. * * @param aSymbol * The name to use to expose the resulting function to JS * @param aWrapper * A wrapper function, which will invoke the native function. * This is invoked with the native ctypes function as * arguments[0], and the function parameters as arguments[1..n] * @param aRetType * The native function return type * @param aArgTypes (optional) * An array of native argument types * @param aNativeSymbol (optional) * The name of the function exposed by the native library. * If omitted, use aSymbol */ bind_with_wrapper: function CTypesUtils_lib_bind_with_wrapper(aSymbol, aWrapper, aRetType, aArgTypes, aNativeSymbol) { Object.defineProperty(self, aSymbol, { value: declareWithWrapper(aSymbol, aWrapper, aRetType, aArgTypes, aNativeSymbol), enumerable: true }); }, /** * Bind to a function from the native library, but only for * the specified ABI versions. The function is attached to the * resultant JS object using the specified symbol name * * @param aSymbol * The name of the function * @param aABIs * The ABI versions for which to bind this function. Can * be a number or list * @param aRetType * The native function return type * @param aArgTypes (optional) * An array of native argument types */ bind_for_abis: function CTypesUtils_lib_bind_for_abis(aSymbol, aABIs, aRetType, aArgTypes) { if (abiMatch(aABIs)) { this.bind(aSymbol, aRetType, aArgTypes) } } }; aDefines.call(this, lib); } catch(e) { ERROR("Failed to create ctypes library", e); this.ABI = -1; } } init(); addLogger(this, "utils"); var CTypesUtils = Object.create({}, { /** * Load a native library with ctypes and map native symbols to JS symbols * * @param aName * The library basename to load. This is the library SO name * without the "lib" prefix, ".so" suffix or version suffix * @param aABIs * The library ABI's to try and load. This can be specified as * an array, or an integer if you only maintain compatibility with * one version. The first ABI in the list which exists on the * system will be loaded * @param aDefines * A callback function to map JS symbols to native symbols. The * callback will be called with the destination object as the "this" * object, and a single parameter providing various helpers for * binding functions * @return A JS object containing the resulting ctypes implementations */ newLibrary: { value: function CTypesUtils_newLibrary(aName, aABIs, aDefines) { return new CTypesLibrary(aName, aABIs, aDefines); }}, /** * Define a set of enums on the specified target object * * @param aTarget * The object on which to place the enums * @param aName * The C type name for this enum * @param aStart * The value of the first enum * @param aEnums * An array of strings */ defineEnums: { value: function CTypesUtils_defineEnums(aTarget, aName, aStart, aEnums) { Object.defineProperty(aTarget, aName, { value: ctypes.unsigned_int, enumerable: true }); Object.defineProperty(aTarget, aName + "Enums", { value: new Object(), enumerable: true }); aEnums.forEach(function(aEnum) { Object.defineProperty(aTarget[aName + "Enums"], aEnum, { value: aEnums.indexOf(aEnum) + aStart, enumerable: true }); }); Object.defineProperty(aTarget[aName + "Enums"], "toEnum", { value: function(aId) { return aEnums[aId - aStart]; }, enumerable: true }); }}, /** * Define a set of flags on the specified target object * * @param aTarget * The object on which to place the enums * @param aName * The C type name for this enum * @param aStart * The ln2 value of the first flag * @param aFlags * An array of strings */ defineFlags: { value: function CTypesUtils_defineFlags(aTarget, aName, aStart, aFlags) { Object.defineProperty(aTarget, aName, { value: ctypes.unsigned_int, enumerable: true }); Object.defineProperty(aTarget, aName + "Flags", { value: new Object(), enumerable: true }); aFlags.forEach(function(aFlag) { Object.defineProperty(aTarget[aName + "Flags"], aFlag, { value: (function() { let i = aFlags.indexOf(aFlag) + aStart; return i == 0 ? 0 : 1 << i-1; })(), enumerable: true }); }); }}, /** * Define a key/value pair on the specified target object. The * value is non-configurable * * @param aTarget * The object on which to add the value * @param aName * The key for this value * @param aValue * The value */ defineSimple: { value: function CTypesUtils_defineSimple(aTarget, aName, aValue) { Object.defineProperty(aTarget, aName, { value: aValue, enumerable: true }); }}, /** * Wraps a JS function as a ctypes function, and returns a |CData| * object representing this function. Note that you must specify either * |aOptions.type| or |aOptions.rettype|, but not both * * @param aCallback * The JS function to wrap * @param aOptions * An object specifying various options. These are: * * type: An instance of |PointerType| with a targetType instance * of |FunctionType|, describing the wrapped function * template. Must not be used with |rettype| * * rettype: An instance of |CType| describing the wrapped * function return type. Must not be used with |type| * * argtypes: An array of |CType|'s describing the wrapped * function argument types. Optional, and only valid * when used with |rettype| * * root: A boolean describing whether the callback should be * rooted to prevent it being garbage collected * * singleshot: A boolean which when set in conjunction with |root|, * causes the callback to be unrooted after the first * invocation. Useful for async operations * * @return A |CData| object represnting the JS function */ wrapCallback: { value: function CTypesUtils_wrapCallback(aCallback, aOptions) { function CallbackRootData(aJSFunc) { this.jsfunc = aJSFunc; this.refcnt = 1; } if (typeof(aCallback) != "function" || aCallback instanceof ctypes.CData) { throw Error("Callback must be a JS function"); } if (typeof(aOptions) != "object" || (!aOptions.type && !aOptions.rettype) || (aOptions.type && aOptions.rettype)) { throw Error("FunctionType or return CType must be specified"); } if (aOptions.singleshot && !aOptions.root) { throw Error("Single shot mode only makes sense when rooting the callback"); } if (aOptions.root && aCallback._wrapper != undefined && "constructor" in aCallback._wrapper && (aCallback._wrapper.constructor.targetType instanceof ctypes.FunctionType) && aCallback._wrapper in gCallbacks && gCallbacks[aCallback._wrapper].jsfunc == aCallback) { gCallbacks[aCallback._wrapper].refcnt++; return aCallback._wrapper; } var wrapper = function() { try { if (aOptions.singleshot) { CTypesUtils.unrootCallback(wrapper); } return aCallback.apply(null, arguments); } catch(e) { ERROR("Callback threw", e); } }; let type; if (aOptions.type) { type = aOptions.type; } else { type = ctypes.FunctionType(ctypes.default_abi, aOptions.rettype, aOptions.argtypes ? aOptions.argtypes : []).ptr; } wrapper = type(wrapper); if (aOptions.root) { LOG("Rooting " + wrapper); aCallback._wrapper = wrapper; gCallbacks[wrapper] = new CallbackRootData(aCallback); } return wrapper; }}, /** * Unroots a callback that was previously rooted with |wrapCallback| * * @param aCallback * The callback to unroot. This can be either the original JS * function or the |CData| object returned from |wrapCallback| */ unrootCallback: { value: function CTypesUtils_unrootCallback(aCallback) { if (typeof(aCallback) != "function") { throw Error("aCallback is not a function"); } if (aCallback._wrapper != undefined && !(aCallback instanceof ctypes.CData)) { this.unrootCallback(aCallback._wrapper); delete aCallback._wrapper; return; } if (!("constructor" in aCallback) || !(aCallback.constructor.targetType instanceof ctypes.FunctionType)) { throw Error("aCallback is not a ctypes FunctionType"); } if (!(aCallback in gCallbacks)) { throw Error("aCallback cannot be found in our roots"); } if (gCallbacks[aCallback].refcnt <= 0) { ERROR("Ugh, why is this callback still rooted"); } if (--gCallbacks[aCallback].refcnt <= 0) { LOG("Unrooting " + aCallback); delete gCallbacks[aCallback]; } }}, /** * Check if the specified callback has been rooted * * @param aCallback * The callback to check. This can be either the original JS * function or the |CData| object returned from |wrapCallback| * @return |true| if the callback is currently rooted, otherwise |false| */ callbackIsRooted: { value: function CTypesUtils_callbackIsRooted(aCallback) { if (typeof(aCallback) != "function") { return false; } if (aCallback._wrapper != undefined && !(aCallback instanceof ctypes.CData)) { return this.callbackIsRooted(aCallback._wrapper); } if (!("constructor" in aCallback) || !(aCallback.constructor.targetType instanceof ctypes.FunctionType)) { return false; } if (aCallback in gCallbacks) { return true; } return false; }} }); /** * Wrap the specified object, and return an object which only * exposes the properties listed in the source object's * "__exposedProps__" member * * @param aObject * Source object to wrap * @return Wrapped object */ function SimpleObjectWrapper(aObject) { if (!("__exposedProps__" in aObject)) { throw Error("__exposedProps__ missing from object"); } function Wrapper() { aObject.__exposedProps__.forEach(function(prop) { // The property could be in our prototype chain let descriptor; let object = aObject; while (!descriptor && object) { descriptor = Object.getOwnPropertyDescriptor(object, prop); object = Object.getPrototypeOf(object); } if (!descriptor) { throw Error("Property " + prop + " was not found on object, or in " + "objects prototype chain"); } let d = {}; if ("value" in descriptor && typeof(descriptor.value) == "function") { // Wrap the source function d.value = function() { return aObject[prop].apply(aObject, arguments); }; } else { // Wrap the source getter/setter // For data values, add our own getter/setter on the wrapper if ("get" in descriptor || "value" in descriptor) { d.get = function() { return aObject[prop]; }; } if ("set" in descriptor || ("value" in descriptor && descriptor.writable)) { d.set = function(aIn) { aObject[prop] = aIn; }; } } if (!("value" in d) && !("get" in d) && !("set" in d)) { throw Error("Cannot wrap property " + prop + " which has no value, getter or setter"); } // "enumerable" is the only other attribute we care about. We // don't care about "configurable", as we're going to seal the object // anyway d.enumerable = descriptor.enumerable; Object.defineProperty(this, prop, d); }, this); Object.seal(this); } return new Wrapper(); } ubufox-3.2/locale/cs/000775 001750 001750 00000000000 12563417732 014650 5ustar00chr1schr1s000000 000000 ubufox-3.2/res/libs/gio.jsm000664 001750 001750 00000010470 12543102375 016011 0ustar00chr1schr1s000000 000000 /* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ubufox. * * The Initial Developer of the Original Code is * Canonical Ltd. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Chris Coulson * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ const { utils: Cu } = Components; var EXPORTED_SYMBOLS = [ "gio" ]; const GIO_LIBNAME = "gio-2.0"; const GIO_ABIS = [ 0 ]; Cu.import("resource://gre/modules/ctypes.jsm"); Cu.import("resource://ubufox/modules/utils.jsm"); Cu.import("resource://ubufox/libs/gobject.jsm"); Cu.import("resource://ubufox/libs/glib.jsm"); function getString(aWrappee) { let res = aWrappee.apply(null, Array.prototype.slice.call(arguments, 1)); return res.isNull() ? null : res.readString(); } function getOwnedString(aWrappee) { let res; try { res = aWrappee.apply(null, Array.prototype.slice.call(arguments, 1)); return res.isNull() ? null : res.readString(); } finally { glib.g_free(res); } } function gio_defines(lib) { // Enums CTypesUtils.defineFlags(this, "GFileMonitorFlags", 0, [ "G_FILE_MONITOR_NONE", "G_FILE_MONITOR_WATCH_MOUNTS", "G_FILE_MONITOR_SEND_MOVED" ]); CTypesUtils.defineEnums(this, "GFileMonitorEvent", 0, [ "G_FILE_MONITOR_EVENT_CHANGED", "G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT", "G_FILE_MONITOR_EVENT_DELETED", "G_FILE_MONITOR_EVENT_CREATED", "G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED", "G_FILE_MONITOR_EVENT_PRE_UNMOUNT", "G_FILE_MONITOR_EVENT_UNMOUNTED", "G_FILE_MONITOR_EVENT_MOVED" ]); // Types CTypesUtils.defineSimple(this, "GCancellable", ctypes.StructType("GCancellable")); CTypesUtils.defineSimple(this, "GFile", ctypes.StructType("GFile")); CTypesUtils.defineSimple(this, "GFileMonitor", ctypes.StructType("GFileMonitor")); lib.lazy_bind("g_io_error_quark", glib.GQuark); lib.lazy_bind("g_file_new_for_path", this.GFile.ptr, [glib.gchar.ptr]); lib.lazy_bind("g_file_monitor_file", this.GFileMonitor.ptr, [this.GFile.ptr, this.GFileMonitorFlags, this.GCancellable.ptr, glib.GError.ptr]); lib.lazy_bind("g_file_monitor_directory", this.GFileMonitor.ptr, [this.GFile.ptr, this.GFileMonitorFlags, this.GCancellable.ptr, glib.GError.ptr]); lib.lazy_bind_with_wrapper("g_file_get_path", getOwnedString, glib.gchar.ptr, [this.GFile.ptr]); CTypesUtils.defineSimple(this, "G_IO_ERROR", this.g_io_error_quark()); gobject.createSignal(this.GFileMonitor, "changed", ctypes.void_t, [this.GFileMonitor.ptr, this.GFile.ptr, this.GFile.ptr, this.GFileMonitorEvent, glib.gpointer]); } var gio = new CTypesUtils.newLibrary(GIO_LIBNAME, GIO_ABIS, gio_defines); ubufox-3.2/locale/en-US/ubufox.dtd000664 001750 001750 00000000101 12200012773 017147 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/ru/000775 001750 001750 00000000000 12563423727 014672 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/lt/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 021754 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/locale/lt/ubufox.dtd000664 001750 001750 00000000111 12200012773 016640 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/it/ubufox.dtd000664 001750 001750 00000000104 12200012773 016637 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/zh-CN/ubufox-restart.properties000664 001750 001750 00000000324 12200012773 022251 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=浏览器已经更新,需要重启浏览器。 restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=重新启动 restartNotificationKey=r ubufox-3.2/locale/ro/000775 001750 001750 00000000000 12563423664 014664 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/eu/ubufox.properties000775 001750 001750 00000000174 12563420246 020301 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/it/ubufox.properties000664 001750 001750 00000000174 12563420754 020305 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/sv-SE/ubufox.properties000664 001750 001750 00000000174 12563424045 020623 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/COPYING000664 001750 001750 00000043705 12200012773 014030 0ustar00chr1schr1s000000 000000 Copyright (C) 2007 Canonical Ltd. Author Alexander Sack License: This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. License Text ------------------------------ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ubufox-3.2/locale/ca/000775 001750 001750 00000000000 12563417637 014632 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/pt-BR/000775 001750 001750 00000000000 12563423564 015167 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/nl/ubufox-restart.properties000664 001750 001750 00000000323 12200012773 021742 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Uw browser is bijgewerkt en moet herstart worden. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Herstarten restartNotificationKey=r ubufox-3.2/locale/zh-TW/ubufox.properties000664 001750 001750 00000000174 12563424230 020633 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/cs/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 021742 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/locale/de/ubufox-restart.properties000664 001750 001750 00000000340 12200012773 021720 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Der Browser wurde aktualisiert und muss nun neugestartet werden. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Neustart restartNotificationKey=r ubufox-3.2/locale/ca/ubufox.dtd000664 001750 001750 00000000107 12200012773 016611 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/bg/000775 001750 001750 00000000000 12563417571 014634 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/sv-SE/000775 001750 001750 00000000000 12563424045 015173 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/ja/000775 001750 001750 00000000000 12563421051 014622 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/en-AU/ubufox.properties000664 001750 001750 00000000174 12563420067 020573 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/uk/ubufox.dtd000664 001750 001750 00000000133 12200012773 016644 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/en-US/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 022264 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/locale/en-GB/000775 001750 001750 00000000000 12563420134 015121 5ustar00chr1schr1s000000 000000 ubufox-3.2/res/libs/glib.jsm000664 001750 001750 00000006076 12543102104 016145 0ustar00chr1schr1s000000 000000 /* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ubufox. * * The Initial Developer of the Original Code is * Canonical Ltd. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Chris Coulson * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ const { utils: Cu } = Components; var EXPORTED_SYMBOLS = [ "glib" ]; const GLIB_LIBNAME = "glib-2.0"; const GLIB_ABIS = [ 0 ]; Cu.import("resource://gre/modules/ctypes.jsm"); Cu.import("resource://ubufox/modules/utils.jsm"); function getString(aWrappee) { let res = aWrappee.apply(null, Array.prototype.slice.call(arguments, 1)); return res.isNull() ? null : res.readString(); } function glib_defines(lib) { // Enums // Types CTypesUtils.defineSimple(this, "gpointer", ctypes.voidptr_t); CTypesUtils.defineSimple(this, "gchar", ctypes.char); CTypesUtils.defineSimple(this, "gint", ctypes.int); CTypesUtils.defineSimple(this, "gint32", ctypes.int32_t); CTypesUtils.defineSimple(this, "guint32", ctypes.uint32_t); CTypesUtils.defineSimple(this, "gulong", ctypes.unsigned_long); CTypesUtils.defineSimple(this, "GQuark", this.guint32); CTypesUtils.defineSimple(this, "GError", ctypes.StructType("GError", [{'domain': this.GQuark}, {'code': this.gint}, {'message': this.gchar.ptr}])); // Functions lib.lazy_bind("g_free", ctypes.void_t, [this.gpointer]); } var glib = new CTypesUtils.newLibrary(GLIB_LIBNAME, GLIB_ABIS, glib_defines); ubufox-3.2/locale/hu/ubufox.properties000664 001750 001750 00000000174 12563420670 020302 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/content/000775 001750 001750 00000000000 12563430101 014437 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/hu/ubufox.dtd000664 001750 001750 00000000100 12200012773 016633 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/eu/ubufox.dtd000775 001750 001750 00000000110 12200012773 016634 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/en-US/ubufox.properties000664 001750 001750 00000000174 12563420143 020610 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/zh-CN/000775 001750 001750 00000000000 12563424170 015154 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/it/000775 001750 001750 00000000000 12563420754 014655 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/en-GB/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 022225 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/defaults/000775 001750 001750 00000000000 12200012773 014573 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/pt-PT/000775 001750 001750 00000000000 12563423643 015205 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/ca/ubufox-restart.properties000664 001750 001750 00000000355 12200012773 021721 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=S'ha actualitzat el navegador i cal tornar-lo a iniciar. restartNotificationLabel=Hauríeu de reiniciar el %S per instal·lar les actualitzacions. restartNotificationButton=Reinicia'l restartNotificationKey=r ubufox-3.2/locale/ar/ubufox.dtd000664 001750 001750 00000000113 12200012773 016625 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/ar/000775 001750 001750 00000000000 12563417522 014642 5ustar00chr1schr1s000000 000000 ubufox-3.2/components/AboutStartpage.js000664 001750 001750 00000006203 12543077000 020441 0ustar00chr1schr1s000000 000000 /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is about:robots * * The Initial Developer of the Original Code is Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2008 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Ryan Flint * Justin Dolske * Johnathan Nightingale * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ const Cc = Components.classes; const Ci = Components.interfaces; Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); Components.utils.import("resource://gre/modules/Services.jsm"); Components.utils.import("resource://ubufox/modules/Distro.jsm"); function AboutStartpage() {} AboutStartpage.prototype = { classDescription: "About Startpage", contractID: "@mozilla.org/network/protocol/about;1?what=startpage", classID: Components.ID("{7a2a7a56-827f-4b38-bdac-31aa7ec2971d}"), QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]), getURIFlags: function(aURI) { return Ci.nsIAboutModule.ALLOW_SCRIPT; }, newChannel: function(aURI) { let secMan = Cc["@mozilla.org/scriptsecuritymanager;1"]. getService(Ci.nsIScriptSecurityManager); let uri; // Allow defaults packages to overwrite the homepage - this is a bit of a // hack, but they can't reliable override browser.startup.homepage because // we override it in an addon try { uri = Services.io.newURI(Services.prefs.getCharPref("extensions.ubufox@ubuntu.com.custom_homepage"), null, null); } catch(e) { uri = distro.startpageURI; } let channel = Services.io.newChannelFromURI(uri); channel.originalURI = aURI; return channel; } }; const NSGetFactory = XPCOMUtils.generateNSGetFactory([AboutStartpage]); ubufox-3.2/locale/en-US/000775 001750 001750 00000000000 12563420143 015160 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/ro/ubufox.dtd000664 001750 001750 00000000110 12200012773 016640 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/uk/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 021754 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/ubuntu_modifications-3.2-fx-linux.xpi000664 001750 001750 00000100503 12577043123 022021 0ustar00chr1schr1s000000 000000 PK-G>$k NMETA-INF/mozilla.rsaWy875C2 ){Cǖ%,cFll![H-" d?֚le ْ:{?޿뽮_y广?HLpZhlc jpI 1)A =@ 3B\0*( $/pp0(=  gc#@¢tqwEjཽ޶'F @YY Dܑ is`O''4V##$ # H,.##GQ8q #(b1Ҳr!T  v_GIuD8aMEPp'hGt>< Ul8F!T$0<+ uӴPƤU7 CudN=l=ӳ2Yz."ɳ5><;-CZ^ᄇ﫤/ljY5aVyGwiN▅]vWbp:1"hYYS?#YF("k${x3 KTZu㋹sBƠ&g1WKg (%$LkDTw8ƜwE `齯U00ԝ!Px3s1C4q h8skgC̜T,hܫֽH[G q^mz#@b~4OD(-|OR+3,e]f%0Qcc5ܦFFjm{L cX ܻEɂMHWtbg8Vwc(MTPT …t :;/Ufb~pJW Q~"]j8t Q5Rs`btkEltEf=[ⶤDvm&/ʈIHU)a{4~ZH%h~FI0-+P9sr1MxlP\p@l,CT.`Ur_VjOSp\Ag8jUBl6|U&.L(뇆ݾ863AEWy(G'ę/nW(@L?v+7KyQ홎:#WuLXoS"x]ʹR~]i%#$q񫞞Ьx$l_7ؘհ|d#N'Ϯ%%vC3ks0ShSYc+_{/q>|ӛSpTWKm>5Sڲf_m6efᗭҀeln+5J\nfᴯ.Y7\jf;HsTy>N5ML^,g Fs 56| Ap7 [pH!mvo %20)i`7ZC?3 IOϪr@w88~`czy3kYSb,qA 0&NrN5|Z*H^CM(%C%Gׅj* )U ½1nB4f %Nf7 &uU;{|ɴMJ]+揅DkBNoNº}rP3g]=.emlպAw4x2<=/7?emXWNHhz>!A.JCD,h˳:T?A0p/ PP!w}Pؐ1؈XꂒT| _~P%rfQϵ;C^dU, zYk<ť 74z=uCߜwqg{d&mNjf`SF)&]ZRhB \ 6hᤳ̈Fzr[oS -ߦj"4OؙcTO{rh3a .6კ(]> T4w.gԄ 2 MI9b}8f=Ʊj"ICn"6?&6m fy-3b@-cC|X)xs cȈZ6=}zYFeI{ q->%*v)鹝Z/di~̵s 9B@?اy U'$xcͱC8/ؐ*N<މ:@MlwZ #6* -*S"\ܚk*ĩt]hDH^iH-8rh8 cܜg2 #Ą KU[l![4nG #j}a[ ~G qN/*Eo4F*3RO] de$p1"Pԉ&Dn_ww/5 )(da&*WPn [!4浖[<Z;w4"pdpica.*v*45POQL } :b.WU vXI1170Bj%"`q`I8_Y.7xm\i4 /ed$٧Qh];#kN3@,0ՍL!&ȀT&8G20뼹pW`AL61ƅxrS\ 6p8_鏄!>c*aF*H8n~NQiC!GR'y s jJhBsRBF+VQF IXVIBb, =UiuE@k⬲$ (" ‰Da!Y Q6Yat`!haGHCb\%14`:=̘`!jz&P]eœɝ-e\ {~ߟ&bj"3Y_k"B9p8-[̅< + s Ueze"P~ l|^@R?" QA) cJ=Qe5Ԫx5pD+2\@VibB6 T^V $ o !] vam2l鿊 j3ɞq e9lraň`owy1GCr JO3:bZfu7/SjN7Ȫ$EED|Do3 S_)x=}kA38~MqKvN*tS=ݹ >|9[ pz(U4sL@9!iUZ̝űYcLo}O&1НWv ŸT]VH2) ãfk,(t[¼61uz&>@I읪cŹ(a) b'{ZǤn٬M#YCzEK2!s26`S;Dֆ< ZMk$l}!pMɦ @*~QLsi)KbUJI" jB'Jt x92P~E'DЈ' zֈۨ꟦ȁ -Ap+{'q\&h;C\?YPxK0 q &"\4cM wӃ2}F^XFJ\Dީ}*wTrXE I?z`WĉH(Lf ^! >,C&A4я8s-<|yR>ϔt*тB3z@ F9`dug F`̤~Yd`7O`" ]O/6?<\(,ʥxQrOjp6}Љ+m(vjDAhxU\'ctI*Tk|U̵j&FXe|J  3wSrj/ܯlr]Hӂ/-"Ix,B}=S{ama9Yu/_eѢ/!g{~ny+YwV~"\/h=W7B*K殽цy#_៧ѕA>as͞0+,Xvg=q/yɄVr Gn|cϽ8m>\8q'7Q2=ᇳZ٥WTlw9qEK>7;h])gaO } ɷ_ۋz!'x/vT|u=럯?c|V }{М/f3CF7]got y7xcOsǬN篾ĵ'l<fU}NZ\qov}\ƻ~1nOYI>V馼3?s {:6|˥]v1O y<z݈# ̊s66h҇>Ow|5'>zon͹U5_G=}ޙt|m풛#OoܷfL}穦?i8xX/szݭ>rjӂ.״./-P36?;{r7رWm;cnez̫_0텻.|苣j}wϮ/| oA[}KJ6ǥ~U?k׍=uz`*/9oVO=t&^4c}SpE? 7L[[xC|Cp/W b¥#N)rؕ' Ιs׏~{7=|Wx.a%(!7yp|g[|\O^]g6/mͷ=.:GF%?5]S%=uαӿg^MZFl|_ǟ|A`E\R>gʱׯ9lxko˻?TNgl>Osi:[/>S+zkwcۊsɾ\to={eɉLtl_so|S[:&WyWÓ.k"1'o/?m܆v>剒Fx[|xѲ3S6 'ߐ ^ =G?Jxb#}ϐ--9[zQ΃;yC\u>܆p}xy߼g|U]ع^Ţ/>fߚ>95޹_|`ĕӿMU{ǜ?]'9~k>.^}q&г9:e:wޜహ6sk_~~KGUrcխ<&on_Cs8n듎Gz}N}eѴSvxMkONqƪ*b3hĂc NhTT|œ&M,.*.,:ڕ#[_ =CҰ >uTg zbݝ15~uR~.mטt+yzWT(b.!G}"RPQP{,%IMiH(Al! v6Dd`}F" !hX~=oa"n:maGT$Q/rB,$-Zml(8;Ĝ 6qlV`*]ɟlp`[Lfd/A >;v2iǰwc`eodvlnpqಸek;]wEAۍ}wLĜبUAdj2k˩]qī BM_yMYü rMсJc9 W9ZJ V@Q5c0XX5Va񋁛ӌ4ѐ7*׈bJ7k:xra]@" ~%&EаlzD.\X0_^NCf-<1@%(tNmE9L[qGJjVA(e3;'`AY ~ҭztC Bm R/HncjuU9\00ِio\om;"` CQ ~׌W4㷬X= #bXP۶vJOm'^)%a|V:ddQs88+߁kq˼LE{.J*֥wqP~$"JhIhMp)/"/G%Nm %:(mR"6$scAvIv +`yIm̭BWl#}47 קZ9Sf37_?oó/p/R m7<΅Iy6p{9tMpʫzȫҸW]bj0کHvGFO2e/M~7= Y\-m> %:$b9* VA;TE!B*R|T\78&9`YyPژ)MR.+h/׊1?<)Z0aIzsӀu2gyc~\Y5}66( РI5M'7A l7lo7A\=֝pӪe+OTY@)w skVu n>r!((ރUd!^޽GX&d,CoazMgYb Q!S?9؆G/޳V;E-kE֯ZeQQG( L*vx <2ϵ \b, t,mpJߕ}YWTFamUz9Wl woiF]0ggΒ5d-wO-XQ%8[z];Ew:K|%pK`\Ґ}6ۢ Er)X&v)zGhm_ ~ʛ~6v >RP:]. 2eNIF?Sb- LҊ]x?i˥7hΎOƎ+vvܲvBmekEB$a^nE[.vϥN>s"בPDx\BNK0\L6f&3-+n~0Ay!֭$g׭srmpLP+O;zkekiIQ. WT΃5F^^NTY&D=)Ԍu+w̓yVF FϨ=WXrD|{J8ج~X.܍ Zŏ< w~;~ˆH0io7"D ~X?%eẄ́뙶}NJrS%=d~%+#۰߻di@: Ss* / UM:,j6c},j:Y/ij~XBXHH=*B{}ÉW~X VT,OF~Q A48&&7G{mYމ:س.J?oiݥo_ ٙtITIT OΕ]y._q]^'/b-Xuem_~7\O1X׿׻]Ocھ+޾ݾnxkؾ/پ߾]v\|5/wޱ np,],7)}-7Kv袶97܄IΛs[llzo>~]Osȡ,pʝw<㺻v<Ї^IO]WKw)qȤ{+ fʘKH[ZMDNE(<'/&v F} wYޡnb l |R.n>nԵw]]\; ^{;HL޹'b'-&cDa3xfj]*d`dҖQQ{1&3}AR4o . m9+z7 ½]owo);＀)߯t*I~ݕ)WzJOSjvL Mvc|ݎ pe-OfxYGdLfl7dk%c6n|'ǟ '[2$=ԩHA9e3$ $og-pʔ~$~x}d|؟&UZEA[K;wJ#:,){{()I3iuϘMpdD{?l`硍א-<6Rnҍ+_z[M7 jnz&VCŗzmQە" t D@̫)5co-锏#+k  ĝx1*I`V5|NPyB^/a8"m.A ,q+Ʀ3LCf ȶ\Rl滶Orr嗛޲b˹kHmw|l&u{Ŀ/mR?d3|ϖ_r|5[.[=ٲl˪mYm|/'r滱Ûr {@G<|'y7c")S1xs )s9PUY 󸂼n9#7NbXm+&MBL- &̆11: `.Pڪ*$ s 'm$c;)|yYLמR'k'f,&jRf8QS6zXbDaŸ9=aGpd-{^Ӹe1{^Ve5{^6Se/{^Ve5{^6ӷnv2wRnSIQ\-\7W#SdBNSCW;" 5+ L_zdlg/QVS.M@e8ZK&м> em|,&D}^eBA F ػIы#(c <3]]D` Wx錒ܒi>^n8 Cp^/F-L2-| Fq(i>0~&L|2 ^V,M*?(/r>Kq&aonPRuu5u>ozaS2`k v ]n+rҌ.;4X s86S|0t"L֦qo>~49&Ia;x&0[d B&HB2IAaYP^1[!(Djn8T)ҤGd Ek4eM\ Y~:Z^o>G~j^\|5 H|oA6Hq1Wy4SD2hN3Pd?`KLʪƺcU$}̍4:Ejֱ\t%/hRb D IR-[/c1|g+Hxv8^*^!7נ+k6Yu*g>)Ei{jP||c^#:g]{g>(='MMAqCdi ax:l] GAWD"7 kINt}^ QbRNN^9w?]rݳI(2fd#PjN7е1)3..T2G-zRx͌Z&az`ȧ }/$G~$"qEY?m,D +3pXPCn3=E}"^C9Oψ ;y2i AU+@W"jk 섢rq^Nx]ep>i(^#hXGhFɊTٱ^3U[G09Dhq?L NtFRJժ>o qK.+к4| Ѭmfǽlefn.z6&YWi$x$R& @Vh,ScOoAQ pkNf;[b4P0U$"j1~at"(]M^ ED )AϤo*6C|1CC,$\KuD´nC R֗첟=w`foJȗ(=U7(4hf kqYdm [͸=AMF8L6+rA䛱@IVNuiq2?t)(& dJr?%;C{=СY#AEyL]A %_',_*G$uiwr`lb'6 h36` ZLCN(1mY QM2$Kt3 j KL%&@ aN!TaKB@ƺJ2 pplҍ }S_YUehׁ d1#;S6eOvǕS^@Ƙ&.L4keX#TV&s|u4ke"[Ie.6tJ2eDJ>mpi.SVէ!5%ǎ6Q^27q\!m<mZOk㎐[ids(^_r3V<'k^gB]LD[Cf@:8mڧءops  OkZRAqHl:8! j 6ABvR Ђ3ɬ) ,fTF<\|3]S}~ Q`,ZX-ixP/ i%ǕyQ&kb!i'َ01$I hKl2r?RmA&\0<)TN6tK蛡d?-y|:O)/*)tDݔ<0I V+s TS.A| v<$:ݰRش˞VR0t3Y ԯD?WF-h*t -slA8qJ> uKE$<~vQH ݁HmnbjEi@㘊ł jV$tF:r`"J+ (]]1'%D+emwli?=<2!67gS4ILJibTTX?30%:D(+*gbQ ~SqFw&6D'nd[&Ky ,4x!Y+$sKtK8,(`|>)Gxս6hoƐQD¨`VRBڄhmc Ms_ataԤ0 'M"/oB:b#ّ5JoW:3{1jQ>C *IMMFN_Eq'4oF}iH UymIFhGuI3q0yߤ\KƈRCTJ7׼( )S[FS4wN1- R#i7gu36p*Gʴc:r/w7dsY& !%M6'ǫ|P1kN{U21I}+ywU%N  5&Wl䅁"5Ghl멽3Rfb1CL ƞ29){-e((e;)c4`uz e%:XhRȹ#q[MNDfd RvΠ8/iɺuD|(VYI$(D-iU32!(RnN5E Ose6i^̾i&)lRClfm}crk@< FK0# ,`p}nTK* F)%| (~l~ p-O/4%نZms?0lZsIٳ~؀B>z1ҲYR+ \[zY+(/ .…dfDaK_Rƴ~OʒthTw{U;:nXpkX.)R0-huxwf%jXDдGAN ɌRTcf%׽yvDЕE z\U~ I(5# Fl F%kb'##'t4cH*+1%=zkTD^銅8`zh1MB3|I!e}Tׅ  ie0QOInKb5_adSe54 `5c{ޜK/cN 2s:6z5"ID/41%0#mQv]7Z*8;'Yr$/2ztȥOzCዙ4RUB0arj{ASm˛3VEV •!U .uM}~ +c1M8dj*kmrVk֧Q gY6azkX挱pIeke VCƞƖÏ-sXk(H dpttaWs> *9oB;sM͹05 >!7؜C%,,)K+:[1 ch$F\cbeI iqj`7 AV$ȀkWvCcNe|dQ['V:o钁.NLjS^Ѿf$ޘ%%J"]SLǢM'5TLf 4M-k3xw.-)*M?qSK"A&#m.ɤ*TAA/#" M٥` jBemһJ{"' y(K0vDiċ,Em>=SU5VR#eӉ/{> 0g=! yw.'3Z$rBpS /$Bz"FmSɼYz#OtBX'RRA|ޖ;ÚJKhxcR7C3yƼB_ڊL]N6CF߉+@^'Lt-[TcPֈϹci:mjEm9*,zJ{·mBV҉ 鹾 DMgL e%|ϑ>.QVFM+eJ.hQ3<3 i YTT[bȮ"e3XBďtK24+m5nӳh5Kxtworav W7!}\잛h>꽹!o>*s LT bj+O>:cZڒUmJS(i%+#%';y+y&XR\JVg9j ^S`{<~LԄ~pgPA=pgP'?:屖}:QΑ@ δGfl"iN6/MNĦc1fvtfeFi}_LuNp)Z Su5c J c5VėWqQ7?:Aţ5FEW՟70?퍳&ZJgT`-B49iupp29",ۅʙHR$*$5^`?,K(֕\/yxbDݺcCu0h>cX;}>2 s#a`+$ntVHU?3Jur 󘺛KJm'i7IMmi /9)H:+( nL-biG9qEcqNq㌖`>떲ZöCv6RmؗMG$@^ȯL6)=KAtX)TydC܆N ʎiw M=SK69ZZǴYlgM. ؤ@J#y*Jg_UIWvr@T< kc:$K40GzDGO$u_Ĉf:26#;;PLmm >Xr]W Ya |( j5%a^^#^lj^z7rhg|'ʁqN-OzPna4ϫxbfs>ct>Ǭ{m3N7׮yhs3$v;|y^SokĝZ0^cϛ^> ='=*McmSq\'pB@*jecb`1ۋR6qO<bQ1F-?w P;jځ@m@mXlHcd1b3*gt6Fmz8(QI郰lSvK&G07[,씮c֎R F6۴Ģ0;ȁL3 ^2{`73.p\[ƣC'WfUȸIz'eiV9ѻQ)1U2 <%Y j)60MHF՜)޾x| n`ǝPŔ\꘠lʮfii-j>D1o6rz)wYx*2+s͎Wx3#"J2 !~Ȁ2 !CDTXQ:!x )kP%*ʼ uw8E ! Gju5ڸ ؊J- +ON}(p\wMpo6hR,WO6vʪ@ʆ6͂_ I<1?j35.0+K*ZfVτ6ܑ0o)̪nHYks HAaZpQ ilݫ^A7BbhދdX;ڽm="C(m&M:aI**m\فl|c쪩|Ջ{B4 ("BH֝$|͜d H^% #Ji0閯jfj|~e|ty0K0H=uQ(@f 3 Da "153N 5X15"ÊQs0LE]*,v]Sxg `j *uݮSZ[>'}0<-{W,$=>uuu ̹WhM/3[=٧bD>;7h3[]e+ Ϭ#bC,/$b}6_  Xd0s>}IeY ڠ5$iR%&r쩝mstxLa=N_!mأ( :Qo50#m㴘μ3M͙bM6k`W$o0 tּ'SwQ#ՔͮC0,8S,[-$Ts'b),q[m, @IhtLwC i^Zh-Ռ46}",z+7 OS :9@K!hc<Ĵx&Hǁ>8u`\9 8'YGYEM6`jd1'&/k*oP#$ib4%E҇K, zER &g8l\5A&:،3 )/0).dztbyzT<o11 g`ݛ:n~>/ÿ/ĠKCa?/>|3Ũ;4җRD<Et#~ؠw*\P ubR(_]xI:xk0c|raD%^B2VÙ@㪃f~KGY Lvldc$ |<q5~X8Xgt2}47 ק:h8NoHF]F P?KKn޾ ]9h/ F_ln{7W jzIi'uRʿnO5ngicbMR.ubcTb$ח"1S܁:[Y{} Vyc~\9f_aVKJէPϹA>,r[wN[u>~>;h4D/itJ@xz]4g4:@Lsfyd$; }t;Vl wq>"`3zI߃8vuX%n뀜^qVίpm`2w LKJݑ>3 }t6~չS' zkCT4 7-UǼo8hdg}{OI/ -)i| d+h 5Jjg}іEBYV7$KѶRZ6N/N;zFl47]zF' #376Իˣ~7Q@- hm>W 6DNl Ѻ4d?ڭ?ކLNu6S29p=As UYʹ= MZrV=@h4ˮ% F#\ P9=-c-. =l6L林%n}WFqG J[^먫S+r;p[:QfN)k} #_t10{@8=O=+?oK}ѨcϺ{'#c>lJS?og}эod;"5 )%ԗnm_2X[zF/.t6?u7 vq|PʀU\ P?%Yt;KLwuKѱ).mSг F/R̵ ;[#o:#A:l+=]k!zIHl du)K7  _:hԲnީVyVZ_’xә բy2[/ Z6r 3- ]ʀثG6;Nh ]/e1J3rHϧ3>#ĩǡ(.$Bro W ꖴxoDh+"{ye۷My5CSABr nmoo7Hu?"p~h=:$&b`kïBC]Cnj- Op]hFR7aQ3 fZ6rlA"1T[q/te`3$5Rv^]Ǡ.'yPsjq'N}G hֆLH)xI`֗ ARwygnwn{ttw:?۝;䍱&c~#LH{LLc9IxiyGwCpT큒.".uz}i=oD{k/Z+wP:6D  xay@Y/>2Mk;_h* i*G]hKr0*rRtFxGǷ⤓*N4'N%NdiմFy$Dr})K8Ϛ4$ ŕ4錦LM Ⱦ#etmf{'}+%8_+)x!.%&/y`>fhHvj;)‰_u+ Na=A{}7%v'xھԟ3/j-Q`\e4KO/gO=Ӕ''ͦ9qlgU' lB?FT6&#ĕ K)H<,d~jR`%+ʨɿ7l34j `O 㒶4PK@GY,z@components/UpdateNotifier.jsUT.Uux ;kw6+~ؕt۳]WVڒגxst P/}g >$s>13{D~1u SQDaBGR89GD RtHR,$5IFAOH aS=qዕ$-6lhG>X.a!PDĚT \)I89b} .@^,vλッ~օ @ո2=Y "H9!=㗫|:;3Qt=Ɩ9J #IogK h2#7׃tvu=& s~gU,3@<` Ǣs3\Ϯ.n4" ǫ بWW{1hr&MIu_`q:? ~3 ǣ)Ƞ`|1OjcdZ]R- d1{. Gzf_Ic (t71d dJz 㐝`4ctSw%ٗ, x^D^ ;RР56üy͜0 < L-DS8})*C>TTHb*.P`O UT1~9PK73D5Vc4FZ9uk=E1$Pl sNX<΍XC?Z-[3M!&?=ܱ`(\;5)544*;dWRU<0i%,dH .ӀrLzS&3e}=QB.‹(Rk”'OUE..T)BJrdXtvN+>QLv͊FvovJ=hΧRnn 0nl+.Z{ւd2>[@2#ג {= [Q5'ek+ Z`L҆z1;|xvh2S@88u=^ fp: ~{b0׃ӯJt:x3VaSi >Uȭ }/Z'Gm|'% mcKn[0U޵9jfFMsi0s%#aMx^OiHV7%ה7-sf9`oїM,:+5[-B|jBqk_ y0-D"0cc-~ "2S, }oRD!! _0#NRˑr,9zr Z1aG\heX'xH2Z1M+y^.={2X|P@lÍVŸ-knxonT8`GAt(urb|Ѹ*NKSG.n1a O.bXm"uIB\#qݿg"ͥؖ}뷥r^Ã[uQ1ѹBBvTRػڎ)bR[]Vw4( Օb{)Y1RZ5ysg]*V\ CͭMX_T5Qo ).HOr>r0Ye'7u4گg2#캸3|Wu9C-۱z`RFbb\qֱyLB'nOT( ES m `CnˢlOPK@G(#defaults/preferences/ubuntu-mods.jsUT.Uux Ak0 &+1 c+;2ϰ;l7{$O,HYLf}#7O{Ҥ]'Xk3-Xϴ"s x}gng:FD%6[ F7 o?qd I+ ͬZ(*YVc?> пza8<=Y[b  Ʌc7K- PK @Gchrome/UT.Uux PK @G defaults/UT.Uux PK@GƵchrome.manifestUT.Uux r0k$iz2^6#K!I^&KYՎ-Mr#<`odaE+S"sK;$"! E!ɑ 9 jH2* "CJ2 ԅB7T6A "t)ݐlI]e4co*@M5~RޯhxBkeM@6T+#_TB# K ]^bpS<<7B94h/!]&צjBgTzu&)"4xt`] MmaA:eo^J!6v#*tcwiN> py3/0Oc>g 1Y2>Nr2\$8\q*>]S|ܦ?xuN޹U$[1ŪR#rY@Vx;Fx+<,̈>PK @G components/UT.Uux PK-GɽOMETA-INF/manifest.mfK@;cAe ni!~5كsIRUNHRlq6nq3%ByFzJx@&3lg/ vRgZ"Q.wi,PN{@i9Ԏ }t< :y#Z/!ٰmݟYag^GplܭF5` qu38)1J G4 da2G3Fސw@2%ϜmENչxygPBiPWͮ֟9rQ)EK8?P Q;q @y+*\A:VyV2 ĹV'fbA\F ] PK-G 6~jyMETA-INF/mozilla.sf LK,)-J K-*ϳR03u1uLO-.ML2K-3JK Bmm= 1ThxY&rqPK-G>$k NMETA-INF/mozilla.rsaPK@GU/ % components/AboutStartpage.jsUT.Uux PK @GA defaults/preferences/UT.Uux PK@G _Knkchrome/ubufox.jarUT.Uux PK@G!D" _install.rdfUT.Uux PK@GY,z@ccomponents/UpdateNotifier.jsUT.Uux PK@G(#Pvdefaults/preferences/ubuntu-mods.jsUT.Uux PK @GAwchrome/UT.Uux PK @G Awdefaults/UT.Uux PK@GƵxchrome.manifestUT.Uux PK @G A/zcomponents/UT.Uux PK-GɽOpzMETA-INF/manifest.mfPK-G 6~jy[|META-INF/mozilla.sfPK 7|ubufox-3.2/res/modules/Distro.jsm000664 001750 001750 00000007152 12543110752 017217 0ustar00chr1schr1s000000 000000 /* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ubufox. * * The Initial Developer of the Original Code is * Canonical Ltd. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Chris Coulson * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ const { utils: Cu } = Components; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://ubufox/modules/utils.jsm"); addLogger(this, "distro"); var EXPORTED_SYMBOLS = [ "distro" ]; XPCOMUtils.defineLazyGetter(this, "impl", function() { function distroModuleImport(aResource) { let tmp = {}; Cu.import(aResource, tmp); return tmp["DistroImpl"]; } const PROPERTIES = { "DISTRIB_ID": "id", "DISTRIB_RELEASE": "version", "DISTRIB_CODENAME": "codename" }; try { let istream = Services.io.newChannel("file:///etc/lsb-release", null, null).open(); let re = /^([^=]*)=?(.*)/; let line = { value: "" }; while (istream.readLine(line)) { let key = line.value.replace(re, "$1"); let value = line.value.replace(re, "$2"); if (key in PROPERTIES) { distro[PROPERTIES[key]] = value; } } } catch(e) { ERROR("Failed to read lsb-release", e); } try { return distroModuleImport("resource://ubufox/distributions/" + distro.id + ".jsm"); } catch(e) { } return NullDistro; }); var NullDistro = { get canReportBug() { return false; }, reportBug: function Null_reportBug() { throw new Error("Don't know how to report a bug on this system"); }, get startpageURI() { return Services.io.newURI("about:home", null, null); }, }; var distro = { get canReportBug() { // Hide the menu entry for release builds of Firefox let channel = "default"; try { channel = Services.prefs.getCharPref("app.update.channel"); } catch(e) { }; return impl.canReportBug && channel != "release"; }, reportBug: function D_reportBug() { impl.reportBug(); }, get startpageURI() { return impl.startpageURI; } }; ubufox-3.2/locale/nl/ubufox.dtd000664 001750 001750 00000000111 12200012773 016632 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/pl/ubufox-restart.properties000664 001750 001750 00000000362 12200012773 021747 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Przeglądarka została zaktualizowana i musi zostać uruchomiona ponownie. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Uruchom ponownie restartNotificationKey=r ubufox-3.2/locale/el/ubufox.dtd000664 001750 001750 00000000126 12200012773 016627 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/ru/ubufox.properties000664 001750 001750 00000000174 12563423727 020322 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/pl/000775 001750 001750 00000000000 12563421217 014647 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/af/000775 001750 001750 00000000000 12563417156 014631 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/es/ubufox-restart.properties000664 001750 001750 00000000346 12200012773 021745 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Su navegador ha sido actualizado y necesita reiniciarse. restartNotificationLabel=Debería reiniciar %S ahora para instalar actualizaciones. restartNotificationButton=Reiniciar restartNotificationKey=r ubufox-3.2/locale/ja/ubufox.properties000664 001750 001750 00000000174 12563421051 020252 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/ca/ubufox.properties000664 001750 001750 00000000174 12563417637 020262 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/en-AU/ubufox.dtd000664 001750 001750 00000000101 12200012773 017125 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/sv-SE/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 022272 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/locale/hu/000775 001750 001750 00000000000 12563420674 014656 5ustar00chr1schr1s000000 000000 ubufox-3.2/build.sh000775 001750 001750 00000007632 12200012773 014432 0ustar00chr1schr1s000000 000000 #!/bin/bash # build.sh -- builds JAR and XPI files for mozilla extensions # by Nickolay Ponomarev # (original version based on Nathan Yergler's build script) # Most recent version is at # This script assumes the following directory structure: # ./ # chrome.manifest (optional - for newer extensions) # install.rdf # (other files listed in $ROOT_FILES) # # content/ | # locale/ |} these can be named arbitrary and listed in $CHROME_PROVIDERS # skin/ | # # defaults/ | # components/ |} these must be listed in $ROOT_DIRS in order to be packaged # ... | # # It uses a temporary directory ./build when building; don't use that! # Script's output is: # ./$APP_NAME.xpi # ./$APP_NAME.jar (only if $KEEP_JAR=1) # ./files -- the list of packaged files # # Note: It modifies chrome.manifest when packaging so that it points to # chrome/$APP_NAME.jar!/* # # default configuration file is ./config_build.sh, unless another file is # specified in command-line. Available config variables: APP_NAME= # short-name, jar and xpi files name. Must be lowercase with no spaces CHROME_PROVIDERS= # which chrome providers we have (space-separated list) CLEAN_UP= # delete the jar / "files" when done? (1/0) ROOT_FILES= # put these files in root of xpi (space separated list of leaf filenames) ROOT_DIRS= # ...and these directories (space separated list) BEFORE_BUILD= # run this before building (bash command) AFTER_BUILD= # ...and this after the build (bash command) if [ -z $1 ]; then . ./config_build.sh else . $1 fi if [ -z $APP_NAME ]; then echo "You need to create build config file first!" echo "Read comments at the beginning of this script for more info." exit; fi ROOT_DIR=`pwd` TMP_DIR=build #uncomment to debug #set -x # remove any left-over files from previous build rm -f $APP_NAME.jar $APP_NAME.xpi files rm -rf $TMP_DIR $BEFORE_BUILD mkdir --parents --verbose $TMP_DIR/chrome # generate the JAR file, excluding CVS and temporary files JAR_FILE=$TMP_DIR/chrome/$APP_NAME.jar echo "Generating $JAR_FILE..." for CHROME_SUBDIR in $CHROME_PROVIDERS; do find $CHROME_SUBDIR -path '*CVS*' -prune -o -type f -print | grep -v \~ >> files done zip -0 -r $JAR_FILE `cat files` # The following statement should be used instead if you don't wish to use the JAR file #cp --verbose --parents `cat files` $TMP_DIR/chrome # prepare components and defaults echo "Copying various files to $TMP_DIR folder..." for DIR in $ROOT_DIRS; do mkdir $TMP_DIR/$DIR FILES="`find $DIR -path '*CVS*' -prune -o -type f -print | grep -v \~`" echo $FILES >> files cp --verbose --parents $FILES $TMP_DIR done # Copy other files to the root of future XPI. for ROOT_FILE in $ROOT_FILES install.rdf chrome.manifest; do cp --verbose $ROOT_FILE $TMP_DIR if [ -f $ROOT_FILE ]; then echo $ROOT_FILE >> files fi done cd $TMP_DIR if [ -f "chrome.manifest" ]; then echo "Preprocessing chrome.manifest..." # You think this is scary? #s/^(content\s+\S*\s+)(\S*\/)$/\1jar:chrome\/$APP_NAME\.jar!\/\2/ #s/^(skin|locale)(\s+\S*\s+\S*\s+)(.*\/)$/\1\2jar:chrome\/$APP_NAME\.jar!\/\3/ # # Then try this! (Same, but with characters escaped for bash :) sed -i -r s/^\(content\|resource\)\(\\s+\\S*\\s+\)\(\\S*\\/\)$/\\1\\2jar:chrome\\/$APP_NAME\\.jar!\\/\\3/ chrome.manifest sed -i -r s/^\(skin\|locale\)\(\\s+\\S*\\s+\\S*\\s+\)\(.*\\/\)$/\\1\\2jar:chrome\\/$APP_NAME\\.jar!\\/\\3/ chrome.manifest # (it simply adds jar:chrome/whatever.jar!/ at appropriate positions of chrome.manifest) fi $BEFORE_PACK # generate the XPI file echo "Generating $APP_NAME.xpi..." zip -r ../$APP_NAME.xpi * cd "$ROOT_DIR" echo "Cleanup..." if [ $CLEAN_UP = 0 ]; then # save the jar file mv $TMP_DIR/chrome/$APP_NAME.jar . else rm ./files fi # remove the working files rm -rf $TMP_DIR echo "Done!" $AFTER_BUILD ubufox-3.2/locale/pt-BR/ubufox.properties000664 001750 001750 00000000175 12563423562 020616 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/res/libs/000775 001750 001750 00000000000 12543102713 014512 5ustar00chr1schr1s000000 000000 ubufox-3.2/locale/de/ubufox.properties000664 001750 001750 00000000174 12563417777 020274 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/cs/ubufox.dtd000664 001750 001750 00000000103 12200012773 016627 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/sv-SE/ubufox.dtd000664 001750 001750 00000000107 12200012773 017163 0ustar00chr1schr1s000000 000000 ubufox-3.2/locale/nl/ubufox.properties000664 001750 001750 00000000174 12563421156 020277 0ustar00chr1schr1s000000 000000 browser.startup.homepage=about:startpage startup.homepage_override_url=about:blank startup.homepage_welcome_url=about:blank ubufox-3.2/locale/ru/ubufox-restart.properties000664 001750 001750 00000000327 12200012773 021763 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=Your browser has been updated and needs to be restarted. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Restart restartNotificationKey=r ubufox-3.2/locale/hu/ubufox-restart.properties000664 001750 001750 00000000355 12200012773 021752 0ustar00chr1schr1s000000 000000 oldRestartNotificationLabel=A böngésző frissítése befejeződött, ezért újra kell indítani. restartNotificationLabel=You should restart %S now to install updates. restartNotificationButton=Újraindítás restartNotificationKey=r ubufox-3.2/content/overlay.xul000664 001750 001750 00000005460 12200012773 016656 0ustar00chr1schr1s000000 000000 %ubufoxDTD; %ubufox-altDTD; ]>