Fix redirects with the Qt resource implementation.
[WebKit-https.git] / WebKitQt / Api / qwebpage.cpp
1 /*
2     Copyright (C) 2007 Trolltech ASA
3     Copyright (C) 2007 Staikos Computing Services Inc.
4
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Library General Public
7     License as published by the Free Software Foundation; either
8     version 2 of the License, or (at your option) any later version.
9
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Library General Public License for more details.
14
15     You should have received a copy of the GNU Library General Public License
16     along with this library; see the file COPYING.LIB.  If not, write to
17     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18     Boston, MA 02111-1307, USA.
19
20     This class provides all functionality needed for loading images, style sheets and html
21     pages from the web. It has a memory cache for these objects.
22 */
23
24 #include "qwebpage.h"
25 #include "qwebframe.h"
26 #include "qwebpage_p.h"
27 #include "qwebframe_p.h"
28 #include "qwebpagehistory.h"
29 #include "qwebpagehistory_p.h"
30
31 #include <qurl.h>
32
33 #include "FrameQt.h"
34 #include "ChromeClientQt.h"
35 #include "ContextMenuClientQt.h"
36 #include "DragClientQt.h"
37 #include "EditorClientQt.h"
38 #include "Settings.h"
39 #include "Page.h"
40 #include "FrameLoader.h"
41 #include "KURL.h"
42 #include "qboxlayout.h"
43
44 #include <QDebug>
45
46 using namespace WebCore;
47
48 QWebPagePrivate::QWebPagePrivate(QWebPage *qq)
49     : q(qq)
50 {
51     chromeClient = new ChromeClientQt(q);
52     contextMenuClient = new ContextMenuClientQt();
53     editorClient = new EditorClientQt();
54     page = new Page(chromeClient, contextMenuClient, editorClient,
55                     new DragClientQt());
56
57     Settings *settings = page->settings();
58     settings->setLoadsImagesAutomatically(true);
59     settings->setMinimumFontSize(5);
60     settings->setMinimumLogicalFontSize(5);
61     settings->setShouldPrintBackgrounds(true);
62     settings->setJavaScriptEnabled(true);
63
64     settings->setDefaultFixedFontSize(14);
65     settings->setDefaultFontSize(14);
66     settings->setSerifFontFamily("Times New Roman");
67     settings->setSansSerifFontFamily("Arial");
68     settings->setFixedFontFamily("Courier");
69     settings->setStandardFontFamily("Arial");
70
71     mainFrame = 0;
72 }
73
74 QWebPagePrivate::~QWebPagePrivate()
75 {
76     delete page;
77 }
78
79 void QWebPagePrivate::createMainFrame()
80 {
81     if (!mainFrame) {
82         QWebFrameData frameData;
83         frameData.ownerElement = 0;
84         frameData.allowsScrolling = true;
85         frameData.marginWidth = 0;
86         frameData.marginHeight = 0;
87         mainFrame = q->createFrame(0, &frameData);
88         layout->addWidget(mainFrame);
89     }
90 }
91
92
93 QWebPage::QWebPage(QWidget *parent)
94     : QWidget(parent)
95     , d(new QWebPagePrivate(this))
96 {
97     d->layout = new QVBoxLayout(this);
98     d->layout->setMargin(0);
99     d->layout->setSpacing(0);
100 }
101
102 QWebPage::~QWebPage()
103 {
104     delete d;
105 }
106
107 QWebFrame *QWebPage::createFrame(QWebFrame *parentFrame, QWebFrameData *frameData)
108 {
109     if (parentFrame)
110         return new QWebFrame(parentFrame, frameData);
111     QWebFrame *f = new QWebFrame(this, frameData);
112     connect(f, SIGNAL(titleChanged(const QString&)), this, SIGNAL(titleChanged(const QString&)));
113     return f;
114 }
115
116 void QWebPage::open(const QUrl &url)
117 {
118     mainFrame()->d->frame->loader()->load(KURL(url.toString()));
119 }
120
121 QUrl QWebPage::url() const
122 {
123     return QUrl((QString)mainFrame()->d->frame->loader()->url().url());
124 }
125
126 QString QWebPage::title() const
127 {
128     return mainFrame()->title();
129 }
130
131 QWebFrame *QWebPage::mainFrame() const
132 {
133     d->createMainFrame();
134     return d->mainFrame;
135 }
136
137 QWebFrame *QWebPage::focusFrame() const
138 {
139     Q_ASSERT(false);
140     return mainFrame(); // FIXME: this is not correct
141 }
142
143 QSize QWebPage::sizeHint() const
144 {
145     return QSize(800, 600);
146 }
147
148 void QWebPage::stop()
149 {
150     FrameLoader *f = mainFrame()->d->frame->loader();
151     f->cancelMainResourceLoad();
152     f->stopAllLoaders();
153 }
154
155 QWebPageHistory QWebPage::history() const
156 {
157     WebCore::BackForwardList *lst = d->page->backForwardList();
158     QWebPageHistoryPrivate *priv = new QWebPageHistoryPrivate(lst);
159     return QWebPageHistory(priv);
160 }
161
162 void QWebPage::goBack()
163 {
164     d->page->goBack();
165 }
166
167 void QWebPage::goForward()
168 {
169     d->page->goForward();
170 }
171
172 void QWebPage::goToHistoryItem(const QWebHistoryItem &item)
173 {
174     d->page->goToItem(item.d->item, FrameLoadTypeIndexedBackForward);
175 }
176
177 #include "qwebpage.moc"
178