mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Back out 3a06964c6a52 (bug 1174923) for box-decoration-break-first-letter.html failures
This commit is contained in:
parent
e0b8e47c2d
commit
8311ff50b5
@ -87,6 +87,7 @@ nsImageLoadingContent::nsImageLoadingContent()
|
|||||||
mBroken(true),
|
mBroken(true),
|
||||||
mUserDisabled(false),
|
mUserDisabled(false),
|
||||||
mSuppressed(false),
|
mSuppressed(false),
|
||||||
|
mFireEventsOnDecode(false),
|
||||||
mNewRequestsWillNeedAnimationReset(false),
|
mNewRequestsWillNeedAnimationReset(false),
|
||||||
mStateChangerDepth(0),
|
mStateChangerDepth(0),
|
||||||
mCurrentRequestRegistered(false),
|
mCurrentRequestRegistered(false),
|
||||||
@ -185,6 +186,18 @@ nsImageLoadingContent::Notify(imgIRequest* aRequest,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (aType == imgINotificationObserver::DECODE_COMPLETE) {
|
if (aType == imgINotificationObserver::DECODE_COMPLETE) {
|
||||||
|
if (mFireEventsOnDecode) {
|
||||||
|
mFireEventsOnDecode = false;
|
||||||
|
|
||||||
|
uint32_t reqStatus;
|
||||||
|
aRequest->GetImageStatus(&reqStatus);
|
||||||
|
if (reqStatus & imgIRequest::STATUS_ERROR) {
|
||||||
|
FireEvent(NS_LITERAL_STRING("error"));
|
||||||
|
} else {
|
||||||
|
FireEvent(NS_LITERAL_STRING("load"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UpdateImageState(true);
|
UpdateImageState(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,11 +277,23 @@ nsImageLoadingContent::OnLoadComplete(imgIRequest* aRequest, nsresult aStatus)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fire the appropriate DOM event.
|
// We want to give the decoder a chance to find errors. If we haven't found
|
||||||
if (NS_SUCCEEDED(aStatus)) {
|
// an error yet and we've started decoding, either from the above
|
||||||
FireEvent(NS_LITERAL_STRING("load"));
|
// StartDecoding or from some other place, we must only fire these events
|
||||||
|
// after we finish decoding.
|
||||||
|
uint32_t reqStatus;
|
||||||
|
aRequest->GetImageStatus(&reqStatus);
|
||||||
|
if (NS_SUCCEEDED(aStatus) && !(reqStatus & imgIRequest::STATUS_ERROR) &&
|
||||||
|
(reqStatus & imgIRequest::STATUS_DECODE_STARTED) &&
|
||||||
|
!(reqStatus & imgIRequest::STATUS_DECODE_COMPLETE)) {
|
||||||
|
mFireEventsOnDecode = true;
|
||||||
} else {
|
} else {
|
||||||
FireEvent(NS_LITERAL_STRING("error"));
|
// Fire the appropriate DOM event.
|
||||||
|
if (NS_SUCCEEDED(aStatus)) {
|
||||||
|
FireEvent(NS_LITERAL_STRING("load"));
|
||||||
|
} else {
|
||||||
|
FireEvent(NS_LITERAL_STRING("error"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsINode> thisNode = do_QueryInterface(static_cast<nsIImageLoadingContent*>(this));
|
nsCOMPtr<nsINode> thisNode = do_QueryInterface(static_cast<nsIImageLoadingContent*>(this));
|
||||||
|
@ -410,6 +410,7 @@ private:
|
|||||||
bool mBroken : 1;
|
bool mBroken : 1;
|
||||||
bool mUserDisabled : 1;
|
bool mUserDisabled : 1;
|
||||||
bool mSuppressed : 1;
|
bool mSuppressed : 1;
|
||||||
|
bool mFireEventsOnDecode : 1;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
|
@ -83,8 +83,9 @@ Decoder::Init()
|
|||||||
// No re-initializing
|
// No re-initializing
|
||||||
MOZ_ASSERT(!mInitialized, "Can't re-initialize a decoder!");
|
MOZ_ASSERT(!mInitialized, "Can't re-initialize a decoder!");
|
||||||
|
|
||||||
|
// Fire OnStartDecode at init time to support bug 512435.
|
||||||
if (!IsSizeDecode()) {
|
if (!IsSizeDecode()) {
|
||||||
mProgress |= FLAG_DECODE_STARTED;
|
mProgress |= FLAG_DECODE_STARTED | FLAG_ONLOAD_BLOCKED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implementation-specific initialization
|
// Implementation-specific initialization
|
||||||
@ -272,7 +273,7 @@ Decoder::CompleteDecode()
|
|||||||
} else {
|
} else {
|
||||||
// We're not usable. Record some final progress indicating the error.
|
// We're not usable. Record some final progress indicating the error.
|
||||||
if (!IsSizeDecode()) {
|
if (!IsSizeDecode()) {
|
||||||
mProgress |= FLAG_DECODE_COMPLETE;
|
mProgress |= FLAG_DECODE_COMPLETE | FLAG_ONLOAD_UNBLOCKED;
|
||||||
}
|
}
|
||||||
mProgress |= FLAG_HAS_ERROR;
|
mProgress |= FLAG_HAS_ERROR;
|
||||||
}
|
}
|
||||||
@ -623,7 +624,7 @@ Decoder::PostFrameStop(Opacity aFrameOpacity /* = Opacity::TRANSPARENT */,
|
|||||||
|
|
||||||
mCurrentFrame->Finish(aFrameOpacity, aDisposalMethod, aTimeout, aBlendMethod);
|
mCurrentFrame->Finish(aFrameOpacity, aDisposalMethod, aTimeout, aBlendMethod);
|
||||||
|
|
||||||
mProgress |= FLAG_FRAME_COMPLETE;
|
mProgress |= FLAG_FRAME_COMPLETE | FLAG_ONLOAD_UNBLOCKED;
|
||||||
|
|
||||||
// If we're not sending partial invalidations, then we send an invalidation
|
// If we're not sending partial invalidations, then we send an invalidation
|
||||||
// here when the first frame is complete.
|
// here when the first frame is complete.
|
||||||
|
@ -1211,9 +1211,11 @@ RasterImage::OnImageDataComplete(nsIRequest*, nsISupports*, nsresult aStatus,
|
|||||||
// to draw. (We may have already sent some of these notifications from
|
// to draw. (We may have already sent some of these notifications from
|
||||||
// NotifyForDecodeOnlyOnDraw(), but ProgressTracker will ensure no duplicate
|
// NotifyForDecodeOnlyOnDraw(), but ProgressTracker will ensure no duplicate
|
||||||
// notifications get sent.)
|
// notifications get sent.)
|
||||||
loadProgress |= FLAG_DECODE_STARTED |
|
loadProgress |= FLAG_ONLOAD_BLOCKED |
|
||||||
|
FLAG_DECODE_STARTED |
|
||||||
FLAG_FRAME_COMPLETE |
|
FLAG_FRAME_COMPLETE |
|
||||||
FLAG_DECODE_COMPLETE;
|
FLAG_DECODE_COMPLETE |
|
||||||
|
FLAG_ONLOAD_UNBLOCKED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify our listeners, which will fire this image's load event.
|
// Notify our listeners, which will fire this image's load event.
|
||||||
@ -1232,7 +1234,7 @@ RasterImage::NotifyForDecodeOnlyOnDraw()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NotifyProgress(FLAG_DECODE_STARTED);
|
NotifyProgress(FLAG_DECODE_STARTED | FLAG_ONLOAD_BLOCKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -41,23 +41,6 @@ function forceDecodeImg() {
|
|||||||
ctx.drawImage(img, 0, 0);
|
ctx.drawImage(img, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function runAfterAsyncEvents(aCallback) {
|
|
||||||
function handlePostMessage(aEvent) {
|
|
||||||
if (aEvent.data == 'next') {
|
|
||||||
window.removeEventListener('message', handlePostMessage, false);
|
|
||||||
aCallback();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEventListener('message', handlePostMessage, false);
|
|
||||||
|
|
||||||
// We'll receive the 'message' event after everything else that's currently in
|
|
||||||
// the event queue (which is a stronger guarantee than setTimeout, because
|
|
||||||
// setTimeout events may be coalesced). This lets us ensure that we run
|
|
||||||
// aCallback *after* any asynchronous events are delivered.
|
|
||||||
window.postMessage('next', '*');
|
|
||||||
}
|
|
||||||
|
|
||||||
function test() {
|
function test() {
|
||||||
// Enable the discarding pref.
|
// Enable the discarding pref.
|
||||||
oldDiscardingPref = prefBranch.getBoolPref('discardable');
|
oldDiscardingPref = prefBranch.getBoolPref('discardable');
|
||||||
@ -89,13 +72,6 @@ function step2() {
|
|||||||
|
|
||||||
// Check that the image is decoded.
|
// Check that the image is decoded.
|
||||||
forceDecodeImg();
|
forceDecodeImg();
|
||||||
|
|
||||||
// The FRAME_COMPLETE notification is delivered asynchronously, so continue
|
|
||||||
// after we're sure it has been delivered.
|
|
||||||
runAfterAsyncEvents(() => step3(result, scriptedObserver, clonedRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
function step3(result, scriptedObserver, clonedRequest) {
|
|
||||||
ok(isImgDecoded(), 'Image should initially be decoded.');
|
ok(isImgDecoded(), 'Image should initially be decoded.');
|
||||||
|
|
||||||
// Focus the old tab, then fire a memory-pressure notification. This should
|
// Focus the old tab, then fire a memory-pressure notification. This should
|
||||||
@ -105,12 +81,18 @@ function step3(result, scriptedObserver, clonedRequest) {
|
|||||||
.getService(Ci.nsIObserverService);
|
.getService(Ci.nsIObserverService);
|
||||||
os.notifyObservers(null, 'memory-pressure', 'heap-minimize');
|
os.notifyObservers(null, 'memory-pressure', 'heap-minimize');
|
||||||
|
|
||||||
// The DISCARD notification is delivered asynchronously, so continue after
|
// The discard notification is delivered asynchronously, so pump the event
|
||||||
// we're sure it has been delivered.
|
// loop before checking.
|
||||||
runAfterAsyncEvents(() => step4(result, scriptedObserver, clonedRequest));
|
window.addEventListener('message', function (event) {
|
||||||
|
if (event.data == 'step3') {
|
||||||
|
step3(result, scriptedObserver, clonedRequest);
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
window.postMessage('step3', '*');
|
||||||
}
|
}
|
||||||
|
|
||||||
function step4(result, scriptedObserver, clonedRequest) {
|
function step3(result, scriptedObserver, clonedRequest) {
|
||||||
ok(result.wasDiscarded, 'Image should be discarded.');
|
ok(result.wasDiscarded, 'Image should be discarded.');
|
||||||
|
|
||||||
// And we're done.
|
// And we're done.
|
||||||
|
@ -70,6 +70,7 @@ skip-if = (toolkit == 'android' && processor == 'x86') #x86 only
|
|||||||
[test_bug496292.html]
|
[test_bug496292.html]
|
||||||
[test_bug497665.html]
|
[test_bug497665.html]
|
||||||
skip-if = (toolkit == 'android' && processor == 'x86') #x86 only
|
skip-if = (toolkit == 'android' && processor == 'x86') #x86 only
|
||||||
|
[test_bug512435.html]
|
||||||
[test_bug552605-1.html]
|
[test_bug552605-1.html]
|
||||||
[test_bug552605-2.html]
|
[test_bug552605-2.html]
|
||||||
[test_bug553982.html]
|
[test_bug553982.html]
|
||||||
|
49
image/test/mochitest/test_bug512435.html
Normal file
49
image/test/mochitest/test_bug512435.html
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<!--
|
||||||
|
https://bugzilla.mozilla.org/show_bug.cgi?id=512435
|
||||||
|
-->
|
||||||
|
<head>
|
||||||
|
<title>Test for Bug 512435</title>
|
||||||
|
<script type="application/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||||
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||||
|
<script type="text/javascript" src="/tests/image/test/mochitest/imgutils.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=512435">Mozilla Bug 512435</a>
|
||||||
|
<img id="img_a">
|
||||||
|
<img id="img_b">
|
||||||
|
</div>
|
||||||
|
<pre id="test">
|
||||||
|
<script type="application/javascript">
|
||||||
|
|
||||||
|
// Boilerplate
|
||||||
|
const Ci = SpecialPowers.Ci;
|
||||||
|
const Cc = SpecialPowers.Cc;
|
||||||
|
SimpleTest.waitForExplicitFinish();
|
||||||
|
|
||||||
|
// We're relying on very particular behavior for certain images - clear the
|
||||||
|
// image cache, _then_ set src
|
||||||
|
clearImageCache();
|
||||||
|
document.getElementById("img_a").src = "damon.jpg";
|
||||||
|
document.getElementById("img_b").src = "shaver.png";
|
||||||
|
|
||||||
|
// Our handler
|
||||||
|
function loadHandler() {
|
||||||
|
|
||||||
|
// The two images should be decoded
|
||||||
|
ok(isFrameDecoded("img_a"), "img_a should be decoded before onload fires");
|
||||||
|
ok(isFrameDecoded("img_b"), "img_b should be decoded before onload fires");
|
||||||
|
|
||||||
|
// All done
|
||||||
|
SimpleTest.finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set our onload handler
|
||||||
|
window.onload = loadHandler;
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</pre>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user