dump_creator.js revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Provides the UI to start and stop RTP recording, forwards the start/stop 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * commands to Chrome, and updates the UI based on dump updates. 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {Element} containerElement The parent element of the dump creation UI. 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var DumpCreator = (function() { 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {Element} containerElement The parent element of the dump creation 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * UI. 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @constructor 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) function DumpCreator(containerElement) { 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * True if the RTP packets are being recorded. 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {bool} 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.recording_ = false; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {!Object.<string>} 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.StatusStrings_ = { 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOT_STARTED: 'not started.', 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RECORDING: 'recording...', 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The status of dump creation. 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {string} 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.status_ = this.StatusStrings_.NOT_STARTED; 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The root element of the dump creation UI. 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {Element} 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.root_ = document.createElement('details'); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.root_.className = 'peer-connection-dump-root'; 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) containerElement.appendChild(this.root_); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var summary = document.createElement('summary'); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.root_.appendChild(summary); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) summary.textContent = 'Create Dump'; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var content = document.createElement('pre'); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.root_.appendChild(content); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content.innerHTML = '<button></button> Status: <span></span>'; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content.getElementsByTagName('button')[0].addEventListener( 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'click', this.onToggled_.bind(this)); 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.updateDisplay_(); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DumpCreator.prototype = { 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Handles the event of toggling the dump recording state. 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onToggled_: function() { 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (this.recording_) { 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.recording_ = false; 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.status_ = this.StatusStrings_.NOT_STARTED; 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome.send('stopRtpRecording'); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.recording_ = true; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.status_ = this.StatusStrings_.RECORDING; 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome.send('startRtpRecording'); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.updateDisplay_(); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Updates the UI based on the recording status. 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) updateDisplay_: function() { 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (this.recording_) { 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.root_.getElementsByTagName('button')[0].textContent = 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'Stop Recording RTP Packets'; 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.root_.getElementsByTagName('button')[0].textContent = 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'Start Recording RTP Packets'; 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.root_.getElementsByTagName('span')[0].textContent = this.status_; 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Set the status to the content of the update. 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {!Object} update 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onUpdate: function(update) { 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (this.recording_) { 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.status_ = JSON.stringify(update); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.updateDisplay_(); 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return DumpCreator; 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)})(); 113