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

Side by Side Diff: runtime/bin/vmservice_impl.cc

Issue 170943003: Allow for embedder provided service request handlers (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | runtime/include/dart_api.h » ('j') | runtime/vm/service.cc » ('J')
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 "bin/vmservice_impl.h" 5 #include "bin/vmservice_impl.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 8
9 #include "bin/builtin.h" 9 #include "bin/builtin.h"
10 #include "bin/dartutils.h" 10 #include "bin/dartutils.h"
11 #include "bin/isolate_data.h" 11 #include "bin/isolate_data.h"
12 #include "bin/platform.h"
12 #include "bin/thread.h" 13 #include "bin/thread.h"
14 #include "platform/json.h"
13 15
14 namespace dart { 16 namespace dart {
15 namespace bin { 17 namespace bin {
16 18
17 #define RETURN_ERROR_HANDLE(handle) \ 19 #define RETURN_ERROR_HANDLE(handle) \
18 if (Dart_IsError(handle)) { \ 20 if (Dart_IsError(handle)) { \
19 return handle; \ 21 return handle; \
20 } 22 }
21 23
22 #define SHUTDOWN_ON_ERROR(handle) \ 24 #define SHUTDOWN_ON_ERROR(handle) \
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 static ResourcesEntry* ResourcesTable() { 81 static ResourcesEntry* ResourcesTable() {
80 return &__service_bin_resources_[0]; 82 return &__service_bin_resources_[0];
81 } 83 }
82 84
83 DISALLOW_ALLOCATION(); 85 DISALLOW_ALLOCATION();
84 DISALLOW_IMPLICIT_CONSTRUCTORS(Resources); 86 DISALLOW_IMPLICIT_CONSTRUCTORS(Resources);
85 }; 87 };
86 88
87 const char* VmService::error_msg_ = NULL; 89 const char* VmService::error_msg_ = NULL;
88 90
91 static void* embedder_request_callback_user_data = reinterpret_cast<void*>(0x3);
92
93 static const char* embedder_request_callback(const char* name,
94 const char** arguments,
95 intptr_t num_arguments,
96 const char** option_keys,
97 const char** option_values,
98 intptr_t num_options,
99 void* user_data) {
100 ASSERT(user_data == embedder_request_callback_user_data);
101 TextBuffer tb(256);
102 tb.AddString("{\"type\": \"Embedder\",\"value\":\"Standalone\"}");
turnidge 2014/02/18 22:25:12 Shouldn't this be a root-level request?
Cutch 2014/02/18 22:34:10 I'm dropping these for now.
103 return tb.Steal();
104 }
105
106
107 static const char* embedder_os_callback(const char* name,
108 const char** arguments,
109 intptr_t num_arguments,
110 const char** option_keys,
111 const char** option_values,
112 intptr_t num_options,
113 void* user_data) {
114 TextBuffer tb(256);
115 tb.AddString("{\"type\": \"OS\", \"value\":\"");
116 tb.AddString(Platform::OperatingSystem());
117 tb.AddString("\"}");
118 return tb.Steal();
119 }
120
121
89 bool VmService::Start(intptr_t server_port) { 122 bool VmService::Start(intptr_t server_port) {
90 bool r = _Start(server_port); 123 bool r = _Start(server_port);
91 if (!r) { 124 if (!r) {
92 return r; 125 return r;
93 } 126 }
127 // Register an embedder provided isolate request callback.
128 Dart_RegisterIsolateServiceRequestCallback(
129 "_embedder",
130 embedder_request_callback,
131 embedder_request_callback_user_data);
132 Dart_RegisterRootServiceRequestCallback("_os", embedder_os_callback, NULL);
94 // Start processing messages in a new thread. 133 // Start processing messages in a new thread.
95 dart::Thread::Start(ThreadMain, NULL); 134 dart::Thread::Start(ThreadMain, NULL);
96 return true; 135 return true;
97 } 136 }
98 137
99 138
100 bool VmService::_Start(intptr_t server_port) { 139 bool VmService::_Start(intptr_t server_port) {
101 ASSERT(Dart_CurrentIsolate() == NULL); 140 ASSERT(Dart_CurrentIsolate() == NULL);
102 Dart_Isolate isolate = Dart_GetServiceIsolate(NULL); 141 Dart_Isolate isolate = Dart_GetServiceIsolate(NULL);
103 if (isolate == NULL) { 142 if (isolate == NULL) {
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 printf("Service exited with an error:\n%s\n", Dart_GetError(result)); 313 printf("Service exited with an error:\n%s\n", Dart_GetError(result));
275 } 314 }
276 Dart_ExitScope(); 315 Dart_ExitScope();
277 Dart_ExitIsolate(); 316 Dart_ExitIsolate();
278 } 317 }
279 318
280 319
281 320
282 } // namespace bin 321 } // namespace bin
283 } // namespace dart 322 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/include/dart_api.h » ('j') | runtime/vm/service.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698