Title: [186153] trunk/Source/WebKit2
Revision
186153
Author
[email protected]
Date
2015-06-30 17:46:55 -0700 (Tue, 30 Jun 2015)

Log Message

[EFL] Implement ewk_favicon_database_clear() API.
https://bugs.webkit.org/show_bug.cgi?id=146337

Patch by Hyungwook Lee <[email protected]> on 2015-06-30
Reviewed by Gyuyoung Kim.

We need to provide way to clear favicon data.

* UIProcess/API/efl/ewk_favicon_database.cpp:
(EwkFaviconDatabase::getIconSurfaceSynchronously):
(EwkFaviconDatabase::clearFaviconDatabase):
(EwkFaviconDatabase::iconDataReadyForPageURL):
(ewk_favicon_database_icon_change_callback_del):
(ewk_favicon_database_clear):
* UIProcess/API/efl/ewk_favicon_database.h:
* UIProcess/API/efl/ewk_favicon_database_private.h:
* UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:
(TEST_F):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (186152 => 186153)


--- trunk/Source/WebKit2/ChangeLog	2015-07-01 00:39:22 UTC (rev 186152)
+++ trunk/Source/WebKit2/ChangeLog	2015-07-01 00:46:55 UTC (rev 186153)
@@ -1,3 +1,23 @@
+2015-06-30  Hyungwook Lee  <[email protected]>
+
+        [EFL] Implement ewk_favicon_database_clear() API.
+        https://bugs.webkit.org/show_bug.cgi?id=146337
+
+        Reviewed by Gyuyoung Kim.
+
+        We need to provide way to clear favicon data.
+
+        * UIProcess/API/efl/ewk_favicon_database.cpp:
+        (EwkFaviconDatabase::getIconSurfaceSynchronously):
+        (EwkFaviconDatabase::clearFaviconDatabase):
+        (EwkFaviconDatabase::iconDataReadyForPageURL):
+        (ewk_favicon_database_icon_change_callback_del):
+        (ewk_favicon_database_clear):
+        * UIProcess/API/efl/ewk_favicon_database.h:
+        * UIProcess/API/efl/ewk_favicon_database_private.h:
+        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:
+        (TEST_F):
+
 2015-06-30  Andreas Kling  <[email protected]>
 
         [iOS] Ignore viewport rect changes during zoom bouncing.

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.cpp (186152 => 186153)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.cpp	2015-07-01 00:39:22 UTC (rev 186152)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.cpp	2015-07-01 00:46:55 UTC (rev 186153)
@@ -82,6 +82,11 @@
     return surface.release();
 }
 
+void EwkFaviconDatabase::clearFaviconDatabase()
+{
+    WKIconDatabaseRemoveAllIcons(m_iconDatabase.get());
+}
+
 void EwkFaviconDatabase::iconDataReadyForPageURL(WKIconDatabaseRef, WKURLRef pageURL, const void* clientInfo)
 {
     EwkFaviconDatabase* ewkIconDatabase = const_cast<EwkFaviconDatabase*>(static_cast<const EwkFaviconDatabase*>(clientInfo));
@@ -121,3 +126,10 @@
 
     ewkIconDatabase->unwatchChanges(callback);
 }
+
+void ewk_favicon_database_clear(Ewk_Favicon_Database* ewkIconDatabase)
+{
+    EINA_SAFETY_ON_NULL_RETURN(ewkIconDatabase);
+
+    ewkIconDatabase->clearFaviconDatabase();
+}

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.h (186152 => 186153)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.h	2015-07-01 00:39:22 UTC (rev 186152)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.h	2015-07-01 00:46:55 UTC (rev 186153)
@@ -94,6 +94,13 @@
  */
 EAPI void ewk_favicon_database_icon_change_callback_del(Ewk_Favicon_Database *database, Ewk_Favicon_Database_Icon_Change_Cb callback);
 
+/**
+ * Deletes all favicon data.
+ *
+ * @param database database object to clear all favicon data
+ */
+EAPI void ewk_favicon_database_clear(Ewk_Favicon_Database *database);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_favicon_database_private.h (186152 => 186153)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_favicon_database_private.h	2015-07-01 00:39:22 UTC (rev 186152)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_favicon_database_private.h	2015-07-01 00:46:55 UTC (rev 186153)
@@ -56,6 +56,7 @@
     PassRefPtr<cairo_surface_t> getIconSurfaceSynchronously(const char* pageURL) const;
     void watchChanges(const IconChangeCallbackData& callbackData);
     void unwatchChanges(Ewk_Favicon_Database_Icon_Change_Cb callback);
+    void clearFaviconDatabase();
 
 private:
     static void iconDataReadyForPageURL(WKIconDatabaseRef iconDatabase, WKURLRef pageURL, const void* clientInfo);

Modified: trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp (186152 => 186153)


--- trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp	2015-07-01 00:39:22 UTC (rev 186152)
+++ trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp	2015-07-01 00:46:55 UTC (rev 186153)
@@ -120,3 +120,53 @@
 
     ewk_favicon_database_icon_change_callback_del(database, requestFaviconData);
 }
+
+TEST_F(EWK2FaviconDatabaseTest, ewk_favicon_database_clear)
+{
+    std::unique_ptr<EWK2UnitTestServer> httpServer1 = std::make_unique<EWK2UnitTestServer>();
+    httpServer1->run(serverCallback);
+
+    // Set favicon database path and enable functionality.
+    Ewk_Context* context = ewk_view_context_get(webView());
+    ewk_context_favicon_database_directory_set(context, 0);
+    Ewk_Favicon_Database* database = ewk_context_favicon_database_get(context);
+
+    IconRequestData data1 = { webView(), 0 };
+    ewk_favicon_database_icon_change_callback_add(database, requestFaviconData, &data1);
+
+    ASSERT_TRUE(loadUrlSync(httpServer1->getURLForPath("/").data()));
+
+    while (!data1.icon)
+        ecore_main_loop_iterate();
+
+    ASSERT_TRUE(data1.icon);
+    evas_object_unref(data1.icon);
+
+    ewk_favicon_database_icon_change_callback_del(database, requestFaviconData);
+
+    // Runs another httpServer for loading another favicon.
+    // EWK2UnitTestServer runs on random port that automatically makes different url of the favicon.
+    std::unique_ptr<EWK2UnitTestServer> httpServer2 = std::make_unique<EWK2UnitTestServer>();
+    httpServer2->run(serverCallback);
+
+    IconRequestData data2 = { webView(), 0 };
+    ewk_favicon_database_icon_change_callback_add(database, requestFaviconData, &data2);
+
+    ASSERT_TRUE(loadUrlSync(httpServer2->getURLForPath("/").data()));
+
+    while (!data2.icon)
+        ecore_main_loop_iterate();
+    
+    ASSERT_TRUE(data2.icon);
+    evas_object_unref(data2.icon);
+
+    ewk_favicon_database_icon_change_callback_del(database, requestFaviconData);
+
+    ewk_favicon_database_clear(database);
+
+    data1.icon = ewk_favicon_database_icon_get(database, httpServer1->getURLForPath("/").data(), evas_object_evas_get(webView()));
+    ASSERT_FALSE(data1.icon);
+
+    data2.icon = ewk_favicon_database_icon_get(database, httpServer2->getURLForPath("/").data(), evas_object_evas_get(webView()));
+    ASSERT_FALSE(data2.icon);
+}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to