diff options
| author | jbukl <noreply@github.com> | 2023-10-21 12:33:51 -0400 | 
|---|---|---|
| committer | jbukl <noreply@github.com> | 2023-10-21 13:42:52 -0400 | 
| commit | 379fdcf2280939c72e1be4e4f38567149a108873 (patch) | |
| tree | 73bd72e5d30813b699e4dcea0a2efa5a4e7abc8a /ext/js | |
| parent | e39d18aaf1b8541adf927ded6c12ac4f24972759 (diff) | |
fix: clipboard getImage, review comments
implement getImage for offscreen requests
move offscreen files, offscreen prep is done in sw prep
update permissions document for offscreen
rearrange permissions
Diffstat (limited to 'ext/js')
| -rw-r--r-- | ext/js/background/backend.js | 52 | ||||
| -rw-r--r-- | ext/js/background/offscreen-main.js (renamed from ext/js/offscreen/offscreen-main.js) | 0 | ||||
| -rw-r--r-- | ext/js/background/offscreen.js (renamed from ext/js/offscreen/offscreen.js) | 7 | 
3 files changed, 38 insertions, 21 deletions
| diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js index f5cbb349..308ae4d5 100644 --- a/ext/js/background/backend.js +++ b/ext/js/background/backend.js @@ -58,16 +58,18 @@ class Backend {          this._anki = new AnkiConnect();          this._mecab = new Mecab(); -        this._clipboardReader = { -            getText: this._getTextOffscreen.bind(this) -        }; -        if (!chrome || !chrome.offscreen) { +        if (!chrome.offscreen) {              this._clipboardReader = new ClipboardReader({                  // eslint-disable-next-line no-undef                  document: (typeof document === 'object' && document !== null ? document : null),                  pasteTargetSelector: '#clipboard-paste-target',                  richContentPasteTargetSelector: '#clipboard-rich-content-paste-target'              }); +        } else { +            this._clipboardReader = { +                getText: this._getTextOffscreen.bind(this), +                getImage: this._getImageOffscreen.bind(this) +            };          }          this._clipboardMonitor = new ClipboardMonitor({ @@ -227,6 +229,9 @@ class Backend {              await this._requestBuilder.prepare();              await this._environment.prepare(); +            if (chrome.offscreen) { +                await this._setupOffscreenDocument(); +            }              this._clipboardReader.browser = this._environment.getInfo().browser;              try { @@ -566,21 +571,6 @@ class Backend {          return this._clipboardReader.getText(false);      } -    async _getTextOffscreen(useRichText) { -        await this._setupOffscreenDocument(); -        return new Promise((resolve, reject) => { -            const callback = (response) => { -                try { -                    resolve(this._getMessageResponseResult(response)); -                } catch (error) { -                    reject(error); -                } -            }; - -            chrome.runtime.sendMessage({action: 'clipboardGetOffscreen', params: {useRichText}}, callback); -        }); -    } -      async _onApiGetDisplayTemplatesHtml() {          return await this._fetchAsset('/display-templates.html');      } @@ -1634,6 +1624,20 @@ class Backend {          return await (json ? response.json() : response.text());      } +    _sendMessagePromise(...args) { +        return new Promise((resolve, reject) => { +            const callback = (response) => { +                try { +                    resolve(this._getMessageResponseResult(response)); +                } catch (error) { +                    reject(error); +                } +            }; + +            chrome.runtime.sendMessage(...args, callback); +        }); +    } +      _sendMessageIgnoreResponse(...args) {          const callback = () => this._checkLastError(chrome.runtime.lastError);          chrome.runtime.sendMessage(...args, callback); @@ -2244,6 +2248,14 @@ class Backend {          return results;      } +    async _getTextOffscreen(useRichText) { +        return this._sendMessagePromise({action: 'clipboardGetTextOffscreen', params: {useRichText}}); +    } + +    async _getImageOffscreen() { +        return this._sendMessagePromise({action: 'clipboardGetImageOffscreen'}); +    } +      _onApiOpenCrossFramePort({targetTabId, targetFrameId}, sender) {          const sourceTabId = (sender && sender.tab ? sender.tab.id : null);          if (typeof sourceTabId !== 'number') { @@ -2300,7 +2312,7 @@ class Backend {          this._creatingOffscreen = chrome.offscreen.createDocument({              url: 'offscreen.html',              reasons: ['CLIPBOARD'], -            justification: 'reason for needing the document' +            justification: 'Access to the clipboard'          });          await this._creatingOffscreen;          this._creatingOffscreen = null; diff --git a/ext/js/offscreen/offscreen-main.js b/ext/js/background/offscreen-main.js index 808e7766..808e7766 100644 --- a/ext/js/offscreen/offscreen-main.js +++ b/ext/js/background/offscreen-main.js diff --git a/ext/js/offscreen/offscreen.js b/ext/js/background/offscreen.js index 31e2c5d6..bc41d189 100644 --- a/ext/js/offscreen/offscreen.js +++ b/ext/js/background/offscreen.js @@ -37,7 +37,8 @@ class Offscreen {          });          this._messageHandlers = new Map([ -            ['clipboardGetOffscreen',                 {async: true,  contentScript: true,  handler: this._getTextHandler.bind(this)}] +            ['clipboardGetTextOffscreen',                 {async: true,  contentScript: true,  handler: this._getTextHandler.bind(this)}], +            ['clipboardGetImageOffscreen',                 {async: true,  contentScript: true,  handler: this._getImageHandler.bind(this)}]          ]);          const onMessage = this._onMessage.bind(this); @@ -48,6 +49,10 @@ class Offscreen {          return this._clipboardReader.getText(useRichText);      } +    _getImageHandler() { +        return this._clipboardReader.getImage(); +    } +      _onMessage({action, params}, sender, callback) {          const messageHandler = this._messageHandlers.get(action);          if (typeof messageHandler === 'undefined') { return false; } |