changeset 2122:7e8c77ae401a

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
author rkennke
date Tue, 02 Feb 2010 16:38:26 +0100
parents 31ed4132f345
children cedd0cdd5b9a
files src/share/classes/sun/font/FontManagerFactory.java test/java/awt/PrintJob/Security/SecurityDialogTest.java test/java/awt/PrintJob/Security/policy
diffstat 3 files changed, 162 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/sun/font/FontManagerFactory.java	Thu Jan 28 11:26:54 2010 -0800
+++ b/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));
+        AccessController.doPrivileged(new PrivilegedAction() {
 
-        try {
-            @SuppressWarnings("unchecked")
-            ClassLoader cl = (ClassLoader)
-                AccessController.doPrivileged(new PrivilegedAction() {
-                    public Object run() {
-                        return ClassLoader.getSystemClassLoader();
-                    }
-                });
+            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;
 
-            @SuppressWarnings("unchecked")
-            Class fmClass = Class.forName(fmClassName, true, cl);
-            instance = (FontManager) fmClass.newInstance();
+                } catch (InstantiationException ex) {
+                    InternalError err = new InternalError();
+                    err.initCause(ex);
+                    throw err;
 
-        } 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 (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;
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/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");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/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 "<<ALL FILES>>", "read,write";
+ permission java.lang.RuntimePermission "queuePrintJob"; 
+ permission java.lang.RuntimePermission "setSecurityManager"; 
+};
+