From aea39d8177f65432073b257d1b6e2ffa40ed5054 Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Fri, 11 Feb 2005 13:56:43 +0000 Subject: Move wallet code to MozillaPrivate since nsIWalletService.h includes 2005-02-11 Christian Persch * embed/mozilla/MozillaPrivate.cpp: * embed/mozilla/MozillaPrivate.h: * embed/mozilla/mozilla-embed-single.cpp: Move wallet code to MozillaPrivate since nsIWalletService.h includes nsString.h in older mozilla versions. --- embed/mozilla/MozillaPrivate.cpp | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'embed/mozilla/MozillaPrivate.cpp') diff --git a/embed/mozilla/MozillaPrivate.cpp b/embed/mozilla/MozillaPrivate.cpp index 8e2409225..37860a502 100644 --- a/embed/mozilla/MozillaPrivate.cpp +++ b/embed/mozilla/MozillaPrivate.cpp @@ -18,6 +18,10 @@ * $Id$ */ +#include "mozilla-config.h" + +#include "config.h" + #include "MozillaPrivate.h" #include @@ -27,6 +31,14 @@ #include #include +#ifdef HAVE_NSIWALLETSERVICE_H +#include +#include +#include +#endif + +#include "ephy-debug.h" + /* IMPORTANT. Put only code that use internal mozilla strings (nsAutoString for * example) in this file. Note that you cannot use embed strings here, * the header inclusions will conflict. @@ -71,3 +83,58 @@ MozillaPrivate::GetPrinterList () return g_list_reverse (printers); } + +#ifdef HAVE_NSIWALLETSERVICE_H + +class DummyWindow : public nsIDOMWindowInternal +{ +public: + DummyWindow () { LOG ("DummyWindow ctor"); }; + virtual ~DummyWindow () { LOG ("DummyWindow dtor"); }; + + NS_DECL_ISUPPORTS + NS_FORWARD_SAFE_NSIDOMWINDOW(mFake); + NS_FORWARD_SAFE_NSIDOMWINDOW2(mFake2); + NS_FORWARD_SAFE_NSIDOMWINDOWINTERNAL(mFakeInt); +private: + nsCOMPtr mFake; + nsCOMPtr mFake2; + nsCOMPtr mFakeInt; +}; + +NS_IMPL_ISUPPORTS3(DummyWindow, nsIDOMWindow, nsIDOMWindow2, nsIDOMWindowInternal) + +#endif /* HAVE_NSIWALLETSERVICE_H */ + +void +MozillaPrivate::SecureWallet (nsIPrefBranch *pref) +{ +#ifdef HAVE_NSIWALLETSERVICE_H + nsresult rv; + PRBool isEnabled = PR_FALSE; + rv = pref->GetBoolPref ("wallet.crypto", &isEnabled); + if (NS_SUCCEEDED (rv) && isEnabled) return; + + nsCOMPtr wallet (do_GetService (NS_WALLETSERVICE_CONTRACTID)); + NS_ENSURE_TRUE (wallet, ); + + /* We cannot set nsnull as callback data here, since that will crash + * in case wallet needs to get the prompter from it (missing null check + * in wallet code). Therefore we create a dummy impl which will just + * always fail. There is no way to safely set nsnull after we're done, + * so we'll just leak our dummy window. + */ + DummyWindow *win = new DummyWindow(); + if (!win) return; + + nsCOMPtr domWinInt (do_QueryInterface (win)); + NS_ENSURE_TRUE (domWinInt, ); + + /* WALLET_InitReencryptCallback doesN'T addref but stores the pointer! */ + NS_ADDREF (win); + wallet->WALLET_InitReencryptCallback (domWinInt); + + /* Now set the pref. This will encrypt the existing data. */ + pref->SetBoolPref ("wallet.crypto", PR_TRUE); +#endif /* HAVE_NSIWALLETSERVICE_H */ +} -- cgit v1.2.3