Compare commits

..

83 Commits
1.0.2 ... 1.0.3

Author SHA1 Message Date
idk
eb0bc93df6 update index.html 2022-10-24 00:29:31 -04:00
idk
e61cf40b8f update OSX.html 2022-10-24 00:17:39 -04:00
idk
1a79e565c3 update index.html 2022-10-24 00:17:09 -04:00
idk
2633f86920 update WINDOWS.html 2022-10-24 00:16:03 -04:00
idk
9f9e898803 update LINUX.html 2022-10-24 00:15:53 -04:00
idk
41c7e7df97 update index.html 2022-10-24 00:15:25 -04:00
idk
85fa719f39 add releases to instructions 2022-10-24 00:14:41 -04:00
idk
c602ac151b update LINUX.html 2022-10-24 00:11:14 -04:00
idk
376aeb63e7 update I2PGenericUnsafeBrowser.html 2022-10-24 00:11:09 -04:00
idk
24f61a5fc0 update I2PFirefox.html 2022-10-24 00:11:04 -04:00
idk
fd476b8a6e update I2PCommonBrowser.html 2022-10-24 00:11:02 -04:00
idk
be19811fed update I2PChromium.html 2022-10-24 00:10:56 -04:00
idk
1d54ea8358 update index.html 2022-10-24 00:10:47 -04:00
idk
38f65fffe0 update gitignore, shift testing around a bit 2022-10-24 00:06:27 -04:00
idk
2685d2cb74 update WINDOWS.html 2022-10-24 00:01:05 -04:00
idk
ec3afa914e update VERSION.html 2022-10-24 00:01:04 -04:00
idk
dbb7dfa5f2 update USAGE.html 2022-10-24 00:01:02 -04:00
idk
fe17e3563b update TODO.html 2022-10-24 00:01:00 -04:00
idk
8fec4f6b22 update RELEASES.html 2022-10-24 00:00:58 -04:00
idk
b618047156 update PACKAGES.html 2022-10-24 00:00:57 -04:00
idk
756fa1e8a8 update OSX.html 2022-10-24 00:00:55 -04:00
idk
a9fcc70fb1 update LINUX.html 2022-10-24 00:00:53 -04:00
idk
c0ae89ef20 update LICENSE.html 2022-10-24 00:00:52 -04:00
idk
6ed0347f3f update I2PPureJavaBrowser.html 2022-10-24 00:00:49 -04:00
idk
f9efb07349 update I2PGenericUnsafeBrowser.html 2022-10-24 00:00:48 -04:00
idk
e2595e0999 update I2PFirefoxProfileUnpacker.html 2022-10-24 00:00:46 -04:00
idk
cc3895ff1d update I2PFirefoxProfileChecker.html 2022-10-24 00:00:44 -04:00
idk
288d706a16 update I2PFirefoxProfileBuilder.html 2022-10-24 00:00:42 -04:00
idk
109e409415 update I2PFirefox.html 2022-10-24 00:00:40 -04:00
idk
697db7cce0 update I2PCommonBrowser.html 2022-10-24 00:00:38 -04:00
idk
735c21c5c5 update I2PChromiumProfileUnpacker.html 2022-10-24 00:00:36 -04:00
idk
33f4f57797 update I2PChromiumProfileChecker.html 2022-10-24 00:00:34 -04:00
idk
1b5a7fa393 update I2PChromiumProfileBuilder.html 2022-10-24 00:00:32 -04:00
idk
4d7143af60 update I2PChromium.html 2022-10-24 00:00:31 -04:00
idk
3947d264db update I2PBrowser.html 2022-10-24 00:00:29 -04:00
idk
84c19bfdab update EXAMPLES.html 2022-10-24 00:00:28 -04:00
idk
3d12850334 update CONFIG.html 2022-10-24 00:00:26 -04:00
idk
28a81c061a update CHANGES.html 2022-10-24 00:00:25 -04:00
idk
7b2beaee44 update BUILD.html 2022-10-24 00:00:23 -04:00
idk
17de473b28 update index.html 2022-10-24 00:00:22 -04:00
idk
0031901d86 add torbrowser test script 2022-10-23 23:58:02 -04:00
idk
4fd186f88f also search for portable Chromiums if there is such a thing 2022-10-23 23:56:31 -04:00
idk
2b763a9de7 also search for portable Chromiums if there is such a thing 2022-10-23 23:55:45 -04:00
idk
098cc0b4a8 fix nearby firefox discovery 2022-10-23 22:59:23 -04:00
idk
b9778ed075 add platform specific install instructions 2022-10-23 22:42:18 -04:00
idk
72c6c2f4e2 move build instructions to own file 2022-10-23 21:57:22 -04:00
idk
45554a3aa9 test build 2022-10-23 21:39:11 -04:00
idk
11ce176ed5 add icons to jpackages 2022-10-23 21:04:15 -04:00
idk
d5eb4da51d update VERSION.html 2022-10-23 20:13:30 -04:00
idk
00edc2c928 update USAGE.html 2022-10-23 20:13:28 -04:00
idk
af8ac433b8 update TODO.html 2022-10-23 20:13:26 -04:00
idk
000079f53a update RELEASES.html 2022-10-23 20:13:24 -04:00
idk
7a021f9364 update PACKAGES.html 2022-10-23 20:13:23 -04:00
idk
afccb7d346 update OSX.html 2022-10-23 20:13:21 -04:00
idk
67cbcdd746 update LICENSE.html 2022-10-23 20:13:20 -04:00
idk
97f032b9c1 update I2PPureJavaBrowser.html 2022-10-23 20:13:18 -04:00
idk
97f0372cac update I2PGenericUnsafeBrowser.html 2022-10-23 20:13:17 -04:00
idk
1f10c3c346 update I2PFirefoxProfileUnpacker.html 2022-10-23 20:13:15 -04:00
idk
a6df69a0a4 update I2PFirefoxProfileChecker.html 2022-10-23 20:13:13 -04:00
idk
76c8236ea8 update I2PFirefoxProfileBuilder.html 2022-10-23 20:13:12 -04:00
idk
24581ea695 update I2PFirefox.html 2022-10-23 20:13:10 -04:00
idk
073aa0df53 update I2PCommonBrowser.html 2022-10-23 20:13:08 -04:00
idk
8b37ccfe33 update I2PChromiumProfileUnpacker.html 2022-10-23 20:13:07 -04:00
idk
84506f1310 update I2PChromiumProfileChecker.html 2022-10-23 20:13:05 -04:00
idk
010b1ca527 update I2PChromiumProfileBuilder.html 2022-10-23 20:13:04 -04:00
idk
41fb2ff414 update I2PChromium.html 2022-10-23 20:13:02 -04:00
idk
2446428481 update I2PBrowser.html 2022-10-23 20:13:00 -04:00
idk
0334246cee update EXAMPLES.html 2022-10-23 20:12:58 -04:00
idk
a5dede7178 update CONFIG.html 2022-10-23 20:12:57 -04:00
idk
1df56f7112 update CHANGES.html 2022-10-23 20:12:55 -04:00
idk
e4a42c8a4e update index.html 2022-10-23 20:12:53 -04:00
idk
c2f63fd47f disable systray in test.sh 2022-10-23 19:50:27 -04:00
idk
418fa9a6a0 start pure-java solution 2022-10-23 17:25:48 -04:00
idk
9bbb7b926a start pure-java solution 2022-10-23 17:25:34 -04:00
idk
69f7af1b5c log line in registryQuery 2022-10-23 12:37:10 -04:00
idk
f469ee39c4 check both edge and msedge binary names, force user-data-dir if edge, even in unsafe mode 2022-10-23 12:07:47 -04:00
idk
7203ba826e check both edge and msedge binary names 2022-10-23 12:01:06 -04:00
idk
323bfa26a5 fix 32-bit profile detection 2022-10-23 11:54:13 -04:00
idk
03911e0eb3 fix 32-bit profile detection 2022-10-23 11:52:56 -04:00
idk
01c8b7601d re-add config.md 2022-10-23 11:40:39 -04:00
idk
8ffd4025ef Add config.md 2022-10-23 11:34:25 -04:00
idk
2e7f875efe add browser.config generator 2022-10-23 11:27:59 -04:00
idk
4909c59baf add browser.config generator 2022-10-23 11:26:45 -04:00
71 changed files with 6466 additions and 1453 deletions

2
.gitignore vendored
View File

