| <p>This test dumps all of the properties that are reachable from the window |
| object, along with their types.</p> |
| <hr> |
| <pre id="pre"></pre> |
| |
| <script> |
| if (window.layoutTestController) |
| layoutTestController.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 + "]"; |
| } |
| |
| var __skip__ = { |
| "window.__skip__" : 1, |
| "window.opener" : 1, // Work around DumpRenderTree bug where previous tests add window properties |
| "window.Components" : 1, // Work around Firefox exception |
| |
| // Don't log DumpRenderTree injected objects |
| "window.layoutTestController" : 1, // Work around http://bugs.webkit.org/show_bug.cgi?id=11373 |
| "window.GCController" : 1, |
| "window.appleScriptController" : 1, |
| "window.eventSender" : 1, |
| "window.navigationController" : 1, |
| "window.objCController" : 1, |
| "window.objCPlugin" : 1, |
| "window.objCPluginFunction" : 1, |
| "window.textInputController" : 1 |
| }; |
| |
| 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; |
| |
| if (__skip__[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'); |
| logValue('window.getSelection()'); |
| flushLog(); |
| </script> |