ewk_database_manager.cpp [plain text]
#include "config.h"
#include "ewk_database_manager.h"
#include "WKAPICast.h"
#include "WKArray.h"
#include "ewk_database_manager_private.h"
#include "ewk_security_origin_private.h"
using namespace WebKit;
EwkDatabaseManager::EwkDatabaseManager(WKDatabaseManagerRef databaseManager)
: m_databaseManager(databaseManager)
{
ASSERT(databaseManager);
}
void EwkDatabaseManager::getDatabaseOrigins(WKDatabaseManagerGetDatabaseOriginsFunction callback, void* context) const
{
WKDatabaseManagerGetDatabaseOrigins(m_databaseManager.get(), context, callback);
}
Eina_List* EwkDatabaseManager::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 EwkDatabaseOriginsAsyncData {
const Ewk_Database_Manager* manager;
Ewk_Database_Origins_Async_Get_Cb callback;
void* userData;
EwkDatabaseOriginsAsyncData(const Ewk_Database_Manager* manager, Ewk_Database_Origins_Async_Get_Cb callback, void* userData)
: manager(manager)
, callback(callback)
, userData(userData)
{ }
};
static void getDatabaseOriginsCallback(WKArrayRef origins, WKErrorRef, void* context)
{
auto webDatabaseContext = std::unique_ptr<EwkDatabaseOriginsAsyncData>(static_cast<EwkDatabaseOriginsAsyncData*>(context));
Eina_List* originList = webDatabaseContext->manager->createOriginList(origins);
webDatabaseContext->callback(originList, webDatabaseContext->userData);
}
Eina_Bool ewk_database_manager_origins_async_get(const Ewk_Database_Manager* ewkDatabaseManager, Ewk_Database_Origins_Async_Get_Cb callback, void* userData)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(ewkDatabaseManager, false);
EINA_SAFETY_ON_NULL_RETURN_VAL(callback, false);
EwkDatabaseOriginsAsyncData* context = new EwkDatabaseOriginsAsyncData(ewkDatabaseManager, callback, userData);
ewkDatabaseManager->getDatabaseOrigins(getDatabaseOriginsCallback, context);
return true;
}