Bug 801061. Switch from imgIRequest to imgRequestProxy. r=joe

This doesn't switch all of the users yet, but is a step in the right
direction.

--HG--
extra : rebase_source : 91b4fef3f67586179c119208d000cf7629e04963
This commit is contained in:
Jeff Muizelaar 2012-10-12 08:43:01 -04:00
Родитель 790a34e644
Коммит 47c921e73e
36 изменённых файлов: 242 добавлений и 127 удалений

Просмотреть файл

@ -18,7 +18,7 @@
class nsAString; class nsAString;
class nsIContent; class nsIContent;
class nsINodeInfo; class nsINodeInfo;
class imgIRequest; class imgRequestProxy;
class nsNodeInfoManager; class nsNodeInfoManager;
class nsGenericHTMLElement; class nsGenericHTMLElement;
@ -95,6 +95,6 @@ NS_NewSVGElement(nsIContent** aResult, already_AddRefed<nsINodeInfo> aNodeInfo,
nsresult nsresult
NS_NewGenConImageContent(nsIContent** aResult, NS_NewGenConImageContent(nsIContent** aResult,
already_AddRefed<nsINodeInfo> aNodeInfo, already_AddRefed<nsINodeInfo> aNodeInfo,
imgIRequest* aImageRequest); imgRequestProxy* aImageRequest);
#endif // nsContentCreatorFunctions_h__ #endif // nsContentCreatorFunctions_h__

Просмотреть файл

@ -63,7 +63,7 @@ class nsIIOService;
class nsIURI; class nsIURI;
class imgIContainer; class imgIContainer;
class imgINotificationObserver; class imgINotificationObserver;
class imgIRequest; class imgRequestProxy;
class imgLoader; class imgLoader;
class imgICache; class imgICache;
class nsIImageLoadingContent; class nsIImageLoadingContent;
@ -640,7 +640,7 @@ public:
nsIURI* aReferrer, nsIURI* aReferrer,
imgINotificationObserver* aObserver, imgINotificationObserver* aObserver,
int32_t aLoadFlags, int32_t aLoadFlags,
imgIRequest** aRequest); imgRequestProxy** aRequest);
/** /**
* Obtain an image loader that respects the given document/channel's privacy status. * Obtain an image loader that respects the given document/channel's privacy status.
@ -666,7 +666,7 @@ public:
/** /**
* Helper method to call imgIRequest::GetStaticRequest. * Helper method to call imgIRequest::GetStaticRequest.
*/ */
static already_AddRefed<imgIRequest> GetStaticRequest(imgIRequest* aRequest); static already_AddRefed<imgRequestProxy> GetStaticRequest(imgRequestProxy* aRequest);
/** /**
* Method that decides whether a content node is draggable * Method that decides whether a content node is draggable

Просмотреть файл

@ -53,7 +53,7 @@
#include "nsIFormControl.h" #include "nsIFormControl.h"
#include "nsGkAtoms.h" #include "nsGkAtoms.h"
#include "imgINotificationObserver.h" #include "imgINotificationObserver.h"
#include "imgIRequest.h" #include "imgRequestProxy.h"
#include "imgIContainer.h" #include "imgIContainer.h"
#include "imgLoader.h" #include "imgLoader.h"
#include "nsDocShellCID.h" #include "nsDocShellCID.h"
@ -2685,7 +2685,7 @@ nsresult
nsContentUtils::LoadImage(nsIURI* aURI, nsIDocument* aLoadingDocument, nsContentUtils::LoadImage(nsIURI* aURI, nsIDocument* aLoadingDocument,
nsIPrincipal* aLoadingPrincipal, nsIURI* aReferrer, nsIPrincipal* aLoadingPrincipal, nsIURI* aReferrer,
imgINotificationObserver* aObserver, int32_t aLoadFlags, imgINotificationObserver* aObserver, int32_t aLoadFlags,
imgIRequest** aRequest) imgRequestProxy** aRequest)
{ {
NS_PRECONDITION(aURI, "Must have a URI"); NS_PRECONDITION(aURI, "Must have a URI");
NS_PRECONDITION(aLoadingDocument, "Must have a document"); NS_PRECONDITION(aLoadingDocument, "Must have a document");
@ -2768,11 +2768,11 @@ nsContentUtils::GetImageFromContent(nsIImageLoadingContent* aContent,
} }
//static //static
already_AddRefed<imgIRequest> already_AddRefed<imgRequestProxy>
nsContentUtils::GetStaticRequest(imgIRequest* aRequest) nsContentUtils::GetStaticRequest(imgRequestProxy* aRequest)
{ {
NS_ENSURE_TRUE(aRequest, nullptr); NS_ENSURE_TRUE(aRequest, nullptr);
nsCOMPtr<imgIRequest> retval; nsRefPtr<imgRequestProxy> retval;
aRequest->GetStaticRequest(getter_AddRefs(retval)); aRequest->GetStaticRequest(getter_AddRefs(retval));
return retval.forget(); return retval.forget();
} }

Просмотреть файл

@ -171,6 +171,7 @@
#include "mozilla/Preferences.h" #include "mozilla/Preferences.h"
#include "imgILoader.h" #include "imgILoader.h"
#include "imgRequestProxy.h"
#include "nsWrapperCacheInlines.h" #include "nsWrapperCacheInlines.h"
#include "nsSandboxFlags.h" #include "nsSandboxFlags.h"
#include "nsIAppsService.h" #include "nsIAppsService.h"
@ -7468,7 +7469,7 @@ nsDocument::MaybePreLoadImage(nsIURI* uri, const nsAString &aCrossOriginAttr)
} }
// Image not in cache - trigger preload // Image not in cache - trigger preload
nsCOMPtr<imgIRequest> request; nsRefPtr<imgRequestProxy> request;
nsresult rv = nsresult rv =
nsContentUtils::LoadImage(uri, nsContentUtils::LoadImage(uri,
this, this,

Просмотреть файл

@ -29,7 +29,7 @@ public:
AddStatesSilently(NS_EVENT_STATE_SUPPRESSED); AddStatesSilently(NS_EVENT_STATE_SUPPRESSED);
} }
nsresult Init(imgIRequest* aImageRequest) nsresult Init(imgRequestProxy* aImageRequest)
{ {
// No need to notify, since we have no frame. // No need to notify, since we have no frame.
return UseAsPrimaryRequest(aImageRequest, false); return UseAsPrimaryRequest(aImageRequest, false);
@ -68,7 +68,7 @@ NS_IMPL_ISUPPORTS_INHERITED3(nsGenConImageContent,
nsresult nsresult
NS_NewGenConImageContent(nsIContent** aResult, already_AddRefed<nsINodeInfo> aNodeInfo, NS_NewGenConImageContent(nsIContent** aResult, already_AddRefed<nsINodeInfo> aNodeInfo,
imgIRequest* aImageRequest) imgRequestProxy* aImageRequest)
{ {
NS_PRECONDITION(aImageRequest, "Must have request!"); NS_PRECONDITION(aImageRequest, "Must have request!");
nsGenConImageContent *it = new nsGenConImageContent(aNodeInfo); nsGenConImageContent *it = new nsGenConImageContent(aNodeInfo);

Просмотреть файл

@ -23,6 +23,7 @@
#include "nsILoadGroup.h" #include "nsILoadGroup.h"
#include "imgIContainer.h" #include "imgIContainer.h"
#include "imgLoader.h" #include "imgLoader.h"
#include "imgRequestProxy.h"
#include "nsThreadUtils.h" #include "nsThreadUtils.h"
#include "nsNetUtil.h" #include "nsNetUtil.h"
#include "nsAsyncDOMEvent.h" #include "nsAsyncDOMEvent.h"
@ -464,7 +465,7 @@ nsImageLoadingContent::LoadImageWithChannel(nsIChannel* aChannel,
AutoStateChanger changer(this, true); AutoStateChanger changer(this, true);
// Do the load. // Do the load.
nsCOMPtr<imgIRequest>& req = PrepareNextRequest(); nsRefPtr<imgRequestProxy>& req = PrepareNextRequest();
nsresult rv = nsContentUtils::GetImgLoaderForChannel(aChannel)-> nsresult rv = nsContentUtils::GetImgLoaderForChannel(aChannel)->
LoadImageWithChannel(aChannel, this, doc, aListener, LoadImageWithChannel(aChannel, this, doc, aListener,
getter_AddRefs(req)); getter_AddRefs(req));
@ -654,7 +655,7 @@ nsImageLoadingContent::LoadImage(nsIURI* aNewURI,
} }
// Not blocked. Do the load. // Not blocked. Do the load.
nsCOMPtr<imgIRequest>& req = PrepareNextRequest(); nsRefPtr<imgRequestProxy>& req = PrepareNextRequest();
nsresult rv; nsresult rv;
rv = nsContentUtils::LoadImage(aNewURI, aDocument, rv = nsContentUtils::LoadImage(aNewURI, aDocument,
aDocument->NodePrincipal(), aDocument->NodePrincipal(),
@ -784,7 +785,7 @@ nsImageLoadingContent::CancelImageRequests(bool aNotify)
} }
nsresult nsresult
nsImageLoadingContent::UseAsPrimaryRequest(imgIRequest* aRequest, nsImageLoadingContent::UseAsPrimaryRequest(imgRequestProxy* aRequest,
bool aNotify) bool aNotify)
{ {
// Our state will change. Watch it. // Our state will change. Watch it.
@ -795,7 +796,7 @@ nsImageLoadingContent::UseAsPrimaryRequest(imgIRequest* aRequest,
ClearCurrentRequest(NS_BINDING_ABORTED); ClearCurrentRequest(NS_BINDING_ABORTED);
// Clone the request we were given. // Clone the request we were given.
nsCOMPtr<imgIRequest>& req = PrepareNextRequest();; nsRefPtr<imgRequestProxy>& req = PrepareNextRequest();
nsresult rv = aRequest->Clone(this, getter_AddRefs(req)); nsresult rv = aRequest->Clone(this, getter_AddRefs(req));
if (NS_SUCCEEDED(rv)) if (NS_SUCCEEDED(rv))
TrackImage(req); TrackImage(req);
@ -883,7 +884,7 @@ nsImageLoadingContent::FireEvent(const nsAString& aEventType)
return NS_OK; return NS_OK;
} }
nsCOMPtr<imgIRequest>& nsRefPtr<imgRequestProxy>&
nsImageLoadingContent::PrepareNextRequest() nsImageLoadingContent::PrepareNextRequest()
{ {
// If we don't have a usable current request, get rid of any half-baked // If we don't have a usable current request, get rid of any half-baked
@ -922,7 +923,7 @@ nsImageLoadingContent::SetBlockedRequest(nsIURI* aURI, int16_t aContentDecision)
} }
} }
nsCOMPtr<imgIRequest>& nsRefPtr<imgRequestProxy>&
nsImageLoadingContent::PrepareCurrentRequest() nsImageLoadingContent::PrepareCurrentRequest()
{ {
// Blocked images go through SetBlockedRequest, which is a separate path. For // Blocked images go through SetBlockedRequest, which is a separate path. For
@ -940,7 +941,7 @@ nsImageLoadingContent::PrepareCurrentRequest()
return mCurrentRequest; return mCurrentRequest;
} }
nsCOMPtr<imgIRequest>& nsRefPtr<imgRequestProxy>&
nsImageLoadingContent::PreparePendingRequest() nsImageLoadingContent::PreparePendingRequest()
{ {
// Get rid of anything that was there previously. // Get rid of anything that was there previously.

Просмотреть файл

@ -124,11 +124,11 @@ protected:
/** /**
* UseAsPrimaryRequest is called by subclasses when they have an existing * UseAsPrimaryRequest is called by subclasses when they have an existing
* imgIRequest that they want this nsImageLoadingContent to use. This may * imgRequestProxy that they want this nsImageLoadingContent to use. This may
* effectively be called instead of LoadImage or LoadImageWithChannel. * effectively be called instead of LoadImage or LoadImageWithChannel.
* If aNotify is true, this method will notify on state changes. * If aNotify is true, this method will notify on state changes.
*/ */
nsresult UseAsPrimaryRequest(imgIRequest* aRequest, bool aNotify); nsresult UseAsPrimaryRequest(imgRequestProxy* aRequest, bool aNotify);
/** /**
* Derived classes of nsImageLoadingContent MUST call * Derived classes of nsImageLoadingContent MUST call
@ -255,7 +255,7 @@ protected:
* "pending" until it becomes usable. Otherwise, this becomes the current * "pending" until it becomes usable. Otherwise, this becomes the current
* request. * request.
*/ */
nsCOMPtr<imgIRequest>& PrepareNextRequest(); nsRefPtr<imgRequestProxy>& PrepareNextRequest();
/** /**
* Called when we would normally call PrepareNextRequest(), but the request was * Called when we would normally call PrepareNextRequest(), but the request was
@ -270,8 +270,8 @@ protected:
* Clear*Request(NS_BINDING_ABORTED) instead, since it passes a more appropriate * Clear*Request(NS_BINDING_ABORTED) instead, since it passes a more appropriate
* aReason than Prepare*Request() does (NS_ERROR_IMAGE_SRC_CHANGED). * aReason than Prepare*Request() does (NS_ERROR_IMAGE_SRC_CHANGED).
*/ */
nsCOMPtr<imgIRequest>& PrepareCurrentRequest(); nsRefPtr<imgRequestProxy>& PrepareCurrentRequest();
nsCOMPtr<imgIRequest>& PreparePendingRequest(); nsRefPtr<imgRequestProxy>& PreparePendingRequest();
/** /**
* Switch our pending request to be our current request. * Switch our pending request to be our current request.
@ -316,8 +316,8 @@ protected:
nsresult UntrackImage(imgIRequest* aImage); nsresult UntrackImage(imgIRequest* aImage);
/* MEMBERS */ /* MEMBERS */
nsCOMPtr<imgIRequest> mCurrentRequest; nsRefPtr<imgRequestProxy> mCurrentRequest;
nsCOMPtr<imgIRequest> mPendingRequest; nsRefPtr<imgRequestProxy> mPendingRequest;
uint32_t mCurrentRequestFlags; uint32_t mCurrentRequestFlags;
uint32_t mPendingRequestFlags; uint32_t mPendingRequestFlags;

