summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/lib/sdk/tab/events.js
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/lib/sdk/tab/events.js')
-rw-r--r--addon-sdk/source/lib/sdk/tab/events.js74
1 files changed, 0 insertions, 74 deletions
diff --git a/addon-sdk/source/lib/sdk/tab/events.js b/addon-sdk/source/lib/sdk/tab/events.js
deleted file mode 100644
index e431cc9d2..000000000
--- a/addon-sdk/source/lib/sdk/tab/events.js
+++ /dev/null
@@ -1,74 +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/. */
-
-"use strict";
-
-// This module provides temporary shim until Bug 843901 is shipped.
-// It basically registers tab event listeners on all windows that get
-// opened and forwards them through observer notifications.
-
-module.metadata = {
- "stability": "experimental"
-};
-
-const { Ci } = require("chrome");
-const { windows, isInteractive } = require("../window/utils");
-const { events } = require("../browser/events");
-const { open } = require("../event/dom");
-const { filter, map, merge, expand } = require("../event/utils");
-const isFennec = require("sdk/system/xul-app").is("Fennec");
-
-// Module provides event stream (in nodejs style) that emits data events
-// for all the tab events that happen in running firefox. At the moment
-// it does it by registering listeners on all browser windows and then
-// forwarding events when they occur to a stream. This will become obsolete
-// once Bug 843901 is fixed, and we'll just leverage observer notifications.
-
-// Set of tab events that this module going to aggregate and expose.
-const TYPES = ["TabOpen","TabClose","TabSelect","TabMove","TabPinned",
- "TabUnpinned"];
-
-// Utility function that given a browser `window` returns stream of above
-// defined tab events for all tabs on the given window.
-function tabEventsFor(window) {
- // Map supported event types to a streams of those events on the given
- // `window` and than merge these streams into single form stream off
- // all events.
- let channels = TYPES.map(type => open(window, type));
- return merge(channels);
-}
-
-// Create our event channels. We do this in a separate function to
-// minimize the chance of leaking intermediate objects on the global.
-function makeEvents() {
- // Filter DOMContentLoaded events from all the browser events.
- var readyEvents = filter(events, e => e.type === "DOMContentLoaded");
- // Map DOMContentLoaded events to it's target browser windows.
- var futureWindows = map(readyEvents, e => e.target);
- // Expand all browsers that will become interactive to supported tab events
- // on these windows. Result will be a tab events from all tabs of all windows
- // that will become interactive.
- var eventsFromFuture = expand(futureWindows, tabEventsFor);
-
- // Above covers only windows that will become interactive in a future, but some
- // windows may already be interactive so we pick those and expand to supported
- // tab events for them too.
- var interactiveWindows = windows("navigator:browser", { includePrivate: true }).
- filter(isInteractive);
- var eventsFromInteractive = merge(interactiveWindows.map(tabEventsFor));
-
-
- // Finally merge stream of tab events from future windows and current windows
- // to cover all tab events on all windows that will open.
- return merge([eventsFromInteractive, eventsFromFuture]);
-}
-
-// Map events to Fennec format if necessary
-exports.events = map(makeEvents(), function (event) {
- return !isFennec ? event : {
- type: event.type,
- target: event.target.ownerDocument.defaultView.BrowserApp
- .getTabForBrowser(event.target)
- };
-});