Index: dart/runtime/bin/vmservice/client/lib/src/observatory/location_manager.dart |
=================================================================== |
--- dart/runtime/bin/vmservice/client/lib/src/observatory/location_manager.dart (revision 31530) |
+++ dart/runtime/bin/vmservice/client/lib/src/observatory/location_manager.dart (working copy) |
@@ -10,11 +10,14 @@ |
class LocationManager extends Observable { |
static const int InvalidIsolateId = 0; |
static const String defaultHash = '#/isolates/'; |
- static final RegExp currentIsolateMatcher = new RegExp(r"#/isolates/\d+/"); |
+ static final RegExp currentIsolateMatcher = new RegExp(r"#/isolates/\d+"); |
+ static final RegExp currentIsolateProfileMatcher = |
+ new RegExp(r'#/isolates/\d+/profile'); |
ObservatoryApplication _application; |
ObservatoryApplication get application => _application; |
+ @observable bool profile = false; |
@observable String currentHash = ''; |
@observable Uri currentHashUri; |
void init() { |
@@ -48,24 +51,15 @@ |
return currentIsolateAnchorPrefix() != null; |
} |
- bool get isScriptLink { |
- String type = currentHashUri.queryParameters['type']; |
- return type == 'Script'; |
- } |
- |
- String get scriptName { |
- return Uri.decodeQueryComponent(currentHashUri.queryParameters['name']); |
- } |
- |
/// Extract the current isolate id as an integer. Returns [InvalidIsolateId] |
/// if none is present in window.location. |
- int currentIsolateId() { |
- String isolatePrefix = currentIsolateAnchorPrefix(); |
- if (isolatePrefix == null) { |
- return InvalidIsolateId; |
+ String currentIsolateId() { |
+ var prefix = currentIsolateAnchorPrefix(); |
+ if (prefix == null) { |
+ return ''; |
} |
- String id = isolatePrefix.split("/")[2]; |
- return int.parse(id); |
+ // Chop off the '/#'. |
+ return prefix.substring(2); |
} |
/// If no anchor is set, set the default anchor and return true. |
@@ -86,7 +80,12 @@ |
// Chomp off the # |
String requestUrl = currentHash.substring(1); |
currentHashUri = Uri.parse(requestUrl); |
- application.requestManager.get(requestUrl); |
+ if (currentIsolateProfileMatcher.hasMatch(currentHash)) { |
+ // We do not automatically fetch profile data. |
+ profile = true; |
+ } else { |
+ application.requestManager.get(requestUrl); |
+ } |
} |
/// Create a request for [l] on the current isolate. |
@@ -99,59 +98,16 @@ |
return relativeLink(isolateId, l); |
} |
- /// Create a request for [objectId] on the current isolate. |
+ /// Create a request for [scriptURL] on the current isolate. |
@observable |
- String currentIsolateObjectLink(int objectId) { |
- var isolateId = currentIsolateId(); |
- if (isolateId == LocationManager.InvalidIsolateId) { |
- return defaultHash; |
- } |
- return objectLink(isolateId, objectId); |
+ String currentIsolateScriptLink(String scriptURL) { |
+ var encoded = Uri.encodeComponent(scriptURL); |
+ return currentIsolateRelativeLink('scripts/$encoded'); |
} |
- /// Create a request for [cid] on the current isolate. |
- @observable |
- String currentIsolateClassLink(int cid) { |
- var isolateId = currentIsolateId(); |
- if (isolateId == LocationManager.InvalidIsolateId) { |
- return defaultHash; |
- } |
- return classLink(isolateId, cid); |
- } |
- |
- /// Create a request for the script [objectId] with script [name]. |
- @observable |
- String currentIsolateScriptLink(int objectId, String name) { |
- var isolateId = currentIsolateId(); |
- if (isolateId == LocationManager.InvalidIsolateId) { |
- return defaultHash; |
- } |
- return scriptLink(isolateId, objectId, name); |
- } |
- |
/// Create a request for [l] on [isolateId]. |
@observable |
- String relativeLink(int isolateId, String l) { |
- return '#/isolates/$isolateId/$l'; |
+ String relativeLink(String isolateId, String l) { |
+ return '#/$isolateId/$l'; |
} |
- |
- /// Create a request for [objectId] on [isolateId]. |
- @observable |
- String objectLink(int isolateId, int objectId) { |
- return '#/isolates/$isolateId/objects/$objectId'; |
- } |
- |
- /// Create a request for [cid] on [isolateId]. |
- @observable |
- String classLink(int isolateId, int cid) { |
- return '#/isolates/$isolateId/classes/$cid'; |
- } |
- |
- @observable |
- /// Create a request for the script [objectId] with script [url]. |
- String scriptLink(int isolateId, int objectId, String name) { |
- String encodedName = Uri.encodeQueryComponent(name); |
- return '#/isolates/$isolateId/objects/$objectId' |
- '?type=Script&name=$encodedName'; |
- } |
} |