Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(515)

Unified Diff: sdk/lib/developer/extension.dart

Issue 1282883003: Move service extension handler execution to a timer (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/symbols.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/developer/extension.dart
diff --git a/sdk/lib/developer/extension.dart b/sdk/lib/developer/extension.dart
index 95c3db2e7253eb3b3d2b7aab9bba0d2f5f2853b0..04b3149ccdae24594a5aebcfba4c3c36a41e7d39 100644
--- a/sdk/lib/developer/extension.dart
+++ b/sdk/lib/developer/extension.dart
@@ -102,54 +102,53 @@ void registerExtension(String method, ServiceExtensionHandler handler) {
_extensions[method] = handler;
}
-bool _extensionExists(String method) {
- return _extensions[method] != null;
-}
-
-bool _invokeExtension(String method,
- List<String> parameterKeys,
- List<String> parameterValues,
- SendPort replyPort,
- Object id) {
+bool _scheduleExtension(String method,
+ List<String> parameterKeys,
+ List<String> parameterValues,
+ SendPort replyPort,
+ Object id) {
ServiceExtensionHandler handler = _extensions[method];
- 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 (handler == null) {
+ return false;
}
- 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;
}
« no previous file with comments | « runtime/vm/symbols.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698