Title: [111510] trunk
Revision
111510
Author
carlo...@webkit.org
Date
2012-03-21 01:44:23 -0700 (Wed, 21 Mar 2012)

Log Message

[GTK] Add webkit_web_view_run_javascript() to WebKit2 GTK+
https://bugs.webkit.org/show_bug.cgi?id=75543

Reviewed by Martin Robinson.

Source/WebKit2:

* GNUmakefile.am: Add new files to compilation.
* UIProcess/API/gtk/WebKitError.cpp:
(webkit_javascript_error_quark): Add new error domain for
_javascript_ errors.
* UIProcess/API/gtk/WebKitError.h:
* UIProcess/API/gtk/WebKitJavascriptResult.cpp: Added.
(webkitJavascriptResultCreate): Create a WebKitJavascriptResult
for the given WKSerializedScriptValueRef.
(webkit_javascript_result_ref): Increment reference count of
WebKitJavascriptResult.
(webkit_javascript_result_unref): Decrement reference count of
WebKitJavascriptResult.
(webkit_javascript_result_get_global_context): Get global
_javascript_ context of the result.
(webkit_javascript_result_get_value): Get the JSValueRef of the
result.
* UIProcess/API/gtk/WebKitJavascriptResult.h: Added.
* UIProcess/API/gtk/WebKitJavascriptResultPrivate.h: Added.
* UIProcess/API/gtk/WebKitPrivate.h:
* UIProcess/API/gtk/WebKitWebView.cpp:
(webkitWebViewFinalize): Release the global _javascript_ context.
(webkit_web_view_get_javascript_global_context): Get or create the
global _javascript_ context.
(webkitWebViewRunJavaScriptCallback): Callback called by C API when
_javascript_ execution finishes.
(webkit_web_view_run_javascript): Asynchronously run a given
_javascript_.
(webkit_web_view_run_javascript_finish): Finish async operation
started by webkit_web_view_run_javascript().
* UIProcess/API/gtk/WebKitWebView.h:
* UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
* UIProcess/API/gtk/docs/webkit2gtk.types: Add
webkit_javascript_result_get_type().
* UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
(testWebViewRunJavaScript):
(beforeAll):
* UIProcess/API/gtk/tests/WebViewTest.cpp:
(WebViewTest::WebViewTest):
(WebViewTest::~WebViewTest):
(runJavaScriptReadyCallback):
(WebViewTest::runJavaScriptAndWaitUntilFinished):
(jsValueToCString):
(WebViewTest::_javascript_ResultToCString):
(WebViewTest::_javascript_ResultToNumber):
(WebViewTest::_javascript_ResultToBoolean):
(WebViewTest::_javascript_ResultIsNull):
(WebViewTest::_javascript_ResultIsUndefined):
* UIProcess/API/gtk/tests/WebViewTest.h:
* UIProcess/API/gtk/webkit2.h:

Tools:

* MiniBrowser/gtk/GNUmakefile.am: Add _javascript_core_cppflags to
MiniBrowser CPP flags.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (111509 => 111510)


--- trunk/Source/WebKit2/ChangeLog	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/ChangeLog	2012-03-21 08:44:23 UTC (rev 111510)
@@ -1,3 +1,60 @@
+2012-03-21  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Add webkit_web_view_run_javascript() to WebKit2 GTK+
+        https://bugs.webkit.org/show_bug.cgi?id=75543
+
+        Reviewed by Martin Robinson.
+
+        * GNUmakefile.am: Add new files to compilation.
+        * UIProcess/API/gtk/WebKitError.cpp:
+        (webkit_javascript_error_quark): Add new error domain for
+        _javascript_ errors.
+        * UIProcess/API/gtk/WebKitError.h:
+        * UIProcess/API/gtk/WebKitJavascriptResult.cpp: Added.
+        (webkitJavascriptResultCreate): Create a WebKitJavascriptResult
+        for the given WKSerializedScriptValueRef.
+        (webkit_javascript_result_ref): Increment reference count of
+        WebKitJavascriptResult.
+        (webkit_javascript_result_unref): Decrement reference count of
+        WebKitJavascriptResult.
+        (webkit_javascript_result_get_global_context): Get global
+        _javascript_ context of the result.
+        (webkit_javascript_result_get_value): Get the JSValueRef of the
+        result.
+        * UIProcess/API/gtk/WebKitJavascriptResult.h: Added.
+        * UIProcess/API/gtk/WebKitJavascriptResultPrivate.h: Added.
+        * UIProcess/API/gtk/WebKitPrivate.h:
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (webkitWebViewFinalize): Release the global _javascript_ context.
+        (webkit_web_view_get_javascript_global_context): Get or create the
+        global _javascript_ context.
+        (webkitWebViewRunJavaScriptCallback): Callback called by C API when
+        _javascript_ execution finishes.
+        (webkit_web_view_run_javascript): Asynchronously run a given
+        _javascript_.
+        (webkit_web_view_run_javascript_finish): Finish async operation
+        started by webkit_web_view_run_javascript().
+        * UIProcess/API/gtk/WebKitWebView.h:
+        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
+        * UIProcess/API/gtk/docs/webkit2gtk.types: Add
+        webkit_javascript_result_get_type().
+        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
+        (testWebViewRunJavaScript):
+        (beforeAll):
+        * UIProcess/API/gtk/tests/WebViewTest.cpp:
+        (WebViewTest::WebViewTest):
+        (WebViewTest::~WebViewTest):
+        (runJavaScriptReadyCallback):
+        (WebViewTest::runJavaScriptAndWaitUntilFinished):
+        (jsValueToCString):
+        (WebViewTest::_javascript_ResultToCString):
+        (WebViewTest::_javascript_ResultToNumber):
+        (WebViewTest::_javascript_ResultToBoolean):
+        (WebViewTest::_javascript_ResultIsNull):
+        (WebViewTest::_javascript_ResultIsUndefined):
+        * UIProcess/API/gtk/tests/WebViewTest.h:
+        * UIProcess/API/gtk/webkit2.h:
+
 2012-03-20  Eric Seidel  <e...@webkit.org>
 
         Move wtf/Platform.h from _javascript_Core to Source/WTF/wtf

