blob: dd9b4b079caf9819ab8ab1f58b92eb2824e726d7 [file] [log] [blame]
/*
* Copyright (C) 2012 Samsung Electronics
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "UnitTestUtils/EWK2UnitTestBase.h"
#include <EWebKit2.h>
#include <Ecore.h>
using namespace EWK2UnitTest;
struct OriginData {
Eina_List* originList;
Ewk_Database_Manager* manager;
bool didReceiveOriginsCallback;
bool isSynchronized;
unsigned timeoutSeconds;
OriginData()
: originList(0)
, manager(0)
, didReceiveOriginsCallback(false)
, isSynchronized(false)
, timeoutSeconds(10)
{ }
};
static void getDatabaseOriginsCallback(Eina_List* origins, Ewk_Error* error, void* userData)
{
ASSERT_FALSE(error);
OriginData* originData = static_cast<OriginData*>(userData);
originData->didReceiveOriginsCallback = true;
Eina_List* l;
void* data;
EINA_LIST_FOREACH(origins, l, data) {
originData->originList = eina_list_append(originData->originList, data);
Ewk_Security_Origin* origin = static_cast<Ewk_Security_Origin*>(data);
if (!strcmp(ewk_security_origin_protocol_get(origin), "http")
&& !strcmp(ewk_security_origin_host_get(origin), "www.databasetest.com")
&& !ewk_security_origin_port_get(origin)) {
originData->isSynchronized = true;
ecore_main_loop_quit();
}
}
}
static bool timerCallback(void* userData)
{
OriginData* originData = static_cast<OriginData*>(userData);
if (originData->isSynchronized || !--(originData->timeoutSeconds)) {
ecore_main_loop_quit();
return ECORE_CALLBACK_CANCEL;
}
if (originData->didReceiveOriginsCallback) {
originData->didReceiveOriginsCallback = false;
ewk_database_manager_origins_get(originData->manager, getDatabaseOriginsCallback, originData);
}
return ECORE_CALLBACK_RENEW;
}
TEST_F(EWK2UnitTestBase, ewk_database_manager_origins_get)
{
Evas_Object* view = webView();
const char* databaseHTML =
"<html><head><title>original title</title></head>"
"<body>"
"<script type='text/javascript'>"
" var db = openDatabase(\"DBTest\", \"1.0\", \"HTML5 Database example\", 200000);"
"</script>"
"</body></html>";
ASSERT_TRUE(ewk_view_html_string_load(view, databaseHTML, "http://www.databasetest.com", 0));
ASSERT_TRUE(waitUntilLoadFinished());
OriginData originData;
originData.manager = ewk_context_database_manager_get(ewk_view_context_get(view));
ASSERT_TRUE(ewk_database_manager_origins_get(originData.manager, getDatabaseOriginsCallback, &originData));
Ecore_Timer* database_timer = ecore_timer_add(1, reinterpret_cast<Ecore_Task_Cb>(timerCallback), &originData);
ecore_main_loop_begin();
if (database_timer)
ecore_timer_del(database_timer);
ASSERT_TRUE(originData.isSynchronized);
ASSERT_LE(1, eina_list_count(originData.originList));
}