modules/web/src/main/java/com/sun/webkit/network/URLs.java

Print this page

        

*** 26,35 **** --- 26,37 ---- package com.sun.webkit.network; import java.net.MalformedURLException; import java.net.URL; import java.net.URLStreamHandler; + import java.security.AccessController; + import java.security.PrivilegedAction; import java.util.Collections; import java.util.HashMap; import java.util.Map; /**
*** 79,104 **** * @param context the context in which to parse the specification. * @param spec the {@code String} to parse as a {@code URL}. * @throws MalformedURLException if no protocol is specified, or an * unknown protocol is found. */ ! public static URL newURL(URL context, String spec) throws MalformedURLException { try { // Try the standard protocol handler selection procedure return new URL(context, spec); } catch (MalformedURLException ex) { // Try WebPane-specific protocol handler, if any - URLStreamHandler handler = null; int colonPosition = spec.indexOf(':'); if (colonPosition != -1) { ! handler = handlerMap.get( spec.substring(0, colonPosition).toLowerCase()); } ! if (handler == null) { ! throw ex; } ! return new URL(context, spec, handler); } } } --- 81,119 ---- * @param context the context in which to parse the specification. * @param spec the {@code String} to parse as a {@code URL}. * @throws MalformedURLException if no protocol is specified, or an * unknown protocol is found. */ ! public static URL newURL(final URL context, final String spec) throws MalformedURLException { try { // Try the standard protocol handler selection procedure return new URL(context, spec); } catch (MalformedURLException ex) { // Try WebPane-specific protocol handler, if any int colonPosition = spec.indexOf(':'); if (colonPosition != -1) { ! final URLStreamHandler handler = handlerMap.get( spec.substring(0, colonPosition).toLowerCase()); + + try { + // We should be able to specify one of our stream handlers for the URL + // when running as an applet or a web start app. + return AccessController.doPrivileged((PrivilegedAction<URL>) () -> { + try { + return new URL(context, spec, handler); + } catch (MalformedURLException muex) { + throw new RuntimeException(muex); } ! }); ! } catch (RuntimeException re) { ! if (re.getCause() instanceof MalformedURLException) { ! throw (MalformedURLException)re.getCause(); } ! throw re; ! } ! } ! throw ex; } } }