зеркало из https://github.com/mozilla/gecko-dev.git
0cb68caed4
When we navigate in history to the same entry that we're current at then we actually do a reload. The problem is in the way we detect whether to do a reload in the parent process. If a page does a back and a forward one after the other in a script, then the parent will calculate the index for the back and tell the child to load the entry at that index. While the child is processing the load of that entry, the BC in the parent process still has the same entry as its active entry (until the child commits the load of the entry over IPC). The parent then processes the forward, calculates the index for the forward and finds the entry at that index. This is the same entry that we were at before doing anything, and so the same entry as the active entry in the BC in the parent process. We used to compare the entry that we're going to load with the active entry in the BC to determine whether we're doing a reload, and so in this situation we would assume the forward navigation was actually doing a reload. The child would reload the page, and we'd run the script again and we'd end up in a reload loop. Comparing the offset with 0 to determine whether we're doing a reload fixes this issue. Differential Revision: https://phabricator.services.mozilla.com/D126585 |
||
---|---|---|
.. | ||
ChildSHistory.cpp | ||
ChildSHistory.h | ||
SessionHistoryEntry.cpp | ||
SessionHistoryEntry.h | ||
moz.build | ||
nsIBFCacheEntry.idl | ||
nsISHEntry.idl | ||
nsISHistory.idl | ||
nsISHistoryListener.idl | ||
nsSHEntry.cpp | ||
nsSHEntry.h | ||
nsSHEntryShared.cpp | ||
nsSHEntryShared.h | ||
nsSHistory.cpp | ||
nsSHistory.h |