Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
- /* vim: set sts=2 sw=2 et tw=80: */
- "use strict";
- /* global getDeveloperToolboxForContext, getLocalTabTargetForContext */
- const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
- Cu.import("resource://gre/modules/ExtensionUtils.jsm");
- const {SingletonEventManager} = ExtensionUtils;
- // Map[context => observer]
- let observerMap = new Map();
- function getObserver(context) {
- let _observer = observerMap.get(context);
- if (!_observer) {
- _observer = {
- onNavigated: function(event, data) {
- if (event == "tabNavigated" && data.state == "stop") {
- this.emit("navigated", {url: data.url});
- }
- },
- };
- EventEmitter.decorate(_observer);
- const toolbox = getDeveloperToolboxForContext(context);
- if (!toolbox || !toolbox.target.isLocalTab) {
- throw new Error("unable to subscribe to the tabNavigated event for the current inspected tab");
- }
- getLocalTabTargetForContext(context, toolbox.target).then(clonedTarget => {
- clonedTarget.client.addListener("tabNavigated", _observer.onNavigated)
- observerMap.set(context, _observer);
- });
- }
- return _observer;
- }
- extensions.registerSchemaAPI("devtools.network", "devtools_parent", (context) => {
- return {
- devtools: {
- network: {
- onNavigated: new SingletonEventManager(context, "devtools.onNavigated", fire => {
- let listener = (event, data) => {
- context.runSafe(fire, data);
- };
- getObserver(context).on("navigated", listener);
- return () => {
- getObserver(context).off("navigated", listener);
- };
- }).api(),
- },
- },
- };
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement