use getTemporaryListenerResult in other places

This commit is contained in:
siikamiika 2020-03-25 04:17:17 +02:00
parent 7928c5d713
commit c171503d77
2 changed files with 37 additions and 40 deletions

View File

@ -203,12 +203,22 @@ class Popup {
this._messageToken = await apiGetMessageToken();
}
return new Promise((resolve) => {
const popupPreparedPromise = yomichan.getTemporaryListenerResult(
chrome.runtime.onMessage,
({action, params}, {resolve}) => {
if (
action === 'popupPrepareCompleted' &&
isObject(params) &&
params.targetPopupId === this._id
) {
resolve();
}
}
);
const parentFrameId = (typeof this._frameId === 'number' ? this._frameId : null);
this._container.setAttribute('src', chrome.runtime.getURL('/fg/float.html'));
this._container.addEventListener('load', () => {
this._listenForDisplayPrepareCompleted(resolve);
this._invokeApi('prepare', {
popupInfo: {
id: this._id,
@ -223,7 +233,8 @@ class Popup {
this._observeFullscreen(true);
this._onFullscreenChanged();
this._injectStyles();
});
return popupPreparedPromise;
}
async _injectStyles() {
@ -358,21 +369,6 @@ class Popup {
contentWindow.postMessage({action, params, token}, this._targetOrigin);
}
_listenForDisplayPrepareCompleted(resolve) {
const runtimeMessageCallback = ({action, params}, sender, callback) => {
if (
action === 'popupPrepareCompleted' &&
isObject(params) &&
params.targetPopupId === this._id
) {
chrome.runtime.onMessage.removeListener(runtimeMessageCallback);
callback();
resolve();
}
};
chrome.runtime.onMessage.addListener(runtimeMessageCallback);
}
static _getFullscreenElement() {
return (
document.fullscreenElement ||

View File

@ -278,11 +278,16 @@ const yomichan = (() => {
constructor() {
super();
this._isBackendPreparedResolve = null;
this._isBackendPreparedPromise = new Promise((resolve) => (this._isBackendPreparedResolve = resolve));
this._isBackendPreparedPromise = this.getTemporaryListenerResult(
chrome.runtime.onMessage,
({action}, {resolve}) => {
if (action === 'backendPrepared') {
resolve();
}
}
);
this._messageHandlers = new Map([
['backendPrepared', this._onBackendPrepared.bind(this)],
['getUrl', this._onMessageGetUrl.bind(this)],
['optionsUpdated', this._onMessageOptionsUpdated.bind(this)],
['zoomChanged', this._onMessageZoomChanged.bind(this)]
@ -362,10 +367,6 @@ const yomichan = (() => {
return false;
}
_onBackendPrepared() {
this._isBackendPreparedResolve();
}
_onMessageGetUrl() {
return {url: window.location.href};
}