summaryrefslogtreecommitdiff
path: root/Tools/DumpRenderTree/efl/DumpHistoryItem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/DumpRenderTree/efl/DumpHistoryItem.cpp')
-rw-r--r--Tools/DumpRenderTree/efl/DumpHistoryItem.cpp134
1 files changed, 134 insertions, 0 deletions
diff --git a/Tools/DumpRenderTree/efl/DumpHistoryItem.cpp b/Tools/DumpRenderTree/efl/DumpHistoryItem.cpp
new file mode 100644
index 000000000..125b12847
--- /dev/null
+++ b/Tools/DumpRenderTree/efl/DumpHistoryItem.cpp
@@ -0,0 +1,134 @@
+/*
+ * 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);
+}