Browser - Sometimes Reload button does not work after clicking 02/50102/5
authorm.kawonczyk <m.kawonczyk@samsung.com>
Fri, 23 Oct 2015 11:34:56 +0000 (13:34 +0200)
committerMaciej Kawo?czyk <m.kawonczyk@samsung.com>
Mon, 26 Oct 2015 11:49:05 +0000 (04:49 -0700)
Stop button

[Issue]        https://bugs.tizen.org/jira/browse/TT-173
[Problem]      Sometimes Reload button does not work after clicking
               Stop button
[Solution]     Stop button created loadFinished signal, to solve this
               loadStopped was created. In  addition, engine was still
               sending __loadProgress signal, which I blocked after
               Stop button was clicked. As you can not get title and
               snapshot from unloaded page, it was exchanged by blank
               image and url for view and for history manager.
[Verification] Open new page and stop load. Page should not load any
               additional content. Reload and enter button on url
               should force webview to refresh.

Change-Id: I5bdab33254ff8dd0ef5302443b21fd23ed82f661

services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/WebKitEngineService/WebKitEngineService.cpp
services/WebKitEngineService/WebKitEngineService.h
services/WebKitEngineService/WebView.cpp
services/WebPageUI/URIEntry.cpp
services/WebPageUI/URIEntry.h
services/WebPageUI/WebPageUI.cpp
services/WebPageUI/WebPageUI.h

index c0a7a2c..344fe49 100644 (file)
@@ -248,7 +248,6 @@ void SimpleUI::connectUISignals()
     m_webPageUI->forwardPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::forward, m_webEngine.get()));
     m_webPageUI->forwardPage.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
     m_webPageUI->stopLoadingPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::stopLoading, m_webEngine.get()));
-    m_webPageUI->stopLoadingPage.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
     m_webPageUI->reloadPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::reload, m_webEngine.get()));
     m_webPageUI->reloadPage.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
     m_webPageUI->showQuickAccess.connect(boost::bind(&SimpleUI::showQuickAccess, this));
@@ -393,22 +392,19 @@ void SimpleUI::connectModelSignals()
 
     m_webEngine->uriChanged.connect(boost::bind(&SimpleUI::webEngineURLChanged, this, _1));
     m_webEngine->uriChanged.connect(boost::bind(&URIEntry::changeUri, &m_webPageUI->getURIEntry(), _1));
-    m_webEngine->uriChanged.connect(boost::bind(&MoreMenuUI::setURL, m_moreMenuUI.get(), _1));
     m_webEngine->webViewClicked.connect(boost::bind(&URIEntry::clearFocus, &m_webPageUI->getURIEntry()));
     m_webEngine->backwardEnableChanged.connect(boost::bind(&WebPageUI::setBackButtonEnabled, m_webPageUI.get(), _1));
     m_webEngine->forwardEnableChanged.connect(boost::bind(&WebPageUI::setForwardButtonEnabled, m_webPageUI.get(), _1));
     m_webEngine->loadStarted.connect(boost::bind(&SimpleUI::loadStarted, this));
     m_webEngine->loadProgress.connect(boost::bind(&SimpleUI::progressChanged,this,_1));
     m_webEngine->loadFinished.connect(boost::bind(&SimpleUI::loadFinished, this));
-    m_webEngine->loadStop.connect(boost::bind(&SimpleUI::loadFinished, this));
+    m_webEngine->loadStop.connect(boost::bind(&SimpleUI::loadStopped, this));
     m_webEngine->loadError.connect(boost::bind(&SimpleUI::loadError, this));
     m_webEngine->confirmationRequest.connect(boost::bind(&SimpleUI::handleConfirmationRequest, this, _1));
     m_webEngine->tabCreated.connect(boost::bind(&SimpleUI::tabCreated, this));
     m_webEngine->checkIfCreate.connect(boost::bind(&SimpleUI::checkIfCreate, this));
     m_webEngine->tabClosed.connect(boost::bind(&SimpleUI::tabClosed,this,_1));
     m_webEngine->IMEStateChanged.connect(boost::bind(&SimpleUI::setwvIMEStatus, this, _1));
