bool BrowserStreamChild::DeliverPendingData() { if (mState != ALIVE && mState != DYING) NS_RUNTIMEABORT("Unexpected state"); NS_ASSERTION(mPendingData.Length(), "Called from Deliver with empty pending"); while (mPendingData[0].curpos < static_cast<int32_t>(mPendingData[0].data.Length())) { int32_t r = mInstance->mPluginIface->writeready(&mInstance->mData, &mStream); if (kStreamOpen != mStreamStatus) return false; if (0 == r) // plugin wants to suspend delivery return true; r = mInstance->mPluginIface->write( &mInstance->mData, &mStream, mPendingData[0].offset + mPendingData[0].curpos, // offset mPendingData[0].data.Length() - mPendingData[0].curpos, // length const_cast<char*>(mPendingData[0].data.BeginReading() + mPendingData[0].curpos)); if (kStreamOpen != mStreamStatus) return false; if (0 == r) return true; if (r < 0) { // error condition NPN_DestroyStream(NPRES_NETWORK_ERR); return false; } mPendingData[0].curpos += r; } mPendingData.RemoveElementAt(0); return false; }
void CLogger::dumpLogToTarget() { if(m_pLog == NULL) return; static char szOutput[1024]; if (m_pPlugin && m_pPlugin->isStandAlone()) { for(LogItemListElement * plile = m_pLog->m_pFirst; plile != NULL; plile = plile->pNext) { formatLogItem(plile->plis, szOutput, "", TRUE); m_pPlugin->outputToNativeWindow(szOutput); } } else { BOOL bTemporaryStream = ((m_pStream == NULL) && !getShowImmediatelyFlag()); if(m_pStream == NULL) NPN_NewStream(m_pPluginInstance, m_szStreamType, m_szTarget, &m_pStream); for(LogItemListElement * plile = m_pLog->m_pFirst; plile != NULL; plile = plile->pNext) { int iLength = formatLogItem(plile->plis, szOutput, ""); NPN_Write(m_pPluginInstance, m_pStream, iLength, (void *)szOutput); } if(bTemporaryStream) { NPN_DestroyStream(m_pPluginInstance, m_pStream, NPRES_DONE); m_pStream = NULL; } } }
/*! Destroys the stream. */ QNPStream::~QNPStream() { if (!qnps_no_call_back) { qnps_no_call_back++; NPN_DestroyStream(inst->pi->npp, stream, NPRES_USER_BREAK); qnps_no_call_back--; } }
int32 NPP_Write(NPP instance, NPStream *stream, int32 offset, int32 len, void *buffer) { if (instance == NULL) return NPERR_INVALID_INSTANCE_ERROR; /* We don't want any data, kill the stream */ NPN_DestroyStream(instance, stream, NPRES_DONE); return -1L; /* don't accept any bytes in NPP_Write() */ }
CPluginBase::~CPluginBase() { if(m_pStream != NULL) { NPN_DestroyStream(m_pNPInstance, m_pStream, NPRES_DONE); m_pStream = NULL; } if(m_pScriptStream != NULL) { NPN_DestroyStream(m_pNPInstance, m_pScriptStream, NPRES_DONE); m_pScriptStream = NULL; } if(m_pNPNAlloced != NULL) { NPN_MemFree(m_pNPNAlloced); m_pNPNAlloced = NULL; } }
int32 NPP_WriteReady(NPP instance, NPStream *stream) { if (instance == NULL) return NPERR_INVALID_INSTANCE_ERROR; /* We don't want any data, kill the stream */ NPN_DestroyStream(instance, stream, NPRES_DONE); /* Number of bytes ready to accept in NPP_Write() */ return -1L; /* don't accept any bytes in NPP_Write() */ }
void CLogger::clearTarget() { if (m_pPlugin && m_pPlugin->isStandAlone()) { m_pPlugin->outputToNativeWindow(""); } else { if(m_pStream != NULL) NPN_DestroyStream(m_pPluginInstance, m_pStream, NPRES_DONE); NPN_NewStream(m_pPluginInstance, m_szStreamType, m_szTarget, &m_pStream); NPN_Write(m_pPluginInstance, m_pStream, 1, (void *)"\n"); if(!m_bShowImmediately) { NPN_DestroyStream(m_pPluginInstance, m_pStream, NPRES_DONE); m_pStream = NULL; } } }
//------------------------------------------------------------------------------------ // NPP_Write: //------------------------------------------------------------------------------------ int32_t NP_LOADDS NPP_Write(NPP pInstance, NPStream *stream, int32_t offset, int32_t len, void *buffer) { //dbgOut1("NPP_Write"); if(pInstance == NULL) return NPERR_INVALID_INSTANCE_ERROR; CPlugin * pPlugin = (CPlugin *)pInstance->pdata; assert(pPlugin != NULL); // We don't want any data, kill the stream NPN_DestroyStream(pInstance, stream, NPRES_DONE); return -1; // tell the browser to abort the stream, don't need it }
//------------------------------------------------------------------------------------ // NPP_WriteReady: //------------------------------------------------------------------------------------ int32_t NP_LOADDS NPP_WriteReady(NPP pInstance, NPStream *stream) { dbgOut1("NPP_WriteReady"); if(pInstance == NULL) return NPERR_INVALID_INSTANCE_ERROR; CPlugin * pPlugin = (CPlugin *)pInstance->pdata; assert(pPlugin != NULL); // We don't want any data, kill the stream NPN_DestroyStream(pInstance, stream, NPRES_DONE); return -1L; // don't accept any bytes in NPP_Write() }
void CPlugin::URLNotify(const char * szURL) { dbgOut2("CPlugin::URLNotify(), URL '%s'", szURL); NPStream * pStream = NULL; char buf[256]; assert(m_hInst != NULL); assert(m_pNPInstance != NULL); int iSize = LoadString(m_hInst, IDS_GOING2HTML, buf, sizeof(buf)); NPError rc = NPN_NewStream(m_pNPInstance, "text/html", "asd_plugin_finder", &pStream); if (rc != NPERR_NO_ERROR) return; //char buf[] = "<html>\n<body>\n\n<h2 align=center>NPN_NewStream / NPN_Write - This seems to work.</h2>\n\n</body>\n</html>"; NPN_Write(m_pNPInstance, pStream, iSize, buf); NPN_DestroyStream(m_pNPInstance, pStream, NPRES_DONE); }
CPluginManagerStream::~CPluginManagerStream(void) { //pstream = NULL; NPN_DestroyStream(npp, pstream, NPRES_DONE); }
DWORD CPluginBase::makeNPNCall(NPAPI_Action action, DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4, DWORD dw5, DWORD dw6, DWORD dw7) { DWORD dwRet = 0L; DWORD dwTickEnter = XP_GetTickCount(); switch (action) { case action_invalid: assert(0); break; case action_npn_version: { static int iP_maj = 0; static int iP_min = 0; static int iN_maj = 0; static int iN_min = 0; if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)&iP_maj; if(dw2 == DEFAULT_DWARG_VALUE) dw2 = (DWORD)&iP_min; if(dw3 == DEFAULT_DWARG_VALUE) dw3 = (DWORD)&iN_maj; if(dw4 == DEFAULT_DWARG_VALUE) dw4 = (DWORD)&iN_min; NPN_Version((int *)dw1, (int *)dw2, (int *)dw3, (int *)dw4); break; } case action_npn_get_url_notify: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = NPN_GetURLNotify((NPP)dw1, (char *)dw2, (char *)dw3, (void *)dw4); break; case action_npn_get_url: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = NPN_GetURL((NPP)dw1, (char *)dw2, (char *)dw3); break; case action_npn_post_url_notify: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = NPN_PostURLNotify((NPP)dw1, (char *)dw2, (char *)dw3, (int32)dw4, (char *)dw5, (BOOL)dw6, (void *)dw7); break; case action_npn_post_url: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = NPN_PostURL((NPP)dw1, (char *)dw2, (char *)dw3, (int32)dw4, (char *)dw5, (BOOL)dw6); break; case action_npn_new_stream: assert(m_pStream == NULL); if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; if(dw4 == DEFAULT_DWARG_VALUE) dw4 = (DWORD)&m_pStream; dwRet = NPN_NewStream((NPP)dw1, (char *)dw2, (char *)dw3, (NPStream **)dw4); break; case action_npn_destroy_stream: assert(m_pStream != NULL); if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; if(dw2 == DEFAULT_DWARG_VALUE) dw2 = (DWORD)m_pStream; dwRet = NPN_DestroyStream((NPP)dw1, (NPStream *)dw2, (NPError)dw3); m_pStream = NULL; break; case action_npn_request_read: break; case action_npn_write: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; if(dw2 == DEFAULT_DWARG_VALUE) dw2 = (DWORD)m_pStream; dwRet = NPN_Write((NPP)dw1, (NPStream *)dw2, (int32)dw3, (void *)dw4); break; case action_npn_status: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; NPN_Status((NPP)dw1, (char *)dw2); break; case action_npn_user_agent: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = (DWORD)NPN_UserAgent((NPP)dw1); break; case action_npn_mem_alloc: assert(m_pNPNAlloced == NULL); m_pNPNAlloced = NPN_MemAlloc((int32)dw1); dwRet = (DWORD)m_pNPNAlloced; if(m_pNPNAlloced != NULL) { for(int i = 0; i < (int)dw1; i++) *(((BYTE *)m_pNPNAlloced) + i) = 255; } break; case action_npn_mem_free: assert(m_pNPNAlloced != NULL); dw1 = (DWORD)m_pNPNAlloced; NPN_MemFree((void *)dw1); m_pNPNAlloced = NULL; break; case action_npn_mem_flush: dwRet = (DWORD)NPN_MemFlush((int32)dw1); break; case action_npn_reload_plugins: NPN_ReloadPlugins((NPBool)dw1); break; case action_npn_get_java_env: dwRet = (DWORD)NPN_GetJavaEnv(); break; case action_npn_get_java_peer: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; dwRet = (DWORD)NPN_GetJavaPeer((NPP)dw1); break; case action_npn_get_value: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; if(dw3 == DEFAULT_DWARG_VALUE) dw3 = (DWORD)m_pValue; dwRet = (DWORD)NPN_GetValue((NPP)dw1, (NPNVariable)dw2, (void *)dw3); break; case action_npn_set_value: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; if(dw3 == DEFAULT_DWARG_VALUE) dw3 = (DWORD)m_pValue; // note that Mozilla expects boolean values not as a pointer to BOOL // but rather as simply null and not null, let's convert if((dw2 == NPPVpluginWindowBool) || (dw2 == NPPVpluginTransparentBool) || (dw2 == NPPVpluginKeepLibraryInMemory)) { dwRet = (DWORD)NPN_SetValue((NPP)dw1, (NPPVariable)dw2, (void *)(*(BOOL *)dw3)); } else dwRet = (DWORD)NPN_SetValue((NPP)dw1, (NPPVariable)dw2, (void *)dw3); break; case action_npn_invalidate_rect: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; NPN_InvalidateRect((NPP)dw1, (NPRect *)dw2); break; case action_npn_invalidate_region: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; NPN_InvalidateRegion((NPP)dw1, (NPRegion)dw2); break; case action_npn_force_redraw: if(dw1 == DEFAULT_DWARG_VALUE) dw1 = (DWORD)m_pNPInstance; NPN_ForceRedraw((NPP)dw1); break; default: assert(0); break; } DWORD dwTickReturn = XP_GetTickCount(); pLogger->appendToLog(action, dwTickEnter, dwTickReturn, dwRet, dw1, dw2, dw3, dw4, dw5, dw6, dw7); return dwRet; }