Chromium Code Reviews| Index: sdk/lib/_internal/js_runtime/lib/js_helper.dart |
| diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart |
| index 6692d2723c426a4e4f984899aac1ac55fb05e77b..70d744b0f9591e99ebf5576dbb3a89bea6696c29 100644 |
| --- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart |
| +++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart |
| @@ -3903,6 +3903,57 @@ Future<Null> _loadHunk(String hunkName) { |
| return completer.future; |
| } |
| +// Performs an HTTP GET of the given URI and returns the response. The response |
| +// is either a String or a ByteBuffer. |
| +Future<dynamic> readHttp(String uri) { |
| + Completer completer = new Completer(); |
| + |
| + void failure([error, StackTrace stackTrace]) { |
| + completer.completeError( |
| + new Exception("Loading $uri failed: $error"), |
| + stackTrace); |
| + } |
| + |
| + enterJsAsync(); |
| + completer.future.whenComplete(() => leaveJsAsync()); |
|
Siggi Cherem (dart-lang)
2015/08/25 00:43:27
I guess we can also remove the explicit closure :)
Harry Terkelsen
2015/08/25 17:45:05
Done.
|
| + |
| + var xhr = JS('var', 'new XMLHttpRequest()'); |
| + JS('void', '#.open("GET", #)', xhr, uri); |
| + JS('void', '#.addEventListener("load", #, false)', |
| + xhr, convertDartClosureToJS((event) { |
| + int status = JS('int', '#.status', xhr); |
| + if (status != 200) { |
| + failure("Status code: $status"); |
| + } |
| + String responseType = JS('String', '#.responseType', xhr); |
| + var data; |
| + if (responseType.isEmpty || responseType == 'text') { |
| + data = JS('String', '#.response', xhr); |
| + completer.complete(data); |
| + } else if (responseType == 'document' || responseType == 'json') { |
| + data = JS('String', '#.responseText', xhr); |
| + completer.complete(data); |
| + } else if (responseType == 'arraybuffer') { |
| + data = JS('var', '#.response', xhr); |
| + completer.complete(data); |
| + } else if (responseType == 'blob') { |
| + var reader = JS('var', 'new FileReader()'); |
| + JS('void', '#.addEventListener("loadend", #, false)', |
| + reader, convertDartClosureToJS((event) { |
| + data = JS('var', '#.result', reader); |
| + completer.complete(data); |
| + }, 1)); |
| + } else { |
| + failure('Result had unexpected type: $responseType'); |
| + } |
| + }, 1)); |
| + |
| + JS('void', '#.addEventListener("error", #, false)', xhr, failure); |
| + JS('void', '#.addEventListener("abort", #, false)', xhr, failure); |
| + JS('void', '#.send()', xhr); |
| + return completer.future; |
|
Siggi Cherem (dart-lang)
2015/08/25 00:43:27
Question: I see this is also how it was done in _l
Harry Terkelsen
2015/08/25 17:45:06
That's a good question. I think we're OK since all
|
| +} |
| + |
| class MainError extends Error implements NoSuchMethodError { |
| final String _message; |