From fca61b5cde6ae94d696b69aa9de7238980fd37ef Mon Sep 17 00:00:00 2001 From: "pedemont%us.ibm.com" Date: Wed, 27 Sep 2006 15:16:17 +0000 Subject: [PATCH] Bug 270889 - Change params for initEmbedding() to use java.io.File and custom class. Backout lazy discovery of interface info (no longer needed). Better distribute methods in XPCOM and GeckoEmbed classes. r=darin. This file was copied in CVS from the following location: mozilla/extensions/java/xpcom/nsAppFileLocProviderProxy.cpp Original committer: pedemont%us.ibm.com Original revision: 1.1 Original date: 2004/12/17 22:20:56 git-svn-id: svn://10.0.0.236/trunk@212550 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xpcom/src/nsAppFileLocProviderProxy.cpp | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 mozilla/extensions/java/xpcom/src/nsAppFileLocProviderProxy.cpp diff --git a/mozilla/extensions/java/xpcom/src/nsAppFileLocProviderProxy.cpp b/mozilla/extensions/java/xpcom/src/nsAppFileLocProviderProxy.cpp new file mode 100644 index 00000000000..12706608c78 --- /dev/null +++ b/mozilla/extensions/java/xpcom/src/nsAppFileLocProviderProxy.cpp @@ -0,0 +1,100 @@ +/* ***** 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 Java XPCOM Bindings. + * + * The Initial Developer of the Original Code is + * IBM Corporation. + * Portions created by the Initial Developer are Copyright (C) 2004 + * IBM Corporation. All Rights Reserved. + * + * Contributor(s): + * Javier Pedemonte (jhpedemonte@gmail.com) + * + * Alternatively, the contents of this file may be used under the terms of + * either 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 ***** */ + +#include "nsAppFileLocProviderProxy.h" +#include "nsILocalFile.h" +#include "nsJavaXPCOMBindingUtils.h" + + +nsAppFileLocProviderProxy::nsAppFileLocProviderProxy(JNIEnv* env, + jobject aJavaObject) + : mJavaEnv(env) +{ + mJavaLocProvider = mJavaEnv->NewGlobalRef(aJavaObject); +} + +nsAppFileLocProviderProxy::~nsAppFileLocProviderProxy() +{ + mJavaEnv->DeleteGlobalRef(mJavaLocProvider); +} + +NS_IMPL_ISUPPORTS1(nsAppFileLocProviderProxy, nsIDirectoryServiceProvider) + +// nsIDirectoryServiceProvider +NS_IMETHODIMP +nsAppFileLocProviderProxy::GetFile(const char* aProp, PRBool* aIsPersistant, + nsIFile** aResult) +{ + // Setup params for calling Java function + jstring prop = mJavaEnv->NewStringUTF(aProp); + jbooleanArray persistant = mJavaEnv->NewBooleanArray(1); + + // Create method ID + jmethodID mid = nsnull; + jclass clazz = mJavaEnv->GetObjectClass(mJavaLocProvider); + if (clazz) { + mid = mJavaEnv->GetMethodID(clazz, "getFile", + "(Ljava/lang/String;[Z)Ljava/io/File;"); + } + + // Call Java function + jobject javaFile = nsnull; + if (mid) { + javaFile = mJavaEnv->CallObjectMethod(mJavaLocProvider, mid, prop, persistant); + } + if (javaFile == nsnull) { + return NS_ERROR_FAILURE; + } + + // Set boolean output value + jboolean isCopy = PR_FALSE; + jboolean* array = mJavaEnv->GetBooleanArrayElements(persistant, &isCopy); + *aIsPersistant = array[0]; + if (isCopy) { + mJavaEnv->ReleaseBooleanArrayElements(persistant, array, JNI_ABORT); + } + + // Set nsIFile result value + nsCOMPtr localFile; + nsresult rv = File_to_nsILocalFile(mJavaEnv, javaFile, + getter_AddRefs(localFile)); + if (NS_SUCCEEDED(rv)) { + return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)aResult); + } + return rv; +} +