@@ -91,6 +91,7 @@ public class Session implements ContentBlocking.Delegate, GeckoSession.Navigatio
9191 private transient byte [] mPrivatePage ;
9292 private transient boolean mFirstContentfulPaint ;
9393 private transient long mKeepAlive ;
94+ private transient boolean mSessionRemoved ;
9495
9596 public interface BitmapChangedListener {
9697 void onBitmapChanged (Session aSession , Bitmap aBitmap );
@@ -159,9 +160,6 @@ private void initialize() {
159160 protected void shutdown () {
160161 if (mState .mSession != null ) {
161162 closeSession (mState );
162- mSessionChangeListeners .forEach (listener -> {
163- listener .onSessionRemoved (mState .mId );
164- });
165163 mState .mSession = null ;
166164 }
167165
@@ -172,6 +170,13 @@ protected void shutdown() {
172170 }
173171 }
174172
173+ if (!mSessionRemoved ) {
174+ mSessionChangeListeners .forEach (listener -> {
175+ listener .onSessionRemoved (mState .mId );
176+ });
177+ mSessionRemoved = true ;
178+ }
179+
175180 mQueuedCalls .clear ();
176181 mNavigationListeners .clear ();
177182 mProgressListeners .clear ();
@@ -467,8 +472,9 @@ private void restore() {
467472
468473 // We call restore when a session is first activated and when it's recreated.
469474 // We only need to notify of the session creation if it's not a recreation.
470- if (mState . mSessionState == null ) {
475+ if (mSessionRemoved ) {
471476 mSessionChangeListeners .forEach (listener -> listener .onSessionAdded (this ));
477+ mSessionRemoved = false ;
472478 }
473479
474480 openSession ();
0 commit comments