Chromium Code Reviews| Index: sdk/lib/developer/extension.dart |
| diff --git a/sdk/lib/developer/extension.dart b/sdk/lib/developer/extension.dart |
| index 95c3db2e7253eb3b3d2b7aab9bba0d2f5f2853b0..e65cd7582494ab277ccf37235b96198c4465f71a 100644 |
| --- a/sdk/lib/developer/extension.dart |
| +++ b/sdk/lib/developer/extension.dart |
| @@ -113,43 +113,44 @@ bool _invokeExtension(String method, |
| Object id) { |
| ServiceExtensionHandler handler = _extensions[method]; |
|
Ivan Posva
2015/08/10 21:40:21
Combine this with the check for extension and retu
Cutch
2015/08/10 21:56:20
Done.
|
| assert(handler != null); |
| - var parameters = {}; |
| - for (var i = 0; i < parameterKeys.length; i++) { |
| - parameters[parameterKeys[i]] = parameterValues[i]; |
| - } |
| - var response; |
| - try { |
| - response = handler(method, parameters); |
| - } catch (e, st) { |
| - var errorDetails = (st == null) ? '$e' : '$e\n$st'; |
| - response = new ServiceExtensionResponse.error( |
| - ServiceExtensionResponse.kExtensionError, |
| - errorDetails); |
| - _postResponse(replyPort, id, response); |
| - return true; |
| - } |
| - if (response is! Future) { |
| - response = new ServiceExtensionResponse.error( |
| - ServiceExtensionResponse.kExtensionError, |
| - "Extension handler must return a Future"); |
| - _postResponse(replyPort, id, response); |
| - return true; |
| - } |
| - response.catchError((e, st) { |
| - var errorDetails = (st == null) ? '$e' : '$e\n$st'; |
| - return new ServiceExtensionResponse.error( |
| - ServiceExtensionResponse.kExtensionError, |
| - errorDetails); |
| - }).then((response) { |
| - if (response == null) { |
| + // Defer execution of handler until next event loop. |
| + Timer.run(() { |
| + var parameters = {}; |
| + for (var i = 0; i < parameterKeys.length; i++) { |
| + parameters[parameterKeys[i]] = parameterValues[i]; |
| + } |
| + var response; |
| + try { |
| + response = handler(method, parameters); |
| + } catch (e, st) { |
| + var errorDetails = (st == null) ? '$e' : '$e\n$st'; |
| response = new ServiceExtensionResponse.error( |
| ServiceExtensionResponse.kExtensionError, |
| - "Extension handler returned null"); |
| + errorDetails); |
| + _postResponse(replyPort, id, response); |
| + return; |
| } |
| - _postResponse(replyPort, id, response); |
| + if (response is! Future) { |
| + response = new ServiceExtensionResponse.error( |
| + ServiceExtensionResponse.kExtensionError, |
| + "Extension handler must return a Future"); |
| + _postResponse(replyPort, id, response); |
| + return; |
| + } |
| + response.catchError((e, st) { |
| + var errorDetails = (st == null) ? '$e' : '$e\n$st'; |
| + return new ServiceExtensionResponse.error( |
| + ServiceExtensionResponse.kExtensionError, |
| + errorDetails); |
| + }).then((response) { |
| + if (response == null) { |
| + response = new ServiceExtensionResponse.error( |
| + ServiceExtensionResponse.kExtensionError, |
| + "Extension handler returned null"); |
| + } |
| + _postResponse(replyPort, id, response); |
| + }); |
| }); |
| - // Push an event on the event loop so that we invoke the scheduled microtasks. |
| - Timer.run(() {}); |
| return true; |
| } |