Changeset 166565 in webkit


Ignore:
Timestamp:
Mar 31, 2014 11:01:28 PM (10 years ago)
Author:
commit-queue@webkit.org
Message:

[EFL][WK2]Implement ewk APIs of web local storage which have deletion functions of the local storage entries
https://bugs.webkit.org/show_bug.cgi?id=130577

Patch by Joonghun Park <jh718.park@samsung.com> on 2014-03-31
Reviewed by Gyuyoung Kim.

  • UIProcess/API/efl/ewk_storage_manager.cpp:

(ewk_storage_manager_entries_clear):
(ewk_storage_manager_entries_for_origin_del):

  • UIProcess/API/efl/ewk_storage_manager.h:
  • UIProcess/API/efl/ewk_storage_manager_private.h:

(EwkStorageManager::wkStorageManager):

  • UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:

adding and updating API unittest and fixing memory leak of the existing test case
(EWK2StorageManagerTest::getStorageOriginsCallback):
(EWK2StorageManagerTest::checkOrigin):
(EWK2StorageManagerTest::getOrigin):
(TEST_F):

Location:
trunk/Source/WebKit2
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r166560 r166565  
     12014-03-31  Joonghun Park  <jh718.park@samsung.com>
     2
     3        [EFL][WK2]Implement ewk APIs of web local storage which have deletion functions of the local storage entries
     4        https://bugs.webkit.org/show_bug.cgi?id=130577
     5
     6        Reviewed by Gyuyoung Kim.
     7
     8        * UIProcess/API/efl/ewk_storage_manager.cpp:
     9        (ewk_storage_manager_entries_clear):
     10        (ewk_storage_manager_entries_for_origin_del):
     11        * UIProcess/API/efl/ewk_storage_manager.h:
     12        * UIProcess/API/efl/ewk_storage_manager_private.h:
     13        (EwkStorageManager::wkStorageManager):
     14        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
     15        adding and updating API unittest and fixing memory leak of the existing test case
     16        (EWK2StorageManagerTest::getStorageOriginsCallback):
     17        (EWK2StorageManagerTest::checkOrigin):
     18        (EWK2StorageManagerTest::getOrigin):
     19        (TEST_F):
     20
    1212014-03-31  Anders Carlsson  <andersca@apple.com>
    222
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.cpp

    r166051 r166565  
    2929#include "WKAPICast.h"
    3030#include "WKArray.h"
     31#include "WKSecurityOrigin.h"
     32#include "WKString.h"
    3133#include "ewk_security_origin_private.h"
    3234#include "ewk_storage_manager_private.h"
     
    9597    return true;
    9698}
     99
     100Eina_Bool ewk_storage_manager_entries_clear(Ewk_Storage_Manager* ewkStorageManager)
     101{
     102    EINA_SAFETY_ON_NULL_RETURN_VAL(ewkStorageManager, false);
     103
     104    WKKeyValueStorageManagerDeleteAllEntries(ewkStorageManager->wkStorageManager().get());
     105
     106    return true;
     107}
     108
     109Eina_Bool ewk_storage_manager_entries_for_origin_del(Ewk_Storage_Manager* ewkStorageManager, Ewk_Security_Origin* origin)
     110{
     111    EINA_SAFETY_ON_NULL_RETURN_VAL(ewkStorageManager, false);
     112    EWK_OBJ_GET_IMPL_OR_RETURN(EwkSecurityOrigin, origin, impl, false);
     113
     114    WKKeyValueStorageManagerDeleteEntriesForOrigin(ewkStorageManager->wkStorageManager().get(), impl->wkSecurityOrigin());
     115
     116    return true;
     117}
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_storage_manager.h

    r166051 r166565  
    3434#define ewk_storage_manager_h
    3535
     36#include "ewk_security_origin.h"
    3637#include <Eina.h>
    3738
     
    8182EAPI Eina_Bool ewk_storage_manager_origins_async_get(const Ewk_Storage_Manager *manager, Ewk_Storage_Origins_Async_Get_Cb callback, void *user_data);
    8283
     84/**
     85 * Deletes all local storage.
     86 *
     87 * @param manager Ewk_Storage_Manager object
     88 *
     89 * @return @c EINA_TRUE on success, @c EINA_FALSE on failure
     90 */
     91EAPI Eina_Bool ewk_storage_manager_entries_clear(Ewk_Storage_Manager *manager);
     92
     93/**
     94 * Deletes local storage for the specified origin.
     95 *
     96 * @param manager Ewk_Storage_Manager object
     97 * @param origin security origin
     98 *
     99 * @return @c EINA_TRUE on success, @c EINA_FALSE on failure
     100 */
     101EAPI Eina_Bool ewk_storage_manager_entries_for_origin_del(Ewk_Storage_Manager *manager, Ewk_Security_Origin *origin);
     102
    83103#ifdef __cplusplus
    84104}
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_storage_manager_private.h

    r159190 r166565  
    4040    Eina_List* createOriginList(WKArrayRef wkList) const;
    4141    void getStorageOrigins(void* context, WKKeyValueStorageManagerGetKeyValueStorageOriginsFunction callback) const;
     42    WKRetainPtr<WKKeyValueStorageManagerRef> wkStorageManager() { return m_storageManager; }
    4243
    4344private:
  • trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp

    r166051 r166565  
    3030using namespace EWK2UnitTest;
    3131
     32static const char storageHTML[] =
     33    "<html><head><title>original title</title></head>"
     34    "<body>"
     35    "<script type='text/javascript'>"
     36    " localStorage.setItem('item', 'storage');"
     37    "</script>"
     38    "</body></html>";
     39
    3240class EWK2StorageManagerTest : public EWK2UnitTestBase {
    3341public:
     
    5664        void* data;
    5765        EINA_LIST_FOREACH(origins, l, data) {
    58             originData->originList = eina_list_append(originData->originList, data);
    5966            Ewk_Security_Origin* origin = static_cast<Ewk_Security_Origin*>(data);
    6067            if (!strcmp(ewk_security_origin_protocol_get(origin), "http")
    6168                && !strcmp(ewk_security_origin_host_get(origin), "www.storagetest.com")
    6269                && !ewk_security_origin_port_get(origin)) {
     70                    originData->originList = origins;
    6371                    originData->isSynchronized = true;
    64                     ecore_main_loop_quit();
     72                    return;
    6573            }
    6674        }
     75        void* originItem;
     76        EINA_LIST_FREE(origins, originItem)
     77            ewk_object_unref(static_cast<Ewk_Object*>(originItem));
    6778    }
    6879
     
    8596
    8697protected:
    87     bool checkOrigin(Eina_List* origins, Ewk_Security_Origin** origin)
     98    bool checkOrigin(Eina_List* origins, Ewk_Security_Origin** origin, const char* protocol, const char* host, uint32_t port)
    8899    {
    89100        Eina_List* l;
     
    91102        EINA_LIST_FOREACH(origins, l, data) {
    92103            *origin = static_cast<Ewk_Security_Origin*>(data);
    93             if (!strcmp(ewk_security_origin_protocol_get(*origin), "http")
    94                 && !strcmp(ewk_security_origin_host_get(*origin), "www.storagetest.com")
     104            if (!strcmp(ewk_security_origin_protocol_get(*origin), protocol)
     105                && !strcmp(ewk_security_origin_host_get(*origin), host)
    95106                && !ewk_security_origin_port_get(*origin))
    96107                return true;
     
    98109
    99110        return false;
     111    }
     112
     113    Ewk_Security_Origin* getOrigin(Eina_List* origins, Ewk_Security_Origin** origin, const char* protocol, const char* host, uint32_t port)
     114    {
     115        Eina_List* l;
     116        void* data;
     117        EINA_LIST_FOREACH(origins, l, data) {
     118            *origin = static_cast<Ewk_Security_Origin*>(data);
     119            if (!strcmp(ewk_security_origin_protocol_get(*origin), protocol)
     120                && !strcmp(ewk_security_origin_host_get(*origin), host)
     121                && !ewk_security_origin_port_get(*origin)) {
     122                return *origin;
     123            }
     124        }
     125
     126        return nullptr;
    100127    }
    101128};
     
    104131{
    105132    Evas_Object* view = webView();
    106     const char* storageHTML =
    107         "<html><head><title>original title</title></head>"
    108         "<body>"
    109         "<script type='text/javascript'>"
    110         " localStorage.setItem('item', 'storage');"
    111         "</script>"
    112         "</body></html>";
    113 
    114     ewk_view_html_string_load(view, storageHTML, "http://www.storagetest.com", 0);
    115133
    116134    OriginData originData;
    117135    originData.manager = ewk_context_storage_manager_get(ewk_view_context_get(view));
     136    ewk_storage_manager_entries_clear(originData.manager);
     137
     138    ewk_view_html_string_load(view, storageHTML, "http://www.storagetest.com", 0);
     139    ASSERT_TRUE(waitUntilLoadFinished());
     140
    118141    ASSERT_TRUE(ewk_storage_manager_origins_async_get(originData.manager, getStorageOriginsCallback, &originData));
    119     Ecore_Timer* storage_timer = ecore_timer_add(1, reinterpret_cast<Ecore_Task_Cb>(timerCallback), &originData);
     142    Ecore_Timer* storageTimer = ecore_timer_add(1, reinterpret_cast<Ecore_Task_Cb>(timerCallback), &originData);
    120143
    121144    ecore_main_loop_begin();
    122     if (storage_timer)
    123         ecore_timer_del(storage_timer);
     145    storageTimer = nullptr;
    124146
    125147    ASSERT_TRUE(originData.isSynchronized);
    126     ASSERT_LE(1, eina_list_count(originData.originList));
    127 
     148    ASSERT_EQ(1, eina_list_count(originData.originList));
     149
     150    void* originItem;
     151    EINA_LIST_FREE(originData.originList, originItem)
     152        ewk_object_unref(static_cast<Ewk_Object*>(originItem));
     153}
     154
     155TEST_F(EWK2StorageManagerTest, ewk_storage_manager_entries_for_origin_delete)
     156{
     157    Evas_Object* view = webView();
     158
     159    OriginData originData;
     160    originData.manager = ewk_context_storage_manager_get(ewk_view_context_get(view));
     161    ewk_storage_manager_entries_clear(originData.manager);
     162
     163    ewk_view_html_string_load(view, storageHTML, "http://www.storagetest1.com", 0);
     164    ASSERT_TRUE(waitUntilLoadFinished());
     165    ewk_view_html_string_load(view, storageHTML, "http://www.storagetest2.com", 0);
     166    ASSERT_TRUE(waitUntilLoadFinished());
     167    ewk_view_html_string_load(view, storageHTML, "http://www.storagetest.com", 0);
     168    ASSERT_TRUE(waitUntilLoadFinished());
     169
     170    ASSERT_TRUE(ewk_storage_manager_origins_async_get(originData.manager, getStorageOriginsCallback, &originData));
     171    Ecore_Timer* storageTimer = ecore_timer_add(1, reinterpret_cast<Ecore_Task_Cb>(timerCallback), &originData);
     172
     173    ecore_main_loop_begin();
     174    storageTimer = nullptr;
     175
     176    ASSERT_TRUE(originData.isSynchronized);
    128177    Ewk_Security_Origin* origin = 0;
    129     EXPECT_TRUE(checkOrigin(originData.originList, &origin));
    130 
    131     EXPECT_EQ(origin, ewk_object_ref(origin));
    132     ewk_object_unref(origin);
     178    ASSERT_TRUE(checkOrigin(originData.originList, &origin, "http", "www.storagetest1.com", 0));
     179    ASSERT_EQ(3, eina_list_count(originData.originList));
     180
     181    ewk_storage_manager_entries_for_origin_del(originData.manager, getOrigin(originData.originList, &origin, "http", "www.storagetest1.com", 0));
     182
     183    void* originItem;
     184    EINA_LIST_FREE(originData.originList, originItem)
     185        ewk_object_unref(static_cast<Ewk_Object*>(originItem));
     186
     187    ASSERT_TRUE(ewk_storage_manager_origins_async_get(originData.manager, getStorageOriginsCallback, &originData));
     188
     189    storageTimer = ecore_timer_add(1, reinterpret_cast<Ecore_Task_Cb>(timerCallback), &originData);
     190
     191    ecore_main_loop_begin();
     192    storageTimer = nullptr;
     193
     194    ASSERT_TRUE(originData.isSynchronized);
     195    ASSERT_EQ(2, eina_list_count(originData.originList));
     196    ASSERT_FALSE(checkOrigin(originData.originList, &origin, "http", "www.storagetest1.com", 0));
     197
     198    EINA_LIST_FREE(originData.originList, originItem)
     199        ewk_object_unref(static_cast<Ewk_Object*>(originItem));
    133200}
Note: See TracChangeset for help on using the changeset viewer.