| Index: lib/main.js | 
| =================================================================== | 
| new file mode 100644 | 
| --- /dev/null | 
| +++ b/lib/main.js | 
| @@ -0,0 +1,88 @@ | 
| +/* | 
| + * This Source Code is subject to the terms of the Mozilla Public License | 
| + * version 2.0 (the "License"). You can obtain a copy of the License at | 
| + * http://mozilla.org/MPL/2.0/. | 
| + */ | 
| + | 
| +/** | 
| + * @module main | 
| + */ | 
| + | 
| +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); | 
| +Cu.import("resource://gre/modules/Services.jsm"); | 
| +Cu.import("resource://gre/modules/Promise.jsm"); | 
| + | 
| +require("commandLine"); | 
| +let {run} = require("crawler"); | 
| +let {reportException} = require("debug"); | 
| + | 
| +let baseURL = null; | 
| + | 
| +/** | 
| + * Waits for the application to initialize. | 
| + * @type {Promise} | 
| + */ | 
| +let applicationReady = (function() | 
| +{ | 
| +  return new Promise((resolve, reject) => | 
| +  { | 
| +    let observer = { | 
| +      observe: function(subject, topic, data) | 
| +      { | 
| +        Services.obs.removeObserver(this, "sessionstore-windows-restored"); | 
| +        resolve(); | 
| +      }, | 
| +      QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]) | 
| +    }; | 
| + | 
| +    Services.obs.addObserver(observer, "sessionstore-windows-restored", true); | 
| +    onShutdown.add(() => Services.obs.removeObserver(observer, "sessionstore-windows-restored")); | 
| +  }); | 
| +})(); | 
| + | 
| +/** | 
| + * Startup function, called from command line handler. | 
| + * | 
| + * @param {int} port  Port to communicate with | 
| + */ | 
| +function startup(port) | 
| +{ | 
| +  baseURL = "http://localhost:" + port + "/"; | 
| + | 
| +  let request = new XMLHttpRequest(); | 
| +  request.open("GET", baseURL + "parameters"); | 
| +  request.addEventListener("load", onParametersLoaded, false); | 
| +  request.addEventListener("error", onParametersFailed, false); | 
| +  request.responseType = "json"; | 
| +  request.send(); | 
| +} | 
| +exports.startup = startup; | 
| + | 
| +/** | 
| + * Called if parameters loaded succesfully. | 
| + * | 
| + * @param {Event} event | 
| + */ | 
| +function onParametersLoaded(event) | 
| +{ | 
| +  let {urls, timeout, maxtabs} = event.target.response; | 
| + | 
| +  applicationReady.then(function() | 
| +  { | 
| +    let window = Services.wm.getMostRecentWindow("navigator:browser"); | 
| +    run(window, urls, timeout, maxtabs, baseURL + "save", function() | 
| +    { | 
| +      Services.startup.quit(Services.startup.eAttemptQuit); | 
| +    }); | 
| +  }, reportException); | 
| +} | 
| + | 
| +/** | 
| + * Called if requesting parameters failed. | 
| + * | 
| + * @param {Event} event | 
| + */ | 
| +function onParametersFailed(event) | 
| +{ | 
| +  reportException(new Error("Failed loading parameters")); | 
| +} | 
|  |