| Index: runtime/bin/vmservice/vmservice_io.dart
 | 
| diff --git a/runtime/bin/vmservice/vmservice_io.dart b/runtime/bin/vmservice/vmservice_io.dart
 | 
| index 7ae65d480de9187bb17947987b00054397544afd..a883a73cf31165f9d60774c484c3f7f776c1628f 100644
 | 
| --- a/runtime/bin/vmservice/vmservice_io.dart
 | 
| +++ b/runtime/bin/vmservice/vmservice_io.dart
 | 
| @@ -162,6 +162,27 @@ Future<List<Map<String,String>>> listFilesCallback(Uri dirPath) async {
 | 
|    return result;
 | 
|  }
 | 
|  
 | 
| +Future<Uri> serverInformationCallback() async {
 | 
| +  _lazyServerBoot();
 | 
| +  return server.serverAddress;
 | 
| +}
 | 
| +
 | 
| +Future<Uri> webServerControlCallback(bool enable) async {
 | 
| +  _lazyServerBoot();
 | 
| +  if (server.running == enable) {
 | 
| +    // No change.
 | 
| +    return server.serverAddress;
 | 
| +  }
 | 
| +
 | 
| +  if (enable) {
 | 
| +    await server.startup();
 | 
| +    return server.serverAddress;
 | 
| +  } else {
 | 
| +    await server.shutdown(true);
 | 
| +    return server.serverAddress;
 | 
| +  }
 | 
| +}
 | 
| +
 | 
|  _clearFuture(_) {
 | 
|    serverFuture = null;
 | 
|  }
 | 
| @@ -204,6 +225,8 @@ main() {
 | 
|    VMServiceEmbedderHooks.writeStreamFile = writeStreamFileCallback;
 | 
|    VMServiceEmbedderHooks.readFile = readFileCallback;
 | 
|    VMServiceEmbedderHooks.listFiles = listFilesCallback;
 | 
| +  VMServiceEmbedderHooks.serverInformation = serverInformationCallback;
 | 
| +  VMServiceEmbedderHooks.webServerControl = webServerControlCallback;
 | 
|    // Always instantiate the vmservice object so that the exit message
 | 
|    // can be delivered and waiting loaders can be cancelled.
 | 
|    var service = new VMService();
 | 
| 
 |