diff --git a/lime/_backend/html5/HTML5HTTPRequest.hx b/lime/_backend/html5/HTML5HTTPRequest.hx index 46757f02b..35159bd77 100644 --- a/lime/_backend/html5/HTML5HTTPRequest.hx +++ b/lime/_backend/html5/HTML5HTTPRequest.hx @@ -2,12 +2,14 @@ package lime._backend.html5; import js.html.AnchorElement; +import js.html.ErrorEvent; import js.html.Event; import js.html.Image in JSImage; import js.html.ProgressEvent; import js.html.XMLHttpRequest; import js.Browser; import haxe.io.Bytes; +import js.html.XMLHttpRequestResponseType; import lime.app.Future; import lime.app.Promise; import lime.graphics.Image; @@ -17,7 +19,7 @@ import lime.net.HTTPRequestHeader; import lime.utils.AssetType; @:access(lime.graphics.ImageBuffer) - +@:access(lime.graphics.Image) class HTML5HTTPRequest { @@ -423,42 +425,76 @@ class HTML5HTTPRequest { private static function __loadImage (uri:String, promise:Promise):Void { var image = new JSImage (); - - if (!__isSameOrigin (uri)) { + if(uri.indexOf("data:") == 0){ + image.addEventListener ("load", function (event) { + + var buffer = new ImageBuffer (null, image.width, image.height); + buffer.__srcImage = cast image; + + activeRequests--; + processQueue (); + + promise.complete (new Image (buffer)); + + }, false); - image.crossOrigin = "Anonymous"; + image.addEventListener ("progress", function (event) { + + promise.progress (event.loaded, event.total); + + }, false); + image.addEventListener ("error", function (event) { + + activeRequests--; + processQueue (); + + promise.error (event.detail); + + }, false); + + image.src = uri; + }else{ + if (!__isSameOrigin (uri)) { + + image.crossOrigin = "Anonymous"; + + } + + var request = new XMLHttpRequest(); + + request.onload = function (_) { + + activeRequests--; + processQueue (); + + var img = new Image(); + img.__fromBytes( Bytes.ofData(request.response), function(img){ + promise.complete (img); + }); + + } + + request.onerror = function (e:ErrorEvent) { + + promise.error(e.message); + + } + + request.onprogress = function(e:ProgressEvent) { + + if (e.lengthComputable) { + + promise.progress(e.loaded, e.total); + + } + + } + request.open("GET", uri, true); + request.responseType = XMLHttpRequestResponseType.ARRAYBUFFER; + request.overrideMimeType('text/plain; charset=x-user-defined'); + request.send(null); } - - image.addEventListener ("load", function (event) { - - var buffer = new ImageBuffer (null, image.width, image.height); - buffer.__srcImage = cast image; - - activeRequests--; - processQueue (); - - promise.complete (new Image (buffer)); - - }, false); - - image.addEventListener ("progress", function (event) { - - promise.progress (event.loaded, event.total); - - }, false); - - image.addEventListener ("error", function (event) { - - activeRequests--; - processQueue (); - - promise.error (event.detail); - - }, false); - - image.src = uri; - } @@ -509,4 +545,4 @@ class HTML5HTTPRequest { var promise:Dynamic; var uri:String; -} +} \ No newline at end of file