зеркало из https://github.com/mozilla/pjs.git
fix for bug 107289 sr=jband, r=dougt, a=asa
remove libjar dependency from xpcom step 2: make xptinfo use the new nsIXPTLoader interface
This commit is contained in:
Родитель
07f2710485
Коммит
31d0733c1f
|
@ -28,7 +28,7 @@ include $(DEPTH)/config/autoconf.mk
|
||||||
|
|
||||||
MODULE = xpcom
|
MODULE = xpcom
|
||||||
LIBRARY_NAME = xptinfo
|
LIBRARY_NAME = xptinfo
|
||||||
REQUIRES = jar \
|
REQUIRES = \
|
||||||
string \
|
string \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
DEPTH=..\..\..\..
|
DEPTH=..\..\..\..
|
||||||
MODULE = xpcom
|
MODULE = xpcom
|
||||||
REQUIRES = jar \
|
REQUIRES = \
|
||||||
string \
|
string \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,8 @@
|
||||||
|
|
||||||
#include "xptiprivate.h"
|
#include "xptiprivate.h"
|
||||||
|
|
||||||
|
#define NS_ZIPLOADER_CONTRACTID NS_XPTLOADER_CONTRACTID_PREFIX "zip"
|
||||||
|
|
||||||
NS_IMPL_THREADSAFE_ISUPPORTS2(xptiInterfaceInfoManager,
|
NS_IMPL_THREADSAFE_ISUPPORTS2(xptiInterfaceInfoManager,
|
||||||
nsIInterfaceInfoManager,
|
nsIInterfaceInfoManager,
|
||||||
nsIInterfaceInfoSuperManager)
|
nsIInterfaceInfoSuperManager)
|
||||||
|
@ -158,10 +160,6 @@ xptiInterfaceInfoManager::~xptiInterfaceInfoManager()
|
||||||
// We only do this on shutdown of the service.
|
// We only do this on shutdown of the service.
|
||||||
mWorkingSet.InvalidateInterfaceInfos();
|
mWorkingSet.InvalidateInterfaceInfos();
|
||||||
|
|
||||||
#ifdef XPTI_HAS_ZIP_SUPPORT
|
|
||||||
xptiZipLoader::Shutdown();
|
|
||||||
#endif /* XPTI_HAS_ZIP_SUPPORT */
|
|
||||||
|
|
||||||
if(mResolveLock)
|
if(mResolveLock)
|
||||||
PR_DestroyLock(mResolveLock);
|
PR_DestroyLock(mResolveLock);
|
||||||
if(mAutoRegLock)
|
if(mAutoRegLock)
|
||||||
|
@ -437,7 +435,6 @@ xptiInterfaceInfoManager::LoadFile(const xptiTypelib& aTypelibRecord,
|
||||||
|
|
||||||
if(aTypelibRecord.IsZip())
|
if(aTypelibRecord.IsZip())
|
||||||
{
|
{
|
||||||
#ifdef XPTI_HAS_ZIP_SUPPORT
|
|
||||||
zipItem = &aWorkingSet->GetZipItemAt(aTypelibRecord.GetZipItemIndex());
|
zipItem = &aWorkingSet->GetZipItemAt(aTypelibRecord.GetZipItemIndex());
|
||||||
|
|
||||||
// See the big comment below in the 'non-zip' case...
|
// See the big comment below in the 'non-zip' case...
|
||||||
|
@ -452,10 +449,26 @@ xptiInterfaceInfoManager::LoadFile(const xptiTypelib& aTypelibRecord,
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_LOAD(("# loading zip item %s::%s\n", fileRecord->GetName(), zipItem->GetName()));
|
LOG_LOAD(("# loading zip item %s::%s\n", fileRecord->GetName(), zipItem->GetName()));
|
||||||
header = xptiZipLoader::ReadXPTFileFromZip(file, zipItem->GetName(), aWorkingSet);
|
|
||||||
#else
|
nsCOMPtr<nsIXPTLoader> loader =
|
||||||
header = nsnull;
|
do_GetService(NS_ZIPLOADER_CONTRACTID);
|
||||||
#endif /* XPTI_HAS_ZIP_SUPPORT */
|
|
||||||
|
if (loader) {
|
||||||
|
nsresult rv;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIInputStream> stream;
|
||||||
|
rv = loader->LoadEntry(file, zipItem->GetName(),
|
||||||
|
getter_AddRefs(stream));
|
||||||
|
|
||||||
|
if (NS_FAILED(rv))
|
||||||
|
return PR_FALSE;
|
||||||
|
|
||||||
|
header =
|
||||||
|
xptiZipLoader::ReadXPTFileFromInputStream(stream, aWorkingSet);
|
||||||
|
} else {
|
||||||
|
header = nsnull;
|
||||||
|
NS_WARNING("Could not load XPT Zip loader");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -964,20 +977,29 @@ xptiInterfaceInfoManager::AddOnlyNewFilesFromFileList(nsISupportsArray* aSearchP
|
||||||
// This will correspond to typelibRecord above.
|
// This will correspond to typelibRecord above.
|
||||||
aWorkingSet->AppendFile(fileRecord);
|
aWorkingSet->AppendFile(fileRecord);
|
||||||
}
|
}
|
||||||
#ifdef XPTI_HAS_ZIP_SUPPORT
|
else // its another kind of archive
|
||||||
else // It is a zip file, Oh boy!
|
|
||||||
{
|
{
|
||||||
if(!xptiZipLoader::EnumerateZipEntries(file,
|
nsCOMPtr<nsIXPTLoader> loader =
|
||||||
NS_STATIC_CAST(xptiEntrySink*, this),
|
do_GetService(NS_ZIPLOADER_CONTRACTID);
|
||||||
aWorkingSet))
|
|
||||||
{
|
if (loader) {
|
||||||
return PR_FALSE;
|
nsresult rv;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIXPTLoaderSink> sink =
|
||||||
|
new xptiZipLoaderSink(this, aWorkingSet);
|
||||||
|
if (!sink)
|
||||||
|
return PR_FALSE;
|
||||||
|
|
||||||
|
rv = loader->EnumerateEntries(file, sink);
|
||||||
|
if (NS_FAILED(rv))
|
||||||
|
return PR_FALSE;
|
||||||
|
} else {
|
||||||
|
NS_WARNING("Could not load XPT Zip loader");
|
||||||
}
|
}
|
||||||
// This will correspond to typelibRecord used in
|
// This will correspond to typelibRecord used in
|
||||||
// xptiInterfaceInfoManager::FoundEntry.
|
// xptiInterfaceInfoManager::FoundEntry.
|
||||||
aWorkingSet->AppendFile(fileRecord);
|
aWorkingSet->AppendFile(fileRecord);
|
||||||
}
|
}
|
||||||
#endif /* XPTI_HAS_ZIP_SUPPORT */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return PR_TRUE;
|
return PR_TRUE;
|
||||||
|
@ -1101,30 +1123,59 @@ xptiInterfaceInfoManager::DoFullValidationMergeFromFileList(nsISupportsArray* aS
|
||||||
// This will correspond to typelibRecord above.
|
// This will correspond to typelibRecord above.
|
||||||
aWorkingSet->AppendFile(fileRecord);
|
aWorkingSet->AppendFile(fileRecord);
|
||||||
}
|
}
|
||||||
#ifdef XPTI_HAS_ZIP_SUPPORT
|
|
||||||
else // It is a zip file, Oh boy!
|
else
|
||||||
{
|
{
|
||||||
if(!xptiZipLoader::EnumerateZipEntries(file,
|
nsCOMPtr<nsIXPTLoader> loader =
|
||||||
NS_STATIC_CAST(xptiEntrySink*, this),
|
do_GetService(NS_ZIPLOADER_CONTRACTID);
|
||||||
aWorkingSet))
|
|
||||||
{
|
if (loader) {
|
||||||
return PR_FALSE;
|
nsresult rv;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIXPTLoaderSink> sink =
|
||||||
|
new xptiZipLoaderSink(this, aWorkingSet);
|
||||||
|
if (!sink)
|
||||||
|
return PR_FALSE;
|
||||||
|
|
||||||
|
rv = loader->EnumerateEntries(file, sink);
|
||||||
|
if (NS_FAILED(rv))
|
||||||
|
return PR_FALSE;
|
||||||
|
} else {
|
||||||
|
NS_WARNING("Could not load XPT Zip loader");
|
||||||
}
|
}
|
||||||
// This will correspond to typelibRecord used in
|
// This will correspond to typelibRecord used in
|
||||||
// xptiInterfaceInfoManager::FoundEntry.
|
// xptiInterfaceInfoManager::FoundEntry.
|
||||||
aWorkingSet->AppendFile(fileRecord);
|
aWorkingSet->AppendFile(fileRecord);
|
||||||
}
|
}
|
||||||
#endif /* XPTI_HAS_ZIP_SUPPORT */
|
|
||||||
}
|
}
|
||||||
return PR_TRUE;
|
return PR_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMPL_ISUPPORTS1(xptiZipLoaderSink, nsIXPTLoaderSink)
|
||||||
|
|
||||||
|
// implement nsIXPTLoader
|
||||||
|
NS_IMETHODIMP
|
||||||
|
xptiZipLoaderSink::FoundEntry(const char* entryName,
|
||||||
|
PRInt32 index,
|
||||||
|
nsIInputStream *aStream)
|
||||||
|
{
|
||||||
|
XPTHeader *header =
|
||||||
|
xptiZipLoader::ReadXPTFileFromInputStream(aStream, mWorkingSet);
|
||||||
|
if (!header)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
if (!mManager->FoundZipEntry(entryName, index, header, mWorkingSet))
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
// implement xptiEntrySink
|
// implement xptiEntrySink
|
||||||
PRBool
|
PRBool
|
||||||
xptiInterfaceInfoManager::FoundEntry(const char* entryName,
|
xptiInterfaceInfoManager::FoundZipEntry(const char* entryName,
|
||||||
int index,
|
int index,
|
||||||
XPTHeader* header,
|
XPTHeader* header,
|
||||||
xptiWorkingSet* aWorkingSet)
|
xptiWorkingSet* aWorkingSet)
|
||||||
{
|
{
|
||||||
|
|
||||||
NS_ASSERTION(entryName, "loser!");
|
NS_ASSERTION(entryName, "loser!");
|
||||||
|
|
|
@ -41,165 +41,19 @@
|
||||||
|
|
||||||
#include "xptiprivate.h"
|
#include "xptiprivate.h"
|
||||||
|
|
||||||
#ifdef XPTI_HAS_ZIP_SUPPORT
|
XPTHeader*
|
||||||
|
xptiZipLoader::ReadXPTFileFromInputStream(nsIInputStream *stream,
|
||||||
static const char gCacheContractID[] = "@mozilla.org/libjar/zip-reader-cache;1";
|
xptiWorkingSet* aWorkingSet)
|
||||||
|
|
||||||
static const PRUint32 gCacheSize = 1;
|
|
||||||
|
|
||||||
nsCOMPtr<nsIZipReaderCache> xptiZipLoader::gCache = nsnull;
|
|
||||||
|
|
||||||
// static
|
|
||||||
nsIZipReader*
|
|
||||||
xptiZipLoader::GetZipReader(nsILocalFile* file)
|
|
||||||
{
|
{
|
||||||
NS_ASSERTION(file, "bad file");
|
|
||||||
|
|
||||||
if(!gCache)
|
|
||||||
{
|
|
||||||
gCache = do_CreateInstance(gCacheContractID);
|
|
||||||
if(!gCache || NS_FAILED(gCache->Init(gCacheSize)))
|
|
||||||
return nsnull;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsIZipReader* reader = nsnull;
|
|
||||||
|
|
||||||
if(NS_FAILED(gCache->GetZip(file, &reader)))
|
|
||||||
return nsnull;
|
|
||||||
|
|
||||||
return reader;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
void
|
|
||||||
xptiZipLoader::Shutdown()
|
|
||||||
{
|
|
||||||
gCache = nsnull;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
PRBool
|
|
||||||
xptiZipLoader::EnumerateZipEntries(nsILocalFile* file,
|
|
||||||
xptiEntrySink* sink,
|
|
||||||
xptiWorkingSet* aWorkingSet)
|
|
||||||
{
|
|
||||||
NS_ASSERTION(file, "loser!");
|
|
||||||
NS_ASSERTION(sink, "loser!");
|
|
||||||
NS_ASSERTION(aWorkingSet, "loser!");
|
|
||||||
|
|
||||||
nsCOMPtr<nsIZipReader> zip = dont_AddRef(GetZipReader(file));
|
|
||||||
if(!zip)
|
|
||||||
{
|
|
||||||
// XXX We are going to say that failure to open a zip/jar is OK.
|
|
||||||
// We have at least one case where a jar file exists but is not
|
|
||||||
// available to us to read (MRJPlugin.jar on Mac - bug 109893).
|
|
||||||
// We TRUST that such files are not going to have xpt files that we
|
|
||||||
// need to see.
|
|
||||||
LOG_AUTOREG((" FAILED to open file! Skipping.\n"));
|
|
||||||
return PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsCOMPtr<nsISimpleEnumerator> entries;
|
|
||||||
if(NS_FAILED(zip->FindEntries("*.xpt", getter_AddRefs(entries))) ||
|
|
||||||
!entries)
|
|
||||||
{
|
|
||||||
// XXX We TRUST that this means there are no .xpt files.
|
|
||||||
return PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
PRBool result = PR_FALSE;
|
|
||||||
int index = 0;
|
|
||||||
PRBool hasMore;
|
|
||||||
|
|
||||||
if(NS_FAILED(entries->HasMoreElements(&hasMore)))
|
|
||||||
return PR_FALSE;
|
|
||||||
if(!hasMore)
|
|
||||||
break;
|
|
||||||
|
|
||||||
nsCOMPtr<nsISupports> sup;
|
|
||||||
if(NS_FAILED(entries->GetNext(getter_AddRefs(sup))) ||!sup)
|
|
||||||
return PR_FALSE;
|
|
||||||
|
|
||||||
nsCOMPtr<nsIZipEntry> entry = do_QueryInterface(sup);
|
|
||||||
if(!entry)
|
|
||||||
return PR_FALSE;
|
|
||||||
|
|
||||||
// we have a zip entry!
|
|
||||||
|
|
||||||
char* itemName = nsnull;
|
|
||||||
|
|
||||||
if(NS_FAILED(entry->GetName(&itemName)) || !itemName)
|
|
||||||
return PR_FALSE;
|
|
||||||
|
|
||||||
XPTHeader* header =
|
|
||||||
ReadXPTFileFromOpenZip(zip, entry, itemName, aWorkingSet);
|
|
||||||
|
|
||||||
if(header)
|
|
||||||
result = sink->FoundEntry(itemName, index++, header, aWorkingSet);
|
|
||||||
nsMemory::Free(itemName);
|
|
||||||
|
|
||||||
if(!header)
|
|
||||||
return PR_FALSE;
|
|
||||||
|
|
||||||
if(result != PR_TRUE)
|
|
||||||
return result;
|
|
||||||
} while(1);
|
|
||||||
|
|
||||||
return PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
XPTHeader*
|
|
||||||
xptiZipLoader::ReadXPTFileFromZip(nsILocalFile* file,
|
|
||||||
const char* entryName,
|
|
||||||
xptiWorkingSet* aWorkingSet)
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsIZipReader> zip = dont_AddRef(GetZipReader(file));
|
|
||||||
if(!zip)
|
|
||||||
return nsnull;
|
|
||||||
|
|
||||||
nsCOMPtr<nsIZipEntry> entry;
|
|
||||||
if(NS_FAILED(zip->GetEntry(entryName, getter_AddRefs(entry))) || !entry)
|
|
||||||
{
|
|
||||||
return nsnull;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ReadXPTFileFromOpenZip(zip, entry, entryName, aWorkingSet);
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
XPTHeader*
|
|
||||||
xptiZipLoader::ReadXPTFileFromOpenZip(nsIZipReader* zip,
|
|
||||||
nsIZipEntry* entry,
|
|
||||||
const char* entryName,
|
|
||||||
xptiWorkingSet* aWorkingSet)
|
|
||||||
{
|
|
||||||
NS_ASSERTION(zip, "loser!");
|
|
||||||
NS_ASSERTION(entry, "loser!");
|
|
||||||
NS_ASSERTION(entryName, "loser!");
|
|
||||||
|
|
||||||
XPTHeader *header = nsnull;
|
|
||||||
char *whole = nsnull;
|
|
||||||
XPTState *state = nsnull;
|
|
||||||
XPTCursor cursor;
|
XPTCursor cursor;
|
||||||
PRUint32 flen;
|
|
||||||
PRUint32 totalRead = 0;
|
PRUint32 totalRead = 0;
|
||||||
|
XPTState *state = nsnull;
|
||||||
|
XPTHeader *header = nsnull;
|
||||||
|
|
||||||
if(NS_FAILED(entry->GetRealSize(&flen)) || !flen)
|
PRUint32 flen;
|
||||||
{
|
stream->Available(&flen);
|
||||||
return nsnull;
|
|
||||||
}
|
char *whole = new char[flen];
|
||||||
|
|
||||||
nsCOMPtr<nsIInputStream> stream;
|
|
||||||
if(NS_FAILED(zip->GetInputStream(entryName, getter_AddRefs(stream))) ||
|
|
||||||
!stream)
|
|
||||||
{
|
|
||||||
return nsnull;
|
|
||||||
}
|
|
||||||
|
|
||||||
whole = new char[flen];
|
|
||||||
if (!whole)
|
if (!whole)
|
||||||
{
|
{
|
||||||
return nsnull;
|
return nsnull;
|
||||||
|
@ -257,4 +111,3 @@ xptiZipLoader::ReadXPTFileFromOpenZip(nsIZipReader* zip,
|
||||||
return header;
|
return header;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* XPTI_HAS_ZIP_SUPPORT */
|
|
||||||
|
|
|
@ -42,10 +42,6 @@
|
||||||
#ifndef xptiprivate_h___
|
#ifndef xptiprivate_h___
|
||||||
#define xptiprivate_h___
|
#define xptiprivate_h___
|
||||||
|
|
||||||
#ifndef XPCOM_STANDALONE
|
|
||||||
#define XPTI_HAS_ZIP_SUPPORT 1
|
|
||||||
#endif /* XPCOM_STANDALONE */
|
|
||||||
|
|
||||||
#include "nscore.h"
|
#include "nscore.h"
|
||||||
#include "nsISupports.h"
|
#include "nsISupports.h"
|
||||||
|
|
||||||
|
@ -57,6 +53,7 @@
|
||||||
#include "nsIInterfaceInfo.h"
|
#include "nsIInterfaceInfo.h"
|
||||||
#include "nsIInterfaceInfoManager.h"
|
#include "nsIInterfaceInfoManager.h"
|
||||||
#include "xptinfo.h"
|
#include "xptinfo.h"
|
||||||
|
#include "nsIXPTLoader.h"
|
||||||
|
|
||||||
#include "nsIServiceManager.h"
|
#include "nsIServiceManager.h"
|
||||||
#include "nsIFile.h"
|
#include "nsIFile.h"
|
||||||
|
@ -77,10 +74,6 @@
|
||||||
|
|
||||||
#include "nsXPIDLString.h"
|
#include "nsXPIDLString.h"
|
||||||
|
|
||||||
#ifdef XPTI_HAS_ZIP_SUPPORT
|
|
||||||
#include "nsIZipReader.h"
|
|
||||||
#endif /* XPTI_HAS_ZIP_SUPPORT */
|
|
||||||
|
|
||||||
#include "nsIInputStream.h"
|
#include "nsIInputStream.h"
|
||||||
|
|
||||||
#include "nsAutoLock.h"
|
#include "nsAutoLock.h"
|
||||||
|
@ -788,51 +781,35 @@ private:
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
class xptiEntrySink
|
class xptiZipLoaderSink : public nsIXPTLoaderSink
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
xptiZipLoaderSink(xptiInterfaceInfoManager* aMgr,
|
||||||
|
xptiWorkingSet* aWorkingSet) :
|
||||||
|
mManager(aMgr),
|
||||||
|
mWorkingSet(aWorkingSet) { NS_INIT_REFCNT(); }
|
||||||
|
virtual ~xptiZipLoaderSink() {};
|
||||||
|
|
||||||
|
NS_DECL_ISUPPORTS
|
||||||
|
NS_DECL_NSIXPTLOADERSINK
|
||||||
|
|
||||||
|
private:
|
||||||
|
xptiInterfaceInfoManager* mManager;
|
||||||
|
xptiWorkingSet* mWorkingSet;
|
||||||
|
|
||||||
virtual PRBool
|
|
||||||
FoundEntry(const char* entryName,
|
|
||||||
int index,
|
|
||||||
XPTHeader* header,
|
|
||||||
xptiWorkingSet* aWorkingSet) = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef XPTI_HAS_ZIP_SUPPORT
|
|
||||||
|
|
||||||
class xptiZipLoader
|
class xptiZipLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
xptiZipLoader(); // not implemented
|
xptiZipLoader(); // not implemented
|
||||||
|
|
||||||
static PRBool
|
static XPTHeader*
|
||||||
EnumerateZipEntries(nsILocalFile* file,
|
ReadXPTFileFromInputStream(nsIInputStream *stream,
|
||||||
xptiEntrySink* sink,
|
xptiWorkingSet* aWorkingSet);
|
||||||
xptiWorkingSet* aWorkingSet);
|
|
||||||
|
|
||||||
static XPTHeader*
|
|
||||||
ReadXPTFileFromZip(nsILocalFile* file,
|
|
||||||
const char* entryName,
|
|
||||||
xptiWorkingSet* aWorkingSet);
|
|
||||||
|
|
||||||
static void
|
|
||||||
Shutdown();
|
|
||||||
|
|
||||||
private:
|
|
||||||
static XPTHeader*
|
|
||||||
ReadXPTFileFromOpenZip(nsIZipReader* zip,
|
|
||||||
nsIZipEntry* entry,
|
|
||||||
const char* entryName,
|
|
||||||
xptiWorkingSet* aWorkingSet);
|
|
||||||
|
|
||||||
static nsIZipReader*
|
|
||||||
GetZipReader(nsILocalFile* file);
|
|
||||||
|
|
||||||
static nsCOMPtr<nsIZipReaderCache> gCache;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* XPTI_HAS_ZIP_SUPPORT */
|
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
@ -880,19 +857,18 @@ private:
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
class xptiInterfaceInfoManager
|
class xptiInterfaceInfoManager
|
||||||
: public nsIInterfaceInfoSuperManager,
|
: public nsIInterfaceInfoSuperManager
|
||||||
public xptiEntrySink
|
|
||||||
{
|
{
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS
|
||||||
NS_DECL_NSIINTERFACEINFOMANAGER
|
NS_DECL_NSIINTERFACEINFOMANAGER
|
||||||
NS_DECL_NSIINTERFACEINFOSUPERMANAGER
|
NS_DECL_NSIINTERFACEINFOSUPERMANAGER
|
||||||
|
|
||||||
// implement xptiEntrySink
|
// helper
|
||||||
PRBool
|
PRBool
|
||||||
FoundEntry(const char* entryName,
|
FoundZipEntry(const char* entryName,
|
||||||
int index,
|
int index,
|
||||||
XPTHeader* header,
|
XPTHeader* header,
|
||||||
xptiWorkingSet* aWorkingSet);
|
xptiWorkingSet* aWorkingSet);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~xptiInterfaceInfoManager();
|
virtual ~xptiInterfaceInfoManager();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче