Fix for 77194 (liveconnect does not work for non-applet case)

r=edburns & beard sr=brendan


git-svn-id: svn://10.0.0.236/trunk@101468 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
Xiaobin.Lu%eng.Sun.com 2001-08-21 02:23:24 +00:00
parent a6ddde9413
commit 85ca40dcdb
3 changed files with 151 additions and 68 deletions

View File

@ -1,68 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape 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/NPL/
*
* 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.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Patrick Beard <beard@netscape.com>
*/
package netscape.oji;
import java.net.*;
import java.io.*;
public class ProxyClassLoader extends ClassLoader {
private URL mCodebaseURL;
/**
* Creates a class loader for the specified document URL.
*/
private ProxyClassLoader(String documentURL) throws MalformedURLException {
mCodebaseURL = new URL(documentURL);
}
private byte[] download(InputStream input) throws IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream(16 * 1024);
byte[] buffer = new byte[4096];
int count = input.read(buffer);
while (count > 0) {
output.write(buffer, 0, count);
count = input.read(buffer);
}
input.close();
return output.toByteArray();
}
protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
Class c = findLoadedClass(name);
if (c == null) {
try {
String path = name.replace('.', '/') + ".class";
URL classURL = new URL(mCodebaseURL, path);
byte[] data = download(classURL.openStream());
c = defineClass(data, 0, data.length);
} catch (MalformedURLException mfue) {
} catch (IOException ioe) {
}
if (c == null)
c = findSystemClass(name);
}
if (resolve)
resolveClass(c);
return c;
}
}

View File

@ -0,0 +1,56 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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 part of the mozilla.org LDAP XPCOM SDK.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Xiaobin Lu <Xiaobin.Lu@eng.Sun.com>
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
* "GPL"), in which case the provisions of the GPL are applicable
* instead of those above. If you wish to allow use of your
* version of this file only under the terms of the GPL and not to
* allow others to use your version of this file under the MPL,
* indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by
* the GPL. If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
package netscape.oji;
import java.net.URLClassLoader;
import java.net.URL;
import java.net.MalformedURLException;
public abstract class ProxyClassLoaderFactory {
public static ClassLoader createClassLoader(final String documentURL)
throws MalformedURLException {
URL[] documentURLArray = new URL[1];
int lastIndx = documentURL.lastIndexOf("/");
String urlPath = documentURL.substring(0, lastIndx+1);
try {
documentURLArray[0] = new URL(urlPath);
}
catch (MalformedURLException e) {
System.out.println("MalformedURLException was caught");
return null;
}
return new URLClassLoader(documentURLArray);
}
}

View File

@ -0,0 +1,95 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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 part of the mozilla.org LDAP XPCOM SDK.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Xiaobin Lu <Xiaobin.Lu@eng.Sun.com>
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
* "GPL"), in which case the provisions of the GPL are applicable
* instead of those above. If you wish to allow use of your
* version of this file only under the terms of the GPL and not to
* allow others to use your version of this file under the MPL,
* indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by
* the GPL. If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
#ifndef nsCNullSecurityContext_h___
#define nsCNullSecurityContext_h___
#include "nsISecurityContext.h"
class nsCNullSecurityContext : public nsISecurityContext
{
public:
////////////////////////////////////////////////////////////////////////////
// from nsISupports
NS_DECL_ISUPPORTS
////////////////////////////////////////////////////////////////////////
// from nsISecurityContext:
/**
* Get the security context to be used in LiveConnect.
* This is used for JavaScript <--> Java.
*
* @param target -- Possible target.
* @param action -- Possible action on the target.
* @return -- NS_OK if the target and action is permitted
* -- NS_FALSE otherwise.
*/
NS_IMETHOD Implies(const char* target, const char* action,
PRBool* bActionAllowed);
/**
* Get the origin associated with the context.
*
* @param buf -- Result buffer (managed by the caller.)
* @param len -- Buffer length.
* @return -- NS_OK if the codebase string was obtained.
* -- NS_FALSE otherwise.
*/
NS_IMETHOD GetOrigin(char* buf, int len);
/**
* Get the certificate associated with the context.
*
* @param buf -- Result buffer (managed by the caller.)
* @param len -- Buffer length.
* @return -- NS_OK if the codebase string was obtained.
* -- NS_FALSE otherwise.
*/
NS_IMETHOD GetCertificateID(char* buf, int len);
//////////////////////////////////////////////////////////////////////
// from nsISecureJNI:
nsCNullSecurityContext() { NS_INIT_REFCNT();};
};
#endif // CSecurityContext_h___