aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/bg/js/backend.js11
-rw-r--r--ext/fg/js/popup.js15
-rw-r--r--ext/mixed/js/api.js11
-rw-r--r--ext/mixed/js/core.js41
4 files changed, 35 insertions, 43 deletions
diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js
index 59a3de45..5ca84cab 100644
--- a/ext/bg/js/backend.js
+++ b/ext/bg/js/backend.js
@@ -78,10 +78,10 @@ class Backend {
this._isPrepared = false;
this._prepareError = false;
this._preparePromise = null;
- this._prepareCompletePromise = new Promise((resolve, reject) => {
- this._prepareCompleteResolve = resolve;
- this._prepareCompleteReject = reject;
- });
+ const {promise, resolve, reject} = deferPromise();
+ this._prepareCompletePromise = promise;
+ this._prepareCompleteResolve = resolve;
+ this._prepareCompleteReject = reject;
this._defaultBrowserActionTitle = null;
this._badgePrepareDelayTimer = null;
@@ -1269,8 +1269,7 @@ class Backend {
static async _findTab(timeout, checkUrl) {
// This function works around the need to have the "tabs" permission to access tab.url.
const tabs = await new Promise((resolve) => chrome.tabs.query({}, resolve));
- let matchPromiseResolve = null;
- const matchPromise = new Promise((resolve) => { matchPromiseResolve = resolve; });
+ const {promise: matchPromise, resolve: matchPromiseResolve} = deferPromise();
const checkTabUrl = ({tab, url}) => {
if (checkUrl(url, tab)) {
diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js
index 5ee62c9b..931813de 100644
--- a/ext/fg/js/popup.js
+++ b/ext/fg/js/popup.js
@@ -229,12 +229,11 @@ class Popup {
return new Promise((resolve, reject) => {
const tokenMap = new Map();
let timer = null;
- let frameLoadedResolve = null;
- let frameLoadedReject = null;
- const frameLoaded = new Promise((resolve2, reject2) => {
- frameLoadedResolve = resolve2;
- frameLoadedReject = reject2;
- });
+ let {
+ promise: frameLoadedPromise,
+ resolve: frameLoadedResolve,
+ reject: frameLoadedReject
+ } = deferPromise();
const postMessage = (action, params) => {
const contentWindow = frame.contentWindow;
@@ -261,7 +260,7 @@ class Popup {
if (!isObject(message)) { return; }
const {action, params} = message;
if (!isObject(params)) { return; }
- await frameLoaded;
+ await frameLoadedPromise;
if (timer === null) { return; } // Done
switch (action) {
@@ -331,7 +330,7 @@ class Popup {
frame.addEventListener('load', onLoad);
// Prevent unhandled rejections
- frameLoaded.catch(() => {}); // NOP
+ frameLoadedPromise.catch(() => {}); // NOP
setupFrame(frame);
});
diff --git a/ext/mixed/js/api.js b/ext/mixed/js/api.js
index 5c17d50e..1e421147 100644
--- a/ext/mixed/js/api.js
+++ b/ext/mixed/js/api.js
@@ -212,12 +212,11 @@ const api = (() => {
_createActionPort(timeout=5000) {
return new Promise((resolve, reject) => {
let timer = null;
- let portNameResolve;
- let portNameReject;
- const portNamePromise = new Promise((resolve2, reject2) => {
- portNameResolve = resolve2;
- portNameReject = reject2;
- });
+ const {
+ promise: portNamePromise,
+ resolve: portNameResolve,
+ reject: portNameReject
+ } = deferPromise();
const onConnect = async (port) => {
try {
diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js
index e22be33d..fec26a0e 100644
--- a/ext/mixed/js/core.js
+++ b/ext/mixed/js/core.js
@@ -197,6 +197,16 @@ const clone = (() => {
* Async utilities
*/
+function deferPromise() {
+ let resolve;
+ let reject;
+ const promise = new Promise((resolve2, reject2) => {
+ resolve = resolve2;
+ reject = reject2;
+ });
+ return {promise, resolve, reject};
+}
+
function promiseTimeout(delay, resolveValue) {
if (delay <= 0) {
const promise = Promise.resolve(resolveValue);
@@ -206,8 +216,7 @@ function promiseTimeout(delay, resolveValue) {
}
let timer = null;
- let promiseResolve = null;
- let promiseReject = null;
+ let {promise, resolve, reject} = deferPromise();
const complete = (callback, value) => {
if (callback === null) { return; }
@@ -215,39 +224,25 @@ function promiseTimeout(delay, resolveValue) {
clearTimeout(timer);
timer = null;
}
- promiseResolve = null;
- promiseReject = null;
+ resolve = null;
+ reject = null;
callback(value);
};
- const resolve = (value) => complete(promiseResolve, value);
- const reject = (value) => complete(promiseReject, value);
+ const resolveWrapper = (value) => complete(resolve, value);
+ const rejectWrapper = (value) => complete(reject, value);
- const promise = new Promise((resolve2, reject2) => {
- promiseResolve = resolve2;
- promiseReject = reject2;
- });
timer = setTimeout(() => {
timer = null;
- resolve(resolveValue);
+ resolveWrapper(resolveValue);
}, delay);
- promise.resolve = resolve;
- promise.reject = reject;
+ promise.resolve = resolveWrapper;
+ promise.reject = rejectWrapper;
return promise;
}
-function deferPromise() {
- let resolve;
- let reject;
- const promise = new Promise((resolve2, reject2) => {
- resolve = resolve2;
- reject = reject2;
- });
- return {promise, resolve, reject};
-}
-
/*
* Common events