| Index: lib/compat.js | 
| diff --git a/lib/compat.js b/lib/compat.js | 
| index d544edca8faa300d5ff3833b0470131b43d7b4a6..21439f3d353d904341f2b54ac7fe7f14190ac3bd 100644 | 
| --- a/lib/compat.js | 
| +++ b/lib/compat.js | 
| @@ -15,6 +15,8 @@ | 
| * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
| */ | 
|  | 
| +"use strict"; | 
| + | 
| // | 
| // Module framework stuff | 
| // | 
| @@ -33,28 +35,28 @@ require.scopes = Object.create(null); | 
|  | 
| function importAll(module, globalObj) | 
| { | 
| -  var exports = require(module); | 
| -  for (var key in exports) | 
| +  let exports = require(module); | 
| +  for (let key in exports) | 
| globalObj[key] = exports[key]; | 
| } | 
|  | 
| -onShutdown = { | 
| +let onShutdown = { | 
| done: false, | 
| -  add: function() {}, | 
| -  remove: function() {} | 
| +  add() {}, | 
| +  remove() {} | 
| }; | 
|  | 
| // | 
| // XPCOM emulation | 
| // | 
|  | 
| -var Components = | 
| +let Components = | 
| { | 
| interfaces: | 
| { | 
| nsIFile: {DIRECTORY_TYPE: 0}, | 
| -    nsIFileURL: function() {}, | 
| -    nsIHttpChannel: function() {}, | 
| +    nsIFileURL() {}, | 
| +    nsIHttpChannel() {}, | 
| nsITimer: {TYPE_REPEATING_SLACK: 0}, | 
| nsIInterfaceRequestor: null, | 
| nsIChannelEventSink: null | 
| @@ -63,44 +65,35 @@ var Components = | 
| { | 
| "@mozilla.org/timer;1": | 
| { | 
| -      createInstance: function() | 
| -      { | 
| -        return new FakeTimer(); | 
| -      } | 
| +      createInstance() { return new FakeTimer(); } | 
| }, | 
| "@mozilla.org/xmlextras/xmlhttprequest;1": | 
| { | 
| -      createInstance: function() | 
| -      { | 
| -        return new XMLHttpRequest(); | 
| -      } | 
| +      createInstance() { return new XMLHttpRequest(); } | 
| } | 
| }, | 
| results: {}, | 
| utils: { | 
| -    import: function() | 
| +    import() | 
| { | 
| }, | 
| -    reportError: function(e) | 
| +    reportError(e) | 
| { | 
| console.error(e); | 
| console.trace(); | 
| } | 
| }, | 
| manager: null, | 
| -  ID: function() | 
| -  { | 
| -    return null; | 
| -  } | 
| +  ID() { return null; } | 
| }; | 
| const Cc = Components.classes; | 
| const Ci = Components.interfaces; | 
| const Cr = Components.results; | 
| const Cu = Components.utils; | 
|  | 
| -var XPCOMUtils = | 
| +let XPCOMUtils = | 
| { | 
| -  generateQI: function() {} | 
| +  generateQI() {} | 
| }; | 
|  | 
| // | 
| @@ -121,40 +114,40 @@ FakeFile.prototype = | 
| { | 
| this.path = value; | 
| }, | 
| -  append: function(path) | 
| +  append(path) | 
| { | 
| this.path += path; | 
| }, | 
| -  clone: function() | 
| +  clone() | 
| { | 
| return new FakeFile(this.path); | 
| }, | 
| get parent() | 
| { | 
| -    return {create: function() {}}; | 
| +    return {create() {}}; | 
| }, | 
| -  normalize: function() {} | 
| +  normalize() {} | 
| }; | 
|  | 
| // | 
| // Services.jsm module emulation | 
| // | 
|  | 
| -var Services = | 
| +let Services = | 
| { | 
| obs: { | 
| -    addObserver: function() {}, | 
| -    removeObserver: function() {} | 
| +    addObserver() {}, | 
| +    removeObserver() {} | 
| }, | 
| vc: { | 
| -    compare: function(v1, v2) | 
| +    compare(v1, v2) | 
| { | 
| function parsePart(s) | 
| { | 
| if (!s) | 
| return parsePart("0"); | 
|  | 
| -        var part = { | 
| +        let part = { | 
| numA: 0, | 
| strB: "", | 
| numC: 0, | 
| @@ -167,7 +160,7 @@ var Services = | 
| return part; | 
| } | 
|  | 
| -        var matches = s.match(/(\d*)(\D*)(\d*)(.*)/); | 
| +        let matches = s.match(/(\d*)(\D*)(\d*)(.*)/); | 
| part.numA = parseInt(matches[1], 10) || part.numA; | 
| part.strB = matches[2] || part.strB; | 
| part.numC = parseInt(matches[3], 10) || part.numC; | 
| @@ -193,9 +186,9 @@ var Services = | 
|  | 
| function compareParts(p1, p2) | 
| { | 
| -        var result = 0; | 
| -        var elements = ["numA", "strB", "numC", "extraD"]; | 
| -        elements.some(function(element) | 
| +        let result = 0; | 
| +        let elements = ["numA", "strB", "numC", "extraD"]; | 
| +        elements.some(element => | 
| { | 
| result = comparePartElement(p1[element], p2[element]); | 
| return result; | 
| @@ -203,11 +196,11 @@ var Services = | 
| return result; | 
| } | 
|  | 
| -      var parts1 = v1.split("."); | 
| -      var parts2 = v2.split("."); | 
| -      for (var i = 0; i < Math.max(parts1.length, parts2.length); i++) | 
| +      let parts1 = v1.split("."); | 
| +      let parts2 = v2.split("."); | 
| +      for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) | 
| { | 
| -        var result = compareParts(parsePart(parts1[i]), parsePart(parts2[i])); | 
| +        let result = compareParts(parsePart(parts1[i]), parsePart(parts2[i])); | 
| if (result) | 
| return result; | 
| } | 
| @@ -220,7 +213,7 @@ var Services = | 
| // FileUtils.jsm module emulation | 
| // | 
|  | 
| -var FileUtils = | 
| +let FileUtils = | 
| { | 
| PERMS_DIRECTORY: 0 | 
| }; | 
| @@ -232,26 +225,25 @@ FakeTimer.prototype = | 
| { | 
| delay: 0, | 
| callback: null, | 
| -  initWithCallback: function(callback, delay) | 
| +  initWithCallback(callback, delay) | 
| { | 
| this.callback = callback; | 
| this.delay = delay; | 
| this.scheduleTimeout(); | 
| }, | 
| -  scheduleTimeout: function() | 
| +  scheduleTimeout() | 
| { | 
| -    var me = this; | 
| -    window.setTimeout(function() | 
| +    window.setTimeout(() => | 
| { | 
| try | 
| { | 
| -        me.callback(); | 
| +        this.callback(); | 
| } | 
| catch(e) | 
| { | 
| Cu.reportError(e); | 
| } | 
| -      me.scheduleTimeout(); | 
| +      this.scheduleTimeout(); | 
| }, this.delay); | 
| } | 
| }; | 
| @@ -267,7 +259,7 @@ XMLHttpRequest.prototype.channel = | 
| loadFlags: 0, | 
| INHIBIT_CACHING: 0, | 
| VALIDATE_ALWAYS: 0, | 
| -  QueryInterface: function() | 
| +  QueryInterface() | 
| { | 
| return this; | 
| } | 
|  |