Просмотреть файл

@ -28,8 +28,8 @@
#include "imgIContainer.h" #include "imgIContainer.h"
#include "imgILoader.h" #include "imgILoader.h"
#include "imgIRequest.h"
#include "imgINotificationObserver.h" #include "imgINotificationObserver.h"
#include "imgRequestProxy.h"
#include "nsILoadGroup.h" #include "nsILoadGroup.h"

Просмотреть файл

@ -77,6 +77,7 @@
// input type=image // input type=image
#include "nsImageLoadingContent.h" #include "nsImageLoadingContent.h"
#include "imgRequestProxy.h"
#include "mozAutoDocUpdate.h" #include "mozAutoDocUpdate.h"
#include "nsContentCreatorFunctions.h" #include "nsContentCreatorFunctions.h"

Просмотреть файл

@ -16,7 +16,7 @@
#include "nsXBLPrototypeResources.h" #include "nsXBLPrototypeResources.h"
#include "nsIDocumentObserver.h" #include "nsIDocumentObserver.h"
#include "imgILoader.h" #include "imgILoader.h"
#include "imgIRequest.h" #include "imgRequestProxy.h"
#include "mozilla/css/Loader.h" #include "mozilla/css/Loader.h"
#include "nsIURI.h" #include "nsIURI.h"
#include "nsNetUtil.h" #include "nsNetUtil.h"
@ -102,7 +102,7 @@ nsXBLResourceLoader::LoadResources(bool* aResult)
// Now kick off the image load... // Now kick off the image load...
// Passing NULL for pretty much everything -- cause we don't care! // Passing NULL for pretty much everything -- cause we don't care!
// XXX: initialDocumentURI is NULL! // XXX: initialDocumentURI is NULL!
nsCOMPtr<imgIRequest> req; nsRefPtr<imgRequestProxy> req;
nsContentUtils::LoadImage(url, doc, docPrincipal, docURL, nullptr, nsContentUtils::LoadImage(url, doc, docPrincipal, docURL, nullptr,
nsIRequest::LOAD_BACKGROUND, nsIRequest::LOAD_BACKGROUND,
getter_AddRefs(req)); getter_AddRefs(req));

Просмотреть файл

