# HG changeset patch # User Jaroslav Tulach # Date 1359654300 -3600 # Node ID 8efbe49b283f727a539d63e3d59de0ca118d28cc # Parent e79ab81a76569fca8b9cc4217fd0bc872329cebe Can read binary data via new URL('').getContent(byte[].class) diff -r e79ab81a7656 -r 8efbe49b283f emul/mini/src/main/java/java/net/URL.java --- a/emul/mini/src/main/java/java/net/URL.java Thu Jan 31 18:22:14 2013 +0100 +++ b/emul/mini/src/main/java/java/net/URL.java Thu Jan 31 18:45:00 2013 +0100 @@ -987,6 +987,17 @@ ) private static native String loadText(String url) throws IOException; + @JavaScriptBody(args = { "url", "arr" }, body = "" + + "var request = new XMLHttpRequest();\n" + + "request.open('GET', url, false);\n" + + "request.overrideMimeType('text\\/plain; charset=x-user-defined');\n" + + "request.send();\n" + + "var t = request.responseText;\n" + + "for (var i = 0; i < t.length; i++) arr.push(t.charCodeAt(i) & 0xff);\n" + + "return arr;\n" + ) + private static native Object loadBytes(String url, byte[] arr) throws IOException; + /** * Gets the contents of this URL. This method is a shorthand for: *
@@ -1005,7 +1016,10 @@
     throws java.io.IOException {
         for (Class c : classes) {
             if (c == String.class) {
-                return getContent();
+                return loadText(toExternalForm());
+            }
+            if (c == byte[].class) {
+                return loadBytes(toExternalForm(), new byte[0]);
             }
         }
         return null;
diff -r e79ab81a7656 -r 8efbe49b283f vmtest/src/test/java/org/apidesign/bck2brwsr/tck/HttpResourceTest.java
--- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/HttpResourceTest.java	Thu Jan 31 18:22:14 2013 +0100
+++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/HttpResourceTest.java	Thu Jan 31 18:45:00 2013 +0100
@@ -54,6 +54,17 @@
         assert "Hello via URL!".equals(msg) : "The message was " + msg;
         return msg;
     }
+
+    @HttpResource(path = "/bytes", content = "\u00fe", mimeType = "x-application/binary")
+    @BrwsrTest
+    public void testReadByte() throws Exception {
+        URL url = new URL("http:/bytes");
+        final Object res = url.getContent(new Class[] { byte[].class });
+        assert res instanceof byte[] : "Expecting byte[]: " + res;
+        byte[] arr = (byte[]) res;
+        assert arr.length == 1 : "One byte " + arr.length;
+        assert arr[0] == 0xfe : "It is 0xfe: " + Integer.toHexString(arr[0]);
+    }
     
     @JavaScriptBody(args = { "url" }, body = 
           "var req = new XMLHttpRequest();\n"