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.debuggee = { tabId : tab.id };
|
||||||
this.port = port;
|
this.port = port;
|
||||||
|
this.tab = tab;
|
||||||
debuggerAgentMap[tab.id] = this;
|
debuggerAgentMap[tab.id] = this;
|
||||||
|
this.contentScriptPingListener = (message, sender) => this.onContentScriptPing(message, sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
attach() {
|
attach() {
|
||||||
|
@ -20,6 +22,17 @@ class DebuggerAgent {
|
||||||
this.attachedToDebugger = true;
|
this.attachedToDebugger = true;
|
||||||
chrome.debugger.sendCommand(this.debuggee, "Debugger.enable", {}, () => this.connectToServer());
|
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() {
|
connectToServer() {
|
||||||
|
@ -94,16 +107,18 @@ class DebuggerAgent {
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect(callback) {
|
disconnect(callback) {
|
||||||
|
chrome.runtime.onMessage.removeListener(this.contentScriptPingListener);
|
||||||
|
chrome.tabs.sendMessage(this.tab.id, { command: "quitPingPong" });
|
||||||
if (this.connection) {
|
if (this.connection) {
|
||||||
this.stopPing();
|
this.stopPing();
|
||||||
const conn = this.connection;
|
const conn = this.connection;
|
||||||
this.connection = null;
|
this.connection = null;
|
||||||
conn.close();
|
conn.close();
|
||||||
}
|
}
|
||||||
|
delete debuggerAgentMap[this.debuggee.tabId];
|
||||||
if (this.attachedToDebugger) {
|
if (this.attachedToDebugger) {
|
||||||
chrome.debugger.detach(this.debuggee, () => {
|
chrome.debugger.detach(this.debuggee, () => {
|
||||||
if (this.debuggee) {
|
if (this.debuggee) {
|
||||||
delete debuggerAgentMap[this.debuggee.tabId];
|
|
||||||
this.debuggee = null;
|
this.debuggee = null;
|
||||||
}
|
}
|
||||||
for (const callback of this.disconnectCallbacks) {
|
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