Prevent from connecting multiple identical signals in WebEngine 53/91653/4
authorMaciej Skrzypkowski <m.skrzypkows@samsung.com>
Tue, 11 Oct 2016 08:57:24 +0000 (10:57 +0200)
committerMaciej Skrzypkowski <m.skrzypkows@samsung.com>
Tue, 11 Oct 2016 12:32:29 +0000 (05:32 -0700)
[Issue]    N/A
[Problem]  There was multiple connection of the same signals
           which caused calling many times callbacks like
           loadFinished.
[Solution] Removed connecting signals again in SimpleUI,
           added check in WebEngine. Additional refactoring
           in SimpleUI to simplify opening URLs and
           closing views.
[Verify]   Open web page, check if loadFinish, loadStop, reload,
           loadStarted singals are called once during page load.
           Open diffrent views and close them, browser should
           work fine.

Change-Id: I744616432a8c225a5fe96f98de687a6322e9b34f

core/AbstractWebEngine/AbstractWebEngine.h
services/BookmarkManagerUI/BookmarkManagerUI.cpp
services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/WebEngineService/WebEngineService.cpp
services/WebEngineService/WebEngineService.h
services/WebEngineService/WebView.cpp
services/WebEngineService/WebView.h
services/WebPageUI/URIEntry.cpp

index 732f73346f1056e3908b6907b0ad247731d672de..41682e7c8243627f43e5f2a0fa32c3ad68ea7a7c 100644 (file)
@@ -304,16 +304,6 @@ public:
     */
     virtual void clearFormData() = 0;
 
