Skip to content

Commit

Permalink
Merge branch 'main' into dominik/htmlntp-sections
Browse files Browse the repository at this point in the history
  • Loading branch information
ayoy committed Nov 14, 2024
2 parents 66bda16 + 7bf460d commit ed7425a
Show file tree
Hide file tree
Showing 30 changed files with 881 additions and 127 deletions.
7 changes: 6 additions & 1 deletion .github/workflows/build_notarized.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ on:
description: "Branch name"
required: false
type: string
skip-notify:
description: "Skip Mattermost notification"
required: false
default: false
type: boolean
secrets:
APPLE_API_KEY_BASE64:
required: true
Expand Down Expand Up @@ -360,7 +365,7 @@ jobs:
name: Send Mattermost message

needs: [export-notarized-app, create-dmg]
if: always()
if: ${{ always() && inputs.skip-notify == false }}

runs-on: ubuntu-latest

Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/sync_end_to_end.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ jobs:
release-type: review
create-dmg: false
branch: ${{ github.sha }}
skip-notify: true
secrets:
APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
Expand Down Expand Up @@ -153,6 +154,7 @@ jobs:
with:
check_name: "Test Report ${{ matrix.runner }}"
report_paths: ui-tests.xml
check_retries: true

- name: Upload logs when workflow failed
uses: actions/upload-artifact@v4
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/ui_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ jobs:
release-type: review
create-dmg: false
branch: ${{ github.sha }}
skip-notify: true
secrets:
APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
Expand Down Expand Up @@ -64,6 +65,9 @@ jobs:

- name: Set up fastlane
run: bundle install

- name: Create Default Keychain
run: bundle exec fastlane create_keychain_ui_tests

- name: Sync code signing assets
env:
Expand Down Expand Up @@ -141,6 +145,7 @@ jobs:
with:
check_name: "Test Report ${{ matrix.runner }}"
report_paths: ui-tests.xml
check_retries: true

