blob: 125b12847d039d3a263ff1e9dd89af154676da86 [file] [log] [blame]
/*
* Copyright (C) 2011 ProFUSION Embedded Systems
* Copyright (C) 2011 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 "DumpHistoryItem.h"
#include "DumpRenderTree.h"
#include "DumpRenderTreeChrome.h"
#include "WebCoreSupport/DumpRenderTreeSupportEfl.h"
#include "ewk_private.h"
#include <EWebKit.h>
#include <algorithm>
#include <cstdio>
#include <wtf/HashMap.h>
#include <wtf/OwnPtr.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
Ewk_History_Item* prevTestBFItem = 0;
const unsigned historyItemIndent = 8;
static bool compareHistoryItemsByTarget(const Ewk_History_Item* item1, const Ewk_History_Item* item2)
{
return WTF::codePointCompare(DumpRenderTreeSupportEfl::historyItemTarget(item1),
DumpRenderTreeSupportEfl::historyItemTarget(item2)) < 1;
}
static void dumpHistoryItem(const Ewk_History_Item* item, int indent, bool current)
{
ASSERT(item);
int start = 0;
if (current) {
printf("curr->");
start = 6;
}
for (int i = start; i < indent; i++)
putchar(' ');
// normalize file URLs.
const char* uri = ewk_history_item_uri_get(item);
if (!strncasecmp(uri, "file://", sizeof("file://") - 1)) {
const char* pos = strstr(uri, "/LayoutTests/");
if (!pos)
return;
printf("(file test):%s", pos + sizeof("/LayoutTests/") - 1);
} else
printf("%s", uri);
const String target = DumpRenderTreeSupportEfl::historyItemTarget(item);
if (!target.isEmpty())
printf(" (in frame \"%s\")", target.utf8().data());
if (DumpRenderTreeSupportEfl::isTargetItem(item))
printf(" **nav target**");
putchar('\n');
HistoryItemChildrenVector children = DumpRenderTreeSupportEfl::childHistoryItems(item);
// Must sort to eliminate arbitrary result ordering which defeats reproducible testing.
std::stable_sort(children.begin(), children.end(), compareHistoryItemsByTarget);
const size_t size = children.size();
for (size_t i = 0; i < size; ++i)
dumpHistoryItem(children[i], indent + 4, false);
}
static void dumpBackForwardListForWebView(Evas_Object* view)
{
printf("\n============== Back Forward List ==============\n");
const Ewk_History* history = ewk_view_history_get(view);
// Print out all items in the list after prevTestBFItem, which was from the previous test
// Gather items from the end of the list, the print them out from oldest to newest
Eina_List* itemsToPrint = 0;
void* historyItem;
Eina_List* backwardList = ewk_history_back_list_get(history);
EINA_LIST_FREE(backwardList, historyItem) {
if (historyItem == prevTestBFItem) {
eina_list_free(backwardList);
break;
}
itemsToPrint = eina_list_append(itemsToPrint, historyItem);
}
const Ewk_History_Item* currentItem = ewk_history_history_item_current_get(history);
if (currentItem)
itemsToPrint = eina_list_append(itemsToPrint, currentItem);
Eina_List* forwardList = ewk_history_forward_list_get(history);
EINA_LIST_FREE(forwardList, historyItem) {
ASSERT(historyItem != prevTestBFItem);
itemsToPrint = eina_list_append(itemsToPrint, historyItem);
}
EINA_LIST_FREE(itemsToPrint, historyItem) {
dumpHistoryItem(static_cast<Ewk_History_Item*>(historyItem), historyItemIndent, historyItem == currentItem);
ewk_history_item_free(static_cast<Ewk_History_Item*>(historyItem));
}
printf("===============================================\n");
}
void dumpBackForwardListForWebViews()
{
// Dump the back forward list of the main WebView first
dumpBackForwardListForWebView(browser->mainView());
Vector<Evas_Object*>::const_iterator it = browser->extraViews().begin();
for (; it != browser->extraViews().end(); ++it)
dumpBackForwardListForWebView(*it);
}