Modified: trunk/Source/WebKit2/GNUmakefile.am (111509 => 111510)


--- trunk/Source/WebKit2/GNUmakefile.am	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/GNUmakefile.am	2012-03-21 08:44:23 UTC (rev 111510)
@@ -92,6 +92,7 @@
 	$(WebKit2)/UIProcess/API/gtk/WebKitError.h \
 	$(WebKit2)/UIProcess/API/gtk/WebKitFindController.h \
 	$(WebKit2)/UIProcess/API/gtk/WebKitHitTestResult.h \
+	$(WebKit2)/UIProcess/API/gtk/WebKitJavascriptResult.h \
 	$(WebKit2)/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h \
 	$(WebKit2)/UIProcess/API/gtk/WebKitPolicyDecision.h \
 	$(WebKit2)/UIProcess/API/gtk/WebKitPrintOperation.h \
@@ -555,6 +556,9 @@
 	Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.cpp \
 	Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.h \
 	Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResultPrivate.h \
+	Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp \
+	Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.h \
+	Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h \
 	Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.h \
 	Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp \
 	Source/WebKit2/UIProcess/API/gtk/WebKitFindController.h \

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp	2012-03-21 08:44:23 UTC (rev 111510)
@@ -77,3 +77,8 @@
 COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PRINT_ERROR_GENERAL, PrintErrorGeneral);
 COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PRINT_ERROR_PRINTER_NOT_FOUND, PrintErrorPrinterNotFound);
 COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PRINT_ERROR_INVALID_PAGE_RANGE, PrintErrorInvalidPageRange);
