/*
* Copyright (C) 2010 Juha Savolainen (juha.savolainen@weego.fi)
*
* 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 "qwkhistory.h"
#include <QSharedData>
#include <QString>
#include <QUrl>
#include "qwkhistory_p.h"
#include "WebBackForwardList.h"
#include <WebKit2/WKArray.h>
#include <WebKit2/WKRetainPtr.h>
#include "WKBackForwardList.h"
#include "WKStringQt.h"
#include "WKURL.h"
#include "WKURLQt.h"
using namespace WebKit;
QWKHistoryItemPrivate::QWKHistoryItemPrivate(WKBackForwardListItemRef listItem)
: m_backForwardListItem(listItem)
{
}
QWKHistoryItemPrivate::~QWKHistoryItemPrivate()
{
}
QWKHistoryItem::QWKHistoryItem(const QWKHistoryItem& other)
: d(other.d)
{
}
QWKHistoryItem& QWKHistoryItem::QWKHistoryItem::operator=(const QWKHistoryItem& other)
{
d = other.d;
return *this;
}
QWKHistoryItem::QWKHistoryItem(WKBackForwardListItemRef item)
: d(new QWKHistoryItemPrivate(item))
{
}
QWKHistoryItem::~QWKHistoryItem()
{
}
QString QWKHistoryItem::title() const
{
if (!d->m_backForwardListItem)
return QString();
WKRetainPtr<WKStringRef> title = WKBackForwardListItemCopyTitle(d->m_backForwardListItem.get());
return WKStringCopyQString(title.get());
}
QUrl QWKHistoryItem::url() const
{
if (!d->m_backForwardListItem)
return QUrl();
WKRetainPtr<WKURLRef> url = WKBackForwardListItemCopyURL(d->m_backForwardListItem.get());
return WKURLCopyQUrl(url.get());
}
QWKHistoryPrivate::QWKHistoryPrivate(WebKit::WebBackForwardList* list)
: m_backForwardList(list)
{
}
QWKHistory* QWKHistoryPrivate::createHistory(WebKit::WebBackForwardList* list)
{
QWKHistory* history = new QWKHistory();
history->d = new QWKHistoryPrivate(list);
return history;
}
QWKHistoryPrivate::~QWKHistoryPrivate()
{
}
QWKHistory::QWKHistory()
{
}
QWKHistory::~QWKHistory()
{
delete d;
}
int QWKHistory::backListCount() const
{
return WKBackForwardListGetBackListCount(toAPI(d->m_backForwardList));
}
int QWKHistory::forwardListCount() const
{
return WKBackForwardListGetForwardListCount(toAPI(d->m_backForwardList));
}
int QWKHistory::count() const
{
return backListCount() + forwardListCount();
}
QWKHistoryItem QWKHistory::currentItem() const
{
WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetCurrentItem(toAPI(d->m_backForwardList));
QWKHistoryItem item(itemRef.get());
return item;
}
QWKHistoryItem QWKHistory::backItem() const
{
WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetBackItem(toAPI(d->m_backForwardList));
QWKHistoryItem item(itemRef.get());
return item;
}
QWKHistoryItem QWKHistory::forwardItem() const
{
WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetForwardItem(toAPI(d->m_backForwardList));
QWKHistoryItem item(itemRef.get());
return item;
}
QWKHistoryItem QWKHistory::itemAt(int index) const
{
WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetItemAtIndex(toAPI(d->m_backForwardList), index);
QWKHistoryItem item(itemRef.get());
return item;
}
QList<QWKHistoryItem> QWKHistory::backItems(int maxItems) const
{
WKArrayRef arrayRef = WKBackForwardListCopyBackListWithLimit(toAPI(d->m_backForwardList), maxItems);
int size = WKArrayGetSize(arrayRef);
QList<QWKHistoryItem> itemList;
for (int i = 0; i < size; ++i) {
WKTypeRef wkHistoryItem = WKArrayGetItemAtIndex(arrayRef, i);
WKBackForwardListItemRef itemRef = static_cast<WKBackForwardListItemRef>(wkHistoryItem);
QWKHistoryItem item(itemRef);
itemList.append(item);
}
return itemList;
}
QList<QWKHistoryItem> QWKHistory::forwardItems(int maxItems) const
{
WKArrayRef arrayRef = WKBackForwardListCopyForwardListWithLimit(toAPI(d->m_backForwardList), maxItems);
int size = WKArrayGetSize(arrayRef);
QList<QWKHistoryItem> itemList;
for (int i = 0; i < size; ++i) {
WKTypeRef wkHistoryItem = WKArrayGetItemAtIndex(arrayRef, i);
WKBackForwardListItemRef itemRef = static_cast<WKBackForwardListItemRef>(wkHistoryItem);
QWKHistoryItem item(itemRef);
itemList.append(item);
}
return itemList;
}