diff options
author | Alessio Vanni <vannilla@firemail.cc> | 2019-06-23 13:34:42 +0200 |
---|---|---|
committer | Alessio Vanni <vannilla@firemail.cc> | 2019-06-23 13:34:42 +0200 |
commit | 9a5c1c75f96b26041443309a8bfa977da8950c38 (patch) | |
tree | 32d17b1a03a37e06e410d29931b5d1171b51ac4d /js | |
parent | 9bde0c09c312feebe5abc96240214f91aeca198a (diff) | |
download | ematrix-9a5c1c75f96b26041443309a8bfa977da8950c38.tar.lz ematrix-9a5c1c75f96b26041443309a8bfa977da8950c38.tar.xz ematrix-9a5c1c75f96b26041443309a8bfa977da8950c38.zip |
Get cookie management out of vapi-background
Diffstat (limited to 'js')
-rw-r--r-- | js/vapi-background.js | 101 | ||||
-rw-r--r-- | js/vapi-cookies.js | 127 |
2 files changed, 127 insertions, 101 deletions
diff --git a/js/vapi-background.js b/js/vapi-background.js index 3035556..1690c06 100644 --- a/js/vapi-background.js +++ b/js/vapi-background.js @@ -947,13 +947,6 @@ })(); (function() { - // It appears that this branch actually works on the latest - // Basilisk. Maybe we can simply use this one directly instead of - // making checks like it's done now. - - // It was decided to use this branch unconditionally. It's still - // experimental though. - // Add toolbar button for Basilisk if (Services.appinfo.ID !== "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}") { return; @@ -1140,7 +1133,6 @@ })(); // No toolbar button. - (function () { // Just to ensure the number of cleanup tasks is as expected: toolbar // button code is one single cleanup task regardless of platform. @@ -1587,97 +1579,4 @@ setOptions: setOptions }; })(); - - vAPI.cookies = {}; - // https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsICookieManager2 - // https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsICookie2 - // https://developer.mozilla.org/en-US/docs/Observer_Notifications#Cookies - - vAPI.cookies.CookieEntry = function (ffCookie) { - this.domain = ffCookie.host; - this.name = ffCookie.name; - this.path = ffCookie.path; - this.secure = ffCookie.isSecure === true; - this.session = ffCookie.expires === 0; - this.value = ffCookie.value; - }; - - vAPI.cookies.start = function () { - Services.obs.addObserver(this, 'cookie-changed', false); - Services.obs.addObserver(this, 'private-cookie-changed', false); - vAPI.addCleanUpTask(this.stop.bind(this)); - }; - - vAPI.cookies.stop = function () { - Services.obs.removeObserver(this, 'cookie-changed'); - Services.obs.removeObserver(this, 'private-cookie-changed'); - }; - - vAPI.cookies.observe = function (subject, topic, reason) { - //if ( topic !== 'cookie-changed' && topic !== 'private-cookie-changed' ) { - // return; - //} - // - if (reason === 'cleared' && typeof this.onAllRemoved === 'function') { - this.onAllRemoved(); - return; - } - if (subject === null) { - return; - } - if (subject instanceof Ci.nsICookie2 === false) { - try { - subject = subject.QueryInterface(Ci.nsICookie2); - } catch (ex) { - return; - } - } - if (reason === 'deleted') { - if (typeof this.onRemoved === 'function') { - this.onRemoved(new this.CookieEntry(subject)); - } - return; - } - if (typeof this.onChanged === 'function') { - this.onChanged(new this.CookieEntry(subject)); - } - }; - - vAPI.cookies.getAll = function(callback) { - // Meant and expected to be asynchronous. - if (typeof callback !== 'function') { - return; - } - - let onAsync = function () { - let out = []; - let enumerator = Services.cookies.enumerator; - let ffcookie; - while (enumerator.hasMoreElements()) { - ffcookie = enumerator.getNext(); - if (ffcookie instanceof Ci.nsICookie) { - out.push(new this.CookieEntry(ffcookie)); - } - } - - callback(out); - }; - - vAPI.setTimeout(onAsync.bind(this), 0); - }; - - vAPI.cookies.remove = function (details, callback) { - let uri = Services.io.newURI(details.url, null, null); - let cookies = Services.cookies; - cookies.remove(uri.asciiHost, details.name, uri.path, false, {}); - cookies.remove( '.' + uri.asciiHost, details.name, uri.path, false, {}); - - if (typeof callback === 'function') { - callback({ - domain: uri.asciiHost, - name: details.name, - path: uri.path - }); - } - }; })(); diff --git a/js/vapi-cookies.js b/js/vapi-cookies.js new file mode 100644 index 0000000..be989b2 --- /dev/null +++ b/js/vapi-cookies.js @@ -0,0 +1,127 @@ +/******************************************************************************* + + ηMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-2019 The uMatrix/uBlock Origin authors + Copyright (C) 2019 Alessio Vanni + + 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 3 of the License, 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, see {http://www.gnu.org/licenses/}. + + Home: https://gitlab.com/vannilla/ematrix + uMatrix Home: https://github.com/gorhill/uMatrix +*/ + +/* global self, Components */ + +// For background page (tabs management) + +'use strict'; + +/******************************************************************************/ + +(function () { + const {classes: Cc, interfaces: Ci, utils: Cu} = Components; + const {Services} = Cu.import('resource://gre/modules/Services.jsm', null); + + let vAPI = self.vAPI; // Guaranteed to be initialized by vapi-background.js + + vAPI.cookies = {}; + + vAPI.cookies.CookieEntry = function (ffCookie) { + this.domain = ffCookie.host; + this.name = ffCookie.name; + this.path = ffCookie.path; + this.secure = ffCookie.isSecure === true; + this.session = ffCookie.expires === 0; + this.value = ffCookie.value; + }; + + vAPI.cookies.start = function () { + Services.obs.addObserver(this, 'cookie-changed', false); + Services.obs.addObserver(this, 'private-cookie-changed', false); + vAPI.addCleanUpTask(this.stop.bind(this)); + }; + + vAPI.cookies.stop = function () { + Services.obs.removeObserver(this, 'cookie-changed'); + Services.obs.removeObserver(this, 'private-cookie-changed'); + }; + + vAPI.cookies.observe = function (subject, topic, reason) { + //if ( topic !== 'cookie-changed' && topic !== 'private-cookie-changed' ) { + // return; + //} + // + if (reason === 'cleared' && typeof this.onAllRemoved === 'function') { + this.onAllRemoved(); + return; + } + if (subject === null) { + return; + } + if (subject instanceof Ci.nsICookie2 === false) { + try { + subject = subject.QueryInterface(Ci.nsICookie2); + } catch (ex) { + return; + } + } + if (reason === 'deleted') { + if (typeof this.onRemoved === 'function') { + this.onRemoved(new this.CookieEntry(subject)); + } + return; + } + if (typeof this.onChanged === 'function') { + this.onChanged(new this.CookieEntry(subject)); + } + }; + + vAPI.cookies.getAll = function(callback) { + // Meant and expected to be asynchronous. + if (typeof callback !== 'function') { + return; + } + + let onAsync = function () { + let out = []; + let enumerator = Services.cookies.enumerator; + let ffcookie; + while (enumerator.hasMoreElements()) { + ffcookie = enumerator.getNext(); + if (ffcookie instanceof Ci.nsICookie) { + out.push(new this.CookieEntry(ffcookie)); + } + } + + callback(out); + }; + + vAPI.setTimeout(onAsync.bind(this), 0); + }; + + vAPI.cookies.remove = function (details, callback) { + let uri = Services.io.newURI(details.url, null, null); + let cookies = Services.cookies; + cookies.remove(uri.asciiHost, details.name, uri.path, false, {}); + cookies.remove( '.' + uri.asciiHost, details.name, uri.path, false, {}); + + if (typeof callback === 'function') { + callback({ + domain: uri.asciiHost, + name: details.name, + path: uri.path + }); + } + }; +})(); |