• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 Juha Savolainen (juha.savolainen@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 
QWKHistoryItemPrivate(WKBackForwardListItemRef listItem)42 QWKHistoryItemPrivate::QWKHistoryItemPrivate(WKBackForwardListItemRef listItem)
43     : m_backForwardListItem(listItem)
44 {
45 }
46 
~QWKHistoryItemPrivate()47 QWKHistoryItemPrivate::~QWKHistoryItemPrivate()
48 {
49 }
50 
QWKHistoryItem(const QWKHistoryItem & other)51 QWKHistoryItem::QWKHistoryItem(const QWKHistoryItem& other)
52     : d(other.d)
53 {
54 }
55 
operator =(const QWKHistoryItem & other)56 QWKHistoryItem& QWKHistoryItem::QWKHistoryItem::operator=(const QWKHistoryItem& other)
57 {
58     d = other.d;
59     return *this;
60 }
61 
QWKHistoryItem(WKBackForwardListItemRef item)62 QWKHistoryItem::QWKHistoryItem(WKBackForwardListItemRef item)
63     : d(new QWKHistoryItemPrivate(item))
64 {
65 }
66 
~QWKHistoryItem()67 QWKHistoryItem::~QWKHistoryItem()
68 {
69 }
70 
title() const71 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 
url() const79 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 
QWKHistoryPrivate(WebKit::WebBackForwardList * list)87 QWKHistoryPrivate::QWKHistoryPrivate(WebKit::WebBackForwardList* list)
88     : m_backForwardList(list)
89 {
90 }
91 
createHistory(WebKit::WebBackForwardList * list)92 QWKHistory* QWKHistoryPrivate::createHistory(WebKit::WebBackForwardList* list)
93 {
94     QWKHistory* history = new QWKHistory();
95     history->d = new QWKHistoryPrivate(list);
96     return history;
97 }
98 
~QWKHistoryPrivate()99 QWKHistoryPrivate::~QWKHistoryPrivate()
100 {
101 }
102 
QWKHistory()103 QWKHistory::QWKHistory()
104 {
105 }
106 
~QWKHistory()107 QWKHistory::~QWKHistory()
108 {
109     delete d;
110 }
111 
backListCount() const112 int QWKHistory::backListCount() const
113 {
114     return WKBackForwardListGetBackListCount(toAPI(d->m_backForwardList));
115 }
116 
forwardListCount() const117 int QWKHistory::forwardListCount() const
118 {
119     return WKBackForwardListGetForwardListCount(toAPI(d->m_backForwardList));
120 }
121 
count() const122 int QWKHistory::count() const
123 {
124     return backListCount() + forwardListCount();
125 }
126 
currentItem() const127 QWKHistoryItem QWKHistory::currentItem() const
128 {
129     WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetCurrentItem(toAPI(d->m_backForwardList));
130     QWKHistoryItem item(itemRef.get());
131     return item;
132 }
133 
backItem() const134 QWKHistoryItem QWKHistory::backItem() const
135 {
136     WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetBackItem(toAPI(d->m_backForwardList));
137     QWKHistoryItem item(itemRef.get());
138     return item;
139 }
140 
forwardItem() const141 QWKHistoryItem QWKHistory::forwardItem() const
142 {
143     WKRetainPtr<WKBackForwardListItemRef> itemRef = WKBackForwardListGetForwardItem(toAPI(d->m_backForwardList));
144     QWKHistoryItem item(itemRef.get());
145     return item;
146 }
147 
itemAt(int index) const148 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 
backItems(int maxItems) const155 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 
forwardItems(int maxItems) const169 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