Merge pull request #7 from mikalv/master
Beta 7 changes (i2pbutton 0.3.8)
This commit is contained in:
@ -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 = {
|
||||
|
@ -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. -->
|
||||
|
||||
|
@ -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 +
|
||||
|
@ -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'
|
||||
|
@ -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>
|
||||
|
@ -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()
|
||||
|
Reference in New Issue
Block a user