Title: [117735] trunk
Revision
117735
Author
[email protected]
Date
2012-05-20 23:39:22 -0700 (Sun, 20 May 2012)

Log Message

[GTK] Add GCancellable parameter to all methods using gio async pattern
https://bugs.webkit.org/show_bug.cgi?id=86843

Reviewed by Gustavo Noronha Silva.

Source/WebKit2:

Add a private macro WEBKIT_DEFINE_ASYNC_DATA_STRUCT() to make it
easier to define temporary structs used in async operations.

* UIProcess/API/gtk/WebKitCookieManager.cpp:
(GetAcceptPolicyAsyncData):
(webkitCookieManagerGetAcceptPolicyCallback):
(webkit_cookie_manager_get_accept_policy):
(webkit_cookie_manager_get_accept_policy_finish):
(GetDomainsWithCookiesAsyncData):
(webkitCookieManagerGetDomainsWithCookiesCallback):
(webkit_cookie_manager_get_domains_with_cookies):
(webkit_cookie_manager_get_domains_with_cookies_finish):
* UIProcess/API/gtk/WebKitCookieManager.h:
* UIProcess/API/gtk/WebKitPrivate.h:
* UIProcess/API/gtk/WebKitWebContext.cpp:
(webkit_web_context_get_plugins):
* UIProcess/API/gtk/WebKitWebResource.cpp:
(ResourceGetDataAsyncData):
(resourceDataCallback):
(webkit_web_resource_get_data):
(webkit_web_resource_get_data_finish):
* UIProcess/API/gtk/WebKitWebResource.h:
* UIProcess/API/gtk/WebKitWebView.cpp:
(ValidateEditingCommandAsyncData):
(didValidateCommand):
(webkit_web_view_can_execute_editing_command):
(webkit_web_view_can_execute_editing_command_finish):
(RunJavaScriptAsyncData::~RunJavaScriptAsyncData):
(RunJavaScriptAsyncData):
(webkitWebViewRunJavaScriptCallback):
(webkit_web_view_run_javascript):
(webkit_web_view_run_javascript_finish):
* UIProcess/API/gtk/WebKitWebView.h:
* UIProcess/API/gtk/tests/TestCookieManager.cpp:
* UIProcess/API/gtk/tests/TestResources.cpp:
* UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
* UIProcess/API/gtk/tests/TestWebViewEditor.cpp:
* UIProcess/API/gtk/tests/WebViewTest.cpp:
(WebViewTest::runJavaScriptAndWaitUntilFinished):

Tools:

* MiniBrowser/gtk/BrowserWindow.c:
(browser_window_load_uri):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (117734 => 117735)


