From 3b857374db4247f38e48514ca424b5e96203bbbe Mon Sep 17 00:00:00 2001 From: Johannes Salas Schmidt Date: Thu, 23 Jul 2026 15:59:38 +0200 Subject: [PATCH] Bug 2056116 - Validate guids in add_many_with_meta add_with_meta / add_many_with_meta now validate the guid and reject it, or regenerate it under the new fixup_invalid_guids feature. --- CHANGELOG.md | 1910 +++++++++++++++++----------------- components/logins/Cargo.toml | 6 + components/logins/src/db.rs | 80 +- 3 files changed, 1041 insertions(+), 955 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f876e4d29fa..36df07f268b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,9 +14,13 @@ - Add address metadata APIs for importing records already persisted elsewhere: `add_address_with_meta`, `add_many_addresses_with_meta`, `update_address_with_meta` and `add_many_address_tombstones`, with the bulk variants isolating per-record failures. `AddressMeta` carries the guid, timestamps and `sync_change_counter`, so a record keeps whether it still has changes pending upload. - Add `Store::addresses_bridged_engine()`, exposing the existing address sync engine through `mozIBridgedSyncEngine` so Firefox Desktop can drive address sync. +### Logins + +- `add_with_meta()` / `add_many_with_meta()` now reject a login whose guid is invalid for the sync server (empty, longer than 64 chars, or containing a comma / non-printable byte) instead of persisting it and later crashing the sync uploader with "record's ID is invalid". The new `fixup_invalid_guids` feature regenerates such guids on import rather than rejecting them. ([Bug 2056116](https://bugzilla.mozilla.org/show_bug.cgi?id=2056116)) + ### Fxa Client - The `CheckAuthorizationStatus` and `Disconnect` events are now valid from all states except `Uninitialized`. - In the cases where the failed before, they're now no-ops. +In the cases where the failed before, they're now no-ops. ### Nimbus @@ -54,9 +58,9 @@ - Add `LoginStore.bridgedEngine()`, which exposes the logins sync engine to Desktop's Sync. ([bug 2049263](https://bugzilla.mozilla.org/show_bug.cgi?id=2049263)) - Add `LoginStore.delete_all()`, which deletes all logins - and `delete_all_axcept_fxa()`, which deletes all logins preserving the FxA session-credentials login - and `LoginStore.wipe_local_except_fxa()`, a variant of `wipe_local()` that preserves the FxA session-credentials login - ([#7467](https://github.com/mozilla/application-services/pull/7467)) ([Bug 2053557](https://bugzilla.mozilla.org/show_bug.cgi?id=2053557)) +and `delete_all_axcept_fxa()`, which deletes all logins preserving the FxA session-credentials login +and `LoginStore.wipe_local_except_fxa()`, a variant of `wipe_local()` that preserves the FxA session-credentials login +([#7467](https://github.com/mozilla/application-services/pull/7467)) ([Bug 2053557](https://bugzilla.mozilla.org/show_bug.cgi?id=2053557)) ## πŸ”§ What's Fixed πŸ”§ @@ -81,8 +85,8 @@ ### Viaduct - init_backend and `viaduct_init_backend_hyper` no longer throw an error if they're called multiple times. - Instead, we report the error via the Rust components error ping. - This is a breaking change for iOS, since the functions no longer throw. +Instead, we report the error via the Rust components error ping. +This is a breaking change for iOS, since the functions no longer throw. - Renamed the Android package to `mozilla.appservices.viaduct` ## πŸ”§ What's Fixed πŸ”§ @@ -123,8 +127,8 @@ - **BREAKING**: Removed deprecated checkpoint API: `set_checkpoint(checkpoint)` and `get_checkpoint()`. They are not in use by desktop and mobile. ### Remote-Settings - * Removed legacy remote-settings client - * Renaming `RemoteSettingsConfig2` to `RemoteSettingsConfig`, which will require client updates. +* Removed legacy remote-settings client +* Renaming `RemoteSettingsConfig2` to `RemoteSettingsConfig`, which will require client updates. ## ✨ What's New ✨ @@ -186,7 +190,7 @@ # v150.0 (_2026-03-23_) # General - - `error-support` breadcrumbs now include the timestamp. +- `error-support` breadcrumbs now include the timestamp. ## ⚠️ Breaking Changes ⚠️ @@ -242,13 +246,13 @@ ### Error support * Removed the `tracing-logging` and `tracing-reporting` features, these are now always enabled. - We don't believe this should affect any consumers, since they're were already using the - `tracing-logging` feature and were either also using `tracing-reporting` or not handling error - reporting at all. +We don't believe this should affect any consumers, since they're were already using the +`tracing-logging` feature and were either also using `tracing-reporting` or not handling error +reporting at all. * Reworked `register_event_sink` signature to allow it to register an event sink for muliple targets at once. * Reworked `unregister_event_sink`. It now inputs the return value from `register_event_sink`. * Removed `register_min_level_event_sink` and `unregister_min_level_event_sink`. - Use the new `register_event_sink` instead. +Use the new `register_event_sink` instead. ### Logins * Opened count method on logins for Android. ([#7207](https://github.com/mozilla/application-services/pull/7207/)) @@ -273,7 +277,7 @@ ### FxA Client * Support for the token exchange API, which we plan to use for getting access tokens for Relay. - ([#7179](https://github.com/mozilla/application-services/pull/7179)). +([#7179](https://github.com/mozilla/application-services/pull/7179)). * Removed `SwiftKeychainWrapper` logic. ([#7150](https://github.com/mozilla/application-services/pull/7150)) ### Logins @@ -319,8 +323,8 @@ ### Logins - Add breach alert support, including a database migration to version 3, - new `Login` fields (`time_of_last_breach`, `time_last_breach_alert_dismissed`), - and new `LoginStore` APIs (`record_breach`, `reset_all_breaches`, `is_potentially_breached`, `record_breach_alert_dismissal_time`, `record_breach_alert_dismissal`, `is_breach_alert_dismissed`). ([#7127](https://github.com/mozilla/application-services/pull/7127)) +new `Login` fields (`time_of_last_breach`, `time_last_breach_alert_dismissed`), +and new `LoginStore` APIs (`record_breach`, `reset_all_breaches`, `is_potentially_breached`, `record_breach_alert_dismissal_time`, `record_breach_alert_dismissal`, `is_breach_alert_dismissed`). ([#7127](https://github.com/mozilla/application-services/pull/7127)) [Full Changelog](https://github.com/mozilla/application-services/compare/v147.0...v148.0) @@ -336,7 +340,7 @@ ### Fxa Client - Added optional `use_cache` paramater to `get_access_token`. Set this to `false` to force - requesting a new token. +requesting a new token. # v147.0 (_2025-12-07_) @@ -350,18 +354,18 @@ ### `rc_crypto` - Thread-safety improvements for PKCS-token-dependent methods by introducing a - global mutex. Refactored key unpacking logic and removed redundant code; - includes some breaking API changes, but since the keydb feature is not yet in - use, these do not affect existing consumers. - - `get_aes256_key` now returns a `Result>` to distinguish missing - keys from errors - - `get_or_create_aes256_key` only creates a key when none exists. - - When the keydb feature is enabled, `ensure_nss_initialized` is disabled in - favor of `ensure_nss_initialized_with_profile_dir`. +global mutex. Refactored key unpacking logic and removed redundant code; +includes some breaking API changes, but since the keydb feature is not yet in +use, these do not affect existing consumers. +- `get_aes256_key` now returns a `Result>` to distinguish missing +keys from errors +- `get_or_create_aes256_key` only creates a key when none exists. +- When the keydb feature is enabled, `ensure_nss_initialized` is disabled in +favor of `ensure_nss_initialized_with_profile_dir`. ### Logins - `create_login_store_with_nss_keymanager` returns an `ApiResult` now, instead - of just panicking. +of just panicking. - fix `count_by_origin` and `count_by_form_action_origin` with punicode origins ### Places @@ -394,9 +398,9 @@ ### Nimbus - The `participation` field is no longer required in the Cirrus - `EnrollmentRequest` type. Instead, when users opt-out, the client application - should no longer send enrollment requests to Cirrus. - ([#7030](https://github.com/mozilla/application-services/pull/7030)) +`EnrollmentRequest` type. Instead, when users opt-out, the client application +should no longer send enrollment requests to Cirrus. +([#7030](https://github.com/mozilla/application-services/pull/7030)) [Full Changelog](https://github.com/mozilla/application-services/compare/v145.0...v146.0) @@ -418,9 +422,9 @@ ### Relay - **⚠️ Breaking Change:** The error handling for the Relay component has been refactored for stronger forward compatibility and more transparent error reporting in Swift and Kotlin via UniFFI. - - API and network errors from the Relay server are now converted to a single `RelayApiError::Api { status, code, detail }` variant, exposing the HTTP status code, a machine-readable error code (if present), and a human-readable detail message. - - Downstream client apps can now handle server errors based on both the `status` and `error_code` fields directly, without additional changes to the Rust component - even as server-side error codes evolve. - - **Consumers must update their error handling code to match the new `Api { status, code, detail }` shape.** +- API and network errors from the Relay server are now converted to a single `RelayApiError::Api { status, code, detail }` variant, exposing the HTTP status code, a machine-readable error code (if present), and a human-readable detail message. +- Downstream client apps can now handle server errors based on both the `status` and `error_code` fields directly, without additional changes to the Rust component - even as server-side error codes evolve. +- **Consumers must update their error handling code to match the new `Api { status, code, detail }` shape.** ### Places - `places::storage::history_metadata::get_most_recent(limit: i32)` was added to get most recent history metadata limited to a number. ([#7002](https://github.com/mozilla/application-services/pull/7002)) @@ -441,7 +445,7 @@ ### OHTTP Client - The `as-ohttp-client` component is being reintroduced to allow firefox-ios to - optionally submit Glean pings over OHTTP. +optionally submit Glean pings over OHTTP. ## 🦊 What's Changed 🦊 @@ -458,7 +462,7 @@ ## Nimbus CLI - Support for Firefox for Android and Focus via the new - [mozilla-firefox](https://github.com/mozilla-firefox/firefox) repository. +[mozilla-firefox](https://github.com/mozilla-firefox/firefox) repository. # v143.0 (_2025-08-18_) @@ -513,9 +517,9 @@ ### Search - `SearchEngineUrls` now has an optional `visual_search` field, supporting - visual search endpoints in engine configs. +visual search endpoints in engine configs. - `SearchEngineUrl` now has an optional `display_name` field, which is useful if - a URL corresponds to a brand name distinct from the engine's brand name. +a URL corresponds to a brand name distinct from the engine's brand name. [Full Changelog](https://github.com/mozilla/application-services/compare/v141.0...v142.0) @@ -525,7 +529,7 @@ ### Filter Adult - Added the first version of a component for checking if base domains exist in a - list of base domains for adult websites. +list of base domains for adult websites. ### Relay - Added the first version of a component for using Firefox Relay. @@ -562,7 +566,7 @@ ### Context ID - Added the first version of a component for managing and rotating context IDs - sent to MARS / Merino. +sent to MARS / Merino. #### BREAKING CHANGE - Removed `Megazord.kt` and moved the contents to the new `RustComponentsInitializer.kt`. @@ -571,13 +575,13 @@ ### Remote Settings - `RemoteSettingsService::sync` is now more efficient. It checks the remote settings changes - endpoint and only syncs collections that have been modified since the last sync. +endpoint and only syncs collections that have been modified since the last sync. ### Logins - add logins store api methods for bulk insert and meta insert, intended to be used during migration and CSV import on desktop: - - `fn add_with_record(&self, entry_with_record: LoginEntryWithRecordFields)`: add a login together with metadata - - `fn add_many(&self, entries: Vec)`: add multiple logins with single transaction - - `fn add_many_with_records(&self, entries_with_records: Vec)`: add multiple logins with metadata within single transaction +- `fn add_with_record(&self, entry_with_record: LoginEntryWithRecordFields)`: add a login together with metadata +- `fn add_many(&self, entries: Vec)`: add multiple logins with single transaction +- `fn add_many_with_records(&self, entries_with_records: Vec)`: add multiple logins with metadata within single transaction ### Glean - Updated to v64.3.1 ([#6755](https://github.com/mozilla/application-services/pull/6755)/[#6762](https://github.com/mozilla/application-services/pull/6762)) @@ -592,7 +596,7 @@ ### Search - The `SearchEngineSelector::filter_engine_configuration` will now sort any - unordered engines by name rather than identifier. +unordered engines by name rather than identifier. - Added `is_new_until` field to the SearchEngineDefinition struct. This optional field represents the date in YYYY-MM-DD format until which a search engine variant or subvariant is considered "new". [Full Changelog](https://github.com/mozilla/application-services/compare/v139.0...v140.0) @@ -629,22 +633,22 @@ text, the list view has been slimmed down and a detail view has been added. ### Remote Settings - The `RemoteSettingsService` constructor and `RemoteSettingsService::make_client` no longer perform any IO. - This integrates better with JS, which expects all IO to happen inside async functions. +This integrates better with JS, which expects all IO to happen inside async functions. - Added `RemoteSettingsClient::close`, which can be used to close the underlying SQLite DB during down. ## ⚠️ Breaking Changes ⚠️ ### Remote Settings - Several methods `RemoteSettingsService` are now infallible, which is a breaking change for Swift code. - - `RelevancyStore` constructor - - `RemoteSettingsService` constructor - - `RemoteSettingsService::make_client()` - - `SearchEngineSelector::use_remote_settings_server()` - - `SuggestStore` constructor +- `RelevancyStore` constructor +- `RemoteSettingsService` constructor +- `RemoteSettingsService::make_client()` +- `SearchEngineSelector::use_remote_settings_server()` +- `SuggestStore` constructor ### OHTTP Client - The now-unused `as-ohttp-client` component is now removed. It was previously - only used by firefox-ios but no longer is. +only used by firefox-ios but no longer is. [Full Changelog](https://github.com/mozilla/application-services/compare/v138.0...v139.0) @@ -654,8 +658,8 @@ text, the list view has been slimmed down and a detail view has been added. ### Remote Settings - Removed fields from `RemoteSettingsContext`. The goal is to create a common set of fields between - the Rust and Desktop clients. Consumers will need to update their code to stop sending these - fields. Also, all fileds now default to `None/null/nil`. +the Rust and Desktop clients. Consumers will need to update their code to stop sending these +fields. Also, all fileds now default to `None/null/nil`. - Made `RemoteSettingsContext::form_factor` and `RemoteSettingsContext::country` top-level fields. ## 🦊 What's Changed 🦊 @@ -744,23 +748,23 @@ The logins sync engine has been adapted for above EncryptorDecryptor trait and t The flattened Login struct now does not expose internal structuring to the consumer: ``` Login { - // record fields - string id; - i64 times_used; - i64 time_created; - i64 time_last_used; - i64 time_password_changed; - - // login fields - string origin; - string? http_realm; - string? form_action_origin; - string username_field; - string password_field; - - // secure login fields - string password; - string username; +// record fields +string id; +i64 times_used; +i64 time_created; +i64 time_last_used; +i64 time_password_changed; + +// login fields +string origin; +string? http_realm; +string? form_action_origin; +string username_field; +string password_field; + +// secure login fields +string password; +string username; } ``` @@ -768,9 +772,9 @@ Login { - New low level bindings for dealing with primary password. - New feature flag `keydb` in `rc_crypto/nss`, which enables NSS key persistence: `ensure_initialized_with_profile_dir(path: impl AsRef)` initializes NSS with a profile directory and appropriate flags to persist keys (and certificates) in its internal PKCS11 software implementation. This function must be called first; if `ensure_initialized` is called before, it will fail. - New methods for dealing with primary password and key persistence, available within the `keydb` feature: - * `authentication_with_primary_password_is_needed()`: checks whether a primary password is set and needs to be authenticated - * `authenticate_with_primary_password(primary_password: &str)`: method for authenticate NSS key store against a user-provided primary password - * `get_or_create_aes256_key(name: &str)`: retrieve a key by `name` from the internal NSS key store. If none exists, create one, persist, and return. +* `authentication_with_primary_password_is_needed()`: checks whether a primary password is set and needs to be authenticated +* `authenticate_with_primary_password(primary_password: &str)`: method for authenticate NSS key store against a user-provided primary password +* `get_or_create_aes256_key(name: &str)`: retrieve a key by `name` from the internal NSS key store. If none exists, create one, persist, and return. ### Remote Settings - Added support of content signatures verification ([#6534](https://github.com/mozilla/application-services/pull/6534)) @@ -799,7 +803,7 @@ Login { ## Webext-Storage - Exposed the bridged engine logic for use in desktop ([#6473](https://github.com/mozilla/application-services/pull/6473)). - - This updated the signature of the `bridged_engine` function technically making this PR a breaking change though an imminent desktop patch will remove references to function calls with the old signature. +- This updated the signature of the `bridged_engine` function technically making this PR a breaking change though an imminent desktop patch will remove references to function calls with the old signature. [Full Changelog](https://github.com/mozilla/application-services/compare/v134.0...v135.0) @@ -823,11 +827,11 @@ Login { ### Places - `PlacesConnection.noteHistoryMetadataObservation{ViewTime, DocumentType}()` - (Android) and `PlacesWriteConnection.noteHistoryMetadataObservation()` (iOS) - now take an optional `NoteHistoryMetadataObservationOptions` argument. The - new `if_page_missing` option specifies what to do if the page for the - observation doesn't exist in the history database. - ([#6443](https://github.com/mozilla/application-services/pull/6443)) +(Android) and `PlacesWriteConnection.noteHistoryMetadataObservation()` (iOS) +now take an optional `NoteHistoryMetadataObservationOptions` argument. The +new `if_page_missing` option specifies what to do if the page for the +observation doesn't exist in the history database. +([#6443](https://github.com/mozilla/application-services/pull/6443)) ## ⚠️ Breaking Changes ⚠️ @@ -836,10 +840,10 @@ Login { ### Places - If an entry for a page doesn't exist in the history database, any - history observations for that page will no longer be recorded by default. - To revert to the old behavior, and automatically insert an entry for - the page before recording the observation, set the new `if_page_missing` - option to `HistoryMetadataPageMissingBehavior::InsertPage`. +history observations for that page will no longer be recorded by default. +To revert to the old behavior, and automatically insert an entry for +the page before recording the observation, set the new `if_page_missing` +option to `HistoryMetadataPageMissingBehavior::InsertPage`. [Full Changelog](https://github.com/mozilla/application-services/compare/v133.0...v134.0) @@ -849,9 +853,9 @@ Login { ### Remote Settings - Updated Error hierarchy. We don't need to update consumer code because the only consumer was - Android and it only caught exceptions using the base RemoteSettingsException class. +Android and it only caught exceptions using the base RemoteSettingsException class. - Updated `RemoteSettingsServer::url()` to include the `v1/` path. This makes the API match the JS - version. This only affects Rust consumers, since this function is not exposed via UniFFI. +version. This only affects Rust consumers, since this function is not exposed via UniFFI. ## 🦊 What's Changed 🦊 @@ -870,7 +874,7 @@ Login { ### General - Simplified the process of adding a new component by adding a tool that can autogenerate the - initial UniFFI/bindings code. +initial UniFFI/bindings code. ## 🦊 What's Changed 🦊 @@ -888,9 +892,9 @@ Login { ### Nimbus CLI - Support for Firefox for Android and Focus v126+ (via gecko-dev). - Fixed a bug where manifests for Firefox for Android v110 were not available, due - to being fetched from the wrong repository - ([#6347](https://github.com/mozilla/application-services/pull/6347)) +Fixed a bug where manifests for Firefox for Android v110 were not available, due +to being fetched from the wrong repository +([#6347](https://github.com/mozilla/application-services/pull/6347)) [Full Changelog](https://github.com/mozilla/application-services/compare/v130.0...v131.0) @@ -1001,16 +1005,16 @@ Login { ### Remote Settings - The Remote Settings UniFFI bindings have been changed. The - `RemoteSettingsConfig` dictionary has had its field re-ordered to [fix code - generation for the Python - bindings](https://bugzilla.mozilla.org/show_bug.cgi?id=1874030). This also - affects the Swift bindings, since Swift enforces argument ordering. +`RemoteSettingsConfig` dictionary has had its field re-ordered to [fix code +generation for the Python +bindings](https://bugzilla.mozilla.org/show_bug.cgi?id=1874030). This also +affects the Swift bindings, since Swift enforces argument ordering. ### Suggest - Added more error variants to `SuggestApiError` - Added `SuggestStoreBuilder` to create `SuggestStore` instances. - `SuggestStore` now stores a data path. This is the path to the SQLite database that should - persist when the cache is cleared. +persist when the cache is cleared. ### Autofill - Replace `*-name` fields with a single `name` field for addresses. @@ -1028,12 +1032,12 @@ Login { ### Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§ - Added correction candidates to errors returned by the FeatureInspector ([#6019](https://github.com/mozilla/application-services/pull/6019)). - - This will drive the JSON editor on the Experimenter frontend. +- This will drive the JSON editor on the Experimenter frontend. ### Nimbus SDK β›…οΈπŸ”¬πŸ”­ - Added definition for new Glean `nimbus-test-event` ([#6062](https://github.com/mozilla/application-services/pull/6062)). - - Added `recordIsReady` method to NimbusInterface ([#6063](https://github.com/mozilla/application-services/pull/6063)). +- Added `recordIsReady` method to NimbusInterface ([#6063](https://github.com/mozilla/application-services/pull/6063)). ## 🦊 What's Changed 🦊 @@ -1042,15 +1046,15 @@ Login { ### Nimbus SDK β›…οΈπŸ”¬πŸ”­ - Moved the `days_since_install` calculation to closer to where it's needed ([#6042](https://github.com/mozilla/application-services/pull/6042)). - - This means that the Nimbus SDK can run for longer and the JEXL evaluator still is accurate. +- This means that the Nimbus SDK can run for longer and the JEXL evaluator still is accurate. ### Logins - Logins now correctly handle the following sync conflict resolution: - - When the client locally deleted a login, and before it synced another client modified the same login, the client will recover the login +- When the client locally deleted a login, and before it synced another client modified the same login, the client will recover the login ### Tabs - RemoteTabRecord now has an `inactive` boolean with a default value of false ([#6026](https://github.com/mozilla/application-services/pull/6026/)). - Mobile platforms can populate this to indicate if the tab is "inactive" allowing other devices to treat them specially (eg, group them together, hide them by default, etc.) +Mobile platforms can populate this to indicate if the tab is "inactive" allowing other devices to treat them specially (eg, group them together, hide them by default, etc.) ### Push - verifyConnection now returns an empty list when there are no subscriptions (which is typical when a device first starts up). @@ -1067,15 +1071,15 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### ✨ What's New ✨ - Added an `info` command to add to the `nimbus-fml` command line ([#5967](https://github.com/mozilla/application-services/pull/5967)). It outputs JSON / YAML with a summary of each feature including: - - the types used, as a proxy for feature complexity - - [feature metadata](https://experimenter.info/fml/feature-metadata), including documentation and events - - the schema hash and defaults hash. +- the types used, as a proxy for feature complexity +- [feature metadata](https://experimenter.info/fml/feature-metadata), including documentation and events +- the schema hash and defaults hash. ## Places ### ⚠️ Breaking Changes ⚠️ - - Removed the `metrics_params` arguments from `begin_oauth_flow` and `begin_pairing_flow`. - This is technically a breaking change, but no consumers were using these optional params so it shouldn't cause any issues downstream. +- Removed the `metrics_params` arguments from `begin_oauth_flow` and `begin_pairing_flow`. +This is technically a breaking change, but no consumers were using these optional params so it shouldn't cause any issues downstream. [Full Changelog](https://github.com/mozilla/application-services/compare/v121.0...v122.0) @@ -1086,8 +1090,8 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### 🦊 What's Changed 🦊 - Removed `enrollment_id` from being generated or recorded anywhere in the Nimbus SDK ([#5899](https://github.com/mozilla/application-services/pull/5899)). - - This was originally thought to be of use, but after running the system for sometime, we have found that this isn't needed. - - In the spirit of reducing unique identifiers in telemetry and in the spirit of Lean Data, we have removed `enrollment_id` (and the code that generates it). +- This was originally thought to be of use, but after running the system for sometime, we have found that this isn't needed. +- In the spirit of reducing unique identifiers in telemetry and in the spirit of Lean Data, we have removed `enrollment_id` (and the code that generates it). - Added the feature `activation` event ([#5908](https://github.com/mozilla/application-services/pull/5908)). ## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§ @@ -1095,7 +1099,7 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### ✨ What's New ✨ - Added `string-alias` capability to feature variables ([#5928](https://github.com/mozilla/application-services/pull/5928)). - - This adds quite a lot of type safety around complex features that relied on Strings, e.g. messaging, onboarding. +- This adds quite a lot of type safety around complex features that relied on Strings, e.g. messaging, onboarding. ### 🦊 What's Changed 🦊 @@ -1104,14 +1108,14 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ## Places ### ⚠️ Breaking Changes ⚠️ - - `wipe_local` and `prune_destructively` have been removed from history API. `delete_everything` or `run_maintenance_*` methods should be used instead. +- `wipe_local` and `prune_destructively` have been removed from history API. `delete_everything` or `run_maintenance_*` methods should be used instead. ## FxA-Client ### 🦊 What's Changed 🦊 - Added the `LocalDevice` struct, tracks the server's knowledge of the local device. Many - device-related methods now return this. +device-related methods now return this. - Check for missing sync scoped keys and return an error if they're not present - Began implementing functionality to track the authorization state - Added methods to simulate auth errors @@ -1131,7 +1135,7 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### 🦊 What's Changed 🦊 - Changed `.experiment.yaml` generation to a `validate` ([#5877](https://github.com/mozilla/application-services/pull/5877)). - - Additionally: moved `nimbus-fml.sh` script from iOS into the application-services directory, replacing it with a `bootstrap.sh` script. +- Additionally: moved `nimbus-fml.sh` script from iOS into the application-services directory, replacing it with a `bootstrap.sh` script. ## Rust log forwarder @@ -1173,22 +1177,22 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### ✨ What's New ✨ - Added new optional metadata fields to a feature definition ([#5865](https://github.com/mozilla/application-services/pull/5865)). - - This is to open up uses of the FML in experimenter, especially for QA and feature configuration. +- This is to open up uses of the FML in experimenter, especially for QA and feature configuration. - Added support to fetch different versions of a manifest to the `FmlClient` ([#5827](https://github.com/mozilla/application-services/pull/5827)). - Added a `FmlFeatureInspector` to the `FmlClient` ([#5827](https://github.com/mozilla/application-services/pull/5827)). - - This adds methods to parse a feature configuration and return errors. +- This adds methods to parse a feature configuration and return errors. - Added a `FmlFeatureDescriptor` to the `FmlClient` ([#5815](https://github.com/mozilla/application-services/pull/5815)). - - This adds methods to get the feature_ids and descriptions from a loaded manifest. +- This adds methods to get the feature_ids and descriptions from a loaded manifest. - Added a `channels` subcommmand to the command line ([#5844](https://github.com/mozilla/application-services/pull/5844)). - - This prints the channels for the given manifest. +- This prints the channels for the given manifest. - Added `pref-key` to feature variables schema definition ([#5862](https://github.com/mozilla/application-services/pull/5862)). - - This allows developers to override remote and default values of top-level variables with preferences. - - Requires setting `userDefaults` and `sharedPreferences` in the call to `NimbusBuilder`. +- This allows developers to override remote and default values of top-level variables with preferences. +- Requires setting `userDefaults` and `sharedPreferences` in the call to `NimbusBuilder`. ### 🦊 What's Changed 🦊 - Removed the `channel` argument from the `generate-experimenter` command ([#5843](https://github.com/mozilla/application-services/pull/5843)). - - This cleans up some design issues/technical debt deep within the internal representation of the FML compiler. +- This cleans up some design issues/technical debt deep within the internal representation of the FML compiler. ## Places @@ -1230,7 +1234,7 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio - The Remote Settings client has a new `Client::get_records_with_options()` method ([#5764](https://github.com/mozilla/application-services/pull/5764)). This is for Rust consumers only; it's not exposed to Swift or Kotlin. - `RemoteSettingsRecord` objects have a new `deleted` property that indicates if the record is a tombstone ([#5764](https://github.com/mozilla/application-services/pull/5764)). - Added `server-megazord` build for compiling crates and uniffi-ing for use in a python based server ([#5804](https://github.com/mozilla/application-services/pull/5804)). - - Initial users of this are a new `nimbus-experimenter` megazord and the existing `cirrus` megazord. +- Initial users of this are a new `nimbus-experimenter` megazord and the existing `cirrus` megazord. ## Rust log forwarder ### 🦊 What's Changed 🦊 @@ -1268,15 +1272,15 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### ✨ What's New ✨ - Add `recordExperimentExposure` to `FeatureHolder`, and substitute `{experiment}` for experiment slugs at enrollment in the feature configuration [#5715](https://github.com/mozilla/application-services/pull/5715). - - This is to enable exposure events to be assigned to the correct experiment in coenrolled features. - - Android and iOS are both supported. +- This is to enable exposure events to be assigned to the correct experiment in coenrolled features. +- Android and iOS are both supported. ## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§ ### ✨ What's New ✨ - Add `allow-coenrollment` property for features in the Feature Manifest Language. This relaxes the feature exclusion rules for features marked with `allow-coenrollment: true`. ([#5688](https://github.com/mozilla/application-services/pull/5688)). - - This adds a non-user-facing method to the `FeatureManifestInterface`, `getCoenrollingFeatureIds`, in both Kotlin and Swift. +- This adds a non-user-facing method to the `FeatureManifestInterface`, `getCoenrollingFeatureIds`, in both Kotlin and Swift. - Exposes a method to get the coenrolling feature ids in the FML client ([#5714](https://github.com/mozilla/application-services/pull/5714)), as well as the NimbusBuilders for both Kotlin and Swift ([#5718](https://github.com/mozilla/application-services/pull/5718)). ### 🦊 What's Changed 🦊 @@ -1290,12 +1294,12 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio - Updated the version number to 0.4.0 ([#5757](https://github.com/mozilla/application-services/pull/5757)). - Added a `--patch` option to all commands that accept an experiment. ([#5721](https://github.com/mozilla/application-services/pull/5721)) - Added a `--pbpaste` and `start-server` command for testing on iOS devices. ([#5751](https://github.com/mozilla/application-services/pull/5751)). - - Use by `start-server` which directs you to open a URL on your device. Device commands sync with the server, and then on to the device. - - Added a `--pbcopy` option to all commands that open the app. These URLs are used to open the app on device ([#5727](https://github.com/mozilla/application-services/pull/5727)). - - with associated in-app tooling to enroll into experiments via a deeplink URL. - - Added `--is-launcher` to the protocol between the cli and the apps, so apps detecting the launcher intent can work from the generated deeplinks ([#5748](https://github.com/mozilla/application-services/pull/5748)). +- Use by `start-server` which directs you to open a URL on your device. Device commands sync with the server, and then on to the device. +- Added a `--pbcopy` option to all commands that open the app. These URLs are used to open the app on device ([#5727](https://github.com/mozilla/application-services/pull/5727)). +- with associated in-app tooling to enroll into experiments via a deeplink URL. +- Added `--is-launcher` to the protocol between the cli and the apps, so apps detecting the launcher intent can work from the generated deeplinks ([#5748](https://github.com/mozilla/application-services/pull/5748)). - Added filters to the `list` and `fetch-list` commands ([#5730](https://github.com/mozilla/application-services/pull/5730)) - - Also, made `--app` and `--channel` non-mandatory for commands that don't need them. +- Also, made `--app` and `--channel` non-mandatory for commands that don't need them. [Full Changelog](https://github.com/mozilla/application-services/compare/v116.0...v117.0) @@ -1305,22 +1309,22 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### 🦊 What's Changed 🦊 - Android: The JVM compatibility target is now version 17 ([#5651](https://github.com/mozilla/application-services/pull/5651)) - - _NOTE: This is technically a breaking change, but all existing downstream projects have already made the necessary changes._ +- _NOTE: This is technically a breaking change, but all existing downstream projects have already made the necessary changes._ ## Nimbus SDK β›…οΈπŸ”¬πŸ”­ ### 🦊 What's Changed 🦊 - When a rollout audience size changes, the enrollment is re-evaluated and the client is un-enrolled if no longer in the bucket or re-enrolled if they had previously been disqualified from bucketing. ([#5687](https://github.com/mozilla/application-services/pull/5687), [#5716](https://github.com/mozilla/application-services/pull/5716)). - - The record of enrollment will be available in the new `enrollments` targeting attribute. +- The record of enrollment will be available in the new `enrollments` targeting attribute. - Add `enrollments` value to `TargetingAttributes` β€” it is a set of strings containing all enrollments, past and present ([#5685](https://github.com/mozilla/application-services/pull/5685)). - - _Note: This change only applies to stateful uses of the Nimbus SDK, e.g. mobile_ +- _Note: This change only applies to stateful uses of the Nimbus SDK, e.g. mobile_ - Add ability to enroll selected features multiple times (coenrollment) ([#5684](https://github.com/mozilla/application-services/pull/5684), [#5697](https://github.com/mozilla/application-services/pull/5697)). ### ⚠️ Breaking Changes ⚠️ - Several changes to the NimbusBuilder mean that this is a breaking change for Firefox for Android [#5697](https://github.com/mozilla/application-services/pull/5697). - - These changes are fixed by [firefox-android#2682](https://github.com/mozilla-mobile/firefox-android/pull/2682). +- These changes are fixed by [firefox-android#2682](https://github.com/mozilla-mobile/firefox-android/pull/2682). ## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§ @@ -1340,17 +1344,17 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio - Version bump to `0.3.0` ([#5674](https://github.com/mozilla/application-services/pull/5674)). User facing changelog: https://experimenter.info/nimbus-cli/whats-new - Added isRollout and bucketing info to the `list` command ([#5672](https://github.com/mozilla/application-services/pull/5672)). - Fixed several paper cut usability issues ([#5654](https://github.com/mozilla/application-services/pull/5654)): - - Experiments by default are fetched from the API v6, eliminating latency between making changes on experimenter and syncing with remote settings. - - Separated `fetch` and `fetch-list`: experiment lists, by default still come from Remote Settings, but the slower API v6 `/api/v6/experiments` can be queried. +- Experiments by default are fetched from the API v6, eliminating latency between making changes on experimenter and syncing with remote settings. +- Separated `fetch` and `fetch-list`: experiment lists, by default still come from Remote Settings, but the slower API v6 `/api/v6/experiments` can be queried. ### ✨ What's New ✨ - Added an `info` command ([#5672](https://github.com/mozilla/application-services/pull/5672)). - Fixed several paper cut usability issues ([#5654](https://github.com/mozilla/application-services/pull/5654)): - - Added a `defaults` command to output the feature configuration from the manifest. - - Added a `features` command to output the experiment branch features and optionally merged with the manifest defaults. - - Now supports reading and writing YAML files. - - Single experiment files can be used as an experiment list file. +- Added a `defaults` command to output the feature configuration from the manifest. +- Added a `features` command to output the experiment branch features and optionally merged with the manifest defaults. +- Now supports reading and writing YAML files. +- Single experiment files can be used as an experiment list file. - Add passthrough parameters for the `open`, `enroll` and `test-feature` commands. ([#5669](https://github.com/mozilla/application-services/pull/5669)) [Full Changelog](https://github.com/mozilla/application-services/compare/v115.0...v116.0) @@ -1361,15 +1365,15 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ## Push ### ⚠️ Breaking Changes ⚠️ - - The constructor for the Push Manager has changed. ([#5389](https://github.com/mozilla/application-services/pull/5389)) - - Push manager now takes only one argument, a Push Configuration object - - Push manager no longer takes in the registration_id (token) in construction - - Push manager now takes a new `verifyConnectionRateLimiter` parameter in its configuration, it defines the number of seconds between consecutive verify connection requests. - - The `update` function no longer returns a boolean, the consumers did not use the return value. ([#5389](https://github.com/mozilla/application-services/pull/5389)) - - The Error exposed by push is now `PushApiError`, which is reduced to the set of errors the consumer is expected to handle. ([#5389](https://github.com/mozilla/application-services/pull/5389)): - - `PushApiError::UAIDNotRecognizedError`: The server lost the client's uaid. The app should call `verify_connection(true)` and notify all consumers of push - - `RecordNotFoundError`: The record containing the private key cannot be found. The consumer should call `verify_connection(true)` and notify all consumers of push - - `InternalError`: Consumer should report the error, but ignore it +- The constructor for the Push Manager has changed. ([#5389](https://github.com/mozilla/application-services/pull/5389)) +- Push manager now takes only one argument, a Push Configuration object +- Push manager no longer takes in the registration_id (token) in construction +- Push manager now takes a new `verifyConnectionRateLimiter` parameter in its configuration, it defines the number of seconds between consecutive verify connection requests. +- The `update` function no longer returns a boolean, the consumers did not use the return value. ([#5389](https://github.com/mozilla/application-services/pull/5389)) +- The Error exposed by push is now `PushApiError`, which is reduced to the set of errors the consumer is expected to handle. ([#5389](https://github.com/mozilla/application-services/pull/5389)): +- `PushApiError::UAIDNotRecognizedError`: The server lost the client's uaid. The app should call `verify_connection(true)` and notify all consumers of push +- `RecordNotFoundError`: The record containing the private key cannot be found. The consumer should call `verify_connection(true)` and notify all consumers of push +- `InternalError`: Consumer should report the error, but ignore it ## Nimbus β›…οΈπŸ”¬πŸ”­ @@ -1386,8 +1390,8 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio - Extra commands: `capture-logs`, `tail-logs`, `test-feature`, `fetch` and `apply-files`. ([#5517](https://github.com/mozilla/application-services/pull/5517)) - Extra commands: `validate` to validate experiments against a feature manifest. ([#5638](https://github.com/mozilla/application-services/pull/5638)) - - This is on by default for `test-feature` and `enroll` - - The version of the manifest may be tweaked with the `--version`, `--ref` and `--manifest` options. +- This is on by default for `test-feature` and `enroll` +- The version of the manifest may be tweaked with the `--version`, `--ref` and `--manifest` options. - Extra commands and options to open deeplinks with the app. ([#5590](https://github.com/mozilla/application-services/pull/5590)). - An update checker to keep you and your installation fresh. ([#5613](https://github.com/mozilla/application-services/pull/5613)). - An installation script to make getting `nimbus-cli` easier. ([#5618](https://github.com/mozilla/application-services/pull/5618)). @@ -1408,8 +1412,8 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ## FxA Client ### ⚠️ Breaking Changes ⚠️ - Changes `handlePushMessage` API so that it now returns exactly one event associated with the push message. ([#5556](https://github.com/mozilla/application-services/pull/5556)) - - This API does not attempt to retrieve any missing tabs. - - Users of this API can use it to display the notification, but should use `pollDeviceCommands` after to capture the commands. +- This API does not attempt to retrieve any missing tabs. +- Users of this API can use it to display the notification, but should use `pollDeviceCommands` after to capture the commands. ## Xcode @@ -1422,16 +1426,16 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ## General ### ✨ What's New ✨ - - Updated the version system to follow the Firefox major version - - Implemented nightly builds +- Updated the version system to follow the Firefox major version +- Implemented nightly builds ## Nimbus β›…οΈπŸ”¬πŸ”­ ### ✨ What's New ✨ - Added processing of command line arguments (or intent extras) to be driven by a command line tool. ([#5482](https://github.com/mozilla/application-services/pull/5482)) - - Requires passing `CommandLine.arguments` to `NimbusBuilder` in iOS. - - Requires passing `intent` to `NimbusInterface` in Android. +- Requires passing `CommandLine.arguments` to `NimbusBuilder` in iOS. +- Requires passing `intent` to `NimbusInterface` in Android. - Added Cirrus client object for working with Nimbus in a static, stateless manner ([#5471](https://github.com/mozilla/application-services/pull/5471)). - Added [`nimbus-cli`](./components/support/nimbus-cli). ([#5494](https://github.com/mozilla/application-services/pull/5494)) @@ -1439,7 +1443,7 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### 🦊 What's Changed 🦊 - - Added support for sync payload evolution in history. If other clients sync history records / visits with fields that we don't know about, we store that data as JSON and send it back when it's synced next. +- Added support for sync payload evolution in history. If other clients sync history records / visits with fields that we don't know about, we store that data as JSON and send it back when it's synced next. # v97.5.1 (_2023-04-17_) @@ -1448,7 +1452,7 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ## General ### ✨ What's New ✨ - - Fixing the objcopy path when building the megazord ([#5154](https://github.com/mozilla/application-services/pull/5154)). +- Fixing the objcopy path when building the megazord ([#5154](https://github.com/mozilla/application-services/pull/5154)). # v97.5.0 (_2023-04-17_) @@ -1465,18 +1469,18 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### 🦊 What's Changed 🦊 - Refactor the `EnrollmentEvolver` in preparation for a larger refactor to split out the `stateful` feature. ([#5374](https://github.com/mozilla/application-services/pull/5374)). - Added a `stateful` cargo feature and added appropriate feature flag attributes ([#5448](https://github.com/mozilla/application-services/pull/5448)). - - This does not functionally change build processes, as the `stateful` feature is now the default feature for the `nimbus-sdk` library. +- This does not functionally change build processes, as the `stateful` feature is now the default feature for the `nimbus-sdk` library. - Changed the ordering around for optional arguments for Python compatibility ([#5460](https://github.com/mozilla/application-services/pull/5460)). - - This does not change Kotlin or Swift APIs, but affects code that uses the uniffi generated FFI for `record_event` and `record_past_event` directly. +- This does not change Kotlin or Swift APIs, but affects code that uses the uniffi generated FFI for `record_event` and `record_past_event` directly. ### ✨ What's New ✨ - Added more testing tools for the `NimbusEventStore`, for iOS and Android ([#5477](https://github.com/mozilla/application-services/pull/5477)) - - `events.advanceEventTime(by: time)` lets you queue up a sequence of events to test JEXL queries. +- `events.advanceEventTime(by: time)` lets you queue up a sequence of events to test JEXL queries. ## Sync Manager ### 🦊 What's Changed 🦊 - - Added the sync telemetry reporting logic to replace the temp metrics in iOS. ([#5479](https://github.com/mozilla/application-services/pull/5479)) +- Added the sync telemetry reporting logic to replace the temp metrics in iOS. ([#5479](https://github.com/mozilla/application-services/pull/5479)) # v97.4.1 (_2023-04-04_) @@ -1485,8 +1489,8 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ## Places ### 🦊 What's Changed 🦊 - - Added a workaround for a database migration issue that was breaking places for some nightly users - (https://github.com/mozilla/application-services/issues/5464) +- Added a workaround for a database migration issue that was breaking places for some nightly users +(https://github.com/mozilla/application-services/issues/5464) # v97.4.0 (_2023-04-03_) @@ -1497,7 +1501,7 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### 🦊 What's Changed 🦊 - Changed the ordering around for optional arguments for Python compatibility ([#5460](https://github.com/mozilla/application-services/pull/5460)). - - This does not change Kotlin or Swift APIs, but affects code that uses the uniffi generated FFI for `record_event` and `record_past_event` directly. +- This does not change Kotlin or Swift APIs, but affects code that uses the uniffi generated FFI for `record_event` and `record_past_event` directly. # v97.3.0 (_2023-03-29_) @@ -1507,18 +1511,18 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### 🦊 What's Changed 🦊 - - Added support for sync payload evolution in bookmarks. If other clients sync bookmark records with fields that we don't know about, we store that data as JSON and send it back when it's synced next. +- Added support for sync payload evolution in bookmarks. If other clients sync bookmark records with fields that we don't know about, we store that data as JSON and send it back when it's synced next. ## Nimbus β›…οΈπŸ”¬πŸ”­ ### ✨ What's New ✨ - - Added `recordPastEvent` for iOS and Android for testing of event store triggers. ([#5431](https://github.com/mozilla/application-services/pull/5431)) - - Added `recordMalformedConfiguration` method for `FeatureHolder` to record when some or all of a feature configuration is found to be invalid. ([#5440](https://github.com/mozilla/application-services/pull/5440)) +- Added `recordPastEvent` for iOS and Android for testing of event store triggers. ([#5431](https://github.com/mozilla/application-services/pull/5431)) +- Added `recordMalformedConfiguration` method for `FeatureHolder` to record when some or all of a feature configuration is found to be invalid. ([#5440](https://github.com/mozilla/application-services/pull/5440)) ### 🦊 What's Changed 🦊 - - Removed the check for major `schemaVersion` in Experiment recipes. ([#5433](https://github.com/mozilla/application-services/pull/5433)) +- Removed the check for major `schemaVersion` in Experiment recipes. ([#5433](https://github.com/mozilla/application-services/pull/5433)) # v97.2.0 (_2023-03-08_) @@ -1528,7 +1532,7 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### 🦊 What's Changed 🦊 - Android: The JVM compatibility target is now version 11 ([#5401](https://github.com/mozilla/application-services/issues/5401)) - - _NOTE: This is technically a breaking change, but all existing downstream projects have already made the necessary changes._ +- _NOTE: This is technically a breaking change, but all existing downstream projects have already made the necessary changes._ ## Nimbus β›…οΈπŸ”¬πŸ”­ @@ -1554,7 +1558,7 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio ### 🦊 What's Changed 🦊 - Exposing the Sync Manager component to iOS by addressing the existing naming collisions, adding logic to process the telemetry - data returned in the component's `sync` function, and adding the component to the iOS megazord ([#5359](https://github.com/mozilla/application-services/pull/5359)). +data returned in the component's `sync` function, and adding the component to the iOS megazord ([#5359](https://github.com/mozilla/application-services/pull/5359)). # v97.0.0 (_2023-02-22_) @@ -1566,7 +1570,7 @@ Bumped the version of rusqlite/libsqlite3-sys, meaning the bundled sqlite versio - Good fences: protected calls out to the error reporter with a `try`/`catch` ([#5366](https://github.com/mozilla/application-services/pull/5366)) - Updated the Nimbus FML CLI to only import the R class if it will be used by a feature property ([#5361](https://github.com/mozilla/application-services/pull/5361)) ### ⚠️ Breaking Changes ⚠️ - - Android and iOS: Several errors have been moved to an internal support library and will no longer be reported as top-level Nimbus errors. They should still be accessible through `NimbusError.ClientError`. They are: `RequestError`, `ResponseError`, and `BackoffError`. ([#5369](https://github.com/mozilla/application-services/pull/5369)) +- Android and iOS: Several errors have been moved to an internal support library and will no longer be reported as top-level Nimbus errors. They should still be accessible through `NimbusError.ClientError`. They are: `RequestError`, `ResponseError`, and `BackoffError`. ([#5369](https://github.com/mozilla/application-services/pull/5369)) # v96.4.0 (_2023-01-30_) @@ -1585,7 +1589,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus β›…οΈπŸ”¬πŸ”­ ### 🦊 What's Changed 🦊 - - Added `GleanMetrics.NimbusHealth` metrics for measuring duration of `apply_pending_experiments` and `fetch_experiments`. ([#5344](https://github.com/mozilla/application-services/pull/5344)) +- Added `GleanMetrics.NimbusHealth` metrics for measuring duration of `apply_pending_experiments` and `fetch_experiments`. ([#5344](https://github.com/mozilla/application-services/pull/5344)) # v96.3.0 (_2023-01-18_) @@ -1593,12 +1597,12 @@ The Tabs engine is now more efficient in how it fetches its records: ## Places ### What's changed - - Removes old iOS bookmarks migration code. The function `migrateBookmarksFromBrowserDb` no longer exists. ([#5276](https://github.com/mozilla/application-services/pull/5276)) +- Removes old iOS bookmarks migration code. The function `migrateBookmarksFromBrowserDb` no longer exists. ([#5276](https://github.com/mozilla/application-services/pull/5276)) ## Nimbus β›…οΈπŸ”¬πŸ”­ ### What's New - - iOS: added a `Bundle.fallbackTranslationBundle()` method. ([#5314](https://github.com/mozilla/application-services/pull/5314)) - - Moved the Nimbus Gradle Plugin into application-services and updated its functionality to support local development. ([#5173](https://github.com/mozilla/application-services/pull/5173)) +- iOS: added a `Bundle.fallbackTranslationBundle()` method. ([#5314](https://github.com/mozilla/application-services/pull/5314)) +- Moved the Nimbus Gradle Plugin into application-services and updated its functionality to support local development. ([#5173](https://github.com/mozilla/application-services/pull/5173)) # v96.2.1 (_2023-01-04_) @@ -1606,7 +1610,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Places ### What's changed - - Limited the number of visits to migrate for History to 10,000 visits. ([#5310](https://github.com/mozilla/application-services/pull/5310)) +- Limited the number of visits to migrate for History to 10,000 visits. ([#5310](https://github.com/mozilla/application-services/pull/5310)) # v96.2.0 (_2023-01-03_) @@ -1615,21 +1619,21 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus β›…οΈπŸ”¬πŸ”­ ### What's Changed - - Fixed an issue where the NimbusQueues protocol was missing from the NimbusApi ([#5298](https://github.com/mozilla/application-services/pull/5298)) +- Fixed an issue where the NimbusQueues protocol was missing from the NimbusApi ([#5298](https://github.com/mozilla/application-services/pull/5298)) ### ✨ What's New ✨ - - Added `eventLastSeen` query to the event store and jexl transforms ([#5297](https://github.com/mozilla/application-services/pull/5297)) - - Introduced the `NimbusBuilder` for Swift ([#5307](https://github.com/mozilla/application-services/pull/5307)) +- Added `eventLastSeen` query to the event store and jexl transforms ([#5297](https://github.com/mozilla/application-services/pull/5297)) +- Introduced the `NimbusBuilder` for Swift ([#5307](https://github.com/mozilla/application-services/pull/5307)) ## Tabs ### What's Changed - - Fixed a regression causing failure to read old tabs databases ([#5286](https://github.com/mozilla/application-services/pull/5286)) +- Fixed a regression causing failure to read old tabs databases ([#5286](https://github.com/mozilla/application-services/pull/5286)) ## Autofill ### 🦊 What's Changed 🦊 - - Exposed autofill api to iOS consumer and resolved `createKey` function conflict with the Logins component. +- Exposed autofill api to iOS consumer and resolved `createKey` function conflict with the Logins component. # v96.1.3 (_2022-12-08_) @@ -1638,7 +1642,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Tabs ### What's Changed - - Fixed a regression causing failure to read old tabs databases ([#5286](https://github.com/mozilla/application-services/pull/5286)) +- Fixed a regression causing failure to read old tabs databases ([#5286](https://github.com/mozilla/application-services/pull/5286)) # v96.1.2 (_2022-12-07_) @@ -1646,34 +1650,34 @@ The Tabs engine is now more efficient in how it fetches its records: ## Logins ### What's changed - - Removes Fennec migration code. The function `importMultiple` no longer exists. ([#5268](https://github.com/mozilla/application-services/pull/5268)) +- Removes Fennec migration code. The function `importMultiple` no longer exists. ([#5268](https://github.com/mozilla/application-services/pull/5268)) ## Nimbus ### What's Changed - - Event store date comparison logic update to be entirely relative ([#5265](https://github.com/mozilla/application-services/pull/5265)) - - Updates event store to initialize all dates at the start of the current year ([#5279](https://github.com/mozilla/application-services/pull/5279)) - - Adds new Kotlin/Swift methods to clear the event store ([#5279](https://github.com/mozilla/application-services/pull/5279)) - - Adds Swift methods to wait for operation queues to finish ([#5279](https://github.com/mozilla/application-services/pull/5279)) +- Event store date comparison logic update to be entirely relative ([#5265](https://github.com/mozilla/application-services/pull/5265)) +- Updates event store to initialize all dates at the start of the current year ([#5279](https://github.com/mozilla/application-services/pull/5279)) +- Adds new Kotlin/Swift methods to clear the event store ([#5279](https://github.com/mozilla/application-services/pull/5279)) +- Adds Swift methods to wait for operation queues to finish ([#5279](https://github.com/mozilla/application-services/pull/5279)) ## Places ### What's changed - - Removes Fennec migration code. ([#5268](https://github.com/mozilla/application-services/pull/5268)) - The following functions no longer exist: - - `importBookmarksFromFennec` - - `importPinnedSitesFromFennec` - - `importVisitsFromFennec` +- Removes Fennec migration code. ([#5268](https://github.com/mozilla/application-services/pull/5268)) +The following functions no longer exist: +- `importBookmarksFromFennec` +- `importPinnedSitesFromFennec` +- `importVisitsFromFennec` ## Viaduct ### What's New - - Allow viaduct to make requests to the android emulator's host address via - a new viaduct_allow_android_emulator_loopback() (in Rust)/allowAndroidEmulatorLoopback() (in Kotlin) - ([#5270](https://github.com/mozilla/application-services/pull/5270)) +- Allow viaduct to make requests to the android emulator's host address via +a new viaduct_allow_android_emulator_loopback() (in Rust)/allowAndroidEmulatorLoopback() (in Kotlin) +([#5270](https://github.com/mozilla/application-services/pull/5270)) ## Tabs ### What's changes - - The ClientRemoteTabs struct/interface now has a last_modified field which is the time - when the device last uploaded the tabs. +- The ClientRemoteTabs struct/interface now has a last_modified field which is the time +when the device last uploaded the tabs. # v96.1.1 (_2022-12-01_) @@ -1682,23 +1686,23 @@ The Tabs engine is now more efficient in how it fetches its records: ## autofill ### What's Changed - - Fixed a bug where `scrub_encrypted_data()` didn't update the last sync time, which prevented the scrubbed CC data - from being fixed. - - Don't report sentry errors when we try to decrypt the empty string. This happens when the consumer tries to decript - a CC number after `scrub_encrypted_data()` is called. +- Fixed a bug where `scrub_encrypted_data()` didn't update the last sync time, which prevented the scrubbed CC data +from being fixed. +- Don't report sentry errors when we try to decrypt the empty string. This happens when the consumer tries to decript +a CC number after `scrub_encrypted_data()` is called. ## logins ### What's Changed - - Don't report `Origin is Malformed` errors to Sentry. This is a known issue stemming from FF Desktop sending us - URLs without a scheme. See #5233 for details. +- Don't report `Origin is Malformed` errors to Sentry. This is a known issue stemming from FF Desktop sending us +URLs without a scheme. See #5233 for details. ## places ### What's Changed - - Switch to using incremental vacuums for maintenance, which should speed up the process. - - Don't report places `relative URL without a base` to Sentry. This is a known issue caused by Fenix sending us URLs - with an invalid scheme (see #5235) +- Switch to using incremental vacuums for maintenance, which should speed up the process. +- Don't report places `relative URL without a base` to Sentry. This is a known issue caused by Fenix sending us URLs +with an invalid scheme (see #5235) # v96.1.0 (_2022-11-29_) @@ -1708,10 +1712,10 @@ The Tabs engine is now more efficient in how it fetches its records: ### What's new - Exposed a new function for swift consumers `resetPersistedState` - - `resetPersistedState` can be used to refresh the account manager to reflect the latest persisted state. - - `resetPersistedState` should be called in between a different account manager instance persisting the state, and the current account manager persisting state - - For example, the Notification Service in iOS creates its own instance of the account manager, changes its state (by changing the index of the last retrieved send tab) - - The main account manager held by the application should call` resetPersistedState` before calling any other method that might change its state. This way it can retrieve the most up to date index that the Notification Services persisted. +- `resetPersistedState` can be used to refresh the account manager to reflect the latest persisted state. +- `resetPersistedState` should be called in between a different account manager instance persisting the state, and the current account manager persisting state +- For example, the Notification Service in iOS creates its own instance of the account manager, changes its state (by changing the index of the last retrieved send tab) +- The main account manager held by the application should call` resetPersistedState` before calling any other method that might change its state. This way it can retrieve the most up to date index that the Notification Services persisted. ### What's changed - The `processRawIncomingAccountEvent` function will now process all commands, not just one. This moves the responsibility of ensuring each push gets a UI element to the caller. @@ -1722,7 +1726,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Logins ### What's Changed - - Updated the URL redaction code to remove potential PII leak. Version `96.0.0` should not be used by downstream clients. +- Updated the URL redaction code to remove potential PII leak. Version `96.0.0` should not be used by downstream clients. ## Nimbus ### What's changed @@ -1739,40 +1743,40 @@ The Tabs engine is now more efficient in how it fetches its records: ## β›…οΈπŸ”¬πŸ”­ Nimbus ### ✨ What's New ✨ - - `active_experiments` is available to JEXL as a set containing slugs of all enrolled experiments ([#5227](https://github.com/mozilla/application-services/pull/5227)) - - Added Behavioral Targeting/Display Triggers accessible from JEXL for experiments and messages ([#5226](https://github.com/mozilla/application-services/pull/5226), [#5228](https://github.com/mozilla/application-services/pull/5228)) - - Android only: added a new `NimbusBuilder` method to unify Fenix and Focus startup sequences. ([5239](https://github.com/mozilla/application-services/pull/5239)) +- `active_experiments` is available to JEXL as a set containing slugs of all enrolled experiments ([#5227](https://github.com/mozilla/application-services/pull/5227)) +- Added Behavioral Targeting/Display Triggers accessible from JEXL for experiments and messages ([#5226](https://github.com/mozilla/application-services/pull/5226), [#5228](https://github.com/mozilla/application-services/pull/5228)) +- Android only: added a new `NimbusBuilder` method to unify Fenix and Focus startup sequences. ([5239](https://github.com/mozilla/application-services/pull/5239)) ### ⚠️ Breaking Changes ⚠️ - - Changed the type of `customTargetingAttributes` in `NimbusAppSettings` to a `JSONObject`. The change will be breaking only for Android. ([#5229](https://github.com/mozilla/application-services/pull/5229)) - - Android only: Removed the `initialize()` methods in favor of `NimbusBuilder` class. ([5239](https://github.com/mozilla/application-services/pull/5239)) +- Changed the type of `customTargetingAttributes` in `NimbusAppSettings` to a `JSONObject`. The change will be breaking only for Android. ([#5229](https://github.com/mozilla/application-services/pull/5229)) +- Android only: Removed the `initialize()` methods in favor of `NimbusBuilder` class. ([5239](https://github.com/mozilla/application-services/pull/5239)) ## Logins ### What's Changed - - Include a redacted version of the URL in the Sentry error report when we see a login with an invalid origin field. - - Made it so `InvalidDatabaseFile` errors aren't reported to Sentry. These occurs when a non-existent path is passed - to `migrateLoginsWithMetrics()`, which happens about 1-2 times a day. This is very low volume, the code is going - away soon, and we have a plausible theory that these happen when Fenix is killed after the migration but before - `SQL_CIPHER_MIGRATION` is stored. +- Include a redacted version of the URL in the Sentry error report when we see a login with an invalid origin field. +- Made it so `InvalidDatabaseFile` errors aren't reported to Sentry. These occurs when a non-existent path is passed +to `migrateLoginsWithMetrics()`, which happens about 1-2 times a day. This is very low volume, the code is going +away soon, and we have a plausible theory that these happen when Fenix is killed after the migration but before +`SQL_CIPHER_MIGRATION` is stored. ## Places ### What's Changed - - Report a Sentry breadcrumb when we fail to parse URLs, with a redacted version of the URL. +- Report a Sentry breadcrumb when we fail to parse URLs, with a redacted version of the URL. ## JwCrypto ### What's Changed - - Log a breadcrumb with a redacted version of the crypto key when it has an invalid form (before throwing - DeserializationError) +- Log a breadcrumb with a redacted version of the crypto key when it has an invalid form (before throwing +DeserializationError) # v95.0.1 (_2022-11-03_) [Full Changelog](https://github.com/mozilla/application-services/compare/v95.0.0...v95.0.1) # General - - Added function to unset the app-services error reporter +- Added function to unset the app-services error reporter # v95.0.0 (_2022-10-28_) @@ -1783,52 +1787,52 @@ The Tabs engine is now more efficient in how it fetches its records: - Fixed a bug released in 94.3.1. The bug broke firefox-ios builds due to a name conflict. ([#5181](https://github.com/mozilla/application-services/pull/5181)) ### What's Changed - - Updated UniFFI to 0.21.0. This improves the string display of the fielded errors on Kotlin. Currently only logins is using these errors, but we plan to start using them for all components. +- Updated UniFFI to 0.21.0. This improves the string display of the fielded errors on Kotlin. Currently only logins is using these errors, but we plan to start using them for all components. ## Autofill ### ⚠️ Breaking Changes ⚠️ - - The autofill API now uses `AutofillApiError` instead of `AutofillError`. `AutofillApiError` exposes a smaller number of variants, which - will hopefully make it easier to use for the consumer. +- The autofill API now uses `AutofillApiError` instead of `AutofillError`. `AutofillApiError` exposes a smaller number of variants, which +will hopefully make it easier to use for the consumer. ## Logins ### ⚠️ Breaking Changes ⚠️ - - Renamed `LoginsStorageError` to `LoginsApiError`, which better reflects how it's used and makes it consistent with - the places error name. - - Removed the `LoginsApiError::RequestFailed` variant. This was only thrown when calling the sync-related methods - manually, rather than going through the SyncManager which is the preferred way to sync. Those errors will now be - grouped under `LoginsApiError::UnexpectedLoginsApiError`. +- Renamed `LoginsStorageError` to `LoginsApiError`, which better reflects how it's used and makes it consistent with +the places error name. +- Removed the `LoginsApiError::RequestFailed` variant. This was only thrown when calling the sync-related methods +manually, rather than going through the SyncManager which is the preferred way to sync. Those errors will now be +grouped under `LoginsApiError::UnexpectedLoginsApiError`. ### What's Changed - - Added fields to errors in `logins.udl`. Most variants will now have a `message` field. +- Added fields to errors in `logins.udl`. Most variants will now have a `message` field. ## Nimbus β›…οΈπŸ”¬πŸ”­ ### What's Changed - - Disabled Glean events recorded when the SDK is not ready for a feature ([#5185](https://github.com/mozilla/application-services/pull/5185)) - - Add structs for behavioral targeting ([#5205](https://github.com/mozilla/application-services/pull/5205)) - - Calls to `log::error` have been replaced with `error_support::report_error` ([#5204](https://github.com/mozilla/application-services/pull/5204)) +- Disabled Glean events recorded when the SDK is not ready for a feature ([#5185](https://github.com/mozilla/application-services/pull/5185)) +- Add structs for behavioral targeting ([#5205](https://github.com/mozilla/application-services/pull/5205)) +- Calls to `log::error` have been replaced with `error_support::report_error` ([#5204](https://github.com/mozilla/application-services/pull/5204)) ## Places ### ⚠️ Breaking Changes ⚠️ - - Renamed `PlacesError` to `PlacesApiError`, which better reflects that it's used in the public API rather than for - internal errors. - - Removed the `JsonError`, `InternalError`, and `BookmarksCorruption` variants from places error. Errors that - resulted in `InternalError` will now result in `UnexpectedPlacesError`. `BookmarksCorruption` will also result in - an `UnexpectedPlacesError` and an error report will be automatically generated. `JsonError` didn't seem to be - actually used. +- Renamed `PlacesError` to `PlacesApiError`, which better reflects that it's used in the public API rather than for +internal errors. +- Removed the `JsonError`, `InternalError`, and `BookmarksCorruption` variants from places error. Errors that +resulted in `InternalError` will now result in `UnexpectedPlacesError`. `BookmarksCorruption` will also result in +an `UnexpectedPlacesError` and an error report will be automatically generated. `JsonError` didn't seem to be +actually used. ## Tabs ### ⚠️ Breaking Changes ⚠️ - - The tabs API now uses `TabsError` with `TabsApiError`. `TabsApiError` exposes a smaller number of variants, which - will hopefully make it easier to use for the consumer. +- The tabs API now uses `TabsError` with `TabsApiError`. `TabsApiError` exposes a smaller number of variants, which +will hopefully make it easier to use for the consumer. # v94.3.2 (_2022-10-13_) @@ -1843,7 +1847,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Sync Manager ### What's Changed - - Syncing will sync each engine in a deterministic order which matches desktop ([#5171](https://github.com/mozilla/application-services/issues/5171)) +- Syncing will sync each engine in a deterministic order which matches desktop ([#5171](https://github.com/mozilla/application-services/issues/5171)) # v94.3.1 (_2022-09-23_) @@ -1853,7 +1857,7 @@ The Tabs engine is now more efficient in how it fetches its records: ### What's Fixed - - A regression affecting Android in calculating `days_since_install` and `days_since_update` ([#5157](https://github.com/mozilla/application-services/pull/5157)) +- A regression affecting Android in calculating `days_since_install` and `days_since_update` ([#5157](https://github.com/mozilla/application-services/pull/5157)) # v94.3.0 (_2022-09-20_) @@ -1869,19 +1873,19 @@ The Tabs engine is now more efficient in how it fetches its records: ## Places ### What's Changed - - Added metrics for the `run_maintenance()` method. This can be used by consumers to decide when to schedule the next `run_maintenance()` call and to check if calls are taking too much time. +- Added metrics for the `run_maintenance()` method. This can be used by consumers to decide when to schedule the next `run_maintenance()` call and to check if calls are taking too much time. ### What's new - - Exposed a function in Swift `migrateHistoryFromBrowserDb` to migrate history from `browser.db` to `places.db`, the function will migrate all the local visits in one go. ([#5077](https://github.com/mozilla/application-services/pull/5077)). - - The migration might take some time if a user had a lot of history, so make sure it is **not** run on a thread that shouldn't wait. - - The migration runs on a writer connection. This means that other writes to the `places.db` will be delayed until the migration is done. +- Exposed a function in Swift `migrateHistoryFromBrowserDb` to migrate history from `browser.db` to `places.db`, the function will migrate all the local visits in one go. ([#5077](https://github.com/mozilla/application-services/pull/5077)). +- The migration might take some time if a user had a lot of history, so make sure it is **not** run on a thread that shouldn't wait. +- The migration runs on a writer connection. This means that other writes to the `places.db` will be delayed until the migration is done. ## Nimbus ### What's Changed - - Added `applyLocalExperiments()` method as short hand for `setLocalExperiments` and `applyPendingExperiments`. ([#5131](https://github.com/mozilla/application-services/pull/5131)) - - `applyLocalExperiments` and `applyPendingExperiments` now returns a cancellable job which can be used in a timeout. - - `initialize` function takes a raw resource file id, and returns a cancellable `Job`. +- Added `applyLocalExperiments()` method as short hand for `setLocalExperiments` and `applyPendingExperiments`. ([#5131](https://github.com/mozilla/application-services/pull/5131)) +- `applyLocalExperiments` and `applyPendingExperiments` now returns a cancellable job which can be used in a timeout. +- `initialize` function takes a raw resource file id, and returns a cancellable `Job`. # v94.2.1 (_2022-09-21_) @@ -1890,32 +1894,32 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus β›…οΈπŸ”¬πŸ”­ ### What's Changed - - Added `applyLocalExperiments()` method as short hand for `setLocalExperiments` and `applyPendingExperiments`. ([#5131](https://github.com/mozilla/application-services/pull/5131)) - - `applyLocalExperiments` and `applyPendingExperiments` now returns a cancellable job which can be used in a timeout. - - `initialize` function takes a raw resource file id, and returns a cancellable `Job`. +- Added `applyLocalExperiments()` method as short hand for `setLocalExperiments` and `applyPendingExperiments`. ([#5131](https://github.com/mozilla/application-services/pull/5131)) +- `applyLocalExperiments` and `applyPendingExperiments` now returns a cancellable job which can be used in a timeout. +- `initialize` function takes a raw resource file id, and returns a cancellable `Job`. ### What's Fixed - - A regression affecting Android in calculating `days_since_install` and `days_since_update` ([#5157](https://github.com/mozilla/application-services/pull/5157)) +- A regression affecting Android in calculating `days_since_install` and `days_since_update` ([#5157](https://github.com/mozilla/application-services/pull/5157)) # v94.2.0 (_2022-09-13_) [Full Changelog](https://github.com/mozilla/application-services/compare/v94.1.0...v94.2.0) # General - - `error-support` is now exposed to both Firefox iOS and Focus iOS. `error-support` supports better error reporting and logging for errors. ([#5094](https://github.com/mozilla/application-services/pull/5094)) +- `error-support` is now exposed to both Firefox iOS and Focus iOS. `error-support` supports better error reporting and logging for errors. ([#5094](https://github.com/mozilla/application-services/pull/5094)) ## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§ ### What's Changed - - Add `channels` value for defaults and add support for multiple channels in `channel` via comma separation. ([#5101](https://github.com/mozilla/application-services/pull/5101)) +- Add `channels` value for defaults and add support for multiple channels in `channel` via comma separation. ([#5101](https://github.com/mozilla/application-services/pull/5101)) ### ✨ What's New ✨ - - JEXL targeting allows for using the `in` keyword with objects and a map of active experiments has been added to TargetingAttributes. The map will always be empty at this time. ([#5104](https://github.com/mozilla/application-services/pull/5104)) +- JEXL targeting allows for using the `in` keyword with objects and a map of active experiments has been added to TargetingAttributes. The map will always be empty at this time. ([#5104](https://github.com/mozilla/application-services/pull/5104)) ## Nimbus β›…οΈπŸ”¬πŸ”­ ### What's Changed - - Added metrics for SDK unavailability and disk cache unreadiness to tease apart the difference in startup slowness. ([#5118](https://github.com/mozilla/application-services/pull/5118)) +- Added metrics for SDK unavailability and disk cache unreadiness to tease apart the difference in startup slowness. ([#5118](https://github.com/mozilla/application-services/pull/5118)) # v94.1.0 (_2022-08-18_) @@ -1931,7 +1935,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus FML ### What's fixed - - Linux releases for the FML were missing, there are available again now. ([#5080](https://github.com/mozilla/application-services/pull/5080)) +- Linux releases for the FML were missing, there are available again now. ([#5080](https://github.com/mozilla/application-services/pull/5080)) # v94.0.0 (_2022-08-02_) @@ -1939,7 +1943,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Logins ### ⚠️ Breaking Changes ⚠️ - - Removed expired logins sqlcipher migration metrics and renamed the `migrateLoginsWithMetrics` function since it no longer reports metrics. An associated iOS PR ([#11470](https://github.com/mozilla-mobile/firefox-ios/pull/11470)) has been created to address the function renaming. ([#5064](https://github.com/mozilla/application-services/pull/5064)) +- Removed expired logins sqlcipher migration metrics and renamed the `migrateLoginsWithMetrics` function since it no longer reports metrics. An associated iOS PR ([#11470](https://github.com/mozilla-mobile/firefox-ios/pull/11470)) has been created to address the function renaming. ([#5064](https://github.com/mozilla/application-services/pull/5064)) # v93.8.0 (_2022-07-29_) @@ -1947,16 +1951,16 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus FML β›…οΈπŸ”¬πŸ”­ ### What's Changed - - Validate the configuration passed from a top-level FML file to imported files. ([#5055](https://github.com/mozilla/application-services/pull/5055)) +- Validate the configuration passed from a top-level FML file to imported files. ([#5055](https://github.com/mozilla/application-services/pull/5055)) ## Places ### What's new - - We now expose all of the Places history APIs to Swift consumers. ([#4989](https://github.com/mozilla/application-services/pull/4989)) - - Added an optional db_size_limit parameter to `run_maintenance`. This can be used to set a target size for the places DB. If the DB is over that size, we'll prune a few older visits. The number of visits is very small (6) to ensure that the operation only blocks the database for a short time. The intention is that `run_maintenance()` is called frequently compared to how often visits are added to the places DB. +- We now expose all of the Places history APIs to Swift consumers. ([#4989](https://github.com/mozilla/application-services/pull/4989)) +- Added an optional db_size_limit parameter to `run_maintenance`. This can be used to set a target size for the places DB. If the DB is over that size, we'll prune a few older visits. The number of visits is very small (6) to ensure that the operation only blocks the database for a short time. The intention is that `run_maintenance()` is called frequently compared to how often visits are added to the places DB. ## Sync15 ### What's changed - - `CLIENTS_TTL` has been updated to be 180 days instead of 21 ([#5054](https://github.com/mozilla/application-services/pull/5054)) +- `CLIENTS_TTL` has been updated to be 180 days instead of 21 ([#5054](https://github.com/mozilla/application-services/pull/5054)) # v93.7.1 (_2022-07-26_) @@ -1964,7 +1968,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Places ### What's changed - - The `delete_visits_between` API now also deletes history metadata ([#5046](https://github.com/mozilla/application-services/pull/5046)) +- The `delete_visits_between` API now also deletes history metadata ([#5046](https://github.com/mozilla/application-services/pull/5046)) # v93.7.0 (_2022-07-18_) @@ -1972,16 +1976,16 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§ ### What's Changed - - Added `MOZ_APPSERVICES_MODULE` environment variable to specify the megazord module for iOS ([#5042](https://github.com/mozilla/application-services/pull/5042)). If it is missing, no module is imported. +- Added `MOZ_APPSERVICES_MODULE` environment variable to specify the megazord module for iOS ([#5042](https://github.com/mozilla/application-services/pull/5042)). If it is missing, no module is imported. ### ✨ What's New ✨ - - Enabled remote loading and using configuring of branches. ([#5041](https://github.com/mozilla/application-services/pull/5041)) - - Add a `fetch` command to `nimbus-fml` to demo and test remote loading and paths. ([#5047](https://github.com/mozilla/application-services/pull/5047)) +- Enabled remote loading and using configuring of branches. ([#5041](https://github.com/mozilla/application-services/pull/5041)) +- Add a `fetch` command to `nimbus-fml` to demo and test remote loading and paths. ([#5047](https://github.com/mozilla/application-services/pull/5047)) ## Logins ### What's Changed - - Updated the `LoginsStorageError` implementation and introduce error reporting for unexpected errors. - Note that some errors were removed, which is technically a breaking change, but none of our - consumers use those errors so it's not a breaking change in practice. +- Updated the `LoginsStorageError` implementation and introduce error reporting for unexpected errors. +Note that some errors were removed, which is technically a breaking change, but none of our +consumers use those errors so it's not a breaking change in practice. # v93.6.0 (_2022-07-11_) @@ -1990,29 +1994,29 @@ The Tabs engine is now more efficient in how it fetches its records: ## Autofill ### What's Fixed - - Fixed syncing of autofill when tombstones exist in the local mirror (#5030) +- Fixed syncing of autofill when tombstones exist in the local mirror (#5030) ## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§ ### What's New - - Added support for breaking up FML files using `includes` and separating into different modules with `imports`. - ([#5031](https://github.com/mozilla/application-services/pull/5031), [#5022](https://github.com/mozilla/application-services/pull/5022), [#5016](https://github.com/mozilla/application-services/pull/5016), [#5014](https://github.com/mozilla/application-services/pull/5014), [#5007](https://github.com/mozilla/application-services/pull/5007), [#4999](https://github.com/mozilla/application-services/pull/4999), [#4997](https://github.com/mozilla/application-services/pull/4997), [#4976](https://github.com/mozilla/application-services/pull/4976)) - - This is _not_ a breaking change, but should be accompanied by a upgrade to the megazord ([#4099](https://github.com/mozilla/application-services/pull/4099)). - - This also deprecates some commands in the command line interface ([#5022](https://github.com/mozilla/application-services/pull/5022)). These will be removed in a future release. - - Related proposal document: [FML: Imports and Includes](https://experimenter.info/fml-imports-and-includes). +- Added support for breaking up FML files using `includes` and separating into different modules with `imports`. +([#5031](https://github.com/mozilla/application-services/pull/5031), [#5022](https://github.com/mozilla/application-services/pull/5022), [#5016](https://github.com/mozilla/application-services/pull/5016), [#5014](https://github.com/mozilla/application-services/pull/5014), [#5007](https://github.com/mozilla/application-services/pull/5007), [#4999](https://github.com/mozilla/application-services/pull/4999), [#4997](https://github.com/mozilla/application-services/pull/4997), [#4976](https://github.com/mozilla/application-services/pull/4976)) +- This is _not_ a breaking change, but should be accompanied by a upgrade to the megazord ([#4099](https://github.com/mozilla/application-services/pull/4099)). +- This also deprecates some commands in the command line interface ([#5022](https://github.com/mozilla/application-services/pull/5022)). These will be removed in a future release. +- Related proposal document: [FML: Imports and Includes](https://experimenter.info/fml-imports-and-includes). ## Logins ### What's Changed - - sqlcipher migrations no longer record metrics (#5017) +- sqlcipher migrations no longer record metrics (#5017) ## Glean ### What's Changed - - Updated to Glean v50.1.2 +- Updated to Glean v50.1.2 ## UniFFI ### What's Changed - - Updated to UniFFI 0.19.3 +- Updated to UniFFI 0.19.3 # v93.5.0 (_2022-06-16_) @@ -2021,7 +2025,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§ ### What's Changed - - Added [`includes` list property](https://experimenter.info/fml-imports-and-includes/#the-include-list) to enable splitting up large `nimbus.fml.yaml` files ([#4976](https://github.com/mozilla/application-services/pull/4976)). +- Added [`includes` list property](https://experimenter.info/fml-imports-and-includes/#the-include-list) to enable splitting up large `nimbus.fml.yaml` files ([#4976](https://github.com/mozilla/application-services/pull/4976)). # v93.4.0 (_2022-06-09_) @@ -2039,9 +2043,9 @@ The Tabs engine is now more efficient in how it fetches its records: ## Error-support ### What's New - - Added a new error reporting system that is intended to eventually replace using `log::error` to report errors - - Added code using the new system to track down application-services#4856 - - Added UniFFI API for this crate. Consumers should use this to register for error reports and breadcrumbs. +- Added a new error reporting system that is intended to eventually replace using `log::error` to report errors +- Added code using the new system to track down application-services#4856 +- Added UniFFI API for this crate. Consumers should use this to register for error reports and breadcrumbs. # v93.2.2 (_2022-05-27_) @@ -2059,13 +2063,13 @@ The Tabs engine is now more efficient in how it fetches its records: ## General ### What's new - Uniffi was upgraded to 0.18.0. For our consumers, this means there now exported types that used to be internal to `uniffi`. ([#4949](https://github.com/mozilla/application-services/pull/4949)). - - The types are: - - `Url` alias for `string` - - `PlacesTimestamp` alias for`i64` - - `VisitTransitionSet` alias for `i32` - - `Guid` alias for `string` - - `JsonObject` alias for `string` - - Non of the exposed types conflict with a type in iOS so this is not a breaking change. +- The types are: +- `Url` alias for `string` +- `PlacesTimestamp` alias for`i64` +- `VisitTransitionSet` alias for `i32` +- `Guid` alias for `string` +- `JsonObject` alias for `string` +- Non of the exposed types conflict with a type in iOS so this is not a breaking change. ## Nimbus β›…οΈπŸ”¬πŸ”­ @@ -2077,10 +2081,10 @@ The Tabs engine is now more efficient in how it fetches its records: ### What's Changed - The component has been updated for integration into Firefox iOS ([#4905](https://github.com/mozilla/application-services/pull/4905)). - - The `DeviceType` naming conflict which prevented `rust-components-swift` from generating Tabs code has been resolved. - - Errors and the `reset` function have been exposed. - - Parameters for the `sync` function have been updated to match the `SyncUnlockInfo` parameters. - - The `tabs-sync` example has been updated with the above changes. +- The `DeviceType` naming conflict which prevented `rust-components-swift` from generating Tabs code has been resolved. +- Errors and the `reset` function have been exposed. +- Parameters for the `sync` function have been updated to match the `SyncUnlockInfo` parameters. +- The `tabs-sync` example has been updated with the above changes. # v93.2.0 (_2022-05-11_) @@ -2097,16 +2101,16 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus β›…οΈπŸ”¬πŸ”­ ### What's New - - New API in the `FeatureHolder`, both iOS and Android to control the output of the `value()` call: - - to cache the values given to callers; this can be cleared with `FxNimbus.invalidatedCachedValues()` - - to add a custom initializer with `with(initializer:_)`/`withInitializer(_)`. +- New API in the `FeatureHolder`, both iOS and Android to control the output of the `value()` call: +- to cache the values given to callers; this can be cleared with `FxNimbus.invalidatedCachedValues()` +- to add a custom initializer with `with(initializer:_)`/`withInitializer(_)`. ## Places ### What's Fixed: - Fixed a bug in Android where non-fatal errors were crashing. ([#4941](https://github.com/mozilla/application-services/pull/4941)) - Fixed a bug where querying history metadata would return a sql error instead of the result ([4940](https://github.com/mozilla/application-services/pull/4940)) ### What's new: - Exposed the `deleteVisitsFor` function in iOS, the function can be used to delete history metadata. ([#4946](https://github.com/mozilla/application-services/pull/4946)) - - Note: The API is meant to delete all history, however, iOS does **not** use the `places` Rust component for regular history yet. +- Note: The API is meant to delete all history, however, iOS does **not** use the `places` Rust component for regular history yet. # v93.0.4 (_2022-04-28_) @@ -2115,7 +2119,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Places ### What's New - The `delete_visits_for()` function now deletes all history metadata even when the item is - bookmarked. +bookmarked. ## Nimbus ### What's fixed @@ -2128,12 +2132,12 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus β›…οΈπŸ”­πŸ”¬ ### What's New - - Added targeting attributes for `language` and `region`, based upon the `locale`. [#4919](https://github.com/mozilla/application-services/pull/4919) - - This also comes with an update in the JEXL evaluator to handle cases where `region` is not available. +- Added targeting attributes for `language` and `region`, based upon the `locale`. [#4919](https://github.com/mozilla/application-services/pull/4919) +- This also comes with an update in the JEXL evaluator to handle cases where `region` is not available. ### What's Changed - - Fixed: A crash was detected by the iOS team, which was traced to `FeatureHolder.swift`. ([#4924](https://github.com/mozilla/application-services/pull/4924)) - - Regression tests added, and FeatureHolder made stateless in both Swift and Kotlin. +- Fixed: A crash was detected by the iOS team, which was traced to `FeatureHolder.swift`. ([#4924](https://github.com/mozilla/application-services/pull/4924)) +- Regression tests added, and FeatureHolder made stateless in both Swift and Kotlin. # v93.0.2 (_2022-04-25_) @@ -2150,7 +2154,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus FML β›…οΈπŸ”¬πŸ”­πŸ”§ ### What's Fixed - - Handling of optional types which require a mapping to a usable type. ([#4915](https://github.com/mozilla/application-services/pull/4915)) +- Handling of optional types which require a mapping to a usable type. ([#4915](https://github.com/mozilla/application-services/pull/4915)) ## Places @@ -2165,8 +2169,8 @@ The Tabs engine is now more efficient in how it fetches its records: ### What's New - Add support for bundled resources in the FML in Swift. This corresponds to the `Image` and `Text` types. [#4892](https://github.com/mozilla/application-services/pull/4892) - - This must include an update to the megazord, as well re-downloading the `nimbus-fml` binary. - - Kotlin support for the same has also changed to match the Swift implementation, which has increased performance. +- This must include an update to the megazord, as well re-downloading the `nimbus-fml` binary. +- Kotlin support for the same has also changed to match the Swift implementation, which has increased performance. # v92.0.1 (_2022-03-24_) @@ -2191,8 +2195,8 @@ The Tabs engine is now more efficient in how it fetches its records: ## Places ### ⚠️ Breaking Changes ⚠️ - Removed some functions related to sync interruption. These were never really completed and don't seem to be in use by iOS/Android code: - - `PlacesApi.new_sync_conn_interrupt_handle()` - - Swift only: `PlacesAPI.interrupt()` +- `PlacesApi.new_sync_conn_interrupt_handle()` +- Swift only: `PlacesAPI.interrupt()` - The exception variant `InternalPanic` was removed. It's only use was replaced by the already existing `UnexpectedPlacesException`. ([#4847](https://github.com/mozilla/application-services/pull/4847)) ### What's New - The Places component will report more error variants to telemetry. ([#4847](https://github.com/mozilla/application-services/pull/4847)) @@ -2213,11 +2217,11 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus FML ### What's Changed - Papercut fixes for nicer developer experience [#4867](https://github.com/mozilla/application-services/pull/4867) - - More helpful validation error reporting - - Better handling of defaults in objects and enum maps - - More YAML syntactic checking. +- More helpful validation error reporting +- Better handling of defaults in objects and enum maps +- More YAML syntactic checking. - Allow experimenter to output to a YAML file, as well as JSON. [#4874](https://github.com/mozilla/application-services/pull/4874) - - If the file extension is `yaml`, then output as YAML, otherwise, output as JSON. +- If the file extension is `yaml`, then output as YAML, otherwise, output as JSON. # v91.1.2 (_2022-04-19_) [Full Changelog](https://github.com/mozilla/application-services/compare/v91.1.1...v91.1.2) @@ -2233,7 +2237,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Autofill ### What's New - - Added `temp-store`, `journal-mode`, and `foreign-keys` pragmas to autofill component. ([#4882](https://github.com/mozilla/application-services/pull/4882)) +- Added `temp-store`, `journal-mode`, and `foreign-keys` pragmas to autofill component. ([#4882](https://github.com/mozilla/application-services/pull/4882)) # v91.1.0 (_2022-02-11_) @@ -2248,9 +2252,9 @@ The Tabs engine is now more efficient in how it fetches its records: ### ✨ What's New ✨ - A message helper is now available to apps wanting to build a Messaging System on both Android and iOS. Both of these access the variables - provided by Nimbus, and can have app-specific variables added. This provides two functions: - - JEXL evaluation ([#4813](https://github.com/mozilla/application-services/pull/4813)) which evaluates boolean expressions. - - String interpolation ([#4831](https://github.com/mozilla/application-services/pull/4831)) which builds strings with templates at runtime. +provided by Nimbus, and can have app-specific variables added. This provides two functions: +- JEXL evaluation ([#4813](https://github.com/mozilla/application-services/pull/4813)) which evaluates boolean expressions. +- String interpolation ([#4831](https://github.com/mozilla/application-services/pull/4831)) which builds strings with templates at runtime. ## Xcode @@ -2267,14 +2271,14 @@ The Tabs engine is now more efficient in how it fetches its records: ## Places ### What's Changed - - The database initialization code now uses BEGIN IMMEDIATE to start a - transaction. This will hopefully prevent `database is locked` errors when - opening a sync connection. +- The database initialization code now uses BEGIN IMMEDIATE to start a +transaction. This will hopefully prevent `database is locked` errors when +opening a sync connection. ### What's New - - The `HistoryVisitInfo` struct now has an `is_remote` boolean which indicates whether the - represented visit happened locally or remotely. ([#4810](https://github.com/mozilla/application-services/pull/4810)) +- The `HistoryVisitInfo` struct now has an `is_remote` boolean which indicates whether the +represented visit happened locally or remotely. ([#4810](https://github.com/mozilla/application-services/pull/4810)) # v91.0.0 (_2022-01-31_) @@ -2283,51 +2287,51 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus FML ### What's New - - The Nimbus FML can now generate swift code for the feature manifest. ([#4780](https://github.com/mozilla/application-services/pull/4780)) - - It can be invoked using: - ```sh - $ nimbus-fml -o ios features - ``` - - You can check the support flags and options by running: - ```sh - $ nimbus-fml ios --help - ``` - - The generated code exposes: - - a high level nimbus object, whose name is configurable using the `--classname` option. By default the object is `MyNimbus`. - - All the enums and objects defined in the manifest as idiomatic Swift code. - - Usage: - - To access a feature's value: - ```swift - // MyNimbus is the class that holds all the features supported by Nimbus - // MyNimbus has an singleton instance, you can access it using the `shared` field: - - let nimbus = MyNimbus.shared - - // Then you can access the features using: - // MyNimbus.features..value(), for example: - - let feature = nimbus.features.homepage.value() - ``` - - To access a field in the feature: - ```swift - // feature., for example: - - assert(feature.sectionsEnabled[HomeScreenSection.topSites] == true) - ``` +- The Nimbus FML can now generate swift code for the feature manifest. ([#4780](https://github.com/mozilla/application-services/pull/4780)) +- It can be invoked using: +```sh +$ nimbus-fml -o ios features +``` +- You can check the support flags and options by running: +```sh +$ nimbus-fml ios --help +``` +- The generated code exposes: +- a high level nimbus object, whose name is configurable using the `--classname` option. By default the object is `MyNimbus`. +- All the enums and objects defined in the manifest as idiomatic Swift code. +- Usage: +- To access a feature's value: +```swift +// MyNimbus is the class that holds all the features supported by Nimbus +// MyNimbus has an singleton instance, you can access it using the `shared` field: + +let nimbus = MyNimbus.shared + +// Then you can access the features using: +// MyNimbus.features..value(), for example: + +let feature = nimbus.features.homepage.value() +``` +- To access a field in the feature: +```swift +// feature., for example: + +assert(feature.sectionsEnabled[HomeScreenSection.topSites] == true) +``` ### ⚠️ Breaking Changes ⚠️ - - **Android only**: Accessing drawables has changed to give access to the resource identifier. ([#4801](https://github.com/mozilla/application-services/pull/4801)) - - Migration path to the old behaviour is: +- **Android only**: Accessing drawables has changed to give access to the resource identifier. ([#4801](https://github.com/mozilla/application-services/pull/4801)) +- Migration path to the old behaviour is: - ```kotlin - let drawable: Drawable = MyNimbus.features.exampleFeature.demoDrawable - ``` +```kotlin +let drawable: Drawable = MyNimbus.features.exampleFeature.demoDrawable +``` - becomes: - ```kotlin - let drawable: Drawable = MyNimbus.features.exampleFeature.demoDrawable.resource - ``` +becomes: +```kotlin +let drawable: Drawable = MyNimbus.features.exampleFeature.demoDrawable.resource +``` ## General iOS ### What's changed - Moved `SwiftKeychainWrapper` from an external Swift Package to be bundled with FxA. This is due to issues Firefox iOS had with their dependency tree. ([#4797](https://github.com/mozilla/application-services/pull/4797)) @@ -2338,8 +2342,8 @@ The Tabs engine is now more efficient in how it fetches its records: [Full Changelog](https://github.com/mozilla/application-services/compare/v90.0.0...v90.0.1) ## Places - - Fixed an issue with previously consumed errors for invalid URLs were propagating to consumers and causing a crash - - Changed `bookmarks_get_all_with_url` and `accept_result` to accept a string instead of url +- Fixed an issue with previously consumed errors for invalid URLs were propagating to consumers and causing a crash +- Changed `bookmarks_get_all_with_url` and `accept_result` to accept a string instead of url # v90.0.0 (_2022-01-20_) @@ -2349,7 +2353,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Places ### ⚠️ Breaking Changes ⚠️ - - Places has been completely UniFFI-ed +- Places has been completely UniFFI-ed # v89.0.0 (_2022-01-20_) @@ -2360,10 +2364,10 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbusβ˜οΈπŸ”¬πŸ”­ ### What's New - - Add `Text` and `Image` support for the FML to access bundled resources ([#4784](https://github.com/mozilla/application-services/pull/4784)). +- Add `Text` and `Image` support for the FML to access bundled resources ([#4784](https://github.com/mozilla/application-services/pull/4784)). ### Breaking Change - - The `NimbusInterface` now exposes a `context: Context` property. +- The `NimbusInterface` now exposes a `context: Context` property. # v88.0.0 (_2022-01-19_) @@ -2372,16 +2376,16 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbusβ˜οΈπŸ”¬πŸ”­ ### What's Changed - - The SDK is now tolerant to legacy experiment recipes that have both `feature` and `features` in their branches ([SDK-1989](https://github.com/mozilla/application-services/pull/4777)) +- The SDK is now tolerant to legacy experiment recipes that have both `feature` and `features` in their branches ([SDK-1989](https://github.com/mozilla/application-services/pull/4777)) ## General ### ⚠️ Breaking Changes ⚠️ - - The bundled version of Glean has been updated to v43.0.2. - See [the Glean Changelog](https://github.com/mozilla/glean/blob/v43.0.2/CHANGELOG.md) for full details. - BREAKING CHANGE: Pass build info into initialize, which contains the build date. - A suitable instance is generated by `glean_parser` in `GleanMetrics.GleanBuild.info`. +- The bundled version of Glean has been updated to v43.0.2. +See [the Glean Changelog](https://github.com/mozilla/glean/blob/v43.0.2/CHANGELOG.md) for full details. +BREAKING CHANGE: Pass build info into initialize, which contains the build date. +A suitable instance is generated by `glean_parser` in `GleanMetrics.GleanBuild.info`. # v87.3.0 (_2022-01-11_) @@ -2396,10 +2400,10 @@ The Tabs engine is now more efficient in how it fetches its records: ## Nimbus ### What's new - - The Nimbus SDK now support application version targeting, where experiment creators can set `app_version|versionCompare({VERSION}) >= 0` and the experiments will only target users running `VERSION` or higher. ([#4752](https://github.com/mozilla/application-services/pull/4752)) - - The `versionCompare` transform will return a positive number if `app_version` is greater than - `VERSION`, a negative number if `app_version` is less than `VERSION` and zero if they are equal - - `VERSION` must be passed in as a string, for example: `app_version|versionCompare('95.!') >= 0` will target users who are on any version starting with `95` or above (`95.0`, `95.1`, `95.2.3-beta`, `96` etc..) +- The Nimbus SDK now support application version targeting, where experiment creators can set `app_version|versionCompare({VERSION}) >= 0` and the experiments will only target users running `VERSION` or higher. ([#4752](https://github.com/mozilla/application-services/pull/4752)) +- The `versionCompare` transform will return a positive number if `app_version` is greater than +`VERSION`, a negative number if `app_version` is less than `VERSION` and zero if they are equal +- `VERSION` must be passed in as a string, for example: `app_version|versionCompare('95.!') >= 0` will target users who are on any version starting with `95` or above (`95.0`, `95.1`, `95.2.3-beta`, `96` etc..) # v87.2.0 (_2021-12-15_) @@ -2410,10 +2414,10 @@ The Tabs engine is now more efficient in how it fetches its records: #### β›…οΈπŸ”­πŸ”¬ Nimbus - Initial release of the Nimbus Feature Manifest Language tool (`nimbus-fml`). - - This is a significant upgrade to the Variables API, adding code-generation to Kotlin and Experimenter compatible manifest JSON. - - [RFC for language specification](https://github.com/mozilla/experimenter-docs/pull/156). - - This is the first release it is made available to client app's build processes. - - [Build on CI](https://github.com/mozilla/application-services/pull/4701) ready for application build processes to download. +- This is a significant upgrade to the Variables API, adding code-generation to Kotlin and Experimenter compatible manifest JSON. +- [RFC for language specification](https://github.com/mozilla/experimenter-docs/pull/156). +- This is the first release it is made available to client app's build processes. +- [Build on CI](https://github.com/mozilla/application-services/pull/4701) ready for application build processes to download. # v87.1.0 (_2021-12-02_) @@ -2421,16 +2425,16 @@ The Tabs engine is now more efficient in how it fetches its records: ## Logins ### What's changed - - The `update()` and `add_or_update()` methods will log rather than return an error when trying to update a duplicate login (#4648) +- The `update()` and `add_or_update()` methods will log rather than return an error when trying to update a duplicate login (#4648) ## Logins, Places, SyncManager ### What's Changed - - These packages all use `parking_lot::Mutex` instead of `std::Mutex`, meaning we should no - longer see errors about mutexes being poisoned. +- These packages all use `parking_lot::Mutex` instead of `std::Mutex`, meaning we should no +longer see errors about mutexes being poisoned. ## Push ### What's fixed - - Fixes a bug where the subscriptions would fail because the server didn't return the `uaid`, this seems to happen only when the client sends request that include the `uaid`.([#4697](https://github.com/mozilla/application-services/pull/4697)) +- Fixes a bug where the subscriptions would fail because the server didn't return the `uaid`, this seems to happen only when the client sends request that include the `uaid`.([#4697](https://github.com/mozilla/application-services/pull/4697)) # General @@ -2442,25 +2446,25 @@ The Tabs engine is now more efficient in how it fetches its records: ## Push ### What's changed - - Push internally no longer uses the `error_support` dependency to simplify the code. It now directly defines exactly one error enum and exposes that to `uniffi`. This should have no implication to the consumer code ([#4650](https://github.com/mozilla/application-services/pull/4650)) +- Push internally no longer uses the `error_support` dependency to simplify the code. It now directly defines exactly one error enum and exposes that to `uniffi`. This should have no implication to the consumer code ([#4650](https://github.com/mozilla/application-services/pull/4650)) ## Places ### ⚠️ Breaking Changes ⚠️ - - Switched sync manager integration to use `registerWithSyncManager()` like the other components ([#4627](https://github.com/mozilla/application-services/pull/4627)) +- Switched sync manager integration to use `registerWithSyncManager()` like the other components ([#4627](https://github.com/mozilla/application-services/pull/4627)) ## SyncManager ### ⚠️ Breaking Changes ⚠️ - - Updated SyncManager to use UniFFI: - - SyncManager is now a class that gets instatiated rather than a singleton - - Added more SyncManagerException subclasses - - SyncParams.engines is now a SyncEngineSelection enum. - SyncEngineSelection's variants are All, or Some(engine_list). This - replaces the old code which used null to signify all engines. - - SyncResult.telemetry was replaced with SyncResult.telemetryJson. - - There were a handful of naming changes: - - SyncAuthInfo.tokenserverURL -> SyncAuthInfo.tokenserverUrl - - DeviceSettings.type -> DeviceSettings.kind +- Updated SyncManager to use UniFFI: +- SyncManager is now a class that gets instatiated rather than a singleton +- Added more SyncManagerException subclasses +- SyncParams.engines is now a SyncEngineSelection enum. +SyncEngineSelection's variants are All, or Some(engine_list). This +replaces the old code which used null to signify all engines. +- SyncResult.telemetry was replaced with SyncResult.telemetryJson. +- There were a handful of naming changes: +- SyncAuthInfo.tokenserverURL -> SyncAuthInfo.tokenserverUrl +- DeviceSettings.type -> DeviceSettings.kind # v86.2.0 (_2021-11-02_) @@ -2468,17 +2472,17 @@ The Tabs engine is now more efficient in how it fetches its records: ## Push ### What's Changed - - We've changed the database schema to avoid confusion about the state of subscriptions and - in particular, avoid `SQL: UNIQUE constraint failed: push_record.channel_id` errors - reported in [#4575](https://github.com/mozilla/application-services/issues/4575). This is - technically a breaking change as a dictionary described in the UDL changed, but in practice, - none of our consumers used it, so we are not declaring it as breaking in this context. +- We've changed the database schema to avoid confusion about the state of subscriptions and +in particular, avoid `SQL: UNIQUE constraint failed: push_record.channel_id` errors +reported in [#4575](https://github.com/mozilla/application-services/issues/4575). This is +technically a breaking change as a dictionary described in the UDL changed, but in practice, +none of our consumers used it, so we are not declaring it as breaking in this context. ## Logins ### What's New - - Added support for recording telemetry when the logins encryption key needs to be regenerated. +- Added support for recording telemetry when the logins encryption key needs to be regenerated. # v86.1.0 (_2021-10-27_) @@ -2488,23 +2492,23 @@ The Tabs engine is now more efficient in how it fetches its records: ### What's New - - Rollouts: allows winning branch promotion and targeting rollouts of features. [#4567](https://github.com/mozilla/application-services/pull/4567). - - for both Android and iOS. +- Rollouts: allows winning branch promotion and targeting rollouts of features. [#4567](https://github.com/mozilla/application-services/pull/4567). +- for both Android and iOS. ### What's fixed - - Fixed a bug in iOS where the installation date would be set to start of EPOCH ([#4597](https://github.com/mozilla/application-services/pull/4597)) - - Fixed a bug in Android where we were missing disqualification events after a global opt-out ([#4606](https://github.com/mozilla/application-services/pull/4606)) +- Fixed a bug in iOS where the installation date would be set to start of EPOCH ([#4597](https://github.com/mozilla/application-services/pull/4597)) +- Fixed a bug in Android where we were missing disqualification events after a global opt-out ([#4606](https://github.com/mozilla/application-services/pull/4606)) ## Push - - We've changed how the push database is opened, which should mean we now automatically handle - some kinds of database corruption. +- We've changed how the push database is opened, which should mean we now automatically handle +some kinds of database corruption. ## General ### What's changed - - The bundled version of Glean has been updated to v42.0.1. - See [the Glean Changelog](https://github.com/mozilla/glean/blob/v42.0.1/CHANGELOG.md) for full details. - (Note there is a breaking change in Rust, but that doesn't impact consumers of Application Services) +- The bundled version of Glean has been updated to v42.0.1. +See [the Glean Changelog](https://github.com/mozilla/glean/blob/v42.0.1/CHANGELOG.md) for full details. +(Note there is a breaking change in Rust, but that doesn't impact consumers of Application Services) # v86.0.1 (_2021-10-28_) @@ -2521,10 +2525,10 @@ The Tabs engine is now more efficient in how it fetches its records: ## Logins ### ⚠️ Breaking Changes ⚠️ - - Rework logins to no longer use sqlcipher and instead use plain sqlite. This is a major change - with a massive impact on all consumers of this component, all of whom are already aware of - this change and have PRs in-progress. - ([#4549](https://github.com/mozilla/application-services/pull/4549)) +- Rework logins to no longer use sqlcipher and instead use plain sqlite. This is a major change +with a massive impact on all consumers of this component, all of whom are already aware of +this change and have PRs in-progress. +([#4549](https://github.com/mozilla/application-services/pull/4549)) # v85.4.2 (_2021-10-20_) @@ -2542,7 +2546,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Logins - Metrics for the logins sqlcipher migration are included to help "bootstrap" - the metrics ready for the migration. +the metrics ready for the migration. # v85.4.0 (_2021-10-05_) @@ -2553,7 +2557,7 @@ The Tabs engine is now more efficient in how it fetches its records: ### What's Changed - Clients engine now checks for tombstones and any deserialisation errors when receiving a client record, and ignores - it if either are present ([#4504](https://github.com/mozilla/application-services/pull/4504)) +it if either are present ([#4504](https://github.com/mozilla/application-services/pull/4504)) ## Nimbus ### What's changed @@ -2578,7 +2582,7 @@ The Tabs engine is now more efficient in how it fetches its records: ## Places ### What's New - - Added Swift bindings for the following History Metadata APIs: `getHighlights` and `deleteHistoryMetadata`. +- Added Swift bindings for the following History Metadata APIs: `getHighlights` and `deleteHistoryMetadata`. # v85.1.0 (_2021-09-27_) @@ -2591,7 +2595,7 @@ The Tabs engine is now more efficient in how it fetches its records: - Rust toolchain has been bumped to 1.55 and minimum version bumped to 1.53 to comply with our [Rust Policy](https://github.com/mozilla/application-services/blob/main/docs/rust-versions.md#application-services-rust-version-policy) - Xcode has been updated to version 13 - - application-services noq uses the new build system by default +- application-services noq uses the new build system by default ## Nimbus @@ -2615,14 +2619,14 @@ The Tabs engine is now more efficient in how it fetches its records: ### What's New - [#4455][1]: For both iOS and Android: extra methods on `Variables` to support orderable items: - - `getEnum` to coerce strings into Enums. - - `get*List`, `get*Map` to get lists and maps of all types. - - Dictionary/Map extensions to map string keys to enum keys, and string values to enum values. +- `getEnum` to coerce strings into Enums. +- `get*List`, `get*Map` to get lists and maps of all types. +- Dictionary/Map extensions to map string keys to enum keys, and string values to enum values. - Nimbus now supports multiple features on each branch. This was added with backward compatibility to ensure support for both schemas. ([#4452](https://github.com/mozilla/application-services/pull/4452)) ### ⚠️ Breaking Changes ⚠️ - [#4455][1]: Android only: method `Variables.getVariables(key, transform)`, `transform` changes type - from `(Variables) -> T` to `(Variables) -> T?`. +from `(Variables) -> T` to `(Variables) -> T?`. [1]: https://github.com/mozilla/application-services/pull/4455 @@ -2633,17 +2637,17 @@ The Tabs engine is now more efficient in how it fetches its records: ## Places ### ⚠️ Breaking Changes ⚠️ - - `previewImageUrl` property was added to `HistoryMetadata` ([#4448](https://github.com/mozilla/application-services/pull/4448)) +- `previewImageUrl` property was added to `HistoryMetadata` ([#4448](https://github.com/mozilla/application-services/pull/4448)) ### What's changed - - `previewImageUrl` was added to `VisitObservation`, allowing clients to make observations about the 'hero' image of the webpage ([#4448](https://github.com/mozilla/application-services/pull/4448)) +- `previewImageUrl` was added to `VisitObservation`, allowing clients to make observations about the 'hero' image of the webpage ([#4448](https://github.com/mozilla/application-services/pull/4448)) ## Push ### ⚠️ Breaking Changes ⚠️ - - The push component now uses `uniffi`! Here are the Kotlin breaking changes related to that: - - `PushAPI` no longer exists, consumers should consumer `PushManager` directly - - `PushError` becomes `PushException`, and all specific errors are now `PushException` children, and can be retrieved using `PushException.{ExceptionName}`, for example `StorageError` becomes `PushException.StorageException` - - The `PushManager.decrypt` function now returns a `List`, where it used to return `ByteArray`, the consumer can do the conversion using `.toByteArray()` - - All references to `channelID` become `channelId` (with a lowercase `d`) +- The push component now uses `uniffi`! Here are the Kotlin breaking changes related to that: +- `PushAPI` no longer exists, consumers should consumer `PushManager` directly +- `PushError` becomes `PushException`, and all specific errors are now `PushException` children, and can be retrieved using `PushException.{ExceptionName}`, for example `StorageError` becomes `PushException.StorageException` +- The `PushManager.decrypt` function now returns a `List`, where it used to return `ByteArray`, the consumer can do the conversion using `.toByteArray()` +- All references to `channelID` become `channelId` (with a lowercase `d`) # v83.0.0 (_2021-09-08_) @@ -2652,22 +2656,22 @@ The Tabs engine is now more efficient in how it fetches its records: ## Android ### ⚠️ Breaking Changes ⚠️ - - Many error classes have been renamed from `FooError` or `FooErrorException` to just `FooException`, - to be more in keeping with Java/Kotlin idioms. - - This is due to UniFFi now replacing trailing 'Error' named classes to 'Exception' +- Many error classes have been renamed from `FooError` or `FooErrorException` to just `FooException`, +to be more in keeping with Java/Kotlin idioms. +- This is due to UniFFi now replacing trailing 'Error' named classes to 'Exception' ## Autofill ### ⚠️ Breaking Changes ⚠️ - - The `Error` enum is now called `AutofillError` (`AutofillException` in Kotlin) to avoid conflicts with builtin names. +- The `Error` enum is now called `AutofillError` (`AutofillException` in Kotlin) to avoid conflicts with builtin names. ## Push ### ⚠️ Breaking Changes ⚠️ - The `unsubscribeAll` API will now return nothing as opposed to a boolean. The boolean was misleading as it only ever returned true. - errors can be caught using exceptions. ([#4418](https://github.com/mozilla/application-services/pull/4418)) +errors can be caught using exceptions. ([#4418](https://github.com/mozilla/application-services/pull/4418)) ### What's Changed - - The push `unsubscribe` API will no longer accept a null `channel_id` value, a valid `channel_id` must be presented, otherwise rust will panic and an error will be thrown to android. - note that this is not a breaking change, since our hand-written Kotlin code already ensures that the function can only be called with a valid, non-empty, non-nullable string. ([#4402](https://github.com/mozilla/application-services/pull/4402)) +- The push `unsubscribe` API will no longer accept a null `channel_id` value, a valid `channel_id` must be presented, otherwise rust will panic and an error will be thrown to android. +note that this is not a breaking change, since our hand-written Kotlin code already ensures that the function can only be called with a valid, non-empty, non-nullable string. ([#4402](https://github.com/mozilla/application-services/pull/4402)) ## Nimbus @@ -2681,8 +2685,8 @@ The Tabs engine is now more efficient in how it fetches its records: [Full Changelog](https://github.com/mozilla/application-services/compare/v82.2.0...v82.3.0) ### What's New - - Changed how shared libraries are loaded to avoid an issue when both uniffi - and `Helpers.kt` wants to load the same library ([#4412](https://github.com/mozilla/application-services/pull/4412)) +- Changed how shared libraries are loaded to avoid an issue when both uniffi +and `Helpers.kt` wants to load the same library ([#4412](https://github.com/mozilla/application-services/pull/4412)) # v82.2.0 (_2021-08-19_) @@ -2691,15 +2695,15 @@ The Tabs engine is now more efficient in how it fetches its records: ## Push ### What's changed - - The push component will now attempt to auto-recover from the server losing its UAID ([#4347](https://github.com/mozilla/application-services/pull/4347)) - - The push component will return a new kotlin Error `UAIDNotRecognizedError` in cases where auto-recovering isn't possible (when subscribing) - - Two other new errors were defined that were used to be reported under a generic error: - - `JSONDeserializeError` for errors in deserialization - - `RequestError` for errors in sending a network request +- The push component will now attempt to auto-recover from the server losing its UAID ([#4347](https://github.com/mozilla/application-services/pull/4347)) +- The push component will return a new kotlin Error `UAIDNotRecognizedError` in cases where auto-recovering isn't possible (when subscribing) +- Two other new errors were defined that were used to be reported under a generic error: +- `JSONDeserializeError` for errors in deserialization +- `RequestError` for errors in sending a network request ## Nimbus ### What's changed - - Nimbus on iOS will now post a notification when it's done fetching experiments, to match what it does when applying experiments. ([#4378](https://github.com/mozilla/application-services/pull/4378)) +- Nimbus on iOS will now post a notification when it's done fetching experiments, to match what it does when applying experiments. ([#4378](https://github.com/mozilla/application-services/pull/4378)) # v82.1.0 (_2021-07-30_) @@ -2710,8 +2714,8 @@ The Tabs engine is now more efficient in how it fetches its records: ### What's New - The Swift bindings for history metadata enums and structs now have - public initializers, allowing them to be used properly from Swift. - ([#4371](https://github.com/mozilla/application-services/pull/4371)) +public initializers, allowing them to be used properly from Swift. +([#4371](https://github.com/mozilla/application-services/pull/4371)) # v82.0.0 (_2021-07-29_) @@ -2722,24 +2726,24 @@ The Tabs engine is now more efficient in how it fetches its records: ### ⚠️ Breaking Changes ⚠️ - - The bundled version of Glean has been updated to v39.0.4, which includes a new API - for recording extra event fields that have an explicit type.. - ([#4356](https://github.com/mozilla/application-services/pull/4356)) +- The bundled version of Glean has been updated to v39.0.4, which includes a new API +for recording extra event fields that have an explicit type.. +([#4356](https://github.com/mozilla/application-services/pull/4356)) ### What's New - - Added content signature and chain of trust verification features in `rc_crypto`, - and updated NSS to version 3.66. - ([#4195](https://github.com/mozilla/application-services/pull/4195)) +- Added content signature and chain of trust verification features in `rc_crypto`, +and updated NSS to version 3.66. +([#4195](https://github.com/mozilla/application-services/pull/4195)) ## Nimbus ### What's Changed - - The Nimbus API now accepts application specific context as a part of its `appSettings`. - The consumers get to define this context for targeting purposes. This allows different consumers - to target on different fields without the SDK having to acknowledge all the fields. - ([#4359](https://github.com/mozilla/application-services/pull/4359)) +- The Nimbus API now accepts application specific context as a part of its `appSettings`. +The consumers get to define this context for targeting purposes. This allows different consumers +to target on different fields without the SDK having to acknowledge all the fields. +([#4359](https://github.com/mozilla/application-services/pull/4359)) # v81.0.1 (_2021-07-19_) @@ -2749,7 +2753,7 @@ The Tabs engine is now more efficient in how it fetches its records: ### ⚠️ Breaking Changes ⚠️ Note: Though this is technically a breaking change, we do not expect any consumers to have upgraded to v81. Since this was a bug that was introduced in v81 we're treating it as a bugfix. - - Tab struct member last_used is now a i64 +- Tab struct member last_used is now a i64 # v81.0.0 (_2021-07-13_) @@ -2757,18 +2761,18 @@ Note: Though this is technically a breaking change, we do not expect any consume ## Tabs ### ⚠️ Breaking Changes ⚠️ - - Tabs has been Uniffi-ed! ([#4192](https://github.com/mozilla/application-services/pull/4192)) - - Manual calling of sync() is removed - - registerWithSyncManager() should be used instead - - Tab struct member lastUsed is now a U64 +- Tabs has been Uniffi-ed! ([#4192](https://github.com/mozilla/application-services/pull/4192)) +- Manual calling of sync() is removed +- registerWithSyncManager() should be used instead +- Tab struct member lastUsed is now a U64 ## Nimbus ### What's changed - - Fixed a bug where opt-in enrollments in experiments were not preserved when the application is restarted ([#4324](https://github.com/mozilla/application-services/pull/4324)) - - The nimbus component now specifies the version of the server's api - currently V1. That was done to avoid redirects. ([#4319](https://github.com/mozilla/application-services/pull/4319)) +- Fixed a bug where opt-in enrollments in experiments were not preserved when the application is restarted ([#4324](https://github.com/mozilla/application-services/pull/4324)) +- The nimbus component now specifies the version of the server's api - currently V1. That was done to avoid redirects. ([#4319](https://github.com/mozilla/application-services/pull/4319)) ## Push ### What's changed - - Fixed a bug where we don't delete a client's UAID locally when it's deleted on the server ([#4325](https://github.com/mozilla/application-services/pull/4325)) +- Fixed a bug where we don't delete a client's UAID locally when it's deleted on the server ([#4325](https://github.com/mozilla/application-services/pull/4325)) # v80.0.1 (_2021-07-06_) @@ -2789,16 +2793,16 @@ Note: Though this is technically a breaking change, we do not expect any consume ## fxa-client ### ⚠️ Breaking Changes ⚠️ - - The old StateV1 persisted state schema is now removed. ([#4218](https://github.com/mozilla/application-services/pull/4218)) - Users on very old versions of this component will no longer be able to cleanly update to this version. Instead, the consumer code - will receive an error indicating that the schema was not correctly formatted. +- The old StateV1 persisted state schema is now removed. ([#4218](https://github.com/mozilla/application-services/pull/4218)) +Users on very old versions of this component will no longer be able to cleanly update to this version. Instead, the consumer code +will receive an error indicating that the schema was not correctly formatted. ## Nimbus ### What's Changed - - Nimbus SDK now supports different branches having different Feature Configs ([#4213](https://github.com/mozilla/application-services/pull/4213)) +- Nimbus SDK now supports different branches having different Feature Configs ([#4213](https://github.com/mozilla/application-services/pull/4213)) ## Other - - `./libs/build-all.sh` now displays a more helpful error message when a file fails checksum integrity test. +- `./libs/build-all.sh` now displays a more helpful error message when a file fails checksum integrity test. # v79.0.2 (_2021-06-23_) @@ -2813,7 +2817,7 @@ Note: Though this is technically a breaking change, we do not expect any consume ## Logins - Fixed a bug on iOS where `getDbSaltForKey` would incorrectly trigger a fatal error - instead of propagating errors to the caller. +instead of propagating errors to the caller. ## Dependencies @@ -2845,8 +2849,8 @@ Logins now Uniffi-ed! While this is a very large change internally, the external ## [places] ### ⚠️ Breaking Changes ⚠️ - - History Metadata API shape changed to follow an observation pattern, similar to what is present for History. - Shape of objects and related DB schema changed as well. See ([#4123](https://github.com/mozilla/application-services/pull/4123)) +- History Metadata API shape changed to follow an observation pattern, similar to what is present for History. +Shape of objects and related DB schema changed as well. See ([#4123](https://github.com/mozilla/application-services/pull/4123)) # v77.0.2 (_2021-05-31_) @@ -2854,14 +2858,14 @@ Logins now Uniffi-ed! While this is a very large change internally, the external ## Autofill - - Fixed a failing assertion when handling local dupes during a sync (#4154) +- Fixed a failing assertion when handling local dupes during a sync (#4154) # v77.0.1 (_2021-05-24_) [Full Changelog](https://github.com/mozilla/application-services/compare/v77.0.0...v77.0.1) ## CI-only to force iOS artifact build, 77.0.0 is not good for iOS - - add --force flag when installing swift-protobuf via homebrew (#4137) +- add --force flag when installing swift-protobuf via homebrew (#4137) # v77.0.0 (_2021-05-24_) @@ -2869,33 +2873,33 @@ Logins now Uniffi-ed! While this is a very large change internally, the external ## Logins - - Split the DB from the sync engine (#4129) - - Rename LoginStore to LoginsSyncEngine (#4124) +- Split the DB from the sync engine (#4129) +- Rename LoginStore to LoginsSyncEngine (#4124) ## Nimbus β˜οΈπŸ”¬ ### What's New - - Both Android and iOS gain a `nimbus.getVariables(featureId: String)` and a new wrapper around JSON data coming straight from Remote Settings. - - Application features can only have a maximum of one experiment running at a time. - - Enable consuming applications to change the server collection being used. (#4076) +- Both Android and iOS gain a `nimbus.getVariables(featureId: String)` and a new wrapper around JSON data coming straight from Remote Settings. +- Application features can only have a maximum of one experiment running at a time. +- Enable consuming applications to change the server collection being used. (#4076) ### What's Changed - - Add manual feature exposure recording (#4120) - - Android and iOS `Branch` objects no longer have access to a `FeatureConfig` object. - - Localized strings and images are provided by the app, but usable from nimbus. (#4133) +- Add manual feature exposure recording (#4120) +- Android and iOS `Branch` objects no longer have access to a `FeatureConfig` object. +- Localized strings and images are provided by the app, but usable from nimbus. (#4133) ### ⚠️ Breaking changes ⚠️ - - Migrate the experiment database from version 1 to version 2 on first run .(#4078) - - Various kinds of incorrectly specified feature and featureId - related fields will be detected, and any related experiments & enrollments - will be discarded. - - Experiments & enrollments will also be discarded if they - are missing other required fields (eg schemaVersion). - - If there is an error - during the database upgrade, the database will be wiped, since losing - existing enrollments is still less bad than having the database in an unknown - inconsistent state. +- Migrate the experiment database from version 1 to version 2 on first run .(#4078) +- Various kinds of incorrectly specified feature and featureId +related fields will be detected, and any related experiments & enrollments +will be discarded. +- Experiments & enrollments will also be discarded if they +are missing other required fields (eg schemaVersion). +- If there is an error +during the database upgrade, the database will be wiped, since losing +existing enrollments is still less bad than having the database in an unknown +inconsistent state. # v76.0.1 (_2021-05-18_) @@ -2922,19 +2926,19 @@ Fixed an error migrating from version 1 to version 2 of the database. ### What's Changed - Added support to scrub encrypted data to handle lost/corrupted client keys. - Scrubbed data will be replaced with remote data on the next sync. +Scrubbed data will be replaced with remote data on the next sync. ## Nimbus - - Added bucket and collections to `NimbusServerSettings`, with default values. - - Added `getAvailableExperiments()` method exposed by `NimbusClient`. - - At most one local experiment will be enrolled for any given `featureId`, and - to support this, the database can now have a NotEnrolledReason::FeatureConflict value. +- Added bucket and collections to `NimbusServerSettings`, with default values. +- Added `getAvailableExperiments()` method exposed by `NimbusClient`. +- At most one local experiment will be enrolled for any given `featureId`, and +to support this, the database can now have a NotEnrolledReason::FeatureConflict value. ### ⚠️ Breaking changes ⚠️ - Moved the `Nimbus` class and its test class from Android Components into this repository. Existing integrations should pass a delegate in to provide Nimbus with a thread to do I/O and networking on, and an Observer. - Fixed in the complementary [android-components#10144](https://github.com/mozilla-mobile/android-components/pull/10144) +Fixed in the complementary [android-components#10144](https://github.com/mozilla-mobile/android-components/pull/10144) # v75.2.0 (_2021-04-20_) @@ -3007,7 +3011,7 @@ Fixed an error migrating from version 1 to version 2 of the database. [Full Changelog](https://github.com/mozilla/application-services/compare/v73.0.1...v73.0.2) * This is a deliberately empty release, designed to help test some downstream automation - that picks up new appservices releases. +that picks up new appservices releases. # v73.0.1 (_2021-03-10_) @@ -3016,8 +3020,8 @@ Fixed an error migrating from version 1 to version 2 of the database. # Android - The `-forUnitTest` build no longer includes code compiled for Windows, meaning that - it is no longer possible to run appservices Kotlin unit tests on Windows. We hope - this will be a temporary measure while we resolve some build issues. +it is no longer possible to run appservices Kotlin unit tests on Windows. We hope +this will be a temporary measure while we resolve some build issues. # v73.0.0 (_2021-03-10_) @@ -3028,7 +3032,7 @@ Fixed an error migrating from version 1 to version 2 of the database. - The bundled version of the Nimbus SDK has been updated to v0.9.0. - The top-level Rust workspace now builds with Rust 1.50 - The top-level Rust workspace is now stapled to Rust 1.50, so all developers - will build with 1.50, as will the continuous integration for this repo. +will build with 1.50, as will the continuous integration for this repo. ## iOS @@ -3039,9 +3043,9 @@ Fixed an error migrating from version 1 to version 2 of the database. ### ⚠️ Breaking changes ⚠️ - The Kotlin and Swift bindings are now generated automatically using UniFFI. - As a result many small details of the API surface have changed, such as some - classes changing names to be consistent between Rust, Kotlin and Swift. - ([#3876](https://github.com/mozilla/application-services/pull/3876)) +As a result many small details of the API surface have changed, such as some +classes changing names to be consistent between Rust, Kotlin and Swift. +([#3876](https://github.com/mozilla/application-services/pull/3876)) # v72.1.0 (_2021-02-25_) @@ -3052,7 +3056,7 @@ Fixed an error migrating from version 1 to version 2 of the database. ### What's Changed - This release fixes an "unsatisfied link error" problem with autofill and nimbus, - stemming from a misconfiguration in the Android build setup. +stemming from a misconfiguration in the Android build setup. # v72.0.0 (_2021-02-25_) @@ -3069,7 +3073,7 @@ Fixed an error migrating from version 1 to version 2 of the database. ### ⚠️ Breaking changes ⚠️ - The autofill Kotlin package as been renamed from `org.mozilla.appservices.autofill` - to `mozilla.appservices.autofill`, for consistency with other components. +to `mozilla.appservices.autofill`, for consistency with other components. # v71.0.0 (_2021-02-18_) @@ -3111,14 +3115,14 @@ Fixed an error migrating from version 1 to version 2 of the database. ## General ### What's Changed - - Updated nimbus-sdk to 0.7.1 - - Updated Android Components to 71.0.0 +- Updated nimbus-sdk to 0.7.1 +- Updated Android Components to 71.0.0 ## iOS ### What's Changed - - The `MozillaAppServices.framework` artifact now contains a dynamically-linked library - rather than a static library. +- The `MozillaAppServices.framework` artifact now contains a dynamically-linked library +rather than a static library. # v68.1.0 (_2020-12-17_) @@ -3130,7 +3134,7 @@ Fixed an error migrating from version 1 to version 2 of the database. - The bundled version of Nimbus SDK has been updated to v0.6.4. - The internal traits used by `sync15` have been renamed for consistency and clarity - (and the README has been updated with docs to help explain them). +(and the README has been updated with docs to help explain them). - The bundled version of Glean has been updated to v33.10.3. # v68.0.0 (_2020-12-08_) @@ -3142,13 +3146,13 @@ Fixed an error migrating from version 1 to version 2 of the database. ### ⚠️ Breaking changes ⚠️ - The bundled version of Nimbus SDK has been updated to v0.6.3, which includes - the following breaking changes: - - Removed `NimbusClient.resetEnrollment`. - - `NimbusClient.{updateExperiments, optInWithBranch, optOut, setGlobalUserParticipation}` now return a list of telemetry events. - Consumers should forward these events to their telemetry system (e.g. via Glean). - - Removed implicit fetch of experiments on first use of the database. Consumers now must - call update_experiments explicitly in order to fetch experiments from the Remote Settings - server. +the following breaking changes: +- Removed `NimbusClient.resetEnrollment`. +- `NimbusClient.{updateExperiments, optInWithBranch, optOut, setGlobalUserParticipation}` now return a list of telemetry events. +Consumers should forward these events to their telemetry system (e.g. via Glean). +- Removed implicit fetch of experiments on first use of the database. Consumers now must +call update_experiments explicitly in order to fetch experiments from the Remote Settings +server. ### What's Changed @@ -3173,7 +3177,7 @@ Fixed an error migrating from version 1 to version 2 of the database. ### What's Changed - The bundled version of Glean has been updated to v33.4.0. - (as part of [#3724](https://github.com/mozilla/application-services/pull/3724)) +(as part of [#3724](https://github.com/mozilla/application-services/pull/3724)) ## Autofill @@ -3191,74 +3195,74 @@ the full megazord. ### ⚠️ Breaking changes ⚠️ - The custom "Lockbox Megazord" package (`org.mozilla.appservices:lockbox-megazord`) has been removed. - Existing consumers of this package who wish to update to the latest release of application-services - should migrate to using the default `appservices:full-megazord` package, or contact the development - team to discuss an alternate approach. - ([#3700](https://github.com/mozilla/application-services/pull/3700)) +Existing consumers of this package who wish to update to the latest release of application-services +should migrate to using the default `appservices:full-megazord` package, or contact the development +team to discuss an alternate approach. +([#3700](https://github.com/mozilla/application-services/pull/3700)) ### What's Changed - The version of Rust used to compile our components has been pinned to v1.43.0 in order to match - the version of Rust used in mozilla-central. Changes that do not compile under this version of - Rust will not be accepted. - ([#3702](https://github.com/mozilla/application-services/pull/3702)) +the version of Rust used in mozilla-central. Changes that do not compile under this version of +Rust will not be accepted. +([#3702](https://github.com/mozilla/application-services/pull/3702)) ## iOS ### What's Changed - The bundled version of Glean has been updated to v33.1.2. - (as part of [#3701](https://github.com/mozilla/application-services/pull/3701)) +(as part of [#3701](https://github.com/mozilla/application-services/pull/3701)) ## Android ### What's Changed - This release comes with a nontrivial increase in the compiled code size of the - `org.mozilla.appservices:full-megazord` package, adding approximately 1M per platform - thanks to the addition of the Nimbus SDK component. - ([#3701](https://github.com/mozilla/application-services/pull/3701)) +`org.mozilla.appservices:full-megazord` package, adding approximately 1M per platform +thanks to the addition of the Nimbus SDK component. +([#3701](https://github.com/mozilla/application-services/pull/3701)) - Several core gradle dependencies have been updated, including gradle itself (now v6.5) - and the android gradle plugin (now v4.0.1). - ([#3701](https://github.com/mozilla/application-services/pull/3701)) +and the android gradle plugin (now v4.0.1). +([#3701](https://github.com/mozilla/application-services/pull/3701)) ## Nimbus SDK ### What's New - The first version of the Nimbus Experimentation SDK is now available, via the - `org.mozilla.appservices:nimbus` package. More details can be found in the - [nimbus-sdk repo](https://github.com/mozilla/nimbus-sdk). - ([#3701](https://github.com/mozilla/application-services/pull/3701)) +`org.mozilla.appservices:nimbus` package. More details can be found in the +[nimbus-sdk repo](https://github.com/mozilla/nimbus-sdk). +([#3701](https://github.com/mozilla/application-services/pull/3701)) ## FxA Client ### What's Fixed - We no longer discard the final path component from self-hosted sync tokenserver URLs. - ([#3694](https://github.com/mozilla/application-services/pull/3694)) +([#3694](https://github.com/mozilla/application-services/pull/3694)) ## Autofill ### What's Changed - We added the `touch_address` and `touch_credit_card` store functions and refactored the component. - ([#3691](https://github.com/mozilla/application-services/pull/3691)) +([#3691](https://github.com/mozilla/application-services/pull/3691)) ## Push ### What's Changed - Attempts to update the device push token are now rate-limited. - ([#3673](https://github.com/mozilla/application-services/pull/3673)) +([#3673](https://github.com/mozilla/application-services/pull/3673)) ## WebExtension Storage ### What's Fixed - Syncing of incoming tombstone records has been fixed; previously the presence - of an incoming tombstone could cause the sync to fail. - ([#3668](https://github.com/mozilla/application-services/pull/3668)) +of an incoming tombstone could cause the sync to fail. +([#3668](https://github.com/mozilla/application-services/pull/3668)) # v66.0.0 (_2020-10-28_) @@ -3267,7 +3271,7 @@ the full megazord. ### Breaking changes - Android: Updated the `getTopFrecentSiteInfos` API to specify a frecency threshold parameter for the - fetched top frecent sites in `PlacesReaderConnection`. ([#3635](https://github.com/mozilla/application-services/issues/3635)) +fetched top frecent sites in `PlacesReaderConnection`. ([#3635](https://github.com/mozilla/application-services/issues/3635)) # v65.0.0 (_2020-10-19_) @@ -3294,23 +3298,23 @@ the full megazord. ### ⚠️ Breaking changes ⚠️ - The `MozillaAppServices.framework` is now built using Xcode 12, so consumers will need - update their own build accordingly. - ([#3586](https://github.com/mozilla/application-services/pull/3586)) +update their own build accordingly. +([#3586](https://github.com/mozilla/application-services/pull/3586)) ### What's changed - The bundled version of glean has been updated to v32.4.0. - ([#3590](https://github.com/mozilla/application-services/pull/3590)) - () +([#3590](https://github.com/mozilla/application-services/pull/3590)) +() ## FxA Client ### What's changed - Added a circuit-breaker to the `check_authorization_status` method. - In specific circumstances, it was in possible to trigger a failure-recovery infinite loop, - which will now error out after a certain now of retries. - ([#3585](https://github.com/mozilla/application-services/pull/3585)) +In specific circumstances, it was in possible to trigger a failure-recovery infinite loop, +which will now error out after a certain now of retries. +([#3585](https://github.com/mozilla/application-services/pull/3585)) ## Autofill @@ -3321,11 +3325,11 @@ the full megazord. ### What's changed - Removed the duplicate Timestamp logic from Places, which now exists in Support, and updated the references. - ([#3593](https://github.com/mozilla/application-services/pull/3593)) +([#3593](https://github.com/mozilla/application-services/pull/3593)) - Fixed a bug in bookmarks reconciliation that could lead to deleted items being resurrected - in some circumstances. - ([#3510](https://github.com/mozilla/application-services/pull/3510), - [Bug 1635859](https://bugzilla.mozilla.org/show_bug.cgi?id=1635859)) +in some circumstances. +([#3510](https://github.com/mozilla/application-services/pull/3510), +[Bug 1635859](https://bugzilla.mozilla.org/show_bug.cgi?id=1635859)) ## Support Code @@ -3333,7 +3337,7 @@ the full megazord. ### What's new - The `rc_crypto` crate now supports ECDSA P384-SHA384 signature verification. - ([#3557](https://github.com/mozilla/application-services/pull/3557)) +([#3557](https://github.com/mozilla/application-services/pull/3557)) # v63.0.0 (_2020-09-10_) @@ -3344,17 +3348,17 @@ the full megazord. ### ⚠️ Breaking changes ⚠️ - The `MozillaAppServices.framework` build now includes Glean. Applications that were previously consuming Glean via - its standalone framework and using `import Glean` will instead need to `import MozillaAppServices`. - ([#3554](https://github.com/mozilla/application-services/pull/3554)) +its standalone framework and using `import Glean` will instead need to `import MozillaAppServices`. +([#3554](https://github.com/mozilla/application-services/pull/3554)) ### What's changed ### - The version of xcode used to build `MozillaAppServices.framework` has been updated to v11.7. - ([#3556](https://github.com/mozilla/application-services/pull/3556)) +([#3556](https://github.com/mozilla/application-services/pull/3556)) - When using a custom sync tokenserver URL, the `/1.0/sync/1.5` suffix will be stripped if present. - This should simplify setup for self-hosters who are accustomed to supplying the tokenserver URL - in this form on other platforms. - ([#3555](https://github.com/mozilla/application-services/pull/3555)) +This should simplify setup for self-hosters who are accustomed to supplying the tokenserver URL +in this form on other platforms. +([#3555](https://github.com/mozilla/application-services/pull/3555)) ## Android @@ -3367,23 +3371,23 @@ the full megazord. ### What's fixed ### - Fixed a bug where sync could ask places to recalculate the frecency of iitems that are not bookmarks, - which would fail and prevent the sync from completing. - ([#3567](https://github.com/mozilla/application-services/pull/3567)) +which would fail and prevent the sync from completing. +([#3567](https://github.com/mozilla/application-services/pull/3567)) ### What's changed ### - If the database somehow contains bookmarks with an invalid URL, they will now be ignored - on read; previously invalid URLs would trigger an error and crash. - ([#3537](https://github.com/mozilla/application-services/pull/3537)) +on read; previously invalid URLs would trigger an error and crash. +([#3537](https://github.com/mozilla/application-services/pull/3537)) ## Push ### What's fixed ### - Messages using the legacy `aesgcm` encryption method will how have padding bytes correctly stripped; - previously the padding bytes would be returned as part of the message and could cause message-parsing - errors in consuming code. - ([#3569](https://github.com/mozilla/application-services/pull/3569)) +previously the padding bytes would be returned as part of the message and could cause message-parsing +errors in consuming code. +([#3569](https://github.com/mozilla/application-services/pull/3569)) # v62.1.0 (_2020-08-21_) @@ -3400,25 +3404,25 @@ the full megazord. ### What's new ### - Send-tab metrics are recorded. A new function, `fxa_gather_telemetry` on the - account object (exposed as `account.gatherTelemetry()` to Kotlin) which - returns a string of JSON. +account object (exposed as `account.gatherTelemetry()` to Kotlin) which +returns a string of JSON. - This JSON might grow to support non-sendtab telemetry in the future, but in - this change it has: - - `commands_sent`, an array of objects, each with `flow_id` and `stream_id` - string values. - - `commands_received`, an array of objects, each with `flow_id`, `stream_id` - and `reason` string values. +This JSON might grow to support non-sendtab telemetry in the future, but in +this change it has: +- `commands_sent`, an array of objects, each with `flow_id` and `stream_id` +string values. +- `commands_received`, an array of objects, each with `flow_id`, `stream_id` +and `reason` string values. - [#3308](https://github.com/mozilla/application-services/pull/3308/) +[#3308](https://github.com/mozilla/application-services/pull/3308/) ## Places ### What's new ### - Exclude download, redirects, reload, embed and framed link visit type from the - `get_top_frecent_site_infos` query. - ([#3505](https://github.com/mozilla/application-services/pull/3505)) +`get_top_frecent_site_infos` query. +([#3505](https://github.com/mozilla/application-services/pull/3505)) # v62.0.0 (_2020-07-13_) @@ -3433,30 +3437,30 @@ the full megazord. ### What's new ### - Consumers can now optionally include parameters for metrics in `beginOAuthFlow` and `beginPairingFlow` (`beginAuthentication` and `beginPairingAuthentication` in ios). Those parameters can be passed in using a `MetricsParams` struct/class. `MetricsParams` is defined in both the Kotlin and Swift bindings. The parameters are the following ([#3328](https://github.com/mozilla/application-services/pull/3328)): - - flow_id - - flow_begin_time - - device_id - - utm_source - - utm_content - - utm_medium - - utm_term - - utm_campaign - - entrypoint_experiment - - entrypoint_variation +- flow_id +- flow_begin_time +- device_id +- utm_source +- utm_content +- utm_medium +- utm_term +- utm_campaign +- entrypoint_experiment +- entrypoint_variation ## Logins ### What's fixed ### - Fixed a bug where attempting to edit a login with an empty `form_submit_url` would incorrectly - reject the entry as invalid ([#3331](https://github.com/mozilla/application-services/pull/3331)). +reject the entry as invalid ([#3331](https://github.com/mozilla/application-services/pull/3331)). ## Tabs ### What's new ### - Tab records now have an explicit TTL set when storing on the server, to match the behaviour - of Firefox Desktop clients ([#3322](https://github.com/mozilla/application-services/pull/3322)). +of Firefox Desktop clients ([#3322](https://github.com/mozilla/application-services/pull/3322)). # v61.0.12 (_2020-08-07_) @@ -3474,17 +3478,17 @@ the full megazord. ### What's new ### - Send-tab metrics are recorded. A new function, `fxa_gather_telemetry` on the - account object (exposed as `account.gatherTelemetry()` to Kotlin) which - returns a string of JSON. +account object (exposed as `account.gatherTelemetry()` to Kotlin) which +returns a string of JSON. - This JSON might grow to support non-sendtab telemetry in the future, but in - this change it has: - - `commands_sent`, an array of objects, each with `flow_id` and `stream_id` - string values. - - `commands_received`, an array of objects, each with `flow_id`, `stream_id` - and `reason` string values. +This JSON might grow to support non-sendtab telemetry in the future, but in +this change it has: +- `commands_sent`, an array of objects, each with `flow_id` and `stream_id` +string values. +- `commands_received`, an array of objects, each with `flow_id`, `stream_id` +and `reason` string values. - [#3308](https://github.com/mozilla/application-services/pull/3308/) +[#3308](https://github.com/mozilla/application-services/pull/3308/) # v61.0.10 (_2020-07-15_) @@ -3545,9 +3549,9 @@ the full megazord. [Full Changelog](https://github.com/mozilla/application-services/compare/v61.0.3...v61.0.4) * Fix an issue where a node reassignment or signing out and signing back in - wouldn't clear the locally stored last sync time for engines - ([#3150](https://github.com/mozilla/application-services/issues/3150), - PR [#3241](https://github.com/mozilla/application-services/pull/3241)). +wouldn't clear the locally stored last sync time for engines +([#3150](https://github.com/mozilla/application-services/issues/3150), +PR [#3241](https://github.com/mozilla/application-services/pull/3241)). # v61.0.3 (_2020-06-17_) @@ -3591,9 +3595,9 @@ the full megazord. ## Android - From now on the project uses the Android SDK manager side-by-side NDK. ([#3222](https://github.com/mozilla/application-services/pull/3222)) - - Download the new NDK by running `./verify-android-environment.sh` in the `libs` directory. - - Alternatively, you can download the NDK in Android Studio by going in Tools > SDK Manager > SDK Tools > NDK (check Show Package Details) and check `21.3.6528147`. - - The `ANDROID_NDK_ROOT`, `ANDROID_NDK_HOME` environment variables (and the directory they point to) can be removed. +- Download the new NDK by running `./verify-android-environment.sh` in the `libs` directory. +- Alternatively, you can download the NDK in Android Studio by going in Tools > SDK Manager > SDK Tools > NDK (check Show Package Details) and check `21.3.6528147`. +- The `ANDROID_NDK_ROOT`, `ANDROID_NDK_HOME` environment variables (and the directory they point to) can be removed. # v60.0.0 (_2020-06-01_) @@ -3695,7 +3699,7 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's New - A new function was added to return a list of duplicate logins, ignoring - username. ([#2542](https://github.com/mozilla/application-services/pull/2542)) +username. ([#2542](https://github.com/mozilla/application-services/pull/2542)) # v0.56.0 (_2020-03-26_) @@ -3712,14 +3716,14 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### ⚠️ Breaking changes ⚠️ - Android: `MemoryLoginsStorage` has been removed. Use DatabaseLoginsStorage(":memory:") instead. - ([#2833](https://github.com/mozilla/application-services/pull/2823)). +([#2833](https://github.com/mozilla/application-services/pull/2823)). ## Libs ### What's changed - The project now builds with version 4.3.0 of SQLCipher instead of a fork - of version 4.2.0. Newest version has NSS crypto backend. ([#2822](https://github.com/mozilla/application-services/pull/2822)). +of version 4.2.0. Newest version has NSS crypto backend. ([#2822](https://github.com/mozilla/application-services/pull/2822)). ## FxA Client @@ -3760,16 +3764,16 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### ⚠️ Breaking changes ⚠️ - Android: `PlacesConnection.deletePlace` has been renamed to - `deleteVisitsFor`, to clarify that it might not actually delete the - page if it's bookmarked, or has a keyword or tags - ([#2695](https://github.com/mozilla/application-services/pull/2695)). +`deleteVisitsFor`, to clarify that it might not actually delete the +page if it's bookmarked, or has a keyword or tags +([#2695](https://github.com/mozilla/application-services/pull/2695)). ### What's fixed - `history::delete_visits_for` (formerly `delete_place_by_guid`) now correctly - deletes all visits from a page if it has foreign key references, like - bookmarks, keywords, or tags. Previously, this would cause a constraint - violation ([#2695](https://github.com/mozilla/application-services/pull/2695)). +deletes all visits from a page if it has foreign key references, like +bookmarks, keywords, or tags. Previously, this would cause a constraint +violation ([#2695](https://github.com/mozilla/application-services/pull/2695)). ## FxA Client @@ -3780,9 +3784,9 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### Breaking changes - In order to account better for self-hosted FxA/Sync backends, the FxAConfig objects have been reworked. ([#2801](https://github.com/mozilla/application-services/pull/2801)) - - iOS: `FxAConfig.release(contentURL, clientID)` is now `FxAConfig(server: .release, contentURL, clientID)`. - - Android: `Config.release(contentURL, clientID)` is now `Config(Server.RELEASE, contentURL, clientID)`. - - These constructors also take a new `tokenServerUrlOverride` optional 4th parameter that overrides the token server URL. +- iOS: `FxAConfig.release(contentURL, clientID)` is now `FxAConfig(server: .release, contentURL, clientID)`. +- Android: `Config.release(contentURL, clientID)` is now `Config(Server.RELEASE, contentURL, clientID)`. +- These constructors also take a new `tokenServerUrlOverride` optional 4th parameter that overrides the token server URL. - iOS: `FxAccountManager`'s `getManageAccountURL` and `getTokenServerEndpointURL` methods now run on background thread and return their results in a callback function. ([#2813](https://github.com/mozilla/application-services/pull/2813)) @@ -3795,23 +3799,23 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's fixed - Engine disabled/enabled state changes now work again after a regression in - 0.53.0. +0.53.0. ## Android ### What's changed - There is now preliminary support for an "autoPublish" local-development workflow similar - to the one used when working with Fenix and android-components; see - [this howto guide](./docs/howtos/locally-published-components-in-fenix.md) for details. +to the one used when working with Fenix and android-components; see +[this howto guide](./docs/howtos/locally-published-components-in-fenix.md) for details. ## Places ### What's fixed - Improve handling of bookmark search keywords. Keywords are now imported - correctly from Fennec, and signing out of Sync in Firefox for iOS no longer - loses keywords ([#2501](https://github.com/mozilla/application-services/pull/2501)). +correctly from Fennec, and signing out of Sync in Firefox for iOS no longer +loses keywords ([#2501](https://github.com/mozilla/application-services/pull/2501)). # v0.54.0 (_2020-03-10_) @@ -3834,7 +3838,7 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### Breaking changes - Android: The `PushManager.verifyConnection` now returns a `List` that contain the channel ID and scope of the subscriptions that have expired. ([#2632](https://github.com/mozilla/application-services/pull/2632)) - See [`onpushsubscriptionchange`][0] events on how this change can be propagated to notify web content. +See [`onpushsubscriptionchange`][0] events on how this change can be propagated to notify web content. [0]: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/onpushsubscriptionchange @@ -3843,16 +3847,16 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's fixed - Improve handling of tags for bookmarks with the same URL. These bookmarks no - longer cause syncs to fail ([#2750](https://github.com/mozilla/application-services/pull/2750)), - and bookmarks with duplicate or mismatched tags are reuploaded - ([#2774](https://github.com/mozilla/application-services/pull/2774)). +longer cause syncs to fail ([#2750](https://github.com/mozilla/application-services/pull/2750)), +and bookmarks with duplicate or mismatched tags are reuploaded +([#2774](https://github.com/mozilla/application-services/pull/2774)). ### Breaking changes - Synced items with unknown types now fail the sync, instead of being silently - ignored. We'll monitor this error in telemetry, and add logic to delete these - items on the server if needed - ([#2780](https://github.com/mozilla/application-services/pull/2780)). +ignored. We'll monitor this error in telemetry, and add logic to delete these +items on the server if needed +([#2780](https://github.com/mozilla/application-services/pull/2780)). # v0.53.2 (_2020-03-05_) @@ -3874,7 +3878,7 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's changed - A megazord loading failure will throw as soon as possible rather than at call time. - ([#2739](https://github.com/mozilla/application-services/issues/2739)) +([#2739](https://github.com/mozilla/application-services/issues/2739)) ## iOS @@ -3899,25 +3903,25 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin - The fenix megazord is no more! ([#2565](https://github.com/mozilla/application-services/pull/2565)) - The full megazord should be used instead. The two are functionally identical, - however this should reduce the configuration surface required to use the - application-services code. +The full megazord should be used instead. The two are functionally identical, +however this should reduce the configuration surface required to use the +application-services code. - An example PR showing the changes typically required for this is available - here: https://github.com/MozillaReality/FirefoxReality/pull/2867. Please feel - free to reach out if you have any issues. +An example PR showing the changes typically required for this is available +here: https://github.com/MozillaReality/FirefoxReality/pull/2867. Please feel +free to reach out if you have any issues. ## Sync ### What's fixed - Rust sync code is now more robust in the face of corrupt meta/global - records. ([#2688](https://github.com/mozilla/application-services/pull/2688)) +records. ([#2688](https://github.com/mozilla/application-services/pull/2688)) - In v0.52.0 we reported some network related fixes. We lied. This time - we promise they are actually fixed. ([#2616](https://github.com/mozilla/application-services/issues/2616), - [#2617](https://github.com/mozilla/application-services/issues/2617) - [#2623](https://github.com/mozilla/application-services/issues/2623)) +we promise they are actually fixed. ([#2616](https://github.com/mozilla/application-services/issues/2616), +[#2617](https://github.com/mozilla/application-services/issues/2617) +[#2623](https://github.com/mozilla/application-services/issues/2623)) ### What's changed @@ -3928,22 +3932,22 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's changed - The `ensureCapabilities` method will not perform any network requests if the - given capabilities are already registered with the server. - ([#2681](https://github.com/mozilla/application-services/pull/2681)) +given capabilities are already registered with the server. +([#2681](https://github.com/mozilla/application-services/pull/2681)) ### What's fixed - Ensure an offline migration recovery succeeding does not happen multiple times. - ([#2706](https://github.com/mozilla/application-services/pull/2706)) +([#2706](https://github.com/mozilla/application-services/pull/2706)) ## Places ### What's fixed - `storage::history::apply_observation` and `storage::bookmarks::update_bookmark` - now flush pending origin and frecency updates. This fixes a bug where origins - might be flushed at surprising times, like right after clearing history. - ([#2693](https://github.com/mozilla/application-services/issues/2693)) +now flush pending origin and frecency updates. This fixes a bug where origins +might be flushed at surprising times, like right after clearing history. +([#2693](https://github.com/mozilla/application-services/issues/2693)) ## Push @@ -3971,7 +3975,7 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin - Added a new field `reasons` which is a `List` of `SearchResultReason`s in `SearchResult`. ([#2564](https://github.com/mozilla/application-services/pull/2564)) - Some places import related issues fixed ([#2536](https://github.com/mozilla/application-services/issues/2536), - [#2607](https://github.com/mozilla/application-services/issues/2607)) +[#2607](https://github.com/mozilla/application-services/issues/2607)) ### Breaking changes @@ -3983,26 +3987,26 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's New - Android: `FirefoxAccount.handlePushMessage` now handles all possible FxA push payloads and will return new `AccountEvent`s ([#2522](https://github.com/mozilla/application-services/pull/2522)): - - `.ProfileUpdated` which should be handled by fetching the newest profile. - - `.AccountAuthStateChanged` should be handled by checking if the authentication state is still valid. - - `.AccountDestroyed` should be handled by removing the account information (no need to call `FirefoxAccount.disconnect`) from the device. - - `.DeviceConnected` can be handled by showing a " is connected to this account" notification. - - `.DeviceDisconnected` should be handled by showing a "re-auth" state to the user if `isLocalDevice` is true. There is no need to call `FirefoxAccount.disconnect` as it will fail. +- `.ProfileUpdated` which should be handled by fetching the newest profile. +- `.AccountAuthStateChanged` should be handled by checking if the authentication state is still valid. +- `.AccountDestroyed` should be handled by removing the account information (no need to call `FirefoxAccount.disconnect`) from the device. +- `.DeviceConnected` can be handled by showing a " is connected to this account" notification. +- `.DeviceDisconnected` should be handled by showing a "re-auth" state to the user if `isLocalDevice` is true. There is no need to call `FirefoxAccount.disconnect` as it will fail. - iOS: Added `FxAccountManager.getSessionToken`. Note that you should request the `.session` scope in the constructor for this to work properly. ([#2638](https://github.com/mozilla/application-services/pull/2638)) - iOS: Added `FxAccountManager.getManageAccountURL`. ([#2658](https://github.com/mozilla/application-services/pull/2658)) - iOS: Added `FxAccountManager.getTokenServerEndpointURL`. ([#2658](https://github.com/mozilla/application-services/pull/2658)) - iOS: Added migration methods to `FxAccountManager` ([#2637](https://github.com/mozilla/application-services/pull/2637)): - - `authenticateViaMigration` will try to authenticate an account without any user interaction using previously stored account information. - - `accountMigrationInFlight` and `retryMigration` should be used in conjunction to handle cases where the migration could not be completed but is still recoverable. +- `authenticateViaMigration` will try to authenticate an account without any user interaction using previously stored account information. +- `accountMigrationInFlight` and `retryMigration` should be used in conjunction to handle cases where the migration could not be completed but is still recoverable. - Added a `deviceId` property to the `AccountEvent.deviceDisconnected` enum case. ([#2645](https://github.com/mozilla/application-services/pull/2645)) - Added `context=oauth_webchannel_v1` in `getManageDevicesURL` methods for WebChannel redirect URLs. ([#2658](https://github.com/mozilla/application-services/pull/2658)) ### Breaking changes - Android: A few changes were made in order to decouple device commands from "account events" ([#2522](https://github.com/mozilla/application-services/pull/2522)): - - The `AccountEvent` enum has been refactored: `.TabReceived` has been replaced by `.IncomingDeviceCommand(IncomingDeviceCommand)`, `IncomingDeviceCommand` itself is another enum that contains `TabReceived`. - - `FirefoxAccount.pollDeviceCommands` now returns an array of `IncomingDeviceCommand`. +- The `AccountEvent` enum has been refactored: `.TabReceived` has been replaced by `.IncomingDeviceCommand(IncomingDeviceCommand)`, `IncomingDeviceCommand` itself is another enum that contains `TabReceived`. +- `FirefoxAccount.pollDeviceCommands` now returns an array of `IncomingDeviceCommand`. - iOS: The `FxaAccountManager` class has been renamed to `FxAccountManager`. ([#2637](https://github.com/mozilla/application-services/pull/2637)) - iOS: The `FxAccountManager` default applications scopes do not include `.oldSync` anymore. ([#2638](https://github.com/mozilla/application-services/pull/2638)) @@ -4059,7 +4063,7 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's changed - Fixed a potentially-unsafe use of a boolean in the FFI interface for `migrateFromSessionToken`. - ([#2592](https://github.com/mozilla/application-services/pull/2592)). +([#2592](https://github.com/mozilla/application-services/pull/2592)). # v0.50.0 (_2020-02-05_) @@ -4071,13 +4075,13 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's changed - Android: `migrateFromSessionToken` now correctly persists in-flight migration state even - when throwing an error ([#2586](https://github.com/mozilla/application-services/pull/2586)). +when throwing an error ([#2586](https://github.com/mozilla/application-services/pull/2586)). ### Breaking changes - `isInMigrationState` now returns an enum rather than a boolean, to indicate whether - the migration will re-use or duplicate the underlying sessionToken. - ([#2586](https://github.com/mozilla/application-services/pull/2586)) +the migration will re-use or duplicate the underlying sessionToken. +([#2586](https://github.com/mozilla/application-services/pull/2586)) # v0.49.0 (_2020-02-03_) @@ -4089,14 +4093,14 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's New - Android: `migrateFromSessionToken` now handles offline use cases. It caches the data the consumers - originally provide. If there's no network connectivity then the migration could be retried using the - new `retryMigrateFromSessionToken` method. Consumers may also use the `isInMigrationState` method - to check if there's a migration in progress. ([#2492](https://github.com/mozilla/application-services/pull/2492)) +originally provide. If there's no network connectivity then the migration could be retried using the +new `retryMigrateFromSessionToken` method. Consumers may also use the `isInMigrationState` method +to check if there's a migration in progress. ([#2492](https://github.com/mozilla/application-services/pull/2492)) ### Breaking changes - `migrateFromSessionToken` now returns a metrics JSON object if the migration succeeded. - ([#2492](https://github.com/mozilla/application-services/pull/2492)) +([#2492](https://github.com/mozilla/application-services/pull/2492)) # v0.48.3 (_2020-01-23_) @@ -4108,37 +4112,37 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ## What's new - The Dogear library for merging synced bookmarks has been updated to the latest version. - ([#2469](https://github.com/mozilla/application-services/pull/2469)) +([#2469](https://github.com/mozilla/application-services/pull/2469)) - Places now exposes `resetHistorySyncMetadata` and `resetBookmarkSyncMetadata` - methods, which cleans up all Sync state, including tracking flags and change - counters. These methods should be called by consumers when the user signs out, - to avoid tracking changes and causing unexpected behavior the next time they - sign in. - ([#2447](https://github.com/mozilla/application-services/pull/2447)) +methods, which cleans up all Sync state, including tracking flags and change +counters. These methods should be called by consumers when the user signs out, +to avoid tracking changes and causing unexpected behavior the next time they +sign in. +([#2447](https://github.com/mozilla/application-services/pull/2447)) ## What's changed - Ensure we do the right thing with timestamps, tags and keywords on first sync after migration. - ([#2472](https://github.com/mozilla/application-services/pull/2472)) +([#2472](https://github.com/mozilla/application-services/pull/2472)) - Don't count Fennec bookmarks we know we don't import in success metrics. - ([#2488](https://github.com/mozilla/application-services/pull/2488)) +([#2488](https://github.com/mozilla/application-services/pull/2488)) - Don't fail if the Fennec database has negative positions when importing top-sites - ([#2462](https://github.com/mozilla/application-services/pull/2462)) +([#2462](https://github.com/mozilla/application-services/pull/2462)) - Fix issue with bookmark tags when syncing - ([#2480](https://github.com/mozilla/application-services/pull/2480)) +([#2480](https://github.com/mozilla/application-services/pull/2480)) - Quality and usage metrics are recorded (ditto for logins) - Fix some swift warnings - ([#2491](https://github.com/mozilla/application-services/pull/2491)) +([#2491](https://github.com/mozilla/application-services/pull/2491)) ### Breaking Changes - The Android bindings now collect some basic performance and quality metrics via Glean. - Applications that submit telemetry via Glean must request a data review for these metrics - before integrating the places component. See the component README.md for more details. - ([#2431](https://github.com/mozilla/application-services/pull/2431)) +Applications that submit telemetry via Glean must request a data review for these metrics +before integrating the places component. See the component README.md for more details. +([#2431](https://github.com/mozilla/application-services/pull/2431)) - iOS only: `PlacesAPI.resetBookmarksMetadata` has been renamed to - `PlacesAPI.resetBookmarkSyncMetadata`, for consistency with history. The functionality - remains the same. +`PlacesAPI.resetBookmarkSyncMetadata`, for consistency with history. The functionality +remains the same. # v0.48.2 (_2020-01-13_) @@ -4150,7 +4154,7 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's changed * Fixed a bug in deserializing FxA objects from JSON when the new `introspection_endpoint` - field is not present. +field is not present. # v0.48.1 (_2020-01-08_) @@ -4166,7 +4170,7 @@ Please call `Viaduct.shared.useReqwestBackend()` as soon as possible before usin ### What's changed * The error strings returned by `LoginsStorage.importLogins` as part of the migration metrics bundle, - no longer include potentially-sensitive information such as guids. +no longer include potentially-sensitive information such as guids. # v0.48.0 (_2020-01-03_) @@ -4229,9 +4233,9 @@ before this release. - `LoginsStorage.getByBaseDomain` has been added. ([#2152](https://github.com/mozilla/application-services/issues/2152)) - Removed hard deletion of `SyncStatus::New` records in `delete` and `wipe` logins database functions. ([#2362](https://github.com/mozilla/application-services/pull/2362)) - Android: The `MemoryLoginsStorage` class has been deprecated, because it behaviour has already started to - diverge from that of `DatabaseLoginStorage`. To replace previous uses of this class in tests, please either - explicitly mock the `LoginsStorage` interface or use a `DatabaseLoginStorage` with a tempfile or `":memory:"` - as the `dbPath` argument. ([#2389](https://github.com/mozilla/application-services/issues/2389)) +diverge from that of `DatabaseLoginStorage`. To replace previous uses of this class in tests, please either +explicitly mock the `LoginsStorage` interface or use a `DatabaseLoginStorage` with a tempfile or `":memory:"` +as the `dbPath` argument. ([#2389](https://github.com/mozilla/application-services/issues/2389)) # v0.46.0 (_2019-12-12_) @@ -4242,16 +4246,16 @@ before this release. ### Breaking Changes - The Android bindings now collect some basic performance and quality metrics via Glean. - Applications that submit telemetry via Glean must request a data review for these metrics - before integrating the logins component. See the component README.md for more details. - ([#2225](https://github.com/mozilla/application-services/pull/2225)) +Applications that submit telemetry via Glean must request a data review for these metrics +before integrating the logins component. See the component README.md for more details. +([#2225](https://github.com/mozilla/application-services/pull/2225)) - `username`, `usernameField`, and `passwordField` are no longer - serialized as `null` in the case where they are empty strings. ([#2252](https://github.com/mozilla/application-services/pull/2252)) - - Android: `ServerPassword` fields `username`, `usernameField`, and - `passwordField` are now required fields -- `null` is not acceptable, - but empty strings are OK. - - iOS: `LoginRecord` fields `username`, `usernameField` and - `passwordField` are no longer nullable. +serialized as `null` in the case where they are empty strings. ([#2252](https://github.com/mozilla/application-services/pull/2252)) +- Android: `ServerPassword` fields `username`, `usernameField`, and +`passwordField` are now required fields -- `null` is not acceptable, +but empty strings are OK. +- iOS: `LoginRecord` fields `username`, `usernameField` and +`passwordField` are no longer nullable. # v0.45.1 (_2019-12-10_) @@ -4268,8 +4272,8 @@ This release exists only to rectify a publishing error that occurred with v0.45. ### What's new - Added `PlacesReaderConnection.getVisitPageWithBound` which performs - faster history visits pagination by first skipping directly to a `bound` timestamp and then - skipping over `offset` items from `bound`. ([#1019](https://github.com/mozilla/application-services/issues/1019)) +faster history visits pagination by first skipping directly to a `bound` timestamp and then +skipping over `offset` items from `bound`. ([#1019](https://github.com/mozilla/application-services/issues/1019)) ## Push @@ -4288,7 +4292,7 @@ This release exists only to rectify a publishing error that occurred with v0.45. ### Breaking Changes - Login records with a `httpRealm` attribute will now have their `usernameField` and `passwordField` - properties silently cleared, to help ensure data consistency. ([#2158](https://github.com/mozilla/application-services/pull/2158)) +properties silently cleared, to help ensure data consistency. ([#2158](https://github.com/mozilla/application-services/pull/2158)) ### What's new @@ -4299,9 +4303,9 @@ This release exists only to rectify a publishing error that occurred with v0.45. ### Breaking Changes - When asked to sync all engines, SyncManager will now sync all engines for which a handle has been set. - Previously it would sync all known engines, panicking if a handle had not been set for some engine. - While *technically* a breaking change, we expect that the new behaviour is almost certainly what - consuming applications actually want in practice. ([#2313](https://github.com/mozilla/application-services/pull/2313)) +Previously it would sync all known engines, panicking if a handle had not been set for some engine. +While *technically* a breaking change, we expect that the new behaviour is almost certainly what +consuming applications actually want in practice. ([#2313](https://github.com/mozilla/application-services/pull/2313)) # v0.44.0 (_2019-11-21_) @@ -4347,12 +4351,12 @@ This release exists only to rectify a publishing error that occurred with v0.42. ### What's new - `PushManager.dispatchInfoForChid(channelID)` now also returns the - `endpoint` and `appServerKey` from the subscription. +`endpoint` and `appServerKey` from the subscription. ### Breaking Changes - The `appServerKey` VAPID public key has moved from `PushConfig` to - `PushManager.subscription(channelID, scope, appServerKey)`. +`PushManager.subscription(channelID, scope, appServerKey)`. - The unused `regenerate_endpoints()` function has been removed. @@ -4365,8 +4369,8 @@ This release exists only to rectify a publishing error that occurred with v0.42. ### What's New - On Android, our Megazord libraries now include license information for dependencies - as part of their `.pom` file, making it easily available to tools such as the - [oss-licenses-plugin](https://github.com/google/play-services-plugins/tree/master/oss-licenses-plugin) +as part of their `.pom` file, making it easily available to tools such as the +[oss-licenses-plugin](https://github.com/google/play-services-plugins/tree/master/oss-licenses-plugin) - Our iOS framework binaries are now built using XCode 11.2. @@ -4421,10 +4425,10 @@ This release exists only to rectify a publishing error that occurred with v0.42. - Our components are now built with the newer Android NDK r20 instead of r15c. This change will make it easier for contributors to set up their development environment since there's no need to generate Android toolchains anymore. ([#1916](https://github.com/mozilla/application-services/pull/1916)) For existing contributors, here's what you need to do immediately: - - Download and extract the [Android NDK r20](https://developer.android.com/ndk/downloads). - - Change the `ANDROID_NDK_ROOT` and `ANDROID_NDK_HOME` environment variables to point to the newer NDK dir. You can also delete the now un-used `ANDROID_NDK_TOOLCHAIN_DIR` variable. - - Delete `.cargo/config` at the root of the repository if you have it. - - Regenerate the Android libs: `cd libs && rm -rf android && ./build-all.sh android`. +- Download and extract the [Android NDK r20](https://developer.android.com/ndk/downloads). +- Change the `ANDROID_NDK_ROOT` and `ANDROID_NDK_HOME` environment variables to point to the newer NDK dir. You can also delete the now un-used `ANDROID_NDK_TOOLCHAIN_DIR` variable. +- Delete `.cargo/config` at the root of the repository if you have it. +- Regenerate the Android libs: `cd libs && rm -rf android && ./build-all.sh android`. ## Logins @@ -4462,8 +4466,8 @@ For existing contributors, here's what you need to do immediately: ### What's new - The OAuth access token cache is now persisted as part of the account state data, - which should reduce the number of times callers need to fetch a fresh access token - from the server. +which should reduce the number of times callers need to fetch a fresh access token +from the server. # v0.39.2 (_2019-09-24_) @@ -4501,18 +4505,18 @@ Also we now store the session_token into the state from the 'https://identity.mo ### What's fixed - Hidden URLs (redirect sources, or links visited in frames) are no longer - synced or returned in `get_visit_infos` or `get_visit_page`. Additionally, - a new `is_hidden` flag is added to `HistoryVisitInfo`, though it's currently - always `false`, since those visits are excluded. - ([#1715](https://github.com/mozilla/application-services/pull/1715)) +synced or returned in `get_visit_infos` or `get_visit_page`. Additionally, +a new `is_hidden` flag is added to `HistoryVisitInfo`, though it's currently +always `false`, since those visits are excluded. +([#1715](https://github.com/mozilla/application-services/pull/1715)) ## Sync Manager - The new sync manager component is now available for integration ([#1447](https://github.com/mozilla/application-services/pull/1447)). - - This should include no breaking changes at the moment, but in the future - we will deprecate the non-sync manager sync APIs on android. - - Note: Currently, the sync manager is only available in the `full` and - `fenix` megazords. +- This should include no breaking changes at the moment, but in the future +we will deprecate the non-sync manager sync APIs on android. +- Note: Currently, the sync manager is only available in the `full` and +`fenix` megazords. # v0.38.2 (_2019-09-04_) @@ -4545,8 +4549,8 @@ Also we now store the session_token into the state from the 'https://identity.mo ### What's new - Initial versions of Fennec data import methods have landed: - - Bookmarks and history visits can be imported by calling `PlacesWriterConnection.importBookmarksFromFennec` and `PlacesWriterConnection.importVisitsFromFennec` respectively. ([#1595](https://github.com/mozilla/application-services/pull/1595), [#1461](https://github.com/mozilla/application-services/pull/1461)) - - Logins can be imported with `LoginsStorage.importLogins`. ([#1614](https://github.com/mozilla/application-services/pull/1614)) +- Bookmarks and history visits can be imported by calling `PlacesWriterConnection.importBookmarksFromFennec` and `PlacesWriterConnection.importVisitsFromFennec` respectively. ([#1595](https://github.com/mozilla/application-services/pull/1595), [#1461](https://github.com/mozilla/application-services/pull/1461)) +- Logins can be imported with `LoginsStorage.importLogins`. ([#1614](https://github.com/mozilla/application-services/pull/1614)) # v0.38.0 (_2019-08-19_) @@ -4555,16 +4559,16 @@ Also we now store the session_token into the state from the 'https://identity.mo ## General - Our OpenSSL dependency has been removed for all platforms other than - desktop-linux (used when running local rust unit tests and the android - -forUnitTests artifact). All other platforms use NSS. - ([#1570](https://github.com/mozilla/application-services/pull/1570)) +desktop-linux (used when running local rust unit tests and the android +-forUnitTests artifact). All other platforms use NSS. +([#1570](https://github.com/mozilla/application-services/pull/1570)) ## Places ### What's Fixed * Tags containing embedded whitespace are no longer marked as invalid and - removed. ([#1616](https://github.com/mozilla/application-services/issues/1616)) +removed. ([#1616](https://github.com/mozilla/application-services/issues/1616)) # v0.37.1 (_2019-08-09_) @@ -4575,7 +4579,7 @@ Also we now store the session_token into the state from the 'https://identity.mo ### What's fixed - Published artifacts should now correctly declare their `packaging` type in - their pom files. ([#1564](https://github.com/mozilla/application-services/pull/1564)) +their pom files. ([#1564](https://github.com/mozilla/application-services/pull/1564)) ## FxA Client @@ -4600,7 +4604,7 @@ Also we now store the session_token into the state from the 'https://identity.mo ### Breaking changes - The `FirefoxAccount.beginOAuthFlow` method does not require the `wantsKeys` argument anymore - as it will always do the right thing based on the requested scopes. +as it will always do the right thing based on the requested scopes. # v0.36.0 (_2019-07-30_) @@ -4657,7 +4661,7 @@ This release exists only to rectify a publishing error that occurred with v0.35. ### What's Fixed * Android: `migrateFromSessionToken` will not leave the account in a broken state if - network errors happen during the migration process. +network errors happen during the migration process. ## Push @@ -4678,47 +4682,47 @@ arrived. This has a large number of changes, many of them breaking: ([#1103](https://github.com/mozilla/application-services/pull/1103)) - Consumers who depend on network features of application-services, but - which were not using a megazord, will no longer be able to use a legacy - HTTP stack by default. +which were not using a megazord, will no longer be able to use a legacy +HTTP stack by default. - Consumers who depend on network features and *do* use a megazord, can no - longer initialize HTTP in the same call as the megazord. +longer initialize HTTP in the same call as the megazord. - Both of these cases should import the `org.mozilla.appservices:httpconfig` - package, and call `RustHttpConfig.setClient(lazy { /* client to use */ })` - before calling functions which make HTTP requests. +package, and call `RustHttpConfig.setClient(lazy { /* client to use */ })` +before calling functions which make HTTP requests. - For custom megazord users, the name of your megazord is now always - `mozilla.appservices.Megazord`. You no longer need to load it by reflection, - since the swapped-out version always has the same name as your custom version. +`mozilla.appservices.Megazord`. You no longer need to load it by reflection, +since the swapped-out version always has the same name as your custom version. - The reference-browser megazord has effectively been replaced by the - full-megazord, which is also the megazord used by default +full-megazord, which is also the megazord used by default - The steps to swap-out a custom megazord have changed. The specific steps are - slightly different in various cases, and we will file PRs to help make the - transition. +slightly different in various cases, and we will file PRs to help make the +transition. - Substitution builds once again work, except for running unit tests against - Rust code. +Rust code. ## FxA Client ### What's Fixed - The state persistence callback is now correctly triggered after a call - to `FirefoxAccount.getProfile`. +to `FirefoxAccount.getProfile`. ### Breaking changes - The `FirefoxAccount.destroyDevice` method has been removed in favor of the - more general `FirefoxAccount.disconnect` method which will ensure a full - disconnection by invalidating OAuth tokens and destroying the device record - if it exists. ([#1397](https://github.com/mozilla/application-services/issues/1397)) +more general `FirefoxAccount.disconnect` method which will ensure a full +disconnection by invalidating OAuth tokens and destroying the device record +if it exists. ([#1397](https://github.com/mozilla/application-services/issues/1397)) - The `FirefoxAccount.disconnect` method has been added to the Swift bindings as well. - The `FirefoxAccount.beginOAuthFlow` method will redirect to a content page that - forces the user to connect to the last seen user email. To avoid this behavior, - a new `FirefoxAccount` instance with a new persisted state must be created. +forces the user to connect to the last seen user email. To avoid this behavior, +a new `FirefoxAccount` instance with a new persisted state must be created. # v0.34.0 (_2019-07-10_) @@ -4728,23 +4732,23 @@ arrived. This has a large number of changes, many of them breaking: - All of our cryptographic primitives are now backed by NSS ([#1349](https://github.com/mozilla/application-services/pull/1349)). This change should be transparent our customers. - If you build application-services, it is recommended to delete the `libs/{desktop, ios, android}` folders and start over using `./build-all.sh [android|desktop|ios]`. [GYP](https://github.com/mogemimi/pomdog/wiki/How-to-Install-GYP) and [ninja](https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages) are required to build these libraries. +If you build application-services, it is recommended to delete the `libs/{desktop, ios, android}` folders and start over using `./build-all.sh [android|desktop|ios]`. [GYP](https://github.com/mogemimi/pomdog/wiki/How-to-Install-GYP) and [ninja](https://github.com/ninja-build/ninja/wiki/Pre-built-Ninja-packages) are required to build these libraries. ## Places ### What's New - Added `WritableHistoryConnection.acceptResult(searchString, url)` for marking - an awesomebar result as accepted. - ([#1332](https://github.com/mozilla/application-services/pull/1332)) - - Specifically, `queryAutocomplete` calls for searches that contain - frequently accepted results are more highly ranked. +an awesomebar result as accepted. +([#1332](https://github.com/mozilla/application-services/pull/1332)) +- Specifically, `queryAutocomplete` calls for searches that contain +frequently accepted results are more highly ranked. ### Breaking changes - Android only: The addition of `acceptResult` to `WritableHistoryConnection` is - a breaking change for any custom implementations of `WritableHistoryConnection` - ([#1332](https://github.com/mozilla/application-services/pull/1332)) +a breaking change for any custom implementations of `WritableHistoryConnection` +([#1332](https://github.com/mozilla/application-services/pull/1332)) ## Push @@ -4773,8 +4777,8 @@ This release exists only to rectify a publishing error that occurred with v0.33. ### Breaking Changes - iOS: FirefoxAccountError enum variants have their name `lowerCamelCased` - instead of `UpperCamelCased`, to better fit with common Swift code style. - ([#1324](https://github.com/mozilla/application-services/issues/1324)) +instead of `UpperCamelCased`, to better fit with common Swift code style. +([#1324](https://github.com/mozilla/application-services/issues/1324)) # v0.32.3 (_2019-07-02_) @@ -4829,10 +4833,10 @@ This release exists only to rectify a publishing error that occurred with v0.33. ### What's fixed - Fix an error that could happen when the place database is closed. - ([#1304](https://github.com/mozilla/application-services/pull/1304)) +([#1304](https://github.com/mozilla/application-services/pull/1304)) - iOS only: Ensure interruption errors don't come through as network errors. - ([#1304](https://github.com/mozilla/application-services/pull/1304)) +([#1304](https://github.com/mozilla/application-services/pull/1304)) # v0.31.3 (_2019-07-02_) @@ -4859,8 +4863,8 @@ This release exists only to rectify a publishing error that occurred with v0.33. ### What's fixed - Fixes an edge case introduced in v0.31.1 where a users set of declined engines - (aka the "Choose what to Sync" preferences) could be forgotten. - ([#1273](https://github.com/mozilla/application-services/pull/1273)) +(aka the "Choose what to Sync" preferences) could be forgotten. +([#1273](https://github.com/mozilla/application-services/pull/1273)) # v0.31.1 (_2019-06-10_) @@ -4871,24 +4875,24 @@ This release exists only to rectify a publishing error that occurred with v0.33. ### What's fixed - Fixes an issue where a stale sync key will be used in cases where a user signs - out and signs in to another account. ([#1256](https://github.com/mozilla/application-services/pull/1256)) +out and signs in to another account. ([#1256](https://github.com/mozilla/application-services/pull/1256)) ## FxA Client ### What's new - Added a new method to help recover from invalid access tokens. - ([#1244](https://github.com/mozilla/application-services/pull/1244)) If the - application receives an an authentication exception while using a token - obtained through `FirefoxAccount.getAccessToken`, it should: - - Call `FirefoxAccount.clearAccessTokenCache` to remove the invalid token from the internal cache. - - Retry the operation after obtaining fresh access token via `FirefoxAccount.getAccessToken`. - - If the retry also fails with an authentication exception, then the user will need to reconnect - their account via a fresh OAuth flow. +([#1244](https://github.com/mozilla/application-services/pull/1244)) If the +application receives an an authentication exception while using a token +obtained through `FirefoxAccount.getAccessToken`, it should: +- Call `FirefoxAccount.clearAccessTokenCache` to remove the invalid token from the internal cache. +- Retry the operation after obtaining fresh access token via `FirefoxAccount.getAccessToken`. +- If the retry also fails with an authentication exception, then the user will need to reconnect +their account via a fresh OAuth flow. - `FirefoxAccount.getProfile` now performs the above retry logic automagically. - An authentication error while calling `getProfile` indicates that the user - needs to reconnect their account. - ([#1244](https://github.com/mozilla/application-services/pull/1244) +An authentication error while calling `getProfile` indicates that the user +needs to reconnect their account. +([#1244](https://github.com/mozilla/application-services/pull/1244) # v0.31.0 (_2019-06-07_) @@ -4897,27 +4901,27 @@ This release exists only to rectify a publishing error that occurred with v0.33. ## Sync - Android: A new `sync15` package defines Kotlin data classes for the Sync - telemetry ping. ([#1112](https://github.com/mozilla/application-services/pull/1112)) +telemetry ping. ([#1112](https://github.com/mozilla/application-services/pull/1112)) - Android: `PlacesApi.syncHistory` and `PlacesApi.syncBookmarks` now return a - `SyncTelemetryPing`. ([#1112](https://github.com/mozilla/application-services/pull/1112)) +`SyncTelemetryPing`. ([#1112](https://github.com/mozilla/application-services/pull/1112)) - iOS: `PlacesAPI.syncBookmarks` now returns a JSON string with the contents of - the Sync ping. This should be posted to the legacy telemetry submission - endpoint. ([#1112](https://github.com/mozilla/application-services/pull/1112)) +the Sync ping. This should be posted to the legacy telemetry submission +endpoint. ([#1112](https://github.com/mozilla/application-services/pull/1112)) ## Places ### What's fixed - Deduping synced bookmarks with newer server timestamps no longer throws - unique constraint violations. ([#1259](https://github.com/mozilla/application-services/pull/1259)) +unique constraint violations. ([#1259](https://github.com/mozilla/application-services/pull/1259)) ## Logins ### Breaking Changes - iOS: LoginsStoreError enum variants have their name `lowerCamelCased` - instead of `UpperCamelCased`, to better fit with common Swift code style. - ([#1042](https://github.com/mozilla/application-services/issues/1042)) +instead of `UpperCamelCased`, to better fit with common Swift code style. +([#1042](https://github.com/mozilla/application-services/issues/1042)) # v0.30.0 (_2019-05-30_) @@ -4950,12 +4954,12 @@ create a new session with a refreshToken. ### What's New - A new `getRecentBookmarks` API was added to return the list of most recently - added bookmark items ([#1129](https://github.com/mozilla/application-services/issues/1129)). +added bookmark items ([#1129](https://github.com/mozilla/application-services/issues/1129)). ### Breaking Changes - The addition of `getRecentBookmarks` is a breaking change for custom - implementation of `ReadableBookmarksConnection` on Android - ([#1129](https://github.com/mozilla/application-services/issues/1129)). +implementation of `ReadableBookmarksConnection` on Android +([#1129](https://github.com/mozilla/application-services/issues/1129)). # v0.28.1 (_2019-05-21_) @@ -4972,15 +4976,15 @@ This release exists only to rectify a publishing error that occurred with v0.28. ### Breaking Changes - `FirefoxAccount.ensureCapabilities` now takes a set of capabilities - as a parameter. All the device registered "capabilities" such as Send - Tab will be replaced by the passed set of new capabilities. +as a parameter. All the device registered "capabilities" such as Send +Tab will be replaced by the passed set of new capabilities. ## Push ### Breaking Changes - `PushManager.verifyConnection()` now returns a boolean. `true` - indicates the connection is valid and no action required, `false` +indicates the connection is valid and no action required, `false` indicates that the connection is invalid. All existing subscriptions have been dropped. The caller should send a `pushsubscriptionchange` to all known apps. (This is due to the fact that the Push API does @@ -4988,7 +4992,7 @@ not have a way to send just the new endpoint to the client PWA.) [#1114](https://github.com/mozilla/application-services/issues/1114) - `PushManager.unsubscribe(...)` now will only unsubscribe a single - channel. It will return `false` if no channel is specified or if the +channel. It will return `false` if no channel is specified or if the channel was already deleted. To delete all channels for a given user, call `PushManager.unsubscribeAll()`. [#889](https://github.com/mozilla/application-services/issues/889) @@ -4998,10 +5002,10 @@ call `PushManager.unsubscribeAll()`. ### What's Fixed - Native libraries should now have debug symbols stripped by default, - resulting in significantly smaller package size for consuming - applications. A test was also added to CI to ensure that this - does not regress in future. - ([1107](https://github.com/mozilla/application-services/issues/1107)) +resulting in significantly smaller package size for consuming +applications. A test was also added to CI to ensure that this +does not regress in future. +([1107](https://github.com/mozilla/application-services/issues/1107)) # v0.27.2 (_2019-05-08_) @@ -5019,14 +5023,14 @@ call `PushManager.unsubscribeAll()`. ### What's New - iOS only: PlacesApi can now migrate bookmark data from a `browser.db` database - via the `migrateBookmarksFromBrowserDb` function. It is recommended that this - only be called for non-sync users, as syncing the bookmarks over will result - in better handling of sync metadata, among other things. - ([#1078](https://github.com/mozilla/application-services/pull/1078)) +via the `migrateBookmarksFromBrowserDb` function. It is recommended that this +only be called for non-sync users, as syncing the bookmarks over will result +in better handling of sync metadata, among other things. +([#1078](https://github.com/mozilla/application-services/pull/1078)) - iOS: Sync can now be interrupted using the `interrupt` method - ([#1092](https://github.com/mozilla/application-services/pull/1092)) +([#1092](https://github.com/mozilla/application-services/pull/1092)) - iOS: Sync metadata can be reset using the `resetBookmarksMetadata` method - ([#1092](https://github.com/mozilla/application-services/pull/1092)) +([#1092](https://github.com/mozilla/application-services/pull/1092)) # v0.27.1 (_2019-04-26_) @@ -5044,7 +5048,7 @@ call `PushManager.unsubscribeAll()`. ### What's New - Frecencies are now recalculated for bookmarked URLs after a sync. - ([#847](https://github.com/mozilla/application-services/issues/847)) +([#847](https://github.com/mozilla/application-services/issues/847)) ## Push @@ -5073,12 +5077,12 @@ call `PushManager.unsubscribeAll()`. ### What's New - New methods `getManageAccountURL` and `getManageDevicesURL` have been added, - which the application can use to direct the user to manage their account on the web. - ([#984](https://github.com/mozilla/application-services/pull/984)) +which the application can use to direct the user to manage their account on the web. +([#984](https://github.com/mozilla/application-services/pull/984)) - Android only: Added device registration and Firefox Send Tab capability support. Your app can opt into this by calling the `FirefoxAccount.initializeDevice` method. ([#676](https://github.com/mozilla/application-services/pull/676)) - Switched to use the new fxa-auth-server token endpoint which generates device records, email and push notifications - for connected clients([#1055](https://github.com/mozilla/application-services/pull/1055)) +for connected clients([#1055](https://github.com/mozilla/application-services/pull/1055)) ## Places @@ -5100,7 +5104,7 @@ call `PushManager.unsubscribeAll()`. ### What's Fixed - iOS temporarially no longer uses NSS for crypto. This is a short term fix to - allow firefox-ios to release an update. +allow firefox-ios to release an update. # v0.26.1 (_2019-04-18_) @@ -5125,51 +5129,51 @@ call `PushManager.unsubscribeAll()`. ### Breaking Change - `PushAPI.subscribe()` now returns a `SubscriptionResponse` that contains the server supplied `channelID` and the - `subscriptionInfo` block previously returned. Please note: the server supplied `channelID` may differ from the - supplied `channelID` argument. This is definitely true when an empty channelID value is provided to `subscribe()`, - or if the channelID is not a proper UUID. - The returned `channelID` value is authoritative and will be the value associated with the subscription and future - subscription updates. As before, the `subscriptionResponse.subscriptionInfo` can be JSON serialized and returned to the application. - ([#988](https://github.com/mozilla/application-services/pull/988)) +`subscriptionInfo` block previously returned. Please note: the server supplied `channelID` may differ from the +supplied `channelID` argument. This is definitely true when an empty channelID value is provided to `subscribe()`, +or if the channelID is not a proper UUID. +The returned `channelID` value is authoritative and will be the value associated with the subscription and future +subscription updates. As before, the `subscriptionResponse.subscriptionInfo` can be JSON serialized and returned to the application. +([#988](https://github.com/mozilla/application-services/pull/988)) ## Places ### What's new - Bookmarks may now be synced using the `syncBookmarks` method on `PlacesApi` - (and on Android, the interface it implements, `SyncManager`). - ([#850](https://github.com/mozilla/application-services/issues/850)) +(and on Android, the interface it implements, `SyncManager`). +([#850](https://github.com/mozilla/application-services/issues/850)) - Android only: New methods for querying paginated history have been added: - `getVisitCount` and `getVisitPage` - ([#992](https://github.com/mozilla/application-services/issues/992)) +`getVisitCount` and `getVisitPage` +([#992](https://github.com/mozilla/application-services/issues/992)) - Android only: `getVisitInfos` now takes a list of visit types to exclude. - ([#920](https://github.com/mozilla/application-services/issues/920)) +([#920](https://github.com/mozilla/application-services/issues/920)) ### Breaking Changes - Android only: The addition of `syncBookmarks` on the `PlacesManager` interface - is a breaking change. ([#850](https://github.com/mozilla/application-services/issues/850)) +is a breaking change. ([#850](https://github.com/mozilla/application-services/issues/850)) - Android only: `sync` has been renamed to `syncHistory` for clarity given the - existence of `syncBookmarks`. - ([#850](https://github.com/mozilla/application-services/issues/850)) +existence of `syncBookmarks`. +([#850](https://github.com/mozilla/application-services/issues/850)) - Android only: `getVisitInfos` has changed, which is breaking for implementors - of `ReadableHistoryConnection`. - ([#920](https://github.com/mozilla/application-services/issues/920)) +of `ReadableHistoryConnection`. +([#920](https://github.com/mozilla/application-services/issues/920)) - Android only: New methods on `ReadableHistoryConnection`: `getVisitCount` and - `getVisitPage`. - ([#992](https://github.com/mozilla/application-services/issues/992)) +`getVisitPage`. +([#992](https://github.com/mozilla/application-services/issues/992)) ## Logins ### What's new - iOS only: Logins operations may now be interrupted via the `interrupt()` - method on LoginsDb, which may be called from any thread. - ([#884](https://github.com/mozilla/application-services/issues/884)) - - This is currently only implemented for iOS due to lack of interest on the - Android side, please let us know if this is desirable in the Android API - as well. Feel free to indicate support for exposing this in the Android API - [here](https://github.com/mozilla/application-services/issues/1020). +method on LoginsDb, which may be called from any thread. +([#884](https://github.com/mozilla/application-services/issues/884)) +- This is currently only implemented for iOS due to lack of interest on the +Android side, please let us know if this is desirable in the Android API +as well. Feel free to indicate support for exposing this in the Android API +[here](https://github.com/mozilla/application-services/issues/1020). # v0.25.2 (_2019-04-11_) @@ -5183,7 +5187,7 @@ call `PushManager.unsubscribeAll()`. - MegazordsΒ and requests should work again. ([#946](https://github.com/mozilla/application-services/pull/946)) - The vestigial `reqwest` backend is no longer compiled into the megazords ([#937](https://github.com/mozilla/application-services/pull/937)). - - Note that prior to this it was present, but unused. +- Note that prior to this it was present, but unused. ## iOS @@ -5205,37 +5209,37 @@ call `PushManager.unsubscribeAll()`. ## Breaking Changes - Megazord initialization has changed. Megazords' init() function now takes a - `Lazy` (from - [concept-fetch](https://github.com/mozilla-mobile/android-components/tree/master/components/concept/fetch/)), - which will be used to proxy all HTTP requests through. It will not be accessed - until a method is called on rust code which requires the network. This - functionality is not present in non-megazords. ([#835](https://github.com/mozilla/application-services/pull/835)) - - An example of how to initialize this follows: - - ```kotlin - val megazordClass = Class.forName("mozilla.appservices.MyCoolMegazord") - val megazordInitMethod = megazordClass.getDeclaredMethod("init", Lazy::class.java) - val lazyClient: Lazy = lazy { components.core.client } - megazordInitMethod.invoke(megazordClass, lazyClient) - ``` - - Or (if you don't have GeckoView available, e.g. in the case of lockbox): - - ```kotlin - val megazordClass = Class.forName("mozilla.appservices.MyCoolMegazord") - val megazordInitMethod = megazordClass.getDeclaredMethod("init", Lazy::class.java) - // HttpURLConnectionClient is from mozilla.components.lib.fetch.httpurlconnection - val lazyClient: Lazy = lazy { HttpURLConnectionClient() } - megazordInitMethod.invoke(megazordClass, lazyClient) - ``` +`Lazy` (from +[concept-fetch](https://github.com/mozilla-mobile/android-components/tree/master/components/concept/fetch/)), +which will be used to proxy all HTTP requests through. It will not be accessed +until a method is called on rust code which requires the network. This +functionality is not present in non-megazords. ([#835](https://github.com/mozilla/application-services/pull/835)) + +An example of how to initialize this follows: + +```kotlin +val megazordClass = Class.forName("mozilla.appservices.MyCoolMegazord") +val megazordInitMethod = megazordClass.getDeclaredMethod("init", Lazy::class.java) +val lazyClient: Lazy = lazy { components.core.client } +megazordInitMethod.invoke(megazordClass, lazyClient) +``` + +Or (if you don't have GeckoView available, e.g. in the case of lockbox): + +```kotlin +val megazordClass = Class.forName("mozilla.appservices.MyCoolMegazord") +val megazordInitMethod = megazordClass.getDeclaredMethod("init", Lazy::class.java) +// HttpURLConnectionClient is from mozilla.components.lib.fetch.httpurlconnection +val lazyClient: Lazy = lazy { HttpURLConnectionClient() } +megazordInitMethod.invoke(megazordClass, lazyClient) +``` ## General - Native code builds are now stripped by default, reducing size by almost an - order of magnitude. ([#913](https://github.com/mozilla/application-services/issues/913)) - - This is done rather than relying on consumers to strip them, which proved - more difficult than anticipated. +order of magnitude. ([#913](https://github.com/mozilla/application-services/issues/913)) +- This is done rather than relying on consumers to strip them, which proved +more difficult than anticipated. ## Push @@ -5246,7 +5250,7 @@ call `PushManager.unsubscribeAll()`. ### Breaking changes - `mozilla.appservices.push.BridgeTypes` is now - `mozilla.appservices.push.BridgeType` +`mozilla.appservices.push.BridgeType` ([#885](https://github.com/mozilla/application-services/issues/885)) ## Places @@ -5254,7 +5258,7 @@ call `PushManager.unsubscribeAll()`. ### What's Fixed - Swift PlacesAPI methods are not externally accessible - ([#928](https://github.com/mozilla/application-services/issues/928)) +([#928](https://github.com/mozilla/application-services/issues/928)) # v0.23.0 (_2019-03-29_) @@ -5265,14 +5269,14 @@ call `PushManager.unsubscribeAll()`. ### What's Fixed - createBookmarkItem on android will now create the correct type of bookmark. - ([#880](https://github.com/mozilla/application-services/issues/880)) +([#880](https://github.com/mozilla/application-services/issues/880)) ## Push ### Breaking changes - the `PushManager` argument `socket_protocol` is now `http_protocol` - to correctly map its role. `socket_protocol` is reserved. +to correctly map its role. `socket_protocol` is reserved. # v0.22.1 (_2019-03-27_) @@ -5283,15 +5287,15 @@ call `PushManager.unsubscribeAll()`. ### What's New - iOS Logins storage now has `ensureLocked`, `ensureUnlocked`, and `wipeLocal` - methods, equivalent to those provided in the android API. - ([#854](https://github.com/mozilla/application-services/issues/854)) +methods, equivalent to those provided in the android API. +([#854](https://github.com/mozilla/application-services/issues/854)) ## Places ### What's Fixed - PlacesAPIs should now be closed when all references to them are no longer used. - ([#749](https://github.com/mozilla/application-services/issues/749)) +([#749](https://github.com/mozilla/application-services/issues/749)) # v0.22.0 (_2019-03-22_) @@ -5341,7 +5345,7 @@ and working around subtle build issues. [Full Changelog](https://github.com/mozilla/application-services/compare/v0.20.0...v0.20.1) - A error in the build.gradle file caused the v0.20.0 release to fail, this - release should not be meaningfully different from it. +release should not be meaningfully different from it. # v0.20.0 (_2019-03-14_) @@ -5350,51 +5354,51 @@ and working around subtle build issues. ## General - The previous release had an issue with the megazords, and so another - release was needed. This is version 0.4.2 of the megazord plugin. - ([#775](https://github.com/mozilla/application-services/pull/775)) +release was needed. This is version 0.4.2 of the megazord plugin. +([#775](https://github.com/mozilla/application-services/pull/775)) ### Breaking Changes - All package names have been normalized. The gradle packages should all be - `org.mozilla.appservices:component`, and the java namespaces should be - `mozilla.appservices.component`. ([#776](https://github.com/mozilla/application-services/pull/776)) +`org.mozilla.appservices:component`, and the java namespaces should be +`mozilla.appservices.component`. ([#776](https://github.com/mozilla/application-services/pull/776)) ## Logins ### Breaking Changes - The gradle package for logins has been changed from - `'org.mozilla.sync15:logins'` to `org.mozilla.appservices:logins`. - ([#776](https://github.com/mozilla/application-services/pull/776)) +`'org.mozilla.sync15:logins'` to `org.mozilla.appservices:logins`. +([#776](https://github.com/mozilla/application-services/pull/776)) ## Places ### Breaking Changes - Several classes and interfaces have been renamed after feedback from consumers - to avoid `Interface` in the name, and better reflect what they provide. - - `PlacesApiInterface` => `PlacesManager` - - `PlacesConnectionInterface` => `InterruptibleConnection` - - `ReadablePlacesConnectionInterface` => `ReadableHistoryConnection` - - `WritablePlacesConnectionInterface` => `WritableHistoryConnection` - - `ReadablePlacesConnection` => `PlacesReaderConnection` - - `WritablePlacesConnection` => `PlacesWriterConnection` +to avoid `Interface` in the name, and better reflect what they provide. +- `PlacesApiInterface` => `PlacesManager` +- `PlacesConnectionInterface` => `InterruptibleConnection` +- `ReadablePlacesConnectionInterface` => `ReadableHistoryConnection` +- `WritablePlacesConnectionInterface` => `WritableHistoryConnection` +- `ReadablePlacesConnection` => `PlacesReaderConnection` +- `WritablePlacesConnection` => `PlacesWriterConnection` - The java namespace used in places has changed from `org.mozilla.places` to - `mozilla.appservices.places` - ([#776](https://github.com/mozilla/application-services/pull/776)) +`mozilla.appservices.places` +([#776](https://github.com/mozilla/application-services/pull/776)) - The gradle package for places has been changed from - `'org.mozilla.places:places'` to `org.mozilla.appservices:places`. - ([#776](https://github.com/mozilla/application-services/pull/776)) +`'org.mozilla.places:places'` to `org.mozilla.appservices:places`. +([#776](https://github.com/mozilla/application-services/pull/776)) ## FxA ### Breaking Changes - The gradle package for fxa-client has been changed from - `'org.mozilla.fxaclient:fxaclient'` to `org.mozilla.appservices:fxaclient`. - ([#776](https://github.com/mozilla/application-services/pull/776)) +`'org.mozilla.fxaclient:fxaclient'` to `org.mozilla.appservices:fxaclient`. +([#776](https://github.com/mozilla/application-services/pull/776)) # 0.19.0 (_2019-03-13_) @@ -5405,41 +5409,41 @@ and working around subtle build issues. ### What's New - Initial support for the new Push component landed, however it's not yet ready - for widespread use ([#683](https://github.com/mozilla/application-services/pull/683)) +for widespread use ([#683](https://github.com/mozilla/application-services/pull/683)) ## Places ### What's New - A massive rewrite of the Kotlin API has been completed. This distinguishes - reader and writer connections. A brief description of the new types follows. - Note that all the types have corresponding interfaces that allow for them to - be mocked during testing as needed. ([#718](https://github.com/mozilla/application-services/pull/718)) - - `PlacesApi`: This is similar to a connection pool, it exists to give out - reader and writer connections via the functions `openReader` and - `getWriter`. The naming distinction is due to there only being a single - writer connection (which is actually opened when the `PlacesApi` is - created). This class generally should be a singleton. - - In addition to `openReader` and `getWriter`, this also includes the - `sync()` method, as that requires a special type of connection. - - `ReadablePlacesConnection`: This is a read-only connection to the places - database, implements all the methods of the API that do not require write - access. - - Specifically, `getVisited`, `matchUrl`, `queryAutocomplete`, `interrupt`, - `getVisitedUrlsInRange`, and `getVisitInfos` all exist on this object. - - `WritablePlacesConnection`: This is a read-write connection, and as such, - contains not only the all reader methods mentioned above, but also the - methods requiring write access, such as: - - `noteObservation`, `wipeLocal`, `runMaintenance`, `pruneDestructively`, - `deleteEverything`, `deletePlace`, `deleteVisitsSince`, `deleteVisitsBetween`, - and `deleteVisit`. - - Note that the semantics of the various methods have not been changed, only - their location. +reader and writer connections. A brief description of the new types follows. +Note that all the types have corresponding interfaces that allow for them to +be mocked during testing as needed. ([#718](https://github.com/mozilla/application-services/pull/718)) +- `PlacesApi`: This is similar to a connection pool, it exists to give out +reader and writer connections via the functions `openReader` and +`getWriter`. The naming distinction is due to there only being a single +writer connection (which is actually opened when the `PlacesApi` is +created). This class generally should be a singleton. +- In addition to `openReader` and `getWriter`, this also includes the +`sync()` method, as that requires a special type of connection. +- `ReadablePlacesConnection`: This is a read-only connection to the places +database, implements all the methods of the API that do not require write +access. +- Specifically, `getVisited`, `matchUrl`, `queryAutocomplete`, `interrupt`, +`getVisitedUrlsInRange`, and `getVisitInfos` all exist on this object. +- `WritablePlacesConnection`: This is a read-write connection, and as such, +contains not only the all reader methods mentioned above, but also the +methods requiring write access, such as: +- `noteObservation`, `wipeLocal`, `runMaintenance`, `pruneDestructively`, +`deleteEverything`, `deletePlace`, `deleteVisitsSince`, `deleteVisitsBetween`, +and `deleteVisit`. +- Note that the semantics of the various methods have not been changed, only +their location. ### Breaking Changes - Almost the entire API has been rewritten. See "What's New" for - details. ([#718](https://github.com/mozilla/application-services/pull/718)) +details. ([#718](https://github.com/mozilla/application-services/pull/718)) # 0.18.0 (_2019-02-27_) @@ -5462,7 +5466,7 @@ and working around subtle build issues. ### What's New - The `rc_log` component now has support for iOS. It is only available as part of the - MozillaAppServices megazord. ([#618](https://github.com/mozilla/application-services/issues/618)) +MozillaAppServices megazord. ([#618](https://github.com/mozilla/application-services/issues/618)) # 0.17.0 (_2019-02-19_) @@ -5487,56 +5491,56 @@ and working around subtle build issues. ### What's New - New methods on PlacesConnection (Breaking changes for classes implementing PlacesAPI): - - `fun deleteVisit(url: String, timestamp: Long)`: If a visit exists at the specified timestamp for the specified URL, delete it. This change will be synced if it is the last remaining visit (standard caveat for partial visit deletion). ([#621](https://github.com/mozilla/application-services/issues/621)) - - `fun deleteVisitsBetween(start: Long, end: Long)`: Similar to `deleteVisitsSince(start)`, but takes an end date. ([#621](https://github.com/mozilla/application-services/issues/621)) - - `fun getVisitInfos(start: Long, end: Long = Long.MAX_VALUE): List`: Returns a more detailed set of information about the visits that occurred. ([#619](https://github.com/mozilla/application-services/issues/619)) - - `VisitInfo` is a new data class that contains a visit's url, title, timestamp, and type. - - `fun wipeLocal()`: Deletes all history entries without recording any sync information. ([#611](https://github.com/mozilla/application-services/issues/611)). +- `fun deleteVisit(url: String, timestamp: Long)`: If a visit exists at the specified timestamp for the specified URL, delete it. This change will be synced if it is the last remaining visit (standard caveat for partial visit deletion). ([#621](https://github.com/mozilla/application-services/issues/621)) +- `fun deleteVisitsBetween(start: Long, end: Long)`: Similar to `deleteVisitsSince(start)`, but takes an end date. ([#621](https://github.com/mozilla/application-services/issues/621)) +- `fun getVisitInfos(start: Long, end: Long = Long.MAX_VALUE): List`: Returns a more detailed set of information about the visits that occurred. ([#619](https://github.com/mozilla/application-services/issues/619)) +- `VisitInfo` is a new data class that contains a visit's url, title, timestamp, and type. +- `fun wipeLocal()`: Deletes all history entries without recording any sync information. ([#611](https://github.com/mozilla/application-services/issues/611)). - This means that these visits are likely to start slowly trickling back - in over time, and many of them will come back entirely if a full sync - is performed (which may not happen for some time, admittedly). The - intention here is that this is a method that's used if data should be - discarded when disconnecting sync, assuming that it would be desirable - for the data to show up again if sync is reconnected. +This means that these visits are likely to start slowly trickling back +in over time, and many of them will come back entirely if a full sync +is performed (which may not happen for some time, admittedly). The +intention here is that this is a method that's used if data should be +discarded when disconnecting sync, assuming that it would be desirable +for the data to show up again if sync is reconnected. - For more permanent local deletions, see `deleteEverything`, also added - in this version. +For more permanent local deletions, see `deleteEverything`, also added +in this version. - - `fun runMaintenance()`: Perform automatic maintenance. ([#611](https://github.com/mozilla/application-services/issues/611)) +- `fun runMaintenance()`: Perform automatic maintenance. ([#611](https://github.com/mozilla/application-services/issues/611)) - This should be called at least once per day, however that is a - recommendation and not a requirement, and nothing dire happens if it is - not called. +This should be called at least once per day, however that is a +recommendation and not a requirement, and nothing dire happens if it is +not called. - The maintenance it may perform potentially includes, but is not limited to: +The maintenance it may perform potentially includes, but is not limited to: - - Running `VACUUM`. - - Requesting that SQLite optimize our indices. - - Expiring old visits. - - Deleting or fixing corrupt or invalid rows. - - Etc. +- Running `VACUUM`. +- Requesting that SQLite optimize our indices. +- Expiring old visits. +- Deleting or fixing corrupt or invalid rows. +- Etc. - However not all of these are currently implemented. +However not all of these are currently implemented. - - `fun pruneDestructively()`: Aggressively prune history visits. ([#611](https://github.com/mozilla/application-services/issues/611)) +- `fun pruneDestructively()`: Aggressively prune history visits. ([#611](https://github.com/mozilla/application-services/issues/611)) - These deletions are not intended to be synced, however due to the way - history sync works, this can still cause data loss. +These deletions are not intended to be synced, however due to the way +history sync works, this can still cause data loss. - As a result, this should only be called if a low disk space notification - is received from the OS, and things like the network cache have already - been cleared. +As a result, this should only be called if a low disk space notification +is received from the OS, and things like the network cache have already +been cleared. - - `fun deleteEverything()`: Delete all history visits. ([#647](https://github.com/mozilla/application-services/issues/647)) +- `fun deleteEverything()`: Delete all history visits. ([#647](https://github.com/mozilla/application-services/issues/647)) - For sync users, this will not cause the visits to disappear from the - users remote devices, however it will prevent them from ever showing - up again, even across full syncs, or sync sign-in and sign-out. +For sync users, this will not cause the visits to disappear from the +users remote devices, however it will prevent them from ever showing +up again, even across full syncs, or sync sign-in and sign-out. - See also `wipeLocal`, also added in this version, which is less - permanent with respect to sync data (a full sync is likely to bring - most of it back). +See also `wipeLocal`, also added in this version, which is less +permanent with respect to sync data (a full sync is likely to bring +most of it back). ### Breaking Changes @@ -5547,7 +5551,7 @@ and working around subtle build issues. - Locally deleted visits deleted using `deleteVisitsSince` should not be resurrected on future syncs. ([#621](https://github.com/mozilla/application-services/issues/621)) - Places now properly updates frecency for origins, and generally supports - origins in a way more in line with how they're implemented on desktop. ([#429](https://github.com/mozilla/application-services/pull/429)) +origins in a way more in line with how they're implemented on desktop. ([#429](https://github.com/mozilla/application-services/pull/429)) # 0.16.1 (_2019-02-08_) @@ -5558,14 +5562,14 @@ and working around subtle build issues. ### What's Fixed - iOS `LoginRecord`s will no longer use empty strings for `httpRealm` and `formSubmitUrl` in cases where they claim to use nil. ([#623](https://github.com/mozilla/application-services/issues/623)) - - More broadly, all optional strings in LoginRecords were were being represented as empty strings (instead of nil) unintentionally. This is fixed. +- More broadly, all optional strings in LoginRecords were were being represented as empty strings (instead of nil) unintentionally. This is fixed. - iOS: Errors that were being accidentally swallowed should now be properly reported. ([#640](https://github.com/mozilla/application-services/issues/640)) - Schema initialization/upgrade now happen in a transaction. This should avoid corruption if some unexpected error occurs during the first unlock() call. ([#642](https://github.com/mozilla/application-services/issues/642)) ### Breaking changes - iOS: Code that expects empty strings (and not nil) for optional strings should be updated to check for nil instead. ([#623](https://github.com/mozilla/application-services/issues/623)) - - Note that this went out in a non-major release, as it doesn't cause compilation failure, and manually reading all our dependents determined that nobody was relying on this behavior. +- Note that this went out in a non-major release, as it doesn't cause compilation failure, and manually reading all our dependents determined that nobody was relying on this behavior. ## FxA @@ -5589,12 +5593,12 @@ and working around subtle build issues. ### Breaking Changes - Several new methods on PlacesConnection (Breaking changes for classes implementing PlacesAPI): - - `fun interrupt()`. Cancels any calls to `queryAutocomplete` or `matchUrl` that are running on other threads. Those threads will throw an `OperationInterrupted` exception. ([#597](https://github.com/mozilla/application-services/pull/597)) - - Note: Using `interrupt()` during the execution of other methods may work, but will have mixed results (it will work if we're currently executing a SQL query, and not if we're running rust code). This limitation may be lifted in the future. - - `fun deletePlace(url: String)`: Deletes all visits associated with the provided URL ([#591](https://github.com/mozilla/application-services/pull/591)) - - Note that these deletions are synced! - - `fun deleteVisitsSince(since: Long)`: Deletes all visits between the given unix timestamp (in milliseconds) and the present ([#591](https://github.com/mozilla/application-services/pull/591)). - - Note that these deletions are synced! +- `fun interrupt()`. Cancels any calls to `queryAutocomplete` or `matchUrl` that are running on other threads. Those threads will throw an `OperationInterrupted` exception. ([#597](https://github.com/mozilla/application-services/pull/597)) +- Note: Using `interrupt()` during the execution of other methods may work, but will have mixed results (it will work if we're currently executing a SQL query, and not if we're running rust code). This limitation may be lifted in the future. +- `fun deletePlace(url: String)`: Deletes all visits associated with the provided URL ([#591](https://github.com/mozilla/application-services/pull/591)) +- Note that these deletions are synced! +- `fun deleteVisitsSince(since: Long)`: Deletes all visits between the given unix timestamp (in milliseconds) and the present ([#591](https://github.com/mozilla/application-services/pull/591)). +- Note that these deletions are synced! ### What's New @@ -5616,7 +5620,7 @@ and working around subtle build issues. ### What's New - A new megazord was added, named `fenix-megazord`. It contains the components for FxA and Places (and logging). ([#585](https://github.com/mozilla/application-services/issues/585)) - - Note: To use this, you must be on version 0.3.1 of the gradle plugin. +- Note: To use this, you must be on version 0.3.1 of the gradle plugin. ## Logins @@ -5661,9 +5665,9 @@ and working around subtle build issues. - In most cases, opaque integer handles are now used to pass data over the FFI ([#567](https://github.com/mozilla/application-services/issues/567)). This should be more robust, and allow detection of many types of errors that would previously cause silent memory corruption. - ThisΒ should be mostly transparent, but is a semi-breaking semantic change in the case that something throws an exception indicating that the Rust code panicked (which should only occur due to bugs anyway). If this occurs, all subsequent operations on that object (except `close`/`lock`) will cause errors. It is "poisoned", in Rust terminology. (In the future, this may be handled automatically) +ThisΒ should be mostly transparent, but is a semi-breaking semantic change in the case that something throws an exception indicating that the Rust code panicked (which should only occur due to bugs anyway). If this occurs, all subsequent operations on that object (except `close`/`lock`) will cause errors. It is "poisoned", in Rust terminology. (In the future, this may be handled automatically) - This may seem inconvenient, but it should be an improvement over the previous version, where we instead would simply carry on despite potentially having corrupted internal state. +This may seem inconvenient, but it should be an improvement over the previous version, where we instead would simply carry on despite potentially having corrupted internal state. - Build settings were changed to reduce binary size of Android `.so` by around 200kB (per library). ([#567](https://github.com/mozilla/application-services/issues/567)) diff --git a/components/logins/Cargo.toml b/components/logins/Cargo.toml index dcf2b8024cc..2f126f9eba2 100644 --- a/components/logins/Cargo.toml +++ b/components/logins/Cargo.toml @@ -26,6 +26,12 @@ ignore_form_action_origin_validation_errors = [] # behavior. Used on Desktop during migration to salvage legacy/addon-generated # entries that would otherwise be lost. perform_additional_origin_fixups = [] +# Regenerates guids that are invalid for the sync server (empty, > 64 chars, or +# containing a comma / non-printable byte) when importing via `add_with_meta` / +# `add_many_with_meta`, instead of rejecting them. Used on Desktop during +# migration to salvage entries whose guids would otherwise crash the sync +# uploader (bug 2056116). +fixup_invalid_guids = [] [dependencies] sync15 = { path = "../sync15" } diff --git a/components/logins/src/db.rs b/components/logins/src/db.rs index a200a550484..5315d92bac4 100644 --- a/components/logins/src/db.rs +++ b/components/logins/src/db.rs @@ -614,8 +614,19 @@ impl LoginDb { ) -> Result>> { let tx = self.unchecked_transaction()?; let mut results = vec![]; - for entry_with_meta in entries_with_meta { - let guid = Guid::from_string(entry_with_meta.meta.id.clone()); + for mut entry_with_meta in entries_with_meta { + let guid = match Self::validate_or_fixup_guid(Guid::from_string( + entry_with_meta.meta.id.clone(), + )) { + Ok(guid) => guid, + Err(err) => { + results.push(Err(err)); + continue; + } + }; + // Keep `meta.id` in sync with the (possibly regenerated) guid; it is used + // as the stored/envelope id and when encrypting `sec_fields` below. + entry_with_meta.meta.id = guid.to_string(); match self.fixup_and_check_for_dupes(&guid, entry_with_meta.entry) { Ok(new_entry) => { let sec_fields = SecureLoginFields { @@ -649,6 +660,33 @@ impl LoginDb { Ok(results) } + /// Validates a caller-supplied guid from the "with meta" import path against the + /// sync server's rules (see `Guid::is_valid_for_sync_server`). A guid that is + /// invalid for the sync server can never have existed on the server, so + /// regenerating it loses no sync identity. + /// + /// With the `fixup_invalid_guids` feature (enabled on Desktop during migration), + /// an invalid guid is silently replaced with a fresh random one. Without it, an + /// invalid guid is rejected so the problem surfaces at write time instead of being + /// persisted and later crashing the sync uploader (bug 2056116). + fn validate_or_fixup_guid(guid: Guid) -> Result { + if guid.is_valid_for_sync_server() { + return Ok(guid); + } + #[cfg(feature = "fixup_invalid_guids")] + { + warn!("regenerating a login guid that is invalid for the sync server"); + Ok(Guid::random()) + } + #[cfg(not(feature = "fixup_invalid_guids"))] + { + Err(InvalidLogin::IllegalFieldValue { + field_info: "guid is not valid for the sync server".into(), + } + .into()) + } + } + pub fn add(&self, entry: LoginEntry) -> Result { let guid = Guid::random(); let now_ms = util::system_time_ms_i64(SystemTime::now()); @@ -1574,6 +1612,44 @@ mod tests { assert_eq!(fetched.meta, meta); } + #[test] + fn test_add_with_meta_invalid_guid() { + ensure_initialized(); + + let now_ms = util::system_time_ms_i64(SystemTime::now()); + // A guid containing a comma is invalid for the sync server. + let meta = LoginMeta { + id: "invalid,guid".to_string(), + time_created: now_ms, + time_password_changed: now_ms, + time_last_used: now_ms, + times_used: 1, + time_last_breach_alert_dismissed: None, + }; + let db = LoginDb::open_in_memory(); + let result = db.add_with_meta(LoginEntryWithMeta { + entry: LoginEntry { + origin: "https://www.example.com".into(), + http_realm: Some("https://www.example.com".into()), + username: "test".into(), + password: "sekret".into(), + ..LoginEntry::default() + }, + meta, + }); + + // Without the fixup feature the invalid guid is rejected; with it, the guid + // is regenerated to one that is valid for the sync server. + #[cfg(not(feature = "fixup_invalid_guids"))] + assert!(result.is_err()); + + #[cfg(feature = "fixup_invalid_guids")] + { + let login = result.expect("invalid guid should be repaired"); + assert!(Guid::new(&login.meta.id).is_valid_for_sync_server()); + } + } + #[test] fn test_add_with_meta_duplicate_id() { ensure_initialized();