@ -6,7 +6,7 @@
#include "nsContextMenuInfo.h" #include "nsContextMenuInfo.h"
#include "nsIImageLoadingContent.h" #include "nsIImageLoadingContent.h"
#include "imgILoader.h" #include "imgLoader.h"
#include "nsIDOMDocument.h" #include "nsIDOMDocument.h"
#include "nsIDOMHTMLDocument.h" #include "nsIDOMHTMLDocument.h"
#include "nsIDOMHTMLElement.h" #include "nsIDOMHTMLElement.h"
@ -26,6 +26,8 @@
#include "nsIChannelPolicy.h" #include "nsIChannelPolicy.h"
#include "nsIContentSecurityPolicy.h" #include "nsIContentSecurityPolicy.h"
#include "nsIContentPolicy.h" #include "nsIContentPolicy.h"
#include "nsAutoPtr.h"
#include "imgRequestProxy.h"
//***************************************************************************** //*****************************************************************************
// class nsContextMenuInfo // class nsContextMenuInfo
@ -160,7 +162,7 @@ nsContextMenuInfo::GetBackgroundImageContainer(imgIContainer **aImageContainer)
NS_ENSURE_ARG_POINTER(aImageContainer); NS_ENSURE_ARG_POINTER(aImageContainer);
NS_ENSURE_STATE(mDOMNode); NS_ENSURE_STATE(mDOMNode);
nsCOMPtr<imgIRequest> request; nsRefPtr<imgRequestProxy> request;
GetBackgroundImageRequest(mDOMNode, getter_AddRefs(request)); GetBackgroundImageRequest(mDOMNode, getter_AddRefs(request));
if (request) if (request)
return request->GetImage(aImageContainer); return request->GetImage(aImageContainer);
@ -175,7 +177,7 @@ nsContextMenuInfo::GetBackgroundImageSrc(nsIURI **aURI)
NS_ENSURE_ARG_POINTER(aURI); NS_ENSURE_ARG_POINTER(aURI);
NS_ENSURE_STATE(mDOMNode); NS_ENSURE_STATE(mDOMNode);
nsCOMPtr<imgIRequest> request; nsRefPtr<imgRequestProxy> request;
GetBackgroundImageRequest(mDOMNode, getter_AddRefs(request)); GetBackgroundImageRequest(mDOMNode, getter_AddRefs(request));
if (request) if (request)
return request->GetURI(aURI); return request->GetURI(aURI);
@ -204,14 +206,14 @@ nsContextMenuInfo::HasBackgroundImage(nsIDOMNode * aDOMNode)
{ {
NS_ENSURE_TRUE(aDOMNode, false); NS_ENSURE_TRUE(aDOMNode, false);
nsCOMPtr<imgIRequest> request; nsRefPtr<imgRequestProxy> request;
GetBackgroundImageRequest(aDOMNode, getter_AddRefs(request)); GetBackgroundImageRequest(aDOMNode, getter_AddRefs(request));
return (request != nullptr); return (request != nullptr);
} }
nsresult nsresult
nsContextMenuInfo::GetBackgroundImageRequest(nsIDOMNode *aDOMNode, imgIRequest **aRequest) nsContextMenuInfo::GetBackgroundImageRequest(nsIDOMNode *aDOMNode, imgRequestProxy **aRequest)
{ {
NS_ENSURE_ARG(aDOMNode); NS_ENSURE_ARG(aDOMNode);
@ -246,7 +248,7 @@ nsContextMenuInfo::GetBackgroundImageRequest(nsIDOMNode *aDOMNode, imgIRequest *
} }
nsresult nsresult
nsContextMenuInfo::GetBackgroundImageRequestInternal(nsIDOMNode *aDOMNode, imgIRequest **aRequest) nsContextMenuInfo::GetBackgroundImageRequestInternal(nsIDOMNode *aDOMNode, imgRequestProxy **aRequest)
{ {
NS_ENSURE_ARG_POINTER(aDOMNode); NS_ENSURE_ARG_POINTER(aDOMNode);
@ -301,7 +303,7 @@ nsContextMenuInfo::GetBackgroundImageRequestInternal(nsIDOMNode *aDOMNode, imgIR
NS_NewURI(getter_AddRefs(bgUri), bgStringValue); NS_NewURI(getter_AddRefs(bgUri), bgStringValue);
NS_ENSURE_TRUE(bgUri, NS_ERROR_FAILURE); NS_ENSURE_TRUE(bgUri, NS_ERROR_FAILURE);
nsCOMPtr<imgILoader> il(do_CreateInstance("@mozilla.org/image/loader;1")); nsRefPtr<imgLoader> il = imgLoader::GetInstance();
NS_ENSURE_TRUE(il, NS_ERROR_FAILURE); NS_ENSURE_TRUE(il, NS_ERROR_FAILURE);
return il->LoadImage(bgUri, nullptr, nullptr, principal, nullptr, return il->LoadImage(bgUri, nullptr, nullptr, principal, nullptr,

Просмотреть файл

@ -15,6 +15,7 @@
#include "imgIRequest.h" #include "imgIRequest.h"
class ChromeContextMenuListener; class ChromeContextMenuListener;
class imgRequestProxy;
//***************************************************************************** //*****************************************************************************
// class nsContextMenuInfo // class nsContextMenuInfo
@ -50,10 +51,10 @@ private:
bool HasBackgroundImage(nsIDOMNode *aDOMNode); bool HasBackgroundImage(nsIDOMNode *aDOMNode);
nsresult GetBackgroundImageRequest(nsIDOMNode *aDOMNode, nsresult GetBackgroundImageRequest(nsIDOMNode *aDOMNode,
imgIRequest **aRequest); imgRequestProxy **aRequest);
nsresult GetBackgroundImageRequestInternal(nsIDOMNode *aDOMNode, nsresult GetBackgroundImageRequestInternal(nsIDOMNode *aDOMNode,
imgIRequest **aRequest); imgRequestProxy **aRequest);
private: private:
nsCOMPtr<nsIDOMEvent> mMouseEvent; nsCOMPtr<nsIDOMEvent> mMouseEvent;

Просмотреть файл

@ -27,7 +27,7 @@ interface nsIChannelPolicy;
* @version 0.3 * @version 0.3
* @see imagelib2 * @see imagelib2
*/ */
[scriptable, builtinclass, uuid(278c4c8e-934f-4364-b49b-081cd8b1d595)] [scriptable, builtinclass, uuid(c8126129-8dac-43cd-b1ba-3896fba2dd01)]
interface imgILoader : nsISupports interface imgILoader : nsISupports
{ {
// Extra flags to pass to loadImage if you want a load to use CORS // Extra flags to pass to loadImage if you want a load to use CORS
@ -54,16 +54,16 @@ interface imgILoader : nsISupports
* make sure to Cancel() the resulting request before the observer * make sure to Cancel() the resulting request before the observer
* goes away. * goes away.
*/ */
imgIRequest loadImage(in nsIURI aURI, imgIRequest loadImageXPCOM(in nsIURI aURI,
in nsIURI aInitialDocumentURL, in nsIURI aInitialDocumentURL,
in nsIURI aReferrerURI, in nsIURI aReferrerURI,
in nsIPrincipal aLoadingPrincipal, in nsIPrincipal aLoadingPrincipal,
in nsILoadGroup aLoadGroup, in nsILoadGroup aLoadGroup,
in imgINotificationObserver aObserver, in imgINotificationObserver aObserver,
in nsISupports aCX, in nsISupports aCX,
in nsLoadFlags aLoadFlags, in nsLoadFlags aLoadFlags,
in nsISupports cacheKey, in nsISupports cacheKey,
in nsIChannelPolicy channelPolicy); in nsIChannelPolicy channelPolicy);
/** /**
* Start the load and decode of an image. * Start the load and decode of an image.
@ -82,8 +82,8 @@ interface imgILoader : nsISupports
* reference cycles. This means that callers of loadImageWithChannel should * reference cycles. This means that callers of loadImageWithChannel should
* make sure to Cancel() the resulting request before the observer goes away. * make sure to Cancel() the resulting request before the observer goes away.
*/ */
imgIRequest loadImageWithChannel(in nsIChannel aChannel, imgIRequest loadImageWithChannelXPCOM(in nsIChannel aChannel,
in imgINotificationObserver aObserver, in imgINotificationObserver aObserver,
in nsISupports cx, in nsISupports cx,
out nsIStreamListener aListener); out nsIStreamListener aListener);
}; };

Просмотреть файл

@ -21,6 +21,7 @@ FAIL_ON_WARNINGS = 1
EXPORTS = imgLoader.h \ EXPORTS = imgLoader.h \
imgRequest.h \ imgRequest.h \
imgRequestProxy.h \
$(NULL) $(NULL)
CPPSRCS = \ CPPSRCS = \

Просмотреть файл

@ -5,6 +5,7 @@
#include "mozilla/Attributes.h" #include "mozilla/Attributes.h"
#include "mozilla/Preferences.h" #include "mozilla/Preferences.h"
#include "mozilla/ClearOnShutdown.h"
#include "ImageLogging.h" #include "ImageLogging.h"
#include "imgLoader.h" #include "imgLoader.h"
@ -681,7 +682,7 @@ imgCacheQueue::const_iterator imgCacheQueue::end() const
nsresult imgLoader::CreateNewProxyForRequest(imgRequest *aRequest, nsILoadGroup *aLoadGroup, nsresult imgLoader::CreateNewProxyForRequest(imgRequest *aRequest, nsILoadGroup *aLoadGroup,
imgINotificationObserver *aObserver, imgINotificationObserver *aObserver,
nsLoadFlags aLoadFlags, imgIRequest **_retval) nsLoadFlags aLoadFlags, imgRequestProxy **_retval)
{ {
LOG_SCOPE_WITH_PARAM(GetImgLog(), "imgLoader::CreateNewProxyForRequest", "imgRequest", aRequest); LOG_SCOPE_WITH_PARAM(GetImgLog(), "imgLoader::CreateNewProxyForRequest", "imgRequest", aRequest);
@ -709,7 +710,7 @@ nsresult imgLoader::CreateNewProxyForRequest(imgRequest *aRequest, nsILoadGroup
} }
// transfer reference to caller // transfer reference to caller
*_retval = static_cast<imgIRequest*>(proxyRequest); *_retval = proxyRequest;
return NS_OK; return NS_OK;
} }
@ -787,6 +788,20 @@ imgLoader::imgLoader()
sMemReporter->RegisterLoader(this); sMemReporter->RegisterLoader(this);
} }
already_AddRefed<imgLoader>
imgLoader::GetInstance()
{
static StaticRefPtr<imgLoader> singleton;
if (!singleton) {
singleton = imgLoader::Create();
if (!singleton)
return nullptr;
ClearOnShutdown(&singleton);
}
nsRefPtr<imgLoader> loader = singleton.get();
return loader.forget();
}
imgLoader::~imgLoader() imgLoader::~imgLoader()
{ {
ClearChromeImageCache(); ClearChromeImageCache();
@ -1159,7 +1174,7 @@ bool imgLoader::ValidateRequestWithNewChannel(imgRequest *request,
imgINotificationObserver *aObserver, imgINotificationObserver *aObserver,
nsISupports *aCX, nsISupports *aCX,
nsLoadFlags aLoadFlags, nsLoadFlags aLoadFlags,
imgIRequest **aProxyRequest, imgRequestProxy **aProxyRequest,
nsIChannelPolicy *aPolicy, nsIChannelPolicy *aPolicy,
nsIPrincipal* aLoadingPrincipal, nsIPrincipal* aLoadingPrincipal,
int32_t aCORSMode) int32_t aCORSMode)
@ -1173,8 +1188,8 @@ bool imgLoader::ValidateRequestWithNewChannel(imgRequest *request,
// If we're currently in the middle of validating this request, just hand // If we're currently in the middle of validating this request, just hand
// back a proxy to it; the required work will be done for us. // back a proxy to it; the required work will be done for us.
if (request->mValidator) { if (request->mValidator) {
rv = CreateNewProxyForRequest(request, aLoadGroup, aObserver, aLoadFlags, rv = CreateNewProxyForRequest(request, aLoadGroup, aObserver,
reinterpret_cast<imgIRequest **>(aProxyRequest)); aLoadFlags, aProxyRequest);
if (NS_FAILED(rv)) { if (NS_FAILED(rv)) {
return false; return false;
} }
@ -1214,7 +1229,7 @@ bool imgLoader::ValidateRequestWithNewChannel(imgRequest *request,
return false; return false;
} }
nsCOMPtr<imgIRequest> req; nsRefPtr<imgRequestProxy> req;
rv = CreateNewProxyForRequest(request, aLoadGroup, aObserver, rv = CreateNewProxyForRequest(request, aLoadGroup, aObserver,
aLoadFlags, getter_AddRefs(req)); aLoadFlags, getter_AddRefs(req));
if (NS_FAILED(rv)) { if (NS_FAILED(rv)) {
@ -1280,7 +1295,7 @@ bool imgLoader::ValidateEntry(imgCacheEntry *aEntry,
nsISupports *aCX, nsISupports *aCX,
nsLoadFlags aLoadFlags, nsLoadFlags aLoadFlags,
bool aCanMakeNewChannel, bool aCanMakeNewChannel,
imgIRequest **aProxyRequest, imgRequestProxy **aProxyRequest,
nsIChannelPolicy *aPolicy, nsIChannelPolicy *aPolicy,
nsIPrincipal* aLoadingPrincipal, nsIPrincipal* aLoadingPrincipal,
int32_t aCORSMode) int32_t aCORSMode)
@ -1516,10 +1531,7 @@ nsresult imgLoader::EvictEntries(imgCacheQueue &aQueueToClear)
nsIRequest::VALIDATE_NEVER | \ nsIRequest::VALIDATE_NEVER | \
nsIRequest::VALIDATE_ONCE_PER_SESSION) nsIRequest::VALIDATE_ONCE_PER_SESSION)
NS_IMETHODIMP imgLoader::LoadImageXPCOM(nsIURI *aURI,
/* imgIRequest loadImage(in nsIURI aURI, in nsIURI aInitialDocumentURL, in nsIURI aReferrerURI, in nsIPrincipal aLoadingPrincipal, in nsILoadGroup aLoadGroup, in imgINotificationObserver aObserver, in nsISupports aCX, in nsLoadFlags aLoadFlags, in nsISupports cacheKey, in nsIChannelPolicy channelPolicy); */
NS_IMETHODIMP imgLoader::LoadImage(nsIURI *aURI,
nsIURI *aInitialDocumentURI, nsIURI *aInitialDocumentURI,
nsIURI *aReferrerURI, nsIURI *aReferrerURI,
nsIPrincipal* aLoadingPrincipal, nsIPrincipal* aLoadingPrincipal,
@ -1531,7 +1543,39 @@ NS_IMETHODIMP imgLoader::LoadImage(nsIURI *aURI,
nsIChannelPolicy *aPolicy, nsIChannelPolicy *aPolicy,
imgIRequest **_retval) imgIRequest **_retval)
{ {
VerifyCacheSizes(); imgRequestProxy *proxy;
nsresult result = LoadImage(aURI,
aInitialDocumentURI,
aReferrerURI,
aLoadingPrincipal,
aLoadGroup,
aObserver,
aCX,
aLoadFlags,
aCacheKey,
aPolicy,
&proxy);
*_retval = proxy;
return result;
}
/* imgIRequest loadImage(in nsIURI aURI, in nsIURI aInitialDocumentURL, in nsIURI aReferrerURI, in nsIPrincipal aLoadingPrincipal, in nsILoadGroup aLoadGroup, in imgINotificationObserver aObserver, in nsISupports aCX, in nsLoadFlags aLoadFlags, in nsISupports cacheKey, in nsIChannelPolicy channelPolicy); */
nsresult imgLoader::LoadImage(nsIURI *aURI,
nsIURI *aInitialDocumentURI,
nsIURI *aReferrerURI,
nsIPrincipal* aLoadingPrincipal,
nsILoadGroup *aLoadGroup,
imgINotificationObserver *aObserver,
nsISupports *aCX,
nsLoadFlags aLoadFlags,
nsISupports *aCacheKey,
nsIChannelPolicy *aPolicy,
imgRequestProxy **_retval)
{
VerifyCacheSizes();
NS_ASSERTION(aURI, "imgLoader::LoadImage -- NULL URI pointer"); NS_ASSERTION(aURI, "imgLoader::LoadImage -- NULL URI pointer");
@ -1747,7 +1791,7 @@ NS_IMETHODIMP imgLoader::LoadImage(nsIURI *aURI,
return rv; return rv;
} }
imgRequestProxy *proxy = static_cast<imgRequestProxy *>(*_retval); imgRequestProxy *proxy = *_retval;
// Make sure that OnStatus/OnProgress calls have the right request set, if // Make sure that OnStatus/OnProgress calls have the right request set, if
// we did create a channel here. // we did create a channel here.
@ -1780,8 +1824,21 @@ NS_IMETHODIMP imgLoader::LoadImage(nsIURI *aURI,
return NS_OK; return NS_OK;
} }
/* imgIRequest loadImageWithChannel(in nsIChannel channel, in imgINotificationObserver aObserver, in nsISupports cx, out nsIStreamListener); */ /* imgIRequest loadImageWithChannelXPCOM(in nsIChannel channel, in imgINotificationObserver aObserver, in nsISupports cx, out nsIStreamListener); */
NS_IMETHODIMP imgLoader::LoadImageWithChannel(nsIChannel *channel, imgINotificationObserver *aObserver, nsISupports *aCX, nsIStreamListener **listener, imgIRequest **_retval) NS_IMETHODIMP imgLoader::LoadImageWithChannelXPCOM(nsIChannel *channel, imgINotificationObserver *aObserver, nsISupports *aCX, nsIStreamListener **listener, imgIRequest **_retval)
{
nsresult result;
imgRequestProxy* proxy;
result = LoadImageWithChannel(channel,
aObserver,
aCX,
listener,
&proxy);
*_retval = proxy;
return result;
}
nsresult imgLoader::LoadImageWithChannel(nsIChannel *channel, imgINotificationObserver *aObserver, nsISupports *aCX, nsIStreamListener **listener, imgRequestProxy **_retval)
{ {
NS_ASSERTION(channel, "imgLoader::LoadImageWithChannel -- NULL channel pointer"); NS_ASSERTION(channel, "imgLoader::LoadImageWithChannel -- NULL channel pointer");

Просмотреть файл

@ -239,6 +239,25 @@ public:
return static_cast<imgLoader*>(loader); return static_cast<imgLoader*>(loader);
} }
static already_AddRefed<imgLoader> GetInstance();
nsresult LoadImage(nsIURI *aURI,
nsIURI *aInitialDocumentURI,
nsIURI *aReferrerURI,
nsIPrincipal* aLoadingPrincipal,
nsILoadGroup *aLoadGroup,
imgINotificationObserver *aObserver,
nsISupports *aCX,
nsLoadFlags aLoadFlags,
nsISupports *aCacheKey,
nsIChannelPolicy *aPolicy,
imgRequestProxy **_retval);
nsresult LoadImageWithChannel(nsIChannel *channel,
imgINotificationObserver *aObserver,
nsISupports *aCX,
nsIStreamListener **listener,
imgRequestProxy **_retval);
static nsresult GetMimeTypeFromContent(const char* aContents, uint32_t aLength, nsACString& aContentType); static nsresult GetMimeTypeFromContent(const char* aContents, uint32_t aLength, nsACString& aContentType);
// exported for use by mimei.cpp in libxul sdk builds // exported for use by mimei.cpp in libxul sdk builds
static NS_EXPORT_(bool) SupportImageWithMimeType(const char* aMimeType); static NS_EXPORT_(bool) SupportImageWithMimeType(const char* aMimeType);
@ -304,7 +323,7 @@ private: // methods
nsILoadGroup *aLoadGroup, nsILoadGroup *aLoadGroup,
imgINotificationObserver *aObserver, nsISupports *aCX, imgINotificationObserver *aObserver, nsISupports *aCX,
nsLoadFlags aLoadFlags, bool aCanMakeNewChannel, nsLoadFlags aLoadFlags, bool aCanMakeNewChannel,
imgIRequest **aProxyRequest, imgRequestProxy **aProxyRequest,
nsIChannelPolicy *aPolicy, nsIChannelPolicy *aPolicy,
nsIPrincipal* aLoadingPrincipal, nsIPrincipal* aLoadingPrincipal,
int32_t aCORSMode); int32_t aCORSMode);
@ -315,14 +334,14 @@ private: // methods
nsILoadGroup *aLoadGroup, nsILoadGroup *aLoadGroup,
imgINotificationObserver *aObserver, imgINotificationObserver *aObserver,
nsISupports *aCX, nsLoadFlags aLoadFlags, nsISupports *aCX, nsLoadFlags aLoadFlags,
imgIRequest **aProxyRequest, imgRequestProxy **aProxyRequest,
nsIChannelPolicy *aPolicy, nsIChannelPolicy *aPolicy,
nsIPrincipal* aLoadingPrincipal, nsIPrincipal* aLoadingPrincipal,
int32_t aCORSMode); int32_t aCORSMode);
nsresult CreateNewProxyForRequest(imgRequest *aRequest, nsILoadGroup *aLoadGroup, nsresult CreateNewProxyForRequest(imgRequest *aRequest, nsILoadGroup *aLoadGroup,
imgINotificationObserver *aObserver, imgINotificationObserver *aObserver,
nsLoadFlags aLoadFlags, imgIRequest **_retval); nsLoadFlags aLoadFlags, imgRequestProxy **_retval);
void ReadAcceptHeaderPref(); void ReadAcceptHeaderPref();

Просмотреть файл

@ -552,13 +552,23 @@ imgRequestProxy* NewStaticProxy(imgRequestProxy* aThis)
NS_IMETHODIMP imgRequestProxy::Clone(imgINotificationObserver* aObserver, NS_IMETHODIMP imgRequestProxy::Clone(imgINotificationObserver* aObserver,
imgIRequest** aClone) imgIRequest** aClone)
{
nsresult result;
imgRequestProxy* proxy;
result = Clone(aObserver, &proxy);
*aClone = proxy;
return result;
}
nsresult imgRequestProxy::Clone(imgINotificationObserver* aObserver,
imgRequestProxy** aClone)
{ {
return PerformClone(aObserver, NewProxy, aClone); return PerformClone(aObserver, NewProxy, aClone);
} }
nsresult imgRequestProxy::PerformClone(imgINotificationObserver* aObserver, nsresult imgRequestProxy::PerformClone(imgINotificationObserver* aObserver,
imgRequestProxy* (aAllocFn)(imgRequestProxy*), imgRequestProxy* (aAllocFn)(imgRequestProxy*),
imgIRequest** aClone) imgRequestProxy** aClone)
{ {
NS_PRECONDITION(aClone, "Null out param"); NS_PRECONDITION(aClone, "Null out param");
@ -837,6 +847,15 @@ void imgRequestProxy::NullOutListener()
NS_IMETHODIMP NS_IMETHODIMP
imgRequestProxy::GetStaticRequest(imgIRequest** aReturn) imgRequestProxy::GetStaticRequest(imgIRequest** aReturn)
{
imgRequestProxy *proxy;
nsresult result = GetStaticRequest(&proxy);
*aReturn = proxy;
return result;
}
nsresult
imgRequestProxy::GetStaticRequest(imgRequestProxy** aReturn)
{ {
*aReturn = nullptr; *aReturn = nullptr;
mozilla::image::Image* image = GetImage(); mozilla::image::Image* image = GetImage();
@ -989,5 +1008,9 @@ NS_IMETHODIMP
imgRequestProxyStatic::Clone(imgINotificationObserver* aObserver, imgRequestProxyStatic::Clone(imgINotificationObserver* aObserver,
imgIRequest** aClone) imgIRequest** aClone)
{ {
return PerformClone(aObserver, NewStaticProxy, aClone); nsresult result;
imgRequestProxy* proxy;
result = PerformClone(aObserver, NewStaticProxy, &proxy);
*aClone = proxy;
return result;
} }

Просмотреть файл

@ -103,6 +103,9 @@ public:
// imgRequest::RemoveProxy // imgRequest::RemoveProxy
void ClearAnimationConsumers(); void ClearAnimationConsumers();
nsresult Clone(imgINotificationObserver* aObserver, imgRequestProxy** aClone);
nsresult GetStaticRequest(imgRequestProxy** aReturn);
protected: protected:
friend class imgStatusTracker; friend class imgStatusTracker;
friend class imgStatusNotifyRunnable; friend class imgStatusNotifyRunnable;
@ -176,7 +179,7 @@ protected:
nsresult PerformClone(imgINotificationObserver* aObserver, nsresult PerformClone(imgINotificationObserver* aObserver,
imgRequestProxy* (aAllocFn)(imgRequestProxy*), imgRequestProxy* (aAllocFn)(imgRequestProxy*),
imgIRequest** aClone); imgRequestProxy** aClone);
public: public:
NS_FORWARD_SAFE_NSITIMEDCHANNEL(TimedChannel()) NS_FORWARD_SAFE_NSITIMEDCHANNEL(TimedChannel())

Просмотреть файл

@ -96,7 +96,7 @@ function checkSecondLoad()
var listener = new ImageListener(checkClone, secondLoadDone); var listener = new ImageListener(checkClone, secondLoadDone);
var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools) var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools)
.createScriptedObserver(listener); .createScriptedObserver(listener);
requests.push(gCurrentLoader.loadImage(uri, null, null, null, null, outer, null, 0, null, null)); requests.push(gCurrentLoader.loadImageXPCOM(uri, null, null, null, null, outer, null, 0, null, null));
listener.synchronous = false; listener.synchronous = false;
} }
@ -154,7 +154,7 @@ function checkSecondChannelLoad()
var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools) var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools)
.createScriptedObserver(listener); .createScriptedObserver(listener);
var outlistener = {}; var outlistener = {};
requests.push(gCurrentLoader.loadImageWithChannel(channel, outer, null, outlistener)); requests.push(gCurrentLoader.loadImageWithChannelXPCOM(channel, outer, null, outlistener));
channellistener.outputListener = outlistener.value; channellistener.outputListener = outlistener.value;
listener.synchronous = false; listener.synchronous = false;
@ -178,7 +178,7 @@ function run_loadImageWithChannel_tests()
var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools) var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools)
.createScriptedObserver(listener); .createScriptedObserver(listener);
var outlistener = {}; var outlistener = {};
requests.push(gCurrentLoader.loadImageWithChannel(channel, outer, null, outlistener)); requests.push(gCurrentLoader.loadImageWithChannelXPCOM(channel, outer, null, outlistener));
channellistener.outputListener = outlistener.value; channellistener.outputListener = outlistener.value;
listener.synchronous = false; listener.synchronous = false;
@ -198,7 +198,7 @@ function startImageCallback(otherCb)
var listener2 = new ImageListener(null, function(foo, bar) { do_test_finished(); }); var listener2 = new ImageListener(null, function(foo, bar) { do_test_finished(); });
var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools) var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools)
.createScriptedObserver(listener2); .createScriptedObserver(listener2);
requests.push(gCurrentLoader.loadImage(uri, null, null, null, null, outer, null, 0, null, null)); requests.push(gCurrentLoader.loadImageXPCOM(uri, null, null, null, null, outer, null, 0, null, null));
listener2.synchronous = false; listener2.synchronous = false;
// Now that we've started another load, chain to the callback. // Now that we've started another load, chain to the callback.
@ -216,7 +216,7 @@ function run_test()
var listener = new ImageListener(startImageCallback(checkClone), firstLoadDone); var listener = new ImageListener(startImageCallback(checkClone), firstLoadDone);
var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools) var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools)
.createScriptedObserver(listener); .createScriptedObserver(listener);
var req = gCurrentLoader.loadImage(uri, null, null, null, null, outer, null, 0, null, null); var req = gCurrentLoader.loadImageXPCOM(uri, null, null, null, null, outer, null, 0, null, null);
requests.push(req); requests.push(req);
// Ensure that we don't cause any mayhem when we lock an image. // Ensure that we don't cause any mayhem when we lock an image.

