diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-06-28 17:22:44 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-28 17:22:44 -0400 |
commit | 7590055d4e809ab857b2d491dab256e66f1b34b6 (patch) | |
tree | 4f62f4996cc49748728cc79863a5243feec72048 /ext/bg/js | |
parent | 5183fb575f52c1cb9c01ae4b6bf9572c2595ce04 (diff) |
Merge BackendEventHandler into Backend class (#632)
* Merge BackendEventHandler into Backend class
* Remove unused public functions
Diffstat (limited to 'ext/bg/js')
-rw-r--r-- | ext/bg/js/backend.js | 122 | ||||
-rw-r--r-- | ext/bg/js/background-main.js | 3 |
2 files changed, 48 insertions, 77 deletions
diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index 03bf243d..547b32d0 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -160,8 +160,28 @@ class Backend { return this._prepareCompletePromise; } + _prepareInternalSync() { + if (isObject(chrome.commands) && isObject(chrome.commands.onCommand)) { + const onCommand = this._onWebExtensionEventWrapper(this._onCommand.bind(this)); + chrome.commands.onCommand.addListener(onCommand); + } + + if (isObject(chrome.tabs) && isObject(chrome.tabs.onZoomChange)) { + const onZoomChange = this._onWebExtensionEventWrapper(this._onZoomChange.bind(this)); + chrome.tabs.onZoomChange.addListener(onZoomChange); + } + + const onConnect = this._onWebExtensionEventWrapper(this._onConnect.bind(this)); + chrome.runtime.onConnect.addListener(onConnect); + + const onMessage = this._onMessageWrapper.bind(this); + chrome.runtime.onMessage.addListener(onMessage); + } + async _prepareInternal() { try { + this._prepareInternalSync(); + this._defaultBrowserActionTitle = await this._getBrowserIconTitle(); this._badgePrepareDelayTimer = setTimeout(() => { this._badgePrepareDelayTimer = null; @@ -209,30 +229,10 @@ class Backend { } } - prepareComplete() { - return this._prepareCompletePromise; - } - isPrepared() { return this._isPrepared; } - handleCommand(...args) { - return this._onCommand(...args); - } - - handleZoomChange(...args) { - return this._onZoomChange(...args); - } - - handleConnect(...args) { - return this._onConnect(...args); - } - - handleMessage(...args) { - return this._onMessage(...args); - } - getFullOptions(useSchema=false) { const options = this._options; return useSchema ? JsonSchema.createProxy(options, this._optionsSchema) : options; @@ -256,6 +256,34 @@ class Backend { this._updateBadge(); } + // WebExtension event handlers (with prepared checks) + + _onWebExtensionEventWrapper(handler) { + return (...args) => { + if (this._isPrepared) { + handler(...args); + return; + } + + this._prepareCompletePromise.then( + () => { handler(...args); }, + () => {} // NOP + ); + }; + } + + _onMessageWrapper(message, sender, sendResponse) { + if (this._isPrepared) { + return this._onMessage(message, sender, sendResponse); + } + + this._prepareCompletePromise.then( + () => { this._onMessage(message, sender, sendResponse); }, + () => { sendResponse(); } + ); + return true; + } + // WebExtension event handlers _onCommand(command) { @@ -1341,57 +1369,3 @@ class Backend { } } } - -class BackendEventHandler { - constructor(backend) { - this._backend = backend; - } - - prepare() { - if (isObject(chrome.commands) && isObject(chrome.commands.onCommand)) { - const onCommand = this._createGenericEventHandler((...args) => this._backend.handleCommand(...args)); - chrome.commands.onCommand.addListener(onCommand); - } - - if (isObject(chrome.tabs) && isObject(chrome.tabs.onZoomChange)) { - const onZoomChange = this._createGenericEventHandler((...args) => this._backend.handleZoomChange(...args)); - chrome.tabs.onZoomChange.addListener(onZoomChange); - } - - const onConnect = this._createGenericEventHandler((...args) => this._backend.handleConnect(...args)); - chrome.runtime.onConnect.addListener(onConnect); - - const onMessage = this._onMessage.bind(this); - chrome.runtime.onMessage.addListener(onMessage); - } - - // Event handlers - - _createGenericEventHandler(handler) { - return this._onGenericEvent.bind(this, handler); - } - - _onGenericEvent(handler, ...args) { - if (this._backend.isPrepared()) { - handler(...args); - return; - } - - this._backend.prepareComplete().then( - () => { handler(...args); }, - () => {} // NOP - ); - } - - _onMessage(message, sender, sendResponse) { - if (this._backend.isPrepared()) { - return this._backend.handleMessage(message, sender, sendResponse); - } - - this._backend.prepareComplete().then( - () => { this._backend.handleMessage(message, sender, sendResponse); }, - () => { sendResponse(); } // NOP - ); - return true; - } -} diff --git a/ext/bg/js/background-main.js b/ext/bg/js/background-main.js index 9dd447c4..1b6bd138 100644 --- a/ext/bg/js/background-main.js +++ b/ext/bg/js/background-main.js @@ -17,13 +17,10 @@ /* global * Backend - * BackendEventHandler */ (() => { const backend = new Backend(); - const backendEventHandler = new BackendEventHandler(backend); - backendEventHandler.prepare(); if (typeof window === 'object' && window !== null) { window.yomichanBackend = backend; } |