# HG changeset patch # User rkennke # Date 1265125106 -3600 # Node ID 791405fa20ffc2132445a9dcfeae88bdc551fe01 # Parent 3b646750b2ac645d48970fa855c4c38cef58bc18 6888734: PIT: regression test fails when java.security.manager is enabled Summary: Load FontManager instance in privileged block to avoid AccessControlException Reviewed-by: igor, tdv diff -r 3b646750b2ac -r 791405fa20ff jdk/src/share/classes/sun/font/FontManagerFactory.java --- a/jdk/src/share/classes/sun/font/FontManagerFactory.java Thu Jan 28 11:26:54 2010 -0800 +++ b/jdk/src/share/classes/sun/font/FontManagerFactory.java Tue Feb 02 16:38:26 2010 +0100 @@ -68,38 +68,34 @@ return instance; } - String fmClassName = AccessController.doPrivileged( - new GetPropertyAction("sun.font.fontmanager", - DEFAULT_CLASS)); - - try { - @SuppressWarnings("unchecked") - ClassLoader cl = (ClassLoader) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - return ClassLoader.getSystemClassLoader(); - } - }); + AccessController.doPrivileged(new PrivilegedAction() { - @SuppressWarnings("unchecked") - Class fmClass = Class.forName(fmClassName, true, cl); - instance = (FontManager) fmClass.newInstance(); - - } catch (ClassNotFoundException ex) { - InternalError err = new InternalError(); - err.initCause(ex); - throw err; + public Object run() { + try { + String fmClassName = + System.getProperty("sun.font.fontmanager", + DEFAULT_CLASS); + ClassLoader cl = ClassLoader.getSystemClassLoader(); + Class fmClass = Class.forName(fmClassName, true, cl); + instance = (FontManager) fmClass.newInstance(); + } catch (ClassNotFoundException ex) { + InternalError err = new InternalError(); + err.initCause(ex); + throw err; - } catch (InstantiationException ex) { - InternalError err = new InternalError(); - err.initCause(ex); - throw err; + } catch (InstantiationException ex) { + InternalError err = new InternalError(); + err.initCause(ex); + throw err; - } catch (IllegalAccessException ex) { - InternalError err = new InternalError(); - err.initCause(ex); - throw err; - } + } catch (IllegalAccessException ex) { + InternalError err = new InternalError(); + err.initCause(ex); + throw err; + } + return null; + } + }); return instance; } diff -r 3b646750b2ac -r 791405fa20ff jdk/test/java/awt/PrintJob/Security/SecurityDialogTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/PrintJob/Security/SecurityDialogTest.java Tue Feb 02 16:38:26 2010 +0100 @@ -0,0 +1,105 @@ +/* + * Copyright 2010 Sun Microsystems, Inc. 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/** + * @test + * @bug 6195901 6195923 6195928 6195933 6491273 6888734 + * @summary No SecurityException should be thrown when printing to a file + using the given policy. + Print to file option should be selected. + * @run main/othervm/policy=policy SecurityDialogTest + */ +import java.awt.*; +import java.awt.event.*; +import java.util.*; +import java.io.*; + + +public class SecurityDialogTest extends Frame implements ActionListener { + // Declare things used in the test, like buttons and labels here + + Button nativeDlg, setSecurity; + boolean isNative = true; + + public SecurityDialogTest() { + + nativeDlg = new Button("Print Dialog"); + nativeDlg.addActionListener(this); + setSecurity = new Button("Toggle Dialog"); + setSecurity.addActionListener(this); + add("South", nativeDlg); + add("North", setSecurity); + setSize(300, 300); + setVisible(true); + } + + public static void main(String args[]) { + System.out.println("Native dialog is the default"); + SecurityDialogTest test = new SecurityDialogTest(); + } + + public void actionPerformed(ActionEvent e) { + + if (e.getSource() == setSecurity) { + if (isNative) { + isNative = false; + System.out.println("Common dialog is the default"); + + } else { + isNative = true; + System.out.println("Native dialog is the default"); + } + return; + } + + JobAttributes ja = new JobAttributes(); + PageAttributes pa = new PageAttributes(); + + if (isNative) { + ja.setDialog(JobAttributes.DialogType.NATIVE); + } else { + ja.setDialog(JobAttributes.DialogType.COMMON); + } + ja.setDestination(JobAttributes.DestinationType.FILE); + ja.setFileName("mohan.ps"); + + + PrintJob pjob = getToolkit().getPrintJob(this, null, ja, pa); + + if (pjob != null) { + Graphics pg = pjob.getGraphics(); + System.out.println("PJOB: " + pjob); + if (pg != null) { + System.out.println("Printer Graphics: " + pg); + this.printAll(pg); + pg.dispose(); + } else { + System.out.println("Printer Graphics is null"); + } + pjob.end(); + System.out.println("DONE"); + } else { + System.out.println("PJOB is null"); + } + } +} diff -r 3b646750b2ac -r 791405fa20ff jdk/test/java/awt/PrintJob/Security/policy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/PrintJob/Security/policy Tue Feb 02 16:38:26 2010 +0100 @@ -0,0 +1,32 @@ +/* + * Copyright 2010 Sun Microsystems, Inc. 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* AUTOMATICALLY GENERATED ON Thu Jan 03 15:48:39 PST 2002*/ +/* DO NOT EDIT */ + +grant { + permission java.io.FilePermission "<>", "read,write"; + permission java.lang.RuntimePermission "queuePrintJob"; + permission java.lang.RuntimePermission "setSecurityManager"; +}; +