Index: MozillaPrivate.cpp =================================================================== RCS file: /cvs/gnome/epiphany/embed/mozilla/MozillaPrivate.cpp,v retrieving revision 1.23 diff -u -r1.23 MozillaPrivate.cpp --- MozillaPrivate.cpp 10 Mar 2005 15:50:36 -0000 1.23 +++ MozillaPrivate.cpp 19 Apr 2005 20:28:24 -0000 @@ -30,6 +30,11 @@ #include #include #include +#include +#include +#include +#include +#include #include "ephy-debug.h" @@ -76,4 +81,39 @@ } return g_list_reverse (printers); +} + +nsresult +EvaluateJS (nsIDOMWindow *aDOMWindow, + const nsAString &aScript, + nsAString& result, + PRBool *isUndefined) +{ + nsresult rv; + + nsCOMPtr globalObject = + do_QueryInterface (aDOMWindow); + NS_ENSURE_TRUE (globalObject, NS_ERROR_FAILURE); + + nsIScriptContext *context = globalObject->GetContext(); + NS_ENSURE_TRUE (context, NS_ERROR_FAILURE); + + context->SetProcessingScriptTag(PR_TRUE); + + *isUndefined = PR_TRUE; + + nsAutoString ret; +#ifdef HAVE_NSISCRIPTCONTEXT_NSASTRING_P + rv = context->EvaluateString(aScript, nsnull, nsnull, nsnull, + 0, nsnull, &ret, isUndefined); +#else + rv = context->EvaluateString(aScript, nsnull, nsnull, nsnull, + 0, nsnull, ret, isUndefined); +#endif + + context->SetProcessingScriptTag(PR_FALSE); + NS_ENSURE_SUCCESS (rv, rv); + + result = ret; + return NS_OK; } Index: MozillaPrivate.h =================================================================== RCS file: /cvs/gnome/epiphany/embed/mozilla/MozillaPrivate.h,v retrieving revision 1.9 diff -u -r1.9 MozillaPrivate.h --- MozillaPrivate.h 10 Mar 2005 15:50:36 -0000 1.9 +++ MozillaPrivate.h 19 Apr 2005 20:28:24 -0000 @@ -20,7 +20,16 @@ #include +#include + +class nsIDOMWindow; +class nsAString; + namespace MozillaPrivate { + GList *GetPrinterList (); + + nsresult EvaluateJS (nsIDOMWindow *aWindow, const nsAString& aScript, + nsAString &aResult, PRBool *isUndefined); } Index: mozilla-embed.cpp =================================================================== RCS file: /cvs/gnome/epiphany/embed/mozilla/mozilla-embed.cpp,v retrieving revision 1.102 diff -u -r1.102 mozilla-embed.cpp --- mozilla-embed.cpp 6 Apr 2005 14:29:55 -0000 1.102 +++ mozilla-embed.cpp 19 Apr 2005 20:28:25 -0000 @@ -34,6 +34,7 @@ #include "EphyBrowser.h" #include "EventContext.h" #include "EphyUtils.h" +#include "MozillaPrivate.h" #include #undef MOZILLA_INTERNAL_API @@ -744,6 +745,37 @@ } return g_strdup (encoding.get()); +} + +static gboolean +impl_evaluate_js (EphyEmbed *embed, const gchar *script) +{ + nsresult rv; + nsCOMPtr domWindow; + MozillaEmbedPrivate *mpriv = MOZILLA_EMBED(embed)->priv; + + rv = mpriv->browser->GetDOMWindow (getter_AddRefs (domWindow)); + + if (NS_FAILED (rv)) + { + return FALSE; + } + + nsEmbedString aScript; + NS_CStringToUTF16 (nsEmbedCString(script), + NS_CSTRING_ENCODING_UTF8, aScript); + + nsEmbedString aResult; + PRBool isUndefined; + + rv = MozillaPrivate::EvaluateJS (domWindow, aScript, aResult, &isUndefined); + + if (NS_FAILED (rv)) + { + return FALSE; + } + + return TRUE; } static gboolean