Skip to content

Commit

Permalink
Switch calls to webextensions
Browse files Browse the repository at this point in the history
  • Loading branch information
joelpurra committed Mar 17, 2017
1 parent 882def5 commit f726e66
Show file tree
Hide file tree
Showing 16 changed files with 78 additions and 78 deletions.
2 changes: 1 addition & 1 deletion .eslintrc
Expand Up @@ -10,7 +10,7 @@
"standard"
],
"globals": {
"chrome": false,
"browser": false,
},
"rules": {
"block-scoped-var": "error",
Expand Down
20 changes: 10 additions & 10 deletions src/background/background.js
Expand Up @@ -118,9 +118,9 @@ function main() {

// NOTE: "This event is not triggered for temporarily installed add-ons."
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/onInstalled#Compatibility_notes
if (chrome.runtime.onInstalled) {
if (browser.runtime.onInstalled) {
// NOTE: the onInstalled listener can't be added asynchronously
chrome.runtime.onInstalled.addListener(onExtensionInstalledHandler);
browser.runtime.onInstalled.addListener(onExtensionInstalledHandler);
} else {
onExtensionInstalledHandler();
}
Expand Down Expand Up @@ -152,27 +152,27 @@ function main() {
}());

(function addChromeListeners() {
chrome.tabs.onRemoved.addListener(() => talkieBackground.onTabRemovedHandler());
chrome.tabs.onUpdated.addListener(() => talkieBackground.onTabUpdatedHandler());
browser.tabs.onRemoved.addListener(() => talkieBackground.onTabRemovedHandler());
browser.tabs.onUpdated.addListener(() => talkieBackground.onTabUpdatedHandler());

// NOTE: not supported in Firefox (2017-03-15).
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/onSuspend#Browser_compatibility
if (chrome.runtime.onSuspend) {
chrome.runtime.onSuspend.addListener(() => talkieBackground.onExtensionSuspendHandler());
if (browser.runtime.onSuspend) {
browser.runtime.onSuspend.addListener(() => talkieBackground.onExtensionSuspendHandler());
}

// NOTE: used when the popup has been disabled.
chrome.browserAction.onClicked.addListener(() => talkieBackground.startStopSpeakSelectionOnPage());
browser.browserAction.onClicked.addListener(() => talkieBackground.startStopSpeakSelectionOnPage());

chrome.contextMenus.onClicked.addListener((info) => contextMenuManager.contextMenuClickAction(info));
browser.contextMenus.onClicked.addListener((info) => contextMenuManager.contextMenuClickAction(info));

// NOTE: might throw an unexpected error in Firefox due to command configuration in manifest.json.
// Does not seem to happen in Chrome.
// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/commands/onCommand
try {
chrome.commands.onCommand.addListener((command) => shortcutKeyManager.handler(command));
browser.commands.onCommand.addListener((command) => shortcutKeyManager.handler(command));
} catch (error) {
logError("chrome.commands.onCommand.addListener(...)", error);
logError("browser.commands.onCommand.addListener(...)", error);
}
}());

Expand Down
12 changes: 6 additions & 6 deletions src/background/button-popup-manager.js
Expand Up @@ -20,35 +20,35 @@ along with Talkie. If not, see <https://www.gnu.org/licenses/>.

export default class ButtonPopupManager {
constructor() {
this.buttonDefaultTitle = chrome.i18n.getMessage("buttonDefaultTitle");
this.buttonStopTitle = chrome.i18n.getMessage("buttonStopTitle");
this.buttonDefaultTitle = browser.i18n.getMessage("buttonDefaultTitle");
this.buttonStopTitle = browser.i18n.getMessage("buttonStopTitle");
}

disablePopup() {
const disablePopupOptions = {
popup: "",
};

chrome.browserAction.setPopup(disablePopupOptions);
browser.browserAction.setPopup(disablePopupOptions);

const disableIconTitleOptions = {
title: this.buttonStopTitle,
};

chrome.browserAction.setTitle(disableIconTitleOptions);
browser.browserAction.setTitle(disableIconTitleOptions);
};

enablePopup() {
const enablePopupOptions = {
popup: "src/popup/popup.html",
};

chrome.browserAction.setPopup(enablePopupOptions);
browser.browserAction.setPopup(enablePopupOptions);

const enableIconTitleOptions = {
title: this.buttonDefaultTitle,
};

chrome.browserAction.setTitle(enableIconTitleOptions);
browser.browserAction.setTitle(enableIconTitleOptions);
};
}
16 changes: 8 additions & 8 deletions src/background/context-menu-manager.js
Expand Up @@ -33,35 +33,35 @@ export default class ContextMenuManager {
this.contextMenuOptionsCollection = {
selectionContextMenuStartStop: {
id: "talkie-context-menu-start-stop",
title: chrome.i18n.getMessage("contextMenuStartStopText"),
title: browser.i18n.getMessage("contextMenuStartStopText"),
contexts: [
"selection",
],
},
buttonContextMenuStartStopDescription: {
id: "start-stop",
title: chrome.i18n.getMessage("commandStartStopDescription"),
title: browser.i18n.getMessage("commandStartStopDescription"),
contexts: [
"browser_action",
],
},
buttonContextMenuOpenWebsiteMainDescription: {
id: "open-website-main",
title: chrome.i18n.getMessage("commandOpenWebsiteMainDescription"),
title: browser.i18n.getMessage("commandOpenWebsiteMainDescription"),
contexts: [
"browser_action",
],
},
buttonContextMenuOpenWebsiteChromeWebStoreDescription: {
id: "open-website-chromewebstore",
title: chrome.i18n.getMessage("commandOpenWebsiteChromeWebStoreDescription"),
title: browser.i18n.getMessage("commandOpenWebsiteChromeWebStoreDescription"),
contexts: [
"browser_action",
],
},
buttonContextMenuOpenWebsiteDonateDescription: {
id: "open-website-donate",
title: chrome.i18n.getMessage("commandOpenWebsiteDonateDescription"),
title: browser.i18n.getMessage("commandOpenWebsiteDonateDescription"),
contexts: [
"browser_action",
],
Expand All @@ -75,11 +75,11 @@ export default class ContextMenuManager {
try {
log("Start", "Creating context menu", contextMenuOptions);

chrome.contextMenus.create(
browser.contextMenus.create(
contextMenuOptions,
() => {
if (chrome.runtime.lastError) {
return reject(chrome.runtime.lastError);
if (browser.runtime.lastError) {
return reject(browser.runtime.lastError);
}

log("Done", "Creating context menu", contextMenuOptions);
Expand Down
6 changes: 3 additions & 3 deletions src/background/icon-manager.js
Expand Up @@ -52,11 +52,11 @@ export default class IconManager {
path: paths,
};

chrome.browserAction.setIcon(
browser.browserAction.setIcon(
details,
() => {
if (chrome.runtime.lastError) {
return reject(chrome.runtime.lastError);
if (browser.runtime.lastError) {
return reject(browser.runtime.lastError);
}

log("Done", "Changing icon to", name);
Expand Down
26 changes: 13 additions & 13 deletions src/background/language.js
Expand Up @@ -41,26 +41,26 @@ import {
} from "../shared/configuration";

const noTextSelectedMessage = {
text: chrome.i18n.getMessage("noTextSelectedMessage"),
text: browser.i18n.getMessage("noTextSelectedMessage"),
effectiveLanguage: messagesLocale,
};

const noVoiceForLanguageDetectedMessage = {
text: chrome.i18n.getMessage("noVoiceForLanguageDetectedMessage"),
effectiveLanguage: chrome.i18n.getMessage("noVoiceForLanguageDetectedMessageLanguage"),
text: browser.i18n.getMessage("noVoiceForLanguageDetectedMessage"),
effectiveLanguage: browser.i18n.getMessage("noVoiceForLanguageDetectedMessageLanguage"),
};

export const detectPageLanguage = () => new Promise(
(resolve, reject) => {
try {
chrome.tabs.detectLanguage((language) => {
// https://developer.chrome.com/extensions/tabs#method-detectLanguage
if (chrome.runtime.lastError) {
browser.tabs.detectLanguage((language) => {
// https://developer.browser.com/extensions/tabs#method-detectLanguage
if (browser.runtime.lastError) {
// https://github.com/joelpurra/talkie/issues/3
// NOTE: It seems the Vivaldi browser doesn't (yet/always) support detectLanguage.
// As this is not critical, just log the error and resolve with null.
// return reject(chrome.runtime.lastError);
logError("detectPageLanguage", chrome.runtime.lastError);
// return reject(browser.runtime.lastError);
logError("detectPageLanguage", browser.runtime.lastError);

return resolve(null);
}
Expand All @@ -83,17 +83,17 @@ export const detectPageLanguage = () => new Promise(
const detectTextLanguage = (text) => new Promise(
(resolve, reject) => {
try {
if (!("detectLanguage" in chrome.i18n)) {
if (!("detectLanguage" in browser.i18n)) {
// NOTE: text-based language detection is only used as a fallback.
log("detectTextLanguage", "Browser does not support detecting text language");

return resolve(null);
}

chrome.i18n.detectLanguage(text, (result) => {
// https://developer.chrome.com/extensions/i18n#method-detectLanguage
if (chrome.runtime.lastError) {
return reject(chrome.runtime.lastError);
browser.i18n.detectLanguage(text, (result) => {
// https://developer.browser.com/extensions/i18n#method-detectLanguage
if (browser.runtime.lastError) {
return reject(browser.runtime.lastError);
}

// The language fallback value is "und", so treat it as no language.
Expand Down
8 changes: 4 additions & 4 deletions src/background/suspension-manager.js
Expand Up @@ -42,7 +42,7 @@ export default class SuspensionManager {
name: this.preventSuspensionPortName,
};

this.executeConnectFromContentCode = `var talkiePreventSuspensionPort = chrome.runtime.connect(${JSON.stringify(this.preventSuspensionConnectOptions)}); var preventExtensionSuspendConnectFromContentResult = { name: talkiePreventSuspensionPort.name }; preventExtensionSuspendConnectFromContentResult`;
this.executeConnectFromContentCode = `var talkiePreventSuspensionPort = browser.runtime.connect(${JSON.stringify(this.preventSuspensionConnectOptions)}); var preventExtensionSuspendConnectFromContentResult = { name: talkiePreventSuspensionPort.name }; preventExtensionSuspendConnectFromContentResult`;
}

executeConnectFromContent() {
Expand Down Expand Up @@ -74,7 +74,7 @@ export default class SuspensionManager {
return;
}

// NOTE: the chrome.runtime.onConnect event is triggered once per frame on the page.
// NOTE: the browser.runtime.onConnect event is triggered once per frame on the page.
// Save the first port, ignore the rest.
if (this.preventSuspensionProducingPort !== null) {
return;
Expand All @@ -87,7 +87,7 @@ export default class SuspensionManager {
this.preventSuspensionIntervalId = setInterval(messageProducer, 1000);
};

chrome.runtime.onConnect.addListener(onConnectProducingHandler);
browser.runtime.onConnect.addListener(onConnectProducingHandler);

log("Done", "preventExtensionSuspend");

Expand All @@ -103,7 +103,7 @@ export default class SuspensionManager {

if (this.preventSuspensionProducingPort !== null) {
try {
// https://developer.chrome.com/extensions/runtime#type-Port
// https://developer.browser.com/extensions/runtime#type-Port
// NOTE: should work irregardless if the port was connected or not.
this.preventSuspensionProducingPort.disconnect();
} catch (error) {
Expand Down
4 changes: 2 additions & 2 deletions src/background/talkie-background.js
Expand Up @@ -46,7 +46,7 @@ export default class TalkieBackground {
this.speakingStatus = speakingStatus;

this.notAbleToSpeakTextFromThisSpecialTab = {
text: chrome.i18n.getMessage("notAbleToSpeakTextFromThisSpecialTab"),
text: browser.i18n.getMessage("notAbleToSpeakTextFromThisSpecialTab"),
effectiveLanguage: messagesLocale,
};
}
Expand Down Expand Up @@ -155,7 +155,7 @@ export default class TalkieBackground {
return this.speakingStatus.isSpeakingTabId(tabId)
.then((isTabSpeaking) => {
// NOTE: changeInfo only has properties which have changed.
// https://developer.chrome.com/extensions/tabs#event-onUpdated
// https://developer.browser.com/extensions/tabs#event-onUpdated
if (isTabSpeaking && changeInfo.url) {
return this.talkieSpeaker.stopSpeaking()
.then(() => this.speakingStatus.setTabIsDoneSpeaking(tabId));
Expand Down
6 changes: 3 additions & 3 deletions src/frontend/shared-frontend.js
Expand Up @@ -51,7 +51,7 @@ const translateWindow = () => promiseTry(
const translationId = element.getAttribute(translateAttributeName);

if (typeof translationId === "string" && translationId.length > 0) {
const translated = chrome.i18n.getMessage(translationId);
const translated = browser.i18n.getMessage(translationId);

if (typeof translated === "string") {
element.textContent = translated;
Expand Down Expand Up @@ -96,14 +96,14 @@ const addLinkClickHandlers = () => promiseTry(

const addOptionsLinkClickHandlers = () => promiseTry(
() => {
// https://developer.chrome.com/extensions/optionsV2#linking
// https://developer.browser.com/extensions/optionsV2#linking
const optionsLinks = Array.from(document.querySelectorAll("[href='" + urls.options + "']"));

optionsLinks.forEach((optionsLink) => {
optionsLink.onclick = (event) => {
event.preventDefault();

chrome.runtime.openOptionsPage();
browser.runtime.openOptionsPage();

return false;
};
Expand Down
6 changes: 3 additions & 3 deletions src/options/options.html
Expand Up @@ -58,13 +58,13 @@ <h2 data-translate="frontend_aboutHeading"></h2>
<p data-translate="frontend_aboutThankYou"></p>
<ul>
<li>
<a href="https://browser.google.com/webstore/detail/talkie/enfbcfmmdpdminapkflljhbfeejjhjjk" data-translate="frontend_talkieInTheChromeWebStore"></a>
<a href="https://chrome.google.com/webstore/detail/talkie/enfbcfmmdpdminapkflljhbfeejjhjjk" data-translate="frontend_talkieInTheChromeWebStore"></a>
</li>
<li>
<a href="https://browser.google.com/webstore/detail/talkie/enfbcfmmdpdminapkflljhbfeejjhjjk/support" data-translate="frontend_supportAndFeedback"></a>
<a href="https://chrome.google.com/webstore/detail/talkie/enfbcfmmdpdminapkflljhbfeejjhjjk/support" data-translate="frontend_supportAndFeedback"></a>
</li>
<li>
<a href="https://browser.google.com/webstore/detail/talkie/enfbcfmmdpdminapkflljhbfeejjhjjk/reviews" data-translate="frontend_rateIt"></a>
<a href="https://chrome.google.com/webstore/detail/talkie/enfbcfmmdpdminapkflljhbfeejjhjjk/reviews" data-translate="frontend_rateIt"></a>
</li>
<li>
<a href="https://github.com/joelpurra/talkie" data-translate="frontend_aboutCodeOnGithubLinkText"></a>
Expand Down
2 changes: 1 addition & 1 deletion src/options/options.js
Expand Up @@ -146,7 +146,7 @@ const loadVoicesAndLanguages = () => promiseTry(
allLanguageOption.talkie.language = null;
allLanguageOption.talkie.voices = allVoices;

allLanguageOption.textContent = chrome.i18n.getMessage("frontend_voicesShowAllVoices");
allLanguageOption.textContent = browser.i18n.getMessage("frontend_voicesShowAllVoices");
allLanguageOption.selected = true;

voicesLanguagesListElement.appendChild(allLanguageOption);
Expand Down
4 changes: 2 additions & 2 deletions src/popup/popup.html
Expand Up @@ -39,10 +39,10 @@
<nav>
<ol>
<li>
<a href="https://browser.google.com/webstore/detail/talkie/enfbcfmmdpdminapkflljhbfeejjhjjk/support" data-translate="frontend_supportAndFeedback"></a>
<a href="https://chrome.google.com/webstore/detail/talkie/enfbcfmmdpdminapkflljhbfeejjhjjk/support" data-translate="frontend_supportAndFeedback"></a>
</li>
<li>
<a href="https://browser.google.com/webstore/detail/talkie/enfbcfmmdpdminapkflljhbfeejjhjjk/reviews" data-translate="frontend_rateIt"></a>
<a href="https://chrome.google.com/webstore/detail/talkie/enfbcfmmdpdminapkflljhbfeejjhjjk/reviews" data-translate="frontend_rateIt"></a>
</li>
<li>
<a id="go-to-options" href="chrome://extensions?options=enfbcfmmdpdminapkflljhbfeejjhjjk" data-translate="frontend_Options"></a>
Expand Down
6 changes: 3 additions & 3 deletions src/shared/configuration.js
Expand Up @@ -20,9 +20,9 @@ along with Talkie. If not, see <https://www.gnu.org/licenses/>.

import configuration from "../configuration.json";

export const extensionShortName = chrome.i18n.getMessage("extensionShortName");
export const extensionShortName = browser.i18n.getMessage("extensionShortName");

export const uiLocale = chrome.i18n.getMessage("@@ui_locale");
export const messagesLocale = chrome.i18n.getMessage("extensionLocale");
export const uiLocale = browser.i18n.getMessage("@@ui_locale");
export const messagesLocale = browser.i18n.getMessage("extensionLocale");

export const urls = configuration.urls;
12 changes: 6 additions & 6 deletions src/shared/execute.js
Expand Up @@ -35,15 +35,15 @@ export const executeScriptInTopFrame = (code) => new Promise(
try {
log("About to execute code in page context", code);

chrome.tabs.executeScript(
browser.tabs.executeScript(
{
allFrames: false,
matchAboutBlank: false,
code: code,
},
(result) => {
if (chrome.runtime.lastError) {
return reject(chrome.runtime.lastError);
if (browser.runtime.lastError) {
return reject(browser.runtime.lastError);
}

return resolve(result);
Expand All @@ -60,15 +60,15 @@ export const executeScriptInAllFrames = (code) => new Promise(
try {
log("About to execute code in page context", code);

chrome.tabs.executeScript(
browser.tabs.executeScript(
{
allFrames: true,
matchAboutBlank: true,
code: code,
},
(result) => {
if (chrome.runtime.lastError) {
return reject(chrome.runtime.lastError);
if (browser.runtime.lastError) {
return reject(browser.runtime.lastError);
}

return resolve(result);
Expand Down

0 comments on commit f726e66

Please sign in to comment.