gecko-dev/java/plugins/jni/org_mozilla_pluglet_mozilla...

211 строки
7.0 KiB
C++

/* -*- 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.0 (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 Initial Developer of the Original Code is Sun Microsystems,
* Inc. Portions created by Sun are Copyright (C) 1999 Sun Microsystems,
* Inc. All Rights Reserved.
*/
#include "nsIPluginInstancePeer.h"
#include "nsIPluginTagInfo2.h"
#include "PlugletOutputStream.h"
#include "PlugletTagInfo2.h"
#include "org_mozilla_pluglet_mozilla_PlugletPeerImpl.h"
#include "PlugletLog.h"
static jfieldID peerFID = NULL;
/*
* Class: org_mozilla_pluglet_mozilla_PlugletPeerImpl
* Method: getMIMEType
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_mozilla_pluglet_mozilla_PlugletPeerImpl_getMIMEType
(JNIEnv *env, jobject jthis) {
nsIPluginInstancePeer * instancePeer = (nsIPluginInstancePeer*)env->GetLongField(jthis, peerFID);
if (!instancePeer) {
return NULL;
}
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("PlugletPeerImpl.getMIMEType: instancePeer = %p\n", instancePeer));
nsMIMEType mime;
if(NS_FAILED(instancePeer->GetMIMEType(&mime))) {
return NULL;
}
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("PlugletPeerImpl.getMIMEType: mime type is = %s\n", (char *)mime));
return env->NewStringUTF((char *)mime);
}
/*
* Class: org_mozilla_pluglet_mozilla_PlugletPeerImpl
* Method: getMode
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_org_mozilla_pluglet_mozilla_PlugletPeerImpl_getMode
(JNIEnv *, jobject) {
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("PlugletPeerImpl.getMode: always return 1\n"));
return 1; //nb
}
/*
* Class: org_mozilla_pluglet_mozilla_PlugletPeerImpl
* Method: getValue
* Signature: (I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_mozilla_pluglet_mozilla_PlugletPeerImpl_getValue
(JNIEnv *, jobject, jint) {
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("PlugletPeerImpl.getValue: stub\n"));
return NULL; //nb
}
/*
* Class: org_mozilla_pluglet_mozilla_PlugletPeerImpl
* Method: newStream
* Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/io/OutputStream;
*/
JNIEXPORT jobject JNICALL Java_org_mozilla_pluglet_mozilla_PlugletPeerImpl_newStream
(JNIEnv *env, jobject jthis, jstring _type, jstring _target) {
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("PlugletPeerImpl.newStream: mime type is %s, target is %s\n", _type, _target));
nsMIMEType mimeType = NULL;
if ( _type == NULL
|| _target == NULL) {
return NULL; //nb should throw NullPointerException
}
if(!(mimeType = (nsMIMEType)env->GetStringUTFChars(_type,NULL))) {
return NULL;
}
const char * target = NULL;
if(!(target = env->GetStringUTFChars(_target,NULL))) {
env->ReleaseStringUTFChars(_type,(char *)mimeType);
return NULL;
}
nsIPluginInstancePeer * instancePeer = NULL;
if(!(instancePeer = (nsIPluginInstancePeer*)env->GetLongField(jthis, peerFID))) {
env->ReleaseStringUTFChars(_type,(char *)mimeType);
env->ReleaseStringUTFChars(_target,target);
return NULL;
}
nsIOutputStream *output = NULL;
if (NS_FAILED(instancePeer->NewStream(mimeType,target,&output))) {
env->ReleaseStringUTFChars(_type,(char *)mimeType);
env->ReleaseStringUTFChars(_target,target);
return NULL;
}
env->ReleaseStringUTFChars(_type,(char *)mimeType);
env->ReleaseStringUTFChars(_target,target);
return PlugletOutputStream::GetJObject(env,output);
}
/*
* Class: org_mozilla_pluglet_mozilla_PlugletPeerImpl
* Method: showStatus
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_org_mozilla_pluglet_mozilla_PlugletPeerImpl_showStatus
(JNIEnv *env, jobject jthis, jstring _msg) {
nsIPluginInstancePeer * instancePeer = (nsIPluginInstancePeer*)env->GetLongField(jthis, peerFID);
if (!instancePeer
|| !_msg) {
return;
}
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("PlugletPeerImpl.showStatus: massage is %s\n", _msg));
const char *msg = NULL;
if(!(msg = env->GetStringUTFChars(_msg,NULL))) {
return;
}
instancePeer->ShowStatus(msg);
env->ReleaseStringUTFChars(_msg,msg);
}
/*
* Class: org_mozilla_pluglet_mozilla_PlugletPeerImpl
* Method: setWindowSize
* Signature: (II)V
*/
JNIEXPORT void JNICALL Java_org_mozilla_pluglet_mozilla_PlugletPeerImpl_setWindowSize
(JNIEnv *env, jobject jthis, jint width, jint height) {
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("PlugletPeerImpl.setWindowSize: width = %i, height = %i\n", width, height));
nsIPluginInstancePeer * instancePeer = (nsIPluginInstancePeer*)env->GetLongField(jthis, peerFID);
if (!instancePeer) {
return;
}
instancePeer->SetWindowSize(width,height);
//nb add exception throwing
}
static NS_DEFINE_IID(kIPluginTagInfo2,NS_IPLUGINTAGINFO2_IID);
/*
* Class: org_mozilla_pluglet_mozilla_PlugletPeerImpl
* Method: getTagInfo
* Signature: ()Lorg/mozilla/pluglet/mozilla/PlugletTagInfo;
*/
JNIEXPORT jobject JNICALL Java_org_mozilla_pluglet_mozilla_PlugletPeerImpl_getTagInfo
(JNIEnv *env, jobject jthis) {
nsIPluginInstancePeer * instancePeer = (nsIPluginInstancePeer*)env->GetLongField(jthis, peerFID);
if (!instancePeer) {
return NULL;
}
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("PlugletPeerImpl.getTagInfo: instancePeer = %p\n", instancePeer));
nsIPluginTagInfo2 * info = NULL;
if(NS_FAILED(instancePeer->QueryInterface(kIPluginTagInfo2,(void**)&info))) {
return NULL;
}
return PlugletTagInfo2::GetJObject(env,info);
}
/*
* Class: org_mozilla_pluglet_mozilla_PlugletPeerImpl
* Method: nativeFinalize
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_mozilla_pluglet_mozilla_PlugletPeerImpl_nativeFinalize
(JNIEnv *env, jobject jthis) {
nsIPluginInstancePeer * instancePeer = (nsIPluginInstancePeer*)env->GetLongField(jthis, peerFID);
if (instancePeer) {
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("PlugletPeerImpl.nativeFinalize: instancePeer = %p\n", instancePeer));
/*nb do as in java-dom stuff */
NS_RELEASE(instancePeer);
}
}
/*
* Class: org_mozilla_pluglet_mozilla_PlugletPeerImpl
* Method: nativeInitialize
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_mozilla_pluglet_mozilla_PlugletPeerImpl_nativeInitialize
(JNIEnv *env, jobject jthis) {
if(!peerFID) {
peerFID = env->GetFieldID(env->GetObjectClass(jthis),"peer","J");
if (!peerFID) {
return;
}
}
nsIPluginInstancePeer * instancePeer = (nsIPluginInstancePeer*)env->GetLongField(jthis, peerFID);
if (instancePeer) {
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
("PlugletPeerImpl.nativeInitialize: instancePeer = %p\n", instancePeer));
instancePeer->AddRef();
}
}