Skip to content

Commit 7f046cf

Browse files
committed
Add convenience metadata_delete_search_terms method to delete search terms in history metadata
1 parent 44e382e commit 7f046cf

File tree

4 files changed

+108
-0
lines changed

4 files changed

+108
-0
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
### Logins
1717
- fix `count_by_origin` and `count_by_form_action_origin` with punicode origins
1818

19+
### Places
20+
- `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))
21+
22+
1923
# v146.0 (_2025-11-10_)
2024

2125
## ✨ What's New ✨

components/places/src/ffi.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,11 @@ impl PlacesConnection {
263263
})
264264
}
265265

266+
#[handle_error(crate::Error)]
267+
pub fn metadata_delete_search_terms(&self) -> ApiResult<()> {
268+
self.with_conn(|conn| history_metadata::delete_all_metadata_for_search(conn))
269+
}
270+
266271
/// Add an observation to the database.
267272
#[handle_error(crate::Error)]
268273
pub fn apply_observation(&self, visit: VisitObservation) -> ApiResult<()> {

components/places/src/places.udl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ interface PlacesConnection {
8888
[Throws=PlacesApiError]
8989
void metadata_delete_older_than(PlacesTimestamp older_than);
9090

91+
[Throws=PlacesApiError]
92+
void metadata_delete_search_terms();
93+
9194
[Throws=PlacesApiError]
9295
void apply_observation(VisitObservation visit);
9396

components/places/src/storage/history_metadata.rs

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,12 @@ pub fn delete_all_metadata_for_page(db: &PlacesDb, place_id: RowId) -> Result<()
562562
Ok(())
563563
}
564564

565+
/// Delete all metadata for search queries table.
566+
pub fn delete_all_metadata_for_search(db: &PlacesDb) -> Result<()> {
567+
db.execute_cached("DELETE FROM moz_places_metadata_search_queries", [])?;
568+
Ok(())
569+
}
570+
565571
pub fn delete_metadata(
566572
db: &PlacesDb,
567573
url: &Url,
@@ -2392,6 +2398,96 @@ mod tests {
23922398
assert_table_size!(&conn, "moz_places_metadata_search_queries", 0);
23932399
}
23942400

2401+
#[test]
2402+
fn test_delete_all_metadata_for_search() {
2403+
let conn = PlacesDb::open_in_memory(ConnectionType::ReadWrite).expect("memory db");
2404+
2405+
note_observation!(&conn,
2406+
url "https://www.mozilla.org/1/",
2407+
view_time None,
2408+
search_term Some("search_term_1"),
2409+
document_type None,
2410+
referrer_url None,
2411+
title None
2412+
);
2413+
2414+
note_observation!(&conn,
2415+
url "https://www.mozilla.org/2/",
2416+
view_time None,
2417+
search_term Some("search_term_2"),
2418+
document_type None,
2419+
referrer_url None,
2420+
title None
2421+
);
2422+
2423+
assert_table_size!(&conn, "moz_places_metadata", 2);
2424+
assert_table_size!(&conn, "moz_places_metadata_search_queries", 2);
2425+
2426+
delete_all_metadata_for_search(&conn).expect("query ok");
2427+
2428+
assert_table_size!(&conn, "moz_places_metadata", 0);
2429+
assert_table_size!(&conn, "moz_places_metadata_search_queries", 0);
2430+
}
2431+
2432+
#[test]
2433+
fn test_delete_all_metadata_for_search_only_deletes_search_metadata() {
2434+
let conn = PlacesDb::open_in_memory(ConnectionType::ReadWrite).expect("memory db");
2435+
2436+
// url | search_term | referrer
2437+
// 1 | 1 | 0
2438+
// 1 | 0 | 1
2439+
// 1 | 1 | 0
2440+
// 1 | 0 | 1
2441+
2442+
note_observation!(&conn,
2443+
url "https://www.mozilla.org/1/",
2444+
view_time None,
2445+
search_term Some("search_term_1"),
2446+
document_type None,
2447+
referrer_url None,
2448+
title None
2449+
);
2450+
2451+
note_observation!(
2452+
&conn,
2453+
url "https://www.mozilla.org/2/",
2454+
view_time Some(20000),
2455+
search_term None,
2456+
document_type Some(DocumentType::Media),
2457+
referrer_url Some("https://www.google.com/search?client=firefox-b-d&q=mozilla+firefox"),
2458+
title None
2459+
);
2460+
2461+
note_observation!(&conn,
2462+
url "https://www.mozilla.org/3/",
2463+
view_time None,
2464+
search_term Some("search_term_2"),
2465+
document_type None,
2466+
referrer_url None,
2467+
title None
2468+
);
2469+
2470+
note_observation!(
2471+
&conn,
2472+
url "https://www.mozilla.org/4/",
2473+
view_time Some(20000),
2474+
search_term None,
2475+
document_type Some(DocumentType::Regular),
2476+
referrer_url Some("https://www.google.com/search?client=firefox-b-d&q=mozilla+firefox"),
2477+
title None
2478+
);
2479+
2480+
assert_eq!(4, get_since(&conn, 0).expect("get worked").len());
2481+
2482+
assert_table_size!(&conn, "moz_places_metadata", 4);
2483+
assert_table_size!(&conn, "moz_places_metadata_search_queries", 2);
2484+
2485+
delete_all_metadata_for_search(&conn).expect("query ok");
2486+
2487+
assert_table_size!(&conn, "moz_places_metadata", 2);
2488+
assert_table_size!(&conn, "moz_places_metadata_search_queries", 0);
2489+
}
2490+
23952491
#[test]
23962492
fn test_if_page_missing_behavior() {
23972493
let conn = PlacesDb::open_in_memory(ConnectionType::ReadWrite).expect("memory db");

0 commit comments

Comments
 (0)