TT-165 Fixed browser crash after opening page from history/bookmarks 47/48047/5
authort.dakowicz <t.dakowicz@samsung.com>
Fri, 11 Sep 2015 11:16:44 +0000 (13:16 +0200)
committerTomasz Dakowicz <t.dakowicz@samsung.com>
Mon, 14 Sep 2015 10:15:24 +0000 (03:15 -0700)
[Issue#] https://bugs.tizen.org/jira/browse/TT-165
[Problem] Browser's crash after opening a page from bookmarks/history
[Cause] Favicon was inserted into freed object
[Solution] Added disconnects from signals after closing MoreMenu
[Verify] New Tab -> MoreMenu -> History -> open page
         or New Tab -> Bookmarks -> open page
         Check if browser crashes

Please keep in mind that disconnects are needed here because views
are removed when exiting, which won't be done in future new browser's
structure.

Change-Id: I7a8db96b35d397b88196bbdbba21f526c73c2ec8

services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h

index 0f539a52d6a2ed24fa0740bdf653b1792ab3de64..43dea865739133286e8077ee000b29c31485b2de 100644 (file)
@@ -599,12 +599,12 @@ void SimpleUI::onOpenURLInNewTab(std::shared_ptr<tizen_browser::services::Histor
     std::string historyAddress = historyItem->getUrl();
     if(m_historyUI) {                // TODO: remove this section when naviframes will be available
         m_historyUI->clearItems();
-        m_historyUI = nullptr;
+        closeHistoryUI(std::string());
     }
 
     if(m_moreMenuUI) {               // TODO: remove this section when naviframes will be available
         m_moreMenuUI->clearItems();
-        m_moreMenuUI = nullptr;
+        closeMoreMenu(std::string());
     }
     openNewTab(historyAddress, desktopMode);
 }
@@ -645,6 +645,7 @@ void SimpleUI::onBookmarkManagerButtonClicked(const std::string&)
     BROWSER_LOGD("[%s]", __func__);
     if(m_mainUI) {               // TODO: remove this section when naviframes will be available
         m_mainUI->clearBookmarkGengrid();
+        m_mainUI->clearHistoryGenlist();
     }
 
     if(m_moreMenuUI) {               // TODO: remove this section when naviframes will be available
@@ -659,12 +660,12 @@ void SimpleUI::onBookmarkClicked(std::shared_ptr<tizen_browser::services::Bookma
     std::string bookmarkAddress = bookmarkItem->getAddress();
     if(m_bookmarkManagerUI) {                // TODO: remove this section when naviframes will be available
         m_bookmarkManagerUI->clearItems();
-        m_bookmarkManagerUI = nullptr;
+        closeBookmarkManagerMenu(std::string());
     }
 
     if(m_moreMenuUI) {               // TODO: remove this section when naviframes will be available
         m_moreMenuUI->clearItems();
-        m_moreMenuUI = nullptr;
+        closeMoreMenu(std::string());
     }
     openNewTab(bookmarkAddress);
 }
@@ -1085,6 +1086,9 @@ void SimpleUI::showHistoryUI(const std::string& str)
 void SimpleUI::closeHistoryUI(const std::string& str)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_historyUI->clearHistoryClicked.disconnect(boost::bind(&SimpleUI::onClearHistoryClicked, this,_1));
+    m_historyUI->closeHistoryUIClicked.disconnect(boost::bind(&SimpleUI::closeHistoryUI, this,_1));
+    m_historyUI->historyItemClicked.disconnect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, true));     // desktop mode as default
     m_historyUI.reset();
 }
 
@@ -1197,13 +1201,9 @@ void SimpleUI::showBookmarkManagerMenu()
                 <tizen_browser::base_ui::BookmarkManagerUI,tizen_browser::core::AbstractService>
                 (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui"));
         M_ASSERT(m_bookmarkManagerUI);
-        m_bookmarkManagerUI->closeBookmarkManagerClicked.disconnect_all_slots();
         m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerMenu, this,_1));
-        m_bookmarkManagerUI->saveFolderClicked.disconnect_all_slots();
         m_bookmarkManagerUI->saveFolderClicked.connect(boost::bind(&SimpleUI::newFolderBookmarkManager, this,_1,_2));
-        m_bookmarkManagerUI->bookmarkItemClicked.disconnect_all_slots();
         m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1));
-        m_bookmarkManagerUI->folderItemClicked.disconnect_all_slots();
         m_bookmarkManagerUI->folderItemClicked.connect(boost::bind(&SimpleUI::updateBookmarkManagerGenGrid, this,_1));
         m_bookmarkManagerUI->show(m_window.get());
         m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders(ROOT_FOLDER));
@@ -1222,19 +1222,23 @@ void SimpleUI::updateBookmarkManagerGenGrid(int folder_id)
     m_curr_folder_id = folder_id;
 }
 
-void SimpleUI::closeBookmarkManagerMenu(std::string& str)
+void SimpleUI::closeBookmarkManagerMenu(const std::string& str)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_bookmarkManagerUI->closeBookmarkManagerClicked.disconnect(boost::bind(&SimpleUI::closeBookmarkManagerMenu, this,_1));
+    m_bookmarkManagerUI->saveFolderClicked.disconnect(boost::bind(&SimpleUI::newFolderBookmarkManager, this,_1,_2));
+    m_bookmarkManagerUI->bookmarkItemClicked.disconnect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1));
+    m_bookmarkManagerUI->folderItemClicked.disconnect(boost::bind(&SimpleUI::updateBookmarkManagerGenGrid, this,_1));
     m_bookmarkManagerUI.reset();
 
     if(m_moreMenuUI) {
-        m_moreMenuUI.reset();
+        closeMoreMenu(std::string());
         showMoreMenu();
     }
 
     if(m_mainUI) {
-        m_mainUI->addBookmarkItems(getBookmarks());
-        m_mainUI->showBookmarks();
+        m_mainUI->addHistoryItems(getMostVisitedItems());
+        m_mainUI->showHistory();
     }
 }
 
index bd2eb6ebfc9864b4af21e47d1cba67c70580ec14..ce52557b5d27ceb5a1c8c0848d78d455b7bee0f1 100644 (file)
@@ -258,7 +258,7 @@ private:
     void showProgressBar();
     void hideProgressBar();
 
-    void closeBookmarkManagerMenu(std::string& str);
+    void closeBookmarkManagerMenu(const std::string& str);
     void updateBookmarkManagerGenGrid(int folder_id);
     void showBookmarkManagerMenu();