Changeset 111510 in webkit
- Timestamp:
- Mar 21, 2012 1:44:23 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r111504 r111510 1 2012-03-21 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Add webkit_web_view_run_javascript() to WebKit2 GTK+ 4 https://bugs.webkit.org/show_bug.cgi?id=75543 5 6 Reviewed by Martin Robinson. 7 8 * GNUmakefile.am: Add new files to compilation. 9 * UIProcess/API/gtk/WebKitError.cpp: 10 (webkit_javascript_error_quark): Add new error domain for 11 Javascript errors. 12 * UIProcess/API/gtk/WebKitError.h: 13 * UIProcess/API/gtk/WebKitJavascriptResult.cpp: Added. 14 (webkitJavascriptResultCreate): Create a WebKitJavascriptResult 15 for the given WKSerializedScriptValueRef. 16 (webkit_javascript_result_ref): Increment reference count of 17 WebKitJavascriptResult. 18 (webkit_javascript_result_unref): Decrement reference count of 19 WebKitJavascriptResult. 20 (webkit_javascript_result_get_global_context): Get global 21 javascript context of the result. 22 (webkit_javascript_result_get_value): Get the JSValueRef of the 23 result. 24 * UIProcess/API/gtk/WebKitJavascriptResult.h: Added. 25 * UIProcess/API/gtk/WebKitJavascriptResultPrivate.h: Added. 26 * UIProcess/API/gtk/WebKitPrivate.h: 27 * UIProcess/API/gtk/WebKitWebView.cpp: 28 (webkitWebViewFinalize): Release the global javascript context. 29 (webkit_web_view_get_javascript_global_context): Get or create the 30 global javascript context. 31 (webkitWebViewRunJavaScriptCallback): Callback called by C API when 32 javascript execution finishes. 33 (webkit_web_view_run_javascript): Asynchronously run a given 34 javascript. 35 (webkit_web_view_run_javascript_finish): Finish async operation 36 started by webkit_web_view_run_javascript(). 37 * UIProcess/API/gtk/WebKitWebView.h: 38 * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols. 39 * UIProcess/API/gtk/docs/webkit2gtk.types: Add 40 webkit_javascript_result_get_type(). 41 * UIProcess/API/gtk/tests/TestWebKitWebView.cpp: 42 (testWebViewRunJavaScript): 43 (beforeAll): 44 * UIProcess/API/gtk/tests/WebViewTest.cpp: 45 (WebViewTest::WebViewTest): 46 (WebViewTest::~WebViewTest): 47 (runJavaScriptReadyCallback): 48 (WebViewTest::runJavaScriptAndWaitUntilFinished): 49 (jsValueToCString): 50 (WebViewTest::javascriptResultToCString): 51 (WebViewTest::javascriptResultToNumber): 52 (WebViewTest::javascriptResultToBoolean): 53 (WebViewTest::javascriptResultIsNull): 54 (WebViewTest::javascriptResultIsUndefined): 55 * UIProcess/API/gtk/tests/WebViewTest.h: 56 * UIProcess/API/gtk/webkit2.h: 57 1 58 2012-03-20 Eric Seidel <eric@webkit.org> 2 59 -
trunk/Source/WebKit2/GNUmakefile.am
r111340 r111510 93 93 $(WebKit2)/UIProcess/API/gtk/WebKitFindController.h \ 94 94 $(WebKit2)/UIProcess/API/gtk/WebKitHitTestResult.h \ 95 $(WebKit2)/UIProcess/API/gtk/WebKitJavascriptResult.h \ 95 96 $(WebKit2)/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h \ 96 97 $(WebKit2)/UIProcess/API/gtk/WebKitPolicyDecision.h \ … … 556 557 Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResult.h \ 557 558 Source/WebKit2/UIProcess/API/gtk/WebKitHitTestResultPrivate.h \ 559 Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.cpp \ 560 Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResult.h \ 561 Source/WebKit2/UIProcess/API/gtk/WebKitJavascriptResultPrivate.h \ 558 562 Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.h \ 559 563 Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp \ -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp
r110714 r111510 78 78 COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PRINT_ERROR_PRINTER_NOT_FOUND, PrintErrorPrinterNotFound); 79 79 COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_PRINT_ERROR_INVALID_PAGE_RANGE, PrintErrorInvalidPageRange); 80 81 GQuark webkit_javascript_error_quark() 82 { 83 return g_quark_from_static_string("WebKitJavascriptError"); 84 } -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitError.h
r110714 r111510 30 30 G_BEGIN_DECLS 31 31 32 #define WEBKIT_NETWORK_ERROR webkit_network_error_quark () 33 #define WEBKIT_POLICY_ERROR webkit_policy_error_quark () 34 #define WEBKIT_PLUGIN_ERROR webkit_plugin_error_quark () 35 #define WEBKIT_DOWNLOAD_ERROR webkit_download_error_quark () 36 #define WEBKIT_PRINT_ERROR webkit_print_error_quark () 32 #define WEBKIT_NETWORK_ERROR webkit_network_error_quark () 33 #define WEBKIT_POLICY_ERROR webkit_policy_error_quark () 34 #define WEBKIT_PLUGIN_ERROR webkit_plugin_error_quark () 35 #define WEBKIT_DOWNLOAD_ERROR webkit_download_error_quark () 36 #define WEBKIT_PRINT_ERROR webkit_print_error_quark () 37 #define WEBKIT_JAVASCRIPT_ERROR webkit_print_error_quark () 37 38 38 39 /** … … 120 121 } WebKitPrintError; 121 122 122 WEBKIT_API GQuark 123 webkit_network_error_quark (void); 123 /** 124 * WebKitJavascriptError: 125 * @WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED: An exception was raised in Javascript execution 126 * 127 * Enum values used to denote errors happending when executing Javascript 128 */ 129 typedef enum { 130 WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED = 699 131 } WebKitJavascriptError; 124 132 125 133 WEBKIT_API GQuark 126 webkit_ policy_error_quark(void);134 webkit_network_error_quark (void); 127 135 128 136 WEBKIT_API GQuark 129 webkit_p lugin_error_quark(void);137 webkit_policy_error_quark (void); 130 138 131 139 WEBKIT_API GQuark 132 webkit_ download_error_quark(void);140 webkit_plugin_error_quark (void); 133 141 134 142 WEBKIT_API GQuark 135 webkit_print_error_quark (void); 143 webkit_download_error_quark (void); 144 145 WEBKIT_API GQuark 146 webkit_print_error_quark (void); 147 148 WEBKIT_API GQuark 149 webkit_javascript_error_quark (void); 136 150 137 151 G_END_DECLS -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h
r109222 r111510 31 31 #include <WebKit2/WKFindOptions.h> 32 32 #include <WebKit2/WKRetainPtr.h> 33 #include <WebKit2/WKSerializedScriptValue.h> 33 34 #include <WebKit2/WKString.h> 34 35 #include <WebKit2/WebKit2.h> -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp
r109880 r111510 26 26 #include "WebKitError.h" 27 27 #include "WebKitHitTestResultPrivate.h" 28 #include "WebKitJavascriptResultPrivate.h" 28 29 #include "WebKitLoaderClient.h" 29 30 #include "WebKitMarshal.h" … … 39 40 #include "WebKitWindowPropertiesPrivate.h" 40 41 #include "WebPageProxy.h" 42 #include <JavaScriptCore/APICast.h> 41 43 #include <WebCore/DragIcon.h> 42 44 #include <WebCore/GtkUtilities.h> … … 101 103 102 104 GRefPtr<WebKitFindController> findController; 105 JSGlobalContextRef javascriptGlobalContext; 103 106 }; 104 107 … … 256 259 static void webkitWebViewFinalize(GObject* object) 257 260 { 258 WEBKIT_WEB_VIEW(object)->priv->~WebKitWebViewPrivate(); 261 WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW(object)->priv; 262 if (priv->javascriptGlobalContext) 263 JSGlobalContextRelease(priv->javascriptGlobalContext); 264 priv->~WebKitWebViewPrivate(); 259 265 G_OBJECT_CLASS(webkit_web_view_parent_class)->finalize(object); 260 266 } … … 1467 1473 return webView->priv->findController.get(); 1468 1474 } 1475 1476 /** 1477 * webkit_web_view_get_javascript_global_context: 1478 * @web_view: a #WebKitWebView 1479 * 1480 * Get the global JavaScript context used by @web_view to deserialize the 1481 * result values of scripts executed with webkit_web_view_run_javascript(). 1482 * 1483 * Returns: the <function>JSGlobalContextRef</function> used by @web_view to deserialize 1484 * the result values of scripts. 1485 */ 1486 JSGlobalContextRef webkit_web_view_get_javascript_global_context(WebKitWebView* webView) 1487 { 1488 g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0); 1489 1490 if (!webView->priv->javascriptGlobalContext) 1491 webView->priv->javascriptGlobalContext = JSGlobalContextCreate(0); 1492 return webView->priv->javascriptGlobalContext; 1493 } 1494 1495 static void webkitWebViewRunJavaScriptCallback(WKSerializedScriptValueRef wkSerializedScriptValue, WKErrorRef, void* context) 1496 { 1497 GRefPtr<GSimpleAsyncResult> result = adoptGRef(G_SIMPLE_ASYNC_RESULT(context)); 1498 if (wkSerializedScriptValue) { 1499 GRefPtr<WebKitWebView> webView = adoptGRef(WEBKIT_WEB_VIEW(g_async_result_get_source_object(G_ASYNC_RESULT(result.get())))); 1500 WebKitJavascriptResult* scriptResult = webkitJavascriptResultCreate(webView.get(), wkSerializedScriptValue); 1501 g_simple_async_result_set_op_res_gpointer(result.get(), scriptResult, reinterpret_cast<GDestroyNotify>(webkit_javascript_result_unref)); 1502 } else { 1503 GError* error = 0; 1504 g_set_error_literal(&error, WEBKIT_JAVASCRIPT_ERROR, WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED, _("An exception was raised in JavaScript")); 1505 g_simple_async_result_take_error(result.get(), error); 1506 } 1507 g_simple_async_result_complete(result.get()); 1508 } 1509 1510 /** 1511 * webkit_web_view_run_javascript: 1512 * @web_view: a #WebKitWebView 1513 * @script: the script to run 1514 * @callback: (scope async): a #GAsyncReadyCallback to call when the script finished 1515 * @user_data: (closure): the data to pass to callback function 1516 * 1517 * Asynchronously run @script in the context of the current page in @web_view. 1518 * 1519 * When the operation is finished, @callback will be called. You can then call 1520 * webkit_web_view_run_javascript_finish() to get the result of the operation. 1521 */ 1522 void webkit_web_view_run_javascript(WebKitWebView* webView, const gchar* script, GAsyncReadyCallback callback, gpointer userData) 1523 { 1524 g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView)); 1525 g_return_if_fail(script); 1526 1527 WKPageRef wkPage = toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView))); 1528 WKRetainPtr<WKStringRef> wkScript = adoptWK(WKStringCreateWithUTF8CString(script)); 1529 GSimpleAsyncResult* result = g_simple_async_result_new(G_OBJECT(webView), callback, userData, 1530 reinterpret_cast<gpointer>(webkit_web_view_run_javascript)); 1531 WKPageRunJavaScriptInMainFrame(wkPage, wkScript.get(), result, webkitWebViewRunJavaScriptCallback); 1532 } 1533 1534 /** 1535 * webkit_web_view_run_javascript_finish: 1536 * @web_view: a #WebKitWebView 1537 * @result: a #GAsyncResult 1538 * @error: return location for error or %NULL to ignore 1539 * 1540 * Finish an asynchronous operation started with webkit_web_view_run_javascript(). 1541 * 1542 * This is an example of using webkit_web_view_run_javascript() with a script returning 1543 * a string: 1544 * 1545 * <informalexample><programlisting> 1546 * static void 1547 * web_view_javascript_finished (GObject *object, 1548 * GAsyncResult *result, 1549 * gpointer user_data) 1550 * { 1551 * WebKitJavascriptResult *js_result; 1552 * JSValueRef value; 1553 * JSGlobalContextRef context; 1554 * GError *error = NULL; 1555 * 1556 * js_result = webkit_web_view_run_javascript_finish (WEBKIT_WEB_VIEW (object), result, &error); 1557 * if (!js_result) { 1558 * g_warning ("Error running javascript: %s", error->message); 1559 * g_error_free (error); 1560 * return; 1561 * } 1562 * 1563 * context = webkit_javascript_result_get_global_context (js_result); 1564 * value = webkit_javascript_result_get_value (js_result); 1565 * if (JSValueIsString (context, value)) { 1566 * JSStringRef *js_str_value; 1567 * gchar *str_value; 1568 * gsize str_length; 1569 * 1570 * js_str_value = JSValueToStringCopy (context, value, NULL)); 1571 * str_length = JSStringGetMaximumUTF8CStringSize (js_str_value); 1572 * str_value = (gchar *)g_malloc (str_length)); 1573 * JSStringGetUTF8CString (js_str_value, str_value, str_length); 1574 * JSStringRelease (js_str_value); 1575 * g_print ("Script result: %s\n", str_value); 1576 * g_free (str_value); 1577 * } else { 1578 * g_warning ("Error running javascript: unexpected return value"); 1579 * } 1580 * webkit_javascript_result_unref (js_result); 1581 * } 1582 * 1583 * static void 1584 * web_view_get_link_url (WebKitWebView *web_view, 1585 * const gchar *link_id) 1586 * { 1587 * gchar *script; 1588 * 1589 * script = g_strdup_printf ("window.document.getElementById('%s').href;", link_id); 1590 * webkit_web_view_run_javascript (web_view, script, web_view_javascript_finished, NULL); 1591 * g_free (script); 1592 * } 1593 * </programlisting></informalexample> 1594 * 1595 * Returns: (transfer full): a #WebKitJavascriptResult with the result of the last executed statement in @script 1596 * or %NULL in case of error 1597 */ 1598 WebKitJavascriptResult* webkit_web_view_run_javascript_finish(WebKitWebView* webView, GAsyncResult* result, GError** error) 1599 { 1600 g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0); 1601 g_return_val_if_fail(G_IS_ASYNC_RESULT(result), 0); 1602 1603 GSimpleAsyncResult* simpleResult = G_SIMPLE_ASYNC_RESULT(result); 1604 g_warn_if_fail(g_simple_async_result_get_source_tag(simpleResult) == webkit_web_view_run_javascript); 1605 1606 if (g_simple_async_result_propagate_error(simpleResult, error)) 1607 return 0; 1608 1609 WebKitJavascriptResult* scriptResult = static_cast<WebKitJavascriptResult*>(g_simple_async_result_get_op_res_gpointer(simpleResult)); 1610 return scriptResult ? webkit_javascript_result_ref(scriptResult) : 0; 1611 } -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h
r109881 r111510 29 29 #define WebKitWebView_h 30 30 31 #include <JavaScriptCore/JSBase.h> 31 32 #include <webkit2/WebKitBackForwardList.h> 32 33 #include <webkit2/WebKitDefines.h> 33 34 #include <webkit2/WebKitFindController.h> 34 35 #include <webkit2/WebKitHitTestResult.h> 36 #include <webkit2/WebKitJavascriptResult.h> 35 37 #include <webkit2/WebKitScriptDialog.h> 36 38 #include <webkit2/WebKitSettings.h> … … 268 270 webkit_web_view_get_find_controller (WebKitWebView *web_view); 269 271 272 WEBKIT_API JSGlobalContextRef 273 webkit_web_view_get_javascript_global_context (WebKitWebView *web_view); 274 275 WEBKIT_API void 276 webkit_web_view_run_javascript (WebKitWebView *web_view, 277 const gchar *script, 278 GAsyncReadyCallback callback, 279 gpointer user_data); 280 WEBKIT_API WebKitJavascriptResult * 281 webkit_web_view_run_javascript_finish (WebKitWebView *web_view, 282 GAsyncResult *result, 283 GError **error); 270 284 G_END_DECLS 271 285 -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt
r111399 r111510 50 50 WebKitLoadEvent 51 51 WebKitPolicyDecisionType 52 WebKitScriptDialog53 WebKitScriptDialogType54 52 55 53 <SUBSECTION Editing Commands> … … 90 88 webkit_web_view_execute_editing_command 91 89 webkit_web_view_get_find_controller 90 webkit_web_view_get_javascript_global_context 91 webkit_web_view_run_javascript 92 webkit_web_view_run_javascript_finish 93 94 <SUBSECTION WebKitJavascriptResult> 95 WebKitJavascriptResult 96 webkit_javascript_result_ref 97 webkit_javascript_result_unref 98 webkit_javascript_result_get_global_context 99 webkit_javascript_result_get_value 100 101 <SUBSECTION WebKitScriptDialog> 102 WebKitScriptDialog 103 WebKitScriptDialogType 92 104 webkit_script_dialog_get_dialog_type 93 105 webkit_script_dialog_get_message … … 104 116 WEBKIT_IS_WEB_VIEW_CLASS 105 117 WEBKIT_WEB_VIEW_GET_CLASS 118 WEBKIT_TYPE_JAVASCRIPT_RESULT 106 119 WEBKIT_TYPE_SCRIPT_DIALOG 107 120 108 121 <SUBSECTION Private> 109 122 webkit_web_view_get_type 123 webkit_javascript_result_get_type 110 124 webkit_script_dialog_get_type 111 125 WebKitWebViewPrivate … … 467 481 WEBKIT_DOWNLOAD_ERROR 468 482 WEBKIT_PRINT_ERROR 483 WEBKIT_JAVASCRIPT_ERROR 469 484 WebKitNetworkError 470 485 WebKitPluginError … … 472 487 WebKitDownloadError 473 488 WebKitPrintError 489 WebKitJavascriptError 474 490 webkit_network_error_quark 475 491 webkit_plugin_error_quark … … 477 493 webkit_download_error_quark 478 494 webkit_print_error_quark 495 webkit_javascript_error_quark 479 496 </SECTION> 480 497 -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types
r109880 r111510 12 12 webkit_find_controller_get_type 13 13 webkit_script_dialog_get_type 14 webkit_javascript_result_get_type -
trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp
r109880 r111510 453 453 } 454 454 455 static void testWebViewRunJavaScript(WebViewTest* test, gconstpointer) 456 { 457 static const char* html = "<html><body><a id='WebKitLink' href='http://www.webkitgtk.org/' title='WebKitGTK+ Title'>WebKitGTK+ Website</a></body></html>"; 458 test->loadHtml(html, 0); 459 test->waitUntilLoadFinished(); 460 461 GOwnPtr<GError> error; 462 WebKitJavascriptResult* javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.document.getElementById('WebKitLink').title;", &error.outPtr()); 463 g_assert(javascriptResult); 464 g_assert(!error.get()); 465 GOwnPtr<char> valueString(WebViewTest::javascriptResultToCString(javascriptResult)); 466 g_assert_cmpstr(valueString.get(), ==, "WebKitGTK+ Title"); 467 468 javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.document.getElementById('WebKitLink').href;", &error.outPtr()); 469 g_assert(javascriptResult); 470 g_assert(!error.get()); 471 valueString.set(WebViewTest::javascriptResultToCString(javascriptResult)); 472 g_assert_cmpstr(valueString.get(), ==, "http://www.webkitgtk.org/"); 473 474 javascriptResult = test->runJavaScriptAndWaitUntilFinished("window.document.getElementById('WebKitLink').textContent", &error.outPtr()); 475 g_assert(javascriptResult); 476 g_assert(!error.get()); 477 valueString.set(WebViewTest::javascriptResultToCString(javascriptResult)); 478 g_assert_cmpstr(valueString.get(), ==, "WebKitGTK+ Website"); 479 480 javascriptResult = test->runJavaScriptAndWaitUntilFinished("a = 25;", &error.outPtr()); 481 g_assert(javascriptResult); 482 g_assert(!error.get()); 483 g_assert_cmpfloat(WebViewTest::javascriptResultToNumber(javascriptResult), ==, 25); 484 485 javascriptResult = test->runJavaScriptAndWaitUntilFinished("a = 2.5;", &error.outPtr()); 486 g_assert(javascriptResult); 487 g_assert(!error.get()); 488 g_assert_cmpfloat(WebViewTest::javascriptResultToNumber(javascriptResult), ==, 2.5); 489 490 javascriptResult = test->runJavaScriptAndWaitUntilFinished("a = true", &error.outPtr()); 491 g_assert(javascriptResult); 492 g_assert(!error.get()); 493 g_assert(WebViewTest::javascriptResultToBoolean(javascriptResult)); 494 495 javascriptResult = test->runJavaScriptAndWaitUntilFinished("a = false", &error.outPtr()); 496 g_assert(javascriptResult); 497 g_assert(!error.get()); 498 g_assert(!WebViewTest::javascriptResultToBoolean(javascriptResult)); 499 500 javascriptResult = test->runJavaScriptAndWaitUntilFinished("a = null", &error.outPtr()); 501 g_assert(javascriptResult); 502 g_assert(!error.get()); 503 g_assert(WebViewTest::javascriptResultIsNull(javascriptResult)); 504 505 javascriptResult = test->runJavaScriptAndWaitUntilFinished("function Foo() { a = 25; } Foo();", &error.outPtr()); 506 g_assert(javascriptResult); 507 g_assert(!error.get()); 508 g_assert(WebViewTest::javascriptResultIsUndefined(javascriptResult)); 509 510 javascriptResult = test->runJavaScriptAndWaitUntilFinished("foo();", &error.outPtr()); 511 g_assert(!javascriptResult); 512 g_assert_error(error.get(), WEBKIT_JAVASCRIPT_ERROR, WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED); 513 } 514 455 515 void beforeAll() 456 516 { … … 464 524 UIClientTest::add("WebKitWebView", "mouse-target", testWebViewMouseTarget); 465 525 WebViewTest::add("WebKitWebView", "zoom-level", testWebViewZoomLevel); 526 WebViewTest::add("WebKitWebView", "run-javascript", testWebViewRunJavaScript); 466 527 } 467 528 -
trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp
r110834 r111510 22 22 #include "WebViewTest.h" 23 23 24 #include <JavaScriptCore/JSRetainPtr.h> 24 25 #include <WebCore/GOwnPtrGtk.h> 25 26 … … 28 29 , m_mainLoop(g_main_loop_new(0, TRUE)) 29 30 , m_parentWindow(0) 31 , m_javascriptResult(0) 30 32 { 31 33 assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webView)); … … 36 38 if (m_parentWindow) 37 39 gtk_widget_destroy(m_parentWindow); 40 if (m_javascriptResult) 41 webkit_javascript_result_unref(m_javascriptResult); 38 42 g_object_unref(m_webView); 39 43 g_main_loop_unref(m_mainLoop); … … 195 199 } 196 200 201 static void runJavaScriptReadyCallback(GObject*, GAsyncResult* result, WebViewTest* test) 202 { 203 test->m_javascriptResult = webkit_web_view_run_javascript_finish(test->m_webView, result, test->m_javascriptError); 204 g_main_loop_quit(test->m_mainLoop); 205 } 206 207 WebKitJavascriptResult* WebViewTest::runJavaScriptAndWaitUntilFinished(const char* javascript, GError** error) 208 { 209 if (m_javascriptResult) 210 webkit_javascript_result_unref(m_javascriptResult); 211 m_javascriptResult = 0; 212 m_javascriptError = error; 213 webkit_web_view_run_javascript(m_webView, javascript, reinterpret_cast<GAsyncReadyCallback>(runJavaScriptReadyCallback), this); 214 g_main_loop_run(m_mainLoop); 215 216 return m_javascriptResult; 217 } 218 219 static char* jsValueToCString(JSGlobalContextRef context, JSValueRef value) 220 { 221 g_assert(value); 222 g_assert(JSValueIsString(context, value)); 223 224 JSRetainPtr<JSStringRef> stringValue(Adopt, JSValueToStringCopy(context, value, 0)); 225 g_assert(stringValue); 226 227 size_t cStringLength = JSStringGetMaximumUTF8CStringSize(stringValue.get()); 228 char* cString = static_cast<char*>(g_malloc(cStringLength)); 229 JSStringGetUTF8CString(stringValue.get(), cString, cStringLength); 230 return cString; 231 } 232 233 char* WebViewTest::javascriptResultToCString(WebKitJavascriptResult* javascriptResult) 234 { 235 JSGlobalContextRef context = webkit_javascript_result_get_global_context(javascriptResult); 236 g_assert(context); 237 return jsValueToCString(context, webkit_javascript_result_get_value(javascriptResult)); 238 } 239 240 double WebViewTest::javascriptResultToNumber(WebKitJavascriptResult* javascriptResult) 241 { 242 JSGlobalContextRef context = webkit_javascript_result_get_global_context(javascriptResult); 243 g_assert(context); 244 JSValueRef value = webkit_javascript_result_get_value(javascriptResult); 245 g_assert(value); 246 g_assert(JSValueIsNumber(context, value)); 247 248 return JSValueToNumber(context, value, 0); 249 } 250 251 bool WebViewTest::javascriptResultToBoolean(WebKitJavascriptResult* javascriptResult) 252 { 253 JSGlobalContextRef context = webkit_javascript_result_get_global_context(javascriptResult); 254 g_assert(context); 255 JSValueRef value = webkit_javascript_result_get_value(javascriptResult); 256 g_assert(value); 257 g_assert(JSValueIsBoolean(context, value)); 258 259 return JSValueToBoolean(context, value); 260 } 261 262 bool WebViewTest::javascriptResultIsNull(WebKitJavascriptResult* javascriptResult) 263 { 264 JSGlobalContextRef context = webkit_javascript_result_get_global_context(javascriptResult); 265 g_assert(context); 266 JSValueRef value = webkit_javascript_result_get_value(javascriptResult); 267 g_assert(value); 268 269 return JSValueIsNull(context, value); 270 } 271 272 bool WebViewTest::javascriptResultIsUndefined(WebKitJavascriptResult* javascriptResult) 273 { 274 JSGlobalContextRef context = webkit_javascript_result_get_global_context(javascriptResult); 275 g_assert(context); 276 JSValueRef value = webkit_javascript_result_get_value(javascriptResult); 277 g_assert(value); 278 279 return JSValueIsUndefined(context, value); 280 } 281 -
trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h
r109120 r111510 49 49 void mouseMoveTo(int x, int y, unsigned int mouseModifiers = 0); 50 50 51 WebKitJavascriptResult* runJavaScriptAndWaitUntilFinished(const char* javascript, GError**); 52 53 // Javascript result helpers. 54 static char* javascriptResultToCString(WebKitJavascriptResult*); 55 static double javascriptResultToNumber(WebKitJavascriptResult*); 56 static bool javascriptResultToBoolean(WebKitJavascriptResult*); 57 static bool javascriptResultIsNull(WebKitJavascriptResult*); 58 static bool javascriptResultIsUndefined(WebKitJavascriptResult*); 59 51 60 WebKitWebView* m_webView; 52 61 GMainLoop* m_mainLoop; … … 54 63 GtkWidget* m_parentWindow; 55 64 CString m_expectedTitle; 65 WebKitJavascriptResult* m_javascriptResult; 66 GError** m_javascriptError; 56 67 }; 57 68 -
trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h
r109880 r111510 33 33 #include <webkit2/WebKitFindController.h> 34 34 #include <webkit2/WebKitHitTestResult.h> 35 #include <webkit2/WebKitJavascriptResult.h> 35 36 #include <webkit2/WebKitPrintOperation.h> 36 37 #include <webkit2/WebKitScriptDialog.h> -
trunk/Tools/ChangeLog
r111504 r111510 1 2012-03-21 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Add webkit_web_view_run_javascript() to WebKit2 GTK+ 4 https://bugs.webkit.org/show_bug.cgi?id=75543 5 6 Reviewed by Martin Robinson. 7 8 * MiniBrowser/gtk/GNUmakefile.am: Add javascriptcore_cppflags to 9 MiniBrowser CPP flags. 10 1 11 2012-03-20 Eric Seidel <eric@webkit.org> 2 12 -
trunk/Tools/MiniBrowser/gtk/GNUmakefile.am
r108222 r111510 11 11 -DWEBKIT_EXEC_PATH=\"${shell pwd}/$(top_builddir)/Programs/\" \ 12 12 $(global_cppflags) \ 13 $(javascriptcore_cppflags) \ 13 14 $(GLIB_CFLAGS) \ 14 15 $(GTK_CFLAGS)
Note: See TracChangeset
for help on using the changeset viewer.