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

Side by Side Diff: runtime/vm/service.cc

Issue 2041293003: Allow embedder service request handlers to return JSON-RPC errors. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 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 unified diff | Download patch
« no previous file with comments | « runtime/include/dart_tools_api.h ('k') | runtime/vm/service_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 #include "vm/service.h" 5 #include "vm/service.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "include/dart_native_api.h" 8 #include "include/dart_native_api.h"
9 #include "platform/globals.h" 9 #include "platform/globals.h"
10 10
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 return; 852 return;
853 } 853 }
854 854
855 EmbedderServiceHandler* handler = FindIsolateEmbedderHandler(c_method_name); 855 EmbedderServiceHandler* handler = FindIsolateEmbedderHandler(c_method_name);
856 if (handler == NULL) { 856 if (handler == NULL) {
857 handler = FindRootEmbedderHandler(c_method_name); 857 handler = FindRootEmbedderHandler(c_method_name);
858 } 858 }
859 859
860 if (handler != NULL) { 860 if (handler != NULL) {
861 EmbedderHandleMessage(handler, &js); 861 EmbedderHandleMessage(handler, &js);
862 js.PostReply();
863 return; 862 return;
864 } 863 }
865 864
866 const Instance& extension_handler = Instance::Handle(Z, 865 const Instance& extension_handler = Instance::Handle(Z,
867 I->LookupServiceExtensionHandler(method_name)); 866 I->LookupServiceExtensionHandler(method_name));
868 if (!extension_handler.IsNull()) { 867 if (!extension_handler.IsNull()) {
869 ScheduleExtensionHandler(extension_handler, 868 ScheduleExtensionHandler(extension_handler,
870 method_name, 869 method_name,
871 param_keys, 870 param_keys,
872 param_values, 871 param_values,
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 void* user_data_; 1118 void* user_data_;
1120 EmbedderServiceHandler* next_; 1119 EmbedderServiceHandler* next_;
1121 }; 1120 };
1122 1121
1123 1122
1124 void Service::EmbedderHandleMessage(EmbedderServiceHandler* handler, 1123 void Service::EmbedderHandleMessage(EmbedderServiceHandler* handler,
1125 JSONStream* js) { 1124 JSONStream* js) {
1126 ASSERT(handler != NULL); 1125 ASSERT(handler != NULL);
1127 Dart_ServiceRequestCallback callback = handler->callback(); 1126 Dart_ServiceRequestCallback callback = handler->callback();
1128 ASSERT(callback != NULL); 1127 ASSERT(callback != NULL);
1129 const char* r = NULL; 1128 const char* response = NULL;
1130 const char* method = js->method(); 1129 bool success = callback(js->method(), js->param_keys(), js->param_values(),
1131 const char** keys = js->param_keys(); 1130 js->num_params(), handler->user_data(), &response);
1132 const char** values = js->param_values(); 1131 ASSERT(response != NULL);
1133 r = callback(method, keys, values, js->num_params(), handler->user_data()); 1132 if (!success) {
1134 ASSERT(r != NULL); 1133 js->SetupError();
1135 // TODO(johnmccutchan): Allow for NULL returns? 1134 }
1136 TextBuffer* buffer = js->buffer(); 1135 js->buffer()->AddString(response);
1137 buffer->AddString(r); 1136 js->PostReply();
1138 free(const_cast<char*>(r)); 1137 free(const_cast<char*>(response));
1139 } 1138 }
1140 1139
1141 1140
1142 void Service::RegisterIsolateEmbedderCallback( 1141 void Service::RegisterIsolateEmbedderCallback(
1143 const char* name, 1142 const char* name,
1144 Dart_ServiceRequestCallback callback, 1143 Dart_ServiceRequestCallback callback,
1145 void* user_data) { 1144 void* user_data) {
1146 if (name == NULL) { 1145 if (name == NULL) {
1147 return; 1146 return;
1148 } 1147 }
(...skipping 2907 matching lines...) Expand 10 before | Expand all | Expand 10 after
4056 if (strcmp(method_name, method.name) == 0) { 4055 if (strcmp(method_name, method.name) == 0) {
4057 return &method; 4056 return &method;
4058 } 4057 }
4059 } 4058 }
4060 return NULL; 4059 return NULL;
4061 } 4060 }
4062 4061
4063 #endif // !PRODUCT 4062 #endif // !PRODUCT
4064 4063
4065 } // namespace dart 4064 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/include/dart_tools_api.h ('k') | runtime/vm/service_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698