--- trunk/Source/WebKit2/ChangeLog	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/ChangeLog	2012-05-21 06:39:22 UTC (rev 117735)
@@ -1,3 +1,50 @@
+2012-05-20  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Add GCancellable parameter to all methods using gio async pattern
+        https://bugs.webkit.org/show_bug.cgi?id=86843
+
+        Reviewed by Gustavo Noronha Silva.
+
+        Add a private macro WEBKIT_DEFINE_ASYNC_DATA_STRUCT() to make it
+        easier to define temporary structs used in async operations.
+
+        * UIProcess/API/gtk/WebKitCookieManager.cpp:
+        (GetAcceptPolicyAsyncData):
+        (webkitCookieManagerGetAcceptPolicyCallback):
+        (webkit_cookie_manager_get_accept_policy):
+        (webkit_cookie_manager_get_accept_policy_finish):
+        (GetDomainsWithCookiesAsyncData):
+        (webkitCookieManagerGetDomainsWithCookiesCallback):
+        (webkit_cookie_manager_get_domains_with_cookies):
+        (webkit_cookie_manager_get_domains_with_cookies_finish):
+        * UIProcess/API/gtk/WebKitCookieManager.h:
+        * UIProcess/API/gtk/WebKitPrivate.h:
+        * UIProcess/API/gtk/WebKitWebContext.cpp:
+        (webkit_web_context_get_plugins):
+        * UIProcess/API/gtk/WebKitWebResource.cpp:
+        (ResourceGetDataAsyncData):
+        (resourceDataCallback):
+        (webkit_web_resource_get_data):
+        (webkit_web_resource_get_data_finish):
+        * UIProcess/API/gtk/WebKitWebResource.h:
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (ValidateEditingCommandAsyncData):
+        (didValidateCommand):
+        (webkit_web_view_can_execute_editing_command):
+        (webkit_web_view_can_execute_editing_command_finish):
+        (RunJavaScriptAsyncData::~RunJavaScriptAsyncData):
+        (RunJavaScriptAsyncData):
+        (webkitWebViewRunJavaScriptCallback):
+        (webkit_web_view_run_javascript):
+        (webkit_web_view_run_javascript_finish):
+        * UIProcess/API/gtk/WebKitWebView.h:
+        * UIProcess/API/gtk/tests/TestCookieManager.cpp:
+        * UIProcess/API/gtk/tests/TestResources.cpp:
+        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
+        * UIProcess/API/gtk/tests/TestWebViewEditor.cpp:
+        * UIProcess/API/gtk/tests/WebViewTest.cpp:
+        (WebViewTest::runJavaScriptAndWaitUntilFinished):
+
 2012-05-19  Andy Estes  <[email protected]>
 
         Use USE_APPKIT and USE_SECURITY_FRAMEWORK in a few more places

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp (117734 => 117735)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp	2012-05-21 06:39:22 UTC (rev 117735)
@@ -117,16 +117,28 @@
     WKCookieManagerSetHTTPCookieAcceptPolicy(manager->priv->wkCookieManager.get(), policy);
 }
 
+struct GetAcceptPolicyAsyncData {
+    WKHTTPCookieAcceptPolicy policy;
+    GRefPtr<GCancellable> cancellable;
+};
+WEBKIT_DEFINE_ASYNC_DATA_STRUCT(GetAcceptPolicyAsyncData)
+
 static void webkitCookieManagerGetAcceptPolicyCallback(WKHTTPCookieAcceptPolicy policy, WKErrorRef, void* context)
 {
     GRefPtr<GSimpleAsyncResult> result = adoptGRef(G_SIMPLE_ASYNC_RESULT(context));
-    g_simple_async_result_set_op_res_gpointer(result.get(), GUINT_TO_POINTER(policy), 0);
+    GetAcceptPolicyAsyncData* data = ""
+    GError* error = 0;
+    if (g_cancellable_set_error_if_cancelled(data->cancellable.get(), &error))
+        g_simple_async_result_take_error(result.get(), error);
+    else
+        data->policy = policy;
     g_simple_async_result_complete(result.get());
 }
 
 /**
  * webkit_cookie_manager_get_accept_policy:
  * @cookie_manager: a #WebKitCookieManager
+ * @cancellable: (allow-none): a #GCancellable or %NULL to ignore
  * @callback: (scope async): a #GAsyncReadyCallback to call when the request is satisfied
  * @user_data: (closure): the data to pass to callback function
  *
@@ -135,12 +147,16 @@
  * When the operation is finished, @callback will be called. You can then call
  * webkit_cookie_manager_get_accept_policy_finish() to get the result of the operation.
  */
-void webkit_cookie_manager_get_accept_policy(WebKitCookieManager* manager, GAsyncReadyCallback callback, gpointer userData)
+void webkit_cookie_manager_get_accept_policy(WebKitCookieManager* manager, GCancellable* cancellable, GAsyncReadyCallback callback, gpointer userData)
 {
     g_return_if_fail(WEBKIT_IS_COOKIE_MANAGER(manager));
 
     GSimpleAsyncResult* result = g_simple_async_result_new(G_OBJECT(manager), callback, userData,
                                                            reinterpret_cast<gpointer>(webkit_cookie_manager_get_accept_policy));
+    GetAcceptPolicyAsyncData* data = ""
+    data->cancellable = cancellable;
+    g_simple_async_result_set_op_res_gpointer(result, data, reinterpret_cast<GDestroyNotify>(destroyGetAcceptPolicyAsyncData));
+
     WKCookieManagerGetHTTPCookieAcceptPolicy(manager->priv->wkCookieManager.get(), result, webkitCookieManagerGetAcceptPolicyCallback);
 }
 
