Bug TT-88 Fixed asynchronous favicon loading 86/45386/4
authort.dakowicz <t.dakowicz@samsung.com>
Wed, 5 Aug 2015 11:47:59 +0000 (13:47 +0200)
committert.dakowicz <t.dakowicz@samsung.com>
Wed, 5 Aug 2015 13:27:44 +0000 (15:27 +0200)
[Issue] https://bugs.tizen.org/jira/browse/TT-88
[Problem] Favicon wasn't loaded if an image was send
  asynchronously
[Solution] Used "icon,received" callback instead of "favicon,change"
           which is not implemented
[Verify] Check if favicon is always loaded

Change-Id: If56b9b4d80bc4a94abd52b0830aac42dfa88216f

services/SimpleURI/SimpleURI.cpp
services/WebKitEngineService/WebView.cpp
services/WebKitEngineService/WebView.h

index d92c64e..cc07c13 100644 (file)
@@ -16,7 +16,6 @@
 
 #include <Elementary.h>
 #include <Evas.h>
-
 #include "SimpleURI.h"
 #include "ServiceManager.h"
 #include "BrowserLogger.h"
@@ -29,7 +28,6 @@ namespace base_ui{
 
 EXPORT_SERVICE(SimpleURI, "org.tizen.browser.simpleuri")
 
-
 const std::string keynameSelect = "Select";
 const std::string keynameClear = "Clear";
 const std::string keynameKP_Enter = "KP_Enter";
@@ -47,11 +45,11 @@ SimpleURI::SimpleURI()
     elm_theme_extension_add(NULL, edjFilePath.c_str());
 }
 