+
+GQuark webkit_javascript_error_quark()
+{
+    return g_quark_from_static_string("WebKitJavascriptError");
+}

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.h (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.h	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.h	2012-03-21 08:44:23 UTC (rev 111510)
@@ -29,11 +29,12 @@
 
 G_BEGIN_DECLS
 
-#define WEBKIT_NETWORK_ERROR  webkit_network_error_quark ()
-#define WEBKIT_POLICY_ERROR   webkit_policy_error_quark ()
-#define WEBKIT_PLUGIN_ERROR   webkit_plugin_error_quark ()
-#define WEBKIT_DOWNLOAD_ERROR webkit_download_error_quark ()
-#define WEBKIT_PRINT_ERROR    webkit_print_error_quark ()
+#define WEBKIT_NETWORK_ERROR    webkit_network_error_quark ()
+#define WEBKIT_POLICY_ERROR     webkit_policy_error_quark ()
+#define WEBKIT_PLUGIN_ERROR     webkit_plugin_error_quark ()
+#define WEBKIT_DOWNLOAD_ERROR   webkit_download_error_quark ()
+#define WEBKIT_PRINT_ERROR      webkit_print_error_quark ()
+#define WEBKIT_JAVASCRIPT_ERROR webkit_print_error_quark ()
 
 /**
  * WebKitNetworkError:
@@ -119,21 +120,34 @@
     WEBKIT_PRINT_ERROR_INVALID_PAGE_RANGE = 501
 } WebKitPrintError;
 
+/**
+ * WebKitJavascriptError:
+ * @WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED: An exception was raised in _javascript_ execution
+ *
+ * Enum values used to denote errors happending when executing _javascript_
+ */
+typedef enum {
+    WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED = 699
+} WebKitJavascriptError;
+
 WEBKIT_API GQuark
-webkit_network_error_quark  (void);
+webkit_network_error_quark    (void);
 
 WEBKIT_API GQuark
-webkit_policy_error_quark   (void);
+webkit_policy_error_quark     (void);
 
 WEBKIT_API GQuark
-webkit_plugin_error_quark   (void);
+webkit_plugin_error_quark     (void);
 
 WEBKIT_API GQuark
-webkit_download_error_quark (void);
+webkit_download_error_quark   (void);
 
 WEBKIT_API GQuark
-webkit_print_error_quark    (void);
+webkit_print_error_quark      (void);
 
+WEBKIT_API GQuark
+webkit_javascript_error_quark (void);
+
 G_END_DECLS
 
 #endif

Added: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp (0 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp	2012-03-21 08:44:23 UTC (rev 111510)
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2012 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "WebKitJavascriptResult.h"
+
+#include "WebKitJavascriptResultPrivate.h"
+#include <wtf/gobject/GRefPtr.h>
+
+struct _WebKitJavascriptResult {
+    _WebKitJavascriptResult(WebKitWebView* view, WKSerializedScriptValueRef wkSerializedScriptValue)
+        : webView(view)
+        , referenceCount(1)
+        {
+            value = WKSerializedScriptValueDeserialize(wkSerializedScriptValue, webkit_web_view_get_javascript_global_context(view), 0);
+        }
+
+    GRefPtr<WebKitWebView> webView;
+    JSValueRef value;
+
+    int referenceCount;
+};
+
+G_DEFINE_BOXED_TYPE(WebKitJavascriptResult, webkit_javascript_result, webkit_javascript_result_ref, webkit_javascript_result_unref)
+
+WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView* webView, WKSerializedScriptValueRef wkSerializedScriptValue)
+{
+    WebKitJavascriptResult* result = g_slice_new(WebKitJavascriptResult);
+    new (result) WebKitJavascriptResult(webView, wkSerializedScriptValue);
+    return result;
+}
+
+/**
+ * webkit_javascript_result_ref:
+ * @js_result: a #WebKitJavascriptResult
+ *
+ * Atomically increments the reference count of @js_result by one. This
+ * function is MT-safe and may be called from any thread.
+ *
+ * Returns: The passed in #WebKitJavascriptResult
+ */
+WebKitJavascriptResult* webkit_javascript_result_ref(WebKitJavascriptResult* _javascript_Result)
+{
+    g_atomic_int_inc(&_javascript_Result->referenceCount);
+    return _javascript_Result;
+}
+
+/**
+ * webkit_javascript_result_unref:
+ * @js_result: a #WebKitJavascriptResult
+ *
+ * Atomically decrements the reference count of @js_result by one. If the
+ * reference count drops to 0, all memory allocated by the #WebKitJavascriptResult is
+ * released. This function is MT-safe and may be called from any
+ * thread.
+ */
+void webkit_javascript_result_unref(WebKitJavascriptResult* _javascript_Result)
+{
+    if (g_atomic_int_dec_and_test(&_javascript_Result->referenceCount)) {
+        _javascript_Result->~WebKitJavascriptResult();
+        g_slice_free(WebKitJavascriptResult, _javascript_Result);
+    }
+}
+
+/**
+ * webkit_javascript_result_get_global_context:
+ * @js_result: a #WebKitJavascriptResult
+ *
+ * Get the global _javascript_ context that should be used with the
+ * <function>JSValueRef</function> returned by webkit_javascript_result_get_value().
+ *
+ * Returns: the <function>JSGlobalContextRef</function> for the #WebKitJavascriptResult
+ */
+JSGlobalContextRef webkit_javascript_result_get_global_context(WebKitJavascriptResult* _javascript_Result)
+{
+    return webkit_web_view_get_javascript_global_context(_javascript_Result->webView.get());
+}
+
+/**
+ * webkit_javascript_result_get_value:
+ * @js_result: a #WebKitJavascriptResult
+ *
+ * Get the value of @js_result. You should use the <function>JSGlobalContextRef</function>
+ * returned by webkit_javascript_result_get_global_context() to use the <function>JSValueRef</function>.
+ *
+ * Returns: the <function>JSValueRef</function> of the #WebKitJavascriptResult
+ */
+JSValueRef webkit_javascript_result_get_value(WebKitJavascriptResult* _javascript_Result)
+{
+    return _javascript_Result->value;
+}

Added: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.h (0 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.h	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.h	2012-03-21 08:44:23 UTC (rev 111510)
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2012 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#if !defined(__WEBKIT2_H_INSIDE__) && !defined(WEBKIT2_COMPILATION)
+#error "Only <webkit2/webkit2.h> can be included directly."
+#endif
+
+#ifndef WebKitJavascriptResult_h
+#define WebKitJavascriptResult_h
+
+#include <_javascript_Core/JSBase.h>
+#include <glib-object.h>
+#include <webkit2/WebKitDefines.h>
+
+G_BEGIN_DECLS
+
+#define WEBKIT_TYPE_JAVASCRIPT_RESULT (webkit_javascript_result_get_type())
+
+typedef struct _WebKitJavascriptResult WebKitJavascriptResult;
+
+
+WEBKIT_API GType
+webkit_javascript_result_get_type           (void);
+
+WEBKIT_API WebKitJavascriptResult *
+webkit_javascript_result_ref                (WebKitJavascriptResult *js_result);
+
+WEBKIT_API void
+webkit_javascript_result_unref              (WebKitJavascriptResult *js_result);
+
+WEBKIT_API JSGlobalContextRef
+webkit_javascript_result_get_global_context (WebKitJavascriptResult *js_result);
+
+WEBKIT_API JSValueRef
+webkit_javascript_result_get_value          (WebKitJavascriptResult *js_result);
+
+G_END_DECLS
+
+#endif

Added: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h (0 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h	2012-03-21 08:44:23 UTC (rev 111510)
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2012 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef WebKitJavascriptResultPrivate_h
+#define WebKitJavascriptResultPrivate_h
+
+#include "WebKitJavascriptResult.h"
+#include "WebKitPrivate.h"
+#include "WebKitWebView.h"
+
+WebKitJavascriptResult* webkitJavascriptResultCreate(WebKitWebView*, WKSerializedScriptValueRef);
+
+#endif // WebKitJavascriptResultPrivate_h

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h	2012-03-21 08:44:23 UTC (rev 111510)
@@ -30,6 +30,7 @@
 #include <WebKit2/WKDownload.h>
 #include <WebKit2/WKFindOptions.h>
 #include <WebKit2/WKRetainPtr.h>
+#include <WebKit2/WKSerializedScriptValue.h>
 #include <WebKit2/WKString.h>
 #include <WebKit2/WebKit2.h>
 #include <glib.h>

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2012-03-21 08:44:23 UTC (rev 111510)
@@ -25,6 +25,7 @@
 #include "WebKitEnumTypes.h"
 #include "WebKitError.h"
 #include "WebKitHitTestResultPrivate.h"
+#include "WebKitJavascriptResultPrivate.h"
 #include "WebKitLoaderClient.h"
 #include "WebKitMarshal.h"
 #include "WebKitPolicyClient.h"
@@ -38,6 +39,7 @@
 #include "WebKitWebViewPrivate.h"
 #include "WebKitWindowPropertiesPrivate.h"
 #include "WebPageProxy.h"
+#include <_javascript_Core/APICast.h>
 #include <WebCore/DragIcon.h>
 #include <WebCore/GtkUtilities.h>
 #include <glib/gi18n-lib.h>
@@ -100,6 +102,7 @@
     unsigned mouseTargetModifiers;
 
     GRefPtr<WebKitFindController> findController;
+    JSGlobalContextRef _javascript_GlobalContext;
 };
 
 static guint signals[LAST_SIGNAL] = { 0, };
@@ -255,7 +258,10 @@
 
 static void webkitWebViewFinalize(GObject* object)
 {
-    WEBKIT_WEB_VIEW(object)->priv->~WebKitWebViewPrivate();
+    WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW(object)->priv;
+    if (priv->_javascript_GlobalContext)
+        JSGlobalContextRelease(priv->_javascript_GlobalContext);
+    priv->~WebKitWebViewPrivate();
     G_OBJECT_CLASS(webkit_web_view_parent_class)->finalize(object);
 }
 
@@ -1466,3 +1472,140 @@
 
     return webView->priv->findController.get();
 }
+
+/**
+ * webkit_web_view_get_javascript_global_context:
+ * @web_view: a #WebKitWebView
+ *
+ * Get the global _javascript_ context used by @web_view to deserialize the
+ * result values of scripts executed with webkit_web_view_run_javascript().
+ *
+ * Returns: the <function>JSGlobalContextRef</function> used by @web_view to deserialize
+ *    the result values of scripts.
+ */
+JSGlobalContextRef webkit_web_view_get_javascript_global_context(WebKitWebView* webView)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
+
+    if (!webView->priv->_javascript_GlobalContext)
+        webView->priv->_javascript_GlobalContext = JSGlobalContextCreate(0);
+    return webView->priv->_javascript_GlobalContext;
+}
+
+static void webkitWebViewRunJavaScriptCallback(WKSerializedScriptValueRef wkSerializedScriptValue, WKErrorRef, void* context)
+{
+    GRefPtr<GSimpleAsyncResult> result = adoptGRef(G_SIMPLE_ASYNC_RESULT(context));
+    if (wkSerializedScriptValue) {
+        GRefPtr<WebKitWebView> webView = adoptGRef(WEBKIT_WEB_VIEW(g_async_result_get_source_object(G_ASYNC_RESULT(result.get()))));
+        WebKitJavascriptResult* scriptResult = webkitJavascriptResultCreate(webView.get(), wkSerializedScriptValue);
+        g_simple_async_result_set_op_res_gpointer(result.get(), scriptResult, reinterpret_cast<GDestroyNotify>(webkit_javascript_result_unref));
+    } else {
+        GError* error = 0;
+        g_set_error_literal(&error, WEBKIT_JAVASCRIPT_ERROR, WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED, _("An exception was raised in _javascript_"));
+        g_simple_async_result_take_error(result.get(), error);
+    }
+    g_simple_async_result_complete(result.get());
+}
+
+/**
+ * webkit_web_view_run_javascript:
+ * @web_view: a #WebKitWebView
+ * @script: the script to run
+ * @callback: (scope async): a #GAsyncReadyCallback to call when the script finished
+ * @user_data: (closure): the data to pass to callback function
+ *
+ * Asynchronously run @script in the context of the current page in @web_view.
+ *
+ * When the operation is finished, @callback will be called. You can then call
+ * webkit_web_view_run_javascript_finish() to get the result of the operation.
+ */
+void webkit_web_view_run_javascript(WebKitWebView* webView, const gchar* script, GAsyncReadyCallback callback, gpointer userData)
+{
+    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+    g_return_if_fail(script);
+
+    WKPageRef wkPage = toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)));
+    WKRetainPtr<WKStringRef> wkScript = adoptWK(WKStringCreateWithUTF8CString(script));
+    GSimpleAsyncResult* result = g_simple_async_result_new(G_OBJECT(webView), callback, userData,
+                                                           reinterpret_cast<gpointer>(webkit_web_view_run_javascript));
+    WKPageRunJavaScriptInMainFrame(wkPage, wkScript.get(), result, webkitWebViewRunJavaScriptCallback);
+}
+
+/**
+ * webkit_web_view_run_javascript_finish:
+ * @web_view: a #WebKitWebView
+ * @result: a #GAsyncResult
+ * @error: return location for error or %NULL to ignore
+ *
+ * Finish an asynchronous operation started with webkit_web_view_run_javascript().
+ *
+ * This is an example of using webkit_web_view_run_javascript() with a script returning
+ * a string:
+ *
+ * <informalexample><programlisting>
+ * static void
+ * web_view_javascript_finished (GObject      *object,
+ *                               GAsyncResult *result,
+ *                               gpointer      user_data)
+ * {
+ *     WebKitJavascriptResult *js_result;
+ *     JSValueRef              value;
+ *     JSGlobalContextRef      context;
+ *     GError                 *error = NULL;
+ *
+ *     js_result = webkit_web_view_run_javascript_finish (WEBKIT_WEB_VIEW (object), result, &error);
+ *     if (!js_result) {
+ *         g_warning ("Error running _javascript_: %s", error->message);
+ *         g_error_free (error);
+ *         return;
+ *     }
+ *
+ *     context = webkit_javascript_result_get_global_context (js_result);
+ *     value = webkit_javascript_result_get_value (js_result);
+ *     if (JSValueIsString (context, value)) {
+ *         JSStringRef *js_str_value;
+ *         gchar       *str_value;
+ *         gsize        str_length;
+ *
+ *         js_str_value = JSValueToStringCopy (context, value, NULL));
+ *         str_length = JSStringGetMaximumUTF8CStringSize (js_str_value);
+ *         str_value = (gchar *)g_malloc (str_length));
+ *         JSStringGetUTF8CString (js_str_value, str_value, str_length);
+ *         JSStringRelease (js_str_value);
+ *         g_print ("Script result: %s\n", str_value);
+ *         g_free (str_value);
+ *     } else {
+ *         g_warning ("Error running _javascript_: unexpected return value");
+ *     }
+ *     webkit_javascript_result_unref (js_result);
+ * }
+ *
+ * static void
+ * web_view_get_link_url (WebKitWebView *web_view,
+ *                        const gchar   *link_id)
+ * {
+ *     gchar *script;
+ *
+ *     script = g_strdup_printf ("window.document.getElementById('%s').href;", link_id);
+ *     webkit_web_view_run_javascript (web_view, script, web_view_javascript_finished, NULL);
+ *     g_free (script);
+ * }
+ * </programlisting></informalexample>
+ *
+ * Returns: (transfer full): a #WebKitJavascriptResult with the result of the last executed statement in @script
+ *    or %NULL in case of error
+ */
+WebKitJavascriptResult* webkit_web_view_run_javascript_finish(WebKitWebView* webView, GAsyncResult* result, GError** error)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
+    g_return_val_if_fail(G_IS_ASYNC_RESULT(result), 0);
+
+    GSimpleAsyncResult* simpleResult = G_SIMPLE_ASYNC_RESULT(result);
+    g_warn_if_fail(g_simple_async_result_get_source_tag(simpleResult) == webkit_web_view_run_javascript);
+
+    if (g_simple_async_result_propagate_error(simpleResult, error))
+        return 0;
+
+    WebKitJavascriptResult* scriptResult = static_cast<WebKitJavascriptResult*>(g_simple_async_result_get_op_res_gpointer(simpleResult));
+    return scriptResult ? webkit_javascript_result_ref(scriptResult) : 0;
+}

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h	2012-03-21 08:44:23 UTC (rev 111510)
@@ -28,10 +28,12 @@
 #ifndef WebKitWebView_h
 #define WebKitWebView_h
 
