diff --git a/extensions/wallet/walletpreview/Makefile.in b/extensions/wallet/walletpreview/Makefile.in new file mode 100644 index 000000000000..9cd2df728574 --- /dev/null +++ b/extensions/wallet/walletpreview/Makefile.in @@ -0,0 +1,42 @@ +#!gmake +# The contents of this file are subject to the Netscape Public License +# Version 1.0 (the "NPL"); you may not use this file except in +# compliance with the NPL. You may obtain a copy of the NPL at +# http://www.mozilla.org/NPL/ +# +# Software distributed under the NPL is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL +# for the specific language governing rights and limitations under the +# NPL. +# +# The Initial Developer of this code under the NPL is Netscape +# Communications Corporation. Portions created by Netscape are +# Copyright (C) 1998 Netscape Communications Corporation. All Rights +# Reserved. + +DEPTH = ../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +MODULE = walletpreview +LIBRARY_NAME = walletpreview +IS_COMPONENT = 1 + +XPIDLSRCS = \ + nsIWalletPreview.idl \ + $(NULL) + +CPPSRCS = \ + nsWalletPreviewFactory.cpp \ + nsWalletPreview.cpp \ + $(NULL) + +REQUIRES = walleteditor raptor xpcom + +include $(topsrcdir)/config/rules.mk + +install:: $(TARGETS) + $(INSTALL) $(srcdir)/xpconnect-walletpreview.html $(DIST)/bin/res/samples diff --git a/extensions/wallet/walletpreview/makefile.win b/extensions/wallet/walletpreview/makefile.win new file mode 100644 index 000000000000..bf58f6f29de8 --- /dev/null +++ b/extensions/wallet/walletpreview/makefile.win @@ -0,0 +1,48 @@ +#!gmake +# +# The contents of this file are subject to the Netscape Public License +# Version 1.0 (the "NPL"); you may not use this file except in +# compliance with the NPL. You may obtain a copy of the NPL at +# http://www.mozilla.org/NPL/ +# +# Software distributed under the NPL is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL +# for the specific language governing rights and limitations under the +# NPL. +# +# The Initial Developer of this code under the NPL is Netscape +# Communications Corporation. Portions created by Netscape are +# Copyright (C) 1998 Netscape Communications Corporation. All Rights +# Reserved. + +DEPTH=..\..\.. +MODULE=walletpreview + +MAKE_OBJ_TYPE=DLL +DLLNAME=$(MODULE) +DLL=.\$(OBJDIR)\$(DLLNAME).dll + +XPIDLSRCS= .\nsIWalletPreview.idl \ + $(NULL) + +CPP_OBJS=\ + .\$(OBJDIR)\nsWalletPreviewFactory.obj \ + .\$(OBJDIR)\nsWalletPreview.obj \ + $(NULL) + +LLIBS=\ + $(DIST)\lib\xpcom.lib \ + $(DIST)\lib\plc3.lib \ + $(NULL) + +LINCS=\ + -I$(PUBLIC)\walleteditor \ + -I$(PUBLIC)\raptor \ + -I$(PUBLIC)\xpcom \ + $(NULL) + +include <$(DEPTH)\config\rules.mak> + +install:: $(DLL) + $(MAKE_INSTALL) $(DLL) $(DIST)\bin\components + $(MAKE_INSTALL) xpconnect-walletpreview.html $(DIST)\bin\res\samples diff --git a/extensions/wallet/walletpreview/nsIWalletPreview.idl b/extensions/wallet/walletpreview/nsIWalletPreview.idl new file mode 100644 index 000000000000..9cbaf5dba092 --- /dev/null +++ b/extensions/wallet/walletpreview/nsIWalletPreview.idl @@ -0,0 +1,45 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ + +/* + + A sample of XPConnect. This file contains a WalletPreview interface. + + */ + +#include "nsISupports.idl" +#include "domstubs.idl" +%{C++ +#include "nsIDOMWindow.h" +%} + +[scriptable, uuid(8F4CFE41-2152-11d3-ABAA-0080C787AD96)] +interface nsIWalletPreview : nsISupports +{ + void SetValue(in string aValue, in nsIDOMWindow win); + string GetPrefillValue(); +}; + +%{ C++ +// {8F4CFE40-2152-11d3-ABAA-0080C787AD96} +#define NS_WALLETPREVIEW_CID \ +{ 0x8f4cfe40, 0x2152, 0x11d3, { 0xab, 0xaa, 0x0, 0x80, 0xc7, 0x87, 0xad, 0x96 } }; + +extern nsresult +NS_NewWalletPreview(nsIWalletPreview** aWalletPreview); +%} diff --git a/extensions/wallet/walletpreview/nsWalletPreview.cpp b/extensions/wallet/walletpreview/nsWalletPreview.cpp new file mode 100644 index 000000000000..8157c7e66e24 --- /dev/null +++ b/extensions/wallet/walletpreview/nsWalletPreview.cpp @@ -0,0 +1,158 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ + +#include "nscore.h" +#include "nsIAllocator.h" +#include "plstr.h" +#include "stdio.h" +#include "nsIWalletService.h" +#include "nsIServiceManager.h" +#include "nsIDOMWindow.h" +#include "nsCOMPtr.h" +#include "nsIWebShell.h" +#include "nsIWebShellWindow.h" +#include "nsIScriptGlobalObject.h" +#include "nsIWalletPreview.h" + +static NS_DEFINE_IID(kIWalletServiceIID, NS_IWALLETSERVICE_IID); +static NS_DEFINE_IID(kWalletServiceCID, NS_WALLETSERVICE_CID); + +class WalletPreviewImpl : public nsIWalletPreview +{ +public: + WalletPreviewImpl(); + virtual ~WalletPreviewImpl(); + + // nsISupports interface + NS_DECL_ISUPPORTS + + // nsIWalletPreview interface + NS_IMETHOD GetPrefillValue(char * *aValue); + NS_IMETHOD SetValue(const char *aValue, nsIDOMWindow *win); +}; + +//////////////////////////////////////////////////////////////////////// + +nsresult +NS_NewWalletPreview(nsIWalletPreview** aWalletPreview) +{ + NS_PRECONDITION(aWalletPreview != nsnull, "null ptr"); + if (!aWalletPreview) { + return NS_ERROR_NULL_POINTER; + } + *aWalletPreview = new WalletPreviewImpl(); + if (! *aWalletPreview) { + return NS_ERROR_OUT_OF_MEMORY; + } + NS_ADDREF(*aWalletPreview); + return NS_OK; +} + +//////////////////////////////////////////////////////////////////////// + +WalletPreviewImpl::WalletPreviewImpl() +{ + NS_INIT_REFCNT(); +} + +WalletPreviewImpl::~WalletPreviewImpl() +{ +} + +NS_IMPL_ISUPPORTS(WalletPreviewImpl, nsIWalletPreview::GetIID()); + +NS_IMETHODIMP +WalletPreviewImpl::GetPrefillValue(char** aValue) +{ + NS_PRECONDITION(aValue != nsnull, "null ptr"); + if (!aValue) { + return NS_ERROR_NULL_POINTER; + } + + nsIWalletService *walletservice; + nsresult res; + res = nsServiceManager::GetService(kWalletServiceCID, + kIWalletServiceIID, + (nsISupports **)&walletservice); + if ((NS_SUCCEEDED(res)) && (nsnull != walletservice)) { + nsAutoString walletList; + res = walletservice->WALLET_GetPrefillListForViewer(walletList); + if (NS_SUCCEEDED(res)) { + *aValue = walletList.ToNewCString(); + } + } + return res; +} + +static void DOMWindowToWebShellWindow( + nsIDOMWindow *DOMWindow, + nsCOMPtr *webWindow) +{ + if (!DOMWindow) { + return; // with webWindow unchanged -- its constructor gives it a null ptr + } + nsCOMPtr globalScript(do_QueryInterface(DOMWindow)); + nsCOMPtr webshell, rootWebshell; + if (globalScript) { + globalScript->GetWebShell(getter_AddRefs(webshell)); + } + if (webshell) { + webshell->GetRootWebShellEvenIfChrome(*getter_AddRefs(rootWebshell)); + } + if (rootWebshell) { + nsCOMPtr webshellContainer; + rootWebshell->GetContainer(*getter_AddRefs(webshellContainer)); + *webWindow = do_QueryInterface(webshellContainer); + } +} + +NS_IMETHODIMP +WalletPreviewImpl::SetValue(const char* aValue, nsIDOMWindow* win) +{ + /* close the window */ + if (!win) { + return NS_ERROR_FAILURE; + } + nsIDOMWindow* top; + win->GetTop(&top); + if (!top) { + return NS_ERROR_FAILURE; + } + nsCOMPtr parent; + DOMWindowToWebShellWindow(top, &parent); + if (parent) { + parent->Close(); + } + NS_IF_RELEASE(win); + + /* process the value */ + NS_PRECONDITION(aValue != nsnull, "null ptr"); + if (! aValue) { + return NS_ERROR_NULL_POINTER; + } + nsIWalletService *walletservice; + nsresult res; + res = nsServiceManager::GetService(kWalletServiceCID, + kIWalletServiceIID, + (nsISupports **)&walletservice); + if ((NS_SUCCEEDED(res)) && (nsnull != walletservice)) { + nsAutoString walletList = aValue; + res = walletservice->WALLET_PrefillReturn(walletList); + } + return res; +} diff --git a/extensions/wallet/walletpreview/nsWalletPreviewFactory.cpp b/extensions/wallet/walletpreview/nsWalletPreviewFactory.cpp new file mode 100644 index 000000000000..472d5c8836f7 --- /dev/null +++ b/extensions/wallet/walletpreview/nsWalletPreviewFactory.cpp @@ -0,0 +1,206 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ + +/* + + A sample of XPConnect. This file contains the XPCOM factory the + creates for WalletPreviewImpl objects. + +*/ + +#include "nsCOMPtr.h" +#include "nscore.h" +#include "nsIWalletPreview.h" +#include "nsIComponentManager.h" +#include "nsIServiceManager.h" +#include "nsXPComFactory.h" + +static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); +static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); +static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID); +static NS_DEFINE_CID(kWalletPreviewCID, NS_WALLETPREVIEW_CID); + +class WalletPreviewFactoryImpl : public nsIFactory +{ +public: + WalletPreviewFactoryImpl(const nsCID &aClass, const char* className, const char* progID); + + // nsISupports methods + NS_DECL_ISUPPORTS + + // nsIFactory methods + NS_IMETHOD CreateInstance(nsISupports *aOuter, + const nsIID &aIID, + void **aResult); + + NS_IMETHOD LockFactory(PRBool aLock); + +protected: + virtual ~WalletPreviewFactoryImpl(); + +protected: + nsCID mClassID; + const char* mClassName; + const char* mProgID; +}; + +//////////////////////////////////////////////////////////////////////// + +WalletPreviewFactoryImpl::WalletPreviewFactoryImpl(const nsCID &aClass, + const char* className, + const char* progID) + : mClassID(aClass), mClassName(className), mProgID(progID) +{ + NS_INIT_REFCNT(); +} + +WalletPreviewFactoryImpl::~WalletPreviewFactoryImpl() +{ + NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction"); +} + +NS_IMETHODIMP +WalletPreviewFactoryImpl::QueryInterface(const nsIID &aIID, void **aResult) +{ + if (! aResult) + return NS_ERROR_NULL_POINTER; + + // Always NULL result, in case of failure + *aResult = nsnull; + + if (aIID.Equals(kISupportsIID)) { + *aResult = NS_STATIC_CAST(nsISupports*, this); + AddRef(); + return NS_OK; + } else if (aIID.Equals(kIFactoryIID)) { + *aResult = NS_STATIC_CAST(nsIFactory*, this); + AddRef(); + return NS_OK; + } + return NS_NOINTERFACE; +} + +NS_IMPL_ADDREF(WalletPreviewFactoryImpl); +NS_IMPL_RELEASE(WalletPreviewFactoryImpl); + +NS_IMETHODIMP +WalletPreviewFactoryImpl::CreateInstance(nsISupports *aOuter, + const nsIID &aIID, + void **aResult) +{ + if (! aResult) + return NS_ERROR_NULL_POINTER; + + if (aOuter) + return NS_ERROR_NO_AGGREGATION; + + *aResult = nsnull; + + nsresult rv; + + nsISupports *inst = nsnull; + if (mClassID.Equals(kWalletPreviewCID)) { + if (NS_FAILED(rv = NS_NewWalletPreview((nsIWalletPreview**) &inst))) + return rv; + } + else { + return NS_ERROR_NO_INTERFACE; + } + + if (! inst) + return NS_ERROR_OUT_OF_MEMORY; + + if (NS_FAILED(rv = inst->QueryInterface(aIID, aResult))) { + // We didn't get the right interface. + NS_ERROR("didn't support the interface you wanted"); + } + + NS_IF_RELEASE(inst); + return rv; +} + +nsresult WalletPreviewFactoryImpl::LockFactory(PRBool aLock) +{ + // Not implemented in simplest case. + return NS_OK; +} + +//////////////////////////////////////////////////////////////////////// + + + +// return the proper factory to the caller +extern "C" PR_IMPLEMENT(nsresult) +NSGetFactory(nsISupports* aServMgr, + const nsCID &aClass, + const char *aClassName, + const char *aProgID, + nsIFactory **aFactory) +{ + if (! aFactory) + return NS_ERROR_NULL_POINTER; + + WalletPreviewFactoryImpl* factory = new WalletPreviewFactoryImpl(aClass, aClassName, aProgID); + if (factory == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + + NS_ADDREF(factory); + *aFactory = factory; + return NS_OK; +} + + + +extern "C" PR_IMPLEMENT(nsresult) +NSRegisterSelf(nsISupports* aServMgr , const char* aPath) +{ + nsresult rv; + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + NS_WITH_SERVICE(nsIComponentManager, compMgr, kComponentManagerCID, &rv); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->RegisterComponent(kWalletPreviewCID, + "WalletPreview World Component", + "component://netscape/walletpreview/walletpreview-world", + aPath, PR_TRUE, PR_TRUE); + + if (NS_FAILED(rv)) return rv; + + return NS_OK; +} + + +extern "C" PR_IMPLEMENT(nsresult) +NSUnregisterSelf(nsISupports* aServMgr, const char* aPath) +{ + nsresult rv; + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + NS_WITH_SERVICE(nsIComponentManager, compMgr, kComponentManagerCID, &rv); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->UnregisterComponent(kWalletPreviewCID, aPath); + if (NS_FAILED(rv)) return rv; + + return NS_OK; +} diff --git a/extensions/wallet/walletpreview/xpconnect-walletpreview.html b/extensions/wallet/walletpreview/xpconnect-walletpreview.html new file mode 100644 index 000000000000..c133763ce4a3 --- /dev/null +++ b/extensions/wallet/walletpreview/xpconnect-walletpreview.html @@ -0,0 +1,167 @@ + + + Pre-Filling + + + + + + + + + + + <BODY> <BR> </BODY> + +