forked from mirrors/gecko-dev
		
	 25349d2601
			
		
	
	
		25349d2601
		
	
	
	
	
		
			
			Differential Revision: https://phabricator.services.mozilla.com/D17526 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			288 lines
		
	
	
	
		
			9.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			288 lines
		
	
	
	
		
			9.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /** Test for Bug 396843 **/
 | |
| 
 | |
| function testInDocument(doc, documentID) {
 | |
|     var allNodes = [];
 | |
|     var XMLNodes = [];
 | |
| 
 | |
|     // HTML
 | |
|     function HTML_TAG(name) {
 | |
|         allNodes.push(doc.createElement(name));
 | |
|     }
 | |
| 
 | |
|     /* List copy/pasted from nsHTMLTagList.h */
 | |
|     HTML_TAG("a", "Anchor");
 | |
|     HTML_TAG("abbr", "Span");
 | |
|     HTML_TAG("acronym", "Span");
 | |
|     HTML_TAG("address", "Span");
 | |
|     HTML_TAG("applet", "Unknown");
 | |
|     HTML_TAG("area", "Area");
 | |
|     HTML_TAG("b", "Span");
 | |
|     HTML_TAG("base", "Shared");
 | |
|     HTML_TAG("basefont", "Span");
 | |
|     HTML_TAG("bdi", "");
 | |
|     HTML_TAG("bdo", "Span");
 | |
|     HTML_TAG("bgsound", "Span");
 | |
|     HTML_TAG("big", "Span");
 | |
|     HTML_TAG("blockquote", "Shared");
 | |
|     HTML_TAG("body", "Body");
 | |
|     HTML_TAG("br", "BR");
 | |
|     HTML_TAG("button", "Button");
 | |
|     HTML_TAG("canvas", "Canvas");
 | |
|     HTML_TAG("caption", "TableCaption");
 | |
|     HTML_TAG("center", "Span");
 | |
|     HTML_TAG("cite", "Span");
 | |
|     HTML_TAG("code", "Span");
 | |
|     HTML_TAG("col", "TableCol");
 | |
|     HTML_TAG("colgroup", "TableCol");
 | |
|     HTML_TAG("dd", "Span");
 | |
|     HTML_TAG("del", "Mod");
 | |
|     HTML_TAG("dfn", "Span");
 | |
|     HTML_TAG("dir", "Shared");
 | |
|     HTML_TAG("div", "Div");
 | |
|     HTML_TAG("dl", "SharedList");
 | |
|     HTML_TAG("dt", "Span");
 | |
|     HTML_TAG("em", "Span");
 | |
|     HTML_TAG("embed", "Embed");
 | |
|     HTML_TAG("fieldset", "FieldSet");
 | |
|     HTML_TAG("font", "Font");
 | |
|     HTML_TAG("form", "Form");
 | |
|     HTML_TAG("frame", "Frame");
 | |
|     HTML_TAG("frameset", "FrameSet");
 | |
|     HTML_TAG("h1", "Heading");
 | |
|     HTML_TAG("h2", "Heading");
 | |
|     HTML_TAG("h3", "Heading");
 | |
|     HTML_TAG("h4", "Heading");
 | |
|     HTML_TAG("h5", "Heading");
 | |
|     HTML_TAG("h6", "Heading");
 | |
|     HTML_TAG("head", "Head");
 | |
|     HTML_TAG("hr", "HR");
 | |
|     HTML_TAG("html", "Html");
 | |
|     HTML_TAG("i", "Span");
 | |
|     HTML_TAG("iframe", "IFrame");
 | |
|     HTML_TAG("image", "");
 | |
|     HTML_TAG("img", "Image");
 | |
|     HTML_TAG("input", "Input");
 | |
|     HTML_TAG("ins", "Mod");
 | |
|     HTML_TAG("isindex", "Unknown");
 | |
|     HTML_TAG("kbd", "Span");
 | |
|     HTML_TAG("keygen", "Span");
 | |
|     HTML_TAG("label", "Label");
 | |
|     HTML_TAG("legend", "Legend");
 | |
|     HTML_TAG("li", "LI");
 | |
|     HTML_TAG("link", "Link");
 | |
|     HTML_TAG("listing", "Span");
 | |
|     HTML_TAG("map", "Map");
 | |
|     HTML_TAG("marquee", "Div");
 | |
|     HTML_TAG("menu", "Shared");
 | |
|     HTML_TAG("meta", "Meta");
 | |
|     HTML_TAG("multicol", "Unknown");
 | |
|     HTML_TAG("nobr", "Span");
 | |
|     HTML_TAG("noembed", "Div");
 | |
|     HTML_TAG("noframes", "Div");
 | |
|     HTML_TAG("noscript", "Div");
 | |
|     HTML_TAG("object", "Object");
 | |
|     HTML_TAG("ol", "SharedList");
 | |
|     HTML_TAG("optgroup", "OptGroup");
 | |
|     HTML_TAG("option", "Option");
 | |
|     HTML_TAG("p", "Paragraph");
 | |
|     HTML_TAG("param", "Shared");
 | |
|     HTML_TAG("plaintext", "Span");
 | |
|     HTML_TAG("pre", "Pre");
 | |
|     HTML_TAG("q", "Shared");
 | |
|     HTML_TAG("s", "Span");
 | |
|     HTML_TAG("samp", "Span");
 | |
|     HTML_TAG("script", "Script");
 | |
|     HTML_TAG("select", "Select");
 | |
|     HTML_TAG("small", "Span");
 | |
|     HTML_TAG("spacer", "Unknown");
 | |
|     HTML_TAG("span", "Span");
 | |
|     HTML_TAG("strike", "Span");
 | |
|     HTML_TAG("strong", "Span");
 | |
|     HTML_TAG("style", "Style");
 | |
|     HTML_TAG("sub", "Span");
 | |
|     HTML_TAG("sup", "Span");
 | |
|     HTML_TAG("table", "Table");
 | |
|     HTML_TAG("tbody", "TableSection");
 | |
|     HTML_TAG("td", "TableCell");
 | |
|     HTML_TAG("textarea", "TextArea");
 | |
|     HTML_TAG("tfoot", "TableSection");
 | |
|     HTML_TAG("th", "TableCell");
 | |
|     HTML_TAG("thead", "TableSection");
 | |
|     HTML_TAG("template", "Template");
 | |
|     HTML_TAG("title", "Title");
 | |
|     HTML_TAG("tr", "TableRow");
 | |
|     HTML_TAG("tt", "Span");
 | |
|     HTML_TAG("u", "Span");
 | |
|     HTML_TAG("ul", "SharedList");
 | |
|     HTML_TAG("var", "Span");
 | |
|     HTML_TAG("wbr", "Shared");
 | |
|     HTML_TAG("xmp", "Span");
 | |
| 
 | |
|     function SVG_TAG(name) {
 | |
|         allNodes.push(doc.createElementNS("http://www.w3.org/2000/svg", name));
 | |
|     }
 | |
| 
 | |
|     // List sorta stolen from SVG element factory.
 | |
|     SVG_TAG("a");
 | |
|     SVG_TAG("polyline");
 | |
|     SVG_TAG("polygon");
 | |
|     SVG_TAG("circle");
 | |
|     SVG_TAG("ellipse");
 | |
|     SVG_TAG("line");
 | |
|     SVG_TAG("rect");
 | |
|     SVG_TAG("svg");
 | |
|     SVG_TAG("g");
 | |
|     SVG_TAG("foreignObject");
 | |
|     SVG_TAG("path");
 | |
|     SVG_TAG("text");
 | |
|     SVG_TAG("tspan");
 | |
|     SVG_TAG("image");
 | |
|     SVG_TAG("style");
 | |
|     SVG_TAG("linearGradient");
 | |
|     SVG_TAG("metadata");
 | |
|     SVG_TAG("radialGradient");
 | |
|     SVG_TAG("stop");
 | |
|     SVG_TAG("defs");
 | |
|     SVG_TAG("desc");
 | |
|     SVG_TAG("script");
 | |
|     SVG_TAG("use");
 | |
|     SVG_TAG("symbol");
 | |
|     SVG_TAG("marker");
 | |
|     SVG_TAG("title");
 | |
|     SVG_TAG("clipPath");
 | |
|     SVG_TAG("textPath");
 | |
|     SVG_TAG("filter");
 | |
|     SVG_TAG("feBlend");
 | |
|     SVG_TAG("feColorMatrix");
 | |
|     SVG_TAG("feComponentTransfer");
 | |
|     SVG_TAG("feComposite");
 | |
|     SVG_TAG("feFuncR");
 | |
|     SVG_TAG("feFuncG");
 | |
|     SVG_TAG("feFuncB");
 | |
|     SVG_TAG("feFuncA");
 | |
|     SVG_TAG("feGaussianBlur");
 | |
|     SVG_TAG("feMerge");
 | |
|     SVG_TAG("feMergeNode");
 | |
|     SVG_TAG("feMorphology");
 | |
|     SVG_TAG("feOffset");
 | |
|     SVG_TAG("feFlood");
 | |
|     SVG_TAG("feTile");
 | |
|     SVG_TAG("feTurbulence");
 | |
|     SVG_TAG("feConvolveMatrix");
 | |
|     SVG_TAG("feDistantLight");
 | |
|     SVG_TAG("fePointLight");
 | |
|     SVG_TAG("feSpotLight");
 | |
|     SVG_TAG("feDiffuseLighting");
 | |
|     SVG_TAG("feSpecularLighting");
 | |
|     SVG_TAG("feDisplacementMap");
 | |
|     SVG_TAG("feImage");
 | |
|     SVG_TAG("pattern");
 | |
|     SVG_TAG("mask");
 | |
|     SVG_TAG("svgSwitch");
 | |
| 
 | |
|     // Toss in some other namespaced stuff too, for good measure
 | |
|     // XUL stuff might not be creatable in content documents
 | |
|     try {
 | |
|         allNodes.push(doc.createElementNS(
 | |
|             "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
 | |
|             "window"));
 | |
|     } catch (e) {}
 | |
|     allNodes.push(doc.createElementNS("http://www.w3.org/1998/Math/MathML",
 | |
|                                         "math"));
 | |
|     allNodes.push(doc.createElementNS("http://www.w3.org/2001/xml-events",
 | |
|                                         "testname"));
 | |
|     allNodes.push(doc.createElementNS("bogus.namespace", "testname"));
 | |
| 
 | |
|     var XMLDoc = doc.implementation.createDocument("", "", null);
 | |
| 
 | |
|     // And non-elements
 | |
|     allNodes.push(doc.createTextNode("some text"));
 | |
|     allNodes.push(doc.createComment("some text"));
 | |
|     allNodes.push(doc.createDocumentFragment());
 | |
|     XMLNodes.push(XMLDoc.createCDATASection("some text"));
 | |
|     XMLNodes.push(XMLDoc.createProcessingInstruction("PI", "data"));
 | |
| 
 | |
|     function runTestUnwrapped() {
 | |
|         if (!("wrappedJSObject" in doc)) {
 | |
|             return;
 | |
|         }
 | |
|         ok(doc.wrappedJSObject.nodePrincipal === undefined,
 | |
|             "Must not have document principal for " + documentID);
 | |
|         ok(doc.wrappedJSObject.baseURIObject === undefined,
 | |
|             "Must not have document base URI for " + documentID);
 | |
|         ok(doc.wrappedJSObject.documentURIObject === undefined,
 | |
|             "Must not have document URI for " + documentID);
 | |
| 
 | |
|         for (var i = 0; i < allNodes.length; ++i) {
 | |
|             ok(allNodes[i].wrappedJSObject.nodePrincipal === undefined,
 | |
|                 "Unexpected principal appears for " + allNodes[i].nodeName +
 | |
|                 " in " + documentID);
 | |
|             ok(allNodes[i].wrappedJSObject.baseURIObject === undefined,
 | |
|                 "Unexpected base URI appears for " + allNodes[i].nodeName +
 | |
|                 " in " + documentID);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function runTestProps() {
 | |
|         isnot(doc.nodePrincipal, null,
 | |
|                 "Must have document principal in " + documentID);
 | |
|         is(doc.nodePrincipal instanceof Ci.nsIPrincipal,
 | |
|             true, "document principal must be a principal in " + documentID);
 | |
|         isnot(doc.baseURIObject, null,
 | |
|                 "Must have document base URI in" + documentID);
 | |
|         is(doc.baseURIObject instanceof Ci.nsIURI,
 | |
|             true, "document base URI must be a URI in " + documentID);
 | |
|         isnot(doc.documentURIObject, null,
 | |
|                 "Must have document URI " + documentID);
 | |
|         is(doc.documentURIObject instanceof Ci.nsIURI,
 | |
|             true, "document URI must be a URI in " + documentID);
 | |
|         is(doc.documentURIObject.spec, doc.documentURI,
 | |
|                "document URI must be the right URI in " + documentID);
 | |
| 
 | |
|         for (var i = 0; i < allNodes.length; ++i) {
 | |
|             is(allNodes[i].nodePrincipal, doc.nodePrincipal,
 | |
|                 "Unexpected principal for " + allNodes[i].nodeName +
 | |
|                 " in " + documentID);
 | |
|             is(allNodes[i].baseURIObject, doc.baseURIObject,
 | |
|                 "Unexpected base URI for " + allNodes[i].nodeName +
 | |
|                 " in " + documentID);
 | |
|         }
 | |
| 
 | |
|         for (i = 0; i < XMLNodes.length; ++i) {
 | |
|             is(XMLNodes[i].nodePrincipal, doc.nodePrincipal,
 | |
|                 "Unexpected principal for " + XMLNodes[i].nodeName +
 | |
|                 " in " + documentID);
 | |
|             is(XMLNodes[i].baseURIObject.spec, "about:blank",
 | |
|                 "Unexpected base URI for " + XMLNodes[i].nodeName +
 | |
|                 " in " + documentID);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     runTestUnwrapped();
 | |
|     runTestProps();
 | |
|     runTestUnwrapped();
 | |
| }
 | |
| 
 | |
| add_task(async function test1() {
 | |
|     testInDocument(document, "browser window");
 | |
| });
 | |
| 
 | |
| async function newTabTest(location) {
 | |
|     await BrowserTestUtils.withNewTab({ gBrowser, url: location },
 | |
|         async function(browser) {
 | |
|           await ContentTask.spawn(browser, { location, testInDocument_: testInDocument.toSource() },
 | |
|             async function({ location, testInDocument_ }) {
 | |
|               // eslint-disable-next-line no-eval
 | |
|               let testInDocument = eval(`(() => (${testInDocument_}))()`);
 | |
|               testInDocument(content.document, location);
 | |
|             });
 | |
|         });
 | |
| }
 | |
| 
 | |
| add_task(async function test2() {
 | |
|     await newTabTest("about:blank");
 | |
| });
 | |
| 
 | |
| add_task(async function test3() {
 | |
|     await newTabTest("about:config");
 | |
| });
 |