+#include <_javascript_Core/JSBase.h>
 #include <webkit2/WebKitBackForwardList.h>
 #include <webkit2/WebKitDefines.h>
 #include <webkit2/WebKitFindController.h>
 #include <webkit2/WebKitHitTestResult.h>
+#include <webkit2/WebKitJavascriptResult.h>
 #include <webkit2/WebKitScriptDialog.h>
 #include <webkit2/WebKitSettings.h>
 #include <webkit2/WebKitURIRequest.h>
@@ -267,6 +269,18 @@
 WEBKIT_API WebKitFindController *
 webkit_web_view_get_find_controller                (WebKitWebView             *web_view);
 
+WEBKIT_API JSGlobalContextRef
+webkit_web_view_get_javascript_global_context      (WebKitWebView             *web_view);
+
+WEBKIT_API void
+webkit_web_view_run_javascript                     (WebKitWebView             *web_view,
+                                                    const gchar               *script,
+                                                    GAsyncReadyCallback        callback,
+                                                    gpointer                   user_data);
+WEBKIT_API WebKitJavascriptResult *
+webkit_web_view_run_javascript_finish              (WebKitWebView             *web_view,
+                                                    GAsyncResult              *result,
+                                                    GError                   **error);
 G_END_DECLS
 
 #endif

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt	2012-03-21 08:44:23 UTC (rev 111510)
@@ -49,8 +49,6 @@
 WebKitWebView
 WebKitLoadEvent
 WebKitPolicyDecisionType
