/* * Copyright (c) 2016-2017, Michael A. Updike All rights reserved. * Licensed under Apache 2.0 * https://opensource.org/licenses/Apache-2.0 * https://github.com/opus1269/chrome-extension-utils/blob/master/LICENSE.md */ window.Chrome = window.Chrome || {}; /** * Wrapper for chrome messages * @see https://developer.chrome.com/extensions/messaging * @namespace */ Chrome.Msg = (function() { 'use strict'; new ExceptionHandler(); /** * A Chrome message * @typedef {{}} Chrome.Msg.Message * @property {string} message - Unique name * @property {Error} error - an error * @property {string|Object} item - a message specific item * @property {boolean} updated - item is new or updated * @property {string} key - key name * @property {?Object} value - value of key * @memberOf Chrome.Msg */ /** * Chrome Messages * @type {{}} * @property {Chrome.Msg.Message} HIGHLIGHT - highlight a tab * @property {Chrome.Msg.Message} RESTORE_DEFAULTS - restore default settings * @property {Chrome.Msg.Message} STORAGE_EXCEEDED - local storage save failed * @property {Chrome.Msg.Message} STORE - save value to storage * @const * @private * @memberOf Chrome.Msg */ const _MSG = { HIGHLIGHT: { message: 'highlightTab', }, RESTORE_DEFAULTS: { message: 'restoreDefaults', }, STORAGE_EXCEEDED: { message: 'storageExceeded', }, STORE: { message: 'store', key: '', value: '', }, }; return { HIGHLIGHT: _MSG.HIGHLIGHT, RESTORE_DEFAULTS: _MSG.RESTORE_DEFAULTS, STORAGE_EXCEEDED: _MSG.STORAGE_EXCEEDED, STORE: _MSG.STORE, /** * Send a chrome message * @param {Chrome.Msg.Message} type - type of message * @returns {Promise<JSON>} response JSON * @memberOf Chrome.Msg */ send: function(type) { const chromep = new ChromePromise(); return chromep.runtime.sendMessage(type, null).then((response) => { return Promise.resolve(response); }).catch((err) => { if (err.message && !err.message.includes('port closed') && !err.message.includes('Receiving end does not exist')) { const msg = `type: ${type.message}, ${err.message}`; Chrome.GA.error(msg, 'Msg.send'); } return Promise.reject(err); }); }, /** * Add a listener for chrome messages * @param {Function} listener - function to receive messages * @memberOf Chrome.Msg */ listen: function(listener) { chrome.runtime.onMessage.addListener(listener); }, }; })();