On Wed, 26 Jun 2024 11:25:37 GMT, Alexander Zvegintsev <azveg...@openjdk.org> wrote:
> Most of the headful test failures on XWayland are due to screen capture is > not working. > > Wayland, unlike X11, does not allow arbitrary applications to capture the > screen contents directly. > Instead, screen capture functionality is managed by the compositor, which can > enforce stricter controls and permissions, requiring explicit user approval > for screen capture operations. > > This issue is already resolved in OpenJDK ([base > issue](https://bugs.openjdk.org/browse/JDK-8280982), there are subsequent > fixes) by using the [ScreenCast XDG > portal](https://flatpak.github.io/xdg-desktop-portal/docs/doc-org.freedesktop.portal.ScreenCast.html). > > The XDG ScreenCast portal is utilized for capturing screen data as it > provides a secure and standardized method for applications to access screen > content. > Additionally, it allows for the reuse of user permissions without requiring > repeated confirmations, streamlining the user experience and enhancing > convenience. > > > <hr> > > So this changeset is a copy of the OpenJDK fixes with the addition of the > JavaFX customization. > For ease of review, you can skip the changes in the first two commits: > - First commit is a direct copy of files from OpenJDK > - Second commit removes the `gtk-` prefix before the `gtk_...` and `g_...` > function calls (in AWT all gtk functions are dynamically loaded, we don't > need that in JavaFX). > > properties added: > > - `javafx.robot.screenshotMethod`, accepts `gtk`(existing gtk method) and > `dbusScreencast`(added by this changeset, used by default for Wayland) > - `javafx.robot.screenshotDebug` prints debug info if it is set to `true` > > <hr> > > What are the remaining issues? > > 1. > > After applying this fix, system tests will pass except for the > `SwingNodeJDialogTest` test. > > This interop test calls `java.awt.Robot#getPixelColor` which internally > `gtk->g_main_context_iteration(NULL, TRUE);` causes a blocking of javafx gtk > loop, so the test hangs. > So a change is required on OpenJDK side to fix this issue. > > 2. > > Even after solving the `#1`, the > `SwingNodeJDialogTest.testNodeRemovalBeforeShow` case is still failing. > > 3. > > Internally the ScreenCast session keeps open for > [2s](https://github.com/openjdk/jdk/blob/d457609f700bbb1fed233f1a04501c995852e5ac/src/java.desktop/unix/classes/sun/awt/screencast/ScreencastHelper.java#L62). > This is to reduce overhead in case of frequent consecutive screen captures. > > There is a crash when an AWT ScreenCast session overlaps with the FX > ScreenCast session. E.g. `java.awt.Robot#getPixelColor()` and `jav... modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/screencast/ScreencastHelper.java line 70: > 68: AccessController.doPrivileged((PrivilegedAction<Boolean>) > () -> { > 69: final String str = > 70: > System.getProperty("fx.robot.screenshotDebug", "false"); fx - > javafx modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/screencast/TokenStorage.java line 69: > 67: > 68: private static final String REL_NAME = > 69: ".fx/robot/screencast-tokens.properties"; should be .javafx However I think we can try to READ .awt (and .java) first and if it exists try to use that. Perhaps WRITE .javafx ? If we don't understand what is at .awt or .java then we would then READ .javafx and if it is not there or doesn't work CREATE .javafx The overall intent is that if a user authorised Java for AWT then we don't need to re-ask them for FX so long as we can parse what is there and it works modules/javafx.graphics/src/main/native-glass/gtk/fp_pipewire.h line 26: > 24: */ > 25: > 26: #ifdef HEADLESS There is no HEADLESS build for JavaFX. I see the same ifdef in other C files in this PR. I guess its harmless so I'll let Kevin decide what we should do tests/system/src/test/java/test/robot/javafx/embed/swing/SwingNodeJDialogTest.java line 37: > 35: public class SwingNodeJDialogTest extends SwingNodeBase { > 36: > 37: @Test(timeout = 15000) Is this in milliseconds ? ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/1490#discussion_r1655461505 PR Review Comment: https://git.openjdk.org/jfx/pull/1490#discussion_r1655467715 PR Review Comment: https://git.openjdk.org/jfx/pull/1490#discussion_r1655452918 PR Review Comment: https://git.openjdk.org/jfx/pull/1490#discussion_r1655458869