diff options
Diffstat (limited to 'dom/tests/browser/browser_bug396843.js')
-rw-r--r-- | dom/tests/browser/browser_bug396843.js | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/dom/tests/browser/browser_bug396843.js b/dom/tests/browser/browser_bug396843.js new file mode 100644 index 000000000..84d7e3b83 --- /dev/null +++ b/dom/tests/browser/browser_bug396843.js @@ -0,0 +1,287 @@ +/** 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", "SharedObject") + HTML_TAG("area", "Area") + HTML_TAG("b", "Span") + HTML_TAG("base", "Shared") + HTML_TAG("basefont", "Span") + 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", "SharedObject") + 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 Components.interfaces.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 Components.interfaces.nsIURI, + true, "document base URI must be a URI in " + documentID); + isnot(doc.documentURIObject, null, + "Must have document URI " + documentID); + is(doc.documentURIObject instanceof Components.interfaces.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(function* test1() { + testInDocument(document, "browser window"); +}); + +function* newTabTest(location) { + yield BrowserTestUtils.withNewTab({ gBrowser, url: location }, + function* (browser) { + yield ContentTask.spawn(browser, { location, testInDocument_: testInDocument.toSource() }, + function* ({ location, testInDocument_ }) { + let testInDocument = eval(`(() => (${testInDocument_}))()`); + testInDocument(content.document, location); + }); + }); +} + +add_task(function* test2() { + yield newTabTest("about:blank"); +}); + +add_task(function* test3() { + yield newTabTest("about:config"); +}); |