-WebKitScriptDialog
-WebKitScriptDialogType
 
 <SUBSECTION Editing Commands>
 WEBKIT_EDITING_COMMAND_CUT
@@ -89,6 +87,20 @@
 webkit_web_view_can_execute_editing_command_finish
 webkit_web_view_execute_editing_command
 webkit_web_view_get_find_controller
+webkit_web_view_get_javascript_global_context
+webkit_web_view_run_javascript
+webkit_web_view_run_javascript_finish
+
+<SUBSECTION WebKitJavascriptResult>
+WebKitJavascriptResult
+webkit_javascript_result_ref
+webkit_javascript_result_unref
+webkit_javascript_result_get_global_context
+webkit_javascript_result_get_value
+
+<SUBSECTION WebKitScriptDialog>
+WebKitScriptDialog
+WebKitScriptDialogType
 webkit_script_dialog_get_dialog_type
 webkit_script_dialog_get_message
 webkit_script_dialog_confirm_set_confirmed
@@ -103,10 +115,12 @@
 WEBKIT_WEB_VIEW_CLASS
 WEBKIT_IS_WEB_VIEW_CLASS
 WEBKIT_WEB_VIEW_GET_CLASS
+WEBKIT_TYPE_JAVASCRIPT_RESULT
 WEBKIT_TYPE_SCRIPT_DIALOG
 
 <SUBSECTION Private>
 webkit_web_view_get_type
