165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/*
265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without
565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met:
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer.
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    documentation and/or other materials provided with the distribution.
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE.
2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "config.h"
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebBackForwardListProxy.h"
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "DataReference.h"
3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "EncoderAdapter.h"
3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebCoreArgumentCoders.h"
3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPage.h"
3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageProxyMessages.h"
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcess.h"
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessProxyMessages.h"
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/HistoryItem.h>
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/HashMap.h>
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore;
4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit {
4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const unsigned DefaultCapacity = 100;
4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const unsigned NoCurrentItemIndex = UINT_MAX;
4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// FIXME <rdar://problem/8819268>: This leaks all HistoryItems that go into these maps.
4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// We need to clear up the life time of these objects.
4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochtypedef HashMap<uint64_t, RefPtr<HistoryItem> > IDToHistoryItemMap;
5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochtypedef HashMap<RefPtr<HistoryItem>, uint64_t> HistoryItemToIDMap;
5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic IDToHistoryItemMap& idToHistoryItemMap()
5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    DEFINE_STATIC_LOCAL(IDToHistoryItemMap, map, ());
5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return map;
5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic HistoryItemToIDMap& historyItemToIDMap()
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    DEFINE_STATIC_LOCAL(HistoryItemToIDMap, map, ());
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return map;
6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic uint64_t uniqueHistoryItemID = 1;
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic uint64_t generateHistoryItemID()
6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // These IDs exist in the WebProcess for items created by the WebProcess.
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // The IDs generated here need to never collide with the IDs created in WebBackForwardList in the UIProcess.
7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // We accomplish this by starting from 3, and only ever using odd ids.
7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uniqueHistoryItemID += 2;
7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return uniqueHistoryItemID;
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebBackForwardListProxy::setHighestItemIDFromUIProcess(uint64_t itemID)
7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (itemID <= uniqueHistoryItemID)
7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch     if (itemID % 2)
8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch         uniqueHistoryItemID = itemID;
8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch     else
8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch         uniqueHistoryItemID = itemID + 1;
8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void updateBackForwardItem(uint64_t itemID, HistoryItem* item)
8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    EncoderAdapter encoder;
8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    item->encodeBackForwardTree(encoder);
9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebProcess::shared().connection()->send(Messages::WebProcessProxy::AddBackForwardItem(itemID,
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        item->originalURLString(), item->urlString(), item->title(), encoder.data()), 0);
9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebBackForwardListProxy::addItemFromUIProcess(uint64_t itemID, PassRefPtr<WebCore::HistoryItem> prpItem)
9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<HistoryItem> item = prpItem;
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // This item/itemID pair should not already exist in our maps.
10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(!historyItemToIDMap().contains(item.get()));
10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(!idToHistoryItemMap().contains(itemID));
10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    historyItemToIDMap().set(item, itemID);
10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    idToHistoryItemMap().set(itemID, item);
10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void WK2NotifyHistoryItemChanged(HistoryItem* item)
10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t itemID = historyItemToIDMap().get(item);
11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!itemID)
11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    updateBackForwardItem(itemID, item);
11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochHistoryItem* WebBackForwardListProxy::itemForID(uint64_t itemID)
11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return idToHistoryItemMap().get(itemID).get();
11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochuint64_t WebBackForwardListProxy::idForItem(HistoryItem* item)
12281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
12381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    ASSERT(item);
12481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return historyItemToIDMap().get(item);
12581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
12681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebBackForwardListProxy::removeItem(uint64_t itemID)
12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    IDToHistoryItemMap::iterator it = idToHistoryItemMap().find(itemID);
13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (it == idToHistoryItemMap().end())
13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    historyItemToIDMap().remove(it->second);
13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    idToHistoryItemMap().remove(it);
13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebBackForwardListProxy::WebBackForwardListProxy(WebPage* page)
13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    : m_page(page)
13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebCore::notifyHistoryItemChanged = WK2NotifyHistoryItemChanged;
14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebBackForwardListProxy::addItem(PassRefPtr<HistoryItem> prpItem)
14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<HistoryItem> item = prpItem;
14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(!historyItemToIDMap().contains(item));
14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_page)
14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t itemID = generateHistoryItemID();
15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(!idToHistoryItemMap().contains(itemID));
15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    historyItemToIDMap().set(item, itemID);
15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    idToHistoryItemMap().set(itemID, item);
15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    updateBackForwardItem(itemID, item.get());
15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->send(Messages::WebPageProxy::BackForwardAddItem(itemID));
16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebBackForwardListProxy::goToItem(HistoryItem* item)
16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_page)
16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->send(Messages::WebPageProxy::BackForwardGoToItem(historyItemToIDMap().get(item)));
16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochHistoryItem* WebBackForwardListProxy::itemAtIndex(int itemIndex)
17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_page)
17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t itemID = 0;
17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!WebProcess::shared().connection()->sendSync(Messages::WebPageProxy::BackForwardItemAtIndex(itemIndex), Messages::WebPageProxy::BackForwardItemAtIndex::Reply(itemID), m_page->pageID()))
17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!itemID)
18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return idToHistoryItemMap().get(itemID).get();
18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochint WebBackForwardListProxy::backListCount()
18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_page)
18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    int backListCount = 0;
19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!WebProcess::shared().connection()->sendSync(Messages::WebPageProxy::BackForwardBackListCount(), Messages::WebPageProxy::BackForwardBackListCount::Reply(backListCount), m_page->pageID()))
19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return backListCount;
19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochint WebBackForwardListProxy::forwardListCount()
19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_page)
20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    int forwardListCount = 0;
20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!WebProcess::shared().connection()->sendSync(Messages::WebPageProxy::BackForwardForwardListCount(), Messages::WebPageProxy::BackForwardForwardListCount::Reply(forwardListCount), m_page->pageID()))
20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return forwardListCount;
20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebBackForwardListProxy::close()
21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page = 0;
21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebBackForwardListProxy::isActive()
21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: Should check the the list is enabled and has non-zero capacity.
21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebBackForwardListProxy::clear()
22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->send(Messages::WebPageProxy::BackForwardClear());
22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(WML)
22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebBackForwardListProxy::clearWMLPageHistory()
22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit
232