From 673952e82576b0bc4b6b02c2105fbb1850e55950 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Tue, 9 Feb 2021 23:14:29 -0500 Subject: Fix window popup screenshot (#1365) * Pass tabId to the screenshot functionality * Make setVisibleOverride async * Fix argument order * Fix incorrect windowId * Remove unused argument --- ext/bg/js/backend.js | 46 ++++++++++++++++++++++++++++------------------ ext/bg/js/search.js | 2 +- 2 files changed, 29 insertions(+), 19 deletions(-) (limited to 'ext/bg/js') diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index fd90a220..465c8137 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -465,11 +465,7 @@ class Backend { return results; } - async _onApiInjectAnkiNoteMedia({timestamp, definitionDetails, audioDetails, screenshotDetails, clipboardDetails}, sender) { - if (isObject(screenshotDetails)) { - const {id: tabId, windowId} = (sender && sender.tab ? sender.tab : {}); - screenshotDetails = Object.assign({}, screenshotDetails, {tabId, windowId}); - } + async _onApiInjectAnkiNoteMedia({timestamp, definitionDetails, audioDetails, screenshotDetails, clipboardDetails}) { return await this._injectAnkNoteMedia( this._anki, timestamp, @@ -1494,23 +1490,21 @@ class Backend { } async _checkTabUrl(tabId, urlPredicate) { - const tab = await new Promise((resolve) => { - chrome.tabs.get( - tabId, - (result) => { resolve(chrome.runtime.lastError ? null : result); } - ); - }); - if (tab === null) { return null; } + let tab; + try { + tab = await this._getTabById(tabId); + } catch (e) { + return null; + } const url = await this._getTabUrl(tabId); const isValidTab = urlPredicate(url); return isValidTab ? tab : null; } - async _getScreenshot(windowId, tabId, frameId, format, quality) { - if (typeof windowId !== 'number') { - throw new Error('Invalid window ID'); - } + async _getScreenshot(tabId, frameId, format, quality) { + const tab = await this._getTabById(tabId); + const {windowId} = tab; let token = null; try { @@ -1636,8 +1630,8 @@ class Backend { } async _injectAnkNoteScreenshot(ankiConnect, timestamp, definitionDetails, details) { - const {windowId, tabId, frameId, format, quality} = details; - const dataUrl = await this._getScreenshot(windowId, tabId, frameId, format, quality); + const {tabId, frameId, format, quality} = details; + const dataUrl = await this._getScreenshot(tabId, frameId, format, quality); const {mediaType, data} = this._getDataUrlInfo(dataUrl); const extension = this._mediaUtility.getFileExtensionFromImageMediaType(mediaType); @@ -1954,4 +1948,20 @@ class Backend { } })); } + + _getTabById(tabId) { + return new Promise((resolve, reject) => { + chrome.tabs.get( + tabId, + (result) => { + const e = chrome.runtime.lastError; + if (e) { + reject(new Error(e.message)); + } else { + resolve(result); + } + } + ); + }); + } } diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js index dbc679b1..a786b0bf 100644 --- a/ext/bg/js/search.js +++ b/ext/bg/js/search.js @@ -24,7 +24,7 @@ class DisplaySearch extends Display { constructor(tabId, frameId, japaneseUtil, documentFocusController, hotkeyHandler) { - super('search', tabId, frameId, japaneseUtil, documentFocusController, hotkeyHandler); + super(tabId, frameId, 'search', japaneseUtil, documentFocusController, hotkeyHandler); this._searchButton = document.querySelector('#search-button'); this._queryInput = document.querySelector('#search-textbox'); this._introElement = document.querySelector('#intro'); -- cgit v1.2.3