Chromium Code Reviews| Index: runtime/bin/vmservice/client/lib/src/app/target_manager.dart |
| diff --git a/runtime/bin/vmservice/client/lib/src/app/target_manager.dart b/runtime/bin/vmservice/client/lib/src/app/target_manager.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..4f99b7eb173eece055552585e58486c0c27a3da4 |
| --- /dev/null |
| +++ b/runtime/bin/vmservice/client/lib/src/app/target_manager.dart |
| @@ -0,0 +1,127 @@ |
| +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +part of app; |
| + |
| +class ChromiumTargetLister { |
| + /// Fetch the list of chromium [NetworkVMTargets]. |
| + static Future<List<NetworkVMTarget>> fetch(String networkAddress) { |
| + if (networkAddress == null) { |
| + return new Future.error(null); |
| + } |
| + var encoded = Uri.encodeComponent(networkAddress); |
| + var url = '/crdptargets/$encoded'; |
| + return HttpRequest.getString(url).then((String responseText) { |
| + var list = JSON.decode(responseText); |
| + if (list == null) { |
| + return list; |
| + } |
| + for (var i = 0; i < list.length; i++) { |
| + list[i] = new NetworkVMTarget.fromMap(list[i]); |
| + } |
| + return list; |
| + }).catchError((e) { |
| + // |
|
turnidge
2014/07/01 00:27:47
Fill in this comment?
Cutch
2014/07/01 17:14:51
Done.
|
| + }); |
| + } |
| +} |
| + |
| +class TargetManager extends Observable { |
| + static const _historyKey = 'history'; |
| + final SettingsGroup _settings = new SettingsGroup('targetManager'); |
| + final List history = new ObservableList(); |
| + NetworkVMTarget defaultTarget; |
| + |
| + String _networkAddressOfDefaultTarget() { |
| + if (Utils.runningInJavaScript()) { |
| + // We are running as JavaScript, use the same host that Observatory has |
| + // been loaded from. |
| + return 'ws://${window.location.host}/ws'; |
| + } else { |
| + // Otherwise, assume we are running from Dart Editor and want to connect |
| + // to the default host. |
| + return 'ws://localhost:8181/ws'; |
|
turnidge
2014/07/01 00:27:47
This code seems familiar. Is it cloned elsewhere?
Cutch
2014/07/01 17:14:51
It moved here.
|
| + } |
| + } |
| + TargetManager() { |
| + _restore(); |
| + // Add a default standalone VM target. |
| + defaultTarget = findOrMake(_networkAddressOfDefaultTarget()); |
| + assert(defaultTarget != null); |
| + add(defaultTarget); |
| + } |
| + |
| + void clearHistory() { |
| + history.clear(); |
| + _store(); |
| + } |
| + |
| + NetworkVMTarget findOrMake(String networkAddress) { |
| + var target; |
| + target = _find(networkAddress); |
| + if (target != null) { |
| + return target; |
| + } |
| + target = new NetworkVMTarget(networkAddress); |
| + return target; |
| + } |
| + |
| + /// Find by networkAddress. |
| + NetworkVMTarget _find(String networkAddress) { |
| + var r; |
| + history.forEach((item) { |
| + if ((item.networkAddress == networkAddress) && (item.chrome == false)) { |
| + r = item; |
| + } |
| + }); |
| + return r; |
| + } |
| + |
| + void add(NetworkVMTarget item) { |
| + if (item.chrome) { |
| + // We don't store chrome tabs. |
| + return; |
| + } |
| + if (history.contains(item)) { |
| + return; |
| + } |
| + // Not inserting duplicates. |
| + assert(_find(item.networkAddress) == null); |
| + history.add(item); |
| + _sort(); |
| + _store(); |
| + } |
| + |
| + void remove(NetworkVMTarget target) { |
| + history.remove(target); |
| + _sort(); |
| + _store(); |
| + } |
| + |
| + void _sort() { |
| + this.history.sort((NetworkVMTarget a, NetworkVMTarget b) { |
| + return b.lastConnectionTime.compareTo(a.lastConnectionTime); |
| + }); |
| + } |
| + |
| + /// After making a change, update settings. |
| + void _store() { |
| + _sort(); |
| + _settings.set(_historyKey, history); |
| + } |
| + |
| + /// Read settings from data store. |
| + void _restore() { |
| + this.history.clear(); |
| + var loaded = _settings.get(_historyKey); |
| + if (loaded == null) { |
| + return; |
| + } |
| + for (var i = 0; i < loaded.length; i++) { |
| + loaded[i] = new NetworkVMTarget.fromMap(loaded[i]); |
| + } |
| + this.history.addAll(loaded); |
| + _sort(); |
| + } |
| +} |