Skip to content

Commit

Permalink
Merge master jdk-17.0.11+6 into openj9-staging
Browse files Browse the repository at this point in the history
Signed-off-by: J9 Build <j9build@ca.ibm.com>
  • Loading branch information
j9build committed Mar 7, 2024
2 parents 1ee356f + bc73790 commit eee10fb
Show file tree
Hide file tree
Showing 34 changed files with 483 additions and 243 deletions.
72 changes: 71 additions & 1 deletion src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2004, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand All @@ -26,8 +26,12 @@

import java.awt.RenderingHints;
import static java.awt.RenderingHints.*;
import static java.util.concurrent.TimeUnit.SECONDS;
import java.awt.color.ColorSpace;
import java.awt.image.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.AccessController;
import java.security.PrivilegedAction;

Expand Down Expand Up @@ -214,6 +218,72 @@ protected Object lazilyLoadGTKIcon(String longname) {
return img;
}

private static volatile Boolean shouldDisableSystemTray = null;

/**
* There is an issue displaying the xembed icons in appIndicators
* area with certain Gnome Shell versions.
* To avoid any loss of quality of service, we are disabling
* SystemTray support in such cases.
*
* @return true if system tray should be disabled
*/
public boolean shouldDisableSystemTray() {
Boolean result = shouldDisableSystemTray;
if (result == null) {
synchronized (GTK_LOCK) {
result = shouldDisableSystemTray;
if (result == null) {
if ("gnome".equals(getDesktop())) {
@SuppressWarnings("removal")
Integer gnomeShellMajorVersion =
AccessController
.doPrivileged((PrivilegedAction<Integer>)
this::getGnomeShellMajorVersion);

if (gnomeShellMajorVersion == null
|| gnomeShellMajorVersion < 45) {

return shouldDisableSystemTray = true;
}
}
shouldDisableSystemTray = result = false;
}
}
}
return result;
}

private Integer getGnomeShellMajorVersion() {
try {
Process process =
new ProcessBuilder("/usr/bin/gnome-shell", "--version")
.start();
try (InputStreamReader isr = new InputStreamReader(process.getInputStream());
BufferedReader reader = new BufferedReader(isr)) {

if (process.waitFor(2, SECONDS) && process.exitValue() == 0) {
String line = reader.readLine();
if (line != null) {
String[] versionComponents = line
.replaceAll("[^\\d.]", "")
.split("\\.");

if (versionComponents.length >= 1) {
return Integer.parseInt(versionComponents[0]);
}
}
}
}
} catch (IOException
| InterruptedException
| IllegalThreadStateException
| NumberFormatException ignored) {
}

return null;
}

/**
* Returns a BufferedImage which contains the Gtk icon requested. If no
* such icon exists or an error occurs loading the icon the result will
Expand Down
27 changes: 21 additions & 6 deletions src/java.desktop/unix/classes/sun/awt/X11/XSystemTrayPeer.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -30,6 +30,7 @@
import sun.awt.SunToolkit;
import sun.awt.AppContext;
import sun.awt.AWTAccessor;
import sun.awt.UNIXToolkit;
import sun.util.logging.PlatformLogger;

public class XSystemTrayPeer implements SystemTrayPeer, XMSelectionListener {
Expand All @@ -48,22 +49,32 @@ public class XSystemTrayPeer implements SystemTrayPeer, XMSelectionListener {
private static final XAtom _NET_SYSTEM_TRAY_OPCODE = XAtom.get("_NET_SYSTEM_TRAY_OPCODE");
private static final XAtom _NET_WM_ICON = XAtom.get("_NET_WM_ICON");
private static final long SYSTEM_TRAY_REQUEST_DOCK = 0;
private final boolean shouldDisableSystemTray;

XSystemTrayPeer(SystemTray target) {
this.target = target;
peerInstance = this;

selection.addSelectionListener(this);
UNIXToolkit tk = (UNIXToolkit)Toolkit.getDefaultToolkit();
shouldDisableSystemTray = tk.shouldDisableSystemTray();

long selection_owner = selection.getOwner(SCREEN);
available = (selection_owner != XConstants.None);
if (!shouldDisableSystemTray) {
selection.addSelectionListener(this);

if (log.isLoggable(PlatformLogger.Level.FINE)) {
log.fine(" check if system tray is available. selection owner: " + selection_owner);
long selection_owner = selection.getOwner(SCREEN);
available = (selection_owner != XConstants.None);

if (log.isLoggable(PlatformLogger.Level.FINE)) {
log.fine(" check if system tray is available. selection owner: " + selection_owner);
}
}
}

public void ownerChanged(int screen, XMSelection sel, long newOwner, long data, long timestamp) {
if (shouldDisableSystemTray) {
return;
}

if (screen != SCREEN) {
return;
}
Expand All @@ -77,6 +88,10 @@ public void ownerChanged(int screen, XMSelection sel, long newOwner, long data,
}

public void ownerDeath(int screen, XMSelection sel, long deadOwner) {
if (shouldDisableSystemTray) {
return;
}

if (screen != SCREEN) {
return;
}
Expand Down
44 changes: 23 additions & 21 deletions test/jdk/java/net/httpclient/AsFileDownloadTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,6 @@
* questions.
*/

