rendered paste bodyIndex: 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 <nsISimpleEnumerator.h>
#include <nsISupportsPrimitives.h>
#include <nsPromiseFlatString.h>
+#include <nsIScriptGlobalObject.h>
+#include <nsIScriptContext.h>
+#include <nsIDOMWindow.h>
+#include <nsIDOMDocument.h>
+#include <nsIDocument.h>
#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<nsIScriptGlobalObject> 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 <glib.h>
+#include <nsError.h>
+
+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 <gtkmozembed.h>
#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<nsIDOMWindow> 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