--- old/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java 2018-08-06 15:44:28.000000000 -0700 +++ new/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java 2018-08-06 15:44:28.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2018, 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 @@ -25,11 +25,44 @@ package sun.lwawt.macosx; -import com.apple.laf.AquaMenuBarUI; -import java.awt.peer.TaskbarPeer; -import java.awt.*; +import java.awt.AWTError; +import java.awt.CheckboxMenuItem; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Desktop; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Event; +import java.awt.EventQueue; +import java.awt.FileDialog; +import java.awt.Frame; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.awt.HeadlessException; +import java.awt.Image; +import java.awt.Insets; +import java.awt.Menu; +import java.awt.MenuBar; +import java.awt.MenuItem; +import java.awt.Point; +import java.awt.PopupMenu; +import java.awt.RenderingHints; +import java.awt.Robot; +import java.awt.SystemTray; +import java.awt.Taskbar; +import java.awt.Toolkit; +import java.awt.TrayIcon; +import java.awt.Window; import java.awt.datatransfer.Clipboard; -import java.awt.dnd.*; +import java.awt.dnd.DragGestureEvent; +import java.awt.dnd.DragGestureListener; +import java.awt.dnd.DragGestureRecognizer; +import java.awt.dnd.DragSource; +import java.awt.dnd.DropTarget; +import java.awt.dnd.InvalidDnDOperationException; +import java.awt.dnd.MouseDragGestureRecognizer; import java.awt.dnd.peer.DragSourceContextPeer; import java.awt.event.InputEvent; import java.awt.event.InvocationEvent; @@ -37,21 +70,54 @@ import java.awt.font.TextAttribute; import java.awt.im.InputMethodHighlight; import java.awt.im.spi.InputMethodDescriptor; -import java.awt.peer.*; -import java.lang.reflect.*; +import java.awt.peer.CheckboxMenuItemPeer; +import java.awt.peer.DesktopPeer; +import java.awt.peer.DialogPeer; +import java.awt.peer.FileDialogPeer; +import java.awt.peer.FontPeer; +import java.awt.peer.MenuBarPeer; +import java.awt.peer.MenuItemPeer; +import java.awt.peer.MenuPeer; +import java.awt.peer.PopupMenuPeer; +import java.awt.peer.RobotPeer; +import java.awt.peer.SystemTrayPeer; +import java.awt.peer.TaskbarPeer; +import java.awt.peer.TrayIconPeer; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.UndeclaredThrowableException; +import java.net.MalformedURLException; import java.net.URL; -import java.security.*; -import java.util.*; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.Objects; +import java.util.ResourceBundle; import java.util.concurrent.Callable; -import java.net.MalformedURLException; + import javax.swing.UIManager; -import sun.awt.*; +import com.apple.laf.AquaMenuBarUI; +import sun.awt.AWTAccessor; +import sun.awt.AppContext; +import sun.awt.CGraphicsConfig; +import sun.awt.CGraphicsDevice; +import sun.awt.LightweightFrame; +import sun.awt.SunToolkit; import sun.awt.datatransfer.DataTransferer; import sun.awt.util.ThreadGroupUtils; import sun.java2d.opengl.OGLRenderQueue; -import sun.lwawt.*; +import sun.lwawt.LWComponentPeer; +import sun.lwawt.LWCursorManager; +import sun.lwawt.LWToolkit; +import sun.lwawt.LWWindowPeer; import sun.lwawt.LWWindowPeer.PeerType; +import sun.lwawt.PlatformComponent; +import sun.lwawt.PlatformDropTarget; +import sun.lwawt.PlatformWindow; +import sun.lwawt.SecurityWarningWindow; import sun.security.action.GetBooleanAction; @SuppressWarnings("serial") // JDK implementation class @@ -97,6 +163,10 @@ } }); + if (!GraphicsEnvironment.isHeadless() && !isInAquaSession()) { + throw new AWTError("WindowServer is not available"); + } + AWTAccessor.getToolkitAccessor().setPlatformResources(platformResources); if (!GraphicsEnvironment.isHeadless()) { @@ -794,6 +864,13 @@ */ public static native boolean isEmbedded(); + /** + * Returns true if the WindowServer is available, false otherwise. + * + * @return true if the WindowServer is available, false otherwise + */ + private static native boolean isInAquaSession(); + /* * Activates application ignoring other apps. */ --- old/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m 2018-08-06 15:44:30.000000000 -0700 +++ new/src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m 2018-08-06 15:44:29.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2018, 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 @@ -84,7 +84,7 @@ if ([event type] != NSScrollWheel) { return 0; } - + if ([event phase]) { // process a phase of manual scrolling switch ([event phase]) { @@ -804,3 +804,30 @@ return isEmbedded ? JNI_TRUE : JNI_FALSE; } +/* + * Class: sun_lwawt_macosx_LWCToolkit + * Method: isInAquaSession + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL +Java_sun_lwawt_macosx_LWCToolkit_isInAquaSession +(JNIEnv *env, jclass klass) { + // copied from java.base/macosx/native/libjava/java_props_macosx.c + // environment variable to bypass the aqua session check + char *ev = getenv("AWT_FORCE_HEADFUL"); + if (ev && (strncasecmp(ev, "true", 4) == 0)) { + // if "true" then tell the caller we're in an Aqua session without + // actually checking + return JNI_TRUE; + } + // Is the WindowServer available? + SecuritySessionId session_id; + SessionAttributeBits session_info; + OSStatus status = SessionGetInfo(callerSecuritySession, &session_id, &session_info); + if (status == noErr) { + if (session_info & sessionHasGraphicAccess) { + return JNI_TRUE; + } + } + return JNI_FALSE; +} --- old/test/jdk/javax/swing/reliability/HangDuringStaticInitialization.java 2018-08-06 15:44:31.000000000 -0700 +++ new/test/jdk/javax/swing/reliability/HangDuringStaticInitialization.java 2018-08-06 15:44:31.000000000 -0700 @@ -32,7 +32,7 @@ /** * @test - * @bug 8189604 + * @bug 8189604 8208702 * @run main/othervm -Djava.awt.headless=false HangDuringStaticInitialization * @run main/othervm -Djava.awt.headless=true HangDuringStaticInitialization */ @@ -63,4 +63,4 @@ } }); } -} \ No newline at end of file +}