| Index: runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
|
| diff --git a/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart b/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
|
| index 9a26b54db315a120a005e7bfd302bb953f20cc86..705e06731cf364a2c1c7ce2174a7490a8ebca463 100644
|
| --- a/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
|
| +++ b/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
|
| @@ -68,7 +68,11 @@ abstract class RequestManager extends Observable {
|
| request(requestString).then((responseString) {
|
| parseResponses(responseString);
|
| }).catchError((e) {
|
| - setResponseError(e.target);
|
| + if (e is FormatException) {
|
| + setResponseError(e.message);
|
| + } else {
|
| + setResponseError(e.target);
|
| + }
|
| });
|
| }
|
| }
|
| @@ -102,3 +106,44 @@ class HttpRequestManager extends RequestManager {
|
| return HttpRequest.getString(prefix + requestString);
|
| }
|
| }
|
| +
|
| +class PostMessageRequestManager extends RequestManager {
|
| + final Map _outstandingRequests = new Map();
|
| + int _requestSerial = 0;
|
| + PostMessageRequestManager() {
|
| + window.onMessage.listen(_messageHandler);
|
| + }
|
| +
|
| + void _messageHandler(msg) {
|
| + var id = msg.data['id'];
|
| + var name = msg.data['name'];
|
| + var data = msg.data['data'];
|
| + if (name != 'observatoryData') {
|
| + return;
|
| + }
|
| + print('Got reply $id $data');
|
| + var completer = _outstandingRequests[id];
|
| + if (completer != null) {
|
| + _outstandingRequests.remove(id);
|
| + print('Completing $id');
|
| + completer.complete(data);
|
| + } else {
|
| + print('Could not find completer for $id');
|
| + }
|
| + }
|
| +
|
| + Future<String> request(String requestString) {
|
| + var idString = '$_requestSerial';
|
| + Map message = {};
|
| + message['id'] = idString;
|
| + message['method'] = 'observatoryQuery';
|
| + message['query'] = requestString;
|
| + _requestSerial++;
|
| +
|
| + var completer = new Completer();
|
| + _outstandingRequests[idString] = completer;
|
| +
|
| + window.parent.postMessage(JSON.encode(message), '*');
|
| + return completer.future;
|
| + }
|
| +}
|
|
|