/* * 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; }