| Index: runtime/bin/vmservice/loader.dart
|
| diff --git a/runtime/bin/vmservice/loader.dart b/runtime/bin/vmservice/loader.dart
|
| index 2e04455c1546e0135fab432d09bf020022129c3c..ce3c9cce83a79ed14b3f4fb636587e7b78c7466b 100644
|
| --- a/runtime/bin/vmservice/loader.dart
|
| +++ b/runtime/bin/vmservice/loader.dart
|
| @@ -6,7 +6,16 @@ part of vmservice_io;
|
|
|
| var _httpClient;
|
|
|
| -void _loadHttp(sendPort, uri) {
|
| +// Send a response to the requesting isolate.
|
| +void _sendResponse(SendPort sp, int id, dynamic data) {
|
| + assert((data is List<int>) || (data is String));
|
| + var msg = new List(2);
|
| + msg[0] = id;
|
| + msg[1] = data;
|
| + sp.send(msg);
|
| +}
|
| +
|
| +void _loadHttp(SendPort sp, int id, Uri uri) {
|
| if (_httpClient == null) {
|
| _httpClient = new HttpClient()..maxConnectionsPerHost = 6;
|
| }
|
| @@ -18,39 +27,41 @@ void _loadHttp(sendPort, uri) {
|
| builder.add,
|
| onDone: () {
|
| if (response.statusCode != 200) {
|
| - var msg = 'Failure getting $uri: '
|
| - '${response.statusCode} ${response.reasonPhrase}';
|
| - sendPort.send(msg);
|
| + var msg = "Failure getting $uri:\n"
|
| + " ${response.statusCode} ${response.reasonPhrase}";
|
| + _sendResponse(sp, id, msg);
|
| } else {
|
| - sendPort.send(builder.takeBytes());
|
| + _sendResponse(sp, id, builder.takeBytes());
|
| }
|
| },
|
| onError: (e) {
|
| - sendPort.send(e.toString());
|
| + _sendResponse(sp, d, e.toString());
|
| });
|
| })
|
| .catchError((e) {
|
| - sendPort.send(e.toString());
|
| + _sendResponse(sp, id, e.toString());
|
| });
|
| // It's just here to push an event on the event loop so that we invoke the
|
| // scheduled microtasks.
|
| Timer.run(() {});
|
| }
|
|
|
| -void _loadFile(sendPort, path) {
|
| +void _loadFile(SendPort sp, int id, Uri uri) {
|
| + var path = uri.toFilePath();
|
| var sourceFile = new File(path);
|
| sourceFile.readAsBytes().then((data) {
|
| - sendPort.send(data);
|
| + _sendResponse(sp, id, data);
|
| },
|
| onError: (e) {
|
| - sendPort.send(e.toString());
|
| + var err = "Error loading $uri:\n $e";
|
| + _sendResponse(sp, id, err);
|
| });
|
| }
|
|
|
| var dataUriRegex = new RegExp(
|
| r"data:([\w-]+/[\w-]+)?(;charset=([\w-]+))?(;base64)?,(.*)");
|
|
|
| -void _loadDataUri(sendPort, uri) {
|
| +void _loadDataUri(SendPort sp, int id, Uri uri) {
|
| try {
|
| var match = dataUriRegex.firstMatch(uri.toString());
|
| if (match == null) throw "Malformed data uri";
|
| @@ -72,21 +83,23 @@ void _loadDataUri(sendPort, uri) {
|
| }
|
|
|
| var data = UTF8.encode(Uri.decodeComponent(encodedData));
|
| - sendPort.send(data);
|
| + _sendResponse(sp, id, data);
|
| } catch (e) {
|
| - sendPort.send("Invalid data uri ($uri) $e");
|
| + _sendResponse(sp, id, "Invalid data uri ($uri):\n $e");
|
| }
|
| }
|
|
|
| _processLoadRequest(request) {
|
| - var sp = request[0];
|
| - var uri = Uri.parse(request[1]);
|
| + SendPort sp = request[0];
|
| + int id = request[1];
|
| + String resource = request[2];
|
| + var uri = Uri.parse(request[2]);
|
| if (uri.scheme == 'file') {
|
| - _loadFile(sp, uri.toFilePath());
|
| + _loadFile(sp, id, uri);
|
| } else if ((uri.scheme == 'http') || (uri.scheme == 'https')) {
|
| - _loadHttp(sp, uri);
|
| + _loadHttp(sp, id, uri);
|
| } else if ((uri.scheme == 'data')) {
|
| - _loadDataUri(sp, uri);
|
| + _loadDataUri(sp, id, uri);
|
| } else {
|
| sp.send('Unknown scheme (${uri.scheme}) for $uri');
|
| }
|
|
|