diff options
Diffstat (limited to 'browser/components/preferences/in-content/main.js')
-rw-r--r-- | browser/components/preferences/in-content/main.js | 667 |
1 files changed, 0 insertions, 667 deletions
diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js deleted file mode 100644 index bac771bec..000000000 --- a/browser/components/preferences/in-content/main.js +++ /dev/null @@ -1,667 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -Components.utils.import("resource://gre/modules/Downloads.jsm"); -Components.utils.import("resource://gre/modules/FileUtils.jsm"); -Components.utils.import("resource://gre/modules/Task.jsm"); -Components.utils.import("resource:///modules/ShellService.jsm"); -Components.utils.import("resource:///modules/TransientPrefs.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "OS", - "resource://gre/modules/osfile.jsm"); - -var gMainPane = { - /** - * Initialization of this. - */ - init: function () - { - function setEventListener(aId, aEventType, aCallback) - { - document.getElementById(aId) - .addEventListener(aEventType, aCallback.bind(gMainPane)); - } - - if (AppConstants.HAVE_SHELL_SERVICE) { - this.updateSetDefaultBrowser(); - if (AppConstants.platform == "win") { - // In Windows 8 we launch the control panel since it's the only - // way to get all file type association prefs. So we don't know - // when the user will select the default. We refresh here periodically - // in case the default changes. On other Windows OS's defaults can also - // be set while the prefs are open. - window.setInterval(this.updateSetDefaultBrowser.bind(this), 1000); - } - } - - // set up the "use current page" label-changing listener - this._updateUseCurrentButton(); - window.addEventListener("focus", this._updateUseCurrentButton.bind(this), false); - - this.updateBrowserStartupLastSession(); - - if (AppConstants.platform == "win") { - // Functionality for "Show tabs in taskbar" on Windows 7 and up. - try { - let sysInfo = Cc["@mozilla.org/system-info;1"]. - getService(Ci.nsIPropertyBag2); - let ver = parseFloat(sysInfo.getProperty("version")); - let showTabsInTaskbar = document.getElementById("showTabsInTaskbar"); - showTabsInTaskbar.hidden = ver < 6.1; - } catch (ex) {} - } - - // The "closing multiple tabs" and "opening multiple tabs might slow down - // &brandShortName;" warnings provide options for not showing these - // warnings again. When the user disabled them, we provide checkboxes to - // re-enable the warnings. - if (!TransientPrefs.prefShouldBeVisible("browser.tabs.warnOnClose")) - document.getElementById("warnCloseMultiple").hidden = true; - if (!TransientPrefs.prefShouldBeVisible("browser.tabs.warnOnOpen")) - document.getElementById("warnOpenMany").hidden = true; - - setEventListener("browser.privatebrowsing.autostart", "change", - gMainPane.updateBrowserStartupLastSession); - setEventListener("browser.download.dir", "change", - gMainPane.displayDownloadDirPref); - if (AppConstants.HAVE_SHELL_SERVICE) { - setEventListener("setDefaultButton", "command", - gMainPane.setDefaultBrowser); - } - setEventListener("useCurrent", "command", - gMainPane.setHomePageToCurrent); - setEventListener("useBookmark", "command", - gMainPane.setHomePageToBookmark); - setEventListener("restoreDefaultHomePage", "command", - gMainPane.restoreDefaultHomePage); - setEventListener("chooseFolder", "command", - gMainPane.chooseFolder); - - if (AppConstants.MOZ_DEV_EDITION) { - let uAppData = OS.Constants.Path.userApplicationDataDir; - let ignoreSeparateProfile = OS.Path.join(uAppData, "ignore-dev-edition-profile"); - - setEventListener("separateProfileMode", "command", gMainPane.separateProfileModeChange); - let separateProfileModeCheckbox = document.getElementById("separateProfileMode"); - setEventListener("getStarted", "click", gMainPane.onGetStarted); - - OS.File.stat(ignoreSeparateProfile).then(() => separateProfileModeCheckbox.checked = false, - () => separateProfileModeCheckbox.checked = true); - } - - // Notify observers that the UI is now ready - Components.classes["@mozilla.org/observer-service;1"] - .getService(Components.interfaces.nsIObserverService) - .notifyObservers(window, "main-pane-loaded", null); - }, - - enableE10SChange: function () - { - // **STUB** - }, - - separateProfileModeChange: function () - { - if (AppConstants.MOZ_DEV_EDITION) { - function quitApp() { - Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestartNotSameProfile); - } - function revertCheckbox(error) { - separateProfileModeCheckbox.checked = !separateProfileModeCheckbox.checked; - if (error) { - Cu.reportError("Failed to toggle separate profile mode: " + error); - } - } - function createOrRemoveSpecialDevEditionFile(onSuccess) { - let uAppData = OS.Constants.Path.userApplicationDataDir; - let ignoreSeparateProfile = OS.Path.join(uAppData, "ignore-dev-edition-profile"); - - if (separateProfileModeCheckbox.checked) { - OS.File.remove(ignoreSeparateProfile).then(onSuccess, revertCheckbox); - } else { - OS.File.writeAtomic(ignoreSeparateProfile, new Uint8Array()).then(onSuccess, revertCheckbox); - } - } - - let separateProfileModeCheckbox = document.getElementById("separateProfileMode"); - let button_index = confirmRestartPrompt(separateProfileModeCheckbox.checked, - 0, false, true); - switch (button_index) { - case CONFIRM_RESTART_PROMPT_CANCEL: - revertCheckbox(); - return; - case CONFIRM_RESTART_PROMPT_RESTART_NOW: - const Cc = Components.classes, Ci = Components.interfaces; - let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"] - .createInstance(Ci.nsISupportsPRBool); - Services.obs.notifyObservers(cancelQuit, "quit-application-requested", - "restart"); - if (!cancelQuit.data) { - createOrRemoveSpecialDevEditionFile(quitApp); - return; - } - - // Revert the checkbox in case we didn't quit - revertCheckbox(); - return; - case CONFIRM_RESTART_PROMPT_RESTART_LATER: - createOrRemoveSpecialDevEditionFile(); - return; - } - } - }, - - onGetStarted: function (aEvent) { - if (AppConstants.MOZ_DEV_EDITION) { - const Cc = Components.classes, Ci = Components.interfaces; - let wm = Cc["@mozilla.org/appshell/window-mediator;1"] - .getService(Ci.nsIWindowMediator); - let win = wm.getMostRecentWindow("navigator:browser"); - - if (win) { - let accountsTab = win.gBrowser.addTab("about:accounts?action=signin&entrypoint=dev-edition-setup"); - win.gBrowser.selectedTab = accountsTab; - } - } - }, - - // HOME PAGE - - /* - * Preferences: - * - * browser.startup.homepage - * - the user's home page, as a string; if the home page is a set of tabs, - * this will be those URLs separated by the pipe character "|" - * browser.startup.page - * - what page(s) to show when the user starts the application, as an integer: - * - * 0: a blank page - * 1: the home page (as set by the browser.startup.homepage pref) - * 2: the last page the user visited (DEPRECATED) - * 3: windows and tabs from the last session (a.k.a. session restore) - * - * The deprecated option is not exposed in UI; however, if the user has it - * selected and doesn't change the UI for this preference, the deprecated - * option is preserved. - */ - - syncFromHomePref: function () - { - let homePref = document.getElementById("browser.startup.homepage"); - - // If the pref is set to about:home or about:newtab, set the value to "" - // to show the placeholder text (about:home title) rather than - // exposing those URLs to users. - let defaultBranch = Services.prefs.getDefaultBranch(""); - let defaultValue = defaultBranch.getComplexValue("browser.startup.homepage", - Ci.nsIPrefLocalizedString).data; - let currentValue = homePref.value.toLowerCase(); - if (currentValue == "about:home" || - (currentValue == defaultValue && currentValue == "about:newtab")) { - return ""; - } - - // If the pref is actually "", show about:blank. The actual home page - // loading code treats them the same, and we don't want the placeholder text - // to be shown. - if (homePref.value == "") - return "about:blank"; - - // Otherwise, show the actual pref value. - return undefined; - }, - - syncToHomePref: function (value) - { - // If the value is "", use about:home. - if (value == "") - return "about:home"; - - // Otherwise, use the actual textbox value. - return undefined; - }, - - /** - * Sets the home page to the current displayed page (or frontmost tab, if the - * most recent browser window contains multiple tabs), updating preference - * window UI to reflect this. - */ - setHomePageToCurrent: function () - { - let homePage = document.getElementById("browser.startup.homepage"); - let tabs = this._getTabsForHomePage(); - function getTabURI(t) { - return t.linkedBrowser.currentURI.spec; - } - - // FIXME Bug 244192: using dangerous "|" joiner! - if (tabs.length) - homePage.value = tabs.map(getTabURI).join("|"); - }, - - /** - * Displays a dialog in which the user can select a bookmark to use as home - * page. If the user selects a bookmark, that bookmark's name is displayed in - * UI and the bookmark's address is stored to the home page preference. - */ - setHomePageToBookmark: function () - { - var rv = { urls: null, names: null }; - gSubDialog.open("chrome://browser/content/preferences/selectBookmark.xul", - "resizable=yes, modal=yes", rv, - this._setHomePageToBookmarkClosed.bind(this, rv)); - }, - - _setHomePageToBookmarkClosed: function(rv, aEvent) { - if (aEvent.detail.button != "accept") - return; - if (rv.urls && rv.names) { - var homePage = document.getElementById("browser.startup.homepage"); - - // XXX still using dangerous "|" joiner! - homePage.value = rv.urls.join("|"); - } - }, - - /** - * Switches the "Use Current Page" button between its singular and plural - * forms. - */ - _updateUseCurrentButton: function () { - let useCurrent = document.getElementById("useCurrent"); - - - let tabs = this._getTabsForHomePage(); - - if (tabs.length > 1) - useCurrent.label = useCurrent.getAttribute("label2"); - else - useCurrent.label = useCurrent.getAttribute("label1"); - - // In this case, the button's disabled state is set by preferences.xml. - let prefName = "pref.browser.homepage.disable_button.current_page"; - if (document.getElementById(prefName).locked) - return; - - useCurrent.disabled = !tabs.length - }, - - _getTabsForHomePage: function () - { - var win; - var tabs = []; - - const Cc = Components.classes, Ci = Components.interfaces; - var wm = Cc["@mozilla.org/appshell/window-mediator;1"] - .getService(Ci.nsIWindowMediator); - win = wm.getMostRecentWindow("navigator:browser"); - - if (win && win.document.documentElement - .getAttribute("windowtype") == "navigator:browser") { - // We should only include visible & non-pinned tabs - - tabs = win.gBrowser.visibleTabs.slice(win.gBrowser._numPinnedTabs); - tabs = tabs.filter(this.isNotAboutPreferences); - } - - return tabs; - }, - - /** - * Check to see if a tab is not about:preferences - */ - isNotAboutPreferences: function (aElement, aIndex, aArray) - { - return !aElement.linkedBrowser.currentURI.spec.startsWith("about:preferences"); - }, - - /** - * Restores the default home page as the user's home page. - */ - restoreDefaultHomePage: function () - { - var homePage = document.getElementById("browser.startup.homepage"); - homePage.value = homePage.defaultValue; - }, - - // DOWNLOADS - - /* - * Preferences: - * - * browser.download.useDownloadDir - bool - * True - Save files directly to the folder configured via the - * browser.download.folderList preference. - * False - Always ask the user where to save a file and default to - * browser.download.lastDir when displaying a folder picker dialog. - * browser.download.dir - local file handle - * A local folder the user may have selected for downloaded files to be - * saved. Migration of other browser settings may also set this path. - * This folder is enabled when folderList equals 2. - * browser.download.lastDir - local file handle - * May contain the last folder path accessed when the user browsed - * via the file save-as dialog. (see contentAreaUtils.js) - * browser.download.folderList - int - * Indicates the location users wish to save downloaded files too. - * It is also used to display special file labels when the default - * download location is either the Desktop or the Downloads folder. - * Values: - * 0 - The desktop is the default download location. - * 1 - The system's downloads folder is the default download location. - * 2 - The default download location is elsewhere as specified in - * browser.download.dir. - * browser.download.downloadDir - * deprecated. - * browser.download.defaultFolder - * deprecated. - */ - - /** - * Enables/disables the folder field and Browse button based on whether a - * default download directory is being used. - */ - readUseDownloadDir: function () - { - var downloadFolder = document.getElementById("downloadFolder"); - var chooseFolder = document.getElementById("chooseFolder"); - var preference = document.getElementById("browser.download.useDownloadDir"); - downloadFolder.disabled = !preference.value || preference.locked; - chooseFolder.disabled = !preference.value || preference.locked; - - // don't override the preference's value in UI - return undefined; - }, - - /** - * Displays a file picker in which the user can choose the location where - * downloads are automatically saved, updating preferences and UI in - * response to the choice, if one is made. - */ - chooseFolder() - { - return this.chooseFolderTask().catch(Components.utils.reportError); - }, - chooseFolderTask: Task.async(function* () - { - let bundlePreferences = document.getElementById("bundlePreferences"); - let title = bundlePreferences.getString("chooseDownloadFolderTitle"); - let folderListPref = document.getElementById("browser.download.folderList"); - let currentDirPref = yield this._indexToFolder(folderListPref.value); - let defDownloads = yield this._indexToFolder(1); - let fp = Components.classes["@mozilla.org/filepicker;1"]. - createInstance(Components.interfaces.nsIFilePicker); - - fp.init(window, title, Components.interfaces.nsIFilePicker.modeGetFolder); - fp.appendFilters(Components.interfaces.nsIFilePicker.filterAll); - // First try to open what's currently configured - if (currentDirPref && currentDirPref.exists()) { - fp.displayDirectory = currentDirPref; - } // Try the system's download dir - else if (defDownloads && defDownloads.exists()) { - fp.displayDirectory = defDownloads; - } // Fall back to Desktop - else { - fp.displayDirectory = yield this._indexToFolder(0); - } - - let result = yield new Promise(resolve => fp.open(resolve)); - if (result != Components.interfaces.nsIFilePicker.returnOK) { - return; - } - - let downloadDirPref = document.getElementById("browser.download.dir"); - downloadDirPref.value = fp.file; - folderListPref.value = yield this._folderToIndex(fp.file); - // Note, the real prefs will not be updated yet, so dnld manager's - // userDownloadsDirectory may not return the right folder after - // this code executes. displayDownloadDirPref will be called on - // the assignment above to update the UI. - }), - - /** - * Initializes the download folder display settings based on the user's - * preferences. - */ - displayDownloadDirPref() - { - this.displayDownloadDirPrefTask().catch(Components.utils.reportError); - - // don't override the preference's value in UI - return undefined; - }, - - displayDownloadDirPrefTask: Task.async(function* () - { - var folderListPref = document.getElementById("browser.download.folderList"); - var bundlePreferences = document.getElementById("bundlePreferences"); - var downloadFolder = document.getElementById("downloadFolder"); - var currentDirPref = document.getElementById("browser.download.dir"); - - // Used in defining the correct path to the folder icon. - var ios = Components.classes["@mozilla.org/network/io-service;1"] - .getService(Components.interfaces.nsIIOService); - var fph = ios.getProtocolHandler("file") - .QueryInterface(Components.interfaces.nsIFileProtocolHandler); - var iconUrlSpec; - - // Display a 'pretty' label or the path in the UI. - if (folderListPref.value == 2) { - // Custom path selected and is configured - downloadFolder.label = this._getDisplayNameOfFile(currentDirPref.value); - iconUrlSpec = fph.getURLSpecFromFile(currentDirPref.value); - } else if (folderListPref.value == 1) { - // 'Downloads' - // In 1.5, this pointed to a folder we created called 'My Downloads' - // and was available as an option in the 1.5 drop down. On XP this - // was in My Documents, on OSX it was in User Docs. In 2.0, we did - // away with the drop down option, although the special label was - // still supported for the folder if it existed. Because it was - // not exposed it was rarely used. - // With 3.0, a new desktop folder - 'Downloads' was introduced for - // platforms and versions that don't support a default system downloads - // folder. See nsDownloadManager for details. - downloadFolder.label = bundlePreferences.getString("downloadsFolderName"); - iconUrlSpec = fph.getURLSpecFromFile(yield this._indexToFolder(1)); - } else { - // 'Desktop' - downloadFolder.label = bundlePreferences.getString("desktopFolderName"); - iconUrlSpec = fph.getURLSpecFromFile(yield this._getDownloadsFolder("Desktop")); - } - downloadFolder.image = "moz-icon://" + iconUrlSpec + "?size=16"; - }), - - /** - * Returns the textual path of a folder in readable form. - */ - _getDisplayNameOfFile: function (aFolder) - { - // TODO: would like to add support for 'Downloads on Macintosh HD' - // for OS X users. - return aFolder ? aFolder.path : ""; - }, - - /** - * Returns the Downloads folder. If aFolder is "Desktop", then the Downloads - * folder returned is the desktop folder; otherwise, it is a folder whose name - * indicates that it is a download folder and whose path is as determined by - * the XPCOM directory service via the download manager's attribute - * defaultDownloadsDirectory. - * - * @throws if aFolder is not "Desktop" or "Downloads" - */ - _getDownloadsFolder: Task.async(function* (aFolder) - { - switch (aFolder) { - case "Desktop": - var fileLoc = Components.classes["@mozilla.org/file/directory_service;1"] - .getService(Components.interfaces.nsIProperties); - return fileLoc.get("Desk", Components.interfaces.nsILocalFile); - case "Downloads": - let downloadsDir = yield Downloads.getSystemDownloadsDirectory(); - return new FileUtils.File(downloadsDir); - } - throw "ASSERTION FAILED: folder type should be 'Desktop' or 'Downloads'"; - }), - - /** - * Determines the type of the given folder. - * - * @param aFolder - * the folder whose type is to be determined - * @returns integer - * 0 if aFolder is the Desktop or is unspecified, - * 1 if aFolder is the Downloads folder, - * 2 otherwise - */ - _folderToIndex: Task.async(function* (aFolder) - { - if (!aFolder || aFolder.equals(yield this._getDownloadsFolder("Desktop"))) - return 0; - else if (aFolder.equals(yield this._getDownloadsFolder("Downloads"))) - return 1; - return 2; - }), - - /** - * Converts an integer into the corresponding folder. - * - * @param aIndex - * an integer - * @returns the Desktop folder if aIndex == 0, - * the Downloads folder if aIndex == 1, - * the folder stored in browser.download.dir - */ - _indexToFolder: Task.async(function* (aIndex) - { - switch (aIndex) { - case 0: - return yield this._getDownloadsFolder("Desktop"); - case 1: - return yield this._getDownloadsFolder("Downloads"); - } - var currentDirPref = document.getElementById("browser.download.dir"); - return currentDirPref.value; - }), - - /** - * Hide/show the "Show my windows and tabs from last time" option based - * on the value of the browser.privatebrowsing.autostart pref. - */ - updateBrowserStartupLastSession: function() - { - let pbAutoStartPref = document.getElementById("browser.privatebrowsing.autostart"); - let startupPref = document.getElementById("browser.startup.page"); - let menu = document.getElementById("browserStartupPage"); - let option = document.getElementById("browserStartupLastSession"); - if (pbAutoStartPref.value) { - option.setAttribute("disabled", "true"); - if (option.selected) { - menu.selectedItem = document.getElementById("browserStartupHomePage"); - } - } else { - option.removeAttribute("disabled"); - startupPref.updateElements(); // select the correct index in the startup menulist - } - }, - - // TABS - - /* - * Preferences: - * - * browser.link.open_newwindow - int - * Determines where links targeting new windows should open. - * Values: - * 1 - Open in the current window or tab. - * 2 - Open in a new window. - * 3 - Open in a new tab in the most recent window. - * browser.tabs.loadInBackground - bool - * True - Whether browser should switch to a new tab opened from a link. - * browser.tabs.warnOnClose - bool - * True - If when closing a window with multiple tabs the user is warned and - * allowed to cancel the action, false to just close the window. - * browser.tabs.warnOnOpen - bool - * True - Whether the user should be warned when trying to open a lot of - * tabs at once (e.g. a large folder of bookmarks), allowing to - * cancel the action. - * browser.taskbar.previews.enable - bool - * True - Tabs are to be shown in Windows 7 taskbar. - * False - Only the window is to be shown in Windows 7 taskbar. - */ - - /** - * Determines where a link which opens a new window will open. - * - * @returns |true| if such links should be opened in new tabs - */ - readLinkTarget: function() { - var openNewWindow = document.getElementById("browser.link.open_newwindow"); - return openNewWindow.value != 2; - }, - - /** - * Determines where a link which opens a new window will open. - * - * @returns 2 if such links should be opened in new windows, - * 3 if such links should be opened in new tabs - */ - writeLinkTarget: function() { - var linkTargeting = document.getElementById("linkTargeting"); - return linkTargeting.checked ? 3 : 2; - }, - /* - * Preferences: - * - * browser.shell.checkDefault - * - true if a default-browser check (and prompt to make it so if necessary) - * occurs at startup, false otherwise - */ - - /** - * Show button for setting browser as default browser or information that - * browser is already the default browser. - */ - updateSetDefaultBrowser: function() - { - if (AppConstants.HAVE_SHELL_SERVICE) { - let shellSvc = getShellService(); - let defaultBrowserBox = document.getElementById("defaultBrowserBox"); - if (!shellSvc) { - defaultBrowserBox.hidden = true; - return; - } - let setDefaultPane = document.getElementById("setDefaultPane"); - let isDefault = shellSvc.isDefaultBrowser(false, true); - setDefaultPane.selectedIndex = isDefault ? 1 : 0; - let alwaysCheck = document.getElementById("alwaysCheckDefault"); - alwaysCheck.disabled = alwaysCheck.disabled || - isDefault && alwaysCheck.checked; - } - }, - - /** - * Set browser as the operating system default browser. - */ - setDefaultBrowser: function() - { - if (AppConstants.HAVE_SHELL_SERVICE) { - let alwaysCheckPref = document.getElementById("browser.shell.checkDefaultBrowser"); - alwaysCheckPref.value = true; - - let shellSvc = getShellService(); - if (!shellSvc) - return; - try { - shellSvc.setDefaultBrowser(true, false); - } catch (ex) { - Cu.reportError(ex); - return; - } - - let selectedIndex = shellSvc.isDefaultBrowser(false, true) ? 1 : 0; - document.getElementById("setDefaultPane").selectedIndex = selectedIndex; - } - }, -}; |