@@ -165,28 +181,41 @@
     if (g_simple_async_result_propagate_error(simpleResult, error))
         return WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY;
 
-    return static_cast<WebKitCookieAcceptPolicy>(GPOINTER_TO_UINT(g_simple_async_result_get_op_res_gpointer(simpleResult)));
+    GetAcceptPolicyAsyncData* data = ""
+    return static_cast<WebKitCookieAcceptPolicy>(data->policy);
 }
 
+struct GetDomainsWithCookiesAsyncData {
+    GRefPtr<GPtrArray> domains;
+    GRefPtr<GCancellable> cancellable;
+};
+WEBKIT_DEFINE_ASYNC_DATA_STRUCT(GetDomainsWithCookiesAsyncData)
+
 static void webkitCookieManagerGetDomainsWithCookiesCallback(WKArrayRef wkDomains, WKErrorRef, void* context)
 {
     GRefPtr<GSimpleAsyncResult> result = adoptGRef(G_SIMPLE_ASYNC_RESULT(context));
-    GPtrArray* domains = g_ptr_array_new_with_free_func(g_free);
-    for (size_t i = 0; i < WKArrayGetSize(wkDomains); ++i) {
-        WKStringRef wkDomain = static_cast<WKStringRef>(WKArrayGetItemAtIndex(wkDomains, i));
-        String domain = toImpl(wkDomain)->string();
-        if (domain.isEmpty())
-            continue;
-        g_ptr_array_add(domains, g_strdup(domain.utf8().data()));
+    GetDomainsWithCookiesAsyncData* data = ""
+    GError* error = 0;
+    if (g_cancellable_set_error_if_cancelled(data->cancellable.get(), &error))
+        g_simple_async_result_take_error(result.get(), error);
+    else {
+        data->domains = adoptGRef(g_ptr_array_new_with_free_func(g_free));
+        for (size_t i = 0; i < WKArrayGetSize(wkDomains); ++i) {
+            WKStringRef wkDomain = static_cast<WKStringRef>(WKArrayGetItemAtIndex(wkDomains, i));
+            String domain = toImpl(wkDomain)->string();
+            if (domain.isEmpty())
+                continue;
+            g_ptr_array_add(data->domains.get(), g_strdup(domain.utf8().data()));
+        }
+        g_ptr_array_add(data->domains.get(), 0);
     }
-    g_ptr_array_add(domains, 0);
-    g_simple_async_result_set_op_res_gpointer(result.get(), domains, reinterpret_cast<GDestroyNotify>(g_ptr_array_unref));
     g_simple_async_result_complete(result.get());
 }
 
 /**
  * webkit_cookie_manager_get_domains_with_cookies:
  * @cookie_manager: a #WebKitCookieManager
+ * @cancellable: (allow-none): a #GCancellable or %NULL to ignore
  * @callback: (scope async): a #GAsyncReadyCallback to call when the request is satisfied
  * @user_data: (closure): the data to pass to callback function
  *
@@ -195,12 +224,15 @@
  * When the operation is finished, @callback will be called. You can then call
  * webkit_cookie_manager_get_domains_with_cookies_finish() to get the result of the operation.
  */
-void webkit_cookie_manager_get_domains_with_cookies(WebKitCookieManager* manager, GAsyncReadyCallback callback, gpointer userData)
+void webkit_cookie_manager_get_domains_with_cookies(WebKitCookieManager* manager, GCancellable* cancellable, GAsyncReadyCallback callback, gpointer userData)
 {
     g_return_if_fail(WEBKIT_IS_COOKIE_MANAGER(manager));
 
     GSimpleAsyncResult* result = g_simple_async_result_new(G_OBJECT(manager), callback, userData,
                                                            reinterpret_cast<gpointer>(webkit_cookie_manager_get_domains_with_cookies));
+    GetDomainsWithCookiesAsyncData* data = ""
+    data->cancellable = cancellable;
+    g_simple_async_result_set_op_res_gpointer(result, data, reinterpret_cast<GDestroyNotify>(destroyGetDomainsWithCookiesAsyncData));
     WKCookieManagerGetHostnamesWithCookies(manager->priv->wkCookieManager.get(), result, webkitCookieManagerGetDomainsWithCookiesCallback);
 }
 
@@ -228,8 +260,8 @@
     if (g_simple_async_result_propagate_error(simpleResult, error))
         return 0;
 
-    GPtrArray* domains = static_cast<GPtrArray*>(g_simple_async_result_get_op_res_gpointer(simpleResult));
-    return reinterpret_cast<char**>(g_ptr_array_free(domains, FALSE));
+    GetDomainsWithCookiesAsyncData* data = ""
+    return reinterpret_cast<char**>(g_ptr_array_free(data->domains.leakRef(), FALSE));
 }
 
 /**

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.h (117734 => 117735)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.h	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.h	2012-05-21 06:39:22 UTC (rev 117735)
@@ -74,6 +74,7 @@
 
 WEBKIT_API void
 webkit_cookie_manager_get_accept_policy               (WebKitCookieManager     *cookie_manager,
+                                                       GCancellable            *cancellable,
                                                        GAsyncReadyCallback      callback,
                                                        gpointer                 user_data);
 
@@ -84,6 +85,7 @@
 
 WEBKIT_API void
 webkit_cookie_manager_get_domains_with_cookies        (WebKitCookieManager     *cookie_manager,
+                                                       GCancellable            *cancellable,
                                                        GAsyncReadyCallback      callback,
                                                        gpointer                 user_data);
 

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


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h	2012-05-21 06:39:22 UTC (rev 117735)
@@ -44,6 +44,19 @@
 #define COMPILE_ASSERT_MATCHING_ENUM(webkitName, webcoreName) \
         COMPILE_ASSERT(int(webkitName) == int(webcoreName), mismatchingEnums)
 
+#define WEBKIT_DEFINE_ASYNC_DATA_STRUCT(structName) \
+static structName* create##structName() \
+{ \
+    structName* data = "" \
+    new (data) structName(); \
+    return data; \
+} \
+static void destroy##structName(structName* data) \
+{ \
+    data->~structName(); \
+    g_slice_free(structName, data); \
+}
+
 unsigned wkEventModifiersToGdkModifiers(WKEventModifiers);
 
 #endif // WebKitPrivate_h

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp (117734 => 117735)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp	2012-05-21 06:39:22 UTC (rev 117735)
@@ -256,20 +256,8 @@
 struct GetPluginsAsyncData {
     Vector<PluginModuleInfo> plugins;
 };
+WEBKIT_DEFINE_ASYNC_DATA_STRUCT(GetPluginsAsyncData)
 
-static GetPluginsAsyncData* getPluginsAsyncDataCreate()
-{
-    GetPluginsAsyncData* data = ""
-    new (data) GetPluginsAsyncData();
-    return data;
-}
-
-static void getPluginsAsyncDataDestroy(GetPluginsAsyncData* data)
-{
-    data->~GetPluginsAsyncData();
-    g_slice_free(GetPluginsAsyncData, data);
-}
-
 static void webkitWebContextGetPluginThread(GSimpleAsyncResult* result, GObject* object, GCancellable*)
 {
     GetPluginsAsyncData* data = ""
@@ -294,8 +282,8 @@
 
     GRefPtr<GSimpleAsyncResult> result = adoptGRef(g_simple_async_result_new(G_OBJECT(context), callback, userData,
                                                                              reinterpret_cast<gpointer>(webkit_web_context_get_plugins)));
-    g_simple_async_result_set_op_res_gpointer(result.get(), getPluginsAsyncDataCreate(),
-                                              reinterpret_cast<GDestroyNotify>(getPluginsAsyncDataDestroy));
+    g_simple_async_result_set_op_res_gpointer(result.get(), createGetPluginsAsyncData(),
+                                              reinterpret_cast<GDestroyNotify>(destroyGetPluginsAsyncData));
     g_simple_async_result_run_in_thread(result.get(), webkitWebContextGetPluginThread, G_PRIORITY_DEFAULT, cancellable);
 }
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebResource.cpp (117734 => 117735)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebResource.cpp	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebResource.cpp	2012-05-21 06:39:22 UTC (rev 117735)
@@ -301,16 +301,28 @@
     return resource->priv->response.get();
 }
 
-static void resourceDataCallback(WKDataRef data, WKErrorRef, void* context)
+struct ResourceGetDataAsyncData {
+    WKDataRef wkData;
+    GRefPtr<GCancellable> cancellable;
+};
+WEBKIT_DEFINE_ASYNC_DATA_STRUCT(ResourceGetDataAsyncData)
+
+static void resourceDataCallback(WKDataRef wkData, WKErrorRef, void* context)
 {
     GRefPtr<GSimpleAsyncResult> result = adoptGRef(G_SIMPLE_ASYNC_RESULT(context));
-    g_simple_async_result_set_op_res_gpointer(result.get(), const_cast<OpaqueWKData*>(data), 0);
+    ResourceGetDataAsyncData* data = ""
+    GError* error = 0;
+    if (g_cancellable_set_error_if_cancelled(data->cancellable.get(), &error))
+        g_simple_async_result_take_error(result.get(), error);
+    else
+        data->wkData = wkData;
     g_simple_async_result_complete(result.get());
 }
 
 /**
  * webkit_web_resource_get_data:
  * @resource: a #WebKitWebResource
+ * @cancellable: (allow-none): a #GCancellable or %NULL to ignore
  * @callback: (scope async): a #GAsyncReadyCallback to call when the request is satisfied
  * @user_data: (closure): the data to pass to callback function
  *
@@ -319,12 +331,15 @@
  * When the operation is finished, @callback will be called. You can then call
  * webkit_web_resource_get_data_finish() to get the result of the operation.
  */