+webkit_javascript_result_get_type
 webkit_script_dialog_get_type
 WebKitWebViewPrivate
 </SECTION>
@@ -466,16 +480,19 @@
 WEBKIT_POLICY_ERROR
 WEBKIT_DOWNLOAD_ERROR
 WEBKIT_PRINT_ERROR
+WEBKIT_JAVASCRIPT_ERROR
 WebKitNetworkError
 WebKitPluginError
 WebKitPolicyError
 WebKitDownloadError
 WebKitPrintError
+WebKitJavascriptError
 webkit_network_error_quark
 webkit_plugin_error_quark
 webkit_policy_error_quark
 webkit_download_error_quark
 webkit_print_error_quark
+webkit_javascript_error_quark
 </SECTION>
 
 <SECTION>

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types	2012-03-21 08:44:23 UTC (rev 111510)
@@ -11,3 +11,4 @@
 webkit_download_get_type
 webkit_find_controller_get_type
 webkit_script_dialog_get_type
+webkit_javascript_result_get_type

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp	2012-03-21 08:44:23 UTC (rev 111510)
@@ -452,6 +452,66 @@
     g_assert_cmpfloat(webkit_web_view_get_zoom_level(test->m_webView), ==, 2.5);
 }
 
+static void testWebViewRunJavaScript(WebViewTest* test, gconstpointer)
+{
+    static const char* html = "<html><body><a id='WebKitLink' href='' title='WebKitGTK+ Title'>WebKitGTK+ Website</a></body></html>";
+    test->loadHtml(html, 0);
+    test->waitUntilLoadFinished();
+
+    GOwnPtr<GError> error;
+    WebKitJavascriptResult* _javascript_Result = test->runJavaScriptAndWaitUntilFinished("window.document.getElementById('WebKitLink').title;", &error.outPtr());
+    g_assert(_javascript_Result);
+    g_assert(!error.get());
+    GOwnPtr<char> valueString(WebViewTest::_javascript_ResultToCString(_javascript_Result));
+    g_assert_cmpstr(valueString.get(), ==, "WebKitGTK+ Title");
+
+    _javascript_Result = test->runJavaScriptAndWaitUntilFinished("window.document.getElementById('WebKitLink').href;", &error.outPtr());
+    g_assert(_javascript_Result);
+    g_assert(!error.get());
+    valueString.set(WebViewTest::_javascript_ResultToCString(_javascript_Result));
+    g_assert_cmpstr(valueString.get(), ==, "http://www.webkitgtk.org/");
+
+    _javascript_Result = test->runJavaScriptAndWaitUntilFinished("window.document.getElementById('WebKitLink').textContent", &error.outPtr());
+    g_assert(_javascript_Result);
+    g_assert(!error.get());
+    valueString.set(WebViewTest::_javascript_ResultToCString(_javascript_Result));
+    g_assert_cmpstr(valueString.get(), ==, "WebKitGTK+ Website");
+
+    _javascript_Result = test->runJavaScriptAndWaitUntilFinished("a = 25;", &error.outPtr());
+    g_assert(_javascript_Result);
+    g_assert(!error.get());
+    g_assert_cmpfloat(WebViewTest::_javascript_ResultToNumber(_javascript_Result), ==, 25);
+
+    _javascript_Result = test->runJavaScriptAndWaitUntilFinished("a = 2.5;", &error.outPtr());
+    g_assert(_javascript_Result);
+    g_assert(!error.get());
+    g_assert_cmpfloat(WebViewTest::_javascript_ResultToNumber(_javascript_Result), ==, 2.5);
+
+    _javascript_Result = test->runJavaScriptAndWaitUntilFinished("a = true", &error.outPtr());
+    g_assert(_javascript_Result);
+    g_assert(!error.get());
+    g_assert(WebViewTest::_javascript_ResultToBoolean(_javascript_Result));
+
+    _javascript_Result = test->runJavaScriptAndWaitUntilFinished("a = false", &error.outPtr());
+    g_assert(_javascript_Result);
+    g_assert(!error.get());
+    g_assert(!WebViewTest::_javascript_ResultToBoolean(_javascript_Result));
+
+    _javascript_Result = test->runJavaScriptAndWaitUntilFinished("a = null", &error.outPtr());
+    g_assert(_javascript_Result);
+    g_assert(!error.get());
+    g_assert(WebViewTest::_javascript_ResultIsNull(_javascript_Result));
+
+    _javascript_Result = test->runJavaScriptAndWaitUntilFinished("function Foo() { a = 25; } Foo();", &error.outPtr());
+    g_assert(_javascript_Result);
+    g_assert(!error.get());
+    g_assert(WebViewTest::_javascript_ResultIsUndefined(_javascript_Result));
+
+    _javascript_Result = test->runJavaScriptAndWaitUntilFinished("foo();", &error.outPtr());
+    g_assert(!_javascript_Result);
+    g_assert_error(error.get(), WEBKIT_JAVASCRIPT_ERROR, WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED);
+}
+
 void beforeAll()
 {
     WebViewTest::add("WebKitWebView", "default-context", testWebViewDefaultContext);
@@ -463,6 +523,7 @@
     UIClientTest::add("WebKitWebView", "window-properties", testWebViewWindowProperties);
     UIClientTest::add("WebKitWebView", "mouse-target", testWebViewMouseTarget);
     WebViewTest::add("WebKitWebView", "zoom-level", testWebViewZoomLevel);
+    WebViewTest::add("WebKitWebView", "run-_javascript_", testWebViewRunJavaScript);
 }
 
 void afterAll()

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp	2012-03-21 08:44:23 UTC (rev 111510)
@@ -21,12 +21,14 @@
 #include "config.h"
 #include "WebViewTest.h"
 
