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
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
### Logins
- fix `count_by_origin` and `count_by_form_action_origin` with punicode origins

### Places
- `places::storage::history_metadata::delete_all_metadata_for_search()` was added to delete the search terms in history metadata. ([#7101](https://github.com/mozilla/application-services/pull/7101))


# v146.0 (_2025-11-10_)

## ✨ What's New ✨
Expand Down
5 changes: 5 additions & 0 deletions components/places/src/ffi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,11 @@ impl PlacesConnection {
})
}

#[handle_error(crate::Error)]
pub fn metadata_delete_search_terms(&self) -> ApiResult<()> {
self.with_conn(history_metadata::delete_all_metadata_for_search)
}

/// Add an observation to the database.
#[handle_error(crate::Error)]
pub fn apply_observation(&self, visit: VisitObservation) -> ApiResult<()> {
Expand Down
3 changes: 3 additions & 0 deletions components/places/src/places.udl
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,9 @@ interface PlacesConnection {
[Throws=PlacesApiError]
void metadata_delete_older_than(PlacesTimestamp older_than);

[Throws=PlacesApiError]
void metadata_delete_search_terms();

[Throws=PlacesApiError]
void apply_observation(VisitObservation visit);

Expand Down
96 changes: 96 additions & 0 deletions components/places/src/storage/history_metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,12 @@ pub fn delete_all_metadata_for_page(db: &PlacesDb, place_id: RowId) -> Result<()
Ok(())
}

/// Delete all metadata for search queries table.
pub fn delete_all_metadata_for_search(db: &PlacesDb) -> Result<()> {
db.execute_cached("DELETE FROM moz_places_metadata_search_queries", [])?;
Ok(())
}

pub fn delete_metadata(
db: &PlacesDb,
url: &Url,
Expand Down Expand Up @@ -2392,6 +2398,96 @@ mod tests {
assert_table_size!(&conn, "moz_places_metadata_search_queries", 0);
}

#[test]
fn test_delete_all_metadata_for_search() {
let conn = PlacesDb::open_in_memory(ConnectionType::ReadWrite).expect("memory db");

note_observation!(&conn,
url "https://www.mozilla.org/1/",
view_time None,
search_term Some("search_term_1"),
document_type None,
referrer_url None,
title None
);

note_observation!(&conn,
url "https://www.mozilla.org/2/",
view_time None,
search_term Some("search_term_2"),
document_type None,
referrer_url None,
title None
);

assert_table_size!(&conn, "moz_places_metadata", 2);
assert_table_size!(&conn, "moz_places_metadata_search_queries", 2);

delete_all_metadata_for_search(&conn).expect("query ok");

assert_table_size!(&conn, "moz_places_metadata", 0);
assert_table_size!(&conn, "moz_places_metadata_search_queries", 0);
}

#[test]
fn test_delete_all_metadata_for_search_only_deletes_search_metadata() {
let conn = PlacesDb::open_in_memory(ConnectionType::ReadWrite).expect("memory db");

// url | search_term | referrer
// 1 | 1 | 0
// 1 | 0 | 1
// 1 | 1 | 0
// 1 | 0 | 1

note_observation!(&conn,
url "https://www.mozilla.org/1/",
view_time None,
search_term Some("search_term_1"),
document_type None,
referrer_url None,
title None
);

note_observation!(
&conn,
url "https://www.mozilla.org/2/",
view_time Some(20000),
search_term None,
document_type Some(DocumentType::Media),
referrer_url Some("https://www.google.com/search?client=firefox-b-d&q=mozilla+firefox"),
title None
);

note_observation!(&conn,
url "https://www.mozilla.org/3/",
view_time None,
search_term Some("search_term_2"),
document_type None,
referrer_url None,
title None
);

note_observation!(
&conn,
url "https://www.mozilla.org/4/",
view_time Some(20000),
search_term None,
document_type Some(DocumentType::Regular),
referrer_url Some("https://www.google.com/search?client=firefox-b-d&q=mozilla+firefox"),
title None
);

assert_eq!(4, get_since(&conn, 0).expect("get worked").len());

assert_table_size!(&conn, "moz_places_metadata", 4);
assert_table_size!(&conn, "moz_places_metadata_search_queries", 2);

delete_all_metadata_for_search(&conn).expect("query ok");

assert_table_size!(&conn, "moz_places_metadata", 2);
assert_table_size!(&conn, "moz_places_metadata_search_queries", 0);
}

#[test]
fn test_if_page_missing_behavior() {
let conn = PlacesDb::open_in_memory(ConnectionType::ReadWrite).expect("memory db");
Expand Down