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. https://bugs.openjdk.org/browse/JDK-8335468
> 
> 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. https://bugs.openjdk.org/browse/JDK-8335470
> 
> Even after solving the `#1`, the 
> `SwingNodeJDialogTest.testNodeRemovalBeforeShow` case is still failing.
> 
> 3. https://bugs.openjdk.org/browse/JDK-8335469
> 
> 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...

This pull request has now been integrated.

Changeset: 459b15fc
Author:    Alexander Zvegintsev <azveg...@openjdk.org>
URL:       
https://git.openjdk.org/jfx/commit/459b15fc61e7a78f29c16fe665370657c1236b3f
Stats:     14865 lines in 104 files changed: 14852 ins; 0 del; 13 mod

8326712: Robot tests fail on XWayland

Reviewed-by: kcr, prr, sykora

-------------

PR: https://git.openjdk.org/jfx/pull/1490

Reply via email to