-SimpleURI::~SimpleURI() {
+SimpleURI::~SimpleURI() 
+{}
 
-}
-
-Evas_Object * SimpleURI::getContent(Evas_Object *main_layout) {
+Evas_Object * SimpleURI::getContent(Evas_Object *main_layout) 
+{
     if(!m_entry_layout) {
         m_entry_layout = elm_layout_add(main_layout);
         std::string edjFilePath = EDJE_DIR;
@@ -87,7 +85,6 @@ Evas_Object * SimpleURI::getContent(Evas_Object *main_layout) {
         m_entryBtn = elm_button_add(m_entry_layout);
 
         evas_object_event_callback_add(m_entryBtn, EVAS_CALLBACK_MOUSE_IN, __cb_mouse_in, this);
-        //evas_object_event_callback_add(m_entryBtn, EVAS_CALLBACK_MOUSE_OUT, __cb_mouse_out, this);
         evas_object_smart_callback_add(m_entryBtn, "focused", SimpleURI::focusedBtn, this);
         evas_object_smart_callback_add(m_entryBtn, "unfocused", SimpleURI::unfocusedBtn, this);
 
@@ -118,6 +115,7 @@ void SimpleURI::setFavIcon(std::shared_ptr< tizen_browser::tools::BrowserImage >
         setDocIcon();
     }
 }
+
 void SimpleURI::setCurrentFavIcon()
 {
     m_currentIconType = IconTypeFav;
@@ -129,6 +127,7 @@ void SimpleURI::setSearchIcon()
     m_currentIconType = IconTypeSearch;
     elm_object_signal_emit(m_entry_layout, "set_search_icon", "model");
 }
+
 void SimpleURI::setDocIcon()
 {
     m_currentIconType = IconTypeDoc;
@@ -177,10 +176,12 @@ void SimpleURI::aborted(void *data, Evas_Object * /* obj */, void */*event_info*
     SimpleURI *self = reinterpret_cast<SimpleURI*>(data);
     self->editingCanceled();
 }
+
 void SimpleURI::preeditChange(void * /* data */, Evas_Object * /* obj */, void */*event_info*/)
 {
     BROWSER_LOGD("%s", __func__);
 }
+
 void SimpleURI::changedUser(void *data, Evas_Object * /* obj */, void */*event_info*/)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -215,8 +216,6 @@ void SimpleURI::fixed_entry_key_down_handler(void* data, Evas* /*e*/, Evas_Objec
 {
     BROWSER_LOGD("%s", __func__);
     Evas_Event_Key_Down *ev = static_cast<Evas_Event_Key_Down *>(event_info);
-    //BROWSER_LOGD("[%s:%d]: keyname: \"%s\"", __PRETTY_FUNCTION__, __LINE__, ev->keyname);
-
     if (!data || !ev || !ev->keyname)
         return;
     SimpleURI * self = static_cast<SimpleURI*>(data);
@@ -225,14 +224,12 @@ void SimpleURI::fixed_entry_key_down_handler(void* data, Evas* /*e*/, Evas_Objec
         elm_entry_entry_set(self->m_entry, "");
         return;
     }
-
     if (   keynameSelect == ev->keyname
         || keynameReturn == ev->keyname
         || keynameKP_Enter == ev->keyname) {
         self->editingCompleted();
         return;
     }
-
     if( keynameEsc == ev->keyname){
         self->editingCanceled();
         elm_object_focus_set(self->m_entryBtn, EINA_TRUE);
@@ -257,22 +254,20 @@ std::string SimpleURI::rewriteURI(const std::string& url)
     BROWSER_LOGD("%s: %s", __PRETTY_FUNCTION__, url.c_str());
     boost::regex urlRegex(R"(^(https?|ftp)://[^\s/$.?#].[^\s]*$)");
 
-    if(!url.empty()) {
-        if(url != "about:blank" && url != "about:home") {
-            if(boost::regex_match(url, urlRegex)) {
-                return url;
-            } else if(boost::regex_match( std::string("http://") + url, urlRegex) &&  url.find(".") != std::string::npos) {
-                return std::string("http://") + url;
-            } else {
-                std::string searchString("http://www.google.com/#q=");
-                searchString += url;
-                std::replace( searchString.begin(), searchString.end(), ' ', '+');
-                BROWSER_LOGD("[%s:%d] Search string: %s", __PRETTY_FUNCTION__, __LINE__, searchString.c_str());
-                return searchString;
-            }
+    if(!url.empty() && url != "about:blank" && url != "about:home")
+        if(boost::regex_match(url, urlRegex)) 
+            return url;
+        else if(boost::regex_match( std::string("http://") + url, urlRegex) &&  url.find(".") != std::string::npos) 
+            return std::string("http://") + url;
+        else 
+        {
+            std::string searchString("http://www.google.com/search?q=");
+            searchString += url;
+            std::replace( searchString.begin(), searchString.end(), ' ', '+');
+            BROWSER_LOGD("[%s:%d] Search string: %s", __PRETTY_FUNCTION__, __LINE__, searchString.c_str());
+            return searchString;
         }
-    }
-    BROWSER_LOGD("%s", __PRETTY_FUNCTION__);
+
     return url;
 }
 
@@ -288,9 +283,6 @@ void SimpleURI::editingCanceled()
     setCurrentFavIcon();
 }
 
-
-
-
 void SimpleURI::AddAction(sharedAction action)
 {
     m_actions.push_back(action);
@@ -347,4 +339,4 @@ void SimpleURI::setDisabled(bool disabled)
 }
 
 }
-}
+}
\ No newline at end of file
index 75ea343..eede78c 100644 (file)
@@ -130,8 +130,6 @@ void WebView::init(Evas_Object * opener)
 
 ///\note Odroid modification - not exists in WebKit API
 //     ewk_cookie_manager_widget_cookie_directory_set(ewk_context_cookie_manager_get(context), webkit_path.c_str());
-
-    ewk_favicon_database_icon_change_callback_add(ewk_context_favicon_database_get(context), __faviconChanged, this);
 #endif
     setupEwkSettings();
     registerCallbacks();
@@ -163,7 +161,7 @@ void WebView::registerCallbacks()
     evas_object_smart_callback_add(m_ewkView, "request,certificate,confirm", __requestCertificationConfirm, this);
 
     evas_object_event_callback_add(m_ewkView, EVAS_CALLBACK_MOUSE_DOWN, __setFocusToEwkView, this);
-    evas_object_smart_callback_add(m_ewkView, "favicon,changed", onFaviconChaged, this);
+    evas_object_smart_callback_add(m_ewkView, "icon,received", __faviconChanged, this);
 
     evas_object_smart_callback_add(m_ewkView, "editorclient,ime,closed", __IMEClosed, this);
     evas_object_smart_callback_add(m_ewkView, "editorclient,ime,opened", __IMEOpened, this);
@@ -193,7 +191,7 @@ void WebView::unregisterCallbacks()
     evas_object_smart_callback_del_full(m_ewkView, "request,certificate,confirm", __requestCertificationConfirm, this);
 
     evas_object_event_callback_del(m_ewkView, EVAS_CALLBACK_MOUSE_DOWN, __setFocusToEwkView);
-    evas_object_smart_callback_del_full(m_ewkView, "favicon,changed", onFaviconChaged, this);
+    evas_object_smart_callback_del_full(m_ewkView, "icon,received", __faviconChanged, this);
 
     evas_object_smart_callback_del_full(m_ewkView, "editorclient,ime,closed", __IMEClosed, this);
     evas_object_smart_callback_del_full(m_ewkView, "editorclient,ime,opened", __IMEOpened, this);
@@ -744,44 +742,18 @@ void WebView::__OnNewWindowRequest(void *data, Evas_Object*, void* out)
   *static_cast<Evas_Object**>(out) = tab_ewk_view;
 }
 
-
-#if PLATFORM(TIZEN)
-void WebView::__faviconChanged(const char * uri, void * data)
-#else
-void WebView::__faviconChanged(Ewk_Favicon_Database * database, const char * uri, void * data)
-#endif
-{
-    WebView * self = reinterpret_cast<WebView *>(data);
-    BROWSER_LOGD("[%s:%d] \n\turi:%s", __PRETTY_FUNCTION__, __LINE__, uri);
-
-#if PLATFORM(TIZEN)
-    Ewk_Favicon_Database * database = ewk_context_favicon_database_get(ewk_view_context_get(self->m_ewkView));
-#endif
-
-    Evas_Object *favicon = ewk_favicon_database_icon_get(database, uri, evas_object_evas_get(self->m_parent));
-    BROWSER_LOGD("Favicon: %p",favicon);
-    if (favicon) {
-        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-        self->faviconImage = tizen_browser::tools::EflTools::getBrowserImage(favicon);
-        evas_object_unref(favicon);
-        BROWSER_LOGD("[%s:%d] Favicon loaded, emiting favIconChanged(...)", __PRETTY_FUNCTION__, __LINE__);
-        self->favIconChanged(self->faviconImage);
-    }
-}
-
-void WebView::onFaviconChaged(void* data, Evas_Object*, void*)
+void WebView::__faviconChanged(void* data, Evas_Object*, void*)
 {
-    WebView* self = reinterpret_cast<WebView*>(data);
-//#if PLATFORM(TIZEN)
-//    Evas_Object * favicon = ewk_view_favicon_get(self->m_ewkView);
-//#else
-    Ewk_Favicon_Database * database = ewk_context_favicon_database_get(ewk_view_context_get(self->m_ewkView));
-    Evas_Object * favicon = ewk_favicon_database_icon_get(database, ewk_view_url_get(self->m_ewkView), evas_object_evas_get(self->m_parent));
-//#endif
-    BROWSER_LOGD("[%s:%d] &favicon: %x ", __PRETTY_FUNCTION__, __LINE__, favicon);
-    if (favicon) {
-        self->favIconChanged(tizen_browser::tools::EflTools::getBrowserImage(favicon));
-        evas_object_unref(favicon);
+    if(data)
+    {
+        WebView * self = static_cast<WebView *>(data);
+        Evas_Object * favicon = ewk_context_icon_database_icon_object_add(ewk_view_context_get(self->m_ewkView), ewk_view_url_get(self->m_ewkView),evas_object_evas_get(self->m_ewkView));
+        if (favicon) {
+            BROWSER_LOGD("[%s:%d] Favicon received", __PRETTY_FUNCTION__, __LINE__);
+            self->faviconImage = tizen_browser::tools::EflTools::getBrowserImage(favicon);
+            evas_object_unref(favicon);
+            self->favIconChanged(self->faviconImage);
+        }
     }
 }
 
index ce6233d..13257a4 100644 (file)
@@ -168,16 +168,7 @@ private:
        static void __OnNewWindowRequest(void *data, Evas_Object*, void* out);
 
     // Favicon - from database
-#if defined(USE_EWEBKIT)
-#if PLATFORM(TIZEN)
-    static void __faviconChanged(/* Ewk_Favicon_Database * database, */ const char * uri, void * data);
-#else
-    static void __faviconChanged(Ewk_Favicon_Database * database, const char * uri, void * data);
-#endif
-#endif
-
-    //from webkit ewk_view
-    static void onFaviconChaged(void * data, Evas_Object *obj, void *event_info);
+    static void __faviconChanged(void* data, Evas_Object*, void*);
 
     static void __IMEClosed(void * data, Evas_Object *obj, void *event_info);
     static void __IMEOpened(void * data, Evas_Object *obj, void *event_info);