diff --git a/Sources/History/HistoryCoordinator.swift b/Sources/History/HistoryCoordinator.swift index 9017f1db8..97336e923 100644 --- a/Sources/History/HistoryCoordinator.swift +++ b/Sources/History/HistoryCoordinator.swift @@ -23,7 +23,11 @@ import os.log public typealias BrowsingHistory = [HistoryEntry] -public protocol HistoryCoordinating: AnyObject { +public protocol HistoryCoordinatingDebuggingSupport { + @discardableResult func addVisit(of url: URL, at date: Date) -> Visit? +} + +public protocol HistoryCoordinating: AnyObject, HistoryCoordinatingDebuggingSupport { func loadHistory(onCleanFinished: @escaping () -> Void) @@ -47,6 +51,12 @@ public protocol HistoryCoordinating: AnyObject { func removeUrlEntry(_ url: URL, completion: ((Error?) -> Void)?) } +extension HistoryCoordinating { + public func addVisit(of url: URL) -> Visit? { + addVisit(of: url, at: Date()) + } +} + /// Coordinates access to History. Uses its own queue with high qos for all operations. final public class HistoryCoordinator: HistoryCoordinating { @@ -86,14 +96,14 @@ final public class HistoryCoordinator: HistoryCoordinating { private var cancellables = Set() - @discardableResult public func addVisit(of url: URL) -> Visit? { + @discardableResult public func addVisit(of url: URL, at date: Date) -> Visit? { guard let historyDictionary = historyDictionary else { Logger.history.debug("Visit of \(url.absoluteString) ignored") return nil } let entry = historyDictionary[url] ?? HistoryEntry(url: url) - let visit = entry.addVisit() + let visit = entry.addVisit(at: date) entry.failedToLoad = false self.historyDictionary?[url] = entry diff --git a/Sources/History/HistoryEntry.swift b/Sources/History/HistoryEntry.swift index 6e2b62bd9..697991ed1 100644 --- a/Sources/History/HistoryEntry.swift +++ b/Sources/History/HistoryEntry.swift @@ -56,12 +56,12 @@ final public class HistoryEntry { public var visits: Set - func addVisit() -> Visit { - let visit = Visit(date: Date(), historyEntry: self) + func addVisit(at date: Date = Date()) -> Visit { + let visit = Visit(date: date, historyEntry: self) visits.insert(visit) + lastVisit = numberOfTotalVisits == 0 ? date : max(lastVisit, date) numberOfTotalVisits += 1 - lastVisit = Date() return visit }