diff --git a/src/background/main.background.ts b/src/background/main.background.ts index 7f2acd060b..6a5370bf6a 100644 --- a/src/background/main.background.ts +++ b/src/background/main.background.ts @@ -468,7 +468,7 @@ export default class MainBackground { continue; } - BrowserApi.tabSendMessage(tab, 'openNotificationBar', { + BrowserApi.tabSendMessageData(tab, 'openNotificationBar', { type: 'add', }); break; diff --git a/src/background/runtime.background.ts b/src/background/runtime.background.ts index 98ced34d37..7541d4d1aa 100644 --- a/src/background/runtime.background.ts +++ b/src/background/runtime.background.ts @@ -58,13 +58,13 @@ export default class RuntimeBackground { } break; case 'bgOpenNotificationBar': - await BrowserApi.tabSendMessage(sender.tab, 'openNotificationBar', msg.data); + await BrowserApi.tabSendMessageData(sender.tab, 'openNotificationBar', msg.data); break; case 'bgCloseNotificationBar': - await BrowserApi.tabSendMessage(sender.tab, 'closeNotificationBar'); + await BrowserApi.tabSendMessageData(sender.tab, 'closeNotificationBar'); break; case 'bgAdjustNotificationBar': - await BrowserApi.tabSendMessage(sender.tab, 'adjustNotificationBar', msg.data); + await BrowserApi.tabSendMessageData(sender.tab, 'adjustNotificationBar', msg.data); break; case 'bgCollectPageDetails': this.main.collectPageDetailsForContentScript(sender.tab, msg.sender, sender.frameId); @@ -88,7 +88,7 @@ export default class RuntimeBackground { switch (msg.sender) { case 'notificationBar': const forms = this.autofillService.getFormsWithPasswordFields(msg.details); - await BrowserApi.tabSendMessage(msg.tab, 'notificationBarPageDetails', { + await BrowserApi.tabSendMessageData(msg.tab, 'notificationBarPageDetails', { details: msg.details, forms: forms, }); @@ -166,7 +166,7 @@ export default class RuntimeBackground { eventAction: 'Added Login from Notification Bar', }); - BrowserApi.tabSendMessage(tab, 'closeNotificationBar'); + BrowserApi.tabSendMessageData(tab, 'closeNotificationBar'); } } @@ -185,7 +185,7 @@ export default class RuntimeBackground { this.main.loginsToAdd.splice(i, 1); const hostname = UtilsService.getHostname(tab.url); await this.cipherService.saveNeverDomain(hostname); - BrowserApi.tabSendMessage(tab, 'closeNotificationBar'); + BrowserApi.tabSendMessageData(tab, 'closeNotificationBar'); } } @@ -231,12 +231,12 @@ export default class RuntimeBackground { } } - private async currentTabSendMessage(command: string, data: any = null) { + private async currenttabSendMessageData(command: string, data: any = null) { const tab = await BrowserApi.getTabFromCurrentWindow(); if (tab == null) { return; } - await BrowserApi.tabSendMessage(tab, command, data); + await BrowserApi.tabSendMessageData(tab, command, data); } } diff --git a/src/browser/browserApi.ts b/src/browser/browserApi.ts index 6e5521b0fe..8387539c02 100644 --- a/src/browser/browserApi.ts +++ b/src/browser/browserApi.ts @@ -33,11 +33,7 @@ class BrowserApi { return null; } - static tabSendMessage(tab: any, command: string, data: any = null): Promise { - if (!tab || !tab.id) { - return; - } - + static tabSendMessageData(tab: any, command: string, data: any = null): Promise { const obj: any = { command: command, }; @@ -46,11 +42,23 @@ class BrowserApi { obj.data = data; } - return new Promise((resolve) => { - chrome.tabs.sendMessage(tab.id, obj, () => { - resolve(); + return BrowserApi.tabSendMessage(tab, obj); + } + + static tabSendMessage(tab: any, obj: any): Promise { + if (!tab || !tab.id) { + return; + } + + if (BrowserApi.isChromeApi) { + return new Promise((resolve) => { + chrome.tabs.sendMessage(tab.id, obj, () => { + resolve(); + }); }); - }); + } else if (BrowserApi.isSafariApi) { + // TODO + } } static getBackgroundPage(): any { @@ -102,6 +110,16 @@ class BrowserApi { return null; } } + + static messageListener(callback: (message: any, sender: any, response: any) => void) { + if (BrowserApi.isChromeApi) { + chrome.runtime.onMessage.addListener((msg: any, sender: any, response: any) => { + callback(msg, sender, response); + }); + } else if (BrowserApi.isSafariApi) { + // TODO + } + } } export { BrowserApi }; diff --git a/src/popup/app/current/current.component.ts b/src/popup/app/current/current.component.ts index 566a4176e5..b991f6cd44 100644 --- a/src/popup/app/current/current.component.ts +++ b/src/popup/app/current/current.component.ts @@ -1,5 +1,7 @@ import * as template from './current.component.html'; +import { BrowserApi } from '../../../browser/browserApi'; + import { CipherType } from 'jslib/enums/cipherType'; import { CipherService } from 'jslib/abstractions/cipher.service'; @@ -103,9 +105,9 @@ export class CurrentController { } private loadVault() { - chrome.tabs.query({ active: true, currentWindow: true }, (tabs: any) => { - if (tabs.length > 0) { - this.url = tabs[0].url; + BrowserApi.getTabFromCurrentWindow().then((tab: any) => { + if (tab) { + this.url = tab.url; } else { this.$timeout(() => { this.loaded = true; @@ -115,11 +117,11 @@ export class CurrentController { this.domain = this.platformUtilsService.getDomain(this.url); - chrome.tabs.sendMessage(tabs[0].id, { + BrowserApi.tabSendMessage(tab, { command: 'collectPageDetails', - tab: tabs[0], + tab: tab, sender: 'currentController', - }, () => { + }).then(() => { this.canAutofill = true; }); diff --git a/src/popup/app/global/main.controller.ts b/src/popup/app/global/main.controller.ts index 22ec60eaaa..4983ea4622 100644 --- a/src/popup/app/global/main.controller.ts +++ b/src/popup/app/global/main.controller.ts @@ -1,3 +1,5 @@ +import { BrowserApi } from '../../../browser/browserApi'; + import AuthService from '../services/auth.service'; import { UtilsService } from 'jslib/abstractions/utils.service'; @@ -23,7 +25,7 @@ export class MainController implements ng.IController { } }); - chrome.runtime.onMessage.addListener((msg: any, sender: any, sendResponse: any) => { + BrowserApi.messageListener((msg: any, sender: any, sendResponse: any) => { if (msg.command === 'syncCompleted') { $scope.$broadcast('syncCompleted', msg.successfully); } else if (msg.command === 'syncStarted') {