Index: runtime/lib/developer.cc |
diff --git a/runtime/lib/developer.cc b/runtime/lib/developer.cc |
index 57a1a4c295abbd3ed4f96fc7ae94f1fb249c9869..e764ff9acc4f4d7207651fa5f421bf76823686f1 100644 |
--- a/runtime/lib/developer.cc |
+++ b/runtime/lib/developer.cc |
@@ -9,6 +9,7 @@ |
#include "vm/debugger.h" |
#include "vm/exceptions.h" |
#include "vm/flags.h" |
+#include "vm/message.h" |
#include "vm/native_entry.h" |
#include "vm/object.h" |
#include "vm/object_store.h" |
@@ -120,4 +121,53 @@ DEFINE_NATIVE_ENTRY(Developer_registerExtension, 2) { |
#endif // PRODUCT |
} |
+DEFINE_NATIVE_ENTRY(Developer_getServiceMajorVersion, 0) { |
+ return Smi::New(SERVICE_PROTOCOL_MAJOR_VERSION); |
rmacnak
2016/10/20 17:12:31
Consider returning 0 in product mode or no service
Cutch
2016/10/20 23:31:51
Done.
|
+} |
+ |
+ |
+DEFINE_NATIVE_ENTRY(Developer_getServiceMinorVersion, 0) { |
+ return Smi::New(SERVICE_PROTOCOL_MINOR_VERSION); |
+} |
+ |
+ |
+static void SendNull(const SendPort& port) { |
+ const Dart_Port destination_port_id = port.Id(); |
+ PortMap::PostMessage(new Message( |
+ destination_port_id, Object::null(), Message::kNormalPriority)); |
+} |
+ |
+ |
+DEFINE_NATIVE_ENTRY(Developer_getServerInfo, 1) { |
+ GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0)); |
+#if defined(PRODUCT) |
+ SendNull(port); |
+ return Object::null(); |
+#else |
+ if (!ServiceIsolate::IsRunning()) { |
+ SendNull(port); |
+ } else { |
+ ServiceIsolate::RequestServerInfo(port); |
+ } |
+ return Object::null(); |
+#endif |
+} |
+ |
+ |
+DEFINE_NATIVE_ENTRY(Developer_webServerControl, 2) { |
+ GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0)); |
+ GET_NON_NULL_NATIVE_ARGUMENT(Bool, enabled, arguments->NativeArgAt(1)); |
+#if defined(PRODUCT) |
+ SendNull(port); |
+ return Object::null(); |
+#else |
+ if (!ServiceIsolate::IsRunning()) { |
+ SendNull(port); |
+ } else { |
+ ServiceIsolate::ControlWebServer(port, enabled.value()); |
+ } |
+ return Object::null(); |
+#endif |
+} |
+ |
} // namespace dart |