ewk_storage_manager.cpp [plain text]
#include "config.h"
#include "ewk_storage_manager.h"
#include "WKAPICast.h"
#include "WKArray.h"
#include "ewk_error_private.h"
#include "ewk_security_origin_private.h"
#include "ewk_storage_manager_private.h"
using namespace WebKit;
EwkStorageManager::EwkStorageManager(WKKeyValueStorageManagerRef storageManager)
: m_storageManager(storageManager)
{
ASSERT(storageManager);
}
void EwkStorageManager::getStorageOrigins(void* context, WKKeyValueStorageManagerGetKeyValueStorageOriginsFunction callback) const
{
WKKeyValueStorageManagerGetKeyValueStorageOrigins(m_storageManager.get(), context, callback);
}
Eina_List* EwkStorageManager::createOriginList(WKArrayRef origins) const
{
Eina_List* originList = 0;
const size_t length = WKArrayGetSize(origins);
for (size_t i = 0; i < length; ++i) {
WKSecurityOriginRef wkOriginRef = static_cast<WKSecurityOriginRef>(WKArrayGetItemAtIndex(origins, i));
RefPtr<EwkSecurityOrigin> origin = m_wrapperCache.get(wkOriginRef);
if (!origin) {
origin = EwkSecurityOrigin::create(wkOriginRef);
m_wrapperCache.set(wkOriginRef, origin);
}
originList = eina_list_append(originList, origin.release().leakRef());
}
return originList;
}
struct Ewk_Storage_Origins_Async_Get_Context {
const Ewk_Storage_Manager* manager;
Ewk_Storage_Origins_Get_Cb callback;
void* userData;
Ewk_Storage_Origins_Async_Get_Context(const Ewk_Storage_Manager* manager, Ewk_Storage_Origins_Get_Cb callback, void* userData)
: manager(manager)
, callback(callback)
, userData(userData)
{ }
};
static void getStorageOriginsCallback(WKArrayRef origins, WKErrorRef wkError, void* context)
{
Eina_List* originList = 0;
OwnPtr<Ewk_Storage_Origins_Async_Get_Context*> webStorageContext = adoptPtr(static_cast<Ewk_Storage_Origins_Async_Get_Context*>(context));
originList = webStorageContext->manager->createOriginList(origins);
OwnPtr<EwkError> ewkError = EwkError::create(wkError);
webStorageContext->callback(originList, ewkError.get(), webStorageContext->userData);
}
Eina_Bool ewk_storage_manager_origins_get(const Ewk_Storage_Manager* ewkStorageManager, Ewk_Storage_Origins_Get_Cb callback, void* userData)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ewkStorageManager, false);
EINA_SAFETY_ON_NULL_RETURN_VAL(callback, false);
Ewk_Storage_Origins_Async_Get_Context* context = new Ewk_Storage_Origins_Async_Get_Context(ewkStorageManager, callback, userData);
ewkStorageManager->getStorageOrigins(context, getStorageOriginsCallback);
return true;
}