From 563b81185c28759b0867791777f2fdf6fc0e221a Mon Sep 17 00:00:00 2001 From: "beard%netscape.com" Date: Sat, 20 Mar 1999 23:11:25 +0000 Subject: [PATCH] implemented nsICookieStorage. git-svn-id: svn://10.0.0.236/trunk@24597 18797224-902f-48f8-a5cc-f745e15eee43 --- .../plugin/base/src/nsPluginHostImpl.cpp | 74 ++++++++++++++++--- .../plugin/base/src/nsPluginHostImpl.h | 27 ++++++- .../plugin/nglsrc/nsPluginHostImpl.cpp | 74 ++++++++++++++++--- .../modules/plugin/nglsrc/nsPluginHostImpl.h | 27 ++++++- 4 files changed, 176 insertions(+), 26 deletions(-) diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp index 57d6011d75b..b221e987eb3 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp @@ -30,6 +30,8 @@ #include "nsIOutputStream.h" #include "nsINetService.h" #include "nsIServiceManager.h" +#include "nsICookieStorage.h" +#include "nsINetService.h" #include "prprf.h" #include "gui.h" @@ -43,6 +45,7 @@ #include "winbase.h" #endif +#include "nsSpecialSystemDirectory.h" #include "nsFileSpec.h" #ifdef XP_MAC @@ -59,12 +62,8 @@ static NS_DEFINE_IID(kIPluginInstanceIID, NS_IPLUGININSTANCE_IID); static NS_DEFINE_IID(kIPluginInstancePeerIID, NS_IPLUGININSTANCEPEER_IID); -static NS_DEFINE_IID(kIPluginManagerIID, NS_IPLUGINMANAGER_IID); -static NS_DEFINE_IID(kIPluginManager2IID, NS_IPLUGINMANAGER2_IID); -static NS_DEFINE_IID(kIPluginHostIID, NS_IPLUGINHOST_IID); static NS_DEFINE_IID(kIPluginStreamInfoIID, NS_IPLUGINSTREAMINFO_IID); static NS_DEFINE_CID(kPluginCID, NS_PLUGIN_CID); -static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); static NS_DEFINE_IID(kIStreamListenerIID, NS_ISTREAMLISTENER_IID); static NS_DEFINE_IID(kIStreamObserverIID, NS_ISTREAMOBSERVER_IID); @@ -1146,41 +1145,47 @@ nsresult nsPluginHostImpl :: QueryInterface(const nsIID& aIID, if (nsnull == aInstancePtrResult) return NS_ERROR_NULL_POINTER; - if (aIID.Equals(kIPluginManagerIID)) + if (aIID.Equals(nsIPluginManager::GetIID())) { *aInstancePtrResult = (void *)((nsIPluginManager *)this); AddRef(); return NS_OK; } - if (aIID.Equals(kIPluginManager2IID)) + if (aIID.Equals(nsIPluginManager2::GetIID())) { *aInstancePtrResult = (void *)((nsIPluginManager2 *)this); AddRef(); return NS_OK; } - if (aIID.Equals(kIPluginHostIID)) + if (aIID.Equals(nsIPluginHost::GetIID())) { *aInstancePtrResult = (void *)((nsIPluginHost *)this); AddRef(); return NS_OK; } - if (aIID.Equals(kIFactoryIID)) + if (aIID.Equals(nsIFactory::GetIID())) { *aInstancePtrResult = (void *)((nsIFactory *)this); AddRef(); return NS_OK; } - if (aIID.Equals(kIFileUtilitiesIID)) + if (aIID.Equals(nsIFileUtilities::GetIID())) { *aInstancePtrResult = (void*)(nsIFileUtilities*)this; AddRef(); return NS_OK; } + if (aIID.Equals(nsICookieStorage::GetIID())) { + *aInstancePtrResult = (void*)(nsICookieStorage*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(kISupportsIID)) { *aInstancePtrResult = (void *)((nsISupports *)((nsIPluginHost *)this)); @@ -2370,15 +2375,64 @@ nsresult nsPluginHostImpl :: LockFactory(PRBool aLock) NS_IMETHODIMP nsPluginHostImpl::GetProgramPath(const char* *result) { + static nsSpecialSystemDirectory programDir(nsSpecialSystemDirectory::OS_CurrentProcessDirectory); + *result = programDir; return NS_OK; } NS_IMETHODIMP nsPluginHostImpl::GetTempDirPath(const char* *result) { + static nsSpecialSystemDirectory tempDir(nsSpecialSystemDirectory::OS_TemporaryDirectory); + *result = tempDir; return NS_OK; } NS_IMETHODIMP nsPluginHostImpl::NewTempFileName(const char* prefix, PRUint32 bufLen, char* resultBuf) { - return NS_OK; + return NS_ERROR_NOT_IMPLEMENTED; +} + +// nsICookieStorage interface + +NS_IMETHODIMP nsPluginHostImpl::GetCookie(const char* inCookieURL, void* inOutCookieBuffer, PRUint32& inOutCookieSize) +{ + nsresult rv = NS_OK; + nsINetService* netService = NULL; + const nsCID kNetServiceCID = NS_NETSERVICE_CID; + rv = mServiceMgr->GetService(kNetServiceCID, nsINetService::GetIID(), (nsISupports**)&netService); + if (rv == NS_OK) { + nsIURL* cookieURL = NULL; + rv = NS_NewURL(&cookieURL, nsString(inCookieURL)); + if (rv == NS_OK) { + nsString cookieValue; + rv = netService->GetCookieString(cookieURL, cookieValue); + PRInt32 cookieLength = cookieValue.Length(); + if (cookieLength < inOutCookieSize) + inOutCookieSize = cookieLength; + cookieValue.ToCString((char*)inOutCookieBuffer, inOutCookieSize); + cookieURL->Release(); + } + mServiceMgr->ReleaseService(kNetServiceCID, netService); + } + return rv; +} + +NS_IMETHODIMP nsPluginHostImpl::SetCookie(const char* inCookieURL, const void* inCookieBuffer, PRUint32 inCookieSize) +{ + nsresult rv = NS_OK; + nsINetService* netService = NULL; + const nsCID kNetServiceCID = NS_NETSERVICE_CID; + rv = mServiceMgr->GetService(kNetServiceCID, nsINetService::GetIID(), (nsISupports**)&netService); + if (rv == NS_OK) { + nsIURL* cookieURL = NULL; + rv = NS_NewURL(&cookieURL, nsString(inCookieURL)); + if (rv == NS_OK) { + nsString cookieValue; + cookieValue.SetString((const char*)inCookieBuffer, inCookieSize); + rv = netService->SetCookieString(cookieURL, cookieValue); + cookieURL->Release(); + } + mServiceMgr->ReleaseService(kNetServiceCID, netService); + } + return rv; } diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.h b/mozilla/modules/plugin/base/src/nsPluginHostImpl.h index 1c24273f762..385cdf4af04 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.h +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.h @@ -26,11 +26,11 @@ #include "nsCRT.h" #include "prlink.h" #include "nsIFileUtilities.h" -#include "nsPluginsDir.h" -#include "nsIServiceManager.h" +#include "nsICookieStorage.h" class ns4xPlugin; class nsFileSpec; +class nsIServiceManager; class nsPluginTag { @@ -58,7 +58,8 @@ public: class nsPluginHostImpl : public nsIPluginManager2, public nsIPluginHost, - public nsIFileUtilities + public nsIFileUtilities, + public nsICookieStorage { public: nsPluginHostImpl(nsIServiceManager *serviceMgr); @@ -176,6 +177,26 @@ public: NS_IMETHOD NewTempFileName(const char* prefix, PRUint32 bufLen, char* resultBuf); + // nsICookieStorage interface + + /** + * Retrieves a cookie from the browser's persistent cookie store. + * @param inCookieURL URL string to look up cookie with. + * @param inOutCookieBuffer buffer large enough to accomodate cookie data. + * @param inOutCookieSize on input, size of the cookie buffer, on output cookie's size. + */ + NS_IMETHOD + GetCookie(const char* inCookieURL, void* inOutCookieBuffer, PRUint32& inOutCookieSize); + + /** + * Stores a cookie in the browser's persistent cookie store. + * @param inCookieURL URL string store cookie with. + * @param inCookieBuffer buffer containing cookie data. + * @param inCookieSize specifies size of cookie data. + */ + NS_IMETHOD + SetCookie(const char* inCookieURL, const void* inCookieBuffer, PRUint32 inCookieSize); + /* Called by GetURL and PostURL */ NS_IMETHOD diff --git a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp index 57d6011d75b..b221e987eb3 100644 --- a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.cpp @@ -30,6 +30,8 @@ #include "nsIOutputStream.h" #include "nsINetService.h" #include "nsIServiceManager.h" +#include "nsICookieStorage.h" +#include "nsINetService.h" #include "prprf.h" #include "gui.h" @@ -43,6 +45,7 @@ #include "winbase.h" #endif +#include "nsSpecialSystemDirectory.h" #include "nsFileSpec.h" #ifdef XP_MAC @@ -59,12 +62,8 @@ static NS_DEFINE_IID(kIPluginInstanceIID, NS_IPLUGININSTANCE_IID); static NS_DEFINE_IID(kIPluginInstancePeerIID, NS_IPLUGININSTANCEPEER_IID); -static NS_DEFINE_IID(kIPluginManagerIID, NS_IPLUGINMANAGER_IID); -static NS_DEFINE_IID(kIPluginManager2IID, NS_IPLUGINMANAGER2_IID); -static NS_DEFINE_IID(kIPluginHostIID, NS_IPLUGINHOST_IID); static NS_DEFINE_IID(kIPluginStreamInfoIID, NS_IPLUGINSTREAMINFO_IID); static NS_DEFINE_CID(kPluginCID, NS_PLUGIN_CID); -static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); static NS_DEFINE_IID(kIStreamListenerIID, NS_ISTREAMLISTENER_IID); static NS_DEFINE_IID(kIStreamObserverIID, NS_ISTREAMOBSERVER_IID); @@ -1146,41 +1145,47 @@ nsresult nsPluginHostImpl :: QueryInterface(const nsIID& aIID, if (nsnull == aInstancePtrResult) return NS_ERROR_NULL_POINTER; - if (aIID.Equals(kIPluginManagerIID)) + if (aIID.Equals(nsIPluginManager::GetIID())) { *aInstancePtrResult = (void *)((nsIPluginManager *)this); AddRef(); return NS_OK; } - if (aIID.Equals(kIPluginManager2IID)) + if (aIID.Equals(nsIPluginManager2::GetIID())) { *aInstancePtrResult = (void *)((nsIPluginManager2 *)this); AddRef(); return NS_OK; } - if (aIID.Equals(kIPluginHostIID)) + if (aIID.Equals(nsIPluginHost::GetIID())) { *aInstancePtrResult = (void *)((nsIPluginHost *)this); AddRef(); return NS_OK; } - if (aIID.Equals(kIFactoryIID)) + if (aIID.Equals(nsIFactory::GetIID())) { *aInstancePtrResult = (void *)((nsIFactory *)this); AddRef(); return NS_OK; } - if (aIID.Equals(kIFileUtilitiesIID)) + if (aIID.Equals(nsIFileUtilities::GetIID())) { *aInstancePtrResult = (void*)(nsIFileUtilities*)this; AddRef(); return NS_OK; } + if (aIID.Equals(nsICookieStorage::GetIID())) { + *aInstancePtrResult = (void*)(nsICookieStorage*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(kISupportsIID)) { *aInstancePtrResult = (void *)((nsISupports *)((nsIPluginHost *)this)); @@ -2370,15 +2375,64 @@ nsresult nsPluginHostImpl :: LockFactory(PRBool aLock) NS_IMETHODIMP nsPluginHostImpl::GetProgramPath(const char* *result) { + static nsSpecialSystemDirectory programDir(nsSpecialSystemDirectory::OS_CurrentProcessDirectory); + *result = programDir; return NS_OK; } NS_IMETHODIMP nsPluginHostImpl::GetTempDirPath(const char* *result) { + static nsSpecialSystemDirectory tempDir(nsSpecialSystemDirectory::OS_TemporaryDirectory); + *result = tempDir; return NS_OK; } NS_IMETHODIMP nsPluginHostImpl::NewTempFileName(const char* prefix, PRUint32 bufLen, char* resultBuf) { - return NS_OK; + return NS_ERROR_NOT_IMPLEMENTED; +} + +// nsICookieStorage interface + +NS_IMETHODIMP nsPluginHostImpl::GetCookie(const char* inCookieURL, void* inOutCookieBuffer, PRUint32& inOutCookieSize) +{ + nsresult rv = NS_OK; + nsINetService* netService = NULL; + const nsCID kNetServiceCID = NS_NETSERVICE_CID; + rv = mServiceMgr->GetService(kNetServiceCID, nsINetService::GetIID(), (nsISupports**)&netService); + if (rv == NS_OK) { + nsIURL* cookieURL = NULL; + rv = NS_NewURL(&cookieURL, nsString(inCookieURL)); + if (rv == NS_OK) { + nsString cookieValue; + rv = netService->GetCookieString(cookieURL, cookieValue); + PRInt32 cookieLength = cookieValue.Length(); + if (cookieLength < inOutCookieSize) + inOutCookieSize = cookieLength; + cookieValue.ToCString((char*)inOutCookieBuffer, inOutCookieSize); + cookieURL->Release(); + } + mServiceMgr->ReleaseService(kNetServiceCID, netService); + } + return rv; +} + +NS_IMETHODIMP nsPluginHostImpl::SetCookie(const char* inCookieURL, const void* inCookieBuffer, PRUint32 inCookieSize) +{ + nsresult rv = NS_OK; + nsINetService* netService = NULL; + const nsCID kNetServiceCID = NS_NETSERVICE_CID; + rv = mServiceMgr->GetService(kNetServiceCID, nsINetService::GetIID(), (nsISupports**)&netService); + if (rv == NS_OK) { + nsIURL* cookieURL = NULL; + rv = NS_NewURL(&cookieURL, nsString(inCookieURL)); + if (rv == NS_OK) { + nsString cookieValue; + cookieValue.SetString((const char*)inCookieBuffer, inCookieSize); + rv = netService->SetCookieString(cookieURL, cookieValue); + cookieURL->Release(); + } + mServiceMgr->ReleaseService(kNetServiceCID, netService); + } + return rv; } diff --git a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.h b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.h index 1c24273f762..385cdf4af04 100644 --- a/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.h +++ b/mozilla/modules/plugin/nglsrc/nsPluginHostImpl.h @@ -26,11 +26,11 @@ #include "nsCRT.h" #include "prlink.h" #include "nsIFileUtilities.h" -#include "nsPluginsDir.h" -#include "nsIServiceManager.h" +#include "nsICookieStorage.h" class ns4xPlugin; class nsFileSpec; +class nsIServiceManager; class nsPluginTag { @@ -58,7 +58,8 @@ public: class nsPluginHostImpl : public nsIPluginManager2, public nsIPluginHost, - public nsIFileUtilities + public nsIFileUtilities, + public nsICookieStorage { public: nsPluginHostImpl(nsIServiceManager *serviceMgr); @@ -176,6 +177,26 @@ public: NS_IMETHOD NewTempFileName(const char* prefix, PRUint32 bufLen, char* resultBuf); + // nsICookieStorage interface + + /** + * Retrieves a cookie from the browser's persistent cookie store. + * @param inCookieURL URL string to look up cookie with. + * @param inOutCookieBuffer buffer large enough to accomodate cookie data. + * @param inOutCookieSize on input, size of the cookie buffer, on output cookie's size. + */ + NS_IMETHOD + GetCookie(const char* inCookieURL, void* inOutCookieBuffer, PRUint32& inOutCookieSize); + + /** + * Stores a cookie in the browser's persistent cookie store. + * @param inCookieURL URL string store cookie with. + * @param inCookieBuffer buffer containing cookie data. + * @param inCookieSize specifies size of cookie data. + */ + NS_IMETHOD + SetCookie(const char* inCookieURL, const void* inCookieBuffer, PRUint32 inCookieSize); + /* Called by GetURL and PostURL */ NS_IMETHOD