Skip to content

Commit 961f20b

Browse files
committed
fix: cache network requests before enable
1 parent bf61c32 commit 961f20b

File tree

3 files changed

+51
-31
lines changed

3 files changed

+51
-31
lines changed

devtools/target.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@
8686
}, 1000)
8787
</script>
8888
<script>
89+
function testFetch() {
90+
fetch('/index.js')
91+
}
8992
function testWs() {
9093
const text = 'This is the text used for testing!'
9194

@@ -97,7 +100,8 @@
97100
ws.send(enc.encode(text))
98101
}
99102
}
100-
setTimeout(() => testWs(), 5000)
103+
testFetch()
104+
testWs()
101105
</script>
102106
<script>
103107
// https://gist.github.com/enjalot/6472041

src/domains/Network.ts

Lines changed: 45 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import trim from 'licia/trim'
22
import each from 'licia/each'
33
import decodeUriComponent from 'licia/decodeUriComponent'
44
import rmCookie from 'licia/rmCookie'
5-
import once from 'licia/once'
65
import isNative from 'licia/isNative'
76
import contain from 'licia/contain'
87
import now from 'licia/now'
98
import isStr from 'licia/isStr'
109
import isBlob from 'licia/isBlob'
1110
import isUndef from 'licia/isUndef'
11+
import types from 'licia/types'
1212
import convertBin from 'licia/convertBin'
1313
import { XhrRequest, FetchRequest } from '../lib/request'
1414
import connector from '../lib/connector'
@@ -41,11 +41,22 @@ export function getCookies(): Network.GetCookiesResponse {
4141

4242
const resTxtMap = new Map()
4343

44-
export const enable = once(function () {
45-
enableXhr()
46-
enableFetch()
47-
enableWebSocket()
48-
})
44+
let isEnable = false
45+
46+
export const enable = function () {
47+
isEnable = true
48+
each(triggers, trigger => trigger())
49+
triggers = []
50+
}
51+
52+
export function getResponseBody(
53+
params: Network.GetResponseBodyRequest
54+
): Network.GetResponseBodyResponse {
55+
return {
56+
base64Encoded: false,
57+
body: resTxtMap.get(params.requestId),
58+
}
59+
}
4960

5061
function enableXhr() {
5162
const winXhrProto = window.XMLHttpRequest.prototype
@@ -77,22 +88,22 @@ function enableXhr() {
7788
request.postData = data.data
7889
}
7990

80-
connector.trigger('Network.requestWillBeSent', {
91+
trigger('Network.requestWillBeSent', {
8192
requestId: id,
8293
type: 'XHR',
8394
request,
8495
timestamp: data.time / 1000,
8596
})
8697
})
8798
req.on('headersReceived', (id: string, data: any) => {
88-
connector.trigger('Network.responseReceivedExtraInfo', {
99+
trigger('Network.responseReceivedExtraInfo', {
89100
requestId: id,
90101
blockedCookies: [],
91102
headers: data.resHeaders,
92103
})
93104
})
94105
req.on('done', (id: string, data: any) => {
95-
connector.trigger('Network.responseReceived', {
106+
trigger('Network.responseReceived', {
96107
requestId: id,
97108
type: 'XHR',
98109
response: {
@@ -101,7 +112,7 @@ function enableXhr() {
101112
timestamp: data.time / 1000,
102113
})
103114
resTxtMap.set(id, data.resTxt)
104-
connector.trigger('Network.loadingFinished', {
115+
trigger('Network.loadingFinished', {
105116
requestId: id,
106117
encodedDataLength: data.size,
107118
timestamp: data.time / 1000,
@@ -168,15 +179,15 @@ function enableFetch() {
168179
request.postData = data.data
169180
}
170181

171-
connector.trigger('Network.requestWillBeSent', {
182+
trigger('Network.requestWillBeSent', {
172183
requestId: id,
173184
type: 'Fetch',
174185
request,
175186
timestamp: data.time / 1000,
176187
})
177188
})
178189
req.on('done', (id, data) => {
179-
connector.trigger('Network.responseReceived', {
190+
trigger('Network.responseReceived', {
180191
requestId: id,
181192
type: 'Fetch',
182193
response: {
@@ -186,7 +197,7 @@ function enableFetch() {
186197
timestamp: data.time / 1000,
187198
})
188199
resTxtMap.set(id, data.resTxt)
189-
connector.trigger('Network.loadingFinished', {
200+
trigger('Network.loadingFinished', {
190201
requestId: id,
191202
encodedDataLength: data.size,
192203
timestamp: data.time / 1000,
@@ -206,20 +217,20 @@ function enableWebSocket() {
206217
const ws = new origWebSocket(url, protocols)
207218
const requestId = createId()
208219

209-
connector.trigger('Network.webSocketCreated', {
220+
trigger('Network.webSocketCreated', {
210221
requestId,
211222
url,
212223
})
213224

214225
ws.addEventListener('open', function () {
215-
connector.trigger('Network.webSocketWillSendHandshakeRequest', {
226+
trigger('Network.webSocketWillSendHandshakeRequest', {
216227
requestId,
217228
timestamp: now() / 1000,
218229
request: {
219230
headers: {},
220231
},
221232
})
222-
connector.trigger('Network.webSocketHandshakeResponseReceived', {
233+
trigger('Network.webSocketHandshakeResponseReceived', {
223234
requestId,
224235
timeStamp: now() / 1000,
225236
response: {
@@ -244,7 +255,7 @@ function enableWebSocket() {
244255
payloadData = convertBin(payloadData, 'base64')
245256
}
246257

247-
connector.trigger('Network.webSocketFrameReceived', {
258+
trigger('Network.webSocketFrameReceived', {
248259
requestId,
249260
timestamp: now() / 1000,
250261
response: {
@@ -274,7 +285,7 @@ function enableWebSocket() {
274285
payloadData = convertBin(data, 'base64')
275286
}
276287

277-
connector.trigger('Network.webSocketFrameSent', {
288+
trigger('Network.webSocketFrameSent', {
278289
requestId,
279290
timestamp: now() / 1000,
280291
response: {
@@ -285,14 +296,14 @@ function enableWebSocket() {
285296
}
286297

287298
ws.addEventListener('close', function () {
288-
connector.trigger('Network.webSocketClosed', {
299+
trigger('Network.webSocketClosed', {
289300
requestId,
290301
timestamp: now() / 1000,
291302
})
292303
})
293304

294305
ws.addEventListener('error', function () {
295-
connector.trigger('Network.webSocketFrameError', {
306+
trigger('Network.webSocketFrameError', {
296307
requestId,
297308
timestamp: now() / 1000,
298309
errorMessage: 'WebSocket error',
@@ -309,15 +320,20 @@ function enableWebSocket() {
309320
window.WebSocket = WebSocket as any
310321
}
311322

312-
export function getResponseBody(
313-
params: Network.GetResponseBodyRequest
314-
): Network.GetResponseBodyResponse {
315-
return {
316-
base64Encoded: false,
317-
body: resTxtMap.get(params.requestId),
318-
}
319-
}
320-
321323
function isValidUrl(url: string) {
322324
return !contain(url, '__chobitsu-hide__=true')
323325
}
326+
327+
let triggers: types.AnyFn[] = []
328+
329+
function trigger(method: string, params: any) {
330+
if (isEnable) {
331+
connector.trigger(method, params)
332+
} else {
333+
triggers.push(() => connector.trigger(method, params))
334+
}
335+
}
336+
337+
enableXhr()
338+
enableFetch()
339+
enableWebSocket()

src/domains/Runtime.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export function enable() {
5353
each(triggers, trigger => trigger())
5454
triggers = []
5555

56-
connector.trigger('Runtime.executionContextCreated', {
56+
trigger('Runtime.executionContextCreated', {
5757
context: executionContext,
5858
})
5959
}

0 commit comments

Comments
 (0)