//--------------------------------------------------------------------------- // NPP_SetWindow: //--------------------------------------------------------------------------- NPError NP_LOADDS NPP_SetWindow(NPP pInstance, NPWindow * pNPWindow) { if(pInstance == NULL) { dbgOut1("NPP_SetWindow returns NPERR_INVALID_INSTANCE_ERROR"); return NPERR_INVALID_INSTANCE_ERROR; } if(pNPWindow == NULL) { dbgOut1("NPP_SetWindow returns NPERR_GENERIC_ERROR"); return NPERR_GENERIC_ERROR; } HWND hWnd = (HWND)(DWORD)pNPWindow->window; CPlugin * pPlugin = (CPlugin *)pInstance->pdata; assert(pPlugin != NULL); if(pPlugin == NULL) { dbgOut1("NPP_SetWindow returns NPERR_GENERIC_ERROR"); return NPERR_GENERIC_ERROR; } if((hWnd == NULL) && (pPlugin->getWindow() == NULL)) // spurious entry { dbgOut1("NPP_SetWindow just returns with NPERR_NO_ERROR"); return NPERR_NO_ERROR; } if((hWnd == NULL) && (pPlugin->getWindow() != NULL)) { // window went away dbgOut1("NPP_SetWindow, going away..."); pPlugin->shut(); return NPERR_NO_ERROR; } if((pPlugin->getWindow() == NULL) && (hWnd != NULL)) { // First time in -- no window created by plugin yet dbgOut1("NPP_SetWindow, first time"); if(!pPlugin->init(hWnd)) { delete pPlugin; pPlugin = NULL; return NPERR_MODULE_LOAD_FAILED_ERROR; } } if((pPlugin->getWindow() != NULL) && (hWnd != NULL)) { // Netscape window has been resized dbgOut1("NPP_SetWindow, resizing"); pPlugin->resize(); } return NPERR_NO_ERROR; }
// during this call we know when the plugin window is ready or // is about to be destroyed so we can do some gui specific // initialization and shutdown NPError NPP_SetWindow (NPP instance, NPWindow *pNPWindow) { if(instance == NULL) { return NPERR_INVALID_INSTANCE_ERROR; } NPError rv = NPERR_NO_ERROR; if(pNPWindow == NULL) { return NPERR_GENERIC_ERROR; } CPlugin * pPlugin = (CPlugin *)instance->pdata; if(pPlugin == NULL) { return NPERR_GENERIC_ERROR; } // window just created if(!pPlugin->isInitialized() && (pNPWindow->window != NULL)) { if(!pPlugin->init(pNPWindow)) { delete pPlugin; pPlugin = NULL; return NPERR_MODULE_LOAD_FAILED_ERROR; } } // window goes away if((pNPWindow->window == NULL) && pPlugin->isInitialized()) { return NPERR_NO_ERROR; } // window resized if(pPlugin->isInitialized() && (pNPWindow->window != NULL)) { return NPERR_NO_ERROR; } // this should not happen, nothing to do if((pNPWindow->window == NULL) && !pPlugin->isInitialized()) { return NPERR_NO_ERROR; } return rv; }
/** * Called when the webview finished loading a new page */ void Cordova::loadFinished( bool ok ) { Q_UNUSED(ok) // Change into the xml-directory QDir xmlDir( m_workingDir ); xmlDir.cd( "xml" ); // Try to open the plugins configuration QFile pluginsXml( xmlDir.filePath("plugins.xml") ); if( !pluginsXml.open( QIODevice::ReadOnly | QIODevice::Text ) ) { qDebug() << "Error loading plugins config!"; return; } // Start reading the file as a stream QXmlStreamReader plugins; plugins.setDevice( &pluginsXml ); // Iterate over plugins-configuration and load all according plugins while(!plugins.atEnd()) { if( plugins.readNext() == QXmlStreamReader::StartElement ) { // Check if we have a plugin element if( plugins.name() == "plugin" ) { QXmlStreamAttributes attribs = plugins.attributes(); // Check for name & value attributes if( attribs.hasAttribute("name") && attribs.hasAttribute("value") ) { // Construct object & attribute names QString attribName = attribs.value( "name" ).toString(); QString attribValue = attribs.value( "value" ).toString(); qDebug() << "Adding Plugin " << attribName << " with " << attribValue; // Check for such a plugin CPlugin *currPlugin = PluginRegistry::getRegistry()->getPlugin( attribValue ); if(currPlugin) { currPlugin->init(); emit pluginWantsToBeAdded(attribValue, currPlugin, attribName); execJS( "Cordova.enablePlugin( '" + attribValue + "' )" ); } else { qDebug() << "Unknown Plugin " << attribName; } } } } } // Device is now ready to rumble execJS( "Cordova.deviceready();" ); }
// during this call we know when the plugin window is ready or // is about to be destroyed so we can do some gui specific // initialization and shutdown NPError NPP_SetWindow (NPP instance, NPWindow* pNPWindow) { if(instance == NULL) return NPERR_INVALID_INSTANCE_ERROR; NPError rv = NPERR_NO_ERROR; if(pNPWindow == NULL) return NPERR_GENERIC_ERROR; CPlugin * pPlugin = (CPlugin *)instance->pdata; if(pPlugin == NULL) return NPERR_GENERIC_ERROR; // window just created if(!pPlugin->isInitialized()) { if(!pPlugin->init(pNPWindow)) { return NPERR_MODULE_LOAD_FAILED_ERROR; } return NPERR_NO_ERROR; } else { // window goes away if(pNPWindow->window == NULL) return NPERR_NO_ERROR; // window resized if(pNPWindow->window != NULL) { pPlugin->SetWindow(pNPWindow); return NPERR_NO_ERROR; } } return rv; }
//--------------------------------------------------------------------------- // NPP_New: //--------------------------------------------------------------------------- NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP pInstance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved) { if(pInstance == NULL) return NPERR_INVALID_INSTANCE_ERROR; // See if the content provider specified from where to fetch the plugin char * szPageURL = NULL; char * szFileURL = NULL; char * szFileExtension = NULL; char * buf = NULL; BOOL bHidden = false; for(int i = 0; i < argc; i++) { if(lstrcmpi(argn[i],"pluginspage") == 0 && argv[i] != NULL) szPageURL = (char *)argv[i]; else if(lstrcmpi(argn[i],"codebase") == 0 && argv[i] != NULL) szPageURL = (char *)argv[i]; else if(lstrcmpi(argn[i],"pluginurl") == 0 && argv[i] != NULL) szFileURL = (char *)argv[i]; else if(lstrcmpi(argn[i],"classid") == 0 && argv[i] != NULL) szFileURL = (char *)argv[i]; else if(lstrcmpi(argn[i],"SRC") == 0 && argv[i] != NULL) buf = (char *)argv[i]; else if(lstrcmpi(argn[i],"HIDDEN") == 0 && argv[i] != NULL) bHidden = (lstrcmp((char *)argv[i], "TRUE") == 0); } /* some post-processing on the filename to attempt to extract the extension: */ if(buf != NULL) { buf = strrchr(buf, '.'); if(buf) szFileExtension = ++buf; } CPlugin * pPlugin = new CPlugin(hInst, pInstance, mode, pluginType, szPageURL, szFileURL, szFileExtension, bHidden); if(pPlugin == NULL) return NPERR_OUT_OF_MEMORY_ERROR; if(bHidden) { if(!pPlugin->init(NULL)) { delete pPlugin; pPlugin = NULL; return NPERR_MODULE_LOAD_FAILED_ERROR; } } pInstance->pdata = (void *)pPlugin; return NPERR_NO_ERROR; }