summaryrefslogtreecommitdiffstats
path: root/components/fuel/fuelApplication.js
diff options
context:
space:
mode:
Diffstat (limited to 'components/fuel/fuelApplication.js')
-rw-r--r--components/fuel/fuelApplication.js822
1 files changed, 0 insertions, 822 deletions
diff --git a/components/fuel/fuelApplication.js b/components/fuel/fuelApplication.js
deleted file mode 100644
index bc3a091..0000000
--- a/components/fuel/fuelApplication.js
+++ /dev/null
@@ -1,822 +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/. */
-
-const Ci = Components.interfaces;
-const Cc = Components.classes;
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Deprecated",
- "resource://gre/modules/Deprecated.jsm");
-
-const APPLICATION_CID = Components.ID("fe74cf80-aa2d-11db-abbd-0800200c9a66");
-const APPLICATION_CONTRACTID = "@mozilla.org/fuel/application;1";
-
-//=================================================
-// Singleton that holds services and utilities
-var Utilities = {
- get bookmarks() {
- let bookmarks = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
- getService(Ci.nsINavBookmarksService);
- this.__defineGetter__("bookmarks", function() bookmarks);
- return this.bookmarks;
- },
-
- get bookmarksObserver() {
- let bookmarksObserver = new BookmarksObserver();
- this.__defineGetter__("bookmarksObserver", function() bookmarksObserver);
- return this.bookmarksObserver;
- },
-
- get annotations() {
- let annotations = Cc["@mozilla.org/browser/annotation-service;1"].
- getService(Ci.nsIAnnotationService);
- this.__defineGetter__("annotations", function() annotations);
- return this.annotations;
- },
-
- get history() {
- let history = Cc["@mozilla.org/browser/nav-history-service;1"].
- getService(Ci.nsINavHistoryService);
- this.__defineGetter__("history", function() history);
- return this.history;
- },
-
- get windowMediator() {
- let windowMediator = Cc["@mozilla.org/appshell/window-mediator;1"].
- getService(Ci.nsIWindowMediator);
- this.__defineGetter__("windowMediator", function() windowMediator);
- return this.windowMediator;
- },
-
- makeURI: function fuelutil_makeURI(aSpec) {
- if (!aSpec)
- return null;
- var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
- return ios.newURI(aSpec, null, null);
- },
-
- free: function fuelutil_free() {
- delete this.bookmarks;
- delete this.bookmarksObserver;
- delete this.annotations;
- delete this.history;
- delete this.windowMediator;
- }
-};
-
-
-//=================================================
-// Window implementation
-
-var fuelWindowMap = new WeakMap();
-function getWindow(aWindow) {
- let fuelWindow = fuelWindowMap.get(aWindow);
- if (!fuelWindow) {
- fuelWindow = new Window(aWindow);
- fuelWindowMap.set(aWindow, fuelWindow);
- }
- return fuelWindow;
-}
-
-// Don't call new Window() directly; use getWindow instead.
-function Window(aWindow) {
- this._window = aWindow;
- this._events = new Events();
-
- this._watch("TabOpen");
- this._watch("TabMove");
- this._watch("TabClose");
- this._watch("TabSelect");
-}
-
-Window.prototype = {
- get events() {
- return this._events;
- },
-
- get _tabbrowser() {
- return this._window.getBrowser();
- },
-
- /*
- * Helper used to setup event handlers on the XBL element. Note that the events
- * are actually dispatched to tabs, so we capture them.
- */
- _watch: function win_watch(aType) {
- this._tabbrowser.tabContainer.addEventListener(aType, this,
- /* useCapture = */ true);
- },
-
- handleEvent: function win_handleEvent(aEvent) {
- this._events.dispatch(aEvent.type, getBrowserTab(this, aEvent.originalTarget.linkedBrowser));
- },
-
- get tabs() {
- var tabs = [];
- var browsers = this._tabbrowser.browsers;
- for (var i=0; i<browsers.length; i++)
- tabs.push(getBrowserTab(this, browsers[i]));
- return tabs;
- },
-
- get activeTab() {
- return getBrowserTab(this, this._tabbrowser.selectedBrowser);
- },
-
- open: function win_open(aURI) {
- return getBrowserTab(this, this._tabbrowser.addTab(aURI.spec).linkedBrowser);
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.fuelIWindow])
-};
-
-//=================================================
-// BrowserTab implementation
-
-var fuelBrowserTabMap = new WeakMap();
-function getBrowserTab(aFUELWindow, aBrowser) {
- let fuelBrowserTab = fuelBrowserTabMap.get(aBrowser);
- if (!fuelBrowserTab) {
- fuelBrowserTab = new BrowserTab(aFUELWindow, aBrowser);
- fuelBrowserTabMap.set(aBrowser, fuelBrowserTab);
- }
- else {
- // This tab may have moved to another window, so make sure its cached
- // window is up-to-date.
- fuelBrowserTab._window = aFUELWindow;
- }
-
- return fuelBrowserTab;
-}
-
-// Don't call new BrowserTab() directly; call getBrowserTab instead.
-function BrowserTab(aFUELWindow, aBrowser) {
- this._window = aFUELWindow;
- this._browser = aBrowser;
- this._events = new Events();
-
- this._watch("load");
-}
-
-BrowserTab.prototype = {
- get _tabbrowser() {
- return this._window._tabbrowser;
- },
-
- get uri() {
- return this._browser.currentURI;
- },
-
- get index() {
- var tabs = this._tabbrowser.tabs;
- for (var i=0; i<tabs.length; i++) {
- if (tabs[i].linkedBrowser == this._browser)
- return i;
- }
- return -1;
- },
-
- get events() {
- return this._events;
- },
-
- get window() {
- return this._window;
- },
-
- get document() {
- return this._browser.contentDocument;
- },
-
- /*
- * Helper used to setup event handlers on the XBL element
- */
- _watch: function bt_watch(aType) {
- this._browser.addEventListener(aType, this,
- /* useCapture = */ true);
- },
-
- handleEvent: function bt_handleEvent(aEvent) {
- if (aEvent.type == "load") {
- if (!(aEvent.originalTarget instanceof Ci.nsIDOMDocument))
- return;
-
- if (aEvent.originalTarget.defaultView instanceof Ci.nsIDOMWindow &&
- aEvent.originalTarget.defaultView.frameElement)
- return;
- }
- this._events.dispatch(aEvent.type, this);
- },
- /*
- * Helper used to determine the index offset of the browsertab
- */
- _getTab: function bt_gettab() {
- var tabs = this._tabbrowser.tabs;
- return tabs[this.index] || null;
- },
-
- load: function bt_load(aURI) {
- this._browser.loadURI(aURI.spec, null, null);
- },
-
- focus: function bt_focus() {
- this._tabbrowser.selectedTab = this._getTab();
- this._tabbrowser.focus();
- },
-
- close: function bt_close() {
- this._tabbrowser.removeTab(this._getTab());
- },
-
- moveBefore: function bt_movebefore(aBefore) {
- this._tabbrowser.moveTabTo(this._getTab(), aBefore.index);
- },
-
- moveToEnd: function bt_moveend() {
- this._tabbrowser.moveTabTo(this._getTab(), this._tabbrowser.browsers.length);
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.fuelIBrowserTab])
-};
-
-
-//=================================================
-// Annotations implementation
-function Annotations(aId) {
- this._id = aId;
-}
-
-Annotations.prototype = {
- get names() {
- return Utilities.annotations.getItemAnnotationNames(this._id);
- },
-
- has: function ann_has(aName) {
- return Utilities.annotations.itemHasAnnotation(this._id, aName);
- },
-
- get: function ann_get(aName) {
- if (this.has(aName))
- return Utilities.annotations.getItemAnnotation(this._id, aName);
- return null;
- },
-
- set: function ann_set(aName, aValue, aExpiration) {
- Utilities.annotations.setItemAnnotation(this._id, aName, aValue, 0, aExpiration);
- },
-
- remove: function ann_remove(aName) {
- if (aName)
- Utilities.annotations.removeItemAnnotation(this._id, aName);
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.fuelIAnnotations])
-};
-
-
-//=================================================
-// BookmarksObserver implementation (internal class)
-//
-// BookmarksObserver is a global singleton which watches the browser's
-// bookmarks and sends you events when things change.
-//
-// You can register three different kinds of event listeners on
-// BookmarksObserver, using addListener, addFolderListener, and
-// addRootlistener.
-//
-// - addListener(aId, aEvent, aListener) lets you listen to a specific
-// bookmark. You can listen to the "change", "move", and "remove" events.
-//
-// - addFolderListener(aId, aEvent, aListener) lets you listen to a specific
-// bookmark folder. You can listen to "addchild" and "removechild".
-//
-// - addRootListener(aEvent, aListener) lets you listen to the root bookmark
-// node. This lets you hear "add", "remove", and "change" events on all
-// bookmarks.
-//
-
-function BookmarksObserver() {
- this._eventsDict = {};
- this._folderEventsDict = {};
- this._rootEvents = new Events();
- Utilities.bookmarks.addObserver(this, /* ownsWeak = */ true);
-}
-
-BookmarksObserver.prototype = {
- onBeginUpdateBatch: function () {},
- onEndUpdateBatch: function () {},
- onItemVisited: function () {},
-
- onItemAdded: function bo_onItemAdded(aId, aFolder, aIndex, aItemType, aURI) {
- this._rootEvents.dispatch("add", aId);
- this._dispatchToEvents("addchild", aId, this._folderEventsDict[aFolder]);
- },
-
- onItemRemoved: function bo_onItemRemoved(aId, aFolder, aIndex) {
- this._rootEvents.dispatch("remove", aId);
- this._dispatchToEvents("remove", aId, this._eventsDict[aId]);
- this._dispatchToEvents("removechild", aId, this._folderEventsDict[aFolder]);
- },
-
- onItemChanged: function bo_onItemChanged(aId, aProperty, aIsAnnotationProperty, aValue) {
- this._rootEvents.dispatch("change", aProperty);
- this._dispatchToEvents("change", aProperty, this._eventsDict[aId]);
- },
-
- onItemMoved: function bo_onItemMoved(aId, aOldParent, aOldIndex, aNewParent, aNewIndex) {
- this._dispatchToEvents("move", aId, this._eventsDict[aId]);
- },
-
- _dispatchToEvents: function bo_dispatchToEvents(aEvent, aData, aEvents) {
- if (aEvents) {
- aEvents.dispatch(aEvent, aData);
- }
- },
-
- _addListenerToDict: function bo_addListenerToDict(aId, aEvent, aListener, aDict) {
- var events = aDict[aId];
- if (!events) {
- events = new Events();
- aDict[aId] = events;
- }
- events.addListener(aEvent, aListener);
- },
-
- _removeListenerFromDict: function bo_removeListenerFromDict(aId, aEvent, aListener, aDict) {
- var events = aDict[aId];
- if (!events) {
- return;
- }
- events.removeListener(aEvent, aListener);
- if (events._listeners.length == 0) {
- delete aDict[aId];
- }
- },
-
- addListener: function bo_addListener(aId, aEvent, aListener) {
- this._addListenerToDict(aId, aEvent, aListener, this._eventsDict);
- },
-
- removeListener: function bo_removeListener(aId, aEvent, aListener) {
- this._removeListenerFromDict(aId, aEvent, aListener, this._eventsDict);
- },
-
- addFolderListener: function addFolderListener(aId, aEvent, aListener) {
- this._addListenerToDict(aId, aEvent, aListener, this._folderEventsDict);
- },
-
- removeFolderListener: function removeFolderListener(aId, aEvent, aListener) {
- this._removeListenerFromDict(aId, aEvent, aListener, this._folderEventsDict);
- },
-
- addRootListener: function addRootListener(aEvent, aListener) {
- this._rootEvents.addListener(aEvent, aListener);
- },
-
- removeRootListener: function removeRootListener(aEvent, aListener) {
- this._rootEvents.removeListener(aEvent, aListener);
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsINavBookmarksObserver,
- Ci.nsISupportsWeakReference])
-};
-
-//=================================================
-// Bookmark implementation
-//
-// Bookmark event listeners are stored in BookmarksObserver, not in the
-// Bookmark objects themselves. Thus, you don't have to hold on to a Bookmark
-// object in order for your event listener to stay valid, and Bookmark objects
-// not kept alive by the extension can be GC'ed.
-//
-// A consequence of this is that if you have two different Bookmark objects x
-// and y for the same bookmark (i.e., x != y but x.id == y.id), and you do
-//
-// x.addListener("foo", fun);
-// y.removeListener("foo", fun);
-//
-// the second line will in fact remove the listener added in the first line.
-//
-
-function Bookmark(aId, aParent, aType) {
- this._id = aId;
- this._parent = aParent;
- this._type = aType || "bookmark";
- this._annotations = new Annotations(this._id);
-
- // Our _events object forwards to bookmarksObserver.
- var self = this;
- this._events = {
- addListener: function bookmarkevents_al(aEvent, aListener) {
- Utilities.bookmarksObserver.addListener(self._id, aEvent, aListener);
- },
- removeListener: function bookmarkevents_rl(aEvent, aListener) {
- Utilities.bookmarksObserver.removeListener(self._id, aEvent, aListener);
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.extIEvents])
- };
-
- // For our onItemMoved listener, which updates this._parent.
- Utilities.bookmarks.addObserver(this, /* ownsWeak = */ true);
-}
-
-Bookmark.prototype = {
- get id() {
- return this._id;
- },
-
- get title() {
- return Utilities.bookmarks.getItemTitle(this._id);
- },
-
- set title(aTitle) {
- Utilities.bookmarks.setItemTitle(this._id, aTitle);
- },
-
- get uri() {
- return Utilities.bookmarks.getBookmarkURI(this._id);
- },
-
- set uri(aURI) {
- return Utilities.bookmarks.changeBookmarkURI(this._id, aURI);
- },
-
- get description() {
- return this._annotations.get("bookmarkProperties/description");
- },
-
- set description(aDesc) {
- this._annotations.set("bookmarkProperties/description", aDesc, Ci.nsIAnnotationService.EXPIRE_NEVER);
- },
-
- get keyword() {
- return Utilities.bookmarks.getKeywordForBookmark(this._id);
- },
-
- set keyword(aKeyword) {
- Utilities.bookmarks.setKeywordForBookmark(this._id, aKeyword);
- },
-
- get type() {
- return this._type;
- },
-
- get parent() {
- return this._parent;
- },
-
- set parent(aFolder) {
- Utilities.bookmarks.moveItem(this._id, aFolder.id, Utilities.bookmarks.DEFAULT_INDEX);
- // this._parent is updated in onItemMoved
- },
-
- get annotations() {
- return this._annotations;
- },
-
- get events() {
- return this._events;
- },
-
- remove : function bm_remove() {
- Utilities.bookmarks.removeItem(this._id);
- },
-
- onBeginUpdateBatch: function () {},
- onEndUpdateBatch: function () {},
- onItemAdded: function () {},
- onItemVisited: function () {},
- onItemRemoved: function () {},
- onItemChanged: function () {},
-
- onItemMoved: function(aId, aOldParent, aOldIndex, aNewParent, aNewIndex) {
- if (aId == this._id) {
- this._parent = new BookmarkFolder(aNewParent, Utilities.bookmarks.getFolderIdForItem(aNewParent));
- }
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.fuelIBookmark,
- Ci.nsINavBookmarksObserver,
- Ci.nsISupportsWeakReference])
-};
-
-
-//=================================================
-// BookmarkFolder implementation
-//
-// As with Bookmark, events on BookmarkFolder are handled by the
-// BookmarksObserver singleton.
-//
-
-function BookmarkFolder(aId, aParent) {
- this._id = aId;
- this._parent = aParent;
- this._annotations = new Annotations(this._id);
-
- // Our event listeners are handled by the BookmarksObserver singleton. This
- // is a bit complicated because there are three different kinds of events we
- // might want to listen to here:
- //
- // - If this._parent is null, we're the root bookmark folder, and all our
- // listeners should be root listeners.
- //
- // - Otherwise, events ending with "child" (addchild, removechild) are
- // handled by a folder listener.
- //
- // - Other events are handled by a vanilla bookmark listener.
-
- var self = this;
- this._events = {
- addListener: function bmfevents_al(aEvent, aListener) {
- if (self._parent) {
- if (/child$/.test(aEvent)) {
- Utilities.bookmarksObserver.addFolderListener(self._id, aEvent, aListener);
- }
- else {
- Utilities.bookmarksObserver.addListener(self._id, aEvent, aListener);
- }
- }
- else {
- Utilities.bookmarksObserver.addRootListener(aEvent, aListener);
- }
- },
- removeListener: function bmfevents_rl(aEvent, aListener) {
- if (self._parent) {
- if (/child$/.test(aEvent)) {
- Utilities.bookmarksObserver.removeFolderListener(self._id, aEvent, aListener);
- }
- else {
- Utilities.bookmarksObserver.removeListener(self._id, aEvent, aListener);
- }
- }
- else {
- Utilities.bookmarksObserver.removeRootListener(aEvent, aListener);
- }
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.extIEvents])
- };
-
- // For our onItemMoved listener, which updates this._parent.
- Utilities.bookmarks.addObserver(this, /* ownsWeak = */ true);
-}
-
-BookmarkFolder.prototype = {
- get id() {
- return this._id;
- },
-
- get title() {
- return Utilities.bookmarks.getItemTitle(this._id);
- },
-
- set title(aTitle) {
- Utilities.bookmarks.setItemTitle(this._id, aTitle);
- },
-
- get description() {
- return this._annotations.get("bookmarkProperties/description");
- },
-
- set description(aDesc) {
- this._annotations.set("bookmarkProperties/description", aDesc, Ci.nsIAnnotationService.EXPIRE_NEVER);
- },
-
- get type() {
- return "folder";
- },
-
- get parent() {
- return this._parent;
- },
-
- set parent(aFolder) {
- Utilities.bookmarks.moveItem(this._id, aFolder.id, Utilities.bookmarks.DEFAULT_INDEX);
- // this._parent is updated in onItemMoved
- },
-
- get annotations() {
- return this._annotations;
- },
-
- get events() {
- return this._events;
- },
-
- get children() {
- var items = [];
-
- var options = Utilities.history.getNewQueryOptions();
- var query = Utilities.history.getNewQuery();
- query.setFolders([this._id], 1);
- var result = Utilities.history.executeQuery(query, options);
- var rootNode = result.root;
- rootNode.containerOpen = true;
- var cc = rootNode.childCount;
- for (var i=0; i<cc; ++i) {
- var node = rootNode.getChild(i);
- if (node.type == node.RESULT_TYPE_FOLDER) {
- var folder = new BookmarkFolder(node.itemId, this._id);
- items.push(folder);
- }
- else if (node.type == node.RESULT_TYPE_SEPARATOR) {
- var separator = new Bookmark(node.itemId, this._id, "separator");
- items.push(separator);
- }
- else {
- var bookmark = new Bookmark(node.itemId, this._id, "bookmark");
- items.push(bookmark);
- }
- }
- rootNode.containerOpen = false;
-
- return items;
- },
-
- addBookmark: function bmf_addbm(aTitle, aUri) {
- var newBookmarkID = Utilities.bookmarks.insertBookmark(this._id, aUri, Utilities.bookmarks.DEFAULT_INDEX, aTitle);
- var newBookmark = new Bookmark(newBookmarkID, this, "bookmark");
- return newBookmark;
- },
-
- addSeparator: function bmf_addsep() {
- var newBookmarkID = Utilities.bookmarks.insertSeparator(this._id, Utilities.bookmarks.DEFAULT_INDEX);
- var newBookmark = new Bookmark(newBookmarkID, this, "separator");
- return newBookmark;
- },
-
- addFolder: function bmf_addfolder(aTitle) {
- var newFolderID = Utilities.bookmarks.createFolder(this._id, aTitle, Utilities.bookmarks.DEFAULT_INDEX);
- var newFolder = new BookmarkFolder(newFolderID, this);
- return newFolder;
- },
-
- remove: function bmf_remove() {
- Utilities.bookmarks.removeItem(this._id);
- },
-
- // observer
- onBeginUpdateBatch: function () {},
- onEndUpdateBatch : function () {},
- onItemAdded : function () {},
- onItemRemoved : function () {},
- onItemChanged : function () {},
-
- onItemMoved: function bf_onItemMoved(aId, aOldParent, aOldIndex, aNewParent, aNewIndex) {
- if (this._id == aId) {
- this._parent = new BookmarkFolder(aNewParent, Utilities.bookmarks.getFolderIdForItem(aNewParent));
- }
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.fuelIBookmarkFolder,
- Ci.nsINavBookmarksObserver,
- Ci.nsISupportsWeakReference])
-};
-
-//=================================================
-// BookmarkRoots implementation
-function BookmarkRoots() {
-}
-
-BookmarkRoots.prototype = {
- get menu() {
- if (!this._menu)
- this._menu = new BookmarkFolder(Utilities.bookmarks.bookmarksMenuFolder, null);
-
- return this._menu;
- },
-
- get toolbar() {
- if (!this._toolbar)
- this._toolbar = new BookmarkFolder(Utilities.bookmarks.toolbarFolder, null);
-
- return this._toolbar;
- },
-
- get tags() {
- if (!this._tags)
- this._tags = new BookmarkFolder(Utilities.bookmarks.tagsFolder, null);
-
- return this._tags;
- },
-
- get unfiled() {
- if (!this._unfiled)
- this._unfiled = new BookmarkFolder(Utilities.bookmarks.unfiledBookmarksFolder, null);
-
- return this._unfiled;
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.fuelIBookmarkRoots])
-};
-
-
-//=================================================
-// Factory - Treat Application as a singleton
-// XXX This is required, because we're registered for the 'JavaScript global
-// privileged property' category, whose handler always calls createInstance.
-// See bug 386535.
-var gSingleton = null;
-var ApplicationFactory = {
- createInstance: function af_ci(aOuter, aIID) {
- if (aOuter != null)
- throw Components.results.NS_ERROR_NO_AGGREGATION;
-
- if (gSingleton == null) {
- gSingleton = new Application();
- }
-
- return gSingleton.QueryInterface(aIID);
- }
-};
-
-
-#include ../../../../toolkit/components/exthelper/extApplication.js
-
-//=================================================
-// Application constructor
-function Application() {
- Deprecated.warning("FUEL is deprecated, you should use the standard Toolkit API instead.",
- "https://github.com/MoonchildProductions/UXP/issues/1083");
- this.initToolkitHelpers();
-}
-
-//=================================================
-// Application implementation
-function ApplicationPrototype() {
- // for nsIClassInfo + XPCOMUtils
- this.classID = APPLICATION_CID;
-
- // redefine the default factory for XPCOMUtils
- this._xpcom_factory = ApplicationFactory;
-
- // for nsISupports
- this.QueryInterface = XPCOMUtils.generateQI([
- Ci.fuelIApplication,
- Ci.extIApplication,
- Ci.nsIObserver,
- Ci.nsISupportsWeakReference
- ]);
-
- // for nsIClassInfo
- this.classInfo = XPCOMUtils.generateCI({
- classID: APPLICATION_CID,
- contractID: APPLICATION_CONTRACTID,
- interfaces: [
- Ci.fuelIApplication,
- Ci.extIApplication,
- Ci.nsIObserver
- ],
- flags: Ci.nsIClassInfo.SINGLETON
- });
-
- // for nsIObserver
- this.observe = function (aSubject, aTopic, aData) {
- // Call the extApplication version of this function first
- var superPrototype = Object.getPrototypeOf(Object.getPrototypeOf(this));
- superPrototype.observe.call(this, aSubject, aTopic, aData);
- if (aTopic == "xpcom-shutdown") {
- this._obs.removeObserver(this, "xpcom-shutdown");
- Utilities.free();
- }
- };
-
- Object.defineProperty(this, "bookmarks", {
- get: function bookmarks () {
- let bookmarks = new BookmarkRoots();
- Object.defineProperty(this, "bookmarks", { value: bookmarks });
- return this.bookmarks;
- },
- enumerable: true,
- configurable: true
- });
-
- Object.defineProperty(this, "windows", {
- get: function windows() {
- var win = [];
- var browserEnum = Utilities.windowMediator.getEnumerator("navigator:browser");
-
- while (browserEnum.hasMoreElements())
- win.push(getWindow(browserEnum.getNext()));
-
- return win;
- },
- enumerable: true,
- configurable: true
- });
-
- Object.defineProperty(this, "activeWindow", {
- get: () => getWindow(Utilities.windowMediator.getMostRecentWindow("navigator:browser")),
- enumerable: true,
- configurable: true
- });
-
-};
-
-// set the proto, defined in extApplication.js
-ApplicationPrototype.prototype = extApplication.prototype;
-
-Application.prototype = new ApplicationPrototype();
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([Application]);
-