+#include <_javascript_Core/JSRetainPtr.h>
 #include <WebCore/GOwnPtrGtk.h>
 
 WebViewTest::WebViewTest()
     : m_webView(WEBKIT_WEB_VIEW(g_object_ref_sink(webkit_web_view_new())))
     , m_mainLoop(g_main_loop_new(0, TRUE))
     , m_parentWindow(0)
+    , m_javascriptResult(0)
 {
     assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webView));
 }
@@ -35,6 +37,8 @@
 {
     if (m_parentWindow)
         gtk_widget_destroy(m_parentWindow);
+    if (m_javascriptResult)
+        webkit_javascript_result_unref(m_javascriptResult);
     g_object_unref(m_webView);
     g_main_loop_unref(m_mainLoop);
 }
@@ -194,3 +198,84 @@
     gtk_main_do_event(event.get());
 }
 
+static void runJavaScriptReadyCallback(GObject*, GAsyncResult* result, WebViewTest* test)
+{
+    test->m_javascriptResult = webkit_web_view_run_javascript_finish(test->m_webView, result, test->m_javascriptError);
+    g_main_loop_quit(test->m_mainLoop);
+}
+
+WebKitJavascriptResult* WebViewTest::runJavaScriptAndWaitUntilFinished(const char* _javascript_, GError** error)
+{
+    if (m_javascriptResult)
+        webkit_javascript_result_unref(m_javascriptResult);
+    m_javascriptResult = 0;
+    m_javascriptError = error;
+    webkit_web_view_run_javascript(m_webView, _javascript_, reinterpret_cast<GAsyncReadyCallback>(runJavaScriptReadyCallback), this);
+    g_main_loop_run(m_mainLoop);
+
+    return m_javascriptResult;
+}
+
+static char* jsValueToCString(JSGlobalContextRef context, JSValueRef value)
+{
+    g_assert(value);
+    g_assert(JSValueIsString(context, value));
+
+    JSRetainPtr<JSStringRef> stringValue(Adopt, JSValueToStringCopy(context, value, 0));
+    g_assert(stringValue);
+
+    size_t cStringLength = JSStringGetMaximumUTF8CStringSize(stringValue.get());
+    char* cString = static_cast<char*>(g_malloc(cStringLength));
+    JSStringGetUTF8CString(stringValue.get(), cString, cStringLength);
+    return cString;
+}
+
+char* WebViewTest::_javascript_ResultToCString(WebKitJavascriptResult* _javascript_Result)
+{
+    JSGlobalContextRef context = webkit_javascript_result_get_global_context(_javascript_Result);
+    g_assert(context);
+    return jsValueToCString(context, webkit_javascript_result_get_value(_javascript_Result));
+}
+
+double WebViewTest::_javascript_ResultToNumber(WebKitJavascriptResult* _javascript_Result)
+{
+    JSGlobalContextRef context = webkit_javascript_result_get_global_context(_javascript_Result);
+    g_assert(context);
+    JSValueRef value = webkit_javascript_result_get_value(_javascript_Result);
+    g_assert(value);
+    g_assert(JSValueIsNumber(context, value));
+
+    return JSValueToNumber(context, value, 0);
+}
+
+bool WebViewTest::_javascript_ResultToBoolean(WebKitJavascriptResult* _javascript_Result)
+{
+    JSGlobalContextRef context = webkit_javascript_result_get_global_context(_javascript_Result);
+    g_assert(context);
+    JSValueRef value = webkit_javascript_result_get_value(_javascript_Result);
+    g_assert(value);
+    g_assert(JSValueIsBoolean(context, value));
+
+    return JSValueToBoolean(context, value);
+}
+
+bool WebViewTest::_javascript_ResultIsNull(WebKitJavascriptResult* _javascript_Result)
+{
+    JSGlobalContextRef context = webkit_javascript_result_get_global_context(_javascript_Result);
+    g_assert(context);
+    JSValueRef value = webkit_javascript_result_get_value(_javascript_Result);
+    g_assert(value);
+
+    return JSValueIsNull(context, value);
+}
+
+bool WebViewTest::_javascript_ResultIsUndefined(WebKitJavascriptResult* _javascript_Result)
+{
+    JSGlobalContextRef context = webkit_javascript_result_get_global_context(_javascript_Result);
+    g_assert(context);
+    JSValueRef value = webkit_javascript_result_get_value(_javascript_Result);
+    g_assert(value);
+
+    return JSValueIsUndefined(context, value);
+}
+

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h	2012-03-21 08:44:23 UTC (rev 111510)
@@ -48,11 +48,22 @@
 
     void mouseMoveTo(int x, int y, unsigned int mouseModifiers = 0);
 
