зеркало из https://github.com/mozilla/pjs.git
M mozilla/nppluglet.cpp
M mozilla/nppluglet.h M src/Pluglet.cpp M src/Pluglet.h M src/PlugletEngine.cpp SetWindow works. Next step is to try hook up scriptability.
This commit is contained in:
Родитель
0952825320
Коммит
c7d2ffa09e
|
@ -154,8 +154,9 @@ void NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin)
|
|||
//
|
||||
nsPluginInstance::nsPluginInstance(nsPluginCreateData * aCreateDataStruct) : nsPluginInstanceBase(),
|
||||
mInstance(aCreateDataStruct->instance),
|
||||
mInitialized(FALSE),
|
||||
mScriptablePeer(NULL)
|
||||
mInitialized(PR_FALSE),
|
||||
mScriptablePeer(nsnull),
|
||||
mPluglet(nsnull)
|
||||
{
|
||||
mCreateDataStruct.instance = aCreateDataStruct->instance;
|
||||
mCreateDataStruct.type = aCreateDataStruct->type;
|
||||
|
@ -168,26 +169,82 @@ nsPluginInstance::nsPluginInstance(nsPluginCreateData * aCreateDataStruct) : nsP
|
|||
|
||||
nsPluginInstance::~nsPluginInstance()
|
||||
{
|
||||
|
||||
if (mPluglet) {
|
||||
mPluglet->Destroy();
|
||||
mPluglet = nsnull;
|
||||
}
|
||||
mInitialized = PR_FALSE;
|
||||
|
||||
// mScriptablePeer may be also held by the browser
|
||||
// so releasing it here does not guarantee that it is over
|
||||
// we should take precaution in case it will be called later
|
||||
// and zero its mPlugin member
|
||||
mScriptablePeer->SetInstance(NULL);
|
||||
mScriptablePeer->SetInstance(nsnull);
|
||||
NS_IF_RELEASE(mScriptablePeer);
|
||||
}
|
||||
|
||||
NPBool nsPluginInstance::init(NPWindow* aWindow)
|
||||
{
|
||||
if(aWindow == NULL)
|
||||
return FALSE;
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
nsPluginWindow pluginWindow;
|
||||
|
||||
mInitialized = TRUE;
|
||||
return TRUE;
|
||||
if (mInitialized) {
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
if(nsnull == aWindow || nsnull == mPluglet) {
|
||||
return mInitialized;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPluginInstance> ns4xPluginInst =
|
||||
do_QueryInterface((nsISupports*)mInstance->ndata, &rv);
|
||||
if (NS_FAILED(rv)) {
|
||||
return mInitialized;
|
||||
}
|
||||
nsCOMPtr<nsIPluginInstancePeer> peer = nsnull;
|
||||
rv = ns4xPluginInst->GetPeer(getter_AddRefs(peer));
|
||||
if(NS_FAILED(rv)) {
|
||||
return mInitialized;
|
||||
}
|
||||
rv = mPluglet->Initialize(peer);
|
||||
#if defined(XP_MAC) || defined(XP_MACOSX)
|
||||
#elif defined(XP_WIN) || defined(XP_OS2)
|
||||
pluginWindow.window = (nsPluginPort *) aWindow->window;
|
||||
#elif defined(XP_UNIX) && defined(MOZ_X11)
|
||||
#else
|
||||
#endif
|
||||
pluginWindow.x = aWindow->x;
|
||||
pluginWindow.y = aWindow->y;
|
||||
pluginWindow.width = aWindow->width;
|
||||
pluginWindow.height = aWindow->height;
|
||||
pluginWindow.clipRect.top = aWindow->clipRect.top;
|
||||
pluginWindow.clipRect.left = aWindow->clipRect.left;
|
||||
pluginWindow.clipRect.bottom = aWindow->clipRect.bottom;
|
||||
pluginWindow.clipRect.right = aWindow->clipRect.right;
|
||||
#if defined(XP_UNIX) && !defined(XP_MACOSX)
|
||||
pluginWindow.ws_info = aWindow->ws_info;
|
||||
#endif
|
||||
pluginWindow.type = aWindow->type == NPWindowTypeWindow ?
|
||||
nsPluginWindowType_Window : nsPluginWindowType_Drawable;
|
||||
rv = mPluglet->SetWindow(&pluginWindow);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
rv = mPluglet->Start();
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
mInitialized = PR_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return mInitialized;
|
||||
}
|
||||
|
||||
void nsPluginInstance::shut()
|
||||
{
|
||||
mInitialized = FALSE;
|
||||
if (mInitialized) {
|
||||
if (mPluglet) {
|
||||
mPluglet->Stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NPBool nsPluginInstance::isInitialized()
|
||||
|
@ -200,16 +257,16 @@ NS_IMETHODIMP nsPluginInstance::HasPlugletForMimeType(const char *aMimeType,
|
|||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsIPlugin> pluglet =
|
||||
nsCOMPtr<nsIPlugin> plugletEngine =
|
||||
do_GetService(PLUGLETENGINE_ContractID, &rv);
|
||||
void *outInstance = nsnull;
|
||||
*outResult = PR_FALSE;
|
||||
nsIID scriptableIID = NS_ISIMPLEPLUGIN_IID;
|
||||
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
rv = pluglet->CreatePluginInstance(nsnull, scriptableIID,
|
||||
aMimeType, &outInstance);
|
||||
if (NS_SUCCEEDED(rv) && outInstance) {
|
||||
rv = plugletEngine->CreatePluginInstance(nsnull, scriptableIID,
|
||||
aMimeType,
|
||||
getter_AddRefs(mPluglet));
|
||||
if (NS_SUCCEEDED(rv) && mPluglet) {
|
||||
*outResult = PR_TRUE;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,6 +40,8 @@
|
|||
|
||||
#include "pluginbase.h"
|
||||
#include "nsScriptablePeer.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsIPluginInstance.h"
|
||||
|
||||
class nsPluginInstance : public nsPluginInstanceBase
|
||||
{
|
||||
|
@ -64,6 +66,7 @@ public:
|
|||
private:
|
||||
NPP mInstance;
|
||||
NPBool mInitialized;
|
||||
nsCOMPtr<nsIPluginInstance> mPluglet;
|
||||
nsScriptablePeer * mScriptablePeer;
|
||||
nsPluginCreateData mCreateDataStruct;
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ static NS_DEFINE_IID(kIPluginInstanceIID, NS_IPLUGININSTANCE_IID);
|
|||
|
||||
NS_IMPL_ISUPPORTS1(Pluglet,nsIPluginInstance);
|
||||
|
||||
Pluglet::Pluglet(jobject object) : plugletEngine(nsnull) {
|
||||
Pluglet::Pluglet(jobject object) : plugletEngine(nsnull), peer(nsnull) {
|
||||
nsIServiceManager *servman = nsnull;
|
||||
NS_GetServiceManager(&servman);
|
||||
nsresult rv;
|
||||
|
@ -66,7 +66,6 @@ Pluglet::Pluglet(jobject object) : plugletEngine(nsnull) {
|
|||
|
||||
jthis = jniEnv->NewGlobalRef(object);
|
||||
//nb check for null
|
||||
peer = NULL;
|
||||
view = PlugletViewFactory::GetPlugletView();
|
||||
Registry::SetPeer(jthis,(jlong)this);
|
||||
}
|
||||
|
@ -83,7 +82,7 @@ Pluglet::~Pluglet() {
|
|||
}
|
||||
|
||||
jniEnv->DeleteGlobalRef(jthis);
|
||||
NS_RELEASE(peer);
|
||||
peer = nsnull;
|
||||
}
|
||||
|
||||
NS_METHOD Pluglet::HandleEvent(nsPluginEvent* event, PRBool* handled) {
|
||||
|
@ -148,20 +147,20 @@ NS_METHOD Pluglet::Initialize(nsIPluginInstancePeer* _peer) {
|
|||
}
|
||||
}
|
||||
peer = _peer;
|
||||
peer->AddRef();
|
||||
jobject obj = PlugletPeer::GetJObject(peer);
|
||||
if (!obj) {
|
||||
return NS_ERROR_FAILURE;
|
||||
if (peer) {
|
||||
jobject obj = PlugletPeer::GetJObject(peer);
|
||||
if (!obj) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
env->CallVoidMethod(jthis,initializeMID,obj);
|
||||
}
|
||||
env->CallVoidMethod(jthis,initializeMID,obj);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_METHOD Pluglet::GetPeer(nsIPluginInstancePeer* *result) {
|
||||
PR_LOG(PlugletLog::log, PR_LOG_DEBUG,
|
||||
("Pluglet::GetPeer\n"));
|
||||
peer->AddRef();
|
||||
*result = peer;
|
||||
NS_ADDREF(*result = peer);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ class Pluglet : public nsIPluginInstance {
|
|||
static jmethodID setWindowMID;
|
||||
static jmethodID printMID;
|
||||
static jmethodID getValueMID;
|
||||
nsIPluginInstancePeer *peer;
|
||||
nsCOMPtr<nsIPluginInstancePeer> peer;
|
||||
PlugletView *view;
|
||||
nsCOMPtr<iPlugletEngine> plugletEngine;
|
||||
};
|
||||
|
|
|
@ -202,7 +202,7 @@ void PlugletEngine::StartJVM() {
|
|||
options[3].optionString=""; //-Djava.compiler=NONE";
|
||||
vm_args.version = JNI_VERSION_1_4;
|
||||
vm_args.options = options;
|
||||
vm_args.nOptions = 1; // EDBURNS: Change for debugging
|
||||
vm_args.nOptions = 3; // EDBURNS: Change for debugging
|
||||
vm_args.ignoreUnrecognized = JNI_FALSE;
|
||||
/* Create the Java VM */
|
||||
res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
|
||||
|
|
Загрузка…
Ссылка в новой задаче