1/*
2 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 * @test
26 * @key headful
27 * @bug 8051626
28 * @summary Ensure no failure when using Java Accessibility Utility with security manager
29 * @modules java.desktop jdk.accessibility
30 *
31 * @run main/othervm Bug8051626
32 */
33
34import com.sun.java.accessibility.util.AWTEventMonitor;
35import java.awt.Dimension;
36import java.lang.reflect.InvocationTargetException;
37import javax.swing.JButton;
38import javax.swing.JFrame;
39import javax.swing.JPanel;
40import javax.swing.SwingUtilities;
41
42public class Bug8051626 {
43
44    public static void main(final String[] args) throws InterruptedException,
45                                                        InvocationTargetException {
46            final Bug8051626 app = new Bug8051626();
47            app.test();
48        }
49
50    private void test() throws InterruptedException, InvocationTargetException {
51        System.setSecurityManager(new SecurityManager());
52        SwingUtilities.invokeAndWait(new Runnable() {
53            @Override
54            public void run() {
55                final JFrame frame = new JFrame("Bug 8051626");
56                try {
57                    final JPanel panel = new JPanel();
58                    final JButton okButton = new JButton("OK");
59                    panel.add(okButton);
60                    frame.getContentPane().add(panel);
61                    frame.setMinimumSize(new Dimension(300, 180));
62                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
63                    frame.pack();
64                    frame.setLocation(400, 300);
65                    frame.setVisible(true);
66                    // If the security manager is on this should not cause an exception.
67                    // Prior to the 8051626 fix it would as follows:
68                    // java.security.AccessControlException:
69                    //   access denied ("java.lang.RuntimePermission" "accessClassInPackage.com.sun.java.accessibility.util")
70                    AWTEventMonitor.getComponentWithFocus();
71                } finally {
72                    frame.dispose();
73                }
74            }
75        });
76    }
77
78}
79