| OLD | NEW |
| (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 library vm_connect_element; |
| 6 |
| 7 import 'dart:html'; |
| 8 import 'package:polymer/polymer.dart'; |
| 9 import 'observatory_element.dart'; |
| 10 import 'package:observatory/app.dart'; |
| 11 import 'package:observatory/service_html.dart'; |
| 12 |
| 13 void _connectToVM(ObservatoryApplication app, NetworkVMTarget target) { |
| 14 app.vm = new NetworkVM(target); |
| 15 } |
| 16 |
| 17 @CustomTag('vm-connect-target') |
| 18 class VMConnectTargetElement extends ObservatoryElement { |
| 19 @published NetworkVMTarget target; |
| 20 |
| 21 VMConnectTargetElement.created() : super.created(); |
| 22 |
| 23 bool get isChromeTarget { |
| 24 if (target == null) { |
| 25 return false; |
| 26 } |
| 27 return target.chrome; |
| 28 } |
| 29 |
| 30 bool get isCurrentTarget { |
| 31 if (app.vm == null) { |
| 32 return false; |
| 33 } |
| 34 return (app.vm as NetworkVM).target == target; |
| 35 } |
| 36 |
| 37 void connectToVm(MouseEvent event, var detail, Element node) { |
| 38 if (event.button > 0 || event.metaKey || event.ctrlKey || |
| 39 event.shiftKey || event.altKey) { |
| 40 // Not a left-click or a left-click with a modifier key: |
| 41 // Let browser handle. |
| 42 return; |
| 43 } |
| 44 event.preventDefault(); |
| 45 NetworkVM currentVM = app.vm; |
| 46 if ((currentVM == null) || (currentVM.target != target)) { |
| 47 _connectToVM(app, target); |
| 48 } |
| 49 var href = node.attributes['href']; |
| 50 app.locationManager.go(href); |
| 51 } |
| 52 |
| 53 void deleteVm(MouseEvent event, var detail, Element node) { |
| 54 app.targets.remove(target); |
| 55 } |
| 56 } |
| 57 |
| 58 @CustomTag('vm-connect') |
| 59 class VMConnectElement extends ObservatoryElement { |
| 60 @published String standaloneVmAddress = ''; |
| 61 @published String chromiumAddress = 'localhost:9222'; |
| 62 @observable ObservableList<NetworkVMTarget> chromeTargets = |
| 63 new ObservableList<NetworkVMTarget>(); |
| 64 |
| 65 VMConnectElement.created() : super.created() { |
| 66 pollPeriod = new Duration(seconds: 1); |
| 67 } |
| 68 |
| 69 void _connect(NetworkVMTarget target) { |
| 70 _connectToVM(app, target); |
| 71 app.locationManager.go('#/vm'); |
| 72 } |
| 73 |
| 74 void onPoll() { |
| 75 _refreshTabs(); |
| 76 } |
| 77 |
| 78 String _normalizeStandaloneAddress(String networkAddress) { |
| 79 if (networkAddress.startsWith('ws://')) { |
| 80 return networkAddress; |
| 81 } |
| 82 return 'ws://${networkAddress}/ws'; |
| 83 } |
| 84 |
| 85 void connectStandalone(Event e, var detail, Node target) { |
| 86 // Prevent any form action. |
| 87 e.preventDefault(); |
| 88 var targetAddress = _normalizeStandaloneAddress(standaloneVmAddress); |
| 89 var target = app.targets.findOrMake(targetAddress); |
| 90 _connect(target); |
| 91 } |
| 92 |
| 93 void getTabs(Event e, var detail, Node target) { |
| 94 // Prevent any form action. |
| 95 e.preventDefault(); |
| 96 _refreshTabs(); |
| 97 } |
| 98 |
| 99 void _refreshTabs() { |
| 100 ChromiumTargetLister.fetch(chromiumAddress).then((targets) { |
| 101 chromeTargets.clear(); |
| 102 if (targets == null) { |
| 103 return; |
| 104 } |
| 105 for (var i = 0; i < targets.length; i++) { |
| 106 if (targets[i].networkAddress == null) { |
| 107 // Don't add targets that don't have a network address. |
| 108 // This happens when a tab has devtools open! |
| 109 continue; |
| 110 } |
| 111 chromeTargets.add(targets[i]); |
| 112 } |
| 113 }).catchError((e) { |
| 114 chromeTargets.clear(); |
| 115 }); |
| 116 } |
| 117 } |
| OLD | NEW |