Apply _RELATIVE relocations ahead of others.
[chromium-blink-merge.git] / content / browser / resources / media / dump_creator.js
blob15d708b3daf3b1af00f431ed5096da458f8a1803
1 // Copyright (c) 2013 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.
6 /**
7  * Provides the UI for dump creation.
8  */
9 var DumpCreator = (function() {
10   /**
11    * @param {Element} containerElement The parent element of the dump creation
12    *     UI.
13    * @constructor
14    */
15   function DumpCreator(containerElement) {
16     /**
17      * The root element of the dump creation UI.
18      * @type {Element}
19      * @private
20      */
21     this.root_ = document.createElement('details');
23     this.root_.className = 'peer-connection-dump-root';
24     containerElement.appendChild(this.root_);
25     var summary = document.createElement('summary');
26     this.root_.appendChild(summary);
27     summary.textContent = 'Create Dump';
28     var content = document.createElement('div');
29     this.root_.appendChild(content);
31     content.innerHTML = '<div><a><button>' +
32         'Download the PeerConnection updates and stats data' +
33         '</button></a></div>' +
34         '<p><label><input type=checkbox>' +
35         'Enable diagnostic audio recordings.</label></p>' +
36         '<p>A diagnostic audio recording is used for analyzing audio' +
37         ' problems. It contains the audio played out from the speaker and' +
38         ' recorded from the microphone and is saved to the local disk.' +
39         ' Checking this box will enable the recording for ongoing WebRTC' +
40         ' calls and for future WebRTC calls. When the box is unchecked or' +
41         ' this page is closed, all ongoing recordings will be stopped and' +
42         ' this recording functionality will be disabled for future WebRTC' +
43         ' calls. Recordings in multiple tabs are supported as well as' +
44         ' multiple recordings in the same tab. When enabling, you select a' +
45         ' base filename to save the dump(s) to. The base filename will have a' +
46         ' suffix appended to it as &lt;base filename&gt;.&lt;render process' +
47         ' ID&gt;.&lt;recording ID&gt;. If recordings are' +
48         ' disabled and then enabled using the same base filename, the' +
49         ' file(s) will be appended to and may become invalid. It is' +
50         ' recommended to choose a new base filename each time or move' +
51         ' the resulting files before enabling again. If track processing is' +
52         ' disabled (--disable-audio-track-processing): (1) Only one recording' +
53         ' per render process is supported. (2) When the box is unchecked or' +
54         ' this page is closed, ongoing recordings will continue until the' +
55         ' call ends or the page with the recording is closed.</p>';
57     content.getElementsByTagName('a')[0].addEventListener(
58         'click', this.onDownloadData_.bind(this));
59     content.getElementsByTagName('input')[0].addEventListener(
60         'click', this.onAecRecordingChanged_.bind(this));
61   }
63   DumpCreator.prototype = {
64     // Mark the AEC recording checkbox checked.
65     enableAecRecording: function() {
66       this.root_.getElementsByTagName('input')[0].checked = true;
67     },
69     // Mark the AEC recording checkbox unchecked.
70     disableAecRecording: function() {
71       this.root_.getElementsByTagName('input')[0].checked = false;
72     },
74     /**
75      * Downloads the PeerConnection updates and stats data as a file.
76      *
77      * @private
78      */
79     onDownloadData_: function() {
80       var dump_object =
81       {
82         'getUserMedia': userMediaRequests,
83         'PeerConnections': peerConnectionDataStore,
84       };
85       var textBlob = new Blob([JSON.stringify(dump_object, null, ' ')],
86                               {type: 'octet/stream'});
87       var URL = window.URL.createObjectURL(textBlob);
89       var anchor = this.root_.getElementsByTagName('a')[0];
90       anchor.href = URL;
91       anchor.download = 'webrtc_internals_dump.txt';
92       // The default action of the anchor will download the URL.
93     },
95     /**
96      * Handles the event of toggling the AEC recording state.
97      *
98      * @private
99      */
100     onAecRecordingChanged_: function() {
101       var enabled = this.root_.getElementsByTagName('input')[0].checked;
102       if (enabled) {
103         chrome.send('enableAecRecording');
104       } else {
105         chrome.send('disableAecRecording');
106       }
107     },
108   };
109   return DumpCreator;
110 })();