RFR: 8326712: Robot tests fail on XWayland [v3]
Kevin Rushforth
kcr at openjdk.org
Tue Jul 2 19:49:25 UTC 2024
On Tue, 2 Jul 2024 13:07:55 GMT, Alexander Zvegintsev <azvegint at 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).
> ...
>
> Alexander Zvegintsev has updated the pull request incrementally with one additional commit since the last revision:
>
> fix the SwingNodeJDialogTest.testNodeRemovalBeforeShow test failure
Testing is complete. No new issues. I only see the `SwingNodeJDialogTest` failure.
I did leave one minor naming comment and will reapprove if you make the suggested change.
modules/javafx.graphics/src/main/java/com/sun/glass/ui/gtk/screencast/TokenStorage.java line 68:
> 66:
> 67: private static final String REL_NAME =
> 68: ".java/.robot/screencast-tokens.properties";
I recommend changing `.robot` to `robot` (without the dot) to match AWT. The parent dir already starts with `.` so no need to hide subdirectories.
-------------
Marked as reviewed by kcr (Lead).
PR Review: https://git.openjdk.org/jfx/pull/1490#pullrequestreview-2154214895
PR Review Comment: https://git.openjdk.org/jfx/pull/1490#discussion_r1662763222
More information about the openjfx-dev
mailing list