Components.utils.import('resource://gre/modules/Services.jsm').Services; Components.utils.import("resource://gre/modules/FileUtils.jsm"); Components.utils.import("resource://gre/modules/NetUtil.jsm"); Components.utils.import("resource://gre/modules/AppConstants.jsm"); let installDir = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("CurProcD", Components.interfaces.nsIFile).parent; let omniJar = installDir.clone(); omniJar.append("omni.ja"); let exeFile = installDir.clone(); exeFile.append("7z.exe"); let dllFile = installDir.clone(); dllFile.append("7z.dll"); let batFile = installDir.clone(); batFile.append("install.bat"); let zipWriter = Components.Constructor("@mozilla.org/zipwriter;1", "nsIZipWriter"); let zipReader = Components.Constructor("@mozilla.org/libjar/zip-reader;1", "nsIZipReader"); let reader = new zipReader(); reader.open(omniJar); let constantsFile = "modules/addons/AddonConstants.jsm"; if (!reader.hasEntry(constantsFile)) { constantsFile = "modules/AppConstants.jsm"; } let winConstantsFile = constantsFile; let constantsFileName = constantsFile; while (winConstantsFile.indexOf("/") != -1) { constantsFileName = winConstantsFile.substr(winConstantsFile.indexOf("/") + 1); winConstantsFile = winConstantsFile.replace("/", "\\"); } let jsmFile = installDir.clone(); jsmFile.append(constantsFileName); let stream = reader.getInputStream(constantsFile); let data = NetUtil.readInputStreamToString(stream, stream.available()); stream.close(); reader.close(); if (constantsFile == "modules/addons/AddonConstants.jsm") { data = data.slice(0, data.lastIndexOf("value: true")) + "value: false" + data.slice(data.lastIndexOf("value: true") + "value: true".length); } else { function replaceConstant(name, inverted) { let constantI = data.indexOf(name); if (constantI != -1 && (inverted ? !AppConstants[name] : AppConstants[name])) { let split = data.substr(constantI); let trueI = split.indexOf(inverted ? "false" : "true"); data = data.substr(0, constantI + trueI) + (inverted ? "true" : "false") + split.substr(trueI + (inverted ? 5 : 4)); } } replaceConstant("MOZ_REQUIRE_SIGNING", false); replaceConstant("MOZ_ALLOW_LEGACY_EXTENSIONS", true); } let fileStream = FileUtils.openAtomicFileOutputStream(jsmFile); fileStream.write(data, data.length); FileUtils.closeAtomicFileOutputStream(fileStream); fileStream = FileUtils.openAtomicFileOutputStream(batFile); let jsloaderDelete = "del temp\\jsloader\\resource\\gre\\" + winConstantsFile + " &&"; if (constantsFile != "modules/addons/AddonConstants.jsm") { jsloaderDelete = ""; } let batContents = "7z x -otemp omni.ja & " + jsloaderDelete + " del temp\\" + winConstantsFile + " && move " + constantsFileName + " temp\\" + winConstantsFile + " && cd temp && ..\\7z a omni.jar * && move omni.jar ..\\omni.jar && cd .. && del /S /Q 7z.exe 7z.dll temp install.bat && del omni.ja && move omni.jar omni.ja"; fileStream.write(batContents, batContents.length); FileUtils.closeAtomicFileOutputStream(fileStream); NetUtil.asyncFetch(Services.io.newURI("chrome://befatorlocale/content/7z.exe", null, null), function(inputStream, aResult) { if (!Components.isSuccessCode(aResult)) { Services.prompt.alert(window, "Befator Inc Secure-Web", "Unexpected error left installation in inconsistent state!"); return; } let exeStream = FileUtils.openAtomicFileOutputStream(exeFile); NetUtil.asyncCopy(inputStream, exeStream, function(aResult) { if (!Components.isSuccessCode(aResult)) { Services.prompt.alert(window, "Befator Inc Secure-Web", "Unexpected error left installation in inconsistent state!"); return; } NetUtil.asyncFetch(Services.io.newURI("chrome://befatorlocale/content/7z.dll", null, null), function(inputStream, aResult) { if (!Components.isSuccessCode(aResult)) { Services.prompt.alert(window, "Befator Inc Secure-Web", "Unexpected error left installation in inconsistent state!"); return; } let dllStream = FileUtils.openAtomicFileOutputStream(dllFile); NetUtil.asyncCopy(inputStream, dllStream, function(aResult) { if (!Components.isSuccessCode(aResult)) { Services.prompt.alert(window, "Befator Inc Secure-Web", "Unexpected error left installation in inconsistent state!"); return; } Components.classes["@mozilla.org/uriloader/external-protocol-service;1"].getService(Components.interfaces.nsIExternalProtocolService).loadURI(Services.io.newURI("file:///" + batFile.path, null, null)) }) }); }) });