CPlugin::CPlugin(NPP pNPInstance, int16_t argc, char* argn[], char* argv[]): m_pNPInstance(pNPInstance), m_pNPStream(NULL), m_bInitialized(false), m_pScriptableObject(NULL) { #ifdef XP_WIN m_hWnd = NULL; #endif // code from npruntime, get browser version const char *ua = NPN_UserAgent(m_pNPInstance); strcpy(m_String, ua); // Here is an example of passing parameters from plugin to ScriptablePlugin // initialize id NPIdentifier code_id = NPN_GetStringIdentifier("code"); NPVariant v1; VOID_TO_NPVARIANT(v1); for (int16_t i = 0;i < argc;i++) { printf("%s = %s\n", argn[i], argv[i]); if (!strcmp(argn[i],"code")) { STRINGZ_TO_NPVARIANT(m_strdup(argv[i]),v1); } } NPObject *myobj = this->GetScriptableObject(); NPN_SetProperty(m_pNPInstance, myobj, code_id, &v1); NPN_ReleaseObject(myobj); }
void CPlugin::getVersion(char* *aVersion) { const char *ua = NPN_UserAgent(m_pNPInstance); char*& version = *aVersion; version = (char*)NPN_MemAlloc(1 + strlen(ua)); if (version) strcpy(version, ua); }
void CPlugin::getVersion(char* *aVersion) { OutputDebugStringA("cplugin_getversion"); const char *ua = NPN_UserAgent(m_pNPInstance); char*& version = *aVersion; version = (char*)NPN_MemAlloc(1 + strlen(ua)); if (version) strcpy(version, ua); }
NPError NPN_PostURLNotify(NPP instance, const char* url, const char* target, uint32_t len, const char* buf, NPBool file, void* notifyData) { char schema[8]; char porttext[8]; char hostname[256]; char url_path[512]; const char *partial_url; if (target != NULL){ fprintf(stderr, "GetURLNotify: %s %s\n", target, url); return NPERR_NO_ERROR; } partial_url = get_schema(url, schema, sizeof(schema)); partial_url = get_hostname(partial_url, hostname, sizeof(hostname)); partial_url = get_porttext(partial_url, porttext, sizeof(porttext)); partial_url = get_url_path(partial_url, url_path, sizeof(url_path)); if (strncmp(schema, "http://", 7)) { return NPERR_GENERIC_ERROR; } char *foop; char headers[8192]; NPNetStream *stream; proto_stream *protop; struct sockaddr_in name; name.sin_family = AF_INET; name.sin_port = htons(*porttext? atoi(porttext + 1): 80); name.sin_addr = inaddr_convert(hostname); protop = new proto_stream(); assert(protop != NULL); if (protop->connect(&name, sizeof(name))) { protop->rel(); return NPERR_GENERIC_ERROR; } foop = headers; foop += sprintf(foop, "POST %s HTTP/1.0\r\n", url_path); foop += sprintf(foop, "Host: %s%s\r\n", hostname, porttext); foop += sprintf(foop, "User-Agent: %s\r\n", NPN_UserAgent(0)); foop += sprintf(foop, "Accept: application/xml;q=0.9,*/*,q=0.8\r\n"); foop += sprintf(foop, "Connection: close\r\n"); stream = new NPNetStream(instance, notifyData, url, protop); assert(stream != NULL); protop->set_request(headers, buf, len); stream->startup(); protop->rel(); return NPERR_NO_ERROR; }
proto_stream *RedirectURLNotify(const char *url, const char *refer) { char schema[8]; char porttext[8]; char hostname[256]; char url_path[512]; const char *partial_url; partial_url = get_schema(url, schema, sizeof(schema)); partial_url = get_hostname(partial_url, hostname, sizeof(hostname)); partial_url = get_porttext(partial_url, porttext, sizeof(porttext)); partial_url = get_url_path(partial_url, url_path, sizeof(url_path)); if (strncmp(schema, "http://", 7)) { return NULL; } char *foop; char headers[8192]; NPNetStream *stream; proto_stream *protop; struct sockaddr_in name; name.sin_family = AF_INET; name.sin_port = htons(*porttext? atoi(porttext + 1): 80); name.sin_addr = inaddr_convert(hostname); protop = new proto_stream(); assert(protop != NULL); if (protop->connect(&name, sizeof(name))) { protop->rel(); return NULL; } foop = headers; foop += sprintf(foop, "GET %s HTTP/1.0\r\n", url_path); foop += sprintf(foop, "Host: %s%s\r\n", hostname, porttext); foop += sprintf(foop, "User-Agent: %s\r\n", NPN_UserAgent(0)); foop += sprintf(foop, "Accept: application/xml;q=0.9,*/*,q=0.8\r\n"); foop += sprintf(foop, "Refer: %s\r\n", refer); foop += sprintf(foop, "Connection: close\r\n"); foop += sprintf(foop, "\r\n"); protop->set_request(headers); return protop; }
// this will force to draw a version string in the plugin window void CPlugin::showVersion() { const char *ua = NPN_UserAgent(m_pNPInstance); strcpy(m_String, ua); #ifdef XP_WIN InvalidateRect(m_hWnd, NULL, TRUE); UpdateWindow(m_hWnd); #endif if (m_Window) { NPRect r = { (uint16_t)m_Window->y, (uint16_t)m_Window->x, (uint16_t)(m_Window->y + m_Window->height), (uint16_t)(m_Window->x + m_Window->width) }; NPN_InvalidateRect(m_pNPInstance, &r); } }
// // NPP_New - Create a new plug-in instance. // NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP pInstance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved) { SqueakPlugin *squeak; int i; if(pInstance == NULL) return NPERR_INVALID_INSTANCE_ERROR; squeak = SqueakPluginNew(hPluginModule, pInstance); if(!squeak) return NPERR_OUT_OF_MEMORY_ERROR; if(strncmp(NPN_UserAgent(pInstance), "Microsoft Internet Explorer", 27) == 0) SqueakPluginSetIEMode(); for(i=0;i<argc;i++) { if(stricmp(argn[i],"imageName") == 0) { SqueakPluginSetImage(squeak, argv[i]); } if(stricmp(argn[i],"vmName") == 0) { SqueakPluginSetVM(squeak, argv[i]); } if(stricmp(argn[i],"win32Params") == 0) { SqueakPluginSetVMParams(squeak, argv[i]); } /* Pass all other args directly */ SqueakPluginAddParam(squeak, argn[i], argv[i]); } pInstance->pdata = (void *)squeak; return NPERR_NO_ERROR; }
CPlugin::CPlugin(NPP pNPInstance) : m_pNPInstance(pNPInstance), m_pNPStream(NULL), m_bInitialized(FALSE), m_pScriptableObject(NULL) { NPVariant v; NPVariant rval; NPObject *browserWndObj = NULL; #ifdef XP_WIN m_hWnd = NULL; #endif // setup the display string const char *ua = NPN_UserAgent(m_pNPInstance); strcpy(m_String, ua); if ( NPERR_NO_ERROR == NPN_GetValue(m_pNPInstance, NPNVWindowNPObject, &browserWndObj)) { // this is interesting. // Here we are setting up an instance in JavaScript of the ScriptablePluginObject // by inserting a new instance into the DOM. this will be referenced by document.pluginobj; // NPObject *myobj = NPN_CreateObject(m_pNPInstance, GET_NPOBJECT_CLASS(ScriptablePluginObject)); if ( myobj ) { // create an identifier for the plugin object NPIdentifier n = NPN_GetStringIdentifier("pluginobj"); // now insert into the DOM OBJECT_TO_NPVARIANT(myobj, v); if (NPN_SetProperty(m_pNPInstance, browserWndObj, n, &v)) { // validate the object if ( NPN_GetProperty(m_pNPInstance, browserWndObj, n, &rval) ) { printf ("Object set/get test "); if (NPVARIANT_IS_OBJECT(rval) && NPVARIANT_TO_OBJECT(rval) == myobj) { printf ("succeeded!\n"); } else { printf ("FAILED!\n"); } } else { printf("failed to get pluginobj"); } NPN_ReleaseVariantValue(&rval); } else { printf("failed to set pluginobj"); } NPN_ReleaseObject(myobj); } else { printf("failed to create pluginobj"); } } else { printf("failed to get browser window"); } }
/*! Returns the user agent (browser name) containing this instance. See also: <a href=http://developer.netscape.com/library/documentation/communicator/plugin/refpgve.htm#npnuseragent> Netscape: NPN_UserAgent method</a> */ const char* QNPInstance::userAgent() const { return NPN_UserAgent(pi->npp); }
CPlugin::CPlugin(NPP pNPInstance) : m_pNPInstance(pNPInstance), m_pNPStream(NULL), m_bInitialized(FALSE), m_pScriptableObject(NULL) { #ifdef XP_WIN m_hWnd = NULL; #endif MessageBox(NULL, "begin", "test", MB_OK); NPN_GetValue(m_pNPInstance, NPNVWindowNPObject, &sWindowObj); // 添加自定义方法 sGetVersion = NPN_GetStringIdentifier("GetVersion"); /* NPIdentifier n = NPN_GetStringIdentifier("foof"); sFoo_id = NPN_GetStringIdentifier("foo"); sBar_id = NPN_GetStringIdentifier("bar"); sDocument_id = NPN_GetStringIdentifier("document"); sBody_id = NPN_GetStringIdentifier("body"); sCreateElement_id = NPN_GetStringIdentifier("createElement"); sCreateTextNode_id = NPN_GetStringIdentifier("createTextNode"); sAppendChild_id = NPN_GetStringIdentifier("appendChild"); sPluginType_id = NPN_GetStringIdentifier("PluginType"); NPVariant v; INT32_TO_NPVARIANT(46, v); NPN_SetProperty(m_pNPInstance, sWindowObj, n, &v); NPVariant rval; NPN_GetProperty(m_pNPInstance, sWindowObj, n, &rval); if (NPVARIANT_IS_INT32(rval)) { printf("rval = %d\n", NPVARIANT_TO_INT32(rval)); } n = NPN_GetStringIdentifier("document"); if (!NPN_IdentifierIsString(n)) { NPString str; str.UTF8Characters = "alert('NPN_IdentifierIsString() test failed!');"; str.UTF8Length = strlen(str.UTF8Characters); NPN_Evaluate(m_pNPInstance, sWindowObj, &str, NULL); } NPObject *doc; NPN_GetProperty(m_pNPInstance, sWindowObj, n, &rval); if (NPVARIANT_IS_OBJECT(rval) && (doc = NPVARIANT_TO_OBJECT(rval))) { n = NPN_GetStringIdentifier("title"); NPN_GetProperty(m_pNPInstance, doc, n, &rval); if (NPVARIANT_IS_STRING(rval)) { printf ("title = %s\n", NPVARIANT_TO_STRING(rval).UTF8Characters); NPN_ReleaseVariantValue(&rval); } n = NPN_GetStringIdentifier("plugindoc"); OBJECT_TO_NPVARIANT(doc, v); NPN_SetProperty(m_pNPInstance, sWindowObj, n, &v); NPString str; str.UTF8Characters = "document.getElementById('result').innerHTML += '<p>' + 'NPN_Evaluate() test, document = ' + this + '</p>';"; str.UTF8Length = strlen(str.UTF8Characters); NPN_Evaluate(m_pNPInstance, doc, &str, NULL); NPN_ReleaseObject(doc); } NPVariant barval; NPN_GetProperty(m_pNPInstance, sWindowObj, sBar_id, &barval); NPVariant arg; OBJECT_TO_NPVARIANT(sWindowObj, arg); NPN_InvokeDefault(m_pNPInstance, NPVARIANT_TO_OBJECT(barval), &arg, 1, &rval); if (NPVARIANT_IS_INT32(rval) && NPVARIANT_TO_INT32(rval) == 4) { printf ("Default function call SUCCEEDED!\n"); } else { printf ("Default function call FAILED!\n"); } NPN_ReleaseVariantValue(&barval); NPN_ReleaseVariantValue(&rval); #if 0 n = NPN_GetStringIdentifier("prompt"); NPVariant vars[3]; STRINGZ_TO_NPVARIANT("foo", vars[0]); STRINGZ_TO_NPVARIANT("bar", vars[1]); STRINGZ_TO_NPVARIANT("foof", vars[2]); NPN_Invoke(sWindowObj, n, vars, 3, &rval); if (NPVARIANT_IS_STRING(rval)) { printf ("prompt returned '%s'\n", NPVARIANT_TO_STRING(rval).UTF8Characters); } NPN_ReleaseVariantValue(&rval); #endif NPObject *myobj = NPN_CreateObject(m_pNPInstance, GET_NPOBJECT_CLASS(ScriptablePluginObject)); n = NPN_GetStringIdentifier("pluginobj"); OBJECT_TO_NPVARIANT(myobj, v); NPN_SetProperty(m_pNPInstance, sWindowObj, n, &v); NPN_GetProperty(m_pNPInstance, sWindowObj, n, &rval); printf ("Object set/get test "); if (NPVARIANT_IS_OBJECT(rval) && NPVARIANT_TO_OBJECT(rval) == myobj) { printf ("succeeded!\n"); } else { printf ("FAILED!\n"); } NPN_ReleaseVariantValue(&rval); NPN_ReleaseObject(myobj); */ const char *ua = NPN_UserAgent(m_pNPInstance); strcpy(m_String, ua); MessageBox(NULL, "end", "test", MB_OK); }
CString CPlugin::GetFirefoxUserAgent() { return UTF8ToCString(NPN_UserAgent(m_pNPInstance)); }
const char * nsPluginInstance::getVersion() { return NPN_UserAgent(mInstance); }
NS_METHOD CPluginManager::UserAgent(const char* *result) { *result = NPN_UserAgent(NULL); return NS_OK; }
/*! Returns the user agent (browser name) containing this plugin. This is a wrapper around NPN_UserAgent. \sa getBrowserVersion() */ QString QtNPBindable::userAgent() const { if (!pi) return QString(); return QString::fromLocal8Bit(NPN_UserAgent(pi->npp)); }
// this will force to draw a version string in the plugin window void nsPluginInstance::showVersion() { const char *ua = NPN_UserAgent(mInstance); strcpy(mString, ua); draw(); }
CPlugin::CPlugin(NPP pNPInstance) : m_pNPInstance(pNPInstance), m_pNPStream(NULL), m_bInitialized(FALSE), m_pScriptableObject(NULL) { #ifdef XP_WIN m_hWnd = NULL; #endif NPN_GetValue(m_pNPInstance, NPNVWindowNPObject, &sWindowObj); NPIdentifier n = NPN_GetStringIdentifier("foof"); sendCmd_id = NPN_GetStringIdentifier("sendCmd"); NPVariant v; INT32_TO_NPVARIANT(46, v); NPN_SetProperty(m_pNPInstance, sWindowObj, n, &v); n = NPN_GetStringIdentifier("document"); NPVariant arg; OBJECT_TO_NPVARIANT(sWindowObj, arg); NPObject *myobj = NPN_CreateObject(m_pNPInstance, GET_NPOBJECT_CLASS(ScriptablePluginObject)); n = NPN_GetStringIdentifier("objJSExt"); OBJECT_TO_NPVARIANT(myobj, v); NPN_SetProperty(m_pNPInstance, sWindowObj, n, &v); NPN_ReleaseObject(myobj); const char *ua = NPN_UserAgent(m_pNPInstance); strcpy(m_String, ua); // Create a "location" identifier. NPIdentifier identifier = NPN_GetStringIdentifier( "location" ); // Declare a local variant value. NPVariant variantValue; // Get the location property from the window object (which is another object). bool b1 = NPN_GetProperty( m_pNPInstance, sWindowObj, identifier, &variantValue ); // Get a pointer to the "location" object. NPObject *locationObj = variantValue.value.objectValue; // Create a "href" identifier. identifier = NPN_GetStringIdentifier( "href" ); // Get the location property from the location object. bool b2 = NPN_GetProperty( m_pNPInstance, locationObj, identifier, &variantValue ); g_strPageURL = ""; NPString npStr = NPVARIANT_TO_STRING( variantValue ); for (unsigned int i=0; i<npStr.utf8length; i++) { g_strPageURL += npStr.utf8characters[ i ]; } NPN_ReleaseObject(locationObj); }
const char* StBrowserPlugin::getVersion() { return NPN_UserAgent(nppInstance); }
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; }