From 04d6df89ee65e516eccaefa81e392df8d159f62f Mon Sep 17 00:00:00 2001 From: Experimenter Bot Date: Fri, 15 May 2026 15:07:50 +0000 Subject: [PATCH] chore(nimbus): Update External Configs --- .../features/manifests/fenix/.ref-cache.yaml | 2 +- .../manifests/firefox-desktop/.ref-cache.yaml | 2 +- .../features/manifests/ios/.ref-cache.yaml | 5 +- .../ios/v151.0.1/RecordedNimbusContext.swift | 226 +++ .../manifests/ios/v151.0.1/beta.fml.yaml | 1625 ++++++++++++++++ .../manifests/ios/v151.0.1/developer.fml.yaml | 1635 +++++++++++++++++ .../manifests/ios/v151.0.1/experimenter.yaml | 572 ++++++ .../manifests/ios/v151.0.1/release.fml.yaml | 1607 ++++++++++++++++ 8 files changed, 5670 insertions(+), 4 deletions(-) create mode 100644 experimenter/experimenter/features/manifests/ios/v151.0.1/RecordedNimbusContext.swift create mode 100644 experimenter/experimenter/features/manifests/ios/v151.0.1/beta.fml.yaml create mode 100644 experimenter/experimenter/features/manifests/ios/v151.0.1/developer.fml.yaml create mode 100644 experimenter/experimenter/features/manifests/ios/v151.0.1/experimenter.yaml create mode 100644 experimenter/experimenter/features/manifests/ios/v151.0.1/release.fml.yaml diff --git a/experimenter/experimenter/features/manifests/fenix/.ref-cache.yaml b/experimenter/experimenter/features/manifests/fenix/.ref-cache.yaml index 055a67676..0e4a9daaf 100644 --- a/experimenter/experimenter/features/manifests/fenix/.ref-cache.yaml +++ b/experimenter/experimenter/features/manifests/fenix/.ref-cache.yaml @@ -1,3 +1,3 @@ beta: 83e871927810f621bb3067b265649aa9505ad84f -main: e374045fac6f19383a04d087d2930ced5c1551fe +main: 6e32b4962597e60549f9fc289aa627cae508887c release: 91d93ddd290c6fc70df44dbdc363fc5a0a6306c5 diff --git a/experimenter/experimenter/features/manifests/firefox-desktop/.ref-cache.yaml b/experimenter/experimenter/features/manifests/firefox-desktop/.ref-cache.yaml index cb354dddb..0b4eeb6e1 100644 --- a/experimenter/experimenter/features/manifests/firefox-desktop/.ref-cache.yaml +++ b/experimenter/experimenter/features/manifests/firefox-desktop/.ref-cache.yaml @@ -2,5 +2,5 @@ beta: 83e871927810f621bb3067b265649aa9505ad84f esr115: 84341e2725284f1e82f53127f28289454daee783 esr128: ed38f9209e39bd7ad247c81a7c20c99c874e0a62 esr140: ef9fef7a9928dfbea50e89a256d44492c2d28ca1 -main: e374045fac6f19383a04d087d2930ced5c1551fe +main: 6e32b4962597e60549f9fc289aa627cae508887c release: 91d93ddd290c6fc70df44dbdc363fc5a0a6306c5 diff --git a/experimenter/experimenter/features/manifests/ios/.ref-cache.yaml b/experimenter/experimenter/features/manifests/ios/.ref-cache.yaml index 87abbc5e7..904b6a30b 100644 --- a/experimenter/experimenter/features/manifests/ios/.ref-cache.yaml +++ b/experimenter/experimenter/features/manifests/ios/.ref-cache.yaml @@ -90,7 +90,8 @@ firefox-v150.0: a931ff36e4b0152c6a0e9d98a5106fa849a5c1d3 firefox-v150.1: 341e96bda4dd657970d3c0db7f71b08f9eadb395 firefox-v150.2: e50ecad2a9ff5721f95e66419b3c025aaa4b951c firefox-v150.3: f8f596bfd2b5ca83a77d8bf54eb3d2cbec395671 -main: a1f774839a3023e070a74b13f1773af661872e77 +firefox-v151.0: c5f54f750bc1c32c555647aee66f17820eaac86b +main: e5dd824f75bff304dbe19b8a08bb0777d9393f95 release/v117: 43b690c450066d4dde1b2ccb93ed3714d244d502 release/v118: 89a7ea3c3372e5a4ef5b3c5b85499d26198d0524 release/v119: 7dc381f991c6d2a983c3ba7f0cffd880e8c29e7b @@ -150,7 +151,7 @@ release/v150.0: 251a757be907f072173c4173dae2804c79e0170d release/v150.1: 9998525d32525e507ad894bf734cc89d19f6ba62 release/v150.2: 3105b1d8b15ad82a4794b15ba3e09ed0bd7801d6 release/v150.3: a88b27cb23568f0b7e8f7e782e393a882e74fd6e -release/v151.0: c5f54f750bc1c32c555647aee66f17820eaac86b +release/v151.0: 86de6b1abdcd59e48dfa236ee323496583b24168 v117.0: 3b275ab1e4ccef769d84437033c0c68acfd2df8a v117.1: 55ddcf473a65d106d43f6d2ae5af4076d6d03688 v117.2: 5cc367aa8857199cd8a54d53e8faf6696c5614c3 diff --git a/experimenter/experimenter/features/manifests/ios/v151.0.1/RecordedNimbusContext.swift b/experimenter/experimenter/features/manifests/ios/v151.0.1/RecordedNimbusContext.swift new file mode 100644 index 000000000..da032b579 --- /dev/null +++ b/experimenter/experimenter/features/manifests/ios/v151.0.1/RecordedNimbusContext.swift @@ -0,0 +1,226 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/ + +import Common +import Foundation +import Glean +import Shared + +import class MozillaAppServices.NimbusGleanPings +import func MozillaAppServices.getCalculatedAttributes +import func MozillaAppServices.getLocaleTag +import struct MozillaAppServices.JsonObject +import protocol MozillaAppServices.RecordedContext +import MozillaRustComponents + +private extension Double? { + func toInt64() -> Int64? { + guard let self = self else { return nil } + return Int64(self) + } +} + +extension Int32? { + func toInt64() -> Int64? { + guard let self = self else { return nil } + return Int64(self) + } +} + +/// TODO(FXIOS-12942): Implement proper thread-safety +final class RecordedNimbusContext: RecordedContext, @unchecked Sendable { + /** + * The following constants are string constants of the keys that appear in the [EVENT_QUERIES] map. + */ + static let DAYS_OPENED_IN_LAST_28 = "days_opened_in_last_28" + + /** + * [EVENT_QUERIES] is a map of keys to Nimbus SDK EventStore queries. + */ + static let EVENT_QUERIES = [ + DAYS_OPENED_IN_LAST_28: "'events.app_opened'|eventCountNonZero('Days', 28, 0)", + ] + + var isFirstRun: Bool + var isPhone: Bool + var isDefaultBrowser: Bool + var isBottomToolbarUser: Bool + var hasEnabledTipsNotifications: Bool + var hasAcceptedTermsOfUse: Bool + var userDisabledAi: Bool + var isAppleIntelligenceAvailable: Bool + var cannotUseAppleIntelligence: Bool + var appVersion: String? + var region: String? + var language: String? + var locale: String + var daysSinceInstall: Int32? + var daysSinceUpdate: Int32? + var touExperiencePoints: Int32? + + private var eventQueries: [String: String] + private var eventQueryValues: [String: Double] = [:] + + private var logger: Logger + + init(isFirstRun: Bool, + isDefaultBrowser: Bool, + isBottomToolbarUser: Bool, + hasEnabledTipsNotifications: Bool, + hasAcceptedTermsOfUse: Bool, + userDisabledAi: Bool, + isAppleIntelligenceAvailable: Bool, + cannotUseAppleIntelligence: Bool, + eventQueries: [String: String] = RecordedNimbusContext.EVENT_QUERIES, + isPhone: Bool = UIDeviceDetails.userInterfaceIdiom == .phone, + bundle: Bundle = Bundle.main, + logger: Logger = DefaultLogger.shared) { + self.logger = logger + logger.log("init start", level: .debug, category: .experiments) + self.eventQueries = eventQueries + + self.isFirstRun = isFirstRun + self.isPhone = isPhone + self.isDefaultBrowser = isDefaultBrowser + self.isBottomToolbarUser = isBottomToolbarUser + self.hasEnabledTipsNotifications = hasEnabledTipsNotifications + self.hasAcceptedTermsOfUse = hasAcceptedTermsOfUse + self.userDisabledAi = userDisabledAi + self.isAppleIntelligenceAvailable = isAppleIntelligenceAvailable + self.cannotUseAppleIntelligence = cannotUseAppleIntelligence + + let info = bundle.infoDictionary ?? [:] + appVersion = info["CFBundleShortVersionString"] as? String + + locale = getLocaleTag() + var inferredDateInstalledOn: Date? { + guard + let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last, + let attributes = try? FileManager.default.attributesOfItem(atPath: documentsURL.path) + else { return nil } + return attributes[.creationDate] as? Date + } + let installationDateSinceEpoch = inferredDateInstalledOn.map { + Int64(($0.timeIntervalSince1970 * 1000).rounded()) + } + guard let dbPath = Experiments.dbPath else { + self.logger.log("Unable to obtain dbPath, skipping calculating attributes", + level: .warning, + category: .experiments) + return + } + guard let calculatedAttributes = try? getCalculatedAttributes(installationDate: installationDateSinceEpoch, + dbPath: dbPath, + locale: locale) + else { return } + + daysSinceInstall = calculatedAttributes.daysSinceInstall + daysSinceUpdate = calculatedAttributes.daysSinceUpdate + language = calculatedAttributes.language + region = calculatedAttributes.region + touExperiencePoints = Experiments.touExperiencePoints(region: region) + self.logger.log("init end", level: .debug, category: .experiments) + } + + /** + * [getEventQueries] is called by the Nimbus SDK Rust code to retrieve the map of event + * queries. The are then executed against the Nimbus SDK's EventStore to retrieve their values. + * + * @return Map + */ + func getEventQueries() -> [String: String] { + logger.log("getEventQueries", level: .debug, category: .experiments) + return eventQueries + } + + /** + * [record] is called when experiment enrollments are evolved. It should apply the + * [RecordedNimbusContext]'s values to a [NimbusSystem.RecordedNimbusContextObject] instance, + * and use that instance to record the values to Glean. + */ + func record() { + logger.log("record start", level: .debug, category: .experiments) + + // Bring the ping into scope so that Glean knows it exists and includes NimbusSystem.recordedNimbusContext + _ = NimbusGleanPings.nimbusTargetingContext + + let eventQueryValuesObject = GleanMetrics.NimbusSystem.RecordedNimbusContextObjectItemEventQueryValuesObject( + daysOpenedInLast28: eventQueryValues[RecordedNimbusContext.DAYS_OPENED_IN_LAST_28].toInt64() + ) + + GleanMetrics.NimbusSystem.recordedNimbusContext.set( + GleanMetrics.NimbusSystem.RecordedNimbusContextObject( + isFirstRun: isFirstRun, + eventQueryValues: eventQueryValuesObject, + isPhone: isPhone, + appVersion: appVersion, + locale: locale, + daysSinceInstall: daysSinceInstall.toInt64(), + daysSinceUpdate: daysSinceUpdate.toInt64(), + language: language, + region: region, + isDefaultBrowser: isDefaultBrowser, + isBottomToolbarUser: isBottomToolbarUser, + hasEnabledTipsNotifications: hasEnabledTipsNotifications, + hasAcceptedTermsOfUse: hasAcceptedTermsOfUse, + userDisabledAi: userDisabledAi, + isAppleIntelligenceAvailable: isAppleIntelligenceAvailable, + cannotUseAppleIntelligence: cannotUseAppleIntelligence, + touExperiencePoints: touExperiencePoints.toInt64() + ) + ) + logger.log("record end", level: .debug, category: .experiments) + } + + /** + * [setEventQueryValues] is called by the Nimbus SDK Rust code after the event queries have been + * executed. The [eventQueryValues] should be written back to the Kotlin object. + * + * @param [eventQueryValues] The values for each query after they have been executed in the + * Nimbus SDK Rust environment. + */ + func setEventQueryValues(eventQueryValues: [String: Double]) { + logger.log("setEventQueryValues", level: .debug, category: .experiments) + self.eventQueryValues = eventQueryValues + } + + /** + * [toJson] is called by the Nimbus SDK Rust code after the event queries have been executed, + * and before experiment enrollments have been evolved. The value returned from this method + * will be applied directly to the Nimbus targeting context, and its keys/values take + * precedence over those in the main Nimbus targeting context. + * + * @return JsonObject + */ + func toJson() -> JsonObject { + logger.log("toJson start", level: .debug, category: .experiments) + guard let data = try? JSONSerialization.data(withJSONObject: [ + "is_first_run": isFirstRun, + "isFirstRun": "\(isFirstRun)", + "is_phone": isPhone, + "events": eventQueryValues, + "app_version": appVersion as Any, + "region": region as Any, + "language": language as Any, + "locale": locale as Any, + "days_since_install": daysSinceInstall as Any, + "days_since_update": daysSinceUpdate as Any, + "is_default_browser": isDefaultBrowser, + "is_bottom_toolbar_user": isBottomToolbarUser, + "has_enabled_tips_notifications": hasEnabledTipsNotifications, + "has_accepted_terms_of_use": hasAcceptedTermsOfUse, + "user_disabled_ai": userDisabledAi, + "is_apple_intelligence_available": isAppleIntelligenceAvailable, + "cannot_use_apple_intelligence": cannotUseAppleIntelligence, + "tou_experience_points": touExperiencePoints as Any + ]), + let jsonString = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as? String + else { + logger.log("toJson error thrown while creating JSON string", level: .warning, category: .experiments) + return "{}" + } + logger.log("toJson end", level: .debug, category: .experiments, extra: ["json": jsonString]) + return jsonString + } +} diff --git a/experimenter/experimenter/features/manifests/ios/v151.0.1/beta.fml.yaml b/experimenter/experimenter/features/manifests/ios/v151.0.1/beta.fml.yaml new file mode 100644 index 000000000..66f17b0f0 --- /dev/null +++ b/experimenter/experimenter/features/manifests/ios/v151.0.1/beta.fml.yaml @@ -0,0 +1,1625 @@ +version: 1.0.0 +about: + description: The root level Feature Manifest for Firefox for iOS +channels: +- beta +features: + address-autofill-edit: + description: This property defines if the address editing is enabled in Settings + variables: + status: + description: If true, we will allow user to edit the address + type: Boolean + default: false + address-bar-menu-feature: + description: | + This property determines if we show the new address bar menu entry or the toolbar menu in settings + variables: + status: + description: If true, we will show the new address bar menu entry + type: Boolean + default: true + ads-client: + description: This property defines if the rust ads client is enabled + variables: + status: + description: If true, we will enable the rust ads client + type: Boolean + default: false + ai-kill-switch-feature: + description: | + Configuration feature for AI features + variables: + enabled: + description: | + Whether or not this feature is enabled + type: Boolean + default: true + app-icon-selection-feature: + description: | + Controls which app icons users can select as their default app icon from the App Icon Selection screen in Settings. + variables: + funIconsEnabled: + description: | + Controls whether users see the fun icons in the app icon settings. + type: Boolean + default: true + appearance-menu-feature: + description: | + This property determines if we show the new appearance menu entry or the old theme settings + variables: + status: + description: If true, we will show the new appearance menu entry + type: Boolean + default: true + bookmarks-search-feature: + description: | + Configuration feature for the bookmarks search bar + variables: + enabled: + description: | + Whether or not this feature is enabled + type: Boolean + default: false + deeplink-optimization-refactor-feature: + description: | + The feature flag to manage the rollout of deeplink optimization feature. + variables: + enabled: + description: | + Variable description + type: Boolean + default: false + download-live-activities-feature: + description: | + Download Live Activities Feature + variables: + enabled: + description: | + If true, the download live activities feature is enabled + type: Boolean + default: true + firefox-jp-guide-default-site: + description: | + This feature is for managing the visibility of the Firefox Japanese Guide default suggested site shortcut + variables: + enabled: + description: | + Enables the feature. + type: Boolean + default: false + firefox-suggest-feature: + description: Configuration for the Firefox Suggest feature. + variables: + available-suggestions-types: + description: | + A map of suggestion types to booleans that indicate whether or not the provider should return suggestions of those types. + type: Map + default: + amp: true + ampMobile: false + wikipedia: true + status: + description: | + Whether the feature is enabled. When Firefox Suggest is enabled, Firefox will download and store new search suggestions in the background, and show additional Search settings to control which suggestions appear in the awesomebar. When Firefox Suggest is disabled, Firefox will not download new suggestions, and hide the additional Search settings. + type: Boolean + default: false + general-app-features: + description: The feature that contains feature flags for the entire application + variables: + report-site-issue: + description: This property defines whether or not the feature is enabled + type: GeneralFeature + default: + status: true + hnt-sponsored-shortcuts-feature: + description: This feature manages the visibility of sponsored shortcuts on the homepage + variables: + enabled: + description: Setting 'enabled' to false will hide sponsored shortcuts on the homepage and disable the respective toggle in the homepage settings + type: Boolean + default: true + homepage-redesign-feature: + description: | + This feature is for managing the roll out of the Homepage New Tab Redesign feature. + variables: + bookmarks-section-default: + description: | + If true, enables the bookmarks homepage section by default + type: Boolean + default: false + categories-enabled: + description: | + If true, enables the categories flow in the stories + type: Boolean + default: false + jbi-section-default: + description: | + If true, enables the jump back in homepage section by default + type: Boolean + default: false + pinned-header-enabled: + description: | + If true, enables the pinned newsfeed header on homepage. + type: Boolean + default: false + search-bar: + description: | + If true, enables the search bar feature on homepage for users. + type: Boolean + default: false + hosted-summarizer-feature: + description: | + This feature enables the hosted summarizer feature. + variables: + enabled: + description: | + Enables the hosted summarizer feature. + type: Boolean + default: true + shakeGesture: + description: | + Enables the shake gesture for the summarizer feature. + type: Boolean + default: true + toolbarEntrypoint: + description: | + Enables the toolbar entrypoint for the summarizer feature. + type: Boolean + default: true + https-upgrade-feature: + description: | + This feature enables automatic https upgrade. This is only available for 18.2+. + variables: + enabled: + description: | + Enables automatic https upgrade. + type: Boolean + default: true + improved-app-store-review-trigger-feature: + description: | + The feature flag to manage the App Store review request trigger. + variables: + enabled: + description: | + Enables the feature. + type: Boolean + default: false + messaging: + description: | + The in-app messaging system + documentation: + - name: User documentation + url: https://experimenter.info/messaging/mobile-messaging + contacts: + - jhugman@mozilla.com + - brennie@mozilla.com + - gbuciu@mozilla.com + - wteichmann@mozilla.com + events: + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_shown + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_clicked + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_expired + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_dismissed + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_malformed + variables: + actions: + description: A growable map of action URLs. + type: Map + default: + OPEN_SETTINGS: ://deep-link?url=settings/general + OPEN_SETTINGS_NEW_TAB: ://deep-link?url=settings/newtab + OPEN_SETTINGS_HOMESCREEN: ://deep-link?url=settings/homepage + OPEN_SETTINGS_WALLPAPERS: ://deep-link?url=settings/wallpaper + OPEN_SETTINGS_EMAIL: ://deep-link?url=settings/mailto + OPEN_SETTINGS_SEARCH_ENGINE: ://deep-link?url=settings/search + OPEN_SETTINGS_PRIVACY: ://deep-link?url=settings/clear-private-data + OPEN_SETTINGS_FXA: ://deep-link?url=settings/fxa + OPEN_SETTINGS_THEME: ://deep-link?url=settings/theme + OPEN_SETTINGS_APP_ICON: ://deep-link?url=settings/app-icon + OPEN_URL: ://open-url + VIEW_BOOKMARKS: ://deep-link?url=homepanel/bookmarks + VIEW_TOP_SITES: ://deep-link?url=homepanel/top-sites + VIEW_READING_LIST: ://deep-link?url=homepanel/reading-list + VIEW_HISTORY: ://deep-link?url=homepanel/history + VIEW_DOWNLOADS: ://deep-link?url=homepanel/downloads + ENABLE_PRIVATE_BROWSING: ://deep-link?url=homepanel/new-private-tab + OPEN_NEW_TAB: ://deep-link?url=homepanel/new-tab + MAKE_DEFAULT_BROWSER: ://deep-link?url=default-browser/system-settings + MAKE_DEFAULT_BROWSER_WITH_TUTORIAL: ://deep-link?url=default-browser/tutorial + OPEN_SHARE_SHEET: ://share-sheet + string-alias: ActionName + message-under-experiment: + description: 'Deprecated. Please use "experiment": "{experiment}" instead.' + type: Option + default: null + messages: + description: | + A growable collection of messages, where the Key is the message identifier and the value is its associated MessageData. + type: Map + default: + homepage-microsurvey-message: + surface: microsurvey + style: MICROSURVEY + trigger-if-all: + - SECOND_HOMEPAGE_VIEW + title: Microsurvey/Microsurvey.Prompt.TitleLabel.v127 + text: How satisfied are you with your Firefox homepage? + button-label: Microsurvey/Microsurvey.Prompt.Button.v127 + microsurveyConfig: + utm-content: homepage + icon: homeLarge + options: + - Microsurvey/Microsurvey.Survey.Options.VerySatisfied.v132 + - Microsurvey/Microsurvey.Survey.Options.Satisfied.v132 + - Microsurvey/Microsurvey.Survey.Options.Neutral.v132 + - Microsurvey/Microsurvey.Survey.Options.Dissatisfied.v132 + - Microsurvey/Microsurvey.Survey.Options.VeryDissatisfied.v132 + - Microsurvey/Microsurvey.Survey.Options.NotApplicable.v132 + string-alias: MessageKey + on-control: + description: What should be displayed when a control message is selected. + type: ControlMessageBehavior + default: show-next-message + styles: + description: | + A map of styles to configure message appearance. + type: Map + default: + FALLBACK: + priority: 40 + max-display-count: 20 + DEFAULT: + priority: 50 + max-display-count: 5 + MICROSURVEY: + priority: 50 + max-display-count: 1 + NOTIFICATION: + priority: 50 + max-display-count: 1 + PERSISTENT: + priority: 50 + max-display-count: 20 + SURVEY: + priority: 55 + max-display-count: 10 + WARNING: + priority: 60 + max-display-count: 10 + URGENT: + priority: 100 + max-display-count: 10 + string-alias: StyleName + triggers: + description: | + A collection of out the box trigger expressions. Each entry maps to a valid JEXL expression. + type: Map + default: + ALWAYS: 'true' + NEVER: 'false' + 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' + 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 + NOT_LAUNCHED_YESTERDAY: '''app_cycle.foreground''|eventLastSeen(''Days'', 1) > 1' + AFTER_THREE_LAUNCHES_THIS_WEEK: '''app_cycle.foreground''|eventSum(''Weeks'', 1, 0) >= 3' + I_AM_DEFAULT_BROWSER: is_default_browser + I_AM_NOT_DEFAULT_BROWSER: is_default_browser == false + SUPPORTS_DEFAULT_BROWSER: os_version|versionCompare('14.!') >= 0 + INACTIVE_NEW_USER: is_inactive_new_user + ALLOWED_TIPS_NOTIFICATIONS: allowed_tips_notifications + FXA_CURRENTLY_SIGNED_IN: is_fxa_signed_in == true + SECOND_HOMEPAGE_VIEW: '''homepage_viewed''|eventSum(''Years'', 4, 0) >= 2' + ON_FOURTH_LAUNCH_THIS_YEAR: '''app_cycle.foreground''|eventSum(''Years'', 1, 0) > 3' + string-alias: TriggerName + ~~experiment: + description: Not to be set by experiment. + type: ExperimentSlug + default: '{experiment}' + string-alias: ExperimentSlug + allow-coenrollment: true + microsurvey-feature: + description: | + A feature that shows the microsurvey for users to interact with and submit responses. + variables: + enabled: + description: | + If true, the feature is active. + type: Boolean + default: false + native-error-page-feature: + description: | + This feature is for managing the roll out of the native error page feature + variables: + bad-cert-domain-error-page: + description: | + This feature is for managing the roll out of the bad certificate domain native error page + type: Boolean + default: false + enabled: + description: | + If true, the feature is active. + type: Boolean + default: false + no_internet_connection_error: + description: | + This feature is for managing the roll out of the no interet connection native error page feature + type: Boolean + default: false + needs-reload-refactor: + description: | + This is a technical refactor which cleans up the reloading of the webview + variables: + enabled: + description: | + Whether or not this refactor is enabled + type: Boolean + default: true + onboarding-framework-feature: + description: | + The new onboarding framework feature that will allow onboarding to be experimentable through initial experiments. + variables: + cards: + description: | + The list of available cards for onboarding. + type: Map + default: + welcome: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Welcome.Title.TreatementA.v120 + body: Onboarding/Onboarding.Welcome.Description.TreatementA.v120 + image: welcome-globe + buttons: + primary: + title: Onboarding/Onboarding.Welcome.ActionTreatementA.v114 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Welcome.Skip.v114 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + notification-permissions: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Notification.Title.v120 + body: Onboarding/Onboarding.Notification.Description.v120 + image: notifications + buttons: + primary: + title: Onboarding/Onboarding.Notification.TurnOnNotifications.Action.v114 + action: request-notifications + secondary: + title: Onboarding/Onboarding.Notification.Skip.Action.v115 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + sign-to-sync: + card-type: basic + order: 20 + title: Onboarding/Onboarding.Sync.Title.v120 + body: Onboarding/Onboarding.Sync.Description.v123 + image: sync-devices + buttons: + primary: + title: Onboarding/Onboarding.Sync.SignIn.Action.v114 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Sync.Skip.Action.v114 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + customization-theme: + card-type: multiple-choice + order: 40 + title: Onboarding/Onboarding.Customization.Theme.Title.v123 + body: Onboarding/Onboarding.Customization.Theme.Description.v123 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Customization.Theme.Continue.Action.v123 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Customization.Theme.System.Action.v123 + image: theme-system + action: theme-system-default + - title: Onboarding/Onboarding.Customization.Theme.Light.Action.v123 + image: theme-light + action: theme-light + - title: Onboarding/Onboarding.Customization.Theme.Dark.Action.v123 + image: theme-dark + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + customization-toolbar: + card-type: multiple-choice + order: 41 + title: Onboarding/Onboarding.Customization.Toolbar.Title.v123 + body: Onboarding/Onboarding.Customization.Toolbar.Description.v123 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Customization.Toolbar.Continue.Action.v123 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Customization.Toolbar.Top.Action.v123 + image: toolbar-top + action: toolbar-top + - title: Onboarding/Onboarding.Customization.Toolbar.Bottom.Action.v123 + image: toolbar-bottom + action: toolbar-bottom + onboarding-type: fresh-install + prerequisites: + - ALWAYS + update-welcome: + card-type: basic + order: 10 + title: Upgrade/Upgrade.Welcome.Title.v114 + body: Upgrade/Upgrade.Welcome.Description.v114 + image: welcome-globe + buttons: + primary: + title: Upgrade/Upgrade.Welcome.Action.v114 + action: forward-one-card + onboarding-type: upgrade + prerequisites: + - NEVER + update-sign-to-sync: + card-type: basic + order: 20 + title: Upgrade/Upgrade.SyncSign.Title.v114 + body: Upgrade/Upgrade.SyncSign.Description.v114 + image: sync-devices + buttons: + primary: + title: Upgrade/Upgrade.SyncSign.Action.v114 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.LaterAction.v114 + action: forward-one-card + onboarding-type: upgrade + prerequisites: + - NEVER + welcome-modern: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Modern.Welcome.Title.v140 + body: Onboarding/Onboarding.Modern.Welcome.Description.v140 + image: trackers + buttons: + primary: + title: Onboarding/Onboarding.Modern.Welcome.ActionTreatementA.v140 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Modern.Welcome.Skip.v140 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + sign-to-sync-modern: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Modern.Sync.Title.v140 + body: Onboarding/Onboarding.Modern.Sync.Description.v140 + image: sync-with-icons + buttons: + primary: + title: Onboarding/Onboarding.Modern.Sync.SignIn.Action.v140 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Modern.Sync.Skip.Action.v140 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + customization-toolbar-modern: + card-type: multiple-choice + order: 20 + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Title.v140 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Theme.Continue.Action.v140 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Bottom.Action.v140 + image: toolbar-bottom + action: toolbar-bottom + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Top.Action.v140 + image: toolbar-top + action: toolbar-top + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + customization-theme-modern: + card-type: multiple-choice + order: 25 + title: Onboarding/Onboarding.Customization.Theme.Title.v143 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Theme.Continue.Action.v140 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Customization.Theme.System.Action.v123 + image: theme-system + action: theme-system-default + - title: Onboarding/Onboarding.Customization.Theme.Light.Action.v123 + image: theme-light + action: theme-light + - title: Onboarding/Onboarding.Customization.Theme.Dark.Action.v123 + image: theme-dark + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + welcome-modern-japan: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Modern.Welcome.Title.v145 + body: Onboarding/Onboarding.Modern.Welcome.Description.v145 + image: trackers-japan + buttons: + primary: + title: Onboarding/Onboarding.Modern.Welcome.ActionTreatmentA.v145 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Modern.Welcome.Skip.v145 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + sign-to-sync-modern-japan: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Modern.Sync.Title.v145 + body: Onboarding/Onboarding.Modern.Sync.Description.v145 + image: sync-with-icons-japan + buttons: + primary: + title: Onboarding/Onboarding.Modern.Sync.SignIn.Action.v145 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Modern.Sync.Skip.Action.v145 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + customization-toolbar-modern-japan: + card-type: multiple-choice + order: 20 + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Title.v145 + body: Onboarding/Onboarding.Modern.Customization.Toolbar.Description.v145 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Continue.Action.v145 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Bottom.Action.v145 + image: toolbar-bottom-japan + action: toolbar-bottom + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Top.Action.v145 + image: toolbar-top-japan + action: toolbar-top + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + customization-theme-modern-japan: + card-type: multiple-choice + order: 25 + title: Onboarding/Onboarding.Modern.Customization.Theme.Title.v145 + body: Onboarding/Onboarding.Modern.Customization.Theme.Description.v145 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Continue.Action.v145 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Theme.Automatic.v145 + image: theme-system-japan + action: theme-system-default + - title: Onboarding/Onboarding.Modern.Customization.Theme.Light.v145 + image: theme-light-japan + action: theme-light + - title: Onboarding/Onboarding.Modern.Customization.Theme.Dark.v145 + image: theme-dark-japan + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + welcome-brand-refresh: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.TitleV3.v149 + body: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.Description.v148 + image: trackers-brand-refresh + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.ActionTreatmentA.v148 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.Skip.v148 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + customization-toolbar-brand-refresh: + card-type: multiple-choice + order: 20 + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Toolbar.Title.v148 + body: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Toolbar.Description.v148 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Toolbar.Continue.Action.v148 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Bottom.Action.v140 + image: toolbar-bottom-japan + action: toolbar-bottom + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Top.Action.v140 + image: toolbar-top-japan + action: toolbar-top + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + customization-theme-brand-refresh: + card-type: multiple-choice + order: 25 + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Title.v148 + body: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Description.v148 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Continue.Action.v148 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Automatic.v148 + image: theme-system-japan + action: theme-system-default + - title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Light.v148 + image: theme-light-japan + action: theme-light + - title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Dark.v148 + image: theme-dark-japan + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + sign-to-sync-brand-refresh: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Modern.BrandRefresh.Sync.Title.v148 + body: Onboarding/Onboarding.Modern.BrandRefresh.Sync.Description.v148 + image: sync-with-icons-brand-refresh + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Sync.SignIn.Action.v148 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Sync.Skip.Action.v148 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + string-alias: NimbusOnboardingCardKey + conditions: + description: | + A collection of out the box conditional expressions to be used in determining whether a card should show or not. Each entry maps to a valid JEXL expression. + type: Map + default: + ALWAYS: 'true' + NEVER: 'false' + string-alias: ConditionName + dismissable: + description: | + Whether or not the entire onboarding is dismissable by pressing an X at the top right corner of the screen. + type: Boolean + default: true + enable-modern-ui: + description: | + Toggle between legacy (false) and modern (true) UI variants. + type: Boolean + default: true + enable-video-intro: + description: | + When true, a full-screen video is displayed before the Terms of Service screen during fresh-install onboarding. + type: Boolean + default: false + should-use-brand-refresh-configuration: + description: | + Toggle between standard (false) and brand refresh (true) onboarding content. + type: Boolean + default: true + should-use-japan-configuration: + description: | + Toggle between standard (false) and Japan-specific (true) assets and content. + type: Boolean + default: false + quick-answers-feature: + description: | + The feature flag to manage the roll out of the quick answers feature. + variables: + enabled: + description: | + Enables the feature. + type: Boolean + default: false + recent-searches-feature: + description: | + Enables recent searches. + variables: + enabled: + description: | + Whether or not to enable recent searches. + type: Boolean + default: false + max-suggestions: + description: The number of maximum suggestions. + type: Int + default: 5 + relay-integration-feature: + description: | + This feature is for managing the roll out of Relay email masking integration in iOS + variables: + enabled: + description: | + Enables the feature + type: Boolean + default: false + search: + description: | + Configuring the functionality to do with search. This will be separated into smaller sub-features in later releases. + variables: + awesome-bar: + description: Configuring the awesome bar. + type: AwesomeBar + default: + min-search-term: 3 + search-highlights: false + use-page-content: false + sent-from-firefox-feature: + description: | + Adds additional promo text to links shared to WhatsApp. + variables: + enabled: + description: | + Controls whether promo text is added to WhatsApp shares and an on/off toggle is added to Settings. + type: Boolean + default: false + isTreatmentA: + description: | + If true, shares the treatment A text. If false, shares the treatment B text. + type: Boolean + default: true + snapkit-removal-refactor: + description: This property defines if SnapKit removal refactor is enabled + variables: + enabled: + description: If true the SnapKit removal refactor version will be used + type: Boolean + default: false + 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 + spotlight-search: + description: Add pages as items findable with Spotlight. + variables: + enabled: + description: If this is true, then on each page load adds a new item to Spotlight. + type: Boolean + default: false + icon-type: + description: | + The icon that is displayed next to the item in the search results. If this is `null`, then no icon is displayed. + type: Option + default: letter + keep-for-days: + description: | + Number of days to keep the item before automatic deletion. If this is left `null`, then it is left to iOS's default. + type: Option + default: null + searchable-content: + description: | + The text content that is made searchable. If this is `null` then no additional content is used, and only the title and URL will be used. + type: Option + default: text-excerpt + start-at-home-feature: + description: This feature is for experimenting with opening screen + variables: + setting: + description: This property provides a default setting for the start at home feature + type: StartAtHome + default: afterFourHours + summarizer-app-attest-auth-feature: + description: | + This feature enables app attest authentication for the summarizer. + variables: + enabled: + description: | + Enables app attest authentication for the summarizer. + type: Boolean + default: true + summarizer-language-expansion-feature: + description: | + The feature flag to manage the rollout of the summarizer language expansion. + variables: + enabled: + description: | + Whether the feature is enabled or not. + type: Boolean + default: false + supportedLocales: + description: | + The list of supported locale identifiers for the summarizer language expansion according to BCP47 standard. i.e "en-US" for English (United States). + type: List + default: + - en + - it + - fr + - es + - de + - pt + summarizer-permissive-guardrails-feature: + description: | + This feature enables permissive guardrails for the summarizer. + variables: + enabled: + description: | + Enables permissive guardrails for the summarizer. + type: Boolean + default: true + tab-scroll-refactor-feature: + description: | + The feature flag to manage the rollout of tab scroll refactor feature. + variables: + enabled: + description: | + If true, tab scroll new implementation is used to show and hide toolbar views reacting to user scroll + type: Boolean + default: false + tab-tray-ui-experiments: + description: | + The tab tray will undergo some UI experimentation to test potential improvements. + variables: + enabled: + description: | + If true, enables the tab tray UI experiments. + type: Boolean + default: true + iPad_update_enabled: + description: | + If true, enables the tab tray UI experiments on iPad. + type: Boolean + default: false + translucency: + description: | + If true, enables translucency for tab tray actions at the bottom. + type: Boolean + default: false + toolbar-refactor-feature: + description: | + This feature is for managing the roll out of the Toolbar refactor feature + variables: + layout: + description: | + The type of layout of the toolbars. + type: Option + default: version1 + tab_tray_button_type: + description: | + The style of the tab tray button in the toolbar. + type: TabTrayButtonType + default: number + unified_search: + description: | + Enables the unified search feature. + type: Boolean + default: false + tos-feature: + description: | + This feature is for managing the roll out of the ToS (Term of Service) implementation + variables: + status: + description: | + Enables the feature + type: Boolean + default: true + tou-feature: + description: | + This feature is for managing the rollout of the Terms of Use (ToU) implementation. + variables: + content-option: + description: | + Determines which predefined title and "learn more" strings are used for the Terms of Use prompt. + type: TermsOfUsePromptContentOption + default: value-0 + enable-drag-to-dismiss: + description: | + Whether to show a drag handle on the prompt and allows users to use it to dismiss the prompt. + type: Boolean + default: true + max-reminders-count: + description: | + Maximum number of ToU bottom sheet reminders that can be displayed + type: Int + default: 2 + status: + description: | + Enables the feature + type: Boolean + default: false + tracking-protection-refactor: + description: | + The Enhanced Tracking Protection refactor + variables: + enabled: + description: | + Whether the Enhanced Tracking Protection refactor is enabled or not + type: Boolean + default: true + translations-feature: + description: | + Enables translations feature. + variables: + enabled: + description: | + Whether or not to enable translations feature. + type: Boolean + default: true + languagePickerEnabled: + description: | + Whether or not to enable the translations language picker (Phase 2). + type: Boolean + default: false + trending-searches-feature: + description: | + Enables trending searches. + variables: + enabled: + description: | + Whether or not to enable trending searches. + type: Boolean + default: false + max-suggestions: + description: The number of maximum suggestions. + type: Int + default: 5 + world-cup-widget-feature: + description: | + The feature flag to manage the roll out of the world cup widget feature + variables: + countdown-target-date: + description: | + The ISO 8601 date string for the World Cup countdown target + type: String + default: 2026-06-11T19:00:00Z + enabled: + description: | + Whether or not this feature is enabled + type: Boolean + default: false +enums: + ControlMessageBehavior: + description: An enum to influence what should be displayed when a control message is selected. + variants: + show-next-message: + description: The next eligible message should be shown. + show-none: + description: The surface should show no message. + IconType: + description: The icon that will be added to the item in the device's search engine. + variants: + favicon: + description: The favicon of the page + letter: + description: An icon generated from the first letter of the base domain. + screenshot: + description: A screenshot of the page at load time. + MessageSurfaceId: + description: | + For messaging, we would like to have a message tell us which surface its associated with. This is a label that matches across both Android and iOS. + variants: + Unknown: + description: A message has NOT declared its target surface. + microsurvey: + description: This is a microsurvey that appears on top of the bottom toolbar to the user. + new-tab-card: + description: This is the card that appears at the top on the Firefox Home Page. + notification: + description: This is a local notification send to the user periodically with tips and updates. + survey: + description: This is a full-page that appears providing a survey to the user. + NimbusOnboardingHeaderImage: + description: | + The identifiers for the different images available for cards in onboarding + variants: + customize-firefox: + description: | + Corresponding to the fox window image + notifications: + description: | + Corresponding to the notifications image + notifications-ctd: + description: | + Corresponding to the notifications image for CTD + search-widget: + description: | + Corresponding to the fox search widget image + set-default-steps: + description: | + Corresponding to the set to default steps image + set-to-dock: + description: | + Corresponding to the set to dock image + sync-devices: + description: | + Corresponding to the sync-devices image + sync-devices-ctd: + description: | + Corresponding to the sync image for CTD + sync-with-icons: + description: | + Corresponding to the sync-devices image + sync-with-icons-brand-refresh: + description: | + Corresponding to the sync-with-icons image for Brand Refresh variant (different from Japan variant) + sync-with-icons-japan: + description: | + Corresponding to the sync-with-icons image for Japan variant + themeing: + description: | + Corresponding to the fox world image + toolbar: + description: | + Corresponding to the fox world image + trackers: + description: | + Corresponding to the trackers image + trackers-brand-refresh: + description: | + Corresponding to the trackers image for Brand Refresh variant (does not contain Japanese text, different from Japan variant) + trackers-japan: + description: | + Corresponding to the trackers image for Japan variant (contains Japanese text) + welcome-ctd: + description: | + Corresponding to the welcome image for CTD + welcome-globe: + description: | + Corresponding to the fox world image + NimbusOnboardingMultipleChoiceButtonImage: + description: | + The identifiers for the different images available for multiple choice buttons in onboarding + variants: + theme-dark: + description: | + Corresponding to the dark theme + theme-dark-japan: + description: | + Corresponding to the dark theme image for Japan variant. Also used by Brand Refresh variant as the images are identical. + theme-light: + description: | + Corresponding to the light theme + theme-light-japan: + description: | + Corresponding to the light theme image for Japan variant. Also used by Brand Refresh variant as the images are identical. + theme-system: + description: | + Corresponding to the system theme + theme-system-japan: + description: | + Corresponding to the system theme image for Japan variant. Also used by Brand Refresh variant as the images are identical. + toolbar-bottom: + description: | + Corresponding to the toolbar on the bottom + toolbar-bottom-japan: + description: | + Corresponding to the toolbar on the bottom image for Japan variant. Also used by Brand Refresh variant as the images are identical. + toolbar-top: + description: | + Corresponding to the toolbar on top + toolbar-top-japan: + description: | + Corresponding to the toolbar on top image for Japan variant. Also used by Brand Refresh variant as the images are identical. + OnboardingActions: + description: | + The identifiers for the different actions available for cards in onboarding + variants: + end-onboarding: + description: | + Will end the onboarding on a set card + forward-one-card: + description: | + Will take the user to the next card + forward-three-card: + description: | + Will take the user to the next card + forward-two-card: + description: | + Will take the user to the next card + open-instructions-popup: + description: | + Will open up a popup with instructions for something + open-ios-fx-settings: + description: | + Will take the user to the default browser settings in the iOS system settings + read-privacy-policy: + description: | + Will open a webview where the user can read the privacy policy + request-notifications: + description: | + Will request to allow notifications from the user + set-default-browser: + description: | + Will send the user to settings to set Firefox as their default browser and advance to next card + sync-sign-in: + description: | + Will take the user to the sync sign in flow + OnboardingCardType: + description: | + The identifiers for the different types of onboarding cards. + variants: + basic: + description: | + Corresponding to basic info onboarding cards + multiple-choice: + description: | + Corresponding to onboarding cards with multiple choice buttons + OnboardingInstructionsPopupActions: + description: | + The identifiers for the different actions available for the instruction card in onboarding + variants: + dismiss: + description: | + Will dismiss the popup + dismiss-and-next-card: + description: | + Will dismiss the popup and move to the next card + open-ios-fx-settings: + description: | + Will take the user to the default browser settings in the iOS system settings + OnboardingMultipleChoiceAction: + description: | + The identifiers for the different actions available for cards in onboarding + variants: + theme-dark: + description: | + Will will set the theme to dark mode + theme-light: + description: | + Will set the theme to light mode + theme-system-default: + description: | + Will set the theme to use the system theme + toolbar-bottom: + description: | + Will set the toolbar on the bottom + toolbar-top: + description: | + Will set the toolbar on the top + OnboardingType: + description: | + The identifiers for the different types of onboarding cards. + variants: + fresh-install: + description: | + Corresponding to onboarding cards that are for new users + upgrade: + description: | + Corresponding to onboarding cards that are for users who have updated + OnboardingVariant: + description: | + Which UI style this onboarding card is designed for. + variants: + brandRefresh: + description: Use the brand refresh onboarding UI with v148 strings. + japan: + description: Use the Japan-specific onboarding UI with localized assets. + legacy: + description: Use the existing (legacy) onboarding UI. + modern: + description: Use the new (modern) onboarding UI. + PageContent: + description: The page content that will be added as an item in the device's search engine. + variants: + html-content: + description: Use all the page as HTML + text-content: + description: Use all the page as text + text-excerpt: + description: Only use the first paragraph + StartAtHome: + description: The option for what screen to open the app to + variants: + afterFourHours: + description: Starts the app at the homepage after four hours of inactivity, otherwise starts the app at the most recently viewed tab. + always: + description: Starts the app at the homepage. + disabled: + description: Starts the app at the most recently viewed tab. + SuggestionType: + description: The type of a Firefox Suggest search suggestion. + variants: + amp: + description: A Firefox Suggestion for desktop from adMarketplace. + ampMobile: + description: A Firefox Suggestion specifically for mobile from adMarketplace. + wikipedia: + description: A Firefox Suggestion for a Wikipedia page. + TabTrayButtonType: + description: The style of the tab tray button in the toolbar. + variants: + number: + description: The original tab tray button style that show the icon with the number of tabs. + screenshot: + description: The new tab tray button style that shows two images stacked with the previous and next tab. + TermsOfUsePromptContentOption: + description: | + Determines which predefined title and "learn more" strings are used for the Terms of Use prompt. + variants: + value-0: + description: | + Uses the current defaults: + - Title: "We've got an update" + - Learn more: "Please take a moment to review and accept. Learn more." + value-1: + description: | + Uses the following copy: + - Title: "Terms of Use" + - Learn more: "You can learn more here." + value-2: + description: | + Uses the following copy: + - Title: "A note from Firefox" + - Learn more: "You can learn more here." + ToolbarLayoutType: + description: The type of toolbar layout. + variants: + version1: + description: Shows the add new tab, menu and tabs button in the navigation toolbar. The share button is displayed in the address toolbar. + version2: + description: Like version1 but the menu and tabs buttons are inverted. +objects: + AwesomeBar: + description: A configuration option for the awesome bar. Part of the `search` feature. + fields: + min-search-term: + description: The minimum number of characters that the user types before searching in the page. + type: Int + default: 3 + search-highlights: + description: Whether or not search highlights are enabled + type: Boolean + default: false + use-page-content: + description: Search in the open tab's text content when typing. + type: Boolean + default: false + GeneralFeature: + description: The configuration for the a feature that can be enabled or disabled + fields: + status: + description: Whether or not the feature is enabled + type: Boolean + default: false + MessageData: + description: | + An object to describe a message. It uses human readable strings to describe the triggers, action and style of the message as well as the text of the message and call to action. + fields: + action: + description: | + The name of a deeplink URL to be opened if the button is clicked. + type: Option + default: null + action-params: + description: Query parameters appended to the deeplink action URL + type: Map + default: {} + button-label: + description: | + The text on the button. If no text is present, the whole message is clickable. + type: Option + default: null + except-if-any: + description: | + A list of strings corresponding to targeting expressions. If any of these expressions evaluate to `true`, the message will not be eligible. + type: List + default: [] + experiment: + description: The experiment slug that this message is involved in. + type: Option + default: null + is-control: + description: Indicates if this message is the control message, if true shouldn't be displayed + type: Boolean + default: false + microsurveyConfig: + description: Optional configuration data for a microsurvey. + type: Option + default: null + style: + description: | + The style as described in a `StyleData` from the styles table. + type: StyleName + default: DEFAULT + surface: + description: Each message will tell us the surface it is targeting with this. + type: MessageSurfaceId + default: Unknown + text: + description: The message text displayed to the user + type: Text + default: '' + title: + description: The title text displayed to the user + type: Option + default: null + trigger-if-all: + description: | + A list of strings corresponding to targeting expressions. All named expressions must evaluate to true if the message is to be eligible to be shown. + type: List + default: + - ALWAYS + MicrosurveyConfig: + description: | + Attributes relating to microsurvey messaging. + fields: + icon: + description: The asset name in our bundle used as the icon shown in the survey. + type: Image + default: lightbulbLarge + options: + description: The list of survey options to present to the user. + type: List + default: [] + utm-content: + description: The name used to provide as the utm_content parameter for the privacy notice. + type: Option + default: null + NimbusOnboardingButton: + description: | + A group of properties describing the attributes of a card. + fields: + action: + description: | + The action the button should take. The default for this will be "forward-one-card" + type: OnboardingActions + default: forward-one-card + title: + description: | + The text of the button title. This should never be defaulted. + type: Text + default: '' + NimbusOnboardingButtons: + description: | + A set of buttons for the card. There can be up to two, but there must be at least one. + fields: + primary: + description: | + The primary button for the card. This must exist. + type: NimbusOnboardingButton + default: + title: Primary Button + action: forward-one-card + secondary: + description: | + A secondary, optional, button for the card. + type: Option + default: null + NimbusOnboardingCardData: + description: | + A group of properties describing the attributes of a card. + fields: + body: + description: | + The body text displayed on the card, in less prominent text. This should never be defaulted. + type: Text + default: '' + buttons: + description: | + The set of buttons associated with the card. + type: NimbusOnboardingButtons + default: + primary: + title: Onboarding/Onboarding.Sync.Skip.Action.v114 + action: forward-one-card + secondary: null + card-type: + description: | + The type of onboarding this card should be shown in, whether it a fresh install or an update. The default is fresh-install. + type: OnboardingCardType + default: basic + disqualifiers: + description: | + A list of ConditionName strings corresponding to targeting expressions. The card will not be shown if any expression is `true`. + type: List + default: [] + image: + description: | + The image that should be displayed on the card. + type: NimbusOnboardingHeaderImage + default: welcome-globe + instructions-popup: + description: | + The object describing the specific instruction popup button for a card. If left empty, the card will have no instruction popup information + type: Option + default: null + link: + description: | + The object describing the link button for a card. If left empty, the card will have no link. + type: Option + default: null + multiple-choice-buttons: + description: | + A list of multiple choice buttons that the card will display + type: List + default: [] + onboarding-type: + description: | + The type of onboarding this card should be shown in, whether it a fresh install or an update. The default is fresh-install. + type: OnboardingType + default: fresh-install + order: + description: | + The place in the order where the card will be found. The feature layer will then sort the cards based on this field. + type: Int + default: 10 + prerequisites: + description: | + A list of ConditionName strings corresponding to targeting expressions. The card will be shown if all expressions `true` and if no expressions in the `disqualifiers` table are true, or if the `disqualifiers` table is empty. + type: List + default: [] + title: + description: | + The title displayed on the card, in prominent, bolded text. This should never be defaulted. + type: Text + default: '' + uiVariant: + description: | + If set, this card will only be shown in the specified UI variant. If null, it will appear in both legacy and modern UIs. + type: Option + default: null + NimbusOnboardingInstructionPopup: + description: | + The object outlining the content of the instruction card. + fields: + button-action: + description: | + The action the button should have. Default is `dismiss-and-next-card` + type: OnboardingInstructionsPopupActions + default: dismiss-and-next-card + button-title: + description: | + The title the button should have. This should never be defaulted. + type: Text + default: '' + instructions: + description: | + A list of instructions, either as free text, or as Text identifiers. + type: List + default: [] + title: + description: | + The text of the popup. This should never be defaulted. + type: Text + default: '' + NimbusOnboardingLink: + description: | + A group of properties describing the attributes for the active link on a card + fields: + title: + description: | + The text of the link title. + type: Text + default: Onboarding/Onboarding.Welcome.Link.Action.v114 + url: + description: | + The url that the link will lead to. + type: String + default: https://www.mozilla.org/privacy/firefox/ + NimbusOnboardingMultipleChoiceButton: + description: | + A group of properties describing the attributes of a multiple choice button on a card + fields: + action: + description: | + The action the button should take. The default for this will be "theme-system-default" + type: OnboardingMultipleChoiceAction + default: theme-system-default + image: + description: | + The text of the button title. This should never be defaulted. + type: NimbusOnboardingMultipleChoiceButtonImage + default: theme-system + title: + description: | + The text of the button title. This should never be defaulted. + type: Text + default: '' + StyleData: + description: | + A group of properties (predominantly visual) to the describe style of the message. + fields: + max-display-count: + description: | + How many sessions will this message be shown to the user before it is expired. + type: Int + default: 5 + priority: + description: | + The importance of this message. 0 is not very important, 100 is very important. + type: Int + default: 50 diff --git a/experimenter/experimenter/features/manifests/ios/v151.0.1/developer.fml.yaml b/experimenter/experimenter/features/manifests/ios/v151.0.1/developer.fml.yaml new file mode 100644 index 000000000..f19a5415d --- /dev/null +++ b/experimenter/experimenter/features/manifests/ios/v151.0.1/developer.fml.yaml @@ -0,0 +1,1635 @@ +version: 1.0.0 +about: + description: The root level Feature Manifest for Firefox for iOS +channels: +- developer +features: + address-autofill-edit: + description: This property defines if the address editing is enabled in Settings + variables: + status: + description: If true, we will allow user to edit the address + type: Boolean + default: true + address-bar-menu-feature: + description: | + This property determines if we show the new address bar menu entry or the toolbar menu in settings + variables: + status: + description: If true, we will show the new address bar menu entry + type: Boolean + default: true + ads-client: + description: This property defines if the rust ads client is enabled + variables: + status: + description: If true, we will enable the rust ads client + type: Boolean + default: true + ai-kill-switch-feature: + description: | + Configuration feature for AI features + variables: + enabled: + description: | + Whether or not this feature is enabled + type: Boolean + default: true + app-icon-selection-feature: + description: | + Controls which app icons users can select as their default app icon from the App Icon Selection screen in Settings. + variables: + funIconsEnabled: + description: | + Controls whether users see the fun icons in the app icon settings. + type: Boolean + default: true + appearance-menu-feature: + description: | + This property determines if we show the new appearance menu entry or the old theme settings + variables: + status: + description: If true, we will show the new appearance menu entry + type: Boolean + default: true + bookmarks-search-feature: + description: | + Configuration feature for the bookmarks search bar + variables: + enabled: + description: | + Whether or not this feature is enabled + type: Boolean + default: false + deeplink-optimization-refactor-feature: + description: | + The feature flag to manage the rollout of deeplink optimization feature. + variables: + enabled: + description: | + Variable description + type: Boolean + default: false + download-live-activities-feature: + description: | + Download Live Activities Feature + variables: + enabled: + description: | + If true, the download live activities feature is enabled + type: Boolean + default: true + firefox-jp-guide-default-site: + description: | + This feature is for managing the visibility of the Firefox Japanese Guide default suggested site shortcut + variables: + enabled: + description: | + Enables the feature. + type: Boolean + default: true + firefox-suggest-feature: + description: Configuration for the Firefox Suggest feature. + variables: + available-suggestions-types: + description: | + A map of suggestion types to booleans that indicate whether or not the provider should return suggestions of those types. + type: Map + default: + amp: true + ampMobile: false + wikipedia: true + status: + description: | + Whether the feature is enabled. When Firefox Suggest is enabled, Firefox will download and store new search suggestions in the background, and show additional Search settings to control which suggestions appear in the awesomebar. When Firefox Suggest is disabled, Firefox will not download new suggestions, and hide the additional Search settings. + type: Boolean + default: true + general-app-features: + description: The feature that contains feature flags for the entire application + variables: + report-site-issue: + description: This property defines whether or not the feature is enabled + type: GeneralFeature + default: + status: true + hnt-sponsored-shortcuts-feature: + description: This feature manages the visibility of sponsored shortcuts on the homepage + variables: + enabled: + description: Setting 'enabled' to false will hide sponsored shortcuts on the homepage and disable the respective toggle in the homepage settings + type: Boolean + default: true + homepage-redesign-feature: + description: | + This feature is for managing the roll out of the Homepage New Tab Redesign feature. + variables: + bookmarks-section-default: + description: | + If true, enables the bookmarks homepage section by default + type: Boolean + default: false + categories-enabled: + description: | + If true, enables the categories flow in the stories + type: Boolean + default: false + jbi-section-default: + description: | + If true, enables the jump back in homepage section by default + type: Boolean + default: false + pinned-header-enabled: + description: | + If true, enables the pinned newsfeed header on homepage. + type: Boolean + default: false + search-bar: + description: | + If true, enables the search bar feature on homepage for users. + type: Boolean + default: false + hosted-summarizer-feature: + description: | + This feature enables the hosted summarizer feature. + variables: + enabled: + description: | + Enables the hosted summarizer feature. + type: Boolean + default: true + shakeGesture: + description: | + Enables the shake gesture for the summarizer feature. + type: Boolean + default: true + toolbarEntrypoint: + description: | + Enables the toolbar entrypoint for the summarizer feature. + type: Boolean + default: true + https-upgrade-feature: + description: | + This feature enables automatic https upgrade. This is only available for 18.2+. + variables: + enabled: + description: | + Enables automatic https upgrade. + type: Boolean + default: true + improved-app-store-review-trigger-feature: + description: | + The feature flag to manage the App Store review request trigger. + variables: + enabled: + description: | + Enables the feature. + type: Boolean + default: false + messaging: + description: | + The in-app messaging system + documentation: + - name: User documentation + url: https://experimenter.info/messaging/mobile-messaging + contacts: + - jhugman@mozilla.com + - brennie@mozilla.com + - gbuciu@mozilla.com + - wteichmann@mozilla.com + events: + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_shown + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_clicked + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_expired + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_dismissed + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_malformed + variables: + actions: + description: A growable map of action URLs. + type: Map + default: + OPEN_SETTINGS: ://deep-link?url=settings/general + OPEN_SETTINGS_NEW_TAB: ://deep-link?url=settings/newtab + OPEN_SETTINGS_HOMESCREEN: ://deep-link?url=settings/homepage + OPEN_SETTINGS_WALLPAPERS: ://deep-link?url=settings/wallpaper + OPEN_SETTINGS_EMAIL: ://deep-link?url=settings/mailto + OPEN_SETTINGS_SEARCH_ENGINE: ://deep-link?url=settings/search + OPEN_SETTINGS_PRIVACY: ://deep-link?url=settings/clear-private-data + OPEN_SETTINGS_FXA: ://deep-link?url=settings/fxa + OPEN_SETTINGS_THEME: ://deep-link?url=settings/theme + OPEN_SETTINGS_APP_ICON: ://deep-link?url=settings/app-icon + OPEN_URL: ://open-url + VIEW_BOOKMARKS: ://deep-link?url=homepanel/bookmarks + VIEW_TOP_SITES: ://deep-link?url=homepanel/top-sites + VIEW_READING_LIST: ://deep-link?url=homepanel/reading-list + VIEW_HISTORY: ://deep-link?url=homepanel/history + VIEW_DOWNLOADS: ://deep-link?url=homepanel/downloads + ENABLE_PRIVATE_BROWSING: ://deep-link?url=homepanel/new-private-tab + OPEN_NEW_TAB: ://deep-link?url=homepanel/new-tab + MAKE_DEFAULT_BROWSER: ://deep-link?url=default-browser/system-settings + MAKE_DEFAULT_BROWSER_WITH_TUTORIAL: ://deep-link?url=default-browser/tutorial + OPEN_SHARE_SHEET: ://share-sheet + string-alias: ActionName + message-under-experiment: + description: 'Deprecated. Please use "experiment": "{experiment}" instead.' + type: Option + default: null + messages: + description: | + A growable collection of messages, where the Key is the message identifier and the value is its associated MessageData. + type: Map + default: + homepage-microsurvey-message: + surface: microsurvey + style: MICROSURVEY + trigger-if-all: + - SECOND_HOMEPAGE_VIEW + title: Microsurvey/Microsurvey.Prompt.TitleLabel.v127 + text: How satisfied are you with your Firefox homepage? + button-label: Microsurvey/Microsurvey.Prompt.Button.v127 + microsurveyConfig: + utm-content: homepage + icon: homeLarge + options: + - Microsurvey/Microsurvey.Survey.Options.VerySatisfied.v132 + - Microsurvey/Microsurvey.Survey.Options.Satisfied.v132 + - Microsurvey/Microsurvey.Survey.Options.Neutral.v132 + - Microsurvey/Microsurvey.Survey.Options.Dissatisfied.v132 + - Microsurvey/Microsurvey.Survey.Options.VeryDissatisfied.v132 + - Microsurvey/Microsurvey.Survey.Options.NotApplicable.v132 + survey-surface-message: + surface: survey + style: SURVEY + trigger-if-all: + - NEVER + text: ResearchSurface/Body.Text.v112 + button-label: ResearchSurface/PrimaryButton.Label.v112 + action: OPEN_URL + action-params: + url: https://www.macrumors.com + string-alias: MessageKey + on-control: + description: What should be displayed when a control message is selected. + type: ControlMessageBehavior + default: show-next-message + styles: + description: | + A map of styles to configure message appearance. + type: Map + default: + FALLBACK: + priority: 40 + max-display-count: 20 + DEFAULT: + priority: 50 + max-display-count: 5 + MICROSURVEY: + priority: 50 + max-display-count: 1 + NOTIFICATION: + priority: 50 + max-display-count: 1 + PERSISTENT: + priority: 50 + max-display-count: 20 + SURVEY: + priority: 55 + max-display-count: 10 + WARNING: + priority: 60 + max-display-count: 10 + URGENT: + priority: 100 + max-display-count: 10 + string-alias: StyleName + triggers: + description: | + A collection of out the box trigger expressions. Each entry maps to a valid JEXL expression. + type: Map + default: + ALWAYS: 'true' + NEVER: 'false' + 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' + 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 + NOT_LAUNCHED_YESTERDAY: '''app_cycle.foreground''|eventLastSeen(''Days'', 1) > 1' + AFTER_THREE_LAUNCHES_THIS_WEEK: '''app_cycle.foreground''|eventSum(''Weeks'', 1, 0) >= 3' + I_AM_DEFAULT_BROWSER: is_default_browser + I_AM_NOT_DEFAULT_BROWSER: is_default_browser == false + SUPPORTS_DEFAULT_BROWSER: os_version|versionCompare('14.!') >= 0 + INACTIVE_NEW_USER: is_inactive_new_user + ALLOWED_TIPS_NOTIFICATIONS: allowed_tips_notifications + FXA_CURRENTLY_SIGNED_IN: is_fxa_signed_in == true + SECOND_HOMEPAGE_VIEW: '''homepage_viewed''|eventSum(''Years'', 4, 0) >= 2' + ON_FOURTH_LAUNCH_THIS_YEAR: '''app_cycle.foreground''|eventSum(''Years'', 1, 0) > 3' + string-alias: TriggerName + ~~experiment: + description: Not to be set by experiment. + type: ExperimentSlug + default: '{experiment}' + string-alias: ExperimentSlug + allow-coenrollment: true + microsurvey-feature: + description: | + A feature that shows the microsurvey for users to interact with and submit responses. + variables: + enabled: + description: | + If true, the feature is active. + type: Boolean + default: true + native-error-page-feature: + description: | + This feature is for managing the roll out of the native error page feature + variables: + bad-cert-domain-error-page: + description: | + This feature is for managing the roll out of the bad certificate domain native error page + type: Boolean + default: false + enabled: + description: | + If true, the feature is active. + type: Boolean + default: true + no_internet_connection_error: + description: | + This feature is for managing the roll out of the no interet connection native error page feature + type: Boolean + default: true + needs-reload-refactor: + description: | + This is a technical refactor which cleans up the reloading of the webview + variables: + enabled: + description: | + Whether or not this refactor is enabled + type: Boolean + default: true + onboarding-framework-feature: + description: | + The new onboarding framework feature that will allow onboarding to be experimentable through initial experiments. + variables: + cards: + description: | + The list of available cards for onboarding. + type: Map + default: + welcome: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Welcome.Title.TreatementA.v120 + body: Onboarding/Onboarding.Welcome.Description.TreatementA.v120 + image: welcome-globe + buttons: + primary: + title: Onboarding/Onboarding.Welcome.ActionTreatementA.v114 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Welcome.Skip.v114 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + notification-permissions: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Notification.Title.v120 + body: Onboarding/Onboarding.Notification.Description.v120 + image: notifications + buttons: + primary: + title: Onboarding/Onboarding.Notification.TurnOnNotifications.Action.v114 + action: request-notifications + secondary: + title: Onboarding/Onboarding.Notification.Skip.Action.v115 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + sign-to-sync: + card-type: basic + order: 20 + title: Onboarding/Onboarding.Sync.Title.v120 + body: Onboarding/Onboarding.Sync.Description.v123 + image: sync-devices + buttons: + primary: + title: Onboarding/Onboarding.Sync.SignIn.Action.v114 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Sync.Skip.Action.v114 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + customization-theme: + card-type: multiple-choice + order: 40 + title: Onboarding/Onboarding.Customization.Theme.Title.v123 + body: Onboarding/Onboarding.Customization.Theme.Description.v123 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Customization.Theme.Continue.Action.v123 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Customization.Theme.System.Action.v123 + image: theme-system + action: theme-system-default + - title: Onboarding/Onboarding.Customization.Theme.Light.Action.v123 + image: theme-light + action: theme-light + - title: Onboarding/Onboarding.Customization.Theme.Dark.Action.v123 + image: theme-dark + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + customization-toolbar: + card-type: multiple-choice + order: 41 + title: Onboarding/Onboarding.Customization.Toolbar.Title.v123 + body: Onboarding/Onboarding.Customization.Toolbar.Description.v123 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Customization.Toolbar.Continue.Action.v123 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Customization.Toolbar.Top.Action.v123 + image: toolbar-top + action: toolbar-top + - title: Onboarding/Onboarding.Customization.Toolbar.Bottom.Action.v123 + image: toolbar-bottom + action: toolbar-bottom + onboarding-type: fresh-install + prerequisites: + - ALWAYS + update-welcome: + card-type: basic + order: 10 + title: Upgrade/Upgrade.Welcome.Title.v114 + body: Upgrade/Upgrade.Welcome.Description.v114 + image: welcome-globe + buttons: + primary: + title: Upgrade/Upgrade.Welcome.Action.v114 + action: forward-one-card + onboarding-type: upgrade + prerequisites: + - NEVER + update-sign-to-sync: + card-type: basic + order: 20 + title: Upgrade/Upgrade.SyncSign.Title.v114 + body: Upgrade/Upgrade.SyncSign.Description.v114 + image: sync-devices + buttons: + primary: + title: Upgrade/Upgrade.SyncSign.Action.v114 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.LaterAction.v114 + action: forward-one-card + onboarding-type: upgrade + prerequisites: + - NEVER + welcome-modern: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Modern.Welcome.Title.v140 + body: Onboarding/Onboarding.Modern.Welcome.Description.v140 + image: trackers + buttons: + primary: + title: Onboarding/Onboarding.Modern.Welcome.ActionTreatementA.v140 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Modern.Welcome.Skip.v140 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + sign-to-sync-modern: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Modern.Sync.Title.v140 + body: Onboarding/Onboarding.Modern.Sync.Description.v140 + image: sync-with-icons + buttons: + primary: + title: Onboarding/Onboarding.Modern.Sync.SignIn.Action.v140 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Modern.Sync.Skip.Action.v140 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + customization-toolbar-modern: + card-type: multiple-choice + order: 20 + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Title.v140 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Theme.Continue.Action.v140 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Bottom.Action.v140 + image: toolbar-bottom + action: toolbar-bottom + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Top.Action.v140 + image: toolbar-top + action: toolbar-top + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + customization-theme-modern: + card-type: multiple-choice + order: 25 + title: Onboarding/Onboarding.Customization.Theme.Title.v143 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Theme.Continue.Action.v140 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Customization.Theme.System.Action.v123 + image: theme-system + action: theme-system-default + - title: Onboarding/Onboarding.Customization.Theme.Light.Action.v123 + image: theme-light + action: theme-light + - title: Onboarding/Onboarding.Customization.Theme.Dark.Action.v123 + image: theme-dark + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + welcome-modern-japan: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Modern.Welcome.Title.v145 + body: Onboarding/Onboarding.Modern.Welcome.Description.v145 + image: trackers-japan + buttons: + primary: + title: Onboarding/Onboarding.Modern.Welcome.ActionTreatmentA.v145 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Modern.Welcome.Skip.v145 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + sign-to-sync-modern-japan: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Modern.Sync.Title.v145 + body: Onboarding/Onboarding.Modern.Sync.Description.v145 + image: sync-with-icons-japan + buttons: + primary: + title: Onboarding/Onboarding.Modern.Sync.SignIn.Action.v145 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Modern.Sync.Skip.Action.v145 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + customization-toolbar-modern-japan: + card-type: multiple-choice + order: 20 + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Title.v145 + body: Onboarding/Onboarding.Modern.Customization.Toolbar.Description.v145 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Continue.Action.v145 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Bottom.Action.v145 + image: toolbar-bottom-japan + action: toolbar-bottom + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Top.Action.v145 + image: toolbar-top-japan + action: toolbar-top + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + customization-theme-modern-japan: + card-type: multiple-choice + order: 25 + title: Onboarding/Onboarding.Modern.Customization.Theme.Title.v145 + body: Onboarding/Onboarding.Modern.Customization.Theme.Description.v145 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Continue.Action.v145 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Theme.Automatic.v145 + image: theme-system-japan + action: theme-system-default + - title: Onboarding/Onboarding.Modern.Customization.Theme.Light.v145 + image: theme-light-japan + action: theme-light + - title: Onboarding/Onboarding.Modern.Customization.Theme.Dark.v145 + image: theme-dark-japan + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + welcome-brand-refresh: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.TitleV3.v149 + body: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.Description.v148 + image: trackers-brand-refresh + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.ActionTreatmentA.v148 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.Skip.v148 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + customization-toolbar-brand-refresh: + card-type: multiple-choice + order: 20 + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Toolbar.Title.v148 + body: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Toolbar.Description.v148 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Toolbar.Continue.Action.v148 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Bottom.Action.v140 + image: toolbar-bottom-japan + action: toolbar-bottom + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Top.Action.v140 + image: toolbar-top-japan + action: toolbar-top + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + customization-theme-brand-refresh: + card-type: multiple-choice + order: 25 + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Title.v148 + body: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Description.v148 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Continue.Action.v148 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Automatic.v148 + image: theme-system-japan + action: theme-system-default + - title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Light.v148 + image: theme-light-japan + action: theme-light + - title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Dark.v148 + image: theme-dark-japan + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + sign-to-sync-brand-refresh: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Modern.BrandRefresh.Sync.Title.v148 + body: Onboarding/Onboarding.Modern.BrandRefresh.Sync.Description.v148 + image: sync-with-icons-brand-refresh + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Sync.SignIn.Action.v148 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Sync.Skip.Action.v148 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + string-alias: NimbusOnboardingCardKey + conditions: + description: | + A collection of out the box conditional expressions to be used in determining whether a card should show or not. Each entry maps to a valid JEXL expression. + type: Map + default: + ALWAYS: 'true' + NEVER: 'false' + string-alias: ConditionName + dismissable: + description: | + Whether or not the entire onboarding is dismissable by pressing an X at the top right corner of the screen. + type: Boolean + default: true + enable-modern-ui: + description: | + Toggle between legacy (false) and modern (true) UI variants. + type: Boolean + default: true + enable-video-intro: + description: | + When true, a full-screen video is displayed before the Terms of Service screen during fresh-install onboarding. + type: Boolean + default: false + should-use-brand-refresh-configuration: + description: | + Toggle between standard (false) and brand refresh (true) onboarding content. + type: Boolean + default: true + should-use-japan-configuration: + description: | + Toggle between standard (false) and Japan-specific (true) assets and content. + type: Boolean + default: false + quick-answers-feature: + description: | + The feature flag to manage the roll out of the quick answers feature. + variables: + enabled: + description: | + Enables the feature. + type: Boolean + default: false + recent-searches-feature: + description: | + Enables recent searches. + variables: + enabled: + description: | + Whether or not to enable recent searches. + type: Boolean + default: false + max-suggestions: + description: The number of maximum suggestions. + type: Int + default: 5 + relay-integration-feature: + description: | + This feature is for managing the roll out of Relay email masking integration in iOS + variables: + enabled: + description: | + Enables the feature + type: Boolean + default: false + search: + description: | + Configuring the functionality to do with search. This will be separated into smaller sub-features in later releases. + variables: + awesome-bar: + description: Configuring the awesome bar. + type: AwesomeBar + default: + min-search-term: 3 + search-highlights: false + use-page-content: false + sent-from-firefox-feature: + description: | + Adds additional promo text to links shared to WhatsApp. + variables: + enabled: + description: | + Controls whether promo text is added to WhatsApp shares and an on/off toggle is added to Settings. + type: Boolean + default: true + isTreatmentA: + description: | + If true, shares the treatment A text. If false, shares the treatment B text. + type: Boolean + default: true + snapkit-removal-refactor: + description: This property defines if SnapKit removal refactor is enabled + variables: + enabled: + description: If true the SnapKit removal refactor version will be used + type: Boolean + default: true + 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: 6000 + spotlight-search: + description: Add pages as items findable with Spotlight. + variables: + enabled: + description: If this is true, then on each page load adds a new item to Spotlight. + type: Boolean + default: true + icon-type: + description: | + The icon that is displayed next to the item in the search results. If this is `null`, then no icon is displayed. + type: Option + default: screenshot + keep-for-days: + description: | + Number of days to keep the item before automatic deletion. If this is left `null`, then it is left to iOS's default. + type: Option + default: null + searchable-content: + description: | + The text content that is made searchable. If this is `null` then no additional content is used, and only the title and URL will be used. + type: Option + default: text-excerpt + start-at-home-feature: + description: This feature is for experimenting with opening screen + variables: + setting: + description: This property provides a default setting for the start at home feature + type: StartAtHome + default: afterFourHours + summarizer-app-attest-auth-feature: + description: | + This feature enables app attest authentication for the summarizer. + variables: + enabled: + description: | + Enables app attest authentication for the summarizer. + type: Boolean + default: true + summarizer-language-expansion-feature: + description: | + The feature flag to manage the rollout of the summarizer language expansion. + variables: + enabled: + description: | + Whether the feature is enabled or not. + type: Boolean + default: false + supportedLocales: + description: | + The list of supported locale identifiers for the summarizer language expansion according to BCP47 standard. i.e "en-US" for English (United States). + type: List + default: + - en + - it + - fr + - es + - de + - pt + summarizer-permissive-guardrails-feature: + description: | + This feature enables permissive guardrails for the summarizer. + variables: + enabled: + description: | + Enables permissive guardrails for the summarizer. + type: Boolean + default: true + tab-scroll-refactor-feature: + description: | + The feature flag to manage the rollout of tab scroll refactor feature. + variables: + enabled: + description: | + If true, tab scroll new implementation is used to show and hide toolbar views reacting to user scroll + type: Boolean + default: false + tab-tray-ui-experiments: + description: | + The tab tray will undergo some UI experimentation to test potential improvements. + variables: + enabled: + description: | + If true, enables the tab tray UI experiments. + type: Boolean + default: true + iPad_update_enabled: + description: | + If true, enables the tab tray UI experiments on iPad. + type: Boolean + default: false + translucency: + description: | + If true, enables translucency for tab tray actions at the bottom. + type: Boolean + default: true + toolbar-refactor-feature: + description: | + This feature is for managing the roll out of the Toolbar refactor feature + variables: + layout: + description: | + The type of layout of the toolbars. + type: Option + default: version1 + tab_tray_button_type: + description: | + The style of the tab tray button in the toolbar. + type: TabTrayButtonType + default: number + unified_search: + description: | + Enables the unified search feature. + type: Boolean + default: false + tos-feature: + description: | + This feature is for managing the roll out of the ToS (Term of Service) implementation + variables: + status: + description: | + Enables the feature + type: Boolean + default: true + tou-feature: + description: | + This feature is for managing the rollout of the Terms of Use (ToU) implementation. + variables: + content-option: + description: | + Determines which predefined title and "learn more" strings are used for the Terms of Use prompt. + type: TermsOfUsePromptContentOption + default: value-0 + enable-drag-to-dismiss: + description: | + Whether to show a drag handle on the prompt and allows users to use it to dismiss the prompt. + type: Boolean + default: true + max-reminders-count: + description: | + Maximum number of ToU bottom sheet reminders that can be displayed + type: Int + default: 2 + status: + description: | + Enables the feature + type: Boolean + default: false + tracking-protection-refactor: + description: | + The Enhanced Tracking Protection refactor + variables: + enabled: + description: | + Whether the Enhanced Tracking Protection refactor is enabled or not + type: Boolean + default: true + translations-feature: + description: | + Enables translations feature. + variables: + enabled: + description: | + Whether or not to enable translations feature. + type: Boolean + default: true + languagePickerEnabled: + description: | + Whether or not to enable the translations language picker (Phase 2). + type: Boolean + default: false + trending-searches-feature: + description: | + Enables trending searches. + variables: + enabled: + description: | + Whether or not to enable trending searches. + type: Boolean + default: false + max-suggestions: + description: The number of maximum suggestions. + type: Int + default: 5 + world-cup-widget-feature: + description: | + The feature flag to manage the roll out of the world cup widget feature + variables: + countdown-target-date: + description: | + The ISO 8601 date string for the World Cup countdown target + type: String + default: 2026-06-11T19:00:00Z + enabled: + description: | + Whether or not this feature is enabled + type: Boolean + default: false +enums: + ControlMessageBehavior: + description: An enum to influence what should be displayed when a control message is selected. + variants: + show-next-message: + description: The next eligible message should be shown. + show-none: + description: The surface should show no message. + IconType: + description: The icon that will be added to the item in the device's search engine. + variants: + favicon: + description: The favicon of the page + letter: + description: An icon generated from the first letter of the base domain. + screenshot: + description: A screenshot of the page at load time. + MessageSurfaceId: + description: | + For messaging, we would like to have a message tell us which surface its associated with. This is a label that matches across both Android and iOS. + variants: + Unknown: + description: A message has NOT declared its target surface. + microsurvey: + description: This is a microsurvey that appears on top of the bottom toolbar to the user. + new-tab-card: + description: This is the card that appears at the top on the Firefox Home Page. + notification: + description: This is a local notification send to the user periodically with tips and updates. + survey: + description: This is a full-page that appears providing a survey to the user. + NimbusOnboardingHeaderImage: + description: | + The identifiers for the different images available for cards in onboarding + variants: + customize-firefox: + description: | + Corresponding to the fox window image + notifications: + description: | + Corresponding to the notifications image + notifications-ctd: + description: | + Corresponding to the notifications image for CTD + search-widget: + description: | + Corresponding to the fox search widget image + set-default-steps: + description: | + Corresponding to the set to default steps image + set-to-dock: + description: | + Corresponding to the set to dock image + sync-devices: + description: | + Corresponding to the sync-devices image + sync-devices-ctd: + description: | + Corresponding to the sync image for CTD + sync-with-icons: + description: | + Corresponding to the sync-devices image + sync-with-icons-brand-refresh: + description: | + Corresponding to the sync-with-icons image for Brand Refresh variant (different from Japan variant) + sync-with-icons-japan: + description: | + Corresponding to the sync-with-icons image for Japan variant + themeing: + description: | + Corresponding to the fox world image + toolbar: + description: | + Corresponding to the fox world image + trackers: + description: | + Corresponding to the trackers image + trackers-brand-refresh: + description: | + Corresponding to the trackers image for Brand Refresh variant (does not contain Japanese text, different from Japan variant) + trackers-japan: + description: | + Corresponding to the trackers image for Japan variant (contains Japanese text) + welcome-ctd: + description: | + Corresponding to the welcome image for CTD + welcome-globe: + description: | + Corresponding to the fox world image + NimbusOnboardingMultipleChoiceButtonImage: + description: | + The identifiers for the different images available for multiple choice buttons in onboarding + variants: + theme-dark: + description: | + Corresponding to the dark theme + theme-dark-japan: + description: | + Corresponding to the dark theme image for Japan variant. Also used by Brand Refresh variant as the images are identical. + theme-light: + description: | + Corresponding to the light theme + theme-light-japan: + description: | + Corresponding to the light theme image for Japan variant. Also used by Brand Refresh variant as the images are identical. + theme-system: + description: | + Corresponding to the system theme + theme-system-japan: + description: | + Corresponding to the system theme image for Japan variant. Also used by Brand Refresh variant as the images are identical. + toolbar-bottom: + description: | + Corresponding to the toolbar on the bottom + toolbar-bottom-japan: + description: | + Corresponding to the toolbar on the bottom image for Japan variant. Also used by Brand Refresh variant as the images are identical. + toolbar-top: + description: | + Corresponding to the toolbar on top + toolbar-top-japan: + description: | + Corresponding to the toolbar on top image for Japan variant. Also used by Brand Refresh variant as the images are identical. + OnboardingActions: + description: | + The identifiers for the different actions available for cards in onboarding + variants: + end-onboarding: + description: | + Will end the onboarding on a set card + forward-one-card: + description: | + Will take the user to the next card + forward-three-card: + description: | + Will take the user to the next card + forward-two-card: + description: | + Will take the user to the next card + open-instructions-popup: + description: | + Will open up a popup with instructions for something + open-ios-fx-settings: + description: | + Will take the user to the default browser settings in the iOS system settings + read-privacy-policy: + description: | + Will open a webview where the user can read the privacy policy + request-notifications: + description: | + Will request to allow notifications from the user + set-default-browser: + description: | + Will send the user to settings to set Firefox as their default browser and advance to next card + sync-sign-in: + description: | + Will take the user to the sync sign in flow + OnboardingCardType: + description: | + The identifiers for the different types of onboarding cards. + variants: + basic: + description: | + Corresponding to basic info onboarding cards + multiple-choice: + description: | + Corresponding to onboarding cards with multiple choice buttons + OnboardingInstructionsPopupActions: + description: | + The identifiers for the different actions available for the instruction card in onboarding + variants: + dismiss: + description: | + Will dismiss the popup + dismiss-and-next-card: + description: | + Will dismiss the popup and move to the next card + open-ios-fx-settings: + description: | + Will take the user to the default browser settings in the iOS system settings + OnboardingMultipleChoiceAction: + description: | + The identifiers for the different actions available for cards in onboarding + variants: + theme-dark: + description: | + Will will set the theme to dark mode + theme-light: + description: | + Will set the theme to light mode + theme-system-default: + description: | + Will set the theme to use the system theme + toolbar-bottom: + description: | + Will set the toolbar on the bottom + toolbar-top: + description: | + Will set the toolbar on the top + OnboardingType: + description: | + The identifiers for the different types of onboarding cards. + variants: + fresh-install: + description: | + Corresponding to onboarding cards that are for new users + upgrade: + description: | + Corresponding to onboarding cards that are for users who have updated + OnboardingVariant: + description: | + Which UI style this onboarding card is designed for. + variants: + brandRefresh: + description: Use the brand refresh onboarding UI with v148 strings. + japan: + description: Use the Japan-specific onboarding UI with localized assets. + legacy: + description: Use the existing (legacy) onboarding UI. + modern: + description: Use the new (modern) onboarding UI. + PageContent: + description: The page content that will be added as an item in the device's search engine. + variants: + html-content: + description: Use all the page as HTML + text-content: + description: Use all the page as text + text-excerpt: + description: Only use the first paragraph + StartAtHome: + description: The option for what screen to open the app to + variants: + afterFourHours: + description: Starts the app at the homepage after four hours of inactivity, otherwise starts the app at the most recently viewed tab. + always: + description: Starts the app at the homepage. + disabled: + description: Starts the app at the most recently viewed tab. + SuggestionType: + description: The type of a Firefox Suggest search suggestion. + variants: + amp: + description: A Firefox Suggestion for desktop from adMarketplace. + ampMobile: + description: A Firefox Suggestion specifically for mobile from adMarketplace. + wikipedia: + description: A Firefox Suggestion for a Wikipedia page. + TabTrayButtonType: + description: The style of the tab tray button in the toolbar. + variants: + number: + description: The original tab tray button style that show the icon with the number of tabs. + screenshot: + description: The new tab tray button style that shows two images stacked with the previous and next tab. + TermsOfUsePromptContentOption: + description: | + Determines which predefined title and "learn more" strings are used for the Terms of Use prompt. + variants: + value-0: + description: | + Uses the current defaults: + - Title: "We've got an update" + - Learn more: "Please take a moment to review and accept. Learn more." + value-1: + description: | + Uses the following copy: + - Title: "Terms of Use" + - Learn more: "You can learn more here." + value-2: + description: | + Uses the following copy: + - Title: "A note from Firefox" + - Learn more: "You can learn more here." + ToolbarLayoutType: + description: The type of toolbar layout. + variants: + version1: + description: Shows the add new tab, menu and tabs button in the navigation toolbar. The share button is displayed in the address toolbar. + version2: + description: Like version1 but the menu and tabs buttons are inverted. +objects: + AwesomeBar: + description: A configuration option for the awesome bar. Part of the `search` feature. + fields: + min-search-term: + description: The minimum number of characters that the user types before searching in the page. + type: Int + default: 3 + search-highlights: + description: Whether or not search highlights are enabled + type: Boolean + default: false + use-page-content: + description: Search in the open tab's text content when typing. + type: Boolean + default: false + GeneralFeature: + description: The configuration for the a feature that can be enabled or disabled + fields: + status: + description: Whether or not the feature is enabled + type: Boolean + default: false + MessageData: + description: | + An object to describe a message. It uses human readable strings to describe the triggers, action and style of the message as well as the text of the message and call to action. + fields: + action: + description: | + The name of a deeplink URL to be opened if the button is clicked. + type: Option + default: null + action-params: + description: Query parameters appended to the deeplink action URL + type: Map + default: {} + button-label: + description: | + The text on the button. If no text is present, the whole message is clickable. + type: Option + default: null + except-if-any: + description: | + A list of strings corresponding to targeting expressions. If any of these expressions evaluate to `true`, the message will not be eligible. + type: List + default: [] + experiment: + description: The experiment slug that this message is involved in. + type: Option + default: null + is-control: + description: Indicates if this message is the control message, if true shouldn't be displayed + type: Boolean + default: false + microsurveyConfig: + description: Optional configuration data for a microsurvey. + type: Option + default: null + style: + description: | + The style as described in a `StyleData` from the styles table. + type: StyleName + default: DEFAULT + surface: + description: Each message will tell us the surface it is targeting with this. + type: MessageSurfaceId + default: Unknown + text: + description: The message text displayed to the user + type: Text + default: '' + title: + description: The title text displayed to the user + type: Option + default: null + trigger-if-all: + description: | + A list of strings corresponding to targeting expressions. All named expressions must evaluate to true if the message is to be eligible to be shown. + type: List + default: + - ALWAYS + MicrosurveyConfig: + description: | + Attributes relating to microsurvey messaging. + fields: + icon: + description: The asset name in our bundle used as the icon shown in the survey. + type: Image + default: lightbulbLarge + options: + description: The list of survey options to present to the user. + type: List + default: [] + utm-content: + description: The name used to provide as the utm_content parameter for the privacy notice. + type: Option + default: null + NimbusOnboardingButton: + description: | + A group of properties describing the attributes of a card. + fields: + action: + description: | + The action the button should take. The default for this will be "forward-one-card" + type: OnboardingActions + default: forward-one-card + title: + description: | + The text of the button title. This should never be defaulted. + type: Text + default: '' + NimbusOnboardingButtons: + description: | + A set of buttons for the card. There can be up to two, but there must be at least one. + fields: + primary: + description: | + The primary button for the card. This must exist. + type: NimbusOnboardingButton + default: + title: Primary Button + action: forward-one-card + secondary: + description: | + A secondary, optional, button for the card. + type: Option + default: null + NimbusOnboardingCardData: + description: | + A group of properties describing the attributes of a card. + fields: + body: + description: | + The body text displayed on the card, in less prominent text. This should never be defaulted. + type: Text + default: '' + buttons: + description: | + The set of buttons associated with the card. + type: NimbusOnboardingButtons + default: + primary: + title: Onboarding/Onboarding.Sync.Skip.Action.v114 + action: forward-one-card + secondary: null + card-type: + description: | + The type of onboarding this card should be shown in, whether it a fresh install or an update. The default is fresh-install. + type: OnboardingCardType + default: basic + disqualifiers: + description: | + A list of ConditionName strings corresponding to targeting expressions. The card will not be shown if any expression is `true`. + type: List + default: [] + image: + description: | + The image that should be displayed on the card. + type: NimbusOnboardingHeaderImage + default: welcome-globe + instructions-popup: + description: | + The object describing the specific instruction popup button for a card. If left empty, the card will have no instruction popup information + type: Option + default: null + link: + description: | + The object describing the link button for a card. If left empty, the card will have no link. + type: Option + default: null + multiple-choice-buttons: + description: | + A list of multiple choice buttons that the card will display + type: List + default: [] + onboarding-type: + description: | + The type of onboarding this card should be shown in, whether it a fresh install or an update. The default is fresh-install. + type: OnboardingType + default: fresh-install + order: + description: | + The place in the order where the card will be found. The feature layer will then sort the cards based on this field. + type: Int + default: 10 + prerequisites: + description: | + A list of ConditionName strings corresponding to targeting expressions. The card will be shown if all expressions `true` and if no expressions in the `disqualifiers` table are true, or if the `disqualifiers` table is empty. + type: List + default: [] + title: + description: | + The title displayed on the card, in prominent, bolded text. This should never be defaulted. + type: Text + default: '' + uiVariant: + description: | + If set, this card will only be shown in the specified UI variant. If null, it will appear in both legacy and modern UIs. + type: Option + default: null + NimbusOnboardingInstructionPopup: + description: | + The object outlining the content of the instruction card. + fields: + button-action: + description: | + The action the button should have. Default is `dismiss-and-next-card` + type: OnboardingInstructionsPopupActions + default: dismiss-and-next-card + button-title: + description: | + The title the button should have. This should never be defaulted. + type: Text + default: '' + instructions: + description: | + A list of instructions, either as free text, or as Text identifiers. + type: List + default: [] + title: + description: | + The text of the popup. This should never be defaulted. + type: Text + default: '' + NimbusOnboardingLink: + description: | + A group of properties describing the attributes for the active link on a card + fields: + title: + description: | + The text of the link title. + type: Text + default: Onboarding/Onboarding.Welcome.Link.Action.v114 + url: + description: | + The url that the link will lead to. + type: String + default: https://www.mozilla.org/privacy/firefox/ + NimbusOnboardingMultipleChoiceButton: + description: | + A group of properties describing the attributes of a multiple choice button on a card + fields: + action: + description: | + The action the button should take. The default for this will be "theme-system-default" + type: OnboardingMultipleChoiceAction + default: theme-system-default + image: + description: | + The text of the button title. This should never be defaulted. + type: NimbusOnboardingMultipleChoiceButtonImage + default: theme-system + title: + description: | + The text of the button title. This should never be defaulted. + type: Text + default: '' + StyleData: + description: | + A group of properties (predominantly visual) to the describe style of the message. + fields: + max-display-count: + description: | + How many sessions will this message be shown to the user before it is expired. + type: Int + default: 5 + priority: + description: | + The importance of this message. 0 is not very important, 100 is very important. + type: Int + default: 50 diff --git a/experimenter/experimenter/features/manifests/ios/v151.0.1/experimenter.yaml b/experimenter/experimenter/features/manifests/ios/v151.0.1/experimenter.yaml new file mode 100644 index 000000000..d19bc9ff2 --- /dev/null +++ b/experimenter/experimenter/features/manifests/ios/v151.0.1/experimenter.yaml @@ -0,0 +1,572 @@ +address-autofill-edit: + description: This property defines if the address editing is enabled in Settings + hasExposure: true + exposureDescription: '' + variables: + status: + type: boolean + description: If true, we will allow user to edit the address +address-bar-menu-feature: + description: | + This property determines if we show the new address bar menu entry or the toolbar menu in settings + hasExposure: true + exposureDescription: '' + variables: + status: + type: boolean + description: If true, we will show the new address bar menu entry +ads-client: + description: This property defines if the rust ads client is enabled + hasExposure: true + exposureDescription: '' + variables: + status: + type: boolean + description: If true, we will enable the rust ads client +ai-kill-switch-feature: + description: | + Configuration feature for AI features + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Whether or not this feature is enabled +app-icon-selection-feature: + description: | + Controls which app icons users can select as their default app icon from the App Icon Selection screen in Settings. + hasExposure: true + exposureDescription: '' + variables: + funIconsEnabled: + type: boolean + description: | + Controls whether users see the fun icons in the app icon settings. +appearance-menu-feature: + description: | + This property determines if we show the new appearance menu entry or the old theme settings + hasExposure: true + exposureDescription: '' + variables: + status: + type: boolean + description: If true, we will show the new appearance menu entry +bookmarks-search-feature: + description: | + Configuration feature for the bookmarks search bar + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Whether or not this feature is enabled +deeplink-optimization-refactor-feature: + description: | + The feature flag to manage the rollout of deeplink optimization feature. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Variable description +download-live-activities-feature: + description: | + Download Live Activities Feature + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + If true, the download live activities feature is enabled +firefox-jp-guide-default-site: + description: | + This feature is for managing the visibility of the Firefox Japanese Guide default suggested site shortcut + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Enables the feature. +firefox-suggest-feature: + description: Configuration for the Firefox Suggest feature. + hasExposure: true + exposureDescription: '' + variables: + available-suggestions-types: + type: json + description: | + A map of suggestion types to booleans that indicate whether or not the provider should return suggestions of those types. + status: + type: boolean + description: | + Whether the feature is enabled. When Firefox Suggest is enabled, Firefox will download and store new search suggestions in the background, and show additional Search settings to control which suggestions appear in the awesomebar. When Firefox Suggest is disabled, Firefox will not download new suggestions, and hide the additional Search settings. +general-app-features: + description: The feature that contains feature flags for the entire application + hasExposure: true + exposureDescription: '' + variables: + report-site-issue: + type: json + description: This property defines whether or not the feature is enabled +hnt-sponsored-shortcuts-feature: + description: This feature manages the visibility of sponsored shortcuts on the homepage + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: Setting 'enabled' to false will hide sponsored shortcuts on the homepage and disable the respective toggle in the homepage settings +homepage-redesign-feature: + description: | + This feature is for managing the roll out of the Homepage New Tab Redesign feature. + hasExposure: true + exposureDescription: '' + variables: + bookmarks-section-default: + type: boolean + description: | + If true, enables the bookmarks homepage section by default + categories-enabled: + type: boolean + description: | + If true, enables the categories flow in the stories + jbi-section-default: + type: boolean + description: | + If true, enables the jump back in homepage section by default + pinned-header-enabled: + type: boolean + description: | + If true, enables the pinned newsfeed header on homepage. + search-bar: + type: boolean + description: | + If true, enables the search bar feature on homepage for users. +hosted-summarizer-feature: + description: | + This feature enables the hosted summarizer feature. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Enables the hosted summarizer feature. + shakeGesture: + type: boolean + description: | + Enables the shake gesture for the summarizer feature. + toolbarEntrypoint: + type: boolean + description: | + Enables the toolbar entrypoint for the summarizer feature. +https-upgrade-feature: + description: | + This feature enables automatic https upgrade. This is only available for 18.2+. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Enables automatic https upgrade. +improved-app-store-review-trigger-feature: + description: | + The feature flag to manage the App Store review request trigger. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Enables the feature. +messaging: + description: | + The in-app messaging system + hasExposure: true + exposureDescription: '' + variables: + actions: + type: json + description: A growable map of action URLs. + message-under-experiment: + type: string + description: 'Deprecated. Please use "experiment": "{experiment}" instead.' + messages: + type: json + description: | + A growable collection of messages, where the Key is the message identifier and the value is its associated MessageData. + on-control: + type: string + description: What should be displayed when a control message is selected. + enum: + - show-next-message + - show-none + styles: + type: json + description: | + A map of styles to configure message appearance. + triggers: + type: json + description: | + A collection of out the box trigger expressions. Each entry maps to a valid JEXL expression. + ~~experiment: + type: string + description: Not to be set by experiment. +microsurvey-feature: + description: | + A feature that shows the microsurvey for users to interact with and submit responses. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + If true, the feature is active. +native-error-page-feature: + description: | + This feature is for managing the roll out of the native error page feature + hasExposure: true + exposureDescription: '' + variables: + bad-cert-domain-error-page: + type: boolean + description: | + This feature is for managing the roll out of the bad certificate domain native error page + enabled: + type: boolean + description: | + If true, the feature is active. + no_internet_connection_error: + type: boolean + description: | + This feature is for managing the roll out of the no interet connection native error page feature +needs-reload-refactor: + description: | + This is a technical refactor which cleans up the reloading of the webview + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Whether or not this refactor is enabled +onboarding-framework-feature: + description: | + The new onboarding framework feature that will allow onboarding to be experimentable through initial experiments. + hasExposure: true + exposureDescription: '' + variables: + cards: + type: json + description: | + The list of available cards for onboarding. + conditions: + type: json + description: | + A collection of out the box conditional expressions to be used in determining whether a card should show or not. Each entry maps to a valid JEXL expression. + dismissable: + type: boolean + description: | + Whether or not the entire onboarding is dismissable by pressing an X at the top right corner of the screen. + enable-modern-ui: + type: boolean + description: | + Toggle between legacy (false) and modern (true) UI variants. + enable-video-intro: + type: boolean + description: | + When true, a full-screen video is displayed before the Terms of Service screen during fresh-install onboarding. + should-use-brand-refresh-configuration: + type: boolean + description: | + Toggle between standard (false) and brand refresh (true) onboarding content. + should-use-japan-configuration: + type: boolean + description: | + Toggle between standard (false) and Japan-specific (true) assets and content. +quick-answers-feature: + description: | + The feature flag to manage the roll out of the quick answers feature. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Enables the feature. +recent-searches-feature: + description: | + Enables recent searches. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Whether or not to enable recent searches. + max-suggestions: + type: int + description: The number of maximum suggestions. +relay-integration-feature: + description: | + This feature is for managing the roll out of Relay email masking integration in iOS + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Enables the feature +search: + description: | + Configuring the functionality to do with search. This will be separated into smaller sub-features in later releases. + hasExposure: true + exposureDescription: '' + variables: + awesome-bar: + type: json + description: Configuring the awesome bar. +sent-from-firefox-feature: + description: | + Adds additional promo text to links shared to WhatsApp. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Controls whether promo text is added to WhatsApp shares and an on/off toggle is added to Settings. + isTreatmentA: + type: boolean + description: | + If true, shares the treatment A text. If false, shares the treatment B text. +snapkit-removal-refactor: + description: This property defines if SnapKit removal refactor is enabled + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: If true the SnapKit removal refactor version will be used +splash-screen: + description: | + A feature that extends splash screen duration, allowing additional data fetching time for the app's initial run. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + If true, the feature is active. + maximum_duration_ms: + type: int + description: | + The maximum amount of time in milliseconds the splashscreen will be visible while waiting for initialization calls to complete. +spotlight-search: + description: Add pages as items findable with Spotlight. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: If this is true, then on each page load adds a new item to Spotlight. + icon-type: + type: string + description: | + The icon that is displayed next to the item in the search results. If this is `null`, then no icon is displayed. + keep-for-days: + type: int + description: | + Number of days to keep the item before automatic deletion. If this is left `null`, then it is left to iOS's default. + searchable-content: + type: string + description: | + The text content that is made searchable. If this is `null` then no additional content is used, and only the title and URL will be used. +start-at-home-feature: + description: This feature is for experimenting with opening screen + hasExposure: true + exposureDescription: '' + variables: + setting: + type: string + description: This property provides a default setting for the start at home feature + enum: + - afterFourHours + - always + - disabled +summarizer-app-attest-auth-feature: + description: | + This feature enables app attest authentication for the summarizer. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Enables app attest authentication for the summarizer. +summarizer-language-expansion-feature: + description: | + The feature flag to manage the rollout of the summarizer language expansion. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Whether the feature is enabled or not. + supportedLocales: + type: json + description: | + The list of supported locale identifiers for the summarizer language expansion according to BCP47 standard. i.e "en-US" for English (United States). +summarizer-permissive-guardrails-feature: + description: | + This feature enables permissive guardrails for the summarizer. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Enables permissive guardrails for the summarizer. +tab-scroll-refactor-feature: + description: | + The feature flag to manage the rollout of tab scroll refactor feature. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + If true, tab scroll new implementation is used to show and hide toolbar views reacting to user scroll +tab-tray-ui-experiments: + description: | + The tab tray will undergo some UI experimentation to test potential improvements. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + If true, enables the tab tray UI experiments. + iPad_update_enabled: + type: boolean + description: | + If true, enables the tab tray UI experiments on iPad. + translucency: + type: boolean + description: | + If true, enables translucency for tab tray actions at the bottom. +toolbar-refactor-feature: + description: | + This feature is for managing the roll out of the Toolbar refactor feature + hasExposure: true + exposureDescription: '' + variables: + layout: + type: string + description: | + The type of layout of the toolbars. + tab_tray_button_type: + type: string + description: | + The style of the tab tray button in the toolbar. + enum: + - number + - screenshot + unified_search: + type: boolean + description: | + Enables the unified search feature. +tos-feature: + description: | + This feature is for managing the roll out of the ToS (Term of Service) implementation + hasExposure: true + exposureDescription: '' + variables: + status: + type: boolean + description: | + Enables the feature +tou-feature: + description: | + This feature is for managing the rollout of the Terms of Use (ToU) implementation. + hasExposure: true + exposureDescription: '' + variables: + content-option: + type: string + description: | + Determines which predefined title and "learn more" strings are used for the Terms of Use prompt. + enum: + - value-0 + - value-1 + - value-2 + enable-drag-to-dismiss: + type: boolean + description: | + Whether to show a drag handle on the prompt and allows users to use it to dismiss the prompt. + max-reminders-count: + type: int + description: | + Maximum number of ToU bottom sheet reminders that can be displayed + status: + type: boolean + description: | + Enables the feature +tracking-protection-refactor: + description: | + The Enhanced Tracking Protection refactor + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Whether the Enhanced Tracking Protection refactor is enabled or not +translations-feature: + description: | + Enables translations feature. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Whether or not to enable translations feature. + languagePickerEnabled: + type: boolean + description: | + Whether or not to enable the translations language picker (Phase 2). +trending-searches-feature: + description: | + Enables trending searches. + hasExposure: true + exposureDescription: '' + variables: + enabled: + type: boolean + description: | + Whether or not to enable trending searches. + max-suggestions: + type: int + description: The number of maximum suggestions. +world-cup-widget-feature: + description: | + The feature flag to manage the roll out of the world cup widget feature + hasExposure: true + exposureDescription: '' + variables: + countdown-target-date: + type: string + description: | + The ISO 8601 date string for the World Cup countdown target + enabled: + type: boolean + description: | + Whether or not this feature is enabled diff --git a/experimenter/experimenter/features/manifests/ios/v151.0.1/release.fml.yaml b/experimenter/experimenter/features/manifests/ios/v151.0.1/release.fml.yaml new file mode 100644 index 000000000..c9cd104a9 --- /dev/null +++ b/experimenter/experimenter/features/manifests/ios/v151.0.1/release.fml.yaml @@ -0,0 +1,1607 @@ +version: 1.0.0 +about: + description: The root level Feature Manifest for Firefox for iOS +channels: +- release +features: + address-autofill-edit: + description: This property defines if the address editing is enabled in Settings + variables: + status: + description: If true, we will allow user to edit the address + type: Boolean + default: false + address-bar-menu-feature: + description: | + This property determines if we show the new address bar menu entry or the toolbar menu in settings + variables: + status: + description: If true, we will show the new address bar menu entry + type: Boolean + default: true + ads-client: + description: This property defines if the rust ads client is enabled + variables: + status: + description: If true, we will enable the rust ads client + type: Boolean + default: false + ai-kill-switch-feature: + description: | + Configuration feature for AI features + variables: + enabled: + description: | + Whether or not this feature is enabled + type: Boolean + default: true + app-icon-selection-feature: + description: | + Controls which app icons users can select as their default app icon from the App Icon Selection screen in Settings. + variables: + funIconsEnabled: + description: | + Controls whether users see the fun icons in the app icon settings. + type: Boolean + default: true + appearance-menu-feature: + description: | + This property determines if we show the new appearance menu entry or the old theme settings + variables: + status: + description: If true, we will show the new appearance menu entry + type: Boolean + default: true + bookmarks-search-feature: + description: | + Configuration feature for the bookmarks search bar + variables: + enabled: + description: | + Whether or not this feature is enabled + type: Boolean + default: false + deeplink-optimization-refactor-feature: + description: | + The feature flag to manage the rollout of deeplink optimization feature. + variables: + enabled: + description: | + Variable description + type: Boolean + default: false + download-live-activities-feature: + description: | + Download Live Activities Feature + variables: + enabled: + description: | + If true, the download live activities feature is enabled + type: Boolean + default: false + firefox-jp-guide-default-site: + description: | + This feature is for managing the visibility of the Firefox Japanese Guide default suggested site shortcut + variables: + enabled: + description: | + Enables the feature. + type: Boolean + default: false + firefox-suggest-feature: + description: Configuration for the Firefox Suggest feature. + variables: + available-suggestions-types: + description: | + A map of suggestion types to booleans that indicate whether or not the provider should return suggestions of those types. + type: Map + default: + amp: true + ampMobile: false + wikipedia: true + status: + description: | + Whether the feature is enabled. When Firefox Suggest is enabled, Firefox will download and store new search suggestions in the background, and show additional Search settings to control which suggestions appear in the awesomebar. When Firefox Suggest is disabled, Firefox will not download new suggestions, and hide the additional Search settings. + type: Boolean + default: false + general-app-features: + description: The feature that contains feature flags for the entire application + variables: + report-site-issue: + description: This property defines whether or not the feature is enabled + type: GeneralFeature + default: + status: false + hnt-sponsored-shortcuts-feature: + description: This feature manages the visibility of sponsored shortcuts on the homepage + variables: + enabled: + description: Setting 'enabled' to false will hide sponsored shortcuts on the homepage and disable the respective toggle in the homepage settings + type: Boolean + default: true + homepage-redesign-feature: + description: | + This feature is for managing the roll out of the Homepage New Tab Redesign feature. + variables: + bookmarks-section-default: + description: | + If true, enables the bookmarks homepage section by default + type: Boolean + default: false + categories-enabled: + description: | + If true, enables the categories flow in the stories + type: Boolean + default: false + jbi-section-default: + description: | + If true, enables the jump back in homepage section by default + type: Boolean + default: false + pinned-header-enabled: + description: | + If true, enables the pinned newsfeed header on homepage. + type: Boolean + default: false + search-bar: + description: | + If true, enables the search bar feature on homepage for users. + type: Boolean + default: false + hosted-summarizer-feature: + description: | + This feature enables the hosted summarizer feature. + variables: + enabled: + description: | + Enables the hosted summarizer feature. + type: Boolean + default: false + shakeGesture: + description: | + Enables the shake gesture for the summarizer feature. + type: Boolean + default: false + toolbarEntrypoint: + description: | + Enables the toolbar entrypoint for the summarizer feature. + type: Boolean + default: false + https-upgrade-feature: + description: | + This feature enables automatic https upgrade. This is only available for 18.2+. + variables: + enabled: + description: | + Enables automatic https upgrade. + type: Boolean + default: false + improved-app-store-review-trigger-feature: + description: | + The feature flag to manage the App Store review request trigger. + variables: + enabled: + description: | + Enables the feature. + type: Boolean + default: false + messaging: + description: | + The in-app messaging system + documentation: + - name: User documentation + url: https://experimenter.info/messaging/mobile-messaging + contacts: + - jhugman@mozilla.com + - brennie@mozilla.com + - gbuciu@mozilla.com + - wteichmann@mozilla.com + events: + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_shown + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_clicked + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_expired + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_dismissed + - https://dictionary.telemetry.mozilla.org/apps/firefox_ios/metrics/messaging_malformed + variables: + actions: + description: A growable map of action URLs. + type: Map + default: + OPEN_SETTINGS: ://deep-link?url=settings/general + OPEN_SETTINGS_NEW_TAB: ://deep-link?url=settings/newtab + OPEN_SETTINGS_HOMESCREEN: ://deep-link?url=settings/homepage + OPEN_SETTINGS_WALLPAPERS: ://deep-link?url=settings/wallpaper + OPEN_SETTINGS_EMAIL: ://deep-link?url=settings/mailto + OPEN_SETTINGS_SEARCH_ENGINE: ://deep-link?url=settings/search + OPEN_SETTINGS_PRIVACY: ://deep-link?url=settings/clear-private-data + OPEN_SETTINGS_FXA: ://deep-link?url=settings/fxa + OPEN_SETTINGS_THEME: ://deep-link?url=settings/theme + OPEN_SETTINGS_APP_ICON: ://deep-link?url=settings/app-icon + OPEN_URL: ://open-url + VIEW_BOOKMARKS: ://deep-link?url=homepanel/bookmarks + VIEW_TOP_SITES: ://deep-link?url=homepanel/top-sites + VIEW_READING_LIST: ://deep-link?url=homepanel/reading-list + VIEW_HISTORY: ://deep-link?url=homepanel/history + VIEW_DOWNLOADS: ://deep-link?url=homepanel/downloads + ENABLE_PRIVATE_BROWSING: ://deep-link?url=homepanel/new-private-tab + OPEN_NEW_TAB: ://deep-link?url=homepanel/new-tab + MAKE_DEFAULT_BROWSER: ://deep-link?url=default-browser/system-settings + MAKE_DEFAULT_BROWSER_WITH_TUTORIAL: ://deep-link?url=default-browser/tutorial + OPEN_SHARE_SHEET: ://share-sheet + string-alias: ActionName + message-under-experiment: + description: 'Deprecated. Please use "experiment": "{experiment}" instead.' + type: Option + default: null + messages: + description: | + A growable collection of messages, where the Key is the message identifier and the value is its associated MessageData. + type: Map + default: {} + string-alias: MessageKey + on-control: + description: What should be displayed when a control message is selected. + type: ControlMessageBehavior + default: show-next-message + styles: + description: | + A map of styles to configure message appearance. + type: Map + default: + FALLBACK: + priority: 40 + max-display-count: 20 + DEFAULT: + priority: 50 + max-display-count: 5 + MICROSURVEY: + priority: 50 + max-display-count: 1 + NOTIFICATION: + priority: 50 + max-display-count: 1 + PERSISTENT: + priority: 50 + max-display-count: 20 + SURVEY: + priority: 55 + max-display-count: 10 + WARNING: + priority: 60 + max-display-count: 10 + URGENT: + priority: 100 + max-display-count: 10 + string-alias: StyleName + triggers: + description: | + A collection of out the box trigger expressions. Each entry maps to a valid JEXL expression. + type: Map + default: + ALWAYS: 'true' + NEVER: 'false' + 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' + 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 + NOT_LAUNCHED_YESTERDAY: '''app_cycle.foreground''|eventLastSeen(''Days'', 1) > 1' + AFTER_THREE_LAUNCHES_THIS_WEEK: '''app_cycle.foreground''|eventSum(''Weeks'', 1, 0) >= 3' + I_AM_DEFAULT_BROWSER: is_default_browser + I_AM_NOT_DEFAULT_BROWSER: is_default_browser == false + SUPPORTS_DEFAULT_BROWSER: os_version|versionCompare('14.!') >= 0 + INACTIVE_NEW_USER: is_inactive_new_user + ALLOWED_TIPS_NOTIFICATIONS: allowed_tips_notifications + FXA_CURRENTLY_SIGNED_IN: is_fxa_signed_in == true + SECOND_HOMEPAGE_VIEW: '''homepage_viewed''|eventSum(''Years'', 4, 0) >= 2' + ON_FOURTH_LAUNCH_THIS_YEAR: '''app_cycle.foreground''|eventSum(''Years'', 1, 0) > 3' + string-alias: TriggerName + ~~experiment: + description: Not to be set by experiment. + type: ExperimentSlug + default: '{experiment}' + string-alias: ExperimentSlug + allow-coenrollment: true + microsurvey-feature: + description: | + A feature that shows the microsurvey for users to interact with and submit responses. + variables: + enabled: + description: | + If true, the feature is active. + type: Boolean + default: false + native-error-page-feature: + description: | + This feature is for managing the roll out of the native error page feature + variables: + bad-cert-domain-error-page: + description: | + This feature is for managing the roll out of the bad certificate domain native error page + type: Boolean + default: false + enabled: + description: | + If true, the feature is active. + type: Boolean + default: false + no_internet_connection_error: + description: | + This feature is for managing the roll out of the no interet connection native error page feature + type: Boolean + default: false + needs-reload-refactor: + description: | + This is a technical refactor which cleans up the reloading of the webview + variables: + enabled: + description: | + Whether or not this refactor is enabled + type: Boolean + default: false + onboarding-framework-feature: + description: | + The new onboarding framework feature that will allow onboarding to be experimentable through initial experiments. + variables: + cards: + description: | + The list of available cards for onboarding. + type: Map + default: + welcome: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Welcome.Title.TreatementA.v120 + body: Onboarding/Onboarding.Welcome.Description.TreatementA.v120 + image: welcome-globe + buttons: + primary: + title: Onboarding/Onboarding.Welcome.ActionTreatementA.v114 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Welcome.Skip.v114 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + notification-permissions: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Notification.Title.v120 + body: Onboarding/Onboarding.Notification.Description.v120 + image: notifications + buttons: + primary: + title: Onboarding/Onboarding.Notification.TurnOnNotifications.Action.v114 + action: request-notifications + secondary: + title: Onboarding/Onboarding.Notification.Skip.Action.v115 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + sign-to-sync: + card-type: basic + order: 20 + title: Onboarding/Onboarding.Sync.Title.v120 + body: Onboarding/Onboarding.Sync.Description.v123 + image: sync-devices + buttons: + primary: + title: Onboarding/Onboarding.Sync.SignIn.Action.v114 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Sync.Skip.Action.v114 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + customization-theme: + card-type: multiple-choice + order: 40 + title: Onboarding/Onboarding.Customization.Theme.Title.v123 + body: Onboarding/Onboarding.Customization.Theme.Description.v123 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Customization.Theme.Continue.Action.v123 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Customization.Theme.System.Action.v123 + image: theme-system + action: theme-system-default + - title: Onboarding/Onboarding.Customization.Theme.Light.Action.v123 + image: theme-light + action: theme-light + - title: Onboarding/Onboarding.Customization.Theme.Dark.Action.v123 + image: theme-dark + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + customization-toolbar: + card-type: multiple-choice + order: 41 + title: Onboarding/Onboarding.Customization.Toolbar.Title.v123 + body: Onboarding/Onboarding.Customization.Toolbar.Description.v123 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Customization.Toolbar.Continue.Action.v123 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Customization.Toolbar.Top.Action.v123 + image: toolbar-top + action: toolbar-top + - title: Onboarding/Onboarding.Customization.Toolbar.Bottom.Action.v123 + image: toolbar-bottom + action: toolbar-bottom + onboarding-type: fresh-install + prerequisites: + - ALWAYS + update-welcome: + card-type: basic + order: 10 + title: Upgrade/Upgrade.Welcome.Title.v114 + body: Upgrade/Upgrade.Welcome.Description.v114 + image: welcome-globe + buttons: + primary: + title: Upgrade/Upgrade.Welcome.Action.v114 + action: forward-one-card + onboarding-type: upgrade + prerequisites: + - NEVER + update-sign-to-sync: + card-type: basic + order: 20 + title: Upgrade/Upgrade.SyncSign.Title.v114 + body: Upgrade/Upgrade.SyncSign.Description.v114 + image: sync-devices + buttons: + primary: + title: Upgrade/Upgrade.SyncSign.Action.v114 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.LaterAction.v114 + action: forward-one-card + onboarding-type: upgrade + prerequisites: + - NEVER + welcome-modern: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Modern.Welcome.Title.v140 + body: Onboarding/Onboarding.Modern.Welcome.Description.v140 + image: trackers + buttons: + primary: + title: Onboarding/Onboarding.Modern.Welcome.ActionTreatementA.v140 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Modern.Welcome.Skip.v140 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + sign-to-sync-modern: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Modern.Sync.Title.v140 + body: Onboarding/Onboarding.Modern.Sync.Description.v140 + image: sync-with-icons + buttons: + primary: + title: Onboarding/Onboarding.Modern.Sync.SignIn.Action.v140 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Modern.Sync.Skip.Action.v140 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + customization-toolbar-modern: + card-type: multiple-choice + order: 20 + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Title.v140 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Theme.Continue.Action.v140 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Bottom.Action.v140 + image: toolbar-bottom + action: toolbar-bottom + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Top.Action.v140 + image: toolbar-top + action: toolbar-top + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + customization-theme-modern: + card-type: multiple-choice + order: 25 + title: Onboarding/Onboarding.Customization.Theme.Title.v143 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Theme.Continue.Action.v140 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Customization.Theme.System.Action.v123 + image: theme-system + action: theme-system-default + - title: Onboarding/Onboarding.Customization.Theme.Light.Action.v123 + image: theme-light + action: theme-light + - title: Onboarding/Onboarding.Customization.Theme.Dark.Action.v123 + image: theme-dark + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: modern + welcome-modern-japan: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Modern.Welcome.Title.v145 + body: Onboarding/Onboarding.Modern.Welcome.Description.v145 + image: trackers-japan + buttons: + primary: + title: Onboarding/Onboarding.Modern.Welcome.ActionTreatmentA.v145 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Modern.Welcome.Skip.v145 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + sign-to-sync-modern-japan: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Modern.Sync.Title.v145 + body: Onboarding/Onboarding.Modern.Sync.Description.v145 + image: sync-with-icons-japan + buttons: + primary: + title: Onboarding/Onboarding.Modern.Sync.SignIn.Action.v145 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Modern.Sync.Skip.Action.v145 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + customization-toolbar-modern-japan: + card-type: multiple-choice + order: 20 + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Title.v145 + body: Onboarding/Onboarding.Modern.Customization.Toolbar.Description.v145 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Continue.Action.v145 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Bottom.Action.v145 + image: toolbar-bottom-japan + action: toolbar-bottom + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Top.Action.v145 + image: toolbar-top-japan + action: toolbar-top + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + customization-theme-modern-japan: + card-type: multiple-choice + order: 25 + title: Onboarding/Onboarding.Modern.Customization.Theme.Title.v145 + body: Onboarding/Onboarding.Modern.Customization.Theme.Description.v145 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Modern.Customization.Toolbar.Continue.Action.v145 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Theme.Automatic.v145 + image: theme-system-japan + action: theme-system-default + - title: Onboarding/Onboarding.Modern.Customization.Theme.Light.v145 + image: theme-light-japan + action: theme-light + - title: Onboarding/Onboarding.Modern.Customization.Theme.Dark.v145 + image: theme-dark-japan + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: japan + welcome-brand-refresh: + card-type: basic + order: 10 + title: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.TitleV3.v149 + body: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.Description.v148 + image: trackers-brand-refresh + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.ActionTreatmentA.v148 + action: open-instructions-popup + secondary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Welcome.Skip.v148 + action: forward-one-card + instructions-popup: + title: Onboarding/DefaultBrowserPopup.Title.v114 + button-title: Onboarding/DefaultBrowserPopup.ButtonTitle.v114 + button-action: open-ios-fx-settings + instructions: + - Onboarding/DefaultBrowserPopup.FirstLabel.v114 + - Onboarding/DefaultBrowserPopup.SecondLabel.v114 + - Onboarding/DefaultBrowserPopup.ThirdLabel.v114 + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + customization-toolbar-brand-refresh: + card-type: multiple-choice + order: 20 + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Toolbar.Title.v148 + body: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Toolbar.Description.v148 + image: toolbar + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Toolbar.Continue.Action.v148 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Bottom.Action.v140 + image: toolbar-bottom-japan + action: toolbar-bottom + - title: Onboarding/Onboarding.Modern.Customization.Toolbar.Top.Action.v140 + image: toolbar-top-japan + action: toolbar-top + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + customization-theme-brand-refresh: + card-type: multiple-choice + order: 25 + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Title.v148 + body: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Description.v148 + image: themeing + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Continue.Action.v148 + action: forward-one-card + multiple-choice-buttons: + - title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Automatic.v148 + image: theme-system-japan + action: theme-system-default + - title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Light.v148 + image: theme-light-japan + action: theme-light + - title: Onboarding/Onboarding.Modern.BrandRefresh.Customization.Theme.Dark.v148 + image: theme-dark-japan + action: theme-dark + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + sign-to-sync-brand-refresh: + card-type: basic + order: 30 + title: Onboarding/Onboarding.Modern.BrandRefresh.Sync.Title.v148 + body: Onboarding/Onboarding.Modern.BrandRefresh.Sync.Description.v148 + image: sync-with-icons-brand-refresh + buttons: + primary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Sync.SignIn.Action.v148 + action: sync-sign-in + secondary: + title: Onboarding/Onboarding.Modern.BrandRefresh.Sync.Skip.Action.v148 + action: forward-one-card + onboarding-type: fresh-install + prerequisites: + - ALWAYS + uiVariant: brandRefresh + string-alias: NimbusOnboardingCardKey + conditions: + description: | + A collection of out the box conditional expressions to be used in determining whether a card should show or not. Each entry maps to a valid JEXL expression. + type: Map + default: + ALWAYS: 'true' + NEVER: 'false' + string-alias: ConditionName + dismissable: + description: | + Whether or not the entire onboarding is dismissable by pressing an X at the top right corner of the screen. + type: Boolean + default: true + enable-modern-ui: + description: | + Toggle between legacy (false) and modern (true) UI variants. + type: Boolean + default: true + enable-video-intro: + description: | + When true, a full-screen video is displayed before the Terms of Service screen during fresh-install onboarding. + type: Boolean + default: false + should-use-brand-refresh-configuration: + description: | + Toggle between standard (false) and brand refresh (true) onboarding content. + type: Boolean + default: true + should-use-japan-configuration: + description: | + Toggle between standard (false) and Japan-specific (true) assets and content. + type: Boolean + default: false + quick-answers-feature: + description: | + The feature flag to manage the roll out of the quick answers feature. + variables: + enabled: + description: | + Enables the feature. + type: Boolean + default: false + recent-searches-feature: + description: | + Enables recent searches. + variables: + enabled: + description: | + Whether or not to enable recent searches. + type: Boolean + default: false + max-suggestions: + description: The number of maximum suggestions. + type: Int + default: 5 + relay-integration-feature: + description: | + This feature is for managing the roll out of Relay email masking integration in iOS + variables: + enabled: + description: | + Enables the feature + type: Boolean + default: false + search: + description: | + Configuring the functionality to do with search. This will be separated into smaller sub-features in later releases. + variables: + awesome-bar: + description: Configuring the awesome bar. + type: AwesomeBar + default: + min-search-term: 3 + search-highlights: false + use-page-content: false + sent-from-firefox-feature: + description: | + Adds additional promo text to links shared to WhatsApp. + variables: + enabled: + description: | + Controls whether promo text is added to WhatsApp shares and an on/off toggle is added to Settings. + type: Boolean + default: false + isTreatmentA: + description: | + If true, shares the treatment A text. If false, shares the treatment B text. + type: Boolean + default: true + snapkit-removal-refactor: + description: This property defines if SnapKit removal refactor is enabled + variables: + enabled: + description: If true the SnapKit removal refactor version will be used + type: Boolean + default: false + 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 + spotlight-search: + description: Add pages as items findable with Spotlight. + variables: + enabled: + description: If this is true, then on each page load adds a new item to Spotlight. + type: Boolean + default: false + icon-type: + description: | + The icon that is displayed next to the item in the search results. If this is `null`, then no icon is displayed. + type: Option + default: letter + keep-for-days: + description: | + Number of days to keep the item before automatic deletion. If this is left `null`, then it is left to iOS's default. + type: Option + default: null + searchable-content: + description: | + The text content that is made searchable. If this is `null` then no additional content is used, and only the title and URL will be used. + type: Option + default: text-excerpt + start-at-home-feature: + description: This feature is for experimenting with opening screen + variables: + setting: + description: This property provides a default setting for the start at home feature + type: StartAtHome + default: afterFourHours + summarizer-app-attest-auth-feature: + description: | + This feature enables app attest authentication for the summarizer. + variables: + enabled: + description: | + Enables app attest authentication for the summarizer. + type: Boolean + default: true + summarizer-language-expansion-feature: + description: | + The feature flag to manage the rollout of the summarizer language expansion. + variables: + enabled: + description: | + Whether the feature is enabled or not. + type: Boolean + default: false + supportedLocales: + description: | + The list of supported locale identifiers for the summarizer language expansion according to BCP47 standard. i.e "en-US" for English (United States). + type: List + default: + - en + - it + - fr + - es + - de + - pt + summarizer-permissive-guardrails-feature: + description: | + This feature enables permissive guardrails for the summarizer. + variables: + enabled: + description: | + Enables permissive guardrails for the summarizer. + type: Boolean + default: false + tab-scroll-refactor-feature: + description: | + The feature flag to manage the rollout of tab scroll refactor feature. + variables: + enabled: + description: | + If true, tab scroll new implementation is used to show and hide toolbar views reacting to user scroll + type: Boolean + default: false + tab-tray-ui-experiments: + description: | + The tab tray will undergo some UI experimentation to test potential improvements. + variables: + enabled: + description: | + If true, enables the tab tray UI experiments. + type: Boolean + default: true + iPad_update_enabled: + description: | + If true, enables the tab tray UI experiments on iPad. + type: Boolean + default: false + translucency: + description: | + If true, enables translucency for tab tray actions at the bottom. + type: Boolean + default: false + toolbar-refactor-feature: + description: | + This feature is for managing the roll out of the Toolbar refactor feature + variables: + layout: + description: | + The type of layout of the toolbars. + type: Option + default: version1 + tab_tray_button_type: + description: | + The style of the tab tray button in the toolbar. + type: TabTrayButtonType + default: number + unified_search: + description: | + Enables the unified search feature. + type: Boolean + default: false + tos-feature: + description: | + This feature is for managing the roll out of the ToS (Term of Service) implementation + variables: + status: + description: | + Enables the feature + type: Boolean + default: true + tou-feature: + description: | + This feature is for managing the rollout of the Terms of Use (ToU) implementation. + variables: + content-option: + description: | + Determines which predefined title and "learn more" strings are used for the Terms of Use prompt. + type: TermsOfUsePromptContentOption + default: value-0 + enable-drag-to-dismiss: + description: | + Whether to show a drag handle on the prompt and allows users to use it to dismiss the prompt. + type: Boolean + default: true + max-reminders-count: + description: | + Maximum number of ToU bottom sheet reminders that can be displayed + type: Int + default: 2 + status: + description: | + Enables the feature + type: Boolean + default: false + tracking-protection-refactor: + description: | + The Enhanced Tracking Protection refactor + variables: + enabled: + description: | + Whether the Enhanced Tracking Protection refactor is enabled or not + type: Boolean + default: true + translations-feature: + description: | + Enables translations feature. + variables: + enabled: + description: | + Whether or not to enable translations feature. + type: Boolean + default: true + languagePickerEnabled: + description: | + Whether or not to enable the translations language picker (Phase 2). + type: Boolean + default: false + trending-searches-feature: + description: | + Enables trending searches. + variables: + enabled: + description: | + Whether or not to enable trending searches. + type: Boolean + default: false + max-suggestions: + description: The number of maximum suggestions. + type: Int + default: 5 + world-cup-widget-feature: + description: | + The feature flag to manage the roll out of the world cup widget feature + variables: + countdown-target-date: + description: | + The ISO 8601 date string for the World Cup countdown target + type: String + default: 2026-06-11T19:00:00Z + enabled: + description: | + Whether or not this feature is enabled + type: Boolean + default: false +enums: + ControlMessageBehavior: + description: An enum to influence what should be displayed when a control message is selected. + variants: + show-next-message: + description: The next eligible message should be shown. + show-none: + description: The surface should show no message. + IconType: + description: The icon that will be added to the item in the device's search engine. + variants: + favicon: + description: The favicon of the page + letter: + description: An icon generated from the first letter of the base domain. + screenshot: + description: A screenshot of the page at load time. + MessageSurfaceId: + description: | + For messaging, we would like to have a message tell us which surface its associated with. This is a label that matches across both Android and iOS. + variants: + Unknown: + description: A message has NOT declared its target surface. + microsurvey: + description: This is a microsurvey that appears on top of the bottom toolbar to the user. + new-tab-card: + description: This is the card that appears at the top on the Firefox Home Page. + notification: + description: This is a local notification send to the user periodically with tips and updates. + survey: + description: This is a full-page that appears providing a survey to the user. + NimbusOnboardingHeaderImage: + description: | + The identifiers for the different images available for cards in onboarding + variants: + customize-firefox: + description: | + Corresponding to the fox window image + notifications: + description: | + Corresponding to the notifications image + notifications-ctd: + description: | + Corresponding to the notifications image for CTD + search-widget: + description: | + Corresponding to the fox search widget image + set-default-steps: + description: | + Corresponding to the set to default steps image + set-to-dock: + description: | + Corresponding to the set to dock image + sync-devices: + description: | + Corresponding to the sync-devices image + sync-devices-ctd: + description: | + Corresponding to the sync image for CTD + sync-with-icons: + description: | + Corresponding to the sync-devices image + sync-with-icons-brand-refresh: + description: | + Corresponding to the sync-with-icons image for Brand Refresh variant (different from Japan variant) + sync-with-icons-japan: + description: | + Corresponding to the sync-with-icons image for Japan variant + themeing: + description: | + Corresponding to the fox world image + toolbar: + description: | + Corresponding to the fox world image + trackers: + description: | + Corresponding to the trackers image + trackers-brand-refresh: + description: | + Corresponding to the trackers image for Brand Refresh variant (does not contain Japanese text, different from Japan variant) + trackers-japan: + description: | + Corresponding to the trackers image for Japan variant (contains Japanese text) + welcome-ctd: + description: | + Corresponding to the welcome image for CTD + welcome-globe: + description: | + Corresponding to the fox world image + NimbusOnboardingMultipleChoiceButtonImage: + description: | + The identifiers for the different images available for multiple choice buttons in onboarding + variants: + theme-dark: + description: | + Corresponding to the dark theme + theme-dark-japan: + description: | + Corresponding to the dark theme image for Japan variant. Also used by Brand Refresh variant as the images are identical. + theme-light: + description: | + Corresponding to the light theme + theme-light-japan: + description: | + Corresponding to the light theme image for Japan variant. Also used by Brand Refresh variant as the images are identical. + theme-system: + description: | + Corresponding to the system theme + theme-system-japan: + description: | + Corresponding to the system theme image for Japan variant. Also used by Brand Refresh variant as the images are identical. + toolbar-bottom: + description: | + Corresponding to the toolbar on the bottom + toolbar-bottom-japan: + description: | + Corresponding to the toolbar on the bottom image for Japan variant. Also used by Brand Refresh variant as the images are identical. + toolbar-top: + description: | + Corresponding to the toolbar on top + toolbar-top-japan: + description: | + Corresponding to the toolbar on top image for Japan variant. Also used by Brand Refresh variant as the images are identical. + OnboardingActions: + description: | + The identifiers for the different actions available for cards in onboarding + variants: + end-onboarding: + description: | + Will end the onboarding on a set card + forward-one-card: + description: | + Will take the user to the next card + forward-three-card: + description: | + Will take the user to the next card + forward-two-card: + description: | + Will take the user to the next card + open-instructions-popup: + description: | + Will open up a popup with instructions for something + open-ios-fx-settings: + description: | + Will take the user to the default browser settings in the iOS system settings + read-privacy-policy: + description: | + Will open a webview where the user can read the privacy policy + request-notifications: + description: | + Will request to allow notifications from the user + set-default-browser: + description: | + Will send the user to settings to set Firefox as their default browser and advance to next card + sync-sign-in: + description: | + Will take the user to the sync sign in flow + OnboardingCardType: + description: | + The identifiers for the different types of onboarding cards. + variants: + basic: + description: | + Corresponding to basic info onboarding cards + multiple-choice: + description: | + Corresponding to onboarding cards with multiple choice buttons + OnboardingInstructionsPopupActions: + description: | + The identifiers for the different actions available for the instruction card in onboarding + variants: + dismiss: + description: | + Will dismiss the popup + dismiss-and-next-card: + description: | + Will dismiss the popup and move to the next card + open-ios-fx-settings: + description: | + Will take the user to the default browser settings in the iOS system settings + OnboardingMultipleChoiceAction: + description: | + The identifiers for the different actions available for cards in onboarding + variants: + theme-dark: + description: | + Will will set the theme to dark mode + theme-light: + description: | + Will set the theme to light mode + theme-system-default: + description: | + Will set the theme to use the system theme + toolbar-bottom: + description: | + Will set the toolbar on the bottom + toolbar-top: + description: | + Will set the toolbar on the top + OnboardingType: + description: | + The identifiers for the different types of onboarding cards. + variants: + fresh-install: + description: | + Corresponding to onboarding cards that are for new users + upgrade: + description: | + Corresponding to onboarding cards that are for users who have updated + OnboardingVariant: + description: | + Which UI style this onboarding card is designed for. + variants: + brandRefresh: + description: Use the brand refresh onboarding UI with v148 strings. + japan: + description: Use the Japan-specific onboarding UI with localized assets. + legacy: + description: Use the existing (legacy) onboarding UI. + modern: + description: Use the new (modern) onboarding UI. + PageContent: + description: The page content that will be added as an item in the device's search engine. + variants: + html-content: + description: Use all the page as HTML + text-content: + description: Use all the page as text + text-excerpt: + description: Only use the first paragraph + StartAtHome: + description: The option for what screen to open the app to + variants: + afterFourHours: + description: Starts the app at the homepage after four hours of inactivity, otherwise starts the app at the most recently viewed tab. + always: + description: Starts the app at the homepage. + disabled: + description: Starts the app at the most recently viewed tab. + SuggestionType: + description: The type of a Firefox Suggest search suggestion. + variants: + amp: + description: A Firefox Suggestion for desktop from adMarketplace. + ampMobile: + description: A Firefox Suggestion specifically for mobile from adMarketplace. + wikipedia: + description: A Firefox Suggestion for a Wikipedia page. + TabTrayButtonType: + description: The style of the tab tray button in the toolbar. + variants: + number: + description: The original tab tray button style that show the icon with the number of tabs. + screenshot: + description: The new tab tray button style that shows two images stacked with the previous and next tab. + TermsOfUsePromptContentOption: + description: | + Determines which predefined title and "learn more" strings are used for the Terms of Use prompt. + variants: + value-0: + description: | + Uses the current defaults: + - Title: "We've got an update" + - Learn more: "Please take a moment to review and accept. Learn more." + value-1: + description: | + Uses the following copy: + - Title: "Terms of Use" + - Learn more: "You can learn more here." + value-2: + description: | + Uses the following copy: + - Title: "A note from Firefox" + - Learn more: "You can learn more here." + ToolbarLayoutType: + description: The type of toolbar layout. + variants: + version1: + description: Shows the add new tab, menu and tabs button in the navigation toolbar. The share button is displayed in the address toolbar. + version2: + description: Like version1 but the menu and tabs buttons are inverted. +objects: + AwesomeBar: + description: A configuration option for the awesome bar. Part of the `search` feature. + fields: + min-search-term: + description: The minimum number of characters that the user types before searching in the page. + type: Int + default: 3 + search-highlights: + description: Whether or not search highlights are enabled + type: Boolean + default: false + use-page-content: + description: Search in the open tab's text content when typing. + type: Boolean + default: false + GeneralFeature: + description: The configuration for the a feature that can be enabled or disabled + fields: + status: + description: Whether or not the feature is enabled + type: Boolean + default: false + MessageData: + description: | + An object to describe a message. It uses human readable strings to describe the triggers, action and style of the message as well as the text of the message and call to action. + fields: + action: + description: | + The name of a deeplink URL to be opened if the button is clicked. + type: Option + default: null + action-params: + description: Query parameters appended to the deeplink action URL + type: Map + default: {} + button-label: + description: | + The text on the button. If no text is present, the whole message is clickable. + type: Option + default: null + except-if-any: + description: | + A list of strings corresponding to targeting expressions. If any of these expressions evaluate to `true`, the message will not be eligible. + type: List + default: [] + experiment: + description: The experiment slug that this message is involved in. + type: Option + default: null + is-control: + description: Indicates if this message is the control message, if true shouldn't be displayed + type: Boolean + default: false + microsurveyConfig: + description: Optional configuration data for a microsurvey. + type: Option + default: null + style: + description: | + The style as described in a `StyleData` from the styles table. + type: StyleName + default: DEFAULT + surface: + description: Each message will tell us the surface it is targeting with this. + type: MessageSurfaceId + default: Unknown + text: + description: The message text displayed to the user + type: Text + default: '' + title: + description: The title text displayed to the user + type: Option + default: null + trigger-if-all: + description: | + A list of strings corresponding to targeting expressions. All named expressions must evaluate to true if the message is to be eligible to be shown. + type: List + default: + - ALWAYS + MicrosurveyConfig: + description: | + Attributes relating to microsurvey messaging. + fields: + icon: + description: The asset name in our bundle used as the icon shown in the survey. + type: Image + default: lightbulbLarge + options: + description: The list of survey options to present to the user. + type: List + default: [] + utm-content: + description: The name used to provide as the utm_content parameter for the privacy notice. + type: Option + default: null + NimbusOnboardingButton: + description: | + A group of properties describing the attributes of a card. + fields: + action: + description: | + The action the button should take. The default for this will be "forward-one-card" + type: OnboardingActions + default: forward-one-card + title: + description: | + The text of the button title. This should never be defaulted. + type: Text + default: '' + NimbusOnboardingButtons: + description: | + A set of buttons for the card. There can be up to two, but there must be at least one. + fields: + primary: + description: | + The primary button for the card. This must exist. + type: NimbusOnboardingButton + default: + title: Primary Button + action: forward-one-card + secondary: + description: | + A secondary, optional, button for the card. + type: Option + default: null + NimbusOnboardingCardData: + description: | + A group of properties describing the attributes of a card. + fields: + body: + description: | + The body text displayed on the card, in less prominent text. This should never be defaulted. + type: Text + default: '' + buttons: + description: | + The set of buttons associated with the card. + type: NimbusOnboardingButtons + default: + primary: + title: Onboarding/Onboarding.Sync.Skip.Action.v114 + action: forward-one-card + secondary: null + card-type: + description: | + The type of onboarding this card should be shown in, whether it a fresh install or an update. The default is fresh-install. + type: OnboardingCardType + default: basic + disqualifiers: + description: | + A list of ConditionName strings corresponding to targeting expressions. The card will not be shown if any expression is `true`. + type: List + default: [] + image: + description: | + The image that should be displayed on the card. + type: NimbusOnboardingHeaderImage + default: welcome-globe + instructions-popup: + description: | + The object describing the specific instruction popup button for a card. If left empty, the card will have no instruction popup information + type: Option + default: null + link: + description: | + The object describing the link button for a card. If left empty, the card will have no link. + type: Option + default: null + multiple-choice-buttons: + description: | + A list of multiple choice buttons that the card will display + type: List + default: [] + onboarding-type: + description: | + The type of onboarding this card should be shown in, whether it a fresh install or an update. The default is fresh-install. + type: OnboardingType + default: fresh-install + order: + description: | + The place in the order where the card will be found. The feature layer will then sort the cards based on this field. + type: Int + default: 10 + prerequisites: + description: | + A list of ConditionName strings corresponding to targeting expressions. The card will be shown if all expressions `true` and if no expressions in the `disqualifiers` table are true, or if the `disqualifiers` table is empty. + type: List + default: [] + title: + description: | + The title displayed on the card, in prominent, bolded text. This should never be defaulted. + type: Text + default: '' + uiVariant: + description: | + If set, this card will only be shown in the specified UI variant. If null, it will appear in both legacy and modern UIs. + type: Option + default: null + NimbusOnboardingInstructionPopup: + description: | + The object outlining the content of the instruction card. + fields: + button-action: + description: | + The action the button should have. Default is `dismiss-and-next-card` + type: OnboardingInstructionsPopupActions + default: dismiss-and-next-card + button-title: + description: | + The title the button should have. This should never be defaulted. + type: Text + default: '' + instructions: + description: | + A list of instructions, either as free text, or as Text identifiers. + type: List + default: [] + title: + description: | + The text of the popup. This should never be defaulted. + type: Text + default: '' + NimbusOnboardingLink: + description: | + A group of properties describing the attributes for the active link on a card + fields: + title: + description: | + The text of the link title. + type: Text + default: Onboarding/Onboarding.Welcome.Link.Action.v114 + url: + description: | + The url that the link will lead to. + type: String + default: https://www.mozilla.org/privacy/firefox/ + NimbusOnboardingMultipleChoiceButton: + description: | + A group of properties describing the attributes of a multiple choice button on a card + fields: + action: + description: | + The action the button should take. The default for this will be "theme-system-default" + type: OnboardingMultipleChoiceAction + default: theme-system-default + image: + description: | + The text of the button title. This should never be defaulted. + type: NimbusOnboardingMultipleChoiceButtonImage + default: theme-system + title: + description: | + The text of the button title. This should never be defaulted. + type: Text + default: '' + StyleData: + description: | + A group of properties (predominantly visual) to the describe style of the message. + fields: + max-display-count: + description: | + How many sessions will this message be shown to the user before it is expired. + type: Int + default: 5 + priority: + description: | + The importance of this message. 0 is not very important, 100 is very important. + type: Int + default: 50