1.1 --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JVMBridge.java Mon Jun 17 19:55:31 2013 +0200
1.2 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JVMBridge.java Thu Jun 20 10:22:50 2013 +0200
1.3 @@ -17,17 +17,21 @@
1.4 */
1.5 package org.apidesign.bck2brwsr.launcher.fximpl;
1.6
1.7 +import org.apidesign.html.boot.spi.Fn;
1.8 import java.net.URL;
1.9 import java.util.ArrayList;
1.10 import java.util.Arrays;
1.11 +import java.util.Collection;
1.12 import java.util.Collections;
1.13 import java.util.Enumeration;
1.14 import java.util.List;
1.15 import java.util.TooManyListenersException;
1.16 import javafx.beans.value.ChangeListener;
1.17 import javafx.scene.web.WebEngine;
1.18 -import javax.script.Invocable;
1.19 +import net.java.html.boot.BrowserBuilder;
1.20 import netscape.javascript.JSObject;
1.21 +import org.apidesign.html.boot.impl.FindResources;
1.22 +import org.apidesign.html.boot.impl.FnUtils;
1.23
1.24 /**
1.25 *
1.26 @@ -35,14 +39,16 @@
1.27 */
1.28 public final class JVMBridge {
1.29 private final WebEngine engine;
1.30 - private final WebClassLoader cl;
1.31 + private final ClassLoader cl;
1.32
1.33 private static ClassLoader[] ldrs;
1.34 private static ChangeListener<Void> onBck2BrwsrLoad;
1.35
1.36 JVMBridge(WebEngine eng) {
1.37 this.engine = eng;
1.38 - this.cl = new WebClassLoader(JVMBridge.class.getClassLoader().getParent());
1.39 + final ClassLoader p = JVMBridge.class.getClassLoader().getParent();
1.40 + WebClassLoader wcl = new WebClassLoader(p);
1.41 + this.cl = FnUtils.newLoader(wcl, wcl, p);
1.42 }
1.43
1.44 public static void registerClassLoaders(ClassLoader[] loaders) {
1.45 @@ -67,38 +73,25 @@
1.46 return Class.forName(name, true, cl);
1.47 }
1.48
1.49 - private final class WebClassLoader extends JsClassLoader {
1.50 + private final class WebClassLoader implements FindResources, Fn.Presenter {
1.51 + private final ClassLoader cl;
1.52 +
1.53 public WebClassLoader(ClassLoader parent) {
1.54 - super(parent);
1.55 + this.cl = parent;
1.56 }
1.57
1.58 @Override
1.59 - protected URL findResource(String name) {
1.60 + public void findResources(String name, Collection<? super URL> results, boolean oneIsEnough) {
1.61 if (ldrs != null) for (ClassLoader l : ldrs) {
1.62 URL u = l.getResource(name);
1.63 if (u != null) {
1.64 - return u;
1.65 + results.add(u);
1.66 }
1.67 }
1.68 - return null;
1.69 - }
1.70 -
1.71 - @Override
1.72 - protected Enumeration<URL> findResources(String name) {
1.73 - List<URL> arr = new ArrayList<URL>();
1.74 - if (ldrs != null) {
1.75 - for (ClassLoader l : ldrs) {
1.76 - URL u = l.getResource(name);
1.77 - if (u != null) {
1.78 - arr.add(u);
1.79 - }
1.80 - }
1.81 - }
1.82 - return Collections.enumeration(arr);
1.83 }
1.84
1.85 @Override
1.86 - protected Fn defineFn(String code, String... names) {
1.87 + public Fn defineFn(String code, String... names) {
1.88 StringBuilder sb = new StringBuilder();
1.89 sb.append("(function() {");
1.90 sb.append(" return function(");
1.91 @@ -115,6 +108,11 @@
1.92 JSObject x = (JSObject) engine.executeScript(sb.toString());
1.93 return new JSFn(x);
1.94 }
1.95 +
1.96 + @Override
1.97 + public void displayPage(URL page, Runnable onPageLoad) {
1.98 + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
1.99 + }
1.100 }
1.101
1.102 private static final class JSFn extends Fn {