Skip to content

Commit d9a876d

Browse files
committed
pr updates
1 parent b0ddedb commit d9a876d

File tree

2 files changed

+34
-28
lines changed

2 files changed

+34
-28
lines changed

packages/proxy/lib/http/util/service-worker-injector.ts

+31-25
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,28 @@ declare let self: typeof globalThis & {
1717
*/
1818
export const injectIntoServiceWorker = (body: Buffer) => {
1919
function __cypressInjectIntoServiceWorker () {
20-
let _listenerCount = 0
21-
let _eventQueue: ServiceWorkerClientEvent[] = []
22-
const _nonCaptureListenersMap = new WeakMap<EventListenerOrEventListenerObject, EventListenerOrEventListenerObject>()
23-
const _captureListenersMap = new WeakMap<EventListenerOrEventListenerObject, EventListenerOrEventListenerObject>()
24-
const _targetToWrappedHandleEventMap = new WeakMap<Object, EventListenerOrEventListenerObject>()
25-
const _targetToOrigHandleEventMap = new WeakMap<Object, EventListenerOrEventListenerObject>()
20+
let listenerCount = 0
21+
let eventQueue: ServiceWorkerClientEvent[] = []
22+
const nonCaptureListenersMap = new WeakMap<EventListenerOrEventListenerObject, EventListenerOrEventListenerObject>()
23+
const captureListenersMap = new WeakMap<EventListenerOrEventListenerObject, EventListenerOrEventListenerObject>()
24+
const targetToWrappedHandleEventMap = new WeakMap<Object, EventListenerOrEventListenerObject>()
25+
const targetToOrigHandleEventMap = new WeakMap<Object, EventListenerOrEventListenerObject>()
2626

2727
const sendEvent = (event: ServiceWorkerClientEvent) => {
2828
// if the binding has been created, we can call it
2929
// otherwise, we need to queue the event
3030
if (self.__cypressServiceWorkerClientEvent) {
3131
self.__cypressServiceWorkerClientEvent(JSON.stringify(event))
3232
} else {
33-
_eventQueue.push(event)
33+
eventQueue.push(event)
3434
}
3535
}
3636

3737
const __cypressServiceWorkerSendHasFetchEventHandlers = () => {
3838
// @ts-expect-error __cypressScriptEvaluated is declared below
3939
// if the script has been evaluated, we can call the CDP binding to inform the backend whether or not the service worker has a handler
4040
if (__cypressScriptEvaluated) {
41-
sendEvent({ type: 'hasHandlersEvent', payload: { hasHandlers: !!(_listenerCount > 0 || self.onfetch) } })
41+
sendEvent({ type: 'hasHandlersEvent', payload: { hasHandlers: !!(listenerCount > 0 || self.onfetch) } })
4242
}
4343
}
4444

@@ -86,7 +86,7 @@ export const injectIntoServiceWorker = (body: Buffer) => {
8686
self.addEventListener = (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => {
8787
if (type === 'fetch' && isValidListener(listener) && !isAborted(options)) {
8888
const capture = getCaptureValue(options)
89-
const existingListener = capture ? _captureListenersMap.get(listener) : _nonCaptureListenersMap.get(listener)
89+
const existingListener = capture ? captureListenersMap.get(listener) : nonCaptureListenersMap.get(listener)
9090

9191
// If the listener is already in the map, we don't need to wrap it again
9292
if (existingListener) {
@@ -104,31 +104,34 @@ export const injectIntoServiceWorker = (body: Buffer) => {
104104
newListener = new Proxy(listener, {
105105
get (target, key) {
106106
if (key === 'handleEvent') {
107-
const wrappedHandleEvent = _targetToWrappedHandleEventMap.get(target)
108-
const origHandleEvent = _targetToOrigHandleEventMap.get(target)
107+
const wrappedHandleEvent = targetToWrappedHandleEventMap.get(target)
108+
const origHandleEvent = targetToOrigHandleEventMap.get(target)
109109

110110
// If the handleEvent function has not been wrapped yet, or if it has changed, we need to wrap it
111111
if ((!wrappedHandleEvent && target.handleEvent) || target.handleEvent !== origHandleEvent) {
112-
_targetToWrappedHandleEventMap.set(target, __cypressWrapListener(target.handleEvent))
113-
_targetToOrigHandleEventMap.set(target, target.handleEvent)
112+
targetToWrappedHandleEventMap.set(target, __cypressWrapListener(target.handleEvent))
113+
targetToOrigHandleEventMap.set(target, target.handleEvent)
114114
}
115115

116-
return _targetToWrappedHandleEventMap.get(target)
116+
return targetToWrappedHandleEventMap.get(target)
117117
}
118118

119119
return Reflect.get(target, key)
120120
},
121121
})
122122
}
123123

124+
// call the original addEventListener function prior to doing any additional work since it may fail
125+
const result = oldAddEventListener(type, newListener, options)
126+
124127
// get the capture value so we know which map to add the listener to
125128
// so we can then remove the listener later if requested
126-
getCaptureValue(options) ? _captureListenersMap.set(listener, newListener) : _nonCaptureListenersMap.set(listener, newListener)
127-
_listenerCount++
129+
getCaptureValue(options) ? captureListenersMap.set(listener, newListener) : nonCaptureListenersMap.set(listener, newListener)
130+
listenerCount++
128131

129132
__cypressServiceWorkerSendHasFetchEventHandlers()
130133

131-
return oldAddEventListener(type, newListener, options)
134+
return result
132135
}
133136

134137
return oldAddEventListener(type, listener, options)
@@ -142,20 +145,23 @@ export const injectIntoServiceWorker = (body: Buffer) => {
142145
if (type === 'fetch' && isValidListener(listener)) {
143146
// get the capture value so we know which map to remove the listener from
144147
const capture = getCaptureValue(options)
145-
const newListener = capture ? _captureListenersMap.get(listener) : _nonCaptureListenersMap.get(listener)
148+
const newListener = capture ? captureListenersMap.get(listener) : nonCaptureListenersMap.get(listener)
149+
150+
// call the original removeEventListener function prior to doing any additional work since it may fail
151+
const result = oldRemoveEventListener(type, newListener!, options)
146152

147-
capture ? _captureListenersMap.delete(listener) : _nonCaptureListenersMap.delete(listener)
148-
_listenerCount--
153+
capture ? captureListenersMap.delete(listener) : nonCaptureListenersMap.delete(listener)
154+
listenerCount--
149155

150156
// If the listener is an object with a handleEvent method, we need to remove the wrapped function
151157
if (typeof listener === 'object' && typeof listener.handleEvent === 'function') {
152-
_targetToWrappedHandleEventMap.delete(listener)
153-
_targetToOrigHandleEventMap.delete(listener)
158+
targetToWrappedHandleEventMap.delete(listener)
159+
targetToOrigHandleEventMap.delete(listener)
154160
}
155161

156162
__cypressServiceWorkerSendHasFetchEventHandlers()
157163

158-
return oldRemoveEventListener(type, newListener!, options)
164+
return result
159165
}
160166

161167
return oldRemoveEventListener(type, listener, options)
@@ -207,11 +213,11 @@ export const injectIntoServiceWorker = (body: Buffer) => {
207213
clearInterval(timer)
208214

209215
// send any events that were queued
210-
_eventQueue.forEach((event) => {
216+
eventQueue.forEach((event) => {
211217
self.__cypressServiceWorkerClientEvent(JSON.stringify(event))
212218
})
213219

214-
_eventQueue = []
220+
eventQueue = []
215221
}
216222
}, 5)
217223
}

packages/proxy/lib/http/util/service-worker-manager.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,9 @@ export class ServiceWorkerManager {
220220
}
221221

222222
/**
223-
* Handles a service worker fetch event.
224-
* @param event the service worker fetch event to handle
225-
*/
223+
* Handles a service worker fetch event.
224+
* @param event the service worker fetch event to handle
225+
*/
226226
private handleServiceWorkerFetchEvent (event: ServiceWorkerEventsPayload['fetchEvent']) {
227227
const promises = this.pendingPotentiallyControlledRequests.get(event.url)
228228

0 commit comments

Comments
 (0)