Fix potential memory leaks and little refactoring 83/89683/6
authorKamil Nowac <k.nowac@samsung.com>
Tue, 27 Sep 2016 06:04:28 +0000 (08:04 +0200)
committerKamil Nowac <k.nowac@samsung.com>
Tue, 27 Sep 2016 09:50:15 +0000 (11:50 +0200)
[Issue]    N/A
[Problem]  Potential memory leaks
[Solution] Use smart pointers and free objects allocated
           with operator new
[Verify]   Build browser. Browser should work normally.

Change-Id: Iaca59983481ce993abe7ccf7639c08d56f63d573

14 files changed:
core/Tools/BookmarkItem.h
core/Tools/EflTools.h
services/BookmarkFlowUI/BookmarkFlowUI.cpp
services/BookmarkFlowUI/BookmarkFlowUI.h
services/BookmarkManagerUI/BookmarkManagerUI.cpp
services/BookmarkManagerUI/BookmarkManagerUI.h
services/CertificateService/CertificateContents.cpp
services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.cpp
services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.h
services/MoreMenuUI/MoreMenuUI.cpp
services/MoreMenuUI/MoreMenuUI.h
services/QuickAccess/QuickAccess.cpp
services/QuickAccess/QuickAccess.h
services/SettingsUI/SettingsUI.cpp

index 14f4f051230ff43ec31c75dd76125b87486a17ba..0896cbdced35634f608c676d4b21023bea7b6314 100644 (file)
@@ -58,10 +58,10 @@ public:
     //TODO: create bool with a value when database is updated
     bool getPrivate() const { return false; }
 
-    void setThumbnail(std::shared_ptr<tizen_browser::tools::BrowserImage> thumbnail);
+    void setThumbnail(std::shared_ptr<tools::BrowserImage> thumbnail);
     std::shared_ptr<tizen_browser::tools::BrowserImage> getThumbnail() const ;
 
-    void setFavicon(std::shared_ptr<tizen_browser::tools::BrowserImage> favicon);
+    void setFavicon(std::shared_ptr<tools::BrowserImage> favicon);
     std::shared_ptr<tizen_browser::tools::BrowserImage> getFavicon() const;
 
     void setParent(int parent) { m_parent = parent; }
@@ -86,8 +86,8 @@ private:
     std::string m_url;
     std::string m_title;
     std::string m_note;
-    std::shared_ptr<tizen_browser::tools::BrowserImage> m_thumbnail;
-    std::shared_ptr<tizen_browser::tools::BrowserImage> m_favicon;
+    std::shared_ptr<tools::BrowserImage> m_thumbnail;
+    std::shared_ptr<tools::BrowserImage> m_favicon;
     int m_parent;
     int m_order;
     std::vector<unsigned int> m_tags;
@@ -97,8 +97,8 @@ private:
     bool m_is_editable;
 };
 
