diff --git a/dom/base/nsHostObjectProtocolHandler.cpp b/dom/base/nsHostObjectProtocolHandler.cpp index bfa50a16682e..022be63fc35b 100644 --- a/dom/base/nsHostObjectProtocolHandler.cpp +++ b/dom/base/nsHostObjectProtocolHandler.cpp @@ -498,6 +498,20 @@ nsHostObjectProtocolHandler::RemoveDataEntry(const nsACString& aUri, } } +void +nsHostObjectProtocolHandler::RemoveDataEntries() +{ + MOZ_ASSERT(XRE_IsContentProcess()); + + if (!gDataTable) { + return; + } + + gDataTable->Clear(); + delete gDataTable; + gDataTable = nullptr; +} + nsresult nsHostObjectProtocolHandler::GenerateURIString(const nsACString &aScheme, nsIPrincipal* aPrincipal, diff --git a/dom/base/nsHostObjectProtocolHandler.h b/dom/base/nsHostObjectProtocolHandler.h index 970ed031cf5c..fc1f0e866b5c 100644 --- a/dom/base/nsHostObjectProtocolHandler.h +++ b/dom/base/nsHostObjectProtocolHandler.h @@ -60,6 +60,10 @@ public: nsACString& aUri); static void RemoveDataEntry(const nsACString& aUri, bool aBroadcastToOTherProcesses = true); + + // This is for IPC only. + static void RemoveDataEntries(); + static nsIPrincipal* GetDataEntryPrincipal(const nsACString& aUri); static void Traverse(const nsACString& aUri, nsCycleCollectionTraversalCallback& aCallback); diff --git a/dom/ipc/ContentChild.cpp b/dom/ipc/ContentChild.cpp index 7bd21115a913..dca457f9d6c1 100644 --- a/dom/ipc/ContentChild.cpp +++ b/dom/ipc/ContentChild.cpp @@ -2243,6 +2243,8 @@ ContentChild::ActorDestroy(ActorDestroyReason why) sFirstIdleTask->Cancel(); } + nsHostObjectProtocolHandler::RemoveDataEntries(); + mAlertObservers.Clear(); mIdleObservers.Clear();