Make sure all tabs are deleted from database 58/94258/1
authorKamil Nowac <k.nowac@samsung.com>
Thu, 29 Sep 2016 10:25:56 +0000 (12:25 +0200)
committerHyeKyoung Hwang <cookie@samsung.com>
Fri, 28 Oct 2016 02:11:33 +0000 (11:11 +0900)
[Issue]    http://suprem.sec.samsung.net/jira/browse/TWF-1642
[Problem]  Reset Browser does not clear all tabs
[Solution] Remove ids marked as deleted
[Verify]   Open few tabs. Reset browser.
           Situation described in Issue should not occur

Change-Id: If06006a34325f4cf5078ecd337ca9f103a0f3dca

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

index 1e80ace8f0fe08af7b98b51e9d4e357c7e98d653..678697158d22b1ce8fb5d720a5e2a309f331302e 100644 (file)
@@ -1786,12 +1786,10 @@ void SimpleUI::onResetBrowserButton(PopupButtons button, std::shared_ptr< PopupD
         m_webEngine->clearFormData();
 
         // Close all openend tabs
-        std::vector<std::shared_ptr<tizen_browser::basic_webengine::TabContent>> openedTabs = m_webEngine->getTabContents();
-        for (auto it = openedTabs.begin(); it < openedTabs.end(); ++it) {
-            tizen_browser::basic_webengine::TabId id = it->get()->getId();
-            m_tabService->removeTab(id);
-            m_webEngine->closeTab(id);
-        }
+        auto openedTabs = m_webEngine->getTabContents();
+        for (const auto& it : openedTabs)
+            m_webEngine->closeTab(it.get()->getId());
+        m_tabService->clearAll();
         m_certificateContents->clear();
         m_storageService->getCertificateStorage().deleteAllEntries();
         m_storageService->getFoldersStorage().deleteAllFolders();
index d114e04fcb9b56d59b6bb60b70f5b68959bc1cfa..19eccbcce7e072a75805c58faf247493b6c5700c 100644 (file)
@@ -205,11 +205,31 @@ void TabService::clearFromCache(const basic_webengine::TabId& tabId) {
     m_thumbMap.erase(tabId.get());
 }
 
+void TabService::clearAll()
+{
+    int* items = nullptr;
+    int count;
+    if (bp_tab_adaptor_get_full_ids_p(&items, &count) < 0) {
+        errorPrint("bp_tab_adaptor_get_full_ids_p");
+    }
+    for (int i = 0; i < count; ++i) {
+        auto id = basic_webengine::TabId(items[i]);
+        clearFromDatabase(id);
+    }
+    m_thumbMap.clear();
+}
+
 void TabService::clearFromDatabase(const basic_webengine::TabId& tabId)
 {
     if (bp_tab_adaptor_delete(tabId.get()) < 0) {
         errorPrint("bp_tab_adaptor_delete");
     }
+    if (bp_tab_adaptor_set_deleted(tabId.get()) < 0) {
+        errorPrint("bp_tab_adaptor_set_deleted");
+    }
+    if (bp_tab_adaptor_clear_deleted_ids() < 0) {
+        errorPrint("bp_tab_adaptor_clear_deleted_ids");
+    }
 }
 
 void TabService::saveThumbDatabase(const basic_webengine::TabId& tabId,
index 0259d2df083207d919c5a06cce06606d61e1e956..b998e4e25f6485c4cdc9ca59e2e3a84dc562c7ea 100644 (file)
@@ -65,6 +65,11 @@ public:
      */
     void removeTab(const basic_webengine::TabId& tabId);
 
+    /**
+     * Remove all items from the cache and database.
+     */
+    void clearAll();
+
     /**
      * Set thumb images for given TabContent objects: get them from
      * cache or database or generate them by taking screenshots.