1 /* 2 * Copyright (C) 2010 Juha Savolainen (juha.savolainen (at) weego.fi) 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 */ 24 25 #include "config.h" 26 #include "qwkhistory.h" 27 28 #include <QSharedData> 29 #include <QString> 30 #include <QUrl> 31 #include "qwkhistory_p.h" 32 #include "WebBackForwardList.h" 33 #include <WebKit2/WKArray.h> 34 #include <WebKit2/WKRetainPtr.h> 35 #include "WKBackForwardList.h" 36 #include "WKStringQt.h" 37 #include "WKURL.h" 38 #include "WKURLQt.h" 39 40 using namespace WebKit; 41 42 QWKHistoryItemPrivate::QWKHistoryItemPrivate(WKBackForwardListItemRef listItem) 43 : m_backForwardListItem(listItem) 44 { 45 } 46 47 QWKHistoryItemPrivate::~QWKHistoryItemPrivate() 48 { 49 } 50 51 QWKHistoryItem::QWKHistoryItem(const QWKHistoryItem& other) 52 : d(other.d) 53 { 54 } 55 56 QWKHistoryItem& QWKHistoryItem::QWKHistoryItem::operator=(const QWKHistoryItem& other) 57 { 58 d = other.d; 59 return *this; 60 } 61 62 QWKHistoryItem::QWKHistoryItem(WKBackForwardListItemRef item) 63 : d(new QWKHistoryItemPrivate(item)) 64 { 65 } 66 67 QWKHistoryItem::~QWKHistoryItem() 68 { 69 } 70 71 QString QWKHistoryItem::title() const 72 { 73 if (!d->m_backForwardListItem) 74 return QString(); 75 WKRetainPtr<WKStringRef> title = WKBackForwardListItemCopyTitle(d->m_backForwardListItem.get()); 76 return WKStringCopyQString(title.get()); 77 } 78 79 QUrl QWKHistoryItem::url() const 80 { 81 if (!d->m_backForwardListItem) 82 return QUrl(); 83 WKRetainPtr<WKURLRef> url = WKBackForwardListItemCopyURL(d->m_backForwardListItem.get()); 84 return WKURLCopyQUrl(url.get()); 85 } 86 87 QWKHistoryPrivate::QWKHistoryPrivate(WebKit::WebBackForwardList* list) 88 : m_backForwardList(list) 89 { 90 } 91 92 QWKHistory* QWKHistoryPrivate::createHistory(WebKit::WebBackForwardList* list) 93 { 94 QWKHistory* history = new QWKHistory(); 95 history->d = new QWKHistoryPrivate(list); 96 return history; 97 } 98 99 QWKHistoryPrivate::~QWKHistoryPrivate() 100 { 101 } 102 103 QWKHistory::QWKHistory() 104 { 105 } 106 107 QWKHistory::~QWKHistory() 108 { 109 delete d; 110 } 111 112 int QWKHistory::backListCount() const 113 { 114 return WKBackForwardListGetBackListCount(toAPI(d->m_backForwardList)); 115 } 116 117 int QWKHistory::forwardListCount() const 118 { 119 return WKBackForwardListGetForwardListCount(toAPI(d->m_backForwardList)); 120 } 121 122 int QWKHistory::count() const 123 { 124 return backListCount() + forwardListCount(); 125 } 126 127 QWKHistoryItem QWKHistory::currentItem() const 128 { 129 WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetCurrentItem(toAPI(d->m_backForwardList)); 130 QWKHistoryItem item(itemRef.get()); 131 return item; 132 } 133 134 QWKHistoryItem QWKHistory::backItem() const 135 { 136 WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetBackItem(toAPI(d->m_backForwardList)); 137 QWKHistoryItem item(itemRef.get()); 138 return item; 139 } 140 141 QWKHistoryItem QWKHistory::forwardItem() const 142 { 143 WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetForwardItem(toAPI(d->m_backForwardList)); 144 QWKHistoryItem item(itemRef.get()); 145 return item; 146 } 147 148 QWKHistoryItem QWKHistory::itemAt(int index) const 149 { 150 WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetItemAtIndex(toAPI(d->m_backForwardList), index); 151 QWKHistoryItem item(itemRef.get()); 152 return item; 153 } 154 155 QList<QWKHistoryItem> QWKHistory::backItems(int maxItems) const 156 { 157 WKArrayRef arrayRef = WKBackForwardListCopyBackListWithLimit(toAPI(d->m_backForwardList), maxItems); 158 int size = WKArrayGetSize(arrayRef); 159 QList<QWKHistoryItem> itemList; 160 for (int i = 0; i < size; ++i) { 161 WKTypeRef wkHistoryItem = WKArrayGetItemAtIndex(arrayRef, i); 162 WKBackForwardListItemRef itemRef = static_cast<WKBackForwardListItemRef>(wkHistoryItem); 163 QWKHistoryItem item(itemRef); 164 itemList.append(item); 165 } 166 return itemList; 167 } 168 169 QList<QWKHistoryItem> QWKHistory::forwardItems(int maxItems) const 170 { 171 WKArrayRef arrayRef = WKBackForwardListCopyForwardListWithLimit(toAPI(d->m_backForwardList), maxItems); 172 int size = WKArrayGetSize(arrayRef); 173 QList<QWKHistoryItem> itemList; 174 for (int i = 0; i < size; ++i) { 175 WKTypeRef wkHistoryItem = WKArrayGetItemAtIndex(arrayRef, i); 176 WKBackForwardListItemRef itemRef = static_cast<WKBackForwardListItemRef>(wkHistoryItem); 177 QWKHistoryItem item(itemRef); 178 itemList.append(item); 179 } 180 return itemList; 181 } 182 183