/*
* @test
* @summary Basic test for ofFileDownload
* @bug 8196965 8302475
* @modules java.base/sun.net.www.http
* java.net.http/jdk.internal.net.http.common
* java.net.http/jdk.internal.net.http.frame
* java.net.http/jdk.internal.net.http.hpack
* java.logging
* jdk.httpserver
* @library /test/lib http2/server
* @build Http2TestServer
* @build jdk.test.lib.net.SimpleSSLContext
* @build jdk.test.lib.Platform
* @build jdk.test.lib.util.FileUtils
* @run testng/othervm AsFileDownloadTest
* @run testng/othervm/java.security.policy=AsFileDownloadTest.policy AsFileDownloadTest
*/

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
Expand Down Expand Up @@ -81,6 +62,25 @@
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;

/*
* @test
* @summary Basic test for ofFileDownload
* @bug 8196965 8302475
* @modules java.base/sun.net.www.http
* java.net.http/jdk.internal.net.http.common
* java.net.http/jdk.internal.net.http.frame
* java.net.http/jdk.internal.net.http.hpack
* java.logging
* jdk.httpserver
* @library /test/lib http2/server
* @build Http2TestServer
* @build jdk.test.lib.net.SimpleSSLContext
* @build jdk.test.lib.Platform
* @build jdk.test.lib.util.FileUtils
* @run testng/othervm AsFileDownloadTest
* @run testng/othervm/java.security.policy=AsFileDownloadTest.policy AsFileDownloadTest
*/

public class AsFileDownloadTest {

SSLContext sslContext;
Expand Down Expand Up @@ -267,8 +267,10 @@ void negativeTest(String uriString, String contentDispositionValue)
// -- Infrastructure

static String serverAuthority(HttpServer server) {
return InetAddress.getLoopbackAddress().getHostName() + ":"
+ server.getAddress().getPort();
final String hostIP = InetAddress.getLoopbackAddress().getHostAddress();
// escape for ipv6
final String h = hostIP.contains(":") ? "[" + hostIP + "]" : hostIP;
return h + ":" + server.getAddress().getPort();
}

@BeforeTest
Expand Down
19 changes: 13 additions & 6 deletions test/jdk/java/net/httpclient/AsFileDownloadTest.policy
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,24 @@ grant codeBase "file:${test.classes}/../../../../java/net/httpclient/http2/serve
permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.net.http.hpack";
permission java.lang.RuntimePermission "accessClassInPackage.sun.net.www.http";

permission java.net.SocketPermission "localhost:*", "accept,resolve";
permission java.net.SocketPermission "127.0.0.1:*", "accept,resolve";
permission java.net.SocketPermission "[::1]:*", "accept,resolve";
permission java.lang.RuntimePermission "modifyThread";
};

