JD_IMETHODIMP JavaPluginFactory5::CreateInstance(ISupports *aOuter, const JDIID & aIID, void **result) { trace("JavaPluginFactory5:CreateInstance\n"); if (result == NULL) { plugin_error("NULL result in create instance"); return JD_ERROR_NULL_POINTER; } *result = NULL; if (aOuter != NULL) { plugin_error("NO_AGGREGATION in create instance!"); return JD_ERROR_NO_AGGREGATION; } if (! (aIID.Equals(jIPluginInstanceIID) || aIID.Equals(jISupportsIID))) return JD_NOINTERFACE; /* Startup the JVM if it is not already running */ JavaVM5* vm = GetJavaVM(); /* Create a new instance and refcount it */ JavaPluginInstance5 * pluginInstance = new JavaPluginInstance5(this); *result = (IPluginInstance *) pluginInstance; pluginInstance->AddRef(); UNUSED(vm); return JD_OK; }
JD_METHOD CSecureJNIEnv::AggregatedQueryInterface(const JDIID& aIID, void** aInstancePtr) { if (aIID.Equals(jISupportsIID)) { *aInstancePtr = GetInner(); AddRef(); return JD_OK; } if (aIID.Equals(jISecureJNIEnvIID)) { // Mozilla changes: Name of class changed //*aInstancePtr = (nsISecureJNIEnv *)this; *aInstancePtr = (ISecureEnv *)this; AddRef(); return JD_OK; } return JD_NOINTERFACE; }
//nsISupports interface methods. // Mozilla changes : Signature changed JD_IMETHODIMP JavaPluginFactory5::QueryInterface(const JDIID & iid, void **ptr) { if (NULL == ptr) return JD_ERROR_NULL_POINTER; if (iid.Equals(jIJVMPluginIID) || iid.Equals(jISupportsIID)) { *ptr = (void*) (IJVMPlugin*) this; AddRef(); return JD_OK; } else if (iid.Equals(jIPluginIID) || iid.Equals(jIFactoryIID)) { *ptr = (void*) (IPlugin*) this; AddRef(); return JD_OK; } else if (iid.Equals(jIJVMConsoleIID)) { return m_pIJVMConsole->QueryInterface(iid, ptr); } else return JD_NOINTERFACE; }
///=--------------------------------------------------------------------------= // CSecureJNIEnv::Create ///=--------------------------------------------------------------------------= // Create the CSecureJNIEnv object for creating object, invoking method, // getting/setting field in JNI with security context. // // parameters : // // return : // // notes : // JD_METHOD CSecureJNIEnv::Create(ISupports* outer, RemoteJNIEnv* env, const JDIID& aIID, void* *aInstancePtr) { if (outer && !aIID.Equals(jISupportsIID)) return JD_NOINTERFACE; // XXX right error? CSecureJNIEnv* jni = new CSecureJNIEnv(outer, env); if (jni == NULL) return JD_ERROR_OUT_OF_MEMORY; jni->AddRef(); *aInstancePtr = jni->GetInner(); *aInstancePtr = (outer != NULL)? (void *)jni->GetInner(): (void *)jni; return JD_OK; }
//------------------------------------------------------------------------------------ // CNS7Adapter_PluginServiceProvider::QueryService //------------------------------------------------------------------------------------ // // Obtain a plugin service. An nsIPluginServiceProvider will obtain the // plugin service according to the current browser version. // // @param clsid - the CLSID of the requested service. // @param iid - the IID of the request service. // @param result - the interface pointer of the requested service // @return - JD_OK if this operation was successful. // // Notes: // JD_METHOD CNS7Adapter_PluginServiceProvider::QueryService(/*[in]*/ const JDCID& clsid, /*[in]*/ const JDIID& iid, /*[out]*/ ISupports* *result) { TRACE("CNS7Adapter_PluginServiceProvider::QueryService"); if (result == NULL || mService == NULL) return JD_ERROR_NULL_POINTER; *result = NULL; JDresult res; // Try it from cache if(clsid.Equals(jCPluginManagerCID) && m_pPluginManagerAdapter != NULL) return m_pPluginManagerAdapter->QueryInterface(iid, (void**)result); else if (clsid.Equals(jCJVMManagerCID) && m_pJVMManagerAdapter != NULL) return m_pJVMManagerAdapter->QueryInterface(iid, (void**)result); else if (clsid.Equals(jCLiveconnectCID) && m_pComponentManager != NULL) { // Use componentManager to create liveconnect for each applet instance. JDSmartPtr<nsILiveconnect> spLiveconnectInst; res = m_pComponentManager->CreateInstance(kCLiveConnectCID, NULL, kILiveConnectIID, (void**)&spLiveconnectInst); if (NS_FAILED(res)) return res; // Wrap nsILiveconnect into the adapter object JDSmartPtr<ILiveconnect> spLiveconnectAdptInst = new CNSAdapter_Liveconnect(spLiveconnectInst); if (spLiveconnectAdptInst == NULL) return JD_ERROR_OUT_OF_MEMORY; return spLiveconnectAdptInst->QueryInterface(iid, (void**)result); } else if (clsid.Equals(jCObserverServiceCID)) { JDSmartPtr<nsIObserverService> spObserverService; res = mService->GetService(kCObserverServiceCID, kIObserverServiceIID, (void**)&spObserverService); if (NS_SUCCEEDED(res) && spObserverService) *result = new CNS7Adapter_ObserverService(spObserverService); if (*result == NULL) return JD_ERROR_OUT_OF_MEMORY; (*result)->AddRef(); return res; } else if(clsid.Equals(jIBrowserAuthenticatorCID)) { JDSmartPtr<nsIJVMAuthTools> spIJVMAuthTools; res = mService->GetService(kIJVMAuthToolsCID, kIJVMAuthToolsIID, (void**)&spIJVMAuthTools); if(NS_FAILED(res)) return res; JDSmartPtr<IBrowserAuthenticator> spBrowserAuthenticator = new CNSAdapter_BrowserAuthenticator((nsIJVMAuthTools*)spIJVMAuthTools); if(spBrowserAuthenticator == NULL) return JD_ERROR_OUT_OF_MEMORY; return spBrowserAuthenticator->QueryInterface(iid, (void**)result); } // It is not good idea to use smart pointer since GetService won't AddRef the // resultant pointer. nsISupports* pMozService; nsCID requestCID = kCPluginManagerCID; // We need to do some conversion here between clsid from JPI and clsid of Mozilla if (clsid.Equals(jCPluginManagerCID)) requestCID = kCPluginManagerCID; else if (clsid.Equals(jCJVMManagerCID)) requestCID = kCJVMManagerCID; else if (clsid.Equals(jCLiveconnectCID)) requestCID = kComponentManagerCID; else return JD_ERROR_FAILURE; res = mService->GetService(requestCID, kISupportsIID, (void**)&pMozService); // Try to cache the service object if (NS_SUCCEEDED(res) && pMozService != NULL) { if (clsid.Equals(jCPluginManagerCID) && m_pPluginManager == NULL) { res = pMozService->QueryInterface(kIPluginManagerIID, (void**)&m_pPluginManager); if (NS_FAILED(res)) return res; m_pPluginManagerAdapter = new CNSAdapter_PluginManager(m_pPluginManager); if (m_pPluginManagerAdapter == NULL) return JD_ERROR_OUT_OF_MEMORY; m_pPluginManagerAdapter->AddRef(); return m_pPluginManagerAdapter->QueryInterface(iid, (void**)result); } else if (clsid.Equals(jCJVMManagerCID) && m_pJVMManager == NULL) { res = pMozService->QueryInterface(kIJVMManagerIID, (void**)&m_pJVMManager); if (NS_FAILED(res)) return res; m_pJVMManagerAdapter = new CNSAdapter_JVMManager(m_pJVMManager); if (m_pJVMManagerAdapter == NULL) return JD_ERROR_OUT_OF_MEMORY; m_pJVMManagerAdapter->AddRef(); return m_pJVMManagerAdapter->QueryInterface(iid, (void**)result); } else if (clsid.Equals(jCLiveconnectCID) && m_pComponentManager == NULL) { // Since mComponentManager is here only to create the liveconnect instance // so iid must be jILiveconnectIID if (!iid.Equals(jILiveconnectIID)) return JD_ERROR_FAILURE; res = pMozService->QueryInterface(kIComponentManagerIID, (void**)&m_pComponentManager); if (NS_FAILED(res)) return res; JDSmartPtr<nsILiveconnect> spLiveconnectInst; res = m_pComponentManager->CreateInstance(kCLiveConnectCID, NULL, kILiveConnectIID, (void**)&spLiveconnectInst); if (NS_SUCCEEDED(res) && spLiveconnectInst != NULL) { JDSmartPtr<ILiveconnect> spLiveconnectAdptInst = new CNSAdapter_Liveconnect(spLiveconnectInst); if (spLiveconnectAdptInst == NULL) return JD_ERROR_OUT_OF_MEMORY; return spLiveconnectAdptInst->QueryInterface(iid, (void**)result); } } } return res; }