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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ extension Notification.Name {

public static let TabsTrayDidSelectHomeTab = Notification.Name("TabsTrayDidSelectHomeTab")

public static let TabsPrivacyModeChanged = Notification.Name("TabsPrivacyModeChanged")

public static let OpenClearRecentHistory = Notification.Name("OpenClearRecentHistory")

public static let RemoteTabNotificationTapped = Notification.Name("RemoteTabNotificationTapped")
Expand Down
3 changes: 0 additions & 3 deletions BrowserKit/Sources/Common/Logger/LoggerCategory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,6 @@ public enum LoggerCategory: String {
/// Related to experiments, nimbus and the messaging framework.
case experiments

/// Related to old homepage UI and it's data management. To be replaced by the homepage rebuild project.
case legacyHomepage

/// Related to new homepage UI and it's data management for the homepage rebuild project.
case homepage

Expand Down
3 changes: 3 additions & 0 deletions Dangerfile.swift
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,9 @@ class CodeUsageDetector {
let lineNumber = index + 1
if keyword.shouldComment {
markdown(String(format: message, file, lineNumber))
} else if keyword == .deferred {
// We cannot check if it's on a line added, so we only warn for deferred here
warn(String(format: message, file, lineNumber))
} else {
fail(String(format: message, file, lineNumber))
}
Expand Down
452 changes: 64 additions & 388 deletions firefox-ios/Client.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ class BrowserCoordinator: BaseCoordinator,

var browserViewController: BrowserViewController
var webviewController: WebviewViewController?
var legacyHomepageViewController: LegacyHomepageViewController?
var homepageViewController: HomepageViewController?
private weak var privateHomepageViewController: PrivateHomepageViewController?

Expand Down Expand Up @@ -127,30 +126,6 @@ class BrowserCoordinator: BaseCoordinator,

// MARK: - BrowserDelegate

func showLegacyHomepage(
inline: Bool,
toastContainer: UIView,
homepanelDelegate: HomePanelDelegate,
libraryPanelDelegate: LibraryPanelDelegate,
statusBarScrollDelegate: StatusBarScrollDelegate,
overlayManager: OverlayModeManager
) {
let legacyHomepageViewController = getHomepage(
inline: inline,
toastContainer: toastContainer,
homepanelDelegate: homepanelDelegate,
libraryPanelDelegate: libraryPanelDelegate,
statusBarScrollDelegate: statusBarScrollDelegate,
overlayManager: overlayManager
)

guard browserViewController.embedContent(legacyHomepageViewController) else { return }
self.legacyHomepageViewController = legacyHomepageViewController
legacyHomepageViewController.scrollToTop()
// We currently don't support full page screenshot of the homepage
screenshotService.screenshotableView = nil
}

func showHomepage(
overlayManager: OverlayModeManager,
isZeroSearch: Bool,
Expand Down Expand Up @@ -184,12 +159,12 @@ class BrowserCoordinator: BaseCoordinator,
if tabManager.selectedTab?.isPrivate == true {
return privateHomepageViewController
}
return homepageViewController ?? legacyHomepageViewController
return homepageViewController
}
}

func setHomepageVisibility(isVisible: Bool) {
let homepage = homepageViewController ?? legacyHomepageViewController
let homepage = homepageViewController
guard let homepage else { return }
homepage.view.isHidden = !isVisible
}
Expand Down Expand Up @@ -306,32 +281,6 @@ class BrowserCoordinator: BaseCoordinator,
}
}

private func getHomepage(inline: Bool,
toastContainer: UIView,
homepanelDelegate: HomePanelDelegate,
libraryPanelDelegate: LibraryPanelDelegate,
statusBarScrollDelegate: StatusBarScrollDelegate,
overlayManager: OverlayModeManager) -> LegacyHomepageViewController {
if let legacyHomepageViewController = legacyHomepageViewController {
legacyHomepageViewController.configure(isZeroSearch: inline)
return legacyHomepageViewController
} else {
let legacyHomepageViewController = LegacyHomepageViewController(
profile: profile,
isZeroSearch: inline,
toastContainer: toastContainer,
tabManager: tabManager,
overlayManager: overlayManager)
legacyHomepageViewController.homePanelDelegate = homepanelDelegate
legacyHomepageViewController.libraryPanelDelegate = libraryPanelDelegate
legacyHomepageViewController.statusBarScrollDelegate = statusBarScrollDelegate
legacyHomepageViewController.browserNavigationHandler = self
legacyHomepageViewController.termsOfUseDelegate = self

return legacyHomepageViewController
}
}