-    /**
-     * @brief Disconnect signals from current webview.
-     */
-    virtual void disconnectCurrentWebViewSignals() = 0;
-
-    /**
-     * @brief Connect signals to current web view.
-     */
-    virtual void connectCurrentWebViewSignals() = 0;
-
     /**
      * @brief Search string on searchOnWebsite
      *
index d6b11e38aef5a579ce0307cc874ef9732255e16f..e0e4bad1439ca3fc37edf75078a66e5fb6f0c471 100644 (file)
@@ -79,7 +79,6 @@ void BookmarkManagerUI::hideUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     M_ASSERT(m_naviframe->getLayout());
-    onBackPressed();
     m_naviframe->hide();
 }
 
index 7a6a22270e99f7fa8f22dd18f94efc2ec7bf4d33..312806711d5d4259b4ad54d8244332c9c6464a7f 100755 (executable)
@@ -373,7 +373,7 @@ void SimpleUI::connectWebPageSignals()
     m_webPageUI->getQuickAccessEditUI()->deleteSelectedMostVisitedItems.connect(
         boost::bind(&QuickAccess::deleteSelectedMostVisitedItems, m_quickAccess.get()));
     m_webPageUI->getQuickAccessEditUI()->closeUI.connect(
-        boost::bind(&SimpleUI::closeTopView, this));
+        boost::bind(&SimpleUI::popTheStack, this));
     m_webPageUI->focusWebView.connect(boost::bind(&basic_webengine::AbstractWebEngine::setFocus, m_webEngine.get()));
     m_webPageUI->unfocusWebView.connect(boost::bind(&basic_webengine::AbstractWebEngine::clearFocus, m_webEngine.get()));
     m_webPageUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
@@ -415,7 +415,7 @@ void SimpleUI::connectWebPageSignals()
 void SimpleUI::connectQuickAccessSignals()
 {
     M_ASSERT(m_quickAccess.get());
-    m_quickAccess->openURL.connect(boost::bind(&SimpleUI::onOpenURL, this, _1, _2));
+    m_quickAccess->openURL.connect(boost::bind(&SimpleUI::openURL, this, _1, _2));
     m_quickAccess->getMostVisitedItems.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this));
     m_quickAccess->getQuickAccessItems.connect(boost::bind(&SimpleUI::onQuickAccessClicked, this));
     m_quickAccess->switchViewToWebPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
@@ -431,7 +431,7 @@ void SimpleUI::connectQuickAccessSignals()
 void SimpleUI::connectTabsSignals()
 {
     M_ASSERT(m_tabUI.get());
-    m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::closeTabUI, this));
+    m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
     m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this));
     m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1));
     m_tabUI->closeTabsClicked.connect(boost::bind(&SimpleUI::closeTabsClicked, this,_1));
@@ -451,7 +451,7 @@ void SimpleUI::connectTabsSignals()
         &m_storageService->getSettingsStorage(), _1, ""));
     m_tabUI->showPasswordUI.connect(boost::bind(&SimpleUI::showPasswordUI, this));
     m_tabUI->showNoPasswordWarning.connect(boost::bind(&SimpleUI::onFirstSecretMode, this));
-    m_tabUI->getPasswordUI().closeUI.connect(boost::bind(&SimpleUI::closeTopView, this));
+    m_tabUI->getPasswordUI().closeUI.connect(boost::bind(&SimpleUI::popTheStack, this));
     m_tabUI->getPasswordUI().setDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsString,
         &m_storageService->getSettingsStorage(), _1, _2));
     m_tabUI->getPasswordUI().setDBBoolParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsBool,
@@ -468,15 +468,15 @@ void SimpleUI::connectHistorySignals()
     M_ASSERT(m_historyUI.get());
     m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryAllClicked, this));
     m_historyUI->signalDeleteHistoryItems.connect(boost::bind(&SimpleUI::onDeleteHistoryItems, this, _1));
-    m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this));
-    m_historyUI->signalHistoryItemClicked.connect(boost::bind(&SimpleUI::onOpenURL, this, _1, _2, false));
+    m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
+    m_historyUI->signalHistoryItemClicked.connect(boost::bind(&SimpleUI::openURL, this, _1, _2, false));
     m_historyUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
 }
 
 void SimpleUI::connectBookmarkFlowSignals()
 {
     M_ASSERT(m_bookmarkFlowUI.get());
-    m_bookmarkFlowUI->closeBookmarkFlowClicked.connect(boost::bind(&SimpleUI::closeBookmarkFlowUI, this));
+    m_bookmarkFlowUI->closeBookmarkFlowClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
     m_bookmarkFlowUI->saveBookmark.connect(boost::bind(&SimpleUI::addBookmark, this, _1));
     m_bookmarkFlowUI->editBookmark.connect(boost::bind(&SimpleUI::editBookmark, this, _1));
     m_bookmarkFlowUI->showSelectFolderUI.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
@@ -486,7 +486,7 @@ void SimpleUI::connectBookmarkFlowSignals()
 void SimpleUI::connectBookmarkManagerSignals()
 {
     M_ASSERT(m_bookmarkManagerUI.get());
-    m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerUI, this));
+    m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
     m_bookmarkManagerUI->folderSelected.connect(boost::bind(&BookmarkFlowUI::setFolder, m_bookmarkFlowUI.get(), _1));
     m_bookmarkManagerUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
     m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1));
@@ -514,7 +514,7 @@ void SimpleUI::connectSettingsSignals()
     // SETTINGS OVERALL
     m_settingsManager->connectOpenSignals();
     SPSC.closeSettingsUIClicked.connect(
-        boost::bind(&SimpleUI::closeSettingsUI, this));
+        boost::bind(&SimpleUI::popTheStack, this));
     SPSC.showSettings.connect(
         boost::bind(&SimpleUI::showSettings, this,_1));
     SPSC.getWebEngineSettingsParam.connect(
@@ -716,6 +716,7 @@ void SimpleUI::pushViewToStack(const sAUI& view)
 
 void SimpleUI::popTheStack()
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_viewManager.popTheStack();
     enableManualRotation(isManualRotation(m_viewManager.topOfStack()));
 }
@@ -743,7 +744,6 @@ void SimpleUI::switchViewToWebPage()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (m_webEngine->isSuspended())
         m_webEngine->resume();
-    m_webEngine->connectCurrentWebViewSignals();
     m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), m_webEngine->getURI(), m_webEngine->isLoading());
 }
 
@@ -751,7 +751,7 @@ void SimpleUI::switchToTab(const basic_webengine::TabId& tabId)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_webEngine->switchToTab(tabId);
-    switchViewToWebPage();
+    m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), m_webEngine->getURI(), m_webEngine->isLoading());
 }
 
 void SimpleUI::showQuickAccess()
@@ -765,7 +765,7 @@ void SimpleUI::switchViewToQuickAccess()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
     m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
-    m_webEngine->disconnectCurrentWebViewSignals();
+    m_webEngine->suspend();
     popStackTo(m_webPageUI);
 }
 
@@ -821,19 +821,19 @@ bool SimpleUI::checkQuickAccess()
     return checkBookmark();
 }
 
-void SimpleUI::onOpenURL(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode)
+void SimpleUI::openURL(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode)
 {
-    onOpenURL(historyItem->getUrl(), historyItem->getTitle(), desktopMode);
+    openURL(historyItem->getUrl(), historyItem->getTitle(), desktopMode);
 }
 
-void SimpleUI::onOpenURL(const std::string& url)
+void SimpleUI::openURL(const std::string& url)
 {
     // TODO: desktop mode should be checked in WebView or QuickAcces
     // (depends on which view is active)
-    onOpenURL(url, "", m_quickAccess->isDesktopMode());
+    openURL(url, "", m_quickAccess->isDesktopMode());
 }
 
-void SimpleUI::onOpenURL(const std::string& url, const std::string& title, bool desktopMode)
+void SimpleUI::openURL(const std::string& url, const std::string& title, bool desktopMode)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (m_webPageUI) {
@@ -883,18 +883,7 @@ void SimpleUI::onBookmarkClicked(std::shared_ptr<tizen_browser::services::Bookma
     if (bookmarkItem->is_folder())
         m_bookmarkManagerUI->addBookmarkItems(bookmarkItem, m_favoriteService->getAllBookmarkItems(bookmarkItem->getId()));
     else {
-        std::string bookmarkAddress = bookmarkItem->getAddress();
-
-        if (tabsCount() == 0)
-            openNewTab(bookmarkAddress);
-        else {
-            std::string bookmarkTitle = bookmarkItem->getTitle();
-            m_webEngine->setURI(bookmarkAddress);
-            m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), bookmarkAddress, m_webEngine->isLoading());
-            m_webPageUI->getURIEntry().clearFocus();
-            closeBookmarkManagerUI();
-        }
-        popStackTo(m_webPageUI);
+        openURL(bookmarkItem->getAddress());
     }
 }
 
@@ -1177,8 +1166,6 @@ void SimpleUI::onBackPressed()
         } else {
             m_webEngine->backButtonClicked();
         }
-    } else if (m_viewManager.topOfStack() == m_settingsUI) {
-        closeSettingsUI();
     } else {
         popTheStack();
     }
@@ -1375,28 +1362,12 @@ void SimpleUI::loadFinished()
 void SimpleUI::filterURL(const std::string& url)
 {
     BROWSER_LOGD("[%s:%d] url=%s", __PRETTY_FUNCTION__, __LINE__, url.c_str());
-    //check for special urls (like:  'about:home')
-    //if there will be more addresses may be we should
-    //create some kind of std::man<std::string url, bool *(doSomethingWithUrl)()>
-    //and then just map[url]() ? m_webEngine->setURI(url) : /*do nothing*/;;
-    if(/*url.empty() ||*/ url == HomePageURL){
-        m_webPageUI->getURIEntry().changeUri("");
-    } else if (!url.empty()){
-
-    //check if url is in favorites
-
-    //check if url is in blocked
-
-    //no filtering
 
-        if (m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
-            openNewTab(url, "", boost::none, false, basic_webengine::TabOrigin::QUICKACCESS);
-        else
-            m_webEngine->setURI(url);
-
-        if (m_webEngine->isSecretMode() ||
-                m_webPageUI->stateEquals(WPUState::MAIN_ERROR_PAGE))
-            switchViewToWebPage();
+    if (url == HomePageURL) {
+        m_webPageUI->getURIEntry().changeUri("");
+        switchViewToQuickAccess();
+    } else if (!url.empty()) {
+        openURL(url);
     }
     m_webPageUI->getURIEntry().clearFocus();
 }
@@ -1453,13 +1424,6 @@ void SimpleUI::showTabUI()
         onGenerateThumb(m_webEngine->currentTabId());
 }
 
