Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes #4370 - History metadata enums and struct access #4371

Merged
merged 9 commits into from Jul 30, 2021
28 changes: 22 additions & 6 deletions components/places/ios/Places/HistoryMetadata.swift
Expand Up @@ -7,27 +7,43 @@ import Foundation
/**
Represents a document type of a page.
*/
public enum DocumentType: Int32 {
public enum DocumentType: Int32, Codable {
case regular = 0
case media = 1

public init?(value: Int32) {
self.init(rawValue: value)
}
}

/**
Represents a set of properties which uniquely identify a history metadata. In database terms this is a compound key.
*/
public struct HistoryMetadataKey {
public struct HistoryMetadataKey: Codable {
public let url: String
public let searchTerm: String?
public let referrerUrl: String?

public init(url: String, searchTerm: String?, referrerUrl: String?) {
self.url = url
self.searchTerm = searchTerm
self.referrerUrl = referrerUrl
}
}

/**
Represents an observation about a `HistoryMetadataKey`.
*/
public enum HistoryMetadataObservation {
case titleObservation(String)
case viewTimeObservation(Int32)
case documentTypeObservation(DocumentType)
public struct HistoryMetadataObservation: Codable {
var titleObservation: String?
var viewTimeObservation: Int32?
var documentTypeObservation: DocumentType?

public init(titleObservation: String?, viewTimeObservation: Int32?, documentTypeObservation: DocumentType?) {
self.titleObservation = titleObservation
self.viewTimeObservation = viewTimeObservation
self.documentTypeObservation = documentTypeObservation
}
}

/**
Expand Down
11 changes: 5 additions & 6 deletions components/places/ios/Places/Places.swift
Expand Up @@ -903,13 +903,12 @@ public class PlacesWriteConnection: PlacesReadConnection {
msg.searchTerm = s
}

switch observation {
case let .viewTimeObservation(viewTime):
msg.viewTime = viewTime
case let .documentTypeObservation(documentType):
msg.documentType = documentType.rawValue
case let .titleObservation(title):
if let observation = observation.documentTypeObservation?.rawValue {
msg.documentType = observation
} else if let title = observation.titleObservation {
msg.title = title
} else if let viewTime = observation.viewTimeObservation {
msg.viewTime = viewTime
}

let data = try! msg.serializedData()
Expand Down
15 changes: 7 additions & 8 deletions megazords/ios/MozillaAppServicesTests/PlacesTests.swift
Expand Up @@ -268,7 +268,7 @@ class PlacesTests: XCTestCase {
searchTerm: nil,
referrerUrl: nil
)
_ = try! db.noteHistoryMetadataObservation(key: metaKey1, observation: HistoryMetadataObservation.documentTypeObservation(DocumentType.media))
_ = try! db.noteHistoryMetadataObservation(key: metaKey1, observation: HistoryMetadataObservation(titleObservation: nil, viewTimeObservation: nil, documentTypeObservation: .media))

XCTAssertEqual(1, try! db.getHistoryMetadataSince(since: beginning).count)

Expand All @@ -282,8 +282,7 @@ class PlacesTests: XCTestCase {
XCTAssertEqual(0, dbMeta!.totalViewTime)

XCTAssertEqual(1, try! db.getHistoryMetadataSince(since: beginning).count)

_ = try! db.noteHistoryMetadataObservation(key: metaKey1, observation: HistoryMetadataObservation.viewTimeObservation(1337))
_ = try! db.noteHistoryMetadataObservation(key: metaKey1, observation: HistoryMetadataObservation(titleObservation: nil, viewTimeObservation: 1337, documentTypeObservation: nil))
dbMeta = try! db.getLatestHistoryMetadataForUrl(url: "http://www.mozilla.org")
XCTAssertNotNil(dbMeta)
XCTAssertEqual("http://www.mozilla.org/", dbMeta!.key.url)
Expand All @@ -295,7 +294,7 @@ class PlacesTests: XCTestCase {

XCTAssertEqual(1, try! db.getHistoryMetadataSince(since: beginning).count)

_ = try! db.noteHistoryMetadataObservation(key: metaKey1, observation: HistoryMetadataObservation.viewTimeObservation(3))
_ = try! db.noteHistoryMetadataObservation(key: metaKey1, observation: HistoryMetadataObservation(titleObservation: nil, viewTimeObservation: 3, documentTypeObservation: nil))
dbMeta = try! db.getLatestHistoryMetadataForUrl(url: "http://www.mozilla.org")
XCTAssertEqual(1340, dbMeta!.totalViewTime)

Expand All @@ -307,7 +306,7 @@ class PlacesTests: XCTestCase {
searchTerm: "another firefox",
referrerUrl: "https://www.google.com/search?client=firefox-b-d&q=another+firefox"
)
_ = try! db.noteHistoryMetadataObservation(key: metaKey2, observation: HistoryMetadataObservation.titleObservation("some title"))
_ = try! db.noteHistoryMetadataObservation(key: metaKey2, observation: HistoryMetadataObservation(titleObservation: "some title", viewTimeObservation: nil, documentTypeObservation: nil))

XCTAssertEqual(1, try! db.getHistoryMetadataSince(since: afterLastMeta1Update).count)
XCTAssertEqual(2, try! db.getHistoryMetadataSince(since: beginning).count)
Expand All @@ -321,9 +320,9 @@ class PlacesTests: XCTestCase {
XCTAssertEqual(DocumentType.regular, dbMeta2!.documentType)
XCTAssertEqual(0, dbMeta2!.totalViewTime)

_ = try! db.noteHistoryMetadataObservation(key: metaKey2, observation: HistoryMetadataObservation.documentTypeObservation(DocumentType.regular))
_ = try! db.noteHistoryMetadataObservation(key: metaKey2, observation: HistoryMetadataObservation.titleObservation("Some Title"))
_ = try! db.noteHistoryMetadataObservation(key: metaKey2, observation: HistoryMetadataObservation.viewTimeObservation(52345))
_ = try! db.noteHistoryMetadataObservation(key: metaKey2, observation: HistoryMetadataObservation(titleObservation: nil, viewTimeObservation: nil, documentTypeObservation: .regular))
_ = try! db.noteHistoryMetadataObservation(key: metaKey2, observation: HistoryMetadataObservation(titleObservation: "some title", viewTimeObservation: nil, documentTypeObservation: nil))
_ = try! db.noteHistoryMetadataObservation(key: metaKey2, observation: HistoryMetadataObservation(titleObservation: nil, viewTimeObservation: 52345, documentTypeObservation: nil))
dbMeta2 = try! db.getLatestHistoryMetadataForUrl(url: "http://www.mozilla.org/another/")
XCTAssertNotNil(dbMeta2)
XCTAssertEqual("http://www.mozilla.org/another/", dbMeta2!.key.url)
Expand Down