Просмотреть файл

@ -60,7 +60,7 @@ function setup_chan(path, isPrivate, callback) {
var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools) var outer = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools)
.createScriptedObserver(listener); .createScriptedObserver(listener);
listeners.push(outer); listeners.push(outer);
requests.push(loader.loadImageWithChannel(chan, outer, null, outlistener)); requests.push(loader.loadImageWithChannelXPCOM(chan, outer, null, outlistener));
channelListener.outputListener = outlistener.value; channelListener.outputListener = outlistener.value;
listener.synchronous = false; listener.synchronous = false;
} }
@ -73,7 +73,7 @@ function loadImage(isPrivate, callback) {
var loadGroup = Cc["@mozilla.org/network/load-group;1"].createInstance(Ci.nsILoadGroup); var loadGroup = Cc["@mozilla.org/network/load-group;1"].createInstance(Ci.nsILoadGroup);
loadGroup.notificationCallbacks = new NotificationCallbacks(isPrivate); loadGroup.notificationCallbacks = new NotificationCallbacks(isPrivate);
var loader = isPrivate ? gPrivateLoader : gPublicLoader; var loader = isPrivate ? gPrivateLoader : gPublicLoader;
requests.push(loader.loadImage(uri, null, null, null, loadGroup, outer, null, 0, null, null)); requests.push(loader.loadImageXPCOM(uri, null, null, null, loadGroup, outer, null, 0, null, null));
listener.synchronous = false; listener.synchronous = false;
} }

