Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1710)

Unified Diff: runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart

Issue 143973005: Code coverage in Observatory (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
diff --git a/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart b/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
index c28cb8af385af3583bd11c07037317c53b204248..eb77cf7b6b6ed90224aadaa87a070e75b0c383d1 100644
--- a/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
+++ b/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
@@ -102,6 +102,18 @@ abstract class RequestManager extends Observable {
return prefix.substring(1);
}
+ static final RegExp _scriptMatcher = new RegExp(r'/isolates/\d+/scripts/.+');
+ static bool isScriptRequest(url) => _scriptMatcher.hasMatch(url);
+ static final RegExp _scriptPrefixMatcher =
+ new RegExp(r'/isolates/\d+/');
+ static String scriptUrlFromRequest(String url) {
+ var m = _scriptPrefixMatcher.matchAsPrefix(url);
+ if (m == null) {
+ return null;
+ }
+ return m.input.substring(m.end);
+ }
+
void _setModelResponse(String type, String modelName, dynamic model) {
var response = {
'type': type,
@@ -148,6 +160,50 @@ abstract class RequestManager extends Observable {
}).catchError(_requestCatchError);
}
+ void _getScript(String requestString) {
+ var isolateId = isolateIdFromRequest(requestString);
+ if (isolateId == null) {
+ setResponseError('$isolateId is not an isolate id.');
+ return;
+ }
+ var isolate = _application.isolateManager.getIsolate(isolateId);
+ if (isolate == null) {
+ setResponseError('$isolateId could not be found.');
+ return;
+ }
+ var url = scriptUrlFromRequest(requestString);
+ if (url == null) {
+ setResponseError('$requestString is not a valid script request.');
+ return;
+ }
+ var script = isolate.scripts[url];
+ if ((script != null) && !script.needsSource) {
+ Logger.root.info('Found script ${script.scriptRef['name']} in isolate');
+ _setModelResponse('Script', 'script', script);
+ return;
+ }
+ if (script != null) {
+ // The isolate has the script but no script source code.
+ requestMap(requestString).then((response) {
+ assert(response['type'] == 'Script');
+ script._processSource(response['source']);
+ Logger.root.info(
+ 'Grabbed script ${script.scriptRef['name']} source.');
+ _setModelResponse('Script', 'script', script);
+ });
+ return;
+ }
+ // New script.
+ requestMap(requestString).then((response) {
+ assert(response['type'] == 'Script');
+ var script = new Script.fromMap(response);
+ Logger.root.info(
+ 'Added script ${script.scriptRef['name']} to isolate.');
+ _setModelResponse('Script', 'script', script);
+ isolate.scripts[url] = script;
+ });
+ }
+
void _requestCatchError(e, st) {
if (e is HttpRequest) {
setResponseRequestError(e.target);
@@ -163,6 +219,10 @@ abstract class RequestManager extends Observable {
_getCode(requestString);
return;
}
+ if (isScriptRequest(requestString)) {
+ _getScript(requestString);
+ return;
+ }
request(requestString).then((responseString) {
parseResponses(responseString);
}).catchError(_requestCatchError);

Powered by Google App Engine
This is Rietveld 408576698