From 3a23f081d1a11a233b855bdea1f6dcab9b593aca Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sun, 8 Nov 2020 22:49:40 -0500 Subject: [PATCH] Frontend options override refactor (#1016) * Update how options context overriding works * Make function private --- ext/bg/js/settings/popup-preview-frame.js | 13 +----- ext/fg/js/frontend.js | 49 ++++++++++++++--------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/ext/bg/js/settings/popup-preview-frame.js b/ext/bg/js/settings/popup-preview-frame.js index 1a05a48d..d9b05368 100644 --- a/ext/bg/js/settings/popup-preview-frame.js +++ b/ext/bg/js/settings/popup-preview-frame.js @@ -28,7 +28,6 @@ class PopupPreviewFrame { this._frameId = frameId; this._popupFactory = popupFactory; this._frontend = null; - this._frontendGetOptionsContextOld = null; this._apiOptionsGetOld = null; this._popupSetCustomOuterCssOld = null; this._popupShown = false; @@ -78,8 +77,7 @@ class PopupPreviewFrame { pageType: 'web', allowRootFramePopupProxy: false }); - this._frontendGetOptionsContextOld = this._frontend.getOptionsContext.bind(this._frontend); - this._frontend.getOptionsContext = this._getOptionsContext.bind(this); + this._frontend.setOptionsContextOverride(this._optionsContext); await this._frontend.prepare(); this._frontend.setDisabledOverride(true); this._frontend.canClearSelection = false; @@ -96,14 +94,6 @@ class PopupPreviewFrame { // Private - async _getOptionsContext() { - let optionsContext = this._optionsContext; - if (optionsContext === null) { - optionsContext = this._frontendGetOptionsContextOld(); - } - return optionsContext; - } - async _apiOptionsGet(...args) { const options = await this._apiOptionsGetOld(...args); options.general.enable = true; @@ -213,6 +203,7 @@ class PopupPreviewFrame { async _updateOptionsContext({optionsContext}) { this._optionsContext = optionsContext; if (this._frontend === null) { return; } + this._frontend.setOptionsContextOverride(optionsContext); await this._frontend.updateOptions(); await this._updateSearch(); } diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js index 0ed842f5..127238bf 100644 --- a/ext/fg/js/frontend.js +++ b/ext/fg/js/frontend.js @@ -65,6 +65,7 @@ class Frontend { this._updatePopupToken = null; this._clearSelectionTimer = null; this._isPointerOverPopup = false; + this._optionsContextOverride = null; this._runtimeMessageHandlers = new Map([ ['requestFrontendReadyBroadcast', {async: false, handler: this._onMessageRequestFrontendReadyBroadcast.bind(this)}], @@ -131,26 +132,15 @@ class Frontend { this._updateTextScannerEnabled(); } + setOptionsContextOverride(optionsContext) { + this._optionsContextOverride = optionsContext; + } + async setTextSource(textSource) { this._textScanner.setCurrentTextSource(null); await this._textScanner.search(textSource); } - async getOptionsContext() { - let url = window.location.href; - if (this._useProxyPopup) { - try { - url = await api.crossFrame.invoke(this._parentFrameId, 'getUrl', {}); - } catch (e) { - // NOP - } - } - - const depth = this._depth; - const modifierKeys = [...this._activeModifiers]; - return {depth, url, modifierKeys}; - } - async updateOptions() { try { await this._updateOptionsInternal(); @@ -319,7 +309,7 @@ class Frontend { } async _updateOptionsInternal() { - const optionsContext = await this.getOptionsContext(); + const optionsContext = await this._getOptionsContext(); const options = await api.optionsGet(optionsContext); const scanningOptions = options.scanning; this._options = options; @@ -393,7 +383,7 @@ class Frontend { const token = {}; this._updatePopupToken = token; const popup = await popupPromise; - const optionsContext = await this.getOptionsContext(); + const optionsContext = await this._getOptionsContext(); if (this._updatePopupToken !== token) { return; } if (popup !== null) { await popup.setOptionsContext(optionsContext, this._id); @@ -496,7 +486,7 @@ class Frontend { textSource = this._textScanner.getCurrentTextSource(); if (textSource === null) { return; } } - this._showPopupContent(textSource, await this.getOptionsContext()); + this._showPopupContent(textSource, await this._getOptionsContext()); } _showContent(textSource, focus, definitions, type, sentence, optionsContext) { @@ -590,7 +580,7 @@ class Frontend { this._popup !== null && await this._popup.isVisible() ) { - this._showPopupContent(textSource, await this.getOptionsContext()); + this._showPopupContent(textSource, await this._getOptionsContext()); } } @@ -622,7 +612,7 @@ class Frontend { async _getUpToDateOptionsContext() { await this._updatePendingOptions(); - return await this.getOptionsContext(); + return await this._getOptionsContext(); } _getPreventMiddleMouseValueForPageType(preventMiddleMouseOptions) { @@ -633,4 +623,23 @@ class Frontend { default: return false; } } + + async _getOptionsContext() { + if (this._optionsContextOverride !== null) { + return this._optionsContextOverride; + } + + let url = window.location.href; + if (this._useProxyPopup) { + try { + url = await api.crossFrame.invoke(this._parentFrameId, 'getUrl', {}); + } catch (e) { + // NOP + } + } + + const depth = this._depth; + const modifierKeys = [...this._activeModifiers]; + return {depth, url, modifierKeys}; + } }