Bug 1896709 - Part 12: Add SharedScriptCache field to ScriptLoader. r=nbp

Differential Revision: https://phabricator.services.mozilla.com/D215881
This commit is contained in:
Tooru Fujisawa
2024-07-18 21:58:14 +00:00
parent c16e6f797c
commit 85f4805168
3 changed files with 72 additions and 8 deletions

View File

@@ -9,6 +9,7 @@
#include "ScriptTrace.h"
#include "ModuleLoader.h"
#include "nsGenericHTMLElement.h"
#include "SharedScriptCache.h"
#include "mozilla/Assertions.h"
#include "mozilla/dom/FetchPriority.h"
@@ -165,13 +166,28 @@ inline void ImplCycleCollectionTraverse(
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ScriptLoader)
NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTION(ScriptLoader, mNonAsyncExternalScriptInsertedRequests,
mLoadingAsyncRequests, mLoadedAsyncRequests,
mOffThreadCompilingRequests, mDeferRequests,
mXSLTRequests, mParserBlockingRequest,
mBytecodeEncodingQueue, mPreloads,
mPendingChildLoaders, mModuleLoader,
mWebExtModuleLoaders, mShadowRealmModuleLoaders)
NS_IMPL_CYCLE_COLLECTION_CLASS(ScriptLoader)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ScriptLoader)
if (tmp->mDocument) {
tmp->DropDocumentReference();
}
NS_IMPL_CYCLE_COLLECTION_UNLINK(
mNonAsyncExternalScriptInsertedRequests, mLoadingAsyncRequests,
mLoadedAsyncRequests, mOffThreadCompilingRequests, mDeferRequests,
mXSLTRequests, mParserBlockingRequest, mBytecodeEncodingQueue, mPreloads,
mPendingChildLoaders, mModuleLoader, mWebExtModuleLoaders,
mShadowRealmModuleLoaders)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(ScriptLoader)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(
mNonAsyncExternalScriptInsertedRequests, mLoadingAsyncRequests,
mLoadedAsyncRequests, mOffThreadCompilingRequests, mDeferRequests,
mXSLTRequests, mParserBlockingRequest, mBytecodeEncodingQueue, mPreloads,
mPendingChildLoaders, mModuleLoader, mWebExtModuleLoaders,
mShadowRealmModuleLoaders)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTING_ADDREF(ScriptLoader)
NS_IMPL_CYCLE_COLLECTING_RELEASE(ScriptLoader)
@@ -273,6 +289,29 @@ void ScriptLoader::SetGlobalObject(nsIGlobalObject* aGlobalObject) {
mModuleLoader);
}
void ScriptLoader::DropDocumentReference() {
if (mDocument && mCache) {
DeregisterFromCache();
}
mDocument = nullptr;
}
void ScriptLoader::RegisterToCache() {
if (mCache) {
MOZ_ASSERT(mDocument);
mCache->RegisterLoader(*this);
}
}
void ScriptLoader::DeregisterFromCache() {
if (mCache) {
MOZ_ASSERT(mDocument);
mCache->CancelLoadsForLoader(*this);
mCache->UnregisterLoader(*this);
}
}
nsIPrincipal* ScriptLoader::LoaderPrincipal() const {
return mDocument->NodePrincipal();
}