summaryrefslogtreecommitdiff
path: root/data/extensions/html5-video-everywhere@lejenome.me/index.js
diff options
context:
space:
mode:
authorRuben Rodriguez <ruben@gnu.org>2015-10-10 11:26:33 -0500
committerRuben Rodriguez <ruben@gnu.org>2015-10-12 23:20:55 -0500
commit3bd364a1a8dee1316bd5c432229d83a30822927b (patch)
tree692784ee28f1ecb741addf5106b3e733ec67a3f1 /data/extensions/html5-video-everywhere@lejenome.me/index.js
parentee08985f3bbf56ad8fda61c7370b6b37e1bbbe16 (diff)
HTML5 Video Everywhere updated to 0.3.3
Diffstat (limited to 'data/extensions/html5-video-everywhere@lejenome.me/index.js')
-rw-r--r--data/extensions/html5-video-everywhere@lejenome.me/index.js151
1 files changed, 151 insertions, 0 deletions
diff --git a/data/extensions/html5-video-everywhere@lejenome.me/index.js b/data/extensions/html5-video-everywhere@lejenome.me/index.js
new file mode 100644
index 0000000..fca20cf
--- /dev/null
+++ b/data/extensions/html5-video-everywhere@lejenome.me/index.js
@@ -0,0 +1,151 @@
+/* jshint esnext:true, node:true*/
+"use strict";
+const {
+ Cc, Ci, Cr
+} = require("chrome");
+const {
+ add, remove
+} = require("sdk/util/array");
+const _self = require("sdk/self");
+const pageMod = require("sdk/page-mod");
+const events = require("sdk/system/events");
+const utils = require("sdk/window/utils");
+const clipboard = require("sdk/clipboard");
+var prefs = require("sdk/simple-prefs").prefs;
+// list of current workers
+const workers = [];
+const pageMods = {};
+const common = require("./lib/common");
+const allDrivers = {
+ "facebook": require("./lib/facebook"),
+ "vimeo": require("./lib/vimeo"),
+ "dailymotion": require("./lib/dailymotion"),
+ "break": require("./lib/break"),
+ "metacafe": require("./lib/metacafe"),
+ "youtube": require("./lib/youtube")
+};
+const drivers = Object.keys(allDrivers).filter(drvName =>
+ prefs["disable" + drvName] === false
+);
+
+//ensure preferences match the state of disabled drivers
+Object.keys(allDrivers).filter(drvName =>
+ drivers.indexOf(drvName) === -1
+).forEach(drvName =>
+ prefs["disable" + drvName] = true
+);
+
+
+const onWorkerAttach = (drvName, listen) => (worker) => {
+ logify("onAttach", worker);
+ //send current Addon preferences to content-script
+ let _prefs = {};
+ for (let pref in prefs)
+ _prefs[pref] = prefs[pref];
+ _prefs.driver = drvName;
+ _prefs.addon = {
+ id: _self.id,
+ version: _self.version
+ };
+ worker.port.emit("preferences", _prefs);
+ add(workers, worker);
+ worker.port.on("prefChang", (pref) =>
+ prefs[pref.name] = pref.val);
+ worker.port.on("disable", () =>
+ prefs["disable" + drvName] = true);
+ worker.port.on("setClipboard", (txt) => clipboard.set(txt));
+ for (let evt in listen) {
+ logify("Add listener:", evt);
+ worker.port.on(evt, (obj) => {
+ listen[evt](obj, worker);
+ });
+ }
+ worker.on("detach", function(e) {
+ remove(workers, this);
+
+ });
+};
+
+drivers.forEach(setupDriver);
+
+function setupDriver(drvName) {
+ var driver = allDrivers[drvName];
+ if (driver.match === void(0))
+ return;
+ var scripts, styles;
+ scripts = common.inject.concat(driver.inject)
+ .map(i => _self.data.url(i));
+ styles = common.style.concat(driver.style || [])
+ .map(i => _self.data.url(i));
+ pageMods[drvName] = pageMod.PageMod({
+ include: driver.match,
+ contentScriptFile: scripts,
+ contentStyleFile: styles,
+ contentScriptWhen: driver.when || "ready",
+ onAttach: onWorkerAttach(drvName, driver.listen)
+ });
+}
+
+function listener(event) {
+ var channel = event.subject.QueryInterface(Ci.nsIHttpChannel);
+ var url = event.subject.URI.spec;
+ for (let drvName of drivers) {
+ var driver = allDrivers[drvName];
+ for (let redirect of(driver.redirect || [])) {
+ if (redirect.src.test(url)) {
+ channel.redirectTo(Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService).newURI(
+ String.replace(url, redirect.src, redirect.funct),
+ null,
+ null));
+ logify("Redirect:", url);
+ return;
+ }
+ }
+ for (let block of(driver.block || [])) {
+ if (block.test(url)) {
+ channel.cancel(Cr.NS_BINDING_ABORTED);
+ logify("Block:", url);
+ return;
+ }
+ }
+ }
+}
+
+//on Addon prefernces change, send the changes to content-script
+require("sdk/simple-prefs").on("", function prefChangeHandler(pref) {
+ if (pref === "volume" && prefs.volume > 100)
+ prefs.volume = 100;
+ else if (pref === "volume" && prefs.volume < 0)
+ prefs.volume = 0;
+ else if (pref.startsWith("disable")) {
+ let drvName = /^disable(.+)/.exec(pref)[1];
+ if (prefs[pref] === false) {
+ add(drivers, drvName);
+ setupDriver(drvName);
+ } else {
+ remove(drivers, drvName);
+ pageMods[drvName].destroy();
+ }
+ } else
+ workersPrefHandler(pref);
+});
+
+function workersPrefHandler(pref) {
+ for (let worker of workers)
+ worker.port.emit("prefChanged", {
+ name: pref,
+ value: prefs[pref]
+ });
+}
+
+function logify(...args) {
+ args.unshift("[CORE]");
+ dump(args.join(" ") + "\n");
+}
+
+exports.main = () => {
+ events.on("http-on-modify-request", listener);
+};
+exports.onUnload = function(reason) {
+ events.off("http-on-modify-request", listener);
+}; \ No newline at end of file