-void SimpleUI::closeTabUI()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (m_viewManager.topOfStack() == m_tabUI)
-        popTheStack();
-}
-
 void SimpleUI::refetchTabUIData() {
     auto tabsContents = m_webEngine->getTabContents();
     m_tabService->fillThumbs(tabsContents);
@@ -1610,13 +1574,6 @@ Evas_Object* SimpleUI::showHistoryUI(Evas_Object* parent, SharedNaviframeWrapper
     return ret;
 }
 
-void SimpleUI::closeHistoryUI()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (m_viewManager.topOfStack() == m_historyUI)
-        popTheStack();
-}
-
 void SimpleUI::showSettings(unsigned s)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -1625,12 +1582,6 @@ void SimpleUI::showSettings(unsigned s)
     pushViewToStack(m_settingsUI);
 }
 
-void SimpleUI::closeSettingsUI()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    popTheStack();
-}
-
 void SimpleUI::onDefSearchEngineClicked()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -1807,13 +1758,6 @@ void SimpleUI::showBookmarkFlowUI()
     pushViewToStack(m_bookmarkFlowUI);
 }
 
-void SimpleUI::closeBookmarkFlowUI()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (m_viewManager.topOfStack() == m_bookmarkFlowUI)
-        popTheStack();
-}
-
 void SimpleUI::showBookmarkManagerUI(std::shared_ptr<services::BookmarkItem> parent,
     BookmarkManagerState state)
 {
@@ -1860,13 +1804,6 @@ void SimpleUI::redirectedWebPage(const std::string& oldUrl, const std::string& n
     m_historyService->clearURLHistory(oldUrl);
 }
 
-void SimpleUI::closeBookmarkManagerUI()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (m_viewManager.topOfStack() == m_bookmarkManagerUI)
-    popTheStack();
-}
-
 void SimpleUI::settingsDeleteSelectedData(const std::map<int, bool>& options)
 {
     BROWSER_LOGD("[%s]: Deleting selected data", __func__);
@@ -1975,7 +1912,6 @@ void SimpleUI::updateView()
 void SimpleUI::changeEngineState()
 {
     m_webEngine->changeState();
-    m_webEngine->disconnectCurrentWebViewSignals();
     m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
     updateView();
 }
@@ -2010,12 +1946,6 @@ void SimpleUI::showPasswordUI()
     pushViewToStack(sAUI(&m_tabUI->getPasswordUI()));
 }
 
