Skip to content

Commit 3819168

Browse files
Add additionalCheck for android rollout (#1908)
* Add additionalCheck for android rollout * Add test case * Simplify test case * Lint fix * Continue in the loop instead of return
1 parent 09c0a93 commit 3819168

File tree

5 files changed

+368
-3
lines changed

5 files changed

+368
-3
lines changed

injected/docs/features-guide.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ Features are files stored in the `features/` directory that must include an `ini
88

99
The [ConfigFeature](https://github.com/duckduckgo/content-scope-scripts/blob/main/injected/src/config-feature.js) class is extended by each feature to implement remote config handling. It provides the following methods:
1010

11-
### `getFeatureSettingEnabled()`
11+
### `getFeatureSettingEnabled(settingKeyName)`
1212

1313
For simple boolean settings, returns `true` if the setting is 'enabled'
1414

15+
For default Enabled use: `this.getFeatureSettingEnabled(settingKeyName, 'enabled')`
16+
1517
### `getFeatureSetting()`
1618

1719
Returns a specific setting from the feature settings

injected/src/config-feature.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,11 +325,12 @@ export default class ConfigFeature {
325325
* ```
326326
* This also supports domain overrides as per `getFeatureSetting`.
327327
* @param {string} featureKeyName
328+
* @param {'enabled' | 'disabled'} [defaultState]
328329
* @param {string} [featureName]
329330
* @returns {boolean}
330331
*/
331-
getFeatureSettingEnabled(featureKeyName, featureName) {
332-
const result = this.getFeatureSetting(featureKeyName, featureName);
332+
getFeatureSettingEnabled(featureKeyName, defaultState, featureName) {
333+
const result = this.getFeatureSetting(featureKeyName, featureName) || defaultState;
333334
if (typeof result === 'object') {
334335
return result.state === 'enabled';
335336
}

injected/src/content-scope-features.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ export function load(args) {
5656
if (featuresToLoad.includes(featureName)) {
5757
const ContentFeature = platformFeatures['ddg_feature_' + featureName];
5858
const featureInstance = new ContentFeature(featureName, importConfig, args);
59+
// Short term fix to disable the feature whilst we roll out Android adsjs
60+
if (!featureInstance.getFeatureSettingEnabled('additionalCheck', 'enabled')) {
61+
continue;
62+
}
5963
featureInstance.callLoad();
6064
features.push({ featureName, featureInstance });
6165
}
@@ -74,6 +78,10 @@ export async function init(args) {
7478
const resolvedFeatures = await Promise.all(features);
7579
resolvedFeatures.forEach(({ featureInstance, featureName }) => {
7680
if (!isFeatureBroken(args, featureName) || alwaysInitExtensionFeatures(args, featureName)) {
81+
// Short term fix to disable the feature whilst we roll out Android adsjs
82+
if (!featureInstance.getFeatureSettingEnabled('additionalCheck', 'enabled')) {
83+
return;
84+
}
7785
featureInstance.callInit(args);
7886
// Either listenForUrlChanges or urlChanged ensures the feature listens.
7987
if (featureInstance.listenForUrlChanges || featureInstance.urlChanged) {

injected/unit-test/content-feature.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,13 @@ describe('ContentFeature class', () => {
1111
expect(this.getFeatureSetting('arrayTest')).toBe('enabledArray');
1212
// Following key doesn't exist so it should return false
1313
expect(this.getFeatureSettingEnabled('someNonExistantKey')).toBe(false);
14+
expect(this.getFeatureSettingEnabled('someNonExistantKey', 'enabled')).toBe(true);
15+
expect(this.getFeatureSettingEnabled('someNonExistantKey', 'disabled')).toBe(false);
1416
expect(this.getFeatureSettingEnabled('disabledStatus')).toBe(false);
1517
expect(this.getFeatureSettingEnabled('internalStatus')).toBe(false);
1618
expect(this.getFeatureSettingEnabled('enabledStatus')).toBe(true);
19+
expect(this.getFeatureSettingEnabled('enabledStatus', 'enabled')).toBe(true);
20+
expect(this.getFeatureSettingEnabled('enabledStatus', 'disabled')).toBe(true);
1721
expect(this.getFeatureSettingEnabled('overridenStatus')).toBe(false);
1822
expect(this.getFeatureSettingEnabled('disabledOverridenStatus')).toBe(true);
1923
expect(this.getFeatureSettingEnabled('statusObject')).toBe(true);

0 commit comments

Comments
 (0)