From e74ff783719786ebdac9a93070455ae468071e7a Mon Sep 17 00:00:00 2001 From: "mkaply%us.ibm.com" Date: Tue, 23 May 2006 01:28:05 +0000 Subject: [PATCH] 259140 - r/sr=mkaply (OS/2 only) - patch from Peter Weilbacher - resync default plugin to match Windows git-svn-id: svn://10.0.0.236/trunk@198245 18797224-902f-48f8-a5cc-f745e15eee43 --- .../plugin/samples/default/os2/Makefile.in | 17 +-- .../plugin/samples/default/os2/npos2.cpp | 8 ++ .../plugin/samples/default/os2/npshell.cpp | 23 ++- .../plugin/samples/default/os2/plugin.cpp | 134 ++++++++++++++---- .../plugin/samples/default/os2/plugin.h | 40 +++--- .../plugin/samples/default/os2/utils.cpp | 2 +- 6 files changed, 162 insertions(+), 62 deletions(-) diff --git a/mozilla/modules/plugin/samples/default/os2/Makefile.in b/mozilla/modules/plugin/samples/default/os2/Makefile.in index 531ea9db518..dec18330423 100644 --- a/mozilla/modules/plugin/samples/default/os2/Makefile.in +++ b/mozilla/modules/plugin/samples/default/os2/Makefile.in @@ -50,17 +50,18 @@ RESFILE = npnulos2.res PACKAGE_FILE = npnul.pkg REQUIRES = java \ - plugin \ + xpcom \ + pref \ $(NULL) CPPSRCS = \ - maindll.cpp\ - dbg.cpp\ - npos2.cpp\ - dialogs.cpp\ - npshell.cpp\ - plugin.cpp\ - utils.cpp\ + maindll.cpp \ + plugin.cpp \ + dbg.cpp \ + dialogs.cpp \ + npshell.cpp \ + npos2.cpp \ + utils.cpp \ $(NULL) # plugins should always be shared, even in the "static" build diff --git a/mozilla/modules/plugin/samples/default/os2/npos2.cpp b/mozilla/modules/plugin/samples/default/os2/npos2.cpp index f9636e18e89..10b3aeaffde 100644 --- a/mozilla/modules/plugin/samples/default/os2/npos2.cpp +++ b/mozilla/modules/plugin/samples/default/os2/npos2.cpp @@ -44,6 +44,8 @@ #include "npupp.h" #endif +#include "nsDefaultPlugin.h" + //\\// DEFINE #define NP_EXPORT @@ -169,6 +171,12 @@ NP_Shutdown() return NPERR_NO_ERROR; } +char * NP_GetMIMEDescription() +{ + static char mimetype[] = NS_PLUGIN_DEFAULT_MIME_DESCRIPTION; + return mimetype; +} + // END - PLUGIN DLL entry points ////\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//. //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\. diff --git a/mozilla/modules/plugin/samples/default/os2/npshell.cpp b/mozilla/modules/plugin/samples/default/os2/npshell.cpp index dc3dbebbc4c..77d528437e0 100644 --- a/mozilla/modules/plugin/samples/default/os2/npshell.cpp +++ b/mozilla/modules/plugin/samples/default/os2/npshell.cpp @@ -41,7 +41,7 @@ #include "npnulos2.h" -#include "Plugin.h" // this includes npapi.h +#include "plugin.h" // this includes npapi.h #include "utils.h" #include "dbg.h" @@ -105,9 +105,8 @@ NPError NP_LOADDS NPP_New(NPMIMEType pluginType, if(buf != NULL) { buf = strrchr(buf, '.'); - if (buf) { + if(buf) szFileExtension = ++buf; - } } CPlugin * pPlugin = new CPlugin(hInst, @@ -235,7 +234,10 @@ NPP_NewStream(NPP pInstance, CPlugin * pPlugin = (CPlugin *)pInstance->pdata; assert(pPlugin != NULL); - return NPERR_NO_ERROR; + if (!pPlugin) + return NPERR_GENERIC_ERROR; + + return pPlugin->newStream(type, stream, seekable, stype); } //------------------------------------------------------------------------------------ @@ -251,6 +253,9 @@ NPP_WriteReady(NPP pInstance, NPStream *stream) 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() } @@ -267,7 +272,10 @@ NPP_Write(NPP pInstance, NPStream *stream, int32 offset, int32 len, void *buffer CPlugin * pPlugin = (CPlugin *)pInstance->pdata; assert(pPlugin != NULL); - return -1; // tell Nav to abort the stream, don't need it + // 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 } //------------------------------------------------------------------------------------ @@ -283,7 +291,10 @@ NPP_DestroyStream(NPP pInstance, NPStream *stream, NPError reason) CPlugin * pPlugin = (CPlugin *)pInstance->pdata; assert(pPlugin != NULL); - return NPERR_NO_ERROR; + if (!pPlugin) + return NPERR_GENERIC_ERROR; + + return pPlugin->destroyStream(stream, reason); } //------------------------------------------------------------------------------------ diff --git a/mozilla/modules/plugin/samples/default/os2/plugin.cpp b/mozilla/modules/plugin/samples/default/os2/plugin.cpp index 4b2322570fd..ac40b0012a7 100644 --- a/mozilla/modules/plugin/samples/default/os2/plugin.cpp +++ b/mozilla/modules/plugin/samples/default/os2/plugin.cpp @@ -38,8 +38,6 @@ #define INCL_GPI #define INCL_WIN #include -#include -#include #include #include "npnulos2.h" @@ -48,6 +46,10 @@ #include "utils.h" #include "dialogs.h" #include "dbg.h" +#include "nsIServiceManager.h" +#include "nsIPref.h" + +nsIServiceManager * gServiceManager = NULL; static char szNullPluginWindowClassName[] = CLASS_NULL_PLUGIN; @@ -83,24 +85,26 @@ CPlugin::CPlugin(HMODULE hInst, PSZ szFileURL, PSZ szFileExtension, BOOL bHidden) : + m_hInst(hInst), m_pNPInstance(pNPInstance), m_wMode(wMode), - m_hInst(hInst), m_hWnd(NULL), m_hWndParent(NULL), - m_hWndDialog(NULL), m_hIcon(NULL), + m_szURLString(NULL), + m_szCommandMessage(NULL), + m_bWaitingStreamFromPFS(FALSE), + m_PFSStream(NULL), + m_bHidden(bHidden), m_pNPMIMEType(NULL), m_szPageURL(NULL), m_szFileURL(NULL), m_szFileExtension(NULL), + m_hWndDialog(NULL), m_bOnline(TRUE), m_bJava(TRUE), m_bJavaScript(TRUE), - m_bSmartUpdate(TRUE), - m_szURLString(NULL), - m_szCommandMessage(NULL), - m_bHidden(bHidden) + m_bSmartUpdate(TRUE) { dbgOut1("CPlugin::CPlugin()"); assert(m_hInst != NULL); @@ -197,6 +201,29 @@ BOOL CPlugin::init(HWND hWndParent) { dbgOut1("CPlugin::init()"); + nsISupports * sm = NULL; + nsIPref * nsPrefService = NULL; + PRBool bSendUrls = PR_FALSE; // default to false if problem getting pref + + // note that Mozilla will add reference, so do not forget to release + NPN_GetValue(NULL, NPNVserviceManager, &sm); + + // do a QI on the service manager we get back to ensure it's the one we are expecting + if(sm) { + sm->QueryInterface(NS_GET_IID(nsIServiceManager), (void**)&gServiceManager); + NS_RELEASE(sm); + } + + if (gServiceManager) { + // get service using its contract id and use it to allocate the memory + gServiceManager->GetServiceByContractID(NS_PREF_CONTRACTID, NS_GET_IID(nsIPref), (void **)&nsPrefService); + if(nsPrefService) { + nsPrefService->GetBoolPref("application.use_ns_plugin_finder", &bSendUrls); + NS_RELEASE(nsPrefService); + } + } + m_bSmartUpdate = bSendUrls; + if(!m_bHidden) { assert(WinIsWindow((HAB)0, hWndParent)); @@ -249,6 +276,10 @@ void CPlugin::shut() WinDestroyWindow(m_hWnd); m_hWnd = NULL; } + + // we should release the service manager + NS_IF_RELEASE(gServiceManager); + gServiceManager = NULL; } HWND CPlugin::getWindow() @@ -284,7 +315,7 @@ PSZ CPlugin::createURLString() } // check if there is file URL first - if(m_szFileURL != NULL) + if(!m_bSmartUpdate && m_szFileURL != NULL) { m_szURLString = new char[strlen(m_szFileURL) + 1]; if(m_szURLString == NULL) @@ -303,14 +334,15 @@ PSZ CPlugin::createURLString() m_pNPMIMEType)) ? 1 : 0; } - if(m_szPageURL != NULL && !contentTypeIsJava) + if(!m_bSmartUpdate && m_szPageURL != NULL && !contentTypeIsJava) { szAddress = new char[strlen(m_szPageURL) + 1]; if(szAddress == NULL) return NULL; strcpy(szAddress, m_szPageURL); - m_szURLString = new char[strlen(szAddress) + 1 + strlen((PSZ)m_pNPMIMEType) + 1]; + m_szURLString = new char[strlen(szAddress) + 1 + + strlen((PSZ)m_pNPMIMEType) + 1]; if(m_szURLString == NULL) return NULL; @@ -320,7 +352,7 @@ PSZ CPlugin::createURLString() } else // default { - if(!m_bJavaScript) + if(!m_bSmartUpdate) { urlToOpen = szDefaultPluginFinderURL; @@ -333,13 +365,15 @@ PSZ CPlugin::createURLString() return NULL; strcpy(szAddress, urlToOpen); - m_szURLString = new char[strlen(szAddress) + 1 + strlen((PSZ)m_pNPMIMEType) + 1]; + m_szURLString = new char[strlen(szAddress) + 10 + + strlen((PSZ)m_pNPMIMEType) + 1]; if(m_szURLString == NULL) return NULL; // Append the MIME type to the URL - sprintf(m_szURLString, "%s?%s", szAddress, (PSZ)m_pNPMIMEType); + sprintf(m_szURLString, "%s?mimetype=%s", + szAddress, (PSZ)m_pNPMIMEType); } else { @@ -349,11 +383,26 @@ PSZ CPlugin::createURLString() urlToOpen = szPageUrlForJVM; } + // wsprintf doesn't like null pointers on NT or 98, so + // change any null string pointers to null strings + if (!m_szPageURL) { + m_szPageURL = new char[1]; + m_szPageURL[0] = '\0'; + } + + if (!m_szFileURL) { + m_szFileURL = new char[1]; + m_szFileURL[0] = '\0'; + } + m_szURLString = new char[strlen(szPluginFinderCommandBeginning) + strlen(urlToOpen) + 10 + - strlen((PSZ)m_pNPMIMEType) + strlen(szPluginFinderCommandEnd) + 1]; - sprintf(m_szURLString, "%s%s?mimetype=%s%s", - szPluginFinderCommandBeginning, urlToOpen, - (PSZ)m_pNPMIMEType, szPluginFinderCommandEnd); + strlen((PSZ)m_pNPMIMEType) + 13 + + strlen((PSZ)m_szPageURL) + 11 + + strlen((PSZ)m_szFileURL) + + strlen(szPluginFinderCommandEnd) + 1]; + sprintf(m_szURLString, "%s%s?mimetype=%s&pluginspage=%s&pluginurl=%s%s", + szPluginFinderCommandBeginning, urlToOpen, + (PSZ)m_pNPMIMEType, m_szPageURL, m_szFileURL, szPluginFinderCommandEnd); } } @@ -375,14 +424,8 @@ void CPlugin::getPluginRegular() dbgOut3("CPlugin::getPluginRegular(), %#08x '%s'", m_pNPInstance, szURL); - if(m_szFileURL != NULL) - NPN_GetURL(m_pNPInstance, szURL, "_current"); - else if(m_szPageURL != NULL) - NPN_GetURL(m_pNPInstance, szURL, "_blank"); - else if(m_bJavaScript) - NPN_GetURL(m_pNPInstance, szURL, NULL); - else - NPN_GetURL(m_pNPInstance, szURL, "_blank"); + NPN_GetURL(m_pNPInstance, szURL, NULL); + m_bWaitingStreamFromPFS = TRUE; } void CPlugin::getPluginSmart() @@ -398,7 +441,7 @@ void CPlugin::getPluginSmart() dbgOut3("%#08x '%s'", m_pNPInstance, szJSString); - assert(strlen(szJSString) > 0); + assert(*szJSString); NPN_GetURL(m_pNPInstance, szJSString, "smartupdate_plugin_finder"); */ @@ -415,7 +458,7 @@ void CPlugin::showGetPluginDialog() NPN_GetValue(m_pNPInstance, NPNVisOfflineBool, (void *)&bOffline); NPN_GetValue(m_pNPInstance, NPNVjavascriptEnabledBool, (void *)&m_bJavaScript); - NPN_GetValue(m_pNPInstance, NPNVasdEnabledBool, (void *)&m_bSmartUpdate); + //NPN_GetValue(m_pNPInstance, NPNVasdEnabledBool, (void *)&m_bSmartUpdate); m_bOnline = !bOffline; @@ -435,14 +478,19 @@ void CPlugin::showGetPluginDialog() dbgOut2("JavaScript %s", m_bJavaScript ? "Enabled" : "Disabled"); dbgOut2("SmartUpdate %s", m_bSmartUpdate ? "Enabled" : "Disabled"); - if((m_szPageURL != NULL) || (m_szFileURL != NULL) || !m_bJavaScript) + if((!m_bSmartUpdate && (m_szPageURL != NULL) || (m_szFileURL != NULL)) || !m_bJavaScript) { int iRet = WinDlgBox(HWND_DESKTOP, m_hWnd, (PFNWP)GetPluginDialogProc, m_hInst, IDD_PLUGIN_DOWNLOAD, (PVOID)this); if(iRet != IDC_GET_PLUGIN) return; } + else + getPlugin(); +} +void CPlugin::getPlugin() +{ if(m_szCommandMessage != NULL) { delete [] m_szCommandMessage; @@ -503,6 +551,32 @@ void CPlugin::URLNotify(const char * szURL) NPN_DestroyStream(m_pNPInstance, pStream, NPRES_DONE); } +NPError CPlugin::newStream(NPMIMEType type, NPStream *stream, NPBool seekable, uint16 *stype) +{ + if (!m_bWaitingStreamFromPFS) + return NPERR_NO_ERROR; + + m_bWaitingStreamFromPFS = FALSE; + m_PFSStream = stream; + + if (stream) { + if (type && !strcmp(type, "application/x-xpinstall")) + NPN_GetURL(m_pNPInstance, stream->url, "_self"); + else + NPN_GetURL(m_pNPInstance, stream->url, "_blank"); + } + + return NPERR_NO_ERROR; +} + +NPError CPlugin::destroyStream(NPStream *stream, NPError reason) +{ + if (stream == m_PFSStream) + m_PFSStream = NULL; + + return NPERR_NO_ERROR; +} + BOOL CPlugin::readyToRefresh() { char szString[1024] = {'\0'}; @@ -690,7 +764,7 @@ MRESULT EXPENTRY NP_LOADDS PluginWndProc(HWND hWnd, ULONG message, MPARAM mp1, M case WM_BUTTON1UP: pPlugin->onLButtonUp(hWnd,0,0,0); return 0L; - case WM_BUTTON2UP: + case WM_BUTTON2UP: pPlugin->onRButtonUp(hWnd,0,0,0); return 0L; case WM_PAINT: diff --git a/mozilla/modules/plugin/samples/default/os2/plugin.h b/mozilla/modules/plugin/samples/default/os2/plugin.h index d039c6c019d..a15f28eff8b 100644 --- a/mozilla/modules/plugin/samples/default/os2/plugin.h +++ b/mozilla/modules/plugin/samples/default/os2/plugin.h @@ -43,23 +43,25 @@ class CPlugin { private: - HMODULE m_hInst; - NPP m_pNPInstance; - SHORT m_wMode; - HWND m_hWnd; - HWND m_hWndParent; - HPOINTER m_hIcon; - char * m_szURLString; + HMODULE m_hInst; + NPP m_pNPInstance; + SHORT m_wMode; + HWND m_hWnd; + HWND m_hWndParent; + HPOINTER m_hIcon; + char * m_szURLString; - char * m_szCommandMessage; + char * m_szCommandMessage; + BOOL m_bWaitingStreamFromPFS; + NPStream* m_PFSStream; public: - BOOL m_bHidden; + BOOL m_bHidden; NPMIMEType m_pNPMIMEType; - PSZ m_szPageURL; // Location of plug-in HTML page - PSZ m_szFileURL; // Location of plug-in JAR file - PSZ m_szFileExtension; // File extension associated with the of the unknown mimetype - HWND m_hWndDialog; + PSZ m_szPageURL; // Location of plug-in HTML page + PSZ m_szFileURL; // Location of plug-in JAR file + PSZ m_szFileExtension; // File extension associated with the of the unknown mimetype + HWND m_hWndDialog; // environment BOOL m_bOnline; @@ -89,27 +91,31 @@ public: void shut(); HWND getWindow(); void showGetPluginDialog(); + void getPlugin(); BOOL readyToRefresh(); // NP API handlers - void resize(); void print(NPPrint * pNPPrint); void URLNotify(const char * szURL); + NPError newStream(NPMIMEType type, NPStream *stream, NPBool seekable, uint16 *stype); + NPError destroyStream(NPStream *stream, NPError reason); // Windows message handlers void onCreate(HWND hWnd); void onLButtonUp(HWND hWnd, int x, int y, UINT keyFlags); void onRButtonUp(HWND hWnd, int x, int y, UINT keyFlags); void onPaint(HWND hWnd); + + void resize(); }; -#define PAGE_URL_FOR_JAVASCRIPT "http://cgi.netscape.com/cgi-bin/plugins/get_plugin.cgi" +#define PAGE_URL_FOR_JAVASCRIPT "http://plugins.netscape.com/plug-in_finder.adp" #define PLUGINFINDER_COMMAND_BEGINNING "javascript:window.open(\"" #define PLUGINFINDER_COMMAND_END "\",\"plugin\",\"toolbar=no,status=no,resizable=no,scrollbars=no,height=252,width=626\");" -#define DEFAULT_PLUGINFINDER_URL "http://plugins.netscape.com/plug-in_finder.adp" -#define JVM_SMARTUPDATE_URL "http://home.netscape.com/plugins/jvm.html" +#define DEFAULT_PLUGINFINDER_URL "http://plugindoc.mozdev.org/OS2.html" +#define JVM_SMARTUPDATE_URL "http://plugindoc.mozdev.org/OS2.html" #define OS2INI_PLACE "Mozilla Default Plugin" #define GWL_USERDATA 0 diff --git a/mozilla/modules/plugin/samples/default/os2/utils.cpp b/mozilla/modules/plugin/samples/default/os2/utils.cpp index 4d71b39f7d0..e8053ce748c 100644 --- a/mozilla/modules/plugin/samples/default/os2/utils.cpp +++ b/mozilla/modules/plugin/samples/default/os2/utils.cpp @@ -76,7 +76,7 @@ static int getWindowStringLength(HWND hWnd, PSZ lpsz) /****************************************************************/ /* */ -/* void SetDlgItemTextWrapped(HWND hWnd, int iID, PSZ szText) */ +/* void SetDlgItemTextWrapped(HWND hWnd, int iID, PSZ szText) */ /* */ /* helper to wrap long lines in a static control, which do not */ /* wrap automatically if they do not have space characters */