add more logs on detach

This commit is contained in:
Tommy D. Rossi
2025-12-31 16:07:57 +01:00
parent 5dca4094c8
commit 02fda90578
+24 -12
View File
@@ -94,6 +94,11 @@ const logger = {
}, },
} }
function getCallStack(): string {
const stack = new Error().stack || ''
return stack.split('\n').slice(2, 6).join(' <- ').replace(/\s+/g, ' ')
}
self.addEventListener('error', (event) => { self.addEventListener('error', (event) => {
const error = event.error const error = event.error
const stack = error?.stack || `${event.message} at ${event.filename}:${event.lineno}:${event.colno}` const stack = error?.stack || `${event.message} at ${event.filename}:${event.lineno}:${event.colno}`
@@ -339,7 +344,7 @@ function onDebuggerDetach(source: chrome.debugger.Debuggee, reason: `${chrome.de
return return
} }
logger.debug(`Manual debugger detachment detected for tab ${tabId}: ${reason}`) logger.warn(`DISCONNECT: onDebuggerDetach tabId=${tabId} reason=${reason}`)
const tab = store.getState().tabs.get(tabId) const tab = store.getState().tabs.get(tabId)
if (tab) { if (tab) {
@@ -431,7 +436,7 @@ function detachTab(tabId: number, shouldDetachDebugger: boolean): void {
return return
} }
logger.debug('Detaching tab:', tabId, 'sessionId:', tab.sessionId, 'shouldDetach:', shouldDetachDebugger) logger.warn(`DISCONNECT: detachTab tabId=${tabId} shouldDetach=${shouldDetachDebugger} stack=${getCallStack()}`)
sendMessage({ sendMessage({
method: 'forwardCDPEvent', method: 'forwardCDPEvent',
@@ -462,7 +467,7 @@ function detachTab(tabId: number, shouldDetachDebugger: boolean): void {
} }
function closeConnection(reason: string): void { function closeConnection(reason: string): void {
logger.debug('Closing connection, reason:', reason) logger.warn(`DISCONNECT: closeConnection reason=${reason} stack=${getCallStack()}`)
chrome.debugger.onEvent.removeListener(onDebuggerEvent) chrome.debugger.onEvent.removeListener(onDebuggerEvent)
chrome.debugger.onDetach.removeListener(onDebuggerDetach) chrome.debugger.onDetach.removeListener(onDebuggerDetach)
@@ -508,7 +513,7 @@ function startReplacedRetryLoop(): void {
} }
function handleConnectionClose(reason: string, code: number): void { function handleConnectionClose(reason: string, code: number): void {
logger.debug('Connection closed:', { reason, code }) logger.warn(`DISCONNECT: WS closed code=${code} reason=${reason || 'none'} stack=${getCallStack()}`)
chrome.debugger.onEvent.removeListener(onDebuggerEvent) chrome.debugger.onEvent.removeListener(onDebuggerEvent)
chrome.debugger.onDetach.removeListener(onDebuggerDetach) chrome.debugger.onDetach.removeListener(onDebuggerDetach)
@@ -608,7 +613,7 @@ async function ensureConnection(): Promise<void> {
ws = socket ws = socket
ws.onmessage = async (event: MessageEvent) => { ws.onmessage = async (event: MessageEvent) => {
let message: ExtensionCommandMessage let message: any
try { try {
message = JSON.parse(event.data) message = JSON.parse(event.data)
} catch (error: any) { } catch (error: any) {
@@ -617,9 +622,15 @@ async function ensureConnection(): Promise<void> {
return return
} }
// Handle ping from server - respond with pong to keep service worker alive
if (message.method === 'ping') {
sendMessage({ method: 'pong' })
return
}
const response: ExtensionResponseMessage = { id: message.id } const response: ExtensionResponseMessage = { id: message.id }
try { try {
response.result = await handleCommand(message) response.result = await handleCommand(message as ExtensionCommandMessage)
} catch (error: any) { } catch (error: any) {
logger.debug('Error handling command:', error) logger.debug('Error handling command:', error)
response.error = error.message response.error = error.message
@@ -957,12 +968,13 @@ async function onActionClicked(tab: chrome.tabs.Tab): Promise<void> {
resetDebugger() resetDebugger()
chrome.contextMenus.remove('playwriter-pin-element').catch(() => {}) chrome.contextMenus.remove('playwriter-pin-element').catch(() => {}).finally(() => {
chrome.contextMenus.create({ chrome.contextMenus.create({
id: 'playwriter-pin-element', id: 'playwriter-pin-element',
title: 'Copy Playwriter Element Reference', title: 'Copy Playwriter Element Reference',
contexts: ['all'], contexts: ['all'],
visible: false, visible: false,
})
}) })
function updateContextMenuVisibility(): void { function updateContextMenuVisibility(): void {