18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This library is free software; you can redistribute it and/or
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    modify it under the terms of the GNU Library General Public
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    License as published by the Free Software Foundation; either
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    version 2 of the License, or (at your option) any later version.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This library is distributed in the hope that it will be useful,
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    but WITHOUT ANY WARRANTY; without even the implied warranty of
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Library General Public License for more details.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    You should have received a copy of the GNU Library General Public License
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    along with this library; see the file COPYING.LIB.  If not, write to
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Boston, MA 02110-1301, USA.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "qwebhistory.h"
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "qwebhistory_p.h"
23231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "qwebframe_p.h"
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
25e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "BackForwardListImpl.h"
262bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "IconDatabaseBase.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Image.h"
282bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "IntSize.h"
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "KURL.h"
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PageGroup.h"
322bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "PlatformString.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <QSharedData>
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <QDebug>
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
37cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockenum {
38cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    InitialHistoryVersion = 1,
39cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    DefaultHistoryVersion = InitialHistoryVersion
40cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block};
41cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \class QWebHistoryItem
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \since 4.4
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \brief The QWebHistoryItem class represents one item in the history of a QWebPage
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block  \inmodule QtWebKit
48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Each QWebHistoryItem instance represents an entry in the history stack of a Web page,
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  containing information about the page, its location, and when it was last visited.
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The following table shows the properties of the page held by the history item, and
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  the functions used to access them.
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \table
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \header \o Function      \o Description
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \row    \o title()       \o The page title.
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \row    \o url()         \o The location of the page.
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \row    \o originalUrl() \o The URL used to access the page.
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \row    \o lastVisited() \o The date and time of the user's last visit to the page.
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \row    \o icon()        \o The icon associated with the page that was provided by the server.
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \row    \o userData()    \o The user specific data that was stored with the history item.
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \endtable
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  \note QWebHistoryItem objects are value based, but \e{explicitly shared}. Changing
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  a QWebHistoryItem instance by calling setUserData() will change all copies of that
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  instance.
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa QWebHistory, QWebPage::history(), QWebHistoryInterface
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  Constructs a history item from \a other. The new item and \a other
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  will share their data, and modifying either this item or \a other will
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  modify both instances.
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHistoryItem::QWebHistoryItem(const QWebHistoryItem &other)
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : d(other.d)
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  Assigns the \a other history item to this. This item and \a other
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  will share their data, and modifying either this item or \a other will
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  modify both instances.
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHistoryItem &QWebHistoryItem::operator=(const QWebHistoryItem &other)
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d = other.d;
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return *this;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Destroys the history item.
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHistoryItem::~QWebHistoryItem()
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Returns the original URL associated with the history item.
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project \sa url()
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQUrl QWebHistoryItem::originalUrl() const
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->item)
108a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        return d->item->originalURL();
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QUrl();
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Returns the URL associated with the history item.
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project \sa originalUrl(), title(), lastVisited()
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQUrl QWebHistoryItem::url() const
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->item)
121a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        return d->item->url();
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QUrl();
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Returns the title of the page associated with the history item.
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project \sa icon(), url(), lastVisited()
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebHistoryItem::title() const
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->item)
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return d->item->title();
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QString();
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Returns the date and time that the page associated with the item was last visited.
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project \sa title(), icon(), url()
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQDateTime QWebHistoryItem::lastVisited() const
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //FIXME : this will be wrong unless we correctly set lastVisitedTime ourselves
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->item)
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QDateTime::fromTime_t((uint)d->item->lastVisitedTime());
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QDateTime();
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Returns the icon associated with the history item.
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project \sa title(), url(), lastVisited()
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQIcon QWebHistoryItem::icon() const
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->item)
1612bde8e466a4451c7319e3a072d118917957d6554Steve Block        return *WebCore::iconDatabase().synchronousIconForPageURL(d->item->url(), WebCore::IntSize(16, 16))->nativeImageForCurrentFrame();
1622bde8e466a4451c7319e3a072d118917957d6554Steve Block
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QIcon();
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \since 4.5
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the user specific data that was stored with the history item.
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa setUserData()
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQVariant QWebHistoryItem::userData() const
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->item)
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return d->item->userData();
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QVariant();
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \since 4.5
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
182635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Stores user specific data \a userData with the history item.
1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch \note All copies of this item will be modified.
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project \sa userData()
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebHistoryItem::setUserData(const QVariant& userData)
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->item)
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->item->setUserData(userData);
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!*
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \internal
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHistoryItem::QWebHistoryItem(QWebHistoryItemPrivate *priv)
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d = priv;
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \since 4.5
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns whether this is a valid history item.
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebHistoryItem::isValid() const
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->item;
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \class QWebHistory
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \since 4.4
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \brief The QWebHistory class represents the history of a QWebPage
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
216231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block  \inmodule QtWebKit
217231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Each QWebPage instance contains a history of visited pages that can be accessed
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  by QWebPage::history(). QWebHistory represents this history and makes it possible
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  to navigate it.
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The history uses the concept of a \e{current item}, dividing the pages visited
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  into those that can be visited by navigating \e back and \e forward using the
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  back() and forward() functions. The current item can be obtained by calling
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  currentItem(), and an arbitrary item in the history can be made the current
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  item by passing it to goToItem().
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  A list of items describing the pages that can be visited by going back can be
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  obtained by calling the backItems() function; similarly, items describing the
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  pages ahead of the current page can be obtained with the forwardItems() function.
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The total list of items is obtained with the items() function.
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Just as with containers, functions are available to examine the history in terms
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  of a list. Arbitrary items in the history can be obtained with itemAt(), the total
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  number of items is given by count(), and the history can be cleared with the
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  clear() function.
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  QWebHistory's state can be saved to a QDataStream using the >> operator and loaded
239cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  by using the << operator.
2400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa QWebHistoryItem, QWebHistoryInterface, QWebPage
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHistory::QWebHistory()
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : d(0)
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHistory::~QWebHistory()
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    delete d;
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Clears the history.
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa count(), items()
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebHistory::clear()
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
262e14391e94c850b8bd03680c23b38978db68687a8John Reck    //shortcut to private BackForwardListImpl
263e14391e94c850b8bd03680c23b38978db68687a8John Reck    WebCore::BackForwardListImpl* lst = d->lst;
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
265231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    //clear visited links
266e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(lst)->page();
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (page && page->groupPtr())
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        page->groupPtr()->removeVisitedLinks();
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
270231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    //if count() == 0 then just return
271231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!lst->entries().size())
272231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return;
273231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
274231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    RefPtr<WebCore::HistoryItem> current = lst->currentItem();
275231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    int capacity = lst->capacity();
276231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    lst->setCapacity(0);
277231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
278231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    lst->setCapacity(capacity);   //revert capacity
279231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    lst->addItem(current.get());  //insert old current item
280231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    lst->goToItem(current.get()); //and set it as current again
281231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
282231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    d->page()->updateNavigationActions();
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns a list of all items currently in the history.
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa count(), clear()
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQList<QWebHistoryItem> QWebHistory::items() const
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const WebCore::HistoryItemVector &items = d->lst->entries();
2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QList<QWebHistoryItem> ret;
295231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    for (unsigned i = 0; i < items.size(); ++i) {
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(items[i].get());
2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ret.append(QWebHistoryItem(priv));
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return ret;
3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the list of items in the backwards history list.
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  At most \a maxItems entries are returned.
3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa forwardItems()
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQList<QWebHistoryItem> QWebHistory::backItems(int maxItems) const
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::HistoryItemVector items(maxItems);
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d->lst->backListWithLimit(maxItems, items);
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QList<QWebHistoryItem> ret;
314231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    for (unsigned i = 0; i < items.size(); ++i) {
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(items[i].get());
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ret.append(QWebHistoryItem(priv));
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return ret;
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the list of items in the forward history list.
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  At most \a maxItems entries are returned.
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa backItems()
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQList<QWebHistoryItem> QWebHistory::forwardItems(int maxItems) const
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::HistoryItemVector items(maxItems);
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d->lst->forwardListWithLimit(maxItems, items);
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QList<QWebHistoryItem> ret;
333231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    for (unsigned i = 0; i < items.size(); ++i) {
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(items[i].get());
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ret.append(QWebHistoryItem(priv));
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return ret;
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns true if there is an item preceding the current item in the history;
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  otherwise returns false.
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa canGoForward()
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebHistory::canGoBack() const
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->lst->backListCount() > 0;
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns true if we have an item to go forward to; otherwise returns false.
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa canGoBack()
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebHistory::canGoForward() const
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->lst->forwardListCount() > 0;
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Set the current item to be the previous item in the history and goes to the
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  corresponding page; i.e., goes back one history item.
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa forward(), goToItem()
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebHistory::back()
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
369231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (canGoBack()) {
370e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(d->lst)->page();
37106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        page->goToItem(d->lst->backItem(), WebCore::FrameLoadTypeIndexedBackForward);
372231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Sets the current item to be the next item in the history and goes to the
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  corresponding page; i.e., goes forward one history item.
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa back(), goToItem()
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebHistory::forward()
3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
383231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (canGoForward()) {
384e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(d->lst)->page();
38506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        page->goToItem(d->lst->forwardItem(), WebCore::FrameLoadTypeIndexedBackForward);
386231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Sets the current item to be the specified \a item in the history and goes to the page.
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa back(), forward()
3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebHistory::goToItem(const QWebHistoryItem &item)
3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
396e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(d->lst)->page();
39706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    page->goToItem(item.d->item, WebCore::FrameLoadTypeIndexedBackForward);
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the item before the current item in the history.
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHistoryItem QWebHistory::backItem() const
4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::HistoryItem *i = d->lst->backItem();
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(i);
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QWebHistoryItem(priv);
4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the current item in the history.
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHistoryItem QWebHistory::currentItem() const
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::HistoryItem *i = d->lst->currentItem();
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(i);
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QWebHistoryItem(priv);
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the item after the current item in the history.
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHistoryItem QWebHistory::forwardItem() const
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::HistoryItem *i = d->lst->forwardItem();
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(i);
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QWebHistoryItem(priv);
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \since 4.5
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the index of the current item in history.
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint QWebHistory::currentItemIndex() const
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->lst->backListCount();
4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the item at index \a i in the history.
4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHistoryItem QWebHistory::itemAt(int i) const
4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebHistoryItemPrivate *priv;
4450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (i < 0 || i >= count())
4460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        priv = new QWebHistoryItemPrivate(0);
4470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    else {
4480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        WebCore::HistoryItem *item = d->lst->entries()[i].get();
4490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        priv = new QWebHistoryItemPrivate(item);
4500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QWebHistoryItem(priv);
4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the total number of items in the history.
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint QWebHistory::count() const
4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->lst->entries().size();
4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \since 4.5
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the maximum number of items in the history.
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa setMaximumItemCount()
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint QWebHistory::maximumItemCount() const
4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->lst->capacity();
4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \since 4.5
475635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  Sets the maximum number of items in the history to \a count.
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa maximumItemCount()
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebHistory::setMaximumItemCount(int count)
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d->lst->setCapacity(count);
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
485cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  \since 4.6
486cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  \fn QDataStream& operator<<(QDataStream& stream, const QWebHistory& history)
487cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  \relates QWebHistory
4880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
489cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  \brief The operator<< function streams a history into a data stream.
4900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
491cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  It saves the \a history into the specified \a stream.
4920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
4930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
494cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQDataStream& operator<<(QDataStream& target, const QWebHistory& history)
495cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{
496cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebHistoryPrivate* d = history.d;
497cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
498cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    int version = DefaultHistoryVersion;
499cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
500643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    target << version;
501643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    target << history.count() << history.currentItemIndex();
502cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
503cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    const WebCore::HistoryItemVector &items = d->lst->entries();
504cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    for (unsigned i = 0; i < items.size(); i++)
505643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        items[i].get()->saveState(target, version);
506cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
507643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return target;
508cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}
509cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
5100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
511cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  \fn QDataStream& operator>>(QDataStream& stream, QWebHistory& history)
512cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  \relates QWebHistory
5130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  \since 4.6
5140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
515cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  \brief The operator>> function loads a history from a data stream.
5160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
517cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  Loads a QWebHistory from the specified \a stream into the given \a history.
5180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
519cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
520cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQDataStream& operator>>(QDataStream& source, QWebHistory& history)
5210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
522cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebHistoryPrivate* d = history.d;
523cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
5240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    int version;
525cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
526643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    source >> version;
5270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
528cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    if (version == 1) {
5290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        int count;
5300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        int currentIndex;
531643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        source >> count >> currentIndex;
5320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
533cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        history.clear();
5340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // only if there are elements
5350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if (count) {
5360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            // after clear() is new clear HistoryItem (at the end we had to remove it)
537cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            WebCore::HistoryItem* nullItem = d->lst->currentItem();
538cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            for (int i = 0; i < count; i++) {
5390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                WTF::PassRefPtr<WebCore::HistoryItem> item = WebCore::HistoryItem::create();
540643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                item->restoreState(source, version);
5410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                d->lst->addItem(item);
5420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            }
5430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            d->lst->removeItem(nullItem);
544e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block            // Update the HistoryController.
545e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            static_cast<WebCore::BackForwardListImpl*>(history.d->lst)->page()->mainFrame()->loader()->history()->setCurrentItem(history.d->lst->entries()[currentIndex].get());
546cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            history.goToItem(history.itemAt(currentIndex));
5470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
5480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
5490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
550231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    d->page()->updateNavigationActions();
551231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
552cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    return source;
5530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
555231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockQWebPagePrivate* QWebHistoryPrivate::page()
556231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
557e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return QWebFramePrivate::kit(static_cast<WebCore::BackForwardListImpl*>(lst)->page()->mainFrame())->page()->handle();
558231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
559545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
560e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockWebCore::HistoryItem* QWebHistoryItemPrivate::core(const QWebHistoryItem* q)
561545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
562545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    return q->d->item;
563545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
564