☠☠ backed out by 986f641d87e4 ☠ ☠ | |
author | Tim Taubert <ttaubert@mozilla.com> |
Sat, 23 May 2015 15:20:51 +0200 | |
changeset 248028 | 3a4faf863320f5feeaab2a97f5139a5700f63d9e |
parent 248027 | 9b3205f611cfdcac7c3aa2dbfe49e7305de53c91 |
child 248029 | b7ed44b4595ff0b35f788af143ab35b9835bc99f |
push id | 60888 |
push user | kwierso@gmail.com |
push date | Thu, 11 Jun 2015 01:38:38 +0000 |
treeherder | mozilla-inbound@39e638ed06bf [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | billm |
bugs | 1167508 |
milestone | 41.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/browser/components/sessionstore/SessionStore.jsm +++ b/browser/components/sessionstore/SessionStore.jsm @@ -821,16 +821,17 @@ let SessionStoreInternal = { this.saveStateDelayed(win); break; case "oop-browser-crashed": this.onBrowserCrashed(win, target); break; case "XULFrameLoaderCreated": if (target.tagName == "browser" && target.frameLoader && target.permanentKey) { this._lastKnownFrameLoader.set(target.permanentKey, target.frameLoader); + this.resetEpoch(target); } break; default: throw new Error(`unhandled event ${aEvent.type}?`); } this._clearRestoringWindows(); }, @@ -3671,16 +3672,24 @@ let SessionStoreInternal = { * compare the epoch received with the message to the <browser> element's * epoch. This function does that, and returns true if |epoch| is up-to-date * with respect to |browser|. */ isCurrentEpoch: function (browser, epoch) { return this.getCurrentEpoch(browser) == epoch; }, + /** + * Resets the epoch for a given <browser>. We need to this every time we + * receive a hint that a new docShell has been loaded into the browser as + * the frame script starts out with epoch=0. + */ + resetEpoch(browser) { + this._browserEpochs.delete(browser.permanentKey); + } }; /** * Priority queue that keeps track of a list of tabs to restore and returns * the tab we should restore next, based on priority rules. We decide between * pinned, visible and hidden tabs in that and FIFO order. Hidden tabs are only * restored with restore_hidden_tabs=true. */