blob: af17cf3a4ee7ce01124644ef788b98188d94faf6 [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* Provides the UI to start and stop RTP recording, forwards the start/stop
* commands to Chrome, and updates the UI based on dump updates. Also provides
* creating a file containing all PeerConnection updates and stats.
*/
var DumpCreator = (function() {
/**
* @param {Element} containerElement The parent element of the dump creation
* UI.
* @constructor
*/
function DumpCreator(containerElement) {
/**
* True if the RTP packets are being recorded.
* @type {bool}
* @private
*/
this.recording_ = false;
/**
* @type {!Object.<string>}
* @private
* @const
*/
this.StatusStrings_ = {
NOT_STARTED: 'not started.',
RECORDING: 'recording...',
},
/**
* The status of dump creation.
* @type {string}
* @private
*/
this.status_ = this.StatusStrings_.NOT_STARTED;
/**
* The root element of the dump creation UI.
* @type {Element}
* @private
*/
this.root_ = document.createElement('details');
this.root_.className = 'peer-connection-dump-root';
containerElement.appendChild(this.root_);
var summary = document.createElement('summary');
this.root_.appendChild(summary);
summary.textContent = 'Create Dump';
var content = document.createElement('pre');
this.root_.appendChild(content);
content.innerHTML = '<button disabled></button> Status: <span></span>' +
'<div><a><button>' +
'Download the PeerConnection updates and stats data' +
'</button></a></div>';
content.getElementsByTagName('button')[0].addEventListener(
'click', this.onRtpToggled_.bind(this));
content.getElementsByTagName('a')[0].addEventListener(
'click', this.onDownloadData_.bind(this));
this.updateDisplay_();
}
DumpCreator.prototype = {
/**
* Downloads the PeerConnection updates and stats data as a file.
*
* @private
*/
onDownloadData_: function() {
var textBlob =
new Blob([JSON.stringify(peerConnectionDataStore, null, ' ')],
{type: 'octet/stream'});
var URL = window.webkitURL.createObjectURL(textBlob);
this.root_.getElementsByTagName('a')[0].href = URL;
// The default action of the anchor will download the URL.
},
/**
* Handles the event of toggling the rtp recording state.
*
* @private
*/
onRtpToggled_: function() {
if (this.recording_) {
this.recording_ = false;
this.status_ = this.StatusStrings_.NOT_STARTED;
chrome.send('stopRtpRecording');
} else {
this.recording_ = true;
this.status_ = this.StatusStrings_.RECORDING;
chrome.send('startRtpRecording');
}
this.updateDisplay_();
},
/**
* Updates the UI based on the recording status.
*
* @private
*/
updateDisplay_: function() {
if (this.recording_) {
this.root_.getElementsByTagName('button')[0].textContent =
'Stop Recording RTP Packets';
} else {
this.root_.getElementsByTagName('button')[0].textContent =
'Start Recording RTP Packets';
}
this.root_.getElementsByTagName('span')[0].textContent = this.status_;
},
/**
* Set the status to the content of the update.
* @param {!Object} update
*/
onUpdate: function(update) {
if (this.recording_) {
this.status_ = JSON.stringify(update);
this.updateDisplay_();
}
},
};
return DumpCreator;
})();