Migration

Contents

From 9.2.0 to 9.3.0

In JxBrowser 9.3.0, SelectMediaDeviceCallback is now asynchronous to prevent potential EDT deadlocks. On macOS, the Chromium bundle ID has changed, which may cause one-time permission re-prompts after upgrading.

SelectMediaDeviceCallback is now asynchronous 

SelectMediaDeviceCallback now extends AsyncCallback instead of SyncCallback. The lambda signature changes from one parameter returning a Response to two parameters — params and action — returning void.

9.2.0 and earlier:

engine.mediaDevices().set(SelectMediaDeviceCallback.class, params -> {
    MediaDevice selected = chooseDevice(params.mediaDevices());
    return SelectMediaDeviceCallback.Response.select(selected);
});

9.3.0:

engine.mediaDevices().set(SelectMediaDeviceCallback.class, (params, action) -> {
    MediaDevice selected = chooseDevice(params.mediaDevices());
    action.select(selected);
});

The proceed() and cancel() responses follow the same pattern:

9.2.0 and earlier:

engine.mediaDevices().set(SelectMediaDeviceCallback.class,
        params -> SelectMediaDeviceCallback.Response.cancel());

9.3.0:

engine.mediaDevices().set(SelectMediaDeviceCallback.class,
        (params, action) -> action.cancel());

Chromium bundle ID changed on macOS 

The Chromium bundle ID changed from org.chromium.Chromium to com.teamdev.JxBrowser. Because macOS identifies applications by their bundle ID, it treats the updated build as a new application on first launch.

As a result, any macOS permission previously granted to your application — such as camera, microphone, screen recording, notifications, or accessibility access — may be re-requested. Grant them once, and normal operation resumes.

Applications or enterprise policies that reference org.chromium.Chromium by bundle ID must be updated to use com.teamdev.JxBrowser.