Don't throw from attribute sets if we can't find a script global to compile an

event handler attribute on.  This happens; just don't compile it.  Bug 379120,
r+sr=peterv
This commit is contained in:
bzbarsky%mit.edu 2007-05-01 19:08:08 +00:00
Родитель 8f22345c18
Коммит b872a7f41b
3 изменённых файлов: 71 добавлений и 12 удалений

Просмотреть файл

@ -754,20 +754,21 @@ nsEventListenerManager::AddScriptEventListener(nsISupports *aObject,
} }
} }
if (global) { if (!global) {
// This might be the first reference to this language in the global // This can happen; for example this document might have been
// We must init the language before we attempt to fetch its context. // loaded as data.
if (NS_FAILED(global->EnsureScriptEnvironment(aLanguage))) { return NS_OK;
NS_WARNING("Failed to setup script environment for this language"); }
// but fall through and let the inevitable failure below handle it.
} // This might be the first reference to this language in the global
// We must init the language before we attempt to fetch its context.
context = global->GetScriptContext(aLanguage); if (NS_FAILED(global->EnsureScriptEnvironment(aLanguage))) {
NS_WARNING("Failed to setup script environment for this language");
// but fall through and let the inevitable failure below handle it.
} }
NS_ENSURE_TRUE(context, NS_ERROR_FAILURE);
NS_ASSERTION(global, "How could we possibly have a context without an " context = global->GetScriptContext(aLanguage);
"nsIScriptGlobalObject?"); NS_ENSURE_TRUE(context, NS_ERROR_FAILURE);
void *scope = global->GetScriptGlobal(aLanguage); void *scope = global->GetScriptGlobal(aLanguage);
nsresult rv; nsresult rv;

Просмотреть файл

@ -45,6 +45,7 @@ include $(DEPTH)/config/autoconf.mk
include $(topsrcdir)/config/rules.mk include $(topsrcdir)/config/rules.mk
_TEST_FILES = test_bug367781.html \ _TEST_FILES = test_bug367781.html \
test_bug379120.html \
$(NULL) $(NULL)
libs:: $(_TEST_FILES) libs:: $(_TEST_FILES)

Просмотреть файл

@ -0,0 +1,57 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=379120
-->
<head>
<title>Test for Bug 379120</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=379120">Mozilla Bug 379120</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
/** Test for Bug 379120 **/
var originalString = "<test></test>";
// Parse the content into an XMLDocument
var parser = new DOMParser();
var originalDoc = parser.parseFromString(originalString, "text/xml");
var stylesheetText =
"<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' " +
"version='1.0' xmlns='http://www.w3.org/1999/xhtml'> " +
"<xsl:output method='xml' version='1.0' encoding='UTF-8' " +
"doctype-system='http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd' " +
"doctype-public='-//W3C//DTD XHTML 1.0 Transitional//EN' /> " +
"<xsl:template match='/'>" +
"<div onload='var i = 1'/>" +
"<xsl:apply-templates />" +
"</xsl:template>" +
"</xsl:stylesheet>";
var stylesheet = parser.parseFromString(stylesheetText, "text/xml");
var processor = new XSLTProcessor();
var targetDocument;
processor.importStylesheet (stylesheet);
var transformedDocument = processor.transformToDocument (originalDoc);
is(transformedDocument.documentElement.getAttribute("onload"),
"var i = 1");
ok(transformedDocument.documentElement.onload === undefined,
"Shouldn't have onload handler");
</script>
</pre>
</body>
</html>