Skip to content
Snippets Groups Projects
Commit 2559457d authored by Thomas Rientjes's avatar Thomas Rientjes
Browse files

Refactor existing code

parent f1577855
No related branches found
No related tags found
No related merge requests found
...@@ -18,10 +18,7 @@ ...@@ -18,10 +18,7 @@
*/ */
var { Cc, Ci } = require('chrome'); var { Cc, Ci } = require('chrome');
var self = require('sdk/self'); var self = require('sdk/self');
var resourceData = self.data;
var version = self.version;
//noinspection JSUnresolvedFunction //noinspection JSUnresolvedFunction
var ioService = Cc['@mozilla.org/network/io-service;1'] var ioService = Cc['@mozilla.org/network/io-service;1']
...@@ -33,6 +30,18 @@ var ioService = Cc['@mozilla.org/network/io-service;1'] ...@@ -33,6 +30,18 @@ var ioService = Cc['@mozilla.org/network/io-service;1']
*/ */
var files = require('./files'); var files = require('./files');
/**
* Constants
*/
const DELIVERY_NOTICE = '/**\n * Local delivery by Decentraleyes (' + self.version + ').\n */\n\n';
/**
* Variables
*/
var resourceData = self.data;
/** /**
* Public Methods * Public Methods
*/ */
...@@ -41,8 +50,8 @@ function getRedirectionURI(targetPath, characterSet, type) { ...@@ -41,8 +50,8 @@ function getRedirectionURI(targetPath, characterSet, type) {
var data, dataURI, redirectionURI; var data, dataURI, redirectionURI;
data = loadResource(targetPath); data = _loadResource(targetPath);
dataURI = buildDataURI(type, characterSet, data); dataURI = _buildDataURI(type, characterSet, data);
redirectionURI = ioService.newURI(dataURI, null, null); redirectionURI = ioService.newURI(dataURI, null, null);
return redirectionURI; return redirectionURI;
...@@ -58,39 +67,31 @@ exports.getRedirectionURI = getRedirectionURI; ...@@ -58,39 +67,31 @@ exports.getRedirectionURI = getRedirectionURI;
* Private Methods * Private Methods
*/ */
function loadResource(targetPath) { function _loadResource(targetPath) {
var resource; var resource;
// Find the result inside a static path index. // Find the result inside a static path index.
if (files.indexOf(targetPath) == -1) { if (!files[targetPath]) {
throw 'The requested resource is missing.'; throw 'The requested resource is missing.';
} }
// Attempt to load resource contents. // Attempt to load resource contents.
try { return resource = resourceData.load(targetPath);
resource = resourceData.load(targetPath);
} catch (exception) {
throw exception;
}
return resource;
} }
function buildDataURI(type, characterSet, data) { function _buildDataURI(type, characterSet, data) {
var addNotice, dataURI, notice; var addNotice, dataURI;
//noinspection JSUnresolvedVariable //noinspection JSUnresolvedVariable
addNotice = require('sdk/simple-prefs').prefs.addNotice; addNotice = require('sdk/simple-prefs').prefs.addNotice;
dataURI = 'data:' + type + ';charset=' + characterSet + ','; dataURI = 'data:' + type + ';charset=' + characterSet + ',';
notice = '/**\n * Local delivery by Decentraleyes (' + version + ').\n */\n\n';
if (!addNotice) { if (!addNotice) {
dataURI = dataURI + encodeURIComponent(data); dataURI = dataURI + encodeURIComponent(data);
} else { } else {
dataURI = dataURI + encodeURIComponent(notice + data); dataURI = dataURI + encodeURIComponent(DELIVERY_NOTICE + data);
} }
return dataURI; return dataURI;
......
...@@ -17,244 +17,244 @@ ...@@ -17,244 +17,244 @@
* Files * Files
*/ */
var files = [ var files = {
// AngularJS // AngularJS
'resources/angularjs/1.0.1/angular.min.js.dec', 'resources/angularjs/1.0.1/angular.min.js.dec': true,
'resources/angularjs/1.0.2/angular.min.js.dec', 'resources/angularjs/1.0.2/angular.min.js.dec': true,
'resources/angularjs/1.0.3/angular.min.js.dec', 'resources/angularjs/1.0.3/angular.min.js.dec': true,
'resources/angularjs/1.0.4/angular.min.js.dec', 'resources/angularjs/1.0.4/angular.min.js.dec': true,
'resources/angularjs/1.0.5/angular.min.js.dec', 'resources/angularjs/1.0.5/angular.min.js.dec': true,
'resources/angularjs/1.0.6/angular.min.js.dec', 'resources/angularjs/1.0.6/angular.min.js.dec': true,
'resources/angularjs/1.0.8/angular.min.js.dec', 'resources/angularjs/1.0.8/angular.min.js.dec': true,
'resources/angularjs/1.2.0/angular.min.js.dec', 'resources/angularjs/1.2.0/angular.min.js.dec': true,
'resources/angularjs/1.2.1/angular.min.js.dec', 'resources/angularjs/1.2.1/angular.min.js.dec': true,
'resources/angularjs/1.2.10/angular.min.js.dec', 'resources/angularjs/1.2.10/angular.min.js.dec': true,
'resources/angularjs/1.2.15/angular.min.js.dec', 'resources/angularjs/1.2.15/angular.min.js.dec': true,
'resources/angularjs/1.2.16/angular.min.js.dec', 'resources/angularjs/1.2.16/angular.min.js.dec': true,
'resources/angularjs/1.2.20/angular.min.js.dec', 'resources/angularjs/1.2.20/angular.min.js.dec': true,
'resources/angularjs/1.2.23/angular.min.js.dec', 'resources/angularjs/1.2.23/angular.min.js.dec': true,
'resources/angularjs/1.2.26/angular.min.js.dec', 'resources/angularjs/1.2.26/angular.min.js.dec': true,
'resources/angularjs/1.2.28/angular.min.js.dec', 'resources/angularjs/1.2.28/angular.min.js.dec': true,
'resources/angularjs/1.2.29/angular.min.js.dec', 'resources/angularjs/1.2.29/angular.min.js.dec': true,
'resources/angularjs/1.3.0/angular.min.js.dec', 'resources/angularjs/1.3.0/angular.min.js.dec': true,
'resources/angularjs/1.3.3/angular.min.js.dec', 'resources/angularjs/1.3.3/angular.min.js.dec': true,
'resources/angularjs/1.3.8/angular.min.js.dec', 'resources/angularjs/1.3.8/angular.min.js.dec': true,
'resources/angularjs/1.3.10/angular.min.js.dec', 'resources/angularjs/1.3.10/angular.min.js.dec': true,
'resources/angularjs/1.3.11/angular.min.js.dec', 'resources/angularjs/1.3.11/angular.min.js.dec': true,
'resources/angularjs/1.3.14/angular.min.js.dec', 'resources/angularjs/1.3.14/angular.min.js.dec': true,
'resources/angularjs/1.3.15/angular.min.js.dec', 'resources/angularjs/1.3.15/angular.min.js.dec': true,
'resources/angularjs/1.4.0/angular.min.js.dec', 'resources/angularjs/1.4.0/angular.min.js.dec': true,
'resources/angularjs/1.4.2/angular.min.js.dec', 'resources/angularjs/1.4.2/angular.min.js.dec': true,
'resources/angularjs/1.4.8/angular.min.js.dec', 'resources/angularjs/1.4.8/angular.min.js.dec': true,
// Backbone.js // Backbone.js
'resources/backbone.js/0.9.0/backbone-min.js.dec', 'resources/backbone.js/0.9.0/backbone-min.js.dec': true,
'resources/backbone.js/0.9.1/backbone-min.js.dec', 'resources/backbone.js/0.9.1/backbone-min.js.dec': true,
'resources/backbone.js/0.9.2/backbone-min.js.dec', 'resources/backbone.js/0.9.2/backbone-min.js.dec': true,
'resources/backbone.js/0.9.9/backbone-min.js.dec', 'resources/backbone.js/0.9.9/backbone-min.js.dec': true,
'resources/backbone.js/0.9.10/backbone-min.js.dec', 'resources/backbone.js/0.9.10/backbone-min.js.dec': true,
'resources/backbone.js/1.0.0/backbone-min.js.dec', 'resources/backbone.js/1.0.0/backbone-min.js.dec': true,
'resources/backbone.js/1.1.0/backbone-min.js.dec', 'resources/backbone.js/1.1.0/backbone-min.js.dec': true,
'resources/backbone.js/1.1.1/backbone-min.js.dec', 'resources/backbone.js/1.1.1/backbone-min.js.dec': true,
'resources/backbone.js/1.1.2/backbone-min.js.dec', 'resources/backbone.js/1.1.2/backbone-min.js.dec': true,
'resources/backbone.js/1.2.0/backbone-min.js.dec', 'resources/backbone.js/1.2.0/backbone-min.js.dec': true,
'resources/backbone.js/1.2.1/backbone-min.js.dec', 'resources/backbone.js/1.2.1/backbone-min.js.dec': true,
'resources/backbone.js/1.2.2/backbone-min.js.dec', 'resources/backbone.js/1.2.2/backbone-min.js.dec': true,
'resources/backbone.js/1.2.3/backbone-min.js.dec', 'resources/backbone.js/1.2.3/backbone-min.js.dec': true,
// Dojo // Dojo
'resources/dojo/1.4.1/dojo/dojo.js.dec', 'resources/dojo/1.4.1/dojo/dojo.js.dec': true,
'resources/dojo/1.4.5/dojo/dojo.js.dec', 'resources/dojo/1.4.5/dojo/dojo.js.dec': true,
'resources/dojo/1.5.0/dojo/dojo.js.dec', 'resources/dojo/1.5.0/dojo/dojo.js.dec': true,
'resources/dojo/1.6.1/dojo/dojo.js.dec', 'resources/dojo/1.6.1/dojo/dojo.js.dec': true,
'resources/dojo/1.7.5/dojo/dojo.js.dec', 'resources/dojo/1.7.5/dojo/dojo.js.dec': true,
'resources/dojo/1.8.3/dojo/dojo.js.dec', 'resources/dojo/1.8.3/dojo/dojo.js.dec': true,
'resources/dojo/1.8.7/dojo/dojo.js.dec', 'resources/dojo/1.8.7/dojo/dojo.js.dec': true,
'resources/dojo/1.8.9/dojo/dojo.js.dec', 'resources/dojo/1.8.9/dojo/dojo.js.dec': true,
'resources/dojo/1.9.1/dojo/dojo.js.dec', 'resources/dojo/1.9.1/dojo/dojo.js.dec': true,
'resources/dojo/1.9.3/dojo/dojo.js.dec', 'resources/dojo/1.9.3/dojo/dojo.js.dec': true,
'resources/dojo/1.9.7/dojo/dojo.js.dec', 'resources/dojo/1.9.7/dojo/dojo.js.dec': true,
'resources/dojo/1.10.4/dojo/dojo.js.dec', 'resources/dojo/1.10.4/dojo/dojo.js.dec': true,
// Ember.js // Ember.js
'resources/ember.js/1.0.1/ember.min.js.dec', 'resources/ember.js/1.0.1/ember.min.js.dec': true,
'resources/ember.js/1.1.3/ember.min.js.dec', 'resources/ember.js/1.1.3/ember.min.js.dec': true,
'resources/ember.js/1.2.2/ember.min.js.dec', 'resources/ember.js/1.2.2/ember.min.js.dec': true,
'resources/ember.js/1.3.2/ember.min.js.dec', 'resources/ember.js/1.3.2/ember.min.js.dec': true,
'resources/ember.js/1.4.0/ember.min.js.dec', 'resources/ember.js/1.4.0/ember.min.js.dec': true,
'resources/ember.js/1.5.1/ember.min.js.dec', 'resources/ember.js/1.5.1/ember.min.js.dec': true,
'resources/ember.js/2.0.0/ember.min.js.dec', 'resources/ember.js/2.0.0/ember.min.js.dec': true,
'resources/ember.js/2.0.2/ember.min.js.dec', 'resources/ember.js/2.0.2/ember.min.js.dec': true,
'resources/ember.js/2.1.0/ember.min.js.dec', 'resources/ember.js/2.1.0/ember.min.js.dec': true,
// Ext Core // Ext Core
'resources/ext-core/3.0.0/ext-core.js.dec', 'resources/ext-core/3.0.0/ext-core.js.dec': true,
'resources/ext-core/3.1.0/ext-core.js.dec', 'resources/ext-core/3.1.0/ext-core.js.dec': true,
// jQuery // jQuery
'resources/jquery/1.2.3/jquery.min.js.dec', 'resources/jquery/1.2.3/jquery.min.js.dec': true,
'resources/jquery/1.2.6/jquery.min.js.dec', 'resources/jquery/1.2.6/jquery.min.js.dec': true,
'resources/jquery/1.3.0/jquery.min.js.dec', 'resources/jquery/1.3.0/jquery.min.js.dec': true,
'resources/jquery/1.3.1/jquery.min.js.dec', 'resources/jquery/1.3.1/jquery.min.js.dec': true,
'resources/jquery/1.3.2/jquery.min.js.dec', 'resources/jquery/1.3.2/jquery.min.js.dec': true,
'resources/jquery/1.4.0/jquery.min.js.dec', 'resources/jquery/1.4.0/jquery.min.js.dec': true,
'resources/jquery/1.4.1/jquery.min.js.dec', 'resources/jquery/1.4.1/jquery.min.js.dec': true,
'resources/jquery/1.4.2/jquery.min.js.dec', 'resources/jquery/1.4.2/jquery.min.js.dec': true,
'resources/jquery/1.4.3/jquery.min.js.dec', 'resources/jquery/1.4.3/jquery.min.js.dec': true,
'resources/jquery/1.4.4/jquery.min.js.dec', 'resources/jquery/1.4.4/jquery.min.js.dec': true,
'resources/jquery/1.5.0/jquery.min.js.dec', 'resources/jquery/1.5.0/jquery.min.js.dec': true,
'resources/jquery/1.5.1/jquery.min.js.dec', 'resources/jquery/1.5.1/jquery.min.js.dec': true,
'resources/jquery/1.5.2/jquery.min.js.dec', 'resources/jquery/1.5.2/jquery.min.js.dec': true,
'resources/jquery/1.6.0/jquery.min.js.dec', 'resources/jquery/1.6.0/jquery.min.js.dec': true,
'resources/jquery/1.6.1/jquery.min.js.dec', 'resources/jquery/1.6.1/jquery.min.js.dec': true,
'resources/jquery/1.6.2/jquery.min.js.dec', 'resources/jquery/1.6.2/jquery.min.js.dec': true,
'resources/jquery/1.6.3/jquery.min.js.dec', 'resources/jquery/1.6.3/jquery.min.js.dec': true,
'resources/jquery/1.6.4/jquery.min.js.dec', 'resources/jquery/1.6.4/jquery.min.js.dec': true,
'resources/jquery/1.7.0/jquery.min.js.dec', 'resources/jquery/1.7.0/jquery.min.js.dec': true,
'resources/jquery/1.7.1/jquery.min.js.dec', 'resources/jquery/1.7.1/jquery.min.js.dec': true,
'resources/jquery/1.7.2/jquery.min.js.dec', 'resources/jquery/1.7.2/jquery.min.js.dec': true,
'resources/jquery/1.8.0/jquery.min.js.dec', 'resources/jquery/1.8.0/jquery.min.js.dec': true,
'resources/jquery/1.8.1/jquery.min.js.dec', 'resources/jquery/1.8.1/jquery.min.js.dec': true,
'resources/jquery/1.8.2/jquery.min.js.dec', 'resources/jquery/1.8.2/jquery.min.js.dec': true,
'resources/jquery/1.8.3/jquery.min.js.dec', 'resources/jquery/1.8.3/jquery.min.js.dec': true,
'resources/jquery/1.9.0/jquery.min.js.dec', 'resources/jquery/1.9.0/jquery.min.js.dec': true,
'resources/jquery/1.9.1/jquery.min.js.dec', 'resources/jquery/1.9.1/jquery.min.js.dec': true,
'resources/jquery/1.10.0/jquery.min.js.dec', 'resources/jquery/1.10.0/jquery.min.js.dec': true,
'resources/jquery/1.10.1/jquery.min.js.dec', 'resources/jquery/1.10.1/jquery.min.js.dec': true,
'resources/jquery/1.10.2/jquery.min.js.dec', 'resources/jquery/1.10.2/jquery.min.js.dec': true,
'resources/jquery/1.11.0/jquery.min.js.dec', 'resources/jquery/1.11.0/jquery.min.js.dec': true,
'resources/jquery/1.11.1/jquery.min.js.dec', 'resources/jquery/1.11.1/jquery.min.js.dec': true,
'resources/jquery/1.11.2/jquery.min.js.dec', 'resources/jquery/1.11.2/jquery.min.js.dec': true,
'resources/jquery/1.11.3/jquery.min.js.dec', 'resources/jquery/1.11.3/jquery.min.js.dec': true,
'resources/jquery/2.0.0/jquery.min.js.dec', 'resources/jquery/2.0.0/jquery.min.js.dec': true,
'resources/jquery/2.0.1/jquery.min.js.dec', 'resources/jquery/2.0.1/jquery.min.js.dec': true,
'resources/jquery/2.0.2/jquery.min.js.dec', 'resources/jquery/2.0.2/jquery.min.js.dec': true,
'resources/jquery/2.0.3/jquery.min.js.dec', 'resources/jquery/2.0.3/jquery.min.js.dec': true,
'resources/jquery/2.1.0/jquery.min.js.dec', 'resources/jquery/2.1.0/jquery.min.js.dec': true,
'resources/jquery/2.1.1/jquery.min.js.dec', 'resources/jquery/2.1.1/jquery.min.js.dec': true,
'resources/jquery/2.1.3/jquery.min.js.dec', 'resources/jquery/2.1.3/jquery.min.js.dec': true,
'resources/jquery/2.1.4/jquery.min.js.dec', 'resources/jquery/2.1.4/jquery.min.js.dec': true,
// jQuery UI // jQuery UI
'resources/jqueryui/1.5.3/jquery-ui.min.js.dec', 'resources/jqueryui/1.5.3/jquery-ui.min.js.dec': true,
'resources/jqueryui/1.6.0/jquery-ui.min.js.dec', 'resources/jqueryui/1.6.0/jquery-ui.min.js.dec': true,
'resources/jqueryui/1.7.3/jquery-ui.min.js.dec', 'resources/jqueryui/1.7.3/jquery-ui.min.js.dec': true,
'resources/jqueryui/1.8.24/jquery-ui.min.js.dec', 'resources/jqueryui/1.8.24/jquery-ui.min.js.dec': true,
'resources/jqueryui/1.9.2/jquery-ui.min.js.dec', 'resources/jqueryui/1.9.2/jquery-ui.min.js.dec': true,
'resources/jqueryui/1.10.4/jquery-ui.min.js.dec', 'resources/jqueryui/1.10.4/jquery-ui.min.js.dec': true,
'resources/jqueryui/1.11.0/jquery-ui.min.js.dec', 'resources/jqueryui/1.11.0/jquery-ui.min.js.dec': true,
'resources/jqueryui/1.11.1/jquery-ui.min.js.dec', 'resources/jqueryui/1.11.1/jquery-ui.min.js.dec': true,
'resources/jqueryui/1.11.2/jquery-ui.min.js.dec', 'resources/jqueryui/1.11.2/jquery-ui.min.js.dec': true,
'resources/jqueryui/1.11.3/jquery-ui.min.js.dec', 'resources/jqueryui/1.11.3/jquery-ui.min.js.dec': true,
'resources/jqueryui/1.11.4/jquery-ui.min.js.dec', 'resources/jqueryui/1.11.4/jquery-ui.min.js.dec': true,
// Modernizr // Modernizr
'resources/modernizr/2.6.2/modernizr.min.js.dec', 'resources/modernizr/2.6.2/modernizr.min.js.dec': true,
'resources/modernizr/2.7.1/modernizr.min.js.dec', 'resources/modernizr/2.7.1/modernizr.min.js.dec': true,
'resources/modernizr/2.7.2/modernizr.min.js.dec', 'resources/modernizr/2.7.2/modernizr.min.js.dec': true,
'resources/modernizr/2.8.2/modernizr.min.js.dec', 'resources/modernizr/2.8.2/modernizr.min.js.dec': true,
'resources/modernizr/2.8.3/modernizr.min.js.dec', 'resources/modernizr/2.8.3/modernizr.min.js.dec': true,
// MooTools // MooTools
'resources/mootools/1.1.1/mootools-yui-compressed.js.dec', 'resources/mootools/1.1.1/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.1.2/mootools-yui-compressed.js.dec', 'resources/mootools/1.1.2/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.2.1/mootools-yui-compressed.js.dec', 'resources/mootools/1.2.1/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.2.3/mootools-yui-compressed.js.dec', 'resources/mootools/1.2.3/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.2.4/mootools-yui-compressed.js.dec', 'resources/mootools/1.2.4/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.2.5/mootools-yui-compressed.js.dec', 'resources/mootools/1.2.5/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.3.0/mootools-yui-compressed.js.dec', 'resources/mootools/1.3.0/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.3.1/mootools-yui-compressed.js.dec', 'resources/mootools/1.3.1/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.3.2/mootools-yui-compressed.js.dec', 'resources/mootools/1.3.2/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.4.1/mootools-yui-compressed.js.dec', 'resources/mootools/1.4.1/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.4.5/mootools-yui-compressed.js.dec', 'resources/mootools/1.4.5/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.5.0/mootools-yui-compressed.js.dec', 'resources/mootools/1.5.0/mootools-yui-compressed.js.dec': true,
'resources/mootools/1.5.1/mootools-yui-compressed.js.dec', 'resources/mootools/1.5.1/mootools-yui-compressed.js.dec': true,
// Prototype // Prototype
'resources/prototype/1.6.0.2/prototype.js.dec', 'resources/prototype/1.6.0.2/prototype.js.dec': true,
'resources/prototype/1.6.0.3/prototype.js.dec', 'resources/prototype/1.6.0.3/prototype.js.dec': true,
'resources/prototype/1.6.1.0/prototype.js.dec', 'resources/prototype/1.6.1.0/prototype.js.dec': true,
'resources/prototype/1.7.0.0/prototype.js.dec', 'resources/prototype/1.7.0.0/prototype.js.dec': true,
'resources/prototype/1.7.1.0/prototype.js.dec', 'resources/prototype/1.7.1.0/prototype.js.dec': true,
'resources/prototype/1.7.2.0/prototype.js.dec', 'resources/prototype/1.7.2.0/prototype.js.dec': true,
'resources/prototype/1.7.3.0/prototype.js.dec', 'resources/prototype/1.7.3.0/prototype.js.dec': true,
// Scriptaculous // Scriptaculous
'resources/scriptaculous/1.8.1/scriptaculous.js.dec', 'resources/scriptaculous/1.8.1/scriptaculous.js.dec': true,
'resources/scriptaculous/1.8.2/scriptaculous.js.dec', 'resources/scriptaculous/1.8.2/scriptaculous.js.dec': true,
'resources/scriptaculous/1.8.3/scriptaculous.js.dec', 'resources/scriptaculous/1.8.3/scriptaculous.js.dec': true,
'resources/scriptaculous/1.9.0/scriptaculous.js.dec', 'resources/scriptaculous/1.9.0/scriptaculous.js.dec': true,
// SWFObject // SWFObject
'resources/swfobject/2.1/swfobject.js.dec', 'resources/swfobject/2.1/swfobject.js.dec': true,
'resources/swfobject/2.2/swfobject.js.dec', 'resources/swfobject/2.2/swfobject.js.dec': true,
// Underscore.js // Underscore.js
'resources/underscore.js/1.3.0/underscore-min.js.dec', 'resources/underscore.js/1.3.0/underscore-min.js.dec': true,
'resources/underscore.js/1.3.1/underscore-min.js.dec', 'resources/underscore.js/1.3.1/underscore-min.js.dec': true,
'resources/underscore.js/1.3.3/underscore-min.js.dec', 'resources/underscore.js/1.3.3/underscore-min.js.dec': true,
'resources/underscore.js/1.4.0/underscore-min.js.dec', 'resources/underscore.js/1.4.0/underscore-min.js.dec': true,
'resources/underscore.js/1.4.1/underscore-min.js.dec', 'resources/underscore.js/1.4.1/underscore-min.js.dec': true,
'resources/underscore.js/1.4.2/underscore-min.js.dec', 'resources/underscore.js/1.4.2/underscore-min.js.dec': true,
'resources/underscore.js/1.4.3/underscore-min.js.dec', 'resources/underscore.js/1.4.3/underscore-min.js.dec': true,
'resources/underscore.js/1.4.4/underscore-min.js.dec', 'resources/underscore.js/1.4.4/underscore-min.js.dec': true,
'resources/underscore.js/1.5.0/underscore-min.js.dec', 'resources/underscore.js/1.5.0/underscore-min.js.dec': true,
'resources/underscore.js/1.5.1/underscore-min.js.dec', 'resources/underscore.js/1.5.1/underscore-min.js.dec': true,
'resources/underscore.js/1.5.2/underscore-min.js.dec', 'resources/underscore.js/1.5.2/underscore-min.js.dec': true,
'resources/underscore.js/1.6.0/underscore-min.js.dec', 'resources/underscore.js/1.6.0/underscore-min.js.dec': true,
'resources/underscore.js/1.7.0/underscore-min.js.dec', 'resources/underscore.js/1.7.0/underscore-min.js.dec': true,
'resources/underscore.js/1.8.0/underscore-min.js.dec', 'resources/underscore.js/1.8.0/underscore-min.js.dec': true,
'resources/underscore.js/1.8.1/underscore-min.js.dec', 'resources/underscore.js/1.8.1/underscore-min.js.dec': true,
'resources/underscore.js/1.8.2/underscore-min.js.dec', 'resources/underscore.js/1.8.2/underscore-min.js.dec': true,
'resources/underscore.js/1.8.3/underscore-min.js.dec', 'resources/underscore.js/1.8.3/underscore-min.js.dec': true,
// Web Font Loader // Web Font Loader
'resources/webfont/1.0.0/webfont.js.dec', 'resources/webfont/1.0.0/webfont.js.dec': true,
'resources/webfont/1.0.1/webfont.js.dec', 'resources/webfont/1.0.1/webfont.js.dec': true,
'resources/webfont/1.0.2/webfont.js.dec', 'resources/webfont/1.0.2/webfont.js.dec': true,
'resources/webfont/1.0.3/webfont.js.dec', 'resources/webfont/1.0.3/webfont.js.dec': true,
'resources/webfont/1.0.4/webfont.js.dec', 'resources/webfont/1.0.4/webfont.js.dec': true,
'resources/webfont/1.0.5/webfont.js.dec', 'resources/webfont/1.0.5/webfont.js.dec': true,
'resources/webfont/1.0.6/webfont.js.dec', 'resources/webfont/1.0.6/webfont.js.dec': true,
'resources/webfont/1.0.9/webfont.js.dec', 'resources/webfont/1.0.9/webfont.js.dec': true,
'resources/webfont/1.0.10/webfont.js.dec', 'resources/webfont/1.0.10/webfont.js.dec': true,
'resources/webfont/1.0.11/webfont.js.dec', 'resources/webfont/1.0.11/webfont.js.dec': true,
'resources/webfont/1.0.12/webfont.js.dec', 'resources/webfont/1.0.12/webfont.js.dec': true,
'resources/webfont/1.0.13/webfont.js.dec', 'resources/webfont/1.0.13/webfont.js.dec': true,
'resources/webfont/1.0.14/webfont.js.dec', 'resources/webfont/1.0.14/webfont.js.dec': true,
'resources/webfont/1.0.15/webfont.js.dec', 'resources/webfont/1.0.15/webfont.js.dec': true,
'resources/webfont/1.0.16/webfont.js.dec', 'resources/webfont/1.0.16/webfont.js.dec': true,
'resources/webfont/1.0.17/webfont.js.dec', 'resources/webfont/1.0.17/webfont.js.dec': true,
'resources/webfont/1.0.18/webfont.js.dec', 'resources/webfont/1.0.18/webfont.js.dec': true,
'resources/webfont/1.0.19/webfont.js.dec', 'resources/webfont/1.0.19/webfont.js.dec': true,
'resources/webfont/1.0.21/webfont.js.dec', 'resources/webfont/1.0.21/webfont.js.dec': true,
'resources/webfont/1.0.22/webfont.js.dec', 'resources/webfont/1.0.22/webfont.js.dec': true,
'resources/webfont/1.0.23/webfont.js.dec', 'resources/webfont/1.0.23/webfont.js.dec': true,
'resources/webfont/1.0.24/webfont.js.dec', 'resources/webfont/1.0.24/webfont.js.dec': true,
'resources/webfont/1.0.25/webfont.js.dec', 'resources/webfont/1.0.25/webfont.js.dec': true,
'resources/webfont/1.0.26/webfont.js.dec', 'resources/webfont/1.0.26/webfont.js.dec': true,
'resources/webfont/1.0.27/webfont.js.dec', 'resources/webfont/1.0.27/webfont.js.dec': true,
'resources/webfont/1.0.28/webfont.js.dec', 'resources/webfont/1.0.28/webfont.js.dec': true,
'resources/webfont/1.0.29/webfont.js.dec', 'resources/webfont/1.0.29/webfont.js.dec': true,
'resources/webfont/1.0.30/webfont.js.dec', 'resources/webfont/1.0.30/webfont.js.dec': true,
'resources/webfont/1.0.31/webfont.js.dec', 'resources/webfont/1.0.31/webfont.js.dec': true,
'resources/webfont/1.1.0/webfont.js.dec', 'resources/webfont/1.1.0/webfont.js.dec': true,
'resources/webfont/1.1.1/webfont.js.dec', 'resources/webfont/1.1.1/webfont.js.dec': true,
'resources/webfont/1.1.2/webfont.js.dec', 'resources/webfont/1.1.2/webfont.js.dec': true,
'resources/webfont/1.3.0/webfont.js.dec', 'resources/webfont/1.3.0/webfont.js.dec': true,
'resources/webfont/1.4.2/webfont.js.dec', 'resources/webfont/1.4.2/webfont.js.dec': true,
'resources/webfont/1.4.6/webfont.js.dec', 'resources/webfont/1.4.6/webfont.js.dec': true,
'resources/webfont/1.4.7/webfont.js.dec', 'resources/webfont/1.4.7/webfont.js.dec': true,
'resources/webfont/1.4.8/webfont.js.dec', 'resources/webfont/1.4.8/webfont.js.dec': true,
'resources/webfont/1.4.10/webfont.js.dec', 'resources/webfont/1.4.10/webfont.js.dec': true,
'resources/webfont/1.5.0/webfont.js.dec', 'resources/webfont/1.5.0/webfont.js.dec': true,
'resources/webfont/1.5.2/webfont.js.dec', 'resources/webfont/1.5.2/webfont.js.dec': true,
'resources/webfont/1.5.3/webfont.js.dec', 'resources/webfont/1.5.3/webfont.js.dec': true,
'resources/webfont/1.5.6/webfont.js.dec', 'resources/webfont/1.5.6/webfont.js.dec': true,
'resources/webfont/1.5.10/webfont.js.dec', 'resources/webfont/1.5.10/webfont.js.dec': true,
'resources/webfont/1.5.18/webfont.js.dec' 'resources/webfont/1.5.18/webfont.js.dec': true
]; };
/** /**
* Exports * Exports
......
...@@ -48,6 +48,10 @@ var Interceptor = new Class({ ...@@ -48,6 +48,10 @@ var Interceptor = new Class({
observerService.removeObserver(this, this.topic); observerService.removeObserver(this, this.topic);
}, },
/**
* Called whenever an HTTP request is made.
* @param httpChannel
*/
observe: function (httpChannel) { observe: function (httpChannel) {
var validCandidate, target, characterSet, redirectionURI; var validCandidate, target, characterSet, redirectionURI;
...@@ -65,27 +69,21 @@ var Interceptor = new Class({ ...@@ -65,27 +69,21 @@ var Interceptor = new Class({
// Remove referer header from request. // Remove referer header from request.
httpChannel.setRequestHeader('Referer', null, false); httpChannel.setRequestHeader('Referer', null, false);
// Temporary fix for reported issues with the Play Store website. // Temporary fixes for reported edge-case issues with specific websites.
// Temporary fix for reported issues with the Report URI website. var initiatorDomain =
var requestDomain = null; httpChannel.loadInfo && httpChannel.loadInfo.loadingDocument && httpChannel.loadInfo.loadingDocument.domain ||
httpChannel.referrer && httpChannel.referrer.host;
if (httpChannel.loadInfo && httpChannel.loadInfo.loadingDocument && httpChannel.loadInfo.loadingDocument.domain) { if (initiatorDomain === 'play.google.com' || initiatorDomain === 'passport.twitch.tv' || initiatorDomain === 'report-uri.io'
requestDomain = httpChannel.loadInfo.loadingDocument.domain; || initiatorDomain === 'minigames.mail.ru' || initiatorDomain === 'stefansundin.github.io') {
} else if (httpChannel.referrer && httpChannel.referrer.host) { return this.handleMissingCandidate(httpChannel);
requestDomain = httpChannel.referrer.host;
}
if (requestDomain === 'play.google.com' || requestDomain === 'report-uri.io') {
this.handleMissingCandidate(httpChannel);
return;
} }
// Convert the original request URI to a local target. // Convert the original request URI to a local target.
target = requestAnalyzer.getLocalTarget(httpChannel.URI.host, httpChannel.URI.path); target = requestAnalyzer.getLocalTarget(httpChannel.URI.host, httpChannel.URI.path);
if (!target) { if (!target) {
this.handleMissingCandidate(httpChannel); return this.handleMissingCandidate(httpChannel);
return;
} }
characterSet = httpChannel.URI.originCharset; characterSet = httpChannel.URI.originCharset;
...@@ -94,8 +92,7 @@ var Interceptor = new Class({ ...@@ -94,8 +92,7 @@ var Interceptor = new Class({
try { try {
redirectionURI = dataHandler.getRedirectionURI(target.path, characterSet, target.type); redirectionURI = dataHandler.getRedirectionURI(target.path, characterSet, target.type);
} catch (exception) { } catch (exception) {
this.handleMissingCandidate(httpChannel); return this.handleMissingCandidate(httpChannel);
return;
} }
httpChannel.redirectTo(redirectionURI); httpChannel.redirectTo(redirectionURI);
...@@ -104,6 +101,10 @@ var Interceptor = new Class({ ...@@ -104,6 +101,10 @@ var Interceptor = new Class({
preferences.amountInjected++; preferences.amountInjected++;
}, },
/**
* Called when a valid candidate cannot be injected.
* @param httpChannel
*/
handleMissingCandidate: function (httpChannel) { handleMissingCandidate: function (httpChannel) {
//noinspection JSUnresolvedVariable //noinspection JSUnresolvedVariable
......
...@@ -17,172 +17,156 @@ ...@@ -17,172 +17,156 @@
* Imports * Imports
*/ */
var preferences = require('sdk/simple-prefs').prefs;
/** /**
* Resource version mappings. * Resource version mappings.
* @var {object} mappings * @var {object} mappings
*/ */
var mappings = require('./mappings'); var mappings = require('./mappings');
/**
* Gets and sets add-on specific preferences.
* @var {object} simplePreferences
*/
var simplePreferences = require('sdk/simple-prefs');
/**
* Constants
*/
const MAPPING_FILE_EXPRESSION = new RegExp('.map$', 'i');
const VERSION_EXPRESSION = /(?:\d{1,2}\.){1,3}\d{1,2}/;
const VERSION_PLACEHOLDER = '{version}';
const WEB_PREFIX_VALUE = 'www.';
const WEB_PREFIX_LENGTH = WEB_PREFIX_VALUE.length;
const VALUE_SEPARATOR = ';';
/** /**
* Variables * Variables
*/ */
var whitelistedDomains = []; var preferences = simplePreferences.prefs;
var whitelistedDomains = {};
/** /**
* Initializations * Initializations
*/ */
applyWhitelistPreference(); _applyWhitelistPreference();
/** /**
* Event Handlers * Event Handlers
*/ */
require('sdk/simple-prefs').on('domainWhitelist', applyWhitelistPreference); simplePreferences.on('domainWhitelist', _applyWhitelistPreference);
/** /**
* Public Methods * Public Methods
*/ */
function isValidCandidate(httpChannel) { exports.isValidCandidate = function (httpChannel) {
// See if the request is targeted at a Content Delivery Network.
if (mappings[httpChannel.URI.host] === undefined) { if (mappings[httpChannel.URI.host] === undefined) {
return false; return false;
} }
var requestDomain = null; // Attempt to determine the domain of the request initiator.
var initiatorDomain =
if (httpChannel.loadInfo && httpChannel.loadInfo.loadingDocument && httpChannel.loadInfo.loadingDocument.domain) { httpChannel.loadInfo && httpChannel.loadInfo.loadingDocument && httpChannel.loadInfo.loadingDocument.domain ||
requestDomain = normalizeDomain(httpChannel.loadInfo.loadingDocument.domain); httpChannel.referrer && httpChannel.referrer.host;
} else if (httpChannel.referrer && httpChannel.referrer.host) {
requestDomain = normalizeDomain(httpChannel.referrer.host);
}
if (whitelistedDomains.length > 0 && requestDomain !== null) {
for (let domain of whitelistedDomains) { // If the request initiator could be determined and is whitelisted.
if (initiatorDomain && whitelistedDomains[_normalizeDomain(initiatorDomain)]) {
if (domain === requestDomain) { // Remove referer header from request.
httpChannel.setRequestHeader('Referer', null, false);
// Remove referer header from request. return false;
httpChannel.setRequestHeader('Referer', null, false);
return false;
}
}
} }
// Only requests of type GET can be valid candidates.
return httpChannel.requestMethod === 'GET'; return httpChannel.requestMethod === 'GET';
} };
function getLocalTarget(channelHost, channelPath) { exports.getLocalTarget = function (channelHost, channelPath) {
var basePath, hostMappings, resourceMappings, localTarget; var hostMappings, basePath, resourceMappings;
// Use the proper mappings for the targeted host.
hostMappings = mappings[channelHost]; hostMappings = mappings[channelHost];
// Ignore mapping files. // Resource mapping files are never locally available.
if (channelPath.indexOf('.min.js.map') > -1) { if (MAPPING_FILE_EXPRESSION.test(channelPath)) {
return false;
}
if (channelPath.indexOf('.min.map') > -1) {
return false;
}
basePath = matchBasePath(hostMappings, channelPath);
if (!basePath) {
return false; return false;
} }
basePath = _matchBasePath(hostMappings, channelPath);
resourceMappings = hostMappings[basePath]; resourceMappings = hostMappings[basePath];
localTarget = matchResourcePath(resourceMappings, basePath, channelPath);
if (!localTarget) { if (!resourceMappings) {
return false; return false;
} }
return localTarget; // Return either the local target's path or false.
} return _findLocalTarget(resourceMappings, basePath, channelPath);
};
/**
* Exports
*/
exports.isValidCandidate = isValidCandidate;
exports.getLocalTarget = getLocalTarget;
/** /**
* Private Methods * Private Methods
*/ */
function matchBasePath(hostMappings, channelPath) { function _matchBasePath(hostMappings, channelPath) {
for (let basePath in hostMappings) { for (let basePath of Object.keys(hostMappings)) {
if (hostMappings.hasOwnProperty(basePath)) { if (channelPath.startsWith(basePath)) {
return basePath;
if (channelPath.startsWith(basePath)) {
return basePath;
}
} }
} }
return false; return false;
} }
function matchResourcePath(resourceMappings, basePath, channelPath) { function _findLocalTarget(resourceMappings, basePath, channelPath) {
var resourcePath, versionNumber, resourcePattern; var resourcePath, versionNumber, resourcePattern;
resourcePath = channelPath.replace(basePath, ''); resourcePath = channelPath.replace(basePath, '');
versionNumber = resourcePath.match(/(?:\d{1,2}\.){1,3}\d{1,2}/); versionNumber = resourcePath.match(VERSION_EXPRESSION);
resourcePattern = resourcePath.replace(versionNumber, '{version}'); resourcePattern = resourcePath.replace(versionNumber, VERSION_PLACEHOLDER);
for (let resourceMold in resourceMappings) {
if (resourceMappings.hasOwnProperty(resourceMold)) {
if (resourcePattern.startsWith(resourceMold)) {
var localTarget = { for (let resourceMold of Object.keys(resourceMappings)) {
path: resourceMappings[resourceMold].path,
type: resourceMappings[resourceMold].type
};
// Fill in the appropriate version number. if (resourcePattern.startsWith(resourceMold)) {
localTarget.path = localTarget.path.replace('{version}', versionNumber);
return localTarget; // Prepare and return a local target.
} return {
path: resourceMappings[resourceMold].path.replace(VERSION_PLACEHOLDER, versionNumber),
type: resourceMappings[resourceMold].type
};
} }
} }
return false; return false;
} }
function normalizeDomain(domain) { function _normalizeDomain(domain) {
domain = domain.toLowerCase().trim(); domain = domain.toLowerCase().trim();
if (domain.startsWith('www.')) { if (domain.startsWith(WEB_PREFIX_VALUE)) {
domain = domain.slice(4); domain = domain.slice(WEB_PREFIX_LENGTH);
} }
return domain; return domain;
} }
function applyWhitelistPreference() { function _applyWhitelistPreference() {
whitelistedDomains = []; whitelistedDomains = {};
//noinspection JSUnresolvedVariable //noinspection JSUnresolvedVariable
preferences.domainWhitelist.split(';').forEach(function(domain, index) { preferences.domainWhitelist.split(VALUE_SEPARATOR).forEach(function (domain) {
whitelistedDomains[index] = normalizeDomain(domain); whitelistedDomains[_normalizeDomain(domain)] = true;
}); });
} }
...@@ -11,6 +11,6 @@ ...@@ -11,6 +11,6 @@
"engines": { "engines": {
"firefox": ">=38.0a1", "firefox": ">=38.0a1",
"fennec": ">=38.0a1", "fennec": ">=38.0a1",
"seamonkey": ">=2.0" "seamonkey": ">=2.0a1"
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment