add more logs on detach
This commit is contained in:
+24
-12
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user