diff options
Diffstat (limited to 'ext/js/background')
| -rw-r--r-- | ext/js/background/backend.js | 22 | ||||
| -rw-r--r-- | ext/js/background/offscreen-proxy.js | 27 | ||||
| -rw-r--r-- | ext/js/background/offscreen.js | 9 | ||||
| -rw-r--r-- | ext/js/background/request-builder.js | 13 | 
4 files changed, 48 insertions, 23 deletions
| diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js index 14877cf1..be68ecf4 100644 --- a/ext/js/background/backend.js +++ b/ext/js/background/backend.js @@ -96,7 +96,7 @@ export class Backend {          });          /** @type {?import('settings').Options} */          this._options = null; -        /** @type {JsonSchema[]} */ +        /** @type {import('../data/json-schema.js').JsonSchema[]} */          this._profileConditionsSchemaCache = [];          /** @type {ProfileConditionsUtil} */          this._profileConditionsUtil = new ProfileConditionsUtil(); @@ -665,7 +665,7 @@ export class Backend {      async _onApiInjectStylesheet({type, value}, sender) {          const {frameId, tab} = sender;          if (typeof tab !== 'object' || tab === null || typeof tab.id !== 'number') { throw new Error('Invalid tab'); } -        return await this._scriptManager.injectStylesheet(type, value, tab.id, frameId, false, true, 'document_start'); +        return await this._scriptManager.injectStylesheet(type, value, tab.id, frameId, false);      }      /** @type {import('api').Handler<import('api').GetStylesheetContentDetails, import('api').GetStylesheetContentResult>} */ @@ -895,13 +895,7 @@ export class Backend {          }      } -    /** -     * -     * @param root0 -     * @param root0.targetTabId -     * @param root0.targetFrameId -     * @param sender -     */ +    /** @type {import('api').Handler<import('api').OpenCrossFramePortDetails, import('api').OpenCrossFramePortResult, true>} */      _onApiOpenCrossFramePort({targetTabId, targetFrameId}, sender) {          const sourceTabId = (sender && sender.tab ? sender.tab.id : null);          if (typeof sourceTabId !== 'number') { @@ -922,7 +916,9 @@ export class Backend {              otherTabId: sourceTabId,              otherFrameId: sourceFrameId          }; +        /** @type {?chrome.runtime.Port} */          let sourcePort = chrome.tabs.connect(sourceTabId, {frameId: sourceFrameId, name: JSON.stringify(sourceDetails)}); +        /** @type {?chrome.runtime.Port} */          let targetPort = chrome.tabs.connect(targetTabId, {frameId: targetFrameId, name: JSON.stringify(targetDetails)});          const cleanup = () => { @@ -937,8 +933,12 @@ export class Backend {              }          }; -        sourcePort.onMessage.addListener((message) => { targetPort.postMessage(message); }); -        targetPort.onMessage.addListener((message) => { sourcePort.postMessage(message); }); +        sourcePort.onMessage.addListener((message) => { +            if (targetPort !== null) { targetPort.postMessage(message); } +        }); +        targetPort.onMessage.addListener((message) => { +            if (sourcePort !== null) { sourcePort.postMessage(message); } +        });          sourcePort.onDisconnect.addListener(cleanup);          targetPort.onDisconnect.addListener(cleanup); diff --git a/ext/js/background/offscreen-proxy.js b/ext/js/background/offscreen-proxy.js index c01f523d..0fb2f269 100644 --- a/ext/js/background/offscreen-proxy.js +++ b/ext/js/background/offscreen-proxy.js @@ -16,7 +16,7 @@   * along with this program.  If not, see <https://www.gnu.org/licenses/>.   */ -import {deserializeError, isObject} from '../core.js'; +import {isObject} from '../core.js';  import {ArrayBufferUtil} from '../data/sandbox/array-buffer-util.js';  export class OffscreenProxy { @@ -158,15 +158,36 @@ export class TranslatorProxy {  }  export class ClipboardReaderProxy { +    /** +     * @param {OffscreenProxy} offscreen +     */      constructor(offscreen) { +        /** @type {?import('environment').Browser} */ +        this._browser = null; +        /** @type {OffscreenProxy} */          this._offscreen = offscreen;      } +    /** @type {?import('environment').Browser} */ +    get browser() { return this._browser; } +    set browser(value) { +        if (this._browser === value) { return; } +        this._browser = value; +        this._offscreen.sendMessagePromise({action: 'clipboardSetBrowserOffsecreen', params: {value}}); +    } + +    /** +     * @param {boolean} useRichText +     * @returns {Promise<string>} +     */      async getText(useRichText) { -        return this._offscreen.sendMessagePromise({action: 'clipboardGetTextOffscreen', params: {useRichText}}); +        return await this._offscreen.sendMessagePromise({action: 'clipboardGetTextOffscreen', params: {useRichText}});      } +    /** +     * @returns {Promise<?string>} +     */      async getImage() { -        return this._offscreen.sendMessagePromise({action: 'clipboardGetImageOffscreen'}); +        return await this._offscreen.sendMessagePromise({action: 'clipboardGetImageOffscreen'});      }  } diff --git a/ext/js/background/offscreen.js b/ext/js/background/offscreen.js index 27cee8c4..6302aa84 100644 --- a/ext/js/background/offscreen.js +++ b/ext/js/background/offscreen.js @@ -50,6 +50,7 @@ export class Offscreen {          this._messageHandlers = new Map([              ['clipboardGetTextOffscreen',    {async: true,  contentScript: true,  handler: this._getTextHandler.bind(this)}],              ['clipboardGetImageOffscreen',   {async: true,  contentScript: true,  handler: this._getImageHandler.bind(this)}], +            ['clipboardSetBrowserOffsecreen', {async: false, contentScript: true, handler: this._setClipboardBrowser.bind(this)}],              ['databasePrepareOffscreen',     {async: true,  contentScript: true,  handler: this._prepareDatabaseHandler.bind(this)}],              ['getDictionaryInfoOffscreen',   {async: true,  contentScript: true,  handler: this._getDictionaryInfoHandler.bind(this)}],              ['databasePurgeOffscreen',       {async: true,  contentScript: true,  handler: this._purgeDatabaseHandler.bind(this)}], @@ -59,7 +60,6 @@ export class Offscreen {              ['findTermsOffscreen',           {async: true,  contentScript: true,  handler: this._findTermsHandler.bind(this)}],              ['getTermFrequenciesOffscreen',  {async: true,  contentScript: true,  handler: this._getTermFrequenciesHandler.bind(this)}],              ['clearDatabaseCachesOffscreen', {async: false,  contentScript: true,  handler: this._clearDatabaseCachesHandler.bind(this)}] -          ]);          const onMessage = this._onMessage.bind(this); @@ -76,6 +76,13 @@ export class Offscreen {          return this._clipboardReader.getImage();      } +    /** +     * @param {{value: import('environment').Browser}} details +     */ +    _setClipboardBrowser({value}) { +        this._clipboardReader.browser = value; +    } +      _prepareDatabaseHandler() {          if (this._prepareDatabasePromise !== null) {              return this._prepareDatabasePromise; diff --git a/ext/js/background/request-builder.js b/ext/js/background/request-builder.js index 48fe2dd9..5ae7fbf5 100644 --- a/ext/js/background/request-builder.js +++ b/ext/js/background/request-builder.js @@ -22,12 +22,6 @@   */  export class RequestBuilder {      /** -     * A progress callback for a fetch read. -     * @callback ProgressCallback -     * @param {boolean} complete Whether or not the data has been completely read. -     */ - -    /**       * Creates a new instance.       */      constructor() { @@ -109,14 +103,17 @@ export class RequestBuilder {      /**       * Reads the array buffer body of a fetch response, with an optional `onProgress` callback.       * @param {Response} response The response of a `fetch` call. -     * @param {ProgressCallback} onProgress The progress callback +     * @param {?import('request-builder.js').ProgressCallback} onProgress The progress callback       * @returns {Promise<Uint8Array>} The resulting binary data.       */      static async readFetchResponseArrayBuffer(response, onProgress) {          let reader;          try {              if (typeof onProgress === 'function') { -                reader = response.body.getReader(); +                const {body} = response; +                if (body !== null) { +                    reader = body.getReader(); +                }              }          } catch (e) {              // Not supported |