summaryrefslogtreecommitdiffstats
path: root/dom/base
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@wolfbeast.com>2019-10-21 22:29:42 +0200
committerwolfbeast <mcwerewolf@wolfbeast.com>2019-10-21 22:29:42 +0200
commita0ab17b2103aecfaafdbe0c18a98e358c990ad8d (patch)
tree6077902e86e22ec623abccb9f65eb5dcf27e1a1a /dom/base
parentc4c4189933f8d610e501cfc8c86dfbe52c4c160d (diff)
downloadUXP-a0ab17b2103aecfaafdbe0c18a98e358c990ad8d.tar
UXP-a0ab17b2103aecfaafdbe0c18a98e358c990ad8d.tar.gz
UXP-a0ab17b2103aecfaafdbe0c18a98e358c990ad8d.tar.lz
UXP-a0ab17b2103aecfaafdbe0c18a98e358c990ad8d.tar.xz
UXP-a0ab17b2103aecfaafdbe0c18a98e358c990ad8d.zip
Issue #1253 - Reset performance object on navigation
This also addresses clearing of document dependent JS slots which might get out of sync with innerWindow navigation; relevant comments added. This resolves #1253
Diffstat (limited to 'dom/base')
-rw-r--r--dom/base/nsGlobalWindow.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp
index afaa24f09..ec546f068 100644
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -3224,6 +3224,12 @@ nsGlobalWindow::SetNewDocument(nsIDocument* aDocument,
newInnerWindow->mLocalStorage = nullptr;
newInnerWindow->mSessionStorage = nullptr;
+ newInnerWindow->mPerformance = nullptr;
+
+ // This must be called after nulling the internal objects because
+ // we might recreate them here by calling the getter methods, and
+ // store them into the JS slots. If we null them after, the slot
+ // values and the objects will be out of sync.
newInnerWindow->ClearDocumentDependentSlots(cx);
}
} else {
@@ -3364,10 +3370,16 @@ nsGlobalWindow::InnerSetNewDocument(JSContext* aCx, nsIDocument* aDocument)
}
mDoc = aDocument;
- ClearDocumentDependentSlots(aCx);
mFocusedNode = nullptr;
mLocalStorage = nullptr;
mSessionStorage = nullptr;
+ mPerformance = nullptr;
+
+ // This must be called after nulling the internal objects because we might
+ // recreate them here by calling the getter methods, and store them into the JS
+ // slots. If we null them after, the slot values and the objects will be
+ // out of sync.
+ ClearDocumentDependentSlots(aCx);
#ifdef DEBUG
mLastOpenedURI = aDocument->GetDocumentURI();