grant codeBase "file:${test.classes}/*" {
permission java.io.FilePermission "${user.dir}${/}asFileDownloadTest.tmp.dir", "read,write";
permission java.io.FilePermission "${user.dir}${/}asFileDownloadTest.tmp.dir/-", "read,write";

permission java.net.URLPermission "http://localhost:*/http1/afdt", "POST";
permission java.net.URLPermission "https://localhost:*/https1/afdt", "POST";
permission java.net.URLPermission "http://localhost:*/http2/afdt", "POST";
permission java.net.URLPermission "https://localhost:*/https2/afdt", "POST";
permission java.net.URLPermission "http://127.0.0.1:*/http1/afdt", "POST";
permission java.net.URLPermission "https://127.0.0.1:*/https1/afdt", "POST";
permission java.net.URLPermission "http://127.0.0.1:*/http2/afdt", "POST";
permission java.net.URLPermission "https://127.0.0.1:*/https2/afdt", "POST";
// ipv6
permission java.net.URLPermission "http://[::1]:*/http1/afdt", "POST";
permission java.net.URLPermission "https://[::1]:*/https1/afdt", "POST";
permission java.net.URLPermission "http://[::1]:*/http2/afdt", "POST";
permission java.net.URLPermission "https://[::1]:*/https2/afdt", "POST";


// needed to grant permission to the HTTP/2 server
Expand All @@ -58,7 +64,8 @@ grant codeBase "file:${test.classes}/*" {
permission java.util.logging.LoggingPermission "control";

// needed to grant the HTTP servers
permission java.net.SocketPermission "localhost:*", "accept,resolve";
permission java.net.SocketPermission "127.0.0.1:*", "accept,resolve";
permission java.net.SocketPermission "[::1]:*", "accept,resolve";

permission java.util.PropertyPermission "*", "read";
permission java.lang.RuntimePermission "modifyThread";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,29 @@ grant codeBase "file:${test.classes}/../../../../../java/net/httpclient/http2/se
permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.net.http.hpack";
permission java.lang.RuntimePermission "accessClassInPackage.sun.net.www.http";

permission java.net.SocketPermission "localhost:*", "accept,resolve";
permission java.net.SocketPermission "127.0.0.1:*", "accept,resolve";
permission java.net.SocketPermission "[::1]:*", "accept,resolve";
permission java.lang.RuntimePermission "modifyThread";
};

grant codeBase "file:${test.classes}/*" {
permission java.net.URLPermission "http://localhost:*/http1/echo", "POST";
permission java.net.URLPermission "https://localhost:*/https1/echo", "POST";
permission java.net.URLPermission "http://localhost:*/http2/echo", "POST";
permission java.net.URLPermission "https://localhost:*/https2/echo", "POST";
permission java.net.URLPermission "https://localhost:*/http1/echo", "GET";
permission java.net.URLPermission "https://localhost:*/https1/echo", "GET";
permission java.net.URLPermission "http://localhost:*/http2/echo", "GET";
permission java.net.URLPermission "https://localhost:*/https2/echo", "GET";
permission java.net.URLPermission "http://127.0.0.1:*/http1/echo", "POST";
permission java.net.URLPermission "https://127.0.0.1:*/https1/echo", "POST";
permission java.net.URLPermission "http://127.0.0.1:*/http2/echo", "POST";
permission java.net.URLPermission "https://127.0.0.1:*/https2/echo", "POST";
permission java.net.URLPermission "https://127.0.0.1:*/http1/echo", "GET";
permission java.net.URLPermission "https://127.0.0.1:*/https1/echo", "GET";
permission java.net.URLPermission "http://127.0.0.1:*/http2/echo", "GET";
permission java.net.URLPermission "https://127.0.0.1:*/https2/echo", "GET";
// ipv6
permission java.net.URLPermission "http://[::1]:*/http1/echo", "POST";
permission java.net.URLPermission "https://[::1]:*/https1/echo", "POST";
permission java.net.URLPermission "http://[::1]:*/http2/echo", "POST";
permission java.net.URLPermission "https://[::1]:*/https2/echo", "POST";
permission java.net.URLPermission "https://[::1]:*/http1/echo", "GET";
permission java.net.URLPermission "https://[::1]:*/https1/echo", "GET";
permission java.net.URLPermission "http://[::1]:*/http2/echo", "GET";
permission java.net.URLPermission "https://[::1]:*/https2/echo", "GET";

// file permissions
permission java.io.FilePermission "${user.dir}${/}defaultFile.txt", "read,write,delete";
Expand All @@ -69,7 +79,8 @@ grant codeBase "file:${test.classes}/*" {
permission java.util.logging.LoggingPermission "control";

// needed to grant the HTTP servers
permission java.net.SocketPermission "localhost:*", "accept,resolve";
permission java.net.SocketPermission "127.0.0.1:*", "accept,resolve";
permission java.net.SocketPermission "[::1]:*", "accept,resolve";

permission java.util.PropertyPermission "*", "read";
permission java.lang.RuntimePermission "modifyThread";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,19 +36,29 @@ grant codeBase "file:${test.classes}/../../../../../java/net/httpclient/http2/se
permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.net.http.hpack";
permission java.lang.RuntimePermission "accessClassInPackage.sun.net.www.http";

permission java.net.SocketPermission "localhost:*", "accept,resolve";
permission java.net.SocketPermission "127.0.0.1:*", "accept,resolve";
permission java.net.SocketPermission "[::1]:*", "accept,resolve";
permission java.lang.RuntimePermission "modifyThread";
};

grant codeBase "file:${test.classes}/*" {
permission java.net.URLPermission "http://localhost:*/http1/echo", "POST";
permission java.net.URLPermission "https://localhost:*/https1/echo", "POST";
permission java.net.URLPermission "http://localhost:*/http2/echo", "POST";
permission java.net.URLPermission "https://localhost:*/https2/echo", "POST";
permission java.net.URLPermission "https://localhost:*/http1/echo", "GET";
permission java.net.URLPermission "https://localhost:*/https1/echo", "GET";
permission java.net.URLPermission "http://localhost:*/http2/echo", "GET";
permission java.net.URLPermission "https://localhost:*/https2/echo", "GET";
permission java.net.URLPermission "http://127.0.0.1:*/http1/echo", "POST";
permission java.net.URLPermission "https://127.0.0.1:*/https1/echo", "POST";
permission java.net.URLPermission "http://127.0.0.1:*/http2/echo", "POST";
permission java.net.URLPermission "https://127.0.0.1:*/https2/echo", "POST";
permission java.net.URLPermission "https://127.0.0.1:*/http1/echo", "GET";
permission java.net.URLPermission "https://127.0.0.1:*/https1/echo", "GET";
permission java.net.URLPermission "http://127.0.0.1:*/http2/echo", "GET";
permission java.net.URLPermission "https://127.0.0.1:*/https2/echo", "GET";
// ipv6
permission java.net.URLPermission "http://[::1]:*/http1/echo", "POST";
permission java.net.URLPermission "https://[::1]:*/https1/echo", "POST";
permission java.net.URLPermission "http://[::1]:*/http2/echo", "POST";
permission java.net.URLPermission "https://[::1]:*/https2/echo", "POST";
permission java.net.URLPermission "https://[::1]:*/http1/echo", "GET";
permission java.net.URLPermission "https://[::1]:*/https1/echo", "GET";
permission java.net.URLPermission "http://[::1]:*/http2/echo", "GET";
permission java.net.URLPermission "https://[::1]:*/https2/echo", "GET";

// file permissions
permission java.io.FilePermission "${user.dir}${/}defaultFile.txt", "read,write,delete";
Expand All @@ -74,7 +84,8 @@ grant codeBase "file:${test.classes}/*" {
permission java.util.logging.LoggingPermission "control";

// needed to grant the HTTP servers
permission java.net.SocketPermission "localhost:*", "accept,resolve";
permission java.net.SocketPermission "127.0.0.1:*", "accept,resolve";
permission java.net.SocketPermission "[::1]:*", "accept,resolve";

permission java.util.PropertyPermission "*", "read";
permission java.lang.RuntimePermission "modifyThread";
Expand Down
Loading

0 comments on commit eee10fb

Please sign in to comment.