1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 tvcm.require('tvcm.utils');
8 tvcm.require('tvcm.ui');
9 tvcm.requireTemplate('ui.spy');
11 tvcm.exportTo('ui', function() {
15 var LogMessage = tvcm.ui.define('x-spy-log-message');
17 LogMessage.prototype = {
18 __proto__: HTMLUnknownElement.prototype,
20 decorate: function() {
27 set message(message) {
28 this.message_ = message;
29 this.textContent = JSON.stringify(message);
37 var Spy = tvcm.ui.define('x-spy');
40 __proto__: HTMLUnknownElement.prototype,
42 decorate: function() {
43 var node = tvcm.instantiateTemplate('#x-spy-template');
44 this.appendChild(node);
46 this.channel_ = undefined;
47 this.onMessage_ = this.onMessage_.bind(this);
49 var commandEl = this.querySelector('#command');
50 commandEl.addEventListener('keydown', function(e) {
51 if (e.keyCode == 13) {
53 this.onCommandEntered_();
57 this.updateDisabledStates_();
64 set channel(channel) {
66 this.channel_.removeEventListener('message', this.onMessage_);
67 this.channel_ = channel;
69 this.channel_.addEventListener('message', this.onMessage_);
70 this.updateDisabledStates_();
73 updateDisabledStates_: function() {
74 var connected = this.channel_ !== undefined;
76 this.querySelector('#command').disabled = !connected;
79 onCommandEntered_: function(cmd) {
80 var commandEl = this.querySelector('#command');
81 this.channel_.send(JSON.stringify(commandEl.value));
85 onMessage_: function(message) {
86 var messageEl = new LogMessage();
87 messageEl.message = message.data;
88 this.querySelector('messages').appendChild(messageEl);