Properly await hot reload (#808)
* Properly wait for hot reload
diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md
index 8e1280f..f3113b8 100644
--- a/dwds/CHANGELOG.md
+++ b/dwds/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.7.9-dev
+
+- Properly wait for hot reload to complete with the legacy module system.
+
 ## 0.7.8
 
 - Support optional argument `urlEncoder` that is used to encode remote URLs for
diff --git a/dwds/pubspec.yaml b/dwds/pubspec.yaml
index 95b88cc..e2b48ad 100644
--- a/dwds/pubspec.yaml
+++ b/dwds/pubspec.yaml
@@ -1,5 +1,5 @@
 name: dwds
-version: 0.7.8
+version: 0.7.9-dev
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/webdev/tree/master/dwds
 description: >-
diff --git a/dwds/web/reloader/legacy_restarter.dart b/dwds/web/reloader/legacy_restarter.dart
index d4a4be3..658392e 100644
--- a/dwds/web/reloader/legacy_restarter.dart
+++ b/dwds/web/reloader/legacy_restarter.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:html';
 import 'dart:js';
 
 import 'restarter.dart';
@@ -12,6 +13,17 @@
   Future<bool> restart() async {
     var dartLibrary = context['dart_library'] as JsObject;
     dartLibrary.callMethod('reload');
-    return true;
+    var reloadCompleter = Completer<bool>();
+    StreamSubscription sub;
+    sub = window.onMessage.listen((event) {
+      var message = event.data;
+      if (message is Map &&
+          message['type'] == 'DDC_STATE_CHANGE' &&
+          message['state'] == 'restart_end') {
+        reloadCompleter.complete(true);
+        sub.cancel();
+      }
+    });
+    return reloadCompleter.future;
   }
 }