Changeset 151725 in webkit


Ignore:
Timestamp:
Jun 19, 2013 12:24:36 AM (11 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] Migrate WebKitFaviconDatabase to GTask
https://bugs.webkit.org/show_bug.cgi?id=117156

Reviewed by Gustavo Noronha Silva.

  • UIProcess/API/gtk/WebKitFaviconDatabase.cpp:

(processPendingIconsForPageURL):
(webkit_favicon_database_get_favicon):
(webkit_favicon_database_get_favicon_finish):

Location:
trunk/Source/WebKit2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r151724 r151725  
     12013-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Migrate WebKitFaviconDatabase to GTask
     4        https://bugs.webkit.org/show_bug.cgi?id=117156
     5
     6        Reviewed by Gustavo Noronha Silva.
     7
     8        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
     9        (processPendingIconsForPageURL):
     10        (webkit_favicon_database_get_favicon):
     11        (webkit_favicon_database_get_favicon_finish):
     12
    1132013-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>
    214
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp

    r147643 r151725  
    6464static guint signals[LAST_SIGNAL] = { 0, };
    6565
    66 typedef Vector<GRefPtr<GSimpleAsyncResult> > PendingIconRequestVector;
     66typedef Vector<GRefPtr<GTask> > PendingIconRequestVector;
    6767typedef HashMap<String, PendingIconRequestVector*> PendingIconRequestMap;
    6868
     
    168168
    169169    for (size_t i = 0; i < pendingIconRequests->size(); ++i) {
    170         GSimpleAsyncResult* result = pendingIconRequests->at(i).get();
    171         GetFaviconSurfaceAsyncData* data = static_cast<GetFaviconSurfaceAsyncData*>(g_simple_async_result_get_op_res_gpointer(result));
    172         if (!g_cancellable_is_cancelled(data->cancellable.get())) {
    173             if (error)
    174                 g_simple_async_result_take_error(result, error.release());
    175             else {
    176                 data->icon = icon;
    177                 data->shouldReleaseIconForPageURL = false;
    178             }
     170        GTask* task = pendingIconRequests->at(i).get();
     171        if (error)
     172            g_task_return_error(task, error.release());
     173        else {
     174            GetFaviconSurfaceAsyncData* data = static_cast<GetFaviconSurfaceAsyncData*>(g_task_get_task_data(task));
     175            data->icon = icon;
     176            data->shouldReleaseIconForPageURL = false;
     177            g_task_return_boolean(task, TRUE);
    179178        }
    180 
    181         g_simple_async_result_complete(result);
    182179    }
    183180    deletePendingIconRequests(database, pendingIconRequests, pageURL);
     
    239236}
    240237
    241 static void setErrorForAsyncResult(GSimpleAsyncResult* result, WebKitFaviconDatabaseError error, const String& pageURL = String())
    242 {
    243     ASSERT(result);
    244 
    245     switch (error) {
    246     case WEBKIT_FAVICON_DATABASE_ERROR_NOT_INITIALIZED:
    247         g_simple_async_result_set_error(result, WEBKIT_FAVICON_DATABASE_ERROR, error, _("Favicons database not initialized yet"));
    248         break;
    249 
    250     case WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_NOT_FOUND:
    251         g_simple_async_result_set_error(result, WEBKIT_FAVICON_DATABASE_ERROR, error, _("Page %s does not have a favicon"), pageURL.utf8().data());
    252         break;
    253 
    254     case WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_UNKNOWN:
    255         g_simple_async_result_set_error(result, WEBKIT_FAVICON_DATABASE_ERROR, error, _("Unknown favicon for page %s"), pageURL.utf8().data());
    256         break;
    257 
    258     default:
    259         ASSERT_NOT_REACHED();
    260     }
    261 }
    262 
    263238GQuark webkit_favicon_database_error_quark(void)
    264239{
     
    288263    g_return_if_fail(pageURI);
    289264
    290     GRefPtr<GSimpleAsyncResult> result = adoptGRef(g_simple_async_result_new(G_OBJECT(database), callback, userData, reinterpret_cast<gpointer>(webkit_favicon_database_get_favicon)));
    291     g_simple_async_result_set_check_cancellable(result.get(), cancellable);
    292 
    293     GetFaviconSurfaceAsyncData* data = createGetFaviconSurfaceAsyncData();
    294     g_simple_async_result_set_op_res_gpointer(result.get(), data, reinterpret_cast<GDestroyNotify>(destroyGetFaviconSurfaceAsyncData));
    295     data->faviconDatabase = database;
    296     data->pageURL = String::fromUTF8(pageURI);
    297     data->cancellable = cancellable;
    298 
    299265    WebKitFaviconDatabasePrivate* priv = database->priv;
    300266    WebIconDatabase* iconDatabaseImpl = priv->iconDatabase.get();
    301267    if (!iconDatabaseImpl->isOpen()) {
    302         setErrorForAsyncResult(result.get(), WEBKIT_FAVICON_DATABASE_ERROR_NOT_INITIALIZED);
    303         g_simple_async_result_complete_in_idle(result.get());
    304         return;
    305     }
    306 
    307     if (data->pageURL.isEmpty() || data->pageURL.startsWith("about:")) {
    308         setErrorForAsyncResult(result.get(), WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_NOT_FOUND, data->pageURL);
    309         g_simple_async_result_complete_in_idle(result.get());
    310         return;
    311     }
     268        g_task_report_new_error(database, callback, userData, 0,
     269            WEBKIT_FAVICON_DATABASE_ERROR, WEBKIT_FAVICON_DATABASE_ERROR_NOT_INITIALIZED, _("Favicons database not initialized yet"));
     270        return;
     271    }
     272
     273    if (g_str_has_prefix(pageURI, "about:")) {
     274        g_task_report_new_error(database, callback, userData, 0,
     275            WEBKIT_FAVICON_DATABASE_ERROR, WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_NOT_FOUND, _("Page %s does not have a favicon"), pageURI);
     276        return;
     277    }
     278
     279    GRefPtr<GTask> task = adoptGRef(g_task_new(database, cancellable, callback, userData));
     280
     281    GetFaviconSurfaceAsyncData* data = createGetFaviconSurfaceAsyncData();
     282    data->faviconDatabase = database;
     283    data->pageURL = String::fromUTF8(pageURI);
     284    g_task_set_task_data(task.get(), data, reinterpret_cast<GDestroyNotify>(destroyGetFaviconSurfaceAsyncData));
    312285
    313286    priv->iconDatabase->retainIconForPageURL(data->pageURL);
     
    318291    data->icon = getIconSurfaceSynchronously(database, data->pageURL, &error.outPtr());
    319292    if (data->icon) {
    320         g_simple_async_result_complete_in_idle(result.get());
     293        g_task_return_boolean(task.get(), TRUE);
    321294        return;
    322295    }
     
    326299
    327300    if (g_error_matches(error.get(), WEBKIT_FAVICON_DATABASE_ERROR, WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_NOT_FOUND)) {
    328         g_simple_async_result_take_error(result.get(), error.release());
    329         g_simple_async_result_complete_in_idle(result.get());
     301        g_task_return_error(task.get(), error.release());
    330302        return;
    331303    }
     
    338310    iconDatabaseImpl->synchronousIconURLForPageURL(data->pageURL, iconURLForPageURL);
    339311    if (!iconURLForPageURL.isEmpty() || !iconDatabaseImpl->isUrlImportCompleted()) {
    340         PendingIconRequestVector* icons = getOrCreatePendingIconRequests(database, data->pageURL);
    341         ASSERT(icons);
    342         icons->append(result);
    343         return;
    344     }
    345 
    346     setErrorForAsyncResult(result.get(), WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_UNKNOWN, data->pageURL);
    347     g_simple_async_result_complete_in_idle(result.get());
     312        PendingIconRequestVector* iconRequests = getOrCreatePendingIconRequests(database, data->pageURL);
     313        ASSERT(iconRequests);
     314        iconRequests->append(task);
     315        return;
     316    }
     317
     318    g_task_return_new_error(task.get(), WEBKIT_FAVICON_DATABASE_ERROR, WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_UNKNOWN,
     319        _("Unknown favicon for page %s"), pageURI);
    348320}
    349321
     
    361333cairo_surface_t* webkit_favicon_database_get_favicon_finish(WebKitFaviconDatabase* database, GAsyncResult* result, GError** error)
    362334{
    363     GSimpleAsyncResult* simpleResult = G_SIMPLE_ASYNC_RESULT(result);
    364     g_warn_if_fail(g_simple_async_result_get_source_tag(simpleResult) == webkit_favicon_database_get_favicon);
    365 
    366     if (g_simple_async_result_propagate_error(simpleResult, error))
     335    g_return_val_if_fail(WEBKIT_IS_FAVICON_DATABASE(database), 0);
     336    g_return_val_if_fail(g_task_is_valid(result, database), 0);
     337
     338    GTask* task = G_TASK(result);
     339    if (!g_task_propagate_boolean(task, error))
    367340        return 0;
    368341
    369     GetFaviconSurfaceAsyncData* data = static_cast<GetFaviconSurfaceAsyncData*>(g_simple_async_result_get_op_res_gpointer(simpleResult));
    370     ASSERT(data);
     342    GetFaviconSurfaceAsyncData* data = static_cast<GetFaviconSurfaceAsyncData*>(g_task_get_task_data(task));
    371343    return cairo_surface_reference(data->icon.get());
    372344}
Note: See TracChangeset for help on using the changeset viewer.