All pastes #9838 Raw Edit

Mine!

public text v1 · immutable
#9838 ·published 2005-04-19 20:29 UTC
rendered paste body
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 <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