Fix for bug 7515 (load stylesheets inserted dynamically through the DOM). r=heikki, harishd. sr=jst.

git-svn-id: svn://10.0.0.236/trunk@95505 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
peterv%netscape.com
2001-05-19 02:59:15 +00:00
parent 58b9b2c478
commit f74c7ea12a
23 changed files with 886 additions and 547 deletions

View File

@@ -318,6 +318,12 @@ public:
// then use that
// - othersise set the default charset
// stop loading all sheets
NS_IMETHOD Stop(void);
// stop loading one sheet
NS_IMETHOD StopLoadingSheet(nsIURI* aURL);
#ifdef NS_DEBUG
PRBool mSyncCallback;
#endif
@@ -468,7 +474,9 @@ static PRBool PR_CALLBACK DeleteSheetMap(nsHashKey* aKey, void* aData, void* aCl
CSSLoaderImpl::~CSSLoaderImpl(void)
{
NS_ASSERTION(0 == mLoadingSheets.Count(), "destructing loader while sheets loading");
if (mLoadingSheets.Count() > 0) {
Stop();
}
NS_IF_RELEASE(mParsers);
mLoadedSheets.Enumerate(ReleaseSheet);
mLoadingSheets.Enumerate(DeleteHashLoadData);
@@ -1651,3 +1659,39 @@ nsresult CSSLoaderImpl::SetCharset(/*in*/ const nsString &aHTTPHeader,
}
return rv;
}
static PRBool PR_CALLBACK StopLoadingSheetCallback(nsHashKey* aKey, void* aData, void* aClosure)
{
NS_ENSURE_TRUE(aData, NS_ERROR_NULL_POINTER);
SheetLoadData* data = (SheetLoadData*)aData;
NS_ENSURE_TRUE(data->mLoader, NS_ERROR_NULL_POINTER);
NS_ENSURE_TRUE(data->mURL, NS_ERROR_NULL_POINTER);
data->mLoader->StopLoadingSheet(data->mURL);
return PR_TRUE;
}
NS_IMETHODIMP
CSSLoaderImpl::Stop()
{
if (mLoadingSheets.Count() > 0) {
mLoadingSheets.Enumerate(StopLoadingSheetCallback);
}
return NS_OK;
}
NS_IMETHODIMP
CSSLoaderImpl::StopLoadingSheet(nsIURI* aURL)
{
NS_ENSURE_TRUE(aURL, NS_ERROR_NULL_POINTER);
if (mLoadingSheets.Count() > 0) {
URLKey key(aURL);
SheetLoadData* loadData = (SheetLoadData*)mLoadingSheets.Get(&key);
if (loadData) {
Cleanup(key, loadData);
}
}
return NS_OK;
}