diff options
author | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-10-21 22:29:42 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-10-23 13:24:20 +0200 |
commit | 0223fb620b230608a3416095e7ef4f5d7fb2f4be (patch) | |
tree | a0ae8631ce116dff7ed08cf6455d34f3a121f637 | |
parent | 0cf9606869ccdb0f1680de963c8deb1cb75a4176 (diff) | |
download | uxp-0223fb620b230608a3416095e7ef4f5d7fb2f4be.tar.gz |
Issue mcp-graveyard/UXP#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 afaa24f09f..ec546f0683 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(); |