diff --git a/app/src/common/shared/org/mozilla/vrbrowser/browser/engine/Session.java b/app/src/common/shared/org/mozilla/vrbrowser/browser/engine/Session.java index 6b9c869ed..1f702e1bc 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/browser/engine/Session.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/browser/engine/Session.java @@ -91,6 +91,7 @@ public class Session implements ContentBlocking.Delegate, GeckoSession.Navigatio private transient byte[] mPrivatePage; private transient boolean mFirstContentfulPaint; private transient long mKeepAlive; + private transient boolean mSessionRemoved; public interface BitmapChangedListener { void onBitmapChanged(Session aSession, Bitmap aBitmap); @@ -159,9 +160,6 @@ private void initialize() { protected void shutdown() { if (mState.mSession != null) { closeSession(mState); - mSessionChangeListeners.forEach(listener -> { - listener.onSessionRemoved(mState.mId); - }); mState.mSession = null; } @@ -172,6 +170,13 @@ protected void shutdown() { } } + if (!mSessionRemoved) { + mSessionChangeListeners.forEach(listener -> { + listener.onSessionRemoved(mState.mId); + }); + mSessionRemoved = true; + } + mQueuedCalls.clear(); mNavigationListeners.clear(); mProgressListeners.clear(); @@ -467,8 +472,9 @@ private void restore() { // We call restore when a session is first activated and when it's recreated. // We only need to notify of the session creation if it's not a recreation. - if (mState.mSessionState == null) { + if (mSessionRemoved) { mSessionChangeListeners.forEach(listener -> listener.onSessionAdded(this)); + mSessionRemoved = false; } openSession();