-void SimpleUI::closeTopView()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    popTheStack();
-}
-
 void SimpleUI::onFirstSecretMode()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -2088,7 +2018,7 @@ void SimpleUI::settingsOverrideUseragent(const std::string& userAgent)
             NotificationPopup::createNotificationPopup(m_viewManager.getContent());
         popup->show("Open a webpage to perform this operation.");
         popup->dismiss();
-        closeSettingsUI();
+        popTheStack();
         return;
     }
 
@@ -2120,7 +2050,7 @@ void SimpleUI::onOverrideUseragentButton(const std::string& newUA)
     m_webEngine->setUserAgent(newUA);
     popup->show("UserAgent updated..");
     popup->dismiss();
-    closeSettingsUI();
+    popTheStack();
 }
 
 }
index e0ef89f0322b59a902f0b96ec2a77edc84de3ed7..74c3502745b0ca04a645c19b593226932014cda4 100644 (file)
@@ -163,15 +163,15 @@ private:
     static void onUrlIMEClosed(void* data, Evas_Object*, void*);
 
     void onHistoryRemoved(const std::string& uri);
-    void onOpenURL(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode);
+    void openURL(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode);
     /**
      * @brief Handles 'openUrlInNewTab' signals. Uses QuickAccess to indicate
      * desktop/mobile mode.
      * TODO: desktop mode should be checked in WebView or QuickAcces (depends
      * on which view is active)
      */
-    void onOpenURL(const std::string& url);
-    void onOpenURL(const std::string& url, const std::string& title, bool desktopMode);
+    void openURL(const std::string& url);
+    void openURL(const std::string& url, const std::string& title, bool desktopMode);
     void onClearHistoryAllClicked();
     void onDeleteHistoryItems(int id);
 
@@ -251,7 +251,6 @@ private:
     void scrollView(const int& dx, const int& dy);
 
     void showTabUI();
-    void closeTabUI();
     void refetchTabUIData();
     void switchToMobileMode();
     void switchToDesktopMode();
@@ -259,9 +258,7 @@ private:
     void deleteMostVisited();
     void addQuickAccess();
     Evas_Object* showHistoryUI(Evas_Object* parent, SharedNaviframeWrapper naviframe, bool removeMode = false);
-    void closeHistoryUI();
     void showSettings(unsigned);
-    void closeSettingsUI();
     void onDefSearchEngineClicked();
     void onSaveContentToClicked();
     std::string requestSettingsCurrentPage();
@@ -269,7 +266,6 @@ private:
 
     void onEditOtherPagePopupClicked(const std::string& newName);
     void showBookmarkFlowUI();
