#ifndef BackForwardList_h
#define BackForwardList_h
#include "BackForwardClient.h"
#include <wtf/HashSet.h>
#include <wtf/Vector.h>
namespace WebCore {
class Page;
typedef Vector<Ref<HistoryItem>> HistoryItemVector;
typedef HashSet<RefPtr<HistoryItem>> HistoryItemHashSet;
class BackForwardList : public BackForwardClient {
public:
static Ref<BackForwardList> create(Page* page) { return adoptRef(*new BackForwardList(page)); }
virtual ~BackForwardList();
Page* page() { return m_page; }
void addItem(Ref<HistoryItem>&&) override;
WEBCORE_EXPORT void goBack();
WEBCORE_EXPORT void goForward();
void goToItem(HistoryItem*) override;
WEBCORE_EXPORT HistoryItem* backItem();
WEBCORE_EXPORT HistoryItem* currentItem();
WEBCORE_EXPORT HistoryItem* forwardItem();
HistoryItem* itemAtIndex(int) override;
WEBCORE_EXPORT void backListWithLimit(int, HistoryItemVector&);
WEBCORE_EXPORT void forwardListWithLimit(int, HistoryItemVector&);
WEBCORE_EXPORT int capacity();
WEBCORE_EXPORT void setCapacity(int);
WEBCORE_EXPORT bool enabled();
WEBCORE_EXPORT void setEnabled(bool);
int backListCount() override;
int forwardListCount() override;
WEBCORE_EXPORT bool containsItem(HistoryItem*);
void close() override;
WEBCORE_EXPORT bool closed();
WEBCORE_EXPORT void removeItem(HistoryItem*);
WEBCORE_EXPORT HistoryItemVector& entries();
#if PLATFORM(IOS)
unsigned current() override;
void setCurrent(unsigned newCurrent) override;
bool clearAllPageCaches() override;
#endif
private:
WEBCORE_EXPORT explicit BackForwardList(Page*);
Page* m_page;
HistoryItemVector m_entries;
HistoryItemHashSet m_entryHash;
unsigned m_current;
unsigned m_capacity;
bool m_closed;
bool m_enabled;
};
}
#endif // BackForwardList_h