I was styling a xul tree cell with
treechildren::-moz-tree-image(richCol) {
list-style-image:
url("data:image/png;base64,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");
}
But when the first time it calling to GetImage, it's always failed, after a
period of times, it's succeed, so I need to know why this happening, is that
designed intently or just a bug?
nsresult
nsTreeBodyFrame::GetImage(int32_t aRowIndex, nsTreeColumn* aCol, bool
aUseContext,
nsStyleContext* aStyleContext, bool&
aAllowImageRegions, imgIContainer** aResult)
{
*aResult = nullptr;
nsAutoString imageSrc;
mView->GetImageSrc(aRowIndex, aCol, imageSrc);
nsRefPtr<imgRequestProxy> styleRequest;
if (!aUseContext && !imageSrc.IsEmpty()) {
aAllowImageRegions = false;
}
else {
// Obtain the URL from the style context.
aAllowImageRegions = true;
styleRequest = aStyleContext->StyleList()->GetListStyleImage();
if (!styleRequest)
return NS_OK;
nsCOMPtr<nsIURI> uri;
styleRequest->GetURI(getter_AddRefs(uri));
nsAutoCString spec;
uri->GetSpec(spec);
CopyUTF8toUTF16(spec, imageSrc);
}
// Look the image up in our cache.
nsTreeImageCacheEntry entry;
if (mImageCache.Get(imageSrc, &entry)) {
// Find out if the image has loaded.
uint32_t status;
imgIRequest *imgReq = entry.request;
imgReq->GetImageStatus(&status);
imgReq->GetImage(aResult); // We hand back the image here. The GetImage
call addrefs *aResult.
bool animated = true; // Assuming animated is the safe option
// We can only call GetAnimated if we're decoded
if (*aResult && (status & imgIRequest::STATUS_DECODE_COMPLETE))
(*aResult)->GetAnimated(&animated);
if ((!(status & imgIRequest::STATUS_LOAD_COMPLETE)) || animated) {
// We either aren't done loading, or we're animating. Add our row as a
listener for invalidations.
nsCOMPtr<imgINotificationObserver> obs;
imgReq->GetNotificationObserver(getter_AddRefs(obs));
if (obs) {
static_cast<nsTreeImageListener*> (obs.get())->AddCell(aRowIndex, aCol);
}
return NS_OK;
}
}
if (!*aResult) {
// Create a new nsTreeImageListener object and pass it our row and column
// information.
nsTreeImageListener* listener = new nsTreeImageListener(this);
if (!listener)
return NS_ERROR_OUT_OF_MEMORY;
if (!mCreatedListeners.PutEntry(listener)) {
return NS_ERROR_FAILURE;
}
listener->AddCell(aRowIndex, aCol);
nsCOMPtr<imgINotificationObserver> imgNotificationObserver = listener;
nsRefPtr<imgRequestProxy> imageRequest;
if (styleRequest) {
styleRequest->Clone(imgNotificationObserver,
getter_AddRefs(imageRequest));
} else {
nsIDocument* doc = mContent->GetDocument();
if (!doc)
// The page is currently being torn down. Why bother.
return NS_ERROR_FAILURE;
nsCOMPtr<nsIURI> baseURI = mContent->GetBaseURI();
nsCOMPtr<nsIURI> srcURI;
nsContentUtils::NewURIWithDocumentCharset(getter_AddRefs(srcURI),
imageSrc,
doc,
baseURI);
if (!srcURI)
return NS_ERROR_FAILURE;
// XXXbz what's the origin principal for this stuff that comes from our
// view? I guess we should assume that it's the node's principal...
if (nsContentUtils::CanLoadImage(srcURI, mContent, doc,
mContent->NodePrincipal())) {
nsresult rv = nsContentUtils::LoadImage(srcURI,
doc,
mContent->NodePrincipal(),
doc->GetDocumentURI(),
imgNotificationObserver,
nsIRequest::LOAD_NORMAL,
EmptyString(),
getter_AddRefs(imageRequest));
NS_ENSURE_SUCCESS(rv, rv);
}
}
listener->UnsuppressInvalidation();
if (!imageRequest)
return NS_ERROR_FAILURE;
// We don't want discarding/decode-on-draw for xul images
imageRequest->StartDecoding();
imageRequest->LockImage();
// In a case it was already cached.
imageRequest->GetImage(aResult);
nsTreeImageCacheEntry cacheEntry(imageRequest, imgNotificationObserver);
mImageCache.Put(imageSrc, cacheEntry);
}
return NS_OK;
}
_______________________________________________
dev-platform mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-platform