-    void closeBookmarkFlowUI();
     void showFindOnPageUI(const std::string& str);
     void showCertificatePopup();
     void showCertificatePopup(const std::string& host, const std::string& pem, services::CertificateContents::HOST_TYPE type);
@@ -305,7 +301,6 @@ private:
 
     static void __orientation_changed(void* data, Evas_Object*, void*);
     Evas_Object* getMainWindow();
-    void closeBookmarkManagerUI();
     void showBookmarkManagerUI(std::shared_ptr<services::BookmarkItem> parent,
                                BookmarkManagerState state);
     void showHomePage();
@@ -332,7 +327,6 @@ private:
 
     void searchWebPage(std::string &text, int flags);
     void showPasswordUI();
-    void closeTopView();
     void onFirstSecretMode();
 
     std::string edjePath(const std::string &);
index 9f4d9eaef90c6253692e0d6ae0280e185c5683a2..582781e4dc8a042de392b9607c2df968ba3b30ae 100755 (executable)
@@ -39,10 +39,10 @@ WebEngineService::WebEngineService()
     , m_guiParent(nullptr)
     , m_stopped(false)
     , m_webViewCacheInitialized(false)
-    , m_currentTabId(TabId::NONE)
     , m_currentWebView(nullptr)
     , m_stateStruct(&m_normalStateStruct)
     , m_tabIdCreated(-1)
+    , m_signalsConnected(false)
     , m_downloadControl(nullptr)
 {
     m_stateStruct->mostRecentTab.clear();
@@ -128,7 +128,14 @@ void WebEngineService::preinitializeWebViewCache()
 
 void WebEngineService::connectSignals(std::shared_ptr<WebView> webView)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__)
     M_ASSERT(webView);
+
+    if (m_signalsConnected) {
+        BROWSER_LOGW("[%s:%d] Signals already connected!", __PRETTY_FUNCTION__, __LINE__);
+        return;
+    }
+
     webView->favIconChanged.connect(boost::bind(&WebEngineService::_favIconChanged, this, _1));
     webView->uriChanged.connect(boost::bind(&WebEngineService::_uriChanged, this, _1));
     webView->loadFinished.connect(boost::bind(&WebEngineService::_loadFinished, this));
@@ -152,6 +159,7 @@ void WebEngineService::connectSignals(std::shared_ptr<WebView> webView)
     webView->rotatePrepared.connect([this](){rotatePrepared();});
     webView->unsecureConnection.connect(boost::bind(&WebEngineService::_unsecureConnection, this));
     webView->findOnPage.connect(boost::bind(&WebEngineService::_findOnPage, this, _1));
+    m_signalsConnected = true;
 }
 
 void WebEngineService::disconnectSignals(std::shared_ptr<WebView> webView)
@@ -178,20 +186,7 @@ void WebEngineService::disconnectSignals(std::shared_ptr<WebView> webView)
     webView->rotatePrepared.disconnect_all_slots();
     webView->unsecureConnection.disconnect(boost::bind(&WebEngineService::_unsecureConnection, this));
     webView->findOnPage.disconnect(boost::bind(&WebEngineService::_findOnPage, this, _1));
-}
-
-void WebEngineService::disconnectCurrentWebViewSignals()
-{
-    if (m_currentWebView.get())
-        disconnectSignals(m_currentWebView);
-}
-
-void WebEngineService::connectCurrentWebViewSignals()
-{
-    if (m_currentWebView)
-        connectSignals(m_currentWebView);
-    else
-        BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
+    m_signalsConnected = false;
 }
 
 int WebEngineService::createTabId()
@@ -304,6 +299,7 @@ void WebEngineService::suspend()
         BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
         return;
     }
+    disconnectSignals(m_currentWebView);
     m_currentWebView->suspend();
     unregisterHWKeyCallback();
 }
@@ -316,7 +312,10 @@ void WebEngineService::resume()
         BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
         return;
     }
-    m_currentWebView->resume();
+    if (!m_signalsConnected)
+        connectSignals(m_currentWebView);
+    if (m_currentWebView->isSuspended())
+        m_currentWebView->resume();
     registerHWKeyCallback();
 }
 