// MARK: - ETPCoordinatorSSLStatusDelegate

var showHasOnlySecureContentInTrackingPanel: Bool {
Expand Down Expand Up @@ -812,6 +761,7 @@ class BrowserCoordinator: BaseCoordinator,
selectNewTab: selectNewTab
)
}

func showShareSheet(
shareType: ShareType,
shareMessage: ShareMessage?,
Expand Down Expand Up @@ -1213,7 +1163,7 @@ class BrowserCoordinator: BaseCoordinator,
return // route is handled with existing child coordinator
}

let presenter = (homepageViewController ?? legacyHomepageViewController) ?? browserViewController
let presenter = homepageViewController ?? browserViewController

let router = DefaultRouter(navigationController: presenter.navigationController ?? UINavigationController())

Expand Down Expand Up @@ -1298,9 +1248,6 @@ class BrowserCoordinator: BaseCoordinator,
// Clean up views and ensure BVC for the window is freed
browserViewController.view.endEditing(true)
browserViewController.dismissUrlBar()
legacyHomepageViewController?.view.removeFromSuperview()
legacyHomepageViewController?.removeFromParent()
legacyHomepageViewController = nil
browserViewController.contentContainer.subviews.forEach { $0.removeFromSuperview() }
browserViewController.removeFromParent()
case .libraryOpened:
Expand Down
18 changes: 0 additions & 18 deletions firefox-ios/Client/Coordinators/Browser/BrowserDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,6 @@ import Foundation
import WebKit

