aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/fg/js/frame-offset-forwarder.js3
-rw-r--r--ext/mixed/js/core.js23
2 files changed, 15 insertions, 11 deletions
diff --git a/ext/fg/js/frame-offset-forwarder.js b/ext/fg/js/frame-offset-forwarder.js
index 781a9018..38fc0b03 100644
--- a/ext/fg/js/frame-offset-forwarder.js
+++ b/ext/fg/js/frame-offset-forwarder.js
@@ -50,7 +50,8 @@ class FrameOffsetForwarder {
if (action === 'frameOffset' && isObject(params) && params.uniqueId === uniqueId) {
resolve(params);
}
- }
+ },
+ 5000
);
window.parent.postMessage({
diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js
index f21bac23..616f48b8 100644
--- a/ext/mixed/js/core.js
+++ b/ext/mixed/js/core.js
@@ -312,8 +312,7 @@ const yomichan = (() => {
this.trigger('orphaned', {error});
}
- getTemporaryListenerResult(eventHandler, userCallback, timeout=30000) {
- let resolved = false;
+ getTemporaryListenerResult(eventHandler, userCallback, timeout=null) {
let resolve;
let reject;
const listenerPromise = new Promise((_resolve, _reject) => {
@@ -323,20 +322,24 @@ const yomichan = (() => {
if (eventHandler === chrome.runtime.onMessage) {
const runtimeMessageCallback = ({action, params}, sender, sendResponse) => {
+ let timeoutId = null;
+ if (timeout !== null) {
+ timeoutId = window.setTimeout(() => {
+ timeoutId = null;
+ reject(new Error(`Listener timed out in ${timeout} ms`));
+ eventHandler.removeListener(runtimeMessageCallback);
+ }, timeout);
+ }
+
const cleanupResolve = (value) => {
- resolved = true;
+ if (timeoutId !== null) {
+ window.clearTimeout(timeoutId);
+ }
eventHandler.removeListener(runtimeMessageCallback);
sendResponse();
resolve(value);
};
- setTimeout(() => {
- if (!resolved) {
- reject(new Error(`Listener timed out in ${timeout} ms`));
- eventHandler.removeListener(runtimeMessageCallback);
- }
- }, timeout);
-
userCallback({action, params}, {resolve: cleanupResolve, sender});
};