<!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 CSSRuleOld = window.CSSRule;
        var CSSStyleDeclarationOld = window.CSSStyleDeclaration;
        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 EntityOld = window.Entity;
        var EntityReferenceOld = window.EntityReference;
        var EvalErrorOld = window.EvalError;
        var EventOld = window.Event;
        var HTMLAnchorElementOld = window.HTMLAnchorElement;
        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 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 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 blurOld = window.blur;
        var btoaOld = window.btoa;
        var captureEventsOld = window.captureEvents;
        var clearIntervalOld = window.clearInterval;
        var clearTimeoutOld = window.clearTimeout;
        var closeOld = window.close;
        var confirmOld = window.confirm;
        var evalOld = window.eval;
        var findOld = window.find;
        var focusOld = window.focus;
        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 stopOld = window.stop;

        // Postpone verifying that old values haven't changed until
        // the main frame notifies us that it has already attempted
        // xss to set the property values.
        window.addEventListener("message", receiveMessage, false);
        function receiveMessage(event) {
            if (event.data != "READY-FOR-OLD-VALUES-VERIFICATION") {
                log("UNEXPECTED MESSAGE: " + event.data);
                return;
            }

            // Constructors
            shouldBe("window.Attr", "AttrOld");
            shouldBe("window.CDATASection", "CDATASectionOld");
            shouldBe("window.CharacterData", "CharacterDataOld");
            shouldBe("window.Comment", "CommentOld");
            shouldBe("window.CSSRule", "CSSRuleOld");
            shouldBe("window.CSSStyleDeclaration", "CSSStyleDeclarationOld");
            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.Entity", "EntityOld");
            shouldBe("window.EntityReference", "EntityReferenceOld");
            shouldBe("window.EvalError", "EvalErrorOld");
            shouldBe("window.Event", "EventOld");
            shouldBe("window.HTMLAnchorElement", "HTMLAnchorElementOld");
            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.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.frameElement", "null");
            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", true); // The result is based on the physical screen size, so don't display the values.
            shouldBe("window.screenTop", "screenTopOld", true); // The result is based on the physical screen size, so don't display the values.
            shouldBe("window.screenX", "screenXOld", true); // The result is based on the physical screen size, so don't display the values.
            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.blur", "blurOld");
            shouldBe("window.btoa", "btoaOld");
            shouldBe("window.captureEvents", "captureEventsOld");
            shouldBe("window.clearInterval", "clearIntervalOld");
            shouldBe("window.clearTimeout", "clearTimeoutOld");
            shouldBe("window.close", "closeOld");
            shouldBe("window.confirm", "confirmOld");
            shouldBe("window.eval", "evalOld");
            shouldBe("window.find", "findOld");
            shouldBe("window.focus", "focusOld");
            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");

            shouldBe("window.stop", "stopOld");

            window.parent.postMessage("TEST-COMPLETED", "*");
        }
    </script>
</body>
</html>
