Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion injected/docs/features-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ Features are files stored in the `features/` directory that must include an `ini

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:

### `getFeatureSettingEnabled()`
### `getFeatureSettingEnabled(settingKeyName)`

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

For default Enabled use: `this.getFeatureSettingEnabled(settingKeyName, 'enabled')`

### `getFeatureSetting()`

Returns a specific setting from the feature settings
Expand Down
5 changes: 3 additions & 2 deletions injected/src/config-feature.js
Original file line number Diff line number Diff line change
Expand Up @@ -325,11 +325,12 @@ export default class ConfigFeature {
* ```
* This also supports domain overrides as per `getFeatureSetting`.
* @param {string} featureKeyName
* @param {'enabled' | 'disabled'} [defaultState]
* @param {string} [featureName]
* @returns {boolean}
*/
getFeatureSettingEnabled(featureKeyName, featureName) {
const result = this.getFeatureSetting(featureKeyName, featureName);
getFeatureSettingEnabled(featureKeyName, defaultState, featureName) {
const result = this.getFeatureSetting(featureKeyName, featureName) || defaultState;
if (typeof result === 'object') {
return result.state === 'enabled';
}
Expand Down
8 changes: 8 additions & 0 deletions injected/src/content-scope-features.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ export function load(args) {
if (featuresToLoad.includes(featureName)) {
const ContentFeature = platformFeatures['ddg_feature_' + featureName];
const featureInstance = new ContentFeature(featureName, importConfig, args);
// Short term fix to disable the feature whilst we roll out Android adsjs
if (!featureInstance.getFeatureSettingEnabled('additionalCheck', 'enabled')) {
continue;
}
featureInstance.callLoad();
features.push({ featureName, featureInstance });
}
Expand All @@ -74,6 +78,10 @@ export async function init(args) {
const resolvedFeatures = await Promise.all(features);
resolvedFeatures.forEach(({ featureInstance, featureName }) => {
if (!isFeatureBroken(args, featureName) || alwaysInitExtensionFeatures(args, featureName)) {
// Short term fix to disable the feature whilst we roll out Android adsjs
if (!featureInstance.getFeatureSettingEnabled('additionalCheck', 'enabled')) {
return;
}
featureInstance.callInit(args);
// Either listenForUrlChanges or urlChanged ensures the feature listens.
if (featureInstance.listenForUrlChanges || featureInstance.urlChanged) {
Expand Down
4 changes: 4 additions & 0 deletions injected/unit-test/content-feature.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@ describe('ContentFeature class', () => {
expect(this.getFeatureSetting('arrayTest')).toBe('enabledArray');
// Following key doesn't exist so it should return false
expect(this.getFeatureSettingEnabled('someNonExistantKey')).toBe(false);
expect(this.getFeatureSettingEnabled('someNonExistantKey', 'enabled')).toBe(true);
expect(this.getFeatureSettingEnabled('someNonExistantKey', 'disabled')).toBe(false);
expect(this.getFeatureSettingEnabled('disabledStatus')).toBe(false);
expect(this.getFeatureSettingEnabled('internalStatus')).toBe(false);
expect(this.getFeatureSettingEnabled('enabledStatus')).toBe(true);
expect(this.getFeatureSettingEnabled('enabledStatus', 'enabled')).toBe(true);
expect(this.getFeatureSettingEnabled('enabledStatus', 'disabled')).toBe(true);
expect(this.getFeatureSettingEnabled('overridenStatus')).toBe(false);
expect(this.getFeatureSettingEnabled('disabledOverridenStatus')).toBe(true);
expect(this.getFeatureSettingEnabled('statusObject')).toBe(true);
Expand Down
Loading
Loading