-    m_webEngine->favIconChanged.connect(boost::bind(&MoreMenuUI::setFavIcon, m_moreMenuUI.get(), _1));
-    m_webEngine->titleChanged.connect(boost::bind(&MoreMenuUI::setWebTitle, m_moreMenuUI.get(), _1));
     m_webEngine->titleChanged.connect(boost::bind(&WebPageUI::setPageTitle, m_webPageUI.get(), _1));
 
     m_favoriteService->bookmarkAdded.connect(boost::bind(&SimpleUI::onBookmarkAdded, this,_1));
@@ -679,6 +675,20 @@ void SimpleUI::loadFinished()
     m_webPageUI->loadFinished();
 }
 
+void SimpleUI::loadStopped()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    if (!m_webEngine->isPrivateMode()) {
+        m_historyService->addHistoryItem(std::make_shared<tizen_browser::services::HistoryItem>(
+                                             m_webEngine->getURI(),
+                                             m_webEngine->getURI(),
+                                             std::make_shared<tizen_browser::tools::BrowserImage>()),
+                                         std::make_shared<tizen_browser::tools::BrowserImage>());
+    }
+    m_webPageUI->loadStopped();
+}
+
 void SimpleUI::loadError()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -948,7 +958,7 @@ void SimpleUI::showMoreMenu()
     m_viewManager->pushViewToStack(m_moreMenuUI.get());
     m_moreMenuUI->showCurrentTab();
 