Просмотреть файл

@ -24,6 +24,7 @@
#include "imgILoader.h" #include "imgILoader.h"
#include "imgIContainer.h" #include "imgIContainer.h"
#include "imgRequestProxy.h"
#include "nsIServiceManager.h" #include "nsIServiceManager.h"
#include "nsIComponentManager.h" #include "nsIComponentManager.h"
@ -94,7 +95,7 @@ nsBulletFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext)
{ {
nsFrame::DidSetStyleContext(aOldStyleContext); nsFrame::DidSetStyleContext(aOldStyleContext);
imgIRequest *newRequest = GetStyleList()->GetListStyleImage(); imgRequestProxy *newRequest = GetStyleList()->GetListStyleImage();
if (newRequest) { if (newRequest) {

Просмотреть файл

@ -16,6 +16,8 @@
#include "imgIDecoderObserver.h" #include "imgIDecoderObserver.h"
#include "imgINotificationObserver.h" #include "imgINotificationObserver.h"
class imgRequestProxy;
#define BULLET_FRAME_IMAGE_LOADING NS_FRAME_STATE_BIT(63) #define BULLET_FRAME_IMAGE_LOADING NS_FRAME_STATE_BIT(63)
#define BULLET_FRAME_HAS_FONT_INFLATION NS_FRAME_STATE_BIT(62) #define BULLET_FRAME_HAS_FONT_INFLATION NS_FRAME_STATE_BIT(62)
@ -109,7 +111,7 @@ protected:
void GetLoadGroup(nsPresContext *aPresContext, nsILoadGroup **aLoadGroup); void GetLoadGroup(nsPresContext *aPresContext, nsILoadGroup **aLoadGroup);
nsMargin mPadding; nsMargin mPadding;
nsCOMPtr<imgIRequest> mImageRequest; nsRefPtr<imgRequestProxy> mImageRequest;
nsRefPtr<nsBulletListener> mListener; nsRefPtr<nsBulletListener> mListener;
nsSize mIntrinsicSize; nsSize mIntrinsicSize;

Просмотреть файл

@ -53,6 +53,7 @@
#include "imgIContainer.h" #include "imgIContainer.h"
#include "imgLoader.h" #include "imgLoader.h"
#include "imgRequestProxy.h"
#include "nsCSSFrameConstructor.h" #include "nsCSSFrameConstructor.h"
#include "nsIDOMRange.h" #include "nsIDOMRange.h"
@ -1811,7 +1812,7 @@ nsImageFrame::GetIntrinsicImageSize(nsSize& aSize)
nsresult nsresult
nsImageFrame::LoadIcon(const nsAString& aSpec, nsImageFrame::LoadIcon(const nsAString& aSpec,
nsPresContext *aPresContext, nsPresContext *aPresContext,
imgIRequest** aRequest) imgRequestProxy** aRequest)
{ {
nsresult rv = NS_OK; nsresult rv = NS_OK;
NS_PRECONDITION(!aSpec.IsEmpty(), "What happened??"); NS_PRECONDITION(!aSpec.IsEmpty(), "What happened??");

Просмотреть файл

@ -30,6 +30,7 @@ class nsPresContext;
class nsImageFrame; class nsImageFrame;
class nsTransform2D; class nsTransform2D;
class nsImageLoadingContent; class nsImageLoadingContent;
class imgRequestProxy;
namespace mozilla { namespace mozilla {
namespace layers { namespace layers {
@ -298,7 +299,7 @@ private:
// loading / broken images // loading / broken images
nsresult LoadIcons(nsPresContext *aPresContext); nsresult LoadIcons(nsPresContext *aPresContext);
nsresult LoadIcon(const nsAString& aSpec, nsPresContext *aPresContext, nsresult LoadIcon(const nsAString& aSpec, nsPresContext *aPresContext,
imgIRequest **aRequest); imgRequestProxy **aRequest);
class IconLoad MOZ_FINAL : public nsIObserver, class IconLoad MOZ_FINAL : public nsIObserver,
public imgINotificationObserver { public imgINotificationObserver {
@ -333,8 +334,8 @@ private:
public: public:
nsCOMPtr<imgIRequest> mLoadingImage; nsRefPtr<imgRequestProxy> mLoadingImage;
nsCOMPtr<imgIRequest> mBrokenImage; nsRefPtr<imgRequestProxy> mBrokenImage;
bool mPrefForceInlineAltText; bool mPrefForceInlineAltText;
bool mPrefShowPlaceholders; bool mPrefShowPlaceholders;
}; };

Просмотреть файл

@ -121,13 +121,13 @@ ImageLoader::MaybeRegisterCSSImage(ImageLoader::Image* aImage)
return; return;
} }
imgIRequest* canonicalRequest = aImage->mRequests.GetWeak(nullptr); imgRequestProxy* canonicalRequest = aImage->mRequests.GetWeak(nullptr);
if (!canonicalRequest) { if (!canonicalRequest) {
// The image was blocked or something. // The image was blocked or something.
return; return;
} }
nsCOMPtr<imgIRequest> request; nsRefPtr<imgRequestProxy> request;
// Ignore errors here. If cloning fails for some reason we'll put a null // Ignore errors here. If cloning fails for some reason we'll put a null
// entry in the hash and we won't keep trying to clone. // entry in the hash and we won't keep trying to clone.
@ -261,7 +261,7 @@ ImageLoader::LoadImage(nsIURI* aURI, nsIPrincipal* aOriginPrincipal,
return; return;
} }
nsCOMPtr<imgIRequest> request; nsRefPtr<imgRequestProxy> request;
nsContentUtils::LoadImage(aURI, mDocument, aOriginPrincipal, aReferrer, nsContentUtils::LoadImage(aURI, mDocument, aOriginPrincipal, aReferrer,
nullptr, nsIRequest::LOAD_NORMAL, nullptr, nsIRequest::LOAD_NORMAL,
getter_AddRefs(request)); getter_AddRefs(request));
@ -270,7 +270,7 @@ ImageLoader::LoadImage(nsIURI* aURI, nsIPrincipal* aOriginPrincipal,
return; return;
} }
nsCOMPtr<imgIRequest> clonedRequest; nsRefPtr<imgRequestProxy> clonedRequest;
mInClone = true; mInClone = true;
nsresult rv = request->Clone(this, getter_AddRefs(clonedRequest)); nsresult rv = request->Clone(this, getter_AddRefs(clonedRequest));
mInClone = false; mInClone = false;

Просмотреть файл

@ -244,7 +244,7 @@ double nsCSSValue::GetAngleValueInRadians() const
} }
} }
imgIRequest* nsCSSValue::GetImageValue(nsIDocument* aDocument) const imgRequestProxy* nsCSSValue::GetImageValue(nsIDocument* aDocument) const
{ {
NS_ABORT_IF_FALSE(mUnit == eCSSUnit_Image, "not an Image value"); NS_ABORT_IF_FALSE(mUnit == eCSSUnit_Image, "not an Image value");
return mValue.mImage->mRequests.GetWeak(aDocument); return mValue.mImage->mRequests.GetWeak(aDocument);
@ -1725,7 +1725,7 @@ css::ImageValue::ImageValue(nsIURI* aURI, nsStringBuffer* aString,
} }
static PLDHashOperator static PLDHashOperator
ClearRequestHashtable(nsISupports* aKey, nsCOMPtr<imgIRequest>& aValue, ClearRequestHashtable(nsISupports* aKey, nsRefPtr<imgRequestProxy>& aValue,
void* aClosure) void* aClosure)
{ {
mozilla::css::ImageValue* image = mozilla::css::ImageValue* image =

Просмотреть файл

@ -16,14 +16,14 @@
#include "nsCSSProperty.h" #include "nsCSSProperty.h"
#include "nsColor.h" #include "nsColor.h"
#include "nsCoord.h" #include "nsCoord.h"
#include "nsInterfaceHashtable.h" #include "nsRefPtrHashtable.h"
#include "nsString.h" #include "nsString.h"
#include "nsStringBuffer.h" #include "nsStringBuffer.h"
#include "nsTArray.h" #include "nsTArray.h"
#include "nsStyleConsts.h" #include "nsStyleConsts.h"
#include "mozilla/FloatingPoint.h" #include "mozilla/FloatingPoint.h"
class imgIRequest; class imgRequestProxy;
class nsIDocument; class nsIDocument;
class nsIPrincipal; class nsIPrincipal;
class nsPresContext; class nsPresContext;
@ -125,7 +125,7 @@ struct ImageValue : public URLValue {
// Inherit operator== from URLValue // Inherit operator== from URLValue
nsInterfaceHashtable<nsISupportsHashKey, imgIRequest> mRequests; nsRefPtrHashtable<nsISupportsHashKey, imgRequestProxy> mRequests;
// Override AddRef and Release to not only log ourselves correctly, but // Override AddRef and Release to not only log ourselves correctly, but
// also so that we delete correctly without a virtual destructor // also so that we delete correctly without a virtual destructor
@ -454,7 +454,7 @@ public:
// Not making this inline because that would force us to include // Not making this inline because that would force us to include
// imgIRequest.h, which leads to REQUIRES hell, since this header is included // imgIRequest.h, which leads to REQUIRES hell, since this header is included
// all over. // all over.
imgIRequest* GetImageValue(nsIDocument* aDocument) const; imgRequestProxy* GetImageValue(nsIDocument* aDocument) const;
nscoord GetFixedLength(nsPresContext* aPresContext) const; nscoord GetFixedLength(nsPresContext* aPresContext) const;
nscoord GetPixelLength() const; nscoord GetPixelLength() const;

Просмотреть файл

@ -65,7 +65,7 @@ using namespace mozilla::dom;
if ((context_)->PresContext()->IsDynamic()) { \ if ((context_)->PresContext()->IsDynamic()) { \
method_(request_); \ method_(request_); \
} else { \ } else { \
nsCOMPtr<imgIRequest> req = nsContentUtils::GetStaticRequest(request_); \ nsRefPtr<imgRequestProxy> req = nsContentUtils::GetStaticRequest(request_); \
method_(req); \ method_(req); \
} }

Просмотреть файл

@ -30,11 +30,10 @@
#include "nsCSSValue.h" #include "nsCSSValue.h"
#include "nsStyleTransformMatrix.h" #include "nsStyleTransformMatrix.h"
#include "nsAlgorithm.h" #include "nsAlgorithm.h"
#include "imgIRequest.h" #include "imgRequestProxy.h"
#include "gfxRect.h" #include "gfxRect.h"
class nsIFrame; class nsIFrame;
class imgIRequest;
class imgIContainer; class imgIContainer;
struct nsCSSValueList; struct nsCSSValueList;
@ -840,8 +839,8 @@ struct nsStyleBorder {
} }
// These are defined in nsStyleStructInlines.h // These are defined in nsStyleStructInlines.h
inline void SetBorderImage(imgIRequest* aImage); inline void SetBorderImage(imgRequestProxy* aImage);
inline imgIRequest* GetBorderImage() const; inline imgRequestProxy* GetBorderImage() const;
bool HasBorderImage() {return !!mBorderImageSource;} bool HasBorderImage() {return !!mBorderImageSource;}
@ -894,7 +893,7 @@ public:
#endif #endif
protected: protected:
nsCOMPtr<imgIRequest> mBorderImageSource; // [reset] nsRefPtr<imgRequestProxy> mBorderImageSource; // [reset]
public: public:
nsStyleCorners mBorderRadius; // [reset] coord, percent nsStyleCorners mBorderRadius; // [reset] coord, percent
@ -1049,8 +1048,8 @@ struct nsStyleList {
return NS_STYLE_HINT_FRAMECHANGE; return NS_STYLE_HINT_FRAMECHANGE;
} }
imgIRequest* GetListStyleImage() const { return mListStyleImage; } imgRequestProxy* GetListStyleImage() const { return mListStyleImage; }
void SetListStyleImage(imgIRequest* aReq) void SetListStyleImage(imgRequestProxy* aReq)
{ {
if (mListStyleImage) if (mListStyleImage)
mListStyleImage->UnlockImage(); mListStyleImage->UnlockImage();
@ -1062,7 +1061,7 @@ struct nsStyleList {
uint8_t mListStyleType; // [inherited] See nsStyleConsts.h uint8_t mListStyleType; // [inherited] See nsStyleConsts.h
uint8_t mListStylePosition; // [inherited] uint8_t mListStylePosition; // [inherited]
private: private:
nsCOMPtr<imgIRequest> mListStyleImage; // [inherited] nsRefPtr<imgRequestProxy> mListStyleImage; // [inherited]
nsStyleList& operator=(const nsStyleList& aOther) MOZ_DELETE; nsStyleList& operator=(const nsStyleList& aOther) MOZ_DELETE;
public: public:
nsRect mImageRegion; // [inherited] the rect to use within an image nsRect mImageRegion; // [inherited] the rect to use within an image
@ -1779,7 +1778,7 @@ struct nsStyleContentData {
nsStyleContentType mType; nsStyleContentType mType;
union { union {
PRUnichar *mString; PRUnichar *mString;
imgIRequest *mImage; imgRequestProxy *mImage;
nsCSSValue::Array* mCounters; nsCSSValue::Array* mCounters;
} mContent; } mContent;
#ifdef DEBUG #ifdef DEBUG
@ -1804,7 +1803,7 @@ struct nsStyleContentData {
void TrackImage(nsPresContext* aContext); void TrackImage(nsPresContext* aContext);
void UntrackImage(nsPresContext* aContext); void UntrackImage(nsPresContext* aContext);
void SetImage(imgIRequest* aRequest) void SetImage(imgRequestProxy* aRequest)
{ {
NS_ABORT_IF_FALSE(!mImageTracked, NS_ABORT_IF_FALSE(!mImageTracked,
"Setting a new image without untracking the old one!"); "Setting a new image without untracking the old one!");

Просмотреть файл

@ -17,13 +17,13 @@
#include "imgIContainer.h" #include "imgIContainer.h"
inline void inline void
nsStyleBorder::SetBorderImage(imgIRequest* aImage) nsStyleBorder::SetBorderImage(imgRequestProxy* aImage)
{ {
mBorderImageSource = aImage; mBorderImageSource = aImage;
mSubImages.Clear(); mSubImages.Clear();
} }
inline imgIRequest* inline imgRequestProxy*
nsStyleBorder::GetBorderImage() const nsStyleBorder::GetBorderImage() const
{ {
NS_ABORT_IF_FALSE(!mBorderImageSource || mImageTracked, NS_ABORT_IF_FALSE(!mBorderImageSource || mImageTracked,

Просмотреть файл

@ -250,7 +250,7 @@ nsImageBoxFrame::UpdateImage()
if (!(appearance && nsBox::gTheme && if (!(appearance && nsBox::gTheme &&
nsBox::gTheme->ThemeSupportsWidget(nullptr, this, appearance))) { nsBox::gTheme->ThemeSupportsWidget(nullptr, this, appearance))) {
// get the list-style-image // get the list-style-image
imgIRequest *styleRequest = GetStyleList()->GetListStyleImage(); imgRequestProxy *styleRequest = GetStyleList()->GetListStyleImage();
if (styleRequest) { if (styleRequest) {
styleRequest->Clone(mListener, getter_AddRefs(mImageRequest)); styleRequest->Clone(mListener, getter_AddRefs(mImageRequest));
} }

Просмотреть файл

@ -13,6 +13,7 @@
#include "imgIContainer.h" #include "imgIContainer.h"
#include "imgINotificationObserver.h" #include "imgINotificationObserver.h"
class imgRequestProxy;
class nsImageBoxFrame; class nsImageBoxFrame;
class nsDisplayXULImage; class nsDisplayXULImage;
@ -110,7 +111,7 @@ private:
// registered with the refresh driver. // registered with the refresh driver.
bool mRequestRegistered; bool mRequestRegistered;
nsCOMPtr<imgIRequest> mImageRequest; nsRefPtr<imgRequestProxy> mImageRequest;
nsCOMPtr<imgINotificationObserver> mListener; nsCOMPtr<imgINotificationObserver> mListener;
int32_t mLoadFlags; int32_t mLoadFlags;

Просмотреть файл

@ -2089,7 +2089,7 @@ nsTreeBodyFrame::GetImage(int32_t aRowIndex, nsTreeColumn* aCol, bool aUseContex
nsAutoString imageSrc; nsAutoString imageSrc;
mView->GetImageSrc(aRowIndex, aCol, imageSrc); mView->GetImageSrc(aRowIndex, aCol, imageSrc);
nsCOMPtr<imgIRequest> styleRequest; nsRefPtr<imgRequestProxy> styleRequest;
if (!aUseContext && !imageSrc.IsEmpty()) { if (!aUseContext && !imageSrc.IsEmpty()) {
aAllowImageRegions = false; aAllowImageRegions = false;
} }
@ -2147,7 +2147,7 @@ nsTreeBodyFrame::GetImage(int32_t aRowIndex, nsTreeColumn* aCol, bool aUseContex
listener->AddCell(aRowIndex, aCol); listener->AddCell(aRowIndex, aCol);
nsCOMPtr<imgINotificationObserver> imgNotificationObserver = listener; nsCOMPtr<imgINotificationObserver> imgNotificationObserver = listener;
nsCOMPtr<imgIRequest> imageRequest; nsRefPtr<imgRequestProxy> imageRequest;
if (styleRequest) { if (styleRequest) {
styleRequest->Clone(imgNotificationObserver, getter_AddRefs(imageRequest)); styleRequest->Clone(imgNotificationObserver, getter_AddRefs(imageRequest));
} else { } else {

Просмотреть файл

@ -200,9 +200,9 @@ nsAlertsIconListener::StartRequest(const nsAString & aImageUrl)
if (!il) if (!il)
return ShowAlert(NULL); return ShowAlert(NULL);
return il->LoadImage(imageUri, nullptr, nullptr, nullptr, nullptr, this, return il->LoadImageXPCOM(imageUri, nullptr, nullptr, nullptr, nullptr, this,
nullptr, nsIRequest::LOAD_NORMAL, nullptr, nullptr, nullptr, nsIRequest::LOAD_NORMAL, nullptr, nullptr,
getter_AddRefs(mIconRequest)); getter_AddRefs(mIconRequest));
} }
void void

Просмотреть файл

@ -11,11 +11,12 @@
#define nsMenuItemIconX_h_ #define nsMenuItemIconX_h_
#include "nsCOMPtr.h" #include "nsCOMPtr.h"
#include "nsAutoPtr.h"
#include "imgINotificationObserver.h" #include "imgINotificationObserver.h"
class nsIURI; class nsIURI;
class nsIContent; class nsIContent;
class imgIRequest; class imgRequestProxy;
class nsMenuObjectX; class nsMenuObjectX;
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
@ -53,13 +54,13 @@ public:
protected: protected:
nsresult OnStopFrame(imgIRequest* aRequest); nsresult OnStopFrame(imgIRequest* aRequest);
nsCOMPtr<nsIContent> mContent; nsCOMPtr<nsIContent> mContent;
nsCOMPtr<imgIRequest> mIconRequest; nsRefPtr<imgRequestProxy> mIconRequest;
nsMenuObjectX* mMenuObject; // [weak] nsMenuObjectX* mMenuObject; // [weak]
nsIntRect mImageRegionRect; nsIntRect mImageRegionRect;
bool mLoadedIcon; bool mLoadedIcon;
bool mSetIcon; bool mSetIcon;
NSMenuItem* mNativeMenuItem; // [weak] NSMenuItem* mNativeMenuItem; // [weak]
}; };
#endif // nsMenuItemIconX_h_ #endif // nsMenuItemIconX_h_

Просмотреть файл

@ -34,7 +34,7 @@
#include "nsToolkit.h" #include "nsToolkit.h"
#include "nsNetUtil.h" #include "nsNetUtil.h"
#include "imgLoader.h" #include "imgLoader.h"
#include "imgIRequest.h" #include "imgRequestProxy.h"
#include "nsMenuItemX.h" #include "nsMenuItemX.h"
#include "gfxImageSurface.h" #include "gfxImageSurface.h"
#include "imgIContainer.h" #include "imgIContainer.h"