summaryrefslogtreecommitdiff
path: root/dom/storage
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2022-02-09 18:23:27 +0000
committerMoonchild <moonchild@palemoon.org>2022-02-09 18:23:27 +0000
commit2f8806b5cfdab837b4645011c97241e64b18c3d3 (patch)
tree77f6a2357610c1426de01a0b25042556e5fb7bd2 /dom/storage
parent71e77f8ee41454f7caa35d900f8805268ca485fd (diff)
downloadaura-central-2f8806b5cfdab837b4645011c97241e64b18c3d3.tar.gz
[DOM] Clear sinks and block further use after storage observer shutdown.
Diffstat (limited to 'dom/storage')
-rw-r--r--dom/storage/DOMStorageIPC.cpp6
-rw-r--r--dom/storage/DOMStorageObserver.cpp6
2 files changed, 10 insertions, 2 deletions
diff --git a/dom/storage/DOMStorageIPC.cpp b/dom/storage/DOMStorageIPC.cpp
index 442941a7a..1cf346345 100644
--- a/dom/storage/DOMStorageIPC.cpp
+++ b/dom/storage/DOMStorageIPC.cpp
@@ -213,8 +213,10 @@ DOMStorageDBChild::RecvObserve(const nsCString& aTopic,
const nsString& aOriginAttributesPattern,
const nsCString& aOriginScope)
{
- DOMStorageObserver::Self()->Notify(
- aTopic.get(), aOriginAttributesPattern, aOriginScope);
+ DOMStorageObserver* observer = DOMStorageObserver::Self();
+ if (observer) {
+ observer->Notify(aTopic.get(), aOriginAttributesPattern, aOriginScope);
+ }
return true;
}
diff --git a/dom/storage/DOMStorageObserver.cpp b/dom/storage/DOMStorageObserver.cpp
index 295cee4ab..9de18738d 100644
--- a/dom/storage/DOMStorageObserver.cpp
+++ b/dom/storage/DOMStorageObserver.cpp
@@ -90,6 +90,8 @@ DOMStorageObserver::Shutdown()
if (!sSelf) {
return NS_ERROR_NOT_INITIALIZED;
}
+
+ sSelf->mSinks.Clear();
NS_RELEASE(sSelf);
return NS_OK;
@@ -123,6 +125,10 @@ DOMStorageObserver::Observe(nsISupports* aSubject,
const char* aTopic,
const char16_t* aData)
{
+ if (NS_WARN_IF(!sSelf)) { // Shutdown took place, so bail.
+ return NS_OK;
+ }
+
nsresult rv;
// Start the thread that opens the database.