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()));
3162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    renderFrameExtras(context, QFlags<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
3452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid QWebFramePrivate::renderRelativeCoords(GraphicsContext* context, QFlags<QWebFrame::RenderLayer> layers, 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
3592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (layers & QWebFrame::ContentsLayer) {
360a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        for (int i = 0; i < vector.size(); ++i) {
361a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            const QRect& clipRect = vector.at(i);
362cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
3632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            QRect rect = clipRect.intersected(view->frameRect());
364cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
365643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            context->save();
366a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            painter->setClipRect(clipRect, Qt::IntersectClip);
367a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
368a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            int x = view->x();
369a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            int y = view->y();
370cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
371cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            int scrollX = view->scrollX();
372cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            int scrollY = view->scrollY();
373cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
374643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            context->translate(x, y);
375cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            rect.translate(-x, -y);
376643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            context->translate(-scrollX, -scrollY);
377cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            rect.translate(scrollX, scrollY);
378643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            context->clip(view->visibleContentRect());
379cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
380643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            view->paintContents(context, rect);
381cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
382643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            context->restore();
383cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        }
384a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER)
38528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        renderCompositedLayers(context, IntRect(clip.boundingRect()));
386a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif
387a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    }
3882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    renderFrameExtras(context, layers, clip);
3892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if ENABLE(INSPECTOR)
3902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (frame->page()->inspectorController()->highlightedNode()) {
3912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        context->save();
3922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        frame->page()->inspectorController()->drawNodeHighlight(*context);
3932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        context->restore();
3942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
3952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
3962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
397cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
3982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid QWebFramePrivate::renderFrameExtras(GraphicsContext* context, QFlags<QWebFrame::RenderLayer> layers, const QRegion& clip)
3992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
4002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!(layers & (QWebFrame::PanIconLayer | QWebFrame::ScrollBarLayer)))
4012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
4022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QPainter* painter = context->platformContext();
4032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebCore::FrameView* view = frame->view();
4042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVector<QRect> vector = clip.rects();
4052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    for (int i = 0; i < vector.size(); ++i) {
4062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        const QRect& clipRect = vector.at(i);
407cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
4082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QRect intersectedRect = clipRect.intersected(view->frameRect());
409cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
4102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        painter->save();
4112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        painter->setClipRect(clipRect, Qt::IntersectClip);
412a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
4132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        int x = view->x();
4142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        int y = view->y();
415a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
4162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        if (layers & QWebFrame::ScrollBarLayer
4172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            && !view->scrollbarsSuppressed()
4182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            && (view->horizontalScrollbar() || view->verticalScrollbar())) {
419a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
4202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            QRect rect = intersectedRect;
4212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            context->translate(x, y);
4222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            rect.translate(-x, -y);
4232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            view->paintScrollbars(context, rect);
4242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            context->translate(-x, -y);
4252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        }
426cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
427643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if ENABLE(PAN_SCROLLING)
4282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        if (layers & QWebFrame::PanIconLayer)
4292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            view->paintPanScrollIcon(context);
430643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
431cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
4322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        painter->restore();
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid QWebFramePrivate::emitUrlChanged()
4372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
4382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    url = frame->document()->url();
4392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    emit q->urlChanged(url);
4402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
4412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid QWebFramePrivate::_q_orientationChanged()
443f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
444f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION)
445f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    int orientation;
4462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebCore::Frame* frame = core(q);
447f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
4482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    switch (m_orientation.reading()->orientation()) {
449f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::TopUp:
450f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        orientation = 0;
451f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        break;
452f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::TopDown:
453f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        orientation = 180;
454f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        break;
455f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::LeftUp:
456f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        orientation = -90;
457f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        break;
458f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::RightUp:
459f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        orientation = 90;
460f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        break;
461f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::FaceUp:
462f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    case QtMobility::QOrientationReading::FaceDown:
463f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        // WebCore unable to handle it
464f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    default:
465f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        return;
466f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    }
467f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    frame->sendOrientationChangeEvent(orientation);
468f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif
469f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \class QWebFrame
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \since 4.4
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief The QWebFrame class represents a frame in a web page.
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
475231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    \inmodule QtWebKit
476231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebFrame represents a frame inside a web page. Each QWebPage
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    object contains at least one frame, the main frame, obtained using
4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebPage::mainFrame(). Additional frames will be created for HTML
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \c{<frame>} or \c{<iframe>} elements.
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    A frame can be loaded using load() or setUrl(). Alternatively, if you have
4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    the HTML content readily available, you can use setHtml() instead.
4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The page() function returns a pointer to the web page object. See
486643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \l{QWebView}{Elements of QWebView} for an explanation of how web
4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    frames are related to a web page and web view.
4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    The QWebFrame class also offers methods to retrieve both the URL currently
4900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    loaded by the frame (see url()) as well as the URL originally requested
4910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    to be loaded (see requestedUrl()). These methods make possible the retrieval
4920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    of the URL before and after a DNS resolution or a redirection occurs during
4930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    the load process. The requestedUrl() also matches to the URL added to the
4940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    frame history (\l{QWebHistory}) if load is successful.
4950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The title of an HTML frame can be accessed with the title() property.
4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Additionally, a frame may also specify an icon, which can be accessed
4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    using the icon() property. If the title or the icon changes, the
4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    corresponding titleChanged() and iconChanged() signals will be emitted.
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The zoomFactor() property can be used to change the overall size
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    of the content displayed in the frame.
5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebFrame objects are created and controlled by the web page. You
5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    can connect to the web page's \l{QWebPage::}{frameCreated()} signal
5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    to be notified when a new frame is created.
5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    There are multiple ways to programmatically examine the contents of a frame.
5086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    The hitTestContent() function can be used to find elements by coordinate.
5096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    For access to the underlying DOM tree, there is documentElement(),
5106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    findAllElements() and findFirstElement().
5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    A QWebFrame can be printed onto a QPrinter using the print() function.
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This function is marked as a slot and can be conveniently connected to
5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \l{QPrintPreviewDialog}'s \l{QPrintPreviewDialog::}{paintRequested()}
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    signal.
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa QWebPage
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
520643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/*!
521643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \enum QWebFrame::RenderLayer
522643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
523643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    This enum describes the layers available for rendering using \l{QWebFrame::}{render()}.
524643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    The layers can be OR-ed together from the following list:
525643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
526643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \value ContentsLayer The web content of the frame
527643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \value ScrollBarLayer The scrollbars of the frame
528643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \value PanIconLayer The icon used when panning the frame
529643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
530643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    \value AllLayers Includes all the above layers
531643ca7872b450ea4efacab6188849e5aac2ba161Steve Block*/
532643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebFrame::QWebFrame(QWebPage *parent, QWebFrameData *frameData)
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : QObject(parent)
5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , d(new QWebFramePrivate)
5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d->page = parent;
5380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    d->init(this, frameData);
5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!frameData->url.isEmpty()) {
5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        WebCore::ResourceRequest request(frameData->url, frameData->referrer);
542563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        d->frame->loader()->load(request, frameData->name, false);
5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
544f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION)
5452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    connect(&d->m_orientation, SIGNAL(readingChanged()), this, SLOT(_q_orientationChanged()));
546f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    d->m_orientation.start();
547f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebFrame::QWebFrame(QWebFrame *parent, QWebFrameData *frameData)
5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : QObject(parent)
5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , d(new QWebFramePrivate)
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d->page = parent->d->page;
5550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    d->init(this, frameData);
556f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION)
5572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    connect(&d->m_orientation, SIGNAL(readingChanged()), this, SLOT(_q_orientationChanged()));
558f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    d->m_orientation.start();
559f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebFrame::~QWebFrame()
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->frame && d->frame->loader() && d->frame->loader()->client())
5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        static_cast<FrameLoaderClientQt*>(d->frame->loader()->client())->m_webFrame = 0;
5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    delete d;
5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Make \a object available under \a name from within the frame's JavaScript
5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    context. The \a object will be inserted as a child of the frame's window
5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    object.
5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Qt properties will be exposed as JavaScript properties and slots as
5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    JavaScript methods.
57781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    The interaction between C++ and JavaScript is explained in the documentation of the \l{The QtWebKit Bridge}{QtWebKit bridge}.
5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    If you want to ensure that your QObjects remain accessible after loading a
5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    new URL, you should add them in a slot connected to the
5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    javaScriptWindowObjectCleared() signal.
582563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
5830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    If Javascript is not enabled for this page, then this method does nothing.
5840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
585563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    The \a object will never be explicitly deleted by QtWebKit.
5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object)
5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
589563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    addToJavaScriptWindowObject(name, object, QScriptEngine::QtOwnership);
590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
592563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*!
593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    \fn void QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object, QScriptEngine::ValueOwnership own)
594563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    \overload
5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
596563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    Make \a object available under \a name from within the frame's JavaScript
597563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    context. The \a object will be inserted as a child of the frame's window
598563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    object.
599563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
600563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    Qt properties will be exposed as JavaScript properties and slots as
601563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    JavaScript methods.
60281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    The interaction between C++ and JavaScript is explained in the documentation of the \l{The QtWebKit Bridge}{QtWebKit bridge}.
603563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
604563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    If you want to ensure that your QObjects remain accessible after loading a
605563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    new URL, you should add them in a slot connected to the
606563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    javaScriptWindowObjectCleared() signal.
607563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
6080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    If Javascript is not enabled for this page, then this method does nothing.
6090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
610563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    The ownership of \a object is specified using \a own.
611563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/
612563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object, QScriptEngine::ValueOwnership ownership)
613563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
6140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!page()->settings()->testAttribute(QWebSettings::JavascriptEnabled))
6150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return;
61668513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
6170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    JSC::JSLock lock(JSC::SilenceAssertionsOnly);
618cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    JSDOMWindow* window = toJSDOMWindow(d->frame, mainThreadNormalWorld());
619545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    JSC::Bindings::RootObject* root;
620545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    if (ownership == QScriptEngine::QtOwnership)
621545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        root = d->frame->script()->cacheableBindingRootObject();
622545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    else
623545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        root = d->frame->script()->bindingRootObject();
624545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
625563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!window) {
626563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        qDebug() << "Warning: couldn't get window object";
627563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return;
628563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    }
6294576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!root) {
6304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        qDebug() << "Warning: couldn't get root object";
6314576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return;
6324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
634563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    JSC::ExecState* exec = window->globalExec();
635563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
636563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    JSC::JSObject* runtimeObject =
637563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark            JSC::Bindings::QtInstance::getQtInstance(object, root, ownership)->createRuntimeObject(exec);
638563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
639563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    JSC::PutPropertySlot slot;
640e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    window->put(exec, JSC::Identifier(exec, reinterpret_cast_ptr<const UChar*>(name.constData()), name.length()), runtimeObject, slot);
64168513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8)
64268513a70bcd92384395513322f1b801e7bf9c729Steve Block    QScriptEngine* engine = d->frame->script()->qtScriptEngine();
64368513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (!engine)
64468513a70bcd92384395513322f1b801e7bf9c729Steve Block        return;
64568513a70bcd92384395513322f1b801e7bf9c729Steve Block    QScriptValue v = engine->newQObject(object, ownership);
64668513a70bcd92384395513322f1b801e7bf9c729Steve Block    engine->globalObject().property("window").setProperty(name, v);
64768513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
6510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the frame's content as HTML, enclosed in HTML and BODY tags.
6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa setHtml(), toPlainText()
6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebFrame::toHtml() const
6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->document())
6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QString();
6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return createMarkup(d->frame->document());
6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
6630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the content of this frame converted to plain text, completely
6640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    stripped of all HTML formatting.
6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa toHtml()
6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebFrame::toPlainText() const
6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->frame->view() && d->frame->view()->layoutPending())
6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->frame->view()->layout();
6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Element *documentElement = d->frame->document()->documentElement();
674643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (documentElement)
675643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return documentElement->innerText();
676643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return QString();
6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns a dump of the rendering tree. This is mainly useful for debugging
6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    html.
6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebFrame::renderTreeDump() const
6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->frame->view() && d->frame->view()->layoutPending())
6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->frame->view()->layout();
6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
688643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return externalRepresentation(d->frame);
6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::title
6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the title of the frame as defined by the HTML &lt;title&gt; element
6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa titleChanged()
6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebFrame::title() const
6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->frame->document())
7012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return d->frame->loader()->documentLoader()->title().string();
7020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return QString();
7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
705635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
706635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \since 4.5
707635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \brief Returns the meta data in this frame as a QMultiMap
708635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
709635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    The meta data consists of the name and content attributes of the
710635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    of the \c{<meta>} tags in the HTML document.
711635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
712635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    For example:
713635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
714635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \code
715635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    <html>
716635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        <head>
717635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            <meta name="description" content="This document is a tutorial about Qt development">
718635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            <meta name="keywords" content="Qt, WebKit, Programming">
719635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        </head>
720635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        ...
721635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    </html>
722635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \endcode
723635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
724635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Given the above HTML code the metaData() function will return a map with two entries:
725635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \table
726635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \header \o Key
727635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            \o Value
728635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \row    \o "description"
729635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            \o "This document is a tutorial about Qt development"
730635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \row    \o "keywords"
731635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            \o "Qt, WebKit, Programming"
732635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \endtable
733635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
734635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    This function returns a multi map to support multiple meta tags with the same attribute name.
735635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
736635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectQMultiMap<QString, QString> QWebFrame::metaData() const
737635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
7380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!d->frame->document())
7390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch       return QMap<QString, QString>();
740635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
7410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QMultiMap<QString, QString> map;
742635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Document* doc = d->frame->document();
743635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    RefPtr<NodeList> list = doc->getElementsByTagName("meta");
744635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    unsigned len = list->length();
745635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    for (unsigned i = 0; i < len; i++) {
746635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        HTMLMetaElement* meta = static_cast<HTMLMetaElement*>(list->item(i));
747635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        map.insert(meta->name(), meta->content());
748635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    }
749635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return map;
750635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
751635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
7522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic inline void clearCoreFrame(WebCore::Frame* frame)
7532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
7542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    frame->loader()->activeDocumentLoader()->writer()->begin();
7552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    frame->loader()->activeDocumentLoader()->writer()->end();
7562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
7572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
7582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic inline bool isCoreFrameClear(WebCore::Frame* frame)
7592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
7602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return frame->document()->url().isEmpty();
7612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
7622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic inline QUrl ensureAbsoluteUrl(const QUrl &url)
7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7652bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!url.isValid() || !url.isRelative())
7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return url;
7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
76881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // This contains the URL with absolute path but without
76981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // the query and the fragment part.
77081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QUrl baseUrl = QUrl::fromLocalFile(QFileInfo(url.toLocalFile()).absoluteFilePath());
77181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
77281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // The path is removed so the query and the fragment parts are there.
77381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QString pathRemoved = url.toString(QUrl::RemovePath);
77481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QUrl toResolve(pathRemoved);
77581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
77681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return baseUrl.resolved(toResolve);
7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::url
7818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the url of the frame currently viewed
7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Setting this property clears the view and loads the URL.
7846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
7856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    By default, this property contains an empty, invalid URL.
7866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa urlChanged()
7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setUrl(const QUrl &url)
7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
7922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    clearCoreFrame(d->frame);
793e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    const QUrl absolute = ensureAbsoluteUrl(url);
7942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    d->url = absolute;
795e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    load(absolute);
7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
7978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQUrl QWebFrame::url() const
7998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
8002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return d->url;
8018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
8040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
8050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \property QWebFrame::requestedUrl
8060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    The URL requested to loaded by the frame currently viewed. The URL may differ from
8080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    the one returned by url() if a DNS resolution or a redirection occurs.
8090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa url(), setUrl()
8110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
8120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQUrl QWebFrame::requestedUrl() const
8130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
8142bde8e466a4451c7319e3a072d118917957d6554Steve Block    return d->frameLoaderClient->lastRequestedUrl();
8150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
8160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
8170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
8180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \property QWebFrame::baseUrl
8190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \brief the base URL of the frame, can be used to resolve relative URLs
8200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
8210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
8220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQUrl QWebFrame::baseUrl() const
8240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
8252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (isCoreFrameClear(d->frame))
8262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return QUrl(d->url).resolved(QUrl());
8272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return d->frame->document()->baseURL();
8280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
8290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
8318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::icon
8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the icon associated with this frame
8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa iconChanged(), QWebSettings::iconForUrl()
8358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
8368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQIcon QWebFrame::icon() const
8388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
8392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    return QWebSettings::iconForUrl(d->frame->document()->url());
8408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The name of this frame as defined by the parent frame.
8448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebFrame::frameName() const
8468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
84728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    return d->frame->tree()->uniqueName();
8488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
8518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The web page that contains this frame.
852dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
853dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block  \sa pageChanged()
8548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
8558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebPage *QWebFrame::page() const
8568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
8578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->page;
8588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
8618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Loads \a url into this frame.
8628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \note The view remains the same until enough data has arrived to display the new \a url.
8648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa setUrl(), setHtml(), setContent()
8668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
8678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::load(const QUrl &url)
8688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
869e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    // The load() overload ensures that the url is absolute.
870e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    load(QNetworkRequest(url));
8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
8748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Loads a network request, \a req, into this frame, using the method specified in \a
8758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  operation.
8768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \a body is optional and is only used for POST operations.
8788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
879dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block  \note The view remains the same until enough data has arrived to display the new content.
8808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa setUrl()
8828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
8838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::load(const QNetworkRequest &req,
8848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                     QNetworkAccessManager::Operation operation,
8858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                     const QByteArray &body)
8868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
8878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->parentFrame())
8888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->page->d->insideOpenCall = true;
8898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QUrl url = ensureAbsoluteUrl(req.url());
8918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::ResourceRequest request(url);
8938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
8948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    switch (operation) {
8958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case QNetworkAccessManager::HeadOperation:
8968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            request.setHTTPMethod("HEAD");
8978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
8988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case QNetworkAccessManager::GetOperation:
8998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            request.setHTTPMethod("GET");
9008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
9018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case QNetworkAccessManager::PutOperation:
9028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            request.setHTTPMethod("PUT");
9038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
9048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case QNetworkAccessManager::PostOperation:
9058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            request.setHTTPMethod("POST");
9068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
907643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        case QNetworkAccessManager::DeleteOperation:
908643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            request.setHTTPMethod("DELETE");
909643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            break;
910f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        case QNetworkAccessManager::CustomOperation:
911f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            request.setHTTPMethod(req.attribute(QNetworkRequest::CustomVerbAttribute).toByteArray().constData());
912f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            break;
9138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case QNetworkAccessManager::UnknownOperation:
9148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // eh?
9158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
9168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
9178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
918f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    QVariant cacheLoad = req.attribute(QNetworkRequest::CacheLoadControlAttribute);
919f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (cacheLoad.isValid()) {
920f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        bool ok;
921f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        uint cacheLoadValue = cacheLoad.toUInt(&ok);
922f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        if (ok)
923f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch            request.setCachePolicy(cacheLoadControlToCachePolicy(cacheLoadValue));
924f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    }
925f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
9268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QList<QByteArray> httpHeaders = req.rawHeaderList();
9278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (int i = 0; i < httpHeaders.size(); ++i) {
9288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        const QByteArray &headerName = httpHeaders.at(i);
9298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        request.addHTTPHeaderField(QString::fromLatin1(headerName), QString::fromLatin1(req.rawHeader(headerName)));
9308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
9318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!body.isEmpty())
9338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        request.setHTTPBody(WebCore::FormData::create(body.constData(), body.size()));
9348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
935563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    d->frame->loader()->load(request, false);
9368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->parentFrame())
9388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->page->d->insideOpenCall = false;
9398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
9428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Sets the content of this frame to \a html. \a baseUrl is optional and used to resolve relative
943635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  URLs in the document, such as referenced images or stylesheets.
9448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  The \a html is loaded immediately; external objects are loaded asynchronously.
9460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9470617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen  If a script in the \a html runs longer than the default script timeout (currently 10 seconds),
9480617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen  for example due to being blocked by a modal JavaScript alert dialog, this method will return
9490617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen  as soon as possible after the timeout and any subsequent \a html will be loaded asynchronously.
9500617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
9518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  When using this method WebKit assumes that external resources such as JavaScript programs or style
9528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  sheets are encoded in UTF-8 unless otherwise specified. For example, the encoding of an external
9538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  script can be specified through the charset attribute of the HTML script tag. It is also possible
9548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  for the encoding to be specified by web server.
9558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
956db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block  This is a convenience function equivalent to setContent(html, "text/html", baseUrl).
957db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
958231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block  \note This method will not affect session or global history for the frame.
959231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
960db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block  \warning This function works only for HTML, for other mime types (i.e. XHTML, SVG)
961db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block  setContent() should be used instead.
962db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
963db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block  \sa toHtml(), setContent(), load()
9648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
9658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setHtml(const QString &html, const QUrl &baseUrl)
9668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
9678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    KURL kurl(baseUrl);
9688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::ResourceRequest request(kurl);
9698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const QByteArray utf8 = html.toUtf8();
9708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WTF::RefPtr<WebCore::SharedBuffer> data = WebCore::SharedBuffer::create(utf8.constData(), utf8.length());
971dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WebCore::SubstituteData substituteData(data, WTF::String("text/html"), WTF::String("utf-8"), KURL());
972563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    d->frame->loader()->load(request, substituteData, false);
9738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
9748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
9768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Sets the content of this frame to the specified content \a data. If the \a mimeType argument
9778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  is empty it is currently assumed that the content is HTML but in future versions we may introduce
9788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  auto-detection.
9798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  External objects referenced in the content are located relative to \a baseUrl.
9818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  The \a data is loaded immediately; external objects are loaded asynchronously.
9830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
984231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block  \note This method will not affect session or global history for the frame.
985231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
986231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block  \sa toHtml(), setHtml()
9878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
9888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setContent(const QByteArray &data, const QString &mimeType, const QUrl &baseUrl)
9898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
9908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    KURL kurl(baseUrl);
9918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::ResourceRequest request(kurl);
9928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WTF::RefPtr<WebCore::SharedBuffer> buffer = WebCore::SharedBuffer::create(data.constData(), data.length());
993dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    QString actualMimeType;
994dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WTF::String encoding;
995dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    if (mimeType.isEmpty())
9968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        actualMimeType = QLatin1String("text/html");
997dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    else {
998dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        actualMimeType = extractMIMETypeFromMediaType(mimeType);
999dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        encoding = extractCharsetFromMediaType(mimeType);
1000dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    }
1001dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    WebCore::SubstituteData substituteData(buffer, WTF::String(actualMimeType), encoding, KURL());
1002563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    d->frame->loader()->load(request, substituteData, false);
10038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the parent frame of this frame, or 0 if the frame is the web pages
10078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  main frame.
10088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  This is equivalent to qobject_cast<QWebFrame*>(frame->parent()).
10108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa childFrames()
10128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebFrame *QWebFrame::parentFrame() const
10148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->parentFrame();
10168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns a list of all frames that are direct children of this frame.
10208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa parentFrame()
10228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQList<QWebFrame*> QWebFrame::childFrames() const
10248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QList<QWebFrame*> rc;
10268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (d->frame) {
10278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        FrameTree *tree = d->frame->tree();
10288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (Frame *child = tree->firstChild(); child; child = child->tree()->nextSibling()) {
10298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            FrameLoader *loader = child->loader();
103068513a70bcd92384395513322f1b801e7bf9c729Steve Block            QWebFrame* webFrame = qobject_cast<QWebFrame*>(loader->networkingContext()->originatingObject());
103168513a70bcd92384395513322f1b801e7bf9c729Steve Block            if (webFrame)
103268513a70bcd92384395513322f1b801e7bf9c729Steve Block                rc.append(webFrame);
10338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
10348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
10368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return rc;
10378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the scrollbar policy for the scrollbar defined by \a orientation.
10418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQt::ScrollBarPolicy QWebFrame::scrollBarPolicy(Qt::Orientation orientation) const
10438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (orientation == Qt::Horizontal)
10458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return d->horizontalScrollBarPolicy;
10468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->verticalScrollBarPolicy;
10478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Sets the scrollbar policy for the scrollbar defined by \a orientation to \a policy.
10518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setScrollBarPolicy(Qt::Orientation orientation, Qt::ScrollBarPolicy policy)
10538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Q_ASSERT((int)ScrollbarAuto == (int)Qt::ScrollBarAsNeeded);
10558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Q_ASSERT((int)ScrollbarAlwaysOff == (int)Qt::ScrollBarAlwaysOff);
10568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Q_ASSERT((int)ScrollbarAlwaysOn == (int)Qt::ScrollBarAlwaysOn);
10578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (orientation == Qt::Horizontal) {
10598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->horizontalScrollBarPolicy = policy;
1060635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (d->frame->view()) {
1061dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            d->frame->view()->setHorizontalScrollbarMode((ScrollbarMode)policy, policy != Qt::ScrollBarAsNeeded /* lock */);
1062643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            d->frame->view()->updateCanHaveScrollbars();
1063635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
10648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } else {
10658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d->verticalScrollBarPolicy = policy;
1066635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (d->frame->view()) {
1067dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            d->frame->view()->setVerticalScrollbarMode((ScrollbarMode)policy, policy != Qt::ScrollBarAsNeeded /* lock */);
1068643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            d->frame->view()->updateCanHaveScrollbars();
1069635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        }
10708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
10718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Sets the current \a value for the scrollbar with orientation \a orientation.
10758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The scrollbar forces the \a value to be within the legal range: minimum <= value <= maximum.
10778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Changing the value also updates the thumb position.
10798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa scrollBarMinimum(), scrollBarMaximum()
10818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
10828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setScrollBarValue(Qt::Orientation orientation, int value)
10838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
10848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Scrollbar *sb;
10858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar();
10868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (sb) {
10878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (value < 0)
10888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            value = 0;
10898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        else if (value > scrollBarMaximum(orientation))
10908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            value = scrollBarMaximum(orientation);
1091ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        sb->scrollableArea()->scrollToOffsetWithoutAnimation(orientation == Qt::Horizontal ? HorizontalScrollbar : VerticalScrollbar, value);
10928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
10938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
10948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
10968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the current value for the scrollbar with orientation \a orientation, or 0
10978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if no scrollbar is found for \a orientation.
10988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa scrollBarMinimum(), scrollBarMaximum()
11008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
11018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint QWebFrame::scrollBarValue(Qt::Orientation orientation) const
11028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Scrollbar *sb;
11048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar();
11050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (sb)
11068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return sb->value();
11078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return 0;
11088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
11118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the maximum value for the scrollbar with orientation \a orientation, or 0
11128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if no scrollbar is found for \a orientation.
11138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa scrollBarMinimum()
11158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
11168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint QWebFrame::scrollBarMaximum(Qt::Orientation orientation) const
11178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Scrollbar *sb;
11198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar();
11208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (sb)
11218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return sb->maximum();
11228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return 0;
11238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
11268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Returns the minimum value for the scrollbar with orientation \a orientation.
11278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  The minimum value is always 0.
11298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa scrollBarMaximum()
11318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
11328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint QWebFrame::scrollBarMinimum(Qt::Orientation orientation) const
11338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1134231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    Q_UNUSED(orientation)
11358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return 0;
11368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \since 4.6
1140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  Returns the geometry for the scrollbar with orientation \a orientation.
1141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  If the scrollbar does not exist an empty rect is returned.
1143635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
1144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectQRect QWebFrame::scrollBarGeometry(Qt::Orientation orientation) const
1145635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1146635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Scrollbar *sb;
1147635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar();
1148635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (sb)
1149635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return sb->frameRect();
1150635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return QRect();
1151635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
1152635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1153635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
11548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \since 4.5
11558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  Scrolls the frame \a dx pixels to the right and \a dy pixels downward. Both
11568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \a dx and \a dy may be negative.
11570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1158635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \sa QWebFrame::scrollPosition
11598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
11608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1161635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid QWebFrame::scroll(int dx, int dy)
11628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->view())
11648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
11650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    d->frame->view()->scrollBy(IntSize(dx, dy));
11678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1170635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \property QWebFrame::scrollPosition
1171635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \since 4.5
1172635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \brief the position the frame is currently scrolled to.
11738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
11748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1175635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectQPoint QWebFrame::scrollPosition() const
11768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
11778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->view())
11780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QPoint(0, 0);
11798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1180635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    IntSize ofs = d->frame->view()->scrollOffset();
1181635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return QPoint(ofs.width(), ofs.height());
11828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1184635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid QWebFrame::setScrollPosition(const QPoint &pos)
11858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1186635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    QPoint current = scrollPosition();
1187635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    int dx = pos.x() - current.x();
1188635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    int dy = pos.y() - current.y();
11898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    scroll(dx, dy);
11908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
11918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
11928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1193692e5dbf12901edacf14812a6fae25462920af42Steve Block  \since 4.7
1194692e5dbf12901edacf14812a6fae25462920af42Steve Block  Scrolls the frame to the given \a anchor name.
1195692e5dbf12901edacf14812a6fae25462920af42Steve Block*/
1196692e5dbf12901edacf14812a6fae25462920af42Steve Blockvoid QWebFrame::scrollToAnchor(const QString& anchor)
1197692e5dbf12901edacf14812a6fae25462920af42Steve Block{
1198692e5dbf12901edacf14812a6fae25462920af42Steve Block    FrameView *view = d->frame->view();
1199692e5dbf12901edacf14812a6fae25462920af42Steve Block    if (view)
1200692e5dbf12901edacf14812a6fae25462920af42Steve Block        view->scrollToAnchor(anchor);
1201692e5dbf12901edacf14812a6fae25462920af42Steve Block}
1202692e5dbf12901edacf14812a6fae25462920af42Steve Block
1203692e5dbf12901edacf14812a6fae25462920af42Steve Block/*!
1204cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  \since 4.6
1205cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  Render the \a layer of the frame using \a painter clipping to \a clip.
12068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa print()
12088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
12098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1210cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid QWebFrame::render(QPainter* painter, RenderLayer layer, const QRegion& clip)
12118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1212643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext context(painter);
1213643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (context.paintingDisabled() && !context.updatingControlTints())
1214643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
1215643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1216cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    if (!clip.isEmpty())
1217643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        d->renderRelativeCoords(&context, layer, clip);
1218cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    else if (d->frame->view())
1219643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        d->renderRelativeCoords(&context, layer, QRegion(d->frame->view()->frameRect()));
1220635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
12218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1222635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
1223cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  Render the frame into \a painter clipping to \a clip.
12240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
1225643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid QWebFrame::render(QPainter* painter, const QRegion& clip)
12260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext context(painter);
1228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (context.paintingDisabled() && !context.updatingControlTints())
1229643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
1230643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1231643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    d->renderRelativeCoords(&context, AllLayers, clip);
12320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
12330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
1235cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block  Render the frame into \a painter.
1236635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
1237643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid QWebFrame::render(QPainter* painter)
1238635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1239cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    if (!d->frame->view())
1240cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        return;
1241cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
1242643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    GraphicsContext context(painter);
1243643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (context.paintingDisabled() && !context.updatingControlTints())
1244643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
1245643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    d->renderRelativeCoords(&context, AllLayers, QRegion(d->frame->view()->frameRect()));
12478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
12508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::textSizeMultiplier
12518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the scaling factor for all text in the frame
12528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \obsolete
12538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Use setZoomFactor instead, in combination with the ZoomTextOnly attribute in
12558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebSettings.
12568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \note Setting this property also enables the ZoomTextOnly attribute in
12588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebSettings.
12598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
12608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1261635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
1262635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Sets the value of the multiplier used to scale the text in a Web frame to
1263635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    the \a factor specified.
1264635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
12658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setTextSizeMultiplier(qreal factor)
12668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
126768513a70bcd92384395513322f1b801e7bf9c729Steve Block    page()->settings()->setAttribute(QWebSettings::ZoomTextOnly, true);
12685af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
126968513a70bcd92384395513322f1b801e7bf9c729Steve Block    d->frame->setPageAndTextZoomFactors(1, factor);
12708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1272635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
1273635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Returns the value of the multiplier used to scale the text in a Web frame.
1274635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
12758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectqreal QWebFrame::textSizeMultiplier() const
12768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12776b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    return page()->settings()->testAttribute(QWebSettings::ZoomTextOnly) ? d->frame->textZoomFactor() : d->frame->pageZoomFactor();
12788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
12818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::zoomFactor
12828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \since 4.5
12838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the zoom factor for the frame
12848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
12858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::setZoomFactor(qreal factor)
12878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    if (page()->settings()->testAttribute(QWebSettings::ZoomTextOnly))
128968513a70bcd92384395513322f1b801e7bf9c729Steve Block        d->frame->setTextZoomFactor(factor);
129068513a70bcd92384395513322f1b801e7bf9c729Steve Block    else
129168513a70bcd92384395513322f1b801e7bf9c729Steve Block        d->frame->setPageZoomFactor(factor);
12928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectqreal QWebFrame::zoomFactor() const
12958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
12966b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    return page()->settings()->testAttribute(QWebSettings::ZoomTextOnly) ? d->frame->textZoomFactor() : d->frame->pageZoomFactor();
12978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
12988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
12998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
13000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \property QWebFrame::focus
13010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
13020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns true if this frame has keyboard input focus; otherwise, returns false.
13040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
13050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool QWebFrame::hasFocus() const
13060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1307231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    WebCore::Frame* ff = d->frame->page()->focusController()->focusedFrame();
1308231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return ff && QWebFramePrivate::kit(ff) == this;
13090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
13100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
13120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
13130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Gives keyboard input focus to this frame.
13150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
13160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid QWebFrame::setFocus()
13170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
13180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebFramePrivate::core(this)->page()->focusController()->setFocusedFrame(QWebFramePrivate::core(this));
13190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
13200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
13228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the position of the frame relative to it's parent frame.
13238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
13248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQPoint QWebFrame::pos() const
13258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
13268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->view())
13278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QPoint();
13288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    return d->frame->view()->frameRect().location();
13308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
13318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
13338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Return the geometry of the frame relative to it's parent frame.
13348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
13358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQRect QWebFrame::geometry() const
13368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
13378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->view())
13388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QRect();
13398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->frame->view()->frameRect();
13408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
13418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
13438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \property QWebFrame::contentsSize
13448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief the size of the contents in this frame
1345635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
13460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa contentsSizeChanged()
13478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
13488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQSize QWebFrame::contentsSize() const
13498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
13508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FrameView *view = d->frame->view();
13518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!view)
13528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QSize();
13538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QSize(view->contentsWidth(), view->contentsHeight());
13548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
13558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
13568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
13570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
13580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the document element of this frame.
13600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    The document element provides access to the entire structured
13620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    content of the frame.
13630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
13640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebFrame::documentElement() const
13650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
13660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebCore::Document *doc = d->frame->document();
13670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!doc)
13680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QWebElement();
13690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return QWebElement(doc->documentElement());
13700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
13710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
13730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
13740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns a new list of elements matching the given CSS selector \a selectorQuery.
13750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    If there are no matching elements, an empty list is returned.
13760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \l{http://www.w3.org/TR/REC-CSS2/selector.html#q1}{Standard CSS2 selector} syntax is
13780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    used for the query.
13790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa QWebElement::findAll()
13810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
1382cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve BlockQWebElementCollection QWebFrame::findAllElements(const QString &selectorQuery) const
13830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
13840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return documentElement().findAll(selectorQuery);
13850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
13860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
13880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
13890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the first element in the frame's document that matches the
13900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    given CSS selector \a selectorQuery. If there is no matching element, a
13910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    null element is returned.
13920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \l{http://www.w3.org/TR/REC-CSS2/selector.html#q1}{Standard CSS2 selector} syntax is
13940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    used for the query.
13950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa QWebElement::findFirst()
13970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
13980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebFrame::findFirstElement(const QString &selectorQuery) const
13990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
14000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return documentElement().findFirst(selectorQuery);
14010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
14020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
14048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Performs a hit test on the frame contents at the given position \a pos and returns the hit test result.
14058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
14068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult QWebFrame::hitTestContent(const QPoint &pos) const
14078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
14088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d->frame->view() || !d->frame->contentRenderer())
14098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QWebHitTestResult();
14108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1411563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    HitTestResult result = d->frame->eventHandler()->hitTestResultAtPoint(d->frame->view()->windowToContents(pos), /*allowShadowContent*/ false, /*ignoreClipping*/ true);
14120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (result.scrollbar())
14140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QWebHitTestResult();
14150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QWebHitTestResult(new QWebHitTestResultPrivate(result));
14178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
14188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! \reimp
14208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
14218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebFrame::event(QEvent *e)
14228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
14238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return QObject::event(e);
14248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
14258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef QT_NO_PRINTER
14278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
14288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Prints the frame to the given \a printer.
14298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa render()
14318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
14328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid QWebFrame::print(QPrinter *printer) const
14338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1434563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    QPainter painter;
1435563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!painter.begin(printer))
1436563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return;
1437563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
143806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    const qreal zoomFactorX = (qreal)printer->logicalDpiX() / qt_defaultDpi();
143906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    const qreal zoomFactorY = (qreal)printer->logicalDpiY() / qt_defaultDpi();
14408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PrintContext printContext(d->frame);
14428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float pageHeight = 0;
14438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QRect qprinterRect = printer->pageRect();
14458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntRect pageRect(0, 0,
14478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                     int(qprinterRect.width() / zoomFactorX),
14488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                     int(qprinterRect.height() / zoomFactorY));
14498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    printContext.begin(pageRect.width());
14518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    printContext.computePageRects(pageRect, /* headerHeight */ 0, /* footerHeight */ 0, /* userScaleFactor */ 1.0, pageHeight);
14538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int docCopies;
14558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int pageCopies;
14560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (printer->collateCopies()) {
14578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        docCopies = 1;
14588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pageCopies = printer->numCopies();
14598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } else {
14608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        docCopies = printer->numCopies();
14618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        pageCopies = 1;
14628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
14638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int fromPage = printer->fromPage();
14658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int toPage = printer->toPage();
14668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool ascending = true;
14678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (fromPage == 0 && toPage == 0) {
14698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        fromPage = 1;
14708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        toPage = printContext.pageCount();
14718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
14728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // paranoia check
14738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    fromPage = qMax(1, fromPage);
147465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    toPage = qMin(static_cast<int>(printContext.pageCount()), toPage);
1475d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (toPage < fromPage) {
1476d0825bca7fe65beaee391d30da42e937db621564Steve Block        // if the user entered a page range outside the actual number
1477d0825bca7fe65beaee391d30da42e937db621564Steve Block        // of printable pages, just return
1478d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
1479d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
14808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (printer->pageOrder() == QPrinter::LastPageFirst) {
14828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int tmp = fromPage;
14838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        fromPage = toPage;
14848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        toPage = tmp;
14858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ascending = false;
14868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
14878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    painter.scale(zoomFactorX, zoomFactorY);
14898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    GraphicsContext ctx(&painter);
14908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
14918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (int i = 0; i < docCopies; ++i) {
14928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int page = fromPage;
14938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        while (true) {
14948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            for (int j = 0; j < pageCopies; ++j) {
14958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                if (printer->printerState() == QPrinter::Aborted
14968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    || printer->printerState() == QPrinter::Error) {
14978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    printContext.end();
14988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    return;
14998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                }
15008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                printContext.spoolPage(ctx, page - 1, pageRect.width());
15018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                if (j < pageCopies - 1)
15028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    printer->newPage();
15038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            }
15048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (page == toPage)
15068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                break;
15078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (ascending)
15098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                ++page;
15108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            else
15118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                --page;
15128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            printer->newPage();
15148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
15158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if ( i < docCopies - 1)
15178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            printer->newPage();
15188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
15198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    printContext.end();
15218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
15228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // QT_NO_PRINTER
15238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1525563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    Evaluates the JavaScript defined by \a scriptSource using this frame as context
1526563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    and returns the result of the last executed statement.
15278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa addToJavaScriptWindowObject(), javaScriptWindowObjectCleared()
15298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
15308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQVariant QWebFrame::evaluateJavaScript(const QString& scriptSource)
15318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
15328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ScriptController *proxy = d->frame->script();
15338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QVariant rc;
15348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (proxy) {
153568513a70bcd92384395513322f1b801e7bf9c729Steve Block#if USE(JSC)
15360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        int distance = 0;
153768513a70bcd92384395513322f1b801e7bf9c729Steve Block        JSC::JSValue v = d->frame->script()->executeScript(ScriptSourceCode(scriptSource)).jsValue();
153868513a70bcd92384395513322f1b801e7bf9c729Steve Block
1539cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        rc = JSC::Bindings::convertValueToQVariant(proxy->globalObject(mainThreadNormalWorld())->globalExec(), v, QMetaType::Void, &distance);
154068513a70bcd92384395513322f1b801e7bf9c729Steve Block#elif USE(V8)
154168513a70bcd92384395513322f1b801e7bf9c729Steve Block        QScriptEngine* engine = d->frame->script()->qtScriptEngine();
154268513a70bcd92384395513322f1b801e7bf9c729Steve Block        if (!engine)
154368513a70bcd92384395513322f1b801e7bf9c729Steve Block            return rc;
154468513a70bcd92384395513322f1b801e7bf9c729Steve Block        rc = engine->evaluate(scriptSource).toVariant();
154568513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif
15468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
15478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return rc;
15488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
15498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1550635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
1551635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \since 4.5
1552635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1553635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Returns the frame's security origin.
1554635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
1555635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectQWebSecurityOrigin QWebFrame::securityOrigin() const
1556635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1557635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    QWebFrame* that = const_cast<QWebFrame*>(this);
1558635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    QWebSecurityOriginPrivate* priv = new QWebSecurityOriginPrivate(QWebFramePrivate::core(that)->document()->securityOrigin());
1559635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return QWebSecurityOrigin(priv);
1560635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
1561635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1562e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockWebCore::Frame* QWebFramePrivate::core(const QWebFrame* webFrame)
15638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
15648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return webFrame->d->frame;
15658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
15668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1567e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockQWebFrame* QWebFramePrivate::kit(const WebCore::Frame* coreFrame)
15688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
156968513a70bcd92384395513322f1b801e7bf9c729Steve Block    return qobject_cast<QWebFrame*>(coreFrame->loader()->networkingContext()->originatingObject());
15708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
15718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
15748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \fn void QWebFrame::javaScriptWindowObjectCleared()
15758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This signal is emitted whenever the global window object of the JavaScript
15778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    environment is cleared, e.g., before starting a new load.
15788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    If you intend to add QObjects to a QWebFrame using
15808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    addToJavaScriptWindowObject(), you should add them in a slot connected
15818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    to this signal. This ensures that your objects remain accessible when
15828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    loading new URLs.
15838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
15848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
15868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \fn void QWebFrame::provisionalLoad()
15878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \internal
15888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
15898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
15918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \fn void QWebFrame::titleChanged(const QString &title)
15928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This signal is emitted whenever the title of the frame changes.
15948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    The \a title string specifies the new title.
15958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa title()
15978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
15988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
16008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \fn void QWebFrame::urlChanged(const QUrl &url)
16018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This signal is emitted with the URL of the frame when the frame's title is
16038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    received. The new URL is specified by \a url.
16048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \sa url()
16068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
16078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
16098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \fn void QWebFrame::initialLayoutCompleted()
16108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This signal is emitted when the frame is laid out the first time.
16128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This is the first time you will see contents displayed on the frame.
16138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \note A frame can be laid out multiple times.
16158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
16168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
16188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \fn void QWebFrame::iconChanged()
16198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  This signal is emitted when the icon ("favicon") associated with the frame
16218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  has been loaded.
16228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  \sa icon()
16248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
16258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1627635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \fn void QWebFrame::contentsSizeChanged(const QSize &size)
1628635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \since 4.6
16298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  This signal is emitted when the frame's contents size changes
16310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  to \a size.
16328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1633635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project  \sa contentsSize()
16348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
16358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
16370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \fn void QWebFrame::loadStarted()
16380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
16390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    This signal is emitted when a new load of this frame is started.
16410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa loadFinished()
16430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
16440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
16460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \fn void QWebFrame::loadFinished(bool ok)
16470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
16480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    This signal is emitted when a load of this frame is finished.
16500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \a ok will indicate whether the load was successful or any error occurred.
16510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa loadStarted()
16530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
16540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
1656dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    \fn void QWebFrame::pageChanged()
1657dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    \since 4.7
1658dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1659dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    This signal is emitted when this frame has been moved to a different QWebPage.
1660dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1661dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    \sa page()
1662dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block*/
1663dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
1664dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/*!
16658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \class QWebHitTestResult
16668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \since 4.4
16678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \brief The QWebHitTestResult class provides information about the web
16688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    page content after a hit test.
16698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1670231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    \inmodule QtWebKit
1671231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
16728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QWebHitTestResult is returned by QWebFrame::hitTestContent() to provide
16738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    information about the content of the web page at the specified position.
16748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
16758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
16778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \internal
16788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
16798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult::QWebHitTestResult(QWebHitTestResultPrivate *priv)
16808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : d(priv)
16818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
16828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
16838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResultPrivate::QWebHitTestResultPrivate(const WebCore::HitTestResult &hitTest)
16858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : isContentEditable(false)
16868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , isContentSelected(false)
1687635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    , isScrollBar(false)
16888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
16898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!hitTest.innerNode())
16908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
16918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    pos = hitTest.point();
16920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WebCore::TextDirection dir;
16930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    title = hitTest.title(dir);
16948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    linkText = hitTest.textContent();
16958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    linkUrl = hitTest.absoluteLinkURL();
16968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    linkTitle = hitTest.titleDisplayString();
16978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    alternateText = hitTest.altDisplayString();
16988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    imageUrl = hitTest.absoluteImageURL();
1699635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    innerNode = hitTest.innerNode();
17008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    innerNonSharedNode = hitTest.innerNonSharedNode();
1701cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    boundingRect = innerNonSharedNode ? innerNonSharedNode->renderer()->absoluteBoundingBoxRect(true) : IntRect();
17028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::Image *img = hitTest.image();
17038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (img) {
17048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QPixmap *pix = img->nativeImageForCurrentFrame();
17058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (pix)
17068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            pixmap = *pix;
17078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
17088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::Frame *wframe = hitTest.targetFrame();
17098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (wframe)
17108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        linkTargetFrame = QWebFramePrivate::kit(wframe);
17110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    linkElement = QWebElement(hitTest.URLElement());
17128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    isContentEditable = hitTest.isContentEditable();
17148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    isContentSelected = hitTest.isSelected();
1715635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    isScrollBar = hitTest.scrollbar();
17168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (innerNonSharedNode && innerNonSharedNode->document()
17188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        && innerNonSharedNode->document()->frame())
17198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        frame = QWebFramePrivate::kit(innerNonSharedNode->document()->frame());
1720635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
17210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    enclosingBlock = QWebElement(WebCore::enclosingBlock(innerNode.get()));
17228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Constructs a null hit test result.
17268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult::QWebHitTestResult()
17288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : d(0)
17298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Constructs a hit test result from \a other.
17348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult::QWebHitTestResult(const QWebHitTestResult &other)
17368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : d(0)
17378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (other.d)
17398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        d = new QWebHitTestResultPrivate(*other.d);
17408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Assigns the \a other hit test result to this.
17448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult &QWebHitTestResult::operator=(const QWebHitTestResult &other)
17468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (this != &other) {
17488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (other.d) {
17498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (!d)
17508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                d = new QWebHitTestResultPrivate;
17518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            *d = *other.d;
17528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } else {
17538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            delete d;
17548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            d = 0;
17558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
17568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
17578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return *this;
17588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Destructor.
17628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebHitTestResult::~QWebHitTestResult()
17648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    delete d;
17668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns true if the hit test result is null; otherwise returns false.
17708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebHitTestResult::isNull() const
17728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return !d;
17748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the position where the hit test occured.
17788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQPoint QWebHitTestResult::pos() const
17808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
17828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QPoint();
17838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->pos;
17848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
17878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    \since 4.5
1788635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Returns the bounding rect of the element.
17898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
17908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQRect QWebHitTestResult::boundingRect() const
17918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
17938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QRect();
17948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->boundingRect;
17958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1798635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    \since 4.6
17990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the block element that encloses the element hit.
18000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
18010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    A block element is an element that is rendered using the
18020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    CSS "block" style. This includes for example text
18030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    paragraphs.
1804635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
18050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebHitTestResult::enclosingBlockElement() const
1806635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1807635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!d)
18080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QWebElement();
1809635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return d->enclosingBlock;
1810635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
1811635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1812635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
18138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the title of the nearest enclosing HTML element.
18148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebHitTestResult::title() const
18168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QString();
18198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->title;
18208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the text of the link.
18248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebHitTestResult::linkText() const
18268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QString();
18298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->linkText;
18308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the url to which the link points to.
18348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQUrl QWebHitTestResult::linkUrl() const
18368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QUrl();
18398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->linkUrl;
18408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the title of the link.
18448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQUrl QWebHitTestResult::linkTitle() const
18468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QUrl();
18498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->linkTitle;
18508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
1853563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark  \since 4.6
18540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  Returns the element that represents the link.
1855563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
18560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  \sa linkTargetFrame()
1857563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark*/
18580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebHitTestResult::linkElement() const
1859563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
1860563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!d)
18610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QWebElement();
18620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return d->linkElement;
1863563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
1864563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
1865563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*!
18668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the frame that will load the link if it is activated.
1867563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
18680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \sa linkElement()
18698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQWebFrame *QWebHitTestResult::linkTargetFrame() const
18718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return 0;
18748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->linkTargetFrame;
18758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the alternate text of the element. This corresponds to the HTML alt attribute.
18798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQString QWebHitTestResult::alternateText() const
18818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QString();
18848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->alternateText;
18858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns the url of the image.
18898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
18908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQUrl QWebHitTestResult::imageUrl() const
18918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
18928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
18938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QUrl();
18948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->imageUrl;
18958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
18968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
18978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
18988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns a QPixmap containing the image. A null pixmap is returned if the
18998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    element being tested is not an image.
19008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
19018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQPixmap QWebHitTestResult::pixmap() const
19028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
19038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
19048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return QPixmap();
19058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->pixmap;
19068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
19078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
19088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
19098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns true if the content is editable by the user; otherwise returns false.
19108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
19118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebHitTestResult::isContentEditable() const
19128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
19138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
19148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
19158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->isContentEditable;
19168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
19178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
19188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
19198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Returns true if the content tested is part of the selection; otherwise returns false.
19208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
19218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool QWebHitTestResult::isContentSelected() const
19228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
19238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!d)
19248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
19258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return d->isContentSelected;
19268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
19278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
19288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*!
19290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    \since 4.6
19300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the underlying DOM element as QWebElement.
19318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
19320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebElement QWebHitTestResult::element() const
19338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
19340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!d || !d->innerNonSharedNode || !d->innerNonSharedNode->isElementNode())
19350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return QWebElement();
19360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
19370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return QWebElement(static_cast<WebCore::Element*>(d->innerNonSharedNode.get()));
19388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
19398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1940635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*!
19410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Returns the frame the hit test was executed in.
1942635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project*/
19430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQWebFrame *QWebHitTestResult::frame() const
1944635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1945635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!d)
19460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return 0;
19470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return d->frame;
1948635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
19492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
19502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "moc_qwebframe.cpp"
1951