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),
|
||||
mUserDisabled(false),
|
||||
mSuppressed(false),
|
||||
mFireEventsOnDecode(false),
|
||||
mNewRequestsWillNeedAnimationReset(false),
|
||||
mStateChangerDepth(0),
|
||||
mCurrentRequestRegistered(false),
|
||||
@ -185,6 +186,18 @@ nsImageLoadingContent::Notify(imgIRequest* aRequest,
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -264,11 +277,23 @@ nsImageLoadingContent::OnLoadComplete(imgIRequest* aRequest, nsresult aStatus)
|
||||
}
|
||||
}
|
||||
|
||||
// Fire the appropriate DOM event.
|
||||
if (NS_SUCCEEDED(aStatus)) {
|
||||
FireEvent(NS_LITERAL_STRING("load"));
|
||||
// We want to give the decoder a chance to find errors. If we haven't found
|
||||
// an error yet and we've started decoding, either from the above
|
||||
// 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 {
|
||||
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));
|
||||
|
@ -410,6 +410,7 @@ private:
|
||||
bool mBroken : 1;
|
||||
bool mUserDisabled : 1;
|
||||
bool mSuppressed : 1;
|
||||
bool mFireEventsOnDecode : 1;
|
||||
|
||||
protected:
|
||||
/**
|
||||
|
@ -83,8 +83,9 @@ Decoder::Init()
|
||||
// No re-initializing
|
||||
MOZ_ASSERT(!mInitialized, "Can't re-initialize a decoder!");
|
||||
|
||||
// Fire OnStartDecode at init time to support bug 512435.
|
||||
if (!IsSizeDecode()) {
|
||||
mProgress |= FLAG_DECODE_STARTED;
|
||||
mProgress |= FLAG_DECODE_STARTED | FLAG_ONLOAD_BLOCKED;
|
||||
}
|
||||
|
||||
// Implementation-specific initialization
|
||||
@ -272,7 +273,7 @@ Decoder::CompleteDecode()
|
||||
} else {
|
||||
// We're not usable. Record some final progress indicating the error.
|
||||
if (!IsSizeDecode()) {
|
||||
mProgress |= FLAG_DECODE_COMPLETE;
|
||||
mProgress |= FLAG_DECODE_COMPLETE | FLAG_ONLOAD_UNBLOCKED;
|
||||
}
|
||||
mProgress |= FLAG_HAS_ERROR;
|
||||
}
|
||||
@ -623,7 +624,7 @@ Decoder::PostFrameStop(Opacity aFrameOpacity /* = Opacity::TRANSPARENT */,
|
||||
|
||||
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
|
||||
// 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
|
||||
// NotifyForDecodeOnlyOnDraw(), but ProgressTracker will ensure no duplicate
|
||||
// notifications get sent.)
|
||||
loadProgress |= FLAG_DECODE_STARTED |
|
||||
loadProgress |= FLAG_ONLOAD_BLOCKED |
|
||||
FLAG_DECODE_STARTED |
|
||||
FLAG_FRAME_COMPLETE |
|
||||
FLAG_DECODE_COMPLETE;
|
||||
FLAG_DECODE_COMPLETE |
|
||||
FLAG_ONLOAD_UNBLOCKED;
|
||||
}
|
||||
|
||||
// Notify our listeners, which will fire this image's load event.
|
||||
@ -1232,7 +1234,7 @@ RasterImage::NotifyForDecodeOnlyOnDraw()
|
||||
return;
|
||||
}
|
||||
|
||||
NotifyProgress(FLAG_DECODE_STARTED);
|
||||
NotifyProgress(FLAG_DECODE_STARTED | FLAG_ONLOAD_BLOCKED);
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -41,23 +41,6 @@ function forceDecodeImg() {
|
||||
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() {
|
||||
// Enable the discarding pref.
|
||||
oldDiscardingPref = prefBranch.getBoolPref('discardable');
|
||||
@ -89,13 +72,6 @@ function step2() {
|
||||
|
||||
// Check that the image is decoded.
|
||||
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.');
|
||||
|
||||
// Focus the old tab, then fire a memory-pressure notification. This should
|
||||
@ -105,12 +81,18 @@ function step3(result, scriptedObserver, clonedRequest) {
|
||||
.getService(Ci.nsIObserverService);
|
||||
os.notifyObservers(null, 'memory-pressure', 'heap-minimize');
|
||||
|
||||
// The DISCARD notification is delivered asynchronously, so continue after
|
||||
// we're sure it has been delivered.
|
||||
runAfterAsyncEvents(() => step4(result, scriptedObserver, clonedRequest));
|
||||
// The discard notification is delivered asynchronously, so pump the event
|
||||
// loop before checking.
|
||||
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.');
|
||||
|
||||
// And we're done.
|
||||
|
@ -70,6 +70,7 @@ skip-if = (toolkit == 'android' && processor == 'x86') #x86 only
|
||||
[test_bug496292.html]
|
||||
[test_bug497665.html]
|
||||
skip-if = (toolkit == 'android' && processor == 'x86') #x86 only
|
||||
[test_bug512435.html]
|
||||
[test_bug552605-1.html]
|
||||
[test_bug552605-2.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