Index: configure.ac =================================================================== RCS file: /cvs/gnome/epiphany/configure.ac,v retrieving revision 1.57 diff -p -u -u -p -r1.57 configure.ac --- configure.ac 8 Feb 2005 23:09:39 -0000 1.57 +++ configure.ac 9 Feb 2005 16:05:58 -0000 @@ -471,11 +471,14 @@ dnl https://bugzilla.mozilla.org/show_bu if test "x$flavour" = "xmozilla"; then AC_CHECK_FILE([$MOZILLA_INCLUDE_ROOT/nsIPassword.h], - [AC_DEFINE(HAVE_NSIPASSWORD_H, 1, + [AC_DEFINE([HAVE_NSIPASSWORD_H],[1], [Define if mozilla nsIPassword header is available])]) + AC_CHECK_FILE([$MOZILLA_INCLUDE_ROOT/wallet/nsIWalletService.h], + [AC_DEFINE([HAVE_NSIWALLETSERVICE_H],[1], + [Define if nsIWalletService.h is available])]) elif test "x$flavour" = "xtoolkit"; then AC_CHECK_FILE([$MOZILLA_INCLUDE_ROOT/passwordmgr/nsIPassword.h], - [AC_DEFINE(HAVE_NSIPASSWORD_H, 1, + [AC_DEFINE([HAVE_NSIPASSWORD_H],[1], [Define if mozilla nsIPassword header is available])]) fi Index: embed/mozilla/mozilla-embed-single.cpp =================================================================== RCS file: /cvs/gnome/epiphany/embed/mozilla/mozilla-embed-single.cpp,v retrieving revision 1.106 diff -p -u -u -p -r1.106 mozilla-embed-single.cpp --- embed/mozilla/mozilla-embed-single.cpp 30 Jan 2005 15:20:35 -0000 1.106 +++ embed/mozilla/mozilla-embed-single.cpp 9 Feb 2005 16:05:59 -0000 @@ -85,6 +85,11 @@ #include #include #include +#endif /* ALLOW_PRIVATE_API */ + +#ifdef HAVE_NSIWALLETSERVICE_H +#include +#include #endif #include @@ -189,6 +194,28 @@ mozilla_embed_single_get_type (void) return type; } +#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 */ + static gboolean mozilla_set_default_prefs (MozillaEmbedSingle *mes) { @@ -244,6 +271,34 @@ mozilla_set_default_prefs (MozillaEmbedS /* Open ftp uris with an external handler if one is setup */ pref->SetBoolPref("network.protocol-handler.external.ftp", have_gnome_url_handler ("ftp")); + +#ifdef HAVE_NSIWALLETSERVICE_H + PRBool isEnabled = PR_FALSE; + rv = pref->GetBoolPref ("wallet.crypto", &isEnabled); + if (NS_FAILED (rv) || !isEnabled) + { + nsCOMPtr wallet (do_GetService (NS_WALLETSERVICE_CONTRACTID)); + NS_ENSURE_TRUE (wallet, TRUE); + + /* 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 TRUE; + + nsCOMPtr domWinInt (do_QueryInterface (win)); + NS_ENSURE_TRUE (domWinInt, TRUE); + + 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 */ return TRUE; }