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

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

Issue 119673004: Version 1.1.0-dev.5.2 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of observatory; 5 part of observatory;
6 6
7 /// A request response interceptor is called for each response. 7 /// A request response interceptor is called for each response.
8 typedef void RequestResponseInterceptor(); 8 typedef void RequestResponseInterceptor();
9 9
10 abstract class RequestManager extends Observable { 10 abstract class RequestManager extends Observable {
11 ObservatoryApplication _application; 11 ObservatoryApplication _application;
12 ObservatoryApplication get application => _application; 12 ObservatoryApplication get application => _application;
13 RequestResponseInterceptor interceptor; 13 RequestResponseInterceptor interceptor;
14 14
15 /// The default request prefix is 127.0.0.1 on port 8181. 15 /// The default request prefix is 127.0.0.1 on port 8181.
16 @observable String prefix = 'http://127.0.0.1:8181'; 16 @observable String prefix = 'http://127.0.0.1:8181';
17 /// List of responses. 17 /// List of responses.
18 @observable List<Map> responses = toObservable([]); 18 @observable List<Map> responses = toObservable([]);
19 19
20 /// Parse 20 /// Parse
21 void parseResponses(String responseString) { 21 void parseResponses(String responseString) {
22 var r = JSON.decode(responseString); 22 var r;
23 try {
24 r = JSON.decode(responseString);
25 } catch (e) {
26 setResponseError(e.message);
27 }
23 if (r is Map) { 28 if (r is Map) {
24 setResponses([r]); 29 setResponses([r]);
25 } else { 30 } else {
26 setResponses(r); 31 setResponses(r);
27 } 32 }
28 } 33 }
29 34
30 void setResponses(List<Map> r) { 35 void setResponses(List<Map> r) {
31 responses = toObservable(r); 36 responses = toObservable(r);
32 if (interceptor != null) { 37 if (interceptor != null) {
33 interceptor(); 38 interceptor();
34 } 39 }
35 } 40 }
36 41
37 void setResponseError(HttpRequest request) { 42 void setResponseRequestError(HttpRequest request) {
38 String error = '${request.status} ${request.statusText}'; 43 String error = '${request.status} ${request.statusText}';
39 if (request.status == 0) { 44 if (request.status == 0) {
40 error = 'No service found. Did you run with --enable-vm-service ?'; 45 error = 'No service found. Did you run with --enable-vm-service ?';
41 } 46 }
42 setResponses([{ 47 setResponses([{
43 'type': 'RequestError', 48 'type': 'RequestError',
44 'error': error 49 'error': error
45 }]); 50 }]);
46 } 51 }
47 52
53 void setResponseError(String message) {
54 setResponses([{
55 'type': 'Error',
56 'text': message
57 }]);
58 }
59
48 /// Request [requestString] from the VM service. Updates [responses]. 60 /// Request [requestString] from the VM service. Updates [responses].
49 /// Will trigger [interceptor] if one is set. 61 /// Will trigger [interceptor] if one is set.
50 void get(String requestString) { 62 void get(String requestString) {
51 if (_application.locationManager.isScriptLink) { 63 request(requestString).then((responseString) {
52 // We cache script sources. 64 parseResponses(responseString);
53 String scriptName = _application.locationManager.scriptName;
54 getScriptSource(scriptName, requestString).then((source) {
55 if (source != null) {
56 setResponses([{
57 'type': 'Script',
58 'source': source
59 }]);
60 } else {
61 setResponses([{
62 'type': 'RequestError',
63 'error': 'Source for $scriptName could not be loaded.'
64 }]);
65 }
66 });
67 } else {
68 request(requestString).then((responseString) {
69 parseResponses(responseString);
70 }).catchError((e) {
71 if (e is FormatException) {
72 setResponseError(e.message);
73 } else {
74 setResponseError(e.target);
75 }
76 });
77 }
78 }
79
80 Future<ScriptSource> getScriptSource(String name, String requestString) {
81 int isolateId = _application.locationManager.currentIsolateId();
82 Isolate isolate = _application.isolateManager.getIsolate(isolateId);
83 ScriptSource source = isolate.scripts[name];
84 if (source != null) {
85 return new Future.value(source);
86 }
87 return request(requestString).then((responseString) {
88 var r = JSON.decode(responseString);
89 ScriptSource scriptSource = new ScriptSource(r);
90 isolate.scripts[name] = scriptSource;
91 return scriptSource;
92 }).catchError((e) { 65 }).catchError((e) {
93 setResponseError(e.target); 66 setResponseRequestError(e.target);
94 return null; 67 return null;
95 }); 68 });
96 } 69 }
97 70
98 /// Abstract method. Given the [requestString], return a String in the 71 /// Abstract method. Given the [requestString], return a String in the
99 /// future which contains the reply from the VM service. 72 /// future which contains the reply from the VM service.
100 Future<String> request(String requestString); 73 Future<String> request(String requestString);
101 } 74 }
102 75
103 76
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 message['query'] = requestString; 113 message['query'] = requestString;
141 _requestSerial++; 114 _requestSerial++;
142 115
143 var completer = new Completer(); 116 var completer = new Completer();
144 _outstandingRequests[idString] = completer; 117 _outstandingRequests[idString] = completer;
145 118
146 window.parent.postMessage(JSON.encode(message), '*'); 119 window.parent.postMessage(JSON.encode(message), '*');
147 return completer.future; 120 return completer.future;
148 } 121 }
149 } 122 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698