--- about: description: Nimbus Feature Manifest for Fenix (Firefox Android) kotlin: package: org.mozilla.fenix class: .nimbus.FxNimbus channels: - release - beta - nightly - developer includes: - onboarding.fml.yaml import: - path: ../../android-components/components/service/nimbus/messaging.fml.yaml channel: release features: messaging: - value: triggers: # Using attributes built into the Nimbus SDK USER_RECENTLY_INSTALLED: days_since_install < 7 USER_RECENTLY_UPDATED: days_since_update < 7 && days_since_install != days_since_update USER_TIER_ONE_COUNTRY: ('US' in locale || 'GB' in locale || 'CA' in locale || 'DE' in locale || 'FR' in locale) USER_EN_SPEAKER: "'en' in locale" USER_ES_SPEAKER: "'es' in locale" USER_DE_SPEAKER: "'de' in locale" USER_FR_SPEAKER: "'fr' in locale" DEVICE_ANDROID: os == 'Android' DEVICE_IOS: os == 'iOS' ALWAYS: "true" NEVER: "false" DAY_1_AFTER_INSTALL: days_since_install == 1 DAY_2_AFTER_INSTALL: days_since_install == 2 DAY_3_AFTER_INSTALL: days_since_install == 3 DAY_4_AFTER_INSTALL: days_since_install == 4 DAY_5_AFTER_INSTALL: days_since_install == 5 MORE_THAN_24H_SINCE_INSTALLED_OR_UPDATED: days_since_update >= 1 # Using custom attributes for the browser I_AM_DEFAULT_BROWSER: "is_default_browser" I_AM_NOT_DEFAULT_BROWSER: "is_default_browser == false" USER_ESTABLISHED_INSTALL: "number_of_app_launches >=4" FUNNEL_PAID: "adjust_campaign != ''" FUNNEL_ORGANIC: "adjust_campaign == ''" # Using Glean events, specific to the browser INACTIVE_1_DAY: "'app_launched'|eventLastSeen('Hours') >= 24" INACTIVE_2_DAYS: "'app_launched'|eventLastSeen('Days', 0) >= 2" INACTIVE_3_DAYS: "'app_launched'|eventLastSeen('Days', 0) >= 3" INACTIVE_4_DAYS: "'app_launched'|eventLastSeen('Days', 0) >= 4" INACTIVE_5_DAYS: "'app_launched'|eventLastSeen('Days', 0) >= 5" # Has the user signed in the last 4 years FXA_SIGNED_IN: "'sync_auth.sign_in'|eventLastSeen('Years', 0) <= 4" FXA_NOT_SIGNED_IN: "'sync_auth.sign_in'|eventLastSeen('Years', 0) > 4" # https://mozilla-hub.atlassian.net/wiki/spaces/FJT/pages/11469471/Core+Active USER_INFREQUENT: "'app_launched'|eventCountNonZero('Days', 28) >= 1 && 'app_launched'|eventCountNonZero('Days', 28) < 7" USER_CASUAL: "'app_launched'|eventCountNonZero('Days', 28) >= 7 && 'app_launched'|eventCountNonZero('Days', 28) < 14" USER_REGULAR: "'app_launched'|eventCountNonZero('Days', 28) >= 14 && 'app_launched'|eventCountNonZero('Days', 28) < 21" USER_CORE_ACTIVE: "'app_launched'|eventCountNonZero('Days', 28) >= 21" LAUNCHED_ONCE_THIS_WEEK: "'app_launched'|eventSum('Days', 7) == 1" actions: ENABLE_PRIVATE_BROWSING: ://enable_private_browsing INSTALL_SEARCH_WIDGET: ://install_search_widget MAKE_DEFAULT_BROWSER: ://make_default_browser VIEW_BOOKMARKS: ://urls_bookmarks VIEW_COLLECTIONS: ://home_collections VIEW_HISTORY: ://urls_history VIEW_HOMESCREEN: ://home OPEN_SETTINGS_ACCESSIBILITY: ://settings_accessibility OPEN_SETTINGS_ADDON_MANAGER: ://settings_addon_manager OPEN_SETTINGS_DELETE_BROWSING_DATA: ://settings_delete_browsing_data OPEN_SETTINGS_LOGINS: ://settings_logins OPEN_SETTINGS_NOTIFICATIONS: ://settings_notifications OPEN_SETTINGS_PRIVACY: ://settings_privacy OPEN_SETTINGS_SEARCH_ENGINE: ://settings_search_engine OPEN_SETTINGS_TRACKING_PROTECTION: ://settings_tracking_protection OPEN_SETTINGS_WALLPAPERS: ://settings_wallpapers OPEN_SETTINGS: ://settings TURN_ON_SYNC: ://turn_on_sync styles: DEFAULT: priority: 50 max-display-count: 5 SURVEY: priority: 55 max-display-count: 1 PERSISTENT: priority: 50 max-display-count: 20 WARNING: priority: 60 max-display-count: 10 URGENT: priority: 100 max-display-count: 10 NOTIFICATION: priority: 50 max-display-count: 1 messages: default-browser: text: default_browser_experiment_card_text surface: homescreen action: "MAKE_DEFAULT_BROWSER" trigger: [ "I_AM_NOT_DEFAULT_BROWSER","USER_ESTABLISHED_INSTALL" ] style: PERSISTENT button-label: preferences_set_as_default_browser default-browser-notification: title: nimbus_notification_default_browser_title text: nimbus_notification_default_browser_text surface: notification style: NOTIFICATION trigger: - I_AM_NOT_DEFAULT_BROWSER - DAY_3_AFTER_INSTALL action: MAKE_DEFAULT_BROWSER - channel: developer value: styles: DEFAULT: priority: 50 max-display-count: 100 EXPIRES_QUICKLY: priority: 100 max-display-count: 1 notification-config: refresh-interval: 120 # minutes (2 hours) - path: ../../android-components/components/browser/engine-gecko/geckoview.fml.yaml channel: release features: pdfjs: - channel: developer value: { download-button: true, open-in-app-button: true } features: toolbar: description: The searchbar/awesomebar that user uses to search. variables: toolbar-position-top: description: If true, toolbar appears at top of the screen. type: Boolean default: false homescreen: description: The homescreen that the user goes to when they press home or new tab. variables: sections-enabled: description: "This property provides a lookup table of whether or not the given section should be enabled. If the section is enabled, it should be toggleable in the settings screen, and on by default." type: Map default: { "top-sites": true, "jump-back-in": true, "recently-saved": true, "recent-explorations": true, "pocket": true, "pocket-sponsored-stories": true, } defaults: - channel: nightly value: { "sections-enabled": { "top-sites": true, "jump-back-in": true, "recently-saved": true, "recent-explorations": true, "pocket": true, } } nimbus-validation: description: "A feature that does not correspond to an application feature suitable for showing that Nimbus is working. This should never be used in production." variables: settings-title: description: The title of displayed in the Settings screen and app menu. type: Text default: browser_menu_settings settings-punctuation: description: The emoji displayed in the Settings screen title. type: String default: "" settings-icon: description: The drawable displayed in the app menu for Settings type: String default: mozac_ic_settings search-term-groups: description: A feature allowing the grouping of URLs around the search term that it came from. variables: enabled: description: If true, the feature shows up on the homescreen and on the new tab screen. type: Boolean default: false defaults: - channel: nightly value: enabled: true - channel: developer value: enabled: true mr2022: description: Features for MR 2022. variables: sections-enabled: description: "This property provides a lookup table of whether or not the given section should be enabled." type: Map default: { "home-onboarding-dialog-existing-users": true, "sync-cfr": true, "wallpapers-selection-tool": true, "jump-back-in-cfr": true, "tcp-cfr": true, "tcp-feature": true, } defaults: - channel: developer value: { "sections-enabled": { "home-onboarding-dialog-existing-users": true, "sync-cfr": true, "wallpapers-selection-tool": true, "jump-back-in-cfr": true, } } cookie-banners: description: Features for cookie banner handling. variables: sections-enabled: description: "This property provides a lookup table of whether or not the given section should be enabled." type: Map default: { "feature-ui": 0, "feature-setting-value": 0, "dialog-re-engage-time": 4 } defaults: - channel: developer value: { "sections-enabled": { "feature-ui": 1, "feature-setting-value": 0, "dialog-re-engage-time": 4 } } - channel: nightly value: { "sections-enabled": { "feature-ui": 1, "feature-setting-value": 0, "dialog-re-engage-time": 4 } } unified-search: description: A feature allowing user to easily search for specified results directly in the search bar. variables: enabled: description: If true, the feature shows up in the search bar. type: Boolean default: true growth-data: description: A feature measuring campaign growth data variables: enabled: description: If true, the feature is active type: Boolean default: false defaults: - channel: release value: enabled: true re-engagement-notification: description: A feature that shows the re-engagement notification if the user is inactive. variables: enabled: description: If true, the re-engagement notification is shown to the inactive user. type: Boolean default: false type: description: The type of re-engagement notification that is shown to the inactive user. type: Int default: 0 pre-permission-notification-prompt: description: A feature that shows the pre-permission notification prompt. variables: enabled: description: if true, the pre-permission notification prompt is shown to the user. type: Boolean default: false onboarding: description: "A feature that configures the new user onboarding page. Note that onboarding is a **first run** feature, and should only be modified by first run experiments." variables: order: description: Determines the order of the onboarding page panels type: List default: ["themes", "toolbar-placement", "sync", "tcp", "privacy-notice"] glean: description: "A feature that provides server-side configurations for Glean metrics (aka Server Knobs)." variables: metrics-enabled: description: "A map of metric base-identifiers to booleans representing the state of the 'enabled' flag for that metric." type: Map default: {} splash-screen: description: "A feature that extends splash screen duration, allowing additional data fetching time for the app's initial run." variables: enabled: description: "If true, the feature is active." type: Boolean default: false maximum_duration_ms: description: The maximum amount of time in milliseconds the splashscreen will be visible while waiting for initialization calls to complete. type: Int default: 0 shopping-experience: description: A feature that shows product review quality information. variables: enabled: description: if true, the shopping experience feature is shown to the user. type: Boolean default: false defaults: - channel: developer value: enabled: true search-extra-params: description: A feature that provides additional args for search. variables: enabled: description: If true, the feature is active. type: Boolean default: false search-engine: description: The search engine name. type: String default: "" feature-enabler: description: The feature enabler param name with arg, NOTE this map could be empty. type: Map default: {} channel-id: description: The channel Id param name with arg. type: Map default: {} types: objects: {} enums: HomeScreenSection: description: The identifiers for the sections of the homescreen. variants: top-sites: description: The frecency and pinned sites. recently-saved: description: The sites the user has bookmarked recently. jump-back-in: description: The tabs the user was looking immediately before being interrupted. recent-explorations: description: The tab groups pocket: description: The pocket section. This should only be available in the US. pocket-sponsored-stories: description: Subsection of the Pocket homescreen section which shows sponsored stories. MR2022Section: description: The identifiers for the sections of the MR 2022. variants: home-onboarding-dialog-existing-users: description: Home onboarding dialog for upgraded users. sync-cfr: description: CFR for the first time you see a synced tab on the home screen. wallpapers-selection-tool: description: Wallpapers selection dialog tool for the home screen. jump-back-in-cfr: description: Jump back-in onboarding message. tcp-cfr: description: CFR for the first time you use the browse with Total Cookie Protection on the browser screen. tcp-feature: description: Controls the Total Cookie Protection feature. CookieBannersSection: description: The identifiers for the sections of the MR 2022. variants: feature-ui: description: An integer either 0 or 1 indicating if the UI for cookie banner handling should be visible, 0 to hide the UI and 1 to show the UI. The actual UI is composed by cookie banner section in the settings page, the toolbar section and the re-engagement dialog. feature-setting-value: description: An integer either 0 or 1 indicating if cookie banner setting should be enabled or disabled, 0 for setting the value to disabled, 1 for enabling the setting with the value reject_all. dialog-re-engage-time: description: An integer indicating the number of hours that needs to happen before the re-engagement dialog shows again since the last seen, for example if set to 4 that means if the users has seen the dialog, it will see it 4 hours later. OnboardingPanel: description: The types of onboarding panels in the onboarding page variants: themes: description: The themes onboarding panel where users pick themes toolbar-placement: description: The onboarding panel where users choose their toolbar placement (bottom or top) sync: description: The onboarding panel where users can sign in to sync tcp: description: The onboarding panel where users can choose their total cookie protection settings privacy-notice: description: The onboarding panel where users can tap to view our privacy notice.