-void webkit_web_resource_get_data(WebKitWebResource* resource, GAsyncReadyCallback callback, gpointer userData)
+void webkit_web_resource_get_data(WebKitWebResource* resource, GCancellable* cancellable, GAsyncReadyCallback callback, gpointer userData)
 {
     g_return_if_fail(WEBKIT_IS_WEB_RESOURCE(resource));
 
     GSimpleAsyncResult* result = g_simple_async_result_new(G_OBJECT(resource), callback, userData,
                                                            reinterpret_cast<gpointer>(webkit_web_resource_get_data));
+    ResourceGetDataAsyncData* data = ""
+    data->cancellable = cancellable;
+    g_simple_async_result_set_op_res_gpointer(result, data, reinterpret_cast<GDestroyNotify>(destroyResourceGetDataAsyncData));
     if (resource->priv->isMainResource)
         WKFrameGetMainResourceData(resource->priv->wkFrame.get(), resourceDataCallback, result);
     else {
@@ -356,8 +371,8 @@
     if (g_simple_async_result_propagate_error(simple, error))
         return 0;
 
-    WKDataRef wkData = static_cast<WKDataRef>(g_simple_async_result_get_op_res_gpointer(simple));
+    ResourceGetDataAsyncData* data = ""
     if (length)
-        *length = WKDataGetSize(wkData);
-    return static_cast<guchar*>(g_memdup(WKDataGetBytes(wkData), WKDataGetSize(wkData)));
+        *length = WKDataGetSize(data->wkData);
+    return static_cast<guchar*>(g_memdup(WKDataGetBytes(data->wkData), WKDataGetSize(data->wkData)));
 }

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebResource.h (117734 => 117735)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebResource.h	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebResource.h	2012-05-21 06:39:22 UTC (rev 117735)
@@ -63,6 +63,7 @@
 
 WEBKIT_API void
 webkit_web_resource_get_data        (WebKitWebResource  *resource,
+                                     GCancellable       *cancellable,
                                      GAsyncReadyCallback callback,
                                      gpointer            user_data);
 

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


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2012-05-21 06:39:22 UTC (rev 117735)
@@ -1618,10 +1618,21 @@
     return zoomTextOnly ? WKPageGetTextZoomFactor(wkPage) : WKPageGetPageZoomFactor(wkPage);
 }
 
