1
- const portsArr = [ ] ;
2
1
// store ports in an array
3
- const tabsObj = {
4
- sourceTab : null ,
5
- } ;
2
+ const portsArr = [ ] ;
3
+ const reloaded = { } ;
4
+ const firstSnapshotReceived = { } ;
5
+ const tabsObj = { } ;
6
6
7
7
function createTabObj ( title ) {
8
8
return {
@@ -13,7 +13,6 @@ function createTabObj(title) {
13
13
locked : false ,
14
14
paused : false ,
15
15
} ,
16
- firstSnapshot : true ,
17
16
} ;
18
17
}
19
18
@@ -86,7 +85,7 @@ chrome.runtime.onMessage.addListener((request, sender) => {
86
85
// Filter out tabs that don't have react-time-travel
87
86
if ( action === 'tabReload' || action === 'recordSnap' ) {
88
87
isReactTimeTravel = true ;
89
- }
88
+ } else return ;
90
89
91
90
// everytime we get a new tabid, add it to the object
92
91
if ( isReactTimeTravel && ! ( tabId in tabsObj ) ) {
@@ -96,17 +95,33 @@ chrome.runtime.onMessage.addListener((request, sender) => {
96
95
const { persist } = tabsObj [ tabId ] . mode ;
97
96
98
97
switch ( action ) {
99
- case 'tabReload' :
100
- tabsObj [ tabId ] . firstSnapshot = true ;
98
+ case 'tabReload' : {
101
99
tabsObj [ tabId ] . mode . locked = false ;
102
100
tabsObj [ tabId ] . mode . paused = false ;
103
- if ( ! persist ) tabsObj [ tabId ] . snapshots = [ ] ;
101
+ // dont remove snapshots if persisting
102
+ if ( ! persist ) {
103
+ tabsObj [ tabId ] . snapshots . splice ( 1 ) ;
104
+
105
+ // send a message to devtools
106
+ portsArr . forEach ( bg => bg . postMessage ( {
107
+ action : 'initialConnectSnapshots' ,
108
+ payload : tabsObj ,
109
+ } ) ) ;
110
+ }
111
+
112
+ reloaded [ tabId ] = true ;
113
+
104
114
break ;
105
- case 'recordSnap' :
106
- if ( tabsObj [ tabId ] . firstSnapshot ) {
107
- tabsObj [ tabId ] . firstSnapshot = false ;
108
- // don't add anything to snapshot storage if mode is persisting for the initial snapshot
109
- if ( ! persist ) tabsObj [ tabId ] . snapshots . push ( request . payload ) ;
115
+ }
116
+ case 'recordSnap' : {
117
+ const sourceTab = tabId ;
118
+
119
+ // first snapshot received from tab
120
+ if ( ! firstSnapshotReceived [ tabId ] ) {
121
+ firstSnapshotReceived [ tabId ] = true ;
122
+ reloaded [ tabId ] = false ;
123
+
124
+ tabsObj [ tabId ] . snapshots . push ( request . payload ) ;
110
125
if ( portsArr . length > 0 ) {
111
126
portsArr . forEach ( bg => bg . postMessage ( {
112
127
action : 'initialConnectSnapshots' ,
@@ -116,17 +131,21 @@ chrome.runtime.onMessage.addListener((request, sender) => {
116
131
break ;
117
132
}
118
133
119
- tabsObj [ tabId ] . snapshots . push ( request . payload ) ;
120
- tabsObj . sourceTab = tabId ;
134
+ // don't add anything to snapshot storage if tab is reloaded for the initial snapshot
135
+ if ( reloaded [ tabId ] ) {
136
+ reloaded [ tabId ] = false ;
137
+ } else tabsObj [ tabId ] . snapshots . push ( request . payload ) ;
121
138
122
139
// send message to devtools
123
140
if ( portsArr . length > 0 ) {
124
141
portsArr . forEach ( bg => bg . postMessage ( {
125
142
action : 'sendSnapshots' ,
126
143
payload : tabsObj ,
144
+ sourceTab,
127
145
} ) ) ;
128
146
}
129
147
break ;
148
+ }
130
149
default :
131
150
break ;
132
151
}
@@ -144,4 +163,6 @@ chrome.tabs.onRemoved.addListener(tabId => {
144
163
145
164
// delete the tab from the tabsObj
146
165
delete tabsObj [ tabId ] ;
166
+ delete reloaded [ tabId ] ;
167
+ delete firstSnapshotReceived [ tabId ] ;
147
168
} ) ;
0 commit comments