100 lines
2.5 KiB
HTML
100 lines
2.5 KiB
HTML
<p>This test dumps all of the properties that are reachable from the window.performance object, along with their types.</p>
|
|
<hr>
|
|
<pre id="pre"></pre>
|
|
|
|
<script>
|
|
if (window.testRunner)
|
|
testRunner.dumpAsText();
|
|
|
|
var logBuffer = [];
|
|
function log(s)
|
|
{
|
|
logBuffer.push(s);
|
|
}
|
|
|
|
var pre = document.getElementById('pre');
|
|
function flushLog()
|
|
{
|
|
var logMessage = logBuffer.join("");
|
|
pre.appendChild(document.createTextNode(logMessage));
|
|
}
|
|
|
|
function tryEval(string)
|
|
{
|
|
try {
|
|
return eval(string);
|
|
} catch (e) {
|
|
return new String("Caught exception: " + e);
|
|
}
|
|
}
|
|
|
|
function typeOfNullAware(value)
|
|
{
|
|
if (typeof value == "object" && value == null)
|
|
return "null";
|
|
return typeof value;
|
|
}
|
|
|
|
function typeStringNullAware(value)
|
|
{
|
|
var valueType = typeOfNullAware(value);
|
|
return valueType == "object"
|
|
? Object.prototype.toString.call(value)
|
|
: "[" + valueType + "]";
|
|
}
|
|
|
|
function logValue(valueName)
|
|
{
|
|
var value = tryEval(valueName);
|
|
var valueType = typeOfNullAware(value);
|
|
|
|
// Don't taint the test with our own variables
|
|
if (value == logBuffer || value == pre)
|
|
return;
|
|
|
|
// Don't taint the test with our own properties
|
|
if (/__visitedByLogValue__/.test(valueName) || /__nameWhenVisitedByLogValue__/.test(valueName))
|
|
return;
|
|
|
|
// Work around Firefox infinite recursion
|
|
if (/\.[0-9]/.test(valueName))
|
|
return;
|
|
|
|
// Avoid infinite recursion
|
|
if (valueType == "object" && value.__visitedByLogValue__) {
|
|
log(valueName + " [printed above as " + value.__nameWhenVisitedByLogValue__ + "]\n");
|
|
return;
|
|
}
|
|
|
|
log(valueName + " " + typeStringNullAware(value) + "\n");
|
|
|
|
if (valueType == "object") {
|
|
value.__visitedByLogValue__ = true;
|
|
value.__nameWhenVisitedByLogValue__ = valueName;
|
|
logProperties(value, valueName);
|
|
}
|
|
}
|
|
|
|
function logProperties(object, objectName)
|
|
{
|
|
var array = new Array;
|
|
for (var property in object) {
|
|
array.push(property);
|
|
}
|
|
array.sort();
|
|
for (var i = 0; i < array.length; i++) {
|
|
var property = array[i];
|
|
logValue(objectName + "." + property);
|
|
}
|
|
}
|
|
|
|
logValue('window.performance');
|
|
window.performance.timing = 'timing is not replaceable';
|
|
logValue('window.performance.timing');
|
|
window.performance.navigation = 'navigation is not replaceable';
|
|
logValue('window.performance.navigation');
|
|
window.performance = 'performance is replaceable';
|
|
logValue('window.performance');
|
|
flushLog();
|
|
</script>
|