/* * 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 #include #include #include #include #include #include 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(historyItem), historyItemIndent, historyItem == currentItem); ewk_history_item_free(static_cast(historyItem)); } printf("===============================================\n"); } void dumpBackForwardListForWebViews() { // Dump the back forward list of the main WebView first dumpBackForwardListForWebView(browser->mainView()); Vector::const_iterator it = browser->extraViews().begin(); for (; it != browser->extraViews().end(); ++it) dumpBackForwardListForWebView(*it); }