// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*- /* ***** 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 Mozilla Mobile Browser. * * The Initial Developer of the Original Code is * Mozilla Corporation. * Portions created by the Initial Developer are Copyright (C) 2008 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Mark Finkle * * 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 ***** */ Components.utils.import("resource://gre/modules/utils.js"); const TOOLBARSTATE_LOADING = 1; const TOOLBARSTATE_LOADED = 2; const UIMODE_NONE = 0; const UIMODE_URLVIEW = 1; const UIMODE_URLEDIT = 2; const UIMODE_TABS = 3; const UIMODE_CONTROLS = 4; const UIMODE_PANEL = 5; const kMaxEngines = 4; const kDefaultFavIconURL = "chrome://browser/skin/images/default-favicon.png"; [ ["gContentBox", "content"], ].forEach(function (elementGlobal) { var [name, id] = elementGlobal; window.__defineGetter__(name, function () { var element = document.getElementById(id); if (!element) return null; delete window[name]; return window[name] = element; }); window.__defineSetter__(name, function (val) { delete window[name]; return window[name] = val; }); }); var BrowserUI = { _panel : null, _edit : null, _throbber : null, _autocompleteNavbuttons : null, _favicon : null, _faviconLink : null, _titleChanged : function(aDocument) { var browser = Browser.selectedBrowser; if (browser && aDocument != browser.contentDocument) return; var caption = aDocument.title; if (!caption) { caption = this.getDisplayURI(browser); if (caption == "about:blank") caption = ""; } this._edit.value = caption; var docElem = document.documentElement; var title = ""; if (aDocument.title) title = aDocument.title + docElem.getAttribute("titleseparator"); document.title = title + docElem.getAttribute("titlemodifier"); }, _linkAdded : function(aEvent) { var link = aEvent.originalTarget; if (!link || !link.href) return; if (/\bicon\b/i(link.rel)) { this._faviconLink = link.href; // If the link changes after pageloading, update it right away. // otherwise we wait until the pageload finishes if (this._favicon.src != "") this._setIcon(this._faviconLink); } }, _tabSelect : function(aEvent) { var browser = Browser.selectedBrowser; this._titleChanged(browser.contentDocument); this._favicon.src = browser.mIconURL || kDefaultFavIconURL; // for new tabs, _tabSelect & update(TOOLBARSTATE_LOADED) are called when // about:blank is loaded. set _faviconLink here so it is not overriden in update this._faviconLink = this._favicon.src; this.updateIcon(); }, _setIcon : function(aURI) { var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); try { var faviconURI = ios.newURI(aURI, null, null); } catch (e) { faviconURI = null; } var fis = Cc["@mozilla.org/browser/favicon-service;1"].getService(Ci.nsIFaviconService); if (!faviconURI || faviconURI.schemeIs("javascript") || fis.isFailedFavicon(faviconURI)) faviconURI = ios.newURI(kDefaultFavIconURL, null, null); var browser = getBrowser(); browser.mIconURL = faviconURI.spec; fis.setAndLoadFaviconForPage(browser.currentURI, faviconURI, true); this._favicon.src = faviconURI.spec; }, _getHistory : function(aCount) { var items = []; var hs = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService); var options = hs.getNewQueryOptions(); options.queryType = options.QUERY_TYPE_HISTORY; //options.sortingMode = options.SORT_BY_VISITCOUNT_DESCENDING; options.maxResults = aCount; //options.resultType = Ci.nsINavHistoryQueryOptions.RESULTS_AS_URI; var query = hs.getNewQuery(); var result = hs.executeQuery(query, options); var rootNode = result.root; rootNode.containerOpen = true; var cc = rootNode.childCount; for (var i=0; i