+struct ValidateEditingCommandAsyncData {
+    bool isEnabled;
+    GRefPtr<GCancellable> cancellable;
+};
+WEBKIT_DEFINE_ASYNC_DATA_STRUCT(ValidateEditingCommandAsyncData)
+
 static void didValidateCommand(WKStringRef command, bool isEnabled, int32_t state, WKErrorRef, void* context)
 {
     GRefPtr<GSimpleAsyncResult> result = adoptGRef(G_SIMPLE_ASYNC_RESULT(context));
-    g_simple_async_result_set_op_res_gboolean(result.get(), isEnabled);
+    ValidateEditingCommandAsyncData* data = ""
+    GError* error = 0;
+    if (g_cancellable_set_error_if_cancelled(data->cancellable.get(), &error))
+        g_simple_async_result_take_error(result.get(), error);
+    else
+        data->isEnabled = isEnabled;
     g_simple_async_result_complete(result.get());
 }
 
@@ -1629,6 +1640,7 @@
  * webkit_web_view_can_execute_editing_command:
  * @web_view: a #WebKitWebView
  * @command: the command to check
+ * @cancellable: (allow-none): a #GCancellable or %NULL to ignore
  * @callback: (scope async): a #GAsyncReadyCallback to call when the request is satisfied
  * @user_data: (closure): the data to pass to callback function
  *
