зеркало из https://github.com/mozilla/pjs.git
211 строки
7.0 KiB
C++
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();
|
|
}
|
|
}
|
|
|
|
|
|
|