@ -22,3 +22,5 @@ i2pbrowser/
/user.js
arkenfoxnum
/*.tar.gz
/*.tar.xz
/i2p.firefox.profile.*

1433
BUILD.html Normal file

File diff suppressed because it is too large Load Diff

228
BUILD.md Executable file
View File

@ -0,0 +1,228 @@
# Building
## Build Dependencies
You will need `ant` and java `java` and for building the jar. You will need
`jpackage` for many of the potential build targets. I've been using Java 17
on Debian mostly, on Debian and Ubuntu, install the dependencies with:
```sh
sudo apt-get install openjdk-17* ant
```
Some of the targets use scripts written in Go to help generate resources. If
you want to update the profiles, you will need them. To install Go on Debian
and Ubuntu:
```sh
sudo apt-get install golang-go
```
Add `$HOME/go/bin` to your `$PATH` so `ant` can find Go applications.
`export PATH=$PATH:$HOME/go/bin`
Then use Go to download the applications you need and add them to `$HOME/go/bin`.
If you want to build the Chromium profiles you will need a Go application
called `crx3` which is used to interact with the Chrome app store to download
and update extensions.
```sh
go install github.com/mediabuyerbot/go-crx3/crx3@latest
```
Another Go application, called `amo-version`, is used to fetch extensions from addons.mozilla.org.
Like the Chrome profiles, generating the Firefox profiles requires this application. If you don't
want to update the profiles, you don't need it.
```sh
go install github.com/eyedeekay/amo-version@latest
```
One last Go application, called `dzip` is used to generate zip files deterministically for
redistribution.
```sh
go install github.com/delicb/dzip@latest
```
If you don't want to use it, you can work around it by creating a file called
`dzip` in `/usr/local/bin/dzip` and adding the contents:
```sh
#! /usr/bin/env sh
zip -r $@
```
This will break deterministic builds, but for testing it will continue to work. More elaborate
scripts or other deterministic zip utilities can be easily substituted in by placing them
in the `$PATH` under the name `dzip`.
For Fedora, use Yum, for Arch use pacman or something else but make sure to tell everyone
about it. Once you have that installed, when building, make sure to add `$GOPATH/bin/`
to your `$PATH`.
```sh
export PATH=$PATH:$HOME/go/bin
```
Will almost always work.
## Building
This is not actually a plugin yet, but it will be soon. The important bit is the jar.
To generate that, you can either generate the full plugin, which will not work but
produces the jar as a by-product, or you can:
```sh
ant jar
```
To build just the jar. You'll know it worked if you can:
```sh
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PFirefox
```
and a new Firefox instance comes up with a fresh profile, ready-to-use for I2P browsing.
The cooler thing you can do with it is add it to an I2P distribution and somewhere in it,
add a UI element that triggers something along the lines of this:
```java
// Firefox Example
if (i2pIsRunning()) {
logger.warning("I2P is already running");
System.out.println("I2PFirefox");
I2PFirefox i2pFirefox = new I2PFirefox();
i2pFirefox.launch();
}
```
```java
// Chromium Example
if (i2pIsRunning()) {
logger.warning("I2P is already running");
System.out.println("I2PChromium");
I2PChromium i2pChromium = new I2PChromium();
i2pChromium.launch();
}
```
```java
// Auto-Select Example, chooses Firefox first, then Chromium
if (i2pIsRunning()) {
logger.warning("I2P is already running");
System.out.println("I2PBrowser");
I2PBrowser i2pBrowser = new I2PBrowser();
/*
* toggle chromium to the top of the order by doing:
I2PBrowser.chromiumFirst = true;
*
*/
i2pBrowser.launch(privateBrowsing);
}
```
to add a browser management tool to it.
## Browser Discovery Methods
This tool looks for browsers on the host system, creates a workspace to use for I2P
purposes, and launches the browser inside of that workspace. The details of the
workspace vary from browser to browser but roughly corresponds to a browser profile.
In order to be successful this tool uses 3 main types of browser discovery methods,
in this order:
1. "Local" discovery, where a browser is in a subdirectory of the directory where you
ran the launcher. This will only happen if the user unpacked a portable browser into
the same directory where they ran the launcher.
2. "Path-Based" discovery, where it scans common browser installation directories
until it finds one which it can use. On Unix, it simply scans the directories on the
`PATH` for a browser it knows about. On Windows, default paths to browser install
directories are hard-coded and included in the binary. This is what usually happens.
3. "System-Based" discovery, where it defers to the host system to make a choice
about the browser and counts on browser vendors to honor the system proxy environment
variables. This is a catch-all solution which works with most browsers, but does
not apply any customizations.
There is a little subtlety here though.
- The path to Edgium on Windows will **always** resolve during path-based discovery,
resulting in a positive test for Chromium when launching the browser in auto-select
mode. So Windows will never reach stage 3 unless expressly forced to. If Firefox or
a variant is installed, it will be chosen before Edgium unless directed otherwise.
- Even though it will launch you into Edgium if it has no other choice, I recommend
you do not use it. Edgium will in a constant, incessant way try to induce you to
share your behavior with Microsoft. If you try to resist this, it negatively affects
the performance of the browser. Google also does this with Chrome, ant this negatively
affects Chrome performance too, but less than with Edgium. TL:DR Edgium sucks and is
pointless and terrible. Literally any other browser would be better.
- Linux is unaware of a Tor Browser path because Tor Browser is rarely, if ever,
installed on-path. What is on path is virtually always a wrapper for Tor Browser
which is installed either as the main user or it's own user. Linux will only use
Tor Browser if it's discovered in "Local" mode. To set this up automatically, you
can `cd` to the `I2P` directory where you unpacked the `.tar.gz` file, and run the
`./lib/torbrowser.sh` script from there.
- I really only test Phase 3 with Dillo and Edgium. **YMMV.**
## Usability vs Strict
This is basically a profile-management tool geared toward minimizing the
differences between browser users which are passively discernible while
they are browsing I2P. It assumes that they are part of a highly fragmented
browsing environment where they are already unique, and therefore consolidation
on configuration is a goal. However, this goal sometimes also conflicts with
usability. To allow users a safe set of choices, we offer "Coarse" configuration
in 2 modes. We recommend that you do not deviate from these configurations if
you have browser application fingerprinting as a concern.
### Usability Mode
TODO: description
Pros: Allows a restricted subset of Javascript
Pros: Less likely to try and reach the clearnet
Cons: Looks very different from Tor Browser
Cons: Plugin updates can create temporary uniqueness
#### Usability Extension Set
- **I2P In Private Browsing**
- **uMatrix**
- **jsRestrictor**
- **LocalCDN**
- **Onion in Container Tabs**
- **HTTPS EveryWhere** in some configurations
### Usability user.js characteristics
TODO: Summarize differences
### Strict Mode
TODO: description
Pros: Does not allow Javascript by default
Pros: Looks a lot like Tor Browser especially if you're using Tor Browser
Cons: More work to use
Cons: Temporary uniqueness can be created by enabling Javascript for specific sites
Cons: More likely to try and reach the clearnet
#### Strict Extension Set
- **NoScript**
- **I2P In Private Browsing**
- **HTTPS EveryWhere** in some configurations
#### Strict user.js characteristics
TODO: Summarize differences

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">
@ -144,7 +164,7 @@
/
</a>
<h1>
Configuration of the Browser Launcher
Configuring the Browser Launcher
</h1>
<p>
It is possible to configure the Browser Launcher differently using a
@ -167,8 +187,7 @@
<code>
$PLUGIN
</code>
directory for
I2P Plugin installs.
directory for I2P Plugin installs.
</p>
<h2>
bins
@ -177,9 +196,9 @@
<code>
bins
</code>
properties determine which Firefox or Chromium variants to use by matching the
binary name. You can use these to configure custom Firefox or Chromium variants or
disable others.
properties determine which Firefox or Chromium
variants to use by matching the binary name. You can use these to
configure custom Firefox or Chromium variants or disable others.
</p>
<pre><code class="language-properties">firefox.bins.*
chromium.bins.*
@ -189,12 +208,13 @@ generic.bins.*
<code>
generic.bins
</code>
is only used on Unixes, and usually refers to
is only used on Unixes, and usually
refers to
<code>
sensible-browser
</code>
on common
Linux distributions.
on common Linux
distributions.
</p>
<h2>
paths
@ -203,9 +223,10 @@ generic.bins.*
<code>
paths
</code>
properties determine where to search for Firefox or Chromium variants to use
by trying to find a file matching the binary name by looking in a series of directories.
You can use these to configure Firefox or Chromium in non-default install locations.
properties determine where to search for Firefox
or Chromium variants to use by trying to find a file matching the binary
name by looking in a series of directories. You can use these to
configure Firefox or Chromium in non-default install locations.
</p>
<pre><code class="language-properties">firefox.paths.*
chromium.paths.*
@ -216,34 +237,35 @@ chromium.paths.*
<p>
This properties file represents the defaults.
</p>
<pre><code class="language-properties"># Chromium configuration section
<pre><code class="language-properties">#Chromium Configuration Section
#Sun Oct 23 11:29:45 EDT 2022
chromium.bins.linux=ungoogled-chromium,chromium,brave,edge,ungoogled-chromium,chrome
chromium.bins.osx=ungoogled-chromium,chromium,brave,edge,ungoogled-chromium,chrome
chromium.bins.windows=ungoogled-chromium.exe,chromium.exe,brave.exe,edge.exe,ungoogled-chromium.exe,chrome.exe
chromium.paths.linux=/usr/bin,/usr/local/bin,/opt/chromium/bin,/snap/bin
chromium.paths.osx=/Applications/Chromium.app/Contents/MacOS,/Applications/Chrome.app/Contents/MacOS,/Applications/Brave.app/Contents/MacOS
chromium.paths.windows=/Google/Chrome/Application,/Google/Chrome/Application,/Google/Chrome/Application,/Chromium/Application,/Chromium/Application,/Chromium/Application,/BraveSoftware/Brave Browser/Application,/BraveSoftware/Brave Browser/Application,/BraveSoftware/Brave Browser/Application,/Microsoft/Edge/Application,/Microsoft/Edge/Application
# Firefox configuration section
firefox.bins.linux=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
chromium.paths.windows=C\:\\Users\\user\\AppData\\Local\\/Google/Chrome/Application,C\:\\Program Files (x86)\\/Google/Chrome/Application,/Google/Chrome/Application,C\:\\Users\\user\\AppData\\Local\\/Chromium/Application,C\:\\Program Files (x86)\\/Chromium/Application,/Chromium/Application,C\:\\Users\\user\\AppData\\Local\\/BraveSoftware/Brave Browser/Application,C\:\\Program Files (x86)\\/BraveSoftware/Brave Browser/Application,/BraveSoftware/Brave Browser/Application,/Microsoft/Edge/Application,C\:\\Program Files (x86)\\/Microsoft/Edge/Application
</code></pre>
<pre><code class="language-properties">firefox.bins.linux=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
firefox.bins.osx=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
firefox.bins.windows=firefox.exe,firefox-bin.exe,firefox-esr.exe,waterfox.exe,waterfox-bin.exe,librewolf.exe
firefox.paths.linux=/usr/bin,/usr/local/bin,/opt/firefox/bin,/snap/bin
firefox.paths.osx=/Applications/Tor Browser.app/Contents/MacOS,/Applications/Firefox.app/Contents/MacOS,/Applications/Waterfox.app/Contents/MacOS,/Applications/Librewolf.app/Contents/MacOS
firefox.paths.windows=/home/idk/OneDrive/Desktop/Tor Browser/Browser,/home/idk/Desktop/Tor Browser/Browser,Mozilla Firefox,Mozilla Firefox,Waterfox,Waterfox,Librewolf
# Generic configuration section
generic.bins.unix=sensible-browser,xdg-open,x-www-browser,gnome-www-browser,defaultbrowser,dillo,seamonkey,konqueror,galeon,surf,www-browser,links,lynx
firefox.paths.windows=C\:\\Users\\user\\/OneDrive/Desktop/Tor Browser/Browser,C\:\\Users\\user\\/Desktop/Tor Browser/Browser,C\:\\Program Files (x86)\\/Mozilla Firefox,Mozilla Firefox,C\:\\Program Files (x86)\\/Waterfox,Waterfox,C\:\\Program Files (x86)\\/Librewolf
</code></pre>
<pre><code class="language-properties">generic.bins.unix=sensible-browser,xdg-open,x-www-browser,gnome-www-browser,defaultbrowser,dillo,seamonkey,konqueror,galeon,surf,www-browser,links,lynx
</code></pre>
<h3>
Launching it with I2P
</h3>
<p>
If you want this to be launched by I2P when you click &ldquo;Launch I2P Browser&rdquo;, edit
If you want this to be launched by I2P when you click &ldquo;Launch I2P
Browser&rdquo;, edit
<code>
router.config
</code>
in oder to contain the path to
in oder to contain the
path to
<code>
i2pbrowser
</code>

80
CONFIG.md Normal file
View File

@ -0,0 +1,80 @@
# Configuring the Browser Launcher
It is possible to configure the Browser Launcher differently using a
`browser.config` in the `user.dir` for
`.jar` and `jpackage` installs, or the
`$PLUGIN` directory for I2P Plugin installs.
## bins
`bins` properties determine which Firefox or Chromium
variants to use by matching the binary name. You can use these to
configure custom Firefox or Chromium variants or disable others.
``` properties
firefox.bins.*
chromium.bins.*
generic.bins.*
```
`generic.bins` is only used on Unixes, and usually
refers to `sensible-browser` on common Linux
distributions.
## paths
`paths` properties determine where to search for Firefox
or Chromium variants to use by trying to find a file matching the binary
name by looking in a series of directories. You can use these to
configure Firefox or Chromium in non-default install locations.
``` properties
firefox.paths.*
chromium.paths.*
```
### Example Properties File
This properties file represents the defaults.
```properties
#Chromium Configuration Section
#Sun Oct 23 11:29:45 EDT 2022
chromium.bins.linux=ungoogled-chromium,chromium,brave,edge,ungoogled-chromium,chrome
chromium.bins.osx=ungoogled-chromium,chromium,brave,edge,ungoogled-chromium,chrome
chromium.bins.windows=ungoogled-chromium.exe,chromium.exe,brave.exe,edge.exe,ungoogled-chromium.exe,chrome.exe
chromium.paths.linux=/usr/bin,/usr/local/bin,/opt/chromium/bin,/snap/bin
chromium.paths.osx=/Applications/Chromium.app/Contents/MacOS,/Applications/Chrome.app/Contents/MacOS,/Applications/Brave.app/Contents/MacOS
chromium.paths.windows=C\:\\Users\\user\\AppData\\Local\\/Google/Chrome/Application,C\:\\Program Files (x86)\\/Google/Chrome/Application,/Google/Chrome/Application,C\:\\Users\\user\\AppData\\Local\\/Chromium/Application,C\:\\Program Files (x86)\\/Chromium/Application,/Chromium/Application,C\:\\Users\\user\\AppData\\Local\\/BraveSoftware/Brave Browser/Application,C\:\\Program Files (x86)\\/BraveSoftware/Brave Browser/Application,/BraveSoftware/Brave Browser/Application,/Microsoft/Edge/Application,C\:\\Program Files (x86)\\/Microsoft/Edge/Application
```
```properties
firefox.bins.linux=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
firefox.bins.osx=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
firefox.bins.windows=firefox.exe,firefox-bin.exe,firefox-esr.exe,waterfox.exe,waterfox-bin.exe,librewolf.exe
firefox.paths.linux=/usr/bin,/usr/local/bin,/opt/firefox/bin,/snap/bin
firefox.paths.osx=/Applications/Tor Browser.app/Contents/MacOS,/Applications/Firefox.app/Contents/MacOS,/Applications/Waterfox.app/Contents/MacOS,/Applications/Librewolf.app/Contents/MacOS
firefox.paths.windows=C\:\\Users\\user\\/OneDrive/Desktop/Tor Browser/Browser,C\:\\Users\\user\\/Desktop/Tor Browser/Browser,C\:\\Program Files (x86)\\/Mozilla Firefox,Mozilla Firefox,C\:\\Program Files (x86)\\/Waterfox,Waterfox,C\:\\Program Files (x86)\\/Librewolf
```
```properties
generic.bins.unix=sensible-browser,xdg-open,x-www-browser,gnome-www-browser,defaultbrowser,dillo,seamonkey,konqueror,galeon,surf,www-browser,links,lynx
```
### Launching it with I2P
If you want this to be launched by I2P when you click "Launch I2P
Browser", edit `router.config` in oder to contain the
path to `i2pbrowser` for your platform.
``` properties
routerconsole.browser=/path/to/i2pbrowser
```
For example, if you installed it with the `.deb`
`jpackage` , use:
``` properties
routerconsole.browser=/opt/i2pbrowser/bin/i2pbrowser
```

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">
@ -442,7 +462,7 @@
</p>
<h3>
chromiumBinsWindows
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L176">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L184">
[src]
</a>
</h3>
@ -468,7 +488,7 @@
</p>
<h3>
FIND_CHROMIUM_SEARCH_PATHS_WINDOWS
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L185">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L196">
[src]
</a>
</h3>
@ -494,7 +514,7 @@
</p>
<h3>
FIND_ALL_CHROMIUM_SEARCH_PATHS
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L199">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L210">
[src]
</a>
</h3>
@ -520,7 +540,7 @@
</p>
<h3>
FIND_CHROMIUM_SEARCH_PATHS
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L219">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L230">
[src]
</a>
</h3>
@ -546,7 +566,7 @@
</p>
<h3>
NEARBY_CHROMIUM_SEARCH_PATHS
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L233">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L244">
[src]
</a>
</h3>
@ -572,7 +592,7 @@
</p>
<h3>
CHROMIUM_FINDER
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L287">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L337">
[src]
</a>
</h3>
@ -598,7 +618,7 @@
</p>
<h3>
onlyValidChromiums
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L308">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L358">
[src]
</a>
</h3>
@ -621,7 +641,7 @@
</p>
<h3>
topChromium
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L328">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L378">
[src]
</a>
</h3>
@ -644,7 +664,7 @@
</p>
<h3>
topChromium
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L357">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L407">
[src]
</a>
</h3>
@ -671,7 +691,7 @@
</p>
<h3>
defaultProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L375">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L425">
[src]
</a>
</h3>
@ -694,7 +714,7 @@
</p>
<h3>
defaultProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L388">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L438">
[src]
</a>
</h3>
@ -721,7 +741,7 @@
</p>
<h3>
privateProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L400">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L450">
[src]
</a>
</h3>
@ -744,7 +764,7 @@
</p>
<h3>
privateProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L413">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L463">
[src]
</a>
</h3>
@ -771,7 +791,7 @@
</p>
<h3>
appProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L435">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L485">
[src]
</a>
</h3>
@ -794,7 +814,7 @@
</p>
<h3>
appProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L448">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L498">
[src]
</a>
</h3>
@ -821,7 +841,7 @@
</p>
<h3>
processBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L495">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L545">
[src]
</a>
</h3>
@ -848,7 +868,7 @@
</p>
<h3>
launchAndDetatch
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L616">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L666">
[src]
</a>
</h3>
@ -877,7 +897,7 @@
</p>
<h3>
launchAndDetatch
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L623">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L673">
[src]
</a>
</h3>
@ -906,7 +926,7 @@
</p>
<h3>
launch
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L681">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L731">
[src]
</a>
</h3>
@ -935,7 +955,7 @@
</p>
<h3>
launch
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L687">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L737">
[src]
</a>
</h3>
@ -964,7 +984,7 @@
</p>
<h3>
launch
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L712">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L762">
[src]
</a>
</h3>
@ -991,7 +1011,7 @@
</p>
<h3>
launch
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L721">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L771">
[src]
</a>
</h3>
@ -1014,7 +1034,7 @@
</p>
<h3>
ValidURL
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L723">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L773">
[src]
</a>
</h3>
@ -1044,7 +1064,7 @@
</p>
<h3>
main
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L733">
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L783">
[src]
</a>
</h3>
@ -1072,36 +1092,6 @@
<br />
| args | String[] | |
</p>
<h3>
sleep
<a href="src/java/net/i2p/i2pfirefox/I2PChromium.java#L772">
[src]
</a>
</h3>
<ul>
<li>
Description:
<br />
</li>
<li>
Access: private
<br />
</li>
<li>
Modifiers: static
</li>
<li>
return: void
<br />
</li>
</ul>
<p>
| Name | Type | Description |
<br />
| &mdash;&ndash; | &mdash;&ndash; | &mdash;&ndash; |
<br />
| millis | int | |
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>

View File

@ -118,7 +118,7 @@ This method has no parameters.
This method has no parameters.
### chromiumBinsWindows [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L176)
### chromiumBinsWindows [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L184)
+ Description:
+ Access: private
@ -128,7 +128,7 @@ This method has no parameters.
This method has no parameters.
### FIND_CHROMIUM_SEARCH_PATHS_WINDOWS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L185)
### FIND_CHROMIUM_SEARCH_PATHS_WINDOWS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L196)
+ Description:
+ Access: private
@ -138,7 +138,7 @@ This method has no parameters.
This method has no parameters.
### FIND_ALL_CHROMIUM_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L199)
### FIND_ALL_CHROMIUM_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L210)
+ Description:
+ Access: private
@ -148,7 +148,7 @@ This method has no parameters.
This method has no parameters.
### FIND_CHROMIUM_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L219)
### FIND_CHROMIUM_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L230)
+ Description:
+ Access: private
@ -158,7 +158,7 @@ This method has no parameters.
This method has no parameters.
### NEARBY_CHROMIUM_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L233)
### NEARBY_CHROMIUM_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L244)
+ Description:
+ Access: private
@ -168,7 +168,7 @@ This method has no parameters.
This method has no parameters.
### CHROMIUM_FINDER [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L287)
### CHROMIUM_FINDER [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L337)
+ Description:
+ Access: private
@ -178,7 +178,7 @@ This method has no parameters.
This method has no parameters.
### onlyValidChromiums [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L308)
### onlyValidChromiums [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L358)
+ Description: Check our list of chrome paths for a valid chrome binary. Just an existence check for now but should check versions in the future.
+ Access: public
@ -187,7 +187,7 @@ This method has no parameters.
This method has no parameters.
### topChromium [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L328)
### topChromium [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L378)
+ Description: Return the best available Chromium from the list of Chromiums we have.
+ Access: public
@ -196,7 +196,7 @@ This method has no parameters.
This method has no parameters.
### topChromium [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L357)
### topChromium [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L407)
+ Description: Return the best available Chromium from the list of Chromiums we have. if override is passed it will be validated and if it validates it will be used.
+ Access: public
@ -207,7 +207,7 @@ This method has no parameters.
| overrideChromium | String | |
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L375)
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L425)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile.
+ Access: public
@ -216,7 +216,7 @@ This method has no parameters.
This method has no parameters.
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L388)
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L438)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile. @args the arguments to pass to the Chromium binary
+ Access: public
@ -227,7 +227,7 @@ This method has no parameters.
| args | String[] | |
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L400)
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L450)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile.
+ Access: public
@ -236,7 +236,7 @@ This method has no parameters.
This method has no parameters.
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L413)
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L463)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile.
+ Access: public
@ -247,7 +247,7 @@ This method has no parameters.
| args | String[] | the arguments to pass to the Chromium binary. |
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L435)
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L485)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile.
+ Access: public
@ -256,7 +256,7 @@ This method has no parameters.
This method has no parameters.
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L448)
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L498)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile.
+ Access: public
@ -267,7 +267,7 @@ This method has no parameters.
| args | String[] | the arguments to pass to the Chromium binary. |
### processBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L495)
### processBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L545)
+ Description: Build a ProcessBuilder for the top Chromium binary and the default profile with a specific set of extended arguments.
+ Access: public
@ -278,7 +278,7 @@ This method has no parameters.
| args | String[] | the extended arguments to pass to the Chromium binary. |
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L616)
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L666)
+ Description:
+ Access: public
@ -290,7 +290,7 @@ This method has no parameters.
| url | String[] | |
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L623)
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L673)
+ Description:
+ Access: public
@ -302,7 +302,7 @@ This method has no parameters.
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L681)
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L731)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Chromium with the profile directory.
+ Access: public
@ -314,7 +314,7 @@ This method has no parameters.
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L687)
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L737)
+ Description:
+ Access: public
@ -326,7 +326,7 @@ This method has no parameters.
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L712)
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L762)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Chromium with the profile directory.
+ Access: public
@ -337,7 +337,7 @@ This method has no parameters.
| privateWindow | boolean | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L721)
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L771)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Chromium with the profile directory.
+ Access: public
@ -346,7 +346,7 @@ This method has no parameters.
This method has no parameters.
### ValidURL [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L723)
### ValidURL [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L773)
+ Description:
+ Access: private
@ -358,7 +358,7 @@ This method has no parameters.
| inUrl | String | |
### main [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L733)
### main [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L783)
+ Description:
+ Access: public
@ -370,15 +370,3 @@ This method has no parameters.
| args | String[] | |
### sleep [[src]](src/java/net/i2p/i2pfirefox/I2PChromium.java#L772)
+ Description:
+ Access: private
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| millis | int | |

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">
@ -761,7 +781,7 @@
<br />
</li>
<li>
Access: private
Access: public
<br />
</li>
<li>
@ -835,6 +855,68 @@
<br />
| arr | String[] | |
</p>
<h3>
sleep
<a href="src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L469">
[src]
</a>
</h3>
<ul>
<li>
Description:
<br />
</li>
<li>
Access: public
<br />
</li>
<li>
Modifiers: static
</li>
<li>
return: void
<br />
</li>
</ul>
<p>
| Name | Type | Description |
<br />
| &mdash;&ndash; | &mdash;&ndash; | &mdash;&ndash; |
<br />
| millis | int | |
</p>
<h3>
searchFile
<a href="src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L477">
[src]
</a>
</h3>
<ul>
<li>
Description:
<br />
</li>
<li>
Access: public
<br />
</li>
<li>
Modifiers: static
</li>
<li>
return: File
<br />
</li>
</ul>
<p>
| Name | Type | Description |
<br />
| &mdash;&ndash; | &mdash;&ndash; | &mdash;&ndash; |
<br />
| file | File | |
<br />
| search | String | |
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>

View File

@ -251,7 +251,7 @@ This method has no parameters.
### checkifPortIsOccupied [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L440)
+ Description:
+ Access: private
+ Access: public
+ return: boolean
| Name | Type | Description |
@ -283,3 +283,28 @@ This method has no parameters.
| arr | String[] | |
### sleep [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L469)
+ Description:
+ Access: public
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| millis | int | |
### searchFile [[src]](src/java/net/i2p/i2pfirefox/I2PCommonBrowser.java#L477)
+ Description:
+ Access: public
+ Modifiers: static
+ return: File
| Name | Type | Description |
| ----- | ----- | ----- |
| file | File | |
| search | String | |

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">
@ -487,7 +507,7 @@
</p>
<h3>
firefoxBinsWindows
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L175">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L182">
[src]
</a>
</h3>
@ -513,7 +533,7 @@
</p>
<h3>
FIND_FIREFOX_SEARCH_PATHS_WINDOWS
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L185">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L192">
[src]
</a>
</h3>
@ -539,7 +559,7 @@
</p>
<h3>
FIND_ALL_FIREFOX_SEARCH_PATHS
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L199">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L206">
[src]
</a>
</h3>
@ -565,7 +585,7 @@
</p>
<h3>
FIND_FIREFOX_SEARCH_PATHS
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L219">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L226">
[src]
</a>
</h3>
@ -591,7 +611,7 @@
</p>
<h3>
NEARBY_FIREFOX_SEARCH_PATHS
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L233">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L241">
[src]
</a>
</h3>
@ -617,7 +637,7 @@
</p>
<h3>
FIREFOX_FINDER
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L359">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L335">
[src]
</a>
</h3>
@ -643,7 +663,7 @@
</p>
<h3>
onlyValidFirefoxes
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L380">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L356">
[src]
</a>
</h3>
@ -666,7 +686,7 @@
</p>
<h3>
topFirefox
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L401">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L377">
[src]
</a>
</h3>
@ -689,7 +709,7 @@
</p>
<h3>
topFirefox
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L431">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L407">
[src]
</a>
</h3>
@ -716,7 +736,7 @@
</p>
<h3>
defaultProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L449">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L425">
[src]
</a>
</h3>
@ -739,7 +759,7 @@
</p>
<h3>
defaultProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L461">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L437">
[src]
</a>
</h3>
@ -766,7 +786,7 @@
</p>
<h3>
privateProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L475">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L451">
[src]
</a>
</h3>
@ -789,7 +809,7 @@
</p>
<h3>
privateProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L488">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L464">
[src]
</a>
</h3>
@ -816,7 +836,7 @@
</p>
<h3>
appProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L511">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L487">
[src]
</a>
</h3>
@ -839,7 +859,7 @@
</p>
<h3>
appProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L524">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L500">
[src]
</a>
</h3>
@ -866,7 +886,7 @@
</p>
<h3>
headlessProcessBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L545">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L521">
[src]
</a>
</h3>
@ -893,7 +913,7 @@
</p>
<h3>
processBuilder
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L573">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L549">
[src]
</a>
</h3>
@ -922,7 +942,7 @@
</p>
<h3>
usabilityMode
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L630">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L606">
[src]
</a>
</h3>
@ -945,7 +965,7 @@
</p>
<h3>
launchAndDetatch
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L636">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L612">
[src]
</a>
</h3>
@ -974,7 +994,7 @@
</p>
<h3>
launchAndDetatch
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L642">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L618">
[src]
</a>
</h3>
@ -1003,7 +1023,7 @@
</p>
<h3>
launch
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L736">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L712">
[src]
</a>
</h3>
@ -1032,7 +1052,7 @@
</p>
<h3>
launch
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L742">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L718">
[src]
</a>
</h3>
@ -1061,7 +1081,7 @@
</p>
<h3>
launch
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L766">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L742">
[src]
</a>
</h3>
@ -1088,7 +1108,7 @@
</p>
<h3>
launch
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L776">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L752">
[src]
</a>
</h3>
@ -1111,7 +1131,7 @@
</p>
<h3>
ValidURL
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L778">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L754">
[src]
</a>
</h3>
@ -1141,7 +1161,7 @@
</p>
<h3>
main
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L789">
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L765">
[src]
</a>
</h3>
@ -1169,36 +1189,6 @@
<br />
| args | String[] | |
</p>
<h3>
sleep
<a href="src/java/net/i2p/i2pfirefox/I2PFirefox.java#L826">
[src]
</a>
</h3>
<ul>
<li>
Description:
<br />
</li>
<li>
Access: private
<br />
</li>
<li>
Modifiers: static
</li>
<li>
return: void
<br />
</li>
</ul>
<p>
| Name | Type | Description |
<br />
| &mdash;&ndash; | &mdash;&ndash; | &mdash;&ndash; |
<br />
| millis | int | |
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>

View File

@ -136,7 +136,7 @@ This method has no parameters.
This method has no parameters.
### firefoxBinsWindows [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L175)
### firefoxBinsWindows [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L182)
+ Description:
+ Access: private
@ -146,7 +146,7 @@ This method has no parameters.
This method has no parameters.
### FIND_FIREFOX_SEARCH_PATHS_WINDOWS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L185)
### FIND_FIREFOX_SEARCH_PATHS_WINDOWS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L192)
+ Description:
+ Access: private
@ -156,7 +156,7 @@ This method has no parameters.
This method has no parameters.
### FIND_ALL_FIREFOX_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L199)
### FIND_ALL_FIREFOX_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L206)
+ Description:
+ Access: private
@ -166,7 +166,7 @@ This method has no parameters.
This method has no parameters.
### FIND_FIREFOX_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L219)
### FIND_FIREFOX_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L226)
+ Description:
+ Access: private
@ -176,7 +176,7 @@ This method has no parameters.
This method has no parameters.
### NEARBY_FIREFOX_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L233)
### NEARBY_FIREFOX_SEARCH_PATHS [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L241)
+ Description:
+ Access: private
@ -186,7 +186,7 @@ This method has no parameters.
This method has no parameters.
### FIREFOX_FINDER [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L359)
### FIREFOX_FINDER [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L335)
+ Description:
+ Access: private
@ -196,7 +196,7 @@ This method has no parameters.
This method has no parameters.
### onlyValidFirefoxes [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L380)
### onlyValidFirefoxes [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L356)
+ Description: Check our list of firefox paths for a valid firefox binary. Just an existence check for now but should check versions in the future.
+ Access: public
@ -205,7 +205,7 @@ This method has no parameters.
This method has no parameters.
### topFirefox [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L401)
### topFirefox [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L377)
+ Description: Return the best available Firefox from the list of Firefoxes we have.
+ Access: public
@ -214,7 +214,7 @@ This method has no parameters.
This method has no parameters.
### topFirefox [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L431)
### topFirefox [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L407)
+ Description: Return the best available Firefox from the list of Firefoxes we have. if override is passed it will be validated and if it validates it will be used.
+ Access: public
@ -225,7 +225,7 @@ This method has no parameters.
| overrideFirefox | String | |
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L449)
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L425)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile.
+ Access: public
@ -234,7 +234,7 @@ This method has no parameters.
This method has no parameters.
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L461)
### defaultProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L437)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile.
+ Access: public
@ -245,7 +245,7 @@ This method has no parameters.
| args | String[] | the args to pass to the Firefox binary |
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L475)
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L451)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile. Pass the --private-window flag to open a window.
+ Access: public
@ -254,7 +254,7 @@ This method has no parameters.
This method has no parameters.
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L488)
### privateProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L464)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile. Pass the --private-window flag to open a window.
+ Access: public
@ -265,7 +265,7 @@ This method has no parameters.
| args | String[] | the arguments to pass to the Firefox binary |
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L511)
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L487)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile. Pass the --private-window flag to open a window.
+ Access: public
@ -274,7 +274,7 @@ This method has no parameters.
This method has no parameters.
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L524)
### appProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L500)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile. Pass the --private-window flag to open a window.
+ Access: public
@ -285,7 +285,7 @@ This method has no parameters.
| args | String[] | the arguments to pass to the Firefox binary |
### headlessProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L545)
### headlessProcessBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L521)
+ Description: Build a ProcessBuilder for the top Firefox binary and the default profile. Pass the --headless flag to open without a window.
+ Access: public
@ -296,7 +296,7 @@ This method has no parameters.
| args | String[] | the arguments to pass to the Firefox binary |
### processBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L573)
### processBuilder [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L549)
+ Description:
+ Access: public
@ -308,7 +308,7 @@ This method has no parameters.
| app | boolean | |
### usabilityMode [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L630)
### usabilityMode [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L606)
+ Description:
+ Access: private
@ -317,7 +317,7 @@ This method has no parameters.
This method has no parameters.
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L636)
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L612)
+ Description:
+ Access: public
@ -329,7 +329,7 @@ This method has no parameters.
| url | String[] | |
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L642)
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L618)
+ Description:
+ Access: public
@ -341,7 +341,7 @@ This method has no parameters.
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L736)
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L712)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Firefox with the profile directory.
+ Access: public
@ -353,20 +353,20 @@ This method has no parameters.
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L718)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | int | |
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L742)
+ Description:
+ Access: public
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| privateWindow | int | |
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L766)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Firefox with the profile directory.
+ Access: public
+ return: void
@ -376,7 +376,7 @@ This method has no parameters.
| privateWindow | boolean | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L776)
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L752)
+ Description: Populates a profile directory with a proxy configuration. Waits for an HTTP proxy on the port 4444 to be ready. Launches Firefox with the profile directory. Uses a semi-permanent profile.
+ Access: public
@ -385,7 +385,7 @@ This method has no parameters.
This method has no parameters.
### ValidURL [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L778)
### ValidURL [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L754)
+ Description:
+ Access: private
@ -397,7 +397,7 @@ This method has no parameters.
| inUrl | String | |
### main [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L789)
### main [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L765)
+ Description:
+ Access: public
@ -409,15 +409,3 @@ This method has no parameters.
| args | String[] | |
### sleep [[src]](src/java/net/i2p/i2pfirefox/I2PFirefox.java#L826)
+ Description:
+ Access: private
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| millis | int | |

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">
@ -499,7 +519,7 @@
</p>
<h3>
deleteRuntimeDirectory
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L315">
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L325">
[src]
</a>
</h3>
@ -525,7 +545,7 @@
</p>
<h3>
runtimeDirectory
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L331">
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L341">
[src]
</a>
</h3>
@ -555,7 +575,7 @@
</p>
<h3>
runtimeDirectory
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L343">
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L353">
[src]
</a>
</h3>
@ -579,119 +599,9 @@
<p>
This method has no parameters.
</p>
<h3>
waitForProxy
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L365">
[src]
</a>
</h3>
<ul>
<li>
Description: Waits for an HTTP proxy on port 4444 to be ready. Returns false on timeout of 200 seconds.
<br />
</li>
<li>
Access: public
<br />
</li>
<li>
return: true if the proxy is ready false if it is not.
<br />
</li>
</ul>
<p>
This method has no parameters.
</p>
<h3>
waitForProxy
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L375">
[src]
</a>
</h3>
<ul>
<li>
Description: Waits for an HTTP proxy on port 4444 to be ready. Returns false on timeout of the specified number of seconds.
<br />
</li>
<li>
Access: public
<br />
</li>
<li>
return: true if the proxy is ready false if it is not.
<br />
</li>
</ul>
<p>
| Name | Type | Description |
<br />
| &mdash;&ndash; | &mdash;&ndash; | &mdash;&ndash; |
<br />
| timeout | int | the number of seconds to wait for the proxy to be ready. |
</p>
<h3>
waitForProxy
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L387">
[src]
</a>
</h3>
<ul>
<li>
Description: Waits for an HTTP proxy on the specified port to be ready. Returns false on timeout of the specified number of seconds.
<br />
</li>
<li>
Access: public
<br />
</li>
<li>
return: true if the proxy is ready false if it is not.
<br />
</li>
</ul>
<p>
| Name | Type | Description |
<br />
| &mdash;&ndash; | &mdash;&ndash; | &mdash;&ndash; |
<br />
| timeout | int | the number of seconds to wait for the proxy to be ready. |
<br />
| port | int | the port to wait for the proxy to be ready on. |
</p>
<h3>
waitForProxy
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L401">
[src]
</a>
</h3>
<ul>
<li>
Description: Waits for an HTTP proxy on the specified port to be ready. Returns false on timeout of the specified number of seconds.
<br />
</li>
<li>
Access: public
<br />
</li>
<li>
return: true if the proxy is ready false if it is not.
<br />
</li>
</ul>
<p>
| Name | Type | Description |
<br />
| &mdash;&ndash; | &mdash;&ndash; | &mdash;&ndash; |
<br />
| timeout | int | the number of seconds to wait for the proxy to be ready. |
<br />
| port | int | the port to wait for the proxy to be ready on. |
<br />
| host | String | the host to wait for the proxy to be ready on. |
</p>
<h3>
launchAndDetatch
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L415">
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L368">
[src]
</a>
</h3>
@ -720,7 +630,7 @@
</p>
<h3>
launch
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L437">
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L390">
[src]
</a>
</h3>
@ -747,39 +657,9 @@
<br />
| url | String[] | |
</p>
<h3>
sleep
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L455">
[src]
</a>
</h3>
<ul>
<li>
Description:
<br />
</li>
<li>
Access: private
<br />
</li>
<li>
Modifiers: static
</li>
<li>
return: void
<br />
</li>
</ul>
<p>
| Name | Type | Description |
<br />
| &mdash;&ndash; | &mdash;&ndash; | &mdash;&ndash; |
<br />
| millis | int | |
</p>
<h3>
ValidURL
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L463">
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L408">
[src]
</a>
</h3>
@ -807,35 +687,6 @@
<br />
| inUrl | String | |
</p>
<h3>
checkifPortIsOccupied
<a href="src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L473">
[src]
</a>
</h3>
<ul>
<li>
Description:
<br />
</li>
<li>
Access: private
<br />
</li>
<li>
return: boolean
<br />
</li>
</ul>
<p>
| Name | Type | Description |
<br />
| &mdash;&ndash; | &mdash;&ndash; | &mdash;&ndash; |
<br />
| port | int | |
<br />
| host | String | |
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>

View File

@ -145,7 +145,7 @@ This method has no parameters.
This method has no parameters.
### deleteRuntimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L315)
### deleteRuntimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L325)
+ Description: delete the runtime directory
+ Access: public
@ -155,7 +155,7 @@ This method has no parameters.
This method has no parameters.
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L331)
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L341)
+ Description: get the runtime directory creating it if create=true
+ Access: public
@ -167,7 +167,7 @@ This method has no parameters.
| create | boolean | if true create the runtime directory if it does not exist |
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L343)
### runtimeDirectory [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L353)
+ Description: get the correct runtime directory
+ Access: public
@ -177,52 +177,7 @@ This method has no parameters.
This method has no parameters.
### waitForProxy [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L365)
+ Description: Waits for an HTTP proxy on port 4444 to be ready. Returns false on timeout of 200 seconds.
+ Access: public
+ return: true if the proxy is ready false if it is not.
This method has no parameters.
### waitForProxy [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L375)
+ Description: Waits for an HTTP proxy on port 4444 to be ready. Returns false on timeout of the specified number of seconds.
+ Access: public
+ return: true if the proxy is ready false if it is not.
| Name | Type | Description |
| ----- | ----- | ----- |
| timeout | int | the number of seconds to wait for the proxy to be ready. |
### waitForProxy [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L387)
+ Description: Waits for an HTTP proxy on the specified port to be ready. Returns false on timeout of the specified number of seconds.
+ Access: public
+ return: true if the proxy is ready false if it is not.
| Name | Type | Description |
| ----- | ----- | ----- |
| timeout | int | the number of seconds to wait for the proxy to be ready. |
| port | int | the port to wait for the proxy to be ready on. |
### waitForProxy [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L401)
+ Description: Waits for an HTTP proxy on the specified port to be ready. Returns false on timeout of the specified number of seconds.
+ Access: public
+ return: true if the proxy is ready false if it is not.
| Name | Type | Description |
| ----- | ----- | ----- |
| timeout | int | the number of seconds to wait for the proxy to be ready. |
| port | int | the port to wait for the proxy to be ready on. |
| host | String | the host to wait for the proxy to be ready on. |
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L415)
### launchAndDetatch [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L368)
+ Description:
+ Access: public
@ -234,7 +189,7 @@ This method has no parameters.
| url | String[] | |
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L437)
### launch [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L390)
+ Description:
+ Access: public
@ -246,19 +201,7 @@ This method has no parameters.
| url | String[] | |
### sleep [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L455)
+ Description:
+ Access: private
+ Modifiers: static
+ return: void
| Name | Type | Description |
| ----- | ----- | ----- |
| millis | int | |
### ValidURL [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L463)
### ValidURL [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L408)
+ Description:
+ Access: private
@ -270,15 +213,3 @@ This method has no parameters.
| inUrl | String | |
### checkifPortIsOccupied [[src]](src/java/net/i2p/i2pfirefox/I2PGenericUnsafeBrowser.java#L473)
+ Description:
+ Access: private
+ return: boolean
| Name | Type | Description |
| ----- | ----- | ----- |
| port | int | |
| host | String | |

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

1147
LINUX.html Normal file

File diff suppressed because it is too large Load Diff

35
LINUX.md Normal file
View File

@ -0,0 +1,35 @@
### Linux Support
It's possible to use this package in the following binary formats on
Linux. These packages are for the **`amd64`** architecture.
#### Linux jpackage: `.zip`
```sh
mkdir ~/tmp-i2pbrowser && cd ~/tmp-i2pbrowser
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.3/i2pbrowser.zip
unzip i2pbrowser.zip && cd i2pbrowser
## THIS STEP IS OPTIONAL but it will force the system to use Tor Browser from within the i2pbrowser directory.
# This probably offers better security than vanilla Firefox.
# This will also make the directory the launcher is in relocatable to a flash drive, for instance.
# This is commonly referred to as being portable.
# If tor and torsocks are on the host system, Tor Browser will be downloaded over Tor.
./lib/torbrowser.sh
# end of optional step.
./bin/i2pbrowser
```
#### Debian/Ubuntu and variants Jpackage: `.deb`
1. Start your I2P Router
2. Download the latest release `.deb` from [Github](https://github.com/eyedeekay/i2p.plugins.firefox/releases) and verify it's hash.
3. Run `sudo apt-get install ./i2pbrowser*.deb`(Only needs to be done once per update)
4. Use the applications menu shortcut to launch the pre-configured I2P browser
#### Fedora and variants Jpackage: `.rpm`
1. Start your I2P Router
2. Download the latest release `.r[m` from [Github](https://github.com/eyedeekay/i2p.plugins.firefox/releases) and verify it's hash.
3. Run `sudo rpm -i ./i2pbrowser*.rpm`(Only needs to be done the first time)
4. Run `sudo rpm -U ./i2pbrowser*.rpm`(Only needs to be done once per update)
5. Use the applications menu shortcut to launch the pre-configured I2P browser

1096
OSX.html Normal file

File diff suppressed because it is too large Load Diff

33
OSX.md Normal file
View File

@ -0,0 +1,33 @@
Using this on OSX
=================
This code will launch an I2P-Configured Browser on OSX, but at this time
there are no packages for it because it's not possible for me to sign OSX
packages. You can use the `.jar` file with any Java greater than Java 8.
```sh
mkdir ~/tmp-i2pfirefox && cd ~/tmp-i2pfirefox
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.3/i2pfirefox.zip
unzip i2pfirefox.zip
./i2pfirefox.cmd
#or if you want to use a Chromium
./i2pchromium.cmd
```
Building a `jpackage`
---------------------
In order to build a `jpackage`, install at least Java 17. To set up Java
17 and configure it to be the Java used by the system for the rest of the
session, use these commands:
```sh
brew install openjdk@17
sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
export JAVA_HOME=`/usr/libexec/java_home -v 17`
```
Once you're finished, run `./osx-dmg.sh` in the repository root to produce a
`.dmg` package.

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

240
README.md
View File

@ -1,6 +1,6 @@
# i2p.plugins.firefox
A port of the batch scripts from i2p.firefox to Java.
A port of the batch scripts from `i2p.firefox` to Java.
**Status:** This package is maintained. It cannot solve all your problems. Fingerprinting
is a reality in modern browsers. Exploits are too. This software attempts to provide a
@ -41,10 +41,17 @@ directory for Firefox, and the `src/i2p.chromium.*.profile/extensions/*.js/*` di
### Using a Binary
```sh
For platform specific instructions, see
- [LINUX.md](LINUX.md)/[LINUX.html](LINUX.html)
- [OSX.md](OSX.md)/[OSX.html](OSX.html)
- [WINDOWS.md](WINDOWS.md)/[WINDOWS.html](WINDOWS.html)
#### All platforms, using a zip: `.zip` and a non-bundled Java
```sh
mkdir ~/tmp-i2pfirefox && cd ~/tmp-i2pfirefox
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.2/i2pfirefox.zip
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.3/i2pfirefox.zip
unzip i2pfirefox.zip
./i2pfirefox.cmd
@ -52,230 +59,3 @@ unzip i2pfirefox.zip
./i2pchromium.cmd
```
### Build Dependencies
You will need `ant` and java `java` and for building the jar. You will need
`jpackage` for many of the potential build targets. I've been using Java 17
on Debian mostly, on Debian and Ubuntu, install the dependencies with:
```sh
sudo apt-get install openjdk-17* ant
```
Some of the targets use scripts written in Go to help generate resources. If
you want to update the profiles, you will need them. To install Go on Debian
and Ubuntu:
```sh
sudo apt-get install golang-go
```
Add `$HOME/go/bin` to your `$PATH` so `ant` can find Go applications.
`export PATH=$PATH:$HOME/go/bin`
Then use Go to download the applications you need and add them to `$HOME/go/bin`.
If you want to build the Chromium profiles you will need a Go application
called `crx3` which is used to interact with the Chrome app store to download
and update extensions.
```sh
go install github.com/mediabuyerbot/go-crx3/crx3@latest
```
Another Go application, called `amo-version`, is used to fetch extensions from addons.mozilla.org.
Like the Chrome profiles, generating the Firefox profiles requires this application. If you don't
want to update the profiles, you don't need it.
```sh
go install github.com/eyedeekay/amo-version@latest
```
One last Go application, called `dzip` is used to generate zip files deterministically for
redistribution.
```sh
go install github.com/delicb/dzip@latest
```
If you don't want to use it, you can work around it by creating a file called
`dzip` in `/usr/local/bin/dzip` and adding the contents:
```sh
#! /usr/bin/env sh
zip -r $@
```
This will break deterministic builds, but for testing it will continue to work. More elaborate
scripts or other deterministic zip utilities can be easily substituted in by placing them
in the `$PATH` under the name `dzip`.
For Fedora, use Yum, for Arch use pacman or something else but make sure to tell everyone
about it. Once you have that installed, when building, make sure to add `$GOPATH/bin/`
to your `$PATH`.
```sh
export PATH=$PATH:$HOME/go/bin
```
Will almost always work.
### Building
This is not actually a plugin yet, but it will be soon. The important bit is the jar.
To generate that, you can either generate the full plugin, which will not work but
produces the jar as a by-product, or you can:
```sh
ant jar
```
To build just the jar. You'll know it worked if you can:
```sh
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PFirefox
```
and a new Firefox instance comes up with a fresh profile, ready-to-use for I2P browsing.
The cooler thing you can do with it is add it to an I2P distribution and somewhere in it,
add a UI element that triggers something along the lines of this:
```java
// Firefox Example
if (i2pIsRunning()) {
logger.warning("I2P is already running");
System.out.println("I2PFirefox");
I2PFirefox i2pFirefox = new I2PFirefox();
i2pFirefox.launch();
}
```
```java
// Chromium Example
if (i2pIsRunning()) {
logger.warning("I2P is already running");
System.out.println("I2PChromium");
I2PChromium i2pChromium = new I2PChromium();
i2pChromium.launch();
}
```
```java
// Auto-Select Example, chooses Firefox first, then Chromium
if (i2pIsRunning()) {
logger.warning("I2P is already running");
System.out.println("I2PBrowser");
I2PBrowser i2pBrowser = new I2PBrowser();
/*
* toggle chromium to the top of the order by doing:
I2PBrowser.chromiumFirst = true;
*
*/
i2pBrowser.launch(privateBrowsing);
}
```
to add a browser management tool to it.
### Browser Discovery Methods
This tool looks for browsers on the host system, creates a workspace to use for I2P
purposes, and launches the browser inside of that workspace. The details of the
workspace vary from browser to browser but roughly corresponds to a browser profile.
In order to be successful this tool uses 3 main types of browser discovery methods,
in this order:
1. "Local" discovery, where a browser is in a subdirectory of the directory where you
ran the launcher. This will only happen if the user unpacked a portable browser into
the same directory where they ran the launcher.
2. "Path-Based" discovery, where it scans common browser installation directories
until it finds one which it can use. On Unix, it simply scans the directories on the
`PATH` for a browser it knows about. On Windows, default paths to browser install
directories are hard-coded and included in the binary. This is what usually happens.
3. "System-Based" discovery, where it defers to the host system to make a choice
about the browser and counts on browser vendors to honor the system proxy environment
variables. This is a catch-all solution which works with most browsers, but does
not apply any customizations.
There is a little subtlety here though.
- The path to Edgium on Windows will **always** resolve during path-based discovery,
resulting in a positive test for Chromium when launching the browser in auto-select
mode. So Windows will never reach stage 3 unless expressly forced to. If Firefox or
a variant is installed, it will be chosen before Edgium unless directed otherwise.
- Even though it will launch you into Edgium if it has no other choice, I recommend
you do not use it. Edgium will in a constant, incessant way try to induce you to
share your behavior with Microsoft. If you try to resist this, it negatively affects
the performance of the browser. Google also does this with Chrome, ant this negatively
affects Chrome performance too, but less than with Edgium. TL:DR Edgium sucks and is
pointless and terrible. Literally any other browser would be better.
- Linux is unaware of a Tor Browser path because Tor Browser is rarely, if ever,
installed on-path. What is on path is virtually always a wrapper for Tor Browser
which is installed either as the main user or it's own user. Linux will only use
Tor Browser if it's discovered in "Local" mode. To set this up automatically, you
can `cd` to the `I2P` directory where you unpacked the `.tar.gz` file, and run the
`./lib/torbrowser.sh` script from there.
- I really only test Phase 3 with Dillo and Edgium. **YMMV.**
### Usability vs Strict
This is basically a profile-management tool geared toward minimizing the
differences between browser users which are passively discernible while
they are browsing I2P. It assumes that they are part of a highly fragmented
browsing environment where they are already unique, and therefore consolidation
on configuration is a goal. However, this goal sometimes also conflicts with
usability. To allow users a safe set of choices, we offer "Coarse" configuration
in 2 modes. We recommend that you do not deviate from these configurations if
you have browser application fingerprinting as a concern.
#### Usability Mode
TODO: description
Pros: Allows a restricted subset of Javascript
Pros: Less likely to try and reach the clearnet
Cons: Looks very different from Tor Browser
Cons: Plugin updates can create temporary uniqueness
##### Usability Extension Set
- **I2P In Private Browsing**
- **uMatrix**
- **jsRestrictor**
- **LocalCDN**
- **Onion in Container Tabs**
- **HTTPS EveryWhere** in some configurations
##### Usability user.js characteristics
TODO: Summarize differences
#### Strict Mode
TODO: description
Pros: Does not allow Javascript by default
Pros: Looks a lot like Tor Browser especially if you're using Tor Browser
Cons: More work to use
Cons: Temporary uniqueness can be created by enabling Javascript for specific sites
Cons: More likely to try and reach the clearnet
##### Strict Extension Set
- **NoScript**
- **I2P In Private Browsing**
- **HTTPS EveryWhere** in some configurations
##### Strict user.js characteristics
TODO: Summarize differences

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">

1169
WINDOWS.html Normal file

File diff suppressed because it is too large Load Diff

33
WINDOWS.md Normal file
View File

@ -0,0 +1,33 @@
### Windows Support
It's possible to use this package on Windows, but it's recommended that
you get it through the Easy-Install bundle which includes this functionality
already. Use this only if you want to test new features or if you prefer
an unbundled I2P router with an external JVM.
#### Windows Jpackage: `.zip`
**(Not Recommended! This functionality is already included in the Easy-Install Bundle for Windows)**
1. Start your I2P Router
2. Download the latest release `.zip` from [Github](https://github.com/eyedeekay/i2p.plugins.firefox/releases) and verify it's hash.
3. Unzip the `.zip` directory
4. run the `i2pbrowser.exe` file inside the unzipped directory.
#### Windows Jpackage: `.msi`
**(Not Recommended! This functionality is already included in the Easy-Install Bundle for Windows)**
1. Start your I2P Router
2. Download the latest release `.msi` from [Github](https://github.com/eyedeekay/i2p.plugins.firefox/releases) and verify it's hash.
3. Run the `.msi` installer(Only needs to be done once per update)
4. Use the start menu shortcut to launch the pre-configured I2P browser
#### Windows Jpackage: `.exe`
**(Not Recommended! This functionality is already included in the Easy-Install Bundle for Windows)**
1. Start your I2P Router
2. Download the latest release `.exe` from [Github](https://github.com/eyedeekay/i2p.plugins.firefox/releases) and verify it's hash.
3. Run the `.msi` installer(Only needs to be done once per update)
4. Use the start menu shortcut to launch the pre-configured I2P browser

View File

@ -1,15 +1,15 @@
#Firefox Configuration Section
#Sat Oct 22 23:43:17 EDT 2022
#Chromium Configuration Section
#Sun Oct 23 11:53:50 EDT 2022
chromium.bins.linux=ungoogled-chromium,chromium,brave,edge,ungoogled-chromium,chrome
chromium.bins.osx=ungoogled-chromium,chromium,brave,edge,ungoogled-chromium,chrome
chromium.bins.windows=ungoogled-chromium.exe,chromium.exe,brave.exe,edge.exe,ungoogled-chromium.exe,chrome.exe
firefox.bins.windows=firefox.exe,firefox-bin.exe,firefox-esr.exe,waterfox.exe,waterfox-bin.exe,librewolf.exe
firefox.bins.linux=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
chromium.paths.windows=/Google/Chrome/Application,/Google/Chrome/Application,/Google/Chrome/Application,/Chromium/Application,/Chromium/Application,/Chromium/Application,/BraveSoftware/Brave Browser/Application,/BraveSoftware/Brave Browser/Application,/BraveSoftware/Brave Browser/Application,/Microsoft/Edge/Application,/Microsoft/Edge/Application
firefox.paths.windows=/home/idk/OneDrive/Desktop/Tor Browser/Browser,/home/idk/Desktop/Tor Browser/Browser,Mozilla Firefox,Mozilla Firefox,Waterfox,Waterfox,Librewolf
firefox.paths.osx=/Applications/Tor Browser.app/Contents/MacOS,/Applications/Firefox.app/Contents/MacOS,/Applications/Waterfox.app/Contents/MacOS,/Applications/Librewolf.app/Contents/MacOS
chromium.bins.linux=ungoogled-chromium,chromium,brave,edge,ungoogled-chromium,chrome
firefox.bins.osx=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
chromium.paths.osx=/Applications/Chromium.app/Contents/MacOS,/Applications/Chrome.app/Contents/MacOS,/Applications/Brave.app/Contents/MacOS
chromium.paths.linux=/usr/bin,/usr/local/bin,/opt/chromium/bin,/snap/bin
chromium.paths.osx=/Applications/Chromium.app/Contents/MacOS,/Applications/Chrome.app/Contents/MacOS,/Applications/Brave.app/Contents/MacOS
chromium.paths.windows=C\:/Users/user/AppData/Local/Google/Chrome/Application,C\:/Program Files/Google/Chrome/Application,C\:/Program Files (x86)/Google/Chrome/Application,C\:/Users/user/AppData/Local/Chromium/Application,C\:/Program Files/Chromium/Application,C\:/Program Files (x86)/Chromium/Application,C\:/Users/user/AppData/Local/BraveSoftware/Brave Browser/Application,C\:/Program Files/BraveSoftware/Brave Browser/Application,C\:/Program Files (x86)/BraveSoftware/Brave Browser/Application,C\:/Program Files (x86)/Microsoft/Edge/Application,C\:/Program Files/Microsoft/Edge/Application
firefox.bins.linux=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
firefox.bins.osx=firefox,firefox-bin,firefox-esr,waterfox,waterfox-bin,librewolf
firefox.bins.windows=firefox.exe,firefox-bin.exe,firefox-esr.exe,waterfox.exe,waterfox-bin.exe,librewolf.exe
firefox.paths.linux=/usr/bin,/usr/local/bin,/opt/firefox/bin,/snap/bin
firefox.paths.osx=/Applications/Tor Browser.app/Contents/MacOS,/Applications/Firefox.app/Contents/MacOS,/Applications/Waterfox.app/Contents/MacOS,/Applications/Librewolf.app/Contents/MacOS
firefox.paths.windows=C\:/Users/user/OneDrive/Desktop/Tor Browser/Browser,C\:/Users/user/Desktop/Tor Browser/Browser,C\:/Program Files/Mozilla Firefox,C\:/Program Files (x86)/Mozilla Firefox,C\:/Program Files/Waterfox,C\:/Program Files (x86)/Waterfox,C\:/Program Files/Librewolf
generic.bins.unix=sensible-browser,xdg-open,x-www-browser,gnome-www-browser,defaultbrowser,dillo,seamonkey,konqueror,galeon,surf,www-browser,links,lynx

7
browser.config.sh Executable file
View File

@ -0,0 +1,7 @@
#! /usr/bin/env sh
rm -f browser.config
ant clangFmt jar
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium -outputconfig -nosystray "http://idk.i2p"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox -outputconfig -nosystray "http://idk.i2p"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -generic -outputconfig -nosystray "http://idk.i2p"

View File

@ -339,7 +339,7 @@ Linux(because the top command will be run and the script will exit).\n\nBoth det
<target name="buildNum">
<buildnumber file="scripts/build.number" />
<property name="release.number" value="1.0.2" />
<property name="release.number" value="1.0.3" />
<exec executable="echo" osfamily="unix">
<arg value="${release.number}-${build.number}" />
</exec>

View File

@ -1,6 +1,6 @@
#! /usr/bin/env sh
export GITHUB_USER=eyedeekay
export GITHUB_REPO=i2p.plugins.firefox
export GITHUB_NAME="Completes features for PWA-Like mode by flattening UI onto one toolbar"
export GITHUB_NAME="Tweaks to how the Tor Browser integration works"
export GITHUB_DESCRIPTION=$(cat CHANGES.md VERSION.md)
export GITHUB_TAG=1.0.2
export GITHUB_TAG=1.0.3

View File

@ -10,6 +10,7 @@ jpackage --verbose \
--linux-shortcut \
--license-file LICENSE.md \
--name i2pbrowser \
--icon src/icon.png \
--app-version "$GITHUB_TAG" \
--input src/build \
--main-jar i2pfirefox.jar \

View File

@ -2,7 +2,8 @@
TORSOCKS=$(which torsocks)
if [ -f "${TORSOCKS}" ]; then
. "${TORSOCKS}" on
#. "${TORSOCKS}" on
echo ""
fi
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"

View File

@ -22,6 +22,7 @@ jpackage --verbose \
--license-file LICENSE.md \
--name i2pbrowser \
--app-version "$GITHUB_TAG" \
--icon src/icon.png \
--input src/build \
--main-jar i2pfirefox.jar \
--main-class net.i2p.i2pfirefox.I2PBrowser

5
gngr.sh Executable file
View File

@ -0,0 +1,5 @@
#! /usr/bin/env sh
rm lib/jars/gngr.jar
mkdir -p lib/jars/
wget -c -O lib/jars/gngr.jar https://github.com/gngrOrg/gngr/releases/download/v0.3.16/gngr-0.3.16.jar

View File

@ -27,6 +27,11 @@
index
</a>
</li>
<li>
<a href="BUILD.html">
BUILD
</a>
</li>
<li>
<a href="CHANGES.html">
CHANGES
@ -34,7 +39,7 @@
</li>
<li>
<a href="CONFIG.html">
CONFIG.html
CONFIG
</a>
</li>
<li>
@ -107,6 +112,16 @@
LICENSE
</a>
</li>
<li>
<a href="LINUX.html">
LINUX
</a>
</li>
<li>
<a href="OSX.html">
OSX
</a>
</li>
<li>
<a href="PACKAGES.html">
PACKAGES
@ -132,6 +147,11 @@
VERSION
</a>
</li>
<li>
<a href="WINDOWS.html">
WINDOWS
</a>
</li>
</ul>
<br>
<a href="#hidenav">
@ -147,7 +167,11 @@
i2p.plugins.firefox
</h1>
<p>
A port of the batch scripts from i2p.firefox to Java.
A port of the batch scripts from
<code>
i2p.firefox
</code>
to Java.
</p>
<p>
<strong>
@ -243,9 +267,47 @@
<h3>
Using a Binary
</h3>
<pre><code class="language-sh">
mkdir ~/tmp-i2pfirefox &amp;&amp; cd ~/tmp-i2pfirefox
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.2/i2pfirefox.zip
<p>
For platform specific instructions, see
</p>
<ul>
<li>
<a href="LINUX.md">
LINUX.md
</a>
/
<a href="LINUX.html">
LINUX.html
</a>
</li>
<li>
<a href="OSX.md">
OSX.md
</a>
/
<a href="OSX.html">
OSX.html
</a>
</li>
<li>
<a href="WINDOWS.md">
WINDOWS.md
</a>
/
<a href="WINDOWS.html">
WINDOWS.html
</a>
</li>
</ul>
<h4>
All platforms, using a zip:
<code>
.zip
</code>
and a non-bundled Java
</h4>
<pre><code class="language-sh">mkdir ~/tmp-i2pfirefox &amp;&amp; cd ~/tmp-i2pfirefox
wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/1.0.3/i2pfirefox.zip
unzip i2pfirefox.zip
./i2pfirefox.cmd
@ -253,391 +315,6 @@ unzip i2pfirefox.zip
./i2pchromium.cmd
</code></pre>
<h3>
Build Dependencies
</h3>
<p>
You will need
<code>
ant
</code>
and java
<code>
java
</code>
and for building the jar. You will need
<code>
jpackage
</code>
for many of the potential build targets. I&rsquo;ve been using Java 17
on Debian mostly, on Debian and Ubuntu, install the dependencies with:
</p>
<pre><code class="language-sh">sudo apt-get install openjdk-17* ant
</code></pre>
<p>
Some of the targets use scripts written in Go to help generate resources. If
you want to update the profiles, you will need them. To install Go on Debian
and Ubuntu:
</p>
<pre><code class="language-sh">sudo apt-get install golang-go
</code></pre>
<p>
Add
<code>
$HOME/go/bin
</code>
to your
<code>
$PATH
</code>
so
<code>
ant
</code>
can find Go applications.
</p>
<p>
<code>
export PATH=$PATH:$HOME/go/bin
</code>
</p>
<p>
Then use Go to download the applications you need and add them to
<code>
$HOME/go/bin
</code>
.
</p>
<p>
If you want to build the Chromium profiles you will need a Go application
called
<code>
crx3
</code>
which is used to interact with the Chrome app store to download
and update extensions.
</p>
<pre><code class="language-sh">go install github.com/mediabuyerbot/go-crx3/crx3@latest
</code></pre>
<p>
Another Go application, called
<code>
amo-version
</code>
, is used to fetch extensions from addons.mozilla.org.
Like the Chrome profiles, generating the Firefox profiles requires this application. If you don&rsquo;t
want to update the profiles, you don&rsquo;t need it.
</p>
<pre><code class="language-sh">go install github.com/eyedeekay/amo-version@latest
</code></pre>
<p>
One last Go application, called
<code>
dzip
</code>
is used to generate zip files deterministically for
redistribution.
</p>
<pre><code class="language-sh">go install github.com/delicb/dzip@latest
</code></pre>
<p>
If you don&rsquo;t want to use it, you can work around it by creating a file called
<code>
dzip
</code>
in
<code>
/usr/local/bin/dzip
</code>
and adding the contents:
</p>
<pre><code class="language-sh">#! /usr/bin/env sh
zip -r $@
</code></pre>
<p>
This will break deterministic builds, but for testing it will continue to work. More elaborate
scripts or other deterministic zip utilities can be easily substituted in by placing them
in the
<code>
$PATH
</code>
under the name
<code>
dzip
</code>
.
</p>
<p>
For Fedora, use Yum, for Arch use pacman or something else but make sure to tell everyone
about it. Once you have that installed, when building, make sure to add
<code>
$GOPATH/bin/
</code>
to your
<code>
$PATH
</code>
.
</p>
<pre><code class="language-sh">export PATH=$PATH:$HOME/go/bin
</code></pre>
<p>
Will almost always work.
</p>
<h3>
Building
</h3>
<p>
This is not actually a plugin yet, but it will be soon. The important bit is the jar.
To generate that, you can either generate the full plugin, which will not work but
produces the jar as a by-product, or you can:
</p>
<pre><code class="language-sh">
ant jar
</code></pre>
<p>
To build just the jar. You&rsquo;ll know it worked if you can:
</p>
<pre><code class="language-sh">
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PFirefox
</code></pre>
<p>
and a new Firefox instance comes up with a fresh profile, ready-to-use for I2P browsing.
</p>
<p>
The cooler thing you can do with it is add it to an I2P distribution and somewhere in it,
add a UI element that triggers something along the lines of this:
</p>
<pre><code class="language-java">
// Firefox Example
if (i2pIsRunning()) {
logger.warning(&quot;I2P is already running&quot;);
System.out.println(&quot;I2PFirefox&quot;);
I2PFirefox i2pFirefox = new I2PFirefox();
i2pFirefox.launch();
}
</code></pre>
<pre><code class="language-java">
// Chromium Example
if (i2pIsRunning()) {
logger.warning(&quot;I2P is already running&quot;);
System.out.println(&quot;I2PChromium&quot;);
I2PChromium i2pChromium = new I2PChromium();
i2pChromium.launch();
}
</code></pre>
<pre><code class="language-java">
// Auto-Select Example, chooses Firefox first, then Chromium
if (i2pIsRunning()) {
logger.warning(&quot;I2P is already running&quot;);
System.out.println(&quot;I2PBrowser&quot;);
I2PBrowser i2pBrowser = new I2PBrowser();
/*
* toggle chromium to the top of the order by doing:
I2PBrowser.chromiumFirst = true;
*
*/
i2pBrowser.launch(privateBrowsing);
}
</code></pre>
<p>
to add a browser management tool to it.
</p>
<h3>
Browser Discovery Methods
</h3>
<p>
This tool looks for browsers on the host system, creates a workspace to use for I2P
purposes, and launches the browser inside of that workspace. The details of the
workspace vary from browser to browser but roughly corresponds to a browser profile.
In order to be successful this tool uses 3 main types of browser discovery methods,
in this order:
</p>
<ol>
<li>
&ldquo;Local&rdquo; discovery, where a browser is in a subdirectory of the directory where you
ran the launcher. This will only happen if the user unpacked a portable browser into
the same directory where they ran the launcher.
</li>
<li>
&ldquo;Path-Based&rdquo; discovery, where it scans common browser installation directories
until it finds one which it can use. On Unix, it simply scans the directories on the
<code>
PATH
</code>
for a browser it knows about. On Windows, default paths to browser install
directories are hard-coded and included in the binary. This is what usually happens.
</li>
<li>
&ldquo;System-Based&rdquo; discovery, where it defers to the host system to make a choice
about the browser and counts on browser vendors to honor the system proxy environment
variables. This is a catch-all solution which works with most browsers, but does
not apply any customizations.
</li>
</ol>
<p>
There is a little subtlety here though.
</p>
<ul>
<li>
The path to Edgium on Windows will
<strong>
always
</strong>
resolve during path-based discovery,
resulting in a positive test for Chromium when launching the browser in auto-select
mode. So Windows will never reach stage 3 unless expressly forced to. If Firefox or
a variant is installed, it will be chosen before Edgium unless directed otherwise.
</li>
<li>
Even though it will launch you into Edgium if it has no other choice, I recommend
you do not use it. Edgium will in a constant, incessant way try to induce you to
share your behavior with Microsoft. If you try to resist this, it negatively affects
the performance of the browser. Google also does this with Chrome, ant this negatively
affects Chrome performance too, but less than with Edgium. TL:DR Edgium sucks and is
pointless and terrible. Literally any other browser would be better.
</li>
<li>
Linux is unaware of a Tor Browser path because Tor Browser is rarely, if ever,
installed on-path. What is on path is virtually always a wrapper for Tor Browser
which is installed either as the main user or it&rsquo;s own user. Linux will only use
Tor Browser if it&rsquo;s discovered in &ldquo;Local&rdquo; mode. To set this up automatically, you
can
<code>
cd
</code>
to the
<code>
I2P
</code>
directory where you unpacked the
<code>
.tar.gz
</code>
file, and run the
<code>
./lib/torbrowser.sh
</code>
script from there.
</li>
<li>
I really only test Phase 3 with Dillo and Edgium.
<strong>
YMMV.
</strong>
</li>
</ul>
<h3>
Usability vs Strict
</h3>
<p>
This is basically a profile-management tool geared toward minimizing the
differences between browser users which are passively discernible while
they are browsing I2P. It assumes that they are part of a highly fragmented
browsing environment where they are already unique, and therefore consolidation
on configuration is a goal. However, this goal sometimes also conflicts with
usability. To allow users a safe set of choices, we offer &ldquo;Coarse&rdquo; configuration
in 2 modes. We recommend that you do not deviate from these configurations if
you have browser application fingerprinting as a concern.
</p>
<h4>
Usability Mode
</h4>
<p>
TODO: description
</p>
<p>
Pros: Allows a restricted subset of Javascript
Pros: Less likely to try and reach the clearnet
</p>
<p>
Cons: Looks very different from Tor Browser
Cons: Plugin updates can create temporary uniqueness
</p>
<h5>
Usability Extension Set
</h5>
<ul>
<li>
<strong>
I2P In Private Browsing
</strong>
</li>
<li>
<strong>
uMatrix
</strong>
</li>
<li>
<strong>
jsRestrictor
</strong>
</li>
<li>
<strong>
LocalCDN
</strong>
</li>
<li>
<strong>
Onion in Container Tabs
</strong>
</li>
<li>
<strong>
HTTPS EveryWhere
</strong>
in some configurations
</li>
</ul>
<h5>
Usability user.js characteristics
</h5>
<p>
TODO: Summarize differences
</p>
<h4>
Strict Mode
</h4>
<p>
TODO: description
</p>
<p>
Pros: Does not allow Javascript by default
Pros: Looks a lot like Tor Browser especially if you&rsquo;re using Tor Browser
</p>
<p>
Cons: More work to use
Cons: Temporary uniqueness can be created by enabling Javascript for specific sites
Cons: More likely to try and reach the clearnet
</p>
<h5>
Strict Extension Set
</h5>
<ul>
<li>
<strong>
NoScript
</strong>
</li>
<li>
<strong>
I2P In Private Browsing
</strong>
</li>
<li>
<strong>
HTTPS EveryWhere
</strong>
in some configurations
</li>
</ul>
<h5>
Strict user.js characteristics
</h5>
<p>
TODO: Summarize differences
</p>
<div id="sourcecode">
<span id="sourcehead">
<strong>

View File

@ -5,6 +5,7 @@ jpackage \
--type dmg \
--name i2pbrowser \
--app-version "$GITHUB_TAG" \
--icon src/icon.png \
--input src/build \
--main-jar i2pfirefox.jar \
--main-class net.i2p.i2pfirefox.I2PBrowser

View File

@ -4,8 +4,12 @@
ant distclean clangFmt versionMd
./javadoc.sh
NUMLINE=`grep release.number build.xml | head -n 1`
READMELINE=`grep 'i2p.plugins.firefox/releases/download' README.md`
READMELINE=`grep 'i2p.plugins.firefox/releases/download' README.md | grep i2pfirefox`
sed -i "s|${READMELINE}|wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/${GITHUB_TAG}/i2pfirefox.zip|g" README.md
READMELINE=`grep 'i2p.plugins.firefox/releases/download' LINUX.md | grep i2pbrowser`
sed -i "s|${READMELINE}|wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/${GITHUB_TAG}/i2pbrowser.zip|g" LINUX.md
READMELINE=`grep 'i2p.plugins.firefox/releases/download' OSX.md | grep i2pfirefox`
sed -i "s|${READMELINE}|wget https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/${GITHUB_TAG}/i2pfirefox.zip|g" OSX.md
sed -i "s|${NUMLINE}| <property name=\"release.number\" value=\"$GITHUB_TAG\" />|g" build.xml
edgar && git push --all
ant distclean tarball versionMd jar freeZip jpackage debian fedora

View File

@ -2,12 +2,12 @@
. ./config.sh
./preprelease.sh
./profiles-upload.sh
github-release release --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \
--name "${GITHUB_NAME}" \
--description "${GITHUB_DESCRIPTION}" \
--tag "${GITHUB_TAG}"; true
./profiles-upload.sh
sleep 2s
github-release edit --user "${GITHUB_USER}" \
--repo "${GITHUB_REPO}" \

View File

@ -1,3 +1,3 @@
#Build Number for ANT. Do not edit!
#Sun Oct 23 01:34:16 EDT 2022
build.number=130
#Mon Oct 24 00:28:56 EDT 2022
build.number=141

Binary file not shown.

View File

@ -1,5 +1,5 @@
Profile Version
===============
1.0.2-129
1.0.3-140

View File

@ -1,5 +1,5 @@
Profile Version
===============
1.0.2-129
1.0.3-140

Binary file not shown.

View File

@ -1,5 +1,5 @@
Profile Version
===============
1.0.2-129
1.0.3-140

View File

@ -1,5 +1,5 @@
Profile Version
===============
1.0.2-129
1.0.3-140

View File

@ -107,8 +107,8 @@ public class I2PChromium extends I2PCommonBrowser {
if (chromiumPathsProp != null)
if (!chromiumPathsProp.equals(""))
return chromiumPathsProp.split(",");
return new String[] {"ungoogled-chromium", "chromium", "brave", "edge",
"ungoogled-chromium", "chrome"};
return new String[] {
"ungoogled-chromium", "chromium", "brave", "edge", "msedge", "chrome"};
}
private static String[] FIND_CHROMIUM_SEARCH_PATHS_UNIX() {
@ -156,6 +156,14 @@ public class I2PChromium extends I2PCommonBrowser {
String programFiles = System.getenv("ProgramFiles");
String localAppData = System.getenv("LOCALAPPDATA");
String programFiles86 = System.getenv("ProgramFiles(x86)");
if (programFiles == null)
programFiles = "C:/Program Files/";
if (programFiles86 == null)
programFiles86 = "C:/Program Files (x86)/";
if (!isWindows())
localAppData = "C:/Users/user/AppData/Local/";
return new String[] {
new File(localAppData, "/Google/Chrome/Application/").toString(),
new File(programFiles, "/Google/Chrome/Application/").toString(),
@ -178,9 +186,12 @@ public class I2PChromium extends I2PCommonBrowser {
if (chromiumPathsProp != null)
if (!chromiumPathsProp.equals(""))
return chromiumPathsProp.split(",");
return new String[] {
"ungoogled-chromium.exe", "chromium.exe", "brave.exe", "edge.exe",
"ungoogled-chromium.exe", "chrome.exe"};
return new String[] {"ungoogled-chromium.exe",
"chromium.exe",
"brave.exe",
"edge.exe",
"msedge.exe",
"chrome.exe"};
}
private static String[] FIND_CHROMIUM_SEARCH_PATHS_WINDOWS() {
String[] path = chromiumPathsWindows();
@ -233,29 +244,47 @@ public class I2PChromium extends I2PCommonBrowser {
private static String[] NEARBY_CHROMIUM_SEARCH_PATHS() {
// obtain the PLUGIN environment variable
String plugin = System.getenv("PLUGIN");
// search the plugin directory for anything named "ungoogled-chromium",
// "chromium", "brave", "edge", "ungoogled-chromium", "chrome" up to a depth
// of 2 directories deep. list the directories in the plugin directory
if (plugin != null && !plugin.isEmpty()) {
File pluginDir = new File(plugin);
if (pluginDir.exists()) {
File[] pluginDirs = pluginDir.listFiles();
// list the files in the plugin directory
for (File pluginDir1 : pluginDirs) {
File[] pluginFiles = pluginDir1.listFiles();
// list the files in the plugin directory
if (pluginFiles != null) {
for (File pluginFile : pluginFiles) {
if (pluginFile.getName().equals("ungoogled-chromium") ||
pluginFile.getName().equals("chromium") ||
pluginFile.getName().equals("brave") ||
pluginFile.getName().equals("edge") ||
pluginFile.getName().equals("ungoogled-chromium") ||
pluginFile.getName().equals("chrome")) {
return new String[] {pluginFile.getAbsolutePath()};
}
}
}
if (isWindows()) {
File searchResult = searchFile(pluginDir, "ungoogled-chromium.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "brave.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "chromium.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "edge.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "msedge.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "chrome.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
} else {
File searchResult = searchFile(pluginDir, "ungoogled-chromium");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "brave");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "chromium");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "edge");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "msedge");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(pluginDir, "chrome");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
}
}
}
@ -263,23 +292,44 @@ public class I2PChromium extends I2PCommonBrowser {
// list the directories in the user.dir directory
File userDir = new File(System.getProperty("user.dir"));
if (userDir.exists()) {
File[] userDirs = userDir.listFiles();
// list the files in the user.dir directory
for (File userDir1 : userDirs) {
File[] userFiles = userDir1.listFiles();
// list the files in the user.dir directory
if (userFiles != null) {
for (File userFile : userFiles) {
if (userFile.getName().equals("ungoogled-chromium") ||
userFile.getName().equals("chromium") ||
userFile.getName().equals("brave") ||
userFile.getName().equals("edge") ||
userFile.getName().equals("ungoogled-chromium") ||
userFile.getName().equals("chrome")) {
return new String[] {userFile.getAbsolutePath()};
}
}
}
if (isWindows()) {
File searchResult = searchFile(userDir, "ungoogled-chromium.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "brave.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "chromium.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "edge.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "msedge.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "chrome.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
} else {
File searchResult = searchFile(userDir, "ungoogled-chromium");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "brave");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "chromium");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "edge");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "msedge");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "chrome");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
}
}
return new String[] {};
@ -769,12 +819,4 @@ public class I2PChromium extends I2PCommonBrowser {
i2pChromium.launch(privateBrowsing,
visitURL.toArray(new String[visitURL.size()]));
}
private static void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException bad) {
bad.printStackTrace();
throw new RuntimeException(bad);
}
}
}

View File

@ -437,7 +437,7 @@ public class I2PCommonBrowser {
}
return false;
}
private boolean checkifPortIsOccupied(int port, String host) {
public boolean checkifPortIsOccupied(int port, String host) {
try {
Socket socket = new Socket(host, port);
socket.close();
@ -466,4 +466,27 @@ public class I2PCommonBrowser {
}
return val.toString();
}
public static void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException bad) {
bad.printStackTrace();
throw new RuntimeException(bad);
}
}
public static File searchFile(File file, String search) {
if (file.isDirectory()) {
File[] arr = file.listFiles();
for (File f : arr) {
File found = searchFile(f, search);
if (found != null)
return found;
}
} else {
if (file.getName().equals(search)) {
return file;
}
}
return null;
}
}

View File

@ -158,6 +158,13 @@ public class I2PFirefox extends I2PCommonBrowser {
// know for sure.
String programFiles86 = System.getenv("ProgramFiles(x86)");
if (programFiles == null)
programFiles = "C:/Program Files/";
if (programFiles86 == null)
programFiles86 = "C:/Program Files (x86)/";
if (!isWindows())
userHome = "C:/Users/user/";
String[] tbPath = new String[] {
new File(userHome, "/OneDrive/Desktop/Tor Browser/Browser/").toString(),
new File(userHome, "/Desktop/Tor Browser/Browser/").toString()};
@ -230,130 +237,99 @@ public class I2PFirefox extends I2PCommonBrowser {
return FIND_ALL_FIREFOX_SEARCH_PATHS();
}
}
private static String[] NEARBY_FIREFOX_SEARCH_PATHS() {
// obtain the PLUGIN environment variable
String plugin = System.getenv("PLUGIN");
// search the plugin directory for anything named "firefox", "firefox-bin",
// "firefox-esr", "waterfox", "waterfox-bin", "librewolf" up to a depth of 2
// directories deep. list the directories in the plugin directory
if (plugin != null && !plugin.isEmpty()) {
File userDir = new File(plugin);
if (userDir.exists()) {
File[] userDirs = userDir.listFiles();
for (File userDir1 : userDirs) {
File[] userFiles = userDir1.listFiles();
if (userFiles != null) {
for (File userFile : userFiles) {
// logger.info("CHECKING NEARBY" + userFile.getAbsolutePath());
if (userFile.isDirectory()) {
File[] userFiles2 = userFile.listFiles();
for (File userFile2 : userFiles2) {
if (userFile2.isDirectory())
continue;
if (!isWindows()) {
if (userFile2.getName().equals("firefox") ||
userFile2.getName().equals("firefox-bin") ||
userFile2.getName().equals("firefox-esr") ||
userFile2.getName().equals("waterfox") ||
userFile2.getName().equals("waterfox-bin") ||
userFile2.getName().equals("librewolf")) {
return new String[] {userFile2.getAbsolutePath()};
}
} else {
if (userFile2.getName().equals("firefox.exe") ||
userFile2.getName().equals("firefox-bin.exe") ||
userFile2.getName().equals("firefox-esr.exe") ||
userFile2.getName().equals("waterfox.exe") ||
userFile2.getName().equals("waterfox-bin.exe") ||
userFile2.getName().equals("librewolf.exe")) {
return new String[] {userFile2.getAbsolutePath()};
}
}
}
if (!isWindows()) {
if (userFile.getName().equals("firefox") ||
userFile.getName().equals("firefox-bin") ||
userFile.getName().equals("firefox-esr") ||
userFile.getName().equals("waterfox") ||
userFile.getName().equals("waterfox-bin") ||
userFile.getName().equals("librewolf")) {
return new String[] {userFile.getAbsolutePath()};
}
} else {
if (userFile.getName().equals("firefox.exe") ||
userFile.getName().equals("firefox-bin.exe") ||
userFile.getName().equals("firefox-esr.exe") ||
userFile.getName().equals("waterfox.exe") ||
userFile.getName().equals("waterfox-bin.exe") ||
userFile.getName().equals("librewolf.exe")) {
return new String[] {userFile.getAbsolutePath()};
}
}
}
}
}
}
}
// now, do the same thing, but with user.dir instead of plugin
// list the directories in the user.dir directory
userDir = new File(System.getProperty("user.dir"));
if (userDir.exists()) {
File[] userDirs = userDir.listFiles();
// list the files in the user.dir directory
for (File userDir1 : userDirs) {
File[] userFiles = userDir1.listFiles();
if (userFiles != null) {
for (File userFile : userFiles) {
if (userFile.isDirectory()) {
File[] userFiles2 = userFile.listFiles();
for (File userFile2 : userFiles2) {
if (userFile2.isDirectory())
continue;
if (isWindows()) {
if (userFile2.getName().equals("firefox") ||
userFile2.getName().equals("firefox-bin") ||
userFile2.getName().equals("firefox-esr") ||
userFile2.getName().equals("waterfox") ||
userFile2.getName().equals("waterfox-bin") ||
userFile2.getName().equals("librewolf")) {
return new String[] {userFile2.getAbsolutePath()};
}
} else {
if (userFile.getName().equals("firefox.exe") ||
userFile.getName().equals("firefox-bin.exe") ||
userFile.getName().equals("firefox-esr.exe") ||
userFile.getName().equals("waterfox.exe") ||
userFile.getName().equals("waterfox-bin.exe") ||
userFile.getName().equals("librewolf.exe")) {
return new String[] {userFile.getAbsolutePath()};
}
}
}
}
if (!isWindows()) {
if (userFile.getName().equals("firefox") ||
userFile.getName().equals("firefox-bin") ||
userFile.getName().equals("firefox-esr") ||
userFile.getName().equals("waterfox") ||
userFile.getName().equals("waterfox-bin") ||
userFile.getName().equals("librewolf")) {
return new String[] {userFile.getAbsolutePath()};
}
} else {
if (userFile.getName().equals("firefox.exe") ||
userFile.getName().equals("firefox-bin.exe") ||
userFile.getName().equals("firefox-esr.exe") ||
userFile.getName().equals("waterfox.exe") ||
userFile.getName().equals("waterfox-bin.exe") ||
userFile.getName().equals("librewolf.exe")) {
return new String[] {userFile.getAbsolutePath()};
}
}
}
}
if (isWindows()) {
File searchResult = searchFile(userDir, "firefox-esr.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "firefox.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "firefox-bin.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "waterfox.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "waterfox-bin.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "librewolf.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
} else {
File searchResult = searchFile(userDir, "firefox-esr");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "firefox");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "firefox-bin");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "waterfox");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "waterfox-bin");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "librewolf");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
}
}
}
// now, do the same thing, but with user.dir instead of plugin
// list the directories in the user.dir directory
File userDir = new File(System.getProperty("user.dir"));
if (userDir.exists()) {
if (isWindows()) {
File searchResult = searchFile(userDir, "firefox-esr.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "firefox.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "firefox-bin.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "waterfox.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "waterfox-bin.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "librewolf.exe");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
} else {
File searchResult = searchFile(userDir, "firefox-esr");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "firefox");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "firefox-bin");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "waterfox");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "waterfox-bin");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
searchResult = searchFile(userDir, "librewolf");
if (searchResult != null)
return new String[] {searchResult.getAbsolutePath()};
}
}
return new String[] {};
}
private static String[] FIREFOX_FINDER() {
@ -823,12 +799,12 @@ public class I2PFirefox extends I2PCommonBrowser {
visitURL.toArray(new String[visitURL.size()]));
}
private static void sleep(int millis) {
/*private static void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException bad) {
bad.printStackTrace();
throw new RuntimeException(bad);
}
}
}*/
}

View File

@ -213,15 +213,15 @@ public class I2PGenericUnsafeBrowser extends I2PCommonBrowser {
* @since 2.0.0
*/
private static String getDefaultOutOfRegistry(String hkeyquery) {
String defaultValue = registryQuery(hkeyquery, "Default");
String defaultValue = registryQuery(hkeyquery, "(Default)");
if (defaultValue != null) {
if (!defaultValue.equals(""))
return defaultValue.split(" ")[0];
return defaultValue;
} else {
defaultValue = followUserConfiguredBrowserToCommand(hkeyquery);
if (defaultValue != null) {
if (!defaultValue.equals(""))
return defaultValue.split(" ")[0];
return defaultValue;
}
}
return null;
@ -276,7 +276,17 @@ public class I2PGenericUnsafeBrowser extends I2PCommonBrowser {
//
public ProcessBuilder baseProcessBuilder(String[] args) {
String browser = findUnsafeBrowserAnywhere();
String browser = findUnsafeBrowserAnywhere().split(" -")[0].trim();
if (browser == null)
System.exit(1);
if (browser.contains("edge.exe") || browser.contains("msedge.exe")) {
ArrayList<String> argsList = new ArrayList<String>(
Arrays.asList("--user-data-dir=" +
profileDirectory("", "generic", "unsafe", false)));
argsList.addAll(Arrays.asList(args));
args = argsList.toArray(args);
}
if (!browser.isEmpty()) {
int arglength = 0;
if (args != null)
@ -355,63 +365,6 @@ public class I2PGenericUnsafeBrowser extends I2PCommonBrowser {
return runtimeDirectory("");
}
/**
* Waits for an HTTP proxy on port 4444 to be ready.
* Returns false on timeout of 200 seconds.
*
* @return true if the proxy is ready, false if it is not.
* @since 0.0.18
*/
public boolean waitForProxy() { return waitForProxy(DEFAULT_TIMEOUT); }
/**
* Waits for an HTTP proxy on port 4444 to be ready.
* Returns false on timeout of the specified number of seconds.
*
* @param timeout the number of seconds to wait for the proxy to be ready.
* @return true if the proxy is ready, false if it is not.
* @since 0.0.18
*/
public boolean waitForProxy(int timeout) {
return waitForProxy(timeout, 4444);
}
/**
* Waits for an HTTP proxy on the specified port to be ready.
* Returns false on timeout of the specified number of seconds.
*
* @param timeout the number of seconds to wait for the proxy to be ready.
* @param port the port to wait for the proxy to be ready on.
* @return true if the proxy is ready, false if it is not.
* @since 0.0.18
*/
public boolean waitForProxy(int timeout, int port) {
return waitForProxy(timeout, port, "localhost");
}
/**
* Waits for an HTTP proxy on the specified port to be ready.
* Returns false on timeout of the specified number of seconds.
*
* @param timeout the number of seconds to wait for the proxy to be ready.
* @param port the port to wait for the proxy to be ready on.
* @param host the host to wait for the proxy to be ready on.
* @return true if the proxy is ready, false if it is not.
* @since 0.0.18
*/
public boolean waitForProxy(int timeout, int port, String host) {
for (int i = 0; i < timeout; i++) {
if (checkifPortIsOccupied(port, host)) {
return true;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return false;
}
public Process launchAndDetatch(boolean privateWindow, String[] url) {
validateUserDir();
if (waitForProxy()) {
@ -452,14 +405,6 @@ public class I2PGenericUnsafeBrowser extends I2PCommonBrowser {
}
}
private static void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException bad) {
bad.printStackTrace();
throw new RuntimeException(bad);
}
}
private static String ValidURL(String inUrl) {
String[] schemes = {"http", "https"};
for (String scheme : schemes) {
@ -470,15 +415,6 @@ public class I2PGenericUnsafeBrowser extends I2PCommonBrowser {
}
return "";
}
private boolean checkifPortIsOccupied(int port, String host) {
try {
Socket socket = new Socket(host, port);
socket.close();
return true;
} catch (IOException e) {
return false;
}
}
//
public static void main(String[] args) {

View File

@ -1,5 +1,74 @@
package net.i2p.i2pfirefox;
public class I2PPureJavaBrowser {
import java.io.File;
//import org.lobobrowser.main;
public class I2PPureJavaBrowser extends I2PCommonBrowser {
private final int DEFAULT_TIMEOUT = 200;
public static String BROWSER = "";
//
public ProcessBuilder baseProcessBuilder(String[] args) {
return null;
}
/**
* delete the runtime directory
*
* @return true if successful, false if not
*/
public static boolean deleteRuntimeDirectory() {
File rtd = runtimeDirectory(true);
if (rtd.exists()) {
rtd.delete();
return true;
}
return false;
}
/**
* get the runtime directory, creating it if create=true
*
* @param create if true, create the runtime directory if it does not exist
* @return the runtime directory, or null if it could not be created
* @since 0.0.18
*/
public static File runtimeDirectory(boolean create) {
String rtd = runtimeDirectory();
return runtimeDirectory(create, rtd);
}
/**
* get the correct runtime directory
*
* @return the runtime directory, or null if it could not be created or
* found
* @since 0.0.18
*/
public static String runtimeDirectory() {
// get the I2P_BROWSER_DIR environment variable
String rtd = System.getenv("I2P_BROWSER_DIR");
// if it is not null and not empty
if (rtd != null && !rtd.isEmpty()) {
// check if the file exists
File rtdFile = new File(rtd);
if (rtdFile.exists()) {
// if it does, return it
return rtd;
}
}
return runtimeDirectory("");
}
public Process launchAndDetatch(boolean privateWindow, String[] url) {
return null;
}
public void launch(boolean privateWindow, String[] url) {
}
public static void main(String[] args) {
}
}

35
test-chromium.sh Executable file
View File

@ -0,0 +1,35 @@
#! /usr/bin/env sh
ant distclean
ant jar
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile i2p.firefox.usability.profile tor-browser_en-US
echo "Testing Chromium with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium "http://127.0.0.1:7657" 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium "http://idk.i2p" 2> chrome.2.err 1> chrome.2.log
echo "Testing Chromium with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Chromium with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -private "http://127.0.0.1:7657" 2> chrome.4.err 1> chrome.4.log
echo "Chromium tests completed"
sleep 2s
rm -rf i2p.chromium.base.profile i2p.chromium.profile
echo "Testing Chromium with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -usability 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -usability "http://127.0.0.1:7657" 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -usability "http://idk.i2p" 2> chrome.2.err 1> chrome.2.log
echo "Testing Chromium with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -usability "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Chromium with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -chromium -usability -private "http://127.0.0.1:7657" 2> chrome.4.err 1> chrome.4.log
echo "Chromium Usability-Mode tests completed"
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile i2p.firefox.usability.profile

36
test-firefox.sh Executable file
View File

@ -0,0 +1,36 @@
#! /usr/bin/env sh
ant distclean
ant jar
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile i2p.firefox.usability.profile tor-browser_en-US
echo "Testing Firefox with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox 2> fox.0.err 1> fox.0.log
echo "Testing Firefox with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox "http://127.0.0.1:7657" 2> fox.1.err 1> fox.1.log
echo "Testing Firefox with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox "http://idk.i2p" 2> fox.2.err 1> fox.2.log
echo "Testing Firefox with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Firefox with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox -private "http://127.0.0.1:7657" 2> fox.4.err 1> fox.4.log
echo "Firefox tests completed"
sleep 2s
rm -rf i2p.firefox.usability.profile i2p.firefox.profile
echo "Testing Firefox with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox -usability 2> fox.0.err 1> fox.0.log
echo "Testing Firefox with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox -usability "http://127.0.0.1:7657" 2> fox.1.err 1> fox.1.log
echo "Testing Firefox with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox -usability "http://idk.i2p" 2> fox.2.err 1> fox.2.log
echo "Testing Firefox with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox -usability "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Firefox with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox -usability -private "http://127.0.0.1:7657" 2> fox.4.err 1> fox.4.log
echo "Firefox Usability-Mode tests completed"
sleep 2s
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile

19
test-torbrowser.sh Executable file
View File

@ -0,0 +1,19 @@
#! /usr/bin/env sh
ant distclean
ant jar
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile i2p.firefox.usability.profile
./etc/scripts/torbrowser.sh
echo "Testing Firefox with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox 2> fox.0.err 1> fox.0.log
echo "Testing Firefox with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox "http://127.0.0.1:7657" 2> fox.1.err 1> fox.1.log
echo "Testing Firefox with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox "http://idk.i2p" 2> fox.2.err 1> fox.2.log
echo "Testing Firefox with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Firefox with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -firefox -private "http://127.0.0.1:7657" 2> fox.4.err 1> fox.4.log

86
test.sh
View File

@ -3,94 +3,32 @@
ant distclean
ant jar
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile i2p.firefox.usability.profile
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile i2p.firefox.usability.profile tor-browser_en-US
echo "Testing auto-selector with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser 2> auto.0.err 1> auto.0.log
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray 2> auto.0.err 1> auto.0.log
echo "Testing auto-selector with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser "http://127.0.0.1:7657" 2> auto.1.err 1> auto.1.log
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray "http://127.0.0.1:7657" 2> auto.1.err 1> auto.1.log
echo "Testing auto-selector with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser "http://idk.i2p" 2> auto.2.err 1> auto.2.log
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray "http://idk.i2p" 2> auto.2.err 1> auto.2.log
echo "Testing auto-selector with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser "http://127.0.0.1:7657" "http://idk.i2p" 2> auto.3.err 1> auto.3.log
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray "http://127.0.0.1:7657" "http://idk.i2p" 2> auto.3.err 1> auto.3.log
echo "Testing auto-selector with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -private "http://127.0.0.1:7657" 2> auto.4.err 1> auto.4.log
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -private "http://127.0.0.1:7657" 2> auto.4.err 1> auto.4.log
echo "Auto-Selector tests completed"
sleep 2s
rm -rf i2p.chromium.base.profile i2p.chromium.profile
echo "Testing Chromium with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium "http://127.0.0.1:7657" 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium "http://idk.i2p" 2> chrome.2.err 1> chrome.2.log
echo "Testing Chromium with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Chromium with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium -private "http://127.0.0.1:7657" 2> chrome.4.err 1> chrome.4.log
echo "Chromium tests completed"
sleep 2s
rm -rf i2p.chromium.base.profile i2p.chromium.profile
echo "Testing Chromium with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium -usability 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium -usability "http://127.0.0.1:7657" 2> chrome.1.err 1> chrome.1.log
echo "Testing Chromium with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium -usability "http://idk.i2p" 2> chrome.2.err 1> chrome.2.log
echo "Testing Chromium with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium -usability "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Chromium with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -chromium -usability -private "http://127.0.0.1:7657" 2> chrome.4.err 1> chrome.4.log
echo "Chromium Usability tests completed"
sleep 2s
rm -rf i2p.firefox.base.profile i2p.firefox.profile
echo "Testing Firefox with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox 2> fox.0.err 1> fox.0.log
echo "Testing Firefox with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox "http://127.0.0.1:7657" 2> fox.1.err 1> fox.1.log
echo "Testing Firefox with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox "http://idk.i2p" 2> fox.2.err 1> fox.2.log
echo "Testing Firefox with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Firefox with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox -private "http://127.0.0.1:7657" 2> fox.4.err 1> fox.4.log
echo "Firefox tests completed"
sleep 2s
rm -rf i2p.firefox.usability.profile i2p.firefox.profile
echo "Testing Firefox with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox -usability 2> fox.0.err 1> fox.0.log
echo "Testing Firefox with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox -usability "http://127.0.0.1:7657" 2> fox.1.err 1> fox.1.log
echo "Testing Firefox with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox -usability "http://idk.i2p" 2> fox.2.err 1> fox.2.log
echo "Testing Firefox with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox -usability "http://127.0.0.1:7657" "http://idk.i2p" 2> fox.3.err 1> fox.3.log
echo "Testing Firefox with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -firefox -usability -private "http://127.0.0.1:7657" 2> fox.4.err 1> fox.4.log
echo "Firefox Usability-Mode tests completed"
sleep 2s
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile
rm -rf i2p.chromium.base.profile i2p.chromium.profile i2p.firefox.base.profile i2p.firefox.profile i2p.firefox.usability.profile
echo "Testing UNSAFE auto-selector with no private and no URL parameters."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -generic 2> gen.0.err 1> gen.0.log
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -generic 2> gen.0.err 1> gen.0.log
echo "Testing UNSAFE auto-selector with local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -generic "http://127.0.0.1:7657" 2> gen.1.err 1> gen.1.log
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -generic "http://127.0.0.1:7657" 2> gen.1.err 1> gen.1.log
echo "Testing UNSAFE auto-selector with remote URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -generic "http://idk.i2p" 2> gen.2.err 1> gen.2.log
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -generic "http://idk.i2p" 2> gen.2.err 1> gen.2.log
echo "Testing UNSAFE auto-selector with remote AND local URL parameter."
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -generic "http://127.0.0.1:7657" "http://idk.i2p" 2> gen.3.err 1> gen.3.log
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -generic "http://127.0.0.1:7657" "http://idk.i2p" 2> gen.3.err 1> gen.3.log
echo "Testing UNSAFE auto-selector with private browsing parameter"
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -generic -private "http://127.0.0.1:7657" 2> gen.4.err 1> gen.4.log
java -cp ./src/build/i2pfirefox.jar net.i2p.i2pfirefox.I2PBrowser -nosystray -generic -private "http://127.0.0.1:7657" 2> gen.4.err 1> gen.4.log
echo "UNSAFE browser tests complete"

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIcBAABCgAGBQJjRyYHAAoJEOU9mJqeLUe/HbIQALBTyEB42g2+Dlufv8fvF2E2
549sCPbkFHzKaH8ECeKfiZZDuTfLUmNUbnYD1/lxJtaUDj+u56sSF5V6us3HBgYN
56Mh+miLv4Am9HEZXwCRtE/kRjbE3yuKjSqYpZkviPsK4PT1fBBg+aMtc8fUZk4y
3BQZsvynie1OH2Qlw4XHMZUbHP7VlEAZCUWZTk8ai+mmqegmjtDc2NMNtZ03BGi7
Rd5U03+9mmVQNiWcJZqZkzQg8x/tPQD0XmMH04mZ71dCukfsun+DykjVGUAktloj
9XJ1aq+c3s4r/GXXXJ4sEnDe1QNBPOgEH5SLSiSAwwl531i5Oh2sO1U2ILC/PsnM
MlZMbypMw2eVGIQgfXrWurWlSvKYw193Y7N4bjvvTQYkxmWWHegKtYj1Jmy5y4+q
KypLjwD7QxDViRiQp5v8vzFAQ/0pacwT6D+r7ugAIrk9jFnl5dnHBDuBNHTdjPOI
oyTnSFJkroMjpdzbDnta74FzyLBWMPPMD3L/LepJLW+iYcJDqDYCffTqCPDjJSco
UgD71EiDSyM77wMKqEFzHzbNdW1Tmd88LoDc/erK9akbX4Xkhve0N/HFr+99c5rH
5EzI2j/N3Kzwom/FYzT8saS5ljRdGD+APi7VKE9budDzlu0ZqIhK/zMIJ//JHi/O
rmxTcTn5TaTfAMGhQUi/
=yI0S
-----END PGP SIGNATURE-----

BIN
tor.keyring Normal file

Binary file not shown.

View File

@ -11,6 +11,7 @@ jpackage \
--win-shortcut-prompt \
--win-per-user-install \
--license-file LICENSE.md \
--icon src/icon.png \
--name i2pbrowser \
--app-version "$GITHUB_TAG" \
--input src/build \

View File

@ -11,6 +11,7 @@ jpackage \
--input src/build \
--main-jar i2pfirefox.jar \
--resource-dir tmp \
--icon src/icon.png \
--main-class net.i2p.i2pfirefox.I2PBrowser
rm -rf tmp
cp -v LICENSE.md i2pbrowser-portable/LICENSE.md

View File

@ -11,6 +11,7 @@ jpackage \
--win-shortcut-prompt \
--win-per-user-install \
--license-file LICENSE.md \
--icon src/icon.png \
--name i2pbrowser \
--app-version "$GITHUB_TAG" \
--input src/build \