mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1019840 - Use cached intrinsic size in nsImageFrame::ComputeSize unless the image loader has a size. r=tn
This commit is contained in:
parent
3d794cdd96
commit
7c7c25bd29
@ -28,16 +28,11 @@ interface nsIFrame;
|
|||||||
* become current only when the image is loaded. It is the responsibility of
|
* become current only when the image is loaded. It is the responsibility of
|
||||||
* observers to check which request they are getting notifications for.
|
* observers to check which request they are getting notifications for.
|
||||||
*
|
*
|
||||||
* Observers added in mid-load will not get any notifications they
|
|
||||||
* missed. We should NOT freeze this interface without considering
|
|
||||||
* this issue. (It could be that the image status on imgIRequest is
|
|
||||||
* sufficient, when combined with the imageBlockingStatus information.)
|
|
||||||
*
|
|
||||||
* Please make sure to update the MozImageLoadingContent WebIDL
|
* Please make sure to update the MozImageLoadingContent WebIDL
|
||||||
* interface to mirror this interface when changing it.
|
* interface to mirror this interface when changing it.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[scriptable, builtinclass, uuid(5794d12b-3195-4526-a814-a2181f6c71fe)]
|
[scriptable, builtinclass, uuid(770f7d84-c917-42d7-bf8d-d1b70649e733)]
|
||||||
interface nsIImageLoadingContent : imgINotificationObserver
|
interface nsIImageLoadingContent : imgINotificationObserver
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -100,6 +95,11 @@ interface nsIImageLoadingContent : imgINotificationObserver
|
|||||||
*/
|
*/
|
||||||
imgIRequest getRequest(in long aRequestType);
|
imgIRequest getRequest(in long aRequestType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the current request's size is available.
|
||||||
|
*/
|
||||||
|
[noscript, notxpcom] boolean currentRequestHasSize();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to notify the image loading content node that a frame has been
|
* Used to notify the image loading content node that a frame has been
|
||||||
* created.
|
* created.
|
||||||
|
@ -493,6 +493,12 @@ nsImageLoadingContent::GetRequest(int32_t aRequestType,
|
|||||||
return result.ErrorCode();
|
return result.ErrorCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP_(bool)
|
||||||
|
nsImageLoadingContent::CurrentRequestHasSize()
|
||||||
|
{
|
||||||
|
return HaveSize(mCurrentRequest);
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP_(void)
|
NS_IMETHODIMP_(void)
|
||||||
nsImageLoadingContent::FrameCreated(nsIFrame* aFrame)
|
nsImageLoadingContent::FrameCreated(nsIFrame* aFrame)
|
||||||
{
|
{
|
||||||
|
@ -743,10 +743,18 @@ nsImageFrame::ComputeSize(nsRenderingContext *aRenderingContext,
|
|||||||
NS_ASSERTION(imageLoader, "No content node??");
|
NS_ASSERTION(imageLoader, "No content node??");
|
||||||
mozilla::IntrinsicSize intrinsicSize(mIntrinsicSize);
|
mozilla::IntrinsicSize intrinsicSize(mIntrinsicSize);
|
||||||
|
|
||||||
|
// XXX(seth): We may sometimes find ourselves in the situation where we have
|
||||||
|
// mImage, but imageLoader's current request does not have a size yet.
|
||||||
|
// This can happen when we load an image speculatively from cache, it fails
|
||||||
|
// to validate, and the new image load hasn't fired SIZE_AVAILABLE yet. In
|
||||||
|
// this situation we should always use mIntrinsicSize, because
|
||||||
|
// GetNaturalWidth/Height will return 0, so we check CurrentRequestHasSize()
|
||||||
|
// below. See bug 1019840. We will fix this in bug 1141395.
|
||||||
|
|
||||||
// Content may override our default dimensions. This is termed as overriding
|
// Content may override our default dimensions. This is termed as overriding
|
||||||
// the intrinsic size by the spec, but all other consumers of mIntrinsic*
|
// the intrinsic size by the spec, but all other consumers of mIntrinsic*
|
||||||
// values are being used to refer to the real/true size of the image data.
|
// values are being used to refer to the real/true size of the image data.
|
||||||
if (imageLoader && mImage &&
|
if (imageLoader && imageLoader->CurrentRequestHasSize() && mImage &&
|
||||||
intrinsicSize.width.GetUnit() == eStyleUnit_Coord &&
|
intrinsicSize.width.GetUnit() == eStyleUnit_Coord &&
|
||||||
intrinsicSize.height.GetUnit() == eStyleUnit_Coord) {
|
intrinsicSize.height.GetUnit() == eStyleUnit_Coord) {
|
||||||
uint32_t width;
|
uint32_t width;
|
||||||
|
Loading…
Reference in New Issue
Block a user