mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-29 10:48:39 +09:00
Bug 1346501. Don't mark every image as visible when a frame is created for it
This commit is contained in:
parent
2a6262ee6d
commit
ece6d716f4
4 changed files with 37 additions and 11 deletions
|
|
@ -491,8 +491,8 @@ nsImageLoadingContent::FrameCreated(nsIFrame* aFrame)
|
|||
|
||||
mFrameCreateCalled = true;
|
||||
|
||||
TrackImage(mCurrentRequest);
|
||||
TrackImage(mPendingRequest);
|
||||
TrackImage(mCurrentRequest, aFrame);
|
||||
TrackImage(mPendingRequest, aFrame);
|
||||
|
||||
// We need to make sure that our image request is registered, if it should
|
||||
// be registered.
|
||||
|
|
@ -1486,7 +1486,8 @@ nsImageLoadingContent::OnVisibilityChange(Visibility aNewVisibility,
|
|||
}
|
||||
|
||||
void
|
||||
nsImageLoadingContent::TrackImage(imgIRequest* aImage)
|
||||
nsImageLoadingContent::TrackImage(imgIRequest* aImage,
|
||||
nsIFrame* aFrame /*= nullptr */)
|
||||
{
|
||||
if (!aImage)
|
||||
return;
|
||||
|
|
@ -1499,13 +1500,21 @@ nsImageLoadingContent::TrackImage(imgIRequest* aImage)
|
|||
return;
|
||||
}
|
||||
|
||||
// We only want to track this request if we're visible. Ordinarily we check
|
||||
// the visible count, but that requires a frame; in cases where
|
||||
// GetOurPrimaryFrame() cannot obtain a frame (e.g. <feImage>), we assume
|
||||
// we're visible if FrameCreated() was called.
|
||||
nsIFrame* frame = GetOurPrimaryFrame();
|
||||
if ((frame && frame->GetVisibility() == Visibility::APPROXIMATELY_NONVISIBLE) ||
|
||||
(!frame && !mFrameCreateCalled)) {
|
||||
if (!aFrame) {
|
||||
aFrame = GetOurPrimaryFrame();
|
||||
}
|
||||
|
||||
/* This line is deceptively simple. It hides a lot of subtlety. Before we
|
||||
* create an nsImageFrame we call nsImageFrame::ShouldCreateImageFrameFor
|
||||
* to determine if we should create an nsImageFrame or create a frame based
|
||||
* on the display of the element (ie inline, block, etc). Inline, block, etc
|
||||
* frames don't register for visibility tracking so they will return UNTRACKED
|
||||
* from GetVisibility(). So this line is choosing to mark such images as
|
||||
* visible. Once the image loads we will get an nsImageFrame and the proper
|
||||
* visibility. This is a pitfall of tracking the visibility on the frames
|
||||
* instead of the content node.
|
||||
*/
|
||||
if (!aFrame || aFrame->GetVisibility() == Visibility::APPROXIMATELY_NONVISIBLE) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue