This file is indexed.

/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);
}