15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if (!chrome.cookies) {
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome.cookies = chrome.experimental.cookies;
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A simple Timer class.
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function Timer() {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.start_ = new Date();
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.elapsed = function() {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return (new Date()) - this.start_;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.reset = function() {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.start_ = new Date();
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compares cookies for "key" (name, domain, etc.) equality, but not "value"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// equality.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function cookieMatch(c1, c2) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (c1.name == c2.name) && (c1.domain == c2.domain) &&
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         (c1.hostOnly == c2.hostOnly) && (c1.path == c2.path) &&
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         (c1.secure == c2.secure) && (c1.httpOnly == c2.httpOnly) &&
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         (c1.session == c2.session) && (c1.storeId == c2.storeId);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns an array of sorted keys from an associative array.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function sortedKeys(array) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var keys = [];
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var i in array) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    keys.push(i);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  keys.sort();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return keys;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Shorthand for document.querySelector.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function select(selector) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return document.querySelector(selector);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An object used for caching data about the browser's cookies, which we update
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as notifications come in.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function CookieCache() {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.cookies_ = {};
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.reset = function() {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.cookies_ = {};
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.add = function(cookie) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var domain = cookie.domain;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!this.cookies_[domain]) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.cookies_[domain] = [];
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.cookies_[domain].push(cookie);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.remove = function(cookie) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var domain = cookie.domain;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (this.cookies_[domain]) {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var i = 0;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      while (i < this.cookies_[domain].length) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (cookieMatch(this.cookies_[domain][i], cookie)) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.cookies_[domain].splice(i, 1);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } else {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          i++;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.cookies_[domain].length == 0) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        delete this.cookies_[domain];
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a sorted list of cookie domains that match |filter|. If |filter| is
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  null, returns all domains.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.getDomains = function(filter) {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var result = [];
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sortedKeys(this.cookies_).forEach(function(domain) {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!filter || domain.indexOf(filter) != -1) {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        result.push(domain);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    });
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return result;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.getCookies = function(domain) {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return this.cookies_[domain];
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var cache = new CookieCache();
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function removeAllForFilter() {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var filter = select("#filter").value;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var timer = new Timer();
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cache.getDomains(filter).forEach(function(domain) {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    removeCookiesForDomain(domain);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function removeAll() {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var all_cookies = [];
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cache.getDomains().forEach(function(domain) {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cache.getCookies(domain).forEach(function(cookie) {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      all_cookies.push(cookie);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    });
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cache.reset();
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var count = all_cookies.length;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var timer = new Timer();
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var i = 0; i < count; i++) {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    removeCookie(all_cookies[i]);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  timer.reset();
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome.cookies.getAll({}, function(cookies) {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (var i in cookies) {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      cache.add(cookies[i]);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      removeCookie(cookies[i]);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function removeCookie(cookie) {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var url = "http" + (cookie.secure ? "s" : "") + "://" + cookie.domain +
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            cookie.path;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome.cookies.remove({"url": url, "name": cookie.name});
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function removeCookiesForDomain(domain) {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var timer = new Timer();
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cache.getCookies(domain).forEach(function(cookie) {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    removeCookie(cookie);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function resetTable() {
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var table = select("#cookies");
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (table.rows.length > 1) {
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    table.deleteRow(table.rows.length - 1);
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var reload_scheduled = false;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function scheduleReloadCookieTable() {
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!reload_scheduled) {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    reload_scheduled = true;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setTimeout(reloadCookieTable, 250);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function reloadCookieTable() {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  reload_scheduled = false;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var filter = select("#filter").value;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var domains = cache.getDomains(filter);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  select("#filter_count").innerText = domains.length;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  select("#total_count").innerText = cache.getDomains().length;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  select("#delete_all_button").innerHTML = "";
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (domains.length) {
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var button = document.createElement("button");
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    button.onclick = removeAllForFilter;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    button.innerText = "delete all " + domains.length;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    select("#delete_all_button").appendChild(button);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  resetTable();
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var table = select("#cookies");
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  domains.forEach(function(domain) {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var cookies = cache.getCookies(domain);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var row = table.insertRow(-1);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    row.insertCell(-1).innerText = domain;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var cell = row.insertCell(-1);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cell.innerText = cookies.length;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cell.setAttribute("class", "cookie_count");
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var button = document.createElement("button");
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    button.innerText = "delete";
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    button.onclick = (function(dom){
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return function() {
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        removeCookiesForDomain(dom);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      };
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }(domain));
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var cell = row.insertCell(-1);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cell.appendChild(button);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cell.setAttribute("class", "button");
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function focusFilter() {
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  select("#filter").focus();
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function resetFilter() {
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var filter = select("#filter");
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  filter.focus();
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (filter.value.length > 0) {
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    filter.value = "";
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    reloadCookieTable();
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var ESCAPE_KEY = 27;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)window.onkeydown = function(event) {
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (event.keyCode == ESCAPE_KEY) {
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    resetFilter();
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function listener(info) {
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cache.remove(info.cookie);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!info.removed) {
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cache.add(info.cookie);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scheduleReloadCookieTable();
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function startListening() {
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome.cookies.onChanged.addListener(listener);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function stopListening() {
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome.cookies.onChanged.removeListener(listener);
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function onload() {
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  focusFilter();
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var timer = new Timer();
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome.cookies.getAll({}, function(cookies) {
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    startListening();
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    start = new Date();
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (var i in cookies) {
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      cache.add(cookies[i]);
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    timer.reset();
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    reloadCookieTable();
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('DOMContentLoaded', function() {
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  onload();
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.body.addEventListener('click', focusFilter);
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.querySelector('#remove_button').addEventListener('click', removeAll);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.querySelector('#filter_div input').addEventListener(
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'input', reloadCookieTable);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.querySelector('#filter_div button').addEventListener(
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'click', resetFilter);
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)});
261