static void dumpBackForwardList(IWebView* webView) { ASSERT(webView); printf("\n============== Back Forward List ==============\n"); COMPtr<IWebBackForwardList> bfList; if (FAILED(webView->backForwardList(&bfList))) return; // 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 Vector<COMPtr<IUnknown> > itemsToPrint; int forwardListCount; if (FAILED(bfList->forwardListCount(&forwardListCount))) return; for (int i = forwardListCount; i > 0; --i) { COMPtr<IWebHistoryItem> item; if (FAILED(bfList->itemAtIndex(i, &item))) return; // something is wrong if the item from the last test is in the forward part of the b/f list assert(item != prevTestBFItem); COMPtr<IUnknown> itemUnknown; item->QueryInterface(&itemUnknown); itemsToPrint.append(itemUnknown); } COMPtr<IWebHistoryItem> currentItem; if (FAILED(bfList->currentItem(¤tItem))) return; assert(currentItem != prevTestBFItem); COMPtr<IUnknown> currentItemUnknown; currentItem->QueryInterface(¤tItemUnknown); itemsToPrint.append(currentItemUnknown); int currentItemIndex = itemsToPrint.size() - 1; int backListCount; if (FAILED(bfList->backListCount(&backListCount))) return; for (int i = -1; i >= -backListCount; --i) { COMPtr<IWebHistoryItem> item; if (FAILED(bfList->itemAtIndex(i, &item))) return; if (item == prevTestBFItem) break; COMPtr<IUnknown> itemUnknown; item->QueryInterface(&itemUnknown); itemsToPrint.append(itemUnknown); } for (int i = itemsToPrint.size() - 1; i >= 0; --i) { COMPtr<IWebHistoryItem> historyItemToPrint; itemsToPrint[i]->QueryInterface(&historyItemToPrint); dumpHistoryItem(historyItemToPrint.get(), 8, i == currentItemIndex); } printf("===============================================\n"); }