зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
d3347f1954
Коммит
663c96c764
|
@ -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>
|
||||
|
Загрузка…
Ссылка в новой задаче