blob: 1e60c6e142276fef56ff0bbe0a143b860b21f996 [file] [log] [blame]
<!DOCTYPE html>
<!--
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.
-->
<link rel="import" href="/base/base64.html">
<link rel="import"
href="/ui/extras/about_tracing/tracing_controller_client.html">
<script>
'use strict';
tr.exportTo('tr.ui.e.about_tracing', function() {
function beginXhr(method, path, data) {
if (data === undefined)
data = null;
return new Promise(function(resolve, reject) {
var req = new XMLHttpRequest();
if (method != 'POST' && data !== null)
throw new Error('Non-POST should have data==null');
req.open(method, path, true);
req.onreadystatechange = function(e) {
if (req.readyState == 4) {
window.setTimeout(function() {
if (req.status == 200 && req.responseText != '##ERROR##') {
resolve(req.responseText);
} else {
reject(new Error('Error occured at ' + path));
}
}, 0);
}
};
req.send(data);
});
}
/**
* @constructor
*/
function XhrBasedTracingControllerClient() { }
XhrBasedTracingControllerClient.prototype = {
__proto__: tr.ui.e.about_tracing.TracingControllerClient.prototype,
beginMonitoring: function(monitoringOptions) {
var monitoringOptionsB64 = btoa(JSON.stringify(monitoringOptions));
return beginXhr('GET', '/json/begin_monitoring?' + monitoringOptionsB64);
},
endMonitoring: function() {
return beginXhr('GET', '/json/end_monitoring');
},
captureMonitoring: function() {
return beginXhr('GET', '/json/capture_monitoring_compressed').then(
function(data) {
var decoded_size = tr.b.Base64.getDecodedBufferLength(data);
var buffer = new ArrayBuffer(decoded_size);
tr.b.Base64.DecodeToTypedArray(data, new DataView(buffer));
return buffer;
}
);
},
getMonitoringStatus: function() {
return beginXhr('GET', '/json/get_monitoring_status').then(
function(monitoringOptionsB64) {
return JSON.parse(atob(monitoringOptionsB64));
});
},
getCategories: function() {
return beginXhr('GET', '/json/categories').then(
function(json) {
return JSON.parse(json);
});
},
beginRecording: function(recordingOptions) {
var recordingOptionsB64 = btoa(JSON.stringify(recordingOptions));
return beginXhr('GET', '/json/begin_recording?' +
recordingOptionsB64);
},
beginGetBufferPercentFull: function() {
return beginXhr('GET', '/json/get_buffer_percent_full');
},
endRecording: function() {
return beginXhr('GET', '/json/end_recording_compressed').then(
function(data) {
var decoded_size = tr.b.Base64.getDecodedBufferLength(data);
var buffer = new ArrayBuffer(decoded_size);
tr.b.Base64.DecodeToTypedArray(data, new DataView(buffer));
return buffer;
}
);
},
defaultTraceName: function() {
return 'trace.json.gz';
}
};
return {
XhrBasedTracingControllerClient: XhrBasedTracingControllerClient
};
});
</script>