- name: Upload logs when workflow failed
uses: actions/upload-artifact@v4
Expand Down
2 changes: 1 addition & 1 deletion Configuration/BuildNumber.xcconfig
Original file line number Diff line number Diff line change
@@ -1 +1 @@
CURRENT_PROJECT_VERSION = 305
CURRENT_PROJECT_VERSION = 306
20 changes: 18 additions & 2 deletions DuckDuckGo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -2817,6 +2817,7 @@
BB470EBC2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB470EBA2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift */; };
BB5789722B2CA70F0009DFE2 /* DataBrokerProtectionSubscriptionEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5789712B2CA70F0009DFE2 /* DataBrokerProtectionSubscriptionEventHandler.swift */; };
BB5F46A32C8751F6005F72DF /* BookmarkSortTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5F46A22C8751F6005F72DF /* BookmarkSortTests.swift */; };
BB731F312CDBA6360023D2E4 /* FireWindowTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB731F302CDBA6320023D2E4 /* FireWindowTests.swift */; };
BB7B5F982C4ED73800BA4AF8 /* BookmarksSearchAndSortMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7B5F972C4ED73800BA4AF8 /* BookmarksSearchAndSortMetrics.swift */; };
BB7B5F992C4ED73800BA4AF8 /* BookmarksSearchAndSortMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7B5F972C4ED73800BA4AF8 /* BookmarksSearchAndSortMetrics.swift */; };
BBB881882C4029BA001247C6 /* BookmarkListTreeControllerSearchDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB881872C4029BA001247C6 /* BookmarkListTreeControllerSearchDataSource.swift */; };
Expand Down Expand Up @@ -3008,6 +3009,10 @@
D64A5FF92AEA5C2B00B6D6E7 /* HomeButtonMenuFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64A5FF72AEA5C2B00B6D6E7 /* HomeButtonMenuFactory.swift */; };
D6BC8AC62C5A95AA0025375B /* DuckPlayer in Frameworks */ = {isa = PBXBuildFile; productRef = D6BC8AC52C5A95AA0025375B /* DuckPlayer */; };
D6BC8AC82C5A95B10025375B /* DuckPlayer in Frameworks */ = {isa = PBXBuildFile; productRef = D6BC8AC72C5A95B10025375B /* DuckPlayer */; };
D6E0ACB12CE36DCA005D3486 /* DuckPlayerOverlayPixels.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E0ACB02CE36DC4005D3486 /* DuckPlayerOverlayPixels.swift */; };
D6E0ACB22CE36DCA005D3486 /* DuckPlayerOverlayPixels.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E0ACB02CE36DC4005D3486 /* DuckPlayerOverlayPixels.swift */; };
D6E0ACB42CE36FB0005D3486 /* DuckPlayerOverlayPixelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E0ACB32CE36FA8005D3486 /* DuckPlayerOverlayPixelsTests.swift */; };
D6E0ACB52CE36FB0005D3486 /* DuckPlayerOverlayPixelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E0ACB32CE36FA8005D3486 /* DuckPlayerOverlayPixelsTests.swift */; };
EA0BA3A9272217E6002A0B6C /* ClickToLoadUserScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */; };
EA18D1CA272F0DC8006DC101 /* social_images in Resources */ = {isa = PBXBuildFile; fileRef = EA18D1C9272F0DC8006DC101 /* social_images */; };
EA8AE76A279FBDB20078943E /* ClickToLoadTDSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */; };
Expand Down Expand Up @@ -4772,6 +4777,7 @@
BB470EBA2C5A66D6002EE91D /* BookmarkManagementDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkManagementDetailViewModel.swift; sourceTree = "<group>"; };
BB5789712B2CA70F0009DFE2 /* DataBrokerProtectionSubscriptionEventHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataBrokerProtectionSubscriptionEventHandler.swift; sourceTree = "<group>"; };
BB5F46A22C8751F6005F72DF /* BookmarkSortTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkSortTests.swift; sourceTree = "<group>"; };
BB731F302CDBA6320023D2E4 /* FireWindowTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FireWindowTests.swift; sourceTree = "<group>"; };
BB7B5F972C4ED73800BA4AF8 /* BookmarksSearchAndSortMetrics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksSearchAndSortMetrics.swift; sourceTree = "<group>"; };
BBB881872C4029BA001247C6 /* BookmarkListTreeControllerSearchDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkListTreeControllerSearchDataSource.swift; sourceTree = "<group>"; };
BBBB653F2C77BB9400E69AC6 /* BookmarkSearchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkSearchTests.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -4858,6 +4864,8 @@
CDE248A62C821FFE00F9399D /* filterSet.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = filterSet.json; sourceTree = "<group>"; };
CDE248A72C821FFE00F9399D /* PhishingDetectionStateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhishingDetectionStateManager.swift; sourceTree = "<group>"; };
D64A5FF72AEA5C2B00B6D6E7 /* HomeButtonMenuFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeButtonMenuFactory.swift; sourceTree = "<group>"; };
D6E0ACB02CE36DC4005D3486 /* DuckPlayerOverlayPixels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DuckPlayerOverlayPixels.swift; sourceTree = "<group>"; };
D6E0ACB32CE36FA8005D3486 /* DuckPlayerOverlayPixelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DuckPlayerOverlayPixelsTests.swift; sourceTree = "<group>"; };
EA0BA3A8272217E6002A0B6C /* ClickToLoadUserScript.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClickToLoadUserScript.swift; sourceTree = "<group>"; };
EA18D1C9272F0DC8006DC101 /* social_images */ = {isa = PBXFileReference; lastKnownFileType = folder; path = social_images; sourceTree = "<group>"; };
EA8AE769279FBDB20078943E /* ClickToLoadTDSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickToLoadTDSTests.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -5630,6 +5638,7 @@
315AA06F28CA5CC800200030 /* YoutubePlayerNavigationHandler.swift */,
31F28C4C28C8EEC500119F70 /* YoutubePlayerUserScript.swift */,
31F28C4E28C8EEC500119F70 /* YoutubeOverlayUserScript.swift */,
D6E0ACB02CE36DC4005D3486 /* DuckPlayerOverlayPixels.swift */,
);
path = YoutubePlayer;
sourceTree = "<group>";
Expand Down Expand Up @@ -5721,6 +5730,7 @@
376718FE28E58504003A2A15 /* YoutubePlayer */ = {
isa = PBXGroup;
children = (
D6E0ACB32CE36FA8005D3486 /* DuckPlayerOverlayPixelsTests.swift */,
3199AF812C80736B003AEBDC /* DuckPlayerOnboardingLocationValidatorTests.swift */,
3714B1E828EDBAAB0056C57A /* DuckPlayerTests.swift */,
567DA94429E95C3F008AC5EE /* YoutubeOverlayUserScriptTests.swift */,
Expand Down Expand Up @@ -6985,6 +6995,7 @@
7B4CE8DB26F02108009134B1 /* UITests */ = {
isa = PBXGroup;
children = (
BB731F302CDBA6320023D2E4 /* FireWindowTests.swift */,
376E708D2BD686260082B7EB /* UI Tests.xctestplan */,
EEBCE6802BA444FA00B9DF00 /* Common */,
EEC7BE2D2BC6C09400F86835 /* AddressBarKeyboardShortcutsTests.swift */,
Expand Down Expand Up @@ -11351,6 +11362,7 @@
3706FB2F293F65D500E42796 /* HomePageRecentlyVisitedModel.swift in Sources */,
C1935A152C88F958001AD72D /* SyncPromoView.swift in Sources */,
C126B35B2C820924005DC2A3 /* FreemiumDebugMenu.swift in Sources */,
D6E0ACB22CE36DCA005D3486 /* DuckPlayerOverlayPixels.swift in Sources */,
3707C718294B5D0F00682A9F /* AdClickAttributionTabExtension.swift in Sources */,
31EF1E812B63FFB800E6DB17 /* DataBrokerProtectionManager.swift in Sources */,
3706FEBA293F6EFF00E42796 /* BWStatus.swift in Sources */,
Expand Down Expand Up @@ -12175,6 +12187,7 @@
3706FE27293F661700E42796 /* AppPrivacyConfigurationTests.swift in Sources */,
B626A7652992506A00053070 /* SerpHeadersNavigationResponderTests.swift in Sources */,
9F6434712BECBA2800D2D8A0 /* SubscriptionRedirectManagerTests.swift in Sources */,
D6E0ACB52CE36FB0005D3486 /* DuckPlayerOverlayPixelsTests.swift in Sources */,
9F26060C2B85C20B00819292 /* AddEditBookmarkDialogViewModelTests.swift in Sources */,
567A23DF2C89980A0010F66C /* OnboardingNavigationDelegateTests.swift in Sources */,
562532A12BC069190034D316 /* ZoomPopoverViewModelTests.swift in Sources */,
Expand Down Expand Up @@ -12648,6 +12661,7 @@
EEC7BE2E2BC6C09500F86835 /* AddressBarKeyboardShortcutsTests.swift in Sources */,
EE54F7B32BBFEA49006218DB /* BookmarksAndFavoritesTests.swift in Sources */,
EE02D4222BB4611A00DBE6B3 /* TestsURLExtension.swift in Sources */,
BB731F312CDBA6360023D2E4 /* FireWindowTests.swift in Sources */,
EE42CBCC2BC8004700AD411C /* PermissionsTests.swift in Sources */,
7B4CE8E726F02135009134B1 /* TabBarTests.swift in Sources */,
EEBCE6832BA463DD00B9DF00 /* NSImageExtensions.swift in Sources */,
Expand Down Expand Up @@ -13391,6 +13405,7 @@
EE66666F2B56EDE4001D898D /* VPNLocationsHostingViewController.swift in Sources */,
37CC53EC27E8A4D10028713D /* PreferencesDataClearingView.swift in Sources */,
4B0135CE2729F1AA00D54834 /* NSPasteboardExtension.swift in Sources */,
D6E0ACB12CE36DCA005D3486 /* DuckPlayerOverlayPixels.swift in Sources */,
85707F31276A7DCA00DC0649 /* OnboardingViewModel.swift in Sources */,
85AC3B0525D6B1D800C7D2AA /* ScriptSourceProviding.swift in Sources */,
848648A12C76F4B20082282D /* BookmarksBarMenuViewController.swift in Sources */,
Expand Down Expand Up @@ -13721,6 +13736,7 @@
B630E7FE29C887ED00363609 /* NSErrorAdditionalInfo.swift in Sources */,
370270C02C78EB13002E44E4 /* HomePageSettingsModelTests.swift in Sources */,
4B9292BB2667103100AD2C21 /* BookmarkNodeTests.swift in Sources */,
D6E0ACB42CE36FB0005D3486 /* DuckPlayerOverlayPixelsTests.swift in Sources */,
4B0219A825E0646500ED7DEA /* WebsiteDataStoreTests.swift in Sources */,
AAC9C01E24CB6BEB00AD1325 /* TabCollectionViewModelTests.swift in Sources */,
56CE77612C7DFCF800AC1ED2 /* OnboardingSuggestedSearchesProviderTests.swift in Sources */,
Expand Down Expand Up @@ -15073,8 +15089,8 @@
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/duckduckgo/BrowserServicesKit";
requirement = {
branch = "dominik/feature-flag-overrides";
kind = branch;
kind = exactVersion;
version = 210.0.0;
};
};
9FF521422BAA8FF300B9819B /* XCRemoteSwiftPackageReference "lottie-spm" */ = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/duckduckgo/BrowserServicesKit",
"state" : {
"branch" : "dominik/feature-flag-overrides",
"revision" : "5be16267af6b40dca2f8aa2ff4559957f4368c77"
"revision" : "cfb178099738bc6cd0c3a3d73df717420ef4a59f",
"version" : "210.0.0"
}
},
{
Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo/Application/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
privacyConfigManager: AppPrivacyFeatures.shared.contentBlocking.privacyConfigurationManager,
localOverrides: FeatureFlagLocalOverrides(
keyValueStore: UserDefaults.appConfiguration,
actionHandler: FeatureFlagOverridesDefaultHandler()
actionHandler: FeatureFlagOverridesPublishingHandler<FeatureFlag>()
),
for: FeatureFlag.self
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,10 @@ final class FreemiumDBPPromotionViewCoordinator: ObservableObject {
/// Published property that determines whether the promotion is visible on the home page.
@Published var isHomePagePromotionVisible: Bool = false

/// The view model representing the promotion, which updates based on the user's state.
var viewModel: PromotionViewModel {
createViewModel()
/// The view model representing the promotion, which updates based on the user's state. Returns `nil` if the feature is not enabled
var viewModel: PromotionViewModel? {
guard freemiumDBPFeature.isAvailable else { return nil }
return createViewModel()
}

/// Stores whether the user has dismissed the home page promotion.
Expand Down
16 changes: 8 additions & 8 deletions DuckDuckGo/HomePage/Model/HomePageAddressBarModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,14 @@ extension HomePage.Models {
return addressBarViewController.view
}

func setUpExperimentIfNeeded() {
if isExperimentActive {
let ntpExperiment = NewTabPageSearchBoxExperiment()
ntpExperiment.assignUserToCohort()
shouldShowAddressBar = ntpExperiment.cohort?.isExperiment == true
}
}

let tabCollectionViewModel: TabCollectionViewModel

private var isExperimentActive: Bool = false {
Expand All @@ -118,14 +126,6 @@ extension HomePage.Models {
}
}

private func setUpExperimentIfNeeded() {
if isExperimentActive {
let ntpExperiment = NewTabPageSearchBoxExperiment()
ntpExperiment.assignUserToCohort()
shouldShowAddressBar = ntpExperiment.cohort?.isExperiment == true
}
}

private lazy var addressBarViewController: AddressBarViewController? = createAddressBarViewController()

private func createAddressBarViewController() -> AddressBarViewController? {
Expand Down
47 changes: 37 additions & 10 deletions DuckDuckGo/HomePage/Model/NewTabPageSearchBoxExperiment.swift
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,11 @@ struct DefaultNewTabPageSearchBoxExperimentCohortDecider: NewTabPageSearchBoxExp
}

protocol NewTabPageSearchBoxExperimentPixelReporting {
func fireNTPSearchBoxExperimentCohortAssignmentPixel(
cohort: NewTabPageSearchBoxExperiment.Cohort,
onboardingCohort: PixelExperiment?
)

func fireNTPSearchBoxExperimentPixel(
day: Int,
count: Int,
Expand All @@ -109,6 +114,11 @@ protocol NewTabPageSearchBoxExperimentPixelReporting {
}

struct DefaultNewTabPageSearchBoxExperimentPixelReporter: NewTabPageSearchBoxExperimentPixelReporting {

func fireNTPSearchBoxExperimentCohortAssignmentPixel(cohort: NewTabPageSearchBoxExperiment.Cohort, onboardingCohort: PixelExperiment?) {
PixelKit.fire(NewTabSearchBoxExperimentPixel.cohortAssigned(cohort: cohort, onboardingCohort: onboardingCohort))
}

func fireNTPSearchBoxExperimentPixel(
day: Int,
count: Int,
Expand All @@ -129,10 +139,15 @@ struct DefaultNewTabPageSearchBoxExperimentPixelReporter: NewTabPageSearchBoxExp
}

protocol OnboardingExperimentCohortProviding {
var isOnboardingFinished: Bool { get }
var onboardingExperimentCohort: PixelExperiment? { get }
}

struct DefaultOnboardingExperimentCohortProvider: OnboardingExperimentCohortProviding {
var isOnboardingFinished: Bool {
UserDefaultsWrapper<Bool>(key: .onboardingFinished, defaultValue: false).wrappedValue
}

var onboardingExperimentCohort: PixelExperiment? {
PixelExperiment.logic.cohort
}
Expand All @@ -158,18 +173,24 @@ final class NewTabPageSearchBoxExperiment {
}

enum Cohort: String {
case control
case experiment = "ntp_search_box"
case controlExistingUser = "control_existing_user"
case experimentExistingUser = "ntp_search_box_existing_user"
case control = "control_v2"
case experiment = "ntp_search_box_v2"
case controlExistingUser = "control_existing_user_v2"
case experimentExistingUser = "ntp_search_box_existing_user_v2"
case legacyControl = "control"
case legacyExperiment = "ntp_search_box"
case legacyControlExistingUser = "control_existing_user"
case legacyExperimentExistingUser = "ntp_search_box_existing_user"

static let allExperimentCohortValues: Set<Cohort> = [
.legacyExperiment,
.legacyExperimentExistingUser,
.experiment,
.experimentExistingUser
]

var isExperiment: Bool {
switch self {
case .experiment, .experimentExistingUser:
return true
default:
return false
}
return Self.allExperimentCohortValues.contains(self)
}
}

Expand Down Expand Up @@ -202,6 +223,11 @@ final class NewTabPageSearchBoxExperiment {
return
}

guard onboardingExperimentCohortProvider.isOnboardingFinished else {
Logger.newTabPageSearchBoxExperiment.debug("Skipping cohort assignment until onboarding is finished...")
return
}

guard let cohort = cohortDecider.cohort else {
Logger.newTabPageSearchBoxExperiment.debug("User is not eligible for the experiment, skipping cohort assignment...")
dataStore.experimentCohort = nil
Expand All @@ -214,6 +240,7 @@ final class NewTabPageSearchBoxExperiment {
dataStore.didRunEnrollment = true

Logger.newTabPageSearchBoxExperiment.debug("User assigned to cohort \(cohort.rawValue)")
pixelReporter.fireNTPSearchBoxExperimentCohortAssignmentPixel(cohort: cohort, onboardingCohort: onboardingExperimentCohortProvider.onboardingExperimentCohort)
}

func recordSearch(from source: SearchSource) {
Expand Down
11 changes: 8 additions & 3 deletions DuckDuckGo/HomePage/View/HomePageView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -224,10 +224,15 @@ extension HomePage.Views {
}
}

@ViewBuilder
func freemiumPromotionView() -> some View {
PromotionView(viewModel: freemiumDBPPromotionViewCoordinator.viewModel)
.padding(.bottom, 16)
.visibility(freemiumDBPPromotionViewCoordinator.isHomePagePromotionVisible ? .visible : .gone)
if let viewModel = freemiumDBPPromotionViewCoordinator.viewModel {
PromotionView(viewModel: viewModel)
.padding(.bottom, 16)
.visibility(freemiumDBPPromotionViewCoordinator.isHomePagePromotionVisible ? .visible : .gone)
} else {
EmptyView()
}
}

@ViewBuilder
Expand Down
1 change: 1 addition & 0 deletions DuckDuckGo/HomePage/View/HomePageViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ final class HomePageViewController: NSViewController {
PixelKit.fire(GeneralPixel.newTabInitial, frequency: .legacyInitial)
}
subscribeToHistory()
addressBarModel.setUpExperimentIfNeeded()
}

override func viewDidAppear() {
Expand Down
Loading

0 comments on commit ed7425a

Please sign in to comment.