-typedef std::shared_ptr<BookmarkItem> SharedBookmarkItem;
-typedef std::vector<SharedBookmarkItem> SharedBookmarkItemList;
+using SharedBookmarkItem = std::shared_ptr<BookmarkItem>;
+using SharedBookmarkItemList = std::vector<SharedBookmarkItem>;
 
 enum FolderIDType {
       ROOT_FOLDER_ID = 0,
index dcc2e304fc276b022d1f70a7c0c2ac13223a99ca..5a2013688a7c7a3b77840f7fcd48cc5ec13abf8c 100644 (file)
 // counts size exactly as is in Z3 device
 #define Z3_SCALE_SIZE(x) (int)(((double)(x) * elm_config_scale_get()) / 2.6)
 
+// Default function for deletion callback (func.del) for genlist/gengrid
+// Usage example:
+// item data struct is ItemData so in func.del use
+// item_class->func.del = _genlist_del<ItemData>
+template <typename T>
+static void _genlist_del(void* data, Evas_Object*)
+{
+    if (data) {
+        auto itemData = static_cast<T*>(data);
+        delete itemData;
+    }
+}
+
 namespace tizen_browser {
 namespace tools {
 namespace EflTools {
index 78eb90412d7184e974f81692a2814f468c1ad8fd..45800e032eab101e6e6a800b07d9bb7d9a34c753 100755 (executable)
@@ -30,7 +30,6 @@
 #include "BookmarkFlowUI.h"
 #include "ServiceManager.h"
 #include "BrowserLogger.h"
-#include "Tools/EflTools.h"
 #include "../Tools/BrowserImage.h"
 
 namespace tizen_browser{
@@ -170,23 +169,26 @@ void BookmarkFlowUI::createGenlistItemClasses()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_entry_item_class = createGenlistItemClass("entry_custom_layout", _genlist_entry_text_get,
-        _genlist_entry_content_get);
+        _genlist_entry_content_get, _genlist_del<EntryData>);
     m_group_item_class = createGenlistItemClass("group_index", _genlist_text_get);
     m_folder_item_class = createGenlistItemClass("type1", _genlist_folder_text_get,
-        _genlist_folder_content_get);
+        _genlist_folder_content_get, _genlist_del<FolderData>);
     m_add_to_qa_item_class = createGenlistItemClass("type1", _genlist_add_to_qa_text_get,
         _genlist_add_to_qa_content_get);
 }
 
 Elm_Genlist_Item_Class* BookmarkFlowUI::createGenlistItemClass(
-    const char* style, Elm_Gen_Item_Text_Get_Cb text_cb, Elm_Gen_Item_Content_Get_Cb content_cb)
+    const char* style,
+    Elm_Gen_Item_Text_Get_Cb text_cb,
+    Elm_Gen_Item_Content_Get_Cb content_cb,
+    Elm_Gen_Item_Del_Cb del_cb)
 {
     auto ic = elm_genlist_item_class_new();
     ic->item_style = style;
     ic->func.text_get = text_cb;
     ic->func.content_get = content_cb;
     ic->func.state_get = nullptr;
-    ic->func.del = nullptr;
+    ic->func.del = del_cb;
     ic->decorate_all_item_style = "edit_default";
     return ic;
 }
index 7e27eda5e10542df47e8f48b406ba6ce295a8904..b3c89953fd2b77684d3a9cae77498351a0890230 100644 (file)
@@ -36,6 +36,7 @@
 #include "BookmarkItem.h"
 #include "BookmarkFolder.h"
 #include "app_i18n.h"
+#include "Tools/EflTools.h"
 
 #define BOOKMARK_FLOW_SERVICE "org.tizen.browser.bookmarkflowui"
 #define M_UNUSED(x) (void)(x)
@@ -81,24 +82,27 @@ private:
     struct FolderData {
         std::string name;
         unsigned int folder_id;
-        std::shared_ptr<tizen_browser::base_ui::BookmarkFlowUI> bookmarkFlowUI;
+        std::shared_ptr<BookmarkFlowUI> bookmarkFlowUI;
     };
 
     struct EntryData {
         std::string category;
         std::string entry;
-        std::shared_ptr<tizen_browser::base_ui::BookmarkFlowUI> bookmarkFlowUI;
+        std::shared_ptr<BookmarkFlowUI> bookmarkFlowUI;
     };
 
     struct ObjectData {
         Evas_Object* object;
-        std::shared_ptr<tizen_browser::base_ui::BookmarkFlowUI> bookmarkFlowUI;
+        std::shared_ptr<BookmarkFlowUI> bookmarkFlowUI;
     };
 
     Evas_Object* createBookmarkFlowLayout();
     void createGenlistItemClasses();
-    Elm_Genlist_Item_Class* createGenlistItemClass(const char* style,
-        Elm_Gen_Item_Text_Get_Cb text_cb = nullptr, Elm_Gen_Item_Content_Get_Cb content_cb = nullptr);
+    Elm_Genlist_Item_Class* createGenlistItemClass(
+        const char* style,
+        Elm_Gen_Item_Text_Get_Cb text_cb = nullptr,
+        Elm_Gen_Item_Content_Get_Cb content_cb = nullptr,
+        Elm_Gen_Item_Del_Cb del_cb = nullptr);
     void createTopContent();
     void createGenlist();
     void fillGenlist();
index 2fbeb6b72c754975e3dceeb8d7ab544660f45ac9..9a1b837e4743ca12039cd179436f8ae5b1847e6c 100644 (file)
 #include "BookmarkManagerUI.h"
 #include "ServiceManager.h"
 #include "BrowserLogger.h"
-#include "Tools/EflTools.h"
-#include "../Tools/BrowserImage.h"
 #include "app_i18n.h"
 #include "Tools/BookmarkItem.h"
+#include "Tools/BrowserImage.h"
 
 namespace tizen_browser{
 namespace base_ui{
 
 EXPORT_SERVICE(BookmarkManagerUI, "org.tizen.browser.bookmarkmanagerui")
 
-struct ItemData
-{
-    tizen_browser::base_ui::BookmarkManagerUI * m_bookmarkManager;
-    tizen_browser::services::BookmarkItem * h_item;
-    Elm_Object_Item * e_item;
-};
-
 BookmarkManagerUI::BookmarkManagerUI()
     : m_parent(nullptr)
     , m_content(nullptr)
@@ -109,7 +101,7 @@ void BookmarkManagerUI::createGenlistItemClasses()
     m_bookmark_item_class->func.text_get = _genlist_bookmark_text_get;
     m_bookmark_item_class->func.content_get =  _genlist_bookmark_content_get;
     m_bookmark_item_class->func.state_get = nullptr;
-    m_bookmark_item_class->func.del = nullptr;
+    m_bookmark_item_class->func.del = _genlist_del<BookmarkData>;
     m_bookmark_item_class->decorate_all_item_style = "edit_default";
 }
 
index d0e8b13902aca425fa268c062ea8d4c328ed7dd6..34f7c8c9c9d64ba0b462bf0dfd923a9f302e8a16 100644 (file)
@@ -30,6 +30,7 @@
 #include "BookmarkItem.h"
 #include "BookmarkFolder.h"
 #include "NaviframeWrapper.h"
+#include "Tools/EflTools.h"
 
 namespace tizen_browser{
 namespace base_ui{
@@ -89,20 +90,11 @@ public:
     boost::signals2::signal<bool ()> isEngineSecretMode;
 
 private:
-    using FolderData = struct
-    {
-        std::string name;
-        int count;
-        unsigned int folder_id;
-        BookmarkManagerUI* bookmarkManagerUI;
-    };
-
-    using BookmarkData = struct
+    struct BookmarkData
     {
         services::SharedBookmarkItem bookmarkItem;
         BookmarkManagerUI* bookmarkManagerUI;
     };
-
     void createBookmarksLayout();
     void createTopContent();
     void createModulesToolbar();
index 4a33fb37473072f96547164b411a152216b1f662..8a7528886da82ed8b1da5254ce10ed19e3dd0b80 100644 (file)
@@ -58,6 +58,7 @@ EXPORT_SERVICE(CertificateContents, "org.tizen.browser.certificateservice")
 CertificateContents::CertificateContents()
     : m_mainLayout(nullptr)
     , m_parent(nullptr)
+    , m_certificate(nullptr)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_edjFilePath = EDJE_DIR;
@@ -73,6 +74,7 @@ CertificateContents::~CertificateContents()
     if (m_mainLayout)
         evas_object_del(m_mainLayout);
     m_genlist_callback_data_list.clear();
+    X509_free(m_certificate);
 }
 
 void CertificateContents::init()
index ee541a4c68dd4adefc52ea63eb221227326df313..72766604018e2e517d189a1a2fdb19b275b0db97 100644 (file)
@@ -27,7 +27,6 @@
 #include <services/HistoryUI/HistoryDeleteManager.h>
 
 #include <GeneralTools.h>
-#include <EflTools.h>
 
 namespace tizen_browser {
 namespace base_ui {
@@ -54,9 +53,6 @@ HistoryDaysListManagerMob::HistoryDaysListManagerMob()
 
 HistoryDaysListManagerMob::~HistoryDaysListManagerMob()
 {
-    for (auto& data : m_itemDataVector)
-        delete data;
-
     for (auto& dayItem : m_dayItems)
         dayItem->setEflObjectsAsDeleted();
 
@@ -82,14 +78,14 @@ void HistoryDaysListManagerMob::createGenlistItemClasses()
     m_history_download_item_class->func.text_get = _genlist_history_download_text_get;
     m_history_download_item_class->func.content_get =  _genlist_history_download_content_get;
     m_history_download_item_class->func.state_get = nullptr;
-    m_history_download_item_class->func.del = nullptr;
+    m_history_download_item_class->func.del = _genlist_del<ItemData>;
     m_history_download_item_class->decorate_all_item_style = "edit_default";
 
     m_history_item_item_class->item_style = "type1";
     m_history_item_item_class->func.text_get = _genlist_history_item_text_get;
     m_history_item_item_class->func.content_get =  _genlist_history_item_content_get;
     m_history_item_item_class->func.state_get = nullptr;
-    m_history_item_item_class->func.del = nullptr;
+    m_history_item_item_class->func.del = _genlist_del<ItemData>;
     m_history_item_item_class->decorate_all_item_style = "edit_default";
 }
 
@@ -323,7 +319,6 @@ Evas_Object* HistoryDaysListManagerMob::createDaysList(
             nullptr, ELM_GENLIST_ITEM_NONE,
             nullptr, nullptr);
     }
-    m_itemDataVector.push_back(id);
     return m_genlist;
 }
 
@@ -403,7 +398,6 @@ void HistoryDaysListManagerMob::_tree_item_expanded(void* data, Evas_Object* gen
                 itData));
         self->m_itemsToDelete[listItem] = EINA_FALSE;
         self->m_visitItemData[listItem] = el->websiteVisitItem;
-        self->m_itemDataVector.push_back(itData);
     }
     self->m_itemData[it]->expanded = true;
     auto arrow_layout(
index 1a78262e0b54457e5c6950e2c4182087b0d83a7b..5f0b8ab10d02b0e1fb46203ea4150bc7fc7d64d0 100644 (file)
@@ -22,6 +22,8 @@
 #include <string>
 #include <vector>
 #include <set>
+#include <EflTools.h>
+
 #include "HistoryDayItemDataTypedef.h"
 #include "HistoryDaysListManager.h"
 #include "HistoryDaysListManagerEdje.h"
@@ -39,7 +41,6 @@ public:
     virtual ~HistoryDaysListManagerMob();
 
     void createGenlistItemClasses();
-
     static char* _genlist_history_day_text_get(void *data, Evas_Object *, const char *part);
     static char* _genlist_history_download_text_get(void* data, Evas_Object*, const char *part);
     static char* _genlist_history_item_text_get(void *data, Evas_Object *, const char *part);
@@ -67,14 +68,13 @@ public:
     void removeSelectedItems();
     bool isSelectAllChecked() const { return m_isSelectAllChecked == EINA_TRUE; }
 
+private:
     struct ItemData {
         HistoryDaysListManagerMob* self;
         WebsiteVisitItemDataPtr websiteVisitItem;
         WebsiteHistoryItemDataPtr websiteHistoryItemData;
         const char* str;
     };
-
-private:
     void connectSignals();
     void appendDayItem(HistoryDayItemDataPtr dayItemData);
     void showNoHistoryMessage(bool show);
index e5deb428cbcf0b0a6951fa2775a3055a1dc7da42..226983b4752b05c26d693a4289318e1d4cb6bd77 100755 (executable)
@@ -30,18 +30,6 @@ namespace base_ui{
 
 EXPORT_SERVICE(MoreMenuUI, "org.tizen.browser.moremenuui")
 
-struct ItemData{
-        tizen_browser::base_ui::MoreMenuUI * m_moreMenu;
-        std::shared_ptr<tizen_browser::services::HistoryItem> h_item;
-        Elm_Object_Item * e_item;
-    };
-
-typedef struct _MoreItemData
-{
-    ItemType item;
-    std::shared_ptr<tizen_browser::base_ui::MoreMenuUI> moreMenuUI;
-} MoreMenuItemData;
-
 MoreMenuUI::MoreMenuUI()
     : m_current_tab_bar(nullptr)
     , m_mm_layout(nullptr)
@@ -80,7 +68,7 @@ Elm_Gengrid_Item_Class* MoreMenuUI::createItemClass()
     item_class->func.text_get = _grid_text_get;
     item_class->func.content_get =  _grid_content_get;
     item_class->func.state_get = NULL;
-    item_class->func.del = NULL;
+    item_class->func.del = _genlist_del<MoreMenuItemData>;
     return item_class;
 }
 
index c3fa84dfde9eb1863976384d2712d72f64e8f83a..9ab97ef4fb5754addda7a5fa41829509860ccb7a 100755 (executable)
@@ -31,6 +31,7 @@
 
 #include "BookmarkItem.h"
 #include "services/HistoryService/HistoryItem.h"
+#include "Tools/EflTools.h"
 
 #if !PROFILE_MOBILE
 #include "FocusManager.h"
@@ -72,8 +73,8 @@ enum ItemType {
 } item;
 
 class BROWSER_EXPORT MoreMenuUI
-        : public tizen_browser::interfaces::AbstractUIComponent
-        , public tizen_browser::core::AbstractService
+        : public interfaces::AbstractUIComponent
+        , public core::AbstractService
 {
 public:
     MoreMenuUI();
@@ -119,6 +120,11 @@ public:
     boost::signals2::signal<bool ()> isBookmark;
     boost::signals2::signal<void ()> bookmarkFlowClicked;
 private:
+    struct MoreMenuItemData
+    {
+        ItemType item;
+        std::shared_ptr<MoreMenuUI> moreMenuUI;
+    };
     Elm_Gengrid_Item_Class* createItemClass();
     void createMoreMenuLayout();
 #if PROFILE_MOBILE
index 26be98fa81e24022d8745d0711054555e2927ad9..73a886fec184ff54714456bcade15d306c15523a 100644 (file)
@@ -23,8 +23,7 @@
 #include "QuickAccess.h"
 #include "ServiceManager.h"
 #include "BrowserLogger.h"
-#include "Tools/EflTools.h"
-#include "../Tools/BrowserImage.h"
+#include "Tools/BrowserImage.h"
 #include "Tools/GeneralTools.h"
 
 namespace tizen_browser{
@@ -32,18 +31,6 @@ namespace base_ui{
 
 EXPORT_SERVICE(QuickAccess, "org.tizen.browser.quickaccess")
 
-typedef struct _HistoryItemData
-{
-        std::shared_ptr<tizen_browser::services::HistoryItem> item;
-        QuickAccess* quickAccess;
-} HistoryItemData;
-
-typedef struct _BookmarkItemData
-{
-        std::shared_ptr<tizen_browser::services::BookmarkItem> item;
-        QuickAccess* quickAccess;
-} BookmarkItemData;
-
 QuickAccess::QuickAccess()
     : m_parent(nullptr)
     , m_layout(nullptr)
index 1e23c6006063cf831d7bfbf6be10ade4f6cd1cfe..637603d10ea2b5a745262a0b9406f5a9a9cb8206 100644 (file)
@@ -30,6 +30,7 @@
 #include "services/HistoryService/HistoryItemTypedef.h"
 #include "BookmarkItem.h"
 #include "NaviframeWrapper.h"
+#include "Tools/EflTools.h"
 
 namespace tizen_browser{
 namespace base_ui{
@@ -74,6 +75,18 @@ public:
     boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::BookmarkItem>)> deleteQuickAccessItem;
 
 private:
+    struct HistoryItemData
+    {
+        std::shared_ptr<tizen_browser::services::HistoryItem> item;
+        QuickAccess* quickAccess;
+    };
+
+    struct BookmarkItemData
+    {
+        std::shared_ptr<tizen_browser::services::BookmarkItem> item;
+        QuickAccess* quickAccess;
+    };
+
     void createItemClasses();
     void addMostVisitedItem(std::shared_ptr<services::HistoryItem>);
     void addQuickAccessItem(std::shared_ptr<tizen_browser::services::BookmarkItem>);
index a385b1cb0d0483c6a64afb026335fa87f9474f40..67e7d83d00625e820236fae202efb00113a5e691 100755 (executable)
 namespace tizen_browser{
 namespace base_ui{
 
-typedef struct _genlistCallbackData
-{
-    void *user_data;
-    Elm_Object_Item *it;
-} genlistCallbackData;
-
 SettingsUI::SettingsUI()
     : m_naviframe(nullptr)
     , m_genlist(nullptr)