diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-05-24 14:00:32 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-24 14:00:32 -0400 | 
| commit | 3c4c82dcfc66a1b24a3df3d4b15283235c72cf66 (patch) | |
| tree | 5ab01e468ed2154dda504d908127049c3e40c88a /ext/fg/js | |
| parent | 13f57cccba5a29ff9e270a3fc2b2d7fee6e46b51 (diff) | |
Ensure single popup factory (#554)
* Add createPopupFactory
* Ensure only a single PopupFactory is generated
Diffstat (limited to 'ext/fg/js')
| -rw-r--r-- | ext/fg/js/content-script-main.js | 42 | 
1 files changed, 26 insertions, 16 deletions
| diff --git a/ext/fg/js/content-script-main.js b/ext/fg/js/content-script-main.js index b057ae3d..cebda2d7 100644 --- a/ext/fg/js/content-script-main.js +++ b/ext/fg/js/content-script-main.js @@ -24,6 +24,19 @@   * api   */ +async function createPopupFactory() { +    const {frameId} = await api.frameInformationGet(); +    if (typeof frameId !== 'number') { +        const error = new Error('Failed to get frameId'); +        yomichan.logError(error); +        throw error; +    } + +    const popupFactory = new PopupFactory(frameId); +    await popupFactory.prepare(); +    return popupFactory; +} +  async function createIframePopupProxy(frameOffsetForwarder, setDisabled) {      const rootPopupInformationPromise = yomichan.getTemporaryListenerResult(          chrome.runtime.onMessage, @@ -44,20 +57,8 @@ async function createIframePopupProxy(frameOffsetForwarder, setDisabled) {      return popup;  } -async function getOrCreatePopup(depth) { -    const {frameId} = await api.frameInformationGet(); -    if (typeof frameId !== 'number') { -        const error = new Error('Failed to get frameId'); -        yomichan.logError(error); -        throw error; -    } - -    const popupFactory = new PopupFactory(frameId); -    await popupFactory.prepare(); - -    const popup = popupFactory.getOrCreatePopup(null, null, depth); - -    return popup; +async function getOrCreatePopup(depth, popupFactory) { +    return popupFactory.getOrCreatePopup(null, null, depth);  }  async function createPopupProxy(depth, id, parentFrameId) { @@ -85,6 +86,7 @@ async function createPopupProxy(depth, id, parentFrameId) {      let frontend = null;      let frontendPreparePromise = null;      let frameOffsetForwarder = null; +    let popupFactoryPromise = null;      let iframePopupsInRootFrameAvailable = true; @@ -124,8 +126,16 @@ async function createPopupProxy(depth, id, parentFrameId) {              popup = popups.proxy || await createPopupProxy(depth, id, parentFrameId);              popups.proxy = popup;          } else { -            popup = popups.normal || await getOrCreatePopup(depth); -            popups.normal = popup; +            popup = popups.normal; +            if (!popup) { +                if (popupFactoryPromise === null) { +                    popupFactoryPromise = createPopupFactory(); +                } +                const popupFactory = await popupFactoryPromise; +                const popupNormal = await getOrCreatePopup(depth, popupFactory); +                popups.normal = popupNormal; +                popup = popupNormal; +            }          }          if (frontend === null) { |