Backed out changeset ade350a1d864 (bug 1818141) for causing multiple failures at RestyleManager.cpp
This commit is contained in:
@@ -1181,7 +1181,7 @@ nsresult nsImageLoadingContent::LoadImage(nsIURI* aNewURI, bool aForce,
|
|||||||
"How could we not have a current request here?");
|
"How could we not have a current request here?");
|
||||||
|
|
||||||
if (nsImageFrame* f = do_QueryFrame(GetOurPrimaryImageFrame())) {
|
if (nsImageFrame* f = do_QueryFrame(GetOurPrimaryImageFrame())) {
|
||||||
f->UpdateImage(mCurrentRequest);
|
f->NotifyNewCurrentRequest(mCurrentRequest, NS_OK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -688,7 +688,7 @@ void nsImageFrame::UpdateXULImage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!mOwnedRequest) {
|
if (!mOwnedRequest) {
|
||||||
UpdateImage(nullptr);
|
UpdateImage(nullptr, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -761,14 +761,18 @@ void nsImageFrame::SetupOwnedRequest() {
|
|||||||
// need to add it to the image tracker manually.
|
// need to add it to the image tracker manually.
|
||||||
PresContext()->Document()->ImageTracker()->Add(mOwnedRequest);
|
PresContext()->Document()->ImageTracker()->Add(mOwnedRequest);
|
||||||
|
|
||||||
UpdateImage(mOwnedRequest);
|
|
||||||
|
|
||||||
uint32_t status = 0;
|
uint32_t status = 0;
|
||||||
nsresult rv = mOwnedRequest->GetImageStatus(&status);
|
nsresult rv = mOwnedRequest->GetImageStatus(&status);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (status & imgIRequest::STATUS_SIZE_AVAILABLE) {
|
||||||
|
nsCOMPtr<imgIContainer> image;
|
||||||
|
mOwnedRequest->GetImage(getter_AddRefs(image));
|
||||||
|
OnSizeAvailable(mOwnedRequest, image);
|
||||||
|
}
|
||||||
|
|
||||||
if (status & imgIRequest::STATUS_FRAME_COMPLETE) {
|
if (status & imgIRequest::STATUS_FRAME_COMPLETE) {
|
||||||
mFirstFrameComplete = true;
|
mFirstFrameComplete = true;
|
||||||
}
|
}
|
||||||
@@ -1092,7 +1096,9 @@ auto nsImageFrame::ImageFrameTypeFor(const Element& aElement,
|
|||||||
void nsImageFrame::Notify(imgIRequest* aRequest, int32_t aType,
|
void nsImageFrame::Notify(imgIRequest* aRequest, int32_t aType,
|
||||||
const nsIntRect* aRect) {
|
const nsIntRect* aRect) {
|
||||||
if (aType == imgINotificationObserver::SIZE_AVAILABLE) {
|
if (aType == imgINotificationObserver::SIZE_AVAILABLE) {
|
||||||
return OnSizeAvailable(aRequest);
|
nsCOMPtr<imgIContainer> image;
|
||||||
|
aRequest->GetImage(getter_AddRefs(image));
|
||||||
|
return OnSizeAvailable(aRequest, image);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aType == imgINotificationObserver::FRAME_UPDATE) {
|
if (aType == imgINotificationObserver::FRAME_UPDATE) {
|
||||||
@@ -1110,31 +1116,33 @@ void nsImageFrame::Notify(imgIRequest* aRequest, int32_t aType,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (aType == imgINotificationObserver::LOAD_COMPLETE) {
|
if (aType == imgINotificationObserver::LOAD_COMPLETE) {
|
||||||
return OnLoadComplete(aRequest);
|
uint32_t imgStatus;
|
||||||
|
aRequest->GetImageStatus(&imgStatus);
|
||||||
|
nsresult status =
|
||||||
|
imgStatus & imgIRequest::STATUS_ERROR ? NS_ERROR_FAILURE : NS_OK;
|
||||||
|
return OnLoadComplete(aRequest, status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void nsImageFrame::OnSizeAvailable(imgIRequest* aRequest) {
|
void nsImageFrame::OnSizeAvailable(imgIRequest* aRequest,
|
||||||
nsCOMPtr<imgIContainer> image;
|
imgIContainer* aImage) {
|
||||||
aRequest->GetImage(getter_AddRefs(image));
|
if (!aImage) {
|
||||||
if (!image) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get requested animation policy from the pres context:
|
||||||
|
* normal = 0
|
||||||
|
* one frame = 1
|
||||||
|
* one loop = 2
|
||||||
|
*/
|
||||||
|
aImage->SetAnimationMode(PresContext()->ImageAnimationMode());
|
||||||
|
|
||||||
if (IsPendingLoad(aRequest)) {
|
if (IsPendingLoad(aRequest)) {
|
||||||
// We don't care
|
// We don't care
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateImage(aRequest, image);
|
UpdateImage(aRequest, aImage);
|
||||||
}
|
|
||||||
|
|
||||||
void nsImageFrame::UpdateImage(imgIRequest* aRequest) {
|
|
||||||
nsCOMPtr<imgIContainer> image;
|
|
||||||
if (aRequest) {
|
|
||||||
aRequest->GetImage(getter_AddRefs(image));
|
|
||||||
}
|
|
||||||
UpdateImage(aRequest, image);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void nsImageFrame::UpdateImage(imgIRequest* aRequest, imgIContainer* aImage) {
|
void nsImageFrame::UpdateImage(imgIRequest* aRequest, imgIContainer* aImage) {
|
||||||
@@ -1145,8 +1153,6 @@ void nsImageFrame::UpdateImage(imgIRequest* aRequest, imgIContainer* aImage) {
|
|||||||
// container, orienting according to our style.
|
// container, orienting according to our style.
|
||||||
mImage = nsLayoutUtils::OrientImage(aImage, orientation);
|
mImage = nsLayoutUtils::OrientImage(aImage, orientation);
|
||||||
MOZ_ASSERT(mImage);
|
MOZ_ASSERT(mImage);
|
||||||
// Get requested animation policy from the pres context.
|
|
||||||
mImage->SetAnimationMode(PresContext()->ImageAnimationMode());
|
|
||||||
} else {
|
} else {
|
||||||
// We no longer have a valid image, so release our stored image container.
|
// We no longer have a valid image, so release our stored image container.
|
||||||
mImage = mPrevImage = nullptr;
|
mImage = mPrevImage = nullptr;
|
||||||
@@ -1261,9 +1267,8 @@ void nsImageFrame::MaybeSendIntrinsicSizeAndRatioToEmbedder(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void nsImageFrame::OnLoadComplete(imgIRequest* aRequest) {
|
void nsImageFrame::OnLoadComplete(imgIRequest* aRequest, nsresult aStatus) {
|
||||||
MOZ_ASSERT(aRequest);
|
NotifyNewCurrentRequest(aRequest, aStatus);
|
||||||
UpdateImage(aRequest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void nsImageFrame::ElementStateChanged(ElementState aStates) {
|
void nsImageFrame::ElementStateChanged(ElementState aStates) {
|
||||||
@@ -1274,7 +1279,7 @@ void nsImageFrame::ElementStateChanged(ElementState aStates) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!ImageOk(mContent->AsElement()->State())) {
|
if (!ImageOk(mContent->AsElement()->State())) {
|
||||||
UpdateImage(nullptr);
|
UpdateImage(nullptr, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1315,6 +1320,15 @@ void nsImageFrame::UpdateIntrinsicSizeAndRatio() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nsImageFrame::NotifyNewCurrentRequest(imgIRequest* aRequest,
|
||||||
|
nsresult aStatus) {
|
||||||
|
nsCOMPtr<imgIContainer> image;
|
||||||
|
aRequest->GetImage(getter_AddRefs(image));
|
||||||
|
NS_ASSERTION(image || NS_FAILED(aStatus),
|
||||||
|
"Successful load with no container?");
|
||||||
|
UpdateImage(aRequest, image);
|
||||||
|
}
|
||||||
|
|
||||||
void nsImageFrame::MaybeDecodeForPredictedSize() {
|
void nsImageFrame::MaybeDecodeForPredictedSize() {
|
||||||
// Check that we're ready to decode.
|
// Check that we're ready to decode.
|
||||||
if (!mImage) {
|
if (!mImage) {
|
||||||
|
|||||||
@@ -293,9 +293,14 @@ class nsImageFrame : public nsAtomicContainerFrame, public nsIReflowCallback {
|
|||||||
friend class nsImageLoadingContent;
|
friend class nsImageLoadingContent;
|
||||||
friend class mozilla::PresShell;
|
friend class mozilla::PresShell;
|
||||||
|
|
||||||
void OnSizeAvailable(imgIRequest* aRequest);
|
void OnSizeAvailable(imgIRequest* aRequest, imgIContainer* aImage);
|
||||||
void OnFrameUpdate(imgIRequest* aRequest, const nsIntRect* aRect);
|
void OnFrameUpdate(imgIRequest* aRequest, const nsIntRect* aRect);
|
||||||
void OnLoadComplete(imgIRequest* aRequest);
|
void OnLoadComplete(imgIRequest* aRequest, nsresult aStatus);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notification that aRequest will now be the current request.
|
||||||
|
*/
|
||||||
|
void NotifyNewCurrentRequest(imgIRequest* aRequest, nsresult aStatus);
|
||||||
|
|
||||||
/// Always sync decode our image when painting if @aForce is true.
|
/// Always sync decode our image when painting if @aForce is true.
|
||||||
void SetForceSyncDecoding(bool aForce) { mForceSyncDecoding = aForce; }
|
void SetForceSyncDecoding(bool aForce) { mForceSyncDecoding = aForce; }
|
||||||
@@ -352,7 +357,6 @@ class nsImageFrame : public nsAtomicContainerFrame, public nsIReflowCallback {
|
|||||||
* (both can be null), and invalidate layout and paint as needed.
|
* (both can be null), and invalidate layout and paint as needed.
|
||||||
*/
|
*/
|
||||||
void UpdateImage(imgIRequest*, imgIContainer*);
|
void UpdateImage(imgIRequest*, imgIContainer*);
|
||||||
void UpdateImage(imgIRequest*);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to convert a dirty rect in the source image to a dirty
|
* Function to convert a dirty rect in the source image to a dirty
|
||||||
|
|||||||
Reference in New Issue
Block a user