qwebframe.cpp revision 53733164eb6cabab5a1eddcabb42e4ce27eb0e44
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    Copyright (C) 2008,2009 Nokia Corporation and/or its subsidiary(-ies)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Copyright (C) 2007 Staikos Computing Services Inc.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This library is free software; you can redistribute it and/or
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    modify it under the terms of the GNU Library General Public
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    License as published by the Free Software Foundation; either
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    version 2 of the License, or (at your option) any later version.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This library is distributed in the hope that it will be useful,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    but WITHOUT ANY WARRANTY; without even the implied warranty of
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Library General Public License for more details.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    You should have received a copy of the GNU Library General Public License
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    along with this library; see the file COPYING.LIB.  If not, write to
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Boston, MA 02110-1301, USA.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "qwebframe.h"
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2468513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
2553733164eb6cabab5a1eddcabb42e4ce27eb0e44Ben Murdoch#include "BridgeJSC.h"
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CallFrame.h"
2768513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8)
2868513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "V8Binding.h"
2968513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "Document.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DocumentLoader.h"
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "DragData.h"
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "Element.h"
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FocusController.h"
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h"
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "FrameLoaderClientQt.h"
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameTree.h"
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameView.h"
3968513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "GCController.h"
4168513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8)
4268513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "V8GCController.h"
4368513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "GraphicsContext.h"
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "HTMLMetaElement.h"
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "HitTestResult.h"
47dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "HTTPParsers.h"
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "IconDatabase.h"
49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "InspectorController.h"
5068513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSDOMBinding.h"
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSDOMWindowBase.h"
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSLock.h"
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSObject.h"
5568513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8)
5668513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "V8DOMWrapper.h"
5768513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "V8DOMWindowShell.h"
5868513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
5968513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "NetworkingContext.h"
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "NodeList.h"
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h"
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "PlatformMouseEvent.h"
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "PlatformWheelEvent.h"
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "PrintContext.h"
6568513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PutPropertySlot.h"
6768513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
68545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "RenderLayer.h"
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderTreeAsText.h"
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderView.h"
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "ResourceRequest.h"
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "ScriptController.h"
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "ScriptSourceCode.h"
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "ScriptValue.h"
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Scrollbar.h"
765af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#include "Settings.h"
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "SelectionController.h"
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SubstituteData.h"
79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "SVGSMILElement.h"
80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "TiledBackingStore.h"
81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "htmlediting.h"
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "markup.h"
8368513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "qt_instance.h"
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "qt_runtime.h"
8668513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "qwebelement.h"
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "qwebframe_p.h"
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "qwebpage.h"
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "qwebpage_p.h"
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "qwebsecurityorigin.h"
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "qwebsecurityorigin_p.h"
9306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "qwebscriptworld.h"
9406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "qwebscriptworld_p.h"
9568513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
96635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "runtime_object.h"
97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "runtime_root.h"
9868513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
99a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if USE(TEXTURE_MAPPER)
10028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include "texmap/TextureMapper.h"
101a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "texmap/TextureMapperPlatformLayer.h"
102a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "wtf/HashMap.h"
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <QMultiMap>
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qdebug.h>
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qevent.h>
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qfileinfo.h>
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qpainter.h>
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qprinter.h>
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qregion.h>
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qnetworkrequest.h>
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore;
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// from text/qfont.cpp
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQT_BEGIN_NAMESPACE
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern Q_GUI_EXPORT int qt_defaultDpi();
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQT_END_NAMESPACE
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenbool QWEBKIT_EXPORT qtwebkit_webframe_scrollOverflow(QWebFrame* qFrame, int dx, int dy, const QPoint& pos)
121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
1226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    WebCore::Frame* frame = QWebFramePrivate::core(qFrame);
123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (!frame || !frame->document() || !frame->view() || !frame->eventHandler())
124563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return false;
125563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    QPoint contentsPos = frame->view()->windowToContents(pos);
127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    Node* node = frame->document()->elementFromPoint(contentsPos.x(), contentsPos.y());
128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (!node)
129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return false;
130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    RenderObject* renderer = node->renderer();
132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (!renderer)
133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return false;
134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (renderer->isListBox())
136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return false;
137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    RenderLayer* renderLayer = renderer->enclosingLayer();
139dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (!renderLayer)
140563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return false;
141563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
142dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool scrolledHorizontal = false;
143dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool scrolledVertical = false;
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    do {
1466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        if (dx > 0)
1476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            scrolledHorizontal = renderLayer->scroll(ScrollRight, ScrollByPixel, dx);
1486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        else if (dx < 0)
1496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            scrolledHorizontal = renderLayer->scroll(ScrollLeft, ScrollByPixel, qAbs(dx));
1506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        if (dy > 0)
1526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            scrolledVertical = renderLayer->scroll(ScrollDown, ScrollByPixel, dy);
1536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        else if (dy < 0)
1546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            scrolledVertical = renderLayer->scroll(ScrollUp, ScrollByPixel, qAbs(dy));
1556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        if (scrolledHorizontal || scrolledVertical)
1576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            return true;
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        renderLayer = renderLayer->parent();
1606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    } while (renderLayer);
1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    return false;
1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
165cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
166dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/*!
167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block  \internal
168dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block  Scrolls nested frames starting at this frame, \a dx pixels to the right
169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block  and \a dy pixels downward. Both \a dx and \a dy may be negative. First attempts
170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block  to scroll elements with CSS overflow at position pos, followed by this frame. If this
171dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block  frame doesn't scroll, attempts to scroll the parent
172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block*/
173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int dx, int dy, const QPoint& pos)
1748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{
175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (!qFrame)
176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        return;
1778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
1786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    if (qtwebkit_webframe_scrollOverflow(qFrame, dx, dy, pos))
179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        return;
1808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool scrollHorizontal = false;
182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool scrollVertical = false;
1838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    do {
185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        if (dx > 0)  // scroll right
186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            scrollHorizontal = qFrame->scrollBarValue(Qt::Horizontal) < qFrame->scrollBarMaximum(Qt::Horizontal);
187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        else if (dx < 0)  // scroll left
188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            scrollHorizontal = qFrame->scrollBarValue(Qt::Horizontal) > qFrame->scrollBarMinimum(Qt::Horizontal);
189692e5dbf12901edacf14812a6fae25462920af42Steve Block
190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        if (dy > 0)  // scroll down
191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            scrollVertical = qFrame->scrollBarValue(Qt::Vertical) < qFrame->scrollBarMaximum(Qt::Vertical);
1926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        else if (dy < 0) //scroll up
193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            scrollVertical = qFrame->scrollBarValue(Qt::Vertical) > qFrame->scrollBarMinimum(Qt::Vertical);
194692e5dbf12901edacf14812a6fae25462920af42Steve Block
195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        if (scrollHorizontal || scrollVertical) {
196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            qFrame->scroll(dx, dy);
197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            return;
198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        }
199d0825bca7fe65beaee391d30da42e937db621564Steve Block
200dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        qFrame = qFrame->parentFrame();
201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    } while (qFrame);
202692e5dbf12901edacf14812a6fae25462920af42Steve Block}
203692e5dbf12901edacf14812a6fae25462920af42Steve Block
204f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic inline ResourceRequestCachePolicy cacheLoadControlToCachePolicy(uint cacheLoadControl)
205f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
206f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    switch (cacheLoadControl) {
207f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QNetworkRequest::AlwaysNetwork:
208f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return WebCore::ReloadIgnoringCacheData;
209f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QNetworkRequest::PreferCache:
210f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return WebCore::ReturnCacheDataElseLoad;
211f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QNetworkRequest::AlwaysCache:
212f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return WebCore::ReturnCacheDataDontLoad;
213f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    default:
214f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        break;
215f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    }
216f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return WebCore::UseProtocolCachePolicy;
217f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
218f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
2190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebFrameData::QWebFrameData(WebCore::Page* parentPage, WebCore::Frame* parentFrame,
2200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                             WebCore::HTMLFrameOwnerElement* ownerFrameElement,
221dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch                             const WTF::String& frameName)
2220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    : name(frameName)
2230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    , ownerElement(ownerFrameElement)
2240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    , page(parentPage)
2250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    , allowsScrolling(true)
2260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    , marginWidth(0)
2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    , marginHeight(0)
2280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    frameLoaderClient = new FrameLoaderClientQt();
2300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    frame = Frame::create(page, ownerElement, frameLoaderClient);
231635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
232635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // FIXME: All of the below should probably be moved over into WebCore
2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    frame->tree()->setName(name);
2340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (parentFrame)
2350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        parentFrame->tree()->appendChild(frame);
2360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebFramePrivate::init(QWebFrame *qframe, QWebFrameData *frameData)
2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    q = qframe;
241635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
2420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    allowsScrolling = frameData->allowsScrolling;
2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    marginWidth = frameData->marginWidth;
2440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    marginHeight = frameData->marginHeight;
2450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    frame = frameData->frame.get();
2460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    frameLoaderClient = frameData->frameLoaderClient;
2470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    frameLoaderClient->setFrame(qframe, frame);
248635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    frame->init();
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
252692e5dbf12901edacf14812a6fae25462920af42Steve Blockvoid QWebFramePrivate::setPage(QWebPage* newPage)
253692e5dbf12901edacf14812a6fae25462920af42Steve Block{
254692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (page == newPage)
255692e5dbf12901edacf14812a6fae25462920af42Steve Block        return;
256692e5dbf12901edacf14812a6fae25462920af42Steve Block
257692e5dbf12901edacf14812a6fae25462920af42Steve Block    // The QWebFrame is created as a child of QWebPage or a parent QWebFrame.
258692e5dbf12901edacf14812a6fae25462920af42Steve Block    // That adds it to QObject's internal children list and ensures it will be
259692e5dbf12901edacf14812a6fae25462920af42Steve Block    // deleted when parent QWebPage is deleted. Reparent if needed.
260692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (q->parent() == qobject_cast<QObject*>(page))
261692e5dbf12901edacf14812a6fae25462920af42Steve Block        q->setParent(newPage);
262692e5dbf12901edacf14812a6fae25462920af42Steve Block
263692e5dbf12901edacf14812a6fae25462920af42Steve Block    page = newPage;
264692e5dbf12901edacf14812a6fae25462920af42Steve Block    emit q->pageChanged();
265692e5dbf12901edacf14812a6fae25462920af42Steve Block}
266692e5dbf12901edacf14812a6fae25462920af42Steve Block
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCore::Scrollbar* QWebFramePrivate::horizontalScrollBar() const
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!frame->view())
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return frame->view()->horizontalScrollbar();
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebCore::Scrollbar* QWebFramePrivate::verticalScrollBar() const
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!frame->view())
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return frame->view()->verticalScrollbar();
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
281dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(TILED_BACKING_STORE)
282dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid QWebFramePrivate::renderFromTiledBackingStore(GraphicsContext* context, const QRegion& clip)
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
284dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    ASSERT(frame->tiledBackingStore());
285dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
286635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!frame->view() || !frame->contentRenderer())
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
288635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
289635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    QVector<QRect> vector = clip.rects();
290635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (vector.isEmpty())
291635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
292635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QPainter* painter = context->platformContext();
294643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
295643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebCore::FrameView* view = frame->view();
296dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
297dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    int scrollX = view->scrollX();
298dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    int scrollY = view->scrollY();
299dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    context->translate(-scrollX, -scrollY);
300643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
301643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    for (int i = 0; i < vector.size(); ++i) {
302643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const QRect& clipRect = vector.at(i);
303643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
304643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        painter->save();
305dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
306dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        QRect rect = clipRect.translated(scrollX, scrollY);
307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        painter->setClipRect(rect, Qt::IntersectClip);
308643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
309dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        frame->tiledBackingStore()->paint(context, rect);
310643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
311643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        painter->restore();
312643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
313a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
31428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER)
31528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    renderCompositedLayers(context, IntRect(clip.boundingRect()));
316a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    renderRelativeCoords(context, (QWebFrame::RenderLayer)(QWebFrame::ScrollBarLayer | QWebFrame::PanIconLayer), clip);
317a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif
318643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
319dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
320643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
32128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER)
32228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuvoid QWebFramePrivate::renderCompositedLayers(GraphicsContext* context, const IntRect& clip)
32328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu{
32428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    if (!rootGraphicsLayer)
32528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        return;
32628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
32728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    textureMapper->setGraphicsContext(context);
32828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    textureMapper->setImageInterpolationQuality(context->imageInterpolationQuality());
32928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    textureMapper->setTextDrawingMode(context->textDrawingMode());
33028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    QPainter* painter = context->platformContext();
33128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    FrameView* view = frame->view();
33228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    painter->save();
33328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    painter->beginNativePainting();
33428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    TextureMapperContentLayer::PaintOptions options;
33528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    options.visibleRect = clip;
33628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    options.targetRect = view->frameRect();
33728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    options.viewportSize = view->size();
33828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    options.opacity = painter->opacity();
33928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    rootGraphicsLayer->paint(textureMapper.get(), options);
34028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    painter->endNativePainting();
34128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    painter->restore();
34228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu}
34328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif
34428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
345643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid QWebFramePrivate::renderRelativeCoords(GraphicsContext* context, QWebFrame::RenderLayer layer, const QRegion& clip)
346643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
347643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!frame->view() || !frame->contentRenderer())
348cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return;
349635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
350643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QVector<QRect> vector = clip.rects();
351643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (vector.isEmpty())
352643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
353643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
354643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QPainter* painter = context->platformContext();
355643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
356cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    WebCore::FrameView* view = frame->view();
3575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    view->updateLayoutAndStyleIfNeededRecursive();
358635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
359a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    if (layer & QWebFrame::ContentsLayer) {
360635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        painter->save();
361a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        for (int i = 0; i < vector.size(); ++i) {
362a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            const QRect& clipRect = vector.at(i);
363cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
364a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            QRect intersectedRect = clipRect.intersected(view->frameRect());
365cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
366643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            context->save();
367a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            painter->setClipRect(clipRect, Qt::IntersectClip);
368a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
369a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            int x = view->x();
370a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            int y = view->y();
371cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
372cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            int scrollX = view->scrollX();
373cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            int scrollY = view->scrollY();
374cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
375cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            QRect rect = intersectedRect;
376643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            context->translate(x, y);
377cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            rect.translate(-x, -y);
378643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            context->translate(-scrollX, -scrollY);
379cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            rect.translate(scrollX, scrollY);
380643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            context->clip(view->visibleContentRect());
381cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
382643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            view->paintContents(context, rect);
383cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
384643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            context->restore();
385cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        }
386a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        painter->restore();
387a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER)
38828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        renderCompositedLayers(context, IntRect(clip.boundingRect()));
389a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif
390a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    }
391a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    if (layer & (QWebFrame::PanIconLayer | QWebFrame::ScrollBarLayer)) {
392a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        for (int i = 0; i < vector.size(); ++i) {
393a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            const QRect& clipRect = vector.at(i);
394cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
395a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            QRect intersectedRect = clipRect.intersected(view->frameRect());
396cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
397a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            painter->save();
398a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            painter->setClipRect(clipRect, Qt::IntersectClip);
399cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
400a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            int x = view->x();
401a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            int y = view->y();
402a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
403a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            if (layer & QWebFrame::ScrollBarLayer
404a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch                && !view->scrollbarsSuppressed()
405a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch                && (view->horizontalScrollbar() || view->verticalScrollbar())) {
406a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch                context->save();
407a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
408a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch                QRect rect = intersectedRect;
409a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch                context->translate(x, y);
410a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch                rect.translate(-x, -y);
411a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
412a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch                view->paintScrollbars(context, rect);
413a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
414a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch                context->restore();
415a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            }
416cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
417643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if ENABLE(PAN_SCROLLING)
418a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            if (layer & QWebFrame::PanIconLayer)
419a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch                view->paintPanScrollIcon(context);
420643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
421cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
422a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            painter->restore();
423a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        }
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
427f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid QWebFrame::orientationChanged()
428f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
429f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION)
430f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    int orientation;
431f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebCore::Frame* frame = QWebFramePrivate::core(this);
432f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
433f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    switch (d->m_orientation.reading()->orientation()) {
434f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::TopUp:
435f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        orientation = 0;
436f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        break;
437f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::TopDown:
438f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        orientation = 180;
439f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        break;
440f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::LeftUp:
441f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        orientation = -90;
442f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        break;
443f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::RightUp:
444f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        orientation = 90;
445f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        break;
446f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::FaceUp:
447f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::FaceDown:
448f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        // WebCore unable to handle it
449f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    default:
450f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return;
451f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    }
452f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    frame->sendOrientationChangeEvent(orientation);
453f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif
454f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \class QWebFrame
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \since 4.4
4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief The QWebFrame class represents a frame in a web page.
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
460231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    \inmodule QtWebKit
461231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebFrame represents a frame inside a web page. Each QWebPage
4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    object contains at least one frame, the main frame, obtained using
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebPage::mainFrame(). Additional frames will be created for HTML
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \c{<frame>} or \c{<iframe>} elements.
4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    A frame can be loaded using load() or setUrl(). Alternatively, if you have
4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    the HTML content readily available, you can use setHtml() instead.
4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The page() function returns a pointer to the web page object. See
471643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \l{QWebView}{Elements of QWebView} for an explanation of how web
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    frames are related to a web page and web view.
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    The QWebFrame class also offers methods to retrieve both the URL currently
4750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    loaded by the frame (see url()) as well as the URL originally requested
4760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    to be loaded (see requestedUrl()). These methods make possible the retrieval
4770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    of the URL before and after a DNS resolution or a redirection occurs during
4780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    the load process. The requestedUrl() also matches to the URL added to the
4790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    frame history (\l{QWebHistory}) if load is successful.
4800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The title of an HTML frame can be accessed with the title() property.
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Additionally, a frame may also specify an icon, which can be accessed
4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    using the icon() property. If the title or the icon changes, the
4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    corresponding titleChanged() and iconChanged() signals will be emitted.
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The zoomFactor() property can be used to change the overall size
4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    of the content displayed in the frame.
4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebFrame objects are created and controlled by the web page. You
4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    can connect to the web page's \l{QWebPage::}{frameCreated()} signal
4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    to be notified when a new frame is created.
4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    There are multiple ways to programmatically examine the contents of a frame.
4936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    The hitTestContent() function can be used to find elements by coordinate.
4946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    For access to the underlying DOM tree, there is documentElement(),
4956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    findAllElements() and findFirstElement().
4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    A QWebFrame can be printed onto a QPrinter using the print() function.
4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This function is marked as a slot and can be conveniently connected to
4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \l{QPrintPreviewDialog}'s \l{QPrintPreviewDialog::}{paintRequested()}
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    signal.
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa QWebPage
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
505643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*!
506643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \enum QWebFrame::RenderLayer
507643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
508643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    This enum describes the layers available for rendering using \l{QWebFrame::}{render()}.
509643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    The layers can be OR-ed together from the following list:
510643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
511643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \value ContentsLayer The web content of the frame
512643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \value ScrollBarLayer The scrollbars of the frame
513643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \value PanIconLayer The icon used when panning the frame
514643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
515643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \value AllLayers Includes all the above layers
516643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/
517643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebFrame::QWebFrame(QWebPage *parent, QWebFrameData *frameData)
5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : QObject(parent)
5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , d(new QWebFramePrivate)
5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d->page = parent;
5230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    d->init(this, frameData);
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!frameData->url.isEmpty()) {
5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        WebCore::ResourceRequest request(frameData->url, frameData->referrer);
527563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        d->frame->loader()->load(request, frameData->name, false);
5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
529f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION)
530f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    connect(&d->m_orientation, SIGNAL(readingChanged()), this, SLOT(orientationChanged()));
531f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    d->m_orientation.start();
532f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebFrame::QWebFrame(QWebFrame *parent, QWebFrameData *frameData)
5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : QObject(parent)
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , d(new QWebFramePrivate)
5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d->page = parent->d->page;
5400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    d->init(this, frameData);
541f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION)
542f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    connect(&d->m_orientation, SIGNAL(readingChanged()), this, SLOT(orientationChanged()));
543f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    d->m_orientation.start();
544f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif
5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebFrame::~QWebFrame()
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->frame && d->frame->loader() && d->frame->loader()->client())
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static_cast<FrameLoaderClientQt*>(d->frame->loader()->client())->m_webFrame = 0;
5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    delete d;
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Make \a object available under \a name from within the frame's JavaScript
5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    context. The \a object will be inserted as a child of the frame's window
5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    object.
5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Qt properties will be exposed as JavaScript properties and slots as
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    JavaScript methods.
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    If you want to ensure that your QObjects remain accessible after loading a
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    new URL, you should add them in a slot connected to the
5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    javaScriptWindowObjectCleared() signal.
566563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
5670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    If Javascript is not enabled for this page, then this method does nothing.
5680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
569563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    The \a object will never be explicitly deleted by QtWebKit.
5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object)
5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
573563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    addToJavaScriptWindowObject(name, object, QScriptEngine::QtOwnership);
574563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
576563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*!
577563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    \fn void QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object, QScriptEngine::ValueOwnership own)
578563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    \overload
5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
580563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    Make \a object available under \a name from within the frame's JavaScript
581563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    context. The \a object will be inserted as a child of the frame's window
582563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    object.
583563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
584563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    Qt properties will be exposed as JavaScript properties and slots as
585563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    JavaScript methods.
586563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
587563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    If you want to ensure that your QObjects remain accessible after loading a
588563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    new URL, you should add them in a slot connected to the
589563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    javaScriptWindowObjectCleared() signal.
590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
5910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    If Javascript is not enabled for this page, then this method does nothing.
5920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    The ownership of \a object is specified using \a own.
594563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/
595563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object, QScriptEngine::ValueOwnership ownership)
596563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
5970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!page()->settings()->testAttribute(QWebSettings::JavascriptEnabled))
5980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return;
59968513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
6000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    JSC::JSLock lock(JSC::SilenceAssertionsOnly);
601cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    JSDOMWindow* window = toJSDOMWindow(d->frame, mainThreadNormalWorld());
602545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    JSC::Bindings::RootObject* root;
603545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    if (ownership == QScriptEngine::QtOwnership)
604545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        root = d->frame->script()->cacheableBindingRootObject();
605545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    else
606545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        root = d->frame->script()->bindingRootObject();
607545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
608563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!window) {
609563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        qDebug() << "Warning: couldn't get window object";
610563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return;
611563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    }
6124576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!root) {
6134576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        qDebug() << "Warning: couldn't get root object";
6144576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return;
6154576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
617563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    JSC::ExecState* exec = window->globalExec();
618563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
619563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    JSC::JSObject* runtimeObject =
620563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark            JSC::Bindings::QtInstance::getQtInstance(object, root, ownership)->createRuntimeObject(exec);
621563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
622563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    JSC::PutPropertySlot slot;
623e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    window->put(exec, JSC::Identifier(exec, reinterpret_cast_ptr<const UChar*>(name.constData()), name.length()), runtimeObject, slot);
62468513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8)
62568513a70bcd92384395513322f1b801e7bf9c729Steve Block    QScriptEngine* engine = d->frame->script()->qtScriptEngine();
62668513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (!engine)
62768513a70bcd92384395513322f1b801e7bf9c729Steve Block        return;
62868513a70bcd92384395513322f1b801e7bf9c729Steve Block    QScriptValue v = engine->newQObject(object, ownership);
62968513a70bcd92384395513322f1b801e7bf9c729Steve Block    engine->globalObject().property("window").setProperty(name, v);
63068513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
6340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the frame's content as HTML, enclosed in HTML and BODY tags.
6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa setHtml(), toPlainText()
6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebFrame::toHtml() const
6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->document())
6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QString();
6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return createMarkup(d->frame->document());
6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
6460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the content of this frame converted to plain text, completely
6470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    stripped of all HTML formatting.
6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa toHtml()
6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebFrame::toPlainText() const
6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->frame->view() && d->frame->view()->layoutPending())
6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->frame->view()->layout();
6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Element *documentElement = d->frame->document()->documentElement();
657643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (documentElement)
658643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return documentElement->innerText();
659643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return QString();
6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns a dump of the rendering tree. This is mainly useful for debugging
6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    html.
6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebFrame::renderTreeDump() const
6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->frame->view() && d->frame->view()->layoutPending())
6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->frame->view()->layout();
6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
671643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return externalRepresentation(d->frame);
6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::title
6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the title of the frame as defined by the HTML &lt;title&gt; element
6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa titleChanged()
6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebFrame::title() const
6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->frame->document())
6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return d->frame->loader()->documentLoader()->title();
6850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return QString();
6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
688635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
689635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \since 4.5
690635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \brief Returns the meta data in this frame as a QMultiMap
691635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
692635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    The meta data consists of the name and content attributes of the
693635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    of the \c{<meta>} tags in the HTML document.
694635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
695635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    For example:
696635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
697635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \code
698635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    <html>
699635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        <head>
700635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            <meta name="description" content="This document is a tutorial about Qt development">
701635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            <meta name="keywords" content="Qt, WebKit, Programming">
702635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        </head>
703635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        ...
704635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    </html>
705635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \endcode
706635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
707635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Given the above HTML code the metaData() function will return a map with two entries:
708635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \table
709635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \header \o Key
710635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            \o Value
711635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \row    \o "description"
712635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            \o "This document is a tutorial about Qt development"
713635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \row    \o "keywords"
714635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            \o "Qt, WebKit, Programming"
715635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \endtable
716635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
717635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    This function returns a multi map to support multiple meta tags with the same attribute name.
718635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
719635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectQMultiMap<QString, QString> QWebFrame::metaData() const
720635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
7210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!d->frame->document())
7220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch       return QMap<QString, QString>();
723635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
7240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QMultiMap<QString, QString> map;
725635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Document* doc = d->frame->document();
726635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    RefPtr<NodeList> list = doc->getElementsByTagName("meta");
727635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    unsigned len = list->length();
728635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    for (unsigned i = 0; i < len; i++) {
729635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        HTMLMetaElement* meta = static_cast<HTMLMetaElement*>(list->item(i));
730635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        map.insert(meta->name(), meta->content());
731635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
732635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return map;
733635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
734635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic inline QUrl ensureAbsoluteUrl(const QUrl &url)
7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!url.isRelative())
7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return url;
7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QUrl::fromLocalFile(QFileInfo(url.toLocalFile()).absoluteFilePath());
7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::url
7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the url of the frame currently viewed
7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Setting this property clears the view and loads the URL.
7486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
7496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    By default, this property contains an empty, invalid URL.
7506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa urlChanged()
7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setUrl(const QUrl &url)
7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
756e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    const QUrl absolute = ensureAbsoluteUrl(url);
757e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    d->frame->loader()->writer()->begin(absolute);
758dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    d->frame->loader()->writer()->end();
759e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    load(absolute);
7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQUrl QWebFrame::url() const
7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->frame->loader()->url();
7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
7680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
7690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \property QWebFrame::requestedUrl
7700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    The URL requested to loaded by the frame currently viewed. The URL may differ from
7720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    the one returned by url() if a DNS resolution or a redirection occurs.
7730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa url(), setUrl()
7750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
7760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQUrl QWebFrame::requestedUrl() const
7770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
778cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // There are some possible edge cases to be handled here,
779cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // apart from checking if activeDocumentLoader is valid:
780cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    //
781cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // * Method can be called while processing an unsucessful load.
782cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    //   In this case, frameLoaderClient will hold the current error
783cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    //   (m_loadError), and we will make use of it to recover the 'failingURL'.
784cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // * If the 'failingURL' holds a null'ed string though, we fallback
785cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    //   to 'outgoingReferrer' (it yet is safer than originalRequest).
786cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    FrameLoader* loader = d->frame->loader();
787cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    FrameLoaderClientQt* loaderClient = d->frameLoaderClient;
788cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
789cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    if (!loader->activeDocumentLoader()
790cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        || !loaderClient->m_loadError.isNull()) {
791cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        if (!loaderClient->m_loadError.failingURL().isNull())
792cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            return QUrl(loaderClient->m_loadError.failingURL());
793cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        else if (!loader->outgoingReferrer().isEmpty())
794cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            return QUrl(loader->outgoingReferrer());
795cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    }
7960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
797cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    return loader->originalRequest().url();
7980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
7990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
8000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
8010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \property QWebFrame::baseUrl
8020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \brief the base URL of the frame, can be used to resolve relative URLs
8030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
8040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
8050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQUrl QWebFrame::baseUrl() const
8070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
8080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return d->frame->loader()->baseURL();
8090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
8100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::icon
8138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the icon associated with this frame
8148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa iconChanged(), QWebSettings::iconForUrl()
8168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
8178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQIcon QWebFrame::icon() const
8198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
8208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QWebSettings::iconForUrl(d->frame->loader()->url());
8218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
8248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The name of this frame as defined by the parent frame.
8258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
8268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebFrame::frameName() const
8278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
82828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    return d->frame->tree()->uniqueName();
8298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The web page that contains this frame.
833dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
834dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block  \sa pageChanged()
8358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
8368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebPage *QWebFrame::page() const
8378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
8388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->page;
8398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
8428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Loads \a url into this frame.
8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \note The view remains the same until enough data has arrived to display the new \a url.
8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa setUrl(), setHtml(), setContent()
8478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
8488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::load(const QUrl &url)
8498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
850e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    // The load() overload ensures that the url is absolute.
851e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    load(QNetworkRequest(url));
8528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
8558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Loads a network request, \a req, into this frame, using the method specified in \a
8568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  operation.
8578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \a body is optional and is only used for POST operations.
8598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
860dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block  \note The view remains the same until enough data has arrived to display the new content.
8618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa setUrl()
8638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
8648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::load(const QNetworkRequest &req,
8658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                     QNetworkAccessManager::Operation operation,
8668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                     const QByteArray &body)
8678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
8688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->parentFrame())
8698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->page->d->insideOpenCall = true;
8708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QUrl url = ensureAbsoluteUrl(req.url());
8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::ResourceRequest request(url);
8748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    switch (operation) {
8768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case QNetworkAccessManager::HeadOperation:
8778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            request.setHTTPMethod("HEAD");
8788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
8798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case QNetworkAccessManager::GetOperation:
8808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            request.setHTTPMethod("GET");
8818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
8828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case QNetworkAccessManager::PutOperation:
8838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            request.setHTTPMethod("PUT");
8848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
8858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case QNetworkAccessManager::PostOperation:
8868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            request.setHTTPMethod("POST");
8878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
888643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        case QNetworkAccessManager::DeleteOperation:
889643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            request.setHTTPMethod("DELETE");
890643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            break;
891f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)
892f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        case QNetworkAccessManager::CustomOperation:
893f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            request.setHTTPMethod(req.attribute(QNetworkRequest::CustomVerbAttribute).toByteArray().constData());
894f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            break;
895f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif
8968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case QNetworkAccessManager::UnknownOperation:
8978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // eh?
8988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
8998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
9008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
901f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    QVariant cacheLoad = req.attribute(QNetworkRequest::CacheLoadControlAttribute);
902f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (cacheLoad.isValid()) {
903f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        bool ok;
904f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        uint cacheLoadValue = cacheLoad.toUInt(&ok);
905f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        if (ok)
906f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            request.setCachePolicy(cacheLoadControlToCachePolicy(cacheLoadValue));
907f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    }
908f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
9098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QList<QByteArray> httpHeaders = req.rawHeaderList();
9108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (int i = 0; i < httpHeaders.size(); ++i) {
9118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        const QByteArray &headerName = httpHeaders.at(i);
9128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        request.addHTTPHeaderField(QString::fromLatin1(headerName), QString::fromLatin1(req.rawHeader(headerName)));
9138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
9148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!body.isEmpty())
9168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        request.setHTTPBody(WebCore::FormData::create(body.constData(), body.size()));
9178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
918563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    d->frame->loader()->load(request, false);
9198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->parentFrame())
9218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->page->d->insideOpenCall = false;
9228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
9258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Sets the content of this frame to \a html. \a baseUrl is optional and used to resolve relative
926635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  URLs in the document, such as referenced images or stylesheets.
9278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  The \a html is loaded immediately; external objects are loaded asynchronously.
9290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9300617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen  If a script in the \a html runs longer than the default script timeout (currently 10 seconds),
9310617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen  for example due to being blocked by a modal JavaScript alert dialog, this method will return
9320617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen  as soon as possible after the timeout and any subsequent \a html will be loaded asynchronously.
9330617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
9348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  When using this method WebKit assumes that external resources such as JavaScript programs or style
9358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  sheets are encoded in UTF-8 unless otherwise specified. For example, the encoding of an external
9368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  script can be specified through the charset attribute of the HTML script tag. It is also possible
9378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  for the encoding to be specified by web server.
9388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
939db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block  This is a convenience function equivalent to setContent(html, "text/html", baseUrl).
940db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
941231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block  \note This method will not affect session or global history for the frame.
942231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
943db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block  \warning This function works only for HTML, for other mime types (i.e. XHTML, SVG)
944db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block  setContent() should be used instead.
945db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
946db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block  \sa toHtml(), setContent(), load()
9478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
9488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setHtml(const QString &html, const QUrl &baseUrl)
9498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
9508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    KURL kurl(baseUrl);
9518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::ResourceRequest request(kurl);
9528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const QByteArray utf8 = html.toUtf8();
9538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WTF::RefPtr<WebCore::SharedBuffer> data = WebCore::SharedBuffer::create(utf8.constData(), utf8.length());
954dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WebCore::SubstituteData substituteData(data, WTF::String("text/html"), WTF::String("utf-8"), KURL());
955563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    d->frame->loader()->load(request, substituteData, false);
9568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
9598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Sets the content of this frame to the specified content \a data. If the \a mimeType argument
9608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  is empty it is currently assumed that the content is HTML but in future versions we may introduce
9618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  auto-detection.
9628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  External objects referenced in the content are located relative to \a baseUrl.
9648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  The \a data is loaded immediately; external objects are loaded asynchronously.
9660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
967231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block  \note This method will not affect session or global history for the frame.
968231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
969231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block  \sa toHtml(), setHtml()
9708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
9718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setContent(const QByteArray &data, const QString &mimeType, const QUrl &baseUrl)
9728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
9738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    KURL kurl(baseUrl);
9748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::ResourceRequest request(kurl);
9758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WTF::RefPtr<WebCore::SharedBuffer> buffer = WebCore::SharedBuffer::create(data.constData(), data.length());
976dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    QString actualMimeType;
977dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::String encoding;
978dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    if (mimeType.isEmpty())
9798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        actualMimeType = QLatin1String("text/html");
980dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    else {
981dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        actualMimeType = extractMIMETypeFromMediaType(mimeType);
982dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        encoding = extractCharsetFromMediaType(mimeType);
983dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    }
984dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WebCore::SubstituteData substituteData(buffer, WTF::String(actualMimeType), encoding, KURL());
985563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    d->frame->loader()->load(request, substituteData, false);
9868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
9898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the parent frame of this frame, or 0 if the frame is the web pages
9908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  main frame.
9918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  This is equivalent to qobject_cast<QWebFrame*>(frame->parent()).
9938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa childFrames()
9958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
9968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebFrame *QWebFrame::parentFrame() const
9978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
9988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->parentFrame();
9998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns a list of all frames that are direct children of this frame.
10038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa parentFrame()
10058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQList<QWebFrame*> QWebFrame::childFrames() const
10078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QList<QWebFrame*> rc;
10098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->frame) {
10108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        FrameTree *tree = d->frame->tree();
10118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (Frame *child = tree->firstChild(); child; child = child->tree()->nextSibling()) {
10128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FrameLoader *loader = child->loader();
101368513a70bcd92384395513322f1b801e7bf9c729Steve Block            QWebFrame* webFrame = qobject_cast<QWebFrame*>(loader->networkingContext()->originatingObject());
101468513a70bcd92384395513322f1b801e7bf9c729Steve Block            if (webFrame)
101568513a70bcd92384395513322f1b801e7bf9c729Steve Block                rc.append(webFrame);
10168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
10178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
10198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return rc;
10208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the scrollbar policy for the scrollbar defined by \a orientation.
10248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQt::ScrollBarPolicy QWebFrame::scrollBarPolicy(Qt::Orientation orientation) const
10268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (orientation == Qt::Horizontal)
10288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return d->horizontalScrollBarPolicy;
10298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->verticalScrollBarPolicy;
10308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Sets the scrollbar policy for the scrollbar defined by \a orientation to \a policy.
10348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setScrollBarPolicy(Qt::Orientation orientation, Qt::ScrollBarPolicy policy)
10368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Q_ASSERT((int)ScrollbarAuto == (int)Qt::ScrollBarAsNeeded);
10388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Q_ASSERT((int)ScrollbarAlwaysOff == (int)Qt::ScrollBarAlwaysOff);
10398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Q_ASSERT((int)ScrollbarAlwaysOn == (int)Qt::ScrollBarAlwaysOn);
10408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (orientation == Qt::Horizontal) {
10428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->horizontalScrollBarPolicy = policy;
1043635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (d->frame->view()) {
1044dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            d->frame->view()->setHorizontalScrollbarMode((ScrollbarMode)policy, policy != Qt::ScrollBarAsNeeded /* lock */);
1045643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            d->frame->view()->updateCanHaveScrollbars();
1046635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
10478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } else {
10488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->verticalScrollBarPolicy = policy;
1049635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (d->frame->view()) {
1050dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            d->frame->view()->setVerticalScrollbarMode((ScrollbarMode)policy, policy != Qt::ScrollBarAsNeeded /* lock */);
1051643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            d->frame->view()->updateCanHaveScrollbars();
1052635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
10538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
10548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Sets the current \a value for the scrollbar with orientation \a orientation.
10588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The scrollbar forces the \a value to be within the legal range: minimum <= value <= maximum.
10608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Changing the value also updates the thumb position.
10628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa scrollBarMinimum(), scrollBarMaximum()
10648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setScrollBarValue(Qt::Orientation orientation, int value)
10668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Scrollbar *sb;
10688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar();
10698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (sb) {
10708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (value < 0)
10718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            value = 0;
10728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        else if (value > scrollBarMaximum(orientation))
10738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            value = scrollBarMaximum(orientation);
1074ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        sb->scrollableArea()->scrollToOffsetWithoutAnimation(orientation == Qt::Horizontal ? HorizontalScrollbar : VerticalScrollbar, value);
10758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
10768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the current value for the scrollbar with orientation \a orientation, or 0
10808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if no scrollbar is found for \a orientation.
10818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa scrollBarMinimum(), scrollBarMaximum()
10838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint QWebFrame::scrollBarValue(Qt::Orientation orientation) const
10858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Scrollbar *sb;
10878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar();
10880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (sb)
10898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return sb->value();
10908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return 0;
10918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the maximum value for the scrollbar with orientation \a orientation, or 0
10958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if no scrollbar is found for \a orientation.
10968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa scrollBarMinimum()
10988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint QWebFrame::scrollBarMaximum(Qt::Orientation orientation) const
11008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Scrollbar *sb;
11028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar();
11038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (sb)
11048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return sb->maximum();
11058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return 0;
11068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
11098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the minimum value for the scrollbar with orientation \a orientation.
11108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The minimum value is always 0.
11128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa scrollBarMaximum()
11148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
11158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint QWebFrame::scrollBarMinimum(Qt::Orientation orientation) const
11168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1117231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    Q_UNUSED(orientation)
11188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return 0;
11198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1122635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \since 4.6
1123635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  Returns the geometry for the scrollbar with orientation \a orientation.
1124635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1125635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  If the scrollbar does not exist an empty rect is returned.
1126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
1127635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectQRect QWebFrame::scrollBarGeometry(Qt::Orientation orientation) const
1128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1129635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Scrollbar *sb;
1130635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar();
1131635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (sb)
1132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return sb->frameRect();
1133635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return QRect();
1134635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
1135635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1136635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
11378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \since 4.5
11388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Scrolls the frame \a dx pixels to the right and \a dy pixels downward. Both
11398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \a dx and \a dy may be negative.
11400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \sa QWebFrame::scrollPosition
11428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
11438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid QWebFrame::scroll(int dx, int dy)
11458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->view())
11478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
11480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d->frame->view()->scrollBy(IntSize(dx, dy));
11508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1153635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \property QWebFrame::scrollPosition
1154635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \since 4.5
1155635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \brief the position the frame is currently scrolled to.
11568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
11578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1158635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectQPoint QWebFrame::scrollPosition() const
11598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->view())
11610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QPoint(0, 0);
11628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1163635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    IntSize ofs = d->frame->view()->scrollOffset();
1164635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return QPoint(ofs.width(), ofs.height());
11658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1167635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid QWebFrame::setScrollPosition(const QPoint &pos)
11688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1169635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    QPoint current = scrollPosition();
1170635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    int dx = pos.x() - current.x();
1171635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    int dy = pos.y() - current.y();
11728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    scroll(dx, dy);
11738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1176692e5dbf12901edacf14812a6fae25462920af42Steve Block  \since 4.7
1177692e5dbf12901edacf14812a6fae25462920af42Steve Block  Scrolls the frame to the given \a anchor name.
1178692e5dbf12901edacf14812a6fae25462920af42Steve Block*/
1179692e5dbf12901edacf14812a6fae25462920af42Steve Blockvoid QWebFrame::scrollToAnchor(const QString& anchor)
1180692e5dbf12901edacf14812a6fae25462920af42Steve Block{
1181692e5dbf12901edacf14812a6fae25462920af42Steve Block    FrameView *view = d->frame->view();
1182692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (view)
1183692e5dbf12901edacf14812a6fae25462920af42Steve Block        view->scrollToAnchor(anchor);
1184692e5dbf12901edacf14812a6fae25462920af42Steve Block}
1185692e5dbf12901edacf14812a6fae25462920af42Steve Block
1186692e5dbf12901edacf14812a6fae25462920af42Steve Block/*!
1187cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  \since 4.6
1188cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  Render the \a layer of the frame using \a painter clipping to \a clip.
11898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa print()
11918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
11928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1193cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid QWebFrame::render(QPainter* painter, RenderLayer layer, const QRegion& clip)
11948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1195643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext context(painter);
1196643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (context.paintingDisabled() && !context.updatingControlTints())
1197643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
1198643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1199cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    if (!clip.isEmpty())
1200643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        d->renderRelativeCoords(&context, layer, clip);
1201cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    else if (d->frame->view())
1202643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        d->renderRelativeCoords(&context, layer, QRegion(d->frame->view()->frameRect()));
1203635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
12048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1205635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
1206cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  Render the frame into \a painter clipping to \a clip.
12070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
1208643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid QWebFrame::render(QPainter* painter, const QRegion& clip)
12090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1210643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext context(painter);
1211643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (context.paintingDisabled() && !context.updatingControlTints())
1212643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
1213643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1214643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    d->renderRelativeCoords(&context, AllLayers, clip);
12150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
12160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
1218cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  Render the frame into \a painter.
1219635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
1220643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid QWebFrame::render(QPainter* painter)
1221635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1222cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    if (!d->frame->view())
1223cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return;
1224cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
1225643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext context(painter);
1226643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (context.paintingDisabled() && !context.updatingControlTints())
1227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
1228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1229643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    d->renderRelativeCoords(&context, AllLayers, QRegion(d->frame->view()->frameRect()));
12308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
12338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::textSizeMultiplier
12348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the scaling factor for all text in the frame
12358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \obsolete
12368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Use setZoomFactor instead, in combination with the ZoomTextOnly attribute in
12388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebSettings.
12398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \note Setting this property also enables the ZoomTextOnly attribute in
12418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebSettings.
12428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
12438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1244635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
1245635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Sets the value of the multiplier used to scale the text in a Web frame to
1246635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    the \a factor specified.
1247635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
12488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setTextSizeMultiplier(qreal factor)
12498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
125068513a70bcd92384395513322f1b801e7bf9c729Steve Block    page()->settings()->setAttribute(QWebSettings::ZoomTextOnly, true);
12515af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
125268513a70bcd92384395513322f1b801e7bf9c729Steve Block    d->frame->setPageAndTextZoomFactors(1, factor);
12538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1255635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
1256635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Returns the value of the multiplier used to scale the text in a Web frame.
1257635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
12588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectqreal QWebFrame::textSizeMultiplier() const
12598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12606b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    return page()->settings()->testAttribute(QWebSettings::ZoomTextOnly) ? d->frame->textZoomFactor() : d->frame->pageZoomFactor();
12618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
12648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::zoomFactor
12658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \since 4.5
12668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the zoom factor for the frame
12678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
12688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setZoomFactor(qreal factor)
12708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    if (page()->settings()->testAttribute(QWebSettings::ZoomTextOnly))
127268513a70bcd92384395513322f1b801e7bf9c729Steve Block        d->frame->setTextZoomFactor(factor);
127368513a70bcd92384395513322f1b801e7bf9c729Steve Block    else
127468513a70bcd92384395513322f1b801e7bf9c729Steve Block        d->frame->setPageZoomFactor(factor);
12758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectqreal QWebFrame::zoomFactor() const
12788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12796b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    return page()->settings()->testAttribute(QWebSettings::ZoomTextOnly) ? d->frame->textZoomFactor() : d->frame->pageZoomFactor();
12808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
12830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \property QWebFrame::focus
12840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
12850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns true if this frame has keyboard input focus; otherwise, returns false.
12870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
12880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool QWebFrame::hasFocus() const
12890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1290231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebCore::Frame* ff = d->frame->page()->focusController()->focusedFrame();
1291231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return ff && QWebFramePrivate::kit(ff) == this;
12920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
12930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
12950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
12960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Gives keyboard input focus to this frame.
12980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
12990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebFrame::setFocus()
13000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
13010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebFramePrivate::core(this)->page()->focusController()->setFocusedFrame(QWebFramePrivate::core(this));
13020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
13030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
13058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the position of the frame relative to it's parent frame.
13068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
13078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQPoint QWebFrame::pos() const
13088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
13098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->view())
13108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QPoint();
13118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->frame->view()->frameRect().topLeft();
13138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
13148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
13168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Return the geometry of the frame relative to it's parent frame.
13178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
13188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQRect QWebFrame::geometry() const
13198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
13208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->view())
13218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QRect();
13228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->frame->view()->frameRect();
13238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
13248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
13268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::contentsSize
13278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the size of the contents in this frame
1328635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
13290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa contentsSizeChanged()
13308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
13318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQSize QWebFrame::contentsSize() const
13328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
13338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FrameView *view = d->frame->view();
13348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!view)
13358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QSize();
13368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QSize(view->contentsWidth(), view->contentsHeight());
13378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
13388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
13400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
13410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the document element of this frame.
13430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    The document element provides access to the entire structured
13450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    content of the frame.
13460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
13470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebFrame::documentElement() const
13480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
13490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebCore::Document *doc = d->frame->document();
13500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!doc)
13510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QWebElement();
13520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return QWebElement(doc->documentElement());
13530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
13540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
13560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
13570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns a new list of elements matching the given CSS selector \a selectorQuery.
13580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    If there are no matching elements, an empty list is returned.
13590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \l{http://www.w3.org/TR/REC-CSS2/selector.html#q1}{Standard CSS2 selector} syntax is
13610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    used for the query.
13620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa QWebElement::findAll()
13640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
1365cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElementCollection QWebFrame::findAllElements(const QString &selectorQuery) const
13660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
13670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return documentElement().findAll(selectorQuery);
13680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
13690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
13710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
13720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the first element in the frame's document that matches the
13730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    given CSS selector \a selectorQuery. If there is no matching element, a
13740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    null element is returned.
13750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \l{http://www.w3.org/TR/REC-CSS2/selector.html#q1}{Standard CSS2 selector} syntax is
13770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    used for the query.
13780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa QWebElement::findFirst()
13800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
13810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebFrame::findFirstElement(const QString &selectorQuery) const
13820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
13830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return documentElement().findFirst(selectorQuery);
13840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
13850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
13878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Performs a hit test on the frame contents at the given position \a pos and returns the hit test result.
13888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
13898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult QWebFrame::hitTestContent(const QPoint &pos) const
13908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
13918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->view() || !d->frame->contentRenderer())
13928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QWebHitTestResult();
13938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1394563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    HitTestResult result = d->frame->eventHandler()->hitTestResultAtPoint(d->frame->view()->windowToContents(pos), /*allowShadowContent*/ false, /*ignoreClipping*/ true);
13950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (result.scrollbar())
13970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QWebHitTestResult();
13980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QWebHitTestResult(new QWebHitTestResultPrivate(result));
14008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
14018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! \reimp
14038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
14048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebFrame::event(QEvent *e)
14058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
14068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QObject::event(e);
14078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
14088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef QT_NO_PRINTER
14108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
14118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Prints the frame to the given \a printer.
14128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa render()
14148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
14158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::print(QPrinter *printer) const
14168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1417563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    QPainter painter;
1418563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!painter.begin(printer))
1419563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return;
1420563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
142106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    const qreal zoomFactorX = (qreal)printer->logicalDpiX() / qt_defaultDpi();
142206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    const qreal zoomFactorY = (qreal)printer->logicalDpiY() / qt_defaultDpi();
14238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PrintContext printContext(d->frame);
14258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float pageHeight = 0;
14268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QRect qprinterRect = printer->pageRect();
14288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntRect pageRect(0, 0,
14308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                     int(qprinterRect.width() / zoomFactorX),
14318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                     int(qprinterRect.height() / zoomFactorY));
14328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    printContext.begin(pageRect.width());
14348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    printContext.computePageRects(pageRect, /* headerHeight */ 0, /* footerHeight */ 0, /* userScaleFactor */ 1.0, pageHeight);
14368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int docCopies;
14388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int pageCopies;
14390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (printer->collateCopies()) {
14408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        docCopies = 1;
14418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pageCopies = printer->numCopies();
14428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } else {
14438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        docCopies = printer->numCopies();
14448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pageCopies = 1;
14458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
14468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int fromPage = printer->fromPage();
14488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int toPage = printer->toPage();
14498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool ascending = true;
14508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (fromPage == 0 && toPage == 0) {
14528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        fromPage = 1;
14538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        toPage = printContext.pageCount();
14548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
14558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // paranoia check
14568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    fromPage = qMax(1, fromPage);
145765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    toPage = qMin(static_cast<int>(printContext.pageCount()), toPage);
1458d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (toPage < fromPage) {
1459d0825bca7fe65beaee391d30da42e937db621564Steve Block        // if the user entered a page range outside the actual number
1460d0825bca7fe65beaee391d30da42e937db621564Steve Block        // of printable pages, just return
1461d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
1462d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
14638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (printer->pageOrder() == QPrinter::LastPageFirst) {
14658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int tmp = fromPage;
14668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        fromPage = toPage;
14678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        toPage = tmp;
14688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ascending = false;
14698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
14708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    painter.scale(zoomFactorX, zoomFactorY);
14728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    GraphicsContext ctx(&painter);
14738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (int i = 0; i < docCopies; ++i) {
14758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int page = fromPage;
14768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        while (true) {
14778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            for (int j = 0; j < pageCopies; ++j) {
14788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                if (printer->printerState() == QPrinter::Aborted
14798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    || printer->printerState() == QPrinter::Error) {
14808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    printContext.end();
14818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    return;
14828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                }
14838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                printContext.spoolPage(ctx, page - 1, pageRect.width());
14848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                if (j < pageCopies - 1)
14858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    printer->newPage();
14868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            }
14878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (page == toPage)
14898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                break;
14908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (ascending)
14928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                ++page;
14938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            else
14948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                --page;
14958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            printer->newPage();
14978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
14988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ( i < docCopies - 1)
15008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            printer->newPage();
15018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
15028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    printContext.end();
15048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
15058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // QT_NO_PRINTER
15068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1508563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    Evaluates the JavaScript defined by \a scriptSource using this frame as context
1509563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    and returns the result of the last executed statement.
15108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa addToJavaScriptWindowObject(), javaScriptWindowObjectCleared()
15128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
15138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQVariant QWebFrame::evaluateJavaScript(const QString& scriptSource)
15148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
15158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ScriptController *proxy = d->frame->script();
15168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QVariant rc;
15178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (proxy) {
151868513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
15190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        int distance = 0;
152068513a70bcd92384395513322f1b801e7bf9c729Steve Block        JSC::JSValue v = d->frame->script()->executeScript(ScriptSourceCode(scriptSource)).jsValue();
152168513a70bcd92384395513322f1b801e7bf9c729Steve Block
1522cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        rc = JSC::Bindings::convertValueToQVariant(proxy->globalObject(mainThreadNormalWorld())->globalExec(), v, QMetaType::Void, &distance);
152368513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8)
152468513a70bcd92384395513322f1b801e7bf9c729Steve Block        QScriptEngine* engine = d->frame->script()->qtScriptEngine();
152568513a70bcd92384395513322f1b801e7bf9c729Steve Block        if (!engine)
152668513a70bcd92384395513322f1b801e7bf9c729Steve Block            return rc;
152768513a70bcd92384395513322f1b801e7bf9c729Steve Block        rc = engine->evaluate(scriptSource).toVariant();
152868513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
15298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
15308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return rc;
15318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
15328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1533635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
1534635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \since 4.5
1535635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1536635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Returns the frame's security origin.
1537635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
1538635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectQWebSecurityOrigin QWebFrame::securityOrigin() const
1539635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1540635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    QWebFrame* that = const_cast<QWebFrame*>(this);
1541635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    QWebSecurityOriginPrivate* priv = new QWebSecurityOriginPrivate(QWebFramePrivate::core(that)->document()->securityOrigin());
1542635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return QWebSecurityOrigin(priv);
1543635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
1544635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1545e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockWebCore::Frame* QWebFramePrivate::core(const QWebFrame* webFrame)
15468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
15478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return webFrame->d->frame;
15488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
15498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1550e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockQWebFrame* QWebFramePrivate::kit(const WebCore::Frame* coreFrame)
15518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
155268513a70bcd92384395513322f1b801e7bf9c729Steve Block    return qobject_cast<QWebFrame*>(coreFrame->loader()->networkingContext()->originatingObject());
15538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
15548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
15578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \fn void QWebFrame::javaScriptWindowObjectCleared()
15588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This signal is emitted whenever the global window object of the JavaScript
15608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    environment is cleared, e.g., before starting a new load.
15618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    If you intend to add QObjects to a QWebFrame using
15638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    addToJavaScriptWindowObject(), you should add them in a slot connected
15648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    to this signal. This ensures that your objects remain accessible when
15658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    loading new URLs.
15668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
15678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
15698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \fn void QWebFrame::provisionalLoad()
15708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \internal
15718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
15728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
15748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \fn void QWebFrame::titleChanged(const QString &title)
15758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This signal is emitted whenever the title of the frame changes.
15778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The \a title string specifies the new title.
15788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa title()
15808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
15818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
15838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \fn void QWebFrame::urlChanged(const QUrl &url)
15848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This signal is emitted with the URL of the frame when the frame's title is
15868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    received. The new URL is specified by \a url.
15878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa url()
15898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
15908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
15928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \fn void QWebFrame::initialLayoutCompleted()
15938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This signal is emitted when the frame is laid out the first time.
15958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This is the first time you will see contents displayed on the frame.
15968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \note A frame can be laid out multiple times.
15988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
15998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
16018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \fn void QWebFrame::iconChanged()
16028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  This signal is emitted when the icon ("favicon") associated with the frame
16048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  has been loaded.
16058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa icon()
16078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
16088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1610635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \fn void QWebFrame::contentsSizeChanged(const QSize &size)
1611635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \since 4.6
16128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  This signal is emitted when the frame's contents size changes
16140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  to \a size.
16158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1616635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \sa contentsSize()
16178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
16188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
16200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \fn void QWebFrame::loadStarted()
16210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
16220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    This signal is emitted when a new load of this frame is started.
16240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa loadFinished()
16260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
16270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
16290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \fn void QWebFrame::loadFinished(bool ok)
16300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
16310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    This signal is emitted when a load of this frame is finished.
16330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \a ok will indicate whether the load was successful or any error occurred.
16340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa loadStarted()
16360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
16370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
1639dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    \fn void QWebFrame::pageChanged()
1640dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    \since 4.7
1641dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1642dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    This signal is emitted when this frame has been moved to a different QWebPage.
1643dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1644dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    \sa page()
1645dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block*/
1646dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1647dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/*!
16488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \class QWebHitTestResult
16498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \since 4.4
16508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief The QWebHitTestResult class provides information about the web
16518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    page content after a hit test.
16528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1653231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    \inmodule QtWebKit
1654231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
16558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebHitTestResult is returned by QWebFrame::hitTestContent() to provide
16568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    information about the content of the web page at the specified position.
16578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
16588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
16608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \internal
16618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
16628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult::QWebHitTestResult(QWebHitTestResultPrivate *priv)
16638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : d(priv)
16648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
16658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
16668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResultPrivate::QWebHitTestResultPrivate(const WebCore::HitTestResult &hitTest)
16688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : isContentEditable(false)
16698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , isContentSelected(false)
1670635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    , isScrollBar(false)
16718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
16728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!hitTest.innerNode())
16738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
16748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    pos = hitTest.point();
16750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebCore::TextDirection dir;
16760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    title = hitTest.title(dir);
16778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    linkText = hitTest.textContent();
16788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    linkUrl = hitTest.absoluteLinkURL();
16798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    linkTitle = hitTest.titleDisplayString();
16808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    alternateText = hitTest.altDisplayString();
16818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    imageUrl = hitTest.absoluteImageURL();
1682635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    innerNode = hitTest.innerNode();
16838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    innerNonSharedNode = hitTest.innerNonSharedNode();
1684cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    boundingRect = innerNonSharedNode ? innerNonSharedNode->renderer()->absoluteBoundingBoxRect(true) : IntRect();
16858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::Image *img = hitTest.image();
16868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (img) {
16878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QPixmap *pix = img->nativeImageForCurrentFrame();
16888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (pix)
16898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            pixmap = *pix;
16908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
16918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::Frame *wframe = hitTest.targetFrame();
16928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (wframe)
16938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        linkTargetFrame = QWebFramePrivate::kit(wframe);
16940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    linkElement = QWebElement(hitTest.URLElement());
16958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    isContentEditable = hitTest.isContentEditable();
16978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    isContentSelected = hitTest.isSelected();
1698635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    isScrollBar = hitTest.scrollbar();
16998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (innerNonSharedNode && innerNonSharedNode->document()
17018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        && innerNonSharedNode->document()->frame())
17028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        frame = QWebFramePrivate::kit(innerNonSharedNode->document()->frame());
1703635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
17040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    enclosingBlock = QWebElement(WebCore::enclosingBlock(innerNode.get()));
17058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Constructs a null hit test result.
17098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult::QWebHitTestResult()
17118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : d(0)
17128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Constructs a hit test result from \a other.
17178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult::QWebHitTestResult(const QWebHitTestResult &other)
17198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : d(0)
17208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (other.d)
17228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d = new QWebHitTestResultPrivate(*other.d);
17238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Assigns the \a other hit test result to this.
17278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult &QWebHitTestResult::operator=(const QWebHitTestResult &other)
17298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (this != &other) {
17318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (other.d) {
17328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (!d)
17338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                d = new QWebHitTestResultPrivate;
17348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            *d = *other.d;
17358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } else {
17368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            delete d;
17378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            d = 0;
17388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
17398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
17408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return *this;
17418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Destructor.
17458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult::~QWebHitTestResult()
17478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    delete d;
17498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns true if the hit test result is null; otherwise returns false.
17538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebHitTestResult::isNull() const
17558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return !d;
17578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the position where the hit test occured.
17618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQPoint QWebHitTestResult::pos() const
17638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
17658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QPoint();
17668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->pos;
17678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \since 4.5
1771635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Returns the bounding rect of the element.
17728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQRect QWebHitTestResult::boundingRect() const
17748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
17768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QRect();
17778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->boundingRect;
17788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1781635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \since 4.6
17820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the block element that encloses the element hit.
17830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    A block element is an element that is rendered using the
17850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    CSS "block" style. This includes for example text
17860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paragraphs.
1787635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
17880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebHitTestResult::enclosingBlockElement() const
1789635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1790635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!d)
17910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QWebElement();
1792635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return d->enclosingBlock;
1793635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
1794635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1795635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
17968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the title of the nearest enclosing HTML element.
17978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebHitTestResult::title() const
17998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QString();
18028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->title;
18038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the text of the link.
18078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebHitTestResult::linkText() const
18098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QString();
18128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->linkText;
18138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the url to which the link points to.
18178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQUrl QWebHitTestResult::linkUrl() const
18198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QUrl();
18228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->linkUrl;
18238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the title of the link.
18278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQUrl QWebHitTestResult::linkTitle() const
18298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QUrl();
18328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->linkTitle;
18338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1836563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark  \since 4.6
18370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  Returns the element that represents the link.
1838563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
18390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  \sa linkTargetFrame()
1840563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/
18410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebHitTestResult::linkElement() const
1842563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
1843563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!d)
18440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QWebElement();
18450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return d->linkElement;
1846563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
1847563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
1848563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*!
18498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the frame that will load the link if it is activated.
1850563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
18510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa linkElement()
18528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebFrame *QWebHitTestResult::linkTargetFrame() const
18548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
18578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->linkTargetFrame;
18588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the alternate text of the element. This corresponds to the HTML alt attribute.
18628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebHitTestResult::alternateText() const
18648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QString();
18678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->alternateText;
18688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the url of the image.
18728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQUrl QWebHitTestResult::imageUrl() const
18748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QUrl();
18778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->imageUrl;
18788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns a QPixmap containing the image. A null pixmap is returned if the
18828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    element being tested is not an image.
18838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQPixmap QWebHitTestResult::pixmap() const
18858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QPixmap();
18888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->pixmap;
18898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns true if the content is editable by the user; otherwise returns false.
18938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebHitTestResult::isContentEditable() const
18958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
18988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->isContentEditable;
18998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
19008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
19018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
19028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns true if the content tested is part of the selection; otherwise returns false.
19038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
19048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebHitTestResult::isContentSelected() const
19058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
19068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
19078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
19088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->isContentSelected;
19098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
19108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
19118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
19120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
19130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the underlying DOM element as QWebElement.
19148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
19150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebHitTestResult::element() const
19168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
19170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!d || !d->innerNonSharedNode || !d->innerNonSharedNode->isElementNode())
19180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QWebElement();
19190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
19200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return QWebElement(static_cast<WebCore::Element*>(d->innerNonSharedNode.get()));
19218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
19228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1923635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
19240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the frame the hit test was executed in.
1925635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
19260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebFrame *QWebHitTestResult::frame() const
1927635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1928635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!d)
19290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return 0;
19300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return d->frame;
1931635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
1932