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

Side by Side Diff: runtime/observatory/lib/src/app/target_manager.dart

Issue 2180803002: Converted Observatory vm-connect element (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Renamed DumpRepository to CrashDumpRepository Created 4 years, 4 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
OLDNEW
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
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.
4
5 part of app;
6
7 class ChromiumTargetLister {
8 /// Fetch the list of chromium [NetworkVMTargets].
9 static Future<List<WebSocketVMTarget>> fetch(String networkAddress) {
10 if (networkAddress == null) {
11 return new Future.error(null);
12 }
13 var encoded = Uri.encodeComponent(networkAddress);
14 var url = '/crdptargets/$encoded';
15 return HttpRequest.getString(url).then((String responseText) {
16 var list = JSON.decode(responseText);
17 if (list == null) {
18 return list;
19 }
20 for (var i = 0; i < list.length; i++) {
21 list[i] = new WebSocketVMTarget.fromMap(list[i]);
22 }
23 return list;
24 }).catchError((e) {
25 // An error occured while getting the list of Chrome targets.
26 // We eagerly request the list of targets, meaning this error can occur
27 // regularly. By catching it and dropping it, we avoid spamming errors
28 // on the console.
29 });
30 }
31 }
32
33 class TargetManager extends Observable {
34 static const _historyKey = 'history';
35 final SettingsGroup _settings = new SettingsGroup('targetManager');
36 final List history = new ObservableList();
37 WebSocketVMTarget defaultTarget;
38
39 String _networkAddressOfDefaultTarget() {
40 if (Utils.runningInJavaScript()) {
41 // We are running as JavaScript, use the same host that Observatory has
42 // been loaded from.
43 return 'ws://${window.location.host}/ws';
44 } else {
45 // Otherwise, assume we are running from Dart Editor and want to connect
46 // to the default host.
47 return 'ws://localhost:8181/ws';
48 }
49 }
50 TargetManager() {
51 _restore();
52 // Add a default standalone VM target.
53 defaultTarget = findOrMake(_networkAddressOfDefaultTarget());
54 assert(defaultTarget != null);
55 add(defaultTarget);
56 }
57
58 void clearHistory() {
59 history.clear();
60 _store();
61 }
62
63 WebSocketVMTarget findOrMake(String networkAddress) {
64 var target;
65 target = _find(networkAddress);
66 if (target != null) {
67 return target;
68 }
69 target = new WebSocketVMTarget(networkAddress);
70 return target;
71 }
72
73 /// Find by networkAddress.
74 WebSocketVMTarget _find(String networkAddress) {
75 var r;
76 history.forEach((item) {
77 if ((item.networkAddress == networkAddress) && (item.chrome == false)) {
78 r = item;
79 }
80 });
81 return r;
82 }
83
84 void add(WebSocketVMTarget item) {
85 if (item.chrome) {
86 // We don't store chrome tabs.
87 return;
88 }
89 if (history.contains(item)) {
90 return;
91 }
92 // Not inserting duplicates.
93 assert(_find(item.networkAddress) == null);
94 history.add(item);
95 _sort();
96 _store();
97 }
98
99 void remove(WebSocketVMTarget target) {
100 history.remove(target);
101 _sort();
102 _store();
103 }
104
105 void _sort() {
106 this.history.sort((WebSocketVMTarget a, WebSocketVMTarget b) {
107 return b.lastConnectionTime.compareTo(a.lastConnectionTime);
108 });
109 }
110
111 /// After making a change, update settings.
112 void _store() {
113 _sort();
114 _settings.set(_historyKey, history);
115 }
116
117 /// Read settings from data store.
118 void _restore() {
119 this.history.clear();
120 var loaded = _settings.get(_historyKey);
121 if (loaded == null) {
122 return;
123 }
124 for (var i = 0; i < loaded.length; i++) {
125 loaded[i] = new WebSocketVMTarget.fromMap(loaded[i]);
126 }
127 this.history.addAll(loaded);
128 _sort();
129 }
130 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/app/page.dart ('k') | runtime/observatory/lib/src/elements/css/shared.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698