protocol BrowserDelegate: AnyObject {
/// Show the homepage to the user
/// - Parameters:
/// - inline: See showEmbeddedHomepage function in BVC for description
/// - toastContainer: The container view for alert shown from share extension in the home page context menu
/// - homepanelDelegate: The homepanel delegate for the homepage
/// - libraryPanelDelegate: The library panel delegate for the homepage
/// - statusBarScrollDelegate: The delegate that takes care of the status bar overlay scroll
/// - overlayManager: The overlay manager for the homepage
@MainActor
func showLegacyHomepage(
inline: Bool,
toastContainer: UIView,
homepanelDelegate: HomePanelDelegate,
libraryPanelDelegate: LibraryPanelDelegate,
statusBarScrollDelegate: StatusBarScrollDelegate,
overlayManager: OverlayModeManager
)

/// Show the new homepage to the user as part of the homepage rebuild project
@MainActor
func showHomepage(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ enum NimbusFeatureFlagID: String, CaseIterable {
case feltPrivacySimplifiedUI
case firefoxSuggestFeature
case hntSponsoredShortcuts
case hntTopSitesVisualRefresh
case homepageRebuild
case homepageRedesign
case homepageSearchBar
case homepageShortcutsLibrary
Expand Down Expand Up @@ -81,8 +79,6 @@ enum NimbusFeatureFlagID: String, CaseIterable {
.deeplinkOptimizationRefactor,
.defaultZoomFeature,
.downloadLiveActivities,
.hntTopSitesVisualRefresh,
.homepageRebuild,
.homepageStoriesRedesign,
.homepageSearchBar,
.homepageShortcutsLibrary,
Expand Down Expand Up @@ -150,8 +146,6 @@ struct NimbusFlaggableFeature: HasNimbusSearchBar {
.downloadLiveActivities,
.feltPrivacyFeltDeletion,
.feltPrivacySimplifiedUI,
.hntTopSitesVisualRefresh,
.homepageRebuild,
.homepageRedesign,
.homepageSearchBar,
.homepageShortcutsLibrary,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1697,11 +1697,7 @@ class BrowserViewController: UIViewController,

func frontEmbeddedContent(_ viewController: ContentContainable) {
contentContainer.update(content: viewController)
if featureFlags.isFeatureEnabled(.homepageRebuild, checking: .buildOnly) {
statusBarOverlay.resetState(isHomepage: contentContainer.hasHomepage)
} else {
statusBarOverlay.resetState(isHomepage: contentContainer.hasLegacyHomepage)
}
statusBarOverlay.resetState(isHomepage: contentContainer.hasHomepage)
}

/// Embed a ContentContainable inside the content container
Expand All @@ -1714,17 +1710,12 @@ class BrowserViewController: UIViewController,
viewController.willMove(toParent: self)
contentContainer.add(content: viewController)
viewController.didMove(toParent: self)
if featureFlags.isFeatureEnabled(.homepageRebuild, checking: .buildOnly) {
statusBarOverlay.resetState(isHomepage: contentContainer.hasHomepage)
} else {
statusBarOverlay.resetState(isHomepage: contentContainer.hasLegacyHomepage)
}
statusBarOverlay.resetState(isHomepage: contentContainer.hasHomepage)

// To make sure the content views content is extending under the toolbars we disable clip to bounds
// for the first two layers of views other than web view and legacy homepage
if toolbarHelper.shouldBlur() &&
!viewController.isKind(of: WebviewViewController.self) &&
!viewController.isKind(of: LegacyHomepageViewController.self) {
!viewController.isKind(of: WebviewViewController.self) {
viewController.view.clipsToBounds = false
viewController.view.subviews.forEach { $0.clipsToBounds = false }
} else {
Expand All @@ -1748,23 +1739,12 @@ class BrowserViewController: UIViewController,
return
}

if featureFlags.isFeatureEnabled(.homepageRebuild, checking: .buildOnly) {
browserDelegate?.showHomepage(
overlayManager: overlayManager,
isZeroSearch: inline,
statusBarScrollDelegate: statusBarOverlay,
toastContainer: contentContainer
)
} else {
browserDelegate?.showLegacyHomepage(
inline: inline,
toastContainer: contentContainer,
homepanelDelegate: self,
libraryPanelDelegate: self,
statusBarScrollDelegate: statusBarOverlay,
overlayManager: overlayManager
)
}
browserDelegate?.showHomepage(
overlayManager: overlayManager,
isZeroSearch: inline,
statusBarScrollDelegate: statusBarOverlay,
toastContainer: contentContainer
)

if isSwipingTabsEnabled {
// show the homepage in case it was not visible, as it is needed for screenshot purpose.
Expand Down Expand Up @@ -4187,12 +4167,9 @@ extension BrowserViewController: LegacyTabDelegate {
}

// MARK: HomePanelDelegate
extension BrowserViewController: HomePanelDelegate {
func homePanelDidRequestToOpenLibrary(panel: LibraryPanelType) {
showLibrary(panel: panel)
view.endEditing(true)
}

// Those were methods initially created for the legacy homepage, but they need to stay since they are used
// nowadays in other use cases in our application (they were not just triggered from the legacy homepage).
extension BrowserViewController {
func homePanel(didSelectURL url: URL, visitType: VisitType, isGoogleTopSite: Bool) {
guard let tab = tabManager.selectedTab else { return }

Expand Down Expand Up @@ -4242,18 +4219,6 @@ extension BrowserViewController: HomePanelDelegate {
show(toast: toast)
}

func homePanelDidRequestToOpenTabTray(withFocusedTab tabToFocus: Tab?, focusedSegment: TabTrayPanelType?) {
showTabTray(withFocusOnUnselectedTab: tabToFocus, focusedSegment: focusedSegment)
}

func homePanelDidRequestToOpenSettings(at settingsPage: Route.SettingsSection) {
navigationHandler?.show(settings: settingsPage)
}

func homePanelDidRequestBookmarkToast(urlString: String?, action: BookmarkAction) {
showBookmarkToast(urlString: urlString, action: action)
}

func openRecentlyClosedTabs() {
self.navigationHandler?.show(homepanelSection: .history)
self.notificationCenter.post(name: .OpenRecentlyClosedTabs)
Expand Down Expand Up @@ -4437,11 +4402,7 @@ extension BrowserViewController: TabManagerDelegate {
webView.accessibilityIdentifier = "contentView"
webView.accessibilityElementsHidden = false

if featureFlags.isFeatureEnabled(.homepageRebuild, checking: .buildOnly) {
updateEmbeddedContent(isHomeTab: selectedTab.isFxHomeTab, with: webView, previousTab: previousTab)
} else {
browserDelegate?.show(webView: webView)
}
updateEmbeddedContent(isHomeTab: selectedTab.isFxHomeTab, with: webView, previousTab: previousTab)

if selectedTab.isFxHomeTab {
// Added as initial fix for WKWebView memory leak. Needs further investigation.
Expand Down
20 changes: 8 additions & 12 deletions firefox-ios/Client/Frontend/Browser/Tabs/Views/TabCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,6 @@ final class TabCell: UICollectionViewCell,
leading: 12,
bottom: 12,
trailing: 12)

// Using the same sizes for fallback favicon as the top sites on the homepage
static let imageBackgroundSize = TopSiteItemCell.UX.imageBackgroundSize
static let topSiteIconSize = TopSiteItemCell.UX.iconSize
}
// MARK: - Properties

Expand All @@ -54,10 +50,10 @@ final class TabCell: UICollectionViewCell,
}

private lazy var faviconBG: UIView = .build { view in
view.layer.cornerRadius = HomepageViewModel.UX.generalCornerRadius
view.layer.borderWidth = HomepageViewModel.UX.generalBorderWidth
view.layer.shadowOffset = HomepageViewModel.UX.shadowOffset
view.layer.shadowRadius = HomepageViewModel.UX.shadowRadius
view.layer.cornerRadius = HomepageUX.generalCornerRadius
view.layer.borderWidth = HomepageUX.generalBorderWidth
view.layer.shadowOffset = HomepageUX.shadowOffset
view.layer.shadowRadius = HomepageUX.shadowRadius
view.isHidden = true
}

Expand Down Expand Up @@ -288,11 +284,11 @@ final class TabCell: UICollectionViewCell,

faviconBG.centerYAnchor.constraint(equalTo: backgroundHolder.centerYAnchor, constant: UX.faviconYOffset),
faviconBG.centerXAnchor.constraint(equalTo: backgroundHolder.centerXAnchor),
faviconBG.heightAnchor.constraint(equalToConstant: UX.imageBackgroundSize.height),
faviconBG.widthAnchor.constraint(equalToConstant: UX.imageBackgroundSize.width),
faviconBG.heightAnchor.constraint(equalToConstant: HomepageUX.imageBackgroundSize.height),
faviconBG.widthAnchor.constraint(equalToConstant: HomepageUX.imageBackgroundSize.width),

smallFaviconView.heightAnchor.constraint(equalToConstant: UX.topSiteIconSize.height),
smallFaviconView.widthAnchor.constraint(equalToConstant: UX.topSiteIconSize.width),
smallFaviconView.heightAnchor.constraint(equalToConstant: HomepageUX.topSiteIconSize.height),
smallFaviconView.widthAnchor.constraint(equalToConstant: HomepageUX.topSiteIconSize.width),
smallFaviconView.centerYAnchor.constraint(equalTo: faviconBG.centerYAnchor),
smallFaviconView.centerXAnchor.constraint(equalTo: faviconBG.centerXAnchor),
])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -270,11 +270,6 @@ class TopTabDisplayManager: NSObject {
}

refreshStore(shouldAnimate: true)

let notificationObject = [Tab.privateModeKey: isPrivate]
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not needed anymore since the legacy homepage was the only one listening to this notification

NotificationCenter.default.post(name: .TabsPrivacyModeChanged,
object: notificationObject,
userInfo: tabManager.windowUUID.userInfo)
}

@MainActor
Expand Down
Loading