Index: runtime/observatory/lib/src/app/location_manager.dart |
diff --git a/runtime/observatory/lib/src/app/location_manager.dart b/runtime/observatory/lib/src/app/location_manager.dart |
index 17b6c8c4057b6e10a29df38e58989f458e23fd65..fee288446c94b6efc7629d4b576c0ba3367e3faa 100644 |
--- a/runtime/observatory/lib/src/app/location_manager.dart |
+++ b/runtime/observatory/lib/src/app/location_manager.dart |
@@ -82,7 +82,8 @@ class LocationManager extends Observable { |
runZoned(() => _app._visit(_uri, internalArguments), |
onError: (e, st) { |
if (e is IsolateNotFound) { |
- var newPath = _app.vm == null ? '/vm-connect' : '/isolate-reconnect'; |
+ var newPath = ((_app.vm == null || _app.vm.isDisconnected) |
+ ? '/vm-connect' : '/isolate-reconnect'); |
var parameters = {}; |
parameters.addAll(_uri.queryParameters); |
parameters['originalPath'] = _uri.path; |
@@ -91,19 +92,27 @@ class LocationManager extends Observable { |
go(makeLink(generatedUri.toString()), true); |
return; |
} |
- throw e; |
+ // Surface any uncaught exceptions. |
+ _app.handleException(e, st); |
}); |
} |
/// Navigate to [url]. |
void go(String url, [bool addToBrowserHistory = true]) { |
- if ((url != makeLink('/vm-connect')) && _app.vm == null) { |
+ if ((url != makeLink('/vm-connect')) && |
+ (_app.vm == null || _app.vm.isDisconnected)) { |
if (!window.confirm('Connection with VM has been lost. ' |
'Proceeding will lose current page.')) { |
return; |
} |
- url = makeLink('/vm-connect/'); |
+ url = makeLink('/vm-connect'); |
} |
+ |
+ if (url == makeLink('/vm-connect')) { |
+ // When we go to the vm-connect page, drop all notifications. |
+ _app.notifications.clear(); |
+ } |
+ |
if (addToBrowserHistory) { |
_addToBrowserHistory(url); |
} |