+    WebKitJavascriptResult* runJavaScriptAndWaitUntilFinished(const char* _javascript_, GError**);
+
+    // _javascript_ result helpers.
+    static char* _javascript_ResultToCString(WebKitJavascriptResult*);
+    static double _javascript_ResultToNumber(WebKitJavascriptResult*);
+    static bool _javascript_ResultToBoolean(WebKitJavascriptResult*);
+    static bool _javascript_ResultIsNull(WebKitJavascriptResult*);
+    static bool _javascript_ResultIsUndefined(WebKitJavascriptResult*);
+
     WebKitWebView* m_webView;
     GMainLoop* m_mainLoop;
     CString m_activeURI;
     GtkWidget* m_parentWindow;
     CString m_expectedTitle;
+    WebKitJavascriptResult* m_javascriptResult;
+    GError** m_javascriptError;
 };
 
 #endif // WebViewTest_h

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h (111509 => 111510)


--- trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h	2012-03-21 08:44:23 UTC (rev 111510)
@@ -32,6 +32,7 @@
 #include <webkit2/WebKitError.h>
 #include <webkit2/WebKitFindController.h>
 #include <webkit2/WebKitHitTestResult.h>
+#include <webkit2/WebKitJavascriptResult.h>
 #include <webkit2/WebKitPrintOperation.h>
 #include <webkit2/WebKitScriptDialog.h>
 #include <webkit2/WebKitSettings.h>

Modified: trunk/Tools/ChangeLog (111509 => 111510)


--- trunk/Tools/ChangeLog	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Tools/ChangeLog	2012-03-21 08:44:23 UTC (rev 111510)
@@ -1,3 +1,13 @@
+2012-03-21  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Add webkit_web_view_run_javascript() to WebKit2 GTK+
+        https://bugs.webkit.org/show_bug.cgi?id=75543
+
+        Reviewed by Martin Robinson.
+
+        * MiniBrowser/gtk/GNUmakefile.am: Add _javascript_core_cppflags to
+        MiniBrowser CPP flags.
+
 2012-03-20  Eric Seidel  <e...@webkit.org>
 
         Move wtf/Platform.h from _javascript_Core to Source/WTF/wtf

Modified: trunk/Tools/MiniBrowser/gtk/GNUmakefile.am (111509 => 111510)


--- trunk/Tools/MiniBrowser/gtk/GNUmakefile.am	2012-03-21 08:24:18 UTC (rev 111509)
+++ trunk/Tools/MiniBrowser/gtk/GNUmakefile.am	2012-03-21 08:44:23 UTC (rev 111510)
@@ -10,6 +10,7 @@
 	-I$(top_builddir)/DerivedSources/WebKit2/webkit2gtk/include \
 	-DWEBKIT_EXEC_PATH=\"${shell pwd}/$(top_builddir)/Programs/\" \
 	$(global_cppflags) \
+	$(_javascript_core_cppflags) \
 	$(GLIB_CFLAGS) \
 	$(GTK_CFLAGS)
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to