Changeset 151725 in webkit
- Timestamp:
- Jun 19, 2013 12:24:36 AM (11 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r151724 r151725 1 2013-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 1 13 2013-06-19 Carlos Garcia Campos <cgarcia@igalia.com> 2 14 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp
r147643 r151725 64 64 static guint signals[LAST_SIGNAL] = { 0, }; 65 65 66 typedef Vector<GRefPtr<G SimpleAsyncResult> > PendingIconRequestVector;66 typedef Vector<GRefPtr<GTask> > PendingIconRequestVector; 67 67 typedef HashMap<String, PendingIconRequestVector*> PendingIconRequestMap; 68 68 … … 168 168 169 169 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); 179 178 } 180 181 g_simple_async_result_complete(result);182 179 } 183 180 deletePendingIconRequests(database, pendingIconRequests, pageURL); … … 239 236 } 240 237 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 263 238 GQuark webkit_favicon_database_error_quark(void) 264 239 { … … 288 263 g_return_if_fail(pageURI); 289 264 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 299 265 WebKitFaviconDatabasePrivate* priv = database->priv; 300 266 WebIconDatabase* iconDatabaseImpl = priv->iconDatabase.get(); 301 267 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)); 312 285 313 286 priv->iconDatabase->retainIconForPageURL(data->pageURL); … … 318 291 data->icon = getIconSurfaceSynchronously(database, data->pageURL, &error.outPtr()); 319 292 if (data->icon) { 320 g_ simple_async_result_complete_in_idle(result.get());293 g_task_return_boolean(task.get(), TRUE); 321 294 return; 322 295 } … … 326 299 327 300 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()); 330 302 return; 331 303 } … … 338 310 iconDatabaseImpl->synchronousIconURLForPageURL(data->pageURL, iconURLForPageURL); 339 311 if (!iconURLForPageURL.isEmpty() || !iconDatabaseImpl->isUrlImportCompleted()) { 340 PendingIconRequestVector* icon s = getOrCreatePendingIconRequests(database, data->pageURL);341 ASSERT(icon s);342 icon s->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); 348 320 } 349 321 … … 361 333 cairo_surface_t* webkit_favicon_database_get_favicon_finish(WebKitFaviconDatabase* database, GAsyncResult* result, GError** error) 362 334 { 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)) 367 340 return 0; 368 341 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)); 371 343 return cairo_surface_reference(data->icon.get()); 372 344 }
Note: See TracChangeset
for help on using the changeset viewer.