Skip to content

Commit 85874be

Browse files
breakage reporting messaging for extensions (#2072)
* extension messaging for detector' * comments * fix getfeaturesetting * create singleton in getter * drop default config --------- Co-authored-by: Jonathan Kingston <jkingston@duckduckgo.com>
1 parent db751ac commit 85874be

File tree

6 files changed

+33
-52
lines changed

6 files changed

+33
-52
lines changed

injected/entry-points/extension-mv3.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*/
44
import { load, init, update } from '../src/content-scope-features.js';
55
import { computeLimitedSiteObject } from '../src/utils.js';
6+
import { getSharedMessagingTransport } from '../src/sendmessage-transport.js';
67

78
const secret = (crypto.getRandomValues(new Uint32Array(1))[0] / 2 ** 32).toString().replace('0.', '');
89

@@ -34,6 +35,16 @@ window.addEventListener(secret, ({ detail: encodedMessage }) => {
3435
init(message.argumentsObject);
3536
}
3637
break;
38+
default:
39+
// Messages with messageType are subscription responses from the extension.
40+
// Route them to the shared transport so all subscribed features receive them.
41+
if (message.messageType) {
42+
const transport = getSharedMessagingTransport();
43+
if (transport?.onResponse) {
44+
transport.onResponse(message);
45+
}
46+
}
47+
break;
3748
}
3849
});
3950

injected/src/detectors/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ detectors/
2020
│ └── fraud-detection.js # fraud/phishing warning utility
2121
├── utils/
2222
│ └── detection-utils.js # DOM helpers (selectors, text matching, visibility)
23-
└── default-config.js # fallback detector settings
2423
```
2524

2625
## How It Works

injected/src/detectors/default-config.js

Lines changed: 0 additions & 48 deletions
This file was deleted.

injected/src/features.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export const platformSupport = {
7979
'pageContext',
8080
'duckAiDataClearing',
8181
],
82-
firefox: ['cookie', ...baseFeatures, 'clickToLoad'],
82+
firefox: ['cookie', ...baseFeatures, 'clickToLoad', 'webInterferenceDetection', 'breakageReporting'],
8383
chrome: ['cookie', ...baseFeatures, 'clickToLoad', 'webInterferenceDetection', 'breakageReporting'],
8484
'chrome-mv3': ['cookie', ...baseFeatures, 'clickToLoad', 'webInterferenceDetection', 'breakageReporting'],
8585
integration: [...baseFeatures, ...otherFeatures],

injected/src/features/breakage-reporting.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export default class BreakageReporting extends ContentFeature {
2929
}
3030

3131
// Only run detectors if explicitly configured
32+
// Fetch interferenceTypes from webInterferenceDetection feature settings
3233
const detectorSettings = this.getFeatureSetting('interferenceTypes', 'webInterferenceDetection');
3334
if (detectorSettings) {
3435
result.detectorData = {

injected/src/sendmessage-transport.js

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,30 @@ import { TestTransportConfig } from '../../messaging/index.js';
66
* @typedef {import('@duckduckgo/messaging').MessagingTransport} MessagingTransport
77
*/
88

9+
/**
10+
* Singleton transport shared across all features. Without this, each feature would
11+
* have its own transport/queue and wouldn't receive messages meant for other features.
12+
* @type {SendMessageMessagingTransport | null}
13+
*/
14+
let sharedTransport = null;
15+
916
/**
1017
* @deprecated - A temporary constructor for the extension to make the messaging config
1118
*/
1219
export function extensionConstructMessagingConfig() {
13-
const messagingTransport = new SendMessageMessagingTransport();
14-
return new TestTransportConfig(messagingTransport);
20+
return new TestTransportConfig(getSharedMessagingTransport());
21+
}
22+
23+
/**
24+
* Used by entry-points to route incoming extension messages to onResponse().
25+
* Ensures a singleton transport exists.
26+
* @returns {SendMessageMessagingTransport}
27+
*/
28+
export function getSharedMessagingTransport() {
29+
if (!sharedTransport) {
30+
sharedTransport = new SendMessageMessagingTransport();
31+
}
32+
return sharedTransport;
1533
}
1634

1735
/**

0 commit comments

Comments
 (0)