# HG changeset patch # User Jaroslav Tulach # Date 1377793444 0 # Node ID 2e0da2375ef5dc6b00b788974a33ce71394440a6 # Parent a936dd8280dc193d01d48d69665e0b6a98227239 Passes json-tck tests with rev. 09aaf52b71c5 of net.java.html APIs diff -r a936dd8280dc -r 2e0da2375ef5 ko/bck2brwsr/src/main/java/org/apidesign/bck2brwsr/ko2brwsr/BrwsrCtxImpl.java --- a/ko/bck2brwsr/src/main/java/org/apidesign/bck2brwsr/ko2brwsr/BrwsrCtxImpl.java Thu Aug 29 14:35:01 2013 +0000 +++ b/ko/bck2brwsr/src/main/java/org/apidesign/bck2brwsr/ko2brwsr/BrwsrCtxImpl.java Thu Aug 29 16:24:04 2013 +0000 @@ -45,15 +45,36 @@ @Override public void loadJSON(final JSONCall call) { class R implements Runnable { + final boolean success; + + public R(boolean success) { + this.success = success; + } + Object[] arr = { null }; @Override public void run() { - call.notifySuccess(arr[0]); + if (success) { + call.notifySuccess(arr[0]); + } else { + Throwable t; + if (arr[0] instanceof Throwable) { + t = (Throwable) arr[0]; + } else { + if (arr[0] == null) { + t = new IOException(); + } else { + t = new IOException(arr[0].toString()); + } + } + call.notifyError(t); + } } } - R r = new R(); + R success = new R(true); + R failure = new R(false); if (call.isJSONP()) { - String me = ConvertTypes.createJSONP(r.arr, r); + String me = ConvertTypes.createJSONP(success.arr, success); ConvertTypes.loadJSONP(call.composeURL(me), me); } else { String data = null; @@ -66,7 +87,7 @@ call.notifyError(ex); } } - ConvertTypes.loadJSON(call.composeURL(null), r.arr, r, call.getMethod(), data); + ConvertTypes.loadJSON(call.composeURL(null), success.arr, success, failure, call.getMethod(), data); } } diff -r a936dd8280dc -r 2e0da2375ef5 ko/bck2brwsr/src/main/java/org/apidesign/bck2brwsr/ko2brwsr/ConvertTypes.java --- a/ko/bck2brwsr/src/main/java/org/apidesign/bck2brwsr/ko2brwsr/ConvertTypes.java Thu Aug 29 14:35:01 2013 +0000 +++ b/ko/bck2brwsr/src/main/java/org/apidesign/bck2brwsr/ko2brwsr/ConvertTypes.java Thu Aug 29 16:24:04 2013 +0000 @@ -111,7 +111,7 @@ return s; } - @JavaScriptBody(args = { "url", "arr", "callback", "method", "data" }, body = "" + @JavaScriptBody(args = { "url", "arr", "callback", "onError", "method", "data" }, body = "" + "var request = new XMLHttpRequest();\n" + "if (!method) method = 'GET';\n" + "request.open(method, url, true);\n" @@ -124,12 +124,15 @@ + " arr[0] = this.response;\n" + " }\n" + " callback.run__V();\n" - + "};" + + "};\n" + + "request.onerror = function (e) {\n" + + " arr[0] = e; onError.run__V();\n" + + "}\n" + "if (data) request.send(data);" + "else request.send();" ) static void loadJSON( - String url, Object[] jsonResult, Runnable whenDone, String method, String data + String url, Object[] jsonResult, Runnable whenDone, Runnable whenErr, String method, String data ) { }