mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 05:15:45 +00:00
Bug 652110: Make nsFileDataURI inherit directly from nsSimpleURI. r=sicking
This commit is contained in:
parent
facde0c632
commit
b4bdc7d485
@ -206,6 +206,7 @@ INCLUDES += \
|
||||
-I$(topsrcdir)/dom/ipc \
|
||||
-I$(topsrcdir)/js/src/xpconnect/src \
|
||||
-I$(topsrcdir)/caps/include \
|
||||
-I$(topsrcdir)/netwerk/base/src \
|
||||
$(NULL)
|
||||
|
||||
DEFINES += -D_IMPL_NS_LAYOUT
|
||||
|
@ -35,7 +35,7 @@
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsFileDataProtocolHandler.h"
|
||||
#include "nsNetCID.h"
|
||||
#include "nsSimpleURI.h"
|
||||
#include "nsDOMError.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsClassHashtable.h"
|
||||
@ -49,8 +49,6 @@
|
||||
#include "nsIObjectOutputStream.h"
|
||||
#include "nsIProgrammingLanguage.h"
|
||||
|
||||
static NS_DEFINE_CID(kSimpleURICID, NS_SIMPLEURI_CID);
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Hash table
|
||||
struct FileDataInfo
|
||||
@ -132,47 +130,19 @@ GetFileDataInfo(const nsACString& aUri)
|
||||
|
||||
static NS_DEFINE_CID(kFILEDATAURICID, NS_FILEDATAURI_CID);
|
||||
|
||||
|
||||
// Use an extra base object to avoid having to manually retype all the
|
||||
// nsIURI methods. I wish we could just inherit from nsSimpleURI instead.
|
||||
class nsFileDataURI_base : public nsIURI,
|
||||
public nsIMutable
|
||||
class nsFileDataURI : public nsSimpleURI,
|
||||
public nsIURIWithPrincipal
|
||||
{
|
||||
public:
|
||||
nsFileDataURI_base(nsIURI* aSimpleURI) :
|
||||
mSimpleURI(aSimpleURI)
|
||||
{
|
||||
mMutable = do_QueryInterface(mSimpleURI);
|
||||
NS_ASSERTION(aSimpleURI && mMutable, "This isn't going to work out");
|
||||
}
|
||||
virtual ~nsFileDataURI_base() {}
|
||||
|
||||
// For use only from deserialization
|
||||
nsFileDataURI_base() {}
|
||||
|
||||
NS_FORWARD_NSIURI(mSimpleURI->)
|
||||
NS_FORWARD_NSIMUTABLE(mMutable->)
|
||||
|
||||
protected:
|
||||
nsCOMPtr<nsIURI> mSimpleURI;
|
||||
nsCOMPtr<nsIMutable> mMutable;
|
||||
};
|
||||
|
||||
class nsFileDataURI : public nsFileDataURI_base,
|
||||
public nsIURIWithPrincipal,
|
||||
public nsISerializable,
|
||||
public nsIClassInfo
|
||||
{
|
||||
public:
|
||||
nsFileDataURI(nsIPrincipal* aPrincipal, nsIURI* aSimpleURI) :
|
||||
nsFileDataURI_base(aSimpleURI), mPrincipal(aPrincipal)
|
||||
nsFileDataURI(nsIPrincipal* aPrincipal) :
|
||||
nsSimpleURI(), mPrincipal(aPrincipal)
|
||||
{}
|
||||
virtual ~nsFileDataURI() {}
|
||||
|
||||
// For use only from deserialization
|
||||
nsFileDataURI() : nsFileDataURI_base() {}
|
||||
nsFileDataURI() : nsSimpleURI() {}
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_NSIURIWITHPRINCIPAL
|
||||
NS_DECL_NSISERIALIZABLE
|
||||
NS_DECL_NSICLASSINFO
|
||||
@ -181,22 +151,21 @@ public:
|
||||
NS_IMETHOD Clone(nsIURI** aClone);
|
||||
NS_IMETHOD Equals(nsIURI* aOther, PRBool *aResult);
|
||||
|
||||
// Override StartClone to hand back a nsFileDataURI
|
||||
virtual nsSimpleURI* StartClone()
|
||||
{ return new nsFileDataURI(); }
|
||||
|
||||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||
};
|
||||
|
||||
NS_IMPL_ADDREF(nsFileDataURI)
|
||||
NS_IMPL_RELEASE(nsFileDataURI)
|
||||
NS_IMPL_ADDREF_INHERITED(nsFileDataURI, nsSimpleURI)
|
||||
NS_IMPL_RELEASE_INHERITED(nsFileDataURI, nsSimpleURI)
|
||||
NS_INTERFACE_MAP_BEGIN(nsFileDataURI)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIURI)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIURIWithPrincipal)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISerializable)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIClassInfo)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIMutable)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIURI)
|
||||
if (aIID.Equals(kFILEDATAURICID))
|
||||
foundInterface = static_cast<nsIURI*>(this);
|
||||
else
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_INTERFACE_MAP_END_INHERITING(nsSimpleURI)
|
||||
|
||||
// nsIURIWithPrincipal methods:
|
||||
|
||||
@ -226,20 +195,16 @@ nsFileDataURI::GetPrincipalUri(nsIURI** aUri)
|
||||
NS_IMETHODIMP
|
||||
nsFileDataURI::Read(nsIObjectInputStream* aStream)
|
||||
{
|
||||
nsresult rv = aStream->ReadObject(PR_TRUE, getter_AddRefs(mSimpleURI));
|
||||
nsresult rv = nsSimpleURI::Read(aStream);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
mMutable = do_QueryInterface(mSimpleURI);
|
||||
NS_ENSURE_TRUE(mMutable, NS_ERROR_UNEXPECTED);
|
||||
|
||||
return NS_ReadOptionalObject(aStream, PR_TRUE, getter_AddRefs(mPrincipal));
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFileDataURI::Write(nsIObjectOutputStream* aStream)
|
||||
{
|
||||
nsresult rv = aStream->WriteCompoundObject(mSimpleURI, NS_GET_IID(nsIURI),
|
||||
PR_TRUE);
|
||||
nsresult rv = nsSimpleURI::Write(aStream);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return NS_WriteOptionalCompoundObject(aStream, mPrincipal,
|
||||
@ -253,13 +218,21 @@ NS_IMETHODIMP
|
||||
nsFileDataURI::Clone(nsIURI** aClone)
|
||||
{
|
||||
nsCOMPtr<nsIURI> simpleClone;
|
||||
nsresult rv = mSimpleURI->Clone(getter_AddRefs(simpleClone));
|
||||
nsresult rv = nsSimpleURI::Clone(getter_AddRefs(simpleClone));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsIURI* newURI = new nsFileDataURI(mPrincipal, simpleClone);
|
||||
NS_ENSURE_TRUE(newURI, NS_ERROR_OUT_OF_MEMORY);
|
||||
#ifdef DEBUG
|
||||
nsRefPtr<nsFileDataURI> uriCheck;
|
||||
rv = simpleClone->QueryInterface(kFILEDATAURICID, getter_AddRefs(uriCheck));
|
||||
NS_ABORT_IF_FALSE(NS_SUCCEEDED(rv) && uriCheck,
|
||||
"Unexpected!");
|
||||
#endif
|
||||
|
||||
NS_ADDREF(*aClone = newURI);
|
||||
nsFileDataURI* fileDataURI = static_cast<nsFileDataURI*>(simpleClone.get());
|
||||
|
||||
fileDataURI->mPrincipal = mPrincipal;
|
||||
|
||||
simpleClone.forget(aClone);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -285,7 +258,7 @@ nsFileDataURI::Equals(nsIURI* aOther, PRBool *aResult)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return mSimpleURI->Equals(otherFileDataUri->mSimpleURI, aResult);
|
||||
return nsSimpleURI::Equals(otherFileDataUri, aResult);
|
||||
}
|
||||
|
||||
// nsIClassInfo methods:
|
||||
@ -391,17 +364,14 @@ nsFileDataProtocolHandler::NewURI(const nsACString& aSpec,
|
||||
FileDataInfo* info =
|
||||
GetFileDataInfo(aSpec);
|
||||
|
||||
nsCOMPtr<nsIURI> inner = do_CreateInstance(kSimpleURICID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = inner->SetSpec(aSpec);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsRefPtr<nsFileDataURI> uri =
|
||||
new nsFileDataURI(info ? info->mPrincipal.get() : nsnull, inner);
|
||||
new nsFileDataURI(info ? info->mPrincipal.get() : nsnull);
|
||||
|
||||
rv = uri->SetSpec(aSpec);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
NS_TryToSetImmutable(uri);
|
||||
*aResult = uri.forget().get();
|
||||
uri.forget(aResult);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user