A new component was added for customizing how our Rust logging is handled. It allows Android code to get a callback whenever a log is emitted from Rust (Most users will not need to use this directly, but instead will consume it via the forthcoming helper that hooks it directly into android-components Log system in android-components PR #1765). (#472)
The gradle megazord plugin updated to version 0.3.0, in support of the logging library. Please update when you update your version of android-components. (#472)
In most cases, opaque integer handles are now used to pass data over the FFI (#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 paniced (which should only occur due to bugs anyway). If this occurs, all subsequent operations on that object (except
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.
Build settings were changed to reduce binary size of Android
.soby around 200kB (per library). (#567)
Rust was updated to 1.32.0, which means we no longer use jemalloc as our allocator. This should reduce binary size some, but at the cost of some performance. (No bug as this happens automatically as part of CI, see the rust-lang release notes for more details).
- Megazord builds will no longer log anything by default. Logging must be enabled as described "What's New". (#472)
- PlacesConnection.getVisited will now return that invalid URLs have not been visited, instead of throwing. (#552)
- PlacesConnection.noteObservation will correctly identify url parse failures as such. (#571)
- PlacesConnections not utilizing encryption will not make calls to mlock/munlock on every allocation/free. This improves performance up to 6x on some machines. (#563)
- PlacesConnections now use WAL mode. (#555)
Some APIs which are semantically internal (but exposed for various reasons) have changed.
- Android: Some
org.mozilla.fxaclient.internal.RustObjecthave been changed (
destroynow takes a
Long, as it is an opaque integer handle). This object should not be considered part of the public API of FxA, but it is still available. Users using it are recommended not to do so. (#567)
- iOS: The type
RustOpaquePointerwas replaced by
RustHandle, which is a
RustPointer<UInt64>. While these are technically part of the public API, they may be removed in the future and users are discouraged from using them. (#567)