| Index: lib/compat.js | 
| diff --git a/lib/compat.js b/lib/compat.js | 
| index 0e6682dede12aa72cfc0236d096388ccd130a7ef..f919671bda88047214e8382fc4bac65710c1e76e 100644 | 
| --- a/lib/compat.js | 
| +++ b/lib/compat.js | 
| @@ -69,8 +69,16 @@ let Components = { | 
| }, | 
| results: {}, | 
| utils: { | 
| -    import() | 
| +    import(resource) | 
| { | 
| +      let match = /^resource:\/\/gre\/modules\/(.+)\.jsm$/.exec(resource); | 
| +      let resourceName = match && match[1]; | 
| +      if (resourceName && Cu.import.resources.has(resourceName)) | 
| +        return {[resourceName]: Cu.import.resources.get(resourceName)}; | 
| + | 
| +      throw new Error( | 
| +        "Attempt to import unknown JavaScript module " + resource | 
| +      ); | 
| }, | 
| reportError(e) | 
| { | 
| @@ -86,9 +94,11 @@ const Ci = Components.interfaces; | 
| const Cr = Components.results; | 
| const Cu = Components.utils; | 
|  | 
| -let XPCOMUtils = { | 
| +Cu.import.resources = new Map(); | 
| + | 
| +Cu.import.resources.set("XPCOMUtils", { | 
| generateQI() {} | 
| -}; | 
| +}); | 
|  | 
| // | 
| // Fake nsIFile implementation for our I/O | 
| @@ -127,7 +137,7 @@ FakeFile.prototype = | 
| // Services.jsm module emulation | 
| // | 
|  | 
| -let Services = { | 
| +Cu.import.resources.set("Services", { | 
| obs: { | 
| addObserver() {}, | 
| removeObserver() {} | 
| @@ -200,15 +210,15 @@ let Services = { | 
| return 0; | 
| } | 
| } | 
| -}; | 
| +}); | 
|  | 
| // | 
| // FileUtils.jsm module emulation | 
| // | 
|  | 
| -let FileUtils = { | 
| +Cu.import.resources.set("FileUtils", { | 
| PERMS_DIRECTORY: 0 | 
| -}; | 
| +}); | 
|  | 
| function FakeTimer() | 
| { | 
|  |