From 7665739712d9ae1efb4e6f17f6b8097c0cf8b4ac Mon Sep 17 00:00:00 2001 From: Sam Macbeth Date: Fri, 24 Jan 2025 15:07:05 +0100 Subject: [PATCH] Fix cyclic dependency. We need to keep the popup-messaging file to handle static access to the messaging port. --- shared/js/background/before-request.js | 2 +- shared/js/background/companies.js | 2 +- .../background/components/message-router.js | 19 +++--------- .../background/components/toggle-reports.js | 2 +- shared/js/background/events.js | 2 +- shared/js/background/message-handlers.js | 2 +- shared/js/background/popup-messaging.js | 29 +++++++++++++++++++ 7 files changed, 38 insertions(+), 20 deletions(-) create mode 100644 shared/js/background/popup-messaging.js diff --git a/shared/js/background/before-request.js b/shared/js/background/before-request.js index 14ee703e0..40d40883e 100644 --- a/shared/js/background/before-request.js +++ b/shared/js/background/before-request.js @@ -1,7 +1,7 @@ import browser from 'webextension-polyfill'; import EventEmitter2 from 'eventemitter2'; import ATB from './atb'; -import { postPopupMessage } from './components/message-router'; +import { postPopupMessage } from './popup-messaging'; const utils = require('./utils'); const trackers = require('./trackers'); diff --git a/shared/js/background/companies.js b/shared/js/background/companies.js index 44789a7ca..557f62b4e 100644 --- a/shared/js/background/companies.js +++ b/shared/js/background/companies.js @@ -1,7 +1,7 @@ const TopBlocked = require('./classes/top-blocked'); const Company = require('./classes/company'); const browserWrapper = require('./wrapper'); -const { postPopupMessage } = require('./components/message-router'); +const { postPopupMessage } = require('./popup-messaging'); const Companies = (() => { let companyContainer = {}; diff --git a/shared/js/background/components/message-router.js b/shared/js/background/components/message-router.js index 036f3d2b0..717d92c2f 100644 --- a/shared/js/background/components/message-router.js +++ b/shared/js/background/components/message-router.js @@ -3,6 +3,7 @@ import browser from 'webextension-polyfill'; import messageHandlers from '../message-handlers'; import { getExtensionId } from '../wrapper'; import { getBrowserName } from '../utils'; +import { getActivePort, setActivePort } from '../popup-messaging'; /** * @typedef {import('webextension-polyfill').Runtime.Port} Port @@ -19,9 +20,6 @@ export class MessageReceivedEvent extends CustomEvent { } } -/** @type {Port?} */ -let activePort = null; - export default class MessageRouter extends EventTarget { constructor({ tabManager }) { super(); @@ -92,10 +90,10 @@ export default class MessageRouter extends EventTarget { * @param {Port} port */ popupConnectionOpened(port) { - activePort = port; + setActivePort(port); port.onDisconnect.addListener(() => { - if (activePort === port) { - activePort = null; + if (getActivePort() === port) { + setActivePort(null); } }); @@ -119,12 +117,3 @@ export default class MessageRouter extends EventTarget { }); } } - -/** - * Post a message to the popup UI, if it's open. - * - * @param {OutgoingPopupMessage} message - */ -export function postPopupMessage(message) { - activePort?.postMessage(message); -} diff --git a/shared/js/background/components/toggle-reports.js b/shared/js/background/components/toggle-reports.js index 692f3bde8..908a49810 100644 --- a/shared/js/background/components/toggle-reports.js +++ b/shared/js/background/components/toggle-reports.js @@ -1,6 +1,6 @@ import browser from 'webextension-polyfill'; import { registerMessageHandler } from '../message-handlers'; -import { postPopupMessage } from './message-router'; +import { postPopupMessage } from '../popup-messaging'; import settings from '../settings'; import { getFeatureSettings, reloadCurrentTab, resolveAfterDelay } from '../utils'; import { getDisclosureDetails, sendBreakageReportForCurrentTab } from '../broken-site-report'; diff --git a/shared/js/background/events.js b/shared/js/background/events.js index 8c78d2361..5d46ab091 100644 --- a/shared/js/background/events.js +++ b/shared/js/background/events.js @@ -10,7 +10,7 @@ import httpsStorage from './storage/https'; import ATB from './atb'; import { clearExpiredBrokenSiteReportTimes } from './broken-site-report'; import { sendPageloadsWithAdAttributionPixelAndResetCount } from './classes/ad-click-attribution-policy'; -import { postPopupMessage } from './components/message-router'; +import { postPopupMessage } from './popup-messaging'; const utils = require('./utils'); const experiment = require('./experiments'); const settings = require('./settings'); diff --git a/shared/js/background/message-handlers.js b/shared/js/background/message-handlers.js index d58456971..c4eb272f9 100644 --- a/shared/js/background/message-handlers.js +++ b/shared/js/background/message-handlers.js @@ -8,7 +8,7 @@ import { ensureClickToLoadRuleActionDisabled } from './dnr-click-to-load'; import tdsStorage from './storage/tds'; import { getArgumentsObject } from './helpers/arguments-object'; import { isFireButtonEnabled } from './components/fire-button'; -import { postPopupMessage } from './components/message-router'; +import { postPopupMessage } from './popup-messaging'; import ToggleReports from './components/toggle-reports'; const utils = require('./utils'); const settings = require('./settings'); diff --git a/shared/js/background/popup-messaging.js b/shared/js/background/popup-messaging.js new file mode 100644 index 000000000..173cc206f --- /dev/null +++ b/shared/js/background/popup-messaging.js @@ -0,0 +1,29 @@ +/** + * @typedef {import('webextension-polyfill').Runtime.Port} Port + * @typedef {import('@duckduckgo/privacy-dashboard/schema/__generated__/schema.types').IncomingExtensionMessage} OutgoingPopupMessage + */ + +// Messaging connection with the popup UI (when active). +/** @type {Port?} */ +let activePort = null; + +export function getActivePort() { + return activePort; +} + +/** + * + * @param {Port?} port + */ +export function setActivePort(port) { + activePort = port; +} + +/** + * Post a message to the popup UI, if it's open. + * + * @param {OutgoingPopupMessage} message + */ +export function postPopupMessage(message) { + activePort?.postMessage(message); +}