| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:isolate'; | 5 import 'dart:isolate'; |
| 6 import 'dart:_internal' hide Symbol; | 6 import 'dart:_internal' hide Symbol; |
| 7 | 7 |
| 8 @patch | 8 @patch bool debugger({bool when: true, |
| 9 bool debugger({bool when: true, String message}) native "Developer_debugger"; | 9 String message}) native "Developer_debugger"; |
| 10 | 10 |
| 11 @patch | 11 @patch Object inspect(Object object) native "Developer_inspect"; |
| 12 Object inspect(Object object) native "Developer_inspect"; | |
| 13 | 12 |
| 14 @patch | 13 @patch void log(String message, |
| 15 void log(String message, | 14 {DateTime time, |
| 16 {DateTime time, | 15 int sequenceNumber, |
| 17 int sequenceNumber, | 16 int level: 0, |
| 18 int level: 0, | 17 String name: '', |
| 19 String name: '', | 18 Zone zone, |
| 20 Zone zone, | 19 Object error, |
| 21 Object error, | 20 StackTrace stackTrace}) { |
| 22 StackTrace stackTrace}) { | |
| 23 if (message is! String) { | 21 if (message is! String) { |
| 24 throw new ArgumentError.value(message, "message", "Must be a String"); | 22 throw new ArgumentError.value(message, "message", "Must be a String"); |
| 25 } | 23 } |
| 26 if (time == null) { | 24 if (time == null) { |
| 27 time = new DateTime.now(); | 25 time = new DateTime.now(); |
| 28 } | 26 } |
| 29 if (time is! DateTime) { | 27 if (time is! DateTime) { |
| 30 throw new ArgumentError.value(time, "time", "Must be a DateTime"); | 28 throw new ArgumentError.value(time, "time", "Must be a DateTime"); |
| 31 } | 29 } |
| 32 if (sequenceNumber == null) { | 30 if (sequenceNumber == null) { |
| 33 sequenceNumber = _nextSequenceNumber++; | 31 sequenceNumber = _nextSequenceNumber++; |
| 34 } else { | 32 } else { |
| 35 _nextSequenceNumber = sequenceNumber + 1; | 33 _nextSequenceNumber = sequenceNumber + 1; |
| 36 } | 34 } |
| 37 _log(message, time.millisecondsSinceEpoch, sequenceNumber, level, name, zone, | 35 _log(message, |
| 38 error, stackTrace); | 36 time.millisecondsSinceEpoch, |
| 37 sequenceNumber, |
| 38 level, |
| 39 name, |
| 40 zone, |
| 41 error, |
| 42 stackTrace); |
| 39 } | 43 } |
| 40 | 44 |
| 41 int _nextSequenceNumber = 0; | 45 int _nextSequenceNumber = 0; |
| 42 | 46 |
| 43 _log(String message, int timestamp, int sequenceNumber, int level, String name, | 47 _log(String message, |
| 44 Zone zone, Object error, StackTrace stackTrace) native "Developer_log"; | 48 int timestamp, |
| 49 int sequenceNumber, |
| 50 int level, |
| 51 String name, |
| 52 Zone zone, |
| 53 Object error, |
| 54 StackTrace stackTrace) native "Developer_log"; |
| 45 | 55 |
| 46 @patch | 56 @patch void _postEvent(String eventKind, String eventData) |
| 47 void _postEvent(String eventKind, String eventData) | |
| 48 native "Developer_postEvent"; | 57 native "Developer_postEvent"; |
| 49 | 58 |
| 50 @patch | 59 @patch ServiceExtensionHandler _lookupExtension(String method) |
| 51 ServiceExtensionHandler _lookupExtension(String method) | |
| 52 native "Developer_lookupExtension"; | 60 native "Developer_lookupExtension"; |
| 53 | 61 |
| 54 @patch | 62 @patch _registerExtension(String method, ServiceExtensionHandler handler) |
| 55 _registerExtension(String method, ServiceExtensionHandler handler) | |
| 56 native "Developer_registerExtension"; | 63 native "Developer_registerExtension"; |
| 57 | 64 |
| 58 // This code is only invoked when there is no other Dart code on the stack. | 65 // This code is only invoked when there is no other Dart code on the stack. |
| 59 _runExtension( | 66 _runExtension(ServiceExtensionHandler handler, |
| 60 ServiceExtensionHandler handler, | 67 String method, |
| 61 String method, | 68 List<String> parameterKeys, |
| 62 List<String> parameterKeys, | 69 List<String> parameterValues, |
| 63 List<String> parameterValues, | 70 SendPort replyPort, |
| 64 SendPort replyPort, | 71 Object id, |
| 65 Object id, | 72 bool trace_service) { |
| 66 bool trace_service) { | |
| 67 var parameters = {}; | 73 var parameters = {}; |
| 68 for (var i = 0; i < parameterKeys.length; i++) { | 74 for (var i = 0; i < parameterKeys.length; i++) { |
| 69 parameters[parameterKeys[i]] = parameterValues[i]; | 75 parameters[parameterKeys[i]] = parameterValues[i]; |
| 70 } | 76 } |
| 71 var response; | 77 var response; |
| 72 try { | 78 try { |
| 73 response = handler(method, parameters); | 79 response = handler(method, parameters); |
| 74 } catch (e, st) { | 80 } catch (e, st) { |
| 75 var errorDetails = (st == null) ? '$e' : '$e\n$st'; | 81 var errorDetails = (st == null) ? '$e' : '$e\n$st'; |
| 76 response = new ServiceExtensionResponse.error( | 82 response = new ServiceExtensionResponse.error( |
| 77 ServiceExtensionResponse.kExtensionError, errorDetails); | 83 ServiceExtensionResponse.kExtensionError, |
| 84 errorDetails); |
| 78 _postResponse(replyPort, id, response, trace_service); | 85 _postResponse(replyPort, id, response, trace_service); |
| 79 return; | 86 return; |
| 80 } | 87 } |
| 81 if (response is! Future) { | 88 if (response is! Future) { |
| 82 response = new ServiceExtensionResponse.error( | 89 response = new ServiceExtensionResponse.error( |
| 83 ServiceExtensionResponse.kExtensionError, | 90 ServiceExtensionResponse.kExtensionError, |
| 84 "Extension handler must return a Future"); | 91 "Extension handler must return a Future"); |
| 85 _postResponse(replyPort, id, response, trace_service); | 92 _postResponse(replyPort, id, response, trace_service); |
| 86 return; | 93 return; |
| 87 } | 94 } |
| 88 response.catchError((e, st) { | 95 response.catchError((e, st) { |
| 89 // Catch any errors eagerly and wrap them in a ServiceExtensionResponse. | 96 // Catch any errors eagerly and wrap them in a ServiceExtensionResponse. |
| 90 var errorDetails = (st == null) ? '$e' : '$e\n$st'; | 97 var errorDetails = (st == null) ? '$e' : '$e\n$st'; |
| 91 return new ServiceExtensionResponse.error( | 98 return new ServiceExtensionResponse.error( |
| 92 ServiceExtensionResponse.kExtensionError, errorDetails); | 99 ServiceExtensionResponse.kExtensionError, |
| 100 errorDetails); |
| 93 }).then((response) { | 101 }).then((response) { |
| 94 // Post the valid response or the wrapped error after verifying that | 102 // Post the valid response or the wrapped error after verifying that |
| 95 // the response is a ServiceExtensionResponse. | 103 // the response is a ServiceExtensionResponse. |
| 96 if (response is! ServiceExtensionResponse) { | 104 if (response is! ServiceExtensionResponse) { |
| 97 response = new ServiceExtensionResponse.error( | 105 response = new ServiceExtensionResponse.error( |
| 98 ServiceExtensionResponse.kExtensionError, | 106 ServiceExtensionResponse.kExtensionError, |
| 99 "Extension handler must complete to a ServiceExtensionResponse"); | 107 "Extension handler must complete to a ServiceExtensionResponse"); |
| 100 } | 108 } |
| 101 _postResponse(replyPort, id, response, trace_service); | 109 _postResponse(replyPort, id, response, trace_service); |
| 102 }).catchError((e, st) { | 110 }).catchError((e, st) { |
| 103 // We do not expect any errors to occur in the .then or .catchError blocks | 111 // We do not expect any errors to occur in the .then or .catchError blocks |
| 104 // but, suppress them just in case. | 112 // but, suppress them just in case. |
| 105 }); | 113 }); |
| 106 } | 114 } |
| 107 | 115 |
| 108 // This code is only invoked by _runExtension. | 116 // This code is only invoked by _runExtension. |
| 109 _postResponse(SendPort replyPort, Object id, ServiceExtensionResponse response, | 117 _postResponse(SendPort replyPort, |
| 110 bool trace_service) { | 118 Object id, |
| 119 ServiceExtensionResponse response, |
| 120 bool trace_service) { |
| 111 assert(replyPort != null); | 121 assert(replyPort != null); |
| 112 if (id == null) { | 122 if (id == null) { |
| 113 if (trace_service) { | 123 if (trace_service) { |
| 114 print("vm-service: posting no response for request"); | 124 print("vm-service: posting no response for request"); |
| 115 } | 125 } |
| 116 // No id -> no response. | 126 // No id -> no response. |
| 117 replyPort.send(null); | 127 replyPort.send(null); |
| 118 return; | 128 return; |
| 119 } | 129 } |
| 120 assert(id != null); | 130 assert(id != null); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 133 } | 143 } |
| 134 sb.write('${response._toString()},'); | 144 sb.write('${response._toString()},'); |
| 135 if (id is String) { | 145 if (id is String) { |
| 136 sb.write('"id":"$id"}'); | 146 sb.write('"id":"$id"}'); |
| 137 } else { | 147 } else { |
| 138 sb.write('"id":$id}'); | 148 sb.write('"id":$id}'); |
| 139 } | 149 } |
| 140 replyPort.send(sb.toString()); | 150 replyPort.send(sb.toString()); |
| 141 } | 151 } |
| 142 | 152 |
| 143 @patch | 153 @patch int _getServiceMajorVersion() native "Developer_getServiceMajorVersion"; |
| 144 int _getServiceMajorVersion() native "Developer_getServiceMajorVersion"; | |
| 145 | 154 |
| 146 @patch | 155 @patch int _getServiceMinorVersion() native "Developer_getServiceMinorVersion"; |
| 147 int _getServiceMinorVersion() native "Developer_getServiceMinorVersion"; | |
| 148 | 156 |
| 149 @patch | 157 @patch void _getServerInfo(SendPort sendPort) native "Developer_getServerInfo"; |
| 150 void _getServerInfo(SendPort sendPort) native "Developer_getServerInfo"; | |
| 151 | 158 |
| 152 @patch | 159 @patch void _webServerControl(SendPort sendPort, bool enable) |
| 153 void _webServerControl(SendPort sendPort, bool enable) | |
| 154 native "Developer_webServerControl"; | 160 native "Developer_webServerControl"; |
| 155 | 161 |
| 156 @patch | 162 @patch String _getIsolateIDFromSendPort(SendPort sendPort) |
| 157 String _getIsolateIDFromSendPort(SendPort sendPort) | |
| 158 native "Developer_getIsolateIDFromSendPort"; | 163 native "Developer_getIsolateIDFromSendPort"; |
| OLD | NEW |