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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 4
0
///=--------------------------------------------------------------------------=
// 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;
}