-    if(!m_webPageUI->isHomePageActive()) {
+    if (!m_webPageUI->isHomePageActive()) {
         m_moreMenuUI->setFavIcon(m_webEngine->getFavicon());
         m_moreMenuUI->setWebTitle(m_webEngine->getTitle());
         m_moreMenuUI->setURL(m_webEngine->getURI());
@@ -973,7 +983,7 @@ void SimpleUI::switchToMobileMode()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (!m_webPageUI->isHomePageActive()) {
         m_webEngine->switchToMobileMode();
-    m_viewManager->popStackTo(m_webPageUI.get());
+        m_viewManager->popStackTo(m_webPageUI.get());
         m_webEngine->reload();
     } else {
         m_quickAccess->setDesktopMode(false);
index 35a56da..a4f8486 100644 (file)
@@ -93,6 +93,7 @@ private:
     void stopEnable(bool enable);
     void reloadEnable(bool enable);
 
+    void loadStopped();
     void loadFinished();
     void progressChanged(double progress);
     void loadStarted();
index 53beb2e..0e7a6ef 100644 (file)
@@ -43,6 +43,7 @@ EXPORT_SERVICE(WebKitEngineService, "org.tizen.browser.webkitengineservice")
 WebKitEngineService::WebKitEngineService()
     : m_initialised(false)
     , m_privateMode(false)
+    , m_stopped(false)
     , m_guiParent(nullptr)
     , m_currentTabId(TabId::NONE)
 {
@@ -116,6 +117,7 @@ void WebKitEngineService::setURI(const std::string & uri)
 {
     BROWSER_LOGD("%s:%d %s uri=%s", __FILE__, __LINE__, __func__, uri.c_str());
     M_ASSERT(m_currentWebView);
+    m_stopped = false;
     m_currentWebView->setURI(uri);
 }
 
@@ -137,9 +139,12 @@ bool WebKitEngineService::isLoadError() const
 std::string WebKitEngineService::getTitle() const
 {
     M_ASSERT(m_currentWebView);
-    if(m_currentWebView)
-        return m_currentWebView->getTitle();
-    else
+    if (m_currentWebView) {
+        if (m_stopped)
+            return m_currentWebView->getURI();
+        else
+            return m_currentWebView->getTitle();
+    } else
         return std::string("");
 }
 
@@ -168,24 +173,28 @@ bool WebKitEngineService::isSuspended() const
 void WebKitEngineService::stopLoading(void)
 {
     M_ASSERT(m_currentWebView);
+    m_stopped = true;
     m_currentWebView->stopLoading();
 }
 
 void WebKitEngineService::reload(void)
 {
     M_ASSERT(m_currentWebView);
+    m_stopped = false;
     m_currentWebView->reload();
 }
 
 void WebKitEngineService::back(void)
 {
     M_ASSERT(m_currentWebView);
+    m_stopped = false;
     m_currentWebView->back();
 }
 
 void WebKitEngineService::forward(void)
 {
     M_ASSERT(m_currentWebView);
+    m_stopped = false;
     m_currentWebView->forward();
 }
 
@@ -484,9 +493,12 @@ bool WebKitEngineService::hasFocus() const
 std::shared_ptr<tizen_browser::tools::BrowserImage> WebKitEngineService::getFavicon()
 {
     M_ASSERT(m_currentWebView);
-    if(m_currentWebView)
-        return m_currentWebView->getFavicon();
-    else
+    if (m_currentWebView) {
+        if (m_stopped)
+            return std::make_shared<tizen_browser::tools::BrowserImage>();
+        else
+            return m_currentWebView->getFavicon();
+    } else
         return std::make_shared<tizen_browser::tools::BrowserImage>();
 }
 
index a85bac2..a60af08 100644 (file)
@@ -215,6 +215,7 @@ private:
     bool m_initialised;
     bool m_privateMode;
     void * m_guiParent;
+    bool m_stopped;
 
     // current TabId
     TabId m_currentTabId;
index 9a2a091..b81a334 100644 (file)
@@ -247,6 +247,7 @@ void WebView::resume()
 void WebView::stopLoading(void)
 {
 #if defined(USE_EWEBKIT)
+    m_isLoading = false;
     ewk_view_stop(m_ewkView);
 #endif
     loadStop();
@@ -255,6 +256,7 @@ void WebView::stopLoading(void)
 void WebView::reload(void)
 {
 #if defined(USE_EWEBKIT)
+    m_isLoading = true;
     if(m_loadError)
     {
         m_loadError = false;
@@ -596,6 +598,8 @@ void WebView::__loadProgress(void * data, Evas_Object * /* obj */, void * event_
     BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
 
     WebView * self = reinterpret_cast<WebView *>(data);
+    if (!self->isLoading())
+        return;
     self->m_loadProgress = *(double *)event_info;
     self->loadProgress(self->m_loadProgress);
 }
@@ -659,7 +663,7 @@ void WebView::__faviconChanged(void* data, Evas_Object*, void*)
     {
         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) {
+        if (favicon && self->isLoading()) {
             BROWSER_LOGD("[%s:%d] Favicon received", __PRETTY_FUNCTION__, __LINE__);
             self->faviconImage = EflTools::getBrowserImage(favicon);
             evas_object_unref(favicon);
index 9200abb..7be0408 100644 (file)
@@ -151,6 +151,13 @@ void URIEntry::setPageTitle(const std::string& title)
     elm_entry_entry_set(m_entry, elm_entry_utf8_to_markup(m_pageTitle.c_str()));
 }
 
+void URIEntry::setPageTitleFromURI()
+{
+    BROWSER_LOGD("%s", __func__);
+    m_pageTitle = m_URI;
+    elm_entry_entry_set(m_entry, elm_entry_utf8_to_markup(m_pageTitle.c_str()));
+}
+
 void URIEntry::setURI(const std::string& uri)
 {
     BROWSER_LOGD("%s, URI: %s", __func__, uri.c_str());
index c23a0c4..01a20ab 100644 (file)
@@ -55,6 +55,7 @@ public:
     void setSearchIcon();
     void setDocIcon();
     void setPageTitle(const std::string& title);
+    void setPageTitleFromURI();
     void setURI(const std::string& uri);
     void showPageTitle();
     IconType getCurrentIconTyep();
index f617925..0772868 100644 (file)
@@ -122,6 +122,14 @@ void WebPageUI::loadFinished()
     m_URIEntry->showPageTitle();
 }
 
+void WebPageUI::loadStopped()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_leftButtonBar->setActionForButton("refresh_stop_button", m_reload);
+    m_URIEntry->setPageTitleFromURI();
+    m_URIEntry->showPageTitle();
+}
+
 bool WebPageUI::isErrorPageActive()
 {
     return elm_object_part_content_get(m_mainLayout, "web_view") == m_errorLayout;
index a3e04f4..f9c387a 100644 (file)
@@ -38,6 +38,7 @@ public:
     virtual Evas_Object* getContent();
     virtual void showUI();
     virtual void hideUI();
+    void loadStopped();
     void loadStarted();
     void progressChanged(double progress);
     void loadFinished();