<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript">
        function log(s)
        {
            document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
        }

        function shouldBe(a, b, shouldNotPrintValues)
        {
            var evalA, evalB;
            try {
                evalA = eval(a);
                evalB = eval(b);
            } catch(e) {
                evalA = e;
            }

            var message;
            if (evalA === evalB) {
                message = "PASS";
                if (!shouldNotPrintValues) {
                    message += ": " + a + " should be '" + evalB + "' and is.";
                } else {
                    message += ": " + a + " matched the expected value.";
                }
            } else {
               message = "*** FAIL: " + a + " should be '" + evalB + "' but instead is " + evalA + ". ***";
            }

            message = String(message).replace(/\n/g, "");
            if (window.testRunner) {
                alert(message);
            } else {
                log(message);
            }
        }
    </script>
</head>
<body>
    <p>This text is in an iframe.</p>
    <pre id="console"></pre>
    <script>
        // Constructors
        var AttrOld = window.Attr;
        var CDATASectionOld = window.CDATASection;
        var CharacterDataOld = window.CharacterData;
        var CommentOld = window.Comment;
        var CSSPrimitiveValueOld = window.CSSPrimitiveValue;
        var CSSRuleOld = window.CSSRule;
        var CSSStyleDeclarationOld = window.CSSStyleDeclaration;
        var CSSValueOld = window.CSSValue;
        var DocumentFragmentOld = window.DocumentFragment;
        var DocumentOld = window.Document;
        var DocumentTypeOld = window.DocumentType;
        var DOMExceptionOld = window.DOMException;
        var DOMImplementationOld = window.DOMImplementation;
        var DOMParserOld = window.DOMParser;
        var ElementOld = window.Element;
        var EvalErrorOld = window.EvalError;
        var EventOld = window.Event;
        var HTMLAnchorElementOld = window.HTMLAnchorElement;
        var HTMLAppletElementOld = window.HTMLAppletElement;
        var HTMLAreaElementOld = window.HTMLAreaElement;
        var HTMLBaseElementOld = window.HTMLBaseElement;
        var HTMLBodyElementOld = window.HTMLBodyElement;
        var HTMLBRElementOld = window.HTMLBRElement;
        var HTMLButtonElementOld = window.HTMLButtonElement;
        var HTMLCanvasElementOld = window.HTMLCanvasElement;
        var HTMLDirectoryElementOld = window.HTMLDirectoryElement;
        var HTMLDivElementOld = window.HTMLDivElement;
        var HTMLDListElementOld = window.HTMLDListElement;
        var HTMLDocumentOld = window.HTMLDocument;
        var HTMLElementOld = window.HTMLElement;
        var HTMLFieldSetElementOld = window.HTMLFieldSetElement;
        var HTMLFontElementOld = window.HTMLFontElement;
        var HTMLFormElementOld = window.HTMLFormElement;
        var HTMLFrameElementOld = window.HTMLFrameElement;
        var HTMLFrameSetElementOld = window.HTMLFrameSetElement;
        var HTMLHeadElementOld = window.HTMLHeadElement;
        var HTMLHeadingElementOld = window.HTMLHeadingElement;
        var HTMLHRElementOld = window.HTMLHRElement;
        var HTMLHtmlElementOld = window.HTMLHtmlElement;
        var HTMLIFrameElementOld = window.HTMLIFrameElement;
        var HTMLImageElementOld = window.HTMLImageElement;
        var HTMLInputElementOld = window.HTMLInputElement;
        var HTMLIsIndexElementOld = window.HTMLIsIndexElement;
        var HTMLLabelElementOld = window.HTMLLabelElement;
        var HTMLLegendElementOld = window.HTMLLegendElement;
        var HTMLLIElementOld = window.HTMLLIElement;
        var HTMLLinkElementOld = window.HTMLLinkElement;
        var HTMLMapElementOld = window.HTMLMapElement;
        var HTMLMarqueeElementOld = window.HTMLMarqueeElement;
        var HTMLMenuElementOld = window.HTMLMenuElement;
        var HTMLMetaElementOld = window.HTMLMetaElement;
        var HTMLModElementOld = window.HTMLModElement;
        var HTMLOListElementOld = window.HTMLOListElement;
        var HTMLOptGroupElementOld = window.HTMLOptGroupElement;
        var HTMLOptionElementOld = window.HTMLOptionElement;
        var HTMLParagraphElementOld = window.HTMLParagraphElement;
        var HTMLParamElementOld = window.HTMLParamElement;
        var HTMLPreElementOld = window.HTMLPreElement;
        var HTMLQuoteElementOld = window.HTMLQuoteElement;
        var HTMLScriptElementOld = window.HTMLScriptElement;
        var HTMLSelectElementOld = window.HTMLSelectElement;
        var HTMLStyleElementOld = window.HTMLStyleElement;
        var HTMLTableCaptionElementOld = window.HTMLTableCaptionElement;
        var HTMLTableCellElementOld = window.HTMLTableCellElement;
        var HTMLTableColElementOld = window.HTMLTableColElement;
        var HTMLTableElementOld = window.HTMLTableElement;
        var HTMLTableRowElementOld = window.HTMLTableRowElement;
        var HTMLTableSectionElementOld = window.HTMLTableSectionElement;
        var HTMLTextAreaElementOld = window.HTMLTextAreaElement;
        var HTMLTitleElementOld = window.HTMLTitleElement;
        var HTMLUListElementOld = window.HTMLUListElement;
        var MutationEventOld = window.MutationEvent;
        var NodeFilterOld = window.NodeFilter;
        var NodeOld = window.Node;
        var ProcessingInstructionOld = window.ProcessingInstruction;
        var RangeErrorOld = window.RangeError;
        var RangeExceptionOld = window.RangeException;
        var RangeOld = window.Range;
        var ReferenceErrorOld = window.ReferenceError;
        var SyntaxErrorOld = window.SyntaxError;
        var TextOld = window.Text;
        var TypeErrorOld = window.TypeError;
        var URIErrorOld = window.URIError;
        var XMLDocumentOld = window.XMLDocument;
        var XMLSerializerOld = window.XMLSerializer;
        var XPathEvaluatorOld = window.XPathEvaluator;
        var XPathResultOld = window.XPathResult;
    
        // FIXME: find a way to test these Constructors
        // var ImageOld = window.Image;
        // var OptionOld = window.Option;
        // var XMLHttpRequestOld = window.XMLHttpRequest;
        // var XSLTProcessorOld = window.XSLTProcessor;
    
        // Attributes
        var clientInformationOld = window.clientInformation;
        var closedOld = window.closed;
        var consoleOld = window.console;
        var cryptoOld = window.crypto;
        var defaultStatusOld = window.defaultStatus;
        var defaultstatusOld = window.defaultstatus;
        var devicePixelRatioOld = window.devicePixelRatio;
        var documentOld = window.document;
        var embedsOld = window.embeds;
        var eventOld = window.event;
        var frameElementOld = window.frameElement;
        var framesOld = window.frames;
        var historyOld = window.history;
        var imagesOld = window.images;
        var innerHeightOld = 150; // This needs to be set explicitily as it is not set a the time of calling
        var innerWidthOld = 300; // This needs to be set explicitily as it is not set a the time of calling
        var lengthOld = window.length;
        var locationbarOld = window.locationbar;
        var menubarOld = window.menubar;
        var nameOld = window.name;
        var navigatorOld = window.navigator;
        var offscreenBufferingOld = window.offscreenBuffering;
        var onabortOld = window.onabort;
        var onbeforeunloadOld = window.onbeforeunload;
        var onblurOld = window.onblur;
        var onchangeOld = window.onchange;
        var onclickOld = window.onclick;
        var ondblclickOld = window.ondblclick;
        var onerrorOld = window.onerror;
        var onfocusOld = window.onfocus;
        var onkeydownOld = window.onkeydown;
        var onkeypressOld = window.onkeypress;
        var onkeyupOld = window.onkeyup;
        var onloadOld = window.onload;
        var onmousedownOld = window.onmousedown;
        var onmousemoveOld = window.onmousemove;
        var onmouseoutOld = window.onmouseout;
        var onmouseoverOld = window.onmouseover;
        var onmouseupOld = window.onmouseup;
        var onmousewheelOld = window.onmousewheel;
        var onresetOld = window.onreset;
        var onresizeOld = window.onresize;
        var onscrollOld = window.onscroll;
        var onsearchOld = window.onsearch;
        var onselectOld = window.onselect;
        var onsubmitOld = window.onsubmit;
        var onunloadOld = window.onunload;
        var openerOld = window.opener;
        var outerHeightOld = window.outerHeight;
        var outerWidthOld = window.outerWidth;
        var pageXOffsetOld = window.pageXOffset;
        var pageYOffsetOld = window.pageYOffset;
        var personalbarOld = window.personalbar;
        var pluginsOld = window.plugins;
        var screenLeftOld = window.screenLeft;
        var screenOld = window.screen;
        var screenTopOld = window.screenTop;
        var screenXOld = window.screenX;
        var screenYOld = window.screenY;
        var scrollbarsOld = window.scrollbars;
        var scrollXOld = window.scrollX;
        var scrollYOld = window.scrollY;
        var selfOld = window.self;
        var statusbarOld = window.statusbar;
        var statusOld = window.status;
        var toolbarOld = window.toolbar;
        var windowOld = window.window;
        var parentOld = window.parent;
        var topOld = window.top;

        // Functions
        var addEventListenerOld = window.addEventListener;
        var alertOld = window.alert;
        var atobOld = window.atob;
        var btoaOld = window.btoa;
        var captureEventsOld = window.captureEvents;
        var clearIntervalOld = window.clearInterval;
        var clearTimeoutOld = window.clearTimeout;
        var confirmOld = window.confirm;
        var evalOld = window.eval;
        var findOld = window.find;
        var getComputedStyleOld = window.getComputedStyle;
        var getMatchedCSSRulesOld = window.getMatchedCSSRules;
        var getSelectionOld = window.getSelection;
        var moveByOld = window.moveBy;
        var moveToOld = window.moveTo;
        var openOld = window.open;
        var printOld = window.print;
        var promptOld = window.prompt;
        var releaseEventsOld = window.releaseEvents;
        var removeEventListenerOld = window.removeEventListener;
        var resizeByOld = window.resizeBy;
        var resizeToOld = window.resizeTo;
        var scrollByOld = window.scrollBy;
        var scrollOld = window.scroll;
        var scrollToOld = window.scrollTo;
        var setIntervalOld = window.setInterval;
        var setTimeoutOld = window.setTimeout;
        var showModalDialogOld = window.showModalDialog;
        var stopOld = window.stop;

        // The test runs on a timer and not in a load event handler because we want both
        // window.onload and window.event to be undefined.
        function runTest() {
            // Constructors
            shouldBe("window.Attr", "AttrOld");
            shouldBe("window.CDATASection", "CDATASectionOld");
            shouldBe("window.CharacterData", "CharacterDataOld");
            shouldBe("window.Comment", "CommentOld");
            shouldBe("window.CSSPrimitiveValue", "CSSPrimitiveValueOld");
            shouldBe("window.CSSRule", "CSSRuleOld");
            shouldBe("window.CSSStyleDeclaration", "CSSStyleDeclarationOld");
            shouldBe("window.CSSValue", "CSSValueOld");
            shouldBe("window.Document", "DocumentOld");
            shouldBe("window.DocumentFragment", "DocumentFragmentOld");
            shouldBe("window.DocumentType", "DocumentTypeOld");
            shouldBe("window.DOMException", "DOMExceptionOld");
            shouldBe("window.DOMImplementation", "DOMImplementationOld");
            shouldBe("window.DOMParser", "DOMParserOld");
            shouldBe("window.Element", "ElementOld");
            shouldBe("window.EvalError", "EvalErrorOld");
            shouldBe("window.Event", "EventOld");
            shouldBe("window.HTMLAnchorElement", "HTMLAnchorElementOld");
            shouldBe("window.HTMLAppletElement", "HTMLAppletElementOld");
            shouldBe("window.HTMLAreaElement", "HTMLAreaElementOld");
            shouldBe("window.HTMLBaseElement", "HTMLBaseElementOld");
            shouldBe("window.HTMLBodyElement", "HTMLBodyElementOld");
            shouldBe("window.HTMLBRElement", "HTMLBRElementOld");
            shouldBe("window.HTMLButtonElement", "HTMLButtonElementOld");
            shouldBe("window.HTMLCanvasElement", "HTMLCanvasElementOld");
            shouldBe("window.HTMLDirectoryElement", "HTMLDirectoryElementOld");
            shouldBe("window.HTMLDivElement", "HTMLDivElementOld");
            shouldBe("window.HTMLDListElement", "HTMLDListElementOld");
            shouldBe("window.HTMLDocument", "HTMLDocumentOld");
            shouldBe("window.HTMLElement", "HTMLElementOld");
            shouldBe("window.HTMLFieldSetElement", "HTMLFieldSetElementOld");
            shouldBe("window.HTMLFontElement", "HTMLFontElementOld");
            shouldBe("window.HTMLFormElement", "HTMLFormElementOld");
            shouldBe("window.HTMLFrameElement", "HTMLFrameElementOld");
            shouldBe("window.HTMLFrameSetElement", "HTMLFrameSetElementOld");
            shouldBe("window.HTMLHeadElement", "HTMLHeadElementOld");
            shouldBe("window.HTMLHeadingElement", "HTMLHeadingElementOld");
            shouldBe("window.HTMLHRElement", "HTMLHRElementOld");
            shouldBe("window.HTMLHtmlElement", "HTMLHtmlElementOld");
            shouldBe("window.HTMLIFrameElement", "HTMLIFrameElementOld");
            shouldBe("window.HTMLImageElement", "HTMLImageElementOld");
            shouldBe("window.HTMLInputElement", "HTMLInputElementOld");
            shouldBe("window.HTMLIsIndexElement", "HTMLIsIndexElementOld");
            shouldBe("window.HTMLLabelElement", "HTMLLabelElementOld");
            shouldBe("window.HTMLLegendElement", "HTMLLegendElementOld");
            shouldBe("window.HTMLLIElement", "HTMLLIElementOld");
            shouldBe("window.HTMLLinkElement", "HTMLLinkElementOld");
            shouldBe("window.HTMLMapElement", "HTMLMapElementOld");
            shouldBe("window.HTMLMarqueeElement", "HTMLMarqueeElementOld");
            shouldBe("window.HTMLMenuElement", "HTMLMenuElementOld");
            shouldBe("window.HTMLMetaElement", "HTMLMetaElementOld");
            shouldBe("window.HTMLModElement", "HTMLModElementOld");
            shouldBe("window.HTMLOListElement", "HTMLOListElementOld");
            shouldBe("window.HTMLOptGroupElement", "HTMLOptGroupElementOld");
            shouldBe("window.HTMLOptionElement", "HTMLOptionElementOld");
            shouldBe("window.HTMLParagraphElement", "HTMLParagraphElementOld");
            shouldBe("window.HTMLParamElement", "HTMLParamElementOld");
            shouldBe("window.HTMLPreElement", "HTMLPreElementOld");
            shouldBe("window.HTMLQuoteElement", "HTMLQuoteElementOld");
            shouldBe("window.HTMLScriptElement", "HTMLScriptElementOld");
            shouldBe("window.HTMLSelectElement", "HTMLSelectElementOld");
            shouldBe("window.HTMLStyleElement", "HTMLStyleElementOld");
            shouldBe("window.HTMLTableCaptionElement", "HTMLTableCaptionElementOld");
            shouldBe("window.HTMLTableCellElement", "HTMLTableCellElementOld");
            shouldBe("window.HTMLTableColElement", "HTMLTableColElementOld");
            shouldBe("window.HTMLTableElement", "HTMLTableElementOld");
            shouldBe("window.HTMLTableRowElement", "HTMLTableRowElementOld");
            shouldBe("window.HTMLTableSectionElement", "HTMLTableSectionElementOld");
            shouldBe("window.HTMLTextAreaElement", "HTMLTextAreaElementOld");
            shouldBe("window.HTMLTitleElement", "HTMLTitleElementOld");
            shouldBe("window.HTMLUListElement", "HTMLUListElementOld");
            shouldBe("window.MutationEvent", "MutationEventOld");
            shouldBe("window.Node", "NodeOld");
            shouldBe("window.NodeFilter", "NodeFilterOld");
            shouldBe("window.ProcessingInstruction", "ProcessingInstructionOld");
            shouldBe("window.Range", "RangeOld");
            shouldBe("window.RangeError", "RangeErrorOld");
            shouldBe("window.RangeException", "RangeExceptionOld");
            shouldBe("window.ReferenceError", "ReferenceErrorOld");
            shouldBe("window.SyntaxError", "SyntaxErrorOld");
            shouldBe("window.Text", "TextOld");
            shouldBe("window.TypeError", "TypeErrorOld");
            shouldBe("window.URIError", "URIErrorOld");
            shouldBe("window.XMLDocument", "XMLDocumentOld");
            shouldBe("window.XMLSerializer", "XMLSerializerOld");
            shouldBe("window.XPathEvaluator", "XPathEvaluatorOld");
            shouldBe("window.XPathResult", "XPathResultOld");

            // FIXME: find a way to test these Constructors
            // shouldBe("window.Image", "ImageOld");
            // shouldBe("window.Option", "OptionOld");
            // shouldBe("window.XMLHttpRequest", "XMLHttpRequestOld");
            // shouldBe("window.XSLTProcessor", "XSLTProcessorOld");

            // Attributes
            shouldBe("window.clientInformation", "clientInformationOld");
            shouldBe("window.closed", "closedOld");
            shouldBe("window.console", "consoleOld");
            shouldBe("window.crypto", "cryptoOld");
            shouldBe("window.defaultStatus", "defaultStatusOld");
            shouldBe("window.defaultstatus", "defaultstatusOld");
            shouldBe("window.devicePixelRatio", "devicePixelRatioOld");
            shouldBe("window.document", "documentOld");
            shouldBe("window.embeds", "embedsOld");
            shouldBe("window.event", "eventOld");
            shouldBe("window.frameElement", "frameElementOld");
            shouldBe("window.frames", "framesOld");
            shouldBe("window.history", "historyOld");
            shouldBe("window.images", "imagesOld");
            shouldBe("window.innerHeight", "innerHeightOld");
            shouldBe("window.innerWidth", "innerWidthOld");
            shouldBe("window.length", "lengthOld");
            shouldBe("window.locationbar", "locationbarOld");
            shouldBe("window.menubar", "menubarOld");
            shouldBe("window.name", "nameOld");
            shouldBe("window.navigator", "navigatorOld");
            shouldBe("window.offscreenBuffering", "offscreenBufferingOld");
            shouldBe("window.onabort", "onabortOld");
            shouldBe("window.onbeforeunload", "onbeforeunloadOld");
            shouldBe("window.onblur", "onblurOld");
            shouldBe("window.onchange", "onchangeOld");
            shouldBe("window.onclick", "onclickOld");
            shouldBe("window.ondblclick", "ondblclickOld");
            shouldBe("window.onerror", "onerrorOld");
            shouldBe("window.onfocus", "onfocusOld");
            shouldBe("window.onkeydown", "onkeydownOld");
            shouldBe("window.onkeypress", "onkeypressOld");
            shouldBe("window.onkeyup", "onkeyupOld");
            shouldBe("window.onload", "onloadOld");
            shouldBe("window.onmousedown", "onmousedownOld");
            shouldBe("window.onmousemove", "onmousemoveOld");
            shouldBe("window.onmouseout", "onmouseoutOld");
            shouldBe("window.onmouseover", "onmouseoverOld");
            shouldBe("window.onmouseup", "onmouseupOld");
            shouldBe("window.onmousewheel", "onmousewheelOld");
            shouldBe("window.onreset", "onresetOld");
            shouldBe("window.onresize", "onresizeOld");
            shouldBe("window.onscroll", "onscrollOld");
            shouldBe("window.onsearch", "onsearchOld");
            shouldBe("window.onselect", "onselectOld");
            shouldBe("window.onsubmit", "onsubmitOld");
            shouldBe("window.onunload", "onunloadOld");
            shouldBe("window.opener", "openerOld");
            shouldBe("window.outerHeight", "outerHeightOld", true); // The result can be dependent on previous tests.
            shouldBe("window.outerWidth", "outerWidthOld", true); // The result can be dependent on previous tests.
            shouldBe("window.pageXOffset", "pageXOffsetOld");
            shouldBe("window.pageYOffset", "pageYOffsetOld");
            shouldBe("window.personalbar", "personalbarOld");
            shouldBe("window.plugins", "pluginsOld");
            shouldBe("window.screen", "screenOld");
            shouldBe("window.screenLeft", "screenLeftOld");
            shouldBe("window.screenTop", "screenTopOld", true); // The result is based on the physical screen size, so don't display the values.
            shouldBe("window.screenX", "screenXOld");
            shouldBe("window.screenY", "screenYOld", true); // The result is based on the physical screen size, so don't display the values.
            shouldBe("window.scrollbars", "scrollbarsOld");
            shouldBe("window.scrollX", "scrollXOld");
            shouldBe("window.scrollY", "scrollYOld");
            shouldBe("window.self", "selfOld");
            shouldBe("window.status", "statusOld");
            shouldBe("window.statusbar", "statusbarOld");
            shouldBe("window.toolbar", "toolbarOld");
            shouldBe("window.window", "windowOld");

            // Using shouldBe for parent and top causes extraneous warnings due to cross-orgin toString'ing.
            if (window.parent === parentOld) {
                alert("PASS: window.parent should be parentOld and is.");
            } else {
                alert("*** FAIL: window.parent should be parentOld but instead is " + window.parent + ". ***");
            }

            if (window.top === topOld) {
                alert("PASS: window.top should be topOld and is.");
            } else {
                alert("*** FAIL: window.top should be topOld but instead is " + window.top + ". ***");
            }

            // Functions
            shouldBe("window.addEventListener", "addEventListenerOld");
            shouldBe("window.alert", "alertOld");
            shouldBe("window.atob", "atobOld");
            shouldBe("window.btoa", "btoaOld");
            shouldBe("window.captureEvents", "captureEventsOld");
            shouldBe("window.clearInterval", "clearIntervalOld");
            shouldBe("window.clearTimeout", "clearTimeoutOld");
            shouldBe("window.confirm", "confirmOld");
            shouldBe("window.eval", "evalOld");
            shouldBe("window.find", "findOld");
            shouldBe("window.getComputedStyle", "getComputedStyleOld");
            shouldBe("window.getMatchedCSSRules", "getMatchedCSSRulesOld");
            shouldBe("window.getSelection", "getSelectionOld");
            shouldBe("window.moveBy", "moveByOld");
            shouldBe("window.moveTo", "moveToOld");
            shouldBe("window.open", "openOld");
            shouldBe("window.print", "printOld");
            shouldBe("window.prompt", "promptOld");
            shouldBe("window.releaseEvents", "releaseEventsOld");
            shouldBe("window.removeEventListener", "removeEventListenerOld");
            shouldBe("window.resizeBy", "resizeByOld");
            shouldBe("window.resizeTo", "resizeToOld");
            shouldBe("window.scroll", "scrollOld");
            shouldBe("window.scrollBy", "scrollByOld");
            shouldBe("window.scrollTo", "scrollToOld");
            shouldBe("window.setInterval", "setIntervalOld");
            shouldBe("window.setTimeout", "setTimeoutOld");

            // showModalDialog is not implemented on all platforms for DumpRenderTree.  So don't display the values.
            shouldBe("window.showModalDialog", "showModalDialogOld", true);
            shouldBe("window.stop", "stopOld");
            window.parent.postMessage("continue test in parent frame", "*")
        };
        function checkAndRunTest() {
            if (window.innerHeight == 150)
                runTest();
            else
                setTimeout(checkAndRunTest, 10);
        }
        checkAndRunTest();
    </script>
</body>
</html>
