(session: Electron.Session)
| 26 | private headersReceived = new Map<Electron.Session, HeadersReceivedCallback[]>() |
| 27 | |
| 28 | register(session: Electron.Session) { |
| 29 | if (this.beforeRequest.has(session)) return |
| 30 | |
| 31 | this.beforeRequest.set(session, []) |
| 32 | this.beforeSendHeaders.set(session, []) |
| 33 | this.headersReceived.set(session, []) |
| 34 | |
| 35 | session.webRequest.onBeforeRequest((details, callback) => { |
| 36 | const handlers = this.beforeRequest.get(session)! |
| 37 | if (handlers.length === 0) return callback({}) |
| 38 | |
| 39 | let response = {} |
| 40 | for (const handler of handlers) { |
| 41 | handler(details, (res) => { |
| 42 | response = { ...response, ...res } |
| 43 | if (res.cancel || res.redirectURL) return |
| 44 | }) |
| 45 | } |
| 46 | callback(response) |
| 47 | }) |
| 48 | |
| 49 | session.webRequest.onBeforeSendHeaders((details, callback) => { |
| 50 | const handlers = this.beforeSendHeaders.get(session)! |
| 51 | if (handlers.length === 0) return callback({}) |
| 52 | |
| 53 | const currentDetails = { ...details } |
| 54 | const response: Electron.BeforeSendResponse = { |
| 55 | requestHeaders: details.requestHeaders ? { ...details.requestHeaders } : {} |
| 56 | } |
| 57 | |
| 58 | for (const handler of handlers) { |
| 59 | handler(currentDetails, (res) => { |
| 60 | if (res.requestHeaders) { |
| 61 | response.requestHeaders = { ...response.requestHeaders, ...res.requestHeaders } |
| 62 | } |
| 63 | response.cancel = res.cancel || response.cancel |
| 64 | if (currentDetails.requestHeaders && response.requestHeaders) { |
| 65 | currentDetails.requestHeaders = Object.fromEntries( |
| 66 | Object.entries(response.requestHeaders).map(([k, v]) => [k, [v].flat().join(' ')]) |
| 67 | ) |
| 68 | } |
| 69 | }) |
| 70 | if (response.cancel) break |
| 71 | } |
| 72 | callback(response) |
| 73 | }) |
| 74 | |
| 75 | session.webRequest.onHeadersReceived((details, callback) => { |
| 76 | const handlers = this.headersReceived.get(session)! |
| 77 | if (handlers.length === 0) return callback({}) |
| 78 | |
| 79 | const currentDetails = { ...details } |
| 80 | const response: Electron.HeadersReceivedResponse = { |
| 81 | responseHeaders: details.responseHeaders ? { ...details.responseHeaders } : {} |
| 82 | } |
| 83 | |
| 84 | for (const handler of handlers) { |
| 85 | handler(currentDetails, (res) => { |
no test coverage detected