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 13f9091c228dfaed5eb205f20ffd3761d68f3d8b..05d807a6b73d19626e381ef7f8e6dfdace8c98dc 100644 |
--- a/runtime/observatory/lib/src/app/location_manager.dart |
+++ b/runtime/observatory/lib/src/app/location_manager.dart |
@@ -79,12 +79,25 @@ class LocationManager extends Observable { |
/// Notify the current page that something has changed. |
_visit() { |
- _app._visit(_uri, internalArguments); |
+ runZoned(() => _app._visit(_uri, internalArguments), |
+ onError: (e, st) { |
+ if (e is IsolateNotFound) { |
+ var newPath = _app.vm == null ? '/vm-connect' : '/isolate-reconnect'; |
+ var parameters = {}; |
+ parameters.addAll(_uri.queryParameters); |
+ parameters['originalPath'] = _uri.path; |
+ parameters['originalIsolateId'] = parameters['isolateId']; |
+ var generatedUri = new Uri(path: newPath, queryParameters: parameters); |
+ go(makeLink(generatedUri.toString()), true); |
+ return; |
+ } |
+ throw e; |
+ }); |
} |
/// 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) { |
if (!window.confirm('Connection with VM has been lost. ' |
'Proceeding will lose current page.')) { |
return; |
@@ -101,7 +114,11 @@ class LocationManager extends Observable { |
/// Starting with the current uri path and queryParameters, update |
/// queryParameters present in [updateParameters], then generate a new uri |
/// and navigate to that. |
- goParameter(Map updatedParameters, [bool addToBrowserHistory = true]) { |
+ goReplacingParameters(Map updatedParameters, [bool addToBrowserHistory = true]) { |
+ go(makeLinkReplacingParameter(updatedParameters), addToBrowserHistory); |
+ } |
+ |
+ makeLinkReplacingParameters(Map updatedParameters) { |
var parameters = new Map.from(_uri.queryParameters); |
updatedParameters.forEach((k, v) { |
parameters[k] = v; |
@@ -109,7 +126,17 @@ class LocationManager extends Observable { |
// Ensure path starts with a slash. |
var path = uri.path.startsWith('/') ? uri.path : '/${uri.path}'; |
var generatedUri = new Uri(path: path, queryParameters: parameters); |
- go(makeLink(generatedUri.toString()), addToBrowserHistory); |
+ return makeLink(generatedUri.toString()); |
+ } |
+ |
+ goForwardingParameters(String newPath, [bool addToBrowserHistory = true]) { |
+ go(makeLinkForwardingParameters(newPath), addToBrowserHistory); |
+ } |
+ |
+ makeLinkForwardingParameters(String newPath) { |
+ var parameters = _uri.queryParameters; |
+ var generatedUri = new Uri(path: newPath, queryParameters: parameters); |
+ return makeLink(generatedUri.toString()); |
} |
/// Utility event handler when clicking on application url link. |