Skip to content

Commit 14d3dd1

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

File tree

4 files changed

+111
-0
lines changed

4 files changed

+111
-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: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,15 @@ 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(
568+
"DELETE FROM moz_places_metadata_search_queries",
569+
[],
570+
)?;
571+
Ok(())
572+
}
573+
565574
pub fn delete_metadata(
566575
db: &PlacesDb,
567576
url: &Url,
@@ -2392,6 +2401,96 @@ mod tests {
23922401
assert_table_size!(&conn, "moz_places_metadata_search_queries", 0);
23932402
}
23942403

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

0 commit comments

Comments
 (0)