aboutsummaryrefslogtreecommitdiffstats
path: root/plugin/icedteanp/java/netscape
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/icedteanp/java/netscape')
-rw-r--r--plugin/icedteanp/java/netscape/javascript/JSException.java140
-rw-r--r--plugin/icedteanp/java/netscape/javascript/JSObject.java297
-rw-r--r--plugin/icedteanp/java/netscape/javascript/JSObjectCreatePermission.java47
-rw-r--r--plugin/icedteanp/java/netscape/javascript/JSProxy.java58
-rw-r--r--plugin/icedteanp/java/netscape/javascript/JSRunnable.java72
-rw-r--r--plugin/icedteanp/java/netscape/javascript/JSUtil.java59
-rw-r--r--plugin/icedteanp/java/netscape/security/ForbiddenTargetException.java52
7 files changed, 725 insertions, 0 deletions
diff --git a/plugin/icedteanp/java/netscape/javascript/JSException.java b/plugin/icedteanp/java/netscape/javascript/JSException.java
new file mode 100644
index 0000000..96ba310
--- /dev/null
+++ b/plugin/icedteanp/java/netscape/javascript/JSException.java
@@ -0,0 +1,140 @@
+/* -*- Mode: Java; tab-width: 8; c-basic-offset: 4 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released
+ * March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+package netscape.javascript;
+
+/**
+ * JSException is an exception which is thrown when JavaScript code
+ * returns an error.
+ */
+
+public
+class JSException extends RuntimeException {
+ public static final int EXCEPTION_TYPE_EMPTY = -1;
+ public static final int EXCEPTION_TYPE_VOID = 0;
+ public static final int EXCEPTION_TYPE_OBJECT = 1;
+ public static final int EXCEPTION_TYPE_FUNCTION = 2;
+ public static final int EXCEPTION_TYPE_STRING = 3;
+ public static final int EXCEPTION_TYPE_NUMBER = 4;
+ public static final int EXCEPTION_TYPE_BOOLEAN = 5;
+ public static final int EXCEPTION_TYPE_ERROR = 6;
+
+ public String filename;
+ public int lineno;
+ public String source;
+ public int tokenIndex;
+ public int wrappedExceptionType;
+ public Object wrappedException;
+
+ /**
+ * Constructs a JSException without a detail message.
+ * A detail message is a String that describes this particular exception.
+ *
+ * @deprecated Not for public use in future versions.
+ */
+ public JSException() {
+ super();
+ filename = "unknown";
+ lineno = 0;
+ source = "";
+ tokenIndex = 0;
+ wrappedExceptionType = EXCEPTION_TYPE_EMPTY;
+ }
+
+ /**
+ * Constructs a JSException with a detail message.
+ * A detail message is a String that describes this particular exception.
+ * @param s the detail message
+ *
+ * @deprecated Not for public use in future versions.
+ */
+ public JSException(String s) {
+ super(s);
+ filename = "unknown";
+ lineno = 0;
+ source = "";
+ tokenIndex = 0;
+ wrappedExceptionType = EXCEPTION_TYPE_EMPTY;
+ }
+
+ /**
+ * Constructs a JSException with a wrapped JavaScript exception object.
+ * This constructor needs to be public so that Java users can throw
+ * exceptions to JS cleanly.
+ */
+ public JSException(int wrappedExceptionType, Object wrappedException) {
+ super();
+ this.wrappedExceptionType = wrappedExceptionType;
+ this.wrappedException = wrappedException;
+ }
+
+ /**
+ * Constructs a JSException with a detail message and all the
+ * other info that usually comes with a JavaScript error.
+ * @param s the detail message
+ *
+ * @deprecated Not for public use in future versions.
+ */
+ public JSException(String s, String filename, int lineno,
+ String source, int tokenIndex) {
+ super(s);
+ this.filename = filename;
+ this.lineno = lineno;
+ this.source = source;
+ this.tokenIndex = tokenIndex;
+ wrappedExceptionType = EXCEPTION_TYPE_EMPTY;
+ }
+
+ /**
+ * Instance method getWrappedExceptionType returns the int mapping of the
+ * type of the wrappedException Object.
+ */
+ public int getWrappedExceptionType() {
+ return wrappedExceptionType;
+ }
+
+ /**
+ * Instance method getWrappedException.
+ */
+ public Object getWrappedException() {
+ return wrappedException;
+ }
+
+}
+
diff --git a/plugin/icedteanp/java/netscape/javascript/JSObject.java b/plugin/icedteanp/java/netscape/javascript/JSObject.java
new file mode 100644
index 0000000..74158c2
--- /dev/null
+++ b/plugin/icedteanp/java/netscape/javascript/JSObject.java
@@ -0,0 +1,297 @@
+/* -*- Mode: Java; tab-width: 8; c-basic-offset: 4 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released
+ * March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/* more doc todo:
+ * threads
+ * gc
+ *
+ *
+ */
+
+package netscape.javascript;
+
+import java.applet.Applet;
+import java.security.AccessControlContext;
+import java.security.AccessControlException;
+import java.security.AccessController;
+import java.security.BasicPermission;
+
+import sun.applet.PluginAppletViewer;
+import sun.applet.PluginDebug;
+
+
+
+/**
+ * JSObject allows Java to manipulate objects that are
+ * defined in JavaScript.
+ * Values passed from Java to JavaScript are converted as
+ * follows:<ul>
+ * <li>JSObject is converted to the original JavaScript object
+ * <li>Any other Java object is converted to a JavaScript wrapper,
+ * which can be used to access methods and fields of the java object.
+ * Converting this wrapper to a string will call the toString method
+ * on the original object, converting to a number will call the
+ * doubleValue method if possible and fail otherwise. Converting
+ * to a boolean will try to call the booleanValue method in the
+ * same way.
+ * <li>Java arrays are wrapped with a JavaScript object that understands
+ * array.length and array[index]
+ * <li>A Java boolean is converted to a JavaScript boolean
+ * <li>Java byte, char, short, int, long, float, and double are converted
+ * to JavaScript numbers
+ * </ul>
+ * Values passed from JavaScript to Java are converted as follows:<ul>
+ * <li>objects which are wrappers around java objects are unwrapped
+ * <li>other objects are wrapped with a JSObject
+ * <li>strings, numbers and booleans are converted to String, Double,
+ * and Boolean objects respectively
+ * </ul>
+ * This means that all JavaScript values show up as some kind
+ * of java.lang.Object in Java. In order to make much use of them,
+ * you will have to cast them to the appropriate subclass of Object,
+ * e.g. <code>(String) window.getMember("name");</code> or
+ * <code>(JSObject) window.getMember("document");</code>.
+ */
+public final class JSObject {
+ /* the internal object data */
+ private long internal;
+
+ /**
+ * initialize
+ */
+ private static void initClass() {
+ PluginDebug.debug ("JSObject.initClass");
+ }
+
+ static {
+ PluginDebug.debug ("JSObject INITIALIZER");
+ }
+
+ /**
+ * it is illegal to construct a JSObject manually
+ */
+ public JSObject(int jsobj_addr) {
+ this((long) jsobj_addr);
+ }
+
+ /**
+ * it is illegal to construct a JSObject manually
+ */
+ public JSObject(String jsobj_addr) {
+ this((long) Long.parseLong(jsobj_addr));
+ }
+
+ public JSObject(long jsobj_addr) {
+
+ // See if the caller has permission
+
+ try {
+ AccessController.getContext().checkPermission(new JSObjectCreatePermission());
+ } catch (AccessControlException ace) {
+
+ // If not, only caller with JSObject.getWindow on the stack may
+ // make this call unprivileged.
+
+ // Although this check is inefficient, it should happen only once
+ // during applet init, so we look the other way
+
+ StackTraceElement[] stack = Thread.currentThread().getStackTrace();
+ boolean mayProceed = false;
+
+ for (int i=0; i < stack.length; i++) {
+ if (stack[i].getClassName().equals("netscape.javascript.JSObject") &&
+ stack[i].getMethodName().equals("getWindow")) {
+ mayProceed = true;
+ }
+ }
+
+ if (!mayProceed) throw ace;
+ }
+
+ PluginDebug.debug ("JSObject long CONSTRUCTOR");
+ internal = jsobj_addr;
+ }
+
+ /**
+ * Retrieves a named member of a JavaScript object.
+ * Equivalent to "this.<i>name</i>" in JavaScript.
+ */
+ public Object getMember(String name)
+ {
+ PluginDebug.debug ("JSObject.getMember " + name);
+
+ Object o = PluginAppletViewer.getMember(internal, name);
+ PluginDebug.debug ("JSObject.getMember GOT " + o);
+ return o;
+ }
+
+
+ /**
+ * Retrieves an indexed member of a JavaScript object.
+ * Equivalent to "this[<i>index</i>]" in JavaScript.
+ */
+ // public Object getMember(int index) { return getSlot(index); }
+ public Object getSlot(int index)
+ {
+ PluginDebug.debug ("JSObject.getSlot " + index);
+
+ return PluginAppletViewer.getSlot(internal, index);
+ }
+
+
+ /**
+ * Sets a named member of a JavaScript object.
+ * Equivalent to "this.<i>name</i> = <i>value</i>" in JavaScript.
+ */
+ public void setMember(String name, Object value)
+ {
+ PluginDebug.debug ("JSObject.setMember " + name + " " + value);
+
+ PluginAppletViewer.setMember(internal, name, value);
+ }
+
+ /**
+ * Sets an indexed member of a JavaScript object.
+ * Equivalent to "this[<i>index</i>] = <i>value</i>" in JavaScript.
+ */
+ // public void setMember(int index, Object value) {
+ // setSlot(index, value);
+ // }
+ public void setSlot(int index, Object value)
+ {
+ PluginDebug.debug ("JSObject.setSlot " + index + " " + value);
+
+ PluginAppletViewer.setSlot(internal, index, value);
+ }
+
+
+ // TODO: toString, finalize.
+
+ /**
+ * Removes a named member of a JavaScript object.
+ */
+ public void removeMember(String name)
+ {
+ PluginDebug.debug ("JSObject.removeMember " + name);
+
+ PluginAppletViewer.removeMember(internal, name);
+ }
+
+
+ /**
+ * Calls a JavaScript method.
+ * Equivalent to "this.<i>methodName</i>(<i>args</i>[0], <i>args</i>[1], ...)" in JavaScript.
+ */
+ public Object call(String methodName, Object args[])
+ {
+ if (args == null)
+ args = new Object[0];
+
+ PluginDebug.debug ("JSObject.call " + methodName);
+ for (int i = 0; i < args.length; i++)
+ PluginDebug.debug (" " + args[i]);
+ PluginDebug.debug("");
+ return PluginAppletViewer.call(internal, methodName, args);
+ }
+
+
+ /**
+ * Evaluates a JavaScript expression. The expression is a string
+ * of JavaScript source code which will be evaluated in the context
+ * given by "this".
+ */
+ public Object eval(String s)
+ {
+ PluginDebug.debug("JSObject.eval " + s);
+ return PluginAppletViewer.eval(internal, s);
+ }
+
+
+ /**
+ * Converts a JSObject to a String.
+ */
+ public String toString()
+ {
+ PluginDebug.debug("JSObject.toString");
+ return PluginAppletViewer.javascriptToString(internal);
+ }
+
+
+ // should use some sort of identifier rather than String
+ // is "property" the right word?
+ // native String[] listProperties();
+
+
+ /**
+ * get a JSObject for the window containing the given applet
+ */
+ public static JSObject getWindow(Applet applet)
+ {
+ PluginDebug.debug("JSObject.getWindow");
+ // FIXME: handle long case as well.
+ long internal = 0;
+ internal = ((PluginAppletViewer)
+ applet.getAppletContext()).getWindow();
+ PluginDebug.debug ("GOT IT: " + internal);
+ return new JSObject((long) internal);
+ }
+
+
+ /**
+ * Finalization decrements the reference count on the corresponding
+ * JavaScript object.
+ */
+ protected void finalize()
+ {
+ PluginDebug.debug("JSObject.finalize ");
+ PluginAppletViewer.JavaScriptFinalize(internal);
+ }
+
+
+ /**
+ * Override java.lang.Object.equals() because identity is not preserved
+ * with instances of JSObject.
+ */
+ public boolean equals(Object obj)
+ {
+ PluginDebug.debug("JSObject.equals " + obj);
+
+ return false;
+ }
+}
diff --git a/plugin/icedteanp/java/netscape/javascript/JSObjectCreatePermission.java b/plugin/icedteanp/java/netscape/javascript/JSObjectCreatePermission.java
new file mode 100644
index 0000000..f8e510f
--- /dev/null
+++ b/plugin/icedteanp/java/netscape/javascript/JSObjectCreatePermission.java
@@ -0,0 +1,47 @@
+/* JSObjectCreatePermission.java
+ Copyright (C) 2009 Red Hat
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package netscape.javascript;
+
+import java.security.BasicPermission;
+
+
+public class JSObjectCreatePermission extends BasicPermission {
+ public JSObjectCreatePermission() {
+ super("JSObjectCreate");
+ }
+}
diff --git a/plugin/icedteanp/java/netscape/javascript/JSProxy.java b/plugin/icedteanp/java/netscape/javascript/JSProxy.java
new file mode 100644
index 0000000..e4f1f6e
--- /dev/null
+++ b/plugin/icedteanp/java/netscape/javascript/JSProxy.java
@@ -0,0 +1,58 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released
+ * March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/**
+ * The JSProxy interface allows applets and plugins to
+ * share javascript contexts.
+ */
+
+package netscape.javascript;
+import java.applet.Applet;
+
+public interface JSProxy {
+ Object getMember(JSObject jso, String name);
+ Object getSlot(JSObject jso, int index);
+ void setMember(JSObject jso, String name, Object value);
+ void setSlot(JSObject jso, int index, Object value);
+ void removeMember(JSObject jso, String name);
+ Object call(JSObject jso, String methodName, Object args[]);
+ Object eval(JSObject jso, String s);
+ String toString(JSObject jso);
+ JSObject getWindow(Applet applet);
+}
diff --git a/plugin/icedteanp/java/netscape/javascript/JSRunnable.java b/plugin/icedteanp/java/netscape/javascript/JSRunnable.java
new file mode 100644
index 0000000..8f1cf72
--- /dev/null
+++ b/plugin/icedteanp/java/netscape/javascript/JSRunnable.java
@@ -0,0 +1,72 @@
+/* -*- Mode: Java; tab-width: 8; c-basic-offset: 4 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released
+ * March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+package netscape.javascript;
+
+import sun.applet.PluginDebug;
+
+/**
+ * Runs a JavaScript object with a run() method in a separate thread.
+ */
+public class JSRunnable implements Runnable {
+ private JSObject runnable;
+
+ public JSRunnable(JSObject runnable) {
+ this.runnable = runnable;
+ synchronized(this) {
+ new Thread(this).start();
+ try {
+ this.wait();
+ } catch (InterruptedException ie) {
+ }
+ }
+ }
+
+ public void run() {
+ try {
+ runnable.call("run", null);
+ synchronized(this) {
+ notifyAll();
+ }
+ } catch (Throwable t) {
+ PluginDebug.debug(t.toString());
+ t.printStackTrace(System.err);
+ }
+ }
+}
diff --git a/plugin/icedteanp/java/netscape/javascript/JSUtil.java b/plugin/icedteanp/java/netscape/javascript/JSUtil.java
new file mode 100644
index 0000000..47bc6e6
--- /dev/null
+++ b/plugin/icedteanp/java/netscape/javascript/JSUtil.java
@@ -0,0 +1,59 @@
+/* -*- Mode: Java; tab-width: 8; c-basic-offset: 4 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code, released
+ * March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+/* ** */
+
+package netscape.javascript;
+import java.io.*;
+
+public class JSUtil {
+
+ /* Return the stack trace of an exception or error as a String */
+ public static String getStackTrace(Throwable t) {
+ ByteArrayOutputStream captureStream;
+ PrintWriter p;
+
+ captureStream = new ByteArrayOutputStream();
+ p = new PrintWriter(captureStream);
+
+ t.printStackTrace(p);
+ p.flush();
+
+ return captureStream.toString();
+ }
+}
diff --git a/plugin/icedteanp/java/netscape/security/ForbiddenTargetException.java b/plugin/icedteanp/java/netscape/security/ForbiddenTargetException.java
new file mode 100644
index 0000000..c7ce827
--- /dev/null
+++ b/plugin/icedteanp/java/netscape/security/ForbiddenTargetException.java
@@ -0,0 +1,52 @@
+/* ForbiddenTargetException.java
+ Copyright (C) 2010 Red Hat
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library. Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module. An independent module is a module which is not derived from
+or based on this library. If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so. If you do not wish to do so, delete this
+exception statement from your version. */
+
+package netscape.security;
+
+public class ForbiddenTargetException extends RuntimeException{
+
+ private static final long serialVersionUID = 1271219852541058396L;
+
+ public ForbiddenTargetException() {
+ super();
+ }
+
+ public ForbiddenTargetException(String s) {
+ super(s);
+ }
+
+}