@@ -473,7 +472,7 @@ int WebEngineService::tabsCount() const
 
 TabId WebEngineService::currentTabId() const
 {
-    return m_currentTabId;
+    return m_stateStruct->currentTabId;
 }
 
 std::vector<TabContentPtr> WebEngineService::getTabContents() const {
@@ -556,25 +555,21 @@ bool WebEngineService::switchToTab(tizen_browser::basic_webengine::TabId newTabI
         return false;
     }
 
-    if (newTabId != m_currentTabId) {
+    if (newTabId != m_stateStruct->currentTabId) {
         // if there was any running WebView
-        if (m_currentWebView) {
-            disconnectSignals(m_currentWebView);
+        if (m_currentWebView)
             suspend();
-        }
 
         closeFindOnPage();
         m_currentWebView = m_stateStruct->tabs[newTabId];
-        m_currentTabId = newTabId;
+        m_stateStruct->currentTabId = newTabId;
         m_stateStruct->mostRecentTab.erase(
             std::remove(m_stateStruct->mostRecentTab.begin(),
                 m_stateStruct->mostRecentTab.end(),
                 newTabId),
             m_stateStruct->mostRecentTab.end());
         m_stateStruct->mostRecentTab.push_back(newTabId);
-
     }
-    connectSignals(m_currentWebView);
     resume();
 
     uriChanged(m_currentWebView->getURI());
@@ -587,9 +582,9 @@ bool WebEngineService::switchToTab(tizen_browser::basic_webengine::TabId newTabI
 
 bool WebEngineService::closeTab()
 {
-    BROWSER_LOGD("[%s:%d] closing tab=%s", __PRETTY_FUNCTION__, __LINE__, m_currentTabId.toString().c_str());
-    bool res = closeTab(m_currentTabId);
-    return res;
+    BROWSER_LOGD("[%s:%d] closing tab=%s", __PRETTY_FUNCTION__, __LINE__,
+        m_stateStruct->currentTabId.toString().c_str());
+    return closeTab(m_stateStruct->currentTabId);
 }
 
 bool WebEngineService::closeTab(TabId id) {
@@ -607,14 +602,14 @@ bool WebEngineService::closeTab(TabId id) {
             closingTabId),
         m_stateStruct->mostRecentTab.end());
 
-    if (closingTabId == m_currentTabId) {
+    if (closingTabId == m_stateStruct->currentTabId) {
         if (m_currentWebView)
             m_currentWebView.reset();
     }
     if (m_stateStruct->tabs.size() == 0) {
-        m_currentTabId = TabId::NONE;
+        m_stateStruct->currentTabId = TabId::NONE;
     }
-    else if (closingTabId == m_currentTabId && m_stateStruct->mostRecentTab.size()){
+    else if (closingTabId == m_stateStruct->currentTabId && m_stateStruct->mostRecentTab.size()){
         res = switchToTab(m_stateStruct->mostRecentTab.back());
     }
 
@@ -884,7 +879,7 @@ void WebEngineService::moreKeyPressed()
         return;
     }
 
-    if (m_currentTabId == TabId::NONE || m_currentWebView->clearTextSelection())
+    if (m_stateStruct->currentTabId == TabId::NONE || m_currentWebView->clearTextSelection())
         return;
 
     if (m_currentWebView->isFullScreen()) {
@@ -1029,6 +1024,8 @@ void WebEngineService::resetSettingsParam()
 
 void WebEngineService::changeState()
 {
+    suspend();
+
     if (m_state == State::NORMAL) {
         m_state = State::SECRET;
         m_stateStruct = &m_secretStateStruct;
@@ -1036,6 +1033,11 @@ void WebEngineService::changeState()
         m_state = State::NORMAL;
         m_stateStruct = &m_normalStateStruct;
     }
+
+    if (m_stateStruct->tabs.empty())
+        m_currentWebView = nullptr;
+    else
+        m_currentWebView = m_stateStruct->tabs[m_stateStruct->currentTabId];
 }
 
 } /* end of webengine_service */
index a1d47657e2401618581984591198ceeb4cf06c7b..ed7063035ad0da4fc73ff56ba258d3ea8ab82b28 100644 (file)
@@ -261,9 +261,6 @@ private:
      */
     void disconnectSignals(WebViewPtr);
 
-    void disconnectCurrentWebViewSignals();
-    void connectCurrentWebViewSignals();
-
     /**
      * connect signals of specified WebView
      * \param WebView
@@ -277,6 +274,7 @@ private:
     struct StateStruct {
         std::map<TabId, WebViewPtr > tabs;
         std::vector<TabId> mostRecentTab;
+        TabId currentTabId = TabId::NONE;
     };
 
     State m_state;
@@ -285,8 +283,6 @@ private:
     bool m_stopped;
     bool m_webViewCacheInitialized;
 
-    // current TabId
-    TabId m_currentTabId;
     // current WebView
     WebViewPtr m_currentWebView;
     StateStruct m_normalStateStruct;
@@ -294,6 +290,7 @@ private:
     StateStruct* m_stateStruct;
     int m_tabIdCreated;
     int m_tabIdSecret;
+    bool m_signalsConnected;
 
     std::map<WebEngineSettings, bool>  m_settings;
     std::shared_ptr<DownloadControl> m_downloadControl;
index 8ecd30e1b4bcfc94701de8e8074de555907a9c31..2ece488bfa558c0dd8c1fdb2da4b4b0adfb14a1f 100755 (executable)
@@ -203,7 +203,6 @@ void __vibration_cancel_cb(void * /*data*/)
 void WebView::registerCallbacks()
 {
     evas_object_smart_callback_add(m_ewkView, "load,started", __loadStarted, this);
-    evas_object_smart_callback_add(m_ewkView, "load,stop", __loadStop, this);
     evas_object_smart_callback_add(m_ewkView, "load,finished", __loadFinished, this);
     evas_object_smart_callback_add(m_ewkView, "load,progress", __loadProgress, this);
     evas_object_smart_callback_add(m_ewkView, "load,error", __loadError, this);
@@ -241,7 +240,6 @@ void WebView::registerCallbacks()
 void WebView::unregisterCallbacks()
 {
     evas_object_smart_callback_del_full(m_ewkView, "load,started", __loadStarted, this);
-    evas_object_smart_callback_del_full(m_ewkView, "load,stop", __loadStop, this);
     evas_object_smart_callback_del_full(m_ewkView, "load,finished", __loadFinished, this);
     evas_object_smart_callback_del_full(m_ewkView, "load,progress", __loadProgress, this);
     evas_object_smart_callback_del_full(m_ewkView, "load,error", __loadError, this);
@@ -785,6 +783,7 @@ void WebView::resume()
 
 void WebView::stopLoading(void)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_isLoading = false;
     ewk_view_stop(m_ewkView);
     loadStop();
@@ -792,6 +791,7 @@ void WebView::stopLoading(void)
 
 void WebView::reload(void)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_isLoading = true;
     if(m_loadError)
     {
@@ -987,16 +987,6 @@ void WebView::__loadStarted(void * data, Evas_Object * /* obj */, void * /* even
     self->loadStarted();
 }
 
-void WebView::__loadStop(void * data, Evas_Object * /* obj */, void * /* event_info */)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
-    WebView * self = reinterpret_cast<WebView *>(data);
-    self->m_isLoading = false;
-
-    self->loadStop();
-}
-
 void WebView::__loadFinished(void * data, Evas_Object * /* obj */, void * /* event_info */)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
index 57cc3275a2d67aef9bb6761a5bc321178dbe9e29..bb259f79a25e376e5d44e04064c7cd4b12d54f97 100644 (file)
@@ -323,7 +323,6 @@ private:
 
     // Load
     static void __loadStarted(void * data, Evas_Object * obj, void * event_info);
-    static void __loadStop(void * data, Evas_Object * obj, void * event_info);
     static void __loadFinished(void * data, Evas_Object * obj, void * event_info);
     static void __loadProgress(void * data, Evas_Object * obj, void * event_info);
     static void __loadError(void* data, Evas_Object* obj, void *ewkError);
index 39b71cef104a1e135c40ff4331368b5e0a2855e3..c59f8eaa112283c62f36b97c1d2d44475d7bbccd 100644 (file)
@@ -125,7 +125,7 @@ Evas_Object* URIEntry::getEntryWidget()
 
 void URIEntry::changeUri(const std::string& newUri)
 {
-    BROWSER_LOGD("%s: newUri=%s", __func__, newUri.c_str());
+    BROWSER_LOGD("[%s:%d] newUri=%s", __PRETTY_FUNCTION__, __LINE__, newUri.c_str());
     m_URI = newUri;
     if (elm_object_focus_get(m_entry) == EINA_FALSE) {
         if (!m_URI.empty()) {