mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 08:14:09 -08:00
Prevent Chrome debugger extension from disconnecting after timeout
This commit is contained in:
parent
6c91192794
commit
fb39de72cc
|
@ -12,7 +12,9 @@ class DebuggerAgent {
|
|||
|
||||
this.debuggee = { tabId : tab.id };
|
||||
this.port = port;
|
||||
this.tab = tab;
|
||||
debuggerAgentMap[tab.id] = this;
|
||||
this.contentScriptPingListener = (message, sender) => this.onContentScriptPing(message, sender);
|
||||
}
|
||||
|
||||
attach() {
|
||||
|
@ -20,6 +22,17 @@ class DebuggerAgent {
|
|||
this.attachedToDebugger = true;
|
||||
chrome.debugger.sendCommand(this.debuggee, "Debugger.enable", {}, () => this.connectToServer());
|
||||
});
|
||||
chrome.scripting.executeScript({
|
||||
target: { tabId: this.tab.id },
|
||||
files: ['ping.js']
|
||||
});
|
||||
chrome.runtime.onMessage.addListener(this.contentScriptPingListener);
|
||||
}
|
||||
|
||||
onContentScriptPing(message, sender) {
|
||||
if (message.comand === "ping" && typeof sender.tab !== "undefined" && sender.tab.id === this.tab.id) {
|
||||
chrome.tabs.sendMessage(this.tab.id, { command: "pong" });
|
||||
}
|
||||
}
|
||||
|
||||
connectToServer() {
|
||||
|
@ -94,16 +107,18 @@ class DebuggerAgent {
|
|||
}
|
||||
|
||||
disconnect(callback) {
|
||||
chrome.runtime.onMessage.removeListener(this.contentScriptPingListener);
|
||||
chrome.tabs.sendMessage(this.tab.id, { command: "quitPingPong" });
|
||||
if (this.connection) {
|
||||
this.stopPing();
|
||||
const conn = this.connection;
|
||||
this.connection = null;
|
||||
conn.close();
|
||||
}
|
||||
delete debuggerAgentMap[this.debuggee.tabId];
|
||||
if (this.attachedToDebugger) {
|
||||
chrome.debugger.detach(this.debuggee, () => {
|
||||
if (this.debuggee) {
|
||||
delete debuggerAgentMap[this.debuggee.tabId];
|
||||
this.debuggee = null;
|
||||
}
|
||||
for (const callback of this.disconnectCallbacks) {
|
||||
|
|
28
tools/chrome-rdp/src/main/js/chrome/ping.js
Normal file
28
tools/chrome-rdp/src/main/js/chrome/ping.js
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Copyright 2022 Alexey Andreev.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
function sendPing() {
|
||||
chrome.runtime.sendMessage({ command: "ping" });
|
||||
}
|
||||
function listener(message) {
|
||||
if (message.command === "pong") {
|
||||
setTimeout(sendPing, 2000);
|
||||
} else if (message.command === "quitPingPong") {
|
||||
chrome.runtime.onMessage.removeListener(listener);
|
||||
}
|
||||
}
|
||||
chrome.runtime.onMessage.addListener(listener);
|
||||
sendPing();
|
Loading…
Reference in New Issue
Block a user