/usr/share/xul-ext/self-destructing-cookies/lib/src-smarttab.js is in xul-ext-self-destructing-cookies 0.4.12-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | /* Copyright (c) 2013, 2014, 2015 Ove Sörensen <sdc@elektro-eel.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
"use strict";
var tabs = require("sdk/tabs");
var URL = require("sdk/url").URL;
var timers = require("sdk/timers");
var History = require("./history").History;
const STYLE_TOP = 0;
const STYLE_FRAME = 1;
// how many history entries should we keep
const MAX_HISTORY = 4;
// this class adds references for open tabs and some of their
// history entries. this preserves the required cookies for
// most inter-domain transactions.
exports.SmartTabSrc = function SmartTabSrc(tracker, options) {
options = options || {};
this.tracker = tracker;
this.counter = 0;
this.histories = {};
for (var t in tabs) {
this.registerTab(tabs[t]);
}
// XXX it works, but it's kludgey. there must be a better way?
var _this = this;
tabs.on("open", function(tab){ exports.SmartTabSrc.handleTabOpen(_this, tab); });
tabs.on("close", function(tab){ exports.SmartTabSrc.handleTabClose(_this, tab); });
tabs.on("ready", function(tab){ exports.SmartTabSrc.handleTabReady(_this, tab); });
}
exports.SmartTabSrc.prototype.registerTab = function(tab) {
this.histories[tab.id] = new History(MAX_HISTORY);
this.updateTab(tab);
}
exports.SmartTabSrc.prototype.unregisterTab = function(tab) {
var active = this.histories[tab.id].activeDomains();
for (var d in active) {
this.tracker.decRefs(URL("http://" + active[d]), STYLE_TOP);
}
delete this.histories[tab.id];
}
exports.SmartTabSrc.prototype.updateTab = function(tab) {
var u = URL(tab.url);
if (!u.host || u.host == "") return;
var active;
var expired;
[active, expired] = this.histories[tab.id].add(u.host);
for (var d in active) {
this.tracker.incRefs(URL("http://" + active[d]), STYLE_TOP);
}
for (var d in expired) {
this.tracker.decRefs(URL("http://" + expired[d]), STYLE_TOP);
}
}
exports.SmartTabSrc.prototype.shutdown = function() {
// it seems like tab handlers can't be unregistered
// we don't need that anyway
throw "not implemented";
}
exports.SmartTabSrc.handleTabOpen = function(_this, tab) {
_this.registerTab(tab);
}
exports.SmartTabSrc.handleTabClose = function(_this, tab) {
_this.unregisterTab(tab);
}
exports.SmartTabSrc.handleTabReady = function(_this, tab) {
_this.updateTab(tab);
}
|