@@ -1637,13 +1649,17 @@
  * When the operation is finished, @callback will be called. You can then call
  * webkit_web_view_can_execute_editing_command_finish() to get the result of the operation.
  */
-void webkit_web_view_can_execute_editing_command(WebKitWebView* webView, const char* command, GAsyncReadyCallback callback, gpointer userData)
+void webkit_web_view_can_execute_editing_command(WebKitWebView* webView, const char* command, GCancellable* cancellable, GAsyncReadyCallback callback, gpointer userData)
 {
     g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
     g_return_if_fail(command);
 
     GSimpleAsyncResult* result = g_simple_async_result_new(G_OBJECT(webView), callback, userData,
                                                            reinterpret_cast<gpointer>(webkit_web_view_can_execute_editing_command));
+    ValidateEditingCommandAsyncData* data = ""
+    data->cancellable = cancellable;
+    g_simple_async_result_set_op_res_gpointer(result, data, reinterpret_cast<GDestroyNotify>(destroyValidateEditingCommandAsyncData));
+
     WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
     WKRetainPtr<WKStringRef> wkCommand(AdoptWK, WKStringCreateWithUTF8CString(command));
     WKPageValidateCommand(toAPI(page), wkCommand.get(), result, didValidateCommand);
@@ -1669,7 +1685,9 @@
 
     if (g_simple_async_result_propagate_error(simple, error))
         return FALSE;
-    return g_simple_async_result_get_op_res_gboolean(simple);
+
+    ValidateEditingCommandAsyncData* data = ""
+    return data->isEnabled;
 }
 
 /**
@@ -1730,15 +1748,29 @@
     return webView->priv->_javascript_GlobalContext;
 }
 
+struct RunJavaScriptAsyncData {
+    ~RunJavaScriptAsyncData()
+    {
+        if (scriptResult)
+            webkit_javascript_result_unref(scriptResult);
+    }
+
+    WebKitJavascriptResult* scriptResult;
+    GRefPtr<GCancellable> cancellable;
+};
+WEBKIT_DEFINE_ASYNC_DATA_STRUCT(RunJavaScriptAsyncData)
+
 static void webkitWebViewRunJavaScriptCallback(WKSerializedScriptValueRef wkSerializedScriptValue, WKErrorRef, void* context)
 {
     GRefPtr<GSimpleAsyncResult> result = adoptGRef(G_SIMPLE_ASYNC_RESULT(context));
-    if (wkSerializedScriptValue) {
+    RunJavaScriptAsyncData* data = ""
+    GError* error = 0;
+    if (g_cancellable_set_error_if_cancelled(data->cancellable.get(), &error))
+        g_simple_async_result_take_error(result.get(), error);
+    else 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));
+        data->scriptResult = webkitJavascriptResultCreate(webView.get(), wkSerializedScriptValue);
     } 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);
     }
@@ -1749,6 +1781,7 @@
  * webkit_web_view_run_javascript:
  * @web_view: a #WebKitWebView
  * @script: the script to run
+ * @cancellable: (allow-none): a #GCancellable or %NULL to ignore
  * @callback: (scope async): a #GAsyncReadyCallback to call when the script finished
  * @user_data: (closure): the data to pass to callback function
  *
@@ -1757,7 +1790,7 @@
  * 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)
+void webkit_web_view_run_javascript(WebKitWebView* webView, const gchar* script, GCancellable* cancellable, GAsyncReadyCallback callback, gpointer userData)
 {
     g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
     g_return_if_fail(script);
@@ -1766,6 +1799,9 @@
     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));
+    RunJavaScriptAsyncData* data = ""
+    data->cancellable = cancellable;
+    g_simple_async_result_set_op_res_gpointer(result, data, reinterpret_cast<GDestroyNotify>(destroyRunJavaScriptAsyncData));
     WKPageRunJavaScriptInMainFrame(wkPage, wkScript.get(), result, webkitWebViewRunJavaScriptCallback);
 }
 
@@ -1844,8 +1880,8 @@
     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;
+    RunJavaScriptAsyncData* data = ""
+    return data->scriptResult ? webkit_javascript_result_ref(data->scriptResult) : 0;
 }
 
 /**

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


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h	2012-05-21 06:39:22 UTC (rev 117735)
@@ -263,6 +263,7 @@
 WEBKIT_API void
 webkit_web_view_can_execute_editing_command        (WebKitWebView             *web_view,
                                                     const gchar               *command,
+                                                    GCancellable              *cancellable,
                                                     GAsyncReadyCallback        callback,
                                                     gpointer                   user_data);
 
@@ -284,6 +285,7 @@
 WEBKIT_API void
 webkit_web_view_run_javascript                     (WebKitWebView             *web_view,
                                                     const gchar               *script,
+                                                    GCancellable              *cancellable,
                                                     GAsyncReadyCallback        callback,
                                                     gpointer                   user_data);
 WEBKIT_API WebKitJavascriptResult *

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp (117734 => 117735)


--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp	2012-05-21 06:39:22 UTC (rev 117735)
@@ -74,7 +74,7 @@
     WebKitCookieAcceptPolicy getAcceptPolicy()
     {
         m_acceptPolicy = WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY;
-        webkit_cookie_manager_get_accept_policy(m_cookieManager, getAcceptPolicyReadyCallback, this);
+        webkit_cookie_manager_get_accept_policy(m_cookieManager, 0, getAcceptPolicyReadyCallback, this);
         g_main_loop_run(m_mainLoop);
 
         return m_acceptPolicy;
@@ -100,7 +100,7 @@
     {
         g_strfreev(m_domains);
         m_domains = 0;
-        webkit_cookie_manager_get_domains_with_cookies(m_cookieManager, getDomainsReadyCallback, this);
+        webkit_cookie_manager_get_domains_with_cookies(m_cookieManager, 0, getDomainsReadyCallback, this);
         g_main_loop_run(m_mainLoop);
 
         return m_domains;

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp (117734 => 117735)


--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp	2012-05-21 06:39:22 UTC (rev 117735)
@@ -150,7 +150,7 @@
     void checkResourceData(WebKitWebResource* resource)
     {
         m_resourceDataSize = 0;
-        webkit_web_resource_get_data(resource, resourceGetDataCallback, this);
+        webkit_web_resource_get_data(resource, 0, resourceGetDataCallback, this);
         g_main_loop_run(m_mainLoop);
 
         const char* uri = webkit_web_resource_get_uri(resource);

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


--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp	2012-05-21 06:39:22 UTC (rev 117735)
@@ -675,7 +675,7 @@
     void requestFullScreenAndWaitUntilEnteredFullScreen()
     {
         m_event = None;
-        webkit_web_view_run_javascript(m_webView, "document.documentElement.webkitRequestFullScreen();", 0, 0);
+        webkit_web_view_run_javascript(m_webView, "document.documentElement.webkitRequestFullScreen();", 0, 0, 0);
         g_main_loop_run(m_mainLoop);
     }
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp (117734 => 117735)


--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp	2012-05-21 06:39:22 UTC (rev 117735)
@@ -47,7 +47,7 @@
     bool canExecuteEditingCommand(const char* command)
     {
         m_canExecuteEditingCommand = false;
-        webkit_web_view_can_execute_editing_command(m_webView, command, reinterpret_cast<GAsyncReadyCallback>(canExecuteEditingCommandReadyCallback), this);
+        webkit_web_view_can_execute_editing_command(m_webView, command, 0, reinterpret_cast<GAsyncReadyCallback>(canExecuteEditingCommandReadyCallback), this);
         g_main_loop_run(m_mainLoop);
         return m_canExecuteEditingCommand;
     }

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


--- trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp	2012-05-21 06:39:22 UTC (rev 117735)
@@ -268,7 +268,7 @@
         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);
+    webkit_web_view_run_javascript(m_webView, _javascript_, 0, reinterpret_cast<GAsyncReadyCallback>(runJavaScriptReadyCallback), this);
     g_main_loop_run(m_mainLoop);
 
     return m_javascriptResult;

Modified: trunk/Tools/ChangeLog (117734 => 117735)


--- trunk/Tools/ChangeLog	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Tools/ChangeLog	2012-05-21 06:39:22 UTC (rev 117735)
@@ -1,3 +1,13 @@
+2012-05-20  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Add GCancellable parameter to all methods using gio async pattern
+        https://bugs.webkit.org/show_bug.cgi?id=86843
+
+        Reviewed by Gustavo Noronha Silva.
+
+        * MiniBrowser/gtk/BrowserWindow.c:
+        (browser_window_load_uri):
+
 2012-05-20  Daniel Bates  <[email protected]>
 
         svn-apply cannot apply patches to files that contain space

Modified: trunk/Tools/MiniBrowser/gtk/BrowserWindow.c (117734 => 117735)


--- trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2012-05-21 06:30:51 UTC (rev 117734)
+++ trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2012-05-21 06:39:22 UTC (rev 117735)
@@ -508,5 +508,5 @@
         return;
     }
 
-    webkit_web_view_run_javascript(window->webView, strstr(uri, "_javascript_:"), NULL, NULL);
+    webkit_web_view_run_javascript(window->webView, strstr(uri, "_javascript_:"), NULL, NULL, NULL);
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to