/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