gorhill
8 years ago
31 changed files with 1966 additions and 1996 deletions
-
4.jshintrc
-
75assets/assets.json
-
3platform/chromium/manifest.json
-
234platform/chromium/polyfill.js
-
62platform/chromium/vapi-background.js
-
2platform/chromium/vapi-common.js
-
95platform/firefox/polyfill.js
-
2platform/firefox/vapi-background.js
-
61platform/webext/manifest.json
-
30platform/webext/polyfill.js
-
4src/_locales/en/messages.json
-
2src/background.html
-
37src/css/common.css
-
196src/css/hosts-files.css
-
4src/css/popup.css
-
41src/hosts-files.html
-
10src/js/asset-viewer.js
-
1791src/js/assets.js
-
14src/js/background.js
-
475src/js/hosts-files.js
-
38src/js/messaging.js
-
2src/js/popup.js
-
29src/js/start.js
-
421src/js/storage.js
-
23src/js/traffic.js
-
68src/js/utils.js
-
4src/popup.html
-
0tools/make-firefox-meta.py
-
2tools/make-firefox.sh
-
29tools/make-webext-meta.py
-
32tools/make-webext.sh
@ -0,0 +1,75 @@ |
|||
{ |
|||
"assets.json": { |
|||
"content": "internal", |
|||
"updateAfter": 13, |
|||
"contentURL": [ |
|||
"https://raw.githubusercontent.com/gorhill/uMatrix/master/assets/assets.json", |
|||
"assets/assets.json" |
|||
] |
|||
}, |
|||
"public_suffix_list.dat": { |
|||
"content": "internal", |
|||
"updateAfter": 19, |
|||
"contentURL": [ |
|||
"https://publicsuffix.org/list/public_suffix_list.dat", |
|||
"assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat" |
|||
] |
|||
}, |
|||
"malware-0": { |
|||
"content": "filters", |
|||
"group": "malware", |
|||
"title": "Malware Domain List", |
|||
"contentURL": [ |
|||
"https://www.malwaredomainlist.com/hostslist/hosts.txt", |
|||
"assets/thirdparties/www.malwaredomainlist.com/hostslist/hosts.txt" |
|||
] |
|||
}, |
|||
"malware-1": { |
|||
"content": "filters", |
|||
"group": "malware", |
|||
"title": "Malware domains", |
|||
"contentURL": [ |
|||
"https://mirror.cedia.org.ec/malwaredomains/justdomains", |
|||
"https://mirror1.malwaredomains.com/files/justdomains", |
|||
"assets/thirdparties/mirror1.malwaredomains.com/files/justdomains", |
|||
"assets/thirdparties/mirror1.malwaredomains.com/files/justdomains.txt" |
|||
], |
|||
"supportURL": "http://www.malwaredomains.com/" |
|||
}, |
|||
"dpollock-0": { |
|||
"content": "filters", |
|||
"group": "multipurpose", |
|||
"updateAfter": 11, |
|||
"title": "Dan Pollock’s hosts file", |
|||
"contentURL": "http://someonewhocares.org/hosts/hosts", |
|||
"supportURL": "http://someonewhocares.org/hosts/" |
|||
}, |
|||
"hphosts": { |
|||
"content": "filters", |
|||
"group": "multipurpose", |
|||
"updateAfter": 11, |
|||
"title": "hpHosts’ Ad and tracking servers", |
|||
"contentURL": "https://hosts-file.net/.%5Cad_servers.txt", |
|||
"supportURL": "https://hosts-file.net/" |
|||
}, |
|||
"mvps-0": { |
|||
"content": "filters", |
|||
"group": "multipurpose", |
|||
"updateAfter": 11, |
|||
"title": "MVPS HOSTS", |
|||
"contentURL": "http://winhelp2002.mvps.org/hosts.txt", |
|||
"supportURL": "http://winhelp2002.mvps.org/" |
|||
}, |
|||
"plowe-0": { |
|||
"content": "filters", |
|||
"group": "multipurpose", |
|||
"updateAfter": 13, |
|||
"title": "Peter Lowe’s Ad and tracking server list", |
|||
"contentURL": [ |
|||
"https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext", |
|||
"assets/thirdparties/pgl.yoyo.org/as/serverlist", |
|||
"assets/thirdparties/pgl.yoyo.org/as/serverlist.txt" |
|||
], |
|||
"supportURL": "https://pgl.yoyo.org/adservers/" |
|||
} |
|||
} |
@ -0,0 +1,234 @@ |
|||
/******************************************************************************* |
|||
|
|||
uMatrix - a browser extension to block requests. |
|||
Copyright (C) 2017 Raymond Hill |
|||
|
|||
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://github.com/gorhill/uMatrix
|
|||
|
|||
This file has been originally imported from: |
|||
https://github.com/gorhill/uBlock/tree/master/platform/chromium
|
|||
|
|||
*/ |
|||
|
|||
// For background page or non-background pages
|
|||
|
|||
/* exported objectAssign */ |
|||
|
|||
'use strict'; |
|||
|
|||
/******************************************************************************/ |
|||
/******************************************************************************/ |
|||
|
|||
// https://github.com/gorhill/uBlock/issues/1067
|
|||
// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
|
|||
// Firefox 17/Chromium 41 supports `startsWith`.
|
|||
|
|||
if ( String.prototype.startsWith instanceof Function === false ) { |
|||
String.prototype.startsWith = function(needle, pos) { |
|||
if ( typeof pos !== 'number' ) { |
|||
pos = 0; |
|||
} |
|||
return this.lastIndexOf(needle, pos) === pos; |
|||
}; |
|||
} |
|||
|
|||
/******************************************************************************/ |
|||
|
|||
// https://github.com/gorhill/uBlock/issues/1067
|
|||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
|
|||
// Firefox 17/Chromium 41 supports `endsWith`.
|
|||
|
|||
if ( String.prototype.endsWith instanceof Function === false ) { |
|||
String.prototype.endsWith = function(needle, pos) { |
|||
if ( typeof pos !== 'number' ) { |
|||
pos = this.length; |
|||
} |
|||
pos -= needle.length; |
|||
return this.indexOf(needle, pos) === pos; |
|||
}; |
|||
} |
|||
|
|||
/******************************************************************************/ |
|||
|
|||
// As per MDN, Object.assign appeared first in Chromium 45.
|
|||
// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Browser_compatibility
|
|||
|
|||
var objectAssign = Object.assign || function(target, source) { |
|||
var keys = Object.keys(source); |
|||
for ( var i = 0, n = keys.length, key; i < n; i++ ) { |
|||
key = keys[i]; |
|||
target[key] = source[key]; |
|||
} |
|||
return target; |
|||
}; |
|||
|
|||
/******************************************************************************/ |
|||
|
|||
// https://github.com/gorhill/uBlock/issues/1070
|
|||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#Browser_compatibility
|
|||
// This polyfill is designed to fulfill *only* what uBlock Origin needs -- this
|
|||
// is not an accurate API of the real Set() type.
|
|||
|
|||
if ( self.Set instanceof Function === false ) { |
|||
self.Set = function(iter) { |
|||
this.clear(); |
|||
if ( Array.isArray(iter) ) { |
|||
for ( var i = 0, n = iter.length; i < n; i++ ) { |
|||
this.add(iter[i]); |
|||
} |
|||
return; |
|||
} |
|||
}; |
|||
|
|||
self.Set.polyfill = true; |
|||
|
|||
self.Set.prototype.clear = function() { |
|||
this._set = Object.create(null); |
|||
this.size = 0; |
|||
// Iterator stuff
|
|||
this._values = undefined; |
|||
this._i = undefined; |
|||
this.value = undefined; |
|||
this.done = true; |
|||
}; |
|||
|
|||
self.Set.prototype.add = function(k) { |
|||
if ( this._set[k] === undefined ) { |
|||
this._set[k] = true; |
|||
this.size += 1; |
|||
} |
|||
return this; |
|||
}; |
|||
|
|||
self.Set.prototype.delete = function(k) { |
|||
if ( this._set[k] !== undefined ) { |
|||
delete this._set[k]; |
|||
this.size -= 1; |
|||
return true; |
|||
} |
|||
return false; |
|||
}; |
|||
|
|||
self.Set.prototype.has = function(k) { |
|||
return this._set[k] !== undefined; |
|||
}; |
|||
|
|||
self.Set.prototype.next = function() { |
|||
if ( this._i < this.size ) { |
|||
this.value = this._values[this._i++]; |
|||
} else { |
|||
this._values = undefined; |
|||
this.value = undefined; |
|||
this.done = true; |
|||
} |
|||
return this; |
|||
}; |
|||
|
|||
self.Set.prototype.values = function() { |
|||
this._values = Object.keys(this._set); |
|||
this._i = 0; |
|||
this.value = undefined; |
|||
this.done = false; |
|||
return this; |
|||
}; |
|||
} |
|||
|
|||
/******************************************************************************/ |
|||
|
|||
// https://github.com/gorhill/uBlock/issues/1070
|
|||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#Browser_compatibility
|
|||
// This polyfill is designed to fulfill *only* what uBlock Origin needs -- this
|
|||
// is not an accurate API of the real Map() type.
|
|||
|
|||
if ( self.Map instanceof Function === false ) { |
|||
self.Map = function(iter) { |
|||
this.clear(); |
|||
if ( Array.isArray(iter) ) { |
|||
for ( var i = 0, n = iter.length, entry; i < n; i++ ) { |
|||
entry = iter[i]; |
|||
this.set(entry[0], entry[1]); |
|||
} |
|||
return; |
|||
} |
|||
}; |
|||
|
|||
self.Map.polyfill = true; |
|||
|
|||
self.Map.prototype.clear = function() { |
|||
this._map = Object.create(null); |
|||
this.size = 0; |
|||
// Iterator stuff
|
|||
this._keys = undefined; |
|||
this._i = undefined; |
|||
this.value = undefined; |
|||
this.done = true; |
|||
}; |
|||
|
|||
self.Map.prototype.delete = function(k) { |
|||
if ( this._map[k] !== undefined ) { |
|||
delete this._map[k]; |
|||
this.size -= 1; |
|||
return true; |
|||
} |
|||
return false; |
|||
}; |
|||
|
|||
self.Map.prototype.entries = function() { |
|||
this._keys = Object.keys(this._map); |
|||
this._i = 0; |
|||
this.value = [ undefined, undefined ]; |
|||
this.done = false; |
|||
return this; |
|||
}; |
|||
|
|||
self.Map.prototype.get = function(k) { |
|||
return this._map[k]; |
|||
}; |
|||
|
|||
self.Map.prototype.has = function(k) { |
|||
return this._map[k] !== undefined; |
|||
}; |
|||
|
|||
self.Map.prototype.next = function() { |
|||
if ( this._i < this.size ) { |
|||
var key = this._keys[this._i++]; |
|||
this.value[0] = key; |
|||
this.value[1] = this._map[key]; |
|||
} else { |
|||
this._keys = undefined; |
|||
this.value = undefined; |
|||
this.done = true; |
|||
} |
|||
return this; |
|||
}; |
|||
|
|||
self.Map.prototype.set = function(k, v) { |
|||
if ( v !== undefined ) { |
|||
if ( this._map[k] === undefined ) { |
|||
this.size += 1; |
|||
} |
|||
this._map[k] = v; |
|||
} else { |
|||
if ( this._map[k] !== undefined ) { |
|||
this.size -= 1; |
|||
} |
|||
delete this._map[k]; |
|||
} |
|||
return this; |
|||
}; |
|||
} |
|||
|
|||
/******************************************************************************/ |
@ -0,0 +1,95 @@ |
|||
/******************************************************************************* |
|||
|
|||
uMatrix - a browser extension to block requests. |
|||
Copyright (C) 2017 Raymond Hill |
|||
|
|||
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://github.com/gorhill/uMatrix
|
|||
|
|||
This file has been originally imported from: |
|||
https://github.com/gorhill/uBlock/tree/master/platform/chromium
|
|||
|
|||
*/ |
|||
|
|||
// For background page or non-background pages
|
|||
|
|||
/* exported objectAssign */ |
|||
|
|||
'use strict'; |
|||
|
|||
/******************************************************************************/ |
|||
/******************************************************************************/ |
|||
|
|||
// As per MDN, Object.assign appeared first in Firefox 34.
|
|||
// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Browser_compatibility
|
|||
|
|||
var objectAssign = Object.assign || function(target, source) { |
|||
var keys = Object.keys(source); |
|||
for ( var i = 0, n = keys.length, key; i < n; i++ ) { |
|||
key = keys[i]; |
|||
target[key] = source[key]; |
|||
} |
|||
return target; |
|||
}; |
|||
|
|||
/******************************************************************************/ |
|||
|
|||
// Patching for Pale Moon which does not implement ES6 Set/Map.
|
|||
// Test for non-ES6 Set/Map: check if property `iterator` is present.
|
|||
// The code is strictly to satisfy uBO's core, not to be an accurate
|
|||
// implementation of ES6.
|
|||
|
|||
if ( self.Set.prototype.iterator instanceof Function ) { |
|||
//console.log('Patching non-ES6 Set() to be more ES6-like.');
|
|||
self.Set.prototype._values = self.Set.prototype.values; |
|||
self.Set.prototype.values = function() { |
|||
this._valueIter = this._values(); |
|||
this.value = undefined; |
|||
this.done = false; |
|||
return this; |
|||
}; |
|||
self.Set.prototype.next = function() { |
|||
try { |
|||
this.value = this._valueIter.next(); |
|||
} catch (ex) { |
|||
this._valueIter = undefined; |
|||
this.value = undefined; |
|||
this.done = true; |
|||
} |
|||
return this; |
|||
}; |
|||
} |
|||
|
|||
if ( self.Map.prototype.iterator instanceof Function ) { |
|||
//console.log('Patching non-ES6 Map() to be more ES6-like.');
|
|||
self.Map.prototype._entries = self.Map.prototype.entries; |
|||
self.Map.prototype.entries = function() { |
|||
this._entryIter = this._entries(); |
|||
this.value = undefined; |
|||
this.done = false; |
|||
return this; |
|||
}; |
|||
self.Map.prototype.next = function() { |
|||
try { |
|||
this.value = this._entryIter.next(); |
|||
} catch (ex) { |
|||
this._entryIter = undefined; |
|||
this.value = undefined; |
|||
this.done = true; |
|||
} |
|||
return this; |
|||
}; |
|||
} |
|||
|
@ -0,0 +1,61 @@ |
|||
{ |
|||
"applications": { |
|||
"gecko": { |
|||
"id": "uMatrix@raymondhill.net", |
|||
"strict_min_version": "53.0a1" |
|||
} |
|||
}, |
|||
"author": "Raymond Hill", |
|||
"background": { |
|||
"page": "background.html" |
|||
}, |
|||
"browser_action": { |
|||
"browser_style": false, |
|||
"default_icon": { |
|||
"19": "img/browsericons/icon19.png", |
|||
"38": "img/browsericons/icon38.png" |
|||
}, |
|||
"default_title": "uMatrix", |
|||
"default_popup": "popup.html" |
|||
}, |
|||
"content_scripts": [ |
|||
{ |
|||
"matches": ["http://*/*", "https://*/*"], |
|||
"js": ["js/vapi-client.js", "js/contentscript-start.js"], |
|||
"run_at": "document_start", |
|||
"all_frames": true |
|||
}, |
|||
{ |
|||
"matches": ["http://*/*", "https://*/*"], |
|||
"js": ["js/contentscript-end.js"], |
|||
"run_at": "document_end", |
|||
"all_frames": true |
|||
} |
|||
], |
|||
"default_locale": "en", |
|||
"description": "__MSG_extShortDesc__", |
|||
"icons": { |
|||
"16": "img/icon_16.png", |
|||
"128": "img/icon_128.png" |
|||
}, |
|||
"manifest_version": 2, |
|||
"minimum_chrome_version": "26.0", |
|||
"name": "uMatrix", |
|||
"options_ui": { |
|||
"page": "options_ui.html" |
|||
}, |
|||
"permissions": [ |
|||
"browsingData", |
|||
"contentSettings", |
|||
"cookies", |
|||
"privacy", |
|||
"storage", |
|||
"tabs", |
|||
"webNavigation", |
|||
"webRequest", |
|||
"webRequestBlocking", |
|||
"<all_urls>" |
|||
], |
|||
"short_name": "uMatrix", |
|||
"version": "0.9.9" |
|||
} |
@ -0,0 +1,30 @@ |
|||
/******************************************************************************* |
|||
|
|||
uBlock Origin - a browser extension to block requests. |
|||
Copyright (C) 2016 The uBlock Origin authors |
|||
|
|||
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://github.com/gorhill/uBlock
|
|||
*/ |
|||
|
|||
// For background page or non-background pages
|
|||
|
|||
'use strict'; |
|||
|
|||
/******************************************************************************/ |
|||
|
|||
var objectAssign = Object.assign; |
|||
|
|||
/******************************************************************************/ |
1791
src/js/assets.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,29 @@ |
|||
#!/usr/bin/env python3 |
|||
|
|||
import os |
|||
import json |
|||
import sys |
|||
|
|||
if len(sys.argv) == 1 or not sys.argv[1]: |
|||
raise SystemExit('Build dir missing.') |
|||
|
|||
proj_dir = os.path.join(os.path.split(os.path.abspath(__file__))[0], '..') |
|||
build_dir = os.path.abspath(sys.argv[1]) |
|||
|
|||
# Import version number from chromium platform |
|||
chromium_manifest = {} |
|||
webext_manifest = {} |
|||
|
|||
chromium_manifest_file = os.path.join(proj_dir, 'platform', 'chromium', 'manifest.json') |
|||
with open(chromium_manifest_file) as f1: |
|||
chromium_manifest = json.load(f1) |
|||
|
|||
webext_manifest_file = os.path.join(build_dir, 'manifest.json') |
|||
with open(webext_manifest_file) as f2: |
|||
webext_manifest = json.load(f2) |
|||
|
|||
webext_manifest['version'] = chromium_manifest['version'] |
|||
|
|||
with open(webext_manifest_file, 'w') as f2: |
|||
json.dump(webext_manifest, f2, indent=2, separators=(',', ': '), sort_keys=True) |
|||
f2.write('\n') |
@ -0,0 +1,32 @@ |
|||
#!/usr/bin/env bash |
|||
# |
|||
# This script assumes a linux environment |
|||
|
|||
echo "*** uMatrix.webext: Creating web store package" |
|||
echo "*** uMatrix.webext: Copying files" |
|||
|
|||
DES=dist/build/uMatrix.webext |
|||
rm -rf $DES |
|||
mkdir -p $DES |
|||
|
|||
cp -R ./assets $DES/ |
|||
cp -R ./src/* $DES/ |
|||
cp -R $DES/_locales/nb $DES/_locales/no |
|||
cp platform/chromium/*.html $DES/ |
|||
cp platform/webext/polyfill.js $DES/js/ |
|||
cp platform/chromium/*.js $DES/js/ |
|||
cp -R platform/chromium/img/* $DES/img/ |
|||
cp platform/webext/manifest.json $DES/ |
|||
cp LICENSE.txt $DES/ |
|||
|
|||
echo "*** uMatrix.webext: Generating meta..." |
|||
python tools/make-webext-meta.py $DES/ |
|||
|
|||
if [ "$1" = all ]; then |
|||
echo "*** uMatrix.webext: Creating package..." |
|||
pushd $DES > /dev/null |
|||
zip ../$(basename $DES).zip -qr * |
|||
popd > /dev/null |
|||
fi |
|||
|
|||
echo "*** uMatrix.webext: Package done." |
Write
Preview
Loading…
Cancel
Save
Reference in new issue