When we have a url() value that doesn't give us an imgIRequest (e.g. couldn'tcreate nsIURI, URI load blocked by security manager, etc), make sure to stillpick up the fallback value for cursor. Bug 379440, r+sr=dbaron

This commit is contained in:
bzbarsky@mit.edu 2007-05-02 23:33:13 -07:00
Родитель d3347f1954
Коммит 663c96c764
3 изменённых файлов: 85 добавлений и 6 удалений

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

@ -2496,9 +2496,9 @@ nsRuleNode::ComputeUserInterfaceData(nsStyleStruct* aStartStruct,
// The parser will never create a list that is *all* URL values --
// that's invalid.
PRUint32 arrayLength = 0;
for (nsCSSValueList *list2 = list;
list2->mValue.GetUnit() == eCSSUnit_Array; list2 = list2->mNext)
if (list2->mValue.GetArrayValue()->Item(0).GetImageValue())
nsCSSValueList* list2 = list;
for ( ; list->mValue.GetUnit() == eCSSUnit_Array; list = list->mNext)
if (list->mValue.GetArrayValue()->Item(0).GetImageValue())
++arrayLength;
if (arrayLength != 0) {
@ -2507,9 +2507,9 @@ nsRuleNode::ComputeUserInterfaceData(nsStyleStruct* aStartStruct,
ui->mCursorArrayLength = arrayLength;
for (nsCursorImage *item = ui->mCursorArray;
list->mValue.GetUnit() == eCSSUnit_Array;
list = list->mNext) {
nsCSSValue::Array *arr = list->mValue.GetArrayValue();
list2->mValue.GetUnit() == eCSSUnit_Array;
list2 = list2->mNext) {
nsCSSValue::Array *arr = list2->mValue.GetArrayValue();
imgIRequest *req = arr->Item(0).GetImageValue();
if (req) {
item->mImage = req;
@ -2524,6 +2524,11 @@ nsRuleNode::ComputeUserInterfaceData(nsStyleStruct* aStartStruct,
}
}
NS_ASSERTION(list, "Must have non-array value at the end");
NS_ASSERTION(list->mValue.GetUnit() == eCSSUnit_Enumerated ||
list->mValue.GetUnit() == eCSSUnit_Auto,
"Unexpected fallback value at end of cursor list");
if (eCSSUnit_Enumerated == list->mValue.GetUnit()) {
ui->mCursor = list->mValue.GetIntValue();
}

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

@ -72,6 +72,7 @@ _TEST_FILES = test_bug221428.html \
test_bug365932.html \
test_bug372770.html \
test_bug373293.html \
test_bug379440.html \
test_inherit_storage.html \
test_inherit_computation.html \
test_initial_storage.html \

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

@ -0,0 +1,73 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=379440
-->
<head>
<title>Test for Bug 379440</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" />
<style type="text/css">
#display > * { cursor: auto }
#t1 {
cursor: url(file:///tmp/foo), url(file:///c|/),
url(http://www.example.com/), crosshair;
}
#t2 {
cursor: url(file:///tmp/foo), url(file:///c|/), crosshair;
}
#t3 {
cursor: url(http://www.example.com/), crosshair;
}
#t4 {
cursor: url(http://www.example.com/);
}
#t5 {
cursor: url(http://www.example.com/), no-such-cursor-exists;
}
#t6 {
cursor: crosshair;
}
#t7 {
cursor: no-such-cursor-exists;
}
</style>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=379440">Mozilla Bug 379440</a>
<p id="display">
<div id="t1"> </div>
<div id="t2"></div>
<div id="t3"></div>
<div id="t4"></div>
<div id="t5"></div>
<div id="t6"></div>
<div id="t7"></div>
</p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
/** Test for Bug 379440 **/
function cur(id) {
return document.defaultView.getComputedStyle($(id), "").cursor;
}
is(cur("t1"), "url(http://www.example.com/), crosshair",
"Drop unloadable URIs");
is(cur("t2"), "crosshair", "Drop unloadable URIs again");
is(cur("t3"), "url(http://www.example.com/), crosshair", "URI + fallback");
is(cur("t4"), "auto", "Must have a fallback");
is(cur("t5"), "auto", "Fallback must be recognized");
is(cur("t6"), "crosshair", "Just a fallback");
is(cur("t7"), "auto", "Invalid fallback means ignore");
</script>
</pre>
</body>
</html>