Merge pull request #7 from mikalv/master

Beta 7 changes (i2pbutton 0.3.8)
This commit is contained in:
Mikal
2019-11-03 01:43:28 +01:00
committed by GitHub
6 changed files with 152 additions and 75 deletions

View File

@ -8,16 +8,22 @@ const kI2PBootstrapErrorTopic = "I2PBootstrapError"
const kI2PLogHasWarnOrErrTopic = "I2PLogHasWarnOrErr"
Cu.import("resource://gre/modules/Services.jsm")
Cu.import("resource://gre/modules/XPCOMUtils.jsm")
XPCOMUtils.defineLazyModuleGetter(this, "LauncherUtil", "resource://i2pbutton/modules/launcher-util.jsm")
const I2PLauncherLogger = Cc["@geti2p.net/i2pbutton-logger;1"].getService(Ci.nsISupports).wrappedJSObject
const gI2PProcessService = Cc["@geti2p.net/i2pbutton-process-service;1"].getService(Ci.nsISupports).wrappedJSObject
var gObsSvc
var gOpenerCallbackFunc // Set when opened from network settings.
var gIsInitialBootstrap
var gInitialPanelID
function closeThisWindow(reason) {
dump('closeThisWindow\n')
window.close()
}
function initDialog()
{
@ -33,7 +39,7 @@ function initDialog()
return
}
}
catch (e) { dump(e + "\n") }
catch (e) { dump(`${e}\n`) }
try
{
@ -42,39 +48,64 @@ function initDialog()
gObsSvc.addObserver(gObserver, kBootstrapStatusTopic, false)
gObsSvc.addObserver(gObserver, kI2PBootstrapErrorTopic, false)
gObsSvc.addObserver(gObserver, kI2PLogHasWarnOrErrTopic, false)
}
catch (e) {}
var isBrowserStartup = false
if (window.arguments)
{
isBrowserStartup = window.arguments[0]
var isBrowserStartup = false
if (window.arguments)
{
let wargs = window.arguments || window.arguments.wrappedJSObject
isBrowserStartup = wargs[0]
dump(`window.arguments = ${wargs}\n`)
dump(`window.arguments.length = ${wargs.length}\n`)
if (window.arguments.length > 1)
gOpenerCallbackFunc = window.arguments[1]
}
if (window.arguments.length > 1)
gInitialPanelID = window.arguments[1]
}
if (gOpenerCallbackFunc)
{
// Dialog was opened from network settings: hide Open Settings button.
var extraBtn = document.documentElement.getButton("extra2")
extraBtn.setAttribute("hidden", true)
}
else
{
// Dialog was not opened from network settings: change Cancel to Quit.
var cancelBtn = document.documentElement.getButton("cancel")
var quitKey = (LauncherUtil.isWindows) ? "quit_win" : "quit"
cancelBtn.label = 'Cancel'//LauncherUtil.getLocalizedString(quitKey)
}
if (gOpenerCallbackFunc)
{
// Dialog was opened from network settings: hide Open Settings button.
var extraBtn = document.documentElement.getButton("extra2")
extraBtn.setAttribute("hidden", true)
}
else
{
// Dialog was not opened from network settings: change Cancel to Quit.
var cancelBtn = document.documentElement.getButton("cancel")
var quitKey = (LauncherUtil.isWindows) ? "quit_win" : "quit"
cancelBtn.label = 'Cancel'//LauncherUtil.getLocalizedString(quitKey)
}
// If opened during browser startup, display the "please wait" message.
if (isBrowserStartup)
{
var pleaseWait = document.getElementById("progressPleaseWait")
if (pleaseWait)
pleaseWait.removeAttribute("hidden")
// If opened during browser startup, display the "please wait" message.
if (isBrowserStartup)
{
var pleaseWait = document.getElementById("progressPleaseWait")
if (pleaseWait)
pleaseWait.removeAttribute("hidden")
}
// Test if the i2p console port is open or not
let consolePort = Services.prefs.getIntPref("extensions.i2pbutton.console_port_i2pj", 7647)
LauncherUtil.waitForPortToOpen(consolePort, () => {
var meter = document.getElementById("progressMeter")
if (meter) {
meter.value = meter.value + 30
}
setTimeout(() => {
window.close()
}, 5000)
})
}
catch (e) {
dump(`Error: ${e}\n`)
}
dump('initDialog done\n')
}
function onCancel() {
//
dump('onCancel\n')
cleanup()
}
@ -104,13 +135,9 @@ function stopI2PBootstrap()
const kErrorPrefix = "Setting DisableNetwork=1 failed: ";
try
{
var svc = Cc["@torproject.org/torlauncher-protocol-service;1"]
.getService(Ci.nsISupports);
svc = svc.wrappedJSObject;
var settings = {};
settings["DisableNetwork"] = true;
var errObj = {};
if (!svc.I2PSetConfWithReply(settings, errObj))
I2PLauncherLogger.log(5, kErrorPrefix + errObj.details);
}
catch(e)
@ -119,31 +146,8 @@ function stopI2PBootstrap()
}
}
// Fake it for now. The main goal is to could say with more confidence that
// the router has had time to start before the user can start using the browser
// as any other browser.
setTimeout(() => {
var meter = document.getElementById("progressMeter")
if (meter)
meter.value = meter.value + 15
}, 5000)
setTimeout(() => {
var meter = document.getElementById("progressMeter")
if (meter)
meter.value = meter.value + 15
}, 10000)
setTimeout(() => {
var meter = document.getElementById("progressMeter")
if (meter)
meter.value = meter.value + 15
}, 15000)
setTimeout(() => {
window.close()
}, 25000)
var gObserver = {

View File

@ -6,8 +6,7 @@
-->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://i2pbutton/skin/progress.css"
type="text/css"?>
<?xml-stylesheet href="chrome://i2pbutton/skin/progress.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://i2pbutton/locale/progress.dtd">
@ -18,7 +17,7 @@
persist="screenX screenY"
buttons="cancel"
buttonlabelextra2="&i2pprogress.openSettings;"
ondialogcancel="return onCancel();"
ondialogcancel="onCancel();"
ondialogextra2="onOpenSettings();"
onload="initDialog();"> <!-- extra2 was removed from buttons for now. -->

View File

@ -117,6 +117,13 @@ I2PProcessService.prototype =
let prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch)
let shouldShowDelayUserDialog = prefs.getBoolPref("extensions.i2pbutton.delay_user_with_dialog", true)
let canStartPromise = self._config_checker.ensure_config()
canStartPromise.then(() => {
self._logger.log(3, 'Starting the router')
self.I2PStartAndControlI2P(true)
})
try {
if (shouldShowDelayUserDialog) {
self.openWaitForRouterDialog()
@ -131,13 +138,6 @@ I2PProcessService.prototype =
self._logger.log(5, `Unknown error while executing delay user dialog: ${err}`)
}
let canStartPromise = self._config_checker.ensure_config()
canStartPromise.then(() => {
self._logger.log(3, 'Starting the router')
self.I2PStartAndControlI2P(true)
})
// After the router process is spawned.
/*if (self.mDelayUserDialog) {
setTimeout(() => {
@ -280,7 +280,13 @@ I2PProcessService.prototype =
//var win = ww.openWindow(null, "chrome://i2pbutton/content/progress.xul", "wizard", "chrome,dialog=no,modal,centerscreen", {blabla:0})
const ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"].getService(Components.interfaces.nsIWindowWatcher)
self.mDelayUserDialog = ww.openWindow(null, "chrome://i2pbutton/content/progress.xul", "startingrouter", "chrome,dialog=no,modal,centerscreen", {blabla:0})
self.mDelayUserDialog = ww.openWindow(
null,
"chrome://i2pbutton/content/progress.xul",
"startingrouter",
"chrome,dialog=no,modal,centerscreen",
[true])
this._logger.log(3, 'After open wait for router dialog')
setTimeout(() => {
let progressmeter = self.mDelayUserDialog.document.getElementById('progressMeter')
@ -396,7 +402,7 @@ I2PProcessService.prototype =
// Set an environment variable that points to the I2P data directory.
let env = Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment)
env.set("I2P_BROWSER_I2P_DATA_DIR", dataDir.path)
env.set('I2P_BROWSER_I2P_DATA_DIR', dataDir.path)
// On Windows, prepend the I2P program directory to PATH. This is
// needed so that pluggable transports can find OpenSSL DLLs, etc.
@ -418,7 +424,7 @@ I2PProcessService.prototype =
p.init(exeFile)
for (var i = 0; i < args.length; ++i)
this._logger.log(2, " " + args[i])
this._logger.log(2, ` ${args[i]}`)
// Possible fix for Windows and cmd.exe window spawn.
p.startHidden = true
@ -478,10 +484,8 @@ I2PProcessService.prototype =
{
this.mBootstrapErrorOccurred = true
LauncherUtil.setBoolPref(this.kPrefPromptAtStartup, true)
let phase = LauncherUtil.getLocalizedBootstrapStatus(aStatusObj,
"TAG")
let reason = LauncherUtil.getLocalizedBootstrapStatus(aStatusObj,
"REASON")
let phase = LauncherUtil.getLocalizedBootstrapStatus(aStatusObj, "TAG")
let reason = LauncherUtil.getLocalizedBootstrapStatus(aStatusObj, "REASON")
let details = LauncherUtil.getFormattedLocalizedString(
"i2p_bootstrap_failed_details", [phase, reason], 2)
I2PLauncherLogger.log(5, "I2P bootstrap error: [" + aStatusObj.TAG +

View File

@ -137,6 +137,8 @@ router.startup.jetty9.migrated=true
routerconsole.welcomeWizardComplete=true
`
let noscript = Cu.import("resource://i2pbutton/modules/noscript-control.js")
noscript.initialize()
function RouterConfigManager() {
this.version = '0.1'

View File

@ -6,7 +6,7 @@
<em:name>I2pbutton</em:name>
<em:creator>Meeh, Mikal Villa</em:creator>
<em:id>i2pbutton@geti2p.net</em:id>
<em:version>0.3.7</em:version>
<em:version>0.3.8</em:version>
<em:multiprocessCompatible>true</em:multiprocessCompatible>
<em:homepageURL>https://geti2p.net/en/download/lab</em:homepageURL>
<em:iconURL>chrome://i2pbutton/skin/i2p.png</em:iconURL>

View File

@ -5,6 +5,8 @@ const Ci = Components.interfaces
const Cu = Components.utils
const Cr = Components.results
Cu.importGlobalProperties(["XMLHttpRequest"])
const kPropBundleURI = "chrome://i2pbutton/locale/i2pbutton.properties"
const kPropNamePrefix = "i2pbutton."
@ -19,6 +21,38 @@ let logger = {
}
}
const Timer = Components.Constructor("@mozilla.org/timer;1", "nsITimer", "initWithCallback");
function delay(timeout, func) {
let timer = new Timer(function () {
// Remove the reference so that it can be reaped.
delete delay.timers[idx];
func();
}, timeout, Ci.nsITimer.TYPE_ONE_SHOT);
// Store a reference to the timer so that it's not reaped before it fires.
let idx = delay.timers.push(timer) - 1;
return idx
}
delay.timers = []
function repeat(timeout, func) {
let timer = new Timer(function () {
func();
}, timeout, Ci.nsITimer.TYPE_REPEATING_SLACK);
// Store a reference to the timer so that it's not reaped before it fires.
let idx = delay.timers.push(timer) - 1;
return idx
}
repeat.timers = []
// Wrapper since window.setTimeout isn't always available in context/scope.
function setTimeout(func, interval) {
delay(interval, func)
}
const LauncherUtil = {
get isMac()
@ -83,6 +117,13 @@ const LauncherUtil = {
return argsArray;
},
setTimeout: (func, interval) => {
delay(interval, func)
},
setInterval: (func, interval) => {
repeat(interval, func)
},
get _networkSettingsWindow()
{
let wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator)
@ -163,6 +204,33 @@ const LauncherUtil = {
asSvc.quit(0x12) // eAttemptQuit (0x02) + eRestart (0x10)
},
waitForPortToOpen: function(portNum, doneCallback, interval) {
interval = interval || 3000
let portOpen = false
let testPort = () => {
var xhr = new XMLHttpRequest()
xhr.open('GET', `http://127.0.0.1:${portNum}`)
xhr.onerror = () => {
console.log(`Still waiting for ${portNum} to open`)
if (!portOpen) {
setTimeout(testPort, interval)
}
}
xhr.onload = () => {
console.log(`Port ${portNum} seem open now finally`)
portOpen = true
if ('function' === typeof doneCallback) {
doneCallback(portNum)
}
}
xhr.send()
}
testPort()
},
//waitForPortToOpen(7647, () => { console.log('ALL DONE') })
getRouterDefaultArgs: function() {
let dataDir = this.getI2PConfigPath(true)
let exeFile = this.getI2PBinary()