/hg/icedtea-web: Added support for http 511 authenticationm, as ...
jvanek at icedtea.classpath.org
jvanek at icedtea.classpath.org
Tue Mar 8 15:44:16 UTC 2016
changeset 074a19daa4d3 in /hg/icedtea-web
details: http://icedtea.classpath.org/hg/icedtea-web?cmd=changeset;node=074a19daa4d3
author: Jiri Vanek <jvanek at redhat.com>
date: Tue Mar 08 16:43:51 2016 +0100
Added support for http 511 authenticationm, as side effect added -browser switch, which enables internal browser as standalone window
diffstat:
ChangeLog | 57 +
NEWS | 2 +
netx/net/sourceforge/jnlp/OptionsDefinitions.java | 4 +-
netx/net/sourceforge/jnlp/cache/ResourceDownloader.java | 15 +
netx/net/sourceforge/jnlp/resources/Messages.properties | 25 +
netx/net/sourceforge/jnlp/runtime/Boot.java | 82 +-
netx/net/sourceforge/jnlp/runtime/html/browser/DocumentChangededListener.java | 48 +
netx/net/sourceforge/jnlp/runtime/html/browser/HtmlBrowserPanel.java | 455 +++++
netx/net/sourceforge/jnlp/runtime/html/browser/LinkingBrowser.java | 111 +
netx/net/sourceforge/jnlp/runtime/html/browser/LinksPanel.java | 246 +++
netx/net/sourceforge/jnlp/security/SecurityDialog.java | 4 +
netx/net/sourceforge/jnlp/security/SecurityDialogs.java | 180 +-
netx/net/sourceforge/jnlp/security/dialogresults/BasicDialogValue.java | 3 +-
netx/net/sourceforge/jnlp/security/dialogresults/YesCancel.java | 2 +-
netx/net/sourceforge/jnlp/security/dialogresults/YesCancelSkip.java | 68 +
netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java | 2 +-
netx/net/sourceforge/jnlp/security/dialogs/InetSecurity511Panel.java | 192 ++
netx/net/sourceforge/jnlp/security/dialogs/SecurityDialogPanel.java | 1 -
netx/net/sourceforge/jnlp/util/UrlUtils.java | 270 ++-
tests/reproducers/simple/Http511/resources/Http511.html | 42 +
tests/reproducers/simple/Http511/resources/Http511.jnlp | 53 +
tests/reproducers/simple/Http511/resources/Http511_applet.jnlp | 58 +
tests/reproducers/simple/Http511/resources/Http511_href.html | 47 +
tests/reproducers/simple/Http511/srcs/Http511.java | 58 +
tests/reproducers/simple/Http511/testcases/Http511Test.java | 772 ++++++++++
tests/test-extensions/net/sourceforge/jnlp/Authentication511Requester.java | 33 +
tests/test-extensions/net/sourceforge/jnlp/ClosingListener.java | 4 +
tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java | 23 +-
tests/test-extensions/net/sourceforge/jnlp/ServerLauncher.java | 90 +-
tests/test-extensions/net/sourceforge/jnlp/TinyHttpdImpl.java | 52 +-
tests/test-extensions/net/sourceforge/jnlp/tools/WaitingForStringProcess.java | 2 +-
31 files changed, 2793 insertions(+), 208 deletions(-)
diffs (truncated from 3718 to 500 lines):
diff -r a35604e217b9 -r 074a19daa4d3 ChangeLog
--- a/ChangeLog Tue Feb 02 17:48:59 2016 +0100
+++ b/ChangeLog Tue Mar 08 16:43:51 2016 +0100
@@ -1,3 +1,60 @@
+2016-03-08 Jiri Vanek <jvanek at redhat.com>
+
+ Added support for http 511 authentication
+ As side effect added -browser switch, which enables internal browser as standalone window
+ * NEWS: mentioned PR878, mentioned -browser switch
+ * netx/net/sourceforge/jnlp/OptionsDefinitions.java: added BROWSER to represent
+ -browser switch
+ * netx/net/sourceforge/jnlp/cache/ResourceDownloader.java: when 511 is encountered,
+ show511Dialogue is called and dialog shown
+ * netx/net/sourceforge/jnlp/resources/Messages.properties: added resource regarding
+ to integrated browser and http 511 dialog messages
+ * netx/net/sourceforge/jnlp/runtime/Boot.java: added reaction to -browser; refactored
+ * netx/net/sourceforge/jnlp/runtime/html/browser/DocumentChangededListener.java:
+ new file, used to notify LinksPannel that Browser changed
+ * netx/net/sourceforge/jnlp/runtime/html/browser/HtmlBrowserPanel.java: dummy
+ implementation of browser based on jeditorpane, to resolve http 511 messages and forms
+ * netx/net/sourceforge/jnlp/runtime/html/browser/LinkingBrowser.java: connected
+ dualpane for Browser and LinksPanel.
+ * netx/net/sourceforge/jnlp/runtime/html/browser/LinksPanel.java: primarily
+ for headless dialogues, extracts links from http communication and prints them out.
+ In Xfull mode allows user to quickly browse out to real browser to resolve http 511
+ * netx/net/sourceforge/jnlp/security/SecurityDialog.java: add http 511 invocation
+ * netx/net/sourceforge/jnlp/security/SecurityDialogs.java: same and reformatted.
+ * netx/net/sourceforge/jnlp/security/dialogresults/BasicDialogValue.java: added
+ SKIP result.
+ * netx/net/sourceforge/jnlp/security/dialogresults/YesCancel.java: constructor
+ made protected to allow inheritance
+ * netx/net/sourceforge/jnlp/security/dialogresults/YesCancelSkip.java: extension
+ of YES CANCEL by SKIP
+ * netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java: button made final
+ * netx/net/sourceforge/jnlp/security/dialogs/InetSecurity511Panel.java:
+ security dialog based on LinkingBrowser
+ * netx/net/sourceforge/jnlp/security/dialogs/SecurityDialogPanel.java:
+ removed unused import
+ * netx/net/sourceforge/jnlp/util/UrlUtils.java: added loadUrl and loadUrlWithInvalidHeader
+ to load content of url negotination. First for URLconection, second for Socket connection
+ * tests/reproducers/simple/Http511/testcases/Http511Test.java: huge reproducer
+ for various http 511 cases
+ * tests/reproducers/simple/Http511/resources/Http511.html:
+ * tests/reproducers/simple/Http511/resources/Http511.jnlp:
+ * tests/reproducers/simple/Http511/resources/Http511_applet.jnlp:
+ * tests/reproducers/simple/Http511/resources/Http511_href.html:
+ * tests/reproducers/simple/Http511/srcs/Http511.java:
+ * tests/test-extensions/net/sourceforge/jnlp/Authentication511Requester.java:
+ interface to summary necessary methods for http 511 authentification
+ * tests/test-extensions/net/sourceforge/jnlp/ClosingListener.java: assasin made
+ accessible
+ * tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java: kill -9
+ again enabled on demand
+ * tests/test-extensions/net/sourceforge/jnlp/ServerLauncher.java: now implements
+ Authentication511Requester
+ * tests/test-extensions/net/sourceforge/jnlp/TinyHttpdImpl.java: can set and use
+ Authentication511Requester
+ * tests/test-extensions/net/sourceforge/jnlp/tools/WaitingForStringProcess.java:
+ output made final
+
+
2016-02-02 Jiri Vanek <jvanek at redhat.com>
maven artifacts version substituted to contains only major version
diff -r a35604e217b9 -r 074a19daa4d3 NEWS
--- a/NEWS Tue Feb 02 17:48:59 2016 +0100
+++ b/NEWS Tue Mar 08 16:43:51 2016 +0100
@@ -18,6 +18,7 @@
* PR2690 - Can't run BOM into JNLP file
* PR2669 - remove bash-specific syntax from top level Makefile.am
* PR2489 - various NPEs when codebase is null
+* PR878 - (http-511) Handle HTTP error 511 Network Authentication Required (standard secure proxy authentification/captive portal detection)
* comments in deployment.properties now should persists load/save
* fixed bug in caching of files with query
* fixed issues with recreating of existing shortcut
@@ -40,6 +41,7 @@
- fixed issue with -html receiving garbage in width and height
- main-class attribute trimmed by default
- in strict mode, main-class attribute checked for invalid characters
+ - added -browser switch as workaround around most uttermost http authentications cornercases
* PolicyEditor
- Entry list is sorted, entries will appear with consistent ordering
- file flag made to work when used standalone
diff -r a35604e217b9 -r 074a19daa4d3 netx/net/sourceforge/jnlp/OptionsDefinitions.java
--- a/netx/net/sourceforge/jnlp/OptionsDefinitions.java Tue Feb 02 17:48:59 2016 +0100
+++ b/netx/net/sourceforge/jnlp/OptionsDefinitions.java Tue Mar 08 16:43:51 2016 +0100
@@ -76,6 +76,7 @@
TRUSTNONE("-Xtrustnone","BOTrustnone"),
JNLP("-jnlp","BOJnlp", NumberOfArguments.ONE),
HTML("-html","BOHtml", NumberOfArguments.ONE_OR_MORE),
+ BROWSER("-browser", "BrowserArg", NumberOfArguments.ONE_OR_MORE),
//itweb settings
LIST("-list", "IBOList"),
GET("-get", "name", "IBOGet", NumberOfArguments.ONE_OR_MORE),
@@ -217,7 +218,8 @@
OPTIONS.OFFLINE,
OPTIONS.TRUSTNONE,
OPTIONS.JNLP,
- OPTIONS.HTML
+ OPTIONS.HTML,
+ OPTIONS.BROWSER
});
}
diff -r a35604e217b9 -r 074a19daa4d3 netx/net/sourceforge/jnlp/cache/ResourceDownloader.java
--- a/netx/net/sourceforge/jnlp/cache/ResourceDownloader.java Tue Feb 02 17:48:59 2016 +0100
+++ b/netx/net/sourceforge/jnlp/cache/ResourceDownloader.java Tue Mar 08 16:43:51 2016 +0100
@@ -31,6 +31,8 @@
import net.sourceforge.jnlp.Version;
import net.sourceforge.jnlp.runtime.JNLPRuntime;
import net.sourceforge.jnlp.security.ConnectionFactory;
+import net.sourceforge.jnlp.security.SecurityDialogs;
+import net.sourceforge.jnlp.security.dialogs.InetSecurity511Panel;
import net.sourceforge.jnlp.util.HttpUtils;
import net.sourceforge.jnlp.util.logging.OutputController;
@@ -261,6 +263,18 @@
requestProperties.put("Accept-Encoding", "pack200-gzip, gzip");
UrlRequestResult response = getUrlResponseCodeWithRedirectonResult(url, requestProperties, requestMethod);
+ if (response.result == 511) {
+ if (!InetSecurity511Panel.isSkip()) {
+
+ boolean result511 = SecurityDialogs.show511Dialogue(resource);
+ if (!result511) {
+ throw new RuntimeException("Terminated on users request after encauntering 'http 511 authentication'.");
+ }
+ //try again, what to do with original resource was nowhere specified
+ i--;
+ continue;
+ }
+ }
if (response.shouldRedirect()) {
if (response.URL == null) {
OutputController.getLogger().log(OutputController.Level.ERROR_DEBUG, "Although " + resource.toString() + " got redirect " + response.result + " code for " + requestMethod + " request for " + url.toExternalForm() + " the target was null. Not following");
@@ -450,6 +464,7 @@
*/
static class UrlRequestResult {
+ //http response code
int result = HttpURLConnection.HTTP_OK;
URL URL;
diff -r a35604e217b9 -r 074a19daa4d3 netx/net/sourceforge/jnlp/resources/Messages.properties
--- a/netx/net/sourceforge/jnlp/resources/Messages.properties Tue Feb 02 17:48:59 2016 +0100
+++ b/netx/net/sourceforge/jnlp/resources/Messages.properties Tue Mar 08 16:43:51 2016 +0100
@@ -27,6 +27,9 @@
ButNo=No
BUTControlledBy=Controlled by {0}
BUTmodified=modified
+BUTback=Back
+BUTforward=Forward
+BUTreload=Reload
CertWarnRunTip=Trust this applet and run with full permissions
CertWarnSandboxTip=Do not trust this applet and run with restricted permissions
@@ -539,6 +542,28 @@
PAPstdinInfo=Type NAME space PASSWORD. Sorry, no spaces in name, no security, keep your screen safe:
HDwrongValue=Probably wrong value?
+# HTTP 511
+Headless511line0=*** Found urls ***
+Headless511line1=Unluckily ITW do not support 511 in headless mode directly.
+Headless511line2=One of above urls when visited externally, will solve the authentication for you. Then Type answer.
+Headless511line3=If you are desperate, In Xless mode try lynx terminal browser, in Xfull - browser less mode try ITW''s `javaws {0}`.
+Exit511=Exit IcedTea-Web
+Ignore511=Ignore in this session
+Header511=<h2>HTTP 511 - Network Authentication Required</h2> <p>You can fill the form in below panel, or try links second tab to proceed via browser</p><a href=''{0}''>What is 511 Network Authentication Required<a/>
+
+# Browser
+BrowserGoTo=Go to:
+BrowserSource=Source
+BrowserSocket=Use direct socket conenction
+BrowserSocketHelp=<html>When selected, direct socket connection is opened to url. You may see headers and other strange stuff.<br/>However, some conenctions may fail unexpectedly</html>
+BrowserOpenExternal=Open in external browser
+BrowserOpeninternal=Open in integrated browse
+BrowserCopyUrlToClip=Copy to clipboard
+BrowserClearAll=Clear all
+BrowserWarningLine1=WARNING this is html 3.2 comatible browser, not intended for casual web browsing!
+BrowserWarningLine2=Provided without any warranty!
+BrowserArg=Launch embeded browser. Use in great need only!
+
# Deployment Configuration messages
DCIncorrectValue=Property "{0}" has incorrect value "{1}". Possible values {2}.
DCInternal=Internal error: {0}
diff -r a35604e217b9 -r 074a19daa4d3 netx/net/sourceforge/jnlp/runtime/Boot.java
--- a/netx/net/sourceforge/jnlp/runtime/Boot.java Tue Feb 02 17:48:59 2016 +0100
+++ b/netx/net/sourceforge/jnlp/runtime/Boot.java Tue Mar 08 16:43:51 2016 +0100
@@ -13,7 +13,6 @@
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
package net.sourceforge.jnlp.runtime;
import java.io.File;
@@ -47,24 +46,23 @@
import sun.awt.SunToolkit;
import static net.sourceforge.jnlp.runtime.Translator.R;
+import net.sourceforge.jnlp.runtime.html.browser.LinkingBrowser;
/**
- * This is the main entry point for the JNLP client. The main
- * method parses the command line parameters and loads a JNLP
- * file into the secure runtime environment. This class is meant
- * to be called from the command line or file association; to
- * initialize the netx engine from other code invoke the
- * {@link JNLPRuntime#initialize} method after configuring
- * the runtime.
+ * This is the main entry point for the JNLP client. The main method parses the
+ * command line parameters and loads a JNLP file into the secure runtime
+ * environment. This class is meant to be called from the command line or file
+ * association; to initialize the netx engine from other code invoke the
+ * {@link JNLPRuntime#initialize} method after configuring the runtime.
*
- * @author <a href="mailto:jmaxwell at users.sourceforge.net">Jon A. Maxwell (JAM)</a> - initial author
+ * @author <a href="mailto:jmaxwell at users.sourceforge.net">Jon A. Maxwell
+ * (JAM)</a> - initial author
* @version $Revision: 1.21 $
*/
public final class Boot implements PrivilegedAction<Void> {
// todo: decide whether a spawned netx (external launch)
// should inherit the same options as this instance (store argv?)
-
public static final String name = Boot.class.getPackage().getImplementationTitle();
public static final String version = Boot.class.getPackage().getImplementationVersion();
@@ -93,6 +91,7 @@
/**
* Launch the JNLP file specified by the command-line arguments.
+ *
* @param argsIn launching arguments
*/
public static void main(String[] argsIn) throws UnevenParameterException {
@@ -108,7 +107,7 @@
if (optionParser.hasOption(OptionsDefinitions.OPTIONS.HEADLESS)) {
JNLPRuntime.setHeadless(true);
}
-
+
DeploymentConfiguration.move14AndOlderFilesTo15StructureCatched();
if (optionParser.hasOption(OptionsDefinitions.OPTIONS.VIEWER)) {
@@ -119,7 +118,7 @@
OutputController.getLogger().log(OutputController.Level.ERROR_ALL, e);
}
}
-
+
if (optionParser.hasOption(OptionsDefinitions.OPTIONS.VERSION)) {
OutputController.getLogger().printOutLn(nameAndVersion);
JNLPRuntime.exit(0);
@@ -147,7 +146,7 @@
}
if (optionParser.hasOption(OptionsDefinitions.OPTIONS.ABOUT)) {
- handleAbout();
+ handleAbout();
if (optionParser.hasOption(OptionsDefinitions.OPTIONS.HEADLESS)) {
JNLPRuntime.exit(0);
} else {
@@ -162,15 +161,13 @@
}
}
-
if (optionParser.hasOption(OptionsDefinitions.OPTIONS.UPDATE)) {
int value = Integer.parseInt(optionParser.getParam(OptionsDefinitions.OPTIONS.UPDATE));
JNLPRuntime.setDefaultUpdatePolicy(new UpdatePolicy(value * 1000l));
}
-
- if (optionParser.hasOption(OptionsDefinitions.OPTIONS.NOUPDATE))
+ if (optionParser.hasOption(OptionsDefinitions.OPTIONS.NOUPDATE)) {
JNLPRuntime.setDefaultUpdatePolicy(UpdatePolicy.NEVER);
-
+ }
if (optionParser.hasOption(OptionsDefinitions.OPTIONS.NOFORK)) {
JNLPRuntime.setForksAllowed(false);
}
@@ -189,10 +186,17 @@
if (optionParser.hasOption(OptionsDefinitions.OPTIONS.REDIRECT)) {
JNLPRuntime.setAllowRedirect(true);
}
+
+ //if it is browser go by ots own, otherwise procedd with normal ITW logic
+ if (optionParser.hasOption(OptionsDefinitions.OPTIONS.BROWSER)) {
+ String url = optionParser.getParam(OptionsDefinitions.OPTIONS.BROWSER);
+ LinkingBrowser.showStandAloneWindow(url, false);
+ } else {
- JNLPRuntime.setInitialArgments(Arrays.asList(argsIn));
+ JNLPRuntime.setInitialArgments(Arrays.asList(argsIn));
- AccessController.doPrivileged(new Boot());
+ AccessController.doPrivileged(new Boot());
+ }
}
@@ -200,16 +204,16 @@
final TextsProvider helpMessagesProvider = new JavaWsTextsProvider("utf-8", new PlainTextFormatter(), true, true);
String helpMessage = "\n";
- if (JNLPRuntime.isDebug()){
+ if (JNLPRuntime.isDebug()) {
helpMessage += helpMessagesProvider.writeToString();
} else {
helpMessage = helpMessage
- + helpMessagesProvider.prepare().getSynopsis()
- + helpMessagesProvider.getFormatter().getNewLine()
- + helpMessagesProvider.prepare().getOptions()
- + helpMessagesProvider.getFormatter().getNewLine();
+ + helpMessagesProvider.prepare().getSynopsis()
+ + helpMessagesProvider.getFormatter().getNewLine()
+ + helpMessagesProvider.prepare().getOptions()
+ + helpMessagesProvider.getFormatter().getNewLine();
}
-
+
OutputController.getLogger().printOut(helpMessage);
}
@@ -266,7 +270,7 @@
location = getMainFile();
} catch (InvalidArgumentException e) {
OutputController.getLogger().log(e);
- fatalError("Invalid argument: "+e);
+ fatalError("Invalid argument: " + e);
}
if (location == null) {
@@ -279,16 +283,15 @@
URL url = null;
try {
- if (new File(location).exists())
- // TODO: Should be toURI().toURL()
+ if (new File(location).exists()) // TODO: Should be toURI().toURL()
+ {
url = new File(location).toURL(); // Why use file.getCanonicalFile?
- else
- if (ServiceUtil.getBasicService() != null){
- OutputController.getLogger().log("Warning, null basicService");
- url = new URL(ServiceUtil.getBasicService().getCodeBase(), location);
- } else {
- url = new URL(location);
- }
+ } else if (ServiceUtil.getBasicService() != null) {
+ OutputController.getLogger().log("Warning, null basicService");
+ url = new URL(ServiceUtil.getBasicService().getCodeBase(), location);
+ } else {
+ url = new URL(location);
+ }
} catch (Exception e) {
OutputController.getLogger().log(e);
fatalError("Invalid jnlp file " + location);
@@ -301,12 +304,11 @@
* Gets the JNLP file from the command line arguments, or exits upon error.
*/
private static String getMainFile() throws InvalidArgumentException {
- if (optionParser.getMainArgs().size() > 1
+ if (optionParser.getMainArgs().size() > 1
|| (optionParser.mainArgExists() && optionParser.hasOption(OptionsDefinitions.OPTIONS.JNLP))
|| (optionParser.mainArgExists() && optionParser.hasOption(OptionsDefinitions.OPTIONS.HTML))
- || (optionParser.hasOption(OptionsDefinitions.OPTIONS.JNLP) && optionParser.hasOption(OptionsDefinitions.OPTIONS.HTML))
- ) {
- throw new InvalidArgumentException(optionParser.getMainArgs().toString());
+ || (optionParser.hasOption(OptionsDefinitions.OPTIONS.JNLP) && optionParser.hasOption(OptionsDefinitions.OPTIONS.HTML))) {
+ throw new InvalidArgumentException(optionParser.getMainArgs().toString());
} else if (optionParser.hasOption(OptionsDefinitions.OPTIONS.JNLP)) {
return optionParser.getParam(OptionsDefinitions.OPTIONS.JNLP);
} else if (optionParser.hasOption(OptionsDefinitions.OPTIONS.HTML)) {
@@ -342,5 +344,5 @@
return ParserSettings.setGlobalParserSettingsFromOptionParser(optionParser);
}
-
+
}
diff -r a35604e217b9 -r 074a19daa4d3 netx/net/sourceforge/jnlp/runtime/html/browser/DocumentChangededListener.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/netx/net/sourceforge/jnlp/runtime/html/browser/DocumentChangededListener.java Tue Mar 08 16:43:51 2016 +0100
@@ -0,0 +1,48 @@
+/*
+ Copyright (C) 2012 Red Hat, Inc.
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 2.
+
+IcedTea is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING. If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version.
+*/
+
+package net.sourceforge.jnlp.runtime.html.browser;
+
+import java.net.URL;
+
+public interface DocumentChangededListener {
+
+ public void documentChangeded(String current);
+ public void addressChangeded(String url);
+ public void addressChangeded(URL url);
+
+}
diff -r a35604e217b9 -r 074a19daa4d3 netx/net/sourceforge/jnlp/runtime/html/browser/HtmlBrowserPanel.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/netx/net/sourceforge/jnlp/runtime/html/browser/HtmlBrowserPanel.java Tue Mar 08 16:43:51 2016 +0100
@@ -0,0 +1,455 @@
+/*
+ Copyright (C) 2012 Red Hat, Inc.
+
+ This file is part of IcedTea.
+
+ IcedTea is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, version 2.
+
+ IcedTea is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with IcedTea; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from
+ or based on this library. If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so. If you do not wish to do so, delete this
+ exception statement from your version.
+ */
+package net.sourceforge.jnlp.runtime.html.browser;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.JToggleButton;
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkListener;
+import javax.swing.text.html.HTMLDocument;
+import net.sourceforge.jnlp.runtime.JNLPRuntime;
+import net.sourceforge.jnlp.runtime.Translator;
More information about the distro-pkg-dev
mailing list