From 28fccc477453ba98f760e7ec0df298281b2b36b9 Mon Sep 17 00:00:00 2001 From: zhouleonlei Date: Thu, 4 Feb 2021 11:21:53 +0800 Subject: [PATCH] Add APIs of webview back forward list Change-Id: I646dc78ba17ad9bdbd386db78c1396301ba0d7bd --- .../tizen-web-engine-back-forward-list-item.cpp | 15 +++-- .../tizen-web-engine-back-forward-list-item.h | 24 ++----- .../tizen-web-engine-back-forward-list.cpp | 78 ++++++++++++++++++---- .../tizen-web-engine-back-forward-list.h | 61 ++++++++++------- .../web-engine-lwe/tizen-web-engine-lwe.cpp | 24 ++++--- 5 files changed, 130 insertions(+), 72 deletions(-) diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list-item.cpp b/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list-item.cpp index c4170b1..bfb344a 100755 --- a/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list-item.cpp +++ b/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list-item.cpp @@ -22,28 +22,33 @@ namespace Dali namespace Plugin { -TizenWebEngineBackForwardListItem::TizenWebEngineBackForwardListItem( Ewk_Back_Forward_List_Item* item ) - : ewkBackForwardListItem( item ) +TizenWebEngineBackForwardListItem::TizenWebEngineBackForwardListItem(Ewk_Back_Forward_List_Item* item, bool willItemBeDeleted) + : mEwkBackForwardListItem(item) + , mWillItemBeDeleted(willItemBeDeleted) { } TizenWebEngineBackForwardListItem::~TizenWebEngineBackForwardListItem() { + if (mWillItemBeDeleted) + { + ewk_back_forward_list_item_unref(mEwkBackForwardListItem); + } } std::string TizenWebEngineBackForwardListItem::GetUrl() const { - return std::string( ewk_back_forward_list_item_url_get( ewkBackForwardListItem ) ); + return std::string(ewk_back_forward_list_item_url_get(mEwkBackForwardListItem)); } std::string TizenWebEngineBackForwardListItem::GetTitle() const { - return std::string( ewk_back_forward_list_item_title_get( ewkBackForwardListItem ) ); + return std::string(ewk_back_forward_list_item_title_get(mEwkBackForwardListItem)); } std::string TizenWebEngineBackForwardListItem::GetOriginalUrl() const { - return std::string( ewk_back_forward_list_item_original_url_get( ewkBackForwardListItem ) ); + return std::string(ewk_back_forward_list_item_original_url_get(mEwkBackForwardListItem)); } } // namespace Plugin diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list-item.h b/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list-item.h index f9905f5..0970830 100755 --- a/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list-item.h +++ b/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list-item.h @@ -21,7 +21,6 @@ // EXTERNAL INCLUDES #include #include - #include namespace Dali @@ -40,7 +39,7 @@ public: /** * @brief Constructor. */ - TizenWebEngineBackForwardListItem( Ewk_Back_Forward_List_Item* ); + TizenWebEngineBackForwardListItem(Ewk_Back_Forward_List_Item* item, bool willItemBeDeleted = false); /** * @brief Destructor. @@ -48,36 +47,25 @@ public: ~TizenWebEngineBackForwardListItem(); /** - * @brief Returns the URL of the item. - * - * @details The returned URL may differ from the original URL (For example, - * if the page is redirected). - * - * @return The URL of the @a item, - * otherwise @c "" in case of an error + * @copydoc Dali::WebEngineBackForwardListItem::GetUrl() */ std::string GetUrl() const override; /** - * @brief Returns the title of the item. - * - * @return The title of the @a item, - * otherwise @c "" in case of an error + * @copydoc Dali::WebEngineBackForwardListItem::GetTitle() */ std::string GetTitle() const override; /** - * @brief Returns the original URL of the item. - * - * @return The original URL of the @a item, - * otherwise @c "" in case of an error + * @copydoc Dali::WebEngineBackForwardListItem::GetOriginalUrl() */ std::string GetOriginalUrl() const override; private: - Ewk_Back_Forward_List_Item* ewkBackForwardListItem; + Ewk_Back_Forward_List_Item* mEwkBackForwardListItem; + bool mWillItemBeDeleted; // if true, Ewk api will be called to unref the item }; } // namespace Plugin diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list.cpp b/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list.cpp index 305cd42..81b38b3 100755 --- a/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list.cpp +++ b/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list.cpp @@ -23,8 +23,8 @@ namespace Dali namespace Plugin { -TizenWebEngineBackForwardList::TizenWebEngineBackForwardList( Ewk_Back_Forward_List* list ) - : ewkBackForwardList( list ) +TizenWebEngineBackForwardList::TizenWebEngineBackForwardList(Ewk_Back_Forward_List* list) + : mEwkBackForwardList( list ) { } @@ -32,26 +32,76 @@ TizenWebEngineBackForwardList::~TizenWebEngineBackForwardList() { } -Dali::WebEngineBackForwardListItem& TizenWebEngineBackForwardList::GetCurrentItem() const +std::unique_ptr TizenWebEngineBackForwardList::GetCurrentItem() const { - static TizenWebEngineBackForwardListItem itemCache( 0 ); - Ewk_Back_Forward_List_Item* item = ewk_back_forward_list_current_item_get( ewkBackForwardList ); - itemCache = TizenWebEngineBackForwardListItem( item ); - return itemCache; + Ewk_Back_Forward_List_Item* item = ewk_back_forward_list_current_item_get(mEwkBackForwardList); + Dali::WebEngineBackForwardListItem* webitem = new TizenWebEngineBackForwardListItem(item); + std::unique_ptr ret(webitem); + return ret; } -Dali::WebEngineBackForwardListItem& TizenWebEngineBackForwardList::GetItemAtIndex( uint32_t index ) const +std::unique_ptr TizenWebEngineBackForwardList::GetPreviousItem() const { - static TizenWebEngineBackForwardListItem itemCache( 0 ); - Ewk_Back_Forward_List_Item* item = ewk_back_forward_list_item_at_index_get( ewkBackForwardList, index ); - itemCache = TizenWebEngineBackForwardListItem( item ); - return itemCache; + Ewk_Back_Forward_List_Item* item = ewk_back_forward_list_previous_item_get(mEwkBackForwardList); + Dali::WebEngineBackForwardListItem* webitem = new TizenWebEngineBackForwardListItem(item); + std::unique_ptr ret(webitem); + return ret; +} + +std::unique_ptr TizenWebEngineBackForwardList::GetNextItem() const +{ + Ewk_Back_Forward_List_Item* item = ewk_back_forward_list_next_item_get(mEwkBackForwardList); + Dali::WebEngineBackForwardListItem* webitem = new TizenWebEngineBackForwardListItem(item); + std::unique_ptr ret(webitem); + return ret; +} + +std::unique_ptr TizenWebEngineBackForwardList::GetItemAtIndex(uint32_t index) const +{ + Ewk_Back_Forward_List_Item* item = ewk_back_forward_list_item_at_index_get( mEwkBackForwardList, index ); + Dali::WebEngineBackForwardListItem* webitem = new TizenWebEngineBackForwardListItem(item); + std::unique_ptr ret(webitem); + return ret; } uint32_t TizenWebEngineBackForwardList::GetItemCount() const { - return ewk_back_forward_list_count( ewkBackForwardList ); + return ewk_back_forward_list_count( mEwkBackForwardList ); +} + +std::vector> TizenWebEngineBackForwardList::GetBackwardItems(int limit) +{ + std::vector> ret; + + Eina_List* list = ewk_back_forward_list_n_back_items_copy(mEwkBackForwardList, limit); + Eina_List* it; + void *data = NULL; + EINA_LIST_FOREACH(list, it, data) { + Dali::WebEngineBackForwardListItem* webitem = new TizenWebEngineBackForwardListItem((Ewk_Back_Forward_List_Item*)(data), true); + std::unique_ptr item(webitem); + ret.push_back(std::move(item)); + } + eina_list_free(list); + + return ret; +} + +std::vector> TizenWebEngineBackForwardList::GetForwardItems(int limit) +{ + std::vector> ret; + + Eina_List* list = ewk_back_forward_list_n_forward_items_copy(mEwkBackForwardList, limit); + Eina_List* it; + void *data = NULL; + EINA_LIST_FOREACH(list, it, data) { + Dali::WebEngineBackForwardListItem* webitem = new TizenWebEngineBackForwardListItem((Ewk_Back_Forward_List_Item*)(data), true); + std::unique_ptr item(webitem); + ret.push_back(std::move(item)); + } + eina_list_free(list); + + return ret; } } // namespace Plugin -} // namespace Dali \ No newline at end of file +} // namespace Dali diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list.h b/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list.h index 1da742d..74a16b4 100755 --- a/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list.h +++ b/dali-extension/web-engine-chromium/tizen-web-engine-back-forward-list.h @@ -19,10 +19,9 @@ */ // EXTERNAL INCLUDES -#include #include - #include +#include namespace Dali { @@ -42,7 +41,7 @@ public: /** * @brief Constructor. */ - TizenWebEngineBackForwardList( Ewk_Back_Forward_List* ); + TizenWebEngineBackForwardList(Ewk_Back_Forward_List*); /** * @brief Destructor. @@ -50,38 +49,52 @@ public: ~TizenWebEngineBackForwardList(); /** - * @brief Returns the current item in the @a list. - * - * @param[in] list The back-forward list instance - * - * @return The current item in the @a list,\n - * otherwise @c NULL in case of an error + * @brief Assignment operator */ - Dali::WebEngineBackForwardListItem& GetCurrentItem() const override; + TizenWebEngineBackForwardList& operator=(const TizenWebEngineBackForwardList& list) + { + mEwkBackForwardList = list.mEwkBackForwardList; + return *this; + }; /** - * @brief Returns the item at a given @a index relative to the current item. - * - * @param[in] index The index of the item - * - * @return The item at a given @a index relative to the current item,\n - * otherwise @c NULL in case of an error + * @copydoc Dali::WebEngineBackForwardList::GetCurrentItem() */ - Dali::WebEngineBackForwardListItem& GetItemAtIndex( uint32_t index ) const override; + std::unique_ptr GetCurrentItem() const override; /** - * @brief Returns the length of the back-forward list including the current - * item. - * - * @return The length of the back-forward list including the current item,\n - * otherwise @c 0 in case of an error + * @copydoc Dali::WebEngineBackForwardList::GetPreviousItem() + */ + std::unique_ptr GetPreviousItem() const override; + + /** + * @copydoc Dali::WebEngineBackForwardList::GetNextItem() + */ + std::unique_ptr GetNextItem() const override; + + /** + * @copydoc Dali::WebEngineBackForwardList::GetItemAtIndex() + */ + std::unique_ptr GetItemAtIndex(uint32_t index) const override; + + /** + * @copydoc Dali::WebEngineBackForwardList::GetItemCount() */ uint32_t GetItemCount() const override; -private: + /** + * @copydoc Dali::WebEngineBackForwardList::GetBackwardItems() + */ + std::vector> GetBackwardItems(int limit) override; - Ewk_Back_Forward_List* ewkBackForwardList; + /** + * @copydoc Dali::WebEngineBackForwardList::GetForwardItems() + */ + std::vector> GetForwardItems(int limit) override; + +private: + Ewk_Back_Forward_List* mEwkBackForwardList; }; } // namespace Plugin } // namespace Dali diff --git a/dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp b/dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp index 5ce13a4..1ea7fd7 100755 --- a/dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp +++ b/dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp @@ -602,22 +602,24 @@ public: class NullWebEngineBackForwardList : public Dali::WebEngineBackForwardList { public: - NullWebEngineBackForwardList(WebEngineBackForwardListItem* pItem) - : item(pItem) - { - } - Dali::WebEngineBackForwardListItem& GetCurrentItem() const override + NullWebEngineBackForwardList( WebEngineBackForwardListItem* pItem ) : mItem( pItem ) { } + std::unique_ptr GetCurrentItem() const override { return NULL; } + std::unique_ptr GetPreviousItem() const override { return NULL; } + std::unique_ptr GetNextItem() const override { return NULL; } + std::unique_ptr GetItemAtIndex( uint32_t index ) const override { return NULL; } + uint32_t GetItemCount() const override { return 1; } + std::vector> GetBackwardItems(int limit) { - return *item; + std::vector> vec; + return vec; } - Dali::WebEngineBackForwardListItem& GetItemAtIndex(uint32_t index) const override + std::vector> GetForwardItems(int limit) { - return *item; + std::vector> vec; + return vec; } - uint32_t GetItemCount() const override { return 1; } - private: - WebEngineBackForwardListItem* item; + WebEngineBackForwardListItem* mItem; }; Dali::WebEngineBackForwardList& TizenWebEngineLWE::GetBackForwardList() const -- 2.7.4