diff options
author | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-10-21 22:29:42 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-10-21 22:29:42 +0200 |
commit | a0ab17b2103aecfaafdbe0c18a98e358c990ad8d (patch) | |
tree | 6077902e86e22ec623abccb9f65eb5dcf27e1a1a | |
parent | c4c4189933f8d610e501cfc8c86dfbe52c4c160d (diff) | |
download | UXP-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
-rw-r--r-- | dom